{"version":3,"file":"js/4603-5ef6cec18d3809ced9c4.js","mappings":";0GAEA,IAAIA,EAAS,EAAQ,OAerB,SAASC,EAAKC,GACV,IAAIC,EAAS,CAACC,EAAAA,EAAUA,EAAAA,GAAWA,EAAAA,GAAWA,EAAAA,GAe9C,OAdAJ,EAAOK,UAAUH,GAAS,SAAUI,GAC5BH,EAAO,GAAKG,EAAM,KAClBH,EAAO,GAAKG,EAAM,IAElBH,EAAO,GAAKG,EAAM,KAClBH,EAAO,GAAKG,EAAM,IAElBH,EAAO,GAAKG,EAAM,KAClBH,EAAO,GAAKG,EAAM,IAElBH,EAAO,GAAKG,EAAM,KAClBH,EAAO,GAAKG,EAAM,OAGnBH,EAEXF,EAAc,QAAIA,EAClBM,EAAQ,EAAUN,qBCnC8CO,EAAOD,QAG/D,WAAe,aAEvB,SAASE,EAAYC,EAAKC,EAAGC,EAAMC,EAAOC,GACtCC,EAAgBL,EAAKC,EAAGC,GAAQ,EAAGC,GAAUH,EAAIM,OAAS,EAAIF,GAAWG,GAG7E,SAASF,EAAgBL,EAAKC,EAAGC,EAAMC,EAAOC,GAE1C,KAAOD,EAAQD,GAAM,CACjB,GAAIC,EAAQD,EAAO,IAAK,CACpB,IAAIM,EAAIL,EAAQD,EAAO,EACnBO,EAAIR,EAAIC,EAAO,EACfQ,EAAIC,KAAKC,IAAIJ,GACbK,EAAI,GAAMF,KAAKG,IAAI,EAAIJ,EAAI,GAC3BK,EAAK,GAAMJ,KAAKK,KAAKN,EAAIG,GAAKL,EAAIK,GAAKL,IAAMC,EAAID,EAAI,EAAI,GAAK,EAAI,GAGtEH,EAAgBL,EAAKC,EAFPU,KAAKM,IAAIf,EAAMS,KAAKO,MAAMjB,EAAIQ,EAAII,EAAIL,EAAIO,IACzCJ,KAAKQ,IAAIhB,EAAOQ,KAAKO,MAAMjB,GAAKO,EAAIC,GAAKI,EAAIL,EAAIO,IACrBX,GAG/C,IAAIgB,EAAIpB,EAAIC,GACRoB,EAAInB,EACJoB,EAAInB,EAKR,IAHAoB,EAAKvB,EAAKE,EAAMD,GACZG,EAAQJ,EAAIG,GAAQiB,GAAK,GAAGG,EAAKvB,EAAKE,EAAMC,GAEzCkB,EAAIC,GAAG,CAIV,IAHAC,EAAKvB,EAAKqB,EAAGC,GACbD,IACAC,IACOlB,EAAQJ,EAAIqB,GAAID,GAAK,GAAGC,IAC/B,KAAOjB,EAAQJ,EAAIsB,GAAIF,GAAK,GAAGE,IAGL,IAA1BlB,EAAQJ,EAAIE,GAAOkB,GAAUG,EAAKvB,EAAKE,EAAMoB,GAG7CC,EAAKvB,IADLsB,EACanB,GAGbmB,GAAKrB,IAAGC,EAAOoB,EAAI,GACnBrB,GAAKqB,IAAGnB,EAAQmB,EAAI,IAIhC,SAASC,EAAKvB,EAAKqB,EAAGC,GAClB,IAAIE,EAAMxB,EAAIqB,GACdrB,EAAIqB,GAAKrB,EAAIsB,GACbtB,EAAIsB,GAAKE,EAGb,SAASjB,EAAekB,EAAGC,GACvB,OAAOD,EAAIC,GAAK,EAAID,EAAIC,EAAI,EAAI,EAGpC,OAAO3B,EA3D0E4B,oCCCjF7B,EAAOD,QAAU+B,EACjB9B,EAAOD,QAAP,QAAyB+B,EAEzB,IAAI7B,EAAc,EAAQ,OAE1B,SAAS6B,EAAMC,EAAYC,GACvB,KAAMC,gBAAgBH,GAAQ,OAAO,IAAIA,EAAMC,EAAYC,GAG3DC,KAAKC,YAAcrB,KAAKM,IAAI,EAAGY,GAAc,GAC7CE,KAAKE,YAActB,KAAKM,IAAI,EAAGN,KAAKuB,KAAwB,GAAnBH,KAAKC,cAE1CF,GACAC,KAAKI,YAAYL,GAGrBC,KAAKK,QAwbT,SAASC,EAASC,EAAMC,EAAOC,GAC3B,IAAKA,EAAU,OAAOD,EAAME,QAAQH,GAEpC,IAAK,IAAIjB,EAAI,EAAGA,EAAIkB,EAAMjC,OAAQe,IAC9B,GAAImB,EAASF,EAAMC,EAAMlB,IAAK,OAAOA,EAEzC,OAAQ,EAIZ,SAASqB,EAASC,EAAMC,GACpBC,EAASF,EAAM,EAAGA,EAAKG,SAASxC,OAAQsC,EAAQD,GAIpD,SAASE,EAASF,EAAM1C,EAAG8C,EAAGH,EAAQI,GAC7BA,IAAUA,EAAWC,EAAW,OACrCD,EAASE,KAAOxD,EAAAA,EAChBsD,EAASG,KAAOzD,EAAAA,EAChBsD,EAASI,MAAQ1D,EAAAA,EACjBsD,EAASK,MAAQ3D,EAAAA,EAEjB,IAAK,IAAW4D,EAAPjC,EAAIpB,EAAUoB,EAAI0B,EAAG1B,IAC1BiC,EAAQX,EAAKG,SAASzB,GACtBkC,EAAOP,EAAUL,EAAKa,KAAOZ,EAAOU,GAASA,GAGjD,OAAON,EAGX,SAASO,EAAO9B,EAAGC,GAKf,OAJAD,EAAEyB,KAAOvC,KAAKQ,IAAIM,EAAEyB,KAAMxB,EAAEwB,MAC5BzB,EAAE0B,KAAOxC,KAAKQ,IAAIM,EAAE0B,KAAMzB,EAAEyB,MAC5B1B,EAAE2B,KAAOzC,KAAKM,IAAIQ,EAAE2B,KAAM1B,EAAE0B,MAC5B3B,EAAE4B,KAAO1C,KAAKM,IAAIQ,EAAE4B,KAAM3B,EAAE2B,MACrB5B,EAGX,SAASgC,EAAgBhC,EAAGC,GAAK,OAAOD,EAAEyB,KAAOxB,EAAEwB,KACnD,SAASQ,EAAgBjC,EAAGC,GAAK,OAAOD,EAAE0B,KAAOzB,EAAEyB,KAEnD,SAASQ,EAASlC,GAAO,OAAQA,EAAE2B,KAAO3B,EAAEyB,OAASzB,EAAE4B,KAAO5B,EAAE0B,MAChE,SAASS,EAAWnC,GAAK,OAAQA,EAAE2B,KAAO3B,EAAEyB,MAASzB,EAAE4B,KAAO5B,EAAE0B,MAiBhE,SAASU,EAASpC,EAAGC,GACjB,OAAOD,EAAEyB,MAAQxB,EAAEwB,MACZzB,EAAE0B,MAAQzB,EAAEyB,MACZzB,EAAE0B,MAAQ3B,EAAE2B,MACZ1B,EAAE2B,MAAQ5B,EAAE4B,KAGvB,SAASS,EAAWrC,EAAGC,GACnB,OAAOA,EAAEwB,MAAQzB,EAAE2B,MACZ1B,EAAEyB,MAAQ1B,EAAE4B,MACZ3B,EAAE0B,MAAQ3B,EAAEyB,MACZxB,EAAE2B,MAAQ5B,EAAE0B,KAGvB,SAASF,EAAWH,GAChB,MAAO,CACHA,SAAUA,EACViB,OAAQ,EACRP,MAAM,EACNN,KAAMxD,EAAAA,EACNyD,KAAMzD,EAAAA,EACN0D,MAAO1D,EAAAA,EACP2D,MAAO3D,EAAAA,GAOf,SAASsE,EAAYhE,EAAKE,EAAMC,EAAOK,EAAGJ,GAItC,IAHA,IACI6D,EADAC,EAAQ,CAAChE,EAAMC,GAGZ+D,EAAM5D,SACTH,EAAQ+D,EAAMC,QACdjE,EAAOgE,EAAMC,QAEO3D,IAEpByD,EAAM/D,EAAOS,KAAKuB,MAAM/B,EAAQD,GAAQM,EAAI,GAAKA,EACjDT,EAAYC,EAAKiE,EAAK/D,EAAMC,EAAOC,GAEnC8D,EAAME,KAAKlE,EAAM+D,EAAKA,EAAK9D,IA1hBnCyB,EAAMyC,UAAY,CAEdC,IAAK,WACD,OAAOvC,KAAKwC,KAAKxC,KAAKyC,KAAM,KAGhCC,OAAQ,SAAUlF,GAEd,IAAIoD,EAAOZ,KAAKyC,KACZ/E,EAAS,GACTmD,EAASb,KAAKa,OAElB,IAAKkB,EAAWvE,EAAMoD,GAAO,OAAOlD,EAKpC,IAHA,IACI4B,EAAGqD,EAAKpB,EAAOqB,EADfC,EAAgB,GAGbjC,GAAM,CACT,IAAKtB,EAAI,EAAGqD,EAAM/B,EAAKG,SAASxC,OAAQe,EAAIqD,EAAKrD,IAE7CiC,EAAQX,EAAKG,SAASzB,GAGlByC,EAAWvE,EAFfoF,EAAYhC,EAAKa,KAAOZ,EAAOU,GAASA,KAGhCX,EAAKa,KAAM/D,EAAO2E,KAAKd,GAClBO,EAAStE,EAAMoF,GAAY5C,KAAKwC,KAAKjB,EAAO7D,GAChDmF,EAAcR,KAAKd,IAGhCX,EAAOiC,EAAcT,MAGzB,OAAO1E,GAGXoF,SAAU,SAAUtF,GAEhB,IAAIoD,EAAOZ,KAAKyC,KACZ5B,EAASb,KAAKa,OAElB,IAAKkB,EAAWvE,EAAMoD,GAAO,OAAO,EAKpC,IAHA,IACItB,EAAGqD,EAAKpB,EAAOqB,EADfC,EAAgB,GAGbjC,GAAM,CACT,IAAKtB,EAAI,EAAGqD,EAAM/B,EAAKG,SAASxC,OAAQe,EAAIqD,EAAKrD,IAK7C,GAHAiC,EAAQX,EAAKG,SAASzB,GAGlByC,EAAWvE,EAFfoF,EAAYhC,EAAKa,KAAOZ,EAAOU,GAASA,GAEP,CAC7B,GAAIX,EAAKa,MAAQK,EAAStE,EAAMoF,GAAY,OAAO,EACnDC,EAAcR,KAAKd,GAG3BX,EAAOiC,EAAcT,MAGzB,OAAO,GAGXW,KAAM,SAAUN,GACZ,IAAMA,IAAQA,EAAKlE,OAAS,OAAOyB,KAEnC,GAAIyC,EAAKlE,OAASyB,KAAKE,YAAa,CAChC,IAAK,IAAIZ,EAAI,EAAGqD,EAAMF,EAAKlE,OAAQe,EAAIqD,EAAKrD,IACxCU,KAAKgD,OAAOP,EAAKnD,IAErB,OAAOU,KAIX,IAAIY,EAAOZ,KAAKiD,OAAOR,EAAKS,QAAS,EAAGT,EAAKlE,OAAS,EAAG,GAEzD,GAAKyB,KAAKyC,KAAK1B,SAASxC,OAIjB,GAAIyB,KAAKyC,KAAKT,SAAWpB,EAAKoB,OAEjChC,KAAKmD,WAAWnD,KAAKyC,KAAM7B,OAExB,CACH,GAAIZ,KAAKyC,KAAKT,OAASpB,EAAKoB,OAAQ,CAEhC,IAAIoB,EAAUpD,KAAKyC,KACnBzC,KAAKyC,KAAO7B,EACZA,EAAOwC,EAIXpD,KAAKqD,QAAQzC,EAAMZ,KAAKyC,KAAKT,OAASpB,EAAKoB,OAAS,GAAG,QAfvDhC,KAAKyC,KAAO7B,EAkBhB,OAAOZ,MAGXgD,OAAQ,SAAUzC,GAEd,OADIA,GAAMP,KAAKqD,QAAQ9C,EAAMP,KAAKyC,KAAKT,OAAS,GACzChC,MAGXK,MAAO,WAEH,OADAL,KAAKyC,KAAOvB,EAAW,IAChBlB,MAGXsD,OAAQ,SAAU/C,EAAME,GACpB,IAAKF,EAAM,OAAOP,KASlB,IAPA,IAIIV,EAAGiE,EAAQC,EAAOC,EAJlB7C,EAAOZ,KAAKyC,KACZjF,EAAOwC,KAAKa,OAAON,GACnBmD,EAAO,GACPC,EAAU,GAIP/C,GAAQ8C,EAAKnF,QAAQ,CASxB,GAPKqC,IACDA,EAAO8C,EAAKtB,MACZmB,EAASG,EAAKA,EAAKnF,OAAS,GAC5Be,EAAIqE,EAAQvB,MACZqB,GAAU,GAGV7C,EAAKa,OAGU,KAFf+B,EAAQlD,EAASC,EAAMK,EAAKG,SAAUN,IAOlC,OAHAG,EAAKG,SAAS6C,OAAOJ,EAAO,GAC5BE,EAAKrB,KAAKzB,GACVZ,KAAK6D,UAAUH,GACR1D,KAIVyD,GAAY7C,EAAKa,OAAQK,EAASlB,EAAMpD,GAOlC+F,GACPjE,IACAsB,EAAO2C,EAAOxC,SAASzB,GACvBmE,GAAU,GAEP7C,EAAO,MAXV8C,EAAKrB,KAAKzB,GACV+C,EAAQtB,KAAK/C,GACbA,EAAI,EACJiE,EAAS3C,EACTA,EAAOA,EAAKG,SAAS,IAU7B,OAAOf,MAGXa,OAAQ,SAAUN,GAAQ,OAAOA,GAEjCuD,YAAapC,EACbqC,YAAapC,EAEbqC,OAAQ,WAAc,OAAOhE,KAAKyC,MAElCwB,SAAU,SAAUxB,GAEhB,OADAzC,KAAKyC,KAAOA,EACLzC,MAGXwC,KAAM,SAAU5B,EAAMlD,GAElB,IADA,IAAImF,EAAgB,GACbjC,GACCA,EAAKa,KAAM/D,EAAO2E,KAAK6B,MAAMxG,EAAQkD,EAAKG,UACzC8B,EAAcR,KAAK6B,MAAMrB,EAAejC,EAAKG,UAElDH,EAAOiC,EAAcT,MAEzB,OAAO1E,GAGXuF,OAAQ,SAAUzC,EAAOrC,EAAMC,EAAO4D,GAElC,IAEIpB,EAFAuD,EAAI/F,EAAQD,EAAO,EACnBiG,EAAIpE,KAAKC,YAGb,GAAIkE,GAAKC,EAIL,OADAzD,EADAC,EAAOM,EAAWV,EAAM0C,MAAM/E,EAAMC,EAAQ,IAC7B4B,KAAKa,QACbD,EAGNoB,IAEDA,EAASpD,KAAKuB,KAAKvB,KAAKC,IAAIsF,GAAKvF,KAAKC,IAAIuF,IAG1CA,EAAIxF,KAAKuB,KAAKgE,EAAIvF,KAAKyF,IAAID,EAAGpC,EAAS,MAG3CpB,EAAOM,EAAW,KACbO,MAAO,EACZb,EAAKoB,OAASA,EAId,IAEI1C,EAAGC,EAAG+E,EAAQC,EAFdC,EAAK5F,KAAKuB,KAAKgE,EAAIC,GACnBK,EAAKD,EAAK5F,KAAKuB,KAAKvB,KAAKK,KAAKmF,IAKlC,IAFAnC,EAAYzB,EAAOrC,EAAMC,EAAOqG,EAAIzE,KAAK8D,aAEpCxE,EAAInB,EAAMmB,GAAKlB,EAAOkB,GAAKmF,EAM5B,IAFAxC,EAAYzB,EAAOlB,EAFnBgF,EAAS1F,KAAKQ,IAAIE,EAAImF,EAAK,EAAGrG,GAEAoG,EAAIxE,KAAK+D,aAElCxE,EAAID,EAAGC,GAAK+E,EAAQ/E,GAAKiF,EAE1BD,EAAS3F,KAAKQ,IAAIG,EAAIiF,EAAK,EAAGF,GAG9B1D,EAAKG,SAASsB,KAAKrC,KAAKiD,OAAOzC,EAAOjB,EAAGgF,EAAQvC,EAAS,IAMlE,OAFArB,EAASC,EAAMZ,KAAKa,QAEbD,GAGX8D,eAAgB,SAAUlH,EAAMoD,EAAM+D,EAAOjB,GAIzC,IAFA,IAAIpE,EAAGqD,EAAKpB,EAAOqD,EAAYC,EAAMC,EAAaC,EAASC,EAsP7CtF,EAAGC,EAnPb+D,EAAKrB,KAAKzB,IAENA,EAAKa,MAAQiC,EAAKnF,OAAS,IAAMoG,GAH5B,CAOT,IAFAI,EAAUC,EAAiBrH,EAAAA,EAEtB2B,EAAI,EAAGqD,EAAM/B,EAAKG,SAASxC,OAAQe,EAAIqD,EAAKrD,IAE7CuF,EAAOjD,EADPL,EAAQX,EAAKG,SAASzB,IA4OhBI,EA1OqBlC,EA0OlBmC,EA1OwB4B,GAAjCuD,GA2OJlG,KAAKM,IAAIS,EAAE0B,KAAM3B,EAAE2B,MAAQzC,KAAKQ,IAAIO,EAAEwB,KAAMzB,EAAEyB,QAC9CvC,KAAKM,IAAIS,EAAE2B,KAAM5B,EAAE4B,MAAQ1C,KAAKQ,IAAIO,EAAEyB,KAAM1B,EAAE0B,OA5OAyD,GAGxBG,GACdA,EAAiBF,EACjBC,EAAUF,EAAOE,EAAUF,EAAOE,EAClCH,EAAarD,GAENuD,IAAgBE,GAEnBH,EAAOE,IACPA,EAAUF,EACVD,EAAarD,GAKzBX,EAAOgE,GAAchE,EAAKG,SAAS,GAGvC,OAAOH,GAGXyC,QAAS,SAAU9C,EAAMoE,EAAOM,GAE5B,IAAIpE,EAASb,KAAKa,OACdrD,EAAOyH,EAAS1E,EAAOM,EAAON,GAC9B2E,EAAa,GAGbtE,EAAOZ,KAAK0E,eAAelH,EAAMwC,KAAKyC,KAAMkC,EAAOO,GAOvD,IAJAtE,EAAKG,SAASsB,KAAK9B,GACnBiB,EAAOZ,EAAMpD,GAGNmH,GAAS,GACRO,EAAWP,GAAO5D,SAASxC,OAASyB,KAAKC,aACzCD,KAAKmF,OAAOD,EAAYP,GACxBA,IAKR3E,KAAKoF,oBAAoB5H,EAAM0H,EAAYP,IAI/CQ,OAAQ,SAAUD,EAAYP,GAE1B,IAAI/D,EAAOsE,EAAWP,GAClBP,EAAIxD,EAAKG,SAASxC,OAClBG,EAAIsB,KAAKE,YAEbF,KAAKqF,iBAAiBzE,EAAMlC,EAAG0F,GAE/B,IAAIkB,EAAatF,KAAKuF,kBAAkB3E,EAAMlC,EAAG0F,GAE7CoB,EAAUtE,EAAWN,EAAKG,SAAS6C,OAAO0B,EAAY1E,EAAKG,SAASxC,OAAS+G,IACjFE,EAAQxD,OAASpB,EAAKoB,OACtBwD,EAAQ/D,KAAOb,EAAKa,KAEpBd,EAASC,EAAMZ,KAAKa,QACpBF,EAAS6E,EAASxF,KAAKa,QAEnB8D,EAAOO,EAAWP,EAAQ,GAAG5D,SAASsB,KAAKmD,GAC1CxF,KAAKmD,WAAWvC,EAAM4E,IAG/BrC,WAAY,SAAUvC,EAAM4E,GAExBxF,KAAKyC,KAAOvB,EAAW,CAACN,EAAM4E,IAC9BxF,KAAKyC,KAAKT,OAASpB,EAAKoB,OAAS,EACjChC,KAAKyC,KAAKhB,MAAO,EACjBd,EAASX,KAAKyC,KAAMzC,KAAKa,SAG7B0E,kBAAmB,SAAU3E,EAAMlC,EAAG0F,GAElC,IAAI9E,EAAGmG,EAAOC,EAAOC,EAASd,EAAMe,EAAYb,EAASvB,EA+JvC9D,EAAGC,EACrBwB,EACAC,EACAC,EACAC,EA/JA,IAFAsE,EAAab,EAAUpH,EAAAA,EAElB2B,EAAIZ,EAAGY,GAAK8E,EAAI1F,EAAGY,IACpBmG,EAAQ3E,EAASF,EAAM,EAAGtB,EAAGU,KAAKa,QAClC6E,EAAQ5E,EAASF,EAAMtB,EAAG8E,EAAGpE,KAAKa,QAyJpBnB,EAvJa+F,EAuJV9F,EAvJiB+F,EAwJtCvE,OAAAA,EACAC,OAAAA,EACAC,OAAAA,EACAC,OAAAA,EAHAH,EAAOvC,KAAKM,IAAIQ,EAAEyB,KAAMxB,EAAEwB,MAC1BC,EAAOxC,KAAKM,IAAIQ,EAAE0B,KAAMzB,EAAEyB,MAC1BC,EAAOzC,KAAKQ,IAAIM,EAAE2B,KAAM1B,EAAE0B,MAC1BC,EAAO1C,KAAKQ,IAAIM,EAAE4B,KAAM3B,EAAE2B,MA3JtBqE,EA6JD/G,KAAKM,IAAI,EAAGmC,EAAOF,GACnBvC,KAAKM,IAAI,EAAGoC,EAAOF,GA7JlByD,EAAOjD,EAAS6D,GAAS7D,EAAS8D,GAG9BC,EAAUC,GACVA,EAAaD,EACbnC,EAAQlE,EAERyF,EAAUF,EAAOE,EAAUF,EAAOE,GAE3BY,IAAYC,GAEff,EAAOE,IACPA,EAAUF,EACVrB,EAAQlE,GAKpB,OAAOkE,GAIX6B,iBAAkB,SAAUzE,EAAMlC,EAAG0F,GAEjC,IAAIN,EAAclD,EAAKa,KAAOzB,KAAK8D,YAAcpC,EAC7CqC,EAAcnD,EAAKa,KAAOzB,KAAK+D,YAAcpC,EACnC3B,KAAK6F,eAAejF,EAAMlC,EAAG0F,EAAGN,GAChC9D,KAAK6F,eAAejF,EAAMlC,EAAG0F,EAAGL,IAIvBnD,EAAKG,SAAS+E,KAAKhC,IAI9C+B,eAAgB,SAAUjF,EAAMlC,EAAG0F,EAAG/F,GAElCuC,EAAKG,SAAS+E,KAAKzH,GAEnB,IAIIiB,EAAGiC,EAJHV,EAASb,KAAKa,OACdkF,EAAWjF,EAASF,EAAM,EAAGlC,EAAGmC,GAChCmF,EAAYlF,EAASF,EAAMwD,EAAI1F,EAAG0F,EAAGvD,GACrCoF,EAASpE,EAAWkE,GAAYlE,EAAWmE,GAG/C,IAAK1G,EAAIZ,EAAGY,EAAI8E,EAAI1F,EAAGY,IACnBiC,EAAQX,EAAKG,SAASzB,GACtBkC,EAAOuE,EAAUnF,EAAKa,KAAOZ,EAAOU,GAASA,GAC7C0E,GAAUpE,EAAWkE,GAGzB,IAAKzG,EAAI8E,EAAI1F,EAAI,EAAGY,GAAKZ,EAAGY,IACxBiC,EAAQX,EAAKG,SAASzB,GACtBkC,EAAOwE,EAAWpF,EAAKa,KAAOZ,EAAOU,GAASA,GAC9C0E,GAAUpE,EAAWmE,GAGzB,OAAOC,GAGXb,oBAAqB,SAAU5H,EAAMkG,EAAMiB,GAEvC,IAAK,IAAIrF,EAAIqF,EAAOrF,GAAK,EAAGA,IACxBkC,EAAOkC,EAAKpE,GAAI9B,IAIxBqG,UAAW,SAAUH,GAEjB,IAAK,IAAyBwC,EAArB5G,EAAIoE,EAAKnF,OAAS,EAAae,GAAK,EAAGA,IACZ,IAA5BoE,EAAKpE,GAAGyB,SAASxC,OACbe,EAAI,GACJ4G,EAAWxC,EAAKpE,EAAI,GAAGyB,UACd6C,OAAOsC,EAASxF,QAAQgD,EAAKpE,IAAK,GAExCU,KAAKK,QAETM,EAAS+C,EAAKpE,GAAIU,KAAKa,SAItCT,YAAa,SAAUL,GAOnB,IAAIoG,EAAa,CAAC,WAAY,OAAQ,KAEtCnG,KAAK8D,YAAc,IAAIsC,SAAS,IAAK,IAAKD,EAAWE,KAAKtG,EAAO,KACjEC,KAAK+D,YAAc,IAAIqC,SAAS,IAAK,IAAKD,EAAWE,KAAKtG,EAAO,KAEjEC,KAAKa,OAAS,IAAIuF,SAAS,IACvB,kBAAoBrG,EAAO,GAC3B,YAAcA,EAAO,GACrB,YAAcA,EAAO,GACrB,YAAcA,EAAO,GAAK,0CClWtC,SAASuG,EAAQC,EAAMC,EAAYC,QACf,IAAZA,IAAsBA,EAAU,IACpC,IAAIC,EAAO,CAAEC,KAAM,WASnB,OARmB,IAAfF,EAAQG,IAAYH,EAAQG,MAC5BF,EAAKE,GAAKH,EAAQG,IAElBH,EAAQjJ,OACRkJ,EAAKlJ,KAAOiJ,EAAQjJ,MAExBkJ,EAAKF,WAAaA,GAAc,GAChCE,EAAKG,SAAWN,EACTG,EAqDX,SAASI,EAAMC,EAAaP,EAAYC,GAEpC,QADgB,IAAZA,IAAsBA,EAAU,KAC/BM,EACD,MAAM,IAAIC,MAAM,2BAEpB,IAAKC,MAAMC,QAAQH,GACf,MAAM,IAAIC,MAAM,gCAEpB,GAAID,EAAYxI,OAAS,EACrB,MAAM,IAAIyI,MAAM,+CAEpB,IAAKG,EAASJ,EAAY,MAAQI,EAASJ,EAAY,IACnD,MAAM,IAAIC,MAAM,oCAMpB,OAAOV,EAJI,CACPK,KAAM,QACNI,YAAaA,GAEIP,EAAYC,GA6CrC,SAASW,EAAQL,EAAaP,EAAYC,QACtB,IAAZA,IAAsBA,EAAU,IACpC,IAAK,IAAIY,EAAK,EAAGC,EAAgBP,EAAaM,EAAKC,EAAc/I,OAAQ8I,IAAM,CAC3E,IAAIE,EAAOD,EAAcD,GACzB,GAAIE,EAAKhJ,OAAS,EACd,MAAM,IAAIyI,MAAM,+DAEpB,IAAK,IAAIzH,EAAI,EAAGA,EAAIgI,EAAKA,EAAKhJ,OAAS,GAAGA,OAAQgB,IAE9C,GAAIgI,EAAKA,EAAKhJ,OAAS,GAAGgB,KAAOgI,EAAK,GAAGhI,GACrC,MAAM,IAAIyH,MAAM,+CAQ5B,OAAOV,EAJI,CACPK,KAAM,UACNI,YAAaA,GAEIP,EAAYC,GA6CrC,SAASe,EAAWT,EAAaP,EAAYC,GAEzC,QADgB,IAAZA,IAAsBA,EAAU,IAChCM,EAAYxI,OAAS,EACrB,MAAM,IAAIyI,MAAM,yDAMpB,OAAOV,EAJI,CACPK,KAAM,aACNI,YAAaA,GAEIP,EAAYC,GAmDrC,SAASgB,EAAkBC,EAAUjB,QACjB,IAAZA,IAAsBA,EAAU,IACpC,IAAIkB,EAAK,CAAEhB,KAAM,qBAQjB,OAPIF,EAAQG,KACRe,EAAGf,GAAKH,EAAQG,IAEhBH,EAAQjJ,OACRmK,EAAGnK,KAAOiJ,EAAQjJ,MAEtBmK,EAAGD,SAAWA,EACPC,EAoBX,SAASC,EAAgBb,EAAaP,EAAYC,GAM9C,YALgB,IAAZA,IAAsBA,EAAU,IAK7BH,EAJI,CACPK,KAAM,kBACNI,YAAaA,GAEIP,EAAYC,GAoBrC,SAASoB,EAAWd,EAAaP,EAAYC,GAMzC,YALgB,IAAZA,IAAsBA,EAAU,IAK7BH,EAJI,CACPK,KAAM,aACNI,YAAaA,GAEIP,EAAYC,GAqBrC,SAASqB,EAAaf,EAAaP,EAAYC,GAM3C,YALgB,IAAZA,IAAsBA,EAAU,IAK7BH,EAJI,CACPK,KAAM,eACNI,YAAaA,GAEIP,EAAYC,GA8DrC,SAASsB,EAAgBC,EAASC,QAChB,IAAVA,IAAoBA,EAAQ,cAChC,IAAIC,EAASpK,EAAQqK,QAAQF,GAC7B,IAAKC,EACD,MAAM,IAAIlB,MAAMiB,EAAQ,qBAE5B,OAAOD,EAAUE,EAarB,SAASE,EAAgBC,EAAUJ,QACjB,IAAVA,IAAoBA,EAAQ,cAChC,IAAIC,EAASpK,EAAQqK,QAAQF,GAC7B,IAAKC,EACD,MAAM,IAAIlB,MAAMiB,EAAQ,qBAE5B,OAAOI,EAAWH,EAwCtB,SAASI,EAAiBN,GAEtB,OAAkB,KADJA,GAAW,EAAIpJ,KAAK2J,KACT3J,KAAK2J,GAqElC,SAASpB,EAASqB,GACd,OAAQC,MAAMD,IAAgB,OAARA,IAAiBvB,MAAMC,QAAQsB,GA7nBzDE,OAAOC,eAAe7K,EAAS,aAAc,CAAE8K,OAAO,IAUtD9K,EAAQ+K,YAAc,UAOtB/K,EAAQqK,QAAU,CACdW,YAAmC,IAAtBhL,EAAQ+K,YACrBE,YAAmC,IAAtBjL,EAAQ+K,YACrBG,QAASlL,EAAQ+K,YAAc,OAC/BI,KAA4B,QAAtBnL,EAAQ+K,YACdK,OAA8B,MAAtBpL,EAAQ+K,YAChBM,WAAYrL,EAAQ+K,YAAc,IAClCO,WAAYtL,EAAQ+K,YAAc,IAClCQ,OAAQvL,EAAQ+K,YAChBS,OAAQxL,EAAQ+K,YAChBU,MAAOzL,EAAQ+K,YAAc,SAC7BW,YAAmC,IAAtB1L,EAAQ+K,YACrBY,YAAmC,IAAtB3L,EAAQ+K,YACrBa,cAAe5L,EAAQ+K,YAAc,KACrCb,QAAS,EACT2B,MAA6B,OAAtB7L,EAAQ+K,aAQnB/K,EAAQ8L,aAAe,CACnBd,YAAa,IACbC,YAAa,IACbC,QAAS,EAAI,OACbC,KAAM,QACNC,OAAQ,MACRC,WAAY,KACZC,WAAY,KACZC,OAAQ,EACRC,OAAQ,EACRC,MAAO,EAAI,SACXC,YAAa,IACbC,YAAa,IACbC,cAAe,EAAI,KACnB1B,QAAS,EAAIlK,EAAQ+K,YACrBc,MAAO,WAQX7L,EAAQ+L,YAAc,CAClBC,MAAO,UACPhB,YAAa,IACbC,YAAa,IACbE,KAAM,aACNc,SAAU,KACVb,OAAQ,eACRC,WAAY,KACZC,WAAY,KACZC,OAAQ,EACRC,OAAQ,EACRC,MAAO,OACPC,YAAa,IACbC,YAAa,IACbE,MAAO,aAmCX7L,EAAQwI,QAAUA,EAmClBxI,EAAQ+I,SAnBR,SAAkBF,EAAMI,EAAaiD,GAEjC,YADiB,IAAbA,IAAuBA,EAAW,IAC9BrD,GACJ,IAAK,QACD,OAAOG,EAAMC,GAAaF,SAC9B,IAAK,aACD,OAAOW,EAAWT,GAAaF,SACnC,IAAK,UACD,OAAOO,EAAQL,GAAaF,SAChC,IAAK,aACD,OAAOgB,EAAWd,GAAaF,SACnC,IAAK,kBACD,OAAOe,EAAgBb,GAAaF,SACxC,IAAK,eACD,OAAOiB,EAAaf,GAAaF,SACrC,QACI,MAAM,IAAIG,MAAML,EAAO,iBAuCnC7I,EAAQgJ,MAAQA,EA2BhBhJ,EAAQmM,OANR,SAAgBlD,EAAaP,EAAYC,GAErC,YADgB,IAAZA,IAAsBA,EAAU,IAC7BgB,EAAkBV,EAAYmD,KAAI,SAAUC,GAC/C,OAAOrD,EAAMqD,EAAQ3D,MACrBC,IAsCR3I,EAAQsJ,QAAUA,EAyBlBtJ,EAAQsM,SANR,SAAkBrD,EAAaP,EAAYC,GAEvC,YADgB,IAAZA,IAAsBA,EAAU,IAC7BgB,EAAkBV,EAAYmD,KAAI,SAAUC,GAC/C,OAAO/C,EAAQ+C,EAAQ3D,MACvBC,IA+BR3I,EAAQ0J,WAAaA,EA0BrB1J,EAAQuM,YANR,SAAqBtD,EAAaP,EAAYC,GAE1C,YADgB,IAAZA,IAAsBA,EAAU,IAC7BgB,EAAkBV,EAAYmD,KAAI,SAAUC,GAC/C,OAAO3C,EAAW2C,EAAQ3D,MAC1BC,IAqCR3I,EAAQ2J,kBAAoBA,EA0B5B3J,EAAQ8J,gBAAkBA,EA0B1B9J,EAAQ+J,WAAaA,EA2BrB/J,EAAQgK,aAAeA,EA2BvBhK,EAAQwM,mBARR,SAA4BC,EAAY/D,EAAYC,GAMhD,YALgB,IAAZA,IAAsBA,EAAU,IAK7BH,EAJI,CACPK,KAAM,qBACN4D,WAAYA,GAEK/D,EAAYC,IAwBrC3I,EAAQ0M,MARR,SAAehC,EAAKiC,GAEhB,QADkB,IAAdA,IAAwBA,EAAY,GACpCA,KAAeA,GAAa,GAC5B,MAAM,IAAIzD,MAAM,uCAEpB,IAAI0D,EAAa9L,KAAKyF,IAAI,GAAIoG,GAAa,GAC3C,OAAO7L,KAAK4L,MAAMhC,EAAMkC,GAAcA,GAqB1C5M,EAAQiK,gBAAkBA,EAmB1BjK,EAAQsK,gBAAkBA,EAc1BtK,EAAQ6M,gBAHR,SAAyBtC,EAAUJ,GAC/B,OAAOK,EAAiBF,EAAgBC,EAAUJ,KAkBtDnK,EAAQ8M,iBAPR,SAA0BC,GACtB,IAAIC,EAAQD,EAAU,IAItB,OAHIC,EAAQ,IACRA,GAAS,KAENA,GAcXhN,EAAQwK,iBAAmBA,EAY3BxK,EAAQiN,iBAJR,SAA0B/B,GAEtB,OADcA,EAAU,IACNpK,KAAK2J,GAAM,KAoBjCzK,EAAQkN,cARR,SAAuBzM,EAAQ0M,EAAcC,GAGzC,QAFqB,IAAjBD,IAA2BA,EAAe,mBAC5B,IAAdC,IAAwBA,EAAY,gBAClC3M,GAAU,GACZ,MAAM,IAAIyI,MAAM,oCAEpB,OAAOe,EAAgBK,EAAgB7J,EAAQ0M,GAAeC,IA2BlEpN,EAAQqN,YAhBR,SAAqBtG,EAAMoG,EAAcC,GAGrC,QAFqB,IAAjBD,IAA2BA,EAAe,eAC5B,IAAdC,IAAwBA,EAAY,gBAClCrG,GAAQ,GACV,MAAM,IAAImC,MAAM,kCAEpB,IAAIoE,EAActN,EAAQ+L,YAAYoB,GACtC,IAAKG,EACD,MAAM,IAAIpE,MAAM,0BAEpB,IAAIqE,EAAcvN,EAAQ+L,YAAYqB,GACtC,IAAKG,EACD,MAAM,IAAIrE,MAAM,uBAEpB,OAAQnC,EAAOuG,EAAeC,GAiBlCvN,EAAQqJ,SAAWA,EAenBrJ,EAAQwN,SAHR,SAAkBC,GACd,QAASA,GAASA,EAAMC,cAAgB9C,QAwC5C5K,EAAQ2N,aAhBR,SAAsBjO,GAClB,IAAKA,EACD,MAAM,IAAIwJ,MAAM,oBAEpB,IAAKC,MAAMC,QAAQ1J,GACf,MAAM,IAAIwJ,MAAM,yBAEpB,GAAoB,IAAhBxJ,EAAKe,QAAgC,IAAhBf,EAAKe,OAC1B,MAAM,IAAIyI,MAAM,2CAEpBxJ,EAAKkO,SAAQ,SAAUlD,GACnB,IAAKrB,EAASqB,GACV,MAAM,IAAIxB,MAAM,sCAkC5BlJ,EAAQ6N,WARR,SAAoB/E,GAChB,IAAKA,EACD,MAAM,IAAII,MAAM,kBAEpB,IAAiD,IAA7C,CAAC,SAAU,UAAUtG,eAAekG,GACpC,MAAM,IAAII,MAAM,wEC9sBxB0B,OAAOC,eAAe7K,EAAS,aAA/B,CAA+C8K,OAAO,IAEtD,IAAIgD,EAAU,EAAQ,OAmCtB,SAAShO,EAAUH,EAASoO,EAAUC,GAEpC,GAAgB,OAAZrO,EA4BJ,IA3BA,IAAI8B,EACFrB,EACA6N,EACAlF,EACAmF,EACA7B,EACA8B,EAGAC,EAFAC,EAAa,EACbC,EAAa,EAEbzF,EAAOlJ,EAAQkJ,KACf0F,EAA+B,sBAAT1F,EACtB2F,EAAqB,YAAT3F,EACZ4F,EAAOF,EAAsB5O,EAAQiK,SAASnJ,OAAS,EAchDiO,EAAe,EAAGA,EAAeD,EAAMC,IAAgB,CAS9DR,GAHAE,KALAD,EAA0BI,EACtB5O,EAAQiK,SAAS8E,GAAc3F,SAC/ByF,EACA7O,EAAQoJ,SACRpJ,IAEiC,uBAAjCwO,EAAwBtF,MAGxBsF,EAAwB1B,WAAWhM,OACnC,EAEJ,IAAK,IAAIkO,EAAY,EAAGA,EAAYT,EAAOS,IAAa,CACtD,IAAIC,EAAoB,EACpBC,EAAgB,EAMpB,GAAiB,QALjB9F,EAAWqF,EACPD,EAAwB1B,WAAWkC,GACnCR,GAGJ,CACA9B,EAAStD,EAASE,YAClB,IAAI6F,EAAW/F,EAASF,KAQxB,OANAwF,GACEL,GACc,YAAbc,GAAuC,iBAAbA,EAEvB,EADA,EAGEA,GACN,KAAK,KACH,MACF,IAAK,QACH,IAOQ,IANNf,EACE1B,EACAiC,EACAI,EACAE,EACAC,GAGF,OAAO,EACTP,IACAM,IACA,MACF,IAAK,aACL,IAAK,aACH,IAAKnN,EAAI,EAAGA,EAAI4K,EAAO5L,OAAQgB,IAAK,CAClC,IAOQ,IANNsM,EACE1B,EAAO5K,GACP6M,EACAI,EACAE,EACAC,GAGF,OAAO,EACTP,IACiB,eAAbQ,GAA2BF,IAEhB,eAAbE,GAA2BF,IAC/B,MACF,IAAK,UACL,IAAK,kBACH,IAAKnN,EAAI,EAAGA,EAAI4K,EAAO5L,OAAQgB,IAAK,CAClC,IAAKrB,EAAI,EAAGA,EAAIiM,EAAO5K,GAAGhB,OAAS4N,EAAYjO,IAAK,CAClD,IAOQ,IANN2N,EACE1B,EAAO5K,GAAGrB,GACVkO,EACAI,EACAE,EACAC,GAGF,OAAO,EACTP,IAEe,oBAAbQ,GAAgCF,IACnB,YAAbE,GAAwBD,IAEb,YAAbC,GAAwBF,IAC5B,MACF,IAAK,eACH,IAAKnN,EAAI,EAAGA,EAAI4K,EAAO5L,OAAQgB,IAAK,CAElC,IADAoN,EAAgB,EACXzO,EAAI,EAAGA,EAAIiM,EAAO5K,GAAGhB,OAAQL,IAAK,CACrC,IAAK6N,EAAI,EAAGA,EAAI5B,EAAO5K,GAAGrB,GAAGK,OAAS4N,EAAYJ,IAAK,CACrD,IAOQ,IANNF,EACE1B,EAAO5K,GAAGrB,GAAG6N,GACbK,EACAI,EACAE,EACAC,GAGF,OAAO,EACTP,IAEFO,IAEFD,IAEF,MACF,IAAK,qBACH,IAAKnN,EAAI,EAAGA,EAAIsH,EAAS0D,WAAWhM,OAAQgB,IAC1C,IAEE,IADA3B,EAAUiJ,EAAS0D,WAAWhL,GAAIsM,EAAUC,GAG5C,OAAO,EACX,MACF,QACE,MAAM,IAAI9E,MAAM,6BA8G1B,SAAS6F,EAASpP,EAASoO,GACzB,IAAIvM,EACJ,OAAQ7B,EAAQkJ,MACd,IAAK,oBACH,IAAKrH,EAAI,EAAGA,EAAI7B,EAAQiK,SAASnJ,SACqB,IAAhDsN,EAASpO,EAAQiK,SAASpI,GAAGkH,WAAYlH,GADNA,KAGzC,MACF,IAAK,UACHuM,EAASpO,EAAQ+I,WAAY,IAuFnC,SAASsG,EAAYrP,EAASoO,GAC5B,GAAqB,YAAjBpO,EAAQkJ,KACVkF,EAASpO,EAAS,QACb,GAAqB,sBAAjBA,EAAQkJ,KACjB,IAAK,IAAIrH,EAAI,EAAGA,EAAI7B,EAAQiK,SAASnJ,SACM,IAArCsN,EAASpO,EAAQiK,SAASpI,GAAIA,GADSA,MAiHjD,SAASyN,EAAStP,EAASoO,GACzB,IAAIvM,EACFC,EACAyN,EACAnG,EACAmF,EACAC,EACAC,EACAe,EACAC,EACAC,EACAX,EAAe,EACfH,EAAuC,sBAAjB5O,EAAQkJ,KAC9B2F,EAA6B,YAAjB7O,EAAQkJ,KACpB4F,EAAOF,EAAsB5O,EAAQiK,SAASnJ,OAAS,EAczD,IAAKe,EAAI,EAAGA,EAAIiN,EAAMjN,IAAK,CA4BzB,IA3BA2M,EAA0BI,EACtB5O,EAAQiK,SAASpI,GAAGuH,SACpByF,EACA7O,EAAQoJ,SACRpJ,EACJwP,EAAoBZ,EAChB5O,EAAQiK,SAASpI,GAAGkH,WACpB8F,EACA7O,EAAQ+I,WACR,GACJ0G,EAAcb,EACV5O,EAAQiK,SAASpI,GAAG9B,KACpB8O,EACA7O,EAAQD,UACR4P,EACJD,EAAYd,EACR5O,EAAQiK,SAASpI,GAAGsH,GACpB0F,EACA7O,EAAQmJ,QACRwG,EAIJpB,GAHAE,IAAuBD,GACc,uBAAjCA,EAAwBtF,MAGxBsF,EAAwB1B,WAAWhM,OACnC,EAECyO,EAAI,EAAGA,EAAIhB,EAAOgB,IAMrB,GAAiB,QALjBnG,EAAWqF,EACPD,EAAwB1B,WAAWyC,GACnCf,GAgBJ,OAAQpF,EAASF,MACf,IAAK,QACL,IAAK,aACL,IAAK,aACL,IAAK,UACL,IAAK,kBACL,IAAK,eACH,IAOQ,IANNkF,EACEhF,EACA2F,EACAS,EACAC,EACAC,GAGF,OAAO,EACT,MAEF,IAAK,qBACH,IAAK5N,EAAI,EAAGA,EAAIsH,EAAS0D,WAAWhM,OAAQgB,IAC1C,IAOQ,IANNsM,EACEhF,EAAS0D,WAAWhL,GACpBiN,EACAS,EACAC,EACAC,GAGF,OAAO,EAEX,MAEF,QACE,MAAM,IAAInG,MAAM,8BA/ClB,IAOQ,IANN6E,EACE,KACAW,EACAS,EACAC,EACAC,GAGF,OAAO,EA0CbX,KA2GJ,SAASa,EAAY5P,EAASoO,GAC5BkB,EAAStP,GAAS,SAAUoJ,EAAU2F,EAAchG,EAAYhJ,EAAMoJ,GAEpE,IAiBIgG,EAjBAjG,EAAoB,OAAbE,EAAoB,KAAOA,EAASF,KAC/C,OAAQA,GACN,KAAK,KACL,IAAK,QACL,IAAK,aACL,IAAK,UACH,OAKQ,IAJNkF,EACED,EAAQtF,QAAQO,EAAUL,EAAY,CAAEhJ,KAAMA,EAAMoJ,GAAIA,IACxD4F,EACA,SAIJ,EAMJ,OAAQ7F,GACN,IAAK,aACHiG,EAAW,QACX,MACF,IAAK,kBACHA,EAAW,aACX,MACF,IAAK,eACHA,EAAW,UAIf,IACE,IAAIF,EAAoB,EACxBA,EAAoB7F,EAASE,YAAYxI,OACzCmO,IACA,CACA,IACInG,EAAO,CACTI,KAAMiG,EACN7F,YAHeF,EAASE,YAAY2F,IAKtC,IAEE,IADAb,EAASD,EAAQtF,QAAQC,EAAMC,GAAagG,EAAcE,GAG1D,OAAO,MA6Gf,SAASY,EAAY7P,EAASoO,GAC5BwB,EAAY5P,GAAS,SAAU6I,EAASkG,EAAcE,GACpD,IAAIa,EAAe,EAGnB,GAAKjH,EAAQO,SAAb,CAEA,IAAIF,EAAOL,EAAQO,SAASF,KAC5B,GAAa,UAATA,GAA6B,eAATA,EAAxB,CAGA,IAAI6G,EACAC,EAAuB,EACvBC,EAAqB,EACrBC,EAAgB,EACpB,OAyCQ,IAxCN/P,EACE0I,GACA,SACEsH,EACAxB,EACAyB,EACAC,EACAnB,GAGA,QACqBS,IAAnBI,GACAhB,EAAeiB,GACfK,EAAsBJ,GACtBf,EAAgBgB,EAOhB,OALAH,EAAiBI,EACjBH,EAAuBjB,EACvBkB,EAAqBI,EACrBH,EAAgBhB,OAChBY,EAAe,GAGjB,IAAIQ,EAAiBnC,EAAQpE,WAC3B,CAACgG,EAAgBI,GACjBtH,EAAQE,YAEV,IAOQ,IANNqF,EACEkC,EACAvB,EACAE,EACAC,EACAY,GAGF,OAAO,EACTA,IACAC,EAAiBI,WAvCvB,OA+JJ,SAASI,EAASvQ,EAASoO,GAEzB,IAAKpO,EAAS,MAAM,IAAIuJ,MAAM,uBAE9BqG,EAAY5P,GAAS,SAAU6I,EAASkG,EAAcE,GACpD,GAAyB,OAArBpG,EAAQO,SAAZ,CACA,IAAIF,EAAOL,EAAQO,SAASF,KACxBwD,EAAS7D,EAAQO,SAASE,YAC9B,OAAQJ,GACN,IAAK,aACH,IAAiE,IAA7DkF,EAASvF,EAASkG,EAAcE,EAAmB,EAAG,GACxD,OAAO,EACT,MACF,IAAK,UACH,IACE,IAAIC,EAAgB,EACpBA,EAAgBxC,EAAO5L,OACvBoO,IAEA,IAMQ,IALNd,EACED,EAAQpE,WAAW2C,EAAOwC,GAAgBrG,EAAQE,YAClDgG,EACAE,EACAC,GAGF,OAAO,OA0TnB7O,EAAQmQ,SAt6BR,SAAkBxQ,GAChB,IAAI0M,EAAS,GAIb,OAHAvM,EAAUH,GAAS,SAAUI,GAC3BsM,EAAO9H,KAAKxE,MAEPsM,GAk6BTrM,EAAQF,UAAYA,EACpBE,EAAQoQ,YA3oCR,SAAqBzQ,EAASoO,EAAUsC,EAAcrC,GACpD,IAAIsC,EAAgBD,EAwBpB,OAvBAvQ,EACEH,GACA,SACEmQ,EACAxB,EACAI,EACAE,EACAC,GAGEyB,EADiB,IAAfhC,QAAqCgB,IAAjBe,EACNP,EAEA/B,EACduC,EACAR,EACAxB,EACAI,EACAE,EACAC,KAGNb,GAEKsC,GAmnCTtQ,EAAQgP,YAAcA,EACtBhP,EAAQuQ,cAn8BR,SAAuB5Q,EAASoO,EAAUsC,GACxC,IAAIC,EAAgBD,EAMpB,OALArB,EAAYrP,GAAS,SAAU6Q,EAAgB9B,GAE3C4B,EADmB,IAAjB5B,QAAuCY,IAAjBe,EACRG,EACGzC,EAASuC,EAAeE,EAAgB9B,MAExD4B,GA67BTtQ,EAAQyQ,UAnFR,SAAmB9Q,EAASgJ,GAG1B,GADAA,EAAUA,GAAW,IAChBmF,EAAQN,SAAS7E,GAAU,MAAM,IAAIO,MAAM,sBAChD,IAOIH,EAPA2F,EAAe/F,EAAQ+F,cAAgB,EACvCE,EAAoBjG,EAAQiG,mBAAqB,EACjDC,EAAgBlG,EAAQkG,eAAiB,EACzCP,EAAa3F,EAAQ2F,YAAc,EAGnC5F,EAAaC,EAAQD,WAGzB,OAAQ/I,EAAQkJ,MACd,IAAK,oBACC6F,EAAe,IACjBA,EAAe/O,EAAQiK,SAASnJ,OAASiO,GAC3ChG,EAAaA,GAAc/I,EAAQiK,SAAS8E,GAAchG,WAC1DK,EAAWpJ,EAAQiK,SAAS8E,GAAc3F,SAC1C,MACF,IAAK,UACHL,EAAaA,GAAc/I,EAAQ+I,WACnCK,EAAWpJ,EAAQoJ,SACnB,MACF,IAAK,QACL,IAAK,aACH,OAAO,KACT,IAAK,aACL,IAAK,UACL,IAAK,kBACL,IAAK,eACHA,EAAWpJ,EACX,MACF,QACE,MAAM,IAAIuJ,MAAM,sBAIpB,GAAiB,OAAbH,EAAmB,OAAO,KAC9B,IAAIsD,EAAStD,EAASE,YACtB,OAAQF,EAASF,MACf,IAAK,QACH,OAAOiF,EAAQ9E,MAAMqD,EAAQ3D,EAAYC,GAC3C,IAAK,aAGH,OAFIiG,EAAoB,IACtBA,EAAoBvC,EAAO5L,OAASmO,GAC/Bd,EAAQ9E,MAAMqD,EAAOuC,GAAoBlG,EAAYC,GAC9D,IAAK,aAEH,OADI2F,EAAa,IAAGA,EAAajC,EAAO5L,OAAS6N,GAC1CR,EAAQ9E,MAAMqD,EAAOiC,GAAa5F,EAAYC,GACvD,IAAK,UAIH,OAHIkG,EAAgB,IAAGA,EAAgBxC,EAAO5L,OAASoO,GACnDP,EAAa,IACfA,EAAajC,EAAOwC,GAAepO,OAAS6N,GACvCR,EAAQ9E,MAAMqD,EAAOwC,GAAeP,GAAa5F,EAAYC,GACtE,IAAK,kBAKH,OAJIiG,EAAoB,IACtBA,EAAoBvC,EAAO5L,OAASmO,GAClCN,EAAa,IACfA,EAAajC,EAAOuC,GAAmBnO,OAAS6N,GAC3CR,EAAQ9E,MAAMqD,EAAOuC,GAAmBN,GAAa5F,EAAYC,GAC1E,IAAK,eAQH,OAPIiG,EAAoB,IACtBA,EAAoBvC,EAAO5L,OAASmO,GAClCC,EAAgB,IAClBA,EAAgBxC,EAAOuC,GAAmBnO,OAASoO,GACjDP,EAAa,IACfA,EACEjC,EAAOuC,GAAmBC,GAAepO,OAAS6N,GAC/CR,EAAQ9E,MACbqD,EAAOuC,GAAmBC,GAAeP,GACzC5F,EACAC,GAGN,MAAM,IAAIO,MAAM,uBASlBlJ,EAAQ0Q,YArNR,SAAqB/Q,EAASgJ,GAG5B,GADAA,EAAUA,GAAW,IAChBmF,EAAQN,SAAS7E,GAAU,MAAM,IAAIO,MAAM,sBAChD,IAOIH,EAPA2F,EAAe/F,EAAQ+F,cAAgB,EACvCE,EAAoBjG,EAAQiG,mBAAqB,EACjDC,EAAgBlG,EAAQkG,eAAiB,EACzCY,EAAe9G,EAAQ8G,cAAgB,EAGvC/G,EAAaC,EAAQD,WAGzB,OAAQ/I,EAAQkJ,MACd,IAAK,oBACC6F,EAAe,IACjBA,EAAe/O,EAAQiK,SAASnJ,OAASiO,GAC3ChG,EAAaA,GAAc/I,EAAQiK,SAAS8E,GAAchG,WAC1DK,EAAWpJ,EAAQiK,SAAS8E,GAAc3F,SAC1C,MACF,IAAK,UACHL,EAAaA,GAAc/I,EAAQ+I,WACnCK,EAAWpJ,EAAQoJ,SACnB,MACF,IAAK,QACL,IAAK,aACH,OAAO,KACT,IAAK,aACL,IAAK,UACL,IAAK,kBACL,IAAK,eACHA,EAAWpJ,EACX,MACF,QACE,MAAM,IAAIuJ,MAAM,sBAIpB,GAAiB,OAAbH,EAAmB,OAAO,KAC9B,IAAIsD,EAAStD,EAASE,YACtB,OAAQF,EAASF,MACf,IAAK,QACL,IAAK,aACH,OAAO,KACT,IAAK,aAEH,OADI4G,EAAe,IAAGA,EAAepD,EAAO5L,OAASgP,EAAe,GAC7D3B,EAAQpE,WACb,CAAC2C,EAAOoD,GAAepD,EAAOoD,EAAe,IAC7C/G,EACAC,GAEJ,IAAK,UAIH,OAHIkG,EAAgB,IAAGA,EAAgBxC,EAAO5L,OAASoO,GACnDY,EAAe,IACjBA,EAAepD,EAAOwC,GAAepO,OAASgP,EAAe,GACxD3B,EAAQpE,WACb,CACE2C,EAAOwC,GAAeY,GACtBpD,EAAOwC,GAAeY,EAAe,IAEvC/G,EACAC,GAEJ,IAAK,kBAKH,OAJIiG,EAAoB,IACtBA,EAAoBvC,EAAO5L,OAASmO,GAClCa,EAAe,IACjBA,EAAepD,EAAOuC,GAAmBnO,OAASgP,EAAe,GAC5D3B,EAAQpE,WACb,CACE2C,EAAOuC,GAAmBa,GAC1BpD,EAAOuC,GAAmBa,EAAe,IAE3C/G,EACAC,GAEJ,IAAK,eAQH,OAPIiG,EAAoB,IACtBA,EAAoBvC,EAAO5L,OAASmO,GAClCC,EAAgB,IAClBA,EAAgBxC,EAAOuC,GAAmBnO,OAASoO,GACjDY,EAAe,IACjBA,EACEpD,EAAOuC,GAAmBC,GAAepO,OAASgP,EAAe,GAC9D3B,EAAQpE,WACb,CACE2C,EAAOuC,GAAmBC,GAAeY,GACzCpD,EAAOuC,GAAmBC,GAAeY,EAAe,IAE1D/G,EACAC,GAGN,MAAM,IAAIO,MAAM,uBAyHlBlJ,EAAQuP,YAAcA,EACtBvP,EAAQ2Q,cAvkBR,SAAuBhR,EAASoO,EAAUsC,GACxC,IAAIC,EAAgBD,EAmBpB,OAlBAd,EACE5P,GACA,SAAU6Q,EAAgB9B,EAAcE,GAMpC0B,EAJiB,IAAjB5B,GACsB,IAAtBE,QACiBU,IAAjBe,EAEgBG,EAEAzC,EACduC,EACAE,EACA9B,EACAE,MAID0B,GAojBTtQ,EAAQiP,SAAWA,EACnBjP,EAAQ4Q,WAluBR,SAAoBjR,EAASoO,EAAUsC,GACrC,IAAIC,EAAgBD,EAuBpB,OAtBApB,EACEtP,GACA,SACEkR,EACAnC,EACAS,EACAC,EACAC,GAGEiB,EADmB,IAAjB5B,QAAuCY,IAAjBe,EACRQ,EAEA9C,EACduC,EACAO,EACAnC,EACAS,EACAC,EACAC,MAIDiB,GA2sBTtQ,EAAQkQ,SAAWA,EACnBlQ,EAAQ8Q,WAjRR,SAAoBnR,EAASoO,EAAUsC,GACrC,IAAIC,EAAgBD,EAgBpB,OAfAH,EACEvQ,GACA,SAAUoR,EAAarC,EAAcE,EAAmBC,GAEpDyB,EADmB,IAAjB5B,QAAuCY,IAAjBe,EACRU,EAEAhD,EACduC,EACAS,EACArC,EACAE,EACAC,MAIDyB,GAiQTtQ,EAAQ+O,SAAWA,EACnB/O,EAAQgR,WAviCR,SAAoBrR,EAASoO,EAAUsC,GACrC,IAAIC,EAAgBD,EAOpB,OANAtB,EAASpP,GAAS,SAAUsR,EAAmBvC,GAE3C4B,EADmB,IAAjB5B,QAAuCY,IAAjBe,EACRY,EAEAlD,EAASuC,EAAeW,EAAmBvC,MAExD4B,GAgiCTtQ,EAAQwP,YAAcA,EACtBxP,EAAQkR,cAhaR,SAAuBvR,EAASoO,EAAUsC,GACxC,IAAIC,EAAgBD,EAChBc,GAAU,EAwBd,OAvBA3B,EACE7P,GACA,SACEsQ,EACAvB,EACAE,EACAC,EACAY,GAGEa,GADc,IAAZa,QAAsC7B,IAAjBe,EACPJ,EAEAlC,EACduC,EACAL,EACAvB,EACAE,EACAC,EACAY,GAEJ0B,GAAU,KAGPb,sBCrgCuDrQ,EAAOD,QAG/D,WAAe,aAEvB,SAASE,EAAYC,EAAKC,EAAGC,EAAMC,EAAOC,GACtCC,EAAgBL,EAAKC,EAAGC,GAAQ,EAAGC,GAAUH,EAAIM,OAAS,EAAIF,GAAWG,GAG7E,SAASF,EAAgBL,EAAKC,EAAGC,EAAMC,EAAOC,GAE1C,KAAOD,EAAQD,GAAM,CACjB,GAAIC,EAAQD,EAAO,IAAK,CACpB,IAAIM,EAAIL,EAAQD,EAAO,EACnBO,EAAIR,EAAIC,EAAO,EACfQ,EAAIC,KAAKC,IAAIJ,GACbK,EAAI,GAAMF,KAAKG,IAAI,EAAIJ,EAAI,GAC3BK,EAAK,GAAMJ,KAAKK,KAAKN,EAAIG,GAAKL,EAAIK,GAAKL,IAAMC,EAAID,EAAI,EAAI,GAAK,EAAI,GAGtEH,EAAgBL,EAAKC,EAFPU,KAAKM,IAAIf,EAAMS,KAAKO,MAAMjB,EAAIQ,EAAII,EAAIL,EAAIO,IACzCJ,KAAKQ,IAAIhB,EAAOQ,KAAKO,MAAMjB,GAAKO,EAAIC,GAAKI,EAAIL,EAAIO,IACrBX,GAG/C,IAAIgB,EAAIpB,EAAIC,GACRoB,EAAInB,EACJoB,EAAInB,EAKR,IAHAoB,EAAKvB,EAAKE,EAAMD,GACZG,EAAQJ,EAAIG,GAAQiB,GAAK,GAAGG,EAAKvB,EAAKE,EAAMC,GAEzCkB,EAAIC,GAAG,CAIV,IAHAC,EAAKvB,EAAKqB,EAAGC,GACbD,IACAC,IACOlB,EAAQJ,EAAIqB,GAAID,GAAK,GAAGC,IAC/B,KAAOjB,EAAQJ,EAAIsB,GAAIF,GAAK,GAAGE,IAGL,IAA1BlB,EAAQJ,EAAIE,GAAOkB,GAAUG,EAAKvB,EAAKE,EAAMoB,GAG7CC,EAAKvB,IADLsB,EACanB,GAGbmB,GAAKrB,IAAGC,EAAOoB,EAAI,GACnBrB,GAAKqB,IAAGnB,EAAQmB,EAAI,IAIhC,SAASC,EAAKvB,EAAKqB,EAAGC,GAClB,IAAIE,EAAMxB,EAAIqB,GACdrB,EAAIqB,GAAKrB,EAAIsB,GACbtB,EAAIsB,GAAKE,EAGb,SAASjB,EAAekB,EAAGC,GACvB,OAAOD,EAAIC,GAAK,EAAID,EAAIC,EAAI,EAAI,EAGpC,OAAO3B,EA3D0E4B,uCCCjF7B,EAAOD,QAAU+B,EACjB9B,EAAOD,QAAP,QAAyB+B,EAEzB,IAAI7B,EAAc,EAAQ,OAE1B,SAAS6B,EAAMC,EAAYC,GACvB,KAAMC,gBAAgBH,GAAQ,OAAO,IAAIA,EAAMC,EAAYC,GAG3DC,KAAKC,YAAcrB,KAAKM,IAAI,EAAGY,GAAc,GAC7CE,KAAKE,YAActB,KAAKM,IAAI,EAAGN,KAAKuB,KAAwB,GAAnBH,KAAKC,cAE1CF,GACAC,KAAKI,YAAYL,GAGrBC,KAAKK,QAwbT,SAASC,EAASC,EAAMC,EAAOC,GAC3B,IAAKA,EAAU,OAAOD,EAAME,QAAQH,GAEpC,IAAK,IAAIjB,EAAI,EAAGA,EAAIkB,EAAMjC,OAAQe,IAC9B,GAAImB,EAASF,EAAMC,EAAMlB,IAAK,OAAOA,EAEzC,OAAQ,EAIZ,SAASqB,EAASC,EAAMC,GACpBC,EAASF,EAAM,EAAGA,EAAKG,SAASxC,OAAQsC,EAAQD,GAIpD,SAASE,EAASF,EAAM1C,EAAG8C,EAAGH,EAAQI,GAC7BA,IAAUA,EAAWC,EAAW,OACrCD,EAASE,KAAOxD,EAAAA,EAChBsD,EAASG,KAAOzD,EAAAA,EAChBsD,EAASI,MAAQ1D,EAAAA,EACjBsD,EAASK,MAAQ3D,EAAAA,EAEjB,IAAK,IAAW4D,EAAPjC,EAAIpB,EAAUoB,EAAI0B,EAAG1B,IAC1BiC,EAAQX,EAAKG,SAASzB,GACtBkC,EAAOP,EAAUL,EAAKa,KAAOZ,EAAOU,GAASA,GAGjD,OAAON,EAGX,SAASO,EAAO9B,EAAGC,GAKf,OAJAD,EAAEyB,KAAOvC,KAAKQ,IAAIM,EAAEyB,KAAMxB,EAAEwB,MAC5BzB,EAAE0B,KAAOxC,KAAKQ,IAAIM,EAAE0B,KAAMzB,EAAEyB,MAC5B1B,EAAE2B,KAAOzC,KAAKM,IAAIQ,EAAE2B,KAAM1B,EAAE0B,MAC5B3B,EAAE4B,KAAO1C,KAAKM,IAAIQ,EAAE4B,KAAM3B,EAAE2B,MACrB5B,EAGX,SAASgC,EAAgBhC,EAAGC,GAAK,OAAOD,EAAEyB,KAAOxB,EAAEwB,KACnD,SAASQ,EAAgBjC,EAAGC,GAAK,OAAOD,EAAE0B,KAAOzB,EAAEyB,KAEnD,SAASQ,EAASlC,GAAO,OAAQA,EAAE2B,KAAO3B,EAAEyB,OAASzB,EAAE4B,KAAO5B,EAAE0B,MAChE,SAASS,EAAWnC,GAAK,OAAQA,EAAE2B,KAAO3B,EAAEyB,MAASzB,EAAE4B,KAAO5B,EAAE0B,MAiBhE,SAASU,EAASpC,EAAGC,GACjB,OAAOD,EAAEyB,MAAQxB,EAAEwB,MACZzB,EAAE0B,MAAQzB,EAAEyB,MACZzB,EAAE0B,MAAQ3B,EAAE2B,MACZ1B,EAAE2B,MAAQ5B,EAAE4B,KAGvB,SAASS,EAAWrC,EAAGC,GACnB,OAAOA,EAAEwB,MAAQzB,EAAE2B,MACZ1B,EAAEyB,MAAQ1B,EAAE4B,MACZ3B,EAAE0B,MAAQ3B,EAAEyB,MACZxB,EAAE2B,MAAQ5B,EAAE0B,KAGvB,SAASF,EAAWH,GAChB,MAAO,CACHA,SAAUA,EACViB,OAAQ,EACRP,MAAM,EACNN,KAAMxD,EAAAA,EACNyD,KAAMzD,EAAAA,EACN0D,MAAO1D,EAAAA,EACP2D,MAAO3D,EAAAA,GAOf,SAASsE,EAAYhE,EAAKE,EAAMC,EAAOK,EAAGJ,GAItC,IAHA,IACI6D,EADAC,EAAQ,CAAChE,EAAMC,GAGZ+D,EAAM5D,SACTH,EAAQ+D,EAAMC,QACdjE,EAAOgE,EAAMC,QAEO3D,IAEpByD,EAAM/D,EAAOS,KAAKuB,MAAM/B,EAAQD,GAAQM,EAAI,GAAKA,EACjDT,EAAYC,EAAKiE,EAAK/D,EAAMC,EAAOC,GAEnC8D,EAAME,KAAKlE,EAAM+D,EAAKA,EAAK9D,IA1hBnCyB,EAAMyC,UAAY,CAEdC,IAAK,WACD,OAAOvC,KAAKwC,KAAKxC,KAAKyC,KAAM,KAGhCC,OAAQ,SAAUlF,GAEd,IAAIoD,EAAOZ,KAAKyC,KACZ/E,EAAS,GACTmD,EAASb,KAAKa,OAElB,IAAKkB,EAAWvE,EAAMoD,GAAO,OAAOlD,EAKpC,IAHA,IACI4B,EAAGqD,EAAKpB,EAAOqB,EADfC,EAAgB,GAGbjC,GAAM,CACT,IAAKtB,EAAI,EAAGqD,EAAM/B,EAAKG,SAASxC,OAAQe,EAAIqD,EAAKrD,IAE7CiC,EAAQX,EAAKG,SAASzB,GAGlByC,EAAWvE,EAFfoF,EAAYhC,EAAKa,KAAOZ,EAAOU,GAASA,KAGhCX,EAAKa,KAAM/D,EAAO2E,KAAKd,GAClBO,EAAStE,EAAMoF,GAAY5C,KAAKwC,KAAKjB,EAAO7D,GAChDmF,EAAcR,KAAKd,IAGhCX,EAAOiC,EAAcT,MAGzB,OAAO1E,GAGXoF,SAAU,SAAUtF,GAEhB,IAAIoD,EAAOZ,KAAKyC,KACZ5B,EAASb,KAAKa,OAElB,IAAKkB,EAAWvE,EAAMoD,GAAO,OAAO,EAKpC,IAHA,IACItB,EAAGqD,EAAKpB,EAAOqB,EADfC,EAAgB,GAGbjC,GAAM,CACT,IAAKtB,EAAI,EAAGqD,EAAM/B,EAAKG,SAASxC,OAAQe,EAAIqD,EAAKrD,IAK7C,GAHAiC,EAAQX,EAAKG,SAASzB,GAGlByC,EAAWvE,EAFfoF,EAAYhC,EAAKa,KAAOZ,EAAOU,GAASA,GAEP,CAC7B,GAAIX,EAAKa,MAAQK,EAAStE,EAAMoF,GAAY,OAAO,EACnDC,EAAcR,KAAKd,GAG3BX,EAAOiC,EAAcT,MAGzB,OAAO,GAGXW,KAAM,SAAUN,GACZ,IAAMA,IAAQA,EAAKlE,OAAS,OAAOyB,KAEnC,GAAIyC,EAAKlE,OAASyB,KAAKE,YAAa,CAChC,IAAK,IAAIZ,EAAI,EAAGqD,EAAMF,EAAKlE,OAAQe,EAAIqD,EAAKrD,IACxCU,KAAKgD,OAAOP,EAAKnD,IAErB,OAAOU,KAIX,IAAIY,EAAOZ,KAAKiD,OAAOR,EAAKS,QAAS,EAAGT,EAAKlE,OAAS,EAAG,GAEzD,GAAKyB,KAAKyC,KAAK1B,SAASxC,OAIjB,GAAIyB,KAAKyC,KAAKT,SAAWpB,EAAKoB,OAEjChC,KAAKmD,WAAWnD,KAAKyC,KAAM7B,OAExB,CACH,GAAIZ,KAAKyC,KAAKT,OAASpB,EAAKoB,OAAQ,CAEhC,IAAIoB,EAAUpD,KAAKyC,KACnBzC,KAAKyC,KAAO7B,EACZA,EAAOwC,EAIXpD,KAAKqD,QAAQzC,EAAMZ,KAAKyC,KAAKT,OAASpB,EAAKoB,OAAS,GAAG,QAfvDhC,KAAKyC,KAAO7B,EAkBhB,OAAOZ,MAGXgD,OAAQ,SAAUzC,GAEd,OADIA,GAAMP,KAAKqD,QAAQ9C,EAAMP,KAAKyC,KAAKT,OAAS,GACzChC,MAGXK,MAAO,WAEH,OADAL,KAAKyC,KAAOvB,EAAW,IAChBlB,MAGXsD,OAAQ,SAAU/C,EAAME,GACpB,IAAKF,EAAM,OAAOP,KASlB,IAPA,IAIIV,EAAGiE,EAAQC,EAAOC,EAJlB7C,EAAOZ,KAAKyC,KACZjF,EAAOwC,KAAKa,OAAON,GACnBmD,EAAO,GACPC,EAAU,GAIP/C,GAAQ8C,EAAKnF,QAAQ,CASxB,GAPKqC,IACDA,EAAO8C,EAAKtB,MACZmB,EAASG,EAAKA,EAAKnF,OAAS,GAC5Be,EAAIqE,EAAQvB,MACZqB,GAAU,GAGV7C,EAAKa,OAGU,KAFf+B,EAAQlD,EAASC,EAAMK,EAAKG,SAAUN,IAOlC,OAHAG,EAAKG,SAAS6C,OAAOJ,EAAO,GAC5BE,EAAKrB,KAAKzB,GACVZ,KAAK6D,UAAUH,GACR1D,KAIVyD,GAAY7C,EAAKa,OAAQK,EAASlB,EAAMpD,GAOlC+F,GACPjE,IACAsB,EAAO2C,EAAOxC,SAASzB,GACvBmE,GAAU,GAEP7C,EAAO,MAXV8C,EAAKrB,KAAKzB,GACV+C,EAAQtB,KAAK/C,GACbA,EAAI,EACJiE,EAAS3C,EACTA,EAAOA,EAAKG,SAAS,IAU7B,OAAOf,MAGXa,OAAQ,SAAUN,GAAQ,OAAOA,GAEjCuD,YAAapC,EACbqC,YAAapC,EAEbqC,OAAQ,WAAc,OAAOhE,KAAKyC,MAElCwB,SAAU,SAAUxB,GAEhB,OADAzC,KAAKyC,KAAOA,EACLzC,MAGXwC,KAAM,SAAU5B,EAAMlD,GAElB,IADA,IAAImF,EAAgB,GACbjC,GACCA,EAAKa,KAAM/D,EAAO2E,KAAK6B,MAAMxG,EAAQkD,EAAKG,UACzC8B,EAAcR,KAAK6B,MAAMrB,EAAejC,EAAKG,UAElDH,EAAOiC,EAAcT,MAEzB,OAAO1E,GAGXuF,OAAQ,SAAUzC,EAAOrC,EAAMC,EAAO4D,GAElC,IAEIpB,EAFAuD,EAAI/F,EAAQD,EAAO,EACnBiG,EAAIpE,KAAKC,YAGb,GAAIkE,GAAKC,EAIL,OADAzD,EADAC,EAAOM,EAAWV,EAAM0C,MAAM/E,EAAMC,EAAQ,IAC7B4B,KAAKa,QACbD,EAGNoB,IAEDA,EAASpD,KAAKuB,KAAKvB,KAAKC,IAAIsF,GAAKvF,KAAKC,IAAIuF,IAG1CA,EAAIxF,KAAKuB,KAAKgE,EAAIvF,KAAKyF,IAAID,EAAGpC,EAAS,MAG3CpB,EAAOM,EAAW,KACbO,MAAO,EACZb,EAAKoB,OAASA,EAId,IAEI1C,EAAGC,EAAG+E,EAAQC,EAFdC,EAAK5F,KAAKuB,KAAKgE,EAAIC,GACnBK,EAAKD,EAAK5F,KAAKuB,KAAKvB,KAAKK,KAAKmF,IAKlC,IAFAnC,EAAYzB,EAAOrC,EAAMC,EAAOqG,EAAIzE,KAAK8D,aAEpCxE,EAAInB,EAAMmB,GAAKlB,EAAOkB,GAAKmF,EAM5B,IAFAxC,EAAYzB,EAAOlB,EAFnBgF,EAAS1F,KAAKQ,IAAIE,EAAImF,EAAK,EAAGrG,GAEAoG,EAAIxE,KAAK+D,aAElCxE,EAAID,EAAGC,GAAK+E,EAAQ/E,GAAKiF,EAE1BD,EAAS3F,KAAKQ,IAAIG,EAAIiF,EAAK,EAAGF,GAG9B1D,EAAKG,SAASsB,KAAKrC,KAAKiD,OAAOzC,EAAOjB,EAAGgF,EAAQvC,EAAS,IAMlE,OAFArB,EAASC,EAAMZ,KAAKa,QAEbD,GAGX8D,eAAgB,SAAUlH,EAAMoD,EAAM+D,EAAOjB,GAIzC,IAFA,IAAIpE,EAAGqD,EAAKpB,EAAOqD,EAAYC,EAAMC,EAAaC,EAASC,EAsP7CtF,EAAGC,EAnPb+D,EAAKrB,KAAKzB,IAENA,EAAKa,MAAQiC,EAAKnF,OAAS,IAAMoG,GAH5B,CAOT,IAFAI,EAAUC,EAAiBrH,EAAAA,EAEtB2B,EAAI,EAAGqD,EAAM/B,EAAKG,SAASxC,OAAQe,EAAIqD,EAAKrD,IAE7CuF,EAAOjD,EADPL,EAAQX,EAAKG,SAASzB,IA4OhBI,EA1OqBlC,EA0OlBmC,EA1OwB4B,GAAjCuD,GA2OJlG,KAAKM,IAAIS,EAAE0B,KAAM3B,EAAE2B,MAAQzC,KAAKQ,IAAIO,EAAEwB,KAAMzB,EAAEyB,QAC9CvC,KAAKM,IAAIS,EAAE2B,KAAM5B,EAAE4B,MAAQ1C,KAAKQ,IAAIO,EAAEyB,KAAM1B,EAAE0B,OA5OAyD,GAGxBG,GACdA,EAAiBF,EACjBC,EAAUF,EAAOE,EAAUF,EAAOE,EAClCH,EAAarD,GAENuD,IAAgBE,GAEnBH,EAAOE,IACPA,EAAUF,EACVD,EAAarD,GAKzBX,EAAOgE,GAAchE,EAAKG,SAAS,GAGvC,OAAOH,GAGXyC,QAAS,SAAU9C,EAAMoE,EAAOM,GAE5B,IAAIpE,EAASb,KAAKa,OACdrD,EAAOyH,EAAS1E,EAAOM,EAAON,GAC9B2E,EAAa,GAGbtE,EAAOZ,KAAK0E,eAAelH,EAAMwC,KAAKyC,KAAMkC,EAAOO,GAOvD,IAJAtE,EAAKG,SAASsB,KAAK9B,GACnBiB,EAAOZ,EAAMpD,GAGNmH,GAAS,GACRO,EAAWP,GAAO5D,SAASxC,OAASyB,KAAKC,aACzCD,KAAKmF,OAAOD,EAAYP,GACxBA,IAKR3E,KAAKoF,oBAAoB5H,EAAM0H,EAAYP,IAI/CQ,OAAQ,SAAUD,EAAYP,GAE1B,IAAI/D,EAAOsE,EAAWP,GAClBP,EAAIxD,EAAKG,SAASxC,OAClBG,EAAIsB,KAAKE,YAEbF,KAAKqF,iBAAiBzE,EAAMlC,EAAG0F,GAE/B,IAAIkB,EAAatF,KAAKuF,kBAAkB3E,EAAMlC,EAAG0F,GAE7CoB,EAAUtE,EAAWN,EAAKG,SAAS6C,OAAO0B,EAAY1E,EAAKG,SAASxC,OAAS+G,IACjFE,EAAQxD,OAASpB,EAAKoB,OACtBwD,EAAQ/D,KAAOb,EAAKa,KAEpBd,EAASC,EAAMZ,KAAKa,QACpBF,EAAS6E,EAASxF,KAAKa,QAEnB8D,EAAOO,EAAWP,EAAQ,GAAG5D,SAASsB,KAAKmD,GAC1CxF,KAAKmD,WAAWvC,EAAM4E,IAG/BrC,WAAY,SAAUvC,EAAM4E,GAExBxF,KAAKyC,KAAOvB,EAAW,CAACN,EAAM4E,IAC9BxF,KAAKyC,KAAKT,OAASpB,EAAKoB,OAAS,EACjChC,KAAKyC,KAAKhB,MAAO,EACjBd,EAASX,KAAKyC,KAAMzC,KAAKa,SAG7B0E,kBAAmB,SAAU3E,EAAMlC,EAAG0F,GAElC,IAAI9E,EAAGmG,EAAOC,EAAOC,EAASd,EAAMe,EAAYb,EAASvB,EA+JvC9D,EAAGC,EACrBwB,EACAC,EACAC,EACAC,EA/JA,IAFAsE,EAAab,EAAUpH,EAAAA,EAElB2B,EAAIZ,EAAGY,GAAK8E,EAAI1F,EAAGY,IACpBmG,EAAQ3E,EAASF,EAAM,EAAGtB,EAAGU,KAAKa,QAClC6E,EAAQ5E,EAASF,EAAMtB,EAAG8E,EAAGpE,KAAKa,QAyJpBnB,EAvJa+F,EAuJV9F,EAvJiB+F,EAwJtCvE,OAAAA,EACAC,OAAAA,EACAC,OAAAA,EACAC,OAAAA,EAHAH,EAAOvC,KAAKM,IAAIQ,EAAEyB,KAAMxB,EAAEwB,MAC1BC,EAAOxC,KAAKM,IAAIQ,EAAE0B,KAAMzB,EAAEyB,MAC1BC,EAAOzC,KAAKQ,IAAIM,EAAE2B,KAAM1B,EAAE0B,MAC1BC,EAAO1C,KAAKQ,IAAIM,EAAE4B,KAAM3B,EAAE2B,MA3JtBqE,EA6JD/G,KAAKM,IAAI,EAAGmC,EAAOF,GACnBvC,KAAKM,IAAI,EAAGoC,EAAOF,GA7JlByD,EAAOjD,EAAS6D,GAAS7D,EAAS8D,GAG9BC,EAAUC,GACVA,EAAaD,EACbnC,EAAQlE,EAERyF,EAAUF,EAAOE,EAAUF,EAAOE,GAE3BY,IAAYC,GAEff,EAAOE,IACPA,EAAUF,EACVrB,EAAQlE,GAKpB,OAAOkE,GAIX6B,iBAAkB,SAAUzE,EAAMlC,EAAG0F,GAEjC,IAAIN,EAAclD,EAAKa,KAAOzB,KAAK8D,YAAcpC,EAC7CqC,EAAcnD,EAAKa,KAAOzB,KAAK+D,YAAcpC,EACnC3B,KAAK6F,eAAejF,EAAMlC,EAAG0F,EAAGN,GAChC9D,KAAK6F,eAAejF,EAAMlC,EAAG0F,EAAGL,IAIvBnD,EAAKG,SAAS+E,KAAKhC,IAI9C+B,eAAgB,SAAUjF,EAAMlC,EAAG0F,EAAG/F,GAElCuC,EAAKG,SAAS+E,KAAKzH,GAEnB,IAIIiB,EAAGiC,EAJHV,EAASb,KAAKa,OACdkF,EAAWjF,EAASF,EAAM,EAAGlC,EAAGmC,GAChCmF,EAAYlF,EAASF,EAAMwD,EAAI1F,EAAG0F,EAAGvD,GACrCoF,EAASpE,EAAWkE,GAAYlE,EAAWmE,GAG/C,IAAK1G,EAAIZ,EAAGY,EAAI8E,EAAI1F,EAAGY,IACnBiC,EAAQX,EAAKG,SAASzB,GACtBkC,EAAOuE,EAAUnF,EAAKa,KAAOZ,EAAOU,GAASA,GAC7C0E,GAAUpE,EAAWkE,GAGzB,IAAKzG,EAAI8E,EAAI1F,EAAI,EAAGY,GAAKZ,EAAGY,IACxBiC,EAAQX,EAAKG,SAASzB,GACtBkC,EAAOwE,EAAWpF,EAAKa,KAAOZ,EAAOU,GAASA,GAC9C0E,GAAUpE,EAAWmE,GAGzB,OAAOC,GAGXb,oBAAqB,SAAU5H,EAAMkG,EAAMiB,GAEvC,IAAK,IAAIrF,EAAIqF,EAAOrF,GAAK,EAAGA,IACxBkC,EAAOkC,EAAKpE,GAAI9B,IAIxBqG,UAAW,SAAUH,GAEjB,IAAK,IAAyBwC,EAArB5G,EAAIoE,EAAKnF,OAAS,EAAae,GAAK,EAAGA,IACZ,IAA5BoE,EAAKpE,GAAGyB,SAASxC,OACbe,EAAI,GACJ4G,EAAWxC,EAAKpE,EAAI,GAAGyB,UACd6C,OAAOsC,EAASxF,QAAQgD,EAAKpE,IAAK,GAExCU,KAAKK,QAETM,EAAS+C,EAAKpE,GAAIU,KAAKa,SAItCT,YAAa,SAAUL,GAOnB,IAAIoG,EAAa,CAAC,WAAY,OAAQ,KAEtCnG,KAAK8D,YAAc,IAAIsC,SAAS,IAAK,IAAKD,EAAWE,KAAKtG,EAAO,KACjEC,KAAK+D,YAAc,IAAIqC,SAAS,IAAK,IAAKD,EAAWE,KAAKtG,EAAO,KAEjEC,KAAKa,OAAS,IAAIuF,SAAS,IACvB,kBAAoBrG,EAAO,GAC3B,YAAcA,EAAO,GACrB,YAAcA,EAAO,GACrB,YAAcA,EAAO,GAAK,4CCpctC,IAAImP,EAAe,EAAQ,OAEvBC,EAAW,EAAQ,OAEnBC,EAAWD,EAASD,EAAa,6BAErCnR,EAAOD,QAAU,SAA4BuR,EAAMC,GAClD,IAAIC,EAAYL,EAAaG,IAAQC,GACrC,MAAyB,oBAAdC,GAA4BH,EAASC,EAAM,gBAAkB,EAChEF,EAASI,GAEVA,uCCXR,IAAIC,EAAO,EAAQ,OACfN,EAAe,EAAQ,OAEvBO,EAASP,EAAa,8BACtBQ,EAAQR,EAAa,6BACrBS,EAAgBT,EAAa,mBAAmB,IAASM,EAAKI,KAAKF,EAAOD,GAE1EI,EAAQX,EAAa,qCAAqC,GAC1DY,EAAkBZ,EAAa,2BAA2B,GAC1Da,EAAOb,EAAa,cAExB,GAAIY,EACH,IACCA,EAAgB,GAAI,IAAK,CAAElH,MAAO,IACjC,MAAOoH,GAERF,EAAkB,KAIpB/R,EAAOD,QAAU,SAAkBmS,GAClC,IAAIC,EAAOP,EAAcH,EAAME,EAAOS,WACtC,GAAIN,GAASC,EAAiB,CAC7B,IAAIM,EAAOP,EAAMK,EAAM,UACnBE,EAAKC,cAERP,EACCI,EACA,SACA,CAAEtH,MAAO,EAAImH,EAAK,EAAGE,EAAiB1R,QAAU4R,UAAU5R,OAAS,MAItE,OAAO2R,GAGR,IAAII,EAAY,WACf,OAAOX,EAAcH,EAAMC,EAAQU,YAGhCL,EACHA,EAAgB/R,EAAOD,QAAS,QAAS,CAAE8K,MAAO0H,IAElDvS,EAAOD,QAAQoG,MAAQoM,sCC3CxB,IAAIC,EAAQ,EAAQ,OAChBC,EAAQ,EAAQ,OAChBC,EAAiB,EAAQ,OACzBC,EAAS,kBAUb,SAASC,EAAW1G,EAAQ2G,EAAWC,GAEnCD,EAAYhS,KAAKM,IAAI,OAAiBkO,IAAdwD,EAA0B,EAAIA,GAGtDC,EAAkBA,GAAmB,EAGrC,IAAIC,EAgLR,SAAwB7G,GAOpB,IANA,IAAI9L,EAAO8L,EAAO,GACd8G,EAAM9G,EAAO,GACb7L,EAAQ6L,EAAO,GACf+G,EAAS/G,EAAO,GAGX3K,EAAI,EAAGA,EAAI2K,EAAO1L,OAAQe,IAAK,CACpC,IAAI0B,EAAIiJ,EAAO3K,GACX0B,EAAE,GAAK7C,EAAK,KAAIA,EAAO6C,GACvBA,EAAE,GAAK5C,EAAM,KAAIA,EAAQ4C,GACzBA,EAAE,GAAK+P,EAAI,KAAIA,EAAM/P,GACrBA,EAAE,GAAKgQ,EAAO,KAAIA,EAAShQ,GAInC,IAAIiQ,EAAO,CAAC9S,EAAM4S,EAAK3S,EAAO4S,GAC1BE,EAAWD,EAAK/N,QACpB,IAAK5D,EAAI,EAAGA,EAAI2K,EAAO1L,OAAQe,IACtBmR,EAAexG,EAAO3K,GAAI2R,IAAOC,EAAS7O,KAAK4H,EAAO3K,IAI/D,OA0IJ,SAAoB2K,GAChBA,EAAOnE,KAAKqL,GAGZ,IADA,IAAIC,EAAQ,GACH9R,EAAI,EAAGA,EAAI2K,EAAO1L,OAAQe,IAAK,CACpC,KAAO8R,EAAM7S,QAAU,GAAK8S,EAAMD,EAAMA,EAAM7S,OAAS,GAAI6S,EAAMA,EAAM7S,OAAS,GAAI0L,EAAO3K,KAAO,GAC9F8R,EAAMhP,MAEVgP,EAAM/O,KAAK4H,EAAO3K,IAItB,IADA,IAAIgS,EAAQ,GACHC,EAAKtH,EAAO1L,OAAS,EAAGgT,GAAM,EAAGA,IAAM,CAC5C,KAAOD,EAAM/S,QAAU,GAAK8S,EAAMC,EAAMA,EAAM/S,OAAS,GAAI+S,EAAMA,EAAM/S,OAAS,GAAI0L,EAAOsH,KAAQ,GAC/FD,EAAMlP,MAEVkP,EAAMjP,KAAK4H,EAAOsH,IAKtB,OAFAD,EAAMlP,MACNgP,EAAMhP,MACCgP,EAAMI,OAAOF,GA/JbG,CAAWP,GAvMPQ,CAAezH,GAGtB0H,EAAO,IAAIpB,EAAM,IACrBoB,EAAK9Q,OAAS,SAAUnB,GACpB,MAAO,CACHyB,KAAMzB,EAAE,GACR0B,KAAM1B,EAAE,GACR2B,KAAM3B,EAAE,GACR4B,KAAM5B,EAAE,KAGhBiS,EAAK7N,YAAc,SAAUpE,EAAGC,GAAK,OAAOD,EAAE,GAAKC,EAAE,IACrDgS,EAAK5N,YAAc,SAAUrE,EAAGC,GAAK,OAAOD,EAAE,GAAKC,EAAE,IAErDgS,EAAK5O,KAAKkH,GAIV,IADA,IACgB2H,EADZC,EAAQ,GACHvS,EAAI,EAASA,EAAIwR,EAAKvS,OAAQe,IAAK,CACxC,IAAI0B,EAAI8P,EAAKxR,GACbqS,EAAKrO,OAAOtC,GACZ4Q,EAAOE,EAAW9Q,EAAG4Q,GACrBC,EAAMxP,KAAKuP,GAIf,IAAIG,EAAU,IAAIxB,EAAM,IACxB,IAAKjR,EAAI,EAAGA,EAAIuS,EAAMtT,OAAQe,IAAKyS,EAAQ/O,OAAOgP,EAAWH,EAAMvS,KAMnE,IAJA,IAAI2S,EAAcrB,EAAYA,EAC1BsB,EAAiBrB,EAAkBA,EAGhCgB,EAAMtT,QAAQ,CACjB,IAAIqC,EAAOiR,EAAMM,QACbzS,EAAIkB,EAAKI,EACTrB,EAAIiB,EAAKwR,KAAKpR,EAGdqR,EAAQC,EAAU5S,EAAGC,GACzB,KAAI0S,EAAQH,GAAZ,CAEA,IAAIK,EAAWF,EAAQJ,GAGvBjR,EAAIwR,EAAcb,EAAM/Q,EAAK6R,KAAKzR,EAAGtB,EAAGC,EAAGiB,EAAKwR,KAAKA,KAAKpR,EAAGuR,EAAUR,KAG9DnT,KAAKQ,IAAIkT,EAAUtR,EAAGtB,GAAI4S,EAAUtR,EAAGrB,KAAO4S,IAEnDV,EAAMxP,KAAKzB,GACXiR,EAAMxP,KAAKyP,EAAW9Q,EAAGJ,IAGzB+Q,EAAKrO,OAAOtC,GACZ+Q,EAAQzO,OAAO1C,GACfmR,EAAQ/O,OAAOgP,EAAWpR,IAC1BmR,EAAQ/O,OAAOgP,EAAWpR,EAAKwR,SAKvCxR,EAAOgR,EACP,IAAIc,EAAU,GACd,GACIA,EAAQrQ,KAAKzB,EAAKI,GAClBJ,EAAOA,EAAKwR,WACPxR,IAASgR,GAIlB,OAFAc,EAAQrQ,KAAKzB,EAAKI,GAEX0R,EAGX,SAASF,EAAcb,EAAMjS,EAAGC,EAAGgT,EAAGC,EAAGC,EAASd,GAM9C,IALA,IAAIF,EAAQ,IAAIrB,EAAM,GAAIsC,GACtBlS,EAAO+Q,EAAKlP,KAIT7B,GAAM,CACT,IAAK,IAAItB,EAAI,EAAGA,EAAIsB,EAAKG,SAASxC,OAAQe,IAAK,CAC3C,IAAIiC,EAAQX,EAAKG,SAASzB,GAEtByT,EAAOnS,EAAKa,KAAOuR,EAAUzR,EAAO5B,EAAGgT,GAAKM,EAAatT,EAAGgT,EAAGpR,GAC/DwR,EAAOF,GAEXhB,EAAMxP,KAAK,CACPzB,KAAMW,EACNwR,KAAMA,IAId,KAAOlB,EAAMtT,SAAWsT,EAAMqB,OAAOtS,KAAKG,UAAU,CAChD,IAAIR,EAAOsR,EAAMzP,MACbpB,EAAIT,EAAKK,KAITuS,EAAKH,EAAUhS,EAAGtB,EAAGC,GACrByT,EAAKJ,EAAUhS,EAAG2R,EAAGC,GACzB,GAAIrS,EAAKwS,KAAOI,GAAM5S,EAAKwS,KAAOK,GAC9BC,EAAgB1T,EAAGqB,EAAG+Q,IACtBsB,EAAgBV,EAAG3R,EAAG+Q,GAAU,OAAO/Q,GAG/CJ,EAAOiR,EAAMzP,SACHxB,EAAOA,EAAKA,MAG1B,OAAO,KAGX,SAASkS,EAAYpT,EAAGC,GACpB,OAAOD,EAAEqT,KAAOpT,EAAEoT,KAItB,SAASE,EAAavT,EAAGC,EAAGnC,GACxB,GAAI8V,EAAO5T,EAAGlC,IAAS8V,EAAO3T,EAAGnC,GAAO,OAAO,EAC/C,IAAI4V,EAAKG,EAAa7T,EAAE,GAAIA,EAAE,GAAIC,EAAE,GAAIA,EAAE,GAAInC,EAAK2D,KAAM3D,EAAK4D,KAAM5D,EAAK6D,KAAM7D,EAAK4D,MACpF,GAAW,IAAPgS,EAAU,OAAO,EACrB,IAAII,EAAKD,EAAa7T,EAAE,GAAIA,EAAE,GAAIC,EAAE,GAAIA,EAAE,GAAInC,EAAK2D,KAAM3D,EAAK4D,KAAM5D,EAAK2D,KAAM3D,EAAK8D,MACpF,GAAW,IAAPkS,EAAU,OAAO,EACrB,IAAIC,EAAKF,EAAa7T,EAAE,GAAIA,EAAE,GAAIC,EAAE,GAAIA,EAAE,GAAInC,EAAK6D,KAAM7D,EAAK4D,KAAM5D,EAAK6D,KAAM7D,EAAK8D,MACpF,GAAW,IAAPmS,EAAU,OAAO,EACrB,IAAIC,EAAKH,EAAa7T,EAAE,GAAIA,EAAE,GAAIC,EAAE,GAAIA,EAAE,GAAInC,EAAK2D,KAAM3D,EAAK8D,KAAM9D,EAAK6D,KAAM7D,EAAK8D,MACpF,OAAW,IAAPoS,EAAiB,EACd9U,KAAKQ,IAAIgU,EAAII,EAAIC,EAAIC,GAGhC,SAASJ,EAAO5T,EAAGlC,GACf,OAAOkC,EAAE,IAAMlC,EAAK2D,MACbzB,EAAE,IAAMlC,EAAK6D,MACb3B,EAAE,IAAMlC,EAAK4D,MACb1B,EAAE,IAAMlC,EAAK8D,KAIxB,SAAS+R,EAAgB3T,EAAGC,EAAGoS,GAO3B,IANA,IAiBgB4B,EAAIC,EAAIC,EAAIC,EAjBxB3S,EAAOvC,KAAKQ,IAAIM,EAAE,GAAIC,EAAE,IACxByB,EAAOxC,KAAKQ,IAAIM,EAAE,GAAIC,EAAE,IACxB0B,EAAOzC,KAAKM,IAAIQ,EAAE,GAAIC,EAAE,IACxB2B,EAAO1C,KAAKM,IAAIQ,EAAE,GAAIC,EAAE,IAExBoU,EAAQhC,EAAQrP,OAAO,CAACvB,KAAMA,EAAMC,KAAMA,EAAMC,KAAMA,EAAMC,KAAMA,IAC7DhC,EAAI,EAAGA,EAAIyU,EAAMxV,OAAQe,IAC9B,GAUYqU,EAVGI,EAAMzU,GAAG0B,EAUR4S,EAVWG,EAAMzU,GAAG8S,KAAKpR,EAUrB6S,EAVwBnU,EAWzCiU,KADqBG,EAVuBnU,IAW/BiU,IAAOC,GACvBxC,EAAMsC,EAAIC,EAAIC,GAAM,IAAMxC,EAAMsC,EAAIC,EAAIE,GAAM,GAC9CzC,EAAMwC,EAAIC,EAAIH,GAAM,IAAMtC,EAAMwC,EAAIC,EAAIF,GAAM,EAbK,OAAO,EAE9D,OAAO,EAGX,SAASvC,EAAMsC,EAAIE,EAAIG,GACnB,OAAOtD,EAAOiD,EAAG,GAAIA,EAAG,GAAIE,EAAG,GAAIA,EAAG,GAAIG,EAAG,GAAIA,EAAG,IAWxD,SAAShC,EAAWpR,GAChB,IAAI+S,EAAK/S,EAAKI,EACV6S,EAAKjT,EAAKwR,KAAKpR,EAKnB,OAJAJ,EAAKO,KAAOvC,KAAKQ,IAAIuU,EAAG,GAAIE,EAAG,IAC/BjT,EAAKQ,KAAOxC,KAAKQ,IAAIuU,EAAG,GAAIE,EAAG,IAC/BjT,EAAKS,KAAOzC,KAAKM,IAAIyU,EAAG,GAAIE,EAAG,IAC/BjT,EAAKU,KAAO1C,KAAKM,IAAIyU,EAAG,GAAIE,EAAG,IACxBjT,EA+BX,SAASkR,EAAW9Q,EAAGyR,GACnB,IAAI7R,EAAO,CACPI,EAAGA,EACHyR,KAAM,KACNL,KAAM,KACNjR,KAAM,EACNC,KAAM,EACNC,KAAM,EACNC,KAAM,GAaV,OAVKmR,GAKD7R,EAAKwR,KAAOK,EAAKL,KACjBxR,EAAK6R,KAAOA,EACZA,EAAKL,KAAKK,KAAO7R,EACjB6R,EAAKL,KAAOxR,IAPZA,EAAK6R,KAAO7R,EACZA,EAAKwR,KAAOxR,GAQTA,EAIX,SAAS0R,EAAUqB,EAAIE,GAEnB,IAAII,EAAKN,EAAG,GAAKE,EAAG,GAChBK,EAAKP,EAAG,GAAKE,EAAG,GAEpB,OAAOI,EAAKA,EAAKC,EAAKA,EAI1B,SAASlB,EAAUhS,EAAG2S,EAAIE,GAEtB,IAAIM,EAAIR,EAAG,GACPS,EAAIT,EAAG,GACPM,EAAKJ,EAAG,GAAKM,EACbD,EAAKL,EAAG,GAAKO,EAEjB,GAAW,IAAPH,GAAmB,IAAPC,EAAU,CAEtB,IAAI7U,IAAM2B,EAAE,GAAKmT,GAAKF,GAAMjT,EAAE,GAAKoT,GAAKF,IAAOD,EAAKA,EAAKC,EAAKA,GAE1D7U,EAAI,GACJ8U,EAAIN,EAAG,GACPO,EAAIP,EAAG,IAEAxU,EAAI,IACX8U,GAAKF,EAAK5U,EACV+U,GAAKF,EAAK7U,GAOlB,OAHA4U,EAAKjT,EAAE,GAAKmT,GAGAF,GAFZC,EAAKlT,EAAE,GAAKoT,GAEUF,EAI1B,SAASX,EAAac,EAAIC,EAAIC,EAAIC,EAAIC,EAAIC,EAAIC,EAAIC,GAC9C,IAaIC,EAAIC,EAAIC,EAAIC,EAbZC,EAAKV,EAAKF,EACVa,EAAKV,EAAKF,EACVa,EAAKR,EAAKF,EACVW,EAAKR,EAAKF,EACVW,EAAKhB,EAAKI,EACVa,EAAKhB,EAAKI,EACVhV,EAAIuV,EAAKA,EAAKC,EAAKA,EACnBvV,EAAIsV,EAAKE,EAAKD,EAAKE,EACnBzC,EAAIwC,EAAKA,EAAKC,EAAKA,EACnBxC,EAAIqC,EAAKI,EAAKH,EAAKI,EACnBtF,EAAImF,EAAKE,EAAKD,EAAKE,EACnBC,EAAI7V,EAAIiT,EAAIhT,EAAIA,EAGhB6V,EAAKD,EACLE,EAAKF,EAEC,IAANA,GACAT,EAAK,EACLU,EAAK,EACLR,EAAKhF,EACLyF,EAAK9C,IAGLqC,EAAKtV,EAAIsQ,EAAIrQ,EAAIiT,GADjBkC,EAAKnV,EAAIqQ,EAAI2C,EAAIC,GAER,GACLkC,EAAK,EACLE,EAAKhF,EACLyF,EAAK9C,GACEmC,EAAKU,IACZV,EAAKU,EACLR,EAAKhF,EAAIrQ,EACT8V,EAAK9C,IAITqC,EAAK,GACLA,EAAK,GACApC,EAAI,EAAKkC,EAAK,GACTlC,EAAIlT,EAAGoV,EAAKU,GAElBV,GAAMlC,EACN4C,EAAK9V,IAEFsV,EAAKS,IACZT,EAAKS,GACC7C,EAAIjT,EAAK,EAAKmV,EAAK,GACflC,EAAIjT,EAAID,EAAGoV,EAAKU,GAEtBV,GAAMlC,EAAIjT,EACV6V,EAAK9V,IAOb,IAIIuU,GAFO,GAJXc,EAAY,IAAPC,EAAW,EAAIA,EAAKS,IAIJhB,EAAKM,EAAKJ,IAFrB,GAHVE,EAAY,IAAPC,EAAW,EAAIA,EAAKU,IAGLnB,EAAKQ,EAAKN,GAK1BL,GAFO,EAAIa,GAAML,EAAKK,EAAKH,IAFrB,EAAIC,GAAMP,EAAKO,EAAKL,GAM9B,OAAOP,EAAKA,EAAKC,EAAKA,EAG1B,SAAS/C,EAAWzR,EAAGC,GACnB,OAAOD,EAAE,KAAOC,EAAE,GAAKD,EAAE,GAAKC,EAAE,GAAKD,EAAE,GAAKC,EAAE,GA7V9C6Q,EAAMkF,UACNlF,EAAQA,EAAMkF,SAGlB3X,EAAOD,QAAU6S,EACjB5S,EAAOD,QAAP,QAAyB6S,yBCbzB,IAAIgF,EAAa,EAAQ,OACrBC,EAAc,EAAQ,OACtBC,EAAK,EAAQ,OACbC,EAAU,EAAQ,OAClBC,EAAQ,EAAQ,MAChBC,EAAS,EAAQ,OAEjBC,EAAUC,KAAK5T,UAAU2T,QAE7B,SAASE,EAAUC,EAAQC,EAAU5P,GACnC,IAAI6P,EAAO7P,GAAW,GAGtB,SAAI6P,EAAKC,OAASV,EAAGO,EAAQC,GAAYD,IAAWC,MAK/CD,IAAWC,GAA+B,kBAAXD,GAA2C,kBAAbC,EACzDC,EAAKC,OAASV,EAAGO,EAAQC,GAAYD,GAAUC,EAgC1D,SAAkB3W,EAAGC,EAAG2W,GAEtB,IAAIhX,EAAGkX,EACP,UAAW9W,WAAaC,EAAK,OAAO,EACpC,GAAI8W,EAAkB/W,IAAM+W,EAAkB9W,GAAM,OAAO,EAG3D,GAAID,EAAE4C,YAAc3C,EAAE2C,UAAa,OAAO,EAE1C,GAAIsT,EAAYlW,KAAOkW,EAAYjW,GAAM,OAAO,EAEhD,IAAI+W,EAAWZ,EAAQpW,GACnBiX,EAAWb,EAAQnW,GACvB,GAAI+W,IAAaC,EAAY,OAAO,EACpC,GAAID,GAAYC,EACd,OAAOjX,EAAEkX,SAAWjX,EAAEiX,QAAUb,EAAMrW,KAAOqW,EAAMpW,GAGrD,GAAIqW,EAAOtW,IAAMsW,EAAOrW,GACtB,OAAOsW,EAAQrG,KAAKlQ,KAAOuW,EAAQrG,KAAKjQ,GAG1C,IAAIkX,EAAYC,EAASpX,GACrBqX,EAAYD,EAASnX,GACzB,GAAIkX,IAAcE,EAAa,OAAO,EACtC,GAAIF,GAAaE,EAAW,CAC1B,GAAIrX,EAAEnB,SAAWoB,EAAEpB,OAAU,OAAO,EACpC,IAAKe,EAAI,EAAGA,EAAII,EAAEnB,OAAQe,IACxB,GAAII,EAAEJ,KAAOK,EAAEL,GAAM,OAAO,EAE9B,OAAO,EAGT,UAAWI,WAAaC,EAAK,OAAO,EAEpC,IACE,IAAIqX,EAAKrB,EAAWjW,GAChBuX,EAAKtB,EAAWhW,GACpB,MAAOqQ,GACP,OAAO,EAGT,GAAIgH,EAAGzY,SAAW0Y,EAAG1Y,OAAU,OAAO,EAMtC,IAHAyY,EAAGlR,OACHmR,EAAGnR,OAEExG,EAAI0X,EAAGzY,OAAS,EAAGe,GAAK,EAAGA,IAC9B,GAAI0X,EAAG1X,IAAM2X,EAAG3X,GAAM,OAAO,EAG/B,IAAKA,EAAI0X,EAAGzY,OAAS,EAAGe,GAAK,EAAGA,IAE9B,IAAK6W,EAAUzW,EADf8W,EAAMQ,EAAG1X,IACcK,EAAE6W,GAAMF,GAAS,OAAO,EAGjD,OAAO,EA7EAY,CAASd,EAAQC,EAAUC,IAGpC,SAASG,EAAkB7N,GACzB,OAAiB,OAAVA,QAA4BwE,IAAVxE,EAG3B,SAASkO,EAAS3C,GAChB,SAAKA,GAAkB,kBAANA,GAAsC,kBAAbA,EAAE5V,UAGtB,oBAAX4V,EAAEgD,MAA0C,oBAAZhD,EAAEjR,SAGzCiR,EAAE5V,OAAS,GAAqB,kBAAT4V,EAAE,KAkE/BpW,EAAOD,QAAUqY,qCC7GjB,IAAIiB,EAAO,EAAQ,OACfC,EAA+B,oBAAXC,QAAkD,kBAAlBA,OAAO,OAE3DC,EAAQ7O,OAAOpG,UAAUkV,SACzBhG,EAASvK,MAAM3E,UAAUkP,OACzBiG,EAAqB/O,OAAOC,eAmB5B+O,EAAsBD,GAbY,WACrC,IAAIE,EAAM,GACV,IAGC,IAAK,IAAIC,KAFTH,EAAmBE,EAAK,IAAK,CAAEE,YAAY,EAAOjP,MAAO+O,IAE3CA,EACb,OAAO,EAER,OAAOA,EAAIxD,IAAMwD,EAChB,MAAO3H,GACR,OAAO,GAGuC8H,GAE5CnP,EAAiB,SAAUoP,EAAQ1I,EAAMzG,EAAOoP,GAnBnC,IAAUC,KAoBtB5I,KAAQ0I,IAnBS,oBADKE,EAoBSD,IAnBmB,sBAAnBT,EAAM3H,KAAKqI,IAmBID,OAG9CN,EACHD,EAAmBM,EAAQ1I,EAAM,CAChCgB,cAAc,EACdwH,YAAY,EACZjP,MAAOA,EACPsP,UAAU,IAGXH,EAAO1I,GAAQzG,IAIbuP,EAAmB,SAAUJ,EAAQ7N,GACxC,IAAIkO,EAAajI,UAAU5R,OAAS,EAAI4R,UAAU,GAAK,GACnDkI,EAAQjB,EAAKlN,GACbmN,IACHgB,EAAQ7G,EAAO5B,KAAKyI,EAAO3P,OAAO4P,sBAAsBpO,KAEzD,IAAK,IAAI5K,EAAI,EAAGA,EAAI+Y,EAAM9Z,OAAQe,GAAK,EACtCqJ,EAAeoP,EAAQM,EAAM/Y,GAAI4K,EAAImO,EAAM/Y,IAAK8Y,EAAWC,EAAM/Y,MAInE6Y,EAAiBT,sBAAwBA,EAEzC3Z,EAAOD,QAAUqa,qBCxCjB,SAASI,EAAOC,EAASC,EAASC,EAAQC,GAExC3Y,KAAKwY,QAAU,GAEfxY,KAAKyY,QAAU,EAEfzY,KAAK0Y,OAAS,EAEd1Y,KAAKqI,SAAWrI,KAAK4Y,mBAErB5Y,KAAK6Y,SAAW,GAEhB7Y,KAAK8Y,MAAQ,GAKb9Y,KAAK+Y,SAAW,GAEhB/Y,KAAKgZ,UAAY,GAEjBhZ,KAAKiZ,eAAiB,EAEtBjZ,KAAKkZ,MAAMV,EAASC,EAASC,EAAQC,GAgBvCJ,EAAOjW,UAAU6W,IAAM,SAASX,EAASC,EAASC,EAAQC,GACxD3Y,KAAKkZ,MAAMV,EAASC,EAASC,EAAQC,GAErC,IAAK,IAAIS,EAAU,EAAGA,EAAUpZ,KAAKiZ,eAAgBG,IAEnD,GAA+B,IAA3BpZ,KAAK+Y,SAASK,GAAgB,CAChCpZ,KAAK+Y,SAASK,GAAW,EAGzB,IAAIC,EAAYrZ,KAAKsZ,aAAaF,GAElC,GAAIC,EAAU9a,OAASyB,KAAK0Y,OAC1B1Y,KAAK8Y,MAAMzW,KAAK+W,OACX,CAEL,IAAIG,EAAYvZ,KAAK6Y,SAASta,OAC9ByB,KAAK6Y,SAASxW,KAAK,IACnBrC,KAAKwZ,cAAcJ,EAASG,GAE5BvZ,KAAKyZ,eAAeF,EAAWF,IAKrC,OAAOrZ,KAAK6Y,UAgBdN,EAAOjW,UAAU4W,MAAQ,SAASV,EAASC,EAASC,EAAQrQ,GAE1D,GAAImQ,EAAS,CAEX,KAAMA,aAAmBvR,OACvB,MAAMD,MAAM,yCACHwR,EAAU,UAGrBxY,KAAKwY,QAAUA,EACfxY,KAAK6Y,SAAW,GAChB7Y,KAAK8Y,MAAQ,GAEb9Y,KAAKiZ,eAAiBT,EAAQja,OAC9ByB,KAAK+Y,SAAW,IAAI9R,MAAMjH,KAAKiZ,gBAC/BjZ,KAAKgZ,UAAY,IAAI/R,MAAMjH,KAAKiZ,gBAG9BR,IACFzY,KAAKyY,QAAUA,GAGbC,IACF1Y,KAAK0Y,OAASA,GAGZrQ,IACFrI,KAAKqI,SAAWA,IAYpBkQ,EAAOjW,UAAUmX,eAAiB,SAASF,EAAWF,GAMpD,IAAK,IAAI/Z,EAAI,EAAGA,EAAI+Z,EAAU9a,OAAQe,IAAK,CACzC,IAAIoa,EAAWL,EAAU/Z,GAEzB,GAAgC,IAA5BU,KAAK+Y,SAASW,GAAiB,CACjC1Z,KAAK+Y,SAASW,GAAY,EAC1B,IAAIC,EAAa3Z,KAAKsZ,aAAaI,GAE/BC,EAAWpb,QAAUyB,KAAK0Y,SAC5BW,EAAYrZ,KAAK4Z,aAAaP,EAAWM,IAKZ,IAA7B3Z,KAAKgZ,UAAUU,IACjB1Z,KAAKwZ,cAAcE,EAAUH,KAWnChB,EAAOjW,UAAUkX,cAAgB,SAASJ,EAASG,GACjDvZ,KAAK6Y,SAASU,GAAWlX,KAAK+W,GAC9BpZ,KAAKgZ,UAAUI,GAAW,GAW5Bb,EAAOjW,UAAUgX,aAAe,SAASF,GAGvC,IAFA,IAAIC,EAAY,GAEPzS,EAAK,EAAGA,EAAK5G,KAAKiZ,eAAgBrS,IAAM,CACpC5G,KAAKqI,SAASrI,KAAKwY,QAAQY,GAAUpZ,KAAKwY,QAAQ5R,IAClD5G,KAAKyY,SACdY,EAAUhX,KAAKuE,GAInB,OAAOyS,GAYTd,EAAOjW,UAAUsX,aAAe,SAASla,EAAGC,GAG1C,IAFA,IAAIgD,EAAMhD,EAAEpB,OAEHe,EAAI,EAAGA,EAAIqD,EAAKrD,IAAK,CAC5B,IAAIua,EAAIla,EAAEL,GACNI,EAAEgB,QAAQmZ,GAAK,GACjBna,EAAE2C,KAAKwX,GAIX,OAAOna,GAWT6Y,EAAOjW,UAAUsW,mBAAqB,SAAS5X,EAAG8Y,GAIhD,IAHA,IAAIC,EAAM,EACNza,EAAIV,KAAKQ,IAAI4B,EAAEzC,OAAQub,EAAEvb,QAEtBe,KACLya,IAAQ/Y,EAAE1B,GAAKwa,EAAExa,KAAO0B,EAAE1B,GAAKwa,EAAExa,IAGnC,OAAOV,KAAKK,KAAK8a,IAGkBhc,EAAOD,UAC1CC,EAAOD,QAAUya,sBC1NlB,SAASyB,EAAOxB,EAASta,EAAGmK,GAC3BrI,KAAK9B,EAAI,EACT8B,KAAKwY,QAAU,GACfxY,KAAKia,YAAc,GACnBja,KAAKka,UAAY,GAEjBla,KAAKma,KAAK3B,EAASta,EAAGmK,GAMxB2R,EAAO1X,UAAU6X,KAAO,SAAS3B,EAASta,EAAGmK,GAC3CrI,KAAKia,YAAc,GACnBja,KAAKka,UAAY,GAEM,qBAAZ1B,IACTxY,KAAKwY,QAAUA,GAGA,qBAANta,IACT8B,KAAK9B,EAAIA,GAGa,qBAAbmK,IACTrI,KAAKqI,SAAWA,IAOpB2R,EAAO1X,UAAU6W,IAAM,SAASX,EAASta,GACvC8B,KAAKma,KAAK3B,EAASta,GAKnB,IAHA,IAAIyE,EAAM3C,KAAKwY,QAAQja,OAGde,EAAI,EAAGA,EAAIU,KAAK9B,EAAGoB,IAC1BU,KAAKka,UAAU5a,GAAKU,KAAKoa,iBAI3B,IADA,IAAIC,GAAS,EACPA,GAAQ,CAGZA,EAASra,KAAKsa,SAGd,IAAK,IAAIC,EAAa,EAAGA,EAAava,KAAK9B,EAAGqc,IAAc,CAK1D,IAJA,IAAIC,EAAO,IAAIvT,MAAMwT,GACjBC,EAAQ,EAGHC,EAAM,EAAGA,EAAMF,EAAQE,IAC9BH,EAAKG,GAAO,EAGd,IAAK,IAAIpb,EAAI,EAAGA,EAAIoD,EAAKpD,IAAK,CAC5B,IAAIkb,EAASza,KAAKwY,QAAQjZ,GAAGhB,OAG7B,GAAIgc,IAAeva,KAAKia,YAAY1a,GAAI,CACtC,IAASob,EAAM,EAAGA,EAAMF,EAAQE,IAC9BH,EAAKG,IAAQ3a,KAAKwY,QAAQjZ,GAAGob,GAE/BD,KAIJ,GAAIA,EAAQ,EAAG,CAEb,IAASC,EAAM,EAAGA,EAAMF,EAAQE,IAC9BH,EAAKG,IAAQD,EAEf1a,KAAKka,UAAUK,GAAcC,OAG7Bxa,KAAKka,UAAUK,GAAcva,KAAKoa,iBAClCC,GAAS,GAKf,OAAOra,KAAK4a,eAQdZ,EAAO1X,UAAU8X,eAAiB,WAChC,IACIS,EACAjU,EAFAkU,EAAQ9a,KAAKwY,QAAQja,OAAQ,EAIjC,GACEqI,EAAKhI,KAAK4L,MAAM5L,KAAKmc,SAAWD,GAChCD,EAAW7a,KAAKwY,QAAQ5R,SACjB5G,KAAKka,UAAUxZ,QAAQma,IAAa,GAE7C,OAAOA,GAQTb,EAAO1X,UAAUgY,OAAS,WAKxB,IAJA,IAEIU,EAFAX,GAAS,EACT1X,EAAM3C,KAAKwY,QAAQja,OAGde,EAAI,EAAGA,EAAIqD,EAAKrD,KACvB0b,EAAkBhb,KAAKib,OAAOjb,KAAKwY,QAAQlZ,GAAIU,KAAKka,UAAWla,KAAKqI,YAE7CrI,KAAKia,YAAY3a,KACtCU,KAAKia,YAAY3a,GAAK0b,EACtBX,GAAS,GAIb,OAAOA,GAQTL,EAAO1X,UAAUsY,YAAc,WAI7B,IAHA,IACIL,EADA1B,EAAW,IAAI5R,MAAMjH,KAAK9B,GAGrBkb,EAAU,EAAGA,EAAUpZ,KAAKia,YAAY1b,OAAQ6a,IAInB,qBAAzBP,EAHX0B,EAAava,KAAKia,YAAYb,MAI5BP,EAAS0B,GAAc,IAGzB1B,EAAS0B,GAAYlY,KAAK+W,GAG5B,OAAOP,GAWTmB,EAAO1X,UAAU2Y,OAAS,SAASnU,EAAOoU,EAAKC,GAM7C,IALA,IAGIvI,EAHAxT,EAAMgc,OAAOC,UACbC,EAAM,EACN3Y,EAAMuY,EAAI3c,OAGLe,EAAI,EAAGA,EAAIqD,EAAKrD,KACvBsT,EAAIuI,EAAErU,EAAOoU,EAAI5b,KACTF,IACNA,EAAMwT,EACN0I,EAAMhc,GAIV,OAAOgc,GAUTtB,EAAO1X,UAAU+F,SAAW,SAASrH,EAAG8Y,GAItC,IAHA,IAAIC,EAAM,EACNza,EAAIV,KAAKQ,IAAI4B,EAAEzC,OAAQub,EAAEvb,QAEtBe,KAAK,CACV,IAAIic,EAAOva,EAAE1B,GAAKwa,EAAExa,GACpBya,GAAOwB,EAAOA,EAGhB,OAAO3c,KAAKK,KAAK8a,IAGkBhc,EAAOD,UAC1CC,EAAOD,QAAUkc,0BC9MnB,GAAqCjc,EAAOD,QACtC,IAAI0d,EAAgB,EAAQ,OAoBlC,SAASC,EAAOjD,EAASC,EAASC,EAAQC,GAExC3Y,KAAKyY,QAAU,EAEfzY,KAAK0Y,OAAS,EAEd1Y,KAAKqI,SAAWrI,KAAK4Y,mBAKrB5Y,KAAK0b,cAAgB,GAErB1b,KAAK2b,WAAa,GAElB3b,KAAK4b,cAAgB,EAErB5b,KAAK6b,aAAe,GAEpB7b,KAAKkZ,MAAMV,EAASC,EAASC,EAAQC,GAavC8C,EAAOnZ,UAAU6W,IAAM,SAASX,EAASC,EAASC,EAAQC,GACxD3Y,KAAKkZ,MAAMV,EAASC,EAASC,EAAQC,GAErC,IAAK,IAAIS,EAAU,EAAGrN,EAAI/L,KAAKwY,QAAQja,OAAQ6a,EAAUrN,EAAGqN,IAC1D,GAAiC,IAA7BpZ,KAAK2b,WAAWvC,GAAgB,CAClCpZ,KAAK2b,WAAWvC,GAAW,EAC3BpZ,KAAK6Y,SAASxW,KAAK,CAAC+W,IACpB,IAAIG,EAAYvZ,KAAK6Y,SAASta,OAAS,EAEvCyB,KAAK6b,aAAaxZ,KAAK+W,GACvB,IAAI0C,EAAgB,IAAIN,EAAc,KAAM,KAAM,OAC9CnC,EAAYrZ,KAAKsZ,aAAaF,QAGIhM,IAAlCpN,KAAK+b,gBAAgB3C,KACvBpZ,KAAKgc,aAAa5C,EAASC,EAAWyC,GACtC9b,KAAKyZ,eAAeF,EAAWuC,IAKrC,OAAO9b,KAAK6Y,UASd4C,EAAOnZ,UAAU2Z,oBAAsB,WAGrC,IAFA,IAAIC,EAAmB,GAEd5c,EAAI,EAAGyM,EAAI/L,KAAK6b,aAAatd,OAAQe,EAAIyM,EAAGzM,IAAK,CACxD,IAAI8Z,EAAUpZ,KAAK6b,aAAavc,GAC5B+I,EAAWrI,KAAK0b,cAActC,GAElC8C,EAAiB7Z,KAAK,CAAC+W,EAAS/Q,IAGlC,OAAO6T,GAgBTT,EAAOnZ,UAAU4W,MAAQ,SAASV,EAASC,EAASC,EAAQrQ,GAE1D,GAAImQ,EAAS,CAEX,KAAMA,aAAmBvR,OACvB,MAAMD,MAAM,yCACHwR,EAAU,UAGrBxY,KAAKwY,QAAUA,EACfxY,KAAK6Y,SAAW,GAChB7Y,KAAK0b,cAAgB,IAAIzU,MAAMjH,KAAKwY,QAAQja,QAC5CyB,KAAK2b,WAAa,IAAI1U,MAAMjH,KAAKwY,QAAQja,QACzCyB,KAAK4b,cAAgB,EACrB5b,KAAK6b,aAAe,GAGlBpD,IACFzY,KAAKyY,QAAUA,GAGbC,IACF1Y,KAAK0Y,OAASA,GAGZrQ,IACFrI,KAAKqI,SAAWA,IAapBoT,EAAOnZ,UAAU0Z,aAAe,SAAS5C,EAASC,EAAWxH,GAC3D,IAAIsK,EAAOnc,KAEXA,KAAK4b,cAAgB5b,KAAK+b,gBAAgB3C,GAC1CC,EAAU3N,SAAQ,SAASgO,GACzB,QAAkCtM,IAA9B+O,EAAKR,WAAWjC,GAAyB,CAC3C,IAAI3G,EAAOoJ,EAAK9T,SAAS8T,EAAK3D,QAAQY,GAAU+C,EAAK3D,QAAQkB,IACzD0C,EAAuBxd,KAAKM,IAAIid,EAAKP,cAAe7I,QAEnB3F,IAAjC+O,EAAKT,cAAchC,IACrByC,EAAKT,cAAchC,GAAY0C,EAC/BvK,EAAM7O,OAAO0W,EAAU0C,IAEnBA,EAAuBD,EAAKT,cAAchC,KAC5CyC,EAAKT,cAAchC,GAAY0C,EAC/BvK,EAAMvO,OAAOoW,GACb7H,EAAM7O,OAAO0W,EAAU0C,SAejCX,EAAOnZ,UAAUmX,eAAiB,SAASF,EAAW1H,GAGpD,IAFA,IAAIwK,EAAgBxK,EAAMyK,cAEjBtb,EAAI,EAAG+K,EAAIsQ,EAAc9d,OAAQyC,EAAI+K,EAAG/K,IAAK,CACpD,IAAIoY,EAAUiD,EAAcrb,GAC5B,QAAiCoM,IAA7BpN,KAAK2b,WAAWvC,GAAwB,CAC1C,IAAIC,EAAYrZ,KAAKsZ,aAAaF,GAClCpZ,KAAK2b,WAAWvC,GAAW,EAE3BpZ,KAAK6Y,SAASU,GAAWlX,KAAK+W,GAC9BpZ,KAAK6b,aAAaxZ,KAAK+W,QAEehM,IAAlCpN,KAAK+b,gBAAgB3C,KACvBpZ,KAAKgc,aAAa5C,EAASC,EAAWxH,GACtC7R,KAAKyZ,eAAeF,EAAW1H,OAavC4J,EAAOnZ,UAAUyZ,gBAAkB,SAAS3C,GAE1C,IADA,IAAIrN,EAAI/L,KAAKyY,QACJ8D,EAAe,EAAGA,EAAexQ,EAAGwQ,IAAgB,CAE3D,GADgBvc,KAAKsZ,aAAaF,EAASmD,GAC7Bhe,QAAUyB,KAAK0Y,OAC3B,OAAO6D,IAebd,EAAOnZ,UAAUgX,aAAe,SAASF,EAASX,GAChDA,EAAUA,GAAWzY,KAAKyY,QAG1B,IAFA,IAAIY,EAAY,GAEPzS,EAAK,EAAGmF,EAAI/L,KAAKwY,QAAQja,OAAQqI,EAAKmF,EAAGnF,IAC5C5G,KAAKqI,SAASrI,KAAKwY,QAAQY,GAAUpZ,KAAKwY,QAAQ5R,IAAO6R,GAC3DY,EAAUhX,KAAKuE,GAInB,OAAOyS,GAcToC,EAAOnZ,UAAUsW,mBAAqB,SAAS5X,EAAG8Y,GAIhD,IAHA,IAAIC,EAAM,EACNza,EAAIV,KAAKQ,IAAI4B,EAAEzC,OAAQub,EAAEvb,QAEtBe,KACLya,IAAQ/Y,EAAE1B,GAAKwa,EAAExa,KAAO0B,EAAE1B,GAAKwa,EAAExa,IAGnC,OAAOV,KAAKK,KAAK8a,IAGkBhc,EAAOD,UAC1CC,EAAOD,QAAU2d,sBCrPnB,SAASD,EAAcgB,EAAUC,EAAYC,GAE3C1c,KAAK2c,OAAS,GAEd3c,KAAK4c,YAAc,GAEnB5c,KAAK6c,SAAW,OAEhB7c,KAAKkZ,MAAMsD,EAAUC,EAAYC,GAWnClB,EAAclZ,UAAUU,OAAS,SAAS8Z,EAAKC,GAI7C,IAHA,IAAIC,EAAgBhd,KAAK2c,OAAOpe,OAC5BiF,EAAQwZ,EAELxZ,KAAS,CACd,IAAIyZ,EAAYjd,KAAK4c,YAAYpZ,GACX,SAAlBxD,KAAK6c,SACHE,EAAWE,IACbD,EAAgBxZ,GAGduZ,EAAWE,IACbD,EAAgBxZ,GAKtBxD,KAAKkd,UAAUJ,EAAKC,EAAUC,IAUhCxB,EAAclZ,UAAUgB,OAAS,SAASwZ,GAGxC,IAFA,IAAItZ,EAAQxD,KAAK2c,OAAOpe,OAEjBiF,KAAS,CAEd,GAAIsZ,IADO9c,KAAK2c,OAAOnZ,GACL,CAChBxD,KAAK2c,OAAO/Y,OAAOJ,EAAO,GAC1BxD,KAAK4c,YAAYhZ,OAAOJ,EAAO,GAC/B,SAYNgY,EAAclZ,UAAUoJ,QAAU,SAASwE,GACzClQ,KAAK2c,OAAOjR,QAAQwE,IAOtBsL,EAAclZ,UAAUga,YAAc,WACpC,OAAOtc,KAAK2c,QAQdnB,EAAclZ,UAAU6a,mBAAqB,SAAS3Z,GACpD,OAAOxD,KAAK4c,YAAYpZ,IAO1BgY,EAAclZ,UAAU8a,cAAgB,WACtC,OAAOpd,KAAK4c,aAOdpB,EAAclZ,UAAU+a,0BAA4B,WAGlD,IAFA,IAAI3f,EAAS,GAEJ4B,EAAI,EAAGyM,EAAI/L,KAAK2c,OAAOpe,OAAQe,EAAIyM,EAAGzM,IAC7C5B,EAAO2E,KAAK,CAACrC,KAAK2c,OAAOrd,GAAIU,KAAK4c,YAAYtd,KAGhD,OAAO5B,GAWT8d,EAAclZ,UAAU4W,MAAQ,SAASsD,EAAUC,EAAYC,GAE7D,GAAIF,GAAYC,EAAY,CAI1B,GAHAzc,KAAK2c,OAAS,GACd3c,KAAK4c,YAAc,GAEfJ,EAASje,SAAWke,EAAWle,OACjC,MAAM,IAAIyI,MAAM,oCAGlB,IAAK,IAAI1H,EAAI,EAAGA,EAAIkd,EAASje,OAAQe,IACnCU,KAAKgD,OAAOwZ,EAASld,GAAImd,EAAWnd,IAIpCod,IACF1c,KAAK6c,SAAWH,IAYpBlB,EAAclZ,UAAU4a,UAAY,SAASJ,EAAKC,EAAUvZ,GACtDxD,KAAK2c,OAAOpe,SAAWiF,GACzBxD,KAAK2c,OAAOta,KAAKya,GACjB9c,KAAK4c,YAAYva,KAAK0a,KAEtB/c,KAAK2c,OAAO/Y,OAAOJ,EAAO,EAAGsZ,GAC7B9c,KAAK4c,YAAYhZ,OAAOJ,EAAO,EAAGuZ,KAIDhf,EAAOD,UAC1CC,EAAOD,QAAU0d,0BCjLkBzd,EAAOD,UACxCC,EAAOD,QAAU,CACfya,OAAQ,EAAQ,OAChByB,OAAQ,EAAQ,OAChByB,OAAQ,EAAQ,OAChBD,cAAe,EAAQ,wCCD7B,SAAS8B,EAAO7a,EAAM8a,EAAa5C,GAE/BA,EAAMA,GAAO,EAEb,IAOIxZ,EAAMC,EAAMC,EAAMC,EAAM6S,EAAGC,EAAGoJ,EAP9BC,EAAWF,GAAeA,EAAYhf,OACtCmf,EAAWD,EAAWF,EAAY,GAAK5C,EAAMlY,EAAKlE,OAClDof,EAAYC,EAAWnb,EAAM,EAAGib,EAAU/C,GAAK,GAC/CkD,EAAY,GAEhB,IAAKF,GAAaA,EAAUvL,OAASuL,EAAUlL,KAAM,OAAOoL,EAO5D,GAHIJ,IAAUE,EAqPlB,SAAwBlb,EAAM8a,EAAaI,EAAWhD,GAClD,IACIrb,EAAGqD,EAAiBmb,EADpBjM,EAAQ,GAGZ,IAAKvS,EAAI,EAAGqD,EAAM4a,EAAYhf,OAAQe,EAAIqD,EAAKrD,KAG3Cwe,EAAOF,EAAWnb,EAFV8a,EAAYje,GAAKqb,EACnBrb,EAAIqD,EAAM,EAAI4a,EAAYje,EAAI,GAAKqb,EAAMlY,EAAKlE,OAChBoc,GAAK,MAC5BmD,EAAK1L,OAAM0L,EAAKC,SAAU,GACvClM,EAAMxP,KAAK2b,EAAYF,IAM3B,IAHAjM,EAAM/L,KAAKmY,GAGN3e,EAAI,EAAGA,EAAIuS,EAAMtT,OAAQe,IAE1Bqe,EAAYO,EADZP,EAAYQ,EAActM,EAAMvS,GAAIqe,GACAA,EAAUvL,MAGlD,OAAOuL,EAzQmBS,CAAe3b,EAAM8a,EAAaI,EAAWhD,IAGnElY,EAAKlE,OAAS,GAAKoc,EAAK,CACxBxZ,EAAOE,EAAOoB,EAAK,GACnBrB,EAAOE,EAAOmB,EAAK,GAEnB,IAAK,IAAInD,EAAIqb,EAAKrb,EAAIoe,EAAUpe,GAAKqb,GACjCxG,EAAI1R,EAAKnD,IAED6B,IAAMA,EAAOgT,IADrBC,EAAI3R,EAAKnD,EAAI,IAEL8B,IAAMA,EAAOgT,GACjBD,EAAI9S,IAAMA,EAAO8S,GACjBC,EAAI9S,IAAMA,EAAO8S,GAKzBoJ,EAAsB,KADtBA,EAAU5e,KAAKM,IAAImC,EAAOF,EAAMG,EAAOF,IACb,EAAIoc,EAAU,EAK5C,OAFAa,EAAaV,EAAWE,EAAWlD,EAAKxZ,EAAMC,EAAMoc,GAE7CK,EAIX,SAASD,EAAWnb,EAAM6b,EAAOC,EAAK5D,EAAK6D,GACvC,IAAIlf,EAAGsS,EAEP,GAAI4M,IAAeC,EAAWhc,EAAM6b,EAAOC,EAAK5D,GAAO,EACnD,IAAKrb,EAAIgf,EAAOhf,EAAIif,EAAKjf,GAAKqb,EAAK/I,EAAOE,EAAWxS,EAAGmD,EAAKnD,GAAImD,EAAKnD,EAAI,GAAIsS,QAE9E,IAAKtS,EAAIif,EAAM5D,EAAKrb,GAAKgf,EAAOhf,GAAKqb,EAAK/I,EAAOE,EAAWxS,EAAGmD,EAAKnD,GAAImD,EAAKnD,EAAI,GAAIsS,GAQzF,OALIA,GAAQ8M,EAAO9M,EAAMA,EAAKQ,QAC1BuM,EAAW/M,GACXA,EAAOA,EAAKQ,MAGTR,EAIX,SAASsM,EAAaI,EAAOC,GACzB,IAAKD,EAAO,OAAOA,EACdC,IAAKA,EAAMD,GAEhB,IACIM,EADA5d,EAAIsd,EAER,GAGI,GAFAM,GAAQ,EAEH5d,EAAE+c,UAAYW,EAAO1d,EAAGA,EAAEoR,OAAqC,IAA5BvN,EAAK7D,EAAEyR,KAAMzR,EAAGA,EAAEoR,MAOtDpR,EAAIA,EAAEoR,SAP8D,CAGpE,GAFAuM,EAAW3d,IACXA,EAAIud,EAAMvd,EAAEyR,QACFzR,EAAEoR,KAAM,MAClBwM,GAAQ,SAKPA,GAAS5d,IAAMud,GAExB,OAAOA,EAIX,SAASF,EAAaQ,EAAKhB,EAAWlD,EAAKxZ,EAAMC,EAAMoc,EAASsB,GAC5D,GAAKD,EAAL,EAGKC,GAAQtB,GA0RjB,SAAoBc,EAAOnd,EAAMC,EAAMoc,GACnC,IAAIxc,EAAIsd,EACR,GACgB,OAARtd,EAAErC,IAAYqC,EAAErC,EAAIogB,EAAO/d,EAAEmT,EAAGnT,EAAEoT,EAAGjT,EAAMC,EAAMoc,IACrDxc,EAAEge,MAAQhe,EAAEyR,KACZzR,EAAEie,MAAQje,EAAEoR,KACZpR,EAAIA,EAAEoR,WACDpR,IAAMsd,GAEftd,EAAEge,MAAMC,MAAQ,KAChBje,EAAEge,MAAQ,KAOd,SAAoBlB,GAChB,IAAIxe,EAAG0B,EAAG8Y,EAAG9J,EAAGkP,EAAMC,EAAWC,EAAOC,EACpCC,EAAS,EAEb,EAAG,CAMC,IALAte,EAAI8c,EACJA,EAAO,KACPoB,EAAO,KACPC,EAAY,EAELne,GAAG,CAIN,IAHAme,IACArF,EAAI9Y,EACJoe,EAAQ,EACH9f,EAAI,EAAGA,EAAIggB,IACZF,IACAtF,EAAIA,EAAEmF,OAFc3f,KAOxB,IAFA+f,EAAQC,EAEDF,EAAQ,GAAMC,EAAQ,GAAKvF,GAEhB,IAAVsF,IAA0B,IAAVC,IAAgBvF,GAAK9Y,EAAErC,GAAKmb,EAAEnb,IAC9CqR,EAAIhP,EACJA,EAAIA,EAAEie,MACNG,MAEApP,EAAI8J,EACJA,EAAIA,EAAEmF,MACNI,KAGAH,EAAMA,EAAKD,MAAQjP,EAClB8N,EAAO9N,EAEZA,EAAEgP,MAAQE,EACVA,EAAOlP,EAGXhP,EAAI8Y,EAGRoF,EAAKD,MAAQ,KACbK,GAAU,QAELH,EAAY,GAnDrBI,CAAWve,GAtSWwe,CAAWX,EAAK1d,EAAMC,EAAMoc,GAMlD,IAJA,IACI/K,EAAML,EADN7F,EAAOsS,EAIJA,EAAIpM,OAASoM,EAAIzM,MAIpB,GAHAK,EAAOoM,EAAIpM,KACXL,EAAOyM,EAAIzM,KAEPoL,EAAUiC,EAAYZ,EAAK1d,EAAMC,EAAMoc,GAAWkC,EAAMb,GAExDhB,EAAUxb,KAAKoQ,EAAKnT,EAAIqb,GACxBkD,EAAUxb,KAAKwc,EAAIvf,EAAIqb,GACvBkD,EAAUxb,KAAK+P,EAAK9S,EAAIqb,GAExBgE,EAAWE,GAGXA,EAAMzM,EAAKA,KACX7F,EAAO6F,EAAKA,UAQhB,IAHAyM,EAAMzM,KAGM7F,EAAM,CAETuS,EAIe,IAATA,EAEPT,EADAQ,EAAMc,EAAuBzB,EAAaW,GAAMhB,EAAWlD,GACzCkD,EAAWlD,EAAKxZ,EAAMC,EAAMoc,EAAS,GAGvC,IAATsB,GACPc,EAAYf,EAAKhB,EAAWlD,EAAKxZ,EAAMC,EAAMoc,GAT7Ca,EAAaH,EAAaW,GAAMhB,EAAWlD,EAAKxZ,EAAMC,EAAMoc,EAAS,GAYzE,QAMZ,SAASkC,EAAMb,GACX,IAAInf,EAAImf,EAAIpM,KACR9S,EAAIkf,EACJlM,EAAIkM,EAAIzM,KAEZ,GAAIvN,EAAKnF,EAAGC,EAAGgT,IAAM,EAAG,OAAO,EAK/B,IAFA,IAAI3R,EAAI6d,EAAIzM,KAAKA,KAEVpR,IAAM6d,EAAIpM,MAAM,CACnB,GAAIoN,EAAgBngB,EAAEyU,EAAGzU,EAAE0U,EAAGzU,EAAEwU,EAAGxU,EAAEyU,EAAGzB,EAAEwB,EAAGxB,EAAEyB,EAAGpT,EAAEmT,EAAGnT,EAAEoT,IACrDvP,EAAK7D,EAAEyR,KAAMzR,EAAGA,EAAEoR,OAAS,EAAG,OAAO,EACzCpR,EAAIA,EAAEoR,KAGV,OAAO,EAGX,SAASqN,EAAYZ,EAAK1d,EAAMC,EAAMoc,GAClC,IAAI9d,EAAImf,EAAIpM,KACR9S,EAAIkf,EACJlM,EAAIkM,EAAIzM,KAEZ,GAAIvN,EAAKnF,EAAGC,EAAGgT,IAAM,EAAG,OAAO,EAgB/B,IAbA,IAAImN,EAAQpgB,EAAEyU,EAAIxU,EAAEwU,EAAKzU,EAAEyU,EAAIxB,EAAEwB,EAAIzU,EAAEyU,EAAIxB,EAAEwB,EAAMxU,EAAEwU,EAAIxB,EAAEwB,EAAIxU,EAAEwU,EAAIxB,EAAEwB,EACnE4L,EAAQrgB,EAAE0U,EAAIzU,EAAEyU,EAAK1U,EAAE0U,EAAIzB,EAAEyB,EAAI1U,EAAE0U,EAAIzB,EAAEyB,EAAMzU,EAAEyU,EAAIzB,EAAEyB,EAAIzU,EAAEyU,EAAIzB,EAAEyB,EACnE4L,EAAQtgB,EAAEyU,EAAIxU,EAAEwU,EAAKzU,EAAEyU,EAAIxB,EAAEwB,EAAIzU,EAAEyU,EAAIxB,EAAEwB,EAAMxU,EAAEwU,EAAIxB,EAAEwB,EAAIxU,EAAEwU,EAAIxB,EAAEwB,EACnE8L,EAAQvgB,EAAE0U,EAAIzU,EAAEyU,EAAK1U,EAAE0U,EAAIzB,EAAEyB,EAAI1U,EAAE0U,EAAIzB,EAAEyB,EAAMzU,EAAEyU,EAAIzB,EAAEyB,EAAIzU,EAAEyU,EAAIzB,EAAEyB,EAGnE8L,EAAOnB,EAAOe,EAAOC,EAAO5e,EAAMC,EAAMoc,GACxC2C,EAAOpB,EAAOiB,EAAOC,EAAO9e,EAAMC,EAAMoc,GAExCxc,EAAI6d,EAAIG,MACRvgB,EAAIogB,EAAII,MAGLje,GAAKA,EAAErC,GAAKuhB,GAAQzhB,GAAKA,EAAEE,GAAKwhB,GAAM,CACzC,GAAInf,IAAM6d,EAAIpM,MAAQzR,IAAM6d,EAAIzM,MAC5ByN,EAAgBngB,EAAEyU,EAAGzU,EAAE0U,EAAGzU,EAAEwU,EAAGxU,EAAEyU,EAAGzB,EAAEwB,EAAGxB,EAAEyB,EAAGpT,EAAEmT,EAAGnT,EAAEoT,IACrDvP,EAAK7D,EAAEyR,KAAMzR,EAAGA,EAAEoR,OAAS,EAAG,OAAO,EAGzC,GAFApR,EAAIA,EAAEge,MAEFvgB,IAAMogB,EAAIpM,MAAQhU,IAAMogB,EAAIzM,MAC5ByN,EAAgBngB,EAAEyU,EAAGzU,EAAE0U,EAAGzU,EAAEwU,EAAGxU,EAAEyU,EAAGzB,EAAEwB,EAAGxB,EAAEyB,EAAG3V,EAAE0V,EAAG1V,EAAE2V,IACrDvP,EAAKpG,EAAEgU,KAAMhU,EAAGA,EAAE2T,OAAS,EAAG,OAAO,EACzC3T,EAAIA,EAAEwgB,MAIV,KAAOje,GAAKA,EAAErC,GAAKuhB,GAAM,CACrB,GAAIlf,IAAM6d,EAAIpM,MAAQzR,IAAM6d,EAAIzM,MAC5ByN,EAAgBngB,EAAEyU,EAAGzU,EAAE0U,EAAGzU,EAAEwU,EAAGxU,EAAEyU,EAAGzB,EAAEwB,EAAGxB,EAAEyB,EAAGpT,EAAEmT,EAAGnT,EAAEoT,IACrDvP,EAAK7D,EAAEyR,KAAMzR,EAAGA,EAAEoR,OAAS,EAAG,OAAO,EACzCpR,EAAIA,EAAEge,MAIV,KAAOvgB,GAAKA,EAAEE,GAAKwhB,GAAM,CACrB,GAAI1hB,IAAMogB,EAAIpM,MAAQhU,IAAMogB,EAAIzM,MAC5ByN,EAAgBngB,EAAEyU,EAAGzU,EAAE0U,EAAGzU,EAAEwU,EAAGxU,EAAEyU,EAAGzB,EAAEwB,EAAGxB,EAAEyB,EAAG3V,EAAE0V,EAAG1V,EAAE2V,IACrDvP,EAAKpG,EAAEgU,KAAMhU,EAAGA,EAAE2T,OAAS,EAAG,OAAO,EACzC3T,EAAIA,EAAEwgB,MAGV,OAAO,EAIX,SAASU,EAAuBrB,EAAOT,EAAWlD,GAC9C,IAAI3Z,EAAIsd,EACR,EAAG,CACC,IAAI5e,EAAIsB,EAAEyR,KACN9S,EAAIqB,EAAEoR,KAAKA,MAEVsM,EAAOhf,EAAGC,IAAMoC,EAAWrC,EAAGsB,EAAGA,EAAEoR,KAAMzS,IAAMygB,EAAc1gB,EAAGC,IAAMygB,EAAczgB,EAAGD,KAExFme,EAAUxb,KAAK3C,EAAEJ,EAAIqb,GACrBkD,EAAUxb,KAAKrB,EAAE1B,EAAIqb,GACrBkD,EAAUxb,KAAK1C,EAAEL,EAAIqb,GAGrBgE,EAAW3d,GACX2d,EAAW3d,EAAEoR,MAEbpR,EAAIsd,EAAQ3e,GAEhBqB,EAAIA,EAAEoR,WACDpR,IAAMsd,GAEf,OAAOJ,EAAald,GAIxB,SAAS4e,EAAYtB,EAAOT,EAAWlD,EAAKxZ,EAAMC,EAAMoc,GAEpD,IAAI9d,EAAI4e,EACR,EAAG,CAEC,IADA,IAAI3e,EAAID,EAAE0S,KAAKA,KACRzS,IAAMD,EAAE+S,MAAM,CACjB,GAAI/S,EAAEJ,IAAMK,EAAEL,GAAK+gB,EAAgB3gB,EAAGC,GAAI,CAEtC,IAAIgT,EAAI2N,EAAa5gB,EAAGC,GASxB,OANAD,EAAIwe,EAAaxe,EAAGA,EAAE0S,MACtBO,EAAIuL,EAAavL,EAAGA,EAAEP,MAGtBiM,EAAa3e,EAAGme,EAAWlD,EAAKxZ,EAAMC,EAAMoc,QAC5Ca,EAAa1L,EAAGkL,EAAWlD,EAAKxZ,EAAMC,EAAMoc,GAGhD7d,EAAIA,EAAEyS,KAEV1S,EAAIA,EAAE0S,WACD1S,IAAM4e,GA2BnB,SAASL,EAASve,EAAGC,GACjB,OAAOD,EAAEyU,EAAIxU,EAAEwU,EAInB,SAASgK,EAAcoC,EAAM5C,GACzB,IAAI6C,EAgBR,SAAwBD,EAAM5C,GAC1B,IAIIjf,EAJAsC,EAAI2c,EACJ8C,EAAKF,EAAKpM,EACVuM,EAAKH,EAAKnM,EACVuM,GAAMhjB,EAAAA,EAKV,EAAG,CACC,GAAI+iB,GAAM1f,EAAEoT,GAAKsM,GAAM1f,EAAEoR,KAAKgC,GAAKpT,EAAEoR,KAAKgC,IAAMpT,EAAEoT,EAAG,CACjD,IAAID,EAAInT,EAAEmT,GAAKuM,EAAK1f,EAAEoT,IAAMpT,EAAEoR,KAAK+B,EAAInT,EAAEmT,IAAMnT,EAAEoR,KAAKgC,EAAIpT,EAAEoT,GAC5D,GAAID,GAAKsM,GAAMtM,EAAIwM,EAAI,CAEnB,GADAA,EAAKxM,EACDA,IAAMsM,EAAI,CACV,GAAIC,IAAO1f,EAAEoT,EAAG,OAAOpT,EACvB,GAAI0f,IAAO1f,EAAEoR,KAAKgC,EAAG,OAAOpT,EAAEoR,KAElC1T,EAAIsC,EAAEmT,EAAInT,EAAEoR,KAAK+B,EAAInT,EAAIA,EAAEoR,MAGnCpR,EAAIA,EAAEoR,WACDpR,IAAM2c,GAEf,IAAKjf,EAAG,OAAO,KAEf,GAAI+hB,IAAOE,EAAI,OAAOjiB,EAMtB,IAIIkiB,EAJArU,EAAO7N,EACPmiB,EAAKniB,EAAEyV,EACP2M,EAAKpiB,EAAE0V,EACP2M,EAASpjB,EAAAA,EAGbqD,EAAItC,EAEJ,GACQ+hB,GAAMzf,EAAEmT,GAAKnT,EAAEmT,GAAK0M,GAAMJ,IAAOzf,EAAEmT,GAC/B0L,EAAgBa,EAAKI,EAAKL,EAAKE,EAAID,EAAIG,EAAIC,EAAIJ,EAAKI,EAAKH,EAAKF,EAAIC,EAAI1f,EAAEmT,EAAGnT,EAAEoT,KAEjFwM,EAAMhiB,KAAKoiB,IAAIN,EAAK1f,EAAEoT,IAAMqM,EAAKzf,EAAEmT,GAE/BiM,EAAcpf,EAAGuf,KAChBK,EAAMG,GAAWH,IAAQG,IAAW/f,EAAEmT,EAAIzV,EAAEyV,GAAMnT,EAAEmT,IAAMzV,EAAEyV,GAAK8M,EAAqBviB,EAAGsC,OAC1FtC,EAAIsC,EACJ+f,EAASH,IAIjB5f,EAAIA,EAAEoR,WACDpR,IAAMuL,GAEf,OAAO7N,EAxEMwiB,CAAeX,EAAM5C,GAClC,IAAK6C,EACD,OAAO7C,EAGX,IAAIwD,EAAgBb,EAAaE,EAAQD,GAGrCa,EAAiBlD,EAAasC,EAAQA,EAAOpO,MAIjD,OAHA8L,EAAaiD,EAAeA,EAAc/O,MAGnCuL,IAAc6C,EAASY,EAAiBzD,EAgEnD,SAASsD,EAAqBviB,EAAGsC,GAC7B,OAAO6D,EAAKnG,EAAE+T,KAAM/T,EAAGsC,EAAEyR,MAAQ,GAAK5N,EAAK7D,EAAEoR,KAAM1T,EAAGA,EAAE0T,MAAQ,EAyEpE,SAAS2M,EAAO5K,EAAGC,EAAGjT,EAAMC,EAAMoc,GAe9B,OAPArJ,EAAqB,aADrBA,EAAqB,YADrBA,EAAqB,YADrBA,EAAqB,WAHrBA,EAAI,OAASA,EAAIhT,GAAQqc,GAGfrJ,GAAK,IACLA,GAAK,IACLA,GAAK,IACLA,GAAK,KAKfC,EAAqB,aADrBA,EAAqB,YADrBA,EAAqB,YADrBA,EAAqB,WAPrBA,EAAI,OAASA,EAAIhT,GAAQoc,GAOfpJ,GAAK,IACLA,GAAK,IACLA,GAAK,IACLA,GAAK,KAEE,EAIrB,SAAS4J,EAAYM,GACjB,IAAItd,EAAIsd,EACJ+C,EAAW/C,EACf,IACQtd,EAAEmT,EAAIkN,EAASlN,GAAMnT,EAAEmT,IAAMkN,EAASlN,GAAKnT,EAAEoT,EAAIiN,EAASjN,KAAIiN,EAAWrgB,GAC7EA,EAAIA,EAAEoR,WACDpR,IAAMsd,GAEf,OAAO+C,EAIX,SAASxB,EAAgByB,EAAIC,EAAIC,EAAIC,EAAIC,EAAIC,EAAIC,EAAIC,GACjD,OAAQH,EAAKE,IAAOL,EAAKM,IAAOP,EAAKM,IAAOD,EAAKE,IAAO,IAChDP,EAAKM,IAAOH,EAAKI,IAAOL,EAAKI,IAAOL,EAAKM,IAAO,IAChDL,EAAKI,IAAOD,EAAKE,IAAOH,EAAKE,IAAOH,EAAKI,IAAO,EAI5D,SAASxB,EAAgB3gB,EAAGC,GACxB,OAAOD,EAAE0S,KAAK9S,IAAMK,EAAEL,GAAKI,EAAE+S,KAAKnT,IAAMK,EAAEL,IA2C9C,SAA2BI,EAAGC,GAC1B,IAAIqB,EAAItB,EACR,EAAG,CACC,GAAIsB,EAAE1B,IAAMI,EAAEJ,GAAK0B,EAAEoR,KAAK9S,IAAMI,EAAEJ,GAAK0B,EAAE1B,IAAMK,EAAEL,GAAK0B,EAAEoR,KAAK9S,IAAMK,EAAEL,GAC7DyC,EAAWf,EAAGA,EAAEoR,KAAM1S,EAAGC,GAAI,OAAO,EAC5CqB,EAAIA,EAAEoR,WACDpR,IAAMtB,GAEf,OAAO,EAnDyCoiB,CAAkBpiB,EAAGC,KAC7DygB,EAAc1gB,EAAGC,IAAMygB,EAAczgB,EAAGD,IA6DpD,SAAsBA,EAAGC,GACrB,IAAIqB,EAAItB,EACJ4T,GAAS,EACTsO,GAAMliB,EAAEyU,EAAIxU,EAAEwU,GAAK,EACnB0N,GAAMniB,EAAE0U,EAAIzU,EAAEyU,GAAK,EACvB,GACUpT,EAAEoT,EAAIyN,IAAS7gB,EAAEoR,KAAKgC,EAAIyN,GAAQ7gB,EAAEoR,KAAKgC,IAAMpT,EAAEoT,GAC9CwN,GAAM5gB,EAAEoR,KAAK+B,EAAInT,EAAEmT,IAAM0N,EAAK7gB,EAAEoT,IAAMpT,EAAEoR,KAAKgC,EAAIpT,EAAEoT,GAAKpT,EAAEmT,IAC/Db,GAAUA,GACdtS,EAAIA,EAAEoR,WACDpR,IAAMtB,GAEf,OAAO4T,EAzE+CyO,CAAariB,EAAGC,KAC7DkF,EAAKnF,EAAE+S,KAAM/S,EAAGC,EAAE8S,OAAS5N,EAAKnF,EAAGC,EAAE8S,KAAM9S,KAC5C+e,EAAOhf,EAAGC,IAAMkF,EAAKnF,EAAE+S,KAAM/S,EAAGA,EAAE0S,MAAQ,GAAKvN,EAAKlF,EAAE8S,KAAM9S,EAAGA,EAAEyS,MAAQ,GAIrF,SAASvN,EAAK7D,EAAG8Y,EAAGkI,GAChB,OAAQlI,EAAE1F,EAAIpT,EAAEoT,IAAM4N,EAAE7N,EAAI2F,EAAE3F,IAAM2F,EAAE3F,EAAInT,EAAEmT,IAAM6N,EAAE5N,EAAI0F,EAAE1F,GAI9D,SAASsK,EAAO/K,EAAIE,GAChB,OAAOF,EAAGQ,IAAMN,EAAGM,GAAKR,EAAGS,IAAMP,EAAGO,EAIxC,SAASrS,EAAW4R,EAAIC,EAAIC,EAAIC,GAC5B,IAAImO,EAAKC,EAAKrd,EAAK8O,EAAIC,EAAIC,IACvBsO,EAAKD,EAAKrd,EAAK8O,EAAIC,EAAIE,IACvBsO,EAAKF,EAAKrd,EAAKgP,EAAIC,EAAIH,IACvB0O,EAAKH,EAAKrd,EAAKgP,EAAIC,EAAIF,IAE3B,OAAIqO,IAAOE,GAAMC,IAAOC,MAEb,IAAPJ,IAAYK,EAAU3O,EAAIE,EAAID,QACvB,IAAPuO,IAAYG,EAAU3O,EAAIG,EAAIF,QACvB,IAAPwO,IAAYE,EAAUzO,EAAIF,EAAIG,OACvB,IAAPuO,IAAYC,EAAUzO,EAAID,EAAIE,OAMtC,SAASwO,EAAUthB,EAAG8Y,EAAGkI,GACrB,OAAOlI,EAAE3F,GAAKvV,KAAKM,IAAI8B,EAAEmT,EAAG6N,EAAE7N,IAAM2F,EAAE3F,GAAKvV,KAAKQ,IAAI4B,EAAEmT,EAAG6N,EAAE7N,IAAM2F,EAAE1F,GAAKxV,KAAKM,IAAI8B,EAAEoT,EAAG4N,EAAE5N,IAAM0F,EAAE1F,GAAKxV,KAAKQ,IAAI4B,EAAEoT,EAAG4N,EAAE5N,GAGzH,SAAS8N,EAAK1Z,GACV,OAAOA,EAAM,EAAI,EAAIA,EAAM,GAAK,EAAI,EAgBxC,SAAS4X,EAAc1gB,EAAGC,GACtB,OAAOkF,EAAKnF,EAAE+S,KAAM/S,EAAGA,EAAE0S,MAAQ,EAC7BvN,EAAKnF,EAAGC,EAAGD,EAAE0S,OAAS,GAAKvN,EAAKnF,EAAGA,EAAE+S,KAAM9S,IAAM,EACjDkF,EAAKnF,EAAGC,EAAGD,EAAE+S,MAAQ,GAAK5N,EAAKnF,EAAGA,EAAE0S,KAAMzS,GAAK,EAqBvD,SAAS2gB,EAAa5gB,EAAGC,GACrB,IAAI4iB,EAAK,IAAIC,EAAK9iB,EAAEJ,EAAGI,EAAEyU,EAAGzU,EAAE0U,GAC1BqO,EAAK,IAAID,EAAK7iB,EAAEL,EAAGK,EAAEwU,EAAGxU,EAAEyU,GAC1BsO,EAAKhjB,EAAE0S,KACPuQ,EAAKhjB,EAAE8S,KAcX,OAZA/S,EAAE0S,KAAOzS,EACTA,EAAE8S,KAAO/S,EAET6iB,EAAGnQ,KAAOsQ,EACVA,EAAGjQ,KAAO8P,EAEVE,EAAGrQ,KAAOmQ,EACVA,EAAG9P,KAAOgQ,EAEVE,EAAGvQ,KAAOqQ,EACVA,EAAGhQ,KAAOkQ,EAEHF,EAIX,SAAS3Q,EAAWxS,EAAG6U,EAAGC,EAAGxC,GACzB,IAAI5Q,EAAI,IAAIwhB,EAAKljB,EAAG6U,EAAGC,GAYvB,OAVKxC,GAKD5Q,EAAEoR,KAAOR,EAAKQ,KACdpR,EAAEyR,KAAOb,EACTA,EAAKQ,KAAKK,KAAOzR,EACjB4Q,EAAKQ,KAAOpR,IAPZA,EAAEyR,KAAOzR,EACTA,EAAEoR,KAAOpR,GAQNA,EAGX,SAAS2d,EAAW3d,GAChBA,EAAEoR,KAAKK,KAAOzR,EAAEyR,KAChBzR,EAAEyR,KAAKL,KAAOpR,EAAEoR,KAEZpR,EAAEge,QAAOhe,EAAEge,MAAMC,MAAQje,EAAEie,OAC3Bje,EAAEie,QAAOje,EAAEie,MAAMD,MAAQhe,EAAEge,OAGnC,SAASwD,EAAKljB,EAAG6U,EAAGC,GAEhBpU,KAAKV,EAAIA,EAGTU,KAAKmU,EAAIA,EACTnU,KAAKoU,EAAIA,EAGTpU,KAAKyS,KAAO,KACZzS,KAAKoS,KAAO,KAGZpS,KAAKrB,EAAI,KAGTqB,KAAKgf,MAAQ,KACbhf,KAAKif,MAAQ,KAGbjf,KAAK+d,SAAU,EAgCnB,SAASU,EAAWhc,EAAM6b,EAAOC,EAAK5D,GAElC,IADA,IAAIZ,EAAM,EACDza,EAAIgf,EAAO/e,EAAIgf,EAAM5D,EAAKrb,EAAIif,EAAKjf,GAAKqb,EAC7CZ,IAAQtX,EAAKlD,GAAKkD,EAAKnD,KAAOmD,EAAKnD,EAAI,GAAKmD,EAAKlD,EAAI,IACrDA,EAAID,EAER,OAAOya,EAtpBXhc,EAAOD,QAAUwf,EACjBvf,EAAOD,QAAP,QAAyBwf,EAonBzBA,EAAOsF,UAAY,SAAUngB,EAAM8a,EAAa5C,EAAKkD,GACjD,IAAIJ,EAAWF,GAAeA,EAAYhf,OACtCmf,EAAWD,EAAWF,EAAY,GAAK5C,EAAMlY,EAAKlE,OAElDskB,EAAcjkB,KAAKoiB,IAAIvC,EAAWhc,EAAM,EAAGib,EAAU/C,IACzD,GAAI8C,EACA,IAAK,IAAIne,EAAI,EAAGqD,EAAM4a,EAAYhf,OAAQe,EAAIqD,EAAKrD,IAAK,CACpD,IAAIgf,EAAQf,EAAYje,GAAKqb,EACzB4D,EAAMjf,EAAIqD,EAAM,EAAI4a,EAAYje,EAAI,GAAKqb,EAAMlY,EAAKlE,OACxDskB,GAAejkB,KAAKoiB,IAAIvC,EAAWhc,EAAM6b,EAAOC,EAAK5D,IAI7D,IAAImI,EAAgB,EACpB,IAAKxjB,EAAI,EAAGA,EAAIue,EAAUtf,OAAQe,GAAK,EAAG,CACtC,IAAII,EAAIme,EAAUve,GAAKqb,EACnBhb,EAAIke,EAAUve,EAAI,GAAKqb,EACvBhI,EAAIkL,EAAUve,EAAI,GAAKqb,EAC3BmI,GAAiBlkB,KAAKoiB,KACjBve,EAAK/C,GAAK+C,EAAKkQ,KAAOlQ,EAAK9C,EAAI,GAAK8C,EAAK/C,EAAI,KAC7C+C,EAAK/C,GAAK+C,EAAK9C,KAAO8C,EAAKkQ,EAAI,GAAKlQ,EAAK/C,EAAI,KAGtD,OAAuB,IAAhBmjB,GAAuC,IAAlBC,EAAsB,EAC9ClkB,KAAKoiB,KAAK8B,EAAgBD,GAAeA,IAajDvF,EAAOyF,QAAU,SAAUtgB,GAKvB,IAJA,IAAIkY,EAAMlY,EAAK,GAAG,GAAGlE,OACjBb,EAAS,CAACslB,SAAU,GAAIC,MAAO,GAAIC,WAAYvI,GAC/CwI,EAAY,EAEP7jB,EAAI,EAAGA,EAAImD,EAAKlE,OAAQe,IAAK,CAClC,IAAK,IAAIC,EAAI,EAAGA,EAAIkD,EAAKnD,GAAGf,OAAQgB,IAChC,IAAK,IAAIqT,EAAI,EAAGA,EAAI+H,EAAK/H,IAAKlV,EAAOslB,SAAS3gB,KAAKI,EAAKnD,GAAGC,GAAGqT,IAE9DtT,EAAI,IACJ6jB,GAAa1gB,EAAKnD,EAAI,GAAGf,OACzBb,EAAOulB,MAAM5gB,KAAK8gB,IAG1B,OAAOzlB,mCCtqBX,IAAI0lB,EAAgB,kDAChBlgB,EAAQ+D,MAAM3E,UAAUY,MACxBqU,EAAQ7O,OAAOpG,UAAUkV,SACzB6L,EAAW,oBAEftlB,EAAOD,QAAU,SAAcwlB,GAC3B,IAAIC,EAASvjB,KACb,GAAsB,oBAAXujB,GAAyBhM,EAAM3H,KAAK2T,KAAYF,EACvD,MAAM,IAAIG,UAAUJ,EAAgBG,GAyBxC,IAvBA,IAEIE,EAFAC,EAAOxgB,EAAM0M,KAAKO,UAAW,GAG7BwT,EAAS,WACT,GAAI3jB,gBAAgByjB,EAAO,CACvB,IAAI/lB,EAAS6lB,EAAOrf,MAChBlE,KACA0jB,EAAKlS,OAAOtO,EAAM0M,KAAKO,aAE3B,OAAIzH,OAAOhL,KAAYA,EACZA,EAEJsC,KAEP,OAAOujB,EAAOrf,MACVof,EACAI,EAAKlS,OAAOtO,EAAM0M,KAAKO,cAK/ByT,EAAchlB,KAAKM,IAAI,EAAGqkB,EAAOhlB,OAASmlB,EAAKnlB,QAC/CslB,EAAY,GACPvkB,EAAI,EAAGA,EAAIskB,EAAatkB,IAC7BukB,EAAUxhB,KAAK,IAAM/C,GAKzB,GAFAmkB,EAAQrd,SAAS,SAAU,oBAAsByd,EAAUxd,KAAK,KAAO,4CAA/DD,CAA4Gud,GAEhHJ,EAAOjhB,UAAW,CAClB,IAAIwhB,EAAQ,aACZA,EAAMxhB,UAAYihB,EAAOjhB,UACzBmhB,EAAMnhB,UAAY,IAAIwhB,EACtBA,EAAMxhB,UAAY,KAGtB,OAAOmhB,uCChDX,IAAIM,EAAiB,EAAQ,OAE7BhmB,EAAOD,QAAUsI,SAAS9D,UAAUkN,MAAQuU,yBCH5C,IAAI5N,EAAY,EAAQ,OAEpB6N,EAAW,SAASC,GACtBjkB,KAAKyK,UAAYwZ,GAAOA,EAAIxZ,UAAYwZ,EAAIxZ,UAAY,GACxDzK,KAAKkkB,aAAYD,IAAOA,EAAIC,YAAYD,EAAIC,UAC5ClkB,KAAKmkB,cAAaF,IAAOA,EAAIE,aAAaF,EAAIE,WAC9CnkB,KAAKokB,iBAAmBH,GAAOA,EAAIG,iBAAmBH,EAAIG,iBAAmBA,GAiC/E,SAASC,EAAQrX,GACf,OAAOA,EAAEjG,YAAYmD,KAAI,SAASoa,GAChC,MAAO,CACL3d,KAAMqG,EAAErG,KAAK4d,QAAQ,QAAS,IAC9Bxd,YAAaud,MAInB,SAASE,EAAWC,EAAGC,GACpB,OAAOD,EAAGE,eAAe,eACxBF,EAAG1d,YAAYxI,SAAWmmB,EAAG3d,YAAYxI,OACvCkmB,EAAGlmB,SAAWmmB,EAAGnmB,OAyGvB,SAAS6lB,EAAiBQ,EAAMC,GAC9B,OAAO1O,EAAUyO,EAAMC,EAAM,CAACtO,QAAQ,IAnJxCyN,EAAS1hB,UAAUjE,QAAU,SAASomB,EAAGC,GACvC,GAAID,EAAG9d,OAAS+d,EAAG/d,OAAS6d,EAAWC,EAAGC,GAAK,OAAO,EAEtD,OAAOD,EAAG9d,MACV,IAAK,QACH,OAAO3G,KAAK8kB,aAAaL,EAAG1d,YAAa2d,EAAG3d,aAE9C,IAAK,aACH,OAAO/G,KAAK+kB,YAAYN,EAAG1d,YAAa2d,EAAG3d,YAAY,GAAE,GAE3D,IAAK,UACH,OAAO/G,KAAKglB,eAAeP,EAAGC,GAEhC,IAAK,UACH,OAAO1kB,KAAKilB,eAAeR,EAAIC,GACjC,QACE,GAAiC,IAA7BD,EAAG9d,KAAKjG,QAAQ,SAAgB,CAClC,IAAIwkB,EAAUllB,KACVmlB,EAAMd,EAAQI,GACdW,EAAMf,EAAQK,GAClB,OAAOS,EAAIE,OAAM,SAASC,GACxB,OAAOtlB,KAAKulB,MAAK,SAASC,GACxB,OAAON,EAAQ7mB,QAAQinB,EAAOE,QAEhCJ,IAGN,OAAO,GAkBTpB,EAAS1hB,UAAUwiB,aAAe,SAASW,EAAGC,GAC5C,GAAID,EAAGlnB,SAAWmnB,EAAGnnB,OACnB,OAAO,EAGT,IAAK,IAAIe,EAAE,EAAGA,EAAImmB,EAAGlnB,OAAQe,IAC3B,GAAImmB,EAAGnmB,GAAGqmB,QAAQ3lB,KAAKyK,aAAeib,EAAGpmB,GAAGqmB,QAAQ3lB,KAAKyK,WACvD,OAAO,EAGX,OAAO,GAGTuZ,EAAS1hB,UAAUyiB,YAAc,SAASa,EAAMC,EAAMC,EAAIC,GACxD,IAAKvB,EAAWoB,EAAMC,GAAQ,OAAO,EACrC,IAAIlS,EAAK3T,KAAKmkB,WAAayB,EAAQ5lB,KAAKgmB,aAAaJ,GACjD/R,EAAK7T,KAAKmkB,WAAa0B,EAAQ7lB,KAAKgmB,aAAaH,GACrD,IAAIE,GAAW/lB,KAAK8kB,aAAanR,EAAG,GAAGE,EAAG,MAExCA,EAAK7T,KAAKimB,cAAcpS,EAAGF,IAF7B,CAMA,IAAIuS,EAAgBlmB,KAAK8kB,aAAanR,EAAGmS,GAAKjS,EAAGiS,IACjD,OAAI9lB,KAAKkkB,WAAagC,EAEblmB,KAAKmmB,YAAYxS,EAAIE,KAExB7T,KAAK8kB,aAAanR,EAAGmS,GAAKjS,EAAGA,EAAGtV,QAAU,EAAEunB,MAEvC9lB,KAAKmmB,YAAYxS,EAAGzQ,QAAQkjB,UAAWvS,KAKpDmQ,EAAS1hB,UAAU2jB,cAAgB,SAASI,EAAWC,GAGrD,IADA,IAAIC,EAAYT,GAAO,EACdxmB,EAAE,EAAGA,EAAG+mB,EAAW9nB,OAAQe,IAClC,GAAGU,KAAK8kB,aAAauB,EAAW/mB,GAAGgnB,EAAW,IAAK,CACjDR,EAAMxmB,EACN,MAQJ,OALIwmB,GAAO,IACTS,EAAc,GAAG/U,OACf6U,EAAWnjB,MAAM4iB,EAAIO,EAAW9nB,QAChC8nB,EAAWnjB,MAAM,EAAE4iB,EAAI,KAEpBS,GAETvC,EAAS1hB,UAAU6jB,YAAc,SAAUxS,EAAGE,GAC5C,IAAI2S,EAAOxmB,KACX,OAAO2T,EAAG0R,OAAM,SAAS1S,EAAErT,GACzB,OAAOknB,EAAK1B,aAAanS,EAAE3S,KAAKV,MAChCuU,IAGJmQ,EAAS1hB,UAAU0iB,eAAiB,SAASP,EAAGC,GAC9C,GAAI1kB,KAAK+kB,YAAYN,EAAG1d,YAAY,GAAG2d,EAAG3d,YAAY,GAAG,GAAE,GAAO,CAChE,IAAI0f,EAAShC,EAAG1d,YAAY7D,MAAM,EAAEuhB,EAAG1d,YAAYxI,QAC/CmoB,EAAShC,EAAG3d,YAAY7D,MAAM,EAAEwhB,EAAG3d,YAAYxI,QAC/CioB,EAAOxmB,KACX,OAAOymB,EAAOpB,OAAM,SAASsB,GAC3B,OAAO3mB,KAAKulB,MAAK,SAASqB,GACxB,OAAOJ,EAAKzB,YAAY4B,EAAGC,EAAG,GAAE,QAElCF,GAEF,OAAO,GAIX1C,EAAS1hB,UAAU2iB,eAAiB,SAASR,EAAGC,GAC9C,QACED,EAAG7d,KAAO8d,EAAG9d,KACZ5G,KAAKokB,iBAAiBK,EAAGje,WAAYke,EAAGle,cACxCxG,KAAK6mB,YAAYpC,EAAGC,KAIhB1kB,KAAK3B,QAAQomB,EAAG5d,SAAU6d,EAAG7d,WAGtCmd,EAAS1hB,UAAUukB,YAAc,SAASpC,EAAGC,GAC3C,UACID,EAAGjnB,OAASknB,EAAGlnB,MAEfinB,EAAGjnB,MAAQknB,EAAGlnB,MACdwC,KAAK8kB,aAAaL,EAAGjnB,KAAMknB,EAAGlnB,QAOpCwmB,EAAS1hB,UAAU0jB,aAAe,SAAStiB,GAEzC,OAAOA,GAOT3F,EAAOD,QAAUkmB,yBChKjB,IAAInkB,EAAQ,EAAQ,OAChB+L,EAAU,EAAQ,OAClBkb,EAAO,EAAQ,OACfC,EAAW,UACXja,EAAcga,EAAKha,YAGnBrF,GAFYqf,EAAKlpB,UACPgO,EAAQxE,QACEwE,EAAQnE,mBAahC,SAASuf,EAAalnB,GAClB,IAAI6R,EAAO,IAAI9R,EAAMC,GAsLrB,OA5KA6R,EAAK3O,OAAS,SAAUsD,GACpB,GAAqB,YAAjBA,EAAQK,KAAoB,MAAM,IAAIK,MAAM,mBAEhD,OADAV,EAAQ9I,KAAO8I,EAAQ9I,KAAO8I,EAAQ9I,KAAOupB,EAASzgB,GAC/CzG,EAAMyC,UAAUU,OAAO4M,KAAK5P,KAAMsG,IAe7CqL,EAAK5O,KAAO,SAAU2E,GAClB,IAAI3E,EAAO,GAgBX,OAdIkE,MAAMC,QAAQQ,GACdA,EAASgE,SAAQ,SAAUpF,GACvB,GAAqB,YAAjBA,EAAQK,KAAoB,MAAM,IAAIK,MAAM,oBAChDV,EAAQ9I,KAAO8I,EAAQ9I,KAAO8I,EAAQ9I,KAAOupB,EAASzgB,GACtDvD,EAAKV,KAAKiE,MAIdwG,EAAYpF,GAAU,SAAUpB,GAC5B,GAAqB,YAAjBA,EAAQK,KAAoB,MAAM,IAAIK,MAAM,oBAChDV,EAAQ9I,KAAO8I,EAAQ9I,KAAO8I,EAAQ9I,KAAOupB,EAASzgB,GACtDvD,EAAKV,KAAKiE,MAGXzG,EAAMyC,UAAUS,KAAK6M,KAAK5P,KAAM+C,IAc3C4O,EAAKrO,OAAS,SAAUgD,EAASoY,GAC7B,GAAqB,YAAjBpY,EAAQK,KAAoB,MAAM,IAAIK,MAAM,mBAEhD,OADAV,EAAQ9I,KAAO8I,EAAQ9I,KAAO8I,EAAQ9I,KAAOupB,EAASzgB,GAC/CzG,EAAMyC,UAAUgB,OAAOsM,KAAK5P,KAAMsG,EAASoY,IAUtD/M,EAAKtR,MAAQ,WACT,OAAOR,EAAMyC,UAAUjC,MAAMuP,KAAK5P,OAatC2R,EAAKjP,OAAS,SAAUjF,GACpB,IAAIiK,EAAW7H,EAAMyC,UAAUI,OAAOkN,KAAK5P,KAAMA,KAAKa,OAAOpD,IAC7D,OAAOgK,EAAkBC,IAa7BiK,EAAK7O,SAAW,SAAUrF,GACtB,OAAOoC,EAAMyC,UAAUQ,SAAS8M,KAAK5P,KAAMA,KAAKa,OAAOpD,KAU3DkU,EAAKpP,IAAM,WACP,IAAImF,EAAW7H,EAAMyC,UAAUC,IAAIqN,KAAK5P,MACxC,OAAOyH,EAAkBC,IAU7BiK,EAAK3N,OAAS,WACV,OAAOnE,EAAMyC,UAAU0B,OAAO4L,KAAK5P,OA8BvC2R,EAAK1N,SAAW,SAAUgjB,GACtB,OAAOpnB,EAAMyC,UAAU2B,SAAS2L,KAAK5P,KAAMinB,IAU/CtV,EAAK9Q,OAAS,SAAUpD,GACpB,IAAID,EACJ,GAAIC,EAAQD,KAAMA,EAAOC,EAAQD,UAC5B,GAAIyJ,MAAMC,QAAQzJ,IAA+B,IAAnBA,EAAQc,OAAcf,EAAOC,OAC3D,GAAIwJ,MAAMC,QAAQzJ,IAA+B,IAAnBA,EAAQc,OAAcf,EAAO,CAACC,EAAQ,GAAIA,EAAQ,GAAIA,EAAQ,GAAIA,EAAQ,SACxG,GAAqB,YAAjBA,EAAQkJ,KAAoBnJ,EAAOupB,EAAStpB,OAChD,IAAqB,sBAAjBA,EAAQkJ,KACZ,MAAM,IAAIK,MAAM,mBAD0BxJ,EAAOupB,EAAStpB,GAG/D,MAAO,CACH0D,KAAM3D,EAAK,GACX4D,KAAM5D,EAAK,GACX6D,KAAM7D,EAAK,GACX8D,KAAM9D,EAAK,KAGZmU,EAGX5T,EAAOD,QAAUkpB,EACjBjpB,EAAOD,QAAP,QAAyBkpB,sCC7MzB,IAAI5Z,EAEA8Z,EAAeC,YACfC,EAAYhhB,SACZihB,EAAa7D,UAGb8D,EAAwB,SAAUC,GACrC,IACC,OAAOH,EAAU,yBAA2BG,EAAmB,iBAAxDH,GACN,MAAOpX,MAGNH,EAAQnH,OAAO8e,yBACnB,GAAI3X,EACH,IACCA,EAAM,GAAI,IACT,MAAOG,GACRH,EAAQ,KAIV,IAAI4X,EAAiB,WACpB,MAAM,IAAIJ,GAEPK,EAAiB7X,EACjB,WACF,IAGC,OAAO4X,EACN,MAAOE,GACR,IAEC,OAAO9X,EAAMM,UAAW,UAAUyX,IACjC,MAAOC,GACR,OAAOJ,IAVR,GAcAA,EAECpQ,EAAa,EAAQ,MAAR,GAEbyQ,EAAWpf,OAAOqf,gBAAkB,SAAU5T,GAAK,OAAOA,EAAE6T,WAE5DC,EAAY,GAEZC,EAAmC,qBAAfC,WAA6B/a,EAAY0a,EAASK,YAEtEC,EAAa,CAChB,mBAA8C,qBAAnBC,eAAiCjb,EAAYib,eACxE,UAAWphB,MACX,gBAAwC,qBAAhBqhB,YAA8Blb,EAAYkb,YAClE,2BAA4BjR,EAAayQ,EAAS,GAAGxQ,OAAOiR,aAAenb,EAC3E,mCAAoCA,EACpC,kBAAmB6a,EACnB,mBAAoBA,EACpB,2BAA4BA,EAC5B,2BAA4BA,EAC5B,YAAgC,qBAAZO,QAA0Bpb,EAAYob,QAC1D,WAA8B,qBAAXC,OAAyBrb,EAAYqb,OACxD,YAAaC,QACb,aAAkC,qBAAbC,SAA2Bvb,EAAYub,SAC5D,SAAUzS,KACV,cAAe0S,UACf,uBAAwBC,mBACxB,cAAeC,UACf,uBAAwBC,mBACxB,UAAW/hB,MACX,SAAUgiB,KACV,cAAeC,UACf,iBAA0C,qBAAjBC,aAA+B9b,EAAY8b,aACpE,iBAA0C,qBAAjBC,aAA+B/b,EAAY+b,aACpE,yBAA0D,qBAAzBC,qBAAuChc,EAAYgc,qBACpF,aAAchC,EACd,sBAAuBa,EACvB,cAAoC,qBAAdoB,UAA4Bjc,EAAYic,UAC9D,eAAsC,qBAAfC,WAA6Blc,EAAYkc,WAChE,eAAsC,qBAAfC,WAA6Bnc,EAAYmc,WAChE,aAAcC,SACd,UAAW/gB,MACX,sBAAuB4O,EAAayQ,EAASA,EAAS,GAAGxQ,OAAOiR,cAAgBnb,EAChF,SAA0B,kBAATqc,KAAoBA,KAAOrc,EAC5C,QAAwB,qBAARsc,IAAsBtc,EAAYsc,IAClD,yBAAyC,qBAARA,KAAwBrS,EAAyByQ,GAAS,IAAI4B,KAAMpS,OAAOiR,aAAtCnb,EACtE,SAAUxO,KACV,WAAYwc,OACZ,WAAY1S,OACZ,eAAgBihB,WAChB,aAAcC,SACd,YAAgC,qBAAZC,QAA0Bzc,EAAYyc,QAC1D,UAA4B,qBAAVC,MAAwB1c,EAAY0c,MACtD,eAAgBC,WAChB,mBAAoBC,eACpB,YAAgC,qBAAZC,QAA0B7c,EAAY6c,QAC1D,WAAYC,OACZ,QAAwB,qBAARC,IAAsB/c,EAAY+c,IAClD,yBAAyC,qBAARA,KAAwB9S,EAAyByQ,GAAS,IAAIqC,KAAM7S,OAAOiR,aAAtCnb,EACtE,sBAAoD,qBAAtBgd,kBAAoChd,EAAYgd,kBAC9E,WAAYC,OACZ,4BAA6BhT,EAAayQ,EAAS,GAAGxQ,OAAOiR,aAAenb,EAC5E,WAAYiK,EAAaC,OAASlK,EAClC,gBAAiB8Z,EACjB,mBAAoBQ,EACpB,eAAgBQ,EAChB,cAAeb,EACf,eAAsC,qBAAfc,WAA6B/a,EAAY+a,WAChE,sBAAoD,qBAAtBmC,kBAAoCld,EAAYkd,kBAC9E,gBAAwC,qBAAhBC,YAA8Bnd,EAAYmd,YAClE,gBAAwC,qBAAhBC,YAA8Bpd,EAAYod,YAClE,aAAcC,SACd,YAAgC,qBAAZC,QAA0Btd,EAAYsd,QAC1D,YAAgC,qBAAZC,QAA0Bvd,EAAYud,QAC1D,YAAgC,qBAAZC,QAA0Bxd,EAAYwd,SAGvDC,EAAS,SAASA,EAAOxb,GAC5B,IAAIzG,EACJ,GAAa,oBAATyG,EACHzG,EAAQ0e,EAAsB,6BACxB,GAAa,wBAATjY,EACVzG,EAAQ0e,EAAsB,wBACxB,GAAa,6BAATjY,EACVzG,EAAQ0e,EAAsB,8BACxB,GAAa,qBAATjY,EAA6B,CACvC,IAAI4I,EAAK4S,EAAO,4BACZ5S,IACHrP,EAAQqP,EAAG3V,gBAEN,GAAa,6BAAT+M,EAAqC,CAC/C,IAAIyb,EAAMD,EAAO,oBACbC,IACHliB,EAAQkf,EAASgD,EAAIxoB,YAMvB,OAFA8lB,EAAW/Y,GAAQzG,EAEZA,GAGJmiB,EAAiB,CACpB,yBAA0B,CAAC,cAAe,aAC1C,mBAAoB,CAAC,QAAS,aAC9B,uBAAwB,CAAC,QAAS,YAAa,WAC/C,uBAAwB,CAAC,QAAS,YAAa,WAC/C,oBAAqB,CAAC,QAAS,YAAa,QAC5C,sBAAuB,CAAC,QAAS,YAAa,UAC9C,2BAA4B,CAAC,gBAAiB,aAC9C,mBAAoB,CAAC,yBAA0B,aAC/C,4BAA6B,CAAC,yBAA0B,YAAa,aACrE,qBAAsB,CAAC,UAAW,aAClC,sBAAuB,CAAC,WAAY,aACpC,kBAAmB,CAAC,OAAQ,aAC5B,mBAAoB,CAAC,QAAS,aAC9B,uBAAwB,CAAC,YAAa,aACtC,0BAA2B,CAAC,eAAgB,aAC5C,0BAA2B,CAAC,eAAgB,aAC5C,sBAAuB,CAAC,WAAY,aACpC,cAAe,CAAC,oBAAqB,aACrC,uBAAwB,CAAC,oBAAqB,YAAa,aAC3D,uBAAwB,CAAC,YAAa,aACtC,wBAAyB,CAAC,aAAc,aACxC,wBAAyB,CAAC,aAAc,aACxC,cAAe,CAAC,OAAQ,SACxB,kBAAmB,CAAC,OAAQ,aAC5B,iBAAkB,CAAC,MAAO,aAC1B,oBAAqB,CAAC,SAAU,aAChC,oBAAqB,CAAC,SAAU,aAChC,sBAAuB,CAAC,SAAU,YAAa,YAC/C,qBAAsB,CAAC,SAAU,YAAa,WAC9C,qBAAsB,CAAC,UAAW,aAClC,sBAAuB,CAAC,UAAW,YAAa,QAChD,gBAAiB,CAAC,UAAW,OAC7B,mBAAoB,CAAC,UAAW,UAChC,oBAAqB,CAAC,UAAW,WACjC,wBAAyB,CAAC,aAAc,aACxC,4BAA6B,CAAC,iBAAkB,aAChD,oBAAqB,CAAC,SAAU,aAChC,iBAAkB,CAAC,MAAO,aAC1B,+BAAgC,CAAC,oBAAqB,aACtD,oBAAqB,CAAC,SAAU,aAChC,oBAAqB,CAAC,SAAU,aAChC,yBAA0B,CAAC,cAAe,aAC1C,wBAAyB,CAAC,aAAc,aACxC,uBAAwB,CAAC,YAAa,aACtC,wBAAyB,CAAC,aAAc,aACxC,+BAAgC,CAAC,oBAAqB,aACtD,yBAA0B,CAAC,cAAe,aAC1C,yBAA0B,CAAC,cAAe,aAC1C,sBAAuB,CAAC,WAAY,aACpC,qBAAsB,CAAC,UAAW,aAClC,qBAAsB,CAAC,UAAW,cAG/Bvb,EAAO,EAAQ,OACfwb,EAAS,EAAQ,OACjBC,EAAUzb,EAAKI,KAAKxJ,SAASwJ,KAAM3I,MAAM3E,UAAUkP,QACnD0Z,EAAe1b,EAAKI,KAAKxJ,SAASlC,MAAO+C,MAAM3E,UAAUsB,QACzDunB,EAAW3b,EAAKI,KAAKxJ,SAASwJ,KAAMya,OAAO/nB,UAAUiiB,SACrD6G,EAAY5b,EAAKI,KAAKxJ,SAASwJ,KAAMya,OAAO/nB,UAAUY,OAGtDmoB,EAAa,qGACbC,EAAe,WACfC,EAAe,SAAsBC,GACxC,IAAIC,EAAQL,EAAUI,EAAQ,EAAG,GAC7B5Z,EAAOwZ,EAAUI,GAAS,GAC9B,GAAc,MAAVC,GAA0B,MAAT7Z,EACpB,MAAM,IAAIsV,EAAa,kDACjB,GAAa,MAATtV,GAA0B,MAAV6Z,EAC1B,MAAM,IAAIvE,EAAa,kDAExB,IAAIxpB,EAAS,GAIb,OAHAytB,EAASK,EAAQH,GAAY,SAAUK,EAAOC,EAAQC,EAAOC,GAC5DnuB,EAAOA,EAAOa,QAAUqtB,EAAQT,EAASU,EAAWP,EAAc,MAAQK,GAAUD,KAE9EhuB,GAIJouB,EAAmB,SAA0Bzc,EAAMC,GACtD,IACIyc,EADAC,EAAgB3c,EAOpB,GALI2b,EAAOD,EAAgBiB,KAE1BA,EAAgB,KADhBD,EAAQhB,EAAeiB,IACK,GAAK,KAG9BhB,EAAO5C,EAAY4D,GAAgB,CACtC,IAAIpjB,EAAQwf,EAAW4D,GAIvB,GAHIpjB,IAAUqf,IACbrf,EAAQiiB,EAAOmB,IAEK,qBAAVpjB,IAA0B0G,EACpC,MAAM,IAAI+X,EAAW,aAAehY,EAAO,wDAG5C,MAAO,CACN0c,MAAOA,EACP1c,KAAM2c,EACNpjB,MAAOA,GAIT,MAAM,IAAIse,EAAa,aAAe7X,EAAO,qBAG9CtR,EAAOD,QAAU,SAAsBuR,EAAMC,GAC5C,GAAoB,kBAATD,GAAqC,IAAhBA,EAAK9Q,OACpC,MAAM,IAAI8oB,EAAW,6CAEtB,GAAIlX,UAAU5R,OAAS,GAA6B,mBAAjB+Q,EAClC,MAAM,IAAI+X,EAAW,6CAGtB,IAAI4E,EAAQV,EAAalc,GACrB6c,EAAoBD,EAAM1tB,OAAS,EAAI0tB,EAAM,GAAK,GAElD1c,EAAYuc,EAAiB,IAAMI,EAAoB,IAAK5c,GAC5D6c,EAAoB5c,EAAUF,KAC9BzG,EAAQ2G,EAAU3G,MAClBwjB,GAAqB,EAErBL,EAAQxc,EAAUwc,MAClBA,IACHG,EAAoBH,EAAM,GAC1Bb,EAAae,EAAOhB,EAAQ,CAAC,EAAG,GAAIc,KAGrC,IAAK,IAAIzsB,EAAI,EAAG+sB,GAAQ,EAAM/sB,EAAI2sB,EAAM1tB,OAAQe,GAAK,EAAG,CACvD,IAAIglB,EAAO2H,EAAM3sB,GACbmsB,EAAQL,EAAU9G,EAAM,EAAG,GAC3B1S,EAAOwZ,EAAU9G,GAAO,GAC5B,IAEa,MAAVmH,GAA2B,MAAVA,GAA2B,MAAVA,GACtB,MAAT7Z,GAAyB,MAATA,GAAyB,MAATA,IAElC6Z,IAAU7Z,EAEb,MAAM,IAAIsV,EAAa,wDASxB,GAPa,gBAAT5C,GAA2B+H,IAC9BD,GAAqB,GAMlBpB,EAAO5C,EAFX+D,EAAoB,KADpBD,GAAqB,IAAM5H,GACmB,KAG7C1b,EAAQwf,EAAW+D,QACb,GAAa,MAATvjB,EAAe,CACzB,KAAM0b,KAAQ1b,GAAQ,CACrB,IAAK0G,EACJ,MAAM,IAAI+X,EAAW,sBAAwBhY,EAAO,+CAErD,OAED,GAAIQ,GAAUvQ,EAAI,GAAM2sB,EAAM1tB,OAAQ,CACrC,IAAI6R,EAAOP,EAAMjH,EAAO0b,GAWvB1b,GAVDyjB,IAAUjc,IASG,QAASA,KAAU,kBAAmBA,EAAKwX,KAC/CxX,EAAKwX,IAELhf,EAAM0b,QAGf+H,EAAQrB,EAAOpiB,EAAO0b,GACtB1b,EAAQA,EAAM0b,GAGX+H,IAAUD,IACbhE,EAAW+D,GAAqBvjB,IAInC,OAAOA,uCCtUR,IAAI0jB,EAA+B,qBAAXhV,QAA0BA,OAC9CiV,EAAgB,EAAQ,OAE5BxuB,EAAOD,QAAU,WAChB,MAA0B,oBAAfwuB,IACW,oBAAXhV,SACsB,kBAAtBgV,EAAW,SACO,kBAAlBhV,OAAO,QAEXiV,wCCRRxuB,EAAOD,QAAU,WAChB,GAAsB,oBAAXwZ,QAAiE,oBAAjC5O,OAAO4P,sBAAwC,OAAO,EACjG,GAA+B,kBAApBhB,OAAOiR,SAAyB,OAAO,EAElD,IAAI5Q,EAAM,GACN6U,EAAMlV,OAAO,QACbmV,EAAS/jB,OAAO8jB,GACpB,GAAmB,kBAARA,EAAoB,OAAO,EAEtC,GAA4C,oBAAxC9jB,OAAOpG,UAAUkV,SAAS5H,KAAK4c,GAA8B,OAAO,EACxE,GAA+C,oBAA3C9jB,OAAOpG,UAAUkV,SAAS5H,KAAK6c,GAAiC,OAAO,EAY3E,IAAKD,KADL7U,EAAI6U,GADS,GAED7U,EAAO,OAAO,EAC1B,GAA2B,oBAAhBjP,OAAO0O,MAAmD,IAA5B1O,OAAO0O,KAAKO,GAAKpZ,OAAgB,OAAO,EAEjF,GAA0C,oBAA/BmK,OAAOgkB,qBAAiF,IAA3ChkB,OAAOgkB,oBAAoB/U,GAAKpZ,OAAgB,OAAO,EAE/G,IAAIouB,EAAOjkB,OAAO4P,sBAAsBX,GACxC,GAAoB,IAAhBgV,EAAKpuB,QAAgBouB,EAAK,KAAOH,EAAO,OAAO,EAEnD,IAAK9jB,OAAOpG,UAAUsqB,qBAAqBhd,KAAK+H,EAAK6U,GAAQ,OAAO,EAEpE,GAA+C,oBAApC9jB,OAAO8e,yBAAyC,CAC1D,IAAIqF,EAAankB,OAAO8e,yBAAyB7P,EAAK6U,GACtD,GAdY,KAcRK,EAAWjkB,QAA8C,IAA1BikB,EAAWhV,WAAuB,OAAO,EAG7E,OAAO,uCCtCR,IAAIR,EAAa,EAAQ,OAEzBtZ,EAAOD,QAAU,WAChB,OAAOuZ,OAAkBC,OAAOwV,iDCHjC,IAAItd,EAAO,EAAQ,OAEnBzR,EAAOD,QAAU0R,EAAKI,KAAKxJ,SAASwJ,KAAMlH,OAAOpG,UAAUqiB,oDCF3D,IAAIoI,EAAiB,EAAQ,MAAR,GAGjBC,EAFY,EAAQ,MAERC,CAAU,6BAEtBC,EAAsB,SAAqBtkB,GAC9C,QAAImkB,GAAkBnkB,GAA0B,kBAAVA,GAAsB0O,OAAOwV,eAAelkB,IAGtD,uBAArBokB,EAAUpkB,IAGdukB,EAAoB,SAAqBvkB,GAC5C,QAAIskB,EAAoBtkB,IAGP,OAAVA,GACW,kBAAVA,GACiB,kBAAjBA,EAAMrK,QACbqK,EAAMrK,QAAU,GACK,mBAArByuB,EAAUpkB,IACkB,sBAA5BokB,EAAUpkB,EAAMwkB,SAGdC,EAA6B,WAChC,OAAOH,EAAoB/c,WADI,GAIhC+c,EAAoBC,kBAAoBA,EAExCpvB,EAAOD,QAAUuvB,EAA4BH,EAAsBC,sCC9BnE,IAAIG,EAASpX,KAAK5T,UAAUgrB,OAUxB/V,EAAQ7O,OAAOpG,UAAUkV,SAEzBuV,EAAiB,EAAQ,MAAR,GAErBhvB,EAAOD,QAAU,SAAsB8K,GACtC,MAAqB,kBAAVA,GAAgC,OAAVA,IAG1BmkB,EAjBY,SAA2BnkB,GAC9C,IAEC,OADA0kB,EAAO1d,KAAKhH,IACL,EACN,MAAOoH,GACR,OAAO,GAYgBud,CAAc3kB,GAPvB,kBAOgC2O,EAAM3H,KAAKhH,yCClB3D,IAEI4kB,EACAC,EACAC,EACAC,EALAV,EAAY,EAAQ,OACpBF,EAAiB,EAAQ,MAAR,GAMrB,GAAIA,EAAgB,CACnBS,EAAMP,EAAU,mCAChBQ,EAAQR,EAAU,yBAClBS,EAAgB,GAEhB,IAAIE,EAAmB,WACtB,MAAMF,GAEPC,EAAiB,CAChBnW,SAAUoW,EACVC,QAASD,GAGwB,kBAAvBtW,OAAOwW,cACjBH,EAAerW,OAAOwW,aAAeF,GAIvC,IAAIZ,EAAYC,EAAU,6BACtBc,EAAOrlB,OAAO8e,yBAGlBzpB,EAAOD,QAAUivB,EAEd,SAAiBnkB,GAClB,IAAKA,GAA0B,kBAAVA,EACpB,OAAO,EAGR,IAAIikB,EAAakB,EAAKnlB,EAAO,aAE7B,KAD+BikB,GAAcW,EAAIX,EAAY,UAE5D,OAAO,EAGR,IACCY,EAAM7kB,EAAO+kB,GACZ,MAAO3d,GACR,OAAOA,IAAM0d,IAGb,SAAiB9kB,GAElB,SAAKA,GAA2B,kBAAVA,GAAuC,oBAAVA,IAvBpC,oBA2BRokB,EAAUpkB,oCCtDnB,IAAIolB,EAAc,SAAUplB,GAC3B,OAAOA,IAAUA,GAGlB7K,EAAOD,QAAU,SAAY4B,EAAGC,GAC/B,OAAU,IAAND,GAAiB,IAANC,EACP,EAAID,IAAM,EAAIC,EAElBD,IAAMC,MAGNquB,EAAYtuB,KAAMsuB,EAAYruB,yCCXnC,IAAIsuB,EAAS,EAAQ,MACjB9e,EAAW,EAAQ,OAEnB4U,EAAiB,EAAQ,OACzBmK,EAAc,EAAQ,OACtBC,EAAO,EAAQ,OAEfC,EAAWjf,EAAS+e,IAAexlB,QAEvCulB,EAAOG,EAAU,CAChBF,YAAaA,EACbnK,eAAgBA,EAChBoK,KAAMA,IAGPpwB,EAAOD,QAAUswB,sCCfjB,IAAIrK,EAAiB,EAAQ,OAE7BhmB,EAAOD,QAAU,WAChB,MAA4B,oBAAd4K,OAAOmN,GAAoBnN,OAAOmN,GAAKkO,uCCHtD,IAAImK,EAAc,EAAQ,OACtBD,EAAS,EAAQ,MAErBlwB,EAAOD,QAAU,WAChB,IAAIswB,EAAWF,IAMf,OALAD,EAAOvlB,OAAQ,CAAEmN,GAAIuY,GAAY,CAChCvY,GAAI,WACH,OAAOnN,OAAOmN,KAAOuY,KAGhBA,uCCVR,IAAIC,EACJ,IAAK3lB,OAAO0O,KAAM,CAEjB,IAAIoW,EAAM9kB,OAAOpG,UAAUqiB,eACvBpN,EAAQ7O,OAAOpG,UAAUkV,SACzB8W,EAAS,EAAQ,OACjBC,EAAe7lB,OAAOpG,UAAUsqB,qBAChC4B,GAAkBD,EAAa3e,KAAK,CAAE4H,SAAU,MAAQ,YACxDiX,EAAkBF,EAAa3e,MAAK,cAAgB,aACpD8e,EAAY,CACf,WACA,iBACA,UACA,iBACA,gBACA,uBACA,eAEGC,EAA6B,SAAUC,GAC1C,IAAIC,EAAOD,EAAEpjB,YACb,OAAOqjB,GAAQA,EAAKvsB,YAAcssB,GAE/BE,EAAe,CAClBC,mBAAmB,EACnBC,UAAU,EACVC,WAAW,EACXC,QAAQ,EACRC,eAAe,EACfC,SAAS,EACTC,cAAc,EACdC,aAAa,EACbC,wBAAwB,EACxBC,uBAAuB,EACvBC,cAAc,EACdC,aAAa,EACbC,cAAc,EACdC,cAAc,EACdC,SAAS,EACTC,aAAa,EACbC,YAAY,EACZC,UAAU,EACVC,UAAU,EACVC,OAAO,EACPC,kBAAkB,EAClBC,oBAAoB,EACpBC,SAAS,GAENC,EAA4B,WAE/B,GAAsB,qBAAXC,OAA0B,OAAO,EAC5C,IAAK,IAAIryB,KAAKqyB,OACb,IACC,IAAKzB,EAAa,IAAM5wB,IAAMsvB,EAAI5d,KAAK2gB,OAAQryB,IAAoB,OAAdqyB,OAAOryB,IAAoC,kBAAdqyB,OAAOryB,GACxF,IACCywB,EAA2B4B,OAAOryB,IACjC,MAAO8R,GACR,OAAO,GAGR,MAAOA,GACR,OAAO,EAGT,OAAO,EAhBuB,GA8B/Bqe,EAAW,SAActW,GACxB,IAAIzM,EAAsB,OAAXyM,GAAqC,kBAAXA,EACrCyY,EAAoC,sBAAvBjZ,EAAM3H,KAAKmI,GACxBnC,EAAc0Y,EAAOvW,GACrB0Y,EAAWnlB,GAAmC,oBAAvBiM,EAAM3H,KAAKmI,GAClC2Y,EAAU,GAEd,IAAKplB,IAAaklB,IAAe5a,EAChC,MAAM,IAAI4N,UAAU,sCAGrB,IAAImN,EAAYlC,GAAmB+B,EACnC,GAAIC,GAAY1Y,EAAOxZ,OAAS,IAAMivB,EAAI5d,KAAKmI,EAAQ,GACtD,IAAK,IAAIzY,EAAI,EAAGA,EAAIyY,EAAOxZ,SAAUe,EACpCoxB,EAAQruB,KAAKgoB,OAAO/qB,IAItB,GAAIsW,GAAemC,EAAOxZ,OAAS,EAClC,IAAK,IAAIgB,EAAI,EAAGA,EAAIwY,EAAOxZ,SAAUgB,EACpCmxB,EAAQruB,KAAKgoB,OAAO9qB,SAGrB,IAAK,IAAI8P,KAAQ0I,EACV4Y,GAAsB,cAATthB,IAAyBme,EAAI5d,KAAKmI,EAAQ1I,IAC5DqhB,EAAQruB,KAAKgoB,OAAOhb,IAKvB,GAAImf,EAGH,IAFA,IAAIoC,EA3CqC,SAAUhC,GAEpD,GAAsB,qBAAX2B,SAA2BD,EACrC,OAAO3B,EAA2BC,GAEnC,IACC,OAAOD,EAA2BC,GACjC,MAAO5e,GACR,OAAO,GAmCe6gB,CAAqC9Y,GAElD7Z,EAAI,EAAGA,EAAIwwB,EAAUnwB,SAAUL,EACjC0yB,GAAoC,gBAAjBlC,EAAUxwB,KAAyBsvB,EAAI5d,KAAKmI,EAAQ2W,EAAUxwB,KACtFwyB,EAAQruB,KAAKqsB,EAAUxwB,IAI1B,OAAOwyB,GAGT3yB,EAAOD,QAAUuwB,sCCvHjB,IAAInrB,EAAQ+D,MAAM3E,UAAUY,MACxBorB,EAAS,EAAQ,OAEjBwC,EAAWpoB,OAAO0O,KAClBiX,EAAWyC,EAAW,SAAclC,GAAK,OAAOkC,EAASlC,IAAQ,EAAQ,OAEzEmC,EAAeroB,OAAO0O,KAE1BiX,EAASF,KAAO,WACf,GAAIzlB,OAAO0O,KAAM,CAChB,IAAI4Z,EAA0B,WAE7B,IAAItN,EAAOhb,OAAO0O,KAAKjH,WACvB,OAAOuT,GAAQA,EAAKnlB,SAAW4R,UAAU5R,OAHb,CAI3B,EAAG,GACAyyB,IACJtoB,OAAO0O,KAAO,SAAcW,GAC3B,OAAIuW,EAAOvW,GACHgZ,EAAa7tB,EAAM0M,KAAKmI,IAEzBgZ,EAAahZ,UAItBrP,OAAO0O,KAAOiX,EAEf,OAAO3lB,OAAO0O,MAAQiX,GAGvBtwB,EAAOD,QAAUuwB,kCC7BjB,IAAI9W,EAAQ7O,OAAOpG,UAAUkV,SAE7BzZ,EAAOD,QAAU,SAAqB8K,GACrC,IAAIqoB,EAAM1Z,EAAM3H,KAAKhH,GACjB0lB,EAAiB,uBAAR2C,EASb,OARK3C,IACJA,EAAiB,mBAAR2C,GACE,OAAVroB,GACiB,kBAAVA,GACiB,kBAAjBA,EAAMrK,QACbqK,EAAMrK,QAAU,GACa,sBAA7BgZ,EAAM3H,KAAKhH,EAAMwkB,SAEZkB,sBCfRvwB,EAAOD,QAAU,SAA6BgJ,EAAOoqB,EAAI5S,EAAOC,GAC5D,IAAIpK,EAAIrN,EAAM,GAAIsN,EAAItN,EAAM,GACxBwM,GAAS,OACClG,IAAVkR,IAAqBA,EAAQ,QACrBlR,IAARmR,IAAmBA,EAAM2S,EAAG3yB,QAEhC,IADA,IAAIoE,GAAO4b,EAAID,GAAO,EACbhf,EAAI,EAAGC,EAAIoD,EAAM,EAAGrD,EAAIqD,EAAKpD,EAAID,IAAK,CAC3C,IAAI6xB,EAAKD,EAAG5S,EAAQ,EAAFhf,EAAI,GAAI8xB,EAAKF,EAAG5S,EAAQ,EAAFhf,EAAI,GACxC+xB,EAAKH,EAAG5S,EAAQ,EAAF/e,EAAI,GAAI+xB,EAAKJ,EAAG5S,EAAQ,EAAF/e,EAAI,GAC1B6xB,EAAKhd,IAAQkd,EAAKld,GAC5BD,GAAKkd,EAAKF,IAAO/c,EAAIgd,IAAOE,EAAKF,GAAMD,IAChC7d,GAAUA,GAE7B,OAAOA,0BCbX,IAAIie,EAAqB,EAAQ,OAC7BC,EAAuB,EAAQ,OAEnCzzB,EAAOD,QAAU,SAAyBgJ,EAAOoqB,EAAI5S,EAAOC,GACxD,OAAI2S,EAAG3yB,OAAS,GAAK0I,MAAMC,QAAQgqB,EAAG,IAC3BM,EAAqB1qB,EAAOoqB,EAAI5S,EAAOC,GAEvCgT,EAAmBzqB,EAAOoqB,EAAI5S,EAAOC,IAGpDxgB,EAAOD,QAAQ2zB,OAASD,EACxBzzB,EAAOD,QAAQ4zB,KAAOH,qBCRtBxzB,EAAOD,QAAU,SAA+BgJ,EAAOoqB,EAAI5S,EAAOC,GAC9D,IAAIpK,EAAIrN,EAAM,GAAIsN,EAAItN,EAAM,GACxBwM,GAAS,OACClG,IAAVkR,IAAqBA,EAAQ,QACrBlR,IAARmR,IAAmBA,EAAM2S,EAAG3yB,QAEhC,IADA,IAAIoE,EAAM4b,EAAMD,EACPhf,EAAI,EAAGC,EAAIoD,EAAM,EAAGrD,EAAIqD,EAAKpD,EAAID,IAAK,CAC3C,IAAI6xB,EAAKD,EAAG5xB,EAAEgf,GAAO,GAAI8S,EAAKF,EAAG5xB,EAAEgf,GAAO,GACtC+S,EAAKH,EAAG3xB,EAAE+e,GAAO,GAAIgT,EAAKJ,EAAG3xB,EAAE+e,GAAO,GACxB8S,EAAKhd,IAAQkd,EAAKld,GAC5BD,GAAKkd,EAAKF,IAAO/c,EAAIgd,IAAOE,EAAKF,GAAMD,IAChC7d,GAAUA,GAE7B,OAAOA,sBCfsDvV,EAAOD,QAGhE,WAAe,aAErB,SAAS6zB,EAAgBC,EAAUC,GACjC,KAAMD,aAAoBC,GACxB,MAAM,IAAIrO,UAAU,qCAIxB,SAASsO,EAAkBvO,EAAQlL,GACjC,IAAK,IAAI/Y,EAAI,EAAGA,EAAI+Y,EAAM9Z,OAAQe,IAAK,CACrC,IAAIutB,EAAaxU,EAAM/Y,GACvButB,EAAWhV,WAAagV,EAAWhV,aAAc,EACjDgV,EAAWxc,cAAe,EACtB,UAAWwc,IAAYA,EAAW3U,UAAW,GACjDxP,OAAOC,eAAe4a,EAAQsJ,EAAWrW,IAAKqW,IAIlD,SAASkF,EAAaF,EAAaG,EAAYC,GAG7C,OAFID,GAAYF,EAAkBD,EAAYvvB,UAAW0vB,GACrDC,GAAaH,EAAkBD,EAAaI,GACzCJ,EAWT,IAAIrP,EAEJ,WACE,SAASA,EAAKhM,EAAK/T,GACjBzC,KAAKoS,KAAO,KACZpS,KAAKwW,IAAMA,EACXxW,KAAKyC,KAAOA,EACZzC,KAAK7B,KAAO,KACZ6B,KAAK5B,MAAQ,KAGf,OAAOokB,EATT,GAgBA,SAAS0P,EAAgBxyB,EAAGC,GAC1B,OAAOD,EAAIC,EAAI,EAAID,EAAIC,GAAK,EAAI,EAOlC,SAASwyB,EAAM7yB,EAAGD,EAAG+yB,GAKnB,IAJA,IAAIjuB,EAAI,IAAIqe,EAAK,KAAM,MACnBzW,EAAI5H,EACJ6d,EAAI7d,IAEK,CACX,IAAIkuB,EAAMD,EAAW9yB,EAAGD,EAAEmX,KAE1B,GAAI6b,EAAM,EAAG,CACX,GAAe,OAAXhzB,EAAElB,KAAe,MAErB,GAAIi0B,EAAW9yB,EAAGD,EAAElB,KAAKqY,KAAO,EAAG,CACjC,IAAIpC,EAAI/U,EAAElB,KAMV,GAHAkB,EAAElB,KAAOiW,EAAEhW,MACXgW,EAAEhW,MAAQiB,EAEK,QADfA,EAAI+U,GACEjW,KAAe,MAGvB6jB,EAAE7jB,KAAOkB,EAGT2iB,EAAI3iB,EACJA,EAAIA,EAAElB,SACD,MAAIk0B,EAAM,GAkBV,MAjBL,GAAgB,OAAZhzB,EAAEjB,MAAgB,MAEtB,GAAIg0B,EAAW9yB,EAAGD,EAAEjB,MAAMoY,KAAO,IAC3BpC,EAAI/U,EAAEjB,MAGViB,EAAEjB,MAAQgW,EAAEjW,KACZiW,EAAEjW,KAAOkB,EAEO,QADhBA,EAAI+U,GACEhW,OAAgB,MAGxB2N,EAAE3N,MAAQiB,EAGV0M,EAAI1M,EACJA,EAAIA,EAAEjB,OAUV,OAJA2N,EAAE3N,MAAQiB,EAAElB,KACZ6jB,EAAE7jB,KAAOkB,EAAEjB,MACXiB,EAAElB,KAAOgG,EAAE/F,MACXiB,EAAEjB,MAAQ+F,EAAEhG,KACLkB,EAGT,SAAS2D,EAAO1D,EAAGmD,EAAMpD,EAAG+yB,GAC1B,IAAIxxB,EAAO,IAAI4hB,EAAKljB,EAAGmD,GAEvB,GAAU,OAANpD,EAEF,OADAuB,EAAKzC,KAAOyC,EAAKxC,MAAQ,KAClBwC,EAIT,IAAIyxB,EAAMD,EAAW9yB,GADrBD,EAAI8yB,EAAM7yB,EAAGD,EAAG+yB,IACU5b,KAY1B,OAVI6b,EAAM,GACRzxB,EAAKzC,KAAOkB,EAAElB,KACdyC,EAAKxC,MAAQiB,EACbA,EAAElB,KAAO,MACAk0B,GAAO,IAChBzxB,EAAKxC,MAAQiB,EAAEjB,MACfwC,EAAKzC,KAAOkB,EACZA,EAAEjB,MAAQ,MAGLwC,EAGT,SAAS0xB,EAAM9b,EAAK+b,EAAGH,GACrB,IAAIj0B,EAAO,KACPC,EAAQ,KAEZ,GAAIm0B,EAAG,CAEL,IAAIF,EAAMD,GADVG,EAAIJ,EAAM3b,EAAK+b,EAAGH,IACK5b,IAAKA,GAEhB,IAAR6b,GACFl0B,EAAOo0B,EAAEp0B,KACTC,EAAQm0B,EAAEn0B,OACDi0B,EAAM,GACfj0B,EAAQm0B,EAAEn0B,MACVm0B,EAAEn0B,MAAQ,KACVD,EAAOo0B,IAEPp0B,EAAOo0B,EAAEp0B,KACTo0B,EAAEp0B,KAAO,KACTC,EAAQm0B,GAIZ,MAAO,CACLp0B,KAAMA,EACNC,MAAOA,GAIX,SAASo0B,EAAMr0B,EAAMC,EAAOg0B,GAC1B,OAAc,OAAVh0B,EAAuBD,GACd,OAATA,KACJC,EAAQ+zB,EAAMh0B,EAAKqY,IAAKpY,EAAOg0B,IACzBj0B,KAAOA,GAFaC,GAU5B,SAASq0B,EAASC,EAAMC,EAAQC,EAAQC,EAAKC,GAC3C,GAAIJ,EAAM,CACRG,EAASF,GAAUC,EAAS,sBAAS,uBAAUE,EAAUJ,GAAQ,MACjE,IAAIK,EAASJ,GAAUC,EAAS,OAAS,aACrCF,EAAKv0B,MAAMs0B,EAASC,EAAKv0B,KAAM40B,GAAQ,EAAOF,EAAKC,GACnDJ,EAAKt0B,OAAOq0B,EAASC,EAAKt0B,MAAO20B,GAAQ,EAAMF,EAAKC,IAI5D,IAAIE,EAEJ,WACE,SAASA,EAAKZ,QACO,IAAfA,IACFA,EAAaF,GAGflyB,KAAKizB,MAAQ,KACbjzB,KAAKkzB,MAAQ,EACblzB,KAAKmzB,YAAcf,EA+arB,OAxaAY,EAAK1wB,UAAUU,OAAS,SAAUwT,EAAK/T,GAErC,OADAzC,KAAKkzB,QACElzB,KAAKizB,MAAQjwB,EAAOwT,EAAK/T,EAAMzC,KAAKizB,MAAOjzB,KAAKmzB,cAOzDH,EAAK1wB,UAAU8wB,IAAM,SAAU5c,EAAK/T,GAClC,IAAI7B,EAAO,IAAI4hB,EAAKhM,EAAK/T,GAEN,OAAfzC,KAAKizB,QACPryB,EAAKzC,KAAOyC,EAAKxC,MAAQ,KACzB4B,KAAKkzB,QACLlzB,KAAKizB,MAAQryB,GAGf,IAAIwxB,EAAapyB,KAAKmzB,YAClB9zB,EAAI8yB,EAAM3b,EAAKxW,KAAKizB,MAAOb,GAC3BC,EAAMD,EAAW5b,EAAKnX,EAAEmX,KAe5B,OAdY,IAAR6b,EAAWryB,KAAKizB,MAAQ5zB,GACtBgzB,EAAM,GACRzxB,EAAKzC,KAAOkB,EAAElB,KACdyC,EAAKxC,MAAQiB,EACbA,EAAElB,KAAO,MACAk0B,EAAM,IACfzxB,EAAKxC,MAAQiB,EAAEjB,MACfwC,EAAKzC,KAAOkB,EACZA,EAAEjB,MAAQ,MAGZ4B,KAAKkzB,QACLlzB,KAAKizB,MAAQryB,GAERZ,KAAKizB,OAQdD,EAAK1wB,UAAUgB,OAAS,SAAUkT,GAChCxW,KAAKizB,MAAQjzB,KAAKqzB,QAAQ7c,EAAKxW,KAAKizB,MAAOjzB,KAAKmzB,cAOlDH,EAAK1wB,UAAU+wB,QAAU,SAAU/zB,EAAGD,EAAG+yB,GACvC,IAAIje,EACJ,OAAU,OAAN9U,EAAmB,KAIX,IAFF+yB,EAAW9yB,GADrBD,EAAI8yB,EAAM7yB,EAAGD,EAAG+yB,IACU5b,MAIT,OAAXnX,EAAElB,KACJgW,EAAI9U,EAAEjB,OAEN+V,EAAIge,EAAM7yB,EAAGD,EAAElB,KAAMi0B,IACnBh0B,MAAQiB,EAAEjB,MAGd4B,KAAKkzB,QACE/e,GAGF9U,GAQT2zB,EAAK1wB,UAAUF,IAAM,WACnB,IAAIxB,EAAOZ,KAAKizB,MAEhB,GAAIryB,EAAM,CACR,KAAOA,EAAKzC,MACVyC,EAAOA,EAAKzC,KAKd,OAFA6B,KAAKizB,MAAQd,EAAMvxB,EAAK4V,IAAKxW,KAAKizB,MAAOjzB,KAAKmzB,aAC9CnzB,KAAKizB,MAAQjzB,KAAKqzB,QAAQzyB,EAAK4V,IAAKxW,KAAKizB,MAAOjzB,KAAKmzB,aAC9C,CACL3c,IAAK5V,EAAK4V,IACV/T,KAAM7B,EAAK6B,MAIf,OAAO,MAOTuwB,EAAK1wB,UAAUgxB,WAAa,SAAU9c,GAIpC,IAHA,IAAI+c,EAAUvzB,KAAKizB,MACf50B,EAAU2B,KAAKmzB,YAEZI,GAAS,CACd,IAAIlB,EAAMh0B,EAAQmY,EAAK+c,EAAQ/c,KAC/B,GAAY,IAAR6b,EAAW,OAAOkB,EAA0BA,EAATlB,EAAM,EAAakB,EAAQp1B,KAAoBo1B,EAAQn1B,MAGhG,OAAO,MAGT40B,EAAK1wB,UAAUkxB,KAAO,SAAUhd,GAC9B,OAAIxW,KAAKizB,QACPjzB,KAAKizB,MAAQd,EAAM3b,EAAKxW,KAAKizB,MAAOjzB,KAAKmzB,aACK,IAA1CnzB,KAAKmzB,YAAY3c,EAAKxW,KAAKizB,MAAMzc,MAAmB,KAGnDxW,KAAKizB,OAGdD,EAAK1wB,UAAUR,SAAW,SAAU0U,GAIlC,IAHA,IAAI+c,EAAUvzB,KAAKizB,MACf50B,EAAU2B,KAAKmzB,YAEZI,GAAS,CACd,IAAIlB,EAAMh0B,EAAQmY,EAAK+c,EAAQ/c,KAC/B,GAAY,IAAR6b,EAAW,OAAO,EAAuBkB,EAATlB,EAAM,EAAakB,EAAQp1B,KAAoBo1B,EAAQn1B,MAG7F,OAAO,GAGT40B,EAAK1wB,UAAUoJ,QAAU,SAAU+nB,EAASC,GAO1C,IANA,IAAIH,EAAUvzB,KAAKizB,MACfU,EAAI,GAGJC,GAAO,GAEHA,GACU,OAAZL,GACFI,EAAEtxB,KAAKkxB,GACPA,EAAUA,EAAQp1B,MAED,IAAbw1B,EAAEp1B,QACJg1B,EAAUI,EAAEvxB,MACZqxB,EAAQ7jB,KAAK8jB,EAAKH,GAClBA,EAAUA,EAAQn1B,OACbw1B,GAAO,EAIlB,OAAO5zB,MAOTgzB,EAAK1wB,UAAUuxB,MAAQ,SAAUC,EAAKC,EAAM9b,EAAIyb,GAM9C,IALA,IAAIC,EAAI,GACJt1B,EAAU2B,KAAKmzB,YACfvyB,EAAOZ,KAAKizB,MAGI,IAAbU,EAAEp1B,QAAgBqC,GACvB,GAAIA,EACF+yB,EAAEtxB,KAAKzB,GACPA,EAAOA,EAAKzC,SACP,CAIL,GAFME,GADNuC,EAAO+yB,EAAEvxB,OACUoU,IAAKud,GAEd,EACR,MACK,GAAI11B,EAAQuC,EAAK4V,IAAKsd,IAAQ,GAC/B7b,EAAGrI,KAAK8jB,EAAK9yB,GAAO,OAAOZ,KAGjCY,EAAOA,EAAKxC,MAIhB,OAAO4B,MAOTgzB,EAAK1wB,UAAU8U,KAAO,WACpB,IAAIA,EAAO,GAKX,OAJApX,KAAK0L,SAAQ,SAAUsoB,GACrB,IAAIxd,EAAMwd,EAAGxd,IACb,OAAOY,EAAK/U,KAAKmU,MAEZY,GAOT4b,EAAK1wB,UAAU2xB,OAAS,WACtB,IAAIA,EAAS,GAKb,OAJAj0B,KAAK0L,SAAQ,SAAUsoB,GACrB,IAAIvxB,EAAOuxB,EAAGvxB,KACd,OAAOwxB,EAAO5xB,KAAKI,MAEdwxB,GAGTjB,EAAK1wB,UAAUlD,IAAM,WACnB,OAAIY,KAAKizB,MAAcjzB,KAAKk0B,QAAQl0B,KAAKizB,OAAOzc,IACzC,MAGTwc,EAAK1wB,UAAUpD,IAAM,WACnB,OAAIc,KAAKizB,MAAcjzB,KAAKm0B,QAAQn0B,KAAKizB,OAAOzc,IACzC,MAGTwc,EAAK1wB,UAAU4xB,QAAU,SAAU70B,GAKjC,QAJU,IAANA,IACFA,EAAIW,KAAKizB,OAGP5zB,EAAG,KAAOA,EAAElB,MACdkB,EAAIA,EAAElB,KAER,OAAOkB,GAGT2zB,EAAK1wB,UAAU6xB,QAAU,SAAU90B,GAKjC,QAJU,IAANA,IACFA,EAAIW,KAAKizB,OAGP5zB,EAAG,KAAOA,EAAEjB,OACdiB,EAAIA,EAAEjB,MAER,OAAOiB,GAOT2zB,EAAK1wB,UAAU8xB,GAAK,SAAU5wB,GAM5B,IALA,IAAI+vB,EAAUvzB,KAAKizB,MACfW,GAAO,EACPt0B,EAAI,EACJq0B,EAAI,IAEAC,GACN,GAAIL,EACFI,EAAEtxB,KAAKkxB,GACPA,EAAUA,EAAQp1B,UAElB,GAAIw1B,EAAEp1B,OAAS,EAAG,CAEhB,GADAg1B,EAAUI,EAAEvxB,MACR9C,IAAMkE,EAAO,OAAO+vB,EACxBj0B,IACAi0B,EAAUA,EAAQn1B,WACbw1B,GAAO,EAIlB,OAAO,MAGTZ,EAAK1wB,UAAU8P,KAAO,SAAUQ,GAC9B,IAAI8f,EAAO1yB,KAAKizB,MACZoB,EAAY,KAEhB,GAAIzhB,EAAExU,MAAO,CAGX,IAFAi2B,EAAYzhB,EAAExU,MAEPi2B,EAAUl2B,MACfk2B,EAAYA,EAAUl2B,KAGxB,OAAOk2B,EAKT,IAFA,IAAIjC,EAAapyB,KAAKmzB,YAEfT,GAAM,CACX,IAAIL,EAAMD,EAAWxf,EAAE4D,IAAKkc,EAAKlc,KACjC,GAAY,IAAR6b,EAAW,MAAeA,EAAM,GAClCgC,EAAY3B,EACZA,EAAOA,EAAKv0B,MACPu0B,EAAOA,EAAKt0B,MAGrB,OAAOi2B,GAGTrB,EAAK1wB,UAAUmQ,KAAO,SAAUG,GAC9B,IAAI8f,EAAO1yB,KAAKizB,MACZqB,EAAc,KAElB,GAAe,OAAX1hB,EAAEzU,KAAe,CAGnB,IAFAm2B,EAAc1hB,EAAEzU,KAETm2B,EAAYl2B,OACjBk2B,EAAcA,EAAYl2B,MAG5B,OAAOk2B,EAKT,IAFA,IAAIlC,EAAapyB,KAAKmzB,YAEfT,GAAM,CACX,IAAIL,EAAMD,EAAWxf,EAAE4D,IAAKkc,EAAKlc,KACjC,GAAY,IAAR6b,EAAW,MAAeA,EAAM,EAAGK,EAAOA,EAAKv0B,MACjDm2B,EAAc5B,EACdA,EAAOA,EAAKt0B,OAIhB,OAAOk2B,GAGTtB,EAAK1wB,UAAUjC,MAAQ,WAGrB,OAFAL,KAAKizB,MAAQ,KACbjzB,KAAKkzB,MAAQ,EACNlzB,MAGTgzB,EAAK1wB,UAAUiyB,OAAS,WACtB,OAAOA,EAAOv0B,KAAKizB,QAOrBD,EAAK1wB,UAAUS,KAAO,SAAUqU,EAAM6c,EAAQO,QAC7B,IAAXP,IACFA,EAAS,SAGK,IAAZO,IACFA,GAAU,GAGZ,IAAIC,EAAOrd,EAAK7Y,OACZ6zB,EAAapyB,KAAKmzB,YAItB,GAFIqB,GAAS1uB,EAAKsR,EAAM6c,EAAQ,EAAGQ,EAAO,EAAGrC,GAE1B,OAAfpyB,KAAKizB,MAEPjzB,KAAKizB,MAAQyB,EAActd,EAAM6c,EAAQ,EAAGQ,GAC5Cz0B,KAAKkzB,MAAQuB,MACR,CAEL,IAAIE,EAAaC,EAAW50B,KAAKu0B,SAAUM,EAAWzd,EAAM6c,GAAS7B,GACrEqC,EAAOz0B,KAAKkzB,MAAQuB,EACpBz0B,KAAKizB,MAAQ6B,EAAgB,CAC3BC,KAAMJ,GACL,EAAGF,GAGR,OAAOz0B,MAGTgzB,EAAK1wB,UAAU0yB,QAAU,WACvB,OAAsB,OAAfh1B,KAAKizB,OAGdvqB,OAAOC,eAAeqqB,EAAK1wB,UAAW,OAAQ,CAC5CslB,IAAK,WACH,OAAO5nB,KAAKkzB,OAEdrb,YAAY,EACZxH,cAAc,IAEhB3H,OAAOC,eAAeqqB,EAAK1wB,UAAW,OAAQ,CAC5CslB,IAAK,WACH,OAAO5nB,KAAKizB,OAEdpb,YAAY,EACZxH,cAAc,IAGhB2iB,EAAK1wB,UAAUkV,SAAW,SAAUsb,QAChB,IAAdA,IACFA,EAAY,SAAmBr0B,GAC7B,OAAO4rB,OAAO5rB,EAAE+X,OAIpB,IAAIqc,EAAM,GAIV,OAHAJ,EAASzyB,KAAKizB,MAAO,IAAI,GAAM,SAAUV,GACvC,OAAOM,EAAIxwB,KAAKkwB,KACfO,GACID,EAAIxsB,KAAK,KAGlB2sB,EAAK1wB,UAAU2yB,OAAS,SAAUze,EAAK0e,EAAQC,GAC7C,IAAI/C,EAAapyB,KAAKmzB,YAElBa,EAAK1B,EAAM9b,EAAKxW,KAAKizB,MAAOb,GAC5Bj0B,EAAO61B,EAAG71B,KACVC,EAAQ41B,EAAG51B,MAEXg0B,EAAW5b,EAAK0e,GAAU,EAC5B92B,EAAQ4E,EAAOkyB,EAAQC,EAAS/2B,EAAOg0B,GAEvCj0B,EAAO6E,EAAOkyB,EAAQC,EAASh3B,EAAMi0B,GAGvCpyB,KAAKizB,MAAQT,EAAMr0B,EAAMC,EAAOg0B,IAGlCY,EAAK1wB,UAAUgwB,MAAQ,SAAU9b,GAC/B,OAAO8b,EAAM9b,EAAKxW,KAAKizB,MAAOjzB,KAAKmzB,cAG9BH,EAvbT,GA0bA,SAAS0B,EAActd,EAAM6c,EAAQ3V,EAAOC,GAC1C,IAAIkW,EAAOlW,EAAMD,EAEjB,GAAImW,EAAO,EAAG,CACZ,IAAIW,EAAS9W,EAAQ1f,KAAKO,MAAMs1B,EAAO,GACnCje,EAAMY,EAAKge,GACX3yB,EAAOwxB,EAAOmB,GACdx0B,EAAO,IAAI4hB,EAAKhM,EAAK/T,GAGzB,OAFA7B,EAAKzC,KAAOu2B,EAActd,EAAM6c,EAAQ3V,EAAO8W,GAC/Cx0B,EAAKxC,MAAQs2B,EAActd,EAAM6c,EAAQmB,EAAS,EAAG7W,GAC9C3d,EAGT,OAAO,KAGT,SAASi0B,EAAWzd,EAAM6c,GAIxB,IAHA,IAAIc,EAAO,IAAIvS,EAAK,KAAM,MACtBxhB,EAAI+zB,EAECz1B,EAAI,EAAGA,EAAI8X,EAAK7Y,OAAQe,IAC/B0B,EAAIA,EAAEoR,KAAO,IAAIoQ,EAAKpL,EAAK9X,GAAI20B,EAAO30B,IAIxC,OADA0B,EAAEoR,KAAO,KACF2iB,EAAK3iB,KAGd,SAASmiB,EAAO7B,GAOd,IANA,IAAIa,EAAUb,EACViB,EAAI,GACJC,GAAO,EACPmB,EAAO,IAAIvS,EAAK,KAAM,MACtBxhB,EAAI+zB,GAEAnB,GACFL,GACFI,EAAEtxB,KAAKkxB,GACPA,EAAUA,EAAQp1B,MAEdw1B,EAAEp1B,OAAS,EAEbg1B,GADAA,EAAUvyB,EAAIA,EAAEoR,KAAOuhB,EAAEvxB,OACPhE,MACbw1B,GAAO,EAMlB,OAFA5yB,EAAEoR,KAAO,KAEF2iB,EAAK3iB,KAGd,SAAS0iB,EAAgBhX,EAAMQ,EAAOC,GACpC,IAAIkW,EAAOlW,EAAMD,EAEjB,GAAImW,EAAO,EAAG,CACZ,IAAIW,EAAS9W,EAAQ1f,KAAKO,MAAMs1B,EAAO,GACnCt2B,EAAO22B,EAAgBhX,EAAMQ,EAAO8W,GACpC1C,EAAO5U,EAAKiX,KAIhB,OAHArC,EAAKv0B,KAAOA,EACZ2f,EAAKiX,KAAOjX,EAAKiX,KAAK3iB,KACtBsgB,EAAKt0B,MAAQ02B,EAAgBhX,EAAMsX,EAAS,EAAG7W,GACxCmU,EAGT,OAAO,KAGT,SAASkC,EAAWS,EAAIC,EAAIj3B,GAO1B,IANA,IAAI02B,EAAO,IAAIvS,EAAK,KAAM,MAEtBxhB,EAAI+zB,EACJphB,EAAK0hB,EACLxhB,EAAKyhB,EAEK,OAAP3hB,GAAsB,OAAPE,GAChBxV,EAAQsV,EAAG6C,IAAK3C,EAAG2C,KAAO,GAC5BxV,EAAEoR,KAAOuB,EACTA,EAAKA,EAAGvB,OAERpR,EAAEoR,KAAOyB,EACTA,EAAKA,EAAGzB,MAGVpR,EAAIA,EAAEoR,KASR,OANW,OAAPuB,EACF3S,EAAEoR,KAAOuB,EACO,OAAPE,IACT7S,EAAEoR,KAAOyB,GAGJkhB,EAAK3iB,KAGd,SAAStM,EAAKsR,EAAM6c,EAAQ91B,EAAMC,EAAOC,GACvC,KAAIF,GAAQC,GAAZ,CAKA,IAJA,IAAIm3B,EAAQne,EAAKjZ,EAAOC,GAAS,GAC7BkB,EAAInB,EAAO,EACXoB,EAAInB,EAAQ,IAEH,CACX,GACEkB,UACOjB,EAAQ+Y,EAAK9X,GAAIi2B,GAAS,GAEnC,GACEh2B,UACOlB,EAAQ+Y,EAAK7X,GAAIg2B,GAAS,GAEnC,GAAIj2B,GAAKC,EAAG,MACZ,IAAIE,EAAM2X,EAAK9X,GACf8X,EAAK9X,GAAK8X,EAAK7X,GACf6X,EAAK7X,GAAKE,EACVA,EAAMw0B,EAAO30B,GACb20B,EAAO30B,GAAK20B,EAAO10B,GACnB00B,EAAO10B,GAAKE,EAGdqG,EAAKsR,EAAM6c,EAAQ91B,EAAMoB,EAAGlB,GAC5ByH,EAAKsR,EAAM6c,EAAQ10B,EAAI,EAAGnB,EAAOC,IASnC,IAAIm3B,EAAW,SAAkBh4B,EAAMsJ,GACrC,OAAOtJ,EAAKi4B,GAAGthB,GAAKrN,EAAMqN,GAAKrN,EAAMqN,GAAK3W,EAAKk4B,GAAGvhB,GAAK3W,EAAKi4B,GAAGrhB,GAAKtN,EAAMsN,GAAKtN,EAAMsN,GAAK5W,EAAKk4B,GAAGthB,GAMhGuhB,EAAiB,SAAwBC,EAAInT,GAE/C,GAAIA,EAAGiT,GAAGvhB,EAAIyhB,EAAGH,GAAGthB,GAAKyhB,EAAGF,GAAGvhB,EAAIsO,EAAGgT,GAAGthB,GAAKsO,EAAGiT,GAAGthB,EAAIwhB,EAAGH,GAAGrhB,GAAKwhB,EAAGF,GAAGthB,EAAIqO,EAAGgT,GAAGrhB,EAAG,OAAO,KAE7F,IAAIyhB,EAASD,EAAGH,GAAGthB,EAAIsO,EAAGgT,GAAGthB,EAAIsO,EAAGgT,GAAGthB,EAAIyhB,EAAGH,GAAGthB,EAC7C2hB,EAASF,EAAGF,GAAGvhB,EAAIsO,EAAGiT,GAAGvhB,EAAIyhB,EAAGF,GAAGvhB,EAAIsO,EAAGiT,GAAGvhB,EAKjD,MAAO,CACLshB,GAAI,CACFthB,EAAG0hB,EACHzhB,EANSwhB,EAAGH,GAAGrhB,EAAIqO,EAAGgT,GAAGrhB,EAAIqO,EAAGgT,GAAGrhB,EAAIwhB,EAAGH,GAAGrhB,GAQ/CshB,GAAI,CACFvhB,EAAG2hB,EACH1hB,EATSwhB,EAAGF,GAAGthB,EAAIqO,EAAGiT,GAAGthB,EAAIwhB,EAAGF,GAAGthB,EAAIqO,EAAGiT,GAAGthB,KAmB/CqE,EAAU2C,OAAO2a,aAEL3oB,IAAZqL,IAAuBA,EAAU7Z,KAAKyF,IAAI,GAAI,KAClD,IAAI2xB,EAAavd,EAAUA,EAGvB4Z,EAAM,SAAa3yB,EAAGC,GAExB,IAAK8Y,EAAU/Y,GAAKA,EAAI+Y,IACjBA,EAAU9Y,GAAKA,EAAI8Y,EACtB,OAAO,EAKX,IAAIwd,EAAKv2B,EAAIC,EAEb,OAAIs2B,EAAKA,EAAKD,EAAat2B,EAAIC,EACtB,EAIFD,EAAIC,GAAK,EAAI,GAgBlBu2B,EAAyB,WAC3B,SAASA,IACPvE,EAAgB3xB,KAAMk2B,GAEtBl2B,KAAKm2B,QAmBP,OAhBApE,EAAamE,EAAW,CAAC,CACvB1f,IAAK,QACL5N,MAAO,WACL5I,KAAKo2B,SAAW,IAAIC,EACpBr2B,KAAKs2B,SAAW,IAAID,IAErB,CACD7f,IAAK,QACL5N,MAAO,SAAeuL,EAAGC,GACvB,MAAO,CACLD,EAAGnU,KAAKo2B,SAAS5rB,MAAM2J,GACvBC,EAAGpU,KAAKs2B,SAAS9rB,MAAM4J,QAKtB8hB,EAvBoB,GA0BzBG,EAA4B,WAC9B,SAASA,IACP1E,EAAgB3xB,KAAMq2B,GAEtBr2B,KAAK2R,KAAO,IAAIqhB,EAEhBhzB,KAAKwK,MAAM,GAgCb,OAtBAunB,EAAasE,EAAc,CAAC,CAC1B7f,IAAK,QACL5N,MAAO,SAAe/K,GACpB,IAAI+C,EAAOZ,KAAK2R,KAAKyhB,IAAIv1B,GACrB04B,EAAWv2B,KAAK2R,KAAKc,KAAK7R,GAE9B,GAAiB,OAAb21B,GAAqD,IAAhClE,EAAIzxB,EAAK4V,IAAK+f,EAAS/f,KAE9C,OADAxW,KAAK2R,KAAKrO,OAAOzF,GACV04B,EAAS/f,IAGlB,IAAIggB,EAAWx2B,KAAK2R,KAAKS,KAAKxR,GAE9B,OAAiB,OAAb41B,GAAqD,IAAhCnE,EAAIzxB,EAAK4V,IAAKggB,EAAShgB,MAC9CxW,KAAK2R,KAAKrO,OAAOzF,GACV24B,EAAShgB,KAGX3Y,MAIJw4B,EAtCuB,GA0C5BI,EAAU,IAAIP,EAIdQ,EAAe,SAAsBh3B,EAAGC,GAC1C,OAAOD,EAAEyU,EAAIxU,EAAEyU,EAAI1U,EAAE0U,EAAIzU,EAAEwU,GAIzBwiB,EAAa,SAAoBj3B,EAAGC,GACtC,OAAOD,EAAEyU,EAAIxU,EAAEwU,EAAIzU,EAAE0U,EAAIzU,EAAEyU,GAIzBwiB,EAAsB,SAA6BC,EAAQC,EAAQC,GACrE,IAAIC,EAAK,CACP7iB,EAAG2iB,EAAO3iB,EAAI0iB,EAAO1iB,EACrBC,EAAG0iB,EAAO1iB,EAAIyiB,EAAOziB,GAEnB6iB,EAAK,CACP9iB,EAAG4iB,EAAO5iB,EAAI0iB,EAAO1iB,EACrBC,EAAG2iB,EAAO3iB,EAAIyiB,EAAOziB,GAEnB8iB,EAAQR,EAAaM,EAAIC,GAC7B,OAAO5E,EAAI6E,EAAO,IAEhB34B,EAAS,SAAgBg0B,GAC3B,OAAO3zB,KAAKK,KAAK03B,EAAWpE,EAAGA,KAI7B4E,EAAc,SAAqBC,EAASC,EAAOC,GACrD,IAAIC,EAAQ,CACVpjB,EAAGkjB,EAAMljB,EAAIijB,EAAQjjB,EACrBC,EAAGijB,EAAMjjB,EAAIgjB,EAAQhjB,GAEnBojB,EAAS,CACXrjB,EAAGmjB,EAAOnjB,EAAIijB,EAAQjjB,EACtBC,EAAGkjB,EAAOljB,EAAIgjB,EAAQhjB,GAExB,OAAOsiB,EAAac,EAAQD,GAASh5B,EAAOi5B,GAAUj5B,EAAOg5B,IAI3DE,EAAgB,SAAuBL,EAASC,EAAOC,GACzD,IAAIC,EAAQ,CACVpjB,EAAGkjB,EAAMljB,EAAIijB,EAAQjjB,EACrBC,EAAGijB,EAAMjjB,EAAIgjB,EAAQhjB,GAEnBojB,EAAS,CACXrjB,EAAGmjB,EAAOnjB,EAAIijB,EAAQjjB,EACtBC,EAAGkjB,EAAOljB,EAAIgjB,EAAQhjB,GAExB,OAAOuiB,EAAWa,EAAQD,GAASh5B,EAAOi5B,GAAUj5B,EAAOg5B,IAMzDG,EAAyB,SAAgCC,EAAIpF,EAAGne,GAClE,OAAY,IAARme,EAAEne,EAAgB,KACf,CACLD,EAAGwjB,EAAGxjB,EAAIoe,EAAEpe,EAAIoe,EAAEne,GAAKA,EAAIujB,EAAGvjB,GAC9BA,EAAGA,IAOHwjB,EAAuB,SAA8BD,EAAIpF,EAAGpe,GAC9D,OAAY,IAARoe,EAAEpe,EAAgB,KACf,CACLA,EAAGA,EACHC,EAAGujB,EAAGvjB,EAAIme,EAAEne,EAAIme,EAAEpe,GAAKA,EAAIwjB,EAAGxjB,KAM9B0jB,EAAe,SAAsBC,EAAKd,EAAIe,EAAKd,GAIrD,GAAa,IAATD,EAAG7iB,EAAS,OAAOyjB,EAAqBG,EAAKd,EAAIa,EAAI3jB,GACzD,GAAa,IAAT8iB,EAAG9iB,EAAS,OAAOyjB,EAAqBE,EAAKd,EAAIe,EAAI5jB,GACzD,GAAa,IAAT6iB,EAAG5iB,EAAS,OAAOsjB,EAAuBK,EAAKd,EAAIa,EAAI1jB,GAC3D,GAAa,IAAT6iB,EAAG7iB,EAAS,OAAOsjB,EAAuBI,EAAKd,EAAIe,EAAI3jB,GAI3D,IAAI8iB,EAAQR,EAAaM,EAAIC,GAC7B,GAAa,GAATC,EAAY,OAAO,KACvB,IAAIc,EAAK,CACP7jB,EAAG4jB,EAAI5jB,EAAI2jB,EAAI3jB,EACfC,EAAG2jB,EAAI3jB,EAAI0jB,EAAI1jB,GAEbhB,EAAKsjB,EAAasB,EAAIhB,GAAME,EAC5B1jB,EAAKkjB,EAAasB,EAAIf,GAAMC,EAQhC,MAAO,CACL/iB,GAPO2jB,EAAI3jB,EAAIX,EAAKwjB,EAAG7iB,GAChB4jB,EAAI5jB,EAAIf,EAAK6jB,EAAG9iB,IAGL,EAIlBC,GANO0jB,EAAI1jB,EAAIZ,EAAKwjB,EAAG5iB,GAChB2jB,EAAI3jB,EAAIhB,EAAK6jB,EAAG7iB,IAEL,IAOlB6jB,EAA0B,WA6B5B,SAASA,EAAWnxB,EAAOoxB,GACzBvG,EAAgB3xB,KAAMi4B,QAED7qB,IAAjBtG,EAAMqxB,OAAsBrxB,EAAMqxB,OAAS,CAACn4B,MAAW8G,EAAMqxB,OAAO91B,KAAKrC,MAC7EA,KAAK8G,MAAQA,EACb9G,KAAKk4B,OAASA,EAyHhB,OA1JAnG,EAAakG,EAAY,KAAM,CAAC,CAC9BzhB,IAAK,UAEL5N,MAAO,SAAiBlJ,EAAGC,GAEzB,IAAIy4B,EAAQH,EAAWI,cAAc34B,EAAEoH,MAAOnH,EAAEmH,OAChD,OAAc,IAAVsxB,EAAoBA,GAEpB14B,EAAEoH,QAAUnH,EAAEmH,OAAOpH,EAAE44B,KAAK34B,GAE5BD,EAAEw4B,SAAWv4B,EAAEu4B,OAAex4B,EAAEw4B,OAAS,GAAK,EAG3CK,EAAQl6B,QAAQqB,EAAE84B,QAAS74B,EAAE64B,YAGrC,CACDhiB,IAAK,gBACL5N,MAAO,SAAuB6vB,EAAKC,GACjC,OAAID,EAAItkB,EAAIukB,EAAIvkB,GAAW,EACvBskB,EAAItkB,EAAIukB,EAAIvkB,EAAU,EACtBskB,EAAIrkB,EAAIskB,EAAItkB,GAAW,EACvBqkB,EAAIrkB,EAAIskB,EAAItkB,EAAU,EACnB,MAaX2d,EAAakG,EAAY,CAAC,CACxBzhB,IAAK,OACL5N,MAAO,SAAc+vB,GACnB,GAAIA,EAAM7xB,QAAU9G,KAAK8G,MACvB,MAAM,IAAIE,MAAM,uCAKlB,IAFA,IAAI4xB,EAAcD,EAAM7xB,MAAMqxB,OAErB74B,EAAI,EAAGu5B,EAAOD,EAAYr6B,OAAQe,EAAIu5B,EAAMv5B,IAAK,CACxD,IAAIw5B,EAAMF,EAAYt5B,GACtBU,KAAK8G,MAAMqxB,OAAO91B,KAAKy2B,GACvBA,EAAIhyB,MAAQ9G,KAAK8G,MAGnB9G,KAAK+4B,sBAKN,CACDviB,IAAK,oBACL5N,MAAO,WAQL,IAFA,IAAIowB,EAAYh5B,KAAK8G,MAAMqxB,OAAO55B,OAEzBe,EAAI,EAAGA,EAAI05B,EAAW15B,IAAK,CAClC,IAAI25B,EAAOj5B,KAAK8G,MAAMqxB,OAAO74B,GAC7B,QAAgC8N,IAA5B6rB,EAAKT,QAAQU,WAEjB,IAAK,IAAI35B,EAAID,EAAI,EAAGC,EAAIy5B,EAAWz5B,IAAK,CACtC,IAAI45B,EAAOn5B,KAAK8G,MAAMqxB,OAAO54B,QACL6N,IAApB+rB,EAAKD,YACLD,EAAKG,QAAQtyB,MAAMqxB,SAAWgB,EAAKC,QAAQtyB,MAAMqxB,QACrDc,EAAKT,QAAQa,QAAQF,EAAKX,aAI/B,CACDhiB,IAAK,2BACL5N,MAAO,WAIL,IAFA,IAAIuvB,EAAS,GAEJ74B,EAAI,EAAGu5B,EAAO74B,KAAK8G,MAAMqxB,OAAO55B,OAAQe,EAAIu5B,EAAMv5B,IAAK,CAC9D,IAAIw5B,EAAM94B,KAAK8G,MAAMqxB,OAAO74B,GAExBw5B,IAAQ94B,OAAS84B,EAAIN,QAAQc,SAAWR,EAAIN,QAAQe,cACtDpB,EAAO91B,KAAKy2B,GAIhB,OAAOX,IAaR,CACD3hB,IAAK,wBACL5N,MAAO,SAA+B4wB,GACpC,IAAIC,EAAQz5B,KAER05B,EAAQ,IAAIhQ,IAEZiQ,EAAY,SAAmBC,GACjC,IAAIC,EAAYD,EAAYR,QAC5BM,EAAMxe,IAAI0e,EAAa,CACrBE,KAAM3C,EAAYsC,EAAM3yB,MAAO0yB,EAAU1yB,MAAO+yB,EAAU/yB,OAC1DizB,OAAQtC,EAAcgC,EAAM3yB,MAAO0yB,EAAU1yB,MAAO+yB,EAAU/yB,UAIlE,OAAO,SAAUpH,EAAGC,GACb+5B,EAAMlM,IAAI9tB,IAAIi6B,EAAUj6B,GACxBg6B,EAAMlM,IAAI7tB,IAAIg6B,EAAUh6B,GAE7B,IAAIq6B,EAAaN,EAAM9R,IAAIloB,GACvBu6B,EAAQD,EAAWF,KACnBI,EAAUF,EAAWD,OAErBI,EAAcT,EAAM9R,IAAIjoB,GACxBy6B,EAAQD,EAAYL,KACpBO,EAAUF,EAAYJ,OAG1B,OAAIE,GAAS,GAAKG,GAAS,EACrBF,EAAUG,EAAgB,EAC1BH,EAAUG,GAAiB,EACxB,EAILJ,EAAQ,GAAKG,EAAQ,EACnBF,EAAUG,GAAiB,EAC3BH,EAAUG,EAAgB,EACvB,EAILD,EAAQH,GAAe,EACvBG,EAAQH,EAAc,EACnB,OAKNhC,EA3JqB,GAgK1BqC,EAAY,EAEZ/B,EAAuB,WAoHzB,SAASA,EAAQgC,EAAQC,EAASC,EAAOC,GACvC/I,EAAgB3xB,KAAMu4B,GAEtBv4B,KAAK4G,KAAO0zB,EACZt6B,KAAKu6B,OAASA,EACdA,EAAO/B,QAAUx4B,KACjBu6B,EAAOnB,QAAUoB,EACjBx6B,KAAKw6B,QAAUA,EACfA,EAAQhC,QAAUx4B,KAClBw6B,EAAQpB,QAAUmB,EAClBv6B,KAAKy6B,MAAQA,EACbz6B,KAAK06B,SAAWA,EAuclB,OArkBA3I,EAAawG,EAAS,KAAM,CAAC,CAC3B/hB,IAAK,UAeL5N,MAAO,SAAiBlJ,EAAGC,GACzB,IAAIg7B,EAAMj7B,EAAE66B,OAAOzzB,MAAMqN,EACrBymB,EAAMj7B,EAAE46B,OAAOzzB,MAAMqN,EACrB0mB,EAAMn7B,EAAE86B,QAAQ1zB,MAAMqN,EACtB2mB,EAAMn7B,EAAE66B,QAAQ1zB,MAAMqN,EAE1B,GAAI2mB,EAAMH,EAAK,OAAO,EACtB,GAAIE,EAAMD,EAAK,OAAQ,EACvB,IAAIG,EAAMr7B,EAAE66B,OAAOzzB,MAAMsN,EACrB4mB,EAAMr7B,EAAE46B,OAAOzzB,MAAMsN,EACrB6mB,EAAMv7B,EAAE86B,QAAQ1zB,MAAMsN,EACtB8mB,EAAMv7B,EAAE66B,QAAQ1zB,MAAMsN,EAE1B,GAAIumB,EAAMC,EAAK,CAEb,GAAII,EAAMD,GAAOC,EAAMC,EAAK,OAAO,EACnC,GAAID,EAAMD,GAAOC,EAAMC,EAAK,OAAQ,EAEpC,IAAIE,EAAYz7B,EAAE07B,aAAaz7B,EAAE46B,OAAOzzB,OACxC,GAAIq0B,EAAY,EAAG,OAAO,EAC1B,GAAIA,EAAY,EAAG,OAAQ,EAE3B,IAAIE,EAAa17B,EAAEy7B,aAAa17B,EAAE86B,QAAQ1zB,OAC1C,OAAmB,IAAfu0B,EAAyBA,GAGrB,EAIV,GAAIV,EAAMC,EAAK,CACb,GAAIG,EAAMC,GAAOD,EAAMG,EAAK,OAAQ,EACpC,GAAIH,EAAMC,GAAOD,EAAMG,EAAK,OAAO,EAEnC,IAAII,EAAY37B,EAAEy7B,aAAa17B,EAAE66B,OAAOzzB,OACxC,GAAkB,IAAdw0B,EAAiB,OAAOA,EAE5B,IAAIC,EAAa77B,EAAE07B,aAAaz7B,EAAE66B,QAAQ1zB,OAC1C,OAAIy0B,EAAa,EAAU,EACvBA,EAAa,GAAW,EAGrB,EAMT,GAAIR,EAAMC,EAAK,OAAQ,EACvB,GAAID,EAAMC,EAAK,OAAO,EAItB,GAAIH,EAAMC,EAAK,CACb,IAAIU,EAAc77B,EAAEy7B,aAAa17B,EAAE86B,QAAQ1zB,OAE3C,GAAoB,IAAhB00B,EAAmB,OAAOA,EAIhC,GAAIX,EAAMC,EAAK,CACb,IAAIW,EAAc/7B,EAAE07B,aAAaz7B,EAAE66B,QAAQ1zB,OAE3C,GAAI20B,EAAc,EAAG,OAAO,EAC5B,GAAIA,EAAc,EAAG,OAAQ,EAG/B,GAAIZ,IAAQC,EAAK,CAGf,IAAIvZ,EAAK0Z,EAAMF,EACXzZ,EAAKuZ,EAAMF,EACXlZ,EAAKyZ,EAAMF,EACXxZ,EAAKsZ,EAAMF,EACf,GAAIrZ,EAAKD,GAAMG,EAAKD,EAAI,OAAO,EAC/B,GAAID,EAAKD,GAAMG,EAAKD,EAAI,OAAQ,EAKlC,OAAIqZ,EAAMC,EAAY,EAClBD,EAAMC,GAING,EAAMC,GAJa,EAKnBD,EAAMC,EAAY,EAGlBx7B,EAAEkH,GAAKjH,EAAEiH,IAAY,EACrBlH,EAAEkH,GAAKjH,EAAEiH,GAAW,EAEjB,MAsBXmrB,EAAawG,EAAS,CAAC,CACrB/hB,IAAK,iBAGL5N,MAAO,SAAwB8yB,GAC7B17B,KAAKw6B,QAAUkB,EACf17B,KAAKw6B,QAAQhC,QAAUx4B,KACvBA,KAAKw6B,QAAQpB,QAAUp5B,KAAKu6B,OAC5Bv6B,KAAKu6B,OAAOnB,QAAUp5B,KAAKw6B,UAE5B,CACDhkB,IAAK,OACL5N,MAAO,WACL,IAAI4L,EAAKxU,KAAKu6B,OAAOzzB,MAAMsN,EACvBM,EAAK1U,KAAKw6B,QAAQ1zB,MAAMsN,EAC5B,MAAO,CACLqhB,GAAI,CACFthB,EAAGnU,KAAKu6B,OAAOzzB,MAAMqN,EACrBC,EAAGI,EAAKE,EAAKF,EAAKE,GAEpBghB,GAAI,CACFvhB,EAAGnU,KAAKw6B,QAAQ1zB,MAAMqN,EACtBC,EAAGI,EAAKE,EAAKF,EAAKE,MAMvB,CACD8B,IAAK,SACL5N,MAAO,WACL,MAAO,CACLuL,EAAGnU,KAAKw6B,QAAQ1zB,MAAMqN,EAAInU,KAAKu6B,OAAOzzB,MAAMqN,EAC5CC,EAAGpU,KAAKw6B,QAAQ1zB,MAAMsN,EAAIpU,KAAKu6B,OAAOzzB,MAAMsN,KAG/C,CACDoC,IAAK,eACL5N,MAAO,SAAsB+uB,GAC3B,OAAOA,EAAGxjB,IAAMnU,KAAKu6B,OAAOzzB,MAAMqN,GAAKwjB,EAAGvjB,IAAMpU,KAAKu6B,OAAOzzB,MAAMsN,GAAKujB,EAAGxjB,IAAMnU,KAAKw6B,QAAQ1zB,MAAMqN,GAAKwjB,EAAGvjB,IAAMpU,KAAKw6B,QAAQ1zB,MAAMsN,IAgBrI,CACDoC,IAAK,eACL5N,MAAO,SAAsB9B,GAC3B,GAAI9G,KAAK27B,aAAa70B,GAAQ,OAAO,EACrC,IAAI80B,EAAM57B,KAAKu6B,OAAOzzB,MAClB+0B,EAAM77B,KAAKw6B,QAAQ1zB,MACnByrB,EAAIvyB,KAAK87B,SAEb,GAAIF,EAAIznB,IAAM0nB,EAAI1nB,EAChB,OAAIrN,EAAMqN,IAAMynB,EAAIznB,EAAU,EACvBrN,EAAMqN,EAAIynB,EAAIznB,EAAI,GAAK,EAKhC,IAAI4nB,GAASj1B,EAAMsN,EAAIwnB,EAAIxnB,GAAKme,EAAEne,EAC9B4nB,EAAaJ,EAAIznB,EAAI4nB,EAAQxJ,EAAEpe,EACnC,GAAIrN,EAAMqN,IAAM6nB,EAAY,OAAO,EAGnC,IAAIC,GAASn1B,EAAMqN,EAAIynB,EAAIznB,GAAKoe,EAAEpe,EAC9B+nB,EAAaN,EAAIxnB,EAAI6nB,EAAQ1J,EAAEne,EACnC,OAAItN,EAAMsN,IAAM8nB,EAAmB,EAC5Bp1B,EAAMsN,EAAI8nB,GAAc,EAAI,IAkBpC,CACD1lB,IAAK,kBACL5N,MAAO,SAAyB+vB,GAE9B,IAAIwD,EAAQn8B,KAAKxC,OACb4+B,EAAQzD,EAAMn7B,OACd6+B,EAAc1G,EAAewG,EAAOC,GACxC,GAAoB,OAAhBC,EAAsB,OAAO,KAIjC,IAAIC,EAAMt8B,KAAKu6B,OAAOzzB,MAClBy1B,EAAMv8B,KAAKw6B,QAAQ1zB,MACnB01B,EAAM7D,EAAM4B,OAAOzzB,MACnB21B,EAAM9D,EAAM6B,QAAQ1zB,MAIpB41B,EAAkBlH,EAAS2G,EAAOK,IAAmC,IAA3Bx8B,KAAKo7B,aAAaoB,GAC5DG,EAAiBnH,EAAS4G,EAAOE,IAAoC,IAA5B3D,EAAMyC,aAAakB,GAC5DM,EAAkBpH,EAAS2G,EAAOM,IAAmC,IAA3Bz8B,KAAKo7B,aAAaqB,GAC5DI,EAAiBrH,EAAS4G,EAAOG,IAAoC,IAA5B5D,EAAMyC,aAAamB,GAEhE,GAAII,GAAkBD,EAGpB,OAAIG,IAAmBD,EAAwBL,GAC1CM,GAAkBD,EAAwBH,EAGxC,KAIT,GAAIE,EAEF,OAAIC,GACEN,EAAInoB,IAAMsoB,EAAItoB,GAAKmoB,EAAIloB,IAAMqoB,EAAIroB,EAAU,KAI1CkoB,EAIT,GAAII,EAEF,OAAIG,GACEN,EAAIpoB,IAAMqoB,EAAIroB,GAAKooB,EAAInoB,IAAMooB,EAAIpoB,EAAU,KAI1CooB,EAIT,GAAIK,GAAkBD,EAAiB,OAAO,KAE9C,GAAIC,EAAgB,OAAON,EAC3B,GAAIK,EAAiB,OAAOH,EAG5B,IAAI9E,EAAKE,EAAayE,EAAKt8B,KAAK87B,SAAUU,EAAK7D,EAAMmD,UAGrD,OAAW,OAAPnE,EAAoB,KAEnBnC,EAAS6G,EAAa1E,GAEpBlB,EAAQjsB,MAAMmtB,EAAGxjB,EAAGwjB,EAAGvjB,GAFS,OAiBxC,CACDoC,IAAK,QACL5N,MAAO,SAAe9B,GACpB,IAAIg2B,EAAY,GACZC,OAAiC3vB,IAAjBtG,EAAMqxB,OACtB6E,EAAY,IAAI/E,EAAWnxB,GAAO,GAClC40B,EAAa,IAAIzD,EAAWnxB,GAAO,GACnCm2B,EAAaj9B,KAAKw6B,QACtBx6B,KAAKk9B,eAAexB,GACpBoB,EAAUz6B,KAAKq5B,GACfoB,EAAUz6B,KAAK26B,GACf,IAAIG,EAAS,IAAI5E,EAAQyE,EAAWC,EAAYj9B,KAAKy6B,MAAMv3B,QAASlD,KAAK06B,SAASx3B,SAoBlF,OAhBI+0B,EAAWI,cAAc8E,EAAO5C,OAAOzzB,MAAOq2B,EAAO3C,QAAQ1zB,OAAS,GACxEq2B,EAAOC,aAGLnF,EAAWI,cAAcr4B,KAAKu6B,OAAOzzB,MAAO9G,KAAKw6B,QAAQ1zB,OAAS,GACpE9G,KAAKo9B,aAMHL,IACFC,EAAUjE,oBACV2C,EAAW3C,qBAGN+D,IAIR,CACDtmB,IAAK,aACL5N,MAAO,WACL,IAAIy0B,EAASr9B,KAAKw6B,QAClBx6B,KAAKw6B,QAAUx6B,KAAKu6B,OACpBv6B,KAAKu6B,OAAS8C,EACdr9B,KAAKu6B,OAAOrC,QAAS,EACrBl4B,KAAKw6B,QAAQtC,QAAS,EAEtB,IAAK,IAAI54B,EAAI,EAAGu5B,EAAO74B,KAAK06B,SAASn8B,OAAQe,EAAIu5B,EAAMv5B,IACrDU,KAAK06B,SAASp7B,KAAO,IAMxB,CACDkX,IAAK,UACL5N,MAAO,SAAiB+vB,GAItB,IAHA,IAAI2E,EAAWt9B,KACXu9B,EAAW5E,EAER2E,EAASpE,YACdoE,EAAWA,EAASpE,WAGtB,KAAOqE,EAASrE,YACdqE,EAAWA,EAASrE,WAGtB,IAAI7G,EAAMkG,EAAQl6B,QAAQi/B,EAAUC,GACpC,GAAY,IAARlL,EAAJ,CAIA,GAAIA,EAAM,EAAG,CACX,IAAI5yB,EAAM69B,EACVA,EAAWC,EACXA,EAAW99B,EAIb,GAAI69B,EAAS7qB,OAAS8qB,EAAU,CAC9B,IAAIC,EAAOF,EACXA,EAAWC,EACXA,EAAWC,EAGb,IAAK,IAAIl+B,EAAI,EAAGu5B,EAAO0E,EAAS9C,MAAMl8B,OAAQe,EAAIu5B,EAAMv5B,IAAK,CAC3D,IAAIiI,EAAOg2B,EAAS9C,MAAMn7B,GACtBm+B,EAAUF,EAAS7C,SAASp7B,GAC5BkE,EAAQ85B,EAAS7C,MAAM/5B,QAAQ6G,IAEpB,IAAX/D,GACF85B,EAAS7C,MAAMp4B,KAAKkF,GACpB+1B,EAAS5C,SAASr4B,KAAKo7B,IAClBH,EAAS5C,SAASl3B,IAAUi6B,EAGrCF,EAAS9C,MAAQ,KACjB8C,EAAS7C,SAAW,KACpB6C,EAASrE,WAAaoE,EAEtBC,EAAShD,OAAOrB,WAAaoE,EAAS/C,OACtCgD,EAAS/C,QAAQtB,WAAaoE,EAAS9C,WAIxC,CACDhkB,IAAK,eACL5N,MAAO,WACL,YAA2BwE,IAAvBpN,KAAK09B,gBACJ19B,KAAKyS,KAAyCzS,KAAKyS,KAAK8mB,aAAcv5B,KAAK09B,cAAgB19B,KAAKyS,KAAUzS,KAAK09B,cAAgB19B,KAAKyS,KAAKkrB,eAA9H39B,KAAK09B,cAAgB,MADQ19B,KAAK09B,gBAInD,CACDlnB,IAAK,cACL5N,MAAO,WACL,QAA0BwE,IAAtBpN,KAAK49B,aAA4B,OAAO59B,KAAK49B,aACjD,GAAK59B,KAAKyS,KAIH,CACL,IAAIorB,EAAM79B,KAAKyS,KAAKymB,YAAcl5B,KAAKyS,KACvCzS,KAAK49B,aAAeC,EAAIC,kBANV99B,KAAK49B,aAAe,CAClCnD,MAAO,GACPC,SAAU,GACVqD,WAAY,IAKd,OAAO/9B,KAAK49B,eAEb,CACDpnB,IAAK,aACL5N,MAAO,WACL,QAAyBwE,IAArBpN,KAAKg+B,YAA2B,OAAOh+B,KAAKg+B,YAChD,IAAIC,EAAcj+B,KAAKi+B,cACvBj+B,KAAKg+B,YAAc,CACjBvD,MAAOwD,EAAYxD,MAAMv3B,MAAM,GAC/Bw3B,SAAUuD,EAAYvD,SAASx3B,MAAM,GACrC66B,WAAY,IAMd,IAJA,IAAIG,EAAal+B,KAAKg+B,YAAYvD,MAC9B0D,EAAgBn+B,KAAKg+B,YAAYtD,SACjC0D,EAAWp+B,KAAKg+B,YAAYD,WAEvBz+B,EAAI,EAAGu5B,EAAO74B,KAAKy6B,MAAMl8B,OAAQe,EAAIu5B,EAAMv5B,IAAK,CACvD,IAAIiI,EAAOvH,KAAKy6B,MAAMn7B,GAClBm+B,EAAUz9B,KAAK06B,SAASp7B,GACxBkE,EAAQ06B,EAAWx9B,QAAQ6G,IAEhB,IAAX/D,GACF06B,EAAW77B,KAAKkF,GAChB42B,EAAc97B,KAAKo7B,IACdU,EAAc36B,IAAUi6B,EAOjC,IAHA,IAAIY,EAAa,GACbC,EAAe,GAEVj3B,EAAK,EAAGk3B,EAAQL,EAAW3/B,OAAQ8I,EAAKk3B,EAAOl3B,IACtD,GAA0B,IAAtB82B,EAAc92B,GAAlB,CAEA,IAAIm3B,EAAQN,EAAW72B,GACnBo3B,EAAOD,EAAMC,KACjB,IAAoC,IAAhCH,EAAa59B,QAAQ+9B,GACzB,GAAID,EAAME,WAAYL,EAAWh8B,KAAKo8B,OAAW,EACX,IAAhCH,EAAa59B,QAAQ+9B,IAAcH,EAAaj8B,KAAKo8B,GAEzD,IAAIE,EAASN,EAAW39B,QAAQ89B,EAAMC,OAEtB,IAAZE,GAAeN,EAAWz6B,OAAO+6B,EAAQ,IAKjD,IAAK,IAAIC,EAAM,EAAGC,EAASR,EAAW9/B,OAAQqgC,EAAMC,EAAQD,IAAO,CACjE,IAAIE,EAAKT,EAAWO,GAAKG,WACK,IAA1BX,EAAS19B,QAAQo+B,IAAYV,EAAS/7B,KAAKy8B,GAGjD,OAAO9+B,KAAKg+B,cAIb,CACDxnB,IAAK,aACL5N,MAAO,WAEL,GAAI5I,KAAKk5B,WAAY,OAAO,EAC5B,QAAyB9rB,IAArBpN,KAAKg/B,YAA2B,OAAOh/B,KAAKg/B,YAChD,IAAIC,EAAYj/B,KAAKi+B,cAAcF,WAC/BK,EAAWp+B,KAAK89B,aAAaC,WAEjC,OAAQmB,EAAUv4B,MAChB,IAAK,QAKD,IAAIw4B,EAAiC,IAArBF,EAAU1gC,OACtB6gC,EAA+B,IAApBhB,EAAS7/B,OACxByB,KAAKg/B,YAAcG,IAAcC,EACjC,MAGJ,IAAK,eAMD,IAAIC,EACAC,EAEAL,EAAU1gC,OAAS6/B,EAAS7/B,QAC9B8gC,EAAQJ,EAAU1gC,OAClB+gC,EAAOlB,EAAS7/B,SAEhB8gC,EAAQjB,EAAS7/B,OACjB+gC,EAAOL,EAAU1gC,QAGnByB,KAAKg/B,YAAcM,IAASJ,EAAUK,eAAiBF,EAAQC,EAC/D,MAGJ,IAAK,MAKD,IAAI/jB,EAAO3c,KAAKoiB,IAAIie,EAAU1gC,OAAS6/B,EAAS7/B,QAChDyB,KAAKg/B,YAAczjB,EAAO,IAAM,EAChC,MAGJ,IAAK,aAID,IAAIikB,EAAgB,SAAuBC,GACzC,OAAsB,IAAfA,EAAIlhC,QAAgBkhC,EAAI,GAAGC,WAGpC1/B,KAAKg/B,YAAcQ,EAAcP,KAAeO,EAAcpB,GAC9D,MAGJ,QACE,MAAM,IAAIp3B,MAAM,qCAAqCwK,OAAO0tB,EAAUv4B,OAG1E,OAAO3G,KAAKg/B,eAEZ,CAAC,CACHxoB,IAAK,WACL5N,MAAO,SAAkBkvB,EAAKC,EAAKxwB,GACjC,IAAIo4B,EAAQC,EAASnC,EAEjBoC,EAAS5H,EAAWI,cAAcP,EAAKC,GAE3C,GAAI8H,EAAS,EACXF,EAAS7H,EACT8H,EAAU7H,EACV0F,EAAU,MACL,MAAIoC,EAAS,GAIb,MAAM,IAAI74B,MAAM,0CAA0CwK,OAAOsmB,EAAI3jB,EAAG,MAAM3C,OAAOsmB,EAAI1jB,EAAG,MAHjGurB,EAAS5H,EACT6H,EAAU9H,EACV2F,GAAW,EAKb,OAAO,IAAIlF,EAFE,IAAIN,EAAW0H,GAAQ,GACtB,IAAI1H,EAAW2H,GAAS,GACF,CAACr4B,GAAO,CAACk2B,QAI1ClF,EAtkBkB,GAykBvBuH,EAAsB,WACxB,SAASA,EAAOC,EAAUtB,EAAMC,GAG9B,GAFA/M,EAAgB3xB,KAAM8/B,IAEjB74B,MAAMC,QAAQ64B,IAAiC,IAApBA,EAASxhC,OACvC,MAAM,IAAIyI,MAAM,yDAOlB,GAJAhH,KAAKy+B,KAAOA,EACZz+B,KAAK0+B,WAAaA,EAClB1+B,KAAKggC,SAAW,GAEc,kBAAnBD,EAAS,GAAG,IAA6C,kBAAnBA,EAAS,GAAG,GAC3D,MAAM,IAAI/4B,MAAM,yDAGlB,IAAIi5B,EAAaxJ,EAAQjsB,MAAMu1B,EAAS,GAAG,GAAIA,EAAS,GAAG,IAC3D//B,KAAKxC,KAAO,CACVi4B,GAAI,CACFthB,EAAG8rB,EAAW9rB,EACdC,EAAG6rB,EAAW7rB,GAEhBshB,GAAI,CACFvhB,EAAG8rB,EAAW9rB,EACdC,EAAG6rB,EAAW7rB,IAKlB,IAFA,IAAI8rB,EAAYD,EAEP3gC,EAAI,EAAGu5B,EAAOkH,EAASxhC,OAAQe,EAAIu5B,EAAMv5B,IAAK,CACrD,GAA8B,kBAAnBygC,EAASzgC,GAAG,IAA6C,kBAAnBygC,EAASzgC,GAAG,GAC3D,MAAM,IAAI0H,MAAM,yDAGlB,IAAIF,EAAQ2vB,EAAQjsB,MAAMu1B,EAASzgC,GAAG,GAAIygC,EAASzgC,GAAG,IAElDwH,EAAMqN,IAAM+rB,EAAU/rB,GAAKrN,EAAMsN,IAAM8rB,EAAU9rB,IACrDpU,KAAKggC,SAAS39B,KAAKk2B,EAAQ4H,SAASD,EAAWp5B,EAAO9G,OAClD8G,EAAMqN,EAAInU,KAAKxC,KAAKi4B,GAAGthB,IAAGnU,KAAKxC,KAAKi4B,GAAGthB,EAAIrN,EAAMqN,GACjDrN,EAAMsN,EAAIpU,KAAKxC,KAAKi4B,GAAGrhB,IAAGpU,KAAKxC,KAAKi4B,GAAGrhB,EAAItN,EAAMsN,GACjDtN,EAAMqN,EAAInU,KAAKxC,KAAKk4B,GAAGvhB,IAAGnU,KAAKxC,KAAKk4B,GAAGvhB,EAAIrN,EAAMqN,GACjDrN,EAAMsN,EAAIpU,KAAKxC,KAAKk4B,GAAGthB,IAAGpU,KAAKxC,KAAKk4B,GAAGthB,EAAItN,EAAMsN,GACrD8rB,EAAYp5B,GAIVm5B,EAAW9rB,IAAM+rB,EAAU/rB,GAAK8rB,EAAW7rB,IAAM8rB,EAAU9rB,GAC7DpU,KAAKggC,SAAS39B,KAAKk2B,EAAQ4H,SAASD,EAAWD,EAAYjgC,OAmB/D,OAfA+xB,EAAa+N,EAAQ,CAAC,CACpBtpB,IAAK,iBACL5N,MAAO,WAGL,IAFA,IAAIw3B,EAAc,GAET9gC,EAAI,EAAGu5B,EAAO74B,KAAKggC,SAASzhC,OAAQe,EAAIu5B,EAAMv5B,IAAK,CAC1D,IAAIk5B,EAAUx4B,KAAKggC,SAAS1gC,GAC5B8gC,EAAY/9B,KAAKm2B,EAAQ+B,QACzB6F,EAAY/9B,KAAKm2B,EAAQgC,SAG3B,OAAO4F,MAIJN,EAlEiB,GAoEtBO,EAAsB,WACxB,SAASA,EAAOC,EAAUvB,GAGxB,GAFApN,EAAgB3xB,KAAMqgC,IAEjBp5B,MAAMC,QAAQo5B,GACjB,MAAM,IAAIt5B,MAAM,yDAGlBhH,KAAKugC,aAAe,IAAIT,EAAOQ,EAAS,GAAItgC,MAAM,GAElDA,KAAKxC,KAAO,CACVi4B,GAAI,CACFthB,EAAGnU,KAAKugC,aAAa/iC,KAAKi4B,GAAGthB,EAC7BC,EAAGpU,KAAKugC,aAAa/iC,KAAKi4B,GAAGrhB,GAE/BshB,GAAI,CACFvhB,EAAGnU,KAAKugC,aAAa/iC,KAAKk4B,GAAGvhB,EAC7BC,EAAGpU,KAAKugC,aAAa/iC,KAAKk4B,GAAGthB,IAGjCpU,KAAKwgC,cAAgB,GAErB,IAAK,IAAIlhC,EAAI,EAAGu5B,EAAOyH,EAAS/hC,OAAQe,EAAIu5B,EAAMv5B,IAAK,CACrD,IAAIiI,EAAO,IAAIu4B,EAAOQ,EAAShhC,GAAIU,MAAM,GACrCuH,EAAK/J,KAAKi4B,GAAGthB,EAAInU,KAAKxC,KAAKi4B,GAAGthB,IAAGnU,KAAKxC,KAAKi4B,GAAGthB,EAAI5M,EAAK/J,KAAKi4B,GAAGthB,GAC/D5M,EAAK/J,KAAKi4B,GAAGrhB,EAAIpU,KAAKxC,KAAKi4B,GAAGrhB,IAAGpU,KAAKxC,KAAKi4B,GAAGrhB,EAAI7M,EAAK/J,KAAKi4B,GAAGrhB,GAC/D7M,EAAK/J,KAAKk4B,GAAGvhB,EAAInU,KAAKxC,KAAKk4B,GAAGvhB,IAAGnU,KAAKxC,KAAKk4B,GAAGvhB,EAAI5M,EAAK/J,KAAKk4B,GAAGvhB,GAC/D5M,EAAK/J,KAAKk4B,GAAGthB,EAAIpU,KAAKxC,KAAKk4B,GAAGthB,IAAGpU,KAAKxC,KAAKk4B,GAAGthB,EAAI7M,EAAK/J,KAAKk4B,GAAGthB,GACnEpU,KAAKwgC,cAAcn+B,KAAKkF,GAG1BvH,KAAK++B,UAAYA,EAoBnB,OAjBAhN,EAAasO,EAAQ,CAAC,CACpB7pB,IAAK,iBACL5N,MAAO,WAGL,IAFA,IAAIw3B,EAAcpgC,KAAKugC,aAAaE,iBAE3BnhC,EAAI,EAAGu5B,EAAO74B,KAAKwgC,cAAcjiC,OAAQe,EAAIu5B,EAAMv5B,IAG1D,IAFA,IAAIohC,EAAkB1gC,KAAKwgC,cAAclhC,GAAGmhC,iBAEnClhC,EAAI,EAAGohC,EAAOD,EAAgBniC,OAAQgB,EAAIohC,EAAMphC,IACvD6gC,EAAY/9B,KAAKq+B,EAAgBnhC,IAIrC,OAAO6gC,MAIJC,EAnDiB,GAqDtBO,EAA2B,WAC7B,SAASA,EAAYr6B,EAAMm5B,GAGzB,GAFA/N,EAAgB3xB,KAAM4gC,IAEjB35B,MAAMC,QAAQX,GACjB,MAAM,IAAIS,MAAM,yDAGlB,IAE+B,kBAAlBT,EAAK,GAAG,GAAG,KAAiBA,EAAO,CAACA,IAC/C,MAAOs6B,IAIT7gC,KAAK8gC,MAAQ,GACb9gC,KAAKxC,KAAO,CACVi4B,GAAI,CACFthB,EAAGiH,OAAO2lB,kBACV3sB,EAAGgH,OAAO2lB,mBAEZrL,GAAI,CACFvhB,EAAGiH,OAAO4lB,kBACV5sB,EAAGgH,OAAO4lB,oBAId,IAAK,IAAI1hC,EAAI,EAAGu5B,EAAOtyB,EAAKhI,OAAQe,EAAIu5B,EAAMv5B,IAAK,CACjD,IAAIm/B,EAAO,IAAI4B,EAAO95B,EAAKjH,GAAIU,MAC3By+B,EAAKjhC,KAAKi4B,GAAGthB,EAAInU,KAAKxC,KAAKi4B,GAAGthB,IAAGnU,KAAKxC,KAAKi4B,GAAGthB,EAAIsqB,EAAKjhC,KAAKi4B,GAAGthB,GAC/DsqB,EAAKjhC,KAAKi4B,GAAGrhB,EAAIpU,KAAKxC,KAAKi4B,GAAGrhB,IAAGpU,KAAKxC,KAAKi4B,GAAGrhB,EAAIqqB,EAAKjhC,KAAKi4B,GAAGrhB,GAC/DqqB,EAAKjhC,KAAKk4B,GAAGvhB,EAAInU,KAAKxC,KAAKk4B,GAAGvhB,IAAGnU,KAAKxC,KAAKk4B,GAAGvhB,EAAIsqB,EAAKjhC,KAAKk4B,GAAGvhB,GAC/DsqB,EAAKjhC,KAAKk4B,GAAGthB,EAAIpU,KAAKxC,KAAKk4B,GAAGthB,IAAGpU,KAAKxC,KAAKk4B,GAAGthB,EAAIqqB,EAAKjhC,KAAKk4B,GAAGthB,GACnEpU,KAAK8gC,MAAMz+B,KAAKo8B,GAGlBz+B,KAAK0/B,UAAYA,EAoBnB,OAjBA3N,EAAa6O,EAAa,CAAC,CACzBpqB,IAAK,iBACL5N,MAAO,WAGL,IAFA,IAAIw3B,EAAc,GAET9gC,EAAI,EAAGu5B,EAAO74B,KAAK8gC,MAAMviC,OAAQe,EAAIu5B,EAAMv5B,IAGlD,IAFA,IAAI2hC,EAAkBjhC,KAAK8gC,MAAMxhC,GAAGmhC,iBAE3BlhC,EAAI,EAAGohC,EAAOM,EAAgB1iC,OAAQgB,EAAIohC,EAAMphC,IACvD6gC,EAAY/9B,KAAK4+B,EAAgB1hC,IAIrC,OAAO6gC,MAIJQ,EAxDsB,GA2D3BM,EAAuB,WAwFzB,SAASA,EAAQ/I,GACfxG,EAAgB3xB,KAAMkhC,GAEtBlhC,KAAKm4B,OAASA,EAEd,IAAK,IAAI74B,EAAI,EAAGu5B,EAAOV,EAAO55B,OAAQe,EAAIu5B,EAAMv5B,IAC9C64B,EAAO74B,GAAGk5B,QAAQc,QAAUt5B,KAG9BA,KAAKy+B,KAAO,KA+Fd,OA/LA1M,EAAamP,EAAS,KAAM,CAAC,CAC3B1qB,IAAK,UAIL5N,MAAO,SAAiBu4B,GAGtB,IAFA,IAAIC,EAAW,GAEN9hC,EAAI,EAAGu5B,EAAOsI,EAAY5iC,OAAQe,EAAIu5B,EAAMv5B,IAAK,CACxD,IAAIk5B,EAAU2I,EAAY7hC,GAC1B,GAAKk5B,EAAQe,eAAgBf,EAAQc,QAArC,CASA,IARA,IAAI+H,EAAY,KACZC,EAAQ9I,EAAQ+B,OAChBV,EAAYrB,EAAQgC,QACpBrC,EAAS,CAACmJ,GACVC,EAAgBD,EAAMx6B,MACtB06B,EAAkB,GAIpBH,EAAYC,EACZA,EAAQzH,EACR1B,EAAO91B,KAAKi/B,GAGRA,EAAMx6B,QAAUy6B,GAEpB,OAAa,CACX,IAAIE,EAAeH,EAAMI,2BAIzB,GAA4B,IAAxBD,EAAaljC,OAAc,CAC7B,IAAIojC,EAAUxJ,EAAO,GAAGrxB,MACpB86B,EAASzJ,EAAOA,EAAO55B,OAAS,GAAGuI,MACvC,MAAM,IAAIE,MAAM,+CAA+CwK,OAAOmwB,EAAQxtB,EAAG,KAAO,IAAI3C,OAAOmwB,EAAQvtB,EAAG,0CAA4C,KAAK5C,OAAOowB,EAAOztB,EAAG,MAAM3C,OAAOowB,EAAOxtB,EAAG,OAKzM,GAA4B,IAAxBqtB,EAAaljC,OAAc,CAC7Bs7B,EAAY4H,EAAa,GAAGrI,QAC5B,MAOF,IAFA,IAAIyI,EAAU,KAELtiC,EAAI,EAAGohC,EAAOa,EAAgBjjC,OAAQgB,EAAIohC,EAAMphC,IACvD,GAAIiiC,EAAgBjiC,GAAGuH,QAAUw6B,EAAMx6B,MAAO,CAC5C+6B,EAAUtiC,EACV,MAMJ,GAAgB,OAAZsiC,EAAJ,CAUAL,EAAgBn/B,KAAK,CACnBmB,MAAO20B,EAAO55B,OACduI,MAAOw6B,EAAMx6B,QAIf,IAAIsrB,EAAakP,EAAMQ,sBAAsBT,GAC7CxH,EAAY4H,EAAa37B,KAAKssB,GAAY,GAAGgH,QAC7C,MAjBE,IAAI2I,EAAiBP,EAAgB59B,OAAOi+B,GAAS,GACjDG,EAAa7J,EAAOv0B,OAAOm+B,EAAev+B,OAC9Cw+B,EAAWC,QAAQD,EAAW,GAAG5I,SACjCgI,EAAS/+B,KAAK,IAAI6+B,EAAQc,EAAW5b,YAkB3Cgb,EAAS/+B,KAAK,IAAI6+B,EAAQ/I,KAG5B,OAAOiJ,MAgBXrP,EAAamP,EAAS,CAAC,CACrB1qB,IAAK,UACL5N,MAAO,WAKL,IAHA,IAAIs5B,EAASliC,KAAKm4B,OAAO,GAAGrxB,MACxBmD,EAAS,CAACi4B,GAEL5iC,EAAI,EAAGu5B,EAAO74B,KAAKm4B,OAAO55B,OAAS,EAAGe,EAAIu5B,EAAMv5B,IAAK,CAC5D,IAAI6iC,EAAMniC,KAAKm4B,OAAO74B,GAAGwH,MACrBs7B,EAAUpiC,KAAKm4B,OAAO74B,EAAI,GAAGwH,MACiB,IAA9C8vB,EAAoBuL,EAAKD,EAAQE,KACrCn4B,EAAO5H,KAAK8/B,GACZD,EAASC,GAIX,GAAsB,IAAlBl4B,EAAO1L,OAAc,OAAO,KAEhC,IAAIo5B,EAAK1tB,EAAO,GACZo4B,EAASp4B,EAAO,GAC4B,IAA5C2sB,EAAoBe,EAAIuK,EAAQG,IAAep4B,EAAOkI,QAC1DlI,EAAO5H,KAAK4H,EAAO,IAMnB,IALA,IAAIq4B,EAAOtiC,KAAKuiC,iBAAmB,GAAK,EACpCC,EAASxiC,KAAKuiC,iBAAmB,EAAIt4B,EAAO1L,OAAS,EACrDkkC,EAAOziC,KAAKuiC,iBAAmBt4B,EAAO1L,QAAU,EAChDmkC,EAAgB,GAEXr7B,EAAKm7B,EAAQn7B,GAAMo7B,EAAMp7B,GAAMi7B,EACtCI,EAAcrgC,KAAK,CAAC4H,EAAO5C,GAAI8M,EAAGlK,EAAO5C,GAAI+M,IAG/C,OAAOsuB,IAER,CACDlsB,IAAK,iBACL5N,MAAO,WACL,QAA6BwE,IAAzBpN,KAAK2iC,gBAA+B,CACtC,IAAIC,EAAY5iC,KAAK6iC,gBACrB7iC,KAAK2iC,iBAAkBC,IAAaA,EAAUL,iBAGhD,OAAOviC,KAAK2iC,kBAEb,CACDnsB,IAAK,gBACL5N,MAAO,WAKL,YAJ4BwE,IAAxBpN,KAAK8iC,iBACP9iC,KAAK8iC,eAAiB9iC,KAAK+iC,sBAGtB/iC,KAAK8iC,iBAIb,CACDtsB,IAAK,qBACL5N,MAAO,WAKL,IAFA,IAAIo6B,EAAchjC,KAAKm4B,OAAO,GAErB74B,EAAI,EAAGu5B,EAAO74B,KAAKm4B,OAAO55B,OAAQe,EAAIu5B,EAAMv5B,IAAK,CACxD,IAAIw5B,EAAM94B,KAAKm4B,OAAO74B,GAClB24B,EAAW55B,QAAQ2kC,EAAalK,GAAO,IAAGkK,EAAclK,GAM9D,IAHA,IAAImK,EAAUD,EAAYxK,QAAQmF,eAC9BuF,EAAcD,EAAUA,EAAQtF,eAAiB,OAExC,CAEX,IAAKsF,EAAS,OAAO,KAGrB,IAAKC,EAAa,OAAOD,EAAQ3J,QAIjC,GAAI4J,EAAY5J,UAAY2J,EAAQ3J,QAClC,OAAI4J,EAAY5J,QAAQuJ,kBAAoBI,EAAQ3J,QAC3C2J,EAAQ3J,QACH2J,EAAQ3J,QAAQuJ,gBAKhCI,EAAUC,EAAYvF,eACtBuF,EAAcD,EAAUA,EAAQtF,eAAiB,UAKhDuD,EAhMkB,GAkMvBiC,EAAuB,WACzB,SAASA,EAAQ5C,GACf5O,EAAgB3xB,KAAMmjC,GAEtBnjC,KAAKugC,aAAeA,EACpBA,EAAa9B,KAAOz+B,KACpBA,KAAKwgC,cAAgB,GA2BvB,OAxBAzO,EAAaoR,EAAS,CAAC,CACrB3sB,IAAK,cACL5N,MAAO,SAAqBrB,GAC1BvH,KAAKwgC,cAAcn+B,KAAKkF,GACxBA,EAAKk3B,KAAOz+B,OAEb,CACDwW,IAAK,UACL5N,MAAO,WACL,IAAIrC,EAAO,CAACvG,KAAKugC,aAAa6C,WAE9B,GAAgB,OAAZ78B,EAAK,GAAa,OAAO,KAE7B,IAAK,IAAIjH,EAAI,EAAGu5B,EAAO74B,KAAKwgC,cAAcjiC,OAAQe,EAAIu5B,EAAMv5B,IAAK,CAC/D,IAAI+jC,EAAWrjC,KAAKwgC,cAAclhC,GAAG8jC,UAEpB,OAAbC,GACJ98B,EAAKlE,KAAKghC,GAGZ,OAAO98B,MAIJ48B,EAjCkB,GAmCvBG,EAA4B,WAC9B,SAASA,EAAa7I,GACpB9I,EAAgB3xB,KAAMsjC,GAEtBtjC,KAAKy6B,MAAQA,EACbz6B,KAAK8gC,MAAQ9gC,KAAKujC,cAAc9I,GAoClC,OAjCA1I,EAAauR,EAAc,CAAC,CAC1B9sB,IAAK,UACL5N,MAAO,WAGL,IAFA,IAAIrC,EAAO,GAEFjH,EAAI,EAAGu5B,EAAO74B,KAAK8gC,MAAMviC,OAAQe,EAAIu5B,EAAMv5B,IAAK,CACvD,IAAIkkC,EAAWxjC,KAAK8gC,MAAMxhC,GAAG8jC,UAEZ,OAAbI,GACJj9B,EAAKlE,KAAKmhC,GAGZ,OAAOj9B,IAER,CACDiQ,IAAK,gBACL5N,MAAO,SAAuB6xB,GAG5B,IAFA,IAAIqG,EAAQ,GAEHxhC,EAAI,EAAGu5B,EAAO4B,EAAMl8B,OAAQe,EAAIu5B,EAAMv5B,IAAK,CAClD,IAAIiI,EAAOkzB,EAAMn7B,GACjB,IAAIiI,EAAKk3B,KACT,GAAIl3B,EAAKg7B,iBAAkBzB,EAAMz+B,KAAK,IAAI8gC,EAAQ57B,QAAY,CAC5D,IAAIs7B,EAAgBt7B,EAAKs7B,gBACpBA,EAAcpE,MAAMqC,EAAMz+B,KAAK,IAAI8gC,EAAQN,IAChDA,EAAcpE,KAAKgF,YAAYl8B,IAInC,OAAOu5B,MAIJwC,EAzCuB,GAuD5BI,EAAyB,WAC3B,SAASA,EAAU7xB,GACjB,IAAIugB,EAAajiB,UAAU5R,OAAS,QAAsB6O,IAAjB+C,UAAU,GAAmBA,UAAU,GAAKooB,EAAQl6B,QAE7FszB,EAAgB3xB,KAAM0jC,GAEtB1jC,KAAK6R,MAAQA,EACb7R,KAAK2R,KAAO,IAAIqhB,EAAKZ,GACrBpyB,KAAKggC,SAAW,GA4JlB,OAzJAjO,EAAa2R,EAAW,CAAC,CACvBltB,IAAK,UACL5N,MAAO,SAAiB04B,GACtB,IAAI9I,EAAU8I,EAAM9I,QAChBsE,EAAY,GAGhB,GAAIwE,EAAMpI,WAER,OADIoI,EAAMpJ,OAAQl4B,KAAK6R,MAAMvO,OAAOg+B,EAAMlI,SAAcp5B,KAAK2R,KAAKrO,OAAOk1B,GAClEsE,EAGT,IAAIl8B,EAAO0gC,EAAMpJ,OAASl4B,KAAK2R,KAAK3O,OAAOw1B,GAAWx4B,KAAK2R,KAAK6hB,KAAKgF,GACrE,IAAK53B,EAAM,MAAM,IAAIoG,MAAM,2BAA2BwK,OAAOgnB,EAAQ5xB,GAAI,KAAO,IAAI4K,OAAOgnB,EAAQ+B,OAAOzzB,MAAMqN,EAAG,MAAM3C,OAAOgnB,EAAQ+B,OAAOzzB,MAAMsN,EAAG,SAAW,IAAI5C,OAAOgnB,EAAQgC,QAAQ1zB,MAAMqN,EAAG,MAAM3C,OAAOgnB,EAAQgC,QAAQ1zB,MAAMsN,EAAG,MAAQ,kDAMrP,IALA,IAAImiB,EAAW31B,EACX41B,EAAW51B,EACXqiC,OAAU71B,EACVu2B,OAAUv2B,OAEKA,IAAZ61B,GAEY,QADjB1M,EAAWv2B,KAAK2R,KAAKc,KAAK8jB,IACH0M,EAAU,UAA0C71B,IAA5BmpB,EAAS/f,IAAI0iB,aAA0B+J,EAAU1M,EAAS/f,KAI3G,UAAmBpJ,IAAZu2B,GAEY,QADjBnN,EAAWx2B,KAAK2R,KAAKS,KAAKokB,IACHmN,EAAU,UAA0Cv2B,IAA5BopB,EAAShgB,IAAI0iB,aAA0ByK,EAAUnN,EAAShgB,KAG3G,GAAI8qB,EAAMpJ,OAAQ,CAEhB,IAAI0L,EAAiB,KAErB,GAAIX,EAAS,CACX,IAAIY,EAAYZ,EAAQa,gBAAgBtL,GAExC,GAAkB,OAAdqL,IACGrL,EAAQmD,aAAakI,KAAYD,EAAiBC,IAElDZ,EAAQtH,aAAakI,IAGxB,IAFA,IAAIE,EAAqB/jC,KAAKgkC,aAAaf,EAASY,GAE3CvkC,EAAI,EAAGu5B,EAAOkL,EAAmBxlC,OAAQe,EAAIu5B,EAAMv5B,IAC1Dw9B,EAAUz6B,KAAK0hC,EAAmBzkC,IAO1C,IAAI2kC,EAAiB,KAErB,GAAIN,EAAS,CACX,IAAIO,EAAYP,EAAQG,gBAAgBtL,GAExC,GAAkB,OAAd0L,IACG1L,EAAQmD,aAAauI,KAAYD,EAAiBC,IAElDP,EAAQhI,aAAauI,IAGxB,IAFA,IAAIC,EAAsBnkC,KAAKgkC,aAAaL,EAASO,GAE5C78B,EAAK,EAAGk3B,EAAQ4F,EAAoB5lC,OAAQ8I,EAAKk3B,EAAOl3B,IAC/Dy1B,EAAUz6B,KAAK8hC,EAAoB98B,IAS3C,GAAuB,OAAnBu8B,GAA8C,OAAnBK,EAAyB,CACtD,IAAIG,EAAa,KACYA,EAAN,OAAnBR,EAAsCK,EAA2C,OAAnBA,GAC7ChM,EAAWI,cAAcuL,EAAgBK,IAC/B,EAFyEL,EAEpDK,EAIpDjkC,KAAK6R,MAAMvO,OAAOk1B,EAAQgC,SAC1BsC,EAAUz6B,KAAKm2B,EAAQgC,SAIvB,IAFA,IAAI6J,EAAuB7L,EAAQlG,MAAM8R,GAEhCxF,EAAM,EAAGC,EAASwF,EAAqB9lC,OAAQqgC,EAAMC,EAAQD,IACpE9B,EAAUz6B,KAAKgiC,EAAqBzF,IAIpC9B,EAAUv+B,OAAS,GAIrByB,KAAK2R,KAAKrO,OAAOk1B,GACjBsE,EAAUz6B,KAAKi/B,KAGfthC,KAAKggC,SAAS39B,KAAKm2B,GACnBA,EAAQ/lB,KAAOwwB,OAEZ,CAIL,GAAIA,GAAWU,EAAS,CACtB,IAAIW,EAAQrB,EAAQa,gBAAgBH,GAEpC,GAAc,OAAVW,EAAgB,CAClB,IAAKrB,EAAQtH,aAAa2I,GAGxB,IAFA,IAAIC,EAAuBvkC,KAAKgkC,aAAaf,EAASqB,GAE7CE,EAAM,EAAGC,EAASF,EAAqBhmC,OAAQimC,EAAMC,EAAQD,IACpE1H,EAAUz6B,KAAKkiC,EAAqBC,IAIxC,IAAKb,EAAQhI,aAAa2I,GAGxB,IAFA,IAAII,EAAuB1kC,KAAKgkC,aAAaL,EAASW,GAE7CK,EAAM,EAAGC,EAASF,EAAqBnmC,OAAQomC,EAAMC,EAAQD,IACpE7H,EAAUz6B,KAAKqiC,EAAqBC,KAM5C3kC,KAAK2R,KAAKrO,OAAOk1B,GAGnB,OAAOsE,IAKR,CACDtmB,IAAK,eACL5N,MAAO,SAAsBi1B,EAAKlG,GAKhC33B,KAAK2R,KAAKrO,OAAOu6B,GACjB,IAAIrD,EAAUqD,EAAIrD,QAClBx6B,KAAK6R,MAAMvO,OAAOk3B,GAClB,IAAIsC,EAAYe,EAAIvL,MAAMqF,GAI1B,OAHAmF,EAAUz6B,KAAKm4B,QAEQptB,IAAnBywB,EAAI3E,YAA0Bl5B,KAAK2R,KAAK3O,OAAO66B,GAC5Cf,MAIJ4G,EApKoB,GAuKzBmB,EAAqD,qBAAZC,SAA2B,wBAAYD,iCAAmC,IACnHE,EAA6D,qBAAZD,SAA2B,wBAAYC,yCAA2C,IAqHnI7F,EAAY,IApHa,WAC3B,SAAS8F,IACPrT,EAAgB3xB,KAAMglC,GA+GxB,OA5GAjT,EAAaiT,EAAW,CAAC,CACvBxuB,IAAK,MACL5N,MAAO,SAAajC,EAAMJ,EAAM0+B,GAC9B/F,EAAUv4B,KAAOA,EACjB8vB,EAAQN,QAKR,IAFA,IAAI+O,EAAa,CAAC,IAAItE,EAAYr6B,GAAM,IAE/BjH,EAAI,EAAGu5B,EAAOoM,EAAU1mC,OAAQe,EAAIu5B,EAAMv5B,IACjD4lC,EAAW7iC,KAAK,IAAIu+B,EAAYqE,EAAU3lC,IAAI,IAShD,GANA4/B,EAAUK,cAAgB2F,EAAW3mC,OAMd,eAAnB2gC,EAAUv4B,KAKZ,IAHA,IAAIw+B,EAAUD,EAAW,GACrB79B,EAAK,EAEFA,EAAK69B,EAAW3mC,QACqC,OAAtDo3B,EAAeuP,EAAW79B,GAAI7J,KAAM2nC,EAAQ3nC,MAAgB6J,IAAU69B,EAAWthC,OAAOyD,EAAI,GAQpG,GAAuB,iBAAnB63B,EAAUv4B,KAGZ,IAAK,IAAIi4B,EAAM,EAAGL,EAAQ2G,EAAW3mC,OAAQqgC,EAAML,EAAOK,IAGxD,IAFA,IAAIwG,EAAMF,EAAWtG,GAEZr/B,EAAIq/B,EAAM,EAAG+B,EAAOuE,EAAW3mC,OAAQgB,EAAIohC,EAAMphC,IACxD,GAAqD,OAAjDo2B,EAAeyP,EAAI5nC,KAAM0nC,EAAW3lC,GAAG/B,MAAgB,MAAO,GASxE,IAFA,IAAIqU,EAAQ,IAAImhB,EAAKiF,EAAW55B,SAEvBmmC,EAAM,EAAG3F,EAASqG,EAAW3mC,OAAQimC,EAAM3F,EAAQ2F,IAG1D,IAFA,IAAIpE,EAAc8E,EAAWV,GAAK/D,iBAEzB4E,EAAK,EAAGC,EAAQlF,EAAY7hC,OAAQ8mC,EAAKC,EAAOD,IAGvD,GAFAxzB,EAAM7O,OAAOo9B,EAAYiF,IAErBxzB,EAAM4iB,KAAOoQ,EAEf,MAAM,IAAI79B,MAAM,oHAWtB,IAJA,IAAIu+B,EAAY,IAAI7B,EAAU7xB,GAC1B2zB,EAAgB3zB,EAAM4iB,KACtB7zB,EAAOiR,EAAMzP,MAEVxB,GAAM,CACX,IAAIk4B,EAAMl4B,EAAK4V,IAEf,GAAI3E,EAAM4iB,OAAS+Q,EAAe,CAEhC,IAAI3H,EAAM/E,EAAIN,QACd,MAAM,IAAIxxB,MAAM,mBAAmBwK,OAAOsnB,EAAIZ,OAAS,OAAS,QAAS,gBAAkB,IAAI1mB,OAAOsnB,EAAIhyB,MAAMqN,EAAG,MAAM3C,OAAOsnB,EAAIhyB,MAAMsN,EAAG,oBAAoB5C,OAAOqsB,EAAIj3B,GAAI,KAAO,IAAI4K,OAAOqsB,EAAItD,OAAOzzB,MAAMqN,EAAG,MAAM3C,OAAOqsB,EAAItD,OAAOzzB,MAAMsN,EAAG,SAAW,IAAI5C,OAAOqsB,EAAIrD,QAAQ1zB,MAAMqN,EAAG,MAAM3C,OAAOqsB,EAAIrD,QAAQ1zB,MAAMsN,EAAG,kBAAoB,6BAG1V,GAAIvC,EAAM4iB,KAAOoQ,EAEf,MAAM,IAAI79B,MAAM,wGAGlB,GAAIu+B,EAAUvF,SAASzhC,OAASwmC,EAE9B,MAAM,IAAI/9B,MAAM,kHAKlB,IAFA,IAAI81B,EAAYyI,EAAUT,QAAQhM,GAEzB6L,EAAM,EAAGF,EAAS3H,EAAUv+B,OAAQomC,EAAMF,EAAQE,IAAO,CAChE,IAAIc,EAAO3I,EAAU6H,QACGv3B,IAApBq4B,EAAKvM,YAA0BrnB,EAAM7O,OAAOyiC,GAGlDD,EAAgB3zB,EAAM4iB,KACtB7zB,EAAOiR,EAAMzP,MAIfq0B,EAAQN,QAGR,IAAIiL,EAAWF,EAAQthC,QAAQ2lC,EAAUvF,UAEzC,OADa,IAAIsD,EAAalC,GAChBgC,cAIX4B,EAjHoB,IAsHzBU,EAAQ,SAAen/B,GACzB,IAAK,IAAIo/B,EAAOx1B,UAAU5R,OAAQ0mC,EAAY,IAAIh+B,MAAM0+B,EAAO,EAAIA,EAAO,EAAI,GAAIC,EAAO,EAAGA,EAAOD,EAAMC,IACvGX,EAAUW,EAAO,GAAKz1B,UAAUy1B,GAGlC,OAAO1G,EAAU/lB,IAAI,QAAS5S,EAAM0+B,IAGlCY,EAAiB,SAAsBt/B,GACzC,IAAK,IAAIu/B,EAAQ31B,UAAU5R,OAAQ0mC,EAAY,IAAIh+B,MAAM6+B,EAAQ,EAAIA,EAAQ,EAAI,GAAIC,EAAQ,EAAGA,EAAQD,EAAOC,IAC7Gd,EAAUc,EAAQ,GAAK51B,UAAU41B,GAGnC,OAAO7G,EAAU/lB,IAAI,eAAgB5S,EAAM0+B,IAGzCe,EAAM,SAAaz/B,GACrB,IAAK,IAAI0/B,EAAQ91B,UAAU5R,OAAQ0mC,EAAY,IAAIh+B,MAAMg/B,EAAQ,EAAIA,EAAQ,EAAI,GAAIC,EAAQ,EAAGA,EAAQD,EAAOC,IAC7GjB,EAAUiB,EAAQ,GAAK/1B,UAAU+1B,GAGnC,OAAOhH,EAAU/lB,IAAI,MAAO5S,EAAM0+B,IAGhCkB,EAAa,SAAoBC,GACnC,IAAK,IAAIC,EAAQl2B,UAAU5R,OAAQ+nC,EAAgB,IAAIr/B,MAAMo/B,EAAQ,EAAIA,EAAQ,EAAI,GAAIE,EAAQ,EAAGA,EAAQF,EAAOE,IACjHD,EAAcC,EAAQ,GAAKp2B,UAAUo2B,GAGvC,OAAOrH,EAAU/lB,IAAI,aAAcitB,EAAaE,IAUlD,MAPY,CACVZ,MAAOA,EACP7N,aAAcgO,EACdG,IAAKA,EACLG,WAAYA,GAt/EkEvmC,sBCDd7B,EAAOD,QAAwF,WAAW,aAAa,SAASuB,EAAEA,EAAE2iB,EAAEhS,EAAEtQ,EAAE8mC,IAAI,SAASnnC,EAAEZ,EAAEujB,EAAEhS,EAAEtQ,EAAE8mC,GAAG,KAAK9mC,EAAEsQ,GAAG,CAAC,GAAGtQ,EAAEsQ,EAAE,IAAI,CAAC,IAAI4e,EAAElvB,EAAEsQ,EAAE,EAAElR,EAAEkjB,EAAEhS,EAAE,EAAEjE,EAAEnN,KAAKC,IAAI+vB,GAAGzT,EAAE,GAAGvc,KAAKG,IAAI,EAAEgN,EAAE,GAAG06B,EAAE,GAAG7nC,KAAKK,KAAK8M,EAAEoP,GAAGyT,EAAEzT,GAAGyT,IAAI9vB,EAAE8vB,EAAE,EAAE,GAAG,EAAE,GAA+EvvB,EAAEZ,EAAEujB,EAA9EpjB,KAAKM,IAAI8Q,EAAEpR,KAAKO,MAAM6iB,EAAEljB,EAAEqc,EAAEyT,EAAE6X,IAAM7nC,KAAKQ,IAAIM,EAAEd,KAAKO,MAAM6iB,GAAG4M,EAAE9vB,GAAGqc,EAAEyT,EAAE6X,IAAcD,GAAG,IAAIxlC,EAAEvC,EAAEujB,GAAGpP,EAAE5C,EAAEmE,EAAEzU,EAAE,IAAIJ,EAAEb,EAAEuR,EAAEgS,GAAGwkB,EAAE/nC,EAAEiB,GAAGsB,GAAG,GAAG1B,EAAEb,EAAEuR,EAAEtQ,GAAGkT,EAAEuB,GAAG,CAAC,IAAI7U,EAAEb,EAAEmU,EAAEuB,GAAGvB,IAAIuB,IAAIqyB,EAAE/nC,EAAEmU,GAAG5R,GAAG,GAAG4R,IAAI,KAAK4zB,EAAE/nC,EAAE0V,GAAGnT,GAAG,GAAGmT,IAAI,IAAIqyB,EAAE/nC,EAAEuR,GAAGhP,GAAG1B,EAAEb,EAAEuR,EAAEmE,GAAG7U,EAAEb,IAAI0V,EAAEzU,GAAGyU,GAAG6N,IAAIhS,EAAEmE,EAAE,GAAG6N,GAAG7N,IAAIzU,EAAEyU,EAAE,IAA3Z,CAAga9U,EAAE2iB,EAAEhS,GAAG,EAAEtQ,GAAGL,EAAEd,OAAO,EAAEioC,GAAG/nC,GAAG,SAASa,EAAED,EAAEC,EAAEb,GAAG,IAAIujB,EAAE3iB,EAAEC,GAAGD,EAAEC,GAAGD,EAAEZ,GAAGY,EAAEZ,GAAGujB,EAAE,SAASvjB,EAAEY,EAAEC,GAAG,OAAOD,EAAEC,GAAG,EAAED,EAAEC,EAAE,EAAE,EAAE,IAAI0iB,EAAE,SAAS3iB,QAAG,IAASA,IAAIA,EAAE,GAAGW,KAAKC,YAAYrB,KAAKM,IAAI,EAAEG,GAAGW,KAAKE,YAAYtB,KAAKM,IAAI,EAAEN,KAAKuB,KAAK,GAAGH,KAAKC,cAAcD,KAAKK,SAAS,SAAS2P,EAAE3Q,EAAEC,EAAEb,GAAG,IAAIA,EAAE,OAAOa,EAAEoB,QAAQrB,GAAG,IAAI,IAAI2iB,EAAE,EAAEA,EAAE1iB,EAAEf,OAAOyjB,IAAI,GAAGvjB,EAAEY,EAAEC,EAAE0iB,IAAI,OAAOA,EAAE,OAAO,EAAE,SAAStiB,EAAEL,EAAEC,GAAGknC,EAAEnnC,EAAE,EAAEA,EAAE0B,SAASxC,OAAOe,EAAED,GAAG,SAASmnC,EAAEnnC,EAAEC,EAAEb,EAAEujB,EAAEhS,GAAGA,IAAIA,EAAEhP,EAAE,OAAOgP,EAAE7O,KAAK,IAAI6O,EAAE5O,KAAK,IAAI4O,EAAE3O,MAAK,IAAK2O,EAAE1O,MAAK,IAAK,IAAI,IAAI5B,EAAEJ,EAAEI,EAAEjB,EAAEiB,IAAI,CAAC,IAAI8mC,EAAEnnC,EAAE0B,SAASrB,GAAGkvB,EAAE5e,EAAE3Q,EAAEoC,KAAKugB,EAAEwkB,GAAGA,GAAG,OAAOx2B,EAAE,SAAS4e,EAAEvvB,EAAEC,GAAG,OAAOD,EAAE8B,KAAKvC,KAAKQ,IAAIC,EAAE8B,KAAK7B,EAAE6B,MAAM9B,EAAE+B,KAAKxC,KAAKQ,IAAIC,EAAE+B,KAAK9B,EAAE8B,MAAM/B,EAAEgC,KAAKzC,KAAKM,IAAIG,EAAEgC,KAAK/B,EAAE+B,MAAMhC,EAAEiC,KAAK1C,KAAKM,IAAIG,EAAEiC,KAAKhC,EAAEgC,MAAMjC,EAAE,SAASP,EAAEO,EAAEC,GAAG,OAAOD,EAAE8B,KAAK7B,EAAE6B,KAAK,SAAS4K,EAAE1M,EAAEC,GAAG,OAAOD,EAAE+B,KAAK9B,EAAE8B,KAAK,SAAS+Z,EAAE9b,GAAG,OAAOA,EAAEgC,KAAKhC,EAAE8B,OAAO9B,EAAEiC,KAAKjC,EAAE+B,MAAM,SAASqlC,EAAEpnC,GAAG,OAAOA,EAAEgC,KAAKhC,EAAE8B,MAAM9B,EAAEiC,KAAKjC,EAAE+B,MAAM,SAAS1C,EAAEW,EAAEC,GAAG,OAAOD,EAAE8B,MAAM7B,EAAE6B,MAAM9B,EAAE+B,MAAM9B,EAAE8B,MAAM9B,EAAE+B,MAAMhC,EAAEgC,MAAM/B,EAAEgC,MAAMjC,EAAEiC,KAAK,SAASqR,EAAEtT,EAAEC,GAAG,OAAOA,EAAE6B,MAAM9B,EAAEgC,MAAM/B,EAAE8B,MAAM/B,EAAEiC,MAAMhC,EAAE+B,MAAMhC,EAAE8B,MAAM7B,EAAEgC,MAAMjC,EAAE+B,KAAK,SAASJ,EAAE3B,GAAG,MAAM,CAAC0B,SAAS1B,EAAE2C,OAAO,EAAEP,MAAK,EAAGN,KAAK,IAAIC,KAAK,IAAIC,MAAK,IAAKC,MAAK,KAAM,SAASsR,EAAEtT,EAAEb,EAAEujB,EAAEhS,EAAEtQ,GAAG,IAAI,IAAI8mC,EAAE,CAAC/nC,EAAEujB,GAAGwkB,EAAEjoC,QAAQ,MAAMyjB,EAAEwkB,EAAEpkC,QAAQ3D,EAAE+nC,EAAEpkC,QAAQ4N,GAAG,CAAC,IAAI4e,EAAEnwB,EAAEG,KAAKuB,MAAM6hB,EAAEvjB,GAAGuR,EAAE,GAAGA,EAAE3Q,EAAEC,EAAEsvB,EAAEnwB,EAAEujB,EAAEtiB,GAAG8mC,EAAEnkC,KAAK5D,EAAEmwB,EAAEA,EAAE5M,IAAI,OAAOA,EAAE1f,UAAUC,IAAI,WAAW,OAAOvC,KAAKwC,KAAKxC,KAAKyC,KAAK,KAAKuf,EAAE1f,UAAUI,OAAO,SAASrD,GAAG,IAAIC,EAAEU,KAAKyC,KAAKhE,EAAE,GAAG,IAAIkU,EAAEtT,EAAEC,GAAG,OAAOb,EAAE,IAAI,IAAIujB,EAAEhiB,KAAKa,OAAOmP,EAAE,GAAG1Q,GAAG,CAAC,IAAI,IAAII,EAAE,EAAEA,EAAEJ,EAAEyB,SAASxC,OAAOmB,IAAI,CAAC,IAAI8mC,EAAElnC,EAAEyB,SAASrB,GAAGkvB,EAAEtvB,EAAEmC,KAAKugB,EAAEwkB,GAAGA,EAAE7zB,EAAEtT,EAAEuvB,KAAKtvB,EAAEmC,KAAKhD,EAAE4D,KAAKmkC,GAAG9nC,EAAEW,EAAEuvB,GAAG5uB,KAAKwC,KAAKgkC,EAAE/nC,GAAGuR,EAAE3N,KAAKmkC,IAAIlnC,EAAE0Q,EAAE5N,MAAM,OAAO3D,GAAGujB,EAAE1f,UAAUQ,SAAS,SAASzD,GAAG,IAAIC,EAAEU,KAAKyC,KAAK,IAAIkQ,EAAEtT,EAAEC,GAAG,OAAM,EAAG,IAAI,IAAIb,EAAE,GAAGa,GAAG,CAAC,IAAI,IAAI0iB,EAAE,EAAEA,EAAE1iB,EAAEyB,SAASxC,OAAOyjB,IAAI,CAAC,IAAIhS,EAAE1Q,EAAEyB,SAASihB,GAAGtiB,EAAEJ,EAAEmC,KAAKzB,KAAKa,OAAOmP,GAAGA,EAAE,GAAG2C,EAAEtT,EAAEK,GAAG,CAAC,GAAGJ,EAAEmC,MAAM/C,EAAEW,EAAEK,GAAG,OAAM,EAAGjB,EAAE4D,KAAK2N,IAAI1Q,EAAEb,EAAE2D,MAAM,OAAM,GAAI4f,EAAE1f,UAAUS,KAAK,SAAS1D,GAAG,IAAIA,IAAIA,EAAEd,OAAO,OAAOyB,KAAK,GAAGX,EAAEd,OAAOyB,KAAKE,YAAY,CAAC,IAAI,IAAIZ,EAAE,EAAEA,EAAED,EAAEd,OAAOe,IAAIU,KAAKgD,OAAO3D,EAAEC,IAAI,OAAOU,KAAK,IAAIvB,EAAEuB,KAAKiD,OAAO5D,EAAE6D,QAAQ,EAAE7D,EAAEd,OAAO,EAAE,GAAG,GAAGyB,KAAKyC,KAAK1B,SAASxC,OAAO,GAAGyB,KAAKyC,KAAKT,SAASvD,EAAEuD,OAAOhC,KAAKmD,WAAWnD,KAAKyC,KAAKhE,OAAO,CAAC,GAAGuB,KAAKyC,KAAKT,OAAOvD,EAAEuD,OAAO,CAAC,IAAIggB,EAAEhiB,KAAKyC,KAAKzC,KAAKyC,KAAKhE,EAAEA,EAAEujB,EAAEhiB,KAAKqD,QAAQ5E,EAAEuB,KAAKyC,KAAKT,OAAOvD,EAAEuD,OAAO,GAAE,QAAShC,KAAKyC,KAAKhE,EAAE,OAAOuB,MAAMgiB,EAAE1f,UAAUU,OAAO,SAAS3D,GAAG,OAAOA,GAAGW,KAAKqD,QAAQhE,EAAEW,KAAKyC,KAAKT,OAAO,GAAGhC,MAAMgiB,EAAE1f,UAAUjC,MAAM,WAAW,OAAOL,KAAKyC,KAAKzB,EAAE,IAAIhB,MAAMgiB,EAAE1f,UAAUgB,OAAO,SAASjE,EAAEC,GAAG,IAAID,EAAE,OAAOW,KAAK,IAAI,IAAIvB,EAAEujB,EAAEtiB,EAAE8mC,EAAExmC,KAAKyC,KAAKmsB,EAAE5uB,KAAKa,OAAOxB,GAAGP,EAAE,GAAGiN,EAAE,GAAGy6B,GAAG1nC,EAAEP,QAAQ,CAAC,GAAGioC,IAAIA,EAAE1nC,EAAEsD,MAAM4f,EAAEljB,EAAEA,EAAEP,OAAO,GAAGE,EAAEsN,EAAE3J,MAAM1C,GAAE,GAAI8mC,EAAE/kC,KAAK,CAAC,IAAI0Z,EAAEnL,EAAE3Q,EAAEmnC,EAAEzlC,SAASzB,GAAG,IAAI,IAAI6b,EAAE,OAAOqrB,EAAEzlC,SAAS6C,OAAOuX,EAAE,GAAGrc,EAAEuD,KAAKmkC,GAAGxmC,KAAK6D,UAAU/E,GAAGkB,KAAKN,GAAG8mC,EAAE/kC,OAAO/C,EAAE8nC,EAAE5X,GAAG5M,GAAGvjB,IAAI+nC,EAAExkB,EAAEjhB,SAAStC,GAAGiB,GAAE,GAAI8mC,EAAE,MAAM1nC,EAAEuD,KAAKmkC,GAAGz6B,EAAE1J,KAAK5D,GAAGA,EAAE,EAAEujB,EAAEwkB,EAAEA,EAAEA,EAAEzlC,SAAS,IAAI,OAAOf,MAAMgiB,EAAE1f,UAAUzB,OAAO,SAASxB,GAAG,OAAOA,GAAG2iB,EAAE1f,UAAUwB,YAAY,SAASzE,EAAEC,GAAG,OAAOD,EAAE8B,KAAK7B,EAAE6B,MAAM6gB,EAAE1f,UAAUyB,YAAY,SAAS1E,EAAEC,GAAG,OAAOD,EAAE+B,KAAK9B,EAAE8B,MAAM4gB,EAAE1f,UAAU0B,OAAO,WAAW,OAAOhE,KAAKyC,MAAMuf,EAAE1f,UAAU2B,SAAS,SAAS5E,GAAG,OAAOW,KAAKyC,KAAKpD,EAAEW,MAAMgiB,EAAE1f,UAAUE,KAAK,SAASnD,EAAEC,GAAG,IAAI,IAAIb,EAAE,GAAGY,GAAGA,EAAEoC,KAAKnC,EAAE+C,KAAK6B,MAAM5E,EAAED,EAAE0B,UAAUtC,EAAE4D,KAAK6B,MAAMzF,EAAEY,EAAE0B,UAAU1B,EAAEZ,EAAE2D,MAAM,OAAO9C,GAAG0iB,EAAE1f,UAAUW,OAAO,SAAS5D,EAAEC,EAAEb,EAAEujB,GAAG,IAAIhS,EAAEw2B,EAAE/nC,EAAEa,EAAE,EAAEsvB,EAAE5uB,KAAKC,YAAY,GAAGumC,GAAG5X,EAAE,OAAOlvB,EAAEsQ,EAAEhP,EAAE3B,EAAE6D,MAAM5D,EAAEb,EAAE,IAAIuB,KAAKa,QAAQmP,EAAEgS,IAAIA,EAAEpjB,KAAKuB,KAAKvB,KAAKC,IAAI2nC,GAAG5nC,KAAKC,IAAI+vB,IAAIA,EAAEhwB,KAAKuB,KAAKqmC,EAAE5nC,KAAKyF,IAAIuqB,EAAE5M,EAAE,MAAMhS,EAAEhP,EAAE,KAAKS,MAAK,EAAGuO,EAAEhO,OAAOggB,EAAE,IAAIljB,EAAEF,KAAKuB,KAAKqmC,EAAE5X,GAAG7iB,EAAEjN,EAAEF,KAAKuB,KAAKvB,KAAKK,KAAK2vB,IAAIhc,EAAEvT,EAAEC,EAAEb,EAAEsN,EAAE/L,KAAK8D,aAAa,IAAI,IAAIqX,EAAE7b,EAAE6b,GAAG1c,EAAE0c,GAAGpP,EAAE,CAAC,IAAI06B,EAAE7nC,KAAKQ,IAAI+b,EAAEpP,EAAE,EAAEtN,GAAGmU,EAAEvT,EAAE8b,EAAEsrB,EAAE3nC,EAAEkB,KAAK+D,aAAa,IAAI,IAAIrF,EAAEyc,EAAEzc,GAAG+nC,EAAE/nC,GAAGI,EAAE,CAAC,IAAI6T,EAAE/T,KAAKQ,IAAIV,EAAEI,EAAE,EAAE2nC,GAAGz2B,EAAEjP,SAASsB,KAAKrC,KAAKiD,OAAO5D,EAAEX,EAAEiU,EAAEqP,EAAE,KAAK,OAAOtiB,EAAEsQ,EAAEhQ,KAAKa,QAAQmP,GAAGgS,EAAE1f,UAAUoC,eAAe,SAASrF,EAAEC,EAAEb,EAAEujB,GAAG,KAAKA,EAAE3f,KAAK/C,IAAIA,EAAEmC,MAAMugB,EAAEzjB,OAAO,IAAIE,GAAG,CAAC,IAAI,IAAIuR,EAAE,IAAItQ,EAAE,IAAI8mC,OAAE,EAAO5X,EAAE,EAAEA,EAAEtvB,EAAEyB,SAASxC,OAAOqwB,IAAI,CAAC,IAAI9vB,EAAEQ,EAAEyB,SAAS6tB,GAAG7iB,EAAEoP,EAAErc,GAAG2nC,GAAG/nC,EAAEW,EAAEsT,EAAE7T,GAAGF,KAAKM,IAAIyT,EAAEtR,KAAK3C,EAAE2C,MAAMzC,KAAKQ,IAAIuT,EAAExR,KAAKzC,EAAEyC,QAAQvC,KAAKM,IAAIyT,EAAErR,KAAK5C,EAAE4C,MAAM1C,KAAKQ,IAAIuT,EAAEvR,KAAK1C,EAAE0C,OAAO2K,GAAG06B,EAAE/mC,GAAGA,EAAE+mC,EAAEz2B,EAAEjE,EAAEiE,EAAEjE,EAAEiE,EAAEw2B,EAAE1nC,GAAG2nC,IAAI/mC,GAAGqM,EAAEiE,IAAIA,EAAEjE,EAAEy6B,EAAE1nC,GAAGQ,EAAEknC,GAAGlnC,EAAEyB,SAAS,GAAG,IAAIrC,EAAEiU,EAAE,OAAOrT,GAAG0iB,EAAE1f,UAAUe,QAAQ,SAAShE,EAAEC,EAAEb,GAAG,IAAIujB,EAAEvjB,EAAEY,EAAEW,KAAKa,OAAOxB,GAAG2Q,EAAE,GAAGtQ,EAAEM,KAAK0E,eAAesd,EAAEhiB,KAAKyC,KAAKnD,EAAE0Q,GAAG,IAAItQ,EAAEqB,SAASsB,KAAKhD,GAAGuvB,EAAElvB,EAAEsiB,GAAG1iB,GAAG,GAAG0Q,EAAE1Q,GAAGyB,SAASxC,OAAOyB,KAAKC,aAAaD,KAAKmF,OAAO6K,EAAE1Q,GAAGA,IAAIU,KAAKoF,oBAAoB4c,EAAEhS,EAAE1Q,IAAI0iB,EAAE1f,UAAU6C,OAAO,SAAS9F,EAAEC,GAAG,IAAIb,EAAEY,EAAEC,GAAG0iB,EAAEvjB,EAAEsC,SAASxC,OAAOyR,EAAEhQ,KAAKE,YAAYF,KAAKqF,iBAAiB5G,EAAEuR,EAAEgS,GAAG,IAAIwkB,EAAExmC,KAAKuF,kBAAkB9G,EAAEuR,EAAEgS,GAAG4M,EAAE5tB,EAAEvC,EAAEsC,SAAS6C,OAAO4iC,EAAE/nC,EAAEsC,SAASxC,OAAOioC,IAAI5X,EAAE5sB,OAAOvD,EAAEuD,OAAO4sB,EAAEntB,KAAKhD,EAAEgD,KAAK/B,EAAEjB,EAAEuB,KAAKa,QAAQnB,EAAEkvB,EAAE5uB,KAAKa,QAAQvB,EAAED,EAAEC,EAAE,GAAGyB,SAASsB,KAAKusB,GAAG5uB,KAAKmD,WAAW1E,EAAEmwB,IAAI5M,EAAE1f,UAAUa,WAAW,SAAS9D,EAAEC,GAAGU,KAAKyC,KAAKzB,EAAE,CAAC3B,EAAEC,IAAIU,KAAKyC,KAAKT,OAAO3C,EAAE2C,OAAO,EAAEhC,KAAKyC,KAAKhB,MAAK,EAAG/B,EAAEM,KAAKyC,KAAKzC,KAAKa,SAASmhB,EAAE1f,UAAUiD,kBAAkB,SAASlG,EAAEC,EAAEb,GAAG,IAAI,IAAIujB,EAAEhS,EAAEtQ,EAAEkvB,EAAE9vB,EAAEiN,EAAE06B,EAAE/nC,EAAE,IAAIiU,EAAE,IAAI3R,EAAE1B,EAAE0B,GAAGvC,EAAEa,EAAE0B,IAAI,CAAC,IAAI4R,EAAE4zB,EAAEnnC,EAAE,EAAE2B,EAAEhB,KAAKa,QAAQsT,EAAEqyB,EAAEnnC,EAAE2B,EAAEvC,EAAEuB,KAAKa,QAAQ0xB,GAAGviB,EAAE4C,EAAElT,EAAEyU,EAAEya,OAAE,EAAO9vB,OAAE,EAAOiN,OAAE,EAAO06B,OAAE,EAAO7X,EAAEhwB,KAAKM,IAAI8Q,EAAE7O,KAAKzB,EAAEyB,MAAMrC,EAAEF,KAAKM,IAAI8Q,EAAE5O,KAAK1B,EAAE0B,MAAM2K,EAAEnN,KAAKQ,IAAI4Q,EAAE3O,KAAK3B,EAAE2B,MAAMolC,EAAE7nC,KAAKQ,IAAI4Q,EAAE1O,KAAK5B,EAAE4B,MAAM1C,KAAKM,IAAI,EAAE6M,EAAE6iB,GAAGhwB,KAAKM,IAAI,EAAEunC,EAAE3nC,IAAIsF,EAAE+W,EAAEvI,GAAGuI,EAAEhH,GAAGoe,EAAE7zB,GAAGA,EAAE6zB,EAAEvQ,EAAEhhB,EAAE2R,EAAEvO,EAAEuO,EAAEvO,EAAEuO,GAAG4f,IAAI7zB,GAAG0F,EAAEuO,IAAIA,EAAEvO,EAAE4d,EAAEhhB,GAAG,OAAOghB,GAAGvjB,EAAEa,GAAG0iB,EAAE1f,UAAU+C,iBAAiB,SAAShG,EAAEC,EAAEb,GAAG,IAAIujB,EAAE3iB,EAAEoC,KAAKzB,KAAK8D,YAAYhF,EAAEkR,EAAE3Q,EAAEoC,KAAKzB,KAAK+D,YAAYgI,EAAE/L,KAAK6F,eAAexG,EAAEC,EAAEb,EAAEujB,GAAGhiB,KAAK6F,eAAexG,EAAEC,EAAEb,EAAEuR,IAAI3Q,EAAE0B,SAAS+E,KAAKkc,IAAIA,EAAE1f,UAAUuD,eAAe,SAASxG,EAAEC,EAAEb,EAAEujB,GAAG3iB,EAAE0B,SAAS+E,KAAKkc,GAAG,IAAI,IAAIhS,EAAEhQ,KAAKa,OAAOnB,EAAE8mC,EAAEnnC,EAAE,EAAEC,EAAE0Q,GAAGlR,EAAE0nC,EAAEnnC,EAAEZ,EAAEa,EAAEb,EAAEuR,GAAGjE,EAAE06B,EAAE/mC,GAAG+mC,EAAE3nC,GAAGqc,EAAE7b,EAAE6b,EAAE1c,EAAEa,EAAE6b,IAAI,CAAC,IAAIzc,EAAEW,EAAE0B,SAASoa,GAAGyT,EAAElvB,EAAEL,EAAEoC,KAAKuO,EAAEtR,GAAGA,GAAGqN,GAAG06B,EAAE/mC,GAAG,IAAI,IAAIiT,EAAElU,EAAEa,EAAE,EAAEqT,GAAGrT,EAAEqT,IAAI,CAAC,IAAI3R,EAAE3B,EAAE0B,SAAS4R,GAAGic,EAAE9vB,EAAEO,EAAEoC,KAAKuO,EAAEhP,GAAGA,GAAG+K,GAAG06B,EAAE3nC,GAAG,OAAOiN,GAAGiW,EAAE1f,UAAU8C,oBAAoB,SAAS/F,EAAEC,EAAEb,GAAG,IAAI,IAAIujB,EAAEvjB,EAAEujB,GAAG,EAAEA,IAAI4M,EAAEtvB,EAAE0iB,GAAG3iB,IAAI2iB,EAAE1f,UAAUuB,UAAU,SAASxE,GAAG,IAAI,IAAIC,EAAED,EAAEd,OAAO,EAAEE,OAAE,EAAOa,GAAG,EAAEA,IAAI,IAAID,EAAEC,GAAGyB,SAASxC,OAAOe,EAAE,GAAGb,EAAEY,EAAEC,EAAE,GAAGyB,UAAU6C,OAAOnF,EAAEiC,QAAQrB,EAAEC,IAAI,GAAGU,KAAKK,QAAQX,EAAEL,EAAEC,GAAGU,KAAKa,SAASmhB,EAAxuM1iB,mCCEnF,IAAIonC,EAAUh+B,OACV2e,EAAa7D,UAEjBzlB,EAAOD,QAAU,WAChB,GAAY,MAARkC,MAAgBA,OAAS0mC,EAAQ1mC,MACpC,MAAM,IAAIqnB,EAAW,sDAEtB,IAAI3pB,EAAS,GAmBb,OAlBIsC,KAAK2mC,SACRjpC,GAAU,KAEPsC,KAAK4mC,aACRlpC,GAAU,KAEPsC,KAAK6mC,YACRnpC,GAAU,KAEPsC,KAAK8mC,SACRppC,GAAU,KAEPsC,KAAK+mC,UACRrpC,GAAU,KAEPsC,KAAKgnC,SACRtpC,GAAU,KAEJA,sCC1BR,IAAIuwB,EAAS,EAAQ,MACjB9e,EAAW,EAAQ,OAEnB4U,EAAiB,EAAQ,OACzBmK,EAAc,EAAQ,OACtBC,EAAO,EAAQ,OAEf8Y,EAAa93B,EAAS4U,GAE1BkK,EAAOgZ,EAAY,CAClB/Y,YAAaA,EACbnK,eAAgBA,EAChBoK,KAAMA,IAGPpwB,EAAOD,QAAUmpC,sCCfjB,IAAIljB,EAAiB,EAAQ,OAEzBrM,EAAsB,4BACtB7H,EAAQnH,OAAO8e,yBACfH,EAAa7D,UAEjBzlB,EAAOD,QAAU,WAChB,IAAK4Z,EACJ,MAAM,IAAI2P,EAAW,6FAEtB,GAAuB,QAAnB,OAAStR,MAAiB,CAC7B,IAAI8W,EAAahd,EAAMqa,OAAO5nB,UAAW,SACzC,GAAIuqB,GAAwC,oBAAnBA,EAAWjF,KAA8C,kBAAjB,IAAMkf,OACtE,OAAOja,EAAWjF,IAGpB,OAAO7D,uCChBR,IAAIrM,EAAsB,4BACtBwW,EAAc,EAAQ,OACtBH,EAAOrlB,OAAO8e,yBACd7e,EAAiBD,OAAOC,eACxBu+B,EAAU1jB,UACVsE,EAAWpf,OAAOqf,eAClBof,EAAQ,IAEZppC,EAAOD,QAAU,WAChB,IAAK4Z,IAAwBoQ,EAC5B,MAAM,IAAIof,EAAQ,6FAEnB,IAAI9Y,EAAWF,IACXkZ,EAAQtf,EAASqf,GACjBta,EAAakB,EAAKqZ,EAAO,SAQ7B,OAPKva,GAAcA,EAAWjF,MAAQwG,GACrCzlB,EAAey+B,EAAO,QAAS,CAC9B/2B,cAAc,EACdwH,YAAY,EACZ+P,IAAKwG,IAGAA,yBCxBsK,SAAS/uB,GAAG,aAAa,MAAM2Q,EAAE,UAAUvR,EAAE,sBAAsB,SAASujB,EAAE3iB,EAAE2Q,EAAEvR,EAAEujB,EAAE4M,GAAG,IAAIzT,EAAE7b,EAAEmnC,EAAE9zB,EAAE7T,EAAEkR,EAAE,GAAGtQ,EAAEsiB,EAAE,GAAGpP,EAAE,EAAE7G,EAAE,EAAErM,EAAEZ,GAAGY,GAAGZ,GAAGqc,EAAErc,EAAEA,EAAEkR,IAAI4C,KAAKuI,EAAEzb,EAAEA,EAAEsiB,IAAIjW,IAAI,IAAI/K,EAAE,EAAE,GAAG4R,EAAEvT,GAAG0M,EAAEtN,EAAE,IAAIiB,EAAEZ,GAAGY,GAAGZ,GAAG2nC,EAAEtrB,IAAI7b,EAAER,EAAEqc,GAAGrc,GAAGA,EAAEkR,IAAI4C,KAAK6zB,EAAEtrB,IAAI7b,EAAEI,EAAEyb,GAAGzb,GAAGA,EAAEsiB,IAAIjW,IAAIoP,EAAE7b,EAAE,IAAImnC,IAAI7X,EAAE5tB,KAAKylC,GAAG7zB,EAAEvT,GAAG0M,EAAEtN,GAAGiB,EAAEZ,GAAGY,GAAGZ,GAAG2nC,EAAEtrB,IAAI7b,EAAE6b,EAAErc,IAAI6T,EAAErT,EAAE6b,KAAKrc,EAAE6T,GAAG7T,EAAEkR,IAAI4C,KAAK6zB,EAAEtrB,IAAI7b,EAAE6b,EAAEzb,IAAIiT,EAAErT,EAAE6b,KAAKzb,EAAEiT,GAAGjT,EAAEsiB,IAAIjW,IAAIoP,EAAE7b,EAAE,IAAImnC,IAAI7X,EAAE5tB,KAAKylC,GAAG,KAAK7zB,EAAEvT,GAAGonC,EAAEtrB,IAAI7b,EAAE6b,EAAErc,IAAI6T,EAAErT,EAAE6b,KAAKrc,EAAE6T,GAAG7T,EAAEkR,IAAI4C,GAAGuI,EAAE7b,EAAE,IAAImnC,IAAI7X,EAAE5tB,KAAKylC,GAAG,KAAK16B,EAAEtN,GAAGgoC,EAAEtrB,IAAI7b,EAAE6b,EAAEzb,IAAIiT,EAAErT,EAAE6b,KAAKzb,EAAEiT,GAAGjT,EAAEsiB,IAAIjW,GAAGoP,EAAE7b,EAAE,IAAImnC,IAAI7X,EAAE5tB,KAAKylC,GAAG,OAAO,IAAItrB,GAAG,IAAIna,IAAI4tB,EAAE5tB,KAAKma,GAAGna,EAAE,SAAS4tB,EAAEvvB,GAAG,OAAO,IAAI8pB,aAAa9pB,GAAG,MAAM8b,EAAE,sBAAsB7b,EAAE,sBAAsBmnC,EAAE,sBAAsB9zB,EAAEic,EAAE,GAAG9vB,EAAE8vB,EAAE,GAAGlvB,EAAEkvB,EAAE,IAAIhc,EAAEgc,EAAE,IAAI7iB,EAAE6iB,EAAE,GAAGvvB,EAAEgoC,SAAS,SAAShoC,EAAEuvB,EAAE5tB,EAAErB,EAAEyU,EAAEoyB,GAAG,MAAMpiC,GAAGwqB,EAAE4X,IAAIxlC,EAAEoT,GAAGD,GAAG9U,EAAE+U,IAAIzU,EAAE6mC,GAAGjnC,EAAE6E,EAAE+P,EAAE,GAAG,IAAI/P,GAAG,IAAI+P,GAAG/P,EAAE,GAAG+P,EAAE,EAAE,OAAO5U,EAAE,MAAMb,EAAEE,KAAKoiB,IAAI5c,EAAE+P,GAAG,OAAOvV,KAAKoiB,IAAIzhB,IAAI4b,EAAEzc,EAAEa,GAAG,SAASF,EAAEuvB,EAAEzT,EAAEna,EAAErB,EAAEyU,EAAEoyB,GAAG,IAAIpiC,EAAE+P,EAAE5U,EAAEb,EAAEkZ,EAAE2a,EAAE+U,EAAEC,EAAEC,EAAEC,EAAE5tB,EAAE7M,EAAE9O,EAAE4b,EAAEnb,EAAE+oC,EAAEC,EAAEpyB,EAAE,MAAMqyB,EAAEvoC,EAAEM,EAAEkoC,EAAE1sB,EAAExb,EAAEmoC,EAAElZ,EAAExa,EAAE2zB,EAAE/mC,EAAEoT,EAAEwD,GAAGjZ,GAAG4oC,EAAEK,GAAGN,GAAG/U,EAAEviB,EAAE43B,IAAIrV,EAAEqV,MAAMH,EAAEM,GAAGP,GAAGjV,EAAEviB,EAAE+3B,IAAIxV,EAAEwV,OAAOjuB,EAAE8tB,EAAEG,GAAGT,EAAEE,EAAED,EAAEC,EAAEF,EAAEG,KAAK5tB,EAAElb,GAAGgpC,GAAGJ,EAAEO,GAAGR,GAAG/U,EAAEviB,EAAE83B,IAAIvV,EAAEuV,MAAML,EAAEI,GAAGL,GAAGjV,EAAEviB,EAAE63B,IAAItV,EAAEsV,OAAOH,EAAEI,EAAED,GAAGP,EAAEE,EAAED,EAAEC,EAAEF,EAAEG,KAAK90B,EAAE,GAAGhU,GAAGkb,EAAEjC,IAAIA,EAAE+vB,GAAG/vB,GAAG1Z,EAAE4b,IAAI9M,EAAE8M,EAAED,IAAIjC,EAAE5K,EAAE8M,KAAKD,EAAEjC,KAAKiC,EAAE3b,EAAEwpC,GAAG/0B,EAAE,GAAGzU,GAAG2b,EAAEjC,IAAIA,EAAE8vB,GAAG9vB,GAAGrC,EAAEvI,EAAE6M,GAAG7M,EAAE2F,EAAE,GAAG3F,GAAGuI,EAAEqC,IAAIiC,EAAEjC,GAAGjF,EAAE,GAAG4C,EAAE,IAAIyyB,EAAE,SAAS3oC,EAAE2Q,GAAG,IAAIvR,EAAEuR,EAAE,GAAG,IAAI,IAAIgS,EAAE,EAAEA,EAAE3iB,EAAE2iB,IAAIvjB,GAAGuR,EAAEgS,GAAG,OAAOvjB,EAA5D,CAA+D,EAAEkU,GAAGs1B,EAAE3oC,EAAEknC,EAAE,GAAGwB,GAAGC,IAAID,GAAGC,EAAE,OAAOD,EAAE,GAAG5jC,EAAE/E,GAAGuoC,GAAGhwB,EAAEvY,EAAEuoC,KAAKhwB,EAAEjY,GAAGJ,EAAE4b,GAAG0sB,GAAGjwB,EAAEuD,EAAE0sB,KAAKjwB,EAAEjY,GAAGwU,EAAEya,GAAGkZ,GAAGlwB,EAAEgX,EAAEkZ,KAAKlwB,EAAExD,GAAG1V,EAAEsC,GAAG+mC,GAAGnwB,EAAE5W,EAAE+mC,KAAKnwB,EAAExD,GAAG,IAAIhQ,GAAG,IAAI+P,GAAG,IAAI5U,GAAG,IAAIb,EAAE,OAAOspC,EAAE,GAAGC,EAAExB,EAAED,EAAE/nC,EAAEG,KAAKoiB,IAAIgnB,IAAIA,GAAGJ,EAAElpC,EAAEqpC,EAAE3jC,GAAG0jC,EAAEvoC,EAAEsoC,EAAE1zB,KAAK8zB,IAAID,GAAGC,EAAE,OAAOD,EAAEpwB,GAAGjZ,GAAG4oC,EAAEnjC,GAAGkjC,GAAG/U,EAAEviB,EAAE5L,IAAImuB,EAAEnuB,MAAMqjC,EAAEM,GAAGP,GAAGjV,EAAEviB,EAAE+3B,IAAIxV,EAAEwV,OAAOjuB,EAAE1V,EAAE2jC,GAAGT,EAAEE,EAAED,EAAEC,EAAEF,EAAEG,KAAK5tB,EAAElb,GAAGgpC,GAAGJ,EAAEpzB,GAAGmzB,GAAG/U,EAAEviB,EAAEmE,IAAIoe,EAAEpe,MAAMszB,EAAEI,GAAGL,GAAGjV,EAAEviB,EAAE63B,IAAItV,EAAEsV,OAAOH,EAAEvzB,EAAE0zB,GAAGP,EAAEE,EAAED,EAAEC,EAAEF,EAAEG,KAAK17B,EAAE,GAAGpN,GAAGkb,EAAEjC,IAAIA,EAAE+vB,GAAG/vB,GAAG1Z,EAAE4b,IAAI9M,EAAE8M,EAAED,IAAIjC,EAAE5K,EAAE8M,KAAKD,EAAEjC,KAAKiC,EAAE3b,EAAEwpC,GAAG37B,EAAE,GAAG7N,GAAG2b,EAAEjC,IAAIA,EAAE8vB,GAAG9vB,GAAGrC,EAAEvI,EAAE6M,GAAG7M,EAAEjB,EAAE,GAAGiB,GAAGuI,EAAEqC,IAAIiC,EAAEjC,GAAG7L,EAAE,GAAGwJ,EAAE,MAAM2yB,EAAElmB,EAAE,EAAErP,EAAE,EAAE5G,EAAEjN,GAAG8Y,GAAGjZ,GAAG4oC,EAAEK,GAAGN,GAAG/U,EAAEviB,EAAE43B,IAAIrV,EAAEqV,MAAMH,EAAE/oC,GAAG8oC,GAAGjV,EAAEviB,EAAEtR,IAAI6zB,EAAE7zB,OAAOob,EAAE8tB,EAAElpC,GAAG4oC,EAAEE,EAAED,EAAEC,EAAEF,EAAEG,KAAK5tB,EAAElb,GAAGgpC,GAAGJ,EAAEO,GAAGR,GAAG/U,EAAEviB,EAAE83B,IAAIvV,EAAEuV,MAAML,EAAEloC,GAAGioC,GAAGjV,EAAEviB,EAAEzQ,IAAIgzB,EAAEhzB,OAAOmoC,EAAEI,EAAEvoC,GAAG+nC,EAAEE,EAAED,EAAEC,EAAEF,EAAEG,KAAK17B,EAAE,GAAGpN,GAAGkb,EAAEjC,IAAIA,EAAE+vB,GAAG/vB,GAAG1Z,EAAE4b,IAAI9M,EAAE8M,EAAED,IAAIjC,EAAE5K,EAAE8M,KAAKD,EAAEjC,KAAKiC,EAAE3b,EAAEwpC,GAAG37B,EAAE,GAAG7N,GAAG2b,EAAEjC,IAAIA,EAAE8vB,GAAG9vB,GAAGrC,EAAEvI,EAAE6M,GAAG7M,EAAEjB,EAAE,GAAGiB,GAAGuI,EAAEqC,IAAIiC,EAAEjC,GAAG7L,EAAE,GAAGwJ,EAAE,MAAMpR,EAAE6d,EAAEkmB,EAAEppC,EAAE,EAAEiN,EAAErM,GAAGkY,GAAGjZ,GAAG4oC,EAAEnjC,GAAGkjC,GAAG/U,EAAEviB,EAAE5L,IAAImuB,EAAEnuB,MAAMqjC,EAAE/oC,GAAG8oC,GAAGjV,EAAEviB,EAAEtR,IAAI6zB,EAAE7zB,OAAOob,EAAE1V,EAAE1F,GAAG4oC,EAAEE,EAAED,EAAEC,EAAEF,EAAEG,KAAK5tB,EAAElb,GAAGgpC,GAAGJ,EAAEpzB,GAAGmzB,GAAG/U,EAAEviB,EAAEmE,IAAIoe,EAAEpe,MAAMszB,EAAEloC,GAAGioC,GAAGjV,EAAEviB,EAAEzQ,IAAIgzB,EAAEhzB,OAAOmoC,EAAEvzB,EAAE5U,GAAG+nC,EAAEE,EAAED,EAAEC,EAAEF,EAAEG,KAAK17B,EAAE,GAAGpN,GAAGkb,EAAEjC,IAAIA,EAAE+vB,GAAG/vB,GAAG1Z,EAAE4b,IAAI9M,EAAE8M,EAAED,IAAIjC,EAAE5K,EAAE8M,KAAKD,EAAEjC,KAAKiC,EAAE3b,EAAEwpC,GAAG37B,EAAE,GAAG7N,GAAG2b,EAAEjC,IAAIA,EAAE8vB,GAAG9vB,GAAGrC,EAAEvI,EAAE6M,GAAG7M,EAAEjB,EAAE,GAAGiB,GAAGuI,EAAEqC,IAAIiC,EAAEjC,GAAG7L,EAAE,GAAGwJ,EAAE,MAAMoe,EAAE3R,EAAE7d,EAAEzE,EAAE,EAAEqM,EAAE6G,GAAG,OAAOA,EAAE+gB,EAAE,GAAhhD,CAAohDt0B,EAAEuvB,EAAE5tB,EAAErB,EAAEyU,EAAEoyB,EAAE9nC,IAAIW,EAAE8oC,aAAa,SAAS9oC,EAAE2Q,EAAEvR,EAAEujB,EAAE4M,EAAEzT,GAAG,OAAOnL,EAAEmL,IAAI1c,EAAEmwB,IAAIvvB,EAAEuvB,IAAI5M,EAAE7G,IAAIzS,OAAOC,eAAetJ,EAAE,aAAa,CAACuJ,OAAM,IAA5mFoH,CAAElS,mCCEtEC,EAAOD,QAAU,CAIhBsqC,OAAQ,SAAgBpR,EAAIC,EAAIh4B,GAI/B,IAHA,IAAI0D,EAAMq0B,EAAGz4B,OACTwb,EAAM,EAEDza,EAAI,EAAGA,EAAIqD,EAAKrD,IAAK,CAC7B,IAAIsT,GAAKokB,EAAG13B,IAAM,IAAM23B,EAAG33B,IAAM,GACjCya,GAAOnH,EAAIA,EAGZ,OAAO3T,EAAOL,KAAKK,KAAK8a,GAAOA,GAEhCsuB,QAAS,SAAiBrR,EAAIC,EAAIh4B,GAIjC,IAHA,IAAI0D,EAAMq0B,EAAGz4B,OACTwb,EAAM,EAEDza,EAAI,EAAGA,EAAIqD,EAAKrD,IACxBya,GAAOnb,KAAKoiB,KAAKgW,EAAG13B,IAAM,IAAM23B,EAAG33B,IAAM,IAI1C,OAAOL,EAAOL,KAAKK,KAAK8a,GAAOA,GAOhChH,KAAM,SAAcikB,EAAIC,EAAIh4B,GAC3B,IAAI2T,EAAIhU,KAAKoiB,IAAIgW,EAAKC,GACtB,OAAOh4B,EAAO2T,EAAIA,EAAIA,wCCjCxB,IAAI01B,EAAW,EAAQ,OACnBF,EAASE,EAASF,OAClBr1B,EAAOu1B,EAASv1B,KAEpBhV,EAAOD,QAAU,CAChByqC,OAAQ,SAAgB9lC,EAAMvE,GAO7B,IANA,IAAIgM,EAAM,GACNs+B,EAAK,GACLnpC,EAAInB,GAAK,EACTyE,EAAMF,EAAKlE,OACXkqC,EAAQhmC,EAAK,GAAGlE,OAAS,EAEtBiqC,EAAGjqC,OAASL,GAAKmB,KAAM,GAAG,CAChC,IAAIuT,EAAInQ,EAAK7D,KAAKO,MAAMP,KAAKmc,SAAWpY,IACpC6T,EAAMiyB,EAAQ71B,EAAEvM,KAAK,KAAO,GAAKuM,EAChC1I,EAAIsM,KACRtM,EAAIsM,IAAO,EACXgyB,EAAGnmC,KAAKuQ,IAIV,GAAI41B,EAAGjqC,OAASL,EAAG,MAAM,IAAI8I,MAAM,iCAAsC,OAAOwhC,GAOjFE,KAAM,SAAcjmC,EAAMvE,GACzB,IAAImK,EAAW5F,EAAK,GAAGlE,OAAS6pC,EAASr1B,EACrCy1B,EAAK,GACL7lC,EAAMF,EAAKlE,OACXkqC,EAAQhmC,EAAK,GAAGlE,OAAS,EAIzBoU,EAAIlQ,EAAK7D,KAAKO,MAAMP,KAAKmc,SAAWpY,IAC9B8lC,GAAQ91B,EAAEtM,KAAK,KAKzB,IAJAmiC,EAAGnmC,KAAKsQ,GAID61B,EAAGjqC,OAASL,GAAG,CAOrB,IALA,IAAIyqC,EAAQ,GACRC,EAAKJ,EAAGjqC,OACRsqC,EAAO,EACPC,EAAM,GAEDxpC,EAAI,EAAGA,EAAIqD,EAAKrD,IAAK,CAE7B,IADA,IAAIF,EAAMzB,EAAAA,EACD4B,EAAI,EAAGA,EAAIqpC,EAAIrpC,IAAK,CAC5B,IAAIwpC,EAAQ1gC,EAAS5F,EAAKnD,GAAIkpC,EAAGjpC,IAC7BwpC,GAAS3pC,IAAKA,EAAM2pC,GAEzBJ,EAAMrpC,GAAKF,EAIZ,IAAK,IAAIiI,EAAK,EAAGA,EAAK1E,EAAK0E,IAC1BwhC,GAAQF,EAAMthC,GAIf,IAAK,IAAIu3B,EAAM,EAAGA,EAAMj8B,EAAKi8B,IAC5BkK,EAAIlK,GAAO,CAAEt/B,EAAGs/B,EAAKrM,EAAG9vB,EAAKm8B,GAAMoK,GAAIL,EAAM/J,GAAOiK,EAAMI,GAAI,GAI/DH,EAAIhjC,MAAK,SAAUpG,EAAGC,GACrB,OAAOD,EAAEspC,GAAKrpC,EAAEqpC,MAIjBF,EAAI,GAAGG,GAAKH,EAAI,GAAGE,GACnB,IAAK,IAAIxE,EAAM,EAAGA,EAAM7hC,EAAK6hC,IAC5BsE,EAAItE,GAAKyE,GAAKH,EAAItE,EAAM,GAAGyE,GAAKH,EAAItE,GAAKwE,GAQ1C,IAJA,IAAIE,EAAMtqC,KAAKmc,SAGXouB,EAAM,EACHA,EAAMxmC,EAAM,GAAKmmC,EAAIK,KAAOF,GAAKC,IACxCV,EAAGnmC,KAAKymC,EAAIK,EAAM,GAAG5W,GAmBtB,OAAOiW,wCCtGT,IAAIF,EAAW,EAAQ,OACnBc,EAAc,EAAQ,OACtBhB,EAASE,EAASF,OAGlBG,GAFUD,EAASD,QACZC,EAASv1B,KACPq2B,EAAYb,QACrBG,EAAOU,EAAYV,KAOvB,SAASvuB,EAAKxX,EAAK0mC,EAAK9W,GACvBA,EAAIA,GAAK,GACT,IAAK,IAAIjzB,EAAI,EAAGA,EAAIqD,EAAKrD,IACxBizB,EAAEjzB,GAAK+pC,EACP,OAAO9W,EA0ITx0B,EAAOD,QAvIP,SAAiB2E,EAAMvE,EAAGorC,EAASC,GAClC,IAAIf,EAAK,GACLgB,EAAM,GACNC,EAAO,GACP12B,EAAO,GACP22B,GAAO,EACPC,EAAKJ,GAlBA,IAmBL5mC,EAAMF,EAAKlE,OACXqrC,EAAOnnC,EAAK,GAAGlE,OACfkqC,EAAQmB,EAAO,EACflvB,EAAQ,GAEZ,GAAK4uB,EAUJd,EADqB,UAAXc,EACLf,EAAO9lC,EAAMvE,GACG,QAAXorC,EACLZ,EAAKjmC,EAAMvE,GAEXorC,OAZL,IADA,IAAIO,EAAQ,GACLrB,EAAGjqC,OAASL,GAAG,CACrB,IAAIirC,EAAMvqC,KAAKO,MAAMP,KAAKmc,SAAWpY,GAChCknC,EAAMV,KACVU,EAAMV,IAAO,EACbX,EAAGnmC,KAAKI,EAAK0mC,KAWhB,EAAG,CAEFhvB,EAAKjc,EAAG,EAAGwc,GAGX,IAAK,IAAIpb,EAAI,EAAGA,EAAIqD,EAAKrD,IAAK,CAG7B,IAFA,IAAIF,EAAMzB,EAAAA,EACNmsC,EAAO,EACFvqC,EAAI,EAAGA,EAAIrB,EAAGqB,IAAK,EAEvBwT,EAAO01B,EAAQL,EAAO3lC,EAAKnD,GAAIkpC,EAAGjpC,IAAMX,KAAKoiB,IAAIve,EAAKnD,GAAKkpC,EAAGjpC,MACtDH,IACXA,EAAM2T,EACN+2B,EAAOvqC,GAGTkqC,EAAKnqC,GAAKwqC,EACVpvB,EAAMovB,KAOP,IAHA,IAAI/vB,EAAM,GAGDsrB,GAFLmE,EAAM,GAEI,GAAGnE,EAAKnnC,EAAGmnC,IAExBtrB,EAAIsrB,GAAMoD,EAAQtuB,EAAKyvB,EAAM,EAAG7vB,EAAIsrB,IAAO,EAC3CmE,EAAInE,GAAMmD,EAAGnD,GAId,GAAIoD,EAAO,CACV,IAAK,IAAIsB,EAAM,EAAGA,EAAM7rC,EAAG6rC,IAC1BvB,EAAGuB,GAAO,GAEX,IAAK,IAAI1iC,EAAK,EAAGA,EAAK1E,EAAK0E,IAQ1B,IAPA,IAEA2iC,EAAOjwB,EAFK0vB,EAAKpiC,IAIjB4iC,EAAOxnC,EAAK4E,GAGHm/B,EAAI,EAAGA,EAAIoD,EAAMpD,IACzBwD,EAAKxD,IAAMyD,EAAKzD,GAIlBkD,GAAO,EACP,IAAK,IAAIQ,EAAM,EAAGA,EAAMhsC,EAAGgsC,IAAO,CAUjC,IATA,IAAIC,EAAM3B,EAAG0B,GAEbE,EAAOrwB,EAAImwB,GAEXG,EAAOb,EAAIU,GAEXI,EAAK5vB,EAAMwvB,GAGFK,EAAK,EAAGA,EAAKX,EAAMW,IAC3BJ,EAAII,GAAMH,EAAKG,GAAMD,GAAM,EAI5B,GAAIZ,EACH,IAAK,IAAIc,EAAM,EAAGA,EAAMZ,EAAMY,IAC7B,GAAIH,EAAKG,IAAQL,EAAIK,GAAM,CAC1Bd,GAAO,EACP,YAOA,CAEH,IAAK,IAAI9K,EAAM,EAAGA,EAAMj8B,EAAKi8B,IAAO,CAEnC7kB,EADY0vB,EAAK7K,KACHn8B,EAAKm8B,GAGpB,IAAK,IAAI6L,EAAM,EAAGA,EAAMvsC,EAAGusC,IAC1BjC,EAAGiC,GAAO1wB,EAAI0wB,GAAO/vB,EAAM+vB,IAAQ,EAGpCf,GAAO,EACP,IAAK,IAAIgB,EAAM,EAAGA,EAAMxsC,EAAGwsC,IAC1B,GAAIlB,EAAIkB,IAAQlC,EAAGkC,GAAM,CACxBhB,GAAO,EACP,OAKJA,EAAOA,KAAUC,GAAM,SACdD,GAEV,MAAO,CACNC,GA5IQ,IA4IEA,EACVzrC,EAAGA,EACHurC,KAAMA,EACNvvB,UAAWsuB,qFC1JE,MAAMmC,EACjBn/B,YAAY/I,EAAO,GAAIpE,EAAUG,GAK7B,GAJAwB,KAAKyC,KAAOA,EACZzC,KAAKzB,OAASyB,KAAKyC,KAAKlE,OACxByB,KAAK3B,QAAUA,EAEX2B,KAAKzB,OAAS,EACd,IAAK,IAAIe,GAAKU,KAAKzB,QAAU,GAAK,EAAGe,GAAK,EAAGA,IAAKU,KAAK4qC,MAAMtrC,GAIrE+C,KAAK9B,GACDP,KAAKyC,KAAKJ,KAAK9B,GACfP,KAAKzB,SACLyB,KAAK6qC,IAAI7qC,KAAKzB,OAAS,GAG3B6D,MACI,GAAoB,IAAhBpC,KAAKzB,OAAc,OAEvB,MAAMwS,EAAM/Q,KAAKyC,KAAK,GAChBuO,EAAShR,KAAKyC,KAAKL,MAQzB,OAPApC,KAAKzB,SAEDyB,KAAKzB,OAAS,IACdyB,KAAKyC,KAAK,GAAKuO,EACfhR,KAAK4qC,MAAM,IAGR75B,EAGXmC,OACI,OAAOlT,KAAKyC,KAAK,GAGrBooC,IAAIC,GACA,MAAM,KAACroC,EAAI,QAAEpE,GAAW2B,KAClBO,EAAOkC,EAAKqoC,GAElB,KAAOA,EAAM,GAAG,CACZ,MAAMvnC,EAAUunC,EAAM,GAAM,EACtBvX,EAAU9wB,EAAKc,GACrB,GAAIlF,EAAQkC,EAAMgzB,IAAY,EAAG,MACjC9wB,EAAKqoC,GAAOvX,EACZuX,EAAMvnC,EAGVd,EAAKqoC,GAAOvqC,EAGhBqqC,MAAME,GACF,MAAM,KAACroC,EAAI,QAAEpE,GAAW2B,KAClB+qC,EAAa/qC,KAAKzB,QAAU,EAC5BgC,EAAOkC,EAAKqoC,GAElB,KAAOA,EAAMC,GAAY,CACrB,IAAI5sC,EAAoB,GAAZ2sC,GAAO,GACfE,EAAOvoC,EAAKtE,GAChB,MAAMC,EAAQD,EAAO,EAMrB,GAJIC,EAAQ4B,KAAKzB,QAAUF,EAAQoE,EAAKrE,GAAQ4sC,GAAQ,IACpD7sC,EAAOC,EACP4sC,EAAOvoC,EAAKrE,IAEZC,EAAQ2sC,EAAMzqC,IAAS,EAAG,MAE9BkC,EAAKqoC,GAAOE,EACZF,EAAM3sC,EAGVsE,EAAKqoC,GAAOvqC,GAIpB,SAAS/B,EAAekB,EAAGC,GACvB,OAAOD,EAAIC,GAAK,EAAID,EAAIC,EAAI,EAAI,yBC7E0H,SAASN,GAAG,aAAa,SAAS2Q,KAAK,SAASvR,EAAEY,GAAGW,KAAKirC,QAAQ5rC,GAAG,GAAG,SAASC,EAAED,GAAGW,KAAKirC,QAAQ5rC,GAAG,GAAG,SAAS2iB,EAAE3iB,GAAGW,KAAKirC,QAAQ5rC,GAAG,GAAG,SAASuvB,KAAK,SAAS9vB,EAAEO,GAAG,OAAO,OAAOA,EAAE6rC,GAAG7rC,EAAE8rC,MAAM,SAASzrC,EAAEL,GAAG,OAAO,OAAOA,EAAE,KAAKA,EAAEkE,OAAO,SAASkjC,EAAEpnC,EAAE2Q,GAAG,OAAO3Q,IAAIA,EAAE8rC,MAAMn7B,GAAG,SAASjE,EAAE1M,GAAG,OAAO,OAAOA,EAAE,KAAKA,EAAElB,KAAK,SAASwU,EAAEtT,GAAG,OAAO,OAAOA,EAAE,KAAKA,EAAEjB,MAAM,SAAS4C,IAAIhB,KAAKorC,MAAM,KAAKprC,KAAKqrC,MAAM,EAAE,SAAS7E,KAAK,SAASrrB,IAAInb,KAAKsrC,OAAO,GAAGn7B,UAAU,aAAao7B,IAAIvrC,KAAKwrC,OAAOr7B,UAAU,IAAI,SAASnD,KAAK,SAAS4F,EAAEvT,GAAGW,KAAKirC,QAAQ5rC,GAAG,GAAG,SAAS+U,IAAIpU,KAAKsrC,OAAO,GAAG,SAASrkC,MAAM3E,WAAWoG,OAAOC,eAAe1B,MAAM3E,UAAU,OAAO,CAAC+N,cAAa,EAAGzH,MAAM,SAASvJ,GAAG,QAAG,IAASW,MAAM,OAAOA,KAAK,MAAM,IAAIwjB,UAAUxjB,KAAK,qBAAqB,IAAIgQ,EAAEtH,OAAO1I,MAAMvB,EAAEG,KAAKM,IAAIN,KAAKQ,IAAI4Q,EAAEzR,OAAO,kBAAkB,IAAI,EAAEe,EAAE,KAAK6Q,WAAUyZ,SAASxO,OAAOjL,UAAU,IAAI,KAAO,EAAE7Q,EAAEA,EAAE,EAAEV,KAAKM,IAAIT,EAAEa,EAAE,GAAGV,KAAKQ,IAAIE,EAAEb,GAAG,IAAIujB,EAAE,KAAK7R,gBAAW,IAASA,UAAU,GAAGyZ,SAASxO,OAAOjL,UAAU,IAAI,KAAK,EAAE1R,EAAE,IAAIujB,EAAEA,EAAE,EAAEpjB,KAAKM,IAAIT,EAAE0R,UAAU,GAAG,GAAGvR,KAAKQ,IAAI4iB,EAAEvjB,GAAGa,EAAE0iB,GAAGhS,EAAE1Q,GAAGD,IAAIC,EAAE,OAAO0Q,GAAGkI,UAAS,IAAKkD,OAAOoO,SAASpO,OAAOoO,UAAU,SAASnqB,GAAG,MAAM,iBAAiBA,GAAGmqB,SAASnqB,IAAI+b,OAAOqwB,UAAUrwB,OAAOqwB,WAAW,SAASpsC,GAAG,MAAM,iBAAiBA,GAAGmqB,SAASnqB,IAAIT,KAAKO,MAAME,KAAKA,GAAG+b,OAAOuO,WAAWvO,OAAOuO,YAAYA,WAAWvO,OAAO3S,MAAM2S,OAAO3S,OAAO,SAASpJ,GAAG,OAAOA,GAAGA,GAAGT,KAAK8sC,MAAM9sC,KAAK8sC,OAAO,SAASrsC,GAAG,OAAOA,EAAE,EAAET,KAAKuB,KAAKd,GAAGT,KAAKO,MAAME,IAAI,IAAIuY,EAAE,aAAaA,EAAEtV,UAAUqpC,YAAY,WAAW,MAAM,IAAI/zB,EAAEtV,UAAUspC,SAAS,WAAW,OAAOh0B,GAAGA,EAAEtV,UAAUupC,oBAAoB,SAASxsC,EAAE2Q,EAAEvR,GAAG,OAAOG,KAAKoiB,IAAI3hB,EAAE2Q,IAAIvR,GAAG,IAAIC,EAAE,SAASW,GAAG,SAAS2Q,EAAEA,GAAG3Q,EAAEuQ,KAAK5P,KAAKgQ,GAAGhQ,KAAKqP,KAAK,2BAA2BrP,KAAKirC,QAAQj7B,EAAEhQ,KAAKmC,OAAM,IAAK9C,GAAG8C,MAAM,OAAO9C,IAAI2Q,EAAEgY,UAAU3oB,GAAG2Q,EAAE1N,UAAUoG,OAAOojC,OAAOzsC,GAAGA,EAAEiD,WAAW0N,EAAE1N,UAAUkJ,YAAYwE,EAAEA,EAApN,CAAuNhJ,OAAOurB,EAAE,aAAawV,EAAE,CAAC1sB,UAAU,CAAChL,cAAa,IAAKkiB,EAAE9pB,MAAM,SAASpJ,GAAG,OAAO+b,OAAO3S,MAAMpJ,IAAIkzB,EAAEwZ,iBAAiB,SAAS1sC,GAAG,OAAOA,GAAGkzB,EAAEyZ,iBAAiB,SAAS3sC,GAAG,OAAOA,GAAGkzB,EAAE0Z,WAAW,SAAS5sC,GAAG,OAAO+b,OAAOoO,SAASnqB,IAAI0oC,EAAE1sB,UAAUuM,IAAI,WAAW,OAAOxM,OAAOC,WAAW3S,OAAOyP,iBAAiBoa,EAAEwV,GAAG,IAAIH,EAAE,aAAazzB,EAAE,aAAahQ,EAAE,aAAawjC,EAAE,SAAStoC,IAAI,GAAGW,KAAKmU,EAAE,KAAKnU,KAAKoU,EAAE,KAAKpU,KAAKrB,EAAE,KAAK,IAAIwR,UAAU5R,OAAOyB,KAAKmU,EAAE,EAAEnU,KAAKoU,EAAE,EAAEpU,KAAKrB,EAAEU,EAAE6sC,mBAAmB,GAAG,IAAI/7B,UAAU5R,OAAO,CAAC,IAAIyR,EAAEG,UAAU,GAAGnQ,KAAKmU,EAAEnE,EAAEmE,EAAEnU,KAAKoU,EAAEpE,EAAEoE,EAAEpU,KAAKrB,EAAEqR,EAAErR,OAAO,IAAIwR,UAAU5R,QAAQyB,KAAKmU,EAAEhE,UAAU,GAAGnQ,KAAKoU,EAAEjE,UAAU,GAAGnQ,KAAKrB,EAAEU,EAAE6sC,eAAe,IAAI/7B,UAAU5R,SAASyB,KAAKmU,EAAEhE,UAAU,GAAGnQ,KAAKoU,EAAEjE,UAAU,GAAGnQ,KAAKrB,EAAEwR,UAAU,KAAKg8B,EAAE,CAACC,sBAAsB,CAAC/7B,cAAa,GAAIg8B,iBAAiB,CAACh8B,cAAa,GAAI67B,cAAc,CAAC77B,cAAa,GAAIi8B,EAAE,CAACj8B,cAAa,GAAIk8B,EAAE,CAACl8B,cAAa,GAAIm8B,EAAE,CAACn8B,cAAa,IAAKs3B,EAAErlC,UAAUmqC,YAAY,SAASptC,EAAE2Q,GAAG,OAAO3Q,GAAG,KAAKsoC,EAAE2E,EAAEtsC,KAAKmU,EAAEnE,EAAE,MAAM,KAAK23B,EAAE4E,EAAEvsC,KAAKoU,EAAEpE,EAAE,MAAM,KAAK23B,EAAE6E,EAAExsC,KAAKrB,EAAEqR,EAAE,MAAM,QAAQ,MAAM,IAAItR,EAAE,2BAA2BW,KAAKsoC,EAAErlC,UAAUoqC,SAAS,WAAW,GAAG,IAAIv8B,UAAU5R,OAAO,CAAC,IAAIc,EAAE8Q,UAAU,GAAG,OAAOnQ,KAAKmU,IAAI9U,EAAE8U,GAAGnU,KAAKoU,IAAI/U,EAAE+U,EAAE,GAAG,IAAIjE,UAAU5R,OAAO,CAAC,IAAIyR,EAAEG,UAAU,GAAG1R,EAAE0R,UAAU,GAAG,QAAQyH,EAAEi0B,oBAAoB7rC,KAAKmU,EAAEnE,EAAEmE,EAAE1V,MAAMmZ,EAAEi0B,oBAAoB7rC,KAAKoU,EAAEpE,EAAEoE,EAAE3V,KAAKkpC,EAAErlC,UAAUqqC,YAAY,SAASttC,GAAG,OAAOA,GAAG,KAAKsoC,EAAE2E,EAAE,OAAOtsC,KAAKmU,EAAE,KAAKwzB,EAAE4E,EAAE,OAAOvsC,KAAKoU,EAAE,KAAKuzB,EAAE6E,EAAE,OAAOxsC,KAAKrB,EAAE,MAAM,IAAID,EAAE,2BAA2BW,IAAIsoC,EAAErlC,UAAUsqC,SAAS,SAASvtC,GAAG,OAAOW,KAAKmU,IAAI9U,EAAE8U,GAAGnU,KAAKoU,IAAI/U,EAAE+U,IAAIpU,KAAKrB,IAAIU,EAAEV,GAAG4zB,EAAE9pB,MAAMzI,KAAKrB,KAAK4zB,EAAE9pB,MAAMpJ,EAAEV,IAAIgpC,EAAErlC,UAAUoc,OAAO,SAASrf,GAAG,OAAOA,aAAasoC,GAAG3nC,KAAK0sC,SAASrtC,IAAIsoC,EAAErlC,UAAUuqC,SAAS,SAASxtC,EAAE2Q,GAAG,OAAO4H,EAAEi0B,oBAAoB7rC,KAAKrB,EAAEU,EAAEV,EAAEqR,IAAI23B,EAAErlC,UAAUwqC,UAAU,SAASztC,GAAG,IAAI2Q,EAAE3Q,EAAE,OAAOW,KAAKmU,EAAEnE,EAAEmE,GAAG,EAAEnU,KAAKmU,EAAEnE,EAAEmE,EAAE,EAAEnU,KAAKoU,EAAEpE,EAAEoE,GAAG,EAAEpU,KAAKoU,EAAEpE,EAAEoE,EAAE,EAAE,GAAGuzB,EAAErlC,UAAUyqC,MAAM,aAAapF,EAAErlC,UAAU6U,KAAK,WAAW,OAAO,IAAIwwB,EAAE3nC,OAAO2nC,EAAErlC,UAAUkV,SAAS,WAAW,MAAM,IAAIxX,KAAKmU,EAAE,KAAKnU,KAAKoU,EAAE,KAAKpU,KAAKrB,EAAE,KAAKgpC,EAAErlC,UAAU0qC,WAAW,SAAS3tC,GAAG,IAAI2Q,EAAEhQ,KAAKmU,EAAE9U,EAAE8U,EAAE1V,EAAEuB,KAAKoU,EAAE/U,EAAE+U,EAAE9U,EAAEU,KAAKrB,EAAEU,EAAEV,EAAE,OAAOC,KAAKK,KAAK+Q,EAAEA,EAAEvR,EAAEA,EAAEa,EAAEA,IAAIqoC,EAAErlC,UAAU+F,SAAS,SAAShJ,GAAG,IAAI2Q,EAAEhQ,KAAKmU,EAAE9U,EAAE8U,EAAE1V,EAAEuB,KAAKoU,EAAE/U,EAAE+U,EAAE,OAAOxV,KAAKK,KAAK+Q,EAAEA,EAAEvR,EAAEA,IAAIkpC,EAAErlC,UAAU2qC,SAAS,WAAW,IAAI5tC,EAAE,GAAG,OAAmC,IAA5BA,EAAE,GAAGA,EAAEsoC,EAAEsF,SAASjtC,KAAKmU,IAAUwzB,EAAEsF,SAASjtC,KAAKoU,IAAIuzB,EAAErlC,UAAU4qC,cAAc,SAAS7tC,GAAGW,KAAKmU,EAAE9U,EAAE8U,EAAEnU,KAAKoU,EAAE/U,EAAE+U,EAAEpU,KAAKrB,EAAEU,EAAEV,GAAGgpC,EAAErlC,UAAUqpC,YAAY,WAAW,MAAM,CAAC/D,EAAEzzB,EAAEnE,IAAI23B,EAAErlC,UAAUspC,SAAS,WAAW,OAAOjE,GAAGA,EAAEsF,SAAS,WAAW,GAAG,IAAI98B,UAAU5R,OAAO,CAAC,IAAIc,EAAE8Q,UAAU,GAAGH,EAAEuiB,EAAEwZ,iBAAiB1sC,GAAG,OAAOT,KAAK8sC,OAAO17B,EAAEA,KAAK,MAAMm8B,EAAEC,sBAAsBxkB,IAAI,WAAW,OAAOsgB,GAAGiE,EAAEE,iBAAiBzkB,IAAI,WAAW,OAAO,oBAAoBukB,EAAED,cAActkB,IAAI,WAAW,OAAO2K,EAAE4a,KAAKhB,EAAEG,EAAE1kB,IAAI,WAAW,OAAO,GAAGukB,EAAEI,EAAE3kB,IAAI,WAAW,OAAO,GAAGukB,EAAEK,EAAE5kB,IAAI,WAAW,OAAO,GAAGlf,OAAOyP,iBAAiBwvB,EAAEwE,GAAG,IAAIjE,EAAE,SAAS7oC,GAAG,GAAGW,KAAKotC,kBAAkB,EAAE,IAAIj9B,UAAU5R,aAAa,GAAG,IAAI4R,UAAU5R,OAAO,CAAC,IAAIyR,EAAEG,UAAU,GAAG,GAAG,IAAIH,GAAG,IAAIA,EAAE,MAAM,IAAItR,EAAE,2CAA2CsB,KAAKotC,kBAAkBp9B,IAAIk4B,EAAE5lC,UAAUjE,QAAQ,SAASgB,EAAE2Q,GAAG,IAAIvR,EAAEY,EAAEC,EAAE0Q,EAAEgS,EAAEkmB,EAAE7pC,QAAQI,EAAE0V,EAAE7U,EAAE6U,GAAG,GAAG,IAAI6N,EAAE,OAAOA,EAAE,IAAI4M,EAAEsZ,EAAE7pC,QAAQI,EAAE2V,EAAE9U,EAAE8U,GAAG,OAAG,IAAIwa,EAASA,EAAK5uB,KAAKotC,mBAAmB,EAAS,EAASlF,EAAE7pC,QAAQI,EAAEE,EAAEW,EAAEX,IAAIupC,EAAE5lC,UAAUqpC,YAAY,WAAW,MAAM,CAACxnC,IAAI+jC,EAAE5lC,UAAUspC,SAAS,WAAW,OAAO1D,GAAGA,EAAE7pC,QAAQ,SAASgB,EAAE2Q,GAAG,OAAO3Q,EAAE2Q,GAAG,EAAE3Q,EAAE2Q,EAAE,EAAEuiB,EAAE9pB,MAAMpJ,GAAGkzB,EAAE9pB,MAAMuH,GAAG,GAAG,EAAEuiB,EAAE9pB,MAAMuH,GAAG,EAAE,GAAG,IAAIrQ,EAAE,aAAaA,EAAE2C,UAAUwpC,OAAO,aAAansC,EAAE2C,UAAUqpC,YAAY,WAAW,MAAM,IAAIhsC,EAAE2C,UAAUspC,SAAS,WAAW,OAAOjsC,GAAG,IAAI2nC,EAAE,aAAaG,EAAE,CAAC4F,SAAS,CAACh9B,cAAa,GAAIi9B,SAAS,CAACj9B,cAAa,GAAIk9B,SAAS,CAACl9B,cAAa,GAAIm9B,KAAK,CAACn9B,cAAa,IAAKi3B,EAAEhlC,UAAUqpC,YAAY,WAAW,MAAM,IAAIrE,EAAEhlC,UAAUspC,SAAS,WAAW,OAAOtE,GAAGA,EAAEmG,iBAAiB,SAASpuC,GAAG,OAAOA,GAAG,KAAKioC,EAAEiG,SAAS,MAAM,IAAI,KAAKjG,EAAEgG,SAAS,MAAM,IAAI,KAAKhG,EAAE+F,SAAS,MAAM,IAAI,KAAK/F,EAAEkG,KAAK,MAAM,IAAI,MAAM,IAAI9uC,EAAE,2BAA2BW,IAAIooC,EAAE4F,SAASzlB,IAAI,WAAW,OAAO,GAAG6f,EAAE6F,SAAS1lB,IAAI,WAAW,OAAO,GAAG6f,EAAE8F,SAAS3lB,IAAI,WAAW,OAAO,GAAG6f,EAAE+F,KAAK5lB,IAAI,WAAW,OAAO,GAAGlf,OAAOyP,iBAAiBmvB,EAAEG,GAAG,IAAIiG,EAAE,SAASruC,EAAE2Q,GAAG,OAAO3Q,EAAEssC,aAAatsC,EAAEssC,cAAcjrC,QAAQsP,IAAI,GAAG29B,EAAE,aAAa9zB,EAAE,CAAC+zB,OAAO,CAACv9B,cAAa,IAAKs9B,EAAErrC,UAAUqpC,YAAY,WAAW,MAAM,IAAIgC,EAAErrC,UAAUspC,SAAS,WAAW,OAAO+B,GAAGA,EAAEE,MAAM,SAASxuC,GAAG,IAAI2Q,EAAEpR,KAAKC,IAAIQ,GAAG,OAAOkzB,EAAE0Z,WAAWj8B,IAAKuiB,EAAE9pB,MAAMuH,GAAVA,EAAeA,EAAE29B,EAAEC,QAAQD,EAAEvuC,IAAI,SAASC,EAAE2Q,EAAEvR,EAAEa,GAAG,IAAI0iB,EAAE3iB,EAAE,OAAO2Q,EAAEgS,IAAIA,EAAEhS,GAAGvR,EAAEujB,IAAIA,EAAEvjB,GAAGa,EAAE0iB,IAAIA,EAAE1iB,GAAG0iB,GAAG2rB,EAAEG,MAAM,WAAW,GAAG,iBAAiB39B,UAAU,IAAI,iBAAiBA,UAAU,IAAI,iBAAiBA,UAAU,GAAG,CAAC,IAAI9Q,EAAE8Q,UAAU,GAAGH,EAAEG,UAAU,GAAG1R,EAAE0R,UAAU,GAAG,OAAO9Q,EAAE2Q,EAAEA,EAAE3Q,EAAEZ,EAAEA,EAAEY,EAAE,GAAG+b,OAAOqwB,UAAUt7B,UAAU,KAAKiL,OAAOqwB,UAAUt7B,UAAU,KAAKiL,OAAOqwB,UAAUt7B,UAAU,IAAI,CAAC,IAAI7Q,EAAE6Q,UAAU,GAAG6R,EAAE7R,UAAU,GAAGye,EAAEze,UAAU,GAAG,OAAO7Q,EAAE0iB,EAAEA,EAAE1iB,EAAEsvB,EAAEA,EAAEtvB,IAAIquC,EAAEI,KAAK,SAAS1uC,EAAE2Q,GAAG,OAAO3Q,EAAE,EAAE2Q,IAAI3Q,EAAE2Q,EAAE3Q,EAAE2Q,GAAG29B,EAAEzuC,IAAI,WAAW,GAAG,IAAIiR,UAAU5R,OAAO,CAAC,IAAmByR,EAAEG,UAAU,GAAG1R,EAAE0R,UAAU,GAAG7Q,EAA3C6Q,UAAU,GAAqC,OAAOH,EAAE1Q,IAAIA,EAAE0Q,GAAGvR,EAAEa,IAAIA,EAAEb,GAAGa,EAAE,GAAG,IAAI6Q,UAAU5R,OAAO,CAAC,IAAmBqwB,EAAEze,UAAU,GAAGrR,EAAEqR,UAAU,GAAGzQ,EAAEyQ,UAAU,GAAGs2B,EAA1Dt2B,UAAU,GAAoD,OAAOye,EAAE6X,IAAIA,EAAE7X,GAAG9vB,EAAE2nC,IAAIA,EAAE3nC,GAAGY,EAAE+mC,IAAIA,EAAE/mC,GAAG+mC,IAAIkH,EAAEK,QAAQ,SAAS3uC,EAAE2Q,GAAG,OAAO3Q,EAAE2Q,GAAG,GAAG6J,EAAE+zB,OAAOhmB,IAAI,WAAW,OAAOhpB,KAAKC,IAAI,KAAK6J,OAAOyP,iBAAiBw1B,EAAE9zB,GAAG,IAAItE,EAAE,SAASlW,GAAGW,KAAKixB,IAAI5xB,GAAGkW,EAAEjT,UAAU2rC,OAAO,SAAS5uC,GAAGW,KAAKixB,KAAK5xB,GAAGkW,EAAEjT,UAAU4rC,UAAU,SAAS7uC,EAAE2Q,GAAGhQ,KAAKixB,IAAIjxB,KAAKixB,IAAIkd,OAAO,EAAE9uC,GAAG2Q,EAAEhQ,KAAKixB,IAAIkd,OAAO9uC,EAAE,IAAIkW,EAAEjT,UAAUkV,SAAS,SAASnY,GAAG,OAAOW,KAAKixB,KAAK,IAAI7sB,EAAE,SAAS/E,GAAGW,KAAK4I,MAAMvJ,GAAG+E,EAAE9B,UAAU8rC,SAAS,WAAW,OAAOpuC,KAAK4I,OAAOxE,EAAE9B,UAAUwqC,UAAU,SAASztC,GAAG,OAAOW,KAAK4I,MAAMvJ,GAAG,EAAEW,KAAK4I,MAAMvJ,EAAE,EAAE,GAAG+E,EAAEqE,MAAM,SAASpJ,GAAG,OAAO+b,OAAO3S,MAAMpJ,IAAI,IAAIkoC,EAAE,aAAaA,EAAE8G,aAAa,SAAShvC,GAAG,OAAOA,GAAG,IAAIA,GAAG,GAAG,MAAMA,GAAGkoC,EAAE+G,YAAY,SAASjvC,GAAG,OAAOA,EAAEivC,eAAe,IAAI9G,EAAE,SAASnoC,IAAI,GAAGW,KAAKuuC,IAAI,EAAEvuC,KAAKwuC,IAAI,EAAE,IAAIr+B,UAAU5R,OAAOyB,KAAKma,KAAK,QAAQ,GAAG,IAAIhK,UAAU5R,OAAQ,GAAG,iBAAiB4R,UAAU,GAAG,CAAC,IAAIH,EAAEG,UAAU,GAAGnQ,KAAKma,KAAKnK,QAAQ,GAAGG,UAAU,aAAa9Q,EAAE,CAAC,IAAIZ,EAAE0R,UAAU,GAAGnQ,KAAKma,KAAK1b,OAAW,iBAAiB0R,UAAU,IAAuB9Q,EAAEuQ,KAAK5P,KAAKX,EAAEovC,MAA3Bt+B,UAAU,UAAiC,GAAG,IAAIA,UAAU5R,OAAO,CAAC,IAAIyjB,EAAE7R,UAAU,GAAGye,EAAEze,UAAU,GAAGnQ,KAAKma,KAAK6H,EAAE4M,KAAKiZ,EAAE,CAACt/B,GAAG,CAAC8H,cAAa,GAAIq+B,OAAO,CAACr+B,cAAa,GAAIs+B,KAAK,CAACt+B,cAAa,GAAIu3B,EAAE,CAACv3B,cAAa,GAAI88B,IAAI,CAAC98B,cAAa,GAAIu+B,IAAI,CAACv+B,cAAa,GAAIw+B,MAAM,CAACx+B,cAAa,GAAIy+B,iBAAiB,CAACz+B,cAAa,GAAI0+B,IAAI,CAAC1+B,cAAa,GAAI2+B,IAAI,CAAC3+B,cAAa,GAAI4+B,sBAAsB,CAAC5+B,cAAa,GAAI6+B,aAAa,CAAC7+B,cAAa,IAAKm3B,EAAEllC,UAAU6sC,GAAG,SAAS9vC,GAAG,OAAOW,KAAKuuC,IAAIlvC,EAAEkvC,KAAKvuC,KAAKuuC,MAAMlvC,EAAEkvC,MAAMvuC,KAAKwuC,KAAKnvC,EAAEmvC,KAAKhH,EAAEllC,UAAU8sC,yBAAyB,SAAS/vC,EAAE2Q,GAAG,IAAIvR,EAAEuB,KAAKghB,MAAM1hB,EAAEkoC,EAAE6H,UAAU5wC,EAAE8vC,KAAKvsB,EAAEwlB,EAAEuH,IAAI1qC,IAAI/E,IAAIb,EAAEA,EAAE6wC,OAAOttB,IAAIutB,GAAG/H,EAAEuH,MAAMtwC,EAAEA,EAAE6wC,OAAO9H,EAAEuH,KAAKzvC,GAAG,GAAGb,EAAE+wC,GAAGhI,EAAEwH,OAAOvwC,EAAEA,EAAEgxC,SAASjI,EAAEuH,KAAKzvC,GAAG,GAAG,IAAI,IAAIsvB,EAAEtvB,EAAE,EAAER,EAAE,IAAIyW,EAAE7V,EAAE8nC,EAAEsH,iBAAiB,EAAErI,EAAE,EAAEA,GAAG/mC,EAAE+mC,IAAI,CAACpnC,GAAGonC,IAAI7X,GAAG9vB,EAAEmvC,OAAO,KAAK,IAAIliC,EAAEnN,KAAK8sC,MAAMjtC,EAAE8vC,KAAK,GAAGxiC,EAAE,EAAE,MAAM,IAAI4G,GAAE,EAAG3R,EAAE,EAAE+K,EAAE,GAAG4G,GAAE,EAAG3R,EAAE,KAAKA,EAAE,IAAI+K,EAAEjN,EAAEmvC,OAAOjtC,GAAGvC,EAAEA,EAAEixC,SAASlI,EAAE3Z,QAAQ9hB,IAAI0jC,SAASjI,EAAEuH,KAAKp8B,GAAGlU,EAAEkxC,QAAQnI,EAAEuH,KAAK,IAAIvI,GAAE,EAAGrrB,EAAEqsB,EAAE6H,UAAU5wC,EAAE8vC,KAAK,GAAGpzB,EAAE,GAAGvc,KAAKoiB,IAAI7F,IAAIzb,EAAE+mC,IAAID,GAAE,IAAKA,EAAE,MAAM,OAAOx2B,EAAE,GAAG1Q,EAAER,EAAE0Y,YAAYgwB,EAAEllC,UAAUstC,IAAI,WAAW,OAAO5vC,KAAKyvC,SAASzvC,OAAOwnC,EAAEllC,UAAUutC,YAAY,WAAW,OAAO7vC,KAAKuuC,IAAIvuC,KAAKwuC,KAAKhH,EAAEllC,UAAUotC,SAAS,WAAW,GAAGv/B,UAAU,aAAaq3B,EAAE,CAAC,IAAInoC,EAAE8Q,UAAU,GAAG,OAAOnQ,KAAKozB,IAAI/zB,EAAEywC,UAAU,GAAG,iBAAiB3/B,UAAU,GAAG,CAAC,IAAIH,EAAEG,UAAU,GAAG,OAAOnQ,KAAKozB,KAAKpjB,KAAKw3B,EAAEllC,UAAUoc,OAAO,WAAW,GAAG,IAAIvO,UAAU5R,OAAO,CAAC,IAAIc,EAAE8Q,UAAU,GAAG,OAAOnQ,KAAKuuC,MAAMlvC,EAAEkvC,KAAKvuC,KAAKwuC,MAAMnvC,EAAEmvC,MAAMhH,EAAEllC,UAAUytC,OAAO,WAAW,OAAO,IAAI/vC,KAAKuuC,KAAK,IAAIvuC,KAAKwuC,KAAKhH,EAAEllC,UAAU0tC,aAAa,WAAW,GAAG7/B,UAAU,aAAaq3B,EAAE,CAAC,IAAInoC,EAAE8Q,UAAU,GAAG,OAAOnQ,KAAKyI,QAAQzI,KAAKA,KAAK2vC,SAAStwC,EAAEkvC,KAAKlvC,EAAEmvC,KAAK,GAAG,iBAAiBr+B,UAAU,GAAG,CAAC,IAAIH,EAAEG,UAAU,GAAG,OAAOnQ,KAAKyI,QAAQzI,KAAKA,KAAK2vC,SAAS3/B,EAAE,KAAKw3B,EAAEllC,UAAU2tC,uBAAuB,WAAW,OAAOjwC,KAAK+vC,SAAS,MAAM/vC,KAAKyI,QAAQ,OAAO,MAAM++B,EAAEllC,UAAUlD,IAAI,SAASC,GAAG,OAAOW,KAAKmvC,GAAG9vC,GAAGW,KAAKX,GAAGmoC,EAAEllC,UAAU4tC,WAAW,WAAW,GAAG,IAAI//B,UAAU5R,OAAO,CAAC,GAAG4R,UAAU,aAAaq3B,EAAE,CAAC,IAAInoC,EAAE8Q,UAAU,GAAG,OAAOnQ,KAAKkwC,WAAW7wC,EAAEkvC,IAAIlvC,EAAEmvC,KAAK,GAAG,iBAAiBr+B,UAAU,GAAG,CAAC,IAAIH,EAAEG,UAAU,GAAG,OAAOnQ,KAAKkwC,WAAWlgC,EAAE,SAAS,GAAG,IAAIG,UAAU5R,OAAO,CAAC,IAAIE,EAAE0R,UAAU,GAAG7Q,EAAE6Q,UAAU,GAAG6R,EAAE,KAAK4M,EAAE,KAAK9vB,EAAE,KAAKY,EAAE,KAAK+mC,EAAE,KAAK16B,EAAE,KAAK4G,EAAE,KAAK3R,EAAE,KAAK,OAAOylC,EAAEzmC,KAAKuuC,IAAI9vC,EAAoEuC,GAApCghB,GAA9BjW,EAAEy7B,EAAEqH,MAAMpI,IAAEzkB,EAAEjW,EAAE06B,KAAsC3nC,GAApCkC,EAAEwmC,EAAEqH,MAAMpwC,IAAcK,EAAEkC,EAAEvC,KAAEkU,EAAE8zB,EAAEhoC,GAAsBujB,GAAdtiB,EAAEjB,EAAEK,IAA5B8vB,EAAE6X,EAAEzkB,GAAwCljB,EAAE8vB,EAAElvB,EAAkCsB,EAAEylC,GAAlC16B,GAAG/L,KAAKuuC,IAAI57B,EAAE3R,EAAEhB,KAAKwuC,IAAI/H,EAAEnnC,GAAGb,GAAQuB,KAAKuuC,IAAIvtC,EAAEhB,KAAKwuC,IAAI/H,EAAEzlC,EAAE+K,EAAE/L,OAAOwnC,EAAEllC,UAAU6tC,KAAK,WAAW,MAAM,MAAMnwC,KAAKuuC,IAAI,KAAKvuC,KAAKwuC,IAAI,KAAKhH,EAAEllC,UAAUgtC,OAAO,WAAW,GAAGn/B,UAAU,aAAaq3B,EAAE,CAAC,IAAInoC,EAAE8Q,UAAU,GAAGH,EAAE,KAAKvR,EAAE,KAAKa,EAAE,KAAK0iB,EAAE,KAAK4M,EAAE,KAAK9vB,EAAE,KAAKY,EAAE,KAAK+mC,EAAE,KAAoK,OAA/JhoC,GAAGmwB,EAAE5uB,KAAKuuC,IAAIlvC,EAAEkvC,MAAMv+B,GAAGlR,EAAE0oC,EAAEqH,MAAMjgB,IAAI5e,EAAElR,EAAE8vB,IAAI6X,EAAEz2B,GAAG1Q,GAAGmnC,EAAEe,EAAEqH,MAAMxvC,EAAEkvC,MAAMjvC,EAAEmnC,EAAEpnC,EAAEkvC,OAAO7uC,EAAEkvB,EAAEvvB,EAAEkvC,KAAKv+B,GAAGgS,EAAE3iB,EAAEkvC,IAAIjvC,GAAGb,EAAEa,EAAEb,EAAEujB,EAAEljB,GAAGkB,KAAKuuC,IAAI7uC,EAAE+mC,EAAEzmC,KAAKwuC,IAAI5f,EAAEvvB,EAAEmvC,KAAKnvC,EAAEkvC,IAAW,IAAI/G,EAAEf,EAAE7X,EAAE9vB,EAAE8vB,EAAE6X,EAAE3nC,GAAG,GAAG,iBAAiBqR,UAAU,GAAG,CAAC,IAAIpE,EAAEoE,UAAU,GAAG,OAAOoiB,EAAE9pB,MAAMsD,GAAGy7B,EAAE4I,YAAY5I,EAAErwB,KAAKnX,MAAMkwC,WAAWnkC,EAAE,KAAKy7B,EAAEllC,UAAU+tC,GAAG,SAAShxC,GAAG,OAAOW,KAAKuuC,IAAIlvC,EAAEkvC,KAAKvuC,KAAKuuC,MAAMlvC,EAAEkvC,MAAMvuC,KAAKwuC,KAAKnvC,EAAEmvC,KAAKhH,EAAEllC,UAAU+B,IAAI,SAAShF,GAAG,GAAG,IAAIA,EAAE,OAAOmoC,EAAE3Z,QAAQ,GAAG,IAAI7d,EAAE,IAAIw3B,EAAExnC,MAAMvB,EAAE+oC,EAAE3Z,QAAQ,GAAGvuB,EAAEV,KAAKoiB,IAAI3hB,GAAG,GAAGC,EAAE,EAAE,KAAKA,EAAE,GAAGA,EAAE,GAAG,GAAGb,EAAE6xC,aAAatgC,IAAI1Q,GAAG,GAAG,IAAI0Q,EAAEA,EAAE4/B,YAAYnxC,EAAEuR,EAAE,OAAO3Q,EAAE,EAAEZ,EAAE8xC,aAAa9xC,GAAG+oC,EAAEllC,UAAUnC,KAAK,WAAW,GAAGH,KAAKyI,QAAQ,OAAO++B,EAAE2F,IAAI,IAAI9tC,EAAET,KAAKuB,KAAKH,KAAKuuC,KAAKv+B,EAAE,EAAE,OAAO3Q,IAAIW,KAAKuuC,MAAMv+B,EAAEpR,KAAKuB,KAAKH,KAAKwuC,MAAM,IAAIhH,EAAEnoC,EAAE2Q,IAAIw3B,EAAEllC,UAAUwqC,UAAU,SAASztC,GAAG,IAAI2Q,EAAE3Q,EAAE,OAAOW,KAAKuuC,IAAIv+B,EAAEu+B,KAAK,EAAEvuC,KAAKuuC,IAAIv+B,EAAEu+B,IAAI,EAAEvuC,KAAKwuC,IAAIx+B,EAAEw+B,KAAK,EAAExuC,KAAKwuC,IAAIx+B,EAAEw+B,IAAI,EAAE,GAAGhH,EAAEllC,UAAUkuC,KAAK,WAAW,OAAGxwC,KAAKyI,QAAezI,KAAYA,KAAKozB,IAAI,IAAIj0B,SAASqoC,EAAEllC,UAAUmuC,SAAS,WAAW,GAAGtgC,UAAU,aAAaq3B,EAAE,CAAC,IAAInoC,EAAE8Q,UAAU,GAAG,OAAOnQ,KAAKma,KAAK9a,GAAGW,KAAK,GAAG,iBAAiBmQ,UAAU,GAAG,CAAC,IAAIH,EAAEG,UAAU,GAAG,OAAOnQ,KAAKma,KAAKnK,GAAGhQ,OAAOwnC,EAAEllC,UAAUpD,IAAI,SAASG,GAAG,OAAOW,KAAKqwC,GAAGhxC,GAAGW,KAAKX,GAAGmoC,EAAEllC,UAAUrD,KAAK,WAAW,GAAGe,KAAK+vC,SAAS,OAAOvI,EAAE3Z,QAAQ,GAAG,GAAG7tB,KAAK0wC,aAAa,OAAOlJ,EAAE2F,IAAI,IAAI9tC,EAAE,EAAET,KAAKK,KAAKe,KAAKuuC,KAAKv+B,EAAEhQ,KAAKuuC,IAAIlvC,EAAEZ,EAAE+oC,EAAE3Z,QAAQ7d,GAAG1Q,EAAEU,KAAK0vC,SAASjxC,EAAEmxC,OAAOrB,KAAK,GAAGlvC,GAAG,OAAOZ,EAAE20B,IAAI9zB,IAAIkoC,EAAEllC,UAAUqtC,QAAQ,WAAW,GAAG,IAAIx/B,UAAU5R,OAAO,CAAC,GAAG4R,UAAU,aAAaq3B,EAAE,CAAC,IAAInoC,EAAE8Q,UAAU,GAAG,OAAOnQ,KAAK2vC,QAAQtwC,EAAEkvC,IAAIlvC,EAAEmvC,KAAK,GAAG,iBAAiBr+B,UAAU,GAAG,CAAC,IAAIH,EAAEG,UAAU,GAAG1R,EAAE,KAAKa,EAAE,KAAK0iB,EAAE,KAAK4M,EAAE,KAAK9vB,EAAE,KAAKY,EAAE,KAAK,OAAiCkvB,GAA1B5M,EAAEhiB,KAAKuuC,IAAIv+B,IAAElR,EAAEkjB,EAAEhiB,KAAKuuC,KAAgDjvC,GAAnBI,GAAnBkvB,EAAE5e,EAAElR,GAAGkB,KAAKuuC,IAAI3f,IAAO5uB,KAAKwuC,MAAexsB,GAAXvjB,EAAEujB,EAAEtiB,IAAYM,KAAKuuC,IAAI9vC,EAAEa,EAAEU,KAAKwuC,IAAIlvC,GAAGb,EAAEuB,KAAKuuC,KAAKvuC,WAAW,GAAG,IAAImQ,UAAU5R,OAAO,CAAC,IAAIkoC,EAAEt2B,UAAU,GAAGpE,EAAEoE,UAAU,GAAGwC,EAAE,KAAK3R,EAAE,KAAKwlC,EAAE,KAAKrrB,EAAE,KAAKnO,EAAE,KAAK4F,EAAE,KAAKwB,EAAE,KAAK+G,EAAEnb,KAAKuuC,IAAI9H,EAAEzlC,EAAEhB,KAAKwuC,IAAIziC,EAAEiB,EAAEmO,GAAGvI,EAAEuI,EAAEnb,KAAKuuC,KAAK/H,EAAExlC,GAAGoT,EAAEpT,EAAEhB,KAAKwuC,KAAK,IAAI52B,GAAGjF,EAAEwI,GAAGvI,GAAG5F,EAAEy5B,EAAE7zB,GAAG5S,KAAKuuC,IAAIvhC,IAAIhM,KAAK4R,GAAG4zB,EAAEz6B,EAAEqI,GAAGpU,KAAKwuC,IAAIhI,KAAK5zB,GAAGuI,EAAExI,KAAKjU,EAAEkU,GAAGD,EAAEiF,GAAG,OAAO5X,KAAKuuC,IAAI32B,EAAE5X,KAAKwuC,IAAI9vC,EAAEsB,OAAOwnC,EAAEllC,UAAUguC,aAAa,WAAW,GAAG,IAAIngC,UAAU5R,OAAO,CAAC,GAAG4R,UAAU,aAAaq3B,EAAE,CAAC,IAAInoC,EAAE8Q,UAAU,GAAG,OAAOnQ,KAAKswC,aAAajxC,EAAEkvC,IAAIlvC,EAAEmvC,KAAK,GAAG,iBAAiBr+B,UAAU,GAAG,CAAC,IAAIH,EAAEG,UAAU,GAAG,OAAOnQ,KAAKswC,aAAatgC,EAAE,SAAS,GAAG,IAAIG,UAAU5R,OAAO,CAAC,IAAIE,EAAE0R,UAAU,GAAG7Q,EAAE6Q,UAAU,GAAG6R,EAAE,KAAK4M,EAAE,KAAK9vB,EAAE,KAAKY,EAAE,KAAK+mC,EAAE,KAAK16B,EAAE,KAAKiW,GAAGykB,EAAEe,EAAEqH,MAAM7uC,KAAKuuC,KAAKvuC,KAAKuuC,IAAIxiC,EAAEy7B,EAAEqH,MAAMpwC,EAAEujB,EAAEykB,EAAEzkB,EAAE4M,EAAE5uB,KAAKuuC,IAAIvsB,EAAEljB,EAAEiN,EAAEtN,EAAE,IAAIkU,GAAG8zB,EAAEzmC,KAAKuuC,IAAI9vC,IAAIsN,EAAEiW,GAAGljB,EAAEiN,EAAEjN,GAAG2nC,EAAEzkB,GAAGtiB,EAAEjB,EAAEK,GAAG8vB,EAAE9vB,EAAE8vB,EAAElvB,GAAGM,KAAKuuC,IAAIjvC,EAAEU,KAAKwuC,IAAI/vC,IAAIuC,EAAE+K,GAAGiW,EAAEykB,EAAE9zB,GAAG,OAAO3S,KAAKuuC,IAAI57B,EAAE3S,KAAKwuC,IAAIxtC,EAAEhB,OAAOwnC,EAAEllC,UAAUquC,QAAQ,WAAW,OAAO3wC,KAAKswC,aAAatwC,OAAOwnC,EAAEllC,UAAUnD,MAAM,WAAW,GAAGa,KAAKyI,QAAQ,OAAO++B,EAAE2F,IAAI,IAAI9tC,EAAET,KAAKO,MAAMa,KAAKuuC,KAAKv+B,EAAE,EAAE,OAAO3Q,IAAIW,KAAKuuC,MAAMv+B,EAAEpR,KAAKO,MAAMa,KAAKwuC,MAAM,IAAIhH,EAAEnoC,EAAE2Q,IAAIw3B,EAAEllC,UAAUwtC,OAAO,WAAW,OAAO9vC,KAAKyI,QAAQzI,KAAK,IAAIwnC,GAAGxnC,KAAKuuC,KAAKvuC,KAAKwuC,MAAMhH,EAAEllC,UAAUyqC,MAAM,aAAavF,EAAEllC,UAAUmtC,SAAS,WAAW,GAAGt/B,UAAU,aAAaq3B,EAAE,CAAC,IAAInoC,EAAE8Q,UAAU,GAAG,OAAO9Q,EAAEoJ,QAAQ++B,EAAE4I,YAAY5I,EAAErwB,KAAKnX,MAAMswC,aAAajxC,GAAG,GAAG,iBAAiB8Q,UAAU,GAAG,CAAC,IAAIH,EAAEG,UAAU,GAAG,OAAOoiB,EAAE9pB,MAAMuH,GAAGw3B,EAAE4I,YAAY5I,EAAErwB,KAAKnX,MAAMswC,aAAatgC,EAAE,KAAKw3B,EAAEllC,UAAUmG,MAAM,WAAW,OAAO8pB,EAAE9pB,MAAMzI,KAAKuuC,MAAM/G,EAAEllC,UAAU8rC,SAAS,WAAW,OAAOxvC,KAAK8sC,MAAM1rC,KAAKuuC,MAAM/G,EAAEllC,UAAUkV,SAAS,WAAW,IAAInY,EAAEmoC,EAAE6H,UAAUrvC,KAAKuuC,KAAK,OAAOlvC,IAAI,GAAGA,GAAG,GAAGW,KAAK4wC,qBAAqB5wC,KAAK6wC,iBAAiBrJ,EAAEllC,UAAUsuC,mBAAmB,WAAW,IAAIvxC,EAAEW,KAAKiwC,yBAAyB,GAAG,OAAO5wC,EAAE,OAAOA,EAAE,IAAI2Q,EAAE,IAAI/I,MAAM,GAAG6pC,KAAK,MAAMryC,EAAEuB,KAAKovC,0BAAyB,EAAGp/B,GAAG1Q,EAAE0Q,EAAE,GAAG,EAAEgS,EAAEvjB,EAAE,GAAG,MAAMA,EAAEsyC,OAAO,GAAG/uB,EAAE,IAAIvjB,OAAO,GAAGa,EAAE,EAAE0iB,EAAE,KAAKwlB,EAAEwJ,aAAa,KAAK1xC,GAAGb,OAAO,IAAI,IAAIA,EAAEiC,QAAQ,KAAK,CAAC,IAAIkuB,EAAEtvB,EAAEb,EAAEF,OAAOyjB,EAAEvjB,EAAE+oC,EAAEwJ,aAAa,IAAIpiB,GAAG,KAAK,OAAO5uB,KAAK0wC,aAAa,IAAI1uB,EAAEA,GAAGwlB,EAAEllC,UAAUiuC,WAAW,WAAW,IAAIlxC,EAAE,KAAK2Q,EAAE,KAAKvR,EAAE,KAAKa,EAAE,KAAK0iB,EAAE,KAAK4M,EAAE,KAAK9vB,EAAE,KAAKY,EAAE,KAAKsQ,GAAGgS,EAAE,EAAEhiB,KAAKuuC,MAAMlvC,GAAGuvB,EAAE4Y,EAAEqH,MAAM7sB,IAAI3iB,EAAEuvB,EAAE5M,IAAIvjB,GAAGiB,EAAE8nC,EAAEqH,MAAM7uC,KAAKuuC,KAAKvuC,KAAKuuC,IAAI,IAAI9H,EAAEzkB,GAAG4M,GAAG,GAAG9vB,EAAEkjB,EAAEhiB,KAAKuuC,MAAM7uC,EAAEL,GAAGZ,EAAEiB,EAAEjB,GAAGK,EAAEO,GAAGC,EAAEU,KAAKuuC,IAAI9vC,GAAGuR,EAAEvR,EAAEuR,EAAE1Q,GAAG0iB,EAAEhiB,KAAKwuC,KAAKxuC,KAAKuuC,KAAK,OAAO,IAAI/G,EAAEf,EAAEzkB,EAAEykB,EAAE7X,IAAI4Y,EAAEllC,UAAUuuC,cAAc,WAAW,GAAG7wC,KAAK+vC,SAAS,OAAOvI,EAAE0H,aAAa,IAAI7vC,EAAEW,KAAKiwC,yBAAyB,GAAG,OAAO5wC,EAAE,OAAOA,EAAE,IAAI2Q,EAAE,IAAI/I,MAAM,GAAG6pC,KAAK,MAAMryC,EAAEuB,KAAKovC,0BAAyB,EAAGp/B,GAAG1Q,EAAEkoC,EAAEyH,sBAAsBj/B,EAAE,GAAG,GAAG,MAAMvR,EAAEsyC,OAAO,GAAG,MAAM,IAAI/pC,MAAM,uBAAuBvI,GAAG,IAAIujB,EAAE,GAAGvjB,EAAEF,OAAO,IAAIyjB,EAAEvjB,EAAEwyC,UAAU,IAAI,IAAIriB,EAAEnwB,EAAEsyC,OAAO,GAAG,IAAI/uB,EAAE,OAAOhiB,KAAK0wC,aAAa,IAAI9hB,EAAEtvB,EAAEsvB,EAAEtvB,GAAGkoC,EAAEllC,UAAU0e,IAAI,WAAW,OAAOhhB,KAAKyI,QAAQ++B,EAAE2F,IAAIntC,KAAK0wC,aAAa1wC,KAAK8vC,SAAS,IAAItI,EAAExnC,OAAOwnC,EAAEllC,UAAU4uC,WAAW,WAAW,OAAOlxC,KAAKuuC,IAAI,GAAG,IAAIvuC,KAAKuuC,MAAMvuC,KAAKwuC,IAAI,GAAGhH,EAAEllC,UAAUktC,GAAG,SAASnwC,GAAG,OAAOW,KAAKuuC,IAAIlvC,EAAEkvC,KAAKvuC,KAAKuuC,MAAMlvC,EAAEkvC,MAAMvuC,KAAKwuC,IAAInvC,EAAEmvC,KAAKhH,EAAEllC,UAAU8wB,IAAI,WAAW,GAAGjjB,UAAU,aAAaq3B,EAAE,CAAC,IAAInoC,EAAE8Q,UAAU,GAAG,OAAOq3B,EAAErwB,KAAKnX,MAAM2vC,QAAQtwC,GAAG,GAAG,iBAAiB8Q,UAAU,GAAG,CAAC,IAAIH,EAAEG,UAAU,GAAG,OAAOq3B,EAAErwB,KAAKnX,MAAM2vC,QAAQ3/B,KAAKw3B,EAAEllC,UAAU6X,KAAK,WAAW,GAAG,IAAIhK,UAAU5R,QAAQ,GAAG,iBAAiB4R,UAAU,GAAG,CAAC,IAAI9Q,EAAE8Q,UAAU,GAAGnQ,KAAKuuC,IAAIlvC,EAAEW,KAAKwuC,IAAI,OAAO,GAAGr+B,UAAU,aAAaq3B,EAAE,CAAC,IAAIx3B,EAAEG,UAAU,GAAGnQ,KAAKuuC,IAAIv+B,EAAEu+B,IAAIvuC,KAAKwuC,IAAIx+B,EAAEw+B,UAAU,GAAG,IAAIr+B,UAAU5R,OAAO,CAAC,IAAIE,EAAE0R,UAAU,GAAG7Q,EAAE6Q,UAAU,GAAGnQ,KAAKuuC,IAAI9vC,EAAEuB,KAAKwuC,IAAIlvC,IAAIkoC,EAAEllC,UAAUitC,GAAG,SAASlwC,GAAG,OAAOW,KAAKuuC,IAAIlvC,EAAEkvC,KAAKvuC,KAAKuuC,MAAMlvC,EAAEkvC,MAAMvuC,KAAKwuC,IAAInvC,EAAEmvC,KAAKhH,EAAEllC,UAAUouC,WAAW,WAAW,OAAO1wC,KAAKuuC,IAAI,GAAG,IAAIvuC,KAAKuuC,MAAMvuC,KAAKwuC,IAAI,GAAGhH,EAAEllC,UAAUopC,MAAM,WAAW,OAAO1rC,KAAKyI,QAAQ++B,EAAE2F,IAAIntC,KAAKkxC,aAAalxC,KAAKb,QAAQa,KAAKG,QAAQqnC,EAAEllC,UAAU6uC,OAAO,WAAW,OAAOnxC,KAAKuuC,IAAI,EAAE,EAAEvuC,KAAKuuC,IAAI,GAAG,EAAEvuC,KAAKwuC,IAAI,EAAE,EAAExuC,KAAKwuC,IAAI,GAAG,EAAE,GAAGhH,EAAEllC,UAAUqpC,YAAY,WAAW,MAAM,CAAC37B,EAAE43B,EAAEzzB,IAAIqzB,EAAEllC,UAAUspC,SAAS,WAAW,OAAOpE,GAAGA,EAAEoI,IAAI,SAASvwC,GAAG,OAAOmoC,EAAE3Z,QAAQxuB,GAAGixC,aAAajxC,IAAImoC,EAAE3Z,QAAQ,WAAW,GAAG,iBAAiB1d,UAAU,GAAG,CAAC,IAAI9Q,EAAE8Q,UAAU,GAAG,OAAOq3B,EAAEiH,MAAMpvC,GAAG,GAAG,iBAAiB8Q,UAAU,GAAuB,OAAO,IAAIq3B,EAAxBr3B,UAAU,KAAqBq3B,EAAEvoC,KAAK,SAASI,GAAG,OAAOmoC,EAAE3Z,QAAQxuB,GAAGJ,QAAQuoC,EAAEiH,MAAM,SAASpvC,GAAG,IAAI,IAAI2Q,EAAE,EAAEvR,EAAEY,EAAEd,OAAOgpC,EAAE8G,aAAahvC,EAAE0xC,OAAO/gC,KAAKA,IAAI,IAAI1Q,GAAE,EAAG,GAAG0Q,EAAEvR,EAAE,CAAC,IAAIujB,EAAE3iB,EAAE0xC,OAAO/gC,GAAG,MAAMgS,GAAG,MAAMA,IAAIhS,IAAI,MAAMgS,IAAI1iB,GAAE,IAAK,IAAI,IAAIsvB,EAAE,IAAI4Y,EAAE1oC,EAAE,EAAEY,EAAE,EAAE+mC,EAAE,IAAIz2B,GAAGvR,IAAI,CAAC,IAAIsN,EAAE1M,EAAE0xC,OAAO/gC,GAAG,GAAGA,IAAIu3B,EAAE6J,QAAQrlC,GAAG,CAAC,IAAI4G,EAAE5G,EAAE,IAAI6iB,EAAE0hB,aAAa9I,EAAEuH,KAAKngB,EAAE+gB,QAAQh9B,GAAG7T,QAAQ,CAAC,GAAG,MAAMiN,EAAE,CAAC,GAAG,MAAMA,GAAG,MAAMA,EAAE,CAAC,IAAI/K,EAAE3B,EAAE4xC,UAAUjhC,GAAG,IAAIy2B,EAAEriC,EAAEwlB,SAAS5oB,GAAG,MAAMgP,GAAG,MAAMA,aAAahJ,MAAM,IAAIA,MAAM,oBAAoBhG,EAAE,cAAc3B,GAAG2Q,EAAE,MAAM,MAAM,IAAIhJ,MAAM,yBAAyB+E,EAAE,iBAAiBiE,EAAE,cAAc3Q,GAAGK,EAAEZ,GAAG,IAAI0nC,EAAE5X,EAAEzT,EAAErc,EAAEY,EAAE+mC,EAAE,GAAG,IAAItrB,EAAEqrB,EAAE5X,OAAO,GAAGzT,EAAE,EAAE,CAAC,IAAInO,EAAEw6B,EAAEuH,IAAI1qC,IAAI8W,GAAGqrB,EAAE5X,EAAE0gB,OAAOtiC,QAAQ,GAAGmO,EAAE,EAAE,CAAC,IAAIvI,EAAE40B,EAAEuH,IAAI1qC,KAAK8W,GAAGqrB,EAAE5X,EAAE6gB,SAAS78B,GAAG,OAAOtT,EAAEknC,EAAEsJ,SAAStJ,GAAGgB,EAAE4I,UAAU,WAAW,OAAO,IAAI5I,EAAEjV,EAAE4a,IAAI5a,EAAE4a,MAAM3F,EAAErwB,KAAK,SAAS9X,GAAG,OAAO,IAAImoC,EAAEnoC,IAAImoC,EAAE6H,UAAU,SAAShwC,GAAG,IAAI2Q,EAAEpR,KAAKoiB,IAAI3hB,GAAGZ,EAAEG,KAAKC,IAAImR,GAAGpR,KAAKC,IAAI,IAAIS,EAAEV,KAAK8sC,MAAM9sC,KAAKO,MAAMV,IAAI,OAAO,GAAGG,KAAKyF,IAAI,GAAG/E,IAAI0Q,IAAI1Q,GAAG,GAAGA,GAAGkoC,EAAEwJ,aAAa,SAAS3xC,EAAE2Q,GAAG,IAAI,IAAIvR,EAAE,IAAI8W,EAAEjW,EAAE,EAAEA,EAAE0Q,EAAE1Q,IAAIb,EAAEwvC,OAAO5uC,GAAG,OAAOZ,EAAE+Y,YAAYqwB,EAAEt/B,GAAGqf,IAAI,WAAW,OAAO,IAAI4f,EAAE,kBAAkB,wBAAyBK,EAAE6G,OAAO9mB,IAAI,WAAW,OAAO,IAAI4f,EAAE,kBAAkB,wBAAyBK,EAAE8G,KAAK/mB,IAAI,WAAW,OAAO,IAAI4f,EAAE,mBAAmB,uBAAwBK,EAAED,EAAEhgB,IAAI,WAAW,OAAO,IAAI4f,EAAE,kBAAkB,wBAAyBK,EAAEsF,IAAIvlB,IAAI,WAAW,OAAO,IAAI4f,EAAEjV,EAAE4a,IAAI5a,EAAE4a,MAAMtF,EAAE+G,IAAIhnB,IAAI,WAAW,OAAO,qBAAsBigB,EAAEgH,MAAMjnB,IAAI,WAAW,OAAO,WAAWigB,EAAEiH,iBAAiBlnB,IAAI,WAAW,OAAO,IAAIigB,EAAEkH,IAAInnB,IAAI,WAAW,OAAO4f,EAAE3Z,QAAQ,KAAKga,EAAEmH,IAAIpnB,IAAI,WAAW,OAAO4f,EAAE3Z,QAAQ,IAAIga,EAAEoH,sBAAsBrnB,IAAI,WAAW,MAAM,KAAKigB,EAAEqH,aAAatnB,IAAI,WAAW,MAAM,SAASlf,OAAOyP,iBAAiBqvB,EAAEK,GAAG,IAAI/tB,EAAE,aAAa4tB,EAAE,CAAC2J,gBAAgB,CAAChhC,cAAa,IAAKyJ,EAAExX,UAAUqpC,YAAY,WAAW,MAAM,IAAI7xB,EAAExX,UAAUspC,SAAS,WAAW,OAAO9xB,GAAGA,EAAEw3B,iBAAiB,SAASjyC,EAAE2Q,EAAEvR,GAAG,IAAIa,EAAEwa,EAAEy3B,uBAAuBlyC,EAAE2Q,EAAEvR,GAAG,GAAGa,GAAG,EAAE,OAAOA,EAAE,IAAI0iB,EAAEwlB,EAAE3Z,QAAQ7d,EAAEmE,GAAGw7B,SAAStwC,EAAE8U,GAAGya,EAAE4Y,EAAE3Z,QAAQ7d,EAAEoE,GAAGu7B,SAAStwC,EAAE+U,GAAGtV,EAAE0oC,EAAE3Z,QAAQpvB,EAAE0V,GAAGw7B,SAAS3/B,EAAEmE,GAAGzU,EAAE8nC,EAAE3Z,QAAQpvB,EAAE2V,GAAGu7B,SAAS3/B,EAAEoE,GAAG,OAAO4N,EAAEsuB,aAAa5wC,GAAGswC,aAAaphB,EAAE0hB,aAAaxxC,IAAIqyC,UAAUr3B,EAAE03B,aAAa,SAASnyC,EAAE2Q,EAAEvR,EAAEa,GAAG,OAAOD,EAAEowC,SAASnwC,GAAG0wC,aAAahgC,EAAEy/B,SAAShxC,IAAI0yC,UAAUr3B,EAAE+d,aAAa,SAASx4B,EAAE2Q,EAAEvR,EAAEa,GAAG,IAAI0iB,EAAEwlB,EAAE3Z,QAAQvuB,EAAE8U,GAAG47B,aAAavxC,EAAE2V,GAAGk8B,aAAa9I,EAAE3Z,QAAQ7d,EAAEmE,GAAG67B,aAAa3wC,EAAE8U,IAAIya,EAAE4Y,EAAE3Z,QAAQvuB,EAAE6U,GAAG67B,aAAavxC,EAAE0V,GAAGm8B,aAAa9I,EAAE3Z,QAAQ7d,EAAEoE,GAAG47B,aAAa3wC,EAAE+U,IAAItV,EAAEkjB,EAAE0tB,SAAS9gB,GAAGlvB,EAAE8nC,EAAE3Z,QAAQvuB,EAAE6U,GAAG67B,aAAavxC,EAAE0V,GAAGm8B,aAAa9I,EAAE3Z,QAAQxuB,EAAE+U,GAAG47B,aAAavxC,EAAE2V,IAAIqyB,EAAEe,EAAE3Z,QAAQvuB,EAAE8U,GAAG47B,aAAavxC,EAAE2V,GAAGk8B,aAAa9I,EAAE3Z,QAAQxuB,EAAE8U,GAAG67B,aAAavxC,EAAE0V,IAAIpI,EAAErM,EAAEgwC,SAASjJ,GAAGyJ,WAAWpxC,GAAG+wC,cAAcl9B,EAAE60B,EAAE3Z,QAAQxuB,EAAE8U,GAAGw7B,QAAQnI,EAAE3Z,QAAQ7d,EAAEmE,GAAG67B,aAAa3wC,EAAE8U,GAAGm8B,aAAavkC,IAAI8jC,cAAc7uC,EAAEwmC,EAAE3Z,QAAQ7d,EAAEmE,GAAG67B,aAAa3wC,EAAE8U,GAAGm8B,aAAa9I,EAAE3Z,QAAQxuB,EAAE+U,GAAG47B,aAAavxC,EAAE2V,IAAIoyB,EAAEgB,EAAE3Z,QAAQ7d,EAAEoE,GAAG47B,aAAa3wC,EAAE+U,GAAGk8B,aAAa9I,EAAE3Z,QAAQxuB,EAAE8U,GAAG67B,aAAavxC,EAAE0V,IAAIgH,EAAEna,EAAE0uC,SAASlJ,GAAG0J,WAAWpxC,GAAG+wC,cAAc7iC,EAAEw6B,EAAE3Z,QAAQpvB,EAAE2V,GAAGu7B,QAAQnI,EAAE3Z,QAAQvuB,EAAE8U,GAAG47B,aAAavxC,EAAE2V,GAAGk8B,aAAan1B,IAAI00B,cAAc,OAAO,IAAIlI,EAAEh1B,EAAE3F,IAAI8M,EAAEy3B,uBAAuB,SAASlyC,EAAE2Q,EAAEvR,GAAG,IAAIa,EAAE,KAAK0iB,GAAG3iB,EAAE8U,EAAE1V,EAAE0V,IAAInE,EAAEoE,EAAE3V,EAAE2V,GAAGwa,GAAGvvB,EAAE+U,EAAE3V,EAAE2V,IAAIpE,EAAEmE,EAAE1V,EAAE0V,GAAGrV,EAAEkjB,EAAE4M,EAAE,GAAG5M,EAAE,EAAE,CAAC,GAAG4M,GAAG,EAAE,OAAO9U,EAAEq3B,OAAOryC,GAAGQ,EAAE0iB,EAAE4M,MAAM,CAAC,KAAK5M,EAAE,GAAG,OAAOlI,EAAEq3B,OAAOryC,GAAG,GAAG8vB,GAAG,EAAE,OAAO9U,EAAEq3B,OAAOryC,GAAGQ,GAAG0iB,EAAE4M,EAAE,IAAIlvB,EAAEoa,EAAEu3B,gBAAgB/xC,EAAE,OAAOR,GAAGY,IAAIZ,GAAGY,EAAEoa,EAAEq3B,OAAOryC,GAAG,GAAGgb,EAAEq3B,OAAO,SAAS9xC,GAAG,OAAOA,EAAE,EAAE,EAAEA,EAAE,GAAG,EAAE,GAAGqoC,EAAE2J,gBAAgBzpB,IAAI,WAAW,OAAO,OAAOlf,OAAOyP,iBAAiB2B,EAAE4tB,GAAG,IAAI+J,EAAE,aAAaC,EAAE,CAACpF,EAAE,CAACj8B,cAAa,GAAIk8B,EAAE,CAACl8B,cAAa,GAAIm8B,EAAE,CAACn8B,cAAa,GAAIjM,EAAE,CAACiM,cAAa,IAAKqhC,EAAEpF,EAAE1kB,IAAI,WAAW,OAAO,GAAG8pB,EAAEnF,EAAE3kB,IAAI,WAAW,OAAO,GAAG8pB,EAAElF,EAAE5kB,IAAI,WAAW,OAAO,GAAG8pB,EAAEttC,EAAEwjB,IAAI,WAAW,OAAO,GAAG6pB,EAAEnvC,UAAUmqC,YAAY,SAASptC,EAAE2Q,EAAEvR,KAAKgzC,EAAEnvC,UAAUmyB,KAAK,aAAagd,EAAEnvC,UAAUqqC,YAAY,SAASttC,EAAE2Q,KAAKyhC,EAAEnvC,UAAUqvC,cAAc,aAAaF,EAAEnvC,UAAUsvC,kBAAkB,SAASvyC,KAAKoyC,EAAEnvC,UAAUuvC,aAAa,aAAaJ,EAAEnvC,UAAUwvC,KAAK,SAASzyC,KAAKoyC,EAAEnvC,UAAUyqC,MAAM,aAAa0E,EAAEnvC,UAAUyvC,eAAe,SAAS1yC,KAAKoyC,EAAEnvC,UAAU6U,KAAK,aAAas6B,EAAEnvC,UAAU0vC,KAAK,SAAS3yC,KAAKoyC,EAAEnvC,UAAU2vC,kBAAkB,aAAaR,EAAEnvC,UAAUqpC,YAAY,WAAW,MAAM,CAACx3B,IAAIs9B,EAAEnvC,UAAUspC,SAAS,WAAW,OAAO6F,GAAG/oC,OAAOyP,iBAAiBs5B,EAAEC,GAAG,IAAI/yC,EAAE,aAAa2tC,EAAE,SAASjtC,GAAG,SAAS2Q,IAAI3Q,EAAEuQ,KAAK5P,KAAK,8DAA8D,OAAOX,IAAI2Q,EAAEgY,UAAU3oB,GAAG2Q,EAAE1N,UAAUoG,OAAOojC,OAAOzsC,GAAGA,EAAEiD,WAAW0N,EAAE1N,UAAUkJ,YAAYwE,EAAEA,EAAE1N,UAAUqpC,YAAY,WAAW,MAAM,IAAI37B,EAAE1N,UAAUspC,SAAS,WAAW,OAAO57B,GAAGA,EAAxR,CAA2RrR,GAAG4tC,EAAE,aAAaA,EAAE2F,UAAU,SAAS7yC,EAAE2Q,EAAEvR,EAAEa,EAAE0iB,GAAG,IAAI,IAAI4M,EAAE,EAAE9vB,EAAEkR,EAAElR,EAAEkR,EAAEgS,EAAEljB,IAAIL,EAAEa,EAAEsvB,GAAGvvB,EAAEP,GAAG8vB,KAAK2d,EAAE4F,YAAY,SAAS9yC,GAAG,MAAM,CAAC,iBAAiB,MAAMA,IAAI,IAAInB,EAAE,SAASmB,IAAI,GAAGW,KAAKmU,EAAE,KAAKnU,KAAKoU,EAAE,KAAKpU,KAAKsnC,EAAE,KAAK,IAAIn3B,UAAU5R,OAAOyB,KAAKmU,EAAE,EAAEnU,KAAKoU,EAAE,EAAEpU,KAAKsnC,EAAE,OAAO,GAAG,IAAIn3B,UAAU5R,OAAO,CAAC,IAAIyR,EAAEG,UAAU,GAAGnQ,KAAKmU,EAAEnE,EAAEmE,EAAEnU,KAAKoU,EAAEpE,EAAEoE,EAAEpU,KAAKsnC,EAAE,OAAO,GAAG,IAAIn3B,UAAU5R,QAAQ,GAAG,iBAAiB4R,UAAU,IAAI,iBAAiBA,UAAU,GAAG,CAAC,IAAI1R,EAAE0R,UAAU,GAAG7Q,EAAE6Q,UAAU,GAAGnQ,KAAKmU,EAAE1V,EAAEuB,KAAKoU,EAAE9U,EAAEU,KAAKsnC,EAAE,OAAO,GAAGn3B,UAAU,aAAa9Q,GAAG8Q,UAAU,aAAa9Q,EAAE,CAAC,IAAI2iB,EAAE7R,UAAU,GAAGye,EAAEze,UAAU,GAAGnQ,KAAKmU,EAAE6N,EAAE5N,EAAEwa,EAAE0Y,EAAE1Y,EAAExa,EAAE4N,EAAEslB,EAAEtnC,KAAKoU,EAAEwa,EAAEza,EAAE6N,EAAEslB,EAAEtlB,EAAE7N,EAAEya,EAAE0Y,EAAEtnC,KAAKsnC,EAAEtlB,EAAE7N,EAAEya,EAAExa,EAAEwa,EAAEza,EAAE6N,EAAE5N,OAAO,GAAGjE,UAAU,aAAaw3B,GAAGx3B,UAAU,aAAaw3B,EAAE,CAAC,IAAI7oC,EAAEqR,UAAU,GAAGzQ,EAAEyQ,UAAU,GAAGnQ,KAAKmU,EAAErV,EAAEsV,EAAE1U,EAAE0U,EAAEpU,KAAKoU,EAAE1U,EAAEyU,EAAErV,EAAEqV,EAAEnU,KAAKsnC,EAAExoC,EAAEqV,EAAEzU,EAAE0U,EAAE1U,EAAEyU,EAAErV,EAAEsV,QAAQ,GAAG,IAAIjE,UAAU5R,OAAO,CAAC,IAAIkoC,EAAEt2B,UAAU,GAAGpE,EAAEoE,UAAU,GAAGwC,EAAExC,UAAU,GAAGnQ,KAAKmU,EAAEsyB,EAAEzmC,KAAKoU,EAAErI,EAAE/L,KAAKsnC,EAAE30B,OAAO,GAAG,IAAIxC,UAAU5R,OAAO,CAAC,IAAIyC,EAAEmP,UAAU,GAAGq2B,EAAEr2B,UAAU,GAAGgL,EAAEhL,UAAU,GAAGnD,EAAEmD,UAAU,GAAGyC,EAAE5R,EAAEoT,EAAEoyB,EAAEpyB,EAAEA,EAAEoyB,EAAEryB,EAAEnT,EAAEmT,EAAEyD,EAAE5W,EAAEmT,EAAEqyB,EAAEpyB,EAAEoyB,EAAEryB,EAAEnT,EAAEoT,EAAE1V,EAAEyc,EAAE/G,EAAEpH,EAAEoH,EAAEme,EAAEvlB,EAAEmH,EAAEgH,EAAEhH,EAAE4zB,EAAE5sB,EAAEhH,EAAEnH,EAAEoH,EAAEpH,EAAEmH,EAAEgH,EAAE/G,EAAEpU,KAAKmU,EAAEC,EAAE2zB,EAAExV,EAAE3a,EAAE5X,KAAKoU,EAAE1V,EAAEkZ,EAAEhF,EAAEm1B,EAAE/nC,KAAKsnC,EAAE10B,EAAE2f,EAAE7zB,EAAE0V,IAAIlW,EAAEoE,UAAU0vC,KAAK,WAAW,IAAI3yC,EAAEW,KAAKoU,EAAEpU,KAAKsnC,EAAE,GAAG/U,EAAE9pB,MAAMpJ,IAAIkzB,EAAE0Z,WAAW5sC,GAAG,MAAM,IAAIitC,EAAE,OAAOjtC,GAAGnB,EAAEoE,UAAUwvC,KAAK,WAAW,IAAIzyC,EAAEW,KAAKmU,EAAEnU,KAAKsnC,EAAE,GAAG/U,EAAE9pB,MAAMpJ,IAAIkzB,EAAE0Z,WAAW5sC,GAAG,MAAM,IAAIitC,EAAE,OAAOjtC,GAAGnB,EAAEoE,UAAUqvC,cAAc,WAAW,IAAItyC,EAAE,IAAIsoC,EAAE,OAAOtoC,EAAE8U,EAAEnU,KAAK8xC,OAAOzyC,EAAE+U,EAAEpU,KAAKgyC,OAAO3yC,GAAGnB,EAAEoE,UAAUqpC,YAAY,WAAW,MAAM,IAAIztC,EAAEoE,UAAUspC,SAAS,WAAW,OAAO1tC,GAAGA,EAAE25B,aAAa,SAASx4B,EAAE2Q,EAAEvR,EAAEa,GAAG,IAAI0iB,EAAE3iB,EAAE+U,EAAEpE,EAAEoE,EAAEwa,EAAE5e,EAAEmE,EAAE9U,EAAE8U,EAAErV,EAAEO,EAAE8U,EAAEnE,EAAEoE,EAAEpE,EAAEmE,EAAE9U,EAAE+U,EAAE1U,EAAEjB,EAAE2V,EAAE9U,EAAE8U,EAAEqyB,EAAEnnC,EAAE6U,EAAE1V,EAAE0V,EAAEpI,EAAEtN,EAAE0V,EAAE7U,EAAE8U,EAAE9U,EAAE6U,EAAE1V,EAAE2V,EAAEzB,EAAEqP,EAAEykB,EAAE/mC,EAAEkvB,EAAE5tB,GAAG4tB,EAAE7iB,EAAE06B,EAAE3nC,GAAG6T,EAAE6zB,GAAG9mC,EAAEZ,EAAEkjB,EAAEjW,GAAG4G,EAAE,GAAG4f,EAAE9pB,MAAMzH,IAAIuxB,EAAE0Z,WAAWjrC,IAAIuxB,EAAE9pB,MAAM+9B,IAAIjU,EAAE0Z,WAAWzF,GAAG,MAAM,IAAI8F,EAAE,OAAO,IAAI3E,EAAE3mC,EAAEwlC,IAAI,IAAIjnC,EAAE,SAASF,IAAI,GAAGW,KAAKoyC,MAAM,KAAKpyC,KAAKqyC,MAAM,KAAKryC,KAAKsyC,MAAM,KAAKtyC,KAAKuyC,MAAM,KAAK,IAAIpiC,UAAU5R,OAAOyB,KAAKma,YAAY,GAAG,IAAIhK,UAAU5R,QAAQ,GAAG4R,UAAU,aAAaw3B,EAAE,CAAC,IAAI33B,EAAEG,UAAU,GAAGnQ,KAAKma,KAAKnK,EAAEmE,EAAEnE,EAAEmE,EAAEnE,EAAEoE,EAAEpE,EAAEoE,QAAQ,GAAGjE,UAAU,aAAa9Q,EAAE,CAAC,IAAIZ,EAAE0R,UAAU,GAAGnQ,KAAKma,KAAK1b,SAAS,GAAG,IAAI0R,UAAU5R,OAAO,CAAC,IAAIe,EAAE6Q,UAAU,GAAG6R,EAAE7R,UAAU,GAAGnQ,KAAKma,KAAK7a,EAAE6U,EAAE6N,EAAE7N,EAAE7U,EAAE8U,EAAE4N,EAAE5N,QAAQ,GAAG,IAAIjE,UAAU5R,OAAO,CAAC,IAAIqwB,EAAEze,UAAU,GAAGrR,EAAEqR,UAAU,GAAGzQ,EAAEyQ,UAAU,GAAGs2B,EAAEt2B,UAAU,GAAGnQ,KAAKma,KAAKyU,EAAE9vB,EAAEY,EAAE+mC,KAAKqB,EAAE,CAACuE,iBAAiB,CAACh8B,cAAa,IAAK9Q,EAAE+C,UAAUkwC,QAAQ,WAAW,OAAOxyC,KAAKyyC,WAAWzyC,KAAK0yC,aAAanzC,EAAE+C,UAAUoc,OAAO,SAASrf,GAAG,KAAKA,aAAaE,GAAG,OAAM,EAAG,IAAIyQ,EAAE3Q,EAAE,OAAOW,KAAK2yC,SAAS3iC,EAAE2iC,SAAS3yC,KAAKqyC,QAAQriC,EAAE4iC,WAAW5yC,KAAKuyC,QAAQviC,EAAE6iC,WAAW7yC,KAAKoyC,QAAQpiC,EAAE8iC,WAAW9yC,KAAKsyC,QAAQtiC,EAAE+iC,WAAWxzC,EAAE+C,UAAUu1B,aAAa,SAASx4B,GAAG,GAAGW,KAAK2yC,UAAUtzC,EAAEszC,WAAW3yC,KAAK+B,WAAW1C,GAAG,OAAO,IAAIE,EAAE,IAAIyQ,EAAEhQ,KAAKoyC,MAAM/yC,EAAE+yC,MAAMpyC,KAAKoyC,MAAM/yC,EAAE+yC,MAAM3zC,EAAEuB,KAAKsyC,MAAMjzC,EAAEizC,MAAMtyC,KAAKsyC,MAAMjzC,EAAEizC,MAAMhzC,EAAEU,KAAKqyC,MAAMhzC,EAAEgzC,MAAMryC,KAAKqyC,MAAMhzC,EAAEgzC,MAAMrwB,EAAEhiB,KAAKuyC,MAAMlzC,EAAEkzC,MAAMvyC,KAAKuyC,MAAMlzC,EAAEkzC,MAAM,OAAO,IAAIhzC,EAAEyQ,EAAE1Q,EAAEb,EAAEujB,IAAIziB,EAAE+C,UAAUqwC,OAAO,WAAW,OAAO3yC,KAAKqyC,MAAMryC,KAAKoyC,OAAO7yC,EAAE+C,UAAUswC,QAAQ,WAAW,OAAO5yC,KAAKqyC,OAAO9yC,EAAE+C,UAAU0wC,OAAO,WAAW,GAAG,IAAI7iC,UAAU5R,OAAO,CAAC,GAAG4R,UAAU,aAAaw3B,EAAE,CAAC,IAAItoC,EAAE8Q,UAAU,GAAG,OAAOnQ,KAAKgzC,OAAO3zC,EAAE8U,EAAE9U,EAAE+U,GAAG,GAAGjE,UAAU,aAAa5Q,EAAE,CAAC,IAAIyQ,EAAEG,UAAU,GAAG,OAAOnQ,KAAK2yC,WAAW3iC,EAAE2iC,UAAW3iC,EAAE8iC,WAAW9yC,KAAKoyC,OAAOpiC,EAAE4iC,WAAW5yC,KAAKqyC,OAAOriC,EAAE+iC,WAAW/yC,KAAKsyC,OAAOtiC,EAAE6iC,WAAW7yC,KAAKuyC,YAAa,GAAG,IAAIpiC,UAAU5R,OAAO,CAAC,IAAIE,EAAE0R,UAAU,GAAG7Q,EAAE6Q,UAAU,GAAG,OAAOnQ,KAAK2yC,UAAWl0C,GAAGuB,KAAKoyC,OAAO3zC,GAAGuB,KAAKqyC,OAAO/yC,GAAGU,KAAKsyC,OAAOhzC,GAAGU,KAAKuyC,QAAShzC,EAAE+C,UAAUP,WAAW,WAAW,GAAG,IAAIoO,UAAU5R,OAAO,CAAC,GAAG4R,UAAU,aAAa5Q,EAAE,CAAC,IAAIF,EAAE8Q,UAAU,GAAG,OAAOnQ,KAAK2yC,WAAWtzC,EAAEszC,YAAYtzC,EAAE+yC,MAAMpyC,KAAKqyC,OAAOhzC,EAAEgzC,MAAMryC,KAAKoyC,OAAO/yC,EAAEizC,MAAMtyC,KAAKuyC,OAAOlzC,EAAEkzC,MAAMvyC,KAAKsyC,OAAO,GAAGniC,UAAU,aAAaw3B,EAAE,CAAC,IAAI33B,EAAEG,UAAU,GAAG,OAAOnQ,KAAK+B,WAAWiO,EAAEmE,EAAEnE,EAAEoE,SAAS,GAAG,IAAIjE,UAAU5R,OAAO,CAAC,IAAIE,EAAE0R,UAAU,GAAG7Q,EAAE6Q,UAAU,GAAG,OAAOnQ,KAAK2yC,YAAYl0C,EAAEuB,KAAKqyC,OAAO5zC,EAAEuB,KAAKoyC,OAAO9yC,EAAEU,KAAKuyC,OAAOjzC,EAAEU,KAAKsyC,SAAS/yC,EAAE+C,UAAUywC,QAAQ,WAAW,OAAO/yC,KAAKsyC,OAAO/yC,EAAE+C,UAAUwwC,QAAQ,WAAW,OAAO9yC,KAAKoyC,OAAO7yC,EAAE+C,UAAU2wC,gBAAgB,WAAW,GAAG,IAAI9iC,UAAU5R,QAAQ,GAAG4R,UAAU,aAAaw3B,EAAE,CAAC,IAAItoC,EAAE8Q,UAAU,GAAGnQ,KAAKizC,gBAAgB5zC,EAAE8U,EAAE9U,EAAE+U,QAAQ,GAAGjE,UAAU,aAAa5Q,EAAE,CAAC,IAAIyQ,EAAEG,UAAU,GAAG,GAAGH,EAAE2iC,SAAS,OAAO,KAAK3yC,KAAK2yC,UAAU3yC,KAAKoyC,MAAMpiC,EAAE8iC,UAAU9yC,KAAKqyC,MAAMriC,EAAE4iC,UAAU5yC,KAAKsyC,MAAMtiC,EAAE+iC,UAAU/yC,KAAKuyC,MAAMviC,EAAE6iC,YAAY7iC,EAAEoiC,MAAMpyC,KAAKoyC,QAAQpyC,KAAKoyC,MAAMpiC,EAAEoiC,OAAOpiC,EAAEqiC,MAAMryC,KAAKqyC,QAAQryC,KAAKqyC,MAAMriC,EAAEqiC,OAAOriC,EAAEsiC,MAAMtyC,KAAKsyC,QAAQtyC,KAAKsyC,MAAMtiC,EAAEsiC,OAAOtiC,EAAEuiC,MAAMvyC,KAAKuyC,QAAQvyC,KAAKuyC,MAAMviC,EAAEuiC,cAAc,GAAG,IAAIpiC,UAAU5R,OAAO,CAAC,IAAIE,EAAE0R,UAAU,GAAG7Q,EAAE6Q,UAAU,GAAGnQ,KAAK2yC,UAAU3yC,KAAKoyC,MAAM3zC,EAAEuB,KAAKqyC,MAAM5zC,EAAEuB,KAAKsyC,MAAMhzC,EAAEU,KAAKuyC,MAAMjzC,IAAIb,EAAEuB,KAAKoyC,QAAQpyC,KAAKoyC,MAAM3zC,GAAGA,EAAEuB,KAAKqyC,QAAQryC,KAAKqyC,MAAM5zC,GAAGa,EAAEU,KAAKsyC,QAAQtyC,KAAKsyC,MAAMhzC,GAAGA,EAAEU,KAAKuyC,QAAQvyC,KAAKuyC,MAAMjzC,MAAMC,EAAE+C,UAAU4wC,UAAU,WAAW,GAAGlzC,KAAK2yC,SAAS,OAAO,EAAE,IAAItzC,EAAEW,KAAKyyC,WAAWziC,EAAEhQ,KAAK0yC,YAAY,OAAOrzC,EAAE2Q,EAAE3Q,EAAE2Q,GAAGzQ,EAAE+C,UAAUmwC,SAAS,WAAW,OAAOzyC,KAAK2yC,SAAS,EAAE3yC,KAAKqyC,MAAMryC,KAAKoyC,OAAO7yC,EAAE+C,UAAUwqC,UAAU,SAASztC,GAAG,IAAI2Q,EAAE3Q,EAAE,OAAOW,KAAK2yC,SAAS3iC,EAAE2iC,SAAS,GAAG,EAAE3iC,EAAE2iC,SAAS,EAAE3yC,KAAKoyC,MAAMpiC,EAAEoiC,OAAO,EAAEpyC,KAAKoyC,MAAMpiC,EAAEoiC,MAAM,EAAEpyC,KAAKsyC,MAAMtiC,EAAEsiC,OAAO,EAAEtyC,KAAKsyC,MAAMtiC,EAAEsiC,MAAM,EAAEtyC,KAAKqyC,MAAMriC,EAAEqiC,OAAO,EAAEryC,KAAKqyC,MAAMriC,EAAEqiC,MAAM,EAAEryC,KAAKuyC,MAAMviC,EAAEuiC,OAAO,EAAEvyC,KAAKuyC,MAAMviC,EAAEuiC,MAAM,EAAE,GAAGhzC,EAAE+C,UAAU6wC,UAAU,SAAS9zC,EAAE2Q,GAAG,GAAGhQ,KAAK2yC,SAAS,OAAO,KAAK3yC,KAAKma,KAAKna,KAAK8yC,UAAUzzC,EAAEW,KAAK4yC,UAAUvzC,EAAEW,KAAK+yC,UAAU/iC,EAAEhQ,KAAK6yC,UAAU7iC,IAAIzQ,EAAE+C,UAAUkV,SAAS,WAAW,MAAM,OAAOxX,KAAKoyC,MAAM,MAAMpyC,KAAKqyC,MAAM,KAAKryC,KAAKsyC,MAAM,MAAMtyC,KAAKuyC,MAAM,KAAKhzC,EAAE+C,UAAU8wC,UAAU,WAAWpzC,KAAKoyC,MAAM,EAAEpyC,KAAKqyC,OAAO,EAAEryC,KAAKsyC,MAAM,EAAEtyC,KAAKuyC,OAAO,GAAGhzC,EAAE+C,UAAUowC,UAAU,WAAW,OAAO1yC,KAAK2yC,SAAS,EAAE3yC,KAAKuyC,MAAMvyC,KAAKsyC,OAAO/yC,EAAE+C,UAAU+wC,UAAU,WAAW,GAAGrzC,KAAK2yC,SAAS,OAAO,EAAE,IAAItzC,EAAEW,KAAKyyC,WAAWziC,EAAEhQ,KAAK0yC,YAAY,OAAOrzC,EAAE2Q,EAAE3Q,EAAE2Q,GAAGzQ,EAAE+C,UAAUgxC,SAAS,WAAW,GAAG,IAAInjC,UAAU5R,OAAO,CAAC,IAAIc,EAAE8Q,UAAU,GAAGnQ,KAAKszC,SAASj0C,EAAEA,QAAQ,GAAG,IAAI8Q,UAAU5R,OAAO,CAAC,IAAIyR,EAAEG,UAAU,GAAG1R,EAAE0R,UAAU,GAAG,GAAGnQ,KAAK2yC,SAAS,OAAO,KAAK3yC,KAAKoyC,OAAOpiC,EAAEhQ,KAAKqyC,OAAOriC,EAAEhQ,KAAKsyC,OAAO7zC,EAAEuB,KAAKuyC,OAAO9zC,GAAGuB,KAAKoyC,MAAMpyC,KAAKqyC,OAAOryC,KAAKsyC,MAAMtyC,KAAKuyC,QAAQvyC,KAAKozC,cAAc7zC,EAAE+C,UAAUR,SAAS,WAAW,GAAG,IAAIqO,UAAU5R,OAAO,CAAC,GAAG4R,UAAU,aAAa5Q,EAAE,CAAC,IAAIF,EAAE8Q,UAAU,GAAG,OAAOnQ,KAAKgzC,OAAO3zC,GAAG,GAAG8Q,UAAU,aAAaw3B,EAAE,CAAC,IAAI33B,EAAEG,UAAU,GAAG,OAAOnQ,KAAKgzC,OAAOhjC,SAAS,GAAG,IAAIG,UAAU5R,OAAO,CAAC,IAAIE,EAAE0R,UAAU,GAAG7Q,EAAE6Q,UAAU,GAAG,OAAOnQ,KAAKgzC,OAAOv0C,EAAEa,KAAKC,EAAE+C,UAAUixC,OAAO,WAAW,OAAOvzC,KAAK2yC,SAAS,KAAK,IAAIhL,GAAG3nC,KAAK8yC,UAAU9yC,KAAK4yC,WAAW,GAAG5yC,KAAK+yC,UAAU/yC,KAAK6yC,WAAW,IAAItzC,EAAE+C,UAAU6X,KAAK,WAAW,GAAG,IAAIhK,UAAU5R,OAAOyB,KAAKozC,iBAAiB,GAAG,IAAIjjC,UAAU5R,QAAQ,GAAG4R,UAAU,aAAaw3B,EAAE,CAAC,IAAItoC,EAAE8Q,UAAU,GAAGnQ,KAAKma,KAAK9a,EAAE8U,EAAE9U,EAAE8U,EAAE9U,EAAE+U,EAAE/U,EAAE+U,QAAQ,GAAGjE,UAAU,aAAa5Q,EAAE,CAAC,IAAIyQ,EAAEG,UAAU,GAAGnQ,KAAKoyC,MAAMpiC,EAAEoiC,MAAMpyC,KAAKqyC,MAAMriC,EAAEqiC,MAAMryC,KAAKsyC,MAAMtiC,EAAEsiC,MAAMtyC,KAAKuyC,MAAMviC,EAAEuiC,YAAY,GAAG,IAAIpiC,UAAU5R,OAAO,CAAC,IAAIE,EAAE0R,UAAU,GAAG7Q,EAAE6Q,UAAU,GAAGnQ,KAAKma,KAAK1b,EAAE0V,EAAE7U,EAAE6U,EAAE1V,EAAE2V,EAAE9U,EAAE8U,QAAQ,GAAG,IAAIjE,UAAU5R,OAAO,CAAC,IAAIyjB,EAAE7R,UAAU,GAAGye,EAAEze,UAAU,GAAGrR,EAAEqR,UAAU,GAAGzQ,EAAEyQ,UAAU,GAAG6R,EAAE4M,GAAG5uB,KAAKoyC,MAAMpwB,EAAEhiB,KAAKqyC,MAAMzjB,IAAI5uB,KAAKoyC,MAAMxjB,EAAE5uB,KAAKqyC,MAAMrwB,GAAGljB,EAAEY,GAAGM,KAAKsyC,MAAMxzC,EAAEkB,KAAKuyC,MAAM7yC,IAAIM,KAAKsyC,MAAM5yC,EAAEM,KAAKuyC,MAAMzzC,KAAKS,EAAE+C,UAAUuwC,QAAQ,WAAW,OAAO7yC,KAAKuyC,OAAOhzC,EAAE+C,UAAU+F,SAAS,SAAShJ,GAAG,GAAGW,KAAK+B,WAAW1C,GAAG,OAAO,EAAE,IAAI2Q,EAAE,EAAEhQ,KAAKqyC,MAAMhzC,EAAE+yC,MAAMpiC,EAAE3Q,EAAE+yC,MAAMpyC,KAAKqyC,MAAMryC,KAAKoyC,MAAM/yC,EAAEgzC,QAAQriC,EAAEhQ,KAAKoyC,MAAM/yC,EAAEgzC,OAAO,IAAI5zC,EAAE,EAAE,OAAOuB,KAAKuyC,MAAMlzC,EAAEizC,MAAM7zC,EAAEY,EAAEizC,MAAMtyC,KAAKuyC,MAAMvyC,KAAKsyC,MAAMjzC,EAAEkzC,QAAQ9zC,EAAEuB,KAAKsyC,MAAMjzC,EAAEkzC,OAAO,IAAIviC,EAAEvR,EAAE,IAAIA,EAAEuR,EAAEpR,KAAKK,KAAK+Q,EAAEA,EAAEvR,EAAEA,IAAIc,EAAE+C,UAAU2qC,SAAS,WAAW,IAAI5tC,EAAE,GAAG,OAAmG,IAAhCA,EAAE,IAAhCA,EAAE,IAAhCA,EAAE,GAAGA,EAAEsoC,EAAEsF,SAASjtC,KAAKoyC,QAAczK,EAAEsF,SAASjtC,KAAKqyC,QAAc1K,EAAEsF,SAASjtC,KAAKsyC,QAAc3K,EAAEsF,SAASjtC,KAAKuyC,QAAQhzC,EAAE+C,UAAUqpC,YAAY,WAAW,MAAM,CAAC/D,EAAE53B,IAAIzQ,EAAE+C,UAAUspC,SAAS,WAAW,OAAOrsC,GAAGA,EAAEwC,WAAW,WAAW,GAAG,IAAIoO,UAAU5R,OAAO,CAAC,IAAIc,EAAE8Q,UAAU,GAAGH,EAAEG,UAAU,GAAG1R,EAAE0R,UAAU,GAAG,OAAO1R,EAAE0V,IAAI9U,EAAE8U,EAAEnE,EAAEmE,EAAE9U,EAAE8U,EAAEnE,EAAEmE,IAAI1V,EAAE0V,IAAI9U,EAAE8U,EAAEnE,EAAEmE,EAAE9U,EAAE8U,EAAEnE,EAAEmE,IAAI1V,EAAE2V,IAAI/U,EAAE+U,EAAEpE,EAAEoE,EAAE/U,EAAE+U,EAAEpE,EAAEoE,IAAI3V,EAAE2V,IAAI/U,EAAE+U,EAAEpE,EAAEoE,EAAE/U,EAAE+U,EAAEpE,EAAEoE,GAAG,GAAG,IAAIjE,UAAU5R,OAAO,CAAC,IAAIe,EAAE6Q,UAAU,GAAG6R,EAAE7R,UAAU,GAAGye,EAAEze,UAAU,GAAGrR,EAAEqR,UAAU,GAAGzQ,EAAEd,KAAKQ,IAAIwvB,EAAEza,EAAErV,EAAEqV,GAAGsyB,EAAE7nC,KAAKM,IAAI0vB,EAAEza,EAAErV,EAAEqV,GAAGpI,EAAEnN,KAAKQ,IAAIE,EAAE6U,EAAE6N,EAAE7N,GAAGxB,EAAE/T,KAAKM,IAAII,EAAE6U,EAAE6N,EAAE7N,GAAG,QAAQpI,EAAE06B,MAAO9zB,EAAEjT,KAAKA,EAAEd,KAAKQ,IAAIwvB,EAAExa,EAAEtV,EAAEsV,GAAGqyB,EAAE7nC,KAAKM,IAAI0vB,EAAExa,EAAEtV,EAAEsV,GAAGrI,EAAEnN,KAAKQ,IAAIE,EAAE8U,EAAE4N,EAAE5N,GAAGzB,EAAE/T,KAAKM,IAAII,EAAE8U,EAAE4N,EAAE5N,KAAKrI,EAAE06B,MAAM9zB,EAAEjT,MAAOooC,EAAEuE,iBAAiBzkB,IAAI,WAAW,OAAO,oBAAoBlf,OAAOyP,iBAAiB5Y,EAAEuoC,GAAG,IAAI0L,EAAE,CAACC,QAAQ,iCAAiCC,aAAa,wBAAwBC,OAAO,MAAMC,WAAW,cAAcC,iBAAiB,wBAAwBC,WAAW,uBAAuB7L,EAAE,SAAS5oC,GAAGW,KAAK+zC,gBAAgB10C,GAAG,IAAI20C,IAAI/L,EAAE3lC,UAAU2xC,KAAK,SAAS50C,GAAG,IAAI2Q,EAAEvR,EAAEa,EAAED,EAAEA,EAAEklB,QAAQ,UAAU,KAAK,IAAIvC,EAAEwxB,EAAEC,QAAQS,KAAK70C,GAAG,IAAI,IAAIA,EAAEqD,OAAO,YAAYsf,EAAEwxB,EAAEE,aAAaQ,KAAK70C,IAAI,QAAG,GAAQ2iB,IAAIvjB,EAAEujB,EAAE,GAAGmyB,cAAc70C,EAAE0iB,EAAE,GAAG2R,EAAEl1B,KAAKuR,EAAE2jB,EAAEl1B,GAAGyF,MAAMlE,KAAK,CAACV,WAAM,IAAS0Q,EAAE,MAAM,IAAIhJ,MAAM,uBAAuB3H,GAAG,OAAO2Q,GAAGi4B,EAAE3lC,UAAU8xC,MAAM,SAAS/0C,GAAG,OAAOW,KAAKq0C,gBAAgBh1C,IAAI4oC,EAAE3lC,UAAU+xC,gBAAgB,SAASh1C,GAAG,IAAI2Q,EAAE3Q,EAAEi1C,kBAAkBH,cAAc,IAAInM,EAAEh4B,GAAG,OAAO,KAAK,IAAIvR,EAAEuR,EAAEs+B,cAAc,OAAOjvC,EAAE21B,UAAUv2B,EAAE,SAASA,EAAE,IAAIupC,EAAEh4B,GAAG9L,MAAMlE,KAAK,CAACX,IAAI,KAAK,IAAI2oC,EAAE,CAACuM,WAAW,SAASl1C,GAAG,OAAOA,EAAE8U,EAAE,IAAI9U,EAAE+U,GAAGtN,MAAM,SAASzH,GAAG,OAAO2oC,EAAEuM,WAAW3kC,KAAK5P,KAAKX,EAAEm1C,aAAaA,aAAa,KAAKC,WAAW,SAASp1C,GAAG,IAAI,IAAI2Q,EAAE,GAAGvR,EAAE,EAAEa,EAAED,EAAEq1C,YAAYn2C,OAAOE,EAAEa,IAAIb,EAAEuR,EAAE3N,KAAK,IAAI2lC,EAAElhC,MAAM5C,MAAMlE,KAAK,CAACX,EAAEq1C,YAAYj2C,KAAK,KAAK,OAAOuR,EAAE3J,KAAK,MAAMsuC,WAAW,SAASt1C,GAAG,IAAI,IAAI2Q,EAAE,GAAGvR,EAAE,EAAEa,EAAED,EAAEu1C,QAAQJ,aAAaj2C,OAAOE,EAAEa,IAAIb,EAAEuR,EAAE3N,KAAK2lC,EAAEuM,WAAWrwC,MAAMlE,KAAK,CAACX,EAAEu1C,QAAQJ,aAAa/1C,MAAM,OAAOuR,EAAE3J,KAAK,MAAMwuC,WAAW,SAASx1C,GAAG,IAAI,IAAI2Q,EAAE,GAAGvR,EAAE,EAAEa,EAAED,EAAEu1C,QAAQJ,aAAaj2C,OAAOE,EAAEa,IAAIb,EAAEuR,EAAE3N,KAAK2lC,EAAEuM,WAAWrwC,MAAMlE,KAAK,CAACX,EAAEu1C,QAAQJ,aAAa/1C,MAAM,OAAOuR,EAAE3J,KAAK,MAAMyuC,gBAAgB,SAASz1C,GAAG,IAAI,IAAI2Q,EAAE,GAAGvR,EAAE,EAAEa,EAAED,EAAEq1C,YAAYn2C,OAAOE,EAAEa,IAAIb,EAAEuR,EAAE3N,KAAK,IAAI2lC,EAAE2M,WAAWzwC,MAAMlE,KAAK,CAACX,EAAEq1C,YAAYj2C,KAAK,KAAK,OAAOuR,EAAE3J,KAAK,MAAMe,QAAQ,SAAS/H,GAAG,IAAI2Q,EAAE,GAAGA,EAAE3N,KAAK,IAAI2lC,EAAE2M,WAAWzwC,MAAMlE,KAAK,CAACX,EAAE01C,SAAS,KAAK,IAAI,IAAIt2C,EAAE,EAAEa,EAAED,EAAE21C,OAAOz2C,OAAOE,EAAEa,IAAIb,EAAEuR,EAAE3N,KAAK,IAAI2lC,EAAE2M,WAAWzwC,MAAMlE,KAAK,CAACX,EAAE21C,OAAOv2C,KAAK,KAAK,OAAOuR,EAAE3J,KAAK,MAAM4uC,aAAa,SAAS51C,GAAG,IAAI,IAAI2Q,EAAE,GAAGvR,EAAE,EAAEa,EAAED,EAAEq1C,YAAYn2C,OAAOE,EAAEa,IAAIb,EAAEuR,EAAE3N,KAAK,IAAI2lC,EAAE5gC,QAAQlD,MAAMlE,KAAK,CAACX,EAAEq1C,YAAYj2C,KAAK,KAAK,OAAOuR,EAAE3J,KAAK,MAAM6uC,mBAAmB,SAAS71C,GAAG,IAAI,IAAI2Q,EAAE,GAAGvR,EAAE,EAAEa,EAAED,EAAEq1C,YAAYn2C,OAAOE,EAAEa,IAAIb,EAAEuR,EAAE3N,KAAKrC,KAAKq0C,gBAAgBh1C,EAAEq1C,YAAYj2C,KAAK,OAAOuR,EAAE3J,KAAK,OAAOstB,EAAE,CAAC7sB,MAAM,SAASzH,GAAG,QAAG,IAASA,EAAE,OAAOW,KAAK+zC,gBAAgBoB,cAAc,IAAInlC,EAAE3Q,EAAE+1C,OAAO9iB,MAAMkhB,EAAEG,QAAQ,OAAO3zC,KAAK+zC,gBAAgBoB,YAAY,IAAIxN,EAAEvsB,OAAOuO,WAAW3Z,EAAE,IAAIoL,OAAOuO,WAAW3Z,EAAE,OAAOykC,WAAW,SAASp1C,GAAG,QAAG,IAASA,EAAE,OAAOW,KAAK+zC,gBAAgBsB,mBAAmB,IAAI,IAAIrlC,EAAEvR,EAAEY,EAAE+1C,OAAO9iB,MAAM,KAAKhzB,EAAE,GAAG0iB,EAAE,EAAE4M,EAAEnwB,EAAEF,OAAOyjB,EAAE4M,IAAI5M,EAAEhS,EAAEvR,EAAEujB,GAAGuC,QAAQivB,EAAEM,WAAW,MAAMx0C,EAAE+C,KAAKsxB,EAAE7sB,MAAM5C,MAAMlE,KAAK,CAACgQ,KAAK,OAAOhQ,KAAK+zC,gBAAgBsB,iBAAiB/1C,IAAIq1C,WAAW,SAASt1C,GAAG,QAAG,IAASA,EAAE,OAAOW,KAAK+zC,gBAAgBuB,mBAAmB,IAAI,IAAItlC,EAAEvR,EAAEY,EAAE+1C,OAAO9iB,MAAM,KAAKhzB,EAAE,GAAG0iB,EAAE,EAAE4M,EAAEnwB,EAAEF,OAAOyjB,EAAE4M,IAAI5M,EAAEhS,EAAEvR,EAAEujB,GAAGozB,OAAO9iB,MAAMkhB,EAAEG,QAAQr0C,EAAE+C,KAAK,IAAIslC,EAAEvsB,OAAOuO,WAAW3Z,EAAE,IAAIoL,OAAOuO,WAAW3Z,EAAE,MAAM,OAAOhQ,KAAK+zC,gBAAgBuB,iBAAiBh2C,IAAIu1C,WAAW,SAASx1C,GAAG,QAAG,IAASA,EAAE,OAAOW,KAAK+zC,gBAAgBwB,mBAAmB,IAAI,IAAIvlC,EAAEvR,EAAEY,EAAE+1C,OAAO9iB,MAAM,KAAKhzB,EAAE,GAAG0iB,EAAE,EAAE4M,EAAEnwB,EAAEF,OAAOyjB,EAAE4M,IAAI5M,EAAEhS,EAAEvR,EAAEujB,GAAGozB,OAAO9iB,MAAMkhB,EAAEG,QAAQr0C,EAAE+C,KAAK,IAAIslC,EAAEvsB,OAAOuO,WAAW3Z,EAAE,IAAIoL,OAAOuO,WAAW3Z,EAAE,MAAM,OAAOhQ,KAAK+zC,gBAAgBwB,iBAAiBj2C,IAAIw1C,gBAAgB,SAASz1C,GAAG,QAAG,IAASA,EAAE,OAAOW,KAAK+zC,gBAAgByB,wBAAwB,IAAI,IAAIxlC,EAAEvR,EAAEY,EAAE+1C,OAAO9iB,MAAMkhB,EAAEI,YAAYt0C,EAAE,GAAG0iB,EAAE,EAAE4M,EAAEnwB,EAAEF,OAAOyjB,EAAE4M,IAAI5M,EAAEhS,EAAEvR,EAAEujB,GAAGuC,QAAQivB,EAAEM,WAAW,MAAMx0C,EAAE+C,KAAKsxB,EAAEghB,WAAWzwC,MAAMlE,KAAK,CAACgQ,KAAK,OAAOhQ,KAAK+zC,gBAAgByB,sBAAsBl2C,IAAI8H,QAAQ,SAAS/H,GAAG,QAAG,IAASA,EAAE,OAAOW,KAAK+zC,gBAAgB0B,gBAAgB,IAAI,IAAIzlC,EAAEvR,EAAEa,EAAE0iB,EAAE4M,EAAEvvB,EAAE+1C,OAAO9iB,MAAMkhB,EAAEI,YAAY90C,EAAE,GAAGY,EAAE,EAAE+mC,EAAE7X,EAAErwB,OAAOmB,EAAE+mC,IAAI/mC,EAAEsQ,EAAE4e,EAAElvB,GAAG6kB,QAAQivB,EAAEM,WAAW,MAAMr1C,EAAEk1B,EAAEghB,WAAWzwC,MAAMlE,KAAK,CAACgQ,IAAI1Q,EAAEU,KAAK+zC,gBAAgBwB,iBAAiB92C,EAAEm2C,SAAS,IAAIl1C,EAAEsiB,EAAE1iB,EAAER,EAAEuD,KAAK/C,GAAG,OAAOU,KAAK+zC,gBAAgB0B,cAAczzB,EAAEljB,IAAIm2C,aAAa,SAAS51C,GAAG,QAAG,IAASA,EAAE,OAAOW,KAAK+zC,gBAAgB2B,qBAAqB,IAAI,IAAI1lC,EAAEvR,EAAEY,EAAE+1C,OAAO9iB,MAAMkhB,EAAEK,kBAAkBv0C,EAAE,GAAG0iB,EAAE,EAAE4M,EAAEnwB,EAAEF,OAAOyjB,EAAE4M,IAAI5M,EAAEhS,EAAEvR,EAAEujB,GAAGuC,QAAQivB,EAAEM,WAAW,MAAMx0C,EAAE+C,KAAKsxB,EAAEvsB,QAAQlD,MAAMlE,KAAK,CAACgQ,KAAK,OAAOhQ,KAAK+zC,gBAAgB2B,mBAAmBp2C,IAAI41C,mBAAmB,SAAS71C,GAAG,QAAG,IAASA,EAAE,OAAOW,KAAK+zC,gBAAgB4B,2BAA2B,IAAI,IAAI3lC,GAAG3Q,EAAEA,EAAEklB,QAAQ,kBAAkB,QAAQ6wB,OAAO9iB,MAAM,KAAK7zB,EAAE,GAAGa,EAAE,EAAE0iB,EAAEhS,EAAEzR,OAAOe,EAAE0iB,IAAI1iB,EAAEb,EAAE4D,KAAKrC,KAAKi0C,KAAKjkC,EAAE1Q,KAAK,OAAOU,KAAK+zC,gBAAgB4B,yBAAyBl3C,KAAK+tC,EAAE,SAASntC,GAAGW,KAAK41C,OAAO,IAAI3N,EAAE5oC,IAAImtC,EAAElqC,UAAU8xC,MAAM,SAAS/0C,GAAG,OAAOW,KAAK41C,OAAOxB,MAAM/0C,IAAImtC,EAAEqJ,aAAa,SAASx2C,EAAE2Q,GAAG,GAAG,IAAIG,UAAU5R,OAAO,MAAM,IAAIyI,MAAM,mBAAmB,MAAM,gBAAgB3H,EAAE8U,EAAE,IAAI9U,EAAE+U,EAAE,KAAKpE,EAAEmE,EAAE,IAAInE,EAAEoE,EAAE,MAAM,IAAI0hC,EAAE,SAASz2C,GAAG,SAAS2Q,EAAEA,GAAG3Q,EAAEuQ,KAAK5P,KAAKgQ,GAAGhQ,KAAKqP,KAAK,mBAAmBrP,KAAKirC,QAAQj7B,EAAEhQ,KAAKmC,OAAM,IAAK9C,GAAG8C,MAAM,OAAO9C,IAAI2Q,EAAEgY,UAAU3oB,GAAG2Q,EAAE1N,UAAUoG,OAAOojC,OAAOzsC,GAAGA,EAAEiD,WAAW0N,EAAE1N,UAAUkJ,YAAYwE,EAAEA,EAA5M,CAA+MhJ,OAAO+uC,GAAG,SAAS12C,GAAG,SAAS2Q,IAAI,GAAG3Q,EAAEuQ,KAAK5P,MAAM,IAAImQ,UAAU5R,OAAOc,EAAEuQ,KAAK5P,WAAW,GAAG,IAAImQ,UAAU5R,OAAO,CAAC,IAAIyR,EAAEG,UAAU,GAAG9Q,EAAEuQ,KAAK5P,KAAKgQ,IAAI,OAAO3Q,IAAI2Q,EAAEgY,UAAU3oB,GAAG2Q,EAAE1N,UAAUoG,OAAOojC,OAAOzsC,GAAGA,EAAEiD,WAAW0N,EAAE1N,UAAUkJ,YAAYwE,EAAEA,EAAE1N,UAAUqpC,YAAY,WAAW,MAAM,IAAI37B,EAAE1N,UAAUspC,SAAS,WAAW,OAAO57B,GAAGA,EAAjU,CAAoU8lC,GAAGE,GAAG,aAAaA,GAAG1zC,UAAUqpC,YAAY,WAAW,MAAM,IAAIqK,GAAG1zC,UAAUspC,SAAS,WAAW,OAAOoK,IAAIA,GAAGC,qBAAqB,WAAW,GAAG,IAAI9lC,UAAU5R,OAAOy3C,GAAGC,qBAAqB,WAAW,GAAG,IAAI9lC,UAAU5R,OAAO,CAAC,IAAIc,EAAE8Q,UAAU,GAAG,MAAM,IAAI4lC,GAAG,2BAA2B,OAAO12C,EAAE,KAAKA,EAAE,OAAO22C,GAAGE,OAAO,WAAW,IAAI72C,EAAE2Q,EAAE,GAAG,IAAIG,UAAU5R,OAAOc,EAAE8Q,UAAU,GAAG6lC,GAAGE,OAAO72C,EAAE,WAAW,GAAG,IAAI8Q,UAAU5R,SAAwByR,EAAEG,UAAU,KAA3B9Q,EAAE8Q,UAAU,KAAsB,MAAM,OAAOH,EAAE,IAAI+lC,GAAG,IAAIA,GAAG/lC,IAAIgmC,GAAGt3B,OAAO,WAAW,IAAIrf,EAAE2Q,EAAEvR,EAAE,GAAG,IAAI0R,UAAU5R,OAAOc,EAAE8Q,UAAU,GAAGH,EAAEG,UAAU,GAAG6lC,GAAGt3B,OAAOrf,EAAE2Q,EAAE,WAAW,GAAG,IAAIG,UAAU5R,SAASc,EAAE8Q,UAAU,GAAkB1R,EAAE0R,UAAU,KAA3BH,EAAEG,UAAU,IAAqBuO,OAAOrf,IAAI,MAAM,IAAI02C,GAAG,YAAY12C,EAAE,oBAAoB2Q,GAAG,OAAOvR,EAAE,KAAKA,EAAE,MAAM,IAAI03C,GAAG,WAAWn2C,KAAKo2C,QAAQ,KAAKp2C,KAAKq2C,YAAYpvC,MAAM,GAAG6pC,OAAO5mC,KAAI,WAAW,OAAOjD,MAAM,MAAKjH,KAAKs2C,OAAO,IAAIrvC,MAAM,GAAG6pC,KAAK,MAAM9wC,KAAKu2C,cAAc,KAAKv2C,KAAKw2C,UAAU,KAAKx2C,KAAKy2C,IAAI,KAAKz2C,KAAK02C,IAAI,KAAK12C,KAAK22C,gBAAgB,KAAK32C,KAAKs2C,OAAO,GAAG,IAAI3O,EAAE3nC,KAAKs2C,OAAO,GAAG,IAAI3O,EAAE3nC,KAAKy2C,IAAIz2C,KAAKs2C,OAAO,GAAGt2C,KAAK02C,IAAI12C,KAAKs2C,OAAO,GAAGt2C,KAAKo2C,QAAQ,GAAGzM,GAAG,CAACiN,eAAe,CAACvmC,cAAa,GAAIwmC,aAAa,CAACxmC,cAAa,GAAIymC,UAAU,CAACzmC,cAAa,GAAI0mC,gBAAgB,CAAC1mC,cAAa,GAAI2mC,mBAAmB,CAAC3mC,cAAa,GAAI4mC,uBAAuB,CAAC5mC,cAAa,IAAK8lC,GAAG7zC,UAAU40C,qBAAqB,SAAS73C,EAAE2Q,GAAG,OAAOhQ,KAAKm3C,sBAAsBn3C,KAAKu2C,cAAcl3C,GAAG2Q,IAAImmC,GAAG7zC,UAAU80C,mBAAmB,WAAW,IAAI/3C,EAAE,IAAIkW,EAAE,OAAOvV,KAAKq3C,cAAch4C,EAAE4uC,OAAO,aAAajuC,KAAKw2C,WAAWn3C,EAAE4uC,OAAO,WAAWjuC,KAAKs3C,eAAej4C,EAAE4uC,OAAO,cAAc5uC,EAAEmY,YAAY2+B,GAAG7zC,UAAUi1C,oBAAoB,SAASl4C,EAAE2Q,EAAEvR,EAAEa,GAAGU,KAAKq2C,YAAY,GAAG,GAAGh3C,EAAEW,KAAKq2C,YAAY,GAAG,GAAGrmC,EAAEhQ,KAAKq2C,YAAY,GAAG,GAAG53C,EAAEuB,KAAKq2C,YAAY,GAAG,GAAG/2C,EAAEU,KAAKo2C,QAAQp2C,KAAKw3C,iBAAiBn4C,EAAE2Q,EAAEvR,EAAEa,IAAI62C,GAAG7zC,UAAUm1C,mBAAmB,WAAW,OAAOz3C,KAAKo2C,SAASD,GAAG7zC,UAAU60C,oBAAoB,WAAW,GAAG,IAAIhnC,UAAU5R,OAAO,OAAOyB,KAAKu2C,gBAAgBv2C,KAAKu2C,cAActvC,MAAM,GAAG6pC,OAAO5mC,KAAI,WAAW,OAAOjD,MAAM,MAAKjH,KAAKm3C,oBAAoB,GAAGn3C,KAAKm3C,oBAAoB,SAAS,GAAG,IAAIhnC,UAAU5R,OAAO,CAAC,IAAIc,EAAE8Q,UAAU,GAAGnQ,KAAK03C,gBAAgBr4C,EAAE,GAAGW,KAAK03C,gBAAgBr4C,EAAE,IAAIW,KAAKu2C,cAAcl3C,GAAG,GAAG,EAAEW,KAAKu2C,cAAcl3C,GAAG,GAAG,IAAIW,KAAKu2C,cAAcl3C,GAAG,GAAG,EAAEW,KAAKu2C,cAAcl3C,GAAG,GAAG,KAAK82C,GAAG7zC,UAAUq1C,SAAS,WAAW,OAAO33C,KAAK43C,mBAAmB53C,KAAKw2C,WAAWL,GAAG7zC,UAAUu1C,kBAAkB,SAASx4C,GAAGW,KAAK22C,gBAAgBt3C,GAAG82C,GAAG7zC,UAAUw1C,uBAAuB,WAAW,GAAG,IAAI3nC,UAAU5R,OAAO,QAAQyB,KAAK83C,uBAAuB,MAAM93C,KAAK83C,uBAAuB,GAAG,GAAG,IAAI3nC,UAAU5R,OAAO,CAAC,IAAI,IAAIc,EAAE8Q,UAAU,GAAGH,EAAE,EAAEA,EAAEhQ,KAAKo2C,QAAQpmC,IAAI,IAAIhQ,KAAKs2C,OAAOtmC,GAAG08B,SAAS1sC,KAAKq2C,YAAYh3C,GAAG,MAAMW,KAAKs2C,OAAOtmC,GAAG08B,SAAS1sC,KAAKq2C,YAAYh3C,GAAG,IAAI,OAAM,EAAG,OAAM,IAAK82C,GAAG7zC,UAAUwhC,gBAAgB,SAASzkC,GAAG,OAAOW,KAAKs2C,OAAOj3C,IAAI82C,GAAG7zC,UAAU+0C,WAAW,WAAW,OAAOr3C,KAAK43C,oBAAoB53C,KAAKw2C,WAAWL,GAAG7zC,UAAUs1C,gBAAgB,WAAW,OAAO53C,KAAKo2C,UAAUD,GAAGY,iBAAiBZ,GAAG7zC,UAAUo1C,gBAAgB,SAASr4C,EAAE2Q,GAAG,OAAOmmC,GAAG4B,oBAAoB/3C,KAAKs2C,OAAOtmC,GAAGhQ,KAAKq2C,YAAYh3C,GAAG,GAAGW,KAAKq2C,YAAYh3C,GAAG,KAAK82C,GAAG7zC,UAAUg1C,YAAY,WAAW,OAAOt3C,KAAKo2C,UAAUD,GAAGc,wBAAwBd,GAAG7zC,UAAUkV,SAAS,WAAW,OAAOg1B,EAAEqJ,aAAa71C,KAAKq2C,YAAY,GAAG,GAAGr2C,KAAKq2C,YAAY,GAAG,IAAI,MAAM7J,EAAEqJ,aAAa71C,KAAKq2C,YAAY,GAAG,GAAGr2C,KAAKq2C,YAAY,GAAG,IAAIr2C,KAAKo3C,sBAAsBjB,GAAG7zC,UAAU01C,YAAY,SAAS34C,EAAE2Q,GAAG,OAAOhQ,KAAKq2C,YAAYh3C,GAAG2Q,IAAImmC,GAAG7zC,UAAU21C,eAAe,SAAS54C,GAAG,IAAI,IAAI2Q,EAAE,EAAEA,EAAEhQ,KAAKo2C,QAAQpmC,IAAI,GAAGhQ,KAAKs2C,OAAOtmC,GAAG08B,SAASrtC,GAAG,OAAM,EAAG,OAAM,GAAI82C,GAAG7zC,UAAU41C,4BAA4B,SAAS74C,EAAE2Q,GAAG,OAAOhQ,KAAKm3C,sBAAsBn3C,KAAKs2C,OAAOt2C,KAAKu2C,cAAcl3C,GAAG2Q,KAAKmmC,GAAG7zC,UAAUqpC,YAAY,WAAW,MAAM,IAAIwK,GAAG7zC,UAAUspC,SAAS,WAAW,OAAOuK,IAAIA,GAAG4B,oBAAoB,SAAS14C,EAAE2Q,EAAEvR,GAAG,IAAIa,EAAEV,KAAKoiB,IAAIviB,EAAE0V,EAAEnE,EAAEmE,GAAG6N,EAAEpjB,KAAKoiB,IAAIviB,EAAE2V,EAAEpE,EAAEoE,GAAGwa,GAAG,EAAE,GAAGvvB,EAAEqf,OAAO1O,GAAG4e,EAAE,OAAO,GAAGvvB,EAAEqf,OAAOjgB,GAAGmwB,EAAEtvB,EAAE0iB,EAAE1iB,EAAE0iB,MAAM,CAAC,IAAIljB,EAAEF,KAAKoiB,IAAI3hB,EAAE8U,EAAEnE,EAAEmE,GAAGzU,EAAEd,KAAKoiB,IAAI3hB,EAAE+U,EAAEpE,EAAEoE,GAAG,KAAKwa,EAAEtvB,EAAE0iB,EAAEljB,EAAEY,IAAIL,EAAEqf,OAAO1O,KAAK4e,EAAEhwB,KAAKM,IAAIJ,EAAEY,IAAI,OAAOs2C,GAAGE,SAAS,IAAItnB,IAAIvvB,EAAEqf,OAAO1O,IAAI,4BAA4B4e,GAAGunB,GAAGgC,6BAA6B,SAAS94C,EAAE2Q,EAAEvR,GAAG,IAAIa,EAAED,EAAE8U,EAAEnE,EAAEmE,EAAE6N,EAAE3iB,EAAE+U,EAAEpE,EAAEoE,EAAEwa,EAAEhwB,KAAKK,KAAKK,EAAEA,EAAE0iB,EAAEA,GAAG,OAAOg0B,GAAGE,SAAS,IAAItnB,IAAIvvB,EAAEqf,OAAO1O,IAAI,gCAAgC4e,GAAG+a,GAAGiN,eAAehvB,IAAI,WAAW,OAAO,GAAG+hB,GAAGkN,aAAajvB,IAAI,WAAW,OAAO,GAAG+hB,GAAGmN,UAAUlvB,IAAI,WAAW,OAAO,GAAG+hB,GAAGoN,gBAAgBnvB,IAAI,WAAW,OAAO,GAAG+hB,GAAGqN,mBAAmBpvB,IAAI,WAAW,OAAO,GAAG+hB,GAAGsN,uBAAuBrvB,IAAI,WAAW,OAAO,GAAGlf,OAAOyP,iBAAiBg+B,GAAGxM,IAAI,IAAIyO,GAAG,SAAS/4C,GAAG,SAAS2Q,IAAI3Q,EAAE6E,MAAMlE,KAAKmQ,WAAW,OAAO9Q,IAAI2Q,EAAEgY,UAAU3oB,GAAG2Q,EAAE1N,UAAUoG,OAAOojC,OAAOzsC,GAAGA,EAAEiD,WAAW0N,EAAE1N,UAAUkJ,YAAYwE,EAAEA,EAAE1N,UAAU+1C,qBAAqB,SAASh5C,GAAG,IAAI2Q,EAAE,IAAIzQ,EAAES,KAAKq2C,YAAY,GAAG,GAAGr2C,KAAKq2C,YAAY,GAAG,IAAI53C,EAAE,IAAIc,EAAES,KAAKq2C,YAAY,GAAG,GAAGr2C,KAAKq2C,YAAY,GAAG,IAAI,OAAOrmC,EAAElO,SAASzC,IAAIZ,EAAEqD,SAASzC,IAAI2Q,EAAE1N,UAAUi1C,oBAAoB,WAAW,GAAG,IAAIpnC,UAAU5R,OAAO,OAAOc,EAAEiD,UAAUi1C,oBAAoBrzC,MAAMlE,KAAKmQ,WAAW,IAAIH,EAAEG,UAAU,GAAG1R,EAAE0R,UAAU,GAAG7Q,EAAE6Q,UAAU,GAAG,GAAGnQ,KAAKw2C,WAAU,EAAGj3C,EAAEwC,WAAWtD,EAAEa,EAAE0Q,IAAI,IAAIokB,GAAGkd,iBAAiB7yC,EAAEa,EAAE0Q,IAAI,IAAIokB,GAAGkd,iBAAiBhyC,EAAEb,EAAEuR,GAAG,OAAOhQ,KAAKw2C,WAAU,GAAIxmC,EAAE0O,OAAOjgB,IAAIuR,EAAE0O,OAAOpf,MAAMU,KAAKw2C,WAAU,GAAIx2C,KAAKo2C,QAAQ/2C,EAAE23C,mBAAmB,KAAKh3C,KAAKo2C,QAAQ/2C,EAAE03C,iBAAiB/mC,EAAE1N,UAAUg2C,mBAAmB,SAASj5C,EAAE2Q,EAAEvR,EAAEa,EAAE0iB,GAAGA,EAAE7N,EAAEnU,KAAKu4C,mBAAmBl5C,EAAE8U,EAAEnE,EAAEmE,EAAE1V,EAAE0V,EAAE7U,EAAE6U,GAAG6N,EAAE5N,EAAEpU,KAAKu4C,mBAAmBl5C,EAAE+U,EAAEpE,EAAEoE,EAAE3V,EAAE2V,EAAE9U,EAAE8U,GAAG/U,EAAE8U,GAAG6N,EAAE7N,EAAE9U,EAAE+U,GAAG4N,EAAE5N,EAAEpE,EAAEmE,GAAG6N,EAAE7N,EAAEnE,EAAEoE,GAAG4N,EAAE5N,EAAE3V,EAAE0V,GAAG6N,EAAE7N,EAAE1V,EAAE2V,GAAG4N,EAAE5N,EAAE9U,EAAE6U,GAAG6N,EAAE7N,EAAE7U,EAAE8U,GAAG4N,EAAE5N,GAAGpE,EAAE1N,UAAUk2C,4BAA4B,SAASn5C,EAAEZ,EAAEa,EAAE0iB,GAAG,IAAI4M,EAAE,KAAK,IAAIA,EAAE1wB,EAAE25B,aAAax4B,EAAEZ,EAAEa,EAAE0iB,GAAG,MAAMljB,GAAG,KAAKA,aAAawtC,GAAG,MAAMxtC,EAAE8vB,EAAE5e,EAAEyoC,gBAAgBp5C,EAAEZ,EAAEa,EAAE0iB,GAAG,OAAO4M,GAAG5e,EAAE1N,UAAUu1B,aAAa,SAASx4B,EAAEZ,EAAEa,EAAE0iB,GAAG,IAAI4M,EAAE5uB,KAAK04C,8BAA8Br5C,EAAEZ,EAAEa,EAAE0iB,GAAG,OAAOhiB,KAAKq4C,qBAAqBzpB,KAAKA,EAAE,IAAI+Y,EAAE33B,EAAEyoC,gBAAgBp5C,EAAEZ,EAAEa,EAAE0iB,KAAK,OAAOhiB,KAAK22C,iBAAiB32C,KAAK22C,gBAAgBgC,YAAY/pB,GAAGA,GAAG5e,EAAE1N,UAAUi2C,mBAAmB,SAASl5C,EAAE2Q,EAAEvR,EAAEa,GAAG,IAAI0iB,EAAE3iB,EAAEuvB,EAAEhwB,KAAKoiB,IAAIgB,GAAG,OAAOpjB,KAAKoiB,IAAIhR,GAAG4e,IAAI5M,EAAEhS,EAAE4e,EAAEhwB,KAAKoiB,IAAIhR,IAAIpR,KAAKoiB,IAAIviB,GAAGmwB,IAAI5M,EAAEvjB,EAAEmwB,EAAEhwB,KAAKoiB,IAAIviB,IAAIG,KAAKoiB,IAAI1hB,GAAGsvB,IAAI5M,EAAE1iB,GAAG0iB,GAAGhS,EAAE1N,UAAUs2C,QAAQ,SAASv5C,EAAE2Q,EAAEvR,EAAEa,EAAE0iB,GAAG,IAAI4M,EAAE9U,EAAE+d,aAAax4B,EAAE2Q,EAAEvR,EAAEa,GAAGR,EAAEkB,KAAKq4C,qBAAqBzpB,GAAG2d,EAAE1Z,IAAIgmB,QAAQ,eAAe/5C,EAAE,2BAA2B8vB,GAAG5M,EAAE3Z,SAASumB,GAAG,MAAM2d,EAAE1Z,IAAIgmB,QAAQ,cAAc72B,EAAE3Z,SAASumB,KAAK5e,EAAE1N,UAAUo2C,8BAA8B,SAASr5C,EAAE2Q,EAAEvR,EAAEa,GAAG,IAAI0iB,EAAE,IAAI2lB,EAAEtoC,GAAGuvB,EAAE,IAAI+Y,EAAE33B,GAAGlR,EAAE,IAAI6oC,EAAElpC,GAAGiB,EAAE,IAAIioC,EAAEroC,GAAGmnC,EAAE,IAAIkB,EAAE3nC,KAAK84C,qBAAqB92B,EAAE4M,EAAE9vB,EAAEY,EAAE+mC,GAAG,IAAI16B,EAAE/L,KAAKw4C,4BAA4Bx2B,EAAE4M,EAAE9vB,EAAEY,GAAG,OAAOqM,EAAEoI,GAAGsyB,EAAEtyB,EAAEpI,EAAEqI,GAAGqyB,EAAEryB,EAAErI,GAAGiE,EAAE1N,UAAUy2C,6BAA6B,SAAS/oC,EAAEvR,EAAEa,EAAE0iB,GAAG,IAAI4M,EAAErvB,EAAEwC,WAAWiO,EAAEvR,EAAEa,GAAGR,EAAES,EAAEwC,WAAWiO,EAAEvR,EAAEujB,GAAGtiB,EAAEH,EAAEwC,WAAWzC,EAAE0iB,EAAEhS,GAAGy2B,EAAElnC,EAAEwC,WAAWzC,EAAE0iB,EAAEvjB,GAAG,OAAOmwB,GAAG9vB,GAAGkB,KAAKs2C,OAAO,GAAGh3C,EAAEU,KAAKs2C,OAAO,GAAGt0B,EAAE3iB,EAAE43C,wBAAwBv3C,GAAG+mC,GAAGzmC,KAAKs2C,OAAO,GAAGtmC,EAAEhQ,KAAKs2C,OAAO,GAAG73C,EAAEY,EAAE43C,wBAAwBroB,GAAGlvB,GAAGM,KAAKs2C,OAAO,GAAGh3C,EAAEU,KAAKs2C,OAAO,GAAGtmC,GAAG1Q,EAAEof,OAAO1O,IAAIlR,GAAG2nC,EAAEpnC,EAAE43C,uBAAuB53C,EAAE23C,oBAAoBpoB,GAAG6X,GAAGzmC,KAAKs2C,OAAO,GAAGh3C,EAAEU,KAAKs2C,OAAO,GAAG73C,GAAGa,EAAEof,OAAOjgB,IAAIK,GAAGY,EAAEL,EAAE43C,uBAAuB53C,EAAE23C,oBAAoBl4C,GAAGY,GAAGM,KAAKs2C,OAAO,GAAGt0B,EAAEhiB,KAAKs2C,OAAO,GAAGtmC,GAAGgS,EAAEtD,OAAO1O,IAAI4e,GAAG6X,EAAEpnC,EAAE43C,uBAAuB53C,EAAE23C,oBAAoBl4C,GAAG2nC,GAAGzmC,KAAKs2C,OAAO,GAAGt0B,EAAEhiB,KAAKs2C,OAAO,GAAG73C,GAAGujB,EAAEtD,OAAOjgB,IAAImwB,GAAGlvB,EAAEL,EAAE43C,uBAAuB53C,EAAE23C,oBAAoB33C,EAAE03C,iBAAiB/mC,EAAE1N,UAAUw2C,qBAAqB,SAASz5C,EAAE2Q,EAAEvR,EAAEa,EAAE0iB,GAAG,IAAI4M,EAAEvvB,EAAE8U,EAAEnE,EAAEmE,EAAE9U,EAAE8U,EAAEnE,EAAEmE,EAAErV,EAAEO,EAAE+U,EAAEpE,EAAEoE,EAAE/U,EAAE+U,EAAEpE,EAAEoE,EAAE1U,EAAEL,EAAE8U,EAAEnE,EAAEmE,EAAE9U,EAAE8U,EAAEnE,EAAEmE,EAAEsyB,EAAEpnC,EAAE+U,EAAEpE,EAAEoE,EAAE/U,EAAE+U,EAAEpE,EAAEoE,EAAErI,EAAEtN,EAAE0V,EAAE7U,EAAE6U,EAAE1V,EAAE0V,EAAE7U,EAAE6U,EAAExB,EAAElU,EAAE2V,EAAE9U,EAAE8U,EAAE3V,EAAE2V,EAAE9U,EAAE8U,EAAEpT,EAAEvC,EAAE0V,EAAE7U,EAAE6U,EAAE1V,EAAE0V,EAAE7U,EAAE6U,EAAEqyB,EAAE/nC,EAAE2V,EAAE9U,EAAE8U,EAAE3V,EAAE2V,EAAE9U,EAAE8U,EAAE+G,IAAIyT,EAAE7iB,EAAE6iB,EAAE7iB,IAAIrM,EAAEsB,EAAEtB,EAAEsB,IAAI,EAAEgM,IAAIlO,EAAE6T,EAAE7T,EAAE6T,IAAI8zB,EAAED,EAAEC,EAAED,IAAI,EAAExkB,EAAE7N,EAAEgH,EAAE6G,EAAE5N,EAAEpH,EAAE3N,EAAE8U,GAAG6N,EAAE7N,EAAE9U,EAAE+U,GAAG4N,EAAE5N,EAAEpE,EAAEmE,GAAG6N,EAAE7N,EAAEnE,EAAEoE,GAAG4N,EAAE5N,EAAE3V,EAAE0V,GAAG6N,EAAE7N,EAAE1V,EAAE2V,GAAG4N,EAAE5N,EAAE9U,EAAE6U,GAAG6N,EAAE7N,EAAE7U,EAAE8U,GAAG4N,EAAE5N,GAAGpE,EAAE1N,UAAUk1C,iBAAiB,SAASxnC,EAAEvR,EAAEa,EAAE0iB,GAAG,GAAGhiB,KAAKw2C,WAAU,GAAIj3C,EAAEwC,WAAWiO,EAAEvR,EAAEa,EAAE0iB,GAAG,OAAO3iB,EAAE03C,gBAAgB,IAAInoB,EAAEwF,GAAGkd,iBAAiBthC,EAAEvR,EAAEa,GAAGR,EAAEs1B,GAAGkd,iBAAiBthC,EAAEvR,EAAEujB,GAAG,GAAG4M,EAAE,GAAG9vB,EAAE,GAAG8vB,EAAE,GAAG9vB,EAAE,EAAE,OAAOO,EAAE03C,gBAAgB,IAAIr3C,EAAE00B,GAAGkd,iBAAiBhyC,EAAE0iB,EAAEhS,GAAGy2B,EAAErS,GAAGkd,iBAAiBhyC,EAAE0iB,EAAEvjB,GAAG,OAAGiB,EAAE,GAAG+mC,EAAE,GAAG/mC,EAAE,GAAG+mC,EAAE,EAASpnC,EAAE03C,gBAAuB,IAAInoB,GAAG,IAAI9vB,GAAG,IAAIY,GAAG,IAAI+mC,EAAEzmC,KAAK+4C,6BAA6B/oC,EAAEvR,EAAEa,EAAE0iB,IAAI,IAAI4M,GAAG,IAAI9vB,GAAG,IAAIY,GAAG,IAAI+mC,GAAGzmC,KAAKw2C,WAAU,EAAGxmC,EAAE08B,SAASptC,IAAI0Q,EAAE08B,SAAS1qB,GAAGhiB,KAAKs2C,OAAO,GAAGtmC,EAAEvR,EAAEiuC,SAASptC,IAAIb,EAAEiuC,SAAS1qB,GAAGhiB,KAAKs2C,OAAO,GAAG73C,EAAE,IAAImwB,EAAE5uB,KAAKs2C,OAAO,GAAG,IAAI3O,EAAEroC,GAAG,IAAIR,EAAEkB,KAAKs2C,OAAO,GAAG,IAAI3O,EAAE3lB,GAAG,IAAItiB,EAAEM,KAAKs2C,OAAO,GAAG,IAAI3O,EAAE33B,GAAG,IAAIy2B,IAAIzmC,KAAKs2C,OAAO,GAAG,IAAI3O,EAAElpC,MAAMuB,KAAKw2C,WAAU,EAAGx2C,KAAKs2C,OAAO,GAAGt2C,KAAK63B,aAAa7nB,EAAEvR,EAAEa,EAAE0iB,IAAI3iB,EAAE23C,qBAAqBhnC,EAAE1N,UAAUqpC,YAAY,WAAW,MAAM,IAAI37B,EAAE1N,UAAUspC,SAAS,WAAW,OAAO57B,GAAGA,EAAEyoC,gBAAgB,SAASp5C,EAAE2Q,EAAEvR,EAAEa,GAAG,IAAI0iB,EAAE3iB,EAAEuvB,EAAEwF,GAAG4kB,kBAAkB35C,EAAEZ,EAAEa,GAAGR,EAAEs1B,GAAG4kB,kBAAkBhpC,EAAEvR,EAAEa,GAAG,OAAOR,EAAE8vB,IAAIA,EAAE9vB,EAAEkjB,EAAEhS,IAAIlR,EAAEs1B,GAAG4kB,kBAAkBv6C,EAAEY,EAAE2Q,IAAI4e,IAAIA,EAAE9vB,EAAEkjB,EAAEvjB,IAAIK,EAAEs1B,GAAG4kB,kBAAkB15C,EAAED,EAAE2Q,IAAI4e,IAAIA,EAAE9vB,EAAEkjB,EAAE1iB,GAAG0iB,GAAGhS,EAA1jI,CAA6jImmC,IAAI8C,GAAG,aAAaA,GAAG32C,UAAUqpC,YAAY,WAAW,MAAM,IAAIsN,GAAG32C,UAAUspC,SAAS,WAAW,OAAOqN,IAAIA,GAAG3H,iBAAiB,SAASjyC,EAAE2Q,EAAEvR,GAAG,IAAIa,EAAE0Q,EAAEmE,EAAE9U,EAAE8U,EAAE6N,EAAEhS,EAAEoE,EAAE/U,EAAE+U,EAAEwa,EAAEnwB,EAAE0V,EAAEnE,EAAEmE,EAAErV,EAAEL,EAAE2V,EAAEpE,EAAEoE,EAAE,OAAO6kC,GAAGzH,aAAalyC,EAAE0iB,EAAE4M,EAAE9vB,IAAIm6C,GAAGzH,aAAa,SAASnyC,EAAE2Q,EAAEvR,EAAEa,GAAG,IAAI0iB,EAAE,KAAK4M,EAAE,KAAK9vB,EAAE,KAAK,GAAGkjB,EAAE,EAAE,IAAI3iB,GAAG,IAAIC,EAAE,OAAO,IAAI0Q,GAAG,IAAIvR,EAAE,EAAEuR,EAAE,EAAEvR,EAAE,GAAGujB,EAAEA,EAAEvjB,EAAE,EAAEujB,GAAGA,EAAE,GAAG,IAAIhS,GAAG,IAAIvR,EAAE,OAAOa,EAAE,EAAED,EAAE,EAAE2iB,GAAGA,EAAE3iB,EAAE,GAAG2iB,EAAEA,EAAE,GAAGhS,EAAE,EAAE1Q,EAAE,EAAE0Q,GAAG1Q,IAAI0iB,GAAGA,EAAE4M,EAAEvvB,EAAEA,EAAEZ,EAAEA,EAAEmwB,EAAEA,EAAE5e,EAAEA,EAAE1Q,EAAEA,EAAEsvB,GAAG5e,IAAI1Q,GAAG0iB,GAAGA,EAAEvjB,GAAGA,EAAEa,GAAGA,IAAIsvB,EAAEvvB,EAAEA,GAAGZ,EAAEA,EAAEmwB,EAAEA,EAAE5e,EAAEA,GAAG1Q,EAAEA,EAAEsvB,GAAGtvB,EAAE,GAAG0Q,GAAG1Q,GAAG0iB,GAAGA,EAAE3iB,GAAGA,EAAE2Q,GAAGA,IAAI4e,GAAGvvB,EAAEA,EAAEZ,EAAEA,EAAEmwB,EAAEA,GAAG5e,EAAEA,EAAE1Q,EAAEA,EAAEsvB,GAAG5e,GAAG1Q,GAAGD,GAAGA,EAAE2Q,GAAGA,EAAEvR,GAAGA,EAAEa,GAAGA,IAAI0iB,GAAGA,EAAE4M,GAAGvvB,EAAEA,GAAGZ,EAAEA,EAAEmwB,EAAEA,GAAG5e,EAAEA,GAAG1Q,EAAEA,EAAEsvB,GAAGvvB,EAAE,EAAE,CAAC,KAAKZ,EAAE,GAAG,OAAOujB,EAAE,KAAK3iB,GAAGZ,GAAG,OAAOujB,MAAM,CAAC,GAAGvjB,EAAE,EAAE,OAAOujB,EAAE,KAAK3iB,GAAGZ,GAAG,OAAOujB,EAAEA,GAAGA,EAAE3iB,GAAGA,EAAEZ,GAAGA,EAAE,OAAO,CAAC,IAA6Ba,IAA1BR,EAAEF,KAAKO,MAAMV,EAAEY,IAAgB2Q,GAAG,EAAE,OAAOgS,EAAE,GAAG1iB,EAAE0Q,EAAE,OAAOgS,EAAE,GAAG3iB,GAA9CZ,GAAGK,EAAEO,GAA6CZ,GAAG,GAAGuR,EAAE1Q,EAAEA,EAAE,OAAO0iB,MAAM,CAAC,GAAGhS,EAAE1Q,EAAEA,EAAE,OAAO0iB,EAAEvjB,EAAEY,EAAEZ,EAAEa,EAAE0Q,EAAE1Q,EAAE0iB,GAAGA,EAAE,GAAG,IAAI1iB,EAAE,OAAO,IAAIb,EAAE,GAAGujB,EAAE,GAAG,IAAIvjB,EAAE,OAAOujB,EAAE,IAA6BhS,IAA1BlR,EAAEF,KAAKO,MAAME,EAAEZ,IAAgBa,GAAG,EAAE,OAAO0iB,EAAE,GAAGhS,EAAE1Q,EAAE,OAAO0iB,EAAE,GAAGvjB,GAA9CY,GAAGP,EAAEL,GAA6CY,GAAG,GAAGC,EAAE0Q,EAAEA,EAAE,OAAOgS,MAAM,CAAC,GAAG1iB,EAAE0Q,EAAEA,EAAE,OAAOgS,EAAE3iB,EAAEZ,EAAEY,EAAE2Q,EAAE1Q,EAAE0Q,EAAEgS,GAAGA,EAAE,GAAG,IAAIhS,EAAE,OAAO,IAAI3Q,EAAE,EAAE2iB,EAAE,GAAG,IAAI3iB,EAAE,OAAO2iB,IAAI,IAAIk3B,GAAG,WAAWl5C,KAAKm5C,GAAG,KAAKn5C,KAAKo5C,eAAe,EAAEp5C,KAAKq5C,mBAAkB,EAAG,IAAIh6C,EAAE8Q,UAAU,GAAGnQ,KAAKm5C,GAAG95C,GAAG65C,GAAG52C,UAAUg3C,aAAa,SAASj6C,EAAE2Q,GAAG,GAAG3Q,EAAE8U,EAAEnU,KAAKm5C,GAAGhlC,GAAGnE,EAAEmE,EAAEnU,KAAKm5C,GAAGhlC,EAAE,OAAO,KAAK,GAAGnU,KAAKm5C,GAAGhlC,IAAInE,EAAEmE,GAAGnU,KAAKm5C,GAAG/kC,IAAIpE,EAAEoE,EAAE,OAAOpU,KAAKq5C,mBAAkB,EAAG,KAAK,GAAGh6C,EAAE+U,IAAIpU,KAAKm5C,GAAG/kC,GAAGpE,EAAEoE,IAAIpU,KAAKm5C,GAAG/kC,EAAE,CAAC,IAAI3V,EAAEY,EAAE8U,EAAE7U,EAAE0Q,EAAEmE,EAAE,OAAO1V,EAAEa,IAAIb,EAAEuR,EAAEmE,EAAE7U,EAAED,EAAE8U,GAAGnU,KAAKm5C,GAAGhlC,GAAG1V,GAAGuB,KAAKm5C,GAAGhlC,GAAG7U,IAAIU,KAAKq5C,mBAAkB,GAAI,KAAK,GAAGh6C,EAAE+U,EAAEpU,KAAKm5C,GAAG/kC,GAAGpE,EAAEoE,GAAGpU,KAAKm5C,GAAG/kC,GAAGpE,EAAEoE,EAAEpU,KAAKm5C,GAAG/kC,GAAG/U,EAAE+U,GAAGpU,KAAKm5C,GAAG/kC,EAAE,CAAC,IAAI4N,EAAE3iB,EAAE8U,EAAEnU,KAAKm5C,GAAGhlC,EAAEya,EAAEvvB,EAAE+U,EAAEpU,KAAKm5C,GAAG/kC,EAAEtV,EAAEkR,EAAEmE,EAAEnU,KAAKm5C,GAAGhlC,EAAEzU,EAAEsQ,EAAEoE,EAAEpU,KAAKm5C,GAAG/kC,EAAEqyB,EAAEwS,GAAGzH,aAAaxvB,EAAE4M,EAAE9vB,EAAEY,GAAG,GAAG,IAAI+mC,EAAE,OAAOzmC,KAAKq5C,mBAAkB,EAAG,KAAK35C,EAAEkvB,IAAI6X,GAAGA,GAAGA,EAAE,GAAGzmC,KAAKo5C,mBAAmBF,GAAG52C,UAAUi3C,iBAAiB,WAAW,OAAOv5C,KAAKw5C,gBAAgBlS,EAAEiG,UAAU2L,GAAG52C,UAAUk3C,YAAY,WAAW,OAAOx5C,KAAKq5C,kBAAkB/R,EAAEgG,SAASttC,KAAKo5C,eAAe,GAAG,EAAE9R,EAAE+F,SAAS/F,EAAEiG,UAAU2L,GAAG52C,UAAUm3C,YAAY,WAAW,OAAOz5C,KAAKq5C,mBAAmBH,GAAG52C,UAAUqpC,YAAY,WAAW,MAAM,IAAIuN,GAAG52C,UAAUspC,SAAS,WAAW,OAAOsN,IAAIA,GAAGQ,kBAAkB,WAAW,GAAGvpC,UAAU,aAAaw3B,GAAG+F,EAAEv9B,UAAU,GAAGshC,GAAG,CAAC,IAAI,IAAmBzhC,EAAEG,UAAU,GAAG1R,EAAE,IAAIy6C,GAAlC/oC,UAAU,IAA8B7Q,EAAE,IAAIqoC,EAAE3lB,EAAE,IAAI2lB,EAAE/Y,EAAE,EAAEA,EAAE5e,EAAEykB,OAAO7F,IAAI,GAAG5e,EAAE2hC,cAAc/iB,EAAEtvB,GAAG0Q,EAAE2hC,cAAc/iB,EAAE,EAAE5M,GAAGvjB,EAAE66C,aAAah6C,EAAE0iB,GAAGvjB,EAAEg7C,cAAc,OAAOh7C,EAAE+6C,cAAc,OAAO/6C,EAAE+6C,cAAc,GAAGrpC,UAAU,aAAaw3B,GAAGx3B,UAAU,aAAalJ,MAAM,CAAC,IAAI,IAAmBvH,EAAEyQ,UAAU,GAAGs2B,EAAE,IAAIyS,GAAlC/oC,UAAU,IAA8BpE,EAAE,EAAEA,EAAErM,EAAEnB,OAAOwN,IAAI,CAAC,IAAI4G,EAAEjT,EAAEqM,GAAG/K,EAAEtB,EAAEqM,EAAE,GAAG,GAAG06B,EAAE6S,aAAa3mC,EAAE3R,GAAGylC,EAAEgT,cAAc,OAAOhT,EAAE+S,cAAc,OAAO/S,EAAE+S,gBAAgB,IAAIplB,GAAG,aAAaulB,GAAG,CAACC,UAAU,CAACvpC,cAAa,GAAIwpC,MAAM,CAACxpC,cAAa,GAAIypC,iBAAiB,CAACzpC,cAAa,GAAI0pC,KAAK,CAAC1pC,cAAa,GAAIymC,UAAU,CAACzmC,cAAa,GAAI2pC,SAAS,CAAC3pC,cAAa,IAAK+jB,GAAG9xB,UAAUqpC,YAAY,WAAW,MAAM,IAAIvX,GAAG9xB,UAAUspC,SAAS,WAAW,OAAOxX,IAAIA,GAAGkd,iBAAiB,SAASjyC,EAAE2Q,EAAEvR,GAAG,OAAOqb,EAAEw3B,iBAAiBjyC,EAAE2Q,EAAEvR,IAAI21B,GAAG3V,WAAW,WAAW,GAAGtO,UAAU,aAAalJ,MAAM,CAAC,IAAI5H,EAAE8Q,UAAU,GAAG,GAAG9Q,EAAEd,OAAO,EAAE,OAAO,EAAE,IAAI,IAAIyR,EAAE,EAAEvR,EAAEY,EAAE,GAAG8U,EAAE7U,EAAE,EAAEA,EAAED,EAAEd,OAAO,EAAEe,IAAI,CAAC,IAAI0iB,EAAE3iB,EAAEC,GAAG6U,EAAE1V,EAAEmwB,EAAEvvB,EAAEC,EAAE,GAAG8U,EAAEpE,GAAGgS,GAAG3iB,EAAEC,EAAE,GAAG8U,EAAEwa,GAAG,OAAO5e,EAAE,EAAE,GAAG09B,EAAEv9B,UAAU,GAAGshC,GAAG,CAAC,IAAI3yC,EAAEqR,UAAU,GAAGzQ,EAAEZ,EAAE21B,OAAO,GAAG/0B,EAAE,EAAE,OAAO,EAAE,IAAI+mC,EAAE,IAAIkB,EAAE57B,EAAE,IAAI47B,EAAEh1B,EAAE,IAAIg1B,EAAE7oC,EAAE6yC,cAAc,EAAE5lC,GAAGjN,EAAE6yC,cAAc,EAAEh/B,GAAG,IAAI3R,EAAE+K,EAAEoI,EAAExB,EAAEwB,GAAGnT,EAAE,IAAI,IAAIwlC,EAAE,EAAErrB,EAAE,EAAEA,EAAEzb,EAAE,EAAEyb,IAAIsrB,EAAEryB,EAAErI,EAAEqI,EAAErI,EAAEoI,EAAExB,EAAEwB,EAAEpI,EAAEqI,EAAEzB,EAAEyB,EAAEtV,EAAE6yC,cAAcx2B,EAAE,EAAExI,GAAGA,EAAEwB,GAAGnT,EAAEwlC,GAAGz6B,EAAEoI,GAAGsyB,EAAEryB,EAAEzB,EAAEyB,GAAG,OAAOoyB,EAAE,IAAIpS,GAAG6lB,iBAAiB,SAAS56C,EAAE2Q,EAAEvR,EAAEa,GAAG,GAAGD,EAAEqf,OAAO1O,GAAG,OAAOokB,GAAG4kB,kBAAkB35C,EAAEZ,EAAEa,GAAG,GAAGb,EAAEigB,OAAOpf,GAAG,OAAO80B,GAAG4kB,kBAAkB15C,EAAED,EAAE2Q,GAAG,IAAIgS,GAAE,EAAG,GAAGziB,EAAEwC,WAAW1C,EAAE2Q,EAAEvR,EAAEa,GAAG,CAAC,IAAIsvB,GAAG5e,EAAEmE,EAAE9U,EAAE8U,IAAI7U,EAAE8U,EAAE3V,EAAE2V,IAAIpE,EAAEoE,EAAE/U,EAAE+U,IAAI9U,EAAE6U,EAAE1V,EAAE0V,GAAG,GAAG,IAAIya,EAAE5M,GAAE,MAAO,CAAC,IAAIljB,GAAGO,EAAE+U,EAAE3V,EAAE2V,IAAI9U,EAAE6U,EAAE1V,EAAE0V,IAAI9U,EAAE8U,EAAE1V,EAAE0V,IAAI7U,EAAE8U,EAAE3V,EAAE2V,GAAG1U,IAAIL,EAAE+U,EAAE3V,EAAE2V,IAAIpE,EAAEmE,EAAE9U,EAAE8U,IAAI9U,EAAE8U,EAAE1V,EAAE0V,IAAInE,EAAEoE,EAAE/U,EAAE+U,IAAIwa,EAAE6X,EAAE3nC,EAAE8vB,GAAG6X,EAAE,GAAGA,EAAE,GAAG/mC,EAAE,GAAGA,EAAE,KAAKsiB,GAAE,SAAUA,GAAE,EAAG,OAAOA,EAAE2rB,EAAEvuC,IAAIg1B,GAAG4kB,kBAAkB35C,EAAEZ,EAAEa,GAAG80B,GAAG4kB,kBAAkBhpC,EAAEvR,EAAEa,GAAG80B,GAAG4kB,kBAAkBv6C,EAAEY,EAAE2Q,GAAGokB,GAAG4kB,kBAAkB15C,EAAED,EAAE2Q,IAAI,GAAGokB,GAAG8lB,cAAc,SAAS76C,EAAE2Q,GAAG,OAAOokB,GAAGslB,kBAAkBr6C,EAAE2Q,KAAKs3B,EAAEiG,UAAUnZ,GAAG+lB,cAAc,SAAS96C,GAAG,IAAI2Q,EAAE3Q,EAAEo1B,OAAO,GAAGzkB,GAAG,EAAE,OAAO,EAAE,IAAIvR,EAAE,EAAEa,EAAE,IAAIqoC,EAAEtoC,EAAEsyC,cAAc,EAAEryC,GAAG,IAAI,IAAI0iB,EAAE1iB,EAAE6U,EAAEya,EAAEtvB,EAAE8U,EAAEtV,EAAE,EAAEA,EAAEkR,EAAElR,IAAI,CAACO,EAAEsyC,cAAc7yC,EAAEQ,GAAG,IAAII,EAAEJ,EAAE6U,EAAEsyB,EAAEnnC,EAAE8U,EAAErI,EAAErM,EAAEsiB,EAAErP,EAAE8zB,EAAE7X,EAAEnwB,GAAGG,KAAKK,KAAK8M,EAAEA,EAAE4G,EAAEA,GAAGqP,EAAEtiB,EAAEkvB,EAAE6X,EAAE,OAAOhoC,GAAG21B,GAAGgmB,MAAM,SAAS/6C,GAAG,IAAI2Q,EAAE3Q,EAAEd,OAAO,EAAE,GAAGyR,EAAE,EAAE,MAAM,IAAItR,EAAE,qEAAqE,IAAI,IAAID,EAAEY,EAAE,GAAGC,EAAE,EAAE0iB,EAAE,EAAEA,GAAGhS,EAAEgS,IAAI,CAAC,IAAI4M,EAAEvvB,EAAE2iB,GAAG4M,EAAExa,EAAE3V,EAAE2V,IAAI3V,EAAEmwB,EAAEtvB,EAAE0iB,GAAG,IAAIljB,EAAEQ,EAAE,IAAIR,GAAG,GAAG,IAAIA,EAAEkR,SAAS3Q,EAAEP,GAAG4tC,SAASjuC,IAAIK,IAAIQ,GAAG,IAAII,EAAEJ,EAAE,GAAGI,GAAGA,EAAE,GAAGsQ,QAAQ3Q,EAAEK,GAAGgtC,SAASjuC,IAAIiB,IAAIJ,GAAG,IAAImnC,EAAEpnC,EAAEP,GAAGiN,EAAE1M,EAAEK,GAAG,GAAG+mC,EAAEiG,SAASjuC,IAAIsN,EAAE2gC,SAASjuC,IAAIgoC,EAAEiG,SAAS3gC,GAAG,OAAM,EAAG,IAAI4G,EAAEyhB,GAAGimB,mBAAmB5T,EAAEhoC,EAAEsN,GAAQ,OAAS,IAAI4G,EAAE8zB,EAAEtyB,EAAEpI,EAAEoI,EAAExB,EAAE,GAAKyhB,GAAGslB,kBAAkB,SAASr6C,EAAE2Q,GAAG,OAAOkpC,GAAGQ,kBAAkBr6C,EAAE2Q,IAAIokB,GAAGkmB,+BAA+B,SAASj7C,EAAE2Q,EAAEvR,GAAG,IAAIa,GAAGb,EAAE0V,EAAEnE,EAAEmE,IAAI1V,EAAE0V,EAAEnE,EAAEmE,IAAI1V,EAAE2V,EAAEpE,EAAEoE,IAAI3V,EAAE2V,EAAEpE,EAAEoE,GAAG4N,IAAIhS,EAAEoE,EAAE/U,EAAE+U,IAAI3V,EAAE0V,EAAEnE,EAAEmE,IAAInE,EAAEmE,EAAE9U,EAAE8U,IAAI1V,EAAE2V,EAAEpE,EAAEoE,IAAI9U,EAAE,OAAOV,KAAKoiB,IAAIgB,GAAGpjB,KAAKK,KAAKK,IAAI80B,GAAGimB,mBAAmB,SAASh7C,EAAE2Q,EAAEvR,GAAG,OAAO21B,GAAGkd,iBAAiBjyC,EAAE2Q,EAAEvR,IAAI21B,GAAG4kB,kBAAkB,WAAW,GAAG,IAAI7oC,UAAU5R,OAAO,CAAC,IAAIc,EAAE8Q,UAAU,GAAGH,EAAEG,UAAU,GAAG,GAAG,IAAIH,EAAEzR,OAAO,MAAM,IAAIG,EAAE,+CAA+C,IAAI,IAAID,EAAEY,EAAEgJ,SAAS2H,EAAE,IAAI1Q,EAAE,EAAEA,EAAE0Q,EAAEzR,OAAO,EAAEe,IAAI,CAAC,IAAI0iB,EAAEoS,GAAG4kB,kBAAkB35C,EAAE2Q,EAAE1Q,GAAG0Q,EAAE1Q,EAAE,IAAI0iB,EAAEvjB,IAAIA,EAAEujB,GAAG,OAAOvjB,EAAE,GAAG,IAAI0R,UAAU5R,OAAO,CAAC,IAAIqwB,EAAEze,UAAU,GAAGrR,EAAEqR,UAAU,GAAGzQ,EAAEyQ,UAAU,GAAG,GAAGrR,EAAEqV,IAAIzU,EAAEyU,GAAGrV,EAAEsV,IAAI1U,EAAE0U,EAAE,OAAOwa,EAAEvmB,SAASvJ,GAAG,IAAI2nC,GAAG/mC,EAAEyU,EAAErV,EAAEqV,IAAIzU,EAAEyU,EAAErV,EAAEqV,IAAIzU,EAAE0U,EAAEtV,EAAEsV,IAAI1U,EAAE0U,EAAEtV,EAAEsV,GAAGrI,IAAI6iB,EAAEza,EAAErV,EAAEqV,IAAIzU,EAAEyU,EAAErV,EAAEqV,IAAIya,EAAExa,EAAEtV,EAAEsV,IAAI1U,EAAE0U,EAAEtV,EAAEsV,IAAIqyB,EAAE,GAAG16B,GAAG,EAAE,OAAO6iB,EAAEvmB,SAASvJ,GAAG,GAAGiN,GAAG,EAAE,OAAO6iB,EAAEvmB,SAAS3I,GAAG,IAAIiT,IAAI7T,EAAEsV,EAAEwa,EAAExa,IAAI1U,EAAEyU,EAAErV,EAAEqV,IAAIrV,EAAEqV,EAAEya,EAAEza,IAAIzU,EAAE0U,EAAEtV,EAAEsV,IAAIqyB,EAAE,OAAO7nC,KAAKoiB,IAAIrO,GAAG/T,KAAKK,KAAKwnC,KAAKrS,GAAGmmB,SAAS,SAASl7C,EAAE2Q,GAAG,IAAI,IAAIvR,EAAE,IAAI25C,GAAG94C,EAAE,EAAEA,EAAE0Q,EAAEzR,OAAOe,IAAI,CAAC,IAAI0iB,EAAEhS,EAAE1Q,EAAE,GAAGsvB,EAAE5e,EAAE1Q,GAAG,GAAGb,EAAE84C,oBAAoBl4C,EAAE2iB,EAAE4M,GAAGnwB,EAAEm5C,kBAAkB,OAAM,EAAG,OAAM,GAAI+B,GAAGC,UAAUhyB,IAAI,WAAW,OAAO,GAAG+xB,GAAGE,MAAMjyB,IAAI,WAAW,OAAOwM,GAAGwlB,WAAWD,GAAGG,iBAAiBlyB,IAAI,WAAW,OAAO,GAAG+xB,GAAGI,KAAKnyB,IAAI,WAAW,OAAOwM,GAAG0lB,kBAAkBH,GAAG7C,UAAUlvB,IAAI,WAAW,OAAO,GAAG+xB,GAAGK,SAASpyB,IAAI,WAAW,OAAOwM,GAAG0iB,WAAWpuC,OAAOyP,iBAAiBic,GAAGulB,IAAI,IAAInK,GAAG,aAAaA,GAAGltC,UAAUk4C,OAAO,SAASn7C,KAAKmwC,GAAGltC,UAAUqpC,YAAY,WAAW,MAAM,IAAI6D,GAAGltC,UAAUspC,SAAS,WAAW,OAAO4D,IAAI,IAAIiL,GAAG,WAAW,IAAIp7C,EAAE8Q,UAAU,GAAGnQ,KAAK06C,UAAU,KAAK16C,KAAK26C,SAAS,KAAK36C,KAAK46C,MAAM,KAAK56C,KAAK66C,UAAU,KAAK76C,KAAK26C,SAASt7C,EAAEW,KAAK46C,MAAMv7C,EAAEy7C,WAAWnjB,GAAG,CAAC0U,iBAAiB,CAACh8B,cAAa,GAAI0qC,gBAAgB,CAAC1qC,cAAa,GAAI2qC,qBAAqB,CAAC3qC,cAAa,GAAI4qC,qBAAqB,CAAC5qC,cAAa,GAAI6qC,qBAAqB,CAAC7qC,cAAa,GAAI8qC,0BAA0B,CAAC9qC,cAAa,GAAI+qC,kBAAkB,CAAC/qC,cAAa,GAAIgrC,uBAAuB,CAAChrC,cAAa,GAAIirC,6BAA6B,CAACjrC,cAAa,GAAIkrC,sBAAsB,CAAClrC,cAAa,IAAKoqC,GAAGn4C,UAAU4J,qBAAqB,WAAW,OAAOlM,KAAKw7C,iBAAiBf,GAAGa,8BAA8Bb,GAAGn4C,UAAUm5C,WAAW,WAAW,OAAOz7C,KAAK26C,UAAUF,GAAGn4C,UAAUo5C,aAAa,SAASr8C,GAAG,OAAOW,MAAMy6C,GAAGn4C,UAAUkwC,QAAQ,WAAW,OAAO,GAAGiI,GAAGn4C,UAAUq5C,YAAY,WAAW,OAAM,GAAIlB,GAAGn4C,UAAUoc,OAAO,WAAW,GAAGvO,UAAU,aAAasqC,GAAG,CAAC,IAAIp7C,EAAE8Q,UAAU,GAAG,OAAO,OAAO9Q,GAAGW,KAAK47C,WAAWv8C,GAAG,GAAG8Q,UAAU,aAAazH,OAAO,CAAC,IAAIsH,EAAEG,UAAU,GAAG,KAAKH,aAAayqC,IAAI,OAAM,EAAG,IAAIh8C,EAAEuR,EAAE,OAAOhQ,KAAK67C,YAAYp9C,KAAKg8C,GAAGn4C,UAAUu5C,YAAY,SAASx8C,GAAG,OAAOW,OAAOX,GAAGW,KAAK67C,YAAYx8C,EAAE,IAAIo7C,GAAGn4C,UAAUw5C,gBAAgB,WAAW97C,KAAKkE,MAAMu2C,GAAGc,wBAAwBd,GAAGn4C,UAAUy5C,sBAAsB,WAAW/7C,KAAK06C,UAAU,MAAMD,GAAGn4C,UAAU05C,WAAW,SAAS38C,GAAG,OAAO,OAAOA,GAAGW,KAAKi8C,OAAOJ,YAAYx8C,EAAE48C,SAASxB,GAAGn4C,UAAU45C,UAAU,WAAW,OAAO,GAAGzB,GAAGn4C,UAAU65C,iBAAiB,WAAW,OAAO,GAAG1B,GAAGn4C,UAAUwqC,UAAU,WAAW,GAAG,IAAI38B,UAAU5R,OAAO,CAAC,IAAIc,EAAE8Q,UAAU,GAAGH,EAAE3Q,EAAE,OAAOW,KAAKw7C,iBAAiBxrC,EAAEwrC,eAAex7C,KAAKw7C,eAAexrC,EAAEwrC,eAAex7C,KAAKg1B,WAAWhlB,EAAEglB,UAAU,EAAEh1B,KAAKg1B,WAAW,EAAEhlB,EAAEglB,UAAU,EAAEh1B,KAAKo8C,mBAAmB/8C,GAAG,GAAG,IAAI8Q,UAAU5R,OAAO,CAAC,IAAIE,EAAE0R,UAAU,GAAG7Q,EAAE6Q,UAAU,GAAG,OAAOnQ,KAAKw7C,iBAAiB/8C,EAAE+8C,eAAex7C,KAAKw7C,eAAe/8C,EAAE+8C,eAAex7C,KAAKg1B,WAAWv2B,EAAEu2B,UAAU,EAAEh1B,KAAKg1B,WAAW,EAAEv2B,EAAEu2B,UAAU,EAAEh1B,KAAKo8C,mBAAmB39C,EAAEa,KAAKm7C,GAAGn4C,UAAU+5C,YAAY,WAAW,OAAOr8C,KAAK66C,WAAWJ,GAAGn4C,UAAUw4C,QAAQ,WAAW,OAAO96C,KAAK46C,OAAOH,GAAGn4C,UAAUg6C,YAAY,WAAW,OAAOt8C,KAAKy7C,aAAac,WAAWv8C,KAAKw8C,wBAAwB/B,GAAGn4C,UAAUm6C,2BAA2B,SAASp9C,GAAG,GAAGA,EAAEm8C,iBAAiBf,GAAGa,6BAA6B,MAAM,IAAI58C,EAAE,8DAA8D+7C,GAAGn4C,UAAUo6C,MAAM,SAASr9C,EAAE2Q,EAAEvR,GAAG,OAAO,IAAIA,EAAEY,EAAEqf,OAAO1O,GAAG3Q,EAAEgJ,SAAS2H,IAAIvR,GAAGg8C,GAAGn4C,UAAU25C,KAAK,WAAW,IAAI58C,EAAEW,KAAKmX,OAAO,OAAO9X,EAAEs9C,YAAYt9C,GAAGo7C,GAAGn4C,UAAUs6C,kBAAkB,WAAW,OAAO58C,KAAK26C,SAASiC,qBAAqBnC,GAAGn4C,UAAUk6C,oBAAoB,WAAW,OAAO,OAAOx8C,KAAK06C,YAAY16C,KAAK06C,UAAU16C,KAAK68C,2BAA2B,IAAIt9C,EAAES,KAAK06C,YAAYD,GAAGn4C,UAAUw6C,QAAQ,SAASz9C,GAAGW,KAAK46C,MAAMv7C,GAAGo7C,GAAGn4C,UAAUy6C,YAAY,SAAS19C,GAAGW,KAAK66C,UAAUx7C,GAAGo7C,GAAGn4C,UAAUjE,QAAQ,SAASgB,EAAE2Q,GAAG,IAAI,IAAIvR,EAAEY,EAAEkpB,WAAWjpB,EAAE0Q,EAAEuY,WAAW9pB,EAAEu+C,WAAW19C,EAAE09C,WAAW,CAAC,IAAIh7B,EAAEvjB,EAAE2T,OAAOwc,EAAEtvB,EAAE8S,OAAOtT,EAAEkjB,EAAE8qB,UAAUle,GAAG,GAAG,IAAI9vB,EAAE,OAAOA,EAAE,OAAOL,EAAEu+C,UAAU,EAAE19C,EAAE09C,WAAW,EAAE,GAAGvC,GAAGn4C,UAAU2qC,SAAS,WAAW,OAAOjtC,KAAKw8C,sBAAsBvP,YAAYwN,GAAGn4C,UAAU26C,8BAA8B,WAAW,OAAOj9C,KAAKw7C,iBAAiBf,GAAGa,8BAA8Bt7C,KAAKw7C,iBAAiBf,GAAGO,sBAAsBh7C,KAAKw7C,iBAAiBf,GAAGU,2BAA2Bn7C,KAAKw7C,iBAAiBf,GAAGY,wBAAwBZ,GAAGn4C,UAAUqpC,YAAY,WAAW,MAAM,CAACx3B,EAAEyzB,EAAE53B,IAAIyqC,GAAGn4C,UAAUspC,SAAS,WAAW,OAAO6O,IAAIA,GAAGyC,oBAAoB,SAAS79C,GAAG,IAAI,IAAI2Q,EAAE,EAAEA,EAAE3Q,EAAEd,OAAOyR,IAAI,IAAI3Q,EAAE2Q,GAAGglB,UAAU,OAAM,EAAG,OAAM,GAAIylB,GAAG0C,gBAAgB,SAAS99C,GAAG,IAAI,IAAI2Q,EAAE,EAAEA,EAAE3Q,EAAEd,OAAOyR,IAAI,GAAG,OAAO3Q,EAAE2Q,GAAG,OAAM,EAAG,OAAM,GAAI2nB,GAAG0U,iBAAiBzkB,IAAI,WAAW,OAAO,oBAAoB+P,GAAGojB,gBAAgBnzB,IAAI,WAAW,OAAO,GAAG+P,GAAGqjB,qBAAqBpzB,IAAI,WAAW,OAAO,GAAG+P,GAAGsjB,qBAAqBrzB,IAAI,WAAW,OAAO,GAAG+P,GAAGujB,qBAAqBtzB,IAAI,WAAW,OAAO,GAAG+P,GAAGwjB,0BAA0BvzB,IAAI,WAAW,OAAO,GAAG+P,GAAGyjB,kBAAkBxzB,IAAI,WAAW,OAAO,GAAG+P,GAAG0jB,uBAAuBzzB,IAAI,WAAW,OAAO,GAAG+P,GAAG2jB,6BAA6B1zB,IAAI,WAAW,OAAO,GAAG+P,GAAG4jB,sBAAsB3zB,IAAI,WAAW,OAAOw1B,IAAI10C,OAAOyP,iBAAiBsiC,GAAG9iB,IAAI,IAAIylB,GAAG,aAAaA,GAAGzR,YAAY,WAAW,MAAM,CAAC6D,KAAK4N,GAAG5C,OAAO,SAASn7C,GAAGA,EAAE08C,yBAAyB,IAAIsB,GAAG,aAAaA,GAAG/6C,UAAUk4C,OAAO,SAASn7C,KAAKg+C,GAAG/6C,UAAUqpC,YAAY,WAAW,MAAM,IAAI0R,GAAG/6C,UAAUspC,SAAS,WAAW,OAAOyR,IAAI,IAAI9N,GAAG,aAAa+N,GAAG,CAACC,qBAAqB,CAACltC,cAAa,GAAImtC,yBAAyB,CAACntC,cAAa,GAAIotC,oCAAoC,CAACptC,cAAa,GAAIqtC,mCAAmC,CAACrtC,cAAa,GAAIstC,mBAAmB,CAACttC,cAAa,GAAIutC,uBAAuB,CAACvtC,cAAa,GAAIwtC,mCAAmC,CAACxtC,cAAa,GAAIytC,kCAAkC,CAACztC,cAAa,GAAI0tC,sBAAsB,CAAC1tC,cAAa,IAAKk/B,GAAGjtC,UAAU07C,aAAa,SAAS3+C,KAAKkwC,GAAGjtC,UAAUqpC,YAAY,WAAW,MAAM,IAAI4D,GAAGjtC,UAAUspC,SAAS,WAAW,OAAO2D,IAAI+N,GAAGC,qBAAqB31B,IAAI,WAAW,OAAOq2B,IAAIX,GAAGE,yBAAyB51B,IAAI,WAAW,OAAOs2B,IAAIZ,GAAGG,oCAAoC71B,IAAI,WAAW,OAAOu2B,IAAIb,GAAGI,mCAAmC91B,IAAI,WAAW,OAAOw2B,IAAId,GAAGK,mBAAmB/1B,IAAI,WAAW,OAAO,IAAIq2B,IAAIX,GAAGM,uBAAuBh2B,IAAI,WAAW,OAAO,IAAIs2B,IAAIZ,GAAGO,mCAAmCj2B,IAAI,WAAW,OAAO,IAAIu2B,IAAIb,GAAGQ,kCAAkCl2B,IAAI,WAAW,OAAO,IAAIw2B,IAAId,GAAGS,sBAAsBn2B,IAAI,WAAW,OAAO2nB,GAAGoO,oBAAoBj1C,OAAOyP,iBAAiBo3B,GAAG+N,IAAI,IAAIW,GAAG,aAAaA,GAAG37C,UAAU07C,aAAa,SAAS3+C,GAAG,OAAOA,EAAE,GAAG,GAAG4+C,GAAG37C,UAAUqpC,YAAY,WAAW,MAAM,CAAC4D,KAAK0O,GAAG37C,UAAUspC,SAAS,WAAW,OAAOqS,IAAI,IAAIC,GAAG,aAAaA,GAAG57C,UAAU07C,aAAa,SAAS3+C,GAAG,OAAOA,EAAE,GAAG6+C,GAAG57C,UAAUqpC,YAAY,WAAW,MAAM,CAAC4D,KAAK2O,GAAG57C,UAAUspC,SAAS,WAAW,OAAOsS,IAAI,IAAIC,GAAG,aAAaA,GAAG77C,UAAU07C,aAAa,SAAS3+C,GAAG,OAAOA,EAAE,GAAG8+C,GAAG77C,UAAUqpC,YAAY,WAAW,MAAM,CAAC4D,KAAK4O,GAAG77C,UAAUspC,SAAS,WAAW,OAAOuS,IAAI,IAAIC,GAAG,aAAaA,GAAG97C,UAAU07C,aAAa,SAAS3+C,GAAG,OAAO,IAAIA,GAAG++C,GAAG97C,UAAUqpC,YAAY,WAAW,MAAM,CAAC4D,KAAK6O,GAAG97C,UAAUspC,SAAS,WAAW,OAAOwS,IAAI,IAAI7S,GAAG,aAAaA,GAAGjpC,UAAU8wB,IAAI,aAAamY,GAAGjpC,UAAUkpC,OAAO,aAAaD,GAAGjpC,UAAU0yB,QAAQ,aAAauW,GAAGjpC,UAAUimB,SAAS,aAAagjB,GAAGjpC,UAAUmyB,KAAK,aAAa8W,GAAGjpC,UAAU+7C,QAAQ,aAAa9S,GAAGjpC,UAAUgB,OAAO,cAAc7E,EAAE6D,UAAU,IAAI0E,OAAOqI,KAAK,4BAA4B,IAAIivC,GAAG,aAAaA,GAAGh8C,UAAU06C,QAAQ,aAAasB,GAAGh8C,UAAU8P,KAAK,aAAaksC,GAAGh8C,UAAUgB,OAAO,aAAa,IAAIi7C,GAAG,SAASl/C,GAAG,SAAS2Q,IAAI3Q,EAAE6E,MAAMlE,KAAKmQ,WAAW,OAAO9Q,IAAI2Q,EAAEgY,UAAU3oB,GAAG2Q,EAAE1N,UAAUoG,OAAOojC,OAAOzsC,GAAGA,EAAEiD,WAAW0N,EAAE1N,UAAUkJ,YAAYwE,EAAEA,EAAE1N,UAAUslB,IAAI,aAAa5X,EAAE1N,UAAU4Y,IAAI,aAAalL,EAAE1N,UAAU0yB,QAAQ,aAAahlB,EAA1O,CAA6Ou7B,KAAKjsC,EAAEgD,UAAU,IAAI0E,OAAOqI,KAAK,yBAAyB,IAAImvC,GAAG,SAASn/C,GAAG,SAAS2Q,IAAI3Q,EAAEuQ,KAAK5P,MAAMA,KAAKsrC,OAAO,GAAGn7B,UAAU,aAAao7B,IAAIvrC,KAAKwrC,OAAOr7B,UAAU,IAAI,OAAO9Q,IAAI2Q,EAAEgY,UAAU3oB,GAAG2Q,EAAE1N,UAAUoG,OAAOojC,OAAOzsC,GAAGA,EAAEiD,WAAW0N,EAAE1N,UAAUkJ,YAAYwE,EAAEA,EAAE1N,UAAUm8C,eAAe,aAAazuC,EAAE1N,UAAUqpC,YAAY,WAAW,MAAM,CAACtsC,EAAEksC,KAAKv7B,EAAE1N,UAAU8wB,IAAI,SAAS/zB,GAAG,OAAO,IAAI8Q,UAAU5R,OAAOyB,KAAKsrC,OAAOjpC,KAAKhD,GAAGW,KAAKsrC,OAAO1nC,OAAOuM,UAAU,GAAGA,UAAU,KAAI,GAAIH,EAAE1N,UAAUjC,MAAM,WAAWL,KAAKsrC,OAAO,IAAIt7B,EAAE1N,UAAUkpC,OAAO,SAASnsC,GAAG,IAAI,IAAI2Q,EAAE3Q,EAAEkpB,WAAWvY,EAAEgtC,WAAWh9C,KAAKozB,IAAIpjB,EAAEoC,QAAQ,OAAM,GAAIpC,EAAE1N,UAAU4Y,IAAI,SAAS7b,EAAE2Q,GAAG,IAAIvR,EAAEuB,KAAKsrC,OAAOjsC,GAAG,OAAOW,KAAKsrC,OAAOjsC,GAAG2Q,EAAEvR,GAAGuR,EAAE1N,UAAUimB,SAAS,WAAW,OAAO,IAAIm2B,GAAG1+C,OAAOgQ,EAAE1N,UAAUslB,IAAI,SAASvoB,GAAG,GAAGA,EAAE,GAAGA,GAAGW,KAAKy0B,OAAO,MAAM,IAAIh2B,EAAE,OAAOuB,KAAKsrC,OAAOjsC,IAAI2Q,EAAE1N,UAAU0yB,QAAQ,WAAW,OAAO,IAAIh1B,KAAKsrC,OAAO/sC,QAAQyR,EAAE1N,UAAUmyB,KAAK,WAAW,OAAOz0B,KAAKsrC,OAAO/sC,QAAQyR,EAAE1N,UAAU+7C,QAAQ,WAAW,IAAI,IAAIh/C,EAAE,GAAG2Q,EAAE,EAAEvR,EAAEuB,KAAKsrC,OAAO/sC,OAAOyR,EAAEvR,EAAEuR,IAAI3Q,EAAEgD,KAAKrC,KAAKsrC,OAAOt7B,IAAI,OAAO3Q,GAAG2Q,EAAE1N,UAAUgB,OAAO,SAASjE,GAAG,IAAI,IAAI2Q,GAAE,EAAGvR,EAAE,EAAEa,EAAEU,KAAKsrC,OAAO/sC,OAAOE,EAAEa,EAAEb,IAAI,GAAGuB,KAAKsrC,OAAO7sC,KAAKY,EAAE,CAACW,KAAKsrC,OAAO1nC,OAAOnF,EAAE,GAAGuR,GAAE,EAAG,MAAM,OAAOA,GAAGA,EAAznC,CAA4nCuuC,IAAIG,GAAG,SAASr/C,GAAG,SAAS2Q,EAAEA,GAAG3Q,EAAEuQ,KAAK5P,MAAMA,KAAK2+C,WAAW3uC,EAAEhQ,KAAK4+C,UAAU,EAAE,OAAOv/C,IAAI2Q,EAAEgY,UAAU3oB,GAAG2Q,EAAE1N,UAAUoG,OAAOojC,OAAOzsC,GAAGA,EAAEiD,WAAW0N,EAAE1N,UAAUkJ,YAAYwE,EAAEA,EAAE1N,UAAU8P,KAAK,WAAW,GAAGpS,KAAK4+C,YAAY5+C,KAAK2+C,WAAWlqB,OAAO,MAAM,IAAIn1B,EAAE,OAAOU,KAAK2+C,WAAW/2B,IAAI5nB,KAAK4+C,cAAc5uC,EAAE1N,UAAU06C,QAAQ,WAAW,OAAOh9C,KAAK4+C,UAAU5+C,KAAK2+C,WAAWlqB,QAAQzkB,EAAE1N,UAAU4Y,IAAI,SAAS7b,GAAG,OAAOW,KAAK2+C,WAAWzjC,IAAIlb,KAAK4+C,UAAU,EAAEv/C,IAAI2Q,EAAE1N,UAAUgB,OAAO,WAAWtD,KAAK2+C,WAAWr7C,OAAOtD,KAAK2+C,WAAW/2B,IAAI5nB,KAAK4+C,aAAa5uC,EAA7hB,CAAgiBsuC,IAAIO,GAAG,SAASx/C,GAAG,SAAS2Q,IAAI,GAAG3Q,EAAEuQ,KAAK5P,MAAM,IAAImQ,UAAU5R,aAAa,GAAG,IAAI4R,UAAU5R,OAAO,CAAC,IAAIyR,EAAEG,UAAU,GAAGnQ,KAAKy+C,eAAezuC,EAAEzR,QAAQyB,KAAKozB,IAAIpjB,GAAE,QAAS,GAAG,IAAIG,UAAU5R,OAAO,CAAC,IAAIE,EAAE0R,UAAU,GAAG7Q,EAAE6Q,UAAU,GAAGnQ,KAAKy+C,eAAehgD,EAAEF,QAAQyB,KAAKozB,IAAI30B,EAAEa,IAAID,IAAI2Q,EAAEgY,UAAU3oB,IAAI2Q,EAAE1N,UAAUoG,OAAOojC,OAAOzsC,GAAGA,EAAEiD,YAAYkJ,YAAYwE,EAAE,IAAIvR,EAAE,CAACqgD,eAAe,CAACzuC,cAAa,IAAK,OAAO5R,EAAEqgD,eAAel3B,IAAI,WAAW,OAAO,IAAI3gB,MAAM,GAAG6pC,KAAK,OAAO9gC,EAAE1N,UAAUqvC,cAAc,SAAStyC,GAAG,OAAOW,KAAK4nB,IAAIvoB,IAAI2Q,EAAE1N,UAAUkpC,OAAO,WAAW,GAAG,IAAIr7B,UAAU5R,OAAO,CAAC,IAAI,IAAmBE,EAAE0R,UAAU,GAAG7Q,GAAE,EAAG0iB,EAAjC7R,UAAU,GAA2BoY,WAAWvG,EAAEg7B,WAAWh9C,KAAKozB,IAAIpR,EAAE5P,OAAO3T,GAAGa,GAAE,EAAG,OAAOA,EAAE,OAAOD,EAAEiD,UAAUkpC,OAAOtnC,MAAMlE,KAAKmQ,YAAYH,EAAE1N,UAAUyqC,MAAM,WAAW,IAAI,IAAI/8B,EAAE3Q,EAAEiD,UAAUyqC,MAAMn9B,KAAK5P,MAAMvB,EAAE,EAAEA,EAAEuB,KAAKy0B,OAAOh2B,IAAIuR,EAAEojB,IAAI30B,EAAEuB,KAAK4nB,IAAInpB,GAAG0Y,QAAQ,OAAOnH,GAAGA,EAAE1N,UAAU2vC,kBAAkB,WAAW,OAAOjyC,KAAKq+C,QAAQruC,EAAE8uC,iBAAiB9uC,EAAE1N,UAAU8wB,IAAI,WAAW,GAAG,IAAIjjB,UAAU5R,OAAO,CAAC,IAAIyR,EAAEG,UAAU,GAAG9Q,EAAEiD,UAAU8wB,IAAIxjB,KAAK5P,KAAKgQ,QAAQ,GAAG,IAAIG,UAAU5R,OAAO,CAAC,GAAG4R,UAAU,aAAalJ,OAAO,kBAAkBkJ,UAAU,GAAG,CAAC,IAAI1R,EAAE0R,UAAU,GAAG7Q,EAAE6Q,UAAU,GAAG,OAAOnQ,KAAKozB,IAAI30B,EAAEa,GAAE,IAAI,EAAG,GAAG6Q,UAAU,aAAaw3B,GAAG,kBAAkBx3B,UAAU,GAAG,CAAC,IAAI6R,EAAE7R,UAAU,GAAG,IAAIA,UAAU,IAAInQ,KAAKy0B,QAAQ,GAAMz0B,KAAK4nB,IAAI5nB,KAAKy0B,OAAO,GAAGiY,SAAS1qB,GAAG,OAAO,KAAK3iB,EAAEiD,UAAU8wB,IAAIxjB,KAAK5P,KAAKgiB,QAAQ,GAAG7R,UAAU,aAAazH,QAAQ,kBAAkByH,UAAU,GAAG,CAAC,IAAIye,EAAEze,UAAU,GAAGrR,EAAEqR,UAAU,GAAG,OAAOnQ,KAAKozB,IAAIxE,EAAE9vB,IAAG,QAAS,GAAG,IAAIqR,UAAU5R,OAAO,CAAC,GAAG,kBAAkB4R,UAAU,IAAIA,UAAU,aAAalJ,OAAO,kBAAkBkJ,UAAU,GAAG,CAAC,IAAIzQ,EAAEyQ,UAAU,GAAGs2B,EAAEt2B,UAAU,GAAG,GAAGA,UAAU,GAAG,IAAI,IAAIpE,EAAE,EAAEA,EAAErM,EAAEnB,OAAOwN,IAAI/L,KAAKozB,IAAI1zB,EAAEqM,GAAG06B,QAAQ,IAAI,IAAI9zB,EAAEjT,EAAEnB,OAAO,EAAEoU,GAAG,EAAEA,IAAI3S,KAAKozB,IAAI1zB,EAAEiT,GAAG8zB,GAAG,OAAM,EAAG,GAAG,kBAAkBt2B,UAAU,IAAIiL,OAAOqwB,UAAUt7B,UAAU,KAAKA,UAAU,aAAaw3B,EAAE,CAAC,IAAI3mC,EAAEmP,UAAU,GAAGq2B,EAAEr2B,UAAU,GAAG,IAAIA,UAAU,GAAG,CAAC,IAAIgL,EAAEnb,KAAKy0B,OAAO,GAAGtZ,EAAE,EAAE,CAAC,GAAGna,EAAE,GAAMhB,KAAK4nB,IAAI5mB,EAAE,GAAG0rC,SAASlG,GAAG,OAAO,KAAK,GAAGxlC,EAAEma,GAAMnb,KAAK4nB,IAAI5mB,GAAG0rC,SAASlG,GAAG,OAAO,MAAOnnC,EAAEiD,UAAU8wB,IAAIxjB,KAAK5P,KAAKgB,EAAEwlC,SAAS,GAAG,IAAIr2B,UAAU5R,OAAO,CAAC,IAAIyO,EAAEmD,UAAU,GAAGyC,EAAEzC,UAAU,GAAGiE,EAAEjE,UAAU,GAAGyH,EAAEzH,UAAU,GAAGzR,EAAE,EAAE0V,EAAEwD,IAAIlZ,GAAG,GAAG,IAAI,IAAI6zB,EAAEne,EAAEme,IAAI3a,EAAE2a,GAAG7zB,EAAEsB,KAAKozB,IAAIpmB,EAAEulB,GAAG3f,GAAG,OAAM,IAAK5C,EAAE1N,UAAUy8C,UAAU,WAAW/+C,KAAKy0B,OAAO,GAAGz0B,KAAKozB,IAAI,IAAIuU,EAAE3nC,KAAK4nB,IAAI,KAAI,IAAK5X,EAAE1N,UAAUqpC,YAAY,WAAW,MAAM,IAAI37B,EAAE1N,UAAUspC,SAAS,WAAW,OAAO57B,GAAGtH,OAAOyP,iBAAiBnI,EAAEvR,GAAGuR,EAAp5E,CAAu5EwuC,IAAIQ,GAAG,aAAaC,GAAG,CAACC,kBAAkB,CAAC7uC,cAAa,GAAI8uC,wBAAwB,CAAC9uC,cAAa,GAAIyuC,eAAe,CAACzuC,cAAa,IAAK4uC,GAAGC,kBAAkBt3B,IAAI,WAAW,OAAOw3B,IAAIH,GAAGE,wBAAwBv3B,IAAI,WAAW,OAAOy3B,IAAIJ,GAAGH,eAAel3B,IAAI,WAAW,OAAO,IAAI3gB,MAAM,GAAG6pC,KAAK,OAAOkO,GAAG18C,UAAUqpC,YAAY,WAAW,MAAM,IAAIqT,GAAG18C,UAAUspC,SAAS,WAAW,OAAOoT,IAAIA,GAAGM,OAAO,SAASjgD,GAAG,QAAQA,EAAEd,OAAO,MAAMc,EAAE,GAAGqtC,SAASrtC,EAAEA,EAAEd,OAAO,KAAKygD,GAAGO,YAAY,SAASlgD,EAAE2Q,GAAG,IAAI,IAAIvR,EAAE,EAAEA,EAAEY,EAAEd,OAAOE,IAAI,CAAC,IAAIa,EAAED,EAAEZ,GAAG,GAAGugD,GAAGt+C,QAAQpB,EAAE0Q,GAAG,EAAE,OAAO1Q,EAAE,OAAO,MAAM0/C,GAAGQ,OAAO,SAASngD,EAAE2Q,GAAG,IAAIvR,EAAEugD,GAAGt+C,QAAQsP,EAAE3Q,GAAG,GAAGZ,EAAE,EAAE,OAAO,KAAK,IAAIa,EAAE,IAAI2H,MAAM5H,EAAEd,QAAQuyC,KAAK,MAAMvE,EAAE2F,UAAU7yC,EAAEZ,EAAEa,EAAE,EAAED,EAAEd,OAAOE,GAAG8tC,EAAE2F,UAAU7yC,EAAE,EAAEC,EAAED,EAAEd,OAAOE,EAAEA,GAAG8tC,EAAE2F,UAAU5yC,EAAE,EAAED,EAAE,EAAEA,EAAEd,SAASygD,GAAGtgC,OAAO,WAAW,GAAG,IAAIvO,UAAU5R,OAAO,CAAC,IAAIc,EAAE8Q,UAAU,GAAGH,EAAEG,UAAU,GAAG,GAAG9Q,IAAI2Q,EAAE,OAAM,EAAG,GAAG,OAAO3Q,GAAG,OAAO2Q,EAAE,OAAM,EAAG,GAAG3Q,EAAEd,SAASyR,EAAEzR,OAAO,OAAM,EAAG,IAAI,IAAIE,EAAE,EAAEA,EAAEY,EAAEd,OAAOE,IAAI,IAAIY,EAAEZ,GAAGigB,OAAO1O,EAAEvR,IAAI,OAAM,EAAG,OAAM,EAAG,GAAG,IAAI0R,UAAU5R,OAAO,CAAC,IAAIe,EAAE6Q,UAAU,GAAG6R,EAAE7R,UAAU,GAAGye,EAAEze,UAAU,GAAG,GAAG7Q,IAAI0iB,EAAE,OAAM,EAAG,GAAG,OAAO1iB,GAAG,OAAO0iB,EAAE,OAAM,EAAG,GAAG1iB,EAAEf,SAASyjB,EAAEzjB,OAAO,OAAM,EAAG,IAAI,IAAIO,EAAE,EAAEA,EAAEQ,EAAEf,OAAOO,IAAI,GAAG,IAAI8vB,EAAEvwB,QAAQiB,EAAER,GAAGkjB,EAAEljB,IAAI,OAAM,EAAG,OAAM,IAAKkgD,GAAGnnB,aAAa,SAASx4B,EAAE2Q,GAAG,IAAI,IAAIvR,EAAE,IAAIogD,GAAGv/C,EAAE,EAAEA,EAAED,EAAEd,OAAOe,IAAI0Q,EAAEjO,WAAW1C,EAAEC,KAAKb,EAAE20B,IAAI/zB,EAAEC,IAAG,GAAI,OAAOb,EAAEwzC,qBAAqB+M,GAAGS,kBAAkB,SAASpgD,GAAG,IAAI,IAAI2Q,EAAE,EAAEA,EAAE3Q,EAAEd,OAAOyR,IAAI,GAAG3Q,EAAE2Q,EAAE,GAAG0O,OAAOrf,EAAE2Q,IAAI,OAAM,EAAG,OAAM,GAAIgvC,GAAGU,qBAAqB,SAASrgD,GAAG,OAAI2/C,GAAGS,kBAAkBpgD,GAAmB,IAAIw/C,GAAGx/C,GAAE,GAAI4yC,oBAAtB5yC,GAA2C2/C,GAAG54B,QAAQ,SAAS/mB,GAAG,IAAI,IAAI2Q,EAAE3Q,EAAEd,OAAO,EAAEE,EAAEG,KAAK8sC,MAAM17B,EAAE,GAAG1Q,EAAE,EAAEA,GAAGb,EAAEa,IAAI,CAAC,IAAI0iB,EAAE3iB,EAAEC,GAAGD,EAAEC,GAAGD,EAAE2Q,EAAE1Q,GAAGD,EAAE2Q,EAAE1Q,GAAG0iB,IAAIg9B,GAAGW,WAAW,SAAStgD,GAAG,IAAI,IAAI2Q,EAAE,EAAEvR,EAAE,EAAEA,EAAEY,EAAEd,OAAOE,IAAI,OAAOY,EAAEZ,IAAIuR,IAAI,IAAI1Q,EAAE,IAAI2H,MAAM+I,GAAG8gC,KAAK,MAAM,GAAG,IAAI9gC,EAAE,OAAO1Q,EAAE,IAAI,IAAI0iB,EAAE,EAAE4M,EAAE,EAAEA,EAAEvvB,EAAEd,OAAOqwB,IAAI,OAAOvvB,EAAEuvB,KAAKtvB,EAAE0iB,KAAK3iB,EAAEuvB,IAAI,OAAOtvB,GAAG0/C,GAAGY,SAAS,WAAW,GAAG,IAAIzvC,UAAU5R,OAAO,CAAC,IAAI,IAAIc,EAAE8Q,UAAU,GAAGH,EAAE,IAAI/I,MAAM5H,EAAEd,QAAQuyC,KAAK,MAAMryC,EAAE,EAAEA,EAAEY,EAAEd,OAAOE,IAAIuR,EAAEvR,GAAG,IAAIkpC,EAAEtoC,EAAEZ,IAAI,OAAOuR,EAAE,GAAG,IAAIG,UAAU5R,OAAO,IAAI,IAAIe,EAAE6Q,UAAU,GAAG6R,EAAE7R,UAAU,GAAGye,EAAEze,UAAU,GAAGrR,EAAEqR,UAAU,GAAGzQ,EAAEyQ,UAAU,GAAGs2B,EAAE,EAAEA,EAAE/mC,EAAE+mC,IAAI7X,EAAE9vB,EAAE2nC,GAAG,IAAIkB,EAAEroC,EAAE0iB,EAAEykB,KAAKuY,GAAGa,gBAAgB,SAASxgD,EAAE2Q,GAAG,IAAI,IAAIvR,EAAE,EAAEA,EAAEY,EAAEd,OAAOE,IAAI,CAAC,IAAIa,EAAED,EAAEZ,GAAGujB,EAAEhS,EAAE3Q,EAAEd,OAAOE,EAAE,GAAG,GAAG,IAAIa,EAAEwtC,UAAU9qB,GAAG,OAAM,EAAG,OAAM,GAAIg9B,GAAGc,SAAS,SAASzgD,GAAG,IAAI,IAAI2Q,EAAE,IAAIzQ,EAAEd,EAAE,EAAEA,EAAEY,EAAEd,OAAOE,IAAIuR,EAAEijC,gBAAgB5zC,EAAEZ,IAAI,OAAOuR,GAAGgvC,GAAG/M,kBAAkB,SAAS5yC,GAAG,OAAOA,EAAEg/C,QAAQW,GAAGF,iBAAiBE,GAAGe,6BAA6B,SAAS1gD,EAAE2Q,GAAG,OAAOA,EAAEzR,QAAQc,EAAE2Q,EAAE,IAAIgvC,GAAGt+C,QAAQ,SAASrB,EAAE2Q,GAAG,IAAI,IAAIvR,EAAE,EAAEA,EAAEuR,EAAEzR,OAAOE,IAAI,GAAGY,EAAEqf,OAAO1O,EAAEvR,IAAI,OAAOA,EAAE,OAAO,GAAGugD,GAAGgB,oBAAoB,SAAS3gD,GAAG,IAAI,IAAI2Q,EAAE,EAAEA,EAAEpR,KAAK8sC,MAAMrsC,EAAEd,OAAO,GAAGyR,IAAI,CAAC,IAAIvR,EAAEY,EAAEd,OAAO,EAAEyR,EAAE1Q,EAAED,EAAE2Q,GAAG88B,UAAUztC,EAAEZ,IAAI,GAAG,IAAIa,EAAE,OAAOA,EAAE,OAAO,GAAG0/C,GAAG3gD,QAAQ,SAASgB,EAAE2Q,GAAG,IAAI,IAAIvR,EAAE,EAAEA,EAAEY,EAAEd,QAAQE,EAAEuR,EAAEzR,QAAQ,CAAC,IAAIe,EAAED,EAAEZ,GAAGquC,UAAU98B,EAAEvR,IAAI,GAAG,IAAIa,EAAE,OAAOA,EAAEb,IAAI,OAAOA,EAAEuR,EAAEzR,QAAQ,EAAEE,EAAEY,EAAEd,OAAO,EAAE,GAAGygD,GAAGiB,cAAc,SAAS5gD,GAAG,IAAI,IAAI2Q,EAAE,KAAKvR,EAAE,EAAEA,EAAEY,EAAEd,OAAOE,KAAK,OAAOuR,GAAGA,EAAE88B,UAAUztC,EAAEZ,IAAI,KAAKuR,EAAE3Q,EAAEZ,IAAI,OAAOuR,GAAGgvC,GAAGkB,QAAQ,SAAS7gD,EAAE2Q,EAAEvR,GAAGuR,EAAE29B,EAAEG,MAAM99B,EAAE,EAAE3Q,EAAEd,QAAQ,IAAIe,GAAGb,EAAEkvC,EAAEG,MAAMrvC,GAAG,EAAEY,EAAEd,SAASyR,EAAE,EAAEvR,EAAE,IAAIa,EAAE,GAAG0Q,GAAG3Q,EAAEd,SAASe,EAAE,GAAGb,EAAEuR,IAAI1Q,EAAE,GAAG,IAAI0iB,EAAE,IAAI/a,MAAM3H,GAAGwxC,KAAK,MAAM,GAAG,IAAIxxC,EAAE,OAAO0iB,EAAE,IAAI,IAAI4M,EAAE,EAAE9vB,EAAEkR,EAAElR,GAAGL,EAAEK,IAAIkjB,EAAE4M,KAAKvvB,EAAEP,GAAG,OAAOkjB,GAAGtZ,OAAOyP,iBAAiB6mC,GAAGC,IAAI,IAAIG,GAAG,aAAaA,GAAG98C,UAAUjE,QAAQ,SAASgB,EAAE2Q,GAAG,OAAOgvC,GAAG3gD,QAAQgB,EAAE2Q,IAAIovC,GAAG98C,UAAUqpC,YAAY,WAAW,MAAM,CAACxnC,IAAIi7C,GAAG98C,UAAUspC,SAAS,WAAW,OAAOwT,IAAI,IAAIC,GAAG,aAAaA,GAAG/8C,UAAUjE,QAAQ,SAASgB,EAAE2Q,GAAG,IAAIvR,EAAEY,EAAEC,EAAE0Q,EAAE,GAAGvR,EAAEF,OAAOe,EAAEf,OAAO,OAAO,EAAE,GAAGE,EAAEF,OAAOe,EAAEf,OAAO,OAAO,EAAE,GAAG,IAAIE,EAAEF,OAAO,OAAO,EAAE,IAAIyjB,EAAEg9B,GAAG3gD,QAAQI,EAAEa,GAAG,OAAO0/C,GAAGa,gBAAgBphD,EAAEa,GAAG,EAAE0iB,GAAGq9B,GAAG/8C,UAAU69C,WAAW,SAAS9gD,EAAE2Q,GAAG,IAAIvR,EAAEY,EAAEC,EAAE0Q,EAAE,GAAGvR,EAAEF,OAAOe,EAAEf,OAAO,OAAO,EAAE,GAAGE,EAAEF,OAAOe,EAAEf,OAAO,OAAO,EAAE,GAAG,IAAIE,EAAEF,OAAO,OAAO,EAAE,IAAI,IAAIyjB,EAAEg9B,GAAGgB,oBAAoBvhD,GAAGmwB,EAAEowB,GAAGgB,oBAAoB1gD,GAAGR,EAAEkjB,EAAE,EAAE,EAAEvjB,EAAEF,OAAO,EAAEmB,EAAEkvB,EAAE,EAAE,EAAEnwB,EAAEF,OAAO,EAAEkoC,EAAE,EAAEA,EAAEhoC,EAAEF,OAAOkoC,IAAI,CAAC,IAAI16B,EAAEtN,EAAEK,GAAGguC,UAAUxtC,EAAEI,IAAI,GAAG,IAAIqM,EAAE,OAAOA,EAAEjN,GAAGkjB,EAAEtiB,GAAGkvB,EAAE,OAAO,GAAGywB,GAAG/8C,UAAUqpC,YAAY,WAAW,MAAM,CAACxnC,IAAIk7C,GAAG/8C,UAAUspC,SAAS,WAAW,OAAOyT,IAAI,IAAIe,GAAG,aAAaA,GAAG99C,UAAUslB,IAAI,aAAaw4B,GAAG99C,UAAU+9C,IAAI,aAAaD,GAAG99C,UAAUmyB,KAAK,aAAa2rB,GAAG99C,UAAU2xB,OAAO,aAAamsB,GAAG99C,UAAUg+C,SAAS,aAAa,IAAIC,GAAG,SAASlhD,GAAG,SAAS2Q,IAAI3Q,EAAE6E,MAAMlE,KAAKmQ,WAAW,OAAO9Q,IAAI2Q,EAAEgY,UAAU3oB,GAAG2Q,EAAE1N,UAAUoG,OAAOojC,OAAOzsC,GAAGA,EAAEiD,WAAW0N,EAAE1N,UAAUkJ,YAAYwE,EAAEA,EAA/I,CAAkJowC,KAAKp+B,EAAE1f,UAAU,IAAI0E,OAAOqI,KAAK,yBAAyBuf,EAAEtsB,UAAU,IAAIipC,IAAIzpC,SAAS,aAAa,IAAI0+C,GAAG,SAASnhD,GAAG,SAAS2Q,IAAI3Q,EAAEuQ,KAAK5P,MAAMA,KAAKsrC,OAAO,GAAGn7B,UAAU,aAAao7B,IAAIvrC,KAAKwrC,OAAOr7B,UAAU,IAAI,OAAO9Q,IAAI2Q,EAAEgY,UAAU3oB,GAAG2Q,EAAE1N,UAAUoG,OAAOojC,OAAOzsC,GAAGA,EAAEiD,WAAW0N,EAAE1N,UAAUkJ,YAAYwE,EAAEA,EAAE1N,UAAUR,SAAS,SAASzC,GAAG,IAAI,IAAI2Q,EAAE,EAAEvR,EAAEuB,KAAKsrC,OAAO/sC,OAAOyR,EAAEvR,EAAEuR,IAAK,GAAGhQ,KAAKsrC,OAAOt7B,KAAK3Q,EAAE,OAAM,EAAG,OAAM,GAAI2Q,EAAE1N,UAAU8wB,IAAI,SAAS/zB,GAAG,OAAOW,KAAK8B,SAASzC,KAAKW,KAAKsrC,OAAOjpC,KAAKhD,IAAG,IAAK2Q,EAAE1N,UAAUkpC,OAAO,SAASnsC,GAAG,IAAI,IAAI2Q,EAAE3Q,EAAEkpB,WAAWvY,EAAEgtC,WAAWh9C,KAAKozB,IAAIpjB,EAAEoC,QAAQ,OAAM,GAAIpC,EAAE1N,UAAUgB,OAAO,SAASjE,GAAG,MAAM,IAAI2H,OAAOgJ,EAAE1N,UAAUmyB,KAAK,WAAW,OAAOz0B,KAAKsrC,OAAO/sC,QAAQyR,EAAE1N,UAAU0yB,QAAQ,WAAW,OAAO,IAAIh1B,KAAKsrC,OAAO/sC,QAAQyR,EAAE1N,UAAU+7C,QAAQ,WAAW,IAAI,IAAIh/C,EAAE,GAAG2Q,EAAE,EAAEvR,EAAEuB,KAAKsrC,OAAO/sC,OAAOyR,EAAEvR,EAAEuR,IAAI3Q,EAAEgD,KAAKrC,KAAKsrC,OAAOt7B,IAAI,OAAO3Q,GAAG2Q,EAAE1N,UAAUimB,SAAS,WAAW,OAAO,IAAIk4B,GAAGzgD,OAAOgQ,EAAnzB,CAAszB4e,GAAG6xB,GAAG,SAASphD,GAAG,SAAS2Q,EAAEA,GAAG3Q,EAAEuQ,KAAK5P,MAAMA,KAAK0gD,SAAS1wC,EAAEhQ,KAAK4+C,UAAU,EAAE,OAAOv/C,IAAI2Q,EAAEgY,UAAU3oB,GAAG2Q,EAAE1N,UAAUoG,OAAOojC,OAAOzsC,GAAGA,EAAEiD,WAAW0N,EAAE1N,UAAUkJ,YAAYwE,EAAEA,EAAE1N,UAAU8P,KAAK,WAAW,GAAGpS,KAAK4+C,YAAY5+C,KAAK0gD,SAASjsB,OAAO,MAAM,IAAIn1B,EAAE,OAAOU,KAAK0gD,SAASpV,OAAOtrC,KAAK4+C,cAAc5uC,EAAE1N,UAAU06C,QAAQ,WAAW,OAAOh9C,KAAK4+C,UAAU5+C,KAAK0gD,SAASjsB,QAAQzkB,EAAE1N,UAAUgB,OAAO,WAAW,MAAM,IAAI0e,GAAGhS,EAA5Z,CAA+ZsuC,IAAIpT,GAAG,GAAGlqC,EAAEsB,UAAU,IAAIi+C,IAAI34B,IAAI,SAASvoB,GAAG,IAAI,IAAI2Q,EAAEhQ,KAAKorC,MAAM,OAAOp7B,GAAG,CAAC,IAAIvR,EAAEY,EAAEytC,UAAU98B,EAAEwG,KAAK,GAAG/X,EAAE,EAAEuR,EAAEA,EAAE7R,SAAS,CAAC,KAAKM,EAAE,GAAG,OAAOuR,EAAEpH,MAAMoH,EAAEA,EAAE5R,OAAO,OAAO,MAAM4C,EAAEsB,UAAU+9C,IAAI,SAAShhD,EAAE2Q,GAAG,GAAG,OAAOhQ,KAAKorC,MAAM,OAAOprC,KAAKorC,MAAM,CAAC50B,IAAInX,EAAEuJ,MAAMoH,EAAE7R,KAAK,KAAKC,MAAM,KAAKmF,OAAO,KAAK4nC,MAAMD,GAAGyV,SAAS,WAAW,OAAO3gD,KAAK4I,OAAOg4C,OAAO,WAAW,OAAO5gD,KAAKwW,MAAMxW,KAAKqrC,MAAM,EAAE,KAAK,IAAI5sC,EAAEa,EAAE0iB,EAAEhiB,KAAKorC,MAAM,GAAG,GAAG3sC,EAAEujB,GAAG1iB,EAAED,EAAEytC,UAAU9qB,EAAExL,MAAM,EAAEwL,EAAEA,EAAE7jB,SAAS,CAAC,KAAKmB,EAAE,GAAG,CAAC,IAAIsvB,EAAE5M,EAAEpZ,MAAM,OAAOoZ,EAAEpZ,MAAMoH,EAAE4e,EAAE5M,EAAEA,EAAE5jB,aAAa,OAAO4jB,GAAG,IAAIljB,EAAE,CAAC0X,IAAInX,EAAElB,KAAK,KAAKC,MAAM,KAAKwK,MAAMoH,EAAEzM,OAAO9E,EAAE0sC,MAAMD,GAAGyV,SAAS,WAAW,OAAO3gD,KAAK4I,OAAOg4C,OAAO,WAAW,OAAO5gD,KAAKwW,MAAM,OAAOlX,EAAE,EAAEb,EAAEN,KAAKW,EAAEL,EAAEL,MAAMU,EAAEkB,KAAK6gD,kBAAkB/hD,GAAGkB,KAAKqrC,QAAQ,MAAMrqC,EAAEsB,UAAUu+C,kBAAkB,SAASxhD,GAAG,IAAIA,EAAE8rC,MAAM,EAAE,MAAM9rC,GAAGA,IAAIW,KAAKorC,OAAO,IAAI/rC,EAAEkE,OAAO4nC,OAAO,GAAGzrC,EAAEL,KAAK0M,EAAErM,EAAEA,EAAEL,KAAK,CAAC,IAAI2Q,EAAE2C,EAAEjT,EAAEA,EAAEL,KAAK,IAAIP,EAAEkR,IAAIy2B,EAAE/mC,EAAEL,GAAG6rC,IAAIzE,EAAEz2B,EAAEk7B,IAAIzE,EAAE/mC,EAAEA,EAAEL,IAAI,GAAGA,EAAEK,EAAEA,EAAEL,MAAMA,IAAIsT,EAAEjT,EAAEL,MAAMA,EAAEK,EAAEL,GAAGW,KAAK8gD,WAAWzhD,IAAIonC,EAAE/mC,EAAEL,GAAG6rC,IAAIzE,EAAE/mC,EAAEA,EAAEL,IAAI,GAAGW,KAAK+gD,YAAYrhD,EAAEA,EAAEL,UAAU,CAAC,IAAIZ,EAAEsN,EAAErM,EAAEA,EAAEL,KAAK,IAAIP,EAAEL,IAAIgoC,EAAE/mC,EAAEL,GAAG6rC,IAAIzE,EAAEhoC,EAAEysC,IAAIzE,EAAE/mC,EAAEA,EAAEL,IAAI,GAAGA,EAAEK,EAAEA,EAAEL,MAAMA,IAAI0M,EAAErM,EAAEL,MAAMA,EAAEK,EAAEL,GAAGW,KAAK+gD,YAAY1hD,IAAIonC,EAAE/mC,EAAEL,GAAG6rC,IAAIzE,EAAE/mC,EAAEA,EAAEL,IAAI,GAAGW,KAAK8gD,WAAWphD,EAAEA,EAAEL,MAAMW,KAAKorC,MAAMD,MAAMD,IAAIlqC,EAAEsB,UAAU2xB,OAAO,WAAW,IAAI50B,EAAE,IAAIm/C,GAAGxuC,EAAEhQ,KAAKghD,gBAAgB,GAAG,OAAOhxC,EAAE,IAAI3Q,EAAE+zB,IAAIpjB,EAAEpH,OAAO,QAAQoH,EAAEhP,EAAEqzB,UAAUrkB,KAAK3Q,EAAE+zB,IAAIpjB,EAAEpH,OAAO,OAAOvJ,GAAG2B,EAAEsB,UAAUg+C,SAAS,WAAW,IAAIjhD,EAAE,IAAImhD,GAAGxwC,EAAEhQ,KAAKghD,gBAAgB,GAAG,OAAOhxC,EAAE,IAAI3Q,EAAE+zB,IAAIpjB,GAAG,QAAQA,EAAEhP,EAAEqzB,UAAUrkB,KAAK3Q,EAAE+zB,IAAIpjB,GAAG,OAAO3Q,GAAG2B,EAAEsB,UAAUw+C,WAAW,SAASzhD,GAAG,GAAG,MAAMA,EAAE,CAAC,IAAI2Q,EAAE3Q,EAAEjB,MAAMiB,EAAEjB,MAAM4R,EAAE7R,KAAK,MAAM6R,EAAE7R,OAAO6R,EAAE7R,KAAKoF,OAAOlE,GAAG2Q,EAAEzM,OAAOlE,EAAEkE,OAAO,OAAOlE,EAAEkE,OAAOvD,KAAKorC,MAAMp7B,EAAE3Q,EAAEkE,OAAOpF,OAAOkB,EAAEA,EAAEkE,OAAOpF,KAAK6R,EAAE3Q,EAAEkE,OAAOnF,MAAM4R,EAAEA,EAAE7R,KAAKkB,EAAEA,EAAEkE,OAAOyM,IAAIhP,EAAEsB,UAAUy+C,YAAY,SAAS1hD,GAAG,GAAG,MAAMA,EAAE,CAAC,IAAI2Q,EAAE3Q,EAAElB,KAAKkB,EAAElB,KAAK6R,EAAE5R,MAAM,MAAM4R,EAAE5R,QAAQ4R,EAAE5R,MAAMmF,OAAOlE,GAAG2Q,EAAEzM,OAAOlE,EAAEkE,OAAO,OAAOlE,EAAEkE,OAAOvD,KAAKorC,MAAMp7B,EAAE3Q,EAAEkE,OAAOnF,QAAQiB,EAAEA,EAAEkE,OAAOnF,MAAM4R,EAAE3Q,EAAEkE,OAAOpF,KAAK6R,EAAEA,EAAE5R,MAAMiB,EAAEA,EAAEkE,OAAOyM,IAAIhP,EAAEsB,UAAU0+C,cAAc,WAAW,IAAI3hD,EAAEW,KAAKorC,MAAM,GAAG,MAAM/rC,EAAE,KAAK,MAAMA,EAAElB,MAAMkB,EAAEA,EAAElB,KAAK,OAAOkB,GAAG2B,EAAEqzB,UAAU,SAASh1B,GAAG,GAAG,OAAOA,EAAE,OAAO,KAAK,GAAG,OAAOA,EAAEjB,MAAM,CAAC,IAAI,IAAI4R,EAAE3Q,EAAEjB,MAAM,OAAO4R,EAAE7R,MAAM6R,EAAEA,EAAE7R,KAAK,OAAO6R,EAAE,IAAI,IAAIvR,EAAEY,EAAEkE,OAAOjE,EAAED,EAAE,OAAOZ,GAAGa,IAAIb,EAAEL,OAAOkB,EAAEb,EAAEA,EAAEA,EAAE8E,OAAO,OAAO9E,GAAGuC,EAAEsB,UAAUmyB,KAAK,WAAW,OAAOz0B,KAAKqrC,OAAO,IAAI4V,GAAG,aAAaA,GAAG3+C,UAAUqpC,YAAY,WAAW,MAAM,IAAIsV,GAAG3+C,UAAUspC,SAAS,WAAW,OAAOqV,IAAIza,EAAElkC,UAAU,IAAIssB,GAAGzT,EAAE7Y,UAAU,IAAIkkC,GAAG1kC,SAAS,SAASzC,GAAG,IAAI,IAAI2Q,EAAE,EAAEvR,EAAEuB,KAAKsrC,OAAO/sC,OAAOyR,EAAEvR,EAAEuR,IAAK,GAAG,IAAIhQ,KAAKsrC,OAAOt7B,GAAG88B,UAAUztC,GAAG,OAAM,EAAG,OAAM,GAAI8b,EAAE7Y,UAAU8wB,IAAI,SAAS/zB,GAAG,GAAGW,KAAK8B,SAASzC,GAAG,OAAM,EAAG,IAAI,IAAI2Q,EAAE,EAAEvR,EAAEuB,KAAKsrC,OAAO/sC,OAAOyR,EAAEvR,EAAEuR,IAAK,GAAG,IAAIhQ,KAAKsrC,OAAOt7B,GAAG88B,UAAUztC,GAAG,OAAOW,KAAKsrC,OAAO1nC,OAAOoM,EAAE,EAAE3Q,IAAG,EAAG,OAAOW,KAAKsrC,OAAOjpC,KAAKhD,IAAG,GAAI8b,EAAE7Y,UAAUkpC,OAAO,SAASnsC,GAAG,IAAI,IAAI2Q,EAAE3Q,EAAEkpB,WAAWvY,EAAEgtC,WAAWh9C,KAAKozB,IAAIpjB,EAAEoC,QAAQ,OAAM,GAAI+I,EAAE7Y,UAAUgB,OAAO,SAASjE,GAAG,MAAM,IAAI2iB,GAAG7G,EAAE7Y,UAAUmyB,KAAK,WAAW,OAAOz0B,KAAKsrC,OAAO/sC,QAAQ4c,EAAE7Y,UAAU0yB,QAAQ,WAAW,OAAO,IAAIh1B,KAAKsrC,OAAO/sC,QAAQ4c,EAAE7Y,UAAU+7C,QAAQ,WAAW,IAAI,IAAIh/C,EAAE,GAAG2Q,EAAE,EAAEvR,EAAEuB,KAAKsrC,OAAO/sC,OAAOyR,EAAEvR,EAAEuR,IAAI3Q,EAAEgD,KAAKrC,KAAKsrC,OAAOt7B,IAAI,OAAO3Q,GAAG8b,EAAE7Y,UAAUimB,SAAS,WAAW,OAAO,IAAI24B,GAAGlhD,OAAO,IAAIkhD,GAAG,SAAS7hD,GAAGW,KAAKmhD,SAAS9hD,EAAEW,KAAK4+C,UAAU,GAAGsC,GAAG5+C,UAAU8P,KAAK,WAAW,GAAGpS,KAAK4+C,YAAY5+C,KAAKmhD,SAAS1sB,OAAO,MAAM,IAAIn1B,EAAE,OAAOU,KAAKmhD,SAAS7V,OAAOtrC,KAAK4+C,cAAcsC,GAAG5+C,UAAU06C,QAAQ,WAAW,OAAOh9C,KAAK4+C,UAAU5+C,KAAKmhD,SAAS1sB,QAAQysB,GAAG5+C,UAAUgB,OAAO,WAAW,MAAM,IAAI0e,GAAG,IAAIo/B,GAAG,aAAaA,GAAGt7C,KAAK,WAAW,IAAIzG,EAAE2Q,EAAEvR,EAAEa,EAAE0iB,EAAE7R,UAAU,GAAG,GAAG,IAAIA,UAAU5R,OAAOe,EAAE,SAASD,EAAE2Q,GAAG,OAAO3Q,EAAEytC,UAAU98B,IAAIgS,EAAElc,KAAKxG,QAAQ,GAAG,IAAI6Q,UAAU5R,OAAOE,EAAE0R,UAAU,GAAG7Q,EAAE,SAASD,EAAE2Q,GAAG,OAAOvR,EAAEJ,QAAQgB,EAAE2Q,IAAIgS,EAAElc,KAAKxG,QAAQ,GAAG,IAAI6Q,UAAU5R,OAAO,EAAEyR,EAAEgS,EAAE9e,MAAMiN,UAAU,GAAGA,UAAU,KAAKrK,OAAO,IAAI8oB,EAAE5M,EAAE9e,MAAM,EAAEiN,UAAU,IAAIqB,OAAOxB,EAAEgS,EAAE9e,MAAMiN,UAAU,GAAG6R,EAAEzjB,SAAS,IAAIyjB,EAAEpe,OAAO,EAAEoe,EAAEzjB,QAAQc,EAAE,EAAEA,EAAEuvB,EAAErwB,OAAOc,IAAI2iB,EAAE3f,KAAKusB,EAAEvvB,SAAS,GAAG,IAAI8Q,UAAU5R,OAAO,IAAIyR,EAAEgS,EAAE9e,MAAMiN,UAAU,GAAGA,UAAU,IAAI1R,EAAE0R,UAAU,GAAG7Q,EAAE,SAASD,EAAE2Q,GAAG,OAAOvR,EAAEJ,QAAQgB,EAAE2Q,IAAIA,EAAElK,KAAKxG,GAAGsvB,EAAE5M,EAAE9e,MAAM,EAAEiN,UAAU,IAAIqB,OAAOxB,EAAEgS,EAAE9e,MAAMiN,UAAU,GAAG6R,EAAEzjB,SAASyjB,EAAEpe,OAAO,EAAEoe,EAAEzjB,QAAQc,EAAE,EAAEA,EAAEuvB,EAAErwB,OAAOc,IAAI2iB,EAAE3f,KAAKusB,EAAEvvB,KAAK+hD,GAAGC,OAAO,SAAShiD,GAAG,IAAI,IAAI2Q,EAAE,IAAIwuC,GAAG//C,EAAE,EAAEa,EAAED,EAAEd,OAAOE,EAAEa,EAAEb,IAAIuR,EAAEojB,IAAI/zB,EAAEZ,IAAI,OAAOuR,GAAG,IAAIsxC,GAAG,aAAaC,GAAG,CAAC1nC,EAAE,CAACxJ,cAAa,GAAI63B,EAAE,CAAC73B,cAAa,GAAIk3B,EAAE,CAACl3B,cAAa,GAAImxC,MAAM,CAACnxC,cAAa,GAAIoxC,KAAK,CAACpxC,cAAa,GAAIqxC,SAAS,CAACrxC,cAAa,GAAIsxC,UAAU,CAACtxC,cAAa,GAAIuxC,SAAS,CAACvxC,cAAa,GAAIwxC,aAAa,CAACxxC,cAAa,GAAIyxC,MAAM,CAACzxC,cAAa,GAAI0xC,MAAM,CAAC1xC,cAAa,GAAI2xC,MAAM,CAAC3xC,cAAa,IAAKkxC,GAAG1nC,EAAE+N,IAAI,WAAW,OAAO,GAAG25B,GAAGrZ,EAAEtgB,IAAI,WAAW,OAAO,GAAG25B,GAAGha,EAAE3f,IAAI,WAAW,OAAO,GAAG25B,GAAGC,MAAM55B,IAAI,WAAW,OAAO,GAAG25B,GAAGE,KAAK75B,IAAI,WAAW,OAAO,GAAG25B,GAAGG,SAAS95B,IAAI,WAAW,OAAO,GAAG25B,GAAGI,UAAU/5B,IAAI,WAAW,MAAM,KAAK25B,GAAGK,SAASh6B,IAAI,WAAW,MAAM,KAAK25B,GAAGM,aAAaj6B,IAAI,WAAW,MAAM,KAAK25B,GAAGO,MAAMl6B,IAAI,WAAW,MAAM,KAAK25B,GAAGQ,MAAMn6B,IAAI,WAAW,MAAM,KAAK25B,GAAGS,MAAMp6B,IAAI,WAAW,MAAM,KAAK05B,GAAGh/C,UAAUqpC,YAAY,WAAW,MAAM,IAAI2V,GAAGh/C,UAAUspC,SAAS,WAAW,OAAO0V,IAAIA,GAAGW,kBAAkB,SAAS5iD,GAAG,OAAOA,GAAG,KAAKiiD,GAAGE,MAAM,OAAOF,GAAGK,UAAU,KAAKL,GAAGG,KAAK,OAAOH,GAAGM,SAAS,KAAKN,GAAGI,SAAS,OAAOJ,GAAGO,aAAa,KAAKP,GAAGznC,EAAE,OAAOynC,GAAGQ,MAAM,KAAKR,GAAGpZ,EAAE,OAAOoZ,GAAGS,MAAM,KAAKT,GAAG/Z,EAAE,OAAO+Z,GAAGU,MAAM,MAAM,IAAItjD,EAAE,4BAA4BW,IAAIiiD,GAAGY,iBAAiB,SAAS7iD,GAAG,OAAOkoC,EAAE+G,YAAYjvC,IAAI,KAAKiiD,GAAGK,UAAU,OAAOL,GAAGE,MAAM,KAAKF,GAAGM,SAAS,OAAON,GAAGG,KAAK,KAAKH,GAAGO,aAAa,OAAOP,GAAGI,SAAS,KAAKJ,GAAGQ,MAAM,OAAOR,GAAGznC,EAAE,KAAKynC,GAAGS,MAAM,OAAOT,GAAGpZ,EAAE,KAAKoZ,GAAGU,MAAM,OAAOV,GAAG/Z,EAAE,MAAM,IAAI7oC,EAAE,6BAA6BW,IAAIqJ,OAAOyP,iBAAiBmpC,GAAGC,IAAI,IAAIY,GAAG,aAAaA,GAAG7/C,UAAUk4C,OAAO,SAASn7C,KAAK8iD,GAAG7/C,UAAUqpC,YAAY,WAAW,MAAM,IAAIwW,GAAG7/C,UAAUspC,SAAS,WAAW,OAAOuW,IAAI,IAAIC,GAAG,aAAaA,GAAG9/C,UAAUk4C,OAAO,SAASn7C,EAAE2Q,KAAKoyC,GAAG9/C,UAAU+/C,OAAO,aAAaD,GAAG9/C,UAAUggD,kBAAkB,aAAaF,GAAG9/C,UAAUqpC,YAAY,WAAW,MAAM,IAAIyW,GAAG9/C,UAAUspC,SAAS,WAAW,OAAOwW,IAAI,IAAIG,GAAG,SAASljD,GAAG,SAAS2Q,EAAEA,EAAEvR,GAAG,GAAGY,EAAEuQ,KAAK5P,KAAKvB,GAAGuB,KAAK00C,YAAY1kC,GAAG,GAAG3Q,EAAE89C,gBAAgBn9C,KAAK00C,aAAa,MAAM,IAAIh2C,EAAE,6CAA6CW,IAAI2Q,EAAEgY,UAAU3oB,IAAI2Q,EAAE1N,UAAUoG,OAAOojC,OAAOzsC,GAAGA,EAAEiD,YAAYkJ,YAAYwE,EAAE,IAAIvR,EAAE,CAAC4tC,iBAAiB,CAACh8B,cAAa,IAAK,OAAOL,EAAE1N,UAAUu6C,wBAAwB,WAAW,IAAI,IAAIx9C,EAAE,IAAIE,EAAEyQ,EAAE,EAAEA,EAAEhQ,KAAK00C,YAAYn2C,OAAOyR,IAAI3Q,EAAE4zC,gBAAgBjzC,KAAK00C,YAAY1kC,GAAGwsC,uBAAuB,OAAOn9C,GAAG2Q,EAAE1N,UAAUo5C,aAAa,SAASr8C,GAAG,OAAOW,KAAK00C,YAAYr1C,IAAI2Q,EAAE1N,UAAUk5C,aAAa,WAAW,OAAOn8C,EAAEi8C,8BAA8BtrC,EAAE1N,UAAUkgD,eAAe,WAAW,IAAI,IAAInjD,EAAE,IAAI4H,MAAMjH,KAAKyiD,gBAAgB3R,KAAK,MAAM9gC,GAAG,EAAEvR,EAAE,EAAEA,EAAEuB,KAAK00C,YAAYn2C,OAAOE,IAAI,IAAI,IAAIa,EAAEU,KAAK00C,YAAYj2C,GAAG+jD,iBAAiBxgC,EAAE,EAAEA,EAAE1iB,EAAEf,OAAOyjB,IAAI3iB,IAAI2Q,GAAG1Q,EAAE0iB,GAAG,OAAO3iB,GAAG2Q,EAAE1N,UAAUkwC,QAAQ,WAAW,IAAI,IAAInzC,EAAE,EAAE2Q,EAAE,EAAEA,EAAEhQ,KAAK00C,YAAYn2C,OAAOyR,IAAI3Q,GAAGW,KAAK00C,YAAY1kC,GAAGwiC,UAAU,OAAOnzC,GAAG2Q,EAAE1N,UAAUu5C,YAAY,WAAW,GAAG,IAAI1rC,UAAU5R,OAAO,CAAC,IAAIyR,EAAEG,UAAU,GAAG1R,EAAE0R,UAAU,GAAG,IAAInQ,KAAK0iD,kBAAkB1yC,GAAG,OAAM,EAAG,IAAI1Q,EAAE0Q,EAAE,GAAGhQ,KAAK00C,YAAYn2C,SAASe,EAAEo1C,YAAYn2C,OAAO,OAAM,EAAG,IAAI,IAAIyjB,EAAE,EAAEA,EAAEhiB,KAAK00C,YAAYn2C,OAAOyjB,IAAI,IAAIhiB,KAAK00C,YAAY1yB,GAAG65B,YAAYv8C,EAAEo1C,YAAY1yB,GAAGvjB,GAAG,OAAM,EAAG,OAAM,EAAG,OAAOY,EAAEiD,UAAUu5C,YAAY33C,MAAMlE,KAAKmQ,YAAYH,EAAE1N,UAAUq6C,UAAU,WAAW,IAAI,IAAIt9C,EAAE,EAAEA,EAAEW,KAAK00C,YAAYn2C,OAAOc,IAAIW,KAAK00C,YAAYr1C,GAAGs9C,YAAYyE,GAAGt7C,KAAK9F,KAAK00C,cAAc1kC,EAAE1N,UAAUqvC,cAAc,WAAW,OAAO3xC,KAAKg1B,UAAU,KAAKh1B,KAAK00C,YAAY,GAAG/C,iBAAiB3hC,EAAE1N,UAAUqgD,qBAAqB,WAAW,IAAI,IAAItjD,EAAEiiD,GAAGE,MAAMxxC,EAAE,EAAEA,EAAEhQ,KAAK00C,YAAYn2C,OAAOyR,IAAI3Q,EAAET,KAAKM,IAAIG,EAAEW,KAAK00C,YAAY1kC,GAAG2yC,wBAAwB,OAAOtjD,GAAG2Q,EAAE1N,UAAUuvC,aAAa,WAAW,IAAI,IAAIxyC,EAAEiiD,GAAGE,MAAMxxC,EAAE,EAAEA,EAAEhQ,KAAK00C,YAAYn2C,OAAOyR,IAAI3Q,EAAET,KAAKM,IAAIG,EAAEW,KAAK00C,YAAY1kC,GAAG6hC,gBAAgB,OAAOxyC,GAAG2Q,EAAE1N,UAAU45C,UAAU,WAAW,IAAI,IAAI78C,EAAE,EAAE2Q,EAAE,EAAEA,EAAEhQ,KAAK00C,YAAYn2C,OAAOyR,IAAI3Q,GAAGW,KAAK00C,YAAY1kC,GAAGksC,YAAY,OAAO78C,GAAG2Q,EAAE1N,UAAUmgD,aAAa,WAAW,IAAI,IAAIpjD,EAAE,EAAE2Q,EAAE,EAAEA,EAAEhQ,KAAK00C,YAAYn2C,OAAOyR,IAAI3Q,GAAGW,KAAK00C,YAAY1kC,GAAGyyC,eAAe,OAAOpjD,GAAG2Q,EAAE1N,UAAU65C,iBAAiB,WAAW,OAAOn8C,KAAK00C,YAAYn2C,QAAQyR,EAAE1N,UAAU8jB,QAAQ,WAAW,IAAI,IAAI/mB,EAAEW,KAAK00C,YAAYn2C,OAAOyR,EAAE,IAAI/I,MAAM5H,GAAGyxC,KAAK,MAAMryC,EAAE,EAAEA,EAAEuB,KAAK00C,YAAYn2C,OAAOE,IAAIuR,EAAEvR,GAAGuB,KAAK00C,YAAYj2C,GAAG2nB,UAAU,OAAOpmB,KAAKy7C,aAAa9F,yBAAyB3lC,IAAIA,EAAE1N,UAAU85C,mBAAmB,WAAW,GAAG,IAAIjsC,UAAU5R,OAAO,CAAC,IAAIc,EAAE8Q,UAAU,GAAGH,EAAE,IAAImL,EAAEimC,GAAGC,OAAOrhD,KAAK00C,cAAcj2C,EAAE,IAAI0c,EAAEimC,GAAGC,OAAOhiD,EAAEq1C,cAAc,OAAO10C,KAAK3B,QAAQ2R,EAAEvR,GAAG,GAAG,IAAI0R,UAAU5R,OAAO,CAAC,IAAI,IAAmByjB,EAAE7R,UAAU,GAAGye,EAA5Bze,UAAU,GAAsBrR,EAAEkB,KAAKm8C,mBAAmBz8C,EAAEkvB,EAAEutB,mBAAmB1V,EAAE,EAAEA,EAAE3nC,GAAG2nC,EAAE/mC,GAAG,CAAC,IAAIqM,EAAE/L,KAAK07C,aAAajV,GAAG9zB,EAAEic,EAAE8sB,aAAajV,GAAGzlC,EAAE+K,EAAEqwC,mBAAmBzpC,EAAEqP,GAAG,GAAG,IAAIhhB,EAAE,OAAOA,EAAEylC,IAAI,OAAOA,EAAE3nC,EAAE,EAAE2nC,EAAE/mC,GAAG,EAAE,IAAIsQ,EAAE1N,UAAU4B,MAAM,WAAW,GAAGwpC,EAAEv9B,UAAU,GAAGktC,IAAI,IAAI,IAAIh+C,EAAE8Q,UAAU,GAAGH,EAAE,EAAEA,EAAEhQ,KAAK00C,YAAYn2C,OAAOyR,IAAIhQ,KAAK00C,YAAY1kC,GAAG9L,MAAM7E,QAAQ,GAAGquC,EAAEv9B,UAAU,GAAGiyC,IAAI,CAAC,IAAI3jD,EAAE0R,UAAU,GAAG,GAAG,IAAInQ,KAAK00C,YAAYn2C,OAAO,OAAO,KAAK,IAAI,IAAIe,EAAE,EAAEA,EAAEU,KAAK00C,YAAYn2C,SAASyB,KAAK00C,YAAYp1C,GAAG4E,MAAMzF,IAAIA,EAAE4jD,UAAU/iD,KAAKb,EAAE6jD,qBAAqBtiD,KAAK87C,uBAAuB,GAAGpO,EAAEv9B,UAAU,GAAGgyC,IAAI,CAAC,IAAIngC,EAAE7R,UAAU,GAAG6R,EAAEw4B,OAAOx6C,MAAM,IAAI,IAAI4uB,EAAE,EAAEA,EAAE5uB,KAAK00C,YAAYn2C,OAAOqwB,IAAI5uB,KAAK00C,YAAY9lB,GAAG1qB,MAAM8d,QAAQ,GAAG0rB,EAAEv9B,UAAU,GAAGq/B,IAAI,CAAC,IAAI1wC,EAAEqR,UAAU,GAAGrR,EAAE07C,OAAOx6C,MAAM,IAAI,IAAIN,EAAE,EAAEA,EAAEM,KAAK00C,YAAYn2C,OAAOmB,IAAIM,KAAK00C,YAAYh1C,GAAGwE,MAAMpF,KAAKkR,EAAE1N,UAAUsgD,YAAY,WAAW,OAAO5iD,KAAKy8C,2BAA2Bz8C,MAAMg2C,GAAGC,uBAAuB,MAAMjmC,EAAE1N,UAAUyqC,MAAM,WAAW,IAAI/8B,EAAE3Q,EAAEiD,UAAUyqC,MAAMn9B,KAAK5P,MAAMgQ,EAAE0kC,YAAY,IAAIztC,MAAMjH,KAAK00C,YAAYn2C,QAAQuyC,KAAK,MAAM,IAAI,IAAIryC,EAAE,EAAEA,EAAEuB,KAAK00C,YAAYn2C,OAAOE,IAAIuR,EAAE0kC,YAAYj2C,GAAGuB,KAAK00C,YAAYj2C,GAAGsuC,QAAQ,OAAO/8B,GAAGA,EAAE1N,UAAUgyC,gBAAgB,WAAW,MAAM,sBAAsBtkC,EAAE1N,UAAU6U,KAAK,WAAW,IAAI,IAAI9X,EAAE,IAAI4H,MAAMjH,KAAK00C,YAAYn2C,QAAQuyC,KAAK,MAAMryC,EAAE,EAAEA,EAAEY,EAAEd,OAAOE,IAAIY,EAAEZ,GAAGuB,KAAK00C,YAAYj2C,GAAG0Y,OAAO,OAAO,IAAInH,EAAE3Q,EAAEW,KAAK26C,WAAW3qC,EAAE1N,UAAU0yB,QAAQ,WAAW,IAAI,IAAI31B,EAAE,EAAEA,EAAEW,KAAK00C,YAAYn2C,OAAOc,IAAI,IAAIW,KAAK00C,YAAYr1C,GAAG21B,UAAU,OAAM,EAAG,OAAM,GAAIhlB,EAAE1N,UAAUqpC,YAAY,WAAW,MAAM,IAAI37B,EAAE1N,UAAUspC,SAAS,WAAW,OAAO57B,GAAGvR,EAAE4tC,iBAAiBzkB,IAAI,WAAW,OAAO,oBAAoBlf,OAAOyP,iBAAiBnI,EAAEvR,GAAGuR,EAAluI,CAAquIyqC,IAAIoI,GAAG,SAASxjD,GAAG,SAAS2Q,IAAI3Q,EAAE6E,MAAMlE,KAAKmQ,WAAW9Q,IAAI2Q,EAAEgY,UAAU3oB,IAAI2Q,EAAE1N,UAAUoG,OAAOojC,OAAOzsC,GAAGA,EAAEiD,YAAYkJ,YAAYwE,EAAE,IAAIvR,EAAE,CAAC4tC,iBAAiB,CAACh8B,cAAa,IAAK,OAAOL,EAAE1N,UAAUk5C,aAAa,WAAW,OAAOf,GAAGU,2BAA2BnrC,EAAE1N,UAAUu5C,YAAY,WAAW,GAAG,IAAI1rC,UAAU5R,OAAO,CAAC,IAAIyR,EAAEG,UAAU,GAAG1R,EAAE0R,UAAU,GAAG,QAAQnQ,KAAK0iD,kBAAkB1yC,IAAI3Q,EAAEiD,UAAUu5C,YAAYjsC,KAAK5P,KAAKgQ,EAAEvR,GAAG,OAAOY,EAAEiD,UAAUu5C,YAAY33C,MAAMlE,KAAKmQ,YAAYH,EAAE1N,UAAUqgD,qBAAqB,WAAW,OAAO3iD,KAAK8iD,WAAWxB,GAAGE,MAAM,GAAGxxC,EAAE1N,UAAUwgD,SAAS,WAAW,GAAG9iD,KAAKg1B,UAAU,OAAM,EAAG,IAAI,IAAI31B,EAAE,EAAEA,EAAEW,KAAK00C,YAAYn2C,OAAOc,IAAI,IAAIW,KAAK00C,YAAYr1C,GAAGyjD,WAAW,OAAM,EAAG,OAAM,GAAI9yC,EAAE1N,UAAUuvC,aAAa,WAAW,OAAO,GAAG7hC,EAAE1N,UAAU8jB,QAAQ,WAAW,IAAI,IAAI/mB,EAAEW,KAAK00C,YAAYn2C,OAAOyR,EAAE,IAAI/I,MAAM5H,GAAGyxC,KAAK,MAAMryC,EAAE,EAAEA,EAAEuB,KAAK00C,YAAYn2C,OAAOE,IAAIuR,EAAE3Q,EAAE,EAAEZ,GAAGuB,KAAK00C,YAAYj2C,GAAG2nB,UAAU,OAAOpmB,KAAKy7C,aAAajG,sBAAsBxlC,IAAIA,EAAE1N,UAAUsgD,YAAY,WAAW,OAAO,IAAIG,GAAG/iD,MAAM4iD,eAAe5yC,EAAE1N,UAAUgyC,gBAAgB,WAAW,MAAM,mBAAmBtkC,EAAE1N,UAAU6U,KAAK,WAAW,IAAI,IAAI9X,EAAE,IAAI4H,MAAMjH,KAAK00C,YAAYn2C,QAAQuyC,KAAK,MAAMryC,EAAE,EAAEA,EAAEY,EAAEd,OAAOE,IAAIY,EAAEZ,GAAGuB,KAAK00C,YAAYj2C,GAAG0Y,OAAO,OAAO,IAAInH,EAAE3Q,EAAEW,KAAK26C,WAAW3qC,EAAE1N,UAAUqpC,YAAY,WAAW,MAAM,CAACsV,KAAKjxC,EAAE1N,UAAUspC,SAAS,WAAW,OAAO57B,GAAGvR,EAAE4tC,iBAAiBzkB,IAAI,WAAW,OAAO,oBAAoBlf,OAAOyP,iBAAiBnI,EAAEvR,GAAGuR,EAAr6C,CAAw6CuyC,IAAIQ,GAAG,WAAW,GAAG/iD,KAAKgjD,MAAM,KAAKhjD,KAAKijD,UAAU,KAAKjjD,KAAKkjD,QAAQ,KAAKljD,KAAKmjD,aAAa,KAAK,IAAIhzC,UAAU5R,OAAO,CAAC,IAAIc,EAAE8Q,UAAU,GAAGH,EAAEu/B,GAAGoO,mBAAmB39C,KAAKgjD,MAAM3jD,EAAEW,KAAKijD,UAAU5jD,EAAEo8C,aAAaz7C,KAAKkjD,QAAQlzC,OAAO,GAAG,IAAIG,UAAU5R,OAAO,CAAC,IAAIE,EAAE0R,UAAU,GAAG7Q,EAAE6Q,UAAU,GAAGnQ,KAAKgjD,MAAMvkD,EAAEuB,KAAKijD,UAAUxkD,EAAEg9C,aAAaz7C,KAAKkjD,QAAQ5jD,IAAIyjD,GAAGzgD,UAAU8gD,wBAAwB,SAAS/jD,GAAG,GAAGW,KAAKgjD,MAAMhuB,UAAU,OAAOh1B,KAAKqjD,qBAAqB,IAAIrzC,EAAEhQ,KAAKsjD,2BAA2BjkD,GAAG,OAAO,IAAI2Q,EAAEzR,OAAOyB,KAAKijD,UAAU9N,YAAYnlC,EAAE,IAAIhQ,KAAKijD,UAAUM,2BAA2BvzC,IAAI+yC,GAAGzgD,UAAUsgD,YAAY,WAAW,OAAO5iD,KAAKgjD,iBAAiBQ,GAAGxjD,KAAKyjD,mBAAmBzjD,KAAKgjD,OAAOhjD,KAAKgjD,iBAAiBH,GAAG7iD,KAAKojD,wBAAwBpjD,KAAKgjD,OAAOhjD,KAAKgjD,MAAMJ,eAAeG,GAAGzgD,UAAUmhD,mBAAmB,SAASpkD,GAAG,OAAGW,KAAKgjD,MAAMhuB,UAAiBh1B,KAAKqjD,qBAAwBhkD,EAAEyjD,WAAmB9iD,KAAKkjD,QAAQlF,aAAa,GAAG3+C,EAAEqkD,gBAAgB1jD,KAAKijD,UAAU5N,mBAA0Br1C,KAAKijD,UAAU5N,iBAAiB,CAACh2C,EAAEqkD,gBAAgBrkD,EAAEskD,iBAAiBZ,GAAGzgD,UAAU+gD,mBAAmB,WAAW,OAAOrjD,KAAKijD,UAAU5N,oBAAoB0N,GAAGzgD,UAAUghD,2BAA2B,SAASjkD,GAAG,IAAI2Q,EAAE,IAAIwuC,GAAGx+C,KAAKmjD,aAAa,IAAIniD,EAAE,IAAI,IAAIvC,EAAE,EAAEA,EAAEY,EAAE88C,mBAAmB19C,IAAI,CAAC,IAAIa,EAAED,EAAEq8C,aAAaj9C,GAAG,IAAIa,EAAEmjD,iBAAiBziD,KAAK4jD,YAAYtkD,EAAEukD,eAAe,IAAI7jD,KAAK4jD,YAAYtkD,EAAEukD,eAAevkD,EAAEmjD,eAAe,KAAK,IAAI,IAAIzgC,EAAEhiB,KAAKmjD,aAAa7C,WAAW/3B,WAAWvG,EAAEg7B,WAAW,CAAC,IAAIpuB,EAAE5M,EAAE5P,OAAOtT,EAAE8vB,EAAE+xB,WAAWjmC,MAAM1a,KAAKkjD,QAAQlF,aAAal/C,IAAIkR,EAAEojB,IAAIxE,EAAEgyB,UAAU,OAAO5B,GAAG/M,kBAAkBjiC,IAAI+yC,GAAGzgD,UAAUshD,YAAY,SAASvkD,GAAG,IAAI2Q,EAAEhQ,KAAKmjD,aAAav7B,IAAIvoB,GAAG,OAAO2Q,IAAIA,EAAE,IAAI8zC,GAAG9jD,KAAKmjD,aAAa9C,IAAIhhD,EAAE2Q,IAAIA,EAAE0K,SAASqoC,GAAGzgD,UAAUqpC,YAAY,WAAW,MAAM,IAAIoX,GAAGzgD,UAAUspC,SAAS,WAAW,OAAOmX,IAAIA,GAAGH,YAAY,WAAW,OAAG,IAAIzyC,UAAU5R,OAAkC,IAAIwkD,GAAxB5yC,UAAU,IAAoByyC,cAAiB,IAAIzyC,UAAU5R,OAAiD,IAAIwkD,GAAvC5yC,UAAU,GAAKA,UAAU,IAAsByyC,mBAA9E,GAA8F,IAAIkB,GAAG,WAAW9jD,KAAK0a,MAAM,MAAMopC,GAAGxhD,UAAUqpC,YAAY,WAAW,MAAM,IAAImY,GAAGxhD,UAAUspC,SAAS,WAAW,OAAOkY,IAAI,IAAIC,GAAG,aAAaC,GAAG,CAACC,QAAQ,CAAC5zC,cAAa,GAAI6zC,uBAAuB,CAAC7zC,cAAa,IAAK0zC,GAAGzhD,UAAUqpC,YAAY,WAAW,MAAM,IAAIoY,GAAGzhD,UAAUspC,SAAS,WAAW,OAAOmY,IAAIA,GAAGI,MAAM,SAAS9kD,EAAE2Q,GAAG,IAAI,IAAIvR,EAAE,IAAIwI,MAAM+I,GAAG8gC,KAAK,MAAMxxC,EAAE,EAAEA,EAAE0Q,EAAE1Q,IAAIb,EAAEa,GAAGD,EAAE,OAAOgrB,OAAO5rB,IAAIslD,GAAGK,cAAc,WAAW,GAAG,IAAIj0C,UAAU5R,OAAO,CAAC,IAAIc,EAAE8Q,UAAU,GAAGH,EAAE,IAAI,aAAavR,EAAE,IAAI,YAAJ,CAAiBuR,GAAG,OAAO3Q,EAAEglD,gBAAgB5lD,GAAGuR,EAAEwH,WAAW,GAAG,IAAIrH,UAAU5R,OAAO,CAAC,IAAI,IAAIe,EAAE6Q,UAAU,GAAG6R,EAAE7R,UAAU,GAAGye,EAAE,GAAG9vB,EAAE,IAAI,YAAJ,CAAiB,IAAI,YAAJ,CAAiBilD,GAAGK,cAAc9kD,KAAKI,EAAE,EAAEA,EAAEsiB,EAAEtiB,IAAI,IAAIkvB,GAAG9vB,EAAEwlD,WAAWP,GAAGE,QAAQ,MAAM5kD,GAAG,KAAKA,aAAa2N,GAAG,MAAM3N,EAAE22C,GAAGC,uBAAuB,OAAOrnB,IAAIm1B,GAAGzxB,MAAM,SAASjzB,EAAE2Q,GAAG,IAAI,IAAIvR,EAAEuR,EAAEzR,OAAOe,EAAE,IAAIk/C,GAAGx8B,EAAE,GAAG3iB,EAAEuvB,EAAE5M,EAAEthB,QAAQsP,GAAG4e,GAAG,GAAG,CAAC,IAAI9vB,EAAEkjB,EAAEivB,UAAU,EAAEriB,GAAGtvB,EAAE8zB,IAAIt0B,GAAG8vB,GAAG5M,EAAEA,EAAEivB,UAAUriB,EAAEnwB,IAAIiC,QAAQsP,GAAGgS,EAAEzjB,OAAO,GAAGe,EAAE8zB,IAAIpR,GAAG,IAAI,IAAItiB,EAAE,IAAIuH,MAAM3H,EAAEm1B,QAAQqc,KAAK,MAAMrK,EAAE,EAAEA,EAAE/mC,EAAEnB,OAAOkoC,IAAI/mC,EAAE+mC,GAAGnnC,EAAEsoB,IAAI6e,GAAG,OAAO/mC,GAAGqkD,GAAGvsC,SAAS,WAAW,GAAG,IAAIrH,UAAU5R,OAAO,CAAC,IAAIc,EAAE8Q,UAAU,GAAG,OAAO4zC,GAAGG,uBAAuBnkD,OAAOV,KAAK0kD,GAAGpQ,OAAO,SAASt0C,GAAG,OAAO0kD,GAAGI,MAAM,IAAI9kD,IAAI2kD,GAAGC,QAAQr8B,IAAI,WAAW,OAAO2kB,EAAE4F,YAAY,mBAAmB6R,GAAGE,uBAAuBt8B,IAAI,WAAW,OAAO,IAAI,YAAJ,CAAiB,QAAQlf,OAAOyP,iBAAiB4rC,GAAGC,IAAI,IAAIO,GAAG,aAAaA,GAAGjiD,UAAUqpC,YAAY,WAAW,MAAM,IAAI4Y,GAAGjiD,UAAUspC,SAAS,WAAW,OAAO2Y,IAAIA,GAAGC,UAAU,SAASnlD,EAAE2Q,EAAEvR,EAAEa,GAAG,IAAI,IAAI0iB,EAAEpjB,KAAKQ,IAAIC,EAAEwyC,eAAepzC,EAAEozC,gBAAgBjjB,EAAE,EAAEA,EAAE5M,EAAE4M,IAAInwB,EAAEguC,YAAYntC,EAAEsvB,EAAEvvB,EAAEstC,YAAY38B,EAAE4e,KAAK21B,GAAGjF,OAAO,SAASjgD,GAAG,IAAI2Q,EAAE3Q,EAAEo1B,OAAO,OAAO,IAAIzkB,KAAKA,GAAG,IAAK3Q,EAAEstC,YAAY,EAAE8E,EAAEnF,KAAKjtC,EAAEstC,YAAY38B,EAAE,EAAEyhC,EAAEnF,IAAIjtC,EAAEstC,YAAY,EAAE8E,EAAElF,KAAKltC,EAAEstC,YAAY38B,EAAE,EAAEyhC,EAAElF,IAAKgY,GAAGE,QAAQ,SAASplD,EAAE2Q,GAAG,IAAIvR,EAAEY,EAAEo1B,OAAO,GAAGh2B,IAAIuR,EAAEykB,OAAO,OAAM,EAAG,IAAI,IAAIn1B,EAAEV,KAAKQ,IAAIC,EAAEwyC,eAAe7hC,EAAE6hC,gBAAgB7vB,EAAE,EAAEA,EAAEvjB,EAAEujB,IAAI,IAAI,IAAI4M,EAAE,EAAEA,EAAEtvB,EAAEsvB,IAAI,CAAC,IAAI9vB,EAAEO,EAAEstC,YAAY3qB,EAAE4M,GAAGlvB,EAAEsQ,EAAE28B,YAAY3qB,EAAE4M,GAAG,GAAGvvB,EAAEstC,YAAY3qB,EAAE4M,KAAK5e,EAAE28B,YAAY3qB,EAAE4M,MAAM2D,EAAE9pB,MAAM3J,KAAKyzB,EAAE9pB,MAAM/I,IAAI,OAAM,EAAG,OAAM,GAAI6kD,GAAG/iD,OAAO,SAASnC,EAAE2Q,EAAEvR,GAAG,IAAIa,EAAED,EAAEysC,OAAOrtC,EAAEuR,EAAE6hC,gBAAgB7vB,EAAEhS,EAAEykB,OAAO,GAAG8vB,GAAGptC,KAAKnH,EAAE,EAAE1Q,EAAE,EAAE0iB,GAAGA,EAAE,EAAE,IAAI,IAAI4M,EAAE5M,EAAE4M,EAAEnwB,EAAEmwB,IAAI21B,GAAGptC,KAAKnH,EAAEgS,EAAE,EAAE1iB,EAAEsvB,EAAE,GAAG,OAAOtvB,GAAGilD,GAAGn+B,QAAQ,SAAS/mB,GAAG,IAAI,IAAI2Q,EAAE3Q,EAAEo1B,OAAO,EAAEh2B,EAAEG,KAAK8sC,MAAM17B,EAAE,GAAG1Q,EAAE,EAAEA,GAAGb,EAAEa,IAAIilD,GAAG/kD,KAAKH,EAAEC,EAAE0Q,EAAE1Q,IAAIilD,GAAG/kD,KAAK,SAASH,EAAE2Q,EAAEvR,GAAG,GAAGuR,IAAIvR,EAAE,OAAO,KAAK,IAAI,IAAIa,EAAE,EAAEA,EAAED,EAAEwyC,eAAevyC,IAAI,CAAC,IAAI0iB,EAAE3iB,EAAEstC,YAAY38B,EAAE1Q,GAAGD,EAAEotC,YAAYz8B,EAAE1Q,EAAED,EAAEstC,YAAYluC,EAAEa,IAAID,EAAEotC,YAAYhuC,EAAEa,EAAE0iB,KAAKuiC,GAAGptC,KAAK,SAAS9X,EAAE2Q,EAAEvR,EAAEa,EAAE0iB,GAAG,IAAI,IAAI4M,EAAE,EAAEA,EAAE5M,EAAE4M,IAAI21B,GAAGC,UAAUnlD,EAAE2Q,EAAE4e,EAAEnwB,EAAEa,EAAEsvB,IAAI21B,GAAG/sC,SAAS,WAAW,GAAG,IAAIrH,UAAU5R,OAAO,CAAC,IAAIc,EAAE8Q,UAAU,GAAGH,EAAE3Q,EAAEo1B,OAAO,GAAG,IAAIzkB,EAAE,MAAM,KAAK,IAAIvR,EAAEY,EAAEwyC,eAAevyC,EAAE,IAAIiW,EAAEjW,EAAE2uC,OAAO,KAAK,IAAI,IAAIjsB,EAAE,EAAEA,EAAEhS,EAAEgS,IAAI,CAACA,EAAE,GAAG1iB,EAAE2uC,OAAO,KAAK,IAAI,IAAIrf,EAAE,EAAEA,EAAEnwB,EAAEmwB,IAAIA,EAAE,GAAGtvB,EAAE2uC,OAAO,KAAK3uC,EAAE2uC,OAAO8V,GAAGvsC,SAASnY,EAAEstC,YAAY3qB,EAAE4M,KAAK,OAAOtvB,EAAE2uC,OAAO,KAAK3uC,EAAEkY,aAAa+sC,GAAGG,gBAAgB,SAASrlD,EAAE2Q,GAAG,IAAIvR,EAAEuR,EAAEykB,OAAO,OAAG,IAAIh2B,EAASuR,EAAKvR,GAAG,EAAS8lD,GAAGI,iBAAiBtlD,EAAE2Q,EAAE,GAAUA,EAAE28B,YAAY,EAAE8E,EAAEnF,KAAKt8B,EAAE28B,YAAYluC,EAAE,EAAEgzC,EAAEnF,IAAIt8B,EAAE28B,YAAY,EAAE8E,EAAElF,KAAKv8B,EAAE28B,YAAYluC,EAAE,EAAEgzC,EAAElF,GAAGv8B,EAAEu0C,GAAGI,iBAAiBtlD,EAAE2Q,EAAEvR,EAAE,IAAI8lD,GAAGI,iBAAiB,SAAStlD,EAAE2Q,EAAEvR,GAAG,IAAIa,EAAED,EAAEysC,OAAOrtC,EAAEuR,EAAE6hC,gBAAgB7vB,EAAEhS,EAAEykB,OAAO8vB,GAAGptC,KAAKnH,EAAE,EAAE1Q,EAAE,EAAE0iB,GAAG,IAAI,IAAI4M,EAAE5M,EAAE4M,EAAEnwB,EAAEmwB,IAAI21B,GAAGptC,KAAKnH,EAAE,EAAE1Q,EAAEsvB,EAAE,GAAG,OAAOtvB,GAAG,IAAIkkD,GAAG,SAASnkD,GAAG,SAAS2Q,EAAEA,EAAEvR,GAAGY,EAAEuQ,KAAK5P,KAAKvB,GAAGuB,KAAK40C,QAAQ,KAAK50C,KAAKma,KAAKnK,GAAG3Q,IAAI2Q,EAAEgY,UAAU3oB,IAAI2Q,EAAE1N,UAAUoG,OAAOojC,OAAOzsC,GAAGA,EAAEiD,YAAYkJ,YAAYwE,EAAE,IAAIvR,EAAE,CAAC4tC,iBAAiB,CAACh8B,cAAa,IAAK,OAAOL,EAAE1N,UAAUu6C,wBAAwB,WAAW,OAAO78C,KAAKg1B,UAAU,IAAIz1B,EAAES,KAAK40C,QAAQ7C,eAAe,IAAIxyC,IAAIyQ,EAAE1N,UAAUg9C,OAAO,WAAW,OAAOt/C,KAAK8iD,YAAY9iD,KAAK4kD,YAAY50C,EAAE1N,UAAUk5C,aAAa,WAAW,OAAOn8C,EAAE47C,sBAAsBjrC,EAAE1N,UAAUkgD,eAAe,WAAW,OAAOxiD,KAAK40C,QAAQ3C,qBAAqBjiC,EAAE1N,UAAUu5C,YAAY,WAAW,GAAG,IAAI1rC,UAAU5R,OAAO,CAAC,IAAIyR,EAAEG,UAAU,GAAG1R,EAAE0R,UAAU,GAAG,IAAInQ,KAAK0iD,kBAAkB1yC,GAAG,OAAM,EAAG,IAAI1Q,EAAE0Q,EAAE,GAAGhQ,KAAK40C,QAAQngB,SAASn1B,EAAEs1C,QAAQngB,OAAO,OAAM,EAAG,IAAI,IAAIzS,EAAE,EAAEA,EAAEhiB,KAAK40C,QAAQngB,OAAOzS,IAAI,IAAIhiB,KAAK08C,MAAM18C,KAAK40C,QAAQjD,cAAc3vB,GAAG1iB,EAAEs1C,QAAQjD,cAAc3vB,GAAGvjB,GAAG,OAAM,EAAG,OAAM,EAAG,OAAOY,EAAEiD,UAAUu5C,YAAY33C,MAAMlE,KAAKmQ,YAAYH,EAAE1N,UAAUq6C,UAAU,WAAW,IAAI,IAAIt9C,EAAE,EAAEA,EAAET,KAAK8sC,MAAM1rC,KAAK40C,QAAQngB,OAAO,GAAGp1B,IAAI,CAAC,IAAI2Q,EAAEhQ,KAAK40C,QAAQngB,OAAO,EAAEp1B,EAAE,IAAIW,KAAK40C,QAAQjD,cAActyC,GAAGqf,OAAO1e,KAAK40C,QAAQjD,cAAc3hC,IAAI,OAAOhQ,KAAK40C,QAAQjD,cAActyC,GAAGytC,UAAU9sC,KAAK40C,QAAQjD,cAAc3hC,IAAI,GAAGu0C,GAAGn+B,QAAQpmB,KAAK40C,SAAS,OAAO5kC,EAAE1N,UAAUqvC,cAAc,WAAW,OAAO3xC,KAAKg1B,UAAU,KAAKh1B,KAAK40C,QAAQjD,cAAc,IAAI3hC,EAAE1N,UAAUqgD,qBAAqB,WAAW,OAAO3iD,KAAK8iD,WAAWxB,GAAGE,MAAM,GAAGxxC,EAAE1N,UAAUwgD,SAAS,WAAW,OAAO9iD,KAAKg1B,WAAWh1B,KAAK6jD,eAAe,GAAGnX,SAAS1sC,KAAK6jD,eAAe7jD,KAAKyiD,eAAe,KAAKzyC,EAAE1N,UAAUqhD,YAAY,WAAW,OAAO3jD,KAAKg1B,UAAU,KAAKh1B,KAAK6kD,UAAU7kD,KAAKyiD,eAAe,IAAIzyC,EAAE1N,UAAUuvC,aAAa,WAAW,OAAO,GAAG7hC,EAAE1N,UAAU45C,UAAU,WAAW,OAAO9nB,GAAG+lB,cAAcn6C,KAAK40C,UAAU5kC,EAAE1N,UAAUmgD,aAAa,WAAW,OAAOziD,KAAK40C,QAAQngB,QAAQzkB,EAAE1N,UAAU8jB,QAAQ,WAAW,IAAI/mB,EAAEW,KAAK40C,QAAQz9B,OAAqB,OAAdotC,GAAGn+B,QAAQ/mB,GAAUW,KAAKy7C,aAAanG,iBAAiBj2C,IAAI2Q,EAAE1N,UAAU85C,mBAAmB,WAAW,GAAG,IAAIjsC,UAAU5R,OAAO,CAAC,IAAI,IAAIc,EAAE8Q,UAAU,GAAGH,EAAE,EAAEvR,EAAE,EAAEuR,EAAEhQ,KAAK40C,QAAQngB,QAAQh2B,EAAEY,EAAEu1C,QAAQngB,QAAQ,CAAC,IAAIn1B,EAAEU,KAAK40C,QAAQjD,cAAc3hC,GAAG88B,UAAUztC,EAAEu1C,QAAQjD,cAAclzC,IAAI,GAAG,IAAIa,EAAE,OAAOA,EAAE0Q,IAAIvR,IAAI,OAAOuR,EAAEhQ,KAAK40C,QAAQngB,OAAO,EAAEh2B,EAAEY,EAAEu1C,QAAQngB,QAAQ,EAAE,EAAE,GAAG,IAAItkB,UAAU5R,OAAO,CAAC,IAAIyjB,EAAE7R,UAAU,GAAG,OAAOA,UAAU,GAAG9R,QAAQ2B,KAAK40C,QAAQ5yB,EAAE4yB,WAAW5kC,EAAE1N,UAAU4B,MAAM,WAAW,GAAGwpC,EAAEv9B,UAAU,GAAGktC,IAAI,IAAI,IAAIh+C,EAAE8Q,UAAU,GAAGH,EAAE,EAAEA,EAAEhQ,KAAK40C,QAAQngB,OAAOzkB,IAAI3Q,EAAEm7C,OAAOx6C,KAAK40C,QAAQjD,cAAc3hC,SAAS,GAAG09B,EAAEv9B,UAAU,GAAGiyC,IAAI,CAAC,IAAI3jD,EAAE0R,UAAU,GAAG,GAAG,IAAInQ,KAAK40C,QAAQngB,OAAO,OAAO,KAAK,IAAI,IAAIn1B,EAAE,EAAEA,EAAEU,KAAK40C,QAAQngB,SAASh2B,EAAE+7C,OAAOx6C,KAAK40C,QAAQt1C,IAAIb,EAAE4jD,UAAU/iD,KAAKb,EAAE6jD,qBAAqBtiD,KAAK87C,uBAA0BpO,EAAEv9B,UAAU,GAAGgyC,KAAuCzU,EAAEv9B,UAAU,GAAGq/B,MAAjDr/B,UAAU,GAAGqqC,OAAOx6C,OAA8DgQ,EAAE1N,UAAUsgD,YAAY,WAAW,OAAO,IAAIG,GAAG/iD,MAAM4iD,eAAe5yC,EAAE1N,UAAUogD,kBAAkB,SAASrjD,GAAG,OAAOA,aAAa2Q,GAAGA,EAAE1N,UAAUyqC,MAAM,WAAW,IAAI/8B,EAAE3Q,EAAEiD,UAAUyqC,MAAMn9B,KAAK5P,MAAM,OAAOgQ,EAAE4kC,QAAQ50C,KAAK40C,QAAQ7H,QAAQ/8B,GAAGA,EAAE1N,UAAUuhD,eAAe,SAASxkD,GAAG,OAAOW,KAAK40C,QAAQjD,cAActyC,IAAI2Q,EAAE1N,UAAUgyC,gBAAgB,WAAW,MAAM,cAActkC,EAAE1N,UAAU6U,KAAK,WAAW,OAAO,IAAInH,EAAEhQ,KAAK40C,QAAQz9B,OAAOnX,KAAK26C,WAAW3qC,EAAE1N,UAAUwiD,sBAAsB,WAAW,OAAO9kD,KAAK40C,SAAS5kC,EAAE1N,UAAU0yB,QAAQ,WAAW,OAAO,IAAIh1B,KAAK40C,QAAQngB,QAAQzkB,EAAE1N,UAAU6X,KAAK,SAAS9a,GAAG,GAAG,OAAOA,IAAIA,EAAEW,KAAKy7C,aAAasJ,+BAA+BjZ,OAAO,KAAK,IAAIzsC,EAAEo1B,OAAO,MAAM,IAAI/1B,EAAE,iDAAiDW,EAAEo1B,OAAO,yBAAyBz0B,KAAK40C,QAAQv1C,GAAG2Q,EAAE1N,UAAU0iD,aAAa,SAAS3lD,GAAG,IAAI,IAAI2Q,EAAE,EAAEA,EAAEhQ,KAAK40C,QAAQngB,OAAOzkB,IAAI,GAAGhQ,KAAK40C,QAAQjD,cAAc3hC,GAAG0O,OAAOrf,GAAG,OAAM,EAAG,OAAM,GAAI2Q,EAAE1N,UAAUohD,cAAc,WAAW,OAAO1jD,KAAKg1B,UAAU,KAAKh1B,KAAK6kD,UAAU,IAAI70C,EAAE1N,UAAUuiD,UAAU,SAASxlD,GAAG,OAAOW,KAAKy7C,aAAatG,YAAYn1C,KAAK40C,QAAQjD,cAActyC,KAAK2Q,EAAE1N,UAAUqpC,YAAY,WAAW,MAAM,CAACsV,KAAKjxC,EAAE1N,UAAUspC,SAAS,WAAW,OAAO57B,GAAGvR,EAAE4tC,iBAAiBzkB,IAAI,WAAW,OAAO,oBAAoBlf,OAAOyP,iBAAiBnI,EAAEvR,GAAGuR,EAAv/H,CAA0/HyqC,IAAIwK,GAAG,aAAaA,GAAG3iD,UAAUqpC,YAAY,WAAW,MAAM,IAAIsZ,GAAG3iD,UAAUspC,SAAS,WAAW,OAAOqZ,IAAI,IAAIC,GAAG,SAAS7lD,GAAG,SAAS2Q,EAAEA,EAAEvR,GAAGY,EAAEuQ,KAAK5P,KAAKvB,GAAGuB,KAAKw0C,aAAaxkC,GAAG,KAAKhQ,KAAKma,KAAKna,KAAKw0C,cAAcn1C,IAAI2Q,EAAEgY,UAAU3oB,IAAI2Q,EAAE1N,UAAUoG,OAAOojC,OAAOzsC,GAAGA,EAAEiD,YAAYkJ,YAAYwE,EAAE,IAAIvR,EAAE,CAAC4tC,iBAAiB,CAACh8B,cAAa,IAAK,OAAOL,EAAE1N,UAAUu6C,wBAAwB,WAAW,GAAG78C,KAAKg1B,UAAU,OAAO,IAAIz1B,EAAE,IAAIF,EAAE,IAAIE,EAAE,OAAOF,EAAE4zC,gBAAgBjzC,KAAKw0C,aAAa1C,KAAK,GAAG9xC,KAAKw0C,aAAaxC,KAAK,IAAI3yC,GAAG2Q,EAAE1N,UAAUk5C,aAAa,WAAW,OAAOn8C,EAAE07C,iBAAiB/qC,EAAE1N,UAAUkgD,eAAe,WAAW,OAAOxiD,KAAKg1B,UAAU,GAAG,CAACh1B,KAAK2xC,kBAAkB3hC,EAAE1N,UAAUu5C,YAAY,WAAW,GAAG,IAAI1rC,UAAU5R,OAAO,CAAC,IAAIyR,EAAEG,UAAU,GAAG1R,EAAE0R,UAAU,GAAG,QAAQnQ,KAAK0iD,kBAAkB1yC,QAAQhQ,KAAKg1B,YAAYhlB,EAAEglB,YAAYh1B,KAAKg1B,YAAYhlB,EAAEglB,WAAWh1B,KAAK08C,MAAM1sC,EAAE2hC,gBAAgB3xC,KAAK2xC,gBAAgBlzC,IAAI,OAAOY,EAAEiD,UAAUu5C,YAAY33C,MAAMlE,KAAKmQ,YAAYH,EAAE1N,UAAUq6C,UAAU,aAAa3sC,EAAE1N,UAAUqvC,cAAc,WAAW,OAAO,IAAI3xC,KAAKw0C,aAAa/f,OAAOz0B,KAAKw0C,aAAa7C,cAAc,GAAG,MAAM3hC,EAAE1N,UAAUqgD,qBAAqB,WAAW,OAAOrB,GAAGE,OAAOxxC,EAAE1N,UAAUuvC,aAAa,WAAW,OAAO,GAAG7hC,EAAE1N,UAAUmgD,aAAa,WAAW,OAAOziD,KAAKg1B,UAAU,EAAE,GAAGhlB,EAAE1N,UAAU8jB,QAAQ,WAAW,OAAOpmB,KAAKmX,QAAQnH,EAAE1N,UAAUwvC,KAAK,WAAW,GAAG,OAAO9xC,KAAK2xC,gBAAgB,MAAM,IAAI3qC,MAAM,8BAA8B,OAAOhH,KAAK2xC,gBAAgBx9B,GAAGnE,EAAE1N,UAAU85C,mBAAmB,WAAW,GAAG,IAAIjsC,UAAU5R,OAAO,CAAC,IAAIc,EAAE8Q,UAAU,GAAG,OAAOnQ,KAAK2xC,gBAAgB7E,UAAUztC,EAAEsyC,iBAAiB,GAAG,IAAIxhC,UAAU5R,OAAO,CAAC,IAAIyR,EAAEG,UAAU,GAAG,OAAOA,UAAU,GAAG9R,QAAQ2B,KAAKw0C,aAAaxkC,EAAEwkC,gBAAgBxkC,EAAE1N,UAAU4B,MAAM,WAAW,GAAGwpC,EAAEv9B,UAAU,GAAGktC,IAAI,CAAC,IAAIh+C,EAAE8Q,UAAU,GAAG,GAAGnQ,KAAKg1B,UAAU,OAAO,KAAK31B,EAAEm7C,OAAOx6C,KAAK2xC,sBAAsB,GAAGjE,EAAEv9B,UAAU,GAAGiyC,IAAI,CAAC,IAAIpyC,EAAEG,UAAU,GAAG,GAAGnQ,KAAKg1B,UAAU,OAAO,KAAKhlB,EAAEwqC,OAAOx6C,KAAKw0C,aAAa,GAAGxkC,EAAEsyC,qBAAqBtiD,KAAK87C,uBAA0BpO,EAAEv9B,UAAU,GAAGgyC,KAAuCzU,EAAEv9B,UAAU,GAAGq/B,MAAjDr/B,UAAU,GAAGqqC,OAAOx6C,OAA8DgQ,EAAE1N,UAAUsgD,YAAY,WAAW,OAAO5iD,KAAKy7C,aAAa9F,yBAAyB,OAAO3lC,EAAE1N,UAAUyqC,MAAM,WAAW,IAAI/8B,EAAE3Q,EAAEiD,UAAUyqC,MAAMn9B,KAAK5P,MAAM,OAAOgQ,EAAEwkC,aAAax0C,KAAKw0C,aAAazH,QAAQ/8B,GAAGA,EAAE1N,UAAUgyC,gBAAgB,WAAW,MAAM,SAAStkC,EAAE1N,UAAU6U,KAAK,WAAW,OAAO,IAAInH,EAAEhQ,KAAKw0C,aAAar9B,OAAOnX,KAAK26C,WAAW3qC,EAAE1N,UAAUwiD,sBAAsB,WAAW,OAAO9kD,KAAKw0C,cAAcxkC,EAAE1N,UAAU0vC,KAAK,WAAW,GAAG,OAAOhyC,KAAK2xC,gBAAgB,MAAM,IAAI3qC,MAAM,8BAA8B,OAAOhH,KAAK2xC,gBAAgBv9B,GAAGpE,EAAE1N,UAAU0yB,QAAQ,WAAW,OAAO,IAAIh1B,KAAKw0C,aAAa/f,QAAQzkB,EAAE1N,UAAU6X,KAAK,SAAS9a,GAAG,OAAOA,IAAIA,EAAEW,KAAKy7C,aAAasJ,+BAA+BjZ,OAAO,KAAKkK,GAAGE,OAAO72C,EAAEo1B,QAAQ,GAAGz0B,KAAKw0C,aAAan1C,GAAG2Q,EAAE1N,UAAUsiD,SAAS,WAAW,OAAM,GAAI50C,EAAE1N,UAAUqpC,YAAY,WAAW,MAAM,CAACsZ,KAAKj1C,EAAE1N,UAAUspC,SAAS,WAAW,OAAO57B,GAAGvR,EAAE4tC,iBAAiBzkB,IAAI,WAAW,OAAO,oBAAoBlf,OAAOyP,iBAAiBnI,EAAEvR,GAAGuR,EAAz6F,CAA46FyqC,IAAI0K,GAAG,aAAaA,GAAG7iD,UAAUqpC,YAAY,WAAW,MAAM,IAAIwZ,GAAG7iD,UAAUspC,SAAS,WAAW,OAAOuZ,IAAI,IAAIC,GAAG,SAAS/lD,GAAG,SAAS2Q,EAAEA,EAAEvR,EAAEa,GAAG,GAAGD,EAAEuQ,KAAK5P,KAAKV,GAAGU,KAAK+0C,OAAO,KAAK/0C,KAAKg1C,OAAO,KAAK,OAAOhlC,IAAIA,EAAEhQ,KAAKy7C,aAAalG,oBAAoB,OAAO92C,IAAIA,EAAE,IAAIY,EAAE89C,gBAAgB1+C,GAAG,MAAM,IAAIC,EAAE,wCAAwC,GAAGsR,EAAEglB,WAAW31B,EAAE69C,oBAAoBz+C,GAAG,MAAM,IAAIC,EAAE,oCAAoCsB,KAAK+0C,OAAO/kC,EAAEhQ,KAAKg1C,OAAOv2C,EAAEY,IAAI2Q,EAAEgY,UAAU3oB,IAAI2Q,EAAE1N,UAAUoG,OAAOojC,OAAOzsC,GAAGA,EAAEiD,YAAYkJ,YAAYwE,EAAE,IAAIvR,EAAE,CAAC4tC,iBAAiB,CAACh8B,cAAa,IAAK,OAAOL,EAAE1N,UAAUu6C,wBAAwB,WAAW,OAAO78C,KAAK+0C,OAAOyH,uBAAuBxsC,EAAE1N,UAAUk5C,aAAa,WAAW,OAAOn8C,EAAE+7C,mBAAmBprC,EAAE1N,UAAUkgD,eAAe,WAAW,GAAGxiD,KAAKg1B,UAAU,MAAM,GAAG,IAAI,IAAI31B,EAAE,IAAI4H,MAAMjH,KAAKyiD,gBAAgB3R,KAAK,MAAM9gC,GAAG,EAAEvR,EAAEuB,KAAK+0C,OAAOyN,iBAAiBljD,EAAE,EAAEA,EAAEb,EAAEF,OAAOe,IAAID,IAAI2Q,GAAGvR,EAAEa,GAAG,IAAI,IAAI0iB,EAAE,EAAEA,EAAEhiB,KAAKg1C,OAAOz2C,OAAOyjB,IAAI,IAAI,IAAI4M,EAAE5uB,KAAKg1C,OAAOhzB,GAAGwgC,iBAAiB1jD,EAAE,EAAEA,EAAE8vB,EAAErwB,OAAOO,IAAIO,IAAI2Q,GAAG4e,EAAE9vB,GAAG,OAAOO,GAAG2Q,EAAE1N,UAAUkwC,QAAQ,WAAW,IAAInzC,EAAE,EAAEA,GAAGT,KAAKoiB,IAAIoT,GAAG3V,WAAWze,KAAK+0C,OAAO+P,0BAA0B,IAAI,IAAI90C,EAAE,EAAEA,EAAEhQ,KAAKg1C,OAAOz2C,OAAOyR,IAAI3Q,GAAGT,KAAKoiB,IAAIoT,GAAG3V,WAAWze,KAAKg1C,OAAOhlC,GAAG80C,0BAA0B,OAAOzlD,GAAG2Q,EAAE1N,UAAUq5C,YAAY,WAAW,GAAG,IAAI37C,KAAKqlD,qBAAqB,OAAM,EAAG,GAAG,OAAOrlD,KAAK+0C,OAAO,OAAM,EAAG,GAAG,IAAI/0C,KAAK+0C,OAAO0N,eAAe,OAAM,EAAG,IAAI,IAAIpjD,EAAEW,KAAK+0C,OAAO+P,wBAAwB90C,EAAEhQ,KAAKw8C,sBAAsB/9C,EAAE,EAAEA,EAAE,EAAEA,IAAI,CAAC,IAAIa,EAAED,EAAEyyC,KAAKrzC,GAAG,GAAGa,IAAI0Q,EAAE8iC,WAAWxzC,IAAI0Q,EAAE4iC,UAAU,OAAM,EAAG,IAAI5wB,EAAE3iB,EAAE2yC,KAAKvzC,GAAG,GAAGujB,IAAIhS,EAAE+iC,WAAW/wB,IAAIhS,EAAE6iC,UAAU,OAAM,EAAG,IAAI,IAAIjkB,EAAEvvB,EAAEyyC,KAAK,GAAGhzC,EAAEO,EAAE2yC,KAAK,GAAGtyC,EAAE,EAAEA,GAAG,EAAEA,IAAI,CAAC,IAAI+mC,EAAEpnC,EAAEyyC,KAAKpyC,GAAGqM,EAAE1M,EAAE2yC,KAAKtyC,GAAG,GAAG+mC,IAAI7X,KAAK7iB,IAAIjN,GAAG,OAAM,EAAG8vB,EAAE6X,EAAE3nC,EAAEiN,EAAE,OAAM,GAAIiE,EAAE1N,UAAUu5C,YAAY,WAAW,GAAG,IAAI1rC,UAAU5R,OAAO,CAAC,IAAIyR,EAAEG,UAAU,GAAG1R,EAAE0R,UAAU,GAAG,IAAInQ,KAAK0iD,kBAAkB1yC,GAAG,OAAM,EAAG,IAAI1Q,EAAE0Q,EAAEgS,EAAEhiB,KAAK+0C,OAAOnmB,EAAEtvB,EAAEy1C,OAAO,IAAI/yB,EAAE65B,YAAYjtB,EAAEnwB,GAAG,OAAM,EAAG,GAAGuB,KAAKg1C,OAAOz2C,SAASe,EAAE01C,OAAOz2C,OAAO,OAAM,EAAG,IAAI,IAAIO,EAAE,EAAEA,EAAEkB,KAAKg1C,OAAOz2C,OAAOO,IAAI,IAAIkB,KAAKg1C,OAAOl2C,GAAG+8C,YAAYv8C,EAAE01C,OAAOl2C,GAAGL,GAAG,OAAM,EAAG,OAAM,EAAG,OAAOY,EAAEiD,UAAUu5C,YAAY33C,MAAMlE,KAAKmQ,YAAYH,EAAE1N,UAAUq6C,UAAU,WAAW,GAAG,IAAIxsC,UAAU5R,OAAO,CAACyB,KAAK28C,UAAU38C,KAAK+0C,QAAO,GAAI,IAAI,IAAI11C,EAAE,EAAEA,EAAEW,KAAKg1C,OAAOz2C,OAAOc,IAAIW,KAAK28C,UAAU38C,KAAKg1C,OAAO31C,IAAG,GAAI+hD,GAAGt7C,KAAK9F,KAAKg1C,aAAa,GAAG,IAAI7kC,UAAU5R,OAAO,CAAC,IAAIyR,EAAEG,UAAU,GAAG1R,EAAE0R,UAAU,GAAG,GAAGH,EAAEglB,UAAU,OAAO,KAAK,IAAI11B,EAAE,IAAI2H,MAAM+I,EAAEwyC,iBAAiBjkD,OAAO,GAAGuyC,KAAK,MAAMvE,EAAE2F,UAAUliC,EAAEwyC,iBAAiB,EAAEljD,EAAE,EAAEA,EAAEf,QAAQ,IAAIyjB,EAAEg9B,GAAGiB,cAAcjwC,EAAEwyC,kBAAkBxD,GAAGQ,OAAOlgD,EAAE0iB,GAAGuqB,EAAE2F,UAAU5yC,EAAE,EAAE0Q,EAAEwyC,iBAAiB,EAAEljD,EAAEf,QAAQyR,EAAEwyC,iBAAiBljD,EAAEf,QAAQe,EAAE,GAAG80B,GAAGgmB,MAAMpqC,EAAEwyC,oBAAoB/jD,GAAGugD,GAAG54B,QAAQpW,EAAEwyC,oBAAoBxyC,EAAE1N,UAAUqvC,cAAc,WAAW,OAAO3xC,KAAK+0C,OAAOpD,iBAAiB3hC,EAAE1N,UAAU+iD,mBAAmB,WAAW,OAAOrlD,KAAKg1C,OAAOz2C,QAAQyR,EAAE1N,UAAUqgD,qBAAqB,WAAW,OAAO,GAAG3yC,EAAE1N,UAAUuvC,aAAa,WAAW,OAAO,GAAG7hC,EAAE1N,UAAU45C,UAAU,WAAW,IAAI78C,EAAE,EAAEA,GAAGW,KAAK+0C,OAAOmH,YAAY,IAAI,IAAIlsC,EAAE,EAAEA,EAAEhQ,KAAKg1C,OAAOz2C,OAAOyR,IAAI3Q,GAAGW,KAAKg1C,OAAOhlC,GAAGksC,YAAY,OAAO78C,GAAG2Q,EAAE1N,UAAUmgD,aAAa,WAAW,IAAI,IAAIpjD,EAAEW,KAAK+0C,OAAO0N,eAAezyC,EAAE,EAAEA,EAAEhQ,KAAKg1C,OAAOz2C,OAAOyR,IAAI3Q,GAAGW,KAAKg1C,OAAOhlC,GAAGyyC,eAAe,OAAOpjD,GAAG2Q,EAAE1N,UAAU8jB,QAAQ,WAAW,IAAI/mB,EAAEW,KAAKmX,OAAO9X,EAAE01C,OAAO/0C,KAAK+0C,OAAO59B,OAAOiP,UAAU/mB,EAAE21C,OAAO,IAAI/tC,MAAMjH,KAAKg1C,OAAOz2C,QAAQuyC,KAAK,MAAM,IAAI,IAAI9gC,EAAE,EAAEA,EAAEhQ,KAAKg1C,OAAOz2C,OAAOyR,IAAI3Q,EAAE21C,OAAOhlC,GAAGhQ,KAAKg1C,OAAOhlC,GAAGmH,OAAOiP,UAAU,OAAO/mB,GAAG2Q,EAAE1N,UAAUmP,WAAW,WAAW,OAAOzR,KAAKslD,kBAAkB7zC,cAAczB,EAAE1N,UAAU85C,mBAAmB,WAAW,GAAG,IAAIjsC,UAAU5R,OAAO,CAAC,IAAIc,EAAE8Q,UAAU,GAAGH,EAAEhQ,KAAK+0C,OAAOt2C,EAAEY,EAAE01C,OAAO,OAAO/kC,EAAEosC,mBAAmB39C,GAAG,GAAG,IAAI0R,UAAU5R,OAAO,CAAC,IAAmByjB,EAAE7R,UAAU,GAAGye,EAA5Bze,UAAU,GAAsBrR,EAAEkB,KAAK+0C,OAAOr1C,EAAEkvB,EAAEmmB,OAAOtO,EAAE3nC,EAAEs9C,mBAAmB18C,EAAEsiB,GAAG,GAAG,IAAIykB,EAAE,OAAOA,EAAE,IAAI,IAAI16B,EAAE/L,KAAKqlD,qBAAqB1yC,EAAEic,EAAEy2B,qBAAqBrkD,EAAE,EAAEA,EAAE+K,GAAG/K,EAAE2R,GAAG,CAAC,IAAI6zB,EAAExmC,KAAKulD,iBAAiBvkD,GAAGma,EAAEyT,EAAE22B,iBAAiBvkD,GAAGgM,EAAEw5B,EAAE4V,mBAAmBjhC,EAAE6G,GAAG,GAAG,IAAIhV,EAAE,OAAOA,EAAEhM,IAAI,OAAOA,EAAE+K,EAAE,EAAE/K,EAAE2R,GAAG,EAAE,IAAI3C,EAAE1N,UAAU4B,MAAM,SAAS7E,GAAG,GAAGquC,EAAEruC,EAAEg+C,IAAI,CAACr9C,KAAK+0C,OAAO7wC,MAAM7E,GAAG,IAAI,IAAI2Q,EAAE,EAAEA,EAAEhQ,KAAKg1C,OAAOz2C,OAAOyR,IAAIhQ,KAAKg1C,OAAOhlC,GAAG9L,MAAM7E,QAAQ,GAAGquC,EAAEruC,EAAE+iD,IAAI,CAAC,GAAGpiD,KAAK+0C,OAAO7wC,MAAM7E,IAAIA,EAAEgjD,SAAS,IAAI,IAAI5jD,EAAE,EAAEA,EAAEuB,KAAKg1C,OAAOz2C,SAASyB,KAAKg1C,OAAOv2C,GAAGyF,MAAM7E,IAAIA,EAAEgjD,UAAU5jD,KAAKY,EAAEijD,qBAAqBtiD,KAAK87C,uBAAuB,GAAGpO,EAAEruC,EAAE8iD,IAAI9iD,EAAEm7C,OAAOx6C,WAAW,GAAG0tC,EAAEruC,EAAEmwC,IAAI,CAACnwC,EAAEm7C,OAAOx6C,MAAMA,KAAK+0C,OAAO7wC,MAAM7E,GAAG,IAAI,IAAIC,EAAE,EAAEA,EAAEU,KAAKg1C,OAAOz2C,OAAOe,IAAIU,KAAKg1C,OAAO11C,GAAG4E,MAAM7E,KAAK2Q,EAAE1N,UAAUsgD,YAAY,WAAW,GAAG5iD,KAAKg1B,UAAU,OAAOh1B,KAAKy7C,aAAajG,wBAAwB,IAAIn2C,EAAE,IAAI4H,MAAMjH,KAAKg1C,OAAOz2C,OAAO,GAAGuyC,KAAK,MAAMzxC,EAAE,GAAGW,KAAK+0C,OAAO,IAAI,IAAI/kC,EAAE,EAAEA,EAAEhQ,KAAKg1C,OAAOz2C,OAAOyR,IAAI3Q,EAAE2Q,EAAE,GAAGhQ,KAAKg1C,OAAOhlC,GAAG,OAAO3Q,EAAEd,QAAQ,EAAEyB,KAAKy7C,aAAalG,iBAAiBl2C,EAAE,GAAGylD,yBAAyB9kD,KAAKy7C,aAAajG,sBAAsBn2C,IAAI2Q,EAAE1N,UAAUyqC,MAAM,WAAW,IAAI/8B,EAAE3Q,EAAEiD,UAAUyqC,MAAMn9B,KAAK5P,MAAMgQ,EAAE+kC,OAAO/0C,KAAK+0C,OAAOhI,QAAQ/8B,EAAEglC,OAAO,IAAI/tC,MAAMjH,KAAKg1C,OAAOz2C,QAAQuyC,KAAK,MAAM,IAAI,IAAIryC,EAAE,EAAEA,EAAEuB,KAAKg1C,OAAOz2C,OAAOE,IAAIuR,EAAEglC,OAAOv2C,GAAGuB,KAAKg1C,OAAOv2C,GAAGsuC,QAAQ,OAAO/8B,GAAGA,EAAE1N,UAAUgyC,gBAAgB,WAAW,MAAM,WAAWtkC,EAAE1N,UAAU6U,KAAK,WAAW,IAAI,IAAI9X,EAAEW,KAAK+0C,OAAO59B,OAAO1Y,EAAE,IAAIwI,MAAMjH,KAAKg1C,OAAOz2C,QAAQuyC,KAAK,MAAMxxC,EAAE,EAAEA,EAAEb,EAAEF,OAAOe,IAAIb,EAAEa,GAAGU,KAAKg1C,OAAO11C,GAAG6X,OAAO,OAAO,IAAInH,EAAE3Q,EAAEZ,EAAEuB,KAAK26C,WAAW3qC,EAAE1N,UAAUgjD,gBAAgB,WAAW,OAAOtlD,KAAK+0C,QAAQ/kC,EAAE1N,UAAU0yB,QAAQ,WAAW,OAAOh1B,KAAK+0C,OAAO/f,WAAWhlB,EAAE1N,UAAUijD,iBAAiB,SAASlmD,GAAG,OAAOW,KAAKg1C,OAAO31C,IAAI2Q,EAAE1N,UAAUqpC,YAAY,WAAW,MAAM,CAACwZ,KAAKn1C,EAAE1N,UAAUspC,SAAS,WAAW,OAAO57B,GAAGvR,EAAE4tC,iBAAiBzkB,IAAI,WAAW,OAAO,oBAAoBlf,OAAOyP,iBAAiBnI,EAAEvR,GAAGuR,EAA76K,CAAg7KyqC,IAAI+K,GAAG,SAASnmD,GAAG,SAAS2Q,IAAI3Q,EAAE6E,MAAMlE,KAAKmQ,WAAW9Q,IAAI2Q,EAAEgY,UAAU3oB,IAAI2Q,EAAE1N,UAAUoG,OAAOojC,OAAOzsC,GAAGA,EAAEiD,YAAYkJ,YAAYwE,EAAE,IAAIvR,EAAE,CAAC4tC,iBAAiB,CAACh8B,cAAa,IAAK,OAAOL,EAAE1N,UAAUk5C,aAAa,WAAW,OAAOf,GAAGO,sBAAsBhrC,EAAE1N,UAAUmjD,QAAQ,WAAW,OAAM,GAAIz1C,EAAE1N,UAAUu5C,YAAY,WAAW,GAAG,IAAI1rC,UAAU5R,OAAO,CAAC,IAAIyR,EAAEG,UAAU,GAAG1R,EAAE0R,UAAU,GAAG,QAAQnQ,KAAK0iD,kBAAkB1yC,IAAI3Q,EAAEiD,UAAUu5C,YAAYjsC,KAAK5P,KAAKgQ,EAAEvR,GAAG,OAAOY,EAAEiD,UAAUu5C,YAAY33C,MAAMlE,KAAKmQ,YAAYH,EAAE1N,UAAUqvC,cAAc,WAAW,GAAG,IAAIxhC,UAAU5R,OAAO,CAAC,IAAIyR,EAAEG,UAAU,GAAG,OAAOnQ,KAAK00C,YAAY1kC,GAAG2hC,gBAAgB,OAAOtyC,EAAEiD,UAAUqvC,cAAcztC,MAAMlE,KAAKmQ,YAAYH,EAAE1N,UAAUqgD,qBAAqB,WAAW,OAAOrB,GAAGE,OAAOxxC,EAAE1N,UAAUuvC,aAAa,WAAW,OAAO,GAAG7hC,EAAE1N,UAAUsgD,YAAY,WAAW,OAAO5iD,KAAKy7C,aAAa9F,yBAAyB,OAAO3lC,EAAE1N,UAAUgyC,gBAAgB,WAAW,MAAM,cAActkC,EAAE1N,UAAU6U,KAAK,WAAW,IAAI,IAAI9X,EAAE,IAAI4H,MAAMjH,KAAK00C,YAAYn2C,QAAQuyC,KAAK,MAAMryC,EAAE,EAAEA,EAAEY,EAAEd,OAAOE,IAAIY,EAAEZ,GAAGuB,KAAK00C,YAAYj2C,GAAG0Y,OAAO,OAAO,IAAInH,EAAE3Q,EAAEW,KAAK26C,WAAW3qC,EAAE1N,UAAUqpC,YAAY,WAAW,MAAM,CAACsZ,KAAKj1C,EAAE1N,UAAUspC,SAAS,WAAW,OAAO57B,GAAGvR,EAAE4tC,iBAAiBzkB,IAAI,WAAW,OAAO,oBAAoBlf,OAAOyP,iBAAiBnI,EAAEvR,GAAGuR,EAA1wC,CAA6wCuyC,IAAImD,GAAG,SAASrmD,GAAG,SAAS2Q,EAAEA,EAAEvR,GAAGuR,aAAa23B,GAAGlpC,aAAau1C,KAAKhkC,EAAEvR,EAAEsmD,+BAA+BjZ,OAAO97B,IAAI3Q,EAAEuQ,KAAK5P,KAAKgQ,EAAEvR,GAAGuB,KAAK2lD,uBAAuBtmD,IAAI2Q,EAAEgY,UAAU3oB,IAAI2Q,EAAE1N,UAAUoG,OAAOojC,OAAOzsC,GAAGA,EAAEiD,YAAYkJ,YAAYwE,EAAE,IAAIvR,EAAE,CAACmnD,mBAAmB,CAACv1C,cAAa,GAAIg8B,iBAAiB,CAACh8B,cAAa,IAAK,OAAOL,EAAE1N,UAAUk5C,aAAa,WAAW,OAAOf,GAAGS,sBAAsBlrC,EAAE1N,UAAUqgD,qBAAqB,WAAW,OAAOrB,GAAGE,OAAOxxC,EAAE1N,UAAUwgD,SAAS,WAAW,QAAQ9iD,KAAKg1B,WAAW31B,EAAEiD,UAAUwgD,SAASlzC,KAAK5P,OAAOgQ,EAAE1N,UAAU8jB,QAAQ,WAAW,IAAI/mB,EAAEW,KAAK40C,QAAQz9B,OAAqB,OAAdotC,GAAGn+B,QAAQ/mB,GAAUW,KAAKy7C,aAAalG,iBAAiBl2C,IAAI2Q,EAAE1N,UAAUqjD,qBAAqB,WAAW,IAAI3lD,KAAKg1B,YAAY31B,EAAEiD,UAAUwgD,SAASlzC,KAAK5P,MAAM,MAAM,IAAItB,EAAE,wDAAwD,GAAGsB,KAAK8kD,wBAAwBrwB,QAAQ,GAAGz0B,KAAK8kD,wBAAwBrwB,OAAOzkB,EAAE41C,mBAAmB,MAAM,IAAIlnD,EAAE,iDAAiDsB,KAAK8kD,wBAAwBrwB,OAAO,0BAA0BzkB,EAAE1N,UAAUgyC,gBAAgB,WAAW,MAAM,cAActkC,EAAE1N,UAAU6U,KAAK,WAAW,OAAO,IAAInH,EAAEhQ,KAAK40C,QAAQz9B,OAAOnX,KAAK26C,WAAW3qC,EAAE1N,UAAUqpC,YAAY,WAAW,MAAM,IAAI37B,EAAE1N,UAAUspC,SAAS,WAAW,OAAO57B,GAAGvR,EAAEmnD,mBAAmBh+B,IAAI,WAAW,OAAO,GAAGnpB,EAAE4tC,iBAAiBzkB,IAAI,WAAW,OAAO,oBAAoBlf,OAAOyP,iBAAiBnI,EAAEvR,GAAGuR,EAAv3C,CAA03CwzC,IAAIqC,GAAG,SAASxmD,GAAG,SAAS2Q,IAAI3Q,EAAE6E,MAAMlE,KAAKmQ,WAAW9Q,IAAI2Q,EAAEgY,UAAU3oB,IAAI2Q,EAAE1N,UAAUoG,OAAOojC,OAAOzsC,GAAGA,EAAEiD,YAAYkJ,YAAYwE,EAAE,IAAIvR,EAAE,CAAC4tC,iBAAiB,CAACh8B,cAAa,IAAK,OAAOL,EAAE1N,UAAUk5C,aAAa,WAAW,OAAOf,GAAGY,wBAAwBrrC,EAAE1N,UAAUu5C,YAAY,WAAW,GAAG,IAAI1rC,UAAU5R,OAAO,CAAC,IAAIyR,EAAEG,UAAU,GAAG1R,EAAE0R,UAAU,GAAG,QAAQnQ,KAAK0iD,kBAAkB1yC,IAAI3Q,EAAEiD,UAAUu5C,YAAYjsC,KAAK5P,KAAKgQ,EAAEvR,GAAG,OAAOY,EAAEiD,UAAUu5C,YAAY33C,MAAMlE,KAAKmQ,YAAYH,EAAE1N,UAAUqgD,qBAAqB,WAAW,OAAO,GAAG3yC,EAAE1N,UAAUuvC,aAAa,WAAW,OAAO,GAAG7hC,EAAE1N,UAAU8jB,QAAQ,WAAW,IAAI,IAAI/mB,EAAEW,KAAK00C,YAAYn2C,OAAOyR,EAAE,IAAI/I,MAAM5H,GAAGyxC,KAAK,MAAMryC,EAAE,EAAEA,EAAEuB,KAAK00C,YAAYn2C,OAAOE,IAAIuR,EAAEvR,GAAGuB,KAAK00C,YAAYj2C,GAAG2nB,UAAU,OAAOpmB,KAAKy7C,aAAa/F,mBAAmB1lC,IAAIA,EAAE1N,UAAUsgD,YAAY,WAAW,GAAG5iD,KAAKg1B,UAAU,OAAOh1B,KAAKy7C,aAAajG,wBAAwB,IAAI,IAAIn2C,EAAE,IAAIm/C,GAAGxuC,EAAE,EAAEA,EAAEhQ,KAAK00C,YAAYn2C,OAAOyR,IAAI,IAAI,IAAIvR,EAAEuB,KAAK00C,YAAY1kC,GAAG4yC,cAActjD,EAAE,EAAEA,EAAEb,EAAE09C,mBAAmB78C,IAAID,EAAE+zB,IAAI30B,EAAEi9C,aAAap8C,IAAI,IAAI0iB,EAAE,IAAI/a,MAAM5H,EAAEo1B,QAAQqc,KAAK,MAAM,OAAO9wC,KAAKy7C,aAAajG,sBAAsBn2C,EAAEg/C,QAAQr8B,KAAKhS,EAAE1N,UAAUgyC,gBAAgB,WAAW,MAAM,gBAAgBtkC,EAAE1N,UAAU6U,KAAK,WAAW,IAAI,IAAI9X,EAAE,IAAI4H,MAAMjH,KAAK00C,YAAYn2C,QAAQuyC,KAAK,MAAMryC,EAAE,EAAEA,EAAEY,EAAEd,OAAOE,IAAIY,EAAEZ,GAAGuB,KAAK00C,YAAYj2C,GAAG0Y,OAAO,OAAO,IAAInH,EAAE3Q,EAAEW,KAAK26C,WAAW3qC,EAAE1N,UAAUqpC,YAAY,WAAW,MAAM,CAACwZ,KAAKn1C,EAAE1N,UAAUspC,SAAS,WAAW,OAAO57B,GAAGvR,EAAE4tC,iBAAiBzkB,IAAI,WAAW,OAAO,mBAAmBlf,OAAOyP,iBAAiBnI,EAAEvR,GAAGuR,EAA7/C,CAAggDuyC,IAAIuD,GAAG,SAASzmD,GAAGW,KAAK26C,SAASt7C,GAAG,KAAKW,KAAK+lD,mBAAkB,GAAIC,GAAG,CAACC,sBAAsB,CAAC51C,cAAa,GAAI61C,oBAAoB,CAAC71C,cAAa,GAAI81C,4BAA4B,CAAC91C,cAAa,IAAKy1C,GAAGxjD,UAAU8jD,gBAAgB,SAAS/mD,GAAGW,KAAK+lD,kBAAkB1mD,GAAGymD,GAAGxjD,UAAU+jD,KAAK,SAAShnD,EAAE2Q,GAAG,GAAG,OAAO3Q,EAAE,OAAO,KAAK,IAAIZ,EAAEuB,KAAKsmD,aAAajnD,EAAE2Q,GAAG,OAAOhQ,KAAK+lD,mBAAmBtnD,EAAEs+C,YAAY19C,EAAEg9C,eAAe59C,GAAGqnD,GAAGxjD,UAAUgkD,aAAa,SAASjnD,EAAE2Q,GAAG,OAAO,OAAOhQ,KAAK26C,WAAW36C,KAAK26C,SAASt7C,EAAEo8C,cAAcp8C,aAAakjD,GAAGviD,KAAKumD,uBAAuBlnD,EAAE2Q,GAAG3Q,aAAa+lD,GAAGplD,KAAKwmD,YAAYnnD,EAAE2Q,GAAG3Q,aAAa6lD,IAA2B7lD,aAAamkD,GAArCxzC,EAAEq2C,KAAKhnD,EAAEW,KAAK26C,WAAmD3E,GAAGC,qBAAqB,+BAA+B52C,EAAEusC,WAAW6a,WAAW,OAAOX,GAAGxjD,UAAUikD,uBAAuB,SAASlnD,EAAE2Q,GAAG,IAAI,IAAIvR,EAAEuR,EAAEq2C,KAAKhnD,EAAEW,KAAK26C,UAAUr7C,EAAE,IAAIk/C,GAAGx8B,EAAE,EAAEA,EAAEvjB,EAAE09C,mBAAmBn6B,IAAI,CAAC,IAAI4M,EAAE5uB,KAAKqmD,KAAK5nD,EAAEi9C,aAAa15B,GAAGhS,GAAG,OAAO4e,GAAGA,EAAEoG,WAAW11B,EAAE8zB,IAAIxE,GAAG,OAAOnwB,EAAEmtC,aAAa4Z,GAAGxlD,KAAK26C,SAAStF,iBAAiB/1C,EAAE++C,QAAQ,KAAK5/C,EAAEmtC,aAAaiX,GAAG7iD,KAAK26C,SAASnF,sBAAsBl2C,EAAE++C,QAAQ,KAAK5/C,EAAEmtC,aAAaia,GAAG7lD,KAAK26C,SAASjF,mBAAmBp2C,EAAE++C,QAAQ,KAAKr+C,KAAK26C,SAAShF,yBAAyBr2C,EAAE++C,QAAQ,MAAMyH,GAAGxjD,UAAUkkD,YAAY,SAASnnD,EAAE2Q,GAAG,IAAIvR,EAAEuR,EAAEq2C,KAAKhnD,EAAEW,KAAK26C,UAAU,GAAG,OAAOl8C,IAAIA,EAAEuB,KAAK26C,SAASlF,cAAc,OAAOh3C,EAAEu2B,UAAU,OAAOv2B,EAAE,IAAIa,EAAEU,KAAKqmD,KAAK5nD,EAAE6mD,kBAAkBt1C,GAAG,GAAG,OAAO1Q,GAAGA,EAAE01B,UAAU,OAAOh1B,KAAK26C,SAASlF,gBAAgB,IAAI,IAAIzzB,EAAE,IAAIw8B,GAAG5vB,EAAE,EAAEA,EAAEnwB,EAAE4mD,qBAAqBz2B,IAAI,CAAC,IAAI9vB,EAAEkB,KAAKqmD,KAAK5nD,EAAE8mD,iBAAiB32B,GAAG5e,GAAG,OAAOlR,GAAGA,EAAEk2B,WAAWhT,EAAEoR,IAAIt0B,GAAG,OAAOkB,KAAK26C,SAASlF,cAAcn2C,EAAE0iB,EAAEq8B,QAAQ,MAAMyH,GAAGxjD,UAAUqpC,YAAY,WAAW,MAAM,IAAIma,GAAGxjD,UAAUspC,SAAS,WAAW,OAAOka,IAAIA,GAAGY,wBAAwB,aAAaV,GAAGC,sBAAsBr+B,IAAI,WAAW,OAAO++B,IAAIX,GAAGE,oBAAoBt+B,IAAI,WAAW,OAAOg/B,IAAIZ,GAAGG,4BAA4Bv+B,IAAI,WAAW,OAAOi/B,IAAIn+C,OAAOyP,iBAAiB2tC,GAAGE,IAAI,IAAIW,GAAG,aAAaA,GAAGrkD,UAAU+jD,KAAK,SAAShnD,EAAE2Q,GAAG,OAAO3Q,GAAGsnD,GAAGrkD,UAAUqpC,YAAY,WAAW,MAAM,CAACma,GAAGY,0BAA0BC,GAAGrkD,UAAUspC,SAAS,WAAW,OAAO+a,IAAI,IAAIC,GAAG,aAAaA,GAAGtkD,UAAU+jD,KAAK,SAAShnD,EAAE2Q,GAAG,IAAIvR,EAAEuB,KAAK8mD,gBAAgBznD,EAAEmjD,iBAAiBnjD,GAAG,OAAO,OAAOZ,EAAEY,EAAEA,aAAaqmD,GAAG11C,EAAEulC,iBAAiB92C,GAAGY,aAAamkD,GAAGxzC,EAAEslC,iBAAiB72C,GAAGY,aAAa6lD,GAAGzmD,EAAEF,OAAO,EAAEyR,EAAEmlC,YAAY12C,EAAE,IAAIuR,EAAEmlC,cAAc91C,GAAGunD,GAAGtkD,UAAUqpC,YAAY,WAAW,MAAM,CAACma,GAAGY,0BAA0BE,GAAGtkD,UAAUspC,SAAS,WAAW,OAAOgb,IAAI,IAAIC,GAAG,aAAaA,GAAGvkD,UAAU+jD,KAAK,SAAShnD,EAAE2Q,GAAG,OAAO3Q,aAAaqmD,GAAG11C,EAAEulC,iBAAiBv1C,KAAKqmD,KAAKhnD,EAAEylD,wBAAwBzlD,IAAIA,aAAamkD,GAAGxzC,EAAEslC,iBAAiBt1C,KAAKqmD,KAAKhnD,EAAEylD,wBAAwBzlD,IAAIA,aAAa6lD,GAAGl1C,EAAEmlC,YAAYn1C,KAAKqmD,KAAKhnD,EAAEylD,wBAAwBzlD,IAAIA,GAAGwnD,GAAGvkD,UAAUqpC,YAAY,WAAW,MAAM,CAACma,GAAGY,0BAA0BG,GAAGvkD,UAAUspC,SAAS,WAAW,OAAOib,IAAI,IAAIE,GAAG,WAAW,GAAG/mD,KAAKgnD,WAAW,EAAEhnD,KAAKw0C,aAAa,KAAK,IAAIrkC,UAAU5R,QAAQ,GAAG4R,UAAU,aAAalJ,MAAMjH,KAAKw0C,aAAarkC,UAAU,GAAGnQ,KAAKgnD,WAAW,OAAO,GAAG5rC,OAAOqwB,UAAUt7B,UAAU,IAAI,CAAC,IAAI9Q,EAAE8Q,UAAU,GAAGnQ,KAAKw0C,aAAa,IAAIvtC,MAAM5H,GAAGyxC,KAAK,MAAM,IAAI,IAAI9gC,EAAE,EAAEA,EAAE3Q,EAAE2Q,IAAIhQ,KAAKw0C,aAAaxkC,GAAG,IAAI23B,OAAO,GAAG+F,EAAEv9B,UAAU,GAAGshC,GAAG,CAAC,IAAIhzC,EAAE0R,UAAU,GAAG,GAAG,OAAO1R,EAAE,OAAOuB,KAAKw0C,aAAa,IAAIvtC,MAAM,GAAG6pC,KAAK,MAAM,KAAK9wC,KAAKgnD,WAAWvoD,EAAEozC,eAAe7xC,KAAKw0C,aAAa,IAAIvtC,MAAMxI,EAAEg2B,QAAQqc,KAAK,MAAM,IAAI,IAAIxxC,EAAE,EAAEA,EAAEU,KAAKw0C,aAAaj2C,OAAOe,IAAIU,KAAKw0C,aAAal1C,GAAGb,EAAEmzC,kBAAkBtyC,SAAS,GAAG,IAAI6Q,UAAU5R,OAAO,GAAG4R,UAAU,aAAalJ,OAAOmU,OAAOqwB,UAAUt7B,UAAU,IAAI,CAAC,IAAI6R,EAAE7R,UAAU,GAAGye,EAAEze,UAAU,GAAGnQ,KAAKw0C,aAAaxyB,EAAEhiB,KAAKgnD,WAAWp4B,EAAE,OAAO5M,IAAIhiB,KAAKw0C,aAAa,IAAIvtC,MAAM,GAAG6pC,KAAK,YAAY,GAAG11B,OAAOqwB,UAAUt7B,UAAU,KAAKiL,OAAOqwB,UAAUt7B,UAAU,IAAI,CAAC,IAAIrR,EAAEqR,UAAU,GAAGzQ,EAAEyQ,UAAU,GAAGnQ,KAAKw0C,aAAa,IAAIvtC,MAAMnI,GAAGgyC,KAAK,MAAM9wC,KAAKgnD,WAAWtnD,EAAE,IAAI,IAAI+mC,EAAE,EAAEA,EAAE3nC,EAAE2nC,IAAIzmC,KAAKw0C,aAAa/N,GAAG,IAAIkB,IAAIwH,GAAG,CAAC9C,iBAAiB,CAACh8B,cAAa,IAAK02C,GAAGzkD,UAAUmqC,YAAY,SAASptC,EAAE2Q,EAAEvR,GAAG,OAAOuR,GAAG,KAAKyhC,EAAEnF,EAAEtsC,KAAKw0C,aAAan1C,GAAG8U,EAAE1V,EAAE,MAAM,KAAKgzC,EAAElF,EAAEvsC,KAAKw0C,aAAan1C,GAAG+U,EAAE3V,EAAE,MAAM,KAAKgzC,EAAEjF,EAAExsC,KAAKw0C,aAAan1C,GAAGV,EAAEF,EAAE,MAAM,QAAQ,MAAM,IAAIC,EAAE,2BAA2BqoD,GAAGzkD,UAAUmyB,KAAK,WAAW,OAAOz0B,KAAKw0C,aAAaj2C,QAAQwoD,GAAGzkD,UAAUqqC,YAAY,SAASttC,EAAE2Q,GAAG,OAAOA,GAAG,KAAKyhC,EAAEnF,EAAE,OAAOtsC,KAAKw0C,aAAan1C,GAAG8U,EAAE,KAAKs9B,EAAElF,EAAE,OAAOvsC,KAAKw0C,aAAan1C,GAAG+U,EAAE,KAAKq9B,EAAEjF,EAAE,OAAOxsC,KAAKw0C,aAAan1C,GAAGV,EAAE,OAAO4zB,EAAE4a,KAAK4Z,GAAGzkD,UAAUqvC,cAAc,WAAW,GAAG,IAAIxhC,UAAU5R,OAAO,CAAC,IAAIc,EAAE8Q,UAAU,GAAG,OAAOnQ,KAAKw0C,aAAan1C,GAAG,GAAG,IAAI8Q,UAAU5R,OAAO,CAAC,IAAIyR,EAAEG,UAAU,GAAG1R,EAAE0R,UAAU,GAAG1R,EAAE0V,EAAEnU,KAAKw0C,aAAaxkC,GAAGmE,EAAE1V,EAAE2V,EAAEpU,KAAKw0C,aAAaxkC,GAAGoE,EAAE3V,EAAEE,EAAEqB,KAAKw0C,aAAaxkC,GAAGrR,IAAIooD,GAAGzkD,UAAUsvC,kBAAkB,SAASvyC,GAAG,OAAO,IAAIsoC,EAAE3nC,KAAKw0C,aAAan1C,KAAK0nD,GAAGzkD,UAAUuvC,aAAa,WAAW,OAAO7xC,KAAKgnD,YAAYD,GAAGzkD,UAAUwvC,KAAK,SAASzyC,GAAG,OAAOW,KAAKw0C,aAAan1C,GAAG8U,GAAG4yC,GAAGzkD,UAAUyqC,MAAM,WAAW,IAAI,IAAI1tC,EAAE,IAAI4H,MAAMjH,KAAKy0B,QAAQqc,KAAK,MAAM9gC,EAAE,EAAEA,EAAEhQ,KAAKw0C,aAAaj2C,OAAOyR,IAAI3Q,EAAE2Q,GAAGhQ,KAAKw0C,aAAaxkC,GAAG+8B,QAAQ,OAAO,IAAIga,GAAG1nD,EAAEW,KAAKgnD,aAAaD,GAAGzkD,UAAUyvC,eAAe,SAAS1yC,GAAG,IAAI,IAAI2Q,EAAE,EAAEA,EAAEhQ,KAAKw0C,aAAaj2C,OAAOyR,IAAI3Q,EAAE4zC,gBAAgBjzC,KAAKw0C,aAAaxkC,IAAI,OAAO3Q,GAAG0nD,GAAGzkD,UAAU6U,KAAK,WAAW,IAAI,IAAI9X,EAAE,IAAI4H,MAAMjH,KAAKy0B,QAAQqc,KAAK,MAAM9gC,EAAE,EAAEA,EAAEhQ,KAAKw0C,aAAaj2C,OAAOyR,IAAI3Q,EAAE2Q,GAAGhQ,KAAKw0C,aAAaxkC,GAAGmH,OAAO,OAAO,IAAI4vC,GAAG1nD,EAAEW,KAAKgnD,aAAaD,GAAGzkD,UAAUkV,SAAS,WAAW,GAAGxX,KAAKw0C,aAAaj2C,OAAO,EAAE,CAAC,IAAIc,EAAE,IAAIkW,EAAE,GAAGvV,KAAKw0C,aAAaj2C,QAAQc,EAAE4uC,OAAO,KAAK5uC,EAAE4uC,OAAOjuC,KAAKw0C,aAAa,IAAI,IAAI,IAAIxkC,EAAE,EAAEA,EAAEhQ,KAAKw0C,aAAaj2C,OAAOyR,IAAI3Q,EAAE4uC,OAAO,MAAM5uC,EAAE4uC,OAAOjuC,KAAKw0C,aAAaxkC,IAAI,OAAO3Q,EAAE4uC,OAAO,KAAK5uC,EAAEmY,WAAW,MAAM,MAAMuvC,GAAGzkD,UAAU0vC,KAAK,SAAS3yC,GAAG,OAAOW,KAAKw0C,aAAan1C,GAAG+U,GAAG2yC,GAAGzkD,UAAU2vC,kBAAkB,WAAW,OAAOjyC,KAAKw0C,cAAcuS,GAAGzkD,UAAUqpC,YAAY,WAAW,MAAM,CAAC8F,EAAEzhC,IAAI+2C,GAAGzkD,UAAUspC,SAAS,WAAW,OAAOmb,IAAI5X,GAAG9C,iBAAiBzkB,IAAI,WAAW,OAAO,mBAAmBlf,OAAOyP,iBAAiB4uC,GAAG5X,IAAI,IAAI8X,GAAG,aAAaC,GAAG,CAAC7a,iBAAiB,CAACh8B,cAAa,GAAI82C,eAAe,CAAC92C,cAAa,IAAK42C,GAAG3kD,UAAU8kD,YAAY,WAAW,OAAOH,GAAGr1B,YAAYq1B,GAAG3kD,UAAUwpC,OAAO,WAAW,GAAG,IAAI37B,UAAU5R,OAAO,CAAC,GAAG4R,UAAU,aAAalJ,MAA0B,OAAO,IAAI8/C,GAAxB52C,UAAU,IAAoB,GAAGu9B,EAAEv9B,UAAU,GAAGshC,GAAuB,OAAO,IAAIsV,GAAxB52C,UAAU,SAA0B,GAAG,IAAIA,UAAU5R,OAAO,CAAC,IAAIE,EAAE0R,UAAU,GAAG7Q,EAAE6Q,UAAU,GAAG,OAAO7Q,EAAE,IAAIA,EAAE,GAAGA,EAAE,EAAE,IAAIynD,GAAGtoD,GAAG,IAAIsoD,GAAGtoD,EAAEa,KAAK2nD,GAAG3kD,UAAUqpC,YAAY,WAAW,MAAM,CAAChsC,EAAEqQ,IAAIi3C,GAAG3kD,UAAUspC,SAAS,WAAW,OAAOqb,IAAIA,GAAGr1B,SAAS,WAAW,OAAOq1B,GAAGE,gBAAgBD,GAAG7a,iBAAiBzkB,IAAI,WAAW,OAAO,oBAAoBs/B,GAAGC,eAAev/B,IAAI,WAAW,OAAO,IAAIq/B,IAAIv+C,OAAOyP,iBAAiB8uC,GAAGC,IAAI,IAAIG,GAAG,SAAShoD,GAAG,SAAS2Q,IAAI3Q,EAAEuQ,KAAK5P,MAAMA,KAAKsnD,KAAK,IAAI59B,IAAI,OAAOrqB,IAAI2Q,EAAEgY,UAAU3oB,GAAG2Q,EAAE1N,UAAUoG,OAAOojC,OAAOzsC,GAAGA,EAAEiD,WAAW0N,EAAE1N,UAAUkJ,YAAYwE,EAAEA,EAAE1N,UAAUslB,IAAI,SAASvoB,GAAG,OAAOW,KAAKsnD,KAAK1/B,IAAIvoB,IAAI,MAAM2Q,EAAE1N,UAAU+9C,IAAI,SAAShhD,EAAE2Q,GAAG,OAAOhQ,KAAKsnD,KAAKpsC,IAAI7b,EAAE2Q,GAAGA,GAAGA,EAAE1N,UAAU2xB,OAAO,WAAW,IAAI,IAAI50B,EAAE,IAAIm/C,GAAGxuC,EAAEhQ,KAAKsnD,KAAKrzB,SAASx1B,EAAEuR,EAAEoC,QAAQ3T,EAAEm1B,MAAMv0B,EAAE+zB,IAAI30B,EAAEmK,OAAOnK,EAAEuR,EAAEoC,OAAO,OAAO/S,GAAG2Q,EAAE1N,UAAUg+C,SAAS,WAAW,IAAIjhD,EAAE,IAAImhD,GAAG,OAAOxgD,KAAKsnD,KAAKC,UAAU77C,SAAQ,SAASsE,GAAG,OAAO3Q,EAAE+zB,IAAIpjB,MAAK3Q,GAAG2Q,EAAE1N,UAAUmyB,KAAK,WAAW,OAAOz0B,KAAKsnD,KAAK7yB,QAAQzkB,EAA9iB,CAAijBowC,IAAIoH,GAAG,SAASnoD,IAAI,GAAGW,KAAKynD,WAAW,KAAKznD,KAAK0nD,OAAO,KAAK,IAAIv3C,UAAU5R,OAAOyB,KAAKynD,WAAWpoD,EAAEsoD,cAAc,GAAG,IAAIx3C,UAAU5R,OAAO,GAAG4R,UAAU,aAAay3C,GAAG,CAAC,IAAI53C,EAAEG,UAAU,GAAGnQ,KAAKynD,WAAWz3C,EAAEA,IAAI3Q,EAAEwoD,OAAO7nD,KAAK8nD,SAAS,QAAQ,GAAG,iBAAiB33C,UAAU,GAAG,CAAC,IAAI1R,EAAE0R,UAAU,GAAGnQ,KAAKynD,WAAWpoD,EAAEwoD,MAAM7nD,KAAK8nD,SAASrpD,QAAQ,GAAG0R,UAAU,aAAa9Q,EAAE,CAAC,IAAIC,EAAE6Q,UAAU,GAAGnQ,KAAKynD,WAAWnoD,EAAEmoD,WAAWznD,KAAK0nD,OAAOpoD,EAAEooD,SAASrX,GAAG,CAAChE,iBAAiB,CAACh8B,cAAa,GAAI03C,oBAAoB,CAAC13C,cAAa,IAAKm3C,GAAGllD,UAAUoc,OAAO,SAASrf,GAAG,KAAKA,aAAamoD,IAAI,OAAM,EAAG,IAAIx3C,EAAE3Q,EAAE,OAAOW,KAAKynD,aAAaz3C,EAAEy3C,YAAYznD,KAAK0nD,SAAS13C,EAAE03C,QAAQF,GAAGllD,UAAUwqC,UAAU,SAASztC,GAAG,IAAI2Q,EAAE3Q,EAAEZ,EAAEuB,KAAKgoD,8BAA8B1oD,EAAE0Q,EAAEg4C,8BAA8B,OAAO,IAAI5jD,EAAE3F,GAAGquC,UAAU,IAAI1oC,EAAE9E,KAAKkoD,GAAGllD,UAAU2lD,SAAS,WAAW,OAAOjoD,KAAK0nD,QAAQF,GAAGllD,UAAU4lD,WAAW,WAAW,OAAOloD,KAAKynD,aAAaD,GAAGG,UAAU3nD,KAAKynD,aAAaD,GAAGW,iBAAiBX,GAAGllD,UAAU8lD,QAAQ,WAAW,OAAOpoD,KAAKynD,YAAYD,GAAGllD,UAAUkV,SAAS,WAAW,IAAInY,EAAE,UAAU,OAAOW,KAAKynD,aAAaD,GAAGG,SAAStoD,EAAE,WAAWW,KAAKynD,aAAaD,GAAGW,gBAAgB9oD,EAAE,kBAAkBW,KAAKynD,aAAaD,GAAGK,QAAQxoD,EAAE,gBAAgBW,KAAKioD,WAAW,KAAK5oD,GAAGmoD,GAAGllD,UAAUq2C,YAAY,WAAW,GAAG,iBAAiBxoC,UAAU,GAAG,CAAC,IAAI9Q,EAAE8Q,UAAU,GAAG,OAAGoiB,EAAE9pB,MAAMpJ,IAAeW,KAAKynD,aAAaD,GAAGW,gBAA1B9oD,EAA2DW,KAAKynD,aAAaD,GAAGK,MAAMjpD,KAAK4L,MAAMnL,EAAEW,KAAK0nD,QAAQ1nD,KAAK0nD,OAAOroD,EAAE,GAAG8Q,UAAU,aAAaw3B,EAAE,CAAC,IAAI33B,EAAEG,UAAU,GAAG,GAAGnQ,KAAKynD,aAAaD,GAAGG,SAAS,OAAO,KAAK33C,EAAEmE,EAAEnU,KAAK24C,YAAY3oC,EAAEmE,GAAGnE,EAAEoE,EAAEpU,KAAK24C,YAAY3oC,EAAEoE,KAAKozC,GAAGllD,UAAU0lD,4BAA4B,WAAW,IAAI3oD,EAAE,GAAG,OAAOW,KAAKynD,aAAaD,GAAGG,SAAStoD,EAAE,GAAGW,KAAKynD,aAAaD,GAAGW,gBAAgB9oD,EAAE,EAAEW,KAAKynD,aAAaD,GAAGK,QAAQxoD,EAAE,EAAET,KAAK8sC,MAAM9sC,KAAKuB,KAAKvB,KAAKC,IAAImB,KAAKioD,YAAYrpD,KAAKC,IAAI,OAAOQ,GAAGmoD,GAAGllD,UAAUwlD,SAAS,SAASzoD,GAAGW,KAAK0nD,OAAO9oD,KAAKoiB,IAAI3hB,IAAImoD,GAAGllD,UAAUqpC,YAAY,WAAW,MAAM,CAAC37B,EAAE43B,IAAI4f,GAAGllD,UAAUspC,SAAS,WAAW,OAAO4b,IAAIA,GAAGa,YAAY,SAAShpD,EAAE2Q,GAAG,OAAO3Q,EAAEytC,UAAU98B,IAAI,EAAE3Q,EAAE2Q,GAAGqgC,GAAGhE,iBAAiBzkB,IAAI,WAAW,OAAO,oBAAoByoB,GAAG0X,oBAAoBngC,IAAI,WAAW,OAAO,kBAAkBlf,OAAOyP,iBAAiBqvC,GAAGnX,IAAI,IAAIuX,GAAG,SAASvoD,EAAE2Q,GAAGhQ,KAAKsoD,MAAMt4C,GAAG,KAAK3Q,EAAEkpD,cAAclI,IAAIrwC,EAAEhQ,OAAOwoD,GAAG,CAACnc,iBAAiB,CAACh8B,cAAa,GAAIk4C,cAAc,CAACl4C,cAAa,IAAKu3C,GAAGtlD,UAAU8kD,YAAY,WAAW,OAAOQ,GAAGW,cAAc3gC,IAAI5nB,KAAKsoD,QAAQV,GAAGtlD,UAAUkV,SAAS,WAAW,OAAOxX,KAAKsoD,OAAOV,GAAGtlD,UAAUqpC,YAAY,WAAW,MAAM,CAAC37B,IAAI43C,GAAGtlD,UAAUspC,SAAS,WAAW,OAAOgc,IAAIY,GAAGnc,iBAAiBzkB,IAAI,WAAW,OAAO,mBAAmB4gC,GAAGD,cAAc3gC,IAAI,WAAW,OAAO,IAAIy/B,IAAI3+C,OAAOyP,iBAAiByvC,GAAGY,IAAIhB,GAAGiB,KAAKb,GAAGJ,GAAGK,MAAM,IAAID,GAAG,SAASJ,GAAGG,SAAS,IAAIC,GAAG,YAAYJ,GAAGW,gBAAgB,IAAIP,GAAG,mBAAmB,IAAI5T,GAAG,SAAS30C,IAAIW,KAAK22C,gBAAgB,IAAI6Q,GAAGxnD,KAAK46C,MAAM,EAAE56C,KAAK0oD,2BAA2BrpD,EAAEspD,sCAAsC,IAAIx4C,UAAU5R,SAAS,IAAI4R,UAAU5R,OAAOmvC,EAAEv9B,UAAU,GAAGxQ,GAAGK,KAAK0oD,2BAA2Bv4C,UAAU,GAAGA,UAAU,aAAaq3C,KAAKxnD,KAAK22C,gBAAgBxmC,UAAU,IAAI,IAAIA,UAAU5R,QAAQyB,KAAK22C,gBAAgBxmC,UAAU,GAAGnQ,KAAK46C,MAAMzqC,UAAU,IAAI,IAAIA,UAAU5R,SAASyB,KAAK22C,gBAAgBxmC,UAAU,GAAGnQ,KAAK46C,MAAMzqC,UAAU,GAAGnQ,KAAK0oD,2BAA2Bv4C,UAAU,MAAMy4C,GAAG,CAACvc,iBAAiB,CAACh8B,cAAa,IAAK2jC,GAAG1xC,UAAUi6C,WAAW,SAASl9C,GAAG,OAAOA,EAAEszC,SAAS3yC,KAAKm1C,YAAY,MAAM91C,EAAEyzC,YAAYzzC,EAAEuzC,WAAWvzC,EAAE0zC,YAAY1zC,EAAEwzC,UAAU7yC,KAAKm1C,YAAY,IAAIxN,EAAEtoC,EAAEyzC,UAAUzzC,EAAE0zC,YAAY1zC,EAAEyzC,YAAYzzC,EAAEuzC,WAAWvzC,EAAE0zC,YAAY1zC,EAAEwzC,UAAU7yC,KAAKs1C,iBAAiB,CAAC,IAAI3N,EAAEtoC,EAAEyzC,UAAUzzC,EAAE0zC,WAAW,IAAIpL,EAAEtoC,EAAEuzC,UAAUvzC,EAAEwzC,aAAa7yC,KAAKy1C,cAAcz1C,KAAKu1C,iBAAiB,CAAC,IAAI5N,EAAEtoC,EAAEyzC,UAAUzzC,EAAE0zC,WAAW,IAAIpL,EAAEtoC,EAAEyzC,UAAUzzC,EAAEwzC,WAAW,IAAIlL,EAAEtoC,EAAEuzC,UAAUvzC,EAAEwzC,WAAW,IAAIlL,EAAEtoC,EAAEuzC,UAAUvzC,EAAE0zC,WAAW,IAAIpL,EAAEtoC,EAAEyzC,UAAUzzC,EAAE0zC,aAAa,OAAOiB,GAAG1xC,UAAUgzC,iBAAiB,SAASj2C,GAAG,OAAOA,EAAEA,aAAa4H,MAAM,IAAIu8C,GAAGxjD,KAAK+kD,+BAA+BjZ,OAAOzsC,GAAGW,MAAM0tC,EAAEruC,EAAEoyC,GAAG,IAAI+R,GAAGnkD,EAAEW,WAAM,EAAO,IAAIwjD,GAAGxjD,KAAK+kD,+BAA+BjZ,OAAO,IAAI9rC,OAAOg0C,GAAG1xC,UAAUkzC,sBAAsB,WAAW,OAAG,IAAIrlC,UAAU5R,OAAc,IAAIskD,GAAG,KAAK7iD,MAAS,IAAImQ,UAAU5R,OAAkC,IAAIskD,GAAxB1yC,UAAU,GAAmBnQ,WAA5D,GAAoEg0C,GAAG1xC,UAAUumD,cAAc,SAASxpD,GAAG,IAAI,IAAI2Q,EAAE,KAAKvR,GAAE,EAAGa,GAAE,EAAG0iB,EAAE3iB,EAAEkpB,WAAWvG,EAAEg7B,WAAW,CAAC,IAAIpuB,EAAE5M,EAAE5P,OAAOtT,EAAE8vB,EAAEgd,WAAW,OAAO57B,IAAIA,EAAElR,GAAGA,IAAIkR,IAAIvR,GAAE,GAAImwB,EAAEquB,kCAAkC39C,GAAE,GAAI,GAAG,OAAO0Q,EAAE,OAAOhQ,KAAK21C,2BAA2B,GAAGl3C,GAAGa,EAAE,OAAOU,KAAK21C,yBAAyB3B,GAAG8U,gBAAgBzpD,IAAI,IAAIK,EAAEL,EAAEkpB,WAAWnW,OAAO,GAAG/S,EAAEo1B,OAAO,EAAE,CAAC,GAAG/0B,aAAa0lD,GAAG,OAAOplD,KAAK01C,mBAAmB1B,GAAG+U,eAAe1pD,IAAI,GAAGK,aAAa8jD,GAAG,OAAOxjD,KAAKw1C,sBAAsBxB,GAAGgV,kBAAkB3pD,IAAI,GAAGK,aAAawlD,GAAG,OAAOllD,KAAKq1C,iBAAiBrB,GAAGiV,aAAa5pD,IAAI22C,GAAGC,qBAAqB,oBAAoBv2C,EAAEksC,WAAW6a,WAAW,OAAO/mD,GAAGs0C,GAAG1xC,UAAUihD,2BAA2B,SAASlkD,GAAG,OAAOW,KAAKq1C,iBAAiB,OAAOh2C,EAAEW,KAAK+kD,+BAA+BjZ,OAAOzsC,GAAG,OAAO20C,GAAG1xC,UAAU6yC,YAAY,WAAW,GAAG,IAAIhlC,UAAU5R,OAAO,OAAOyB,KAAKm1C,YAAYn1C,KAAK+kD,+BAA+BjZ,OAAO,KAAK,GAAG,IAAI37B,UAAU5R,OAAO,CAAC,GAAG4R,UAAU,aAAaw3B,EAAE,CAAC,IAAItoC,EAAE8Q,UAAU,GAAG,OAAOnQ,KAAKm1C,YAAY,OAAO91C,EAAEW,KAAK+kD,+BAA+BjZ,OAAO,CAACzsC,IAAI,MAAM,GAAGquC,EAAEv9B,UAAU,GAAGshC,GAAuB,OAAO,IAAIyT,GAAxB/0C,UAAU,GAAmBnQ,QAASg0C,GAAG1xC,UAAUyiD,6BAA6B,WAAW,OAAO/kD,KAAK0oD,4BAA4B1U,GAAG1xC,UAAUmzC,cAAc,WAAW,GAAG,IAAItlC,UAAU5R,OAAO,OAAO,IAAI6mD,GAAG,KAAK,KAAKplD,MAAM,GAAG,IAAImQ,UAAU5R,OAAO,CAAC,GAAGmvC,EAAEv9B,UAAU,GAAGshC,GAAG,CAAC,IAAIpyC,EAAE8Q,UAAU,GAAG,OAAOnQ,KAAKy1C,cAAcz1C,KAAKu1C,iBAAiBl2C,IAAI,GAAG8Q,UAAU,aAAalJ,MAAM,CAAC,IAAI+I,EAAEG,UAAU,GAAG,OAAOnQ,KAAKy1C,cAAcz1C,KAAKu1C,iBAAiBvlC,IAAI,GAAGG,UAAU,aAAau1C,GAAG,CAAC,IAAIjnD,EAAE0R,UAAU,GAAG,OAAOnQ,KAAKy1C,cAAch3C,EAAE,YAAY,GAAG,IAAI0R,UAAU5R,OAA0C,OAAO,IAAI6mD,GAAvCj1C,UAAU,GAAKA,UAAU,GAAqBnQ,OAAQg0C,GAAG1xC,UAAUw4C,QAAQ,WAAW,OAAO96C,KAAK46C,OAAO5G,GAAG1xC,UAAUqzC,yBAAyB,WAAW,OAAG,IAAIxlC,UAAU5R,OAAc,IAAIgkD,GAAG,KAAKviD,MAAS,IAAImQ,UAAU5R,OAAkC,IAAIgkD,GAAxBpyC,UAAU,GAAmBnQ,WAA5D,GAAoEg0C,GAAG1xC,UAAU4mD,eAAe,SAAS7pD,GAAG,OAAO,IAAIymD,GAAG9lD,MAAMqmD,KAAKhnD,EAAE,CAACgnD,KAAK,WAAW,GAAG,IAAIl2C,UAAU5R,OAAO,CAAC,IAAIc,EAAE8Q,UAAU,GAAG,OAAOnQ,KAAK0oD,2BAA2B5c,OAAOzsC,QAAQ20C,GAAG1xC,UAAUs6C,kBAAkB,WAAW,OAAO58C,KAAK22C,iBAAiB3C,GAAG1xC,UAAUizC,iBAAiB,WAAW,GAAG,IAAIplC,UAAU5R,OAAO,OAAOyB,KAAKu1C,iBAAiBv1C,KAAK+kD,+BAA+BjZ,OAAO,KAAK,GAAG,IAAI37B,UAAU5R,OAAO,CAAC,GAAG4R,UAAU,aAAalJ,MAAM,CAAC,IAAI5H,EAAE8Q,UAAU,GAAG,OAAOnQ,KAAKu1C,iBAAiB,OAAOl2C,EAAEW,KAAK+kD,+BAA+BjZ,OAAOzsC,GAAG,MAAM,GAAGquC,EAAEv9B,UAAU,GAAGshC,GAAuB,OAAO,IAAIiU,GAAxBv1C,UAAU,GAAmBnQ,QAASg0C,GAAG1xC,UAAUozC,mBAAmB,WAAW,OAAG,IAAIvlC,UAAU5R,OAAc,IAAIsnD,GAAG,KAAK7lD,MAAS,IAAImQ,UAAU5R,OAAkC,IAAIsnD,GAAxB11C,UAAU,GAAmBnQ,WAA5D,GAAoEg0C,GAAG1xC,UAAU+yC,iBAAiB,WAAW,GAAG,IAAIllC,UAAU5R,OAAO,OAAO,IAAIinD,GAAG,KAAKxlD,MAAM,GAAG,IAAImQ,UAAU5R,OAAO,CAAC,GAAG4R,UAAU,aAAalJ,MAA0B,OAAO,IAAIu+C,GAAxBr1C,UAAU,GAAmBnQ,MAAM,GAAGmQ,UAAU,aAAalJ,MAAM,CAAC,IAAI+I,EAAEG,UAAU,GAAG,OAAOnQ,KAAKq1C,iBAAiB,OAAOrlC,EAAEhQ,KAAK+kD,+BAA+BjZ,OAAO97B,GAAG,MAAM,GAAG09B,EAAEv9B,UAAU,GAAGshC,GAAG,CAAC,IAAIhzC,EAAE0R,UAAU,GAAG,GAAG,OAAO1R,EAAE,OAAOuB,KAAKq1C,iBAAiB,IAAIpuC,MAAM,GAAG6pC,KAAK,OAAO,IAAI,IAAIxxC,EAAE,IAAI2H,MAAMxI,EAAEg2B,QAAQqc,KAAK,MAAM9uB,EAAE,EAAEA,EAAEvjB,EAAEg2B,OAAOzS,IAAI,CAAC,IAAI4M,EAAE5uB,KAAK+kD,+BAA+BjZ,OAAO,EAAErtC,EAAEozC,gBAAgB0S,GAAGptC,KAAK1Y,EAAEujB,EAAE4M,EAAE,EAAE,GAAGtvB,EAAE0iB,GAAGhiB,KAAKm1C,YAAYvmB,GAAG,OAAO5uB,KAAKq1C,iBAAiB/1C,MAAM00C,GAAG1xC,UAAUqpC,YAAY,WAAW,MAAM,CAAC37B,IAAIgkC,GAAG1xC,UAAUspC,SAAS,WAAW,OAAOoI,IAAIA,GAAGmV,oBAAoB,SAAS9pD,GAAG,IAAI2Q,EAAE,IAAI/I,MAAM5H,EAAEo1B,QAAQqc,KAAK,MAAM,OAAOzxC,EAAEg/C,QAAQruC,IAAIgkC,GAAG8U,gBAAgB,SAASzpD,GAAG,GAAG,OAAOA,EAAE,OAAO,KAAK,IAAI2Q,EAAE,IAAI/I,MAAM5H,EAAEo1B,QAAQqc,KAAK,MAAM,OAAOzxC,EAAEg/C,QAAQruC,IAAIgkC,GAAG2U,oCAAoC,WAAW,OAAO1B,GAAGr1B,YAAYoiB,GAAGoV,uBAAuB,SAAS/pD,GAAG,IAAI2Q,EAAE,IAAI/I,MAAM5H,EAAEo1B,QAAQqc,KAAK,MAAM,OAAOzxC,EAAEg/C,QAAQruC,IAAIgkC,GAAGgV,kBAAkB,SAAS3pD,GAAG,IAAI2Q,EAAE,IAAI/I,MAAM5H,EAAEo1B,QAAQqc,KAAK,MAAM,OAAOzxC,EAAEg/C,QAAQruC,IAAIgkC,GAAGqV,kBAAkB,SAAShqD,GAAG,IAAI2Q,EAAE,IAAI/I,MAAM5H,EAAEo1B,QAAQqc,KAAK,MAAM,OAAOzxC,EAAEg/C,QAAQruC,IAAIgkC,GAAGsV,kBAAkB,SAASjqD,GAAG,IAAI2Q,EAAE,IAAI/I,MAAM5H,EAAEo1B,QAAQqc,KAAK,MAAM,OAAOzxC,EAAEg/C,QAAQruC,IAAIgkC,GAAGiV,aAAa,SAAS5pD,GAAG,IAAI2Q,EAAE,IAAI/I,MAAM5H,EAAEo1B,QAAQqc,KAAK,MAAM,OAAOzxC,EAAEg/C,QAAQruC,IAAIgkC,GAAG+U,eAAe,SAAS1pD,GAAG,IAAI2Q,EAAE,IAAI/I,MAAM5H,EAAEo1B,QAAQqc,KAAK,MAAM,OAAOzxC,EAAEg/C,QAAQruC,IAAIgkC,GAAGuV,6BAA6B,SAASlqD,EAAE2Q,GAAG,OAAOA,EAAE4sC,oBAAoBjE,YAAYt5C,GAAG2Q,EAAEyrC,aAAatG,YAAY91C,IAAIupD,GAAGvc,iBAAiBzkB,IAAI,WAAW,OAAO,oBAAoBlf,OAAOyP,iBAAiB67B,GAAG4U,IAAI,IAAI5wB,GAAG,CAAC,QAAQ,aAAa,aAAa,kBAAkB,UAAU,gBAAgBwxB,GAAG,SAASnqD,GAAGW,KAAK+zC,gBAAgB10C,GAAG,IAAI20C,IAAIwV,GAAGlnD,UAAU2xC,KAAK,SAAS50C,GAAG,IAAI2Q,EAAEvR,GAAGuR,EAAE,iBAAiB3Q,EAAEoqB,KAAKglB,MAAMpvC,GAAGA,GAAGsH,KAAK,IAAI8iD,GAAGhrD,GAAG,MAAM,IAAIuI,MAAM,yBAAyBgJ,EAAErJ,MAAM,OAAO,IAAIqxB,GAAGt3B,QAAQjC,GAAGgrD,GAAGhrD,GAAGyF,MAAMlE,KAAK,CAACgQ,EAAEjJ,cAAc,uBAAuBtI,EAAEgrD,GAAGhrD,GAAGyF,MAAMlE,KAAK,CAACgQ,EAAEzF,aAAak/C,GAAGhrD,GAAGyF,MAAMlE,KAAK,CAACgQ,KAAKw5C,GAAGlnD,UAAU8xC,MAAM,SAAS/0C,GAAG,IAAI2Q,EAAE3Q,EAAEi1C,kBAAkB,IAAIoV,GAAG15C,GAAG,MAAM,IAAIhJ,MAAM,6BAA6B,OAAO0iD,GAAG15C,GAAG9L,MAAMlE,KAAK,CAACX,KAAK,IAAIoqD,GAAG,CAACE,QAAQ,SAAStqD,GAAG,IAAI2Q,EAAE,GAAG,IAAI,IAAIvR,KAAKY,EAAE2Q,EAAEvR,GAAGY,EAAEZ,GAAG,GAAGY,EAAEwH,SAAS,CAAC,IAAIvH,EAAED,EAAEwH,SAASF,KAAK,IAAI8iD,GAAGnqD,GAAG,MAAM,IAAI0H,MAAM,yBAAyB3H,EAAEsH,MAAMqJ,EAAEnJ,SAAS7G,KAAKi0C,KAAK50C,EAAEwH,UAAU,OAAOxH,EAAE7B,OAAOwS,EAAExS,KAAKisD,GAAGjsD,KAAK0G,MAAMlE,KAAK,CAACX,EAAE7B,QAAQwS,GAAG45C,kBAAkB,SAASvqD,GAAG,IAAI2Q,EAAE,GAAG,GAAG3Q,EAAEqI,SAAS,CAACsI,EAAEtI,SAAS,GAAG,IAAI,IAAIjJ,EAAE,EAAEA,EAAEY,EAAEqI,SAASnJ,SAASE,EAAEuR,EAAEtI,SAASrF,KAAKrC,KAAKi0C,KAAK50C,EAAEqI,SAASjJ,KAAK,OAAOY,EAAE7B,OAAOwS,EAAExS,KAAKwC,KAAKyuC,MAAMjxC,KAAK0G,MAAMlE,KAAK,CAACX,EAAE7B,QAAQwS,GAAGjJ,YAAY,SAAS1H,GAAG,IAAI,IAAI2Q,EAAE,GAAGvR,EAAE,EAAEA,EAAEY,EAAEd,SAASE,EAAE,CAAC,IAAIa,EAAED,EAAEZ,GAAGuR,EAAE3N,KAAK,IAAIslC,EAAEroC,EAAE,GAAGA,EAAE,KAAK,OAAO0Q,GAAGxS,KAAK,SAAS6B,GAAG,OAAOW,KAAK+zC,gBAAgBwB,iBAAiB,CAAC,IAAI5N,EAAEtoC,EAAE,GAAGA,EAAE,IAAI,IAAIsoC,EAAEtoC,EAAE,GAAGA,EAAE,IAAI,IAAIsoC,EAAEtoC,EAAE,GAAGA,EAAE,IAAI,IAAIsoC,EAAEtoC,EAAE,GAAGA,EAAE,IAAI,IAAIsoC,EAAEtoC,EAAE,GAAGA,EAAE,OAAOwqD,MAAM,SAASxqD,GAAG,IAAI2Q,EAAE,IAAI23B,EAAEtoC,EAAE,GAAGA,EAAE,IAAI,OAAOW,KAAK+zC,gBAAgBoB,YAAYnlC,IAAI85C,WAAW,SAASzqD,GAAG,IAAI,IAAI2Q,EAAE,GAAGvR,EAAE,EAAEA,EAAEY,EAAEd,SAASE,EAAEuR,EAAE3N,KAAKonD,GAAGI,MAAM3lD,MAAMlE,KAAK,CAACX,EAAEZ,MAAM,OAAOuB,KAAK+zC,gBAAgBsB,iBAAiBrlC,IAAI+5C,WAAW,SAAS1qD,GAAG,IAAI2Q,EAAEy5C,GAAG1iD,YAAY7C,MAAMlE,KAAK,CAACX,IAAI,OAAOW,KAAK+zC,gBAAgBuB,iBAAiBtlC,IAAIg6C,gBAAgB,SAAS3qD,GAAG,IAAI,IAAI2Q,EAAE,GAAGvR,EAAE,EAAEA,EAAEY,EAAEd,SAASE,EAAEuR,EAAE3N,KAAKonD,GAAGM,WAAW7lD,MAAMlE,KAAK,CAACX,EAAEZ,MAAM,OAAOuB,KAAK+zC,gBAAgByB,sBAAsBxlC,IAAIi6C,QAAQ,SAAS5qD,GAAG,IAAI,IAAI2Q,EAAEy5C,GAAG1iD,YAAY7C,MAAMlE,KAAK,CAACX,EAAE,KAAKZ,EAAEuB,KAAK+zC,gBAAgBwB,iBAAiBvlC,GAAG1Q,EAAE,GAAG0iB,EAAE,EAAEA,EAAE3iB,EAAEd,SAASyjB,EAAE,CAAC,IAAI4M,EAAEvvB,EAAE2iB,GAAGljB,EAAE2qD,GAAG1iD,YAAY7C,MAAMlE,KAAK,CAAC4uB,IAAIlvB,EAAEM,KAAK+zC,gBAAgBwB,iBAAiBz2C,GAAGQ,EAAE+C,KAAK3C,GAAG,OAAOM,KAAK+zC,gBAAgB0B,cAAch3C,EAAEa,IAAI4qD,aAAa,SAAS7qD,GAAG,IAAI,IAAI2Q,EAAE,GAAGvR,EAAE,EAAEA,EAAEY,EAAEd,SAASE,EAAE,CAAC,IAAIa,EAAED,EAAEZ,GAAGuR,EAAE3N,KAAKonD,GAAGQ,QAAQ/lD,MAAMlE,KAAK,CAACV,KAAK,OAAOU,KAAK+zC,gBAAgB2B,mBAAmB1lC,IAAIm6C,mBAAmB,SAAS9qD,GAAG,IAAI,IAAI2Q,EAAE,GAAGvR,EAAE,EAAEA,EAAEY,EAAEd,SAASE,EAAE,CAAC,IAAIa,EAAED,EAAEZ,GAAGuR,EAAE3N,KAAKrC,KAAKi0C,KAAK30C,IAAI,OAAOU,KAAK+zC,gBAAgB4B,yBAAyB3lC,KAAK05C,GAAG,CAACnV,WAAW,SAASl1C,GAAG,MAAM,CAACA,EAAE8U,EAAE9U,EAAE+U,IAAIy1C,MAAM,SAASxqD,GAAG,MAAM,CAACsH,KAAK,QAAQI,YAAY2iD,GAAGnV,WAAWrwC,MAAMlE,KAAK,CAACX,EAAEsyC,oBAAoBmY,WAAW,SAASzqD,GAAG,IAAI,IAAI2Q,EAAE,GAAGvR,EAAE,EAAEA,EAAEY,EAAEq1C,YAAYn2C,SAASE,EAAE,CAAC,IAAIa,EAAED,EAAEq1C,YAAYj2C,GAAGujB,EAAE0nC,GAAGG,MAAM3lD,MAAMlE,KAAK,CAACV,IAAI0Q,EAAE3N,KAAK2f,EAAEjb,aAAa,MAAM,CAACJ,KAAK,aAAaI,YAAYiJ,IAAI+5C,WAAW,SAAS1qD,GAAG,IAAI,IAAI2Q,EAAE,GAAGvR,EAAEY,EAAEmjD,iBAAiBljD,EAAE,EAAEA,EAAEb,EAAEF,SAASe,EAAE,CAAC,IAAI0iB,EAAEvjB,EAAEa,GAAG0Q,EAAE3N,KAAKqnD,GAAGnV,WAAWrwC,MAAMlE,KAAK,CAACgiB,KAAK,MAAM,CAACrb,KAAK,aAAaI,YAAYiJ,IAAIg6C,gBAAgB,SAAS3qD,GAAG,IAAI,IAAI2Q,EAAE,GAAGvR,EAAE,EAAEA,EAAEY,EAAEq1C,YAAYn2C,SAASE,EAAE,CAAC,IAAIa,EAAED,EAAEq1C,YAAYj2C,GAAGujB,EAAE0nC,GAAGK,WAAW7lD,MAAMlE,KAAK,CAACV,IAAI0Q,EAAE3N,KAAK2f,EAAEjb,aAAa,MAAM,CAACJ,KAAK,kBAAkBI,YAAYiJ,IAAIi6C,QAAQ,SAAS5qD,GAAG,IAAI2Q,EAAE,GAAGvR,EAAEirD,GAAGK,WAAW7lD,MAAMlE,KAAK,CAACX,EAAE01C,SAAS/kC,EAAE3N,KAAK5D,EAAEsI,aAAa,IAAI,IAAIzH,EAAE,EAAEA,EAAED,EAAE21C,OAAOz2C,SAASe,EAAE,CAAC,IAAI0iB,EAAE3iB,EAAE21C,OAAO11C,GAAGsvB,EAAE86B,GAAGK,WAAW7lD,MAAMlE,KAAK,CAACgiB,IAAIhS,EAAE3N,KAAKusB,EAAE7nB,aAAa,MAAM,CAACJ,KAAK,UAAUI,YAAYiJ,IAAIk6C,aAAa,SAAS7qD,GAAG,IAAI,IAAI2Q,EAAE,GAAGvR,EAAE,EAAEA,EAAEY,EAAEq1C,YAAYn2C,SAASE,EAAE,CAAC,IAAIa,EAAED,EAAEq1C,YAAYj2C,GAAGujB,EAAE0nC,GAAGO,QAAQ/lD,MAAMlE,KAAK,CAACV,IAAI0Q,EAAE3N,KAAK2f,EAAEjb,aAAa,MAAM,CAACJ,KAAK,eAAeI,YAAYiJ,IAAIm6C,mBAAmB,SAAS9qD,GAAG,IAAI,IAAI2Q,EAAE,GAAGvR,EAAE,EAAEA,EAAEY,EAAEq1C,YAAYn2C,SAASE,EAAE,CAAC,IAAIa,EAAED,EAAEq1C,YAAYj2C,GAAGujB,EAAE1iB,EAAEg1C,kBAAkBtkC,EAAE3N,KAAKqnD,GAAG1nC,GAAG9d,MAAMlE,KAAK,CAACV,KAAK,MAAM,CAACqH,KAAK,qBAAqB4D,WAAWyF,KAAKo6C,GAAG,SAAS/qD,GAAGW,KAAK+zC,gBAAgB10C,GAAG,IAAI20C,GAAGh0C,KAAKqqD,eAAerqD,KAAK+zC,gBAAgB6I,oBAAoB58C,KAAK41C,OAAO,IAAI4T,GAAGxpD,KAAK+zC,kBAAkBqW,GAAG9nD,UAAU2xC,KAAK,SAAS50C,GAAG,IAAI2Q,EAAEhQ,KAAK41C,OAAO3B,KAAK50C,GAAG,OAAOW,KAAKqqD,eAAejC,YAAYZ,GAAGK,OAAO7nD,KAAKsqD,gBAAgBt6C,GAAGA,GAAGo6C,GAAG9nD,UAAUgoD,gBAAgB,SAASjrD,GAAG,IAAI2Q,EAAEvR,EAAE,GAAGY,EAAEk1C,WAAWv0C,KAAKqqD,eAAe1R,YAAYt5C,EAAEk1C,iBAAiB,GAAGl1C,EAAE4K,OAAO,IAAI+F,EAAE,EAAEvR,EAAEY,EAAE4K,OAAO1L,OAAOyR,EAAEvR,EAAEuR,IAAIhQ,KAAKqqD,eAAe1R,YAAYt5C,EAAE4K,OAAO+F,SAAS,GAAG3Q,EAAEkL,WAAW,IAAIyF,EAAE,EAAEvR,EAAEY,EAAEkL,WAAWhM,OAAOyR,EAAEvR,EAAEuR,IAAIhQ,KAAKsqD,gBAAgBjrD,EAAEkL,WAAWyF,KAAK,IAAIu6C,GAAG,WAAWvqD,KAAK41C,OAAO,IAAI4T,GAAGxpD,KAAK+zC,kBAAkBwW,GAAGjoD,UAAU8xC,MAAM,SAAS/0C,GAAG,OAAOW,KAAK41C,OAAOxB,MAAM/0C,IAAI,IAAImrD,GAAG,aAAaC,GAAG,CAACC,GAAG,CAACr6C,cAAa,GAAI0pC,KAAK,CAAC1pC,cAAa,GAAIwpC,MAAM,CAACxpC,cAAa,IAAKm6C,GAAGloD,UAAUqpC,YAAY,WAAW,MAAM,IAAI6e,GAAGloD,UAAUspC,SAAS,WAAW,OAAO4e,IAAIA,GAAGG,SAAS,SAAStrD,GAAG,OAAOA,IAAImrD,GAAGzQ,KAAKyQ,GAAG3Q,MAAMx6C,IAAImrD,GAAG3Q,MAAM2Q,GAAGzQ,KAAK16C,GAAGorD,GAAGC,GAAG9iC,IAAI,WAAW,OAAO,GAAG6iC,GAAG1Q,KAAKnyB,IAAI,WAAW,OAAO,GAAG6iC,GAAG5Q,MAAMjyB,IAAI,WAAW,OAAO,GAAGlf,OAAOyP,iBAAiBqyC,GAAGC,KAAK73C,EAAEtQ,UAAU,IAAI0E,OAAOqI,KAAK,uBAAuB+E,EAAE9R,UAAU,IAAIi8C,IAAInrB,IAAI,SAAS/zB,GAAG,OAAOW,KAAKsrC,OAAOjpC,KAAKhD,IAAG,GAAI+U,EAAE9R,UAAUslB,IAAI,SAASvoB,GAAG,GAAGA,EAAE,GAAGA,GAAGW,KAAKy0B,OAAO,MAAM,IAAIztB,MAAM,OAAOhH,KAAKsrC,OAAOjsC,IAAI+U,EAAE9R,UAAUD,KAAK,SAAShD,GAAG,OAAOW,KAAKsrC,OAAOjpC,KAAKhD,GAAGA,GAAG+U,EAAE9R,UAAUF,IAAI,SAAS/C,GAAG,GAAG,IAAIW,KAAKsrC,OAAO/sC,OAAO,MAAM,IAAIqU,EAAE,OAAO5S,KAAKsrC,OAAOlpC,OAAOgS,EAAE9R,UAAU4Q,KAAK,WAAW,GAAG,IAAIlT,KAAKsrC,OAAO/sC,OAAO,MAAM,IAAIqU,EAAE,OAAO5S,KAAKsrC,OAAOtrC,KAAKsrC,OAAO/sC,OAAO,IAAI6V,EAAE9R,UAAUsoD,MAAM,WAAW,OAAO,IAAI5qD,KAAKsrC,OAAO/sC,QAAQ6V,EAAE9R,UAAU0yB,QAAQ,WAAW,OAAOh1B,KAAK4qD,SAASx2C,EAAE9R,UAAUI,OAAO,SAASrD,GAAG,OAAOW,KAAKsrC,OAAO5qC,QAAQrB,IAAI+U,EAAE9R,UAAUmyB,KAAK,WAAW,OAAOz0B,KAAKsrC,OAAO/sC,QAAQ6V,EAAE9R,UAAU+7C,QAAQ,WAAW,IAAI,IAAIh/C,EAAE,GAAG2Q,EAAE,EAAEvR,EAAEuB,KAAKsrC,OAAO/sC,OAAOyR,EAAEvR,EAAEuR,IAAI3Q,EAAEgD,KAAKrC,KAAKsrC,OAAOt7B,IAAI,OAAO3Q,GAAG,IAAIwrD,GAAG,WAAW7qD,KAAK8qD,WAAW,EAAE9qD,KAAK+qD,UAAU,KAAK/qD,KAAKgrD,OAAO,KAAKhrD,KAAKirD,YAAY,MAAMJ,GAAGvoD,UAAUqvC,cAAc,WAAW,OAAO3xC,KAAK+qD,WAAWF,GAAGvoD,UAAU4oD,iBAAiB,SAAS7rD,EAAE2Q,GAAG,IAAIvR,EAAEuB,KAAKmrD,0BAA0B9rD,EAAE2Q,GAAG,OAAOvR,EAAE,IAAIA,EAAEuB,KAAKmrD,0BAA0B9rD,EAAE2Q,EAAE,IAAIvR,EAAE,IAAIuB,KAAK+qD,UAAU,KAAK/qD,KAAKorD,4BAA4B/rD,IAAIZ,GAAGosD,GAAGvoD,UAAU+oD,0BAA0B,WAAW,IAAIhsD,EAAEW,KAAKgrD,OAAOM,UAAU9I,iBAAiBxM,GAAGE,OAAOl2C,KAAK8qD,UAAU,GAAG9qD,KAAK8qD,UAAUzrD,EAAEd,OAAO,0DAA0D,IAAIyR,EAAE3Q,EAAEW,KAAK8qD,UAAU,GAAGrsD,EAAEY,EAAEW,KAAK8qD,UAAU,GAAGxrD,EAAE80B,GAAGimB,mBAAmBr6C,KAAK+qD,UAAUtsD,EAAEuR,GAAGgS,GAAE,GAAGhS,EAAEoE,EAAEpU,KAAK+qD,UAAU32C,GAAG3V,EAAE2V,EAAEpU,KAAK+qD,UAAU32C,GAAG9U,IAAI80B,GAAG0lB,kBAAsB9pC,EAAEoE,EAAEpU,KAAK+qD,UAAU32C,GAAG3V,EAAE2V,EAAEpU,KAAK+qD,UAAU32C,GAAG9U,IAAI80B,GAAGwlB,aAAxD53B,GAAE,GAAwEA,IAAIhiB,KAAK8qD,UAAU9qD,KAAK8qD,UAAU,IAAID,GAAGvoD,UAAU6oD,0BAA0B,SAAS9rD,EAAE2Q,GAAG,IAAIvR,EAAEY,EAAEisD,UAAU9I,iBAAiB,GAAGxyC,EAAE,GAAGA,EAAE,GAAGvR,EAAEF,OAAO,OAAO,EAAE,GAAGE,EAAEuR,GAAGoE,IAAI3V,EAAEuR,EAAE,GAAGoE,EAAE,OAAO,EAAE,IAAI9U,EAAEkrD,GAAGzQ,KAAK,OAAOt7C,EAAEuR,GAAGoE,EAAE3V,EAAEuR,EAAE,GAAGoE,IAAI9U,EAAEkrD,GAAG3Q,OAAOv6C,GAAGurD,GAAGvoD,UAAUgpD,QAAQ,WAAW,OAAOtrD,KAAKirD,aAAaJ,GAAGvoD,UAAU8oD,4BAA4B,SAAS/rD,GAAG,IAAI,IAAI2Q,EAAE3Q,EAAEisD,UAAU9I,iBAAiB/jD,EAAE,EAAEA,EAAEuR,EAAEzR,OAAO,EAAEE,KAAK,OAAOuB,KAAK+qD,WAAW/6C,EAAEvR,GAAG0V,EAAEnU,KAAK+qD,UAAU52C,KAAKnU,KAAKgrD,OAAO3rD,EAAEW,KAAK8qD,UAAUrsD,EAAEuB,KAAK+qD,UAAU/6C,EAAEvR,KAAKosD,GAAGvoD,UAAUipD,wBAAwB,WAAW,IAAIlsD,EAAEW,KAAKgrD,OAAOQ,UAAUC,WAAWzrD,KAAKgrD,OAAO3rD,EAAEqsD,mBAAmB1rD,KAAKgrD,OAAOW,cAAc3rD,KAAKgrD,OAAOhrD,KAAKgrD,OAAOY,SAAS5rD,KAAK8qD,UAAU9qD,KAAKgrD,OAAOM,UAAU9I,iBAAiBjkD,OAAO,IAAIssD,GAAGvoD,UAAUupD,SAAS,SAASxsD,GAAG,IAAI,IAAI2Q,EAAE3Q,EAAEkpB,WAAWvY,EAAEgtC,WAAW,CAAC,IAAIv+C,EAAEuR,EAAEoC,OAAO3T,EAAEktD,aAAa3rD,KAAKorD,4BAA4B3sD,GAAGu3C,GAAGE,OAAO,IAAIl2C,KAAK8qD,WAAW9qD,KAAK+qD,UAAUrsC,OAAO1e,KAAKgrD,OAAOrZ,iBAAiB,yCAAyC,IAAI3xC,KAAK8qD,UAAU9qD,KAAKurD,0BAA0BvrD,KAAKqrD,4BAA4BrrD,KAAKirD,YAAYjrD,KAAKgrD,OAAOhrD,KAAKkrD,iBAAiBlrD,KAAKgrD,OAAOhrD,KAAK8qD,aAAaN,GAAGzQ,OAAO/5C,KAAKirD,YAAYjrD,KAAKgrD,OAAOY,WAAWf,GAAGvoD,UAAUqpC,YAAY,WAAW,MAAM,IAAIkf,GAAGvoD,UAAUspC,SAAS,WAAW,OAAOif,IAAI,IAAIiB,GAAG,SAASzsD,GAAG,SAAS2Q,EAAEvR,EAAEa,GAAGD,EAAEuQ,KAAK5P,KAAKgQ,EAAE+7C,aAAattD,EAAEa,IAAIU,KAAK23B,GAAGr4B,EAAE,IAAIqoC,EAAEroC,GAAG,KAAKU,KAAKqP,KAAK,oBAAoB,OAAOhQ,IAAI2Q,EAAEgY,UAAU3oB,GAAG2Q,EAAE1N,UAAUoG,OAAOojC,OAAOzsC,GAAGA,EAAEiD,WAAW0N,EAAE1N,UAAUkJ,YAAYwE,EAAEA,EAAE1N,UAAUqvC,cAAc,WAAW,OAAO3xC,KAAK23B,IAAI3nB,EAAE1N,UAAUqpC,YAAY,WAAW,MAAM,IAAI37B,EAAE1N,UAAUspC,SAAS,WAAW,OAAO57B,GAAGA,EAAE+7C,aAAa,SAAS1sD,EAAE2Q,GAAG,OAAOA,EAAE3Q,EAAEA,EAAE,MAAM2Q,EAAE,MAAMA,EAArZ,CAAwZ8lC,GAAGkW,GAAG,WAAWhsD,KAAKsrC,OAAO,IAAI0gB,GAAG1pD,UAAU2pD,QAAQ,SAAS5sD,GAAGW,KAAKsrC,OAAOjpC,KAAKhD,IAAI2sD,GAAG1pD,UAAU4pD,YAAY,WAAW,OAAOlsD,KAAKsrC,OAAOn5B,SAAS65C,GAAG1pD,UAAU0yB,QAAQ,WAAW,OAAO,IAAIh1B,KAAKsrC,OAAO/sC,QAAQ,IAAI4tD,GAAG,WAAWnsD,KAAKosD,QAAQ,KAAKpsD,KAAKqsD,aAAa,IAAI7N,GAAGx+C,KAAKssD,OAAO,IAAI9N,GAAGx+C,KAAKusD,gBAAgB,KAAKvsD,KAAKwsD,KAAK,KAAKxsD,KAAKosD,QAAQ,IAAIvB,IAAIsB,GAAG7pD,UAAUmqD,kBAAkB,WAAW,IAAI,IAAIptD,EAAEW,KAAKqsD,aAAa9jC,WAAWlpB,EAAE29C,WAAY39C,EAAE+S,OAAOs6C,YAAW,IAAMP,GAAG7pD,UAAUqqD,uBAAuB,WAAW,OAAO3sD,KAAKusD,iBAAiBJ,GAAG7pD,UAAUsqD,iBAAiB,SAASvtD,GAAG,IAAI,IAAI2Q,EAAE,KAAKvR,EAAEY,EAAEosD,WAAWljC,WAAW9pB,EAAEu+C,WAAW,CAAC,IAAI19C,EAAEb,EAAE2T,OAAO,GAAG9S,EAAEutD,aAAavtD,EAAEssD,SAASiB,YAAY,CAAC78C,EAAE1Q,EAAE,OAAO,GAAG,OAAO0Q,EAAE,MAAM,IAAI87C,GAAG,4CAA4CzsD,EAAEsyC,iBAAiBtyC,EAAEosD,WAAWqB,cAAc98C,GAAG,IAAI,IAAIgS,EAAE3iB,EAAEosD,WAAWljC,WAAWvG,EAAEg7B,WAAW,CAAC,IAAIpuB,EAAE5M,EAAE5P,OAAOwc,EAAE89B,YAAW,GAAI1sD,KAAK+sD,cAAcn+B,KAAKu9B,GAAG7pD,UAAU0qD,aAAa,SAAS3tD,GAAGW,KAAKysD,oBAAoB,IAAIz8C,EAAEhQ,KAAKosD,QAAQd,UAAUt7C,EAAEi9C,cAAczC,GAAG3Q,MAAMx6C,GAAGW,KAAK+sD,cAAc/8C,GAAGhQ,KAAK8sD,cAAc98C,IAAIm8C,GAAG7pD,UAAUwpC,OAAO,SAASzsC,GAAGW,KAAKktD,aAAa7tD,GAAGW,KAAKosD,QAAQP,SAAS7rD,KAAKqsD,cAAcrsD,KAAKusD,gBAAgBvsD,KAAKosD,QAAQza,iBAAiBwa,GAAG7pD,UAAU6qD,gBAAgB,WAAW,IAAI,IAAI9tD,EAAEW,KAAKqsD,aAAa9jC,WAAWlpB,EAAE29C,WAAW,CAAC,IAAIhtC,EAAE3Q,EAAE+S,OAAOpC,EAAEo9C,SAAS5C,GAAG3Q,QAAQ,GAAG7pC,EAAEo9C,SAAS5C,GAAGzQ,OAAO,IAAI/pC,EAAEq9C,sBAAsBr9C,EAAEs9C,aAAY,KAAMnB,GAAG7pD,UAAUwqD,cAAc,SAASztD,GAAG,IAAI2Q,EAAE,IAAIwwC,GAAG/hD,EAAE,IAAIutD,GAAG1sD,EAAED,EAAEmsD,UAAU,IAAI/sD,EAAEwtD,QAAQ3sD,GAAG0Q,EAAEojB,IAAI9zB,GAAGD,EAAEqtD,YAAW,IAAKjuD,EAAEu2B,WAAW,CAAC,IAAIhT,EAAEvjB,EAAEytD,cAAcl8C,EAAEojB,IAAIpR,GAAGhiB,KAAK4sD,iBAAiB5qC,GAAG,IAAI,IAAI4M,EAAE5M,EAAEypC,WAAWljC,WAAWqG,EAAEouB,WAAW,CAAC,IAAIl+C,EAAE8vB,EAAExc,OAAOw5C,SAAS,IAAI9sD,EAAE+tD,YAAY,CAAC,IAAIntD,EAAEZ,EAAE0sD,UAAUx7C,EAAElO,SAASpC,KAAKjB,EAAEwtD,QAAQvsD,GAAGsQ,EAAEojB,IAAI1zB,QAAQysD,GAAG7pD,UAAUwqC,UAAU,SAASztC,GAAG,IAAI2Q,EAAE3Q,EAAE,OAAOW,KAAKusD,gBAAgBp4C,EAAEnE,EAAEu8C,gBAAgBp4C,GAAG,EAAEnU,KAAKusD,gBAAgBp4C,EAAEnE,EAAEu8C,gBAAgBp4C,EAAE,EAAE,GAAGg4C,GAAG7pD,UAAUg6C,YAAY,WAAW,GAAG,OAAOt8C,KAAKwsD,KAAK,CAAC,IAAI,IAAIntD,EAAE,IAAIE,EAAEyQ,EAAEhQ,KAAKqsD,aAAa9jC,WAAWvY,EAAEgtC,WAAW,IAAI,IAAIv+C,EAAEuR,EAAEoC,OAAOk5C,UAAU9I,iBAAiBljD,EAAE,EAAEA,EAAEb,EAAEF,OAAO,EAAEe,IAAID,EAAE4zC,gBAAgBx0C,EAAEa,IAAIU,KAAKwsD,KAAKntD,EAAE,OAAOW,KAAKwsD,MAAML,GAAG7pD,UAAU4qD,aAAa,SAAS7tD,GAAG,IAAI2Q,EAAE,IAAIoE,EAAE,IAAIpE,EAAEojB,IAAI/zB,IAAI2Q,EAAE46C,SAAS,CAAC,IAAInsD,EAAEuR,EAAE5N,MAAMpC,KAAKozB,IAAI30B,EAAEuR,KAAKm8C,GAAG7pD,UAAUyqD,cAAc,SAAS1tD,GAAG,IAAI2Q,EAAE3Q,EAAEusD,SAAS57C,EAAEu9C,SAAS/C,GAAGzQ,KAAK16C,EAAE+tD,SAAS5C,GAAG3Q,QAAQ7pC,EAAEu9C,SAAS/C,GAAG3Q,MAAMx6C,EAAE+tD,SAAS5C,GAAGzQ,QAAQoS,GAAG7pD,UAAU8wB,IAAI,SAAS/zB,EAAE2Q,GAAG3Q,EAAEqtD,YAAW,GAAI1sD,KAAKssD,OAAOl5B,IAAI/zB,GAAG,IAAI,IAAIZ,EAAEY,EAAEosD,WAAWljC,WAAW9pB,EAAEu+C,WAAW,CAAC,IAAI19C,EAAEb,EAAE2T,OAAOpS,KAAKqsD,aAAaj5B,IAAI9zB,GAAG,IAAI0iB,EAAE1iB,EAAEssD,SAASJ,UAAUxpC,EAAE6qC,aAAa78C,EAAE3N,KAAK2f,KAAKmqC,GAAG7pD,UAAUkrD,SAAS,WAAW,OAAOxtD,KAAKssD,QAAQH,GAAG7pD,UAAUmrD,iBAAiB,WAAW,OAAOztD,KAAKqsD,cAAcF,GAAG7pD,UAAUqpC,YAAY,WAAW,MAAM,CAAC/D,IAAIukB,GAAG7pD,UAAUspC,SAAS,WAAW,OAAOugB,IAAI,IAAIuB,GAAG,SAASruD,IAAI,GAAGW,KAAK2tD,SAAS,KAAK,IAAIx9C,UAAU5R,QAAQ,GAAG4R,UAAU,aAAalJ,MAAM,CAAC,IAAI+I,EAAEG,UAAU,GAAGnQ,KAAKma,KAAKnK,EAAEzR,aAAa,GAAG6c,OAAOqwB,UAAUt7B,UAAU,IAAI,CAAC,IAAI1R,EAAE0R,UAAU,GAAGnQ,KAAKma,KAAK,GAAGna,KAAK2tD,SAASnD,GAAGE,IAAIjsD,OAAO,GAAG0R,UAAU,aAAa9Q,EAAE,CAAC,IAAIC,EAAE6Q,UAAU,GAAG,GAAGnQ,KAAKma,KAAK7a,EAAEquD,SAASpvD,QAAQ,OAAOe,EAAE,IAAI,IAAI0iB,EAAE,EAAEA,EAAEhiB,KAAK2tD,SAASpvD,OAAOyjB,IAAIhiB,KAAK2tD,SAAS3rC,GAAG1iB,EAAEquD,SAAS3rC,SAAS,GAAG,IAAI7R,UAAU5R,OAAO,CAAC,IAAIqwB,EAAEze,UAAU,GAAGrR,EAAEqR,UAAU,GAAGzQ,EAAEyQ,UAAU,GAAGnQ,KAAKma,KAAK,GAAGna,KAAK2tD,SAASnD,GAAGE,IAAI97B,EAAE5uB,KAAK2tD,SAASnD,GAAGzQ,MAAMj7C,EAAEkB,KAAK2tD,SAASnD,GAAG3Q,OAAOn6C,IAAIguD,GAAGprD,UAAUsrD,gBAAgB,SAASvuD,GAAG,IAAI,IAAI2Q,EAAE,EAAEA,EAAEhQ,KAAK2tD,SAASpvD,OAAOyR,IAAIhQ,KAAK2tD,SAAS39C,GAAG3Q,GAAGquD,GAAGprD,UAAUqwC,OAAO,WAAW,IAAI,IAAItzC,EAAE,EAAEA,EAAEW,KAAK2tD,SAASpvD,OAAOc,IAAI,GAAGW,KAAK2tD,SAAStuD,KAAKioC,EAAEkG,KAAK,OAAM,EAAG,OAAM,GAAIkgB,GAAGprD,UAAUurD,sBAAsB,SAASxuD,GAAG,IAAI,IAAI2Q,EAAE,EAAEA,EAAEhQ,KAAK2tD,SAASpvD,OAAOyR,IAAIhQ,KAAK2tD,SAAS39C,KAAKs3B,EAAEkG,OAAOxtC,KAAK2tD,SAAS39C,GAAG3Q,IAAIquD,GAAGprD,UAAUwrD,OAAO,WAAW,OAAO,IAAI9tD,KAAK2tD,SAASpvD,QAAQmvD,GAAGprD,UAAUkwB,MAAM,SAASnzB,GAAG,GAAGA,EAAEsuD,SAASpvD,OAAOyB,KAAK2tD,SAASpvD,OAAO,CAAC,IAAIyR,EAAE,IAAI/I,MAAM,GAAG6pC,KAAK,MAAM9gC,EAAEw6C,GAAGE,IAAI1qD,KAAK2tD,SAASnD,GAAGE,IAAI16C,EAAEw6C,GAAGzQ,MAAMzS,EAAEkG,KAAKx9B,EAAEw6C,GAAG3Q,OAAOvS,EAAEkG,KAAKxtC,KAAK2tD,SAAS39C,EAAE,IAAI,IAAIvR,EAAE,EAAEA,EAAEuB,KAAK2tD,SAASpvD,OAAOE,IAAIuB,KAAK2tD,SAASlvD,KAAK6oC,EAAEkG,MAAM/uC,EAAEY,EAAEsuD,SAASpvD,SAASyB,KAAK2tD,SAASlvD,GAAGY,EAAEsuD,SAASlvD,KAAKivD,GAAGprD,UAAUyrD,aAAa,WAAW,OAAO/tD,KAAK2tD,UAAUD,GAAGprD,UAAU0rD,KAAK,WAAW,GAAGhuD,KAAK2tD,SAASpvD,QAAQ,EAAE,OAAO,KAAK,IAAIc,EAAEW,KAAK2tD,SAASnD,GAAGzQ,MAAM/5C,KAAK2tD,SAASnD,GAAGzQ,MAAM/5C,KAAK2tD,SAASnD,GAAG3Q,OAAO75C,KAAK2tD,SAASnD,GAAG3Q,OAAOx6C,GAAGquD,GAAGprD,UAAUkV,SAAS,WAAW,IAAInY,EAAE,IAAIkW,EAAE,OAAOvV,KAAK2tD,SAASpvD,OAAO,GAAGc,EAAE4uC,OAAO3G,EAAEmG,iBAAiBztC,KAAK2tD,SAASnD,GAAGzQ,QAAQ16C,EAAE4uC,OAAO3G,EAAEmG,iBAAiBztC,KAAK2tD,SAASnD,GAAGE,MAAM1qD,KAAK2tD,SAASpvD,OAAO,GAAGc,EAAE4uC,OAAO3G,EAAEmG,iBAAiBztC,KAAK2tD,SAASnD,GAAG3Q,SAASx6C,EAAEmY,YAAYk2C,GAAGprD,UAAU2rD,aAAa,SAAS5uD,EAAE2Q,EAAEvR,GAAGuB,KAAK2tD,SAASnD,GAAGE,IAAIrrD,EAAEW,KAAK2tD,SAASnD,GAAGzQ,MAAM/pC,EAAEhQ,KAAK2tD,SAASnD,GAAG3Q,OAAOp7C,GAAGivD,GAAGprD,UAAUslB,IAAI,SAASvoB,GAAG,OAAOA,EAAEW,KAAK2tD,SAASpvD,OAAOyB,KAAK2tD,SAAStuD,GAAGioC,EAAEkG,MAAMkgB,GAAGprD,UAAU4rD,OAAO,WAAW,OAAOluD,KAAK2tD,SAASpvD,OAAO,GAAGmvD,GAAGprD,UAAU6rD,UAAU,WAAW,IAAI,IAAI9uD,EAAE,EAAEA,EAAEW,KAAK2tD,SAASpvD,OAAOc,IAAI,GAAGW,KAAK2tD,SAAStuD,KAAKioC,EAAEkG,KAAK,OAAM,EAAG,OAAM,GAAIkgB,GAAGprD,UAAU8rD,YAAY,WAAW,GAAG,IAAIj+C,UAAU5R,OAAO,CAAC,IAAIc,EAAE8Q,UAAU,GAAGnQ,KAAKouD,YAAY5D,GAAGE,GAAGrrD,QAAQ,GAAG,IAAI8Q,UAAU5R,OAAO,CAAC,IAAIyR,EAAEG,UAAU,GAAG1R,EAAE0R,UAAU,GAAGnQ,KAAK2tD,SAAS39C,GAAGvR,IAAIivD,GAAGprD,UAAU6X,KAAK,SAAS9a,GAAGW,KAAK2tD,SAAS,IAAI1mD,MAAM5H,GAAGyxC,KAAK,MAAM9wC,KAAK4tD,gBAAgBtmB,EAAEkG,OAAOkgB,GAAGprD,UAAU+rD,cAAc,SAAShvD,EAAE2Q,GAAG,OAAOhQ,KAAK2tD,SAAS39C,KAAK3Q,EAAEsuD,SAAS39C,IAAI09C,GAAGprD,UAAUgsD,kBAAkB,SAASjvD,GAAG,IAAI,IAAI2Q,EAAE,EAAEA,EAAEhQ,KAAK2tD,SAASpvD,OAAOyR,IAAI,GAAGhQ,KAAK2tD,SAAS39C,KAAK3Q,EAAE,OAAM,EAAG,OAAM,GAAIquD,GAAGprD,UAAUqpC,YAAY,WAAW,MAAM,IAAI+hB,GAAGprD,UAAUspC,SAAS,WAAW,OAAO8hB,IAAI,IAAIa,GAAG,SAASlvD,IAAI,GAAGW,KAAKwuD,IAAI,IAAIvnD,MAAM,GAAG6pC,KAAK,MAAM,IAAI3gC,UAAU5R,QAAQ,GAAG6c,OAAOqwB,UAAUt7B,UAAU,IAAI,CAAC,IAAIH,EAAEG,UAAU,GAAGnQ,KAAKwuD,IAAI,GAAG,IAAId,GAAG19C,GAAGhQ,KAAKwuD,IAAI,GAAG,IAAId,GAAG19C,QAAQ,GAAGG,UAAU,aAAa9Q,EAAE,CAAC,IAAIZ,EAAE0R,UAAU,GAAGnQ,KAAKwuD,IAAI,GAAG,IAAId,GAAGjvD,EAAE+vD,IAAI,IAAIxuD,KAAKwuD,IAAI,GAAG,IAAId,GAAGjvD,EAAE+vD,IAAI,UAAU,GAAG,IAAIr+C,UAAU5R,OAAO,CAAC,IAAIe,EAAE6Q,UAAU,GAAG6R,EAAE7R,UAAU,GAAGnQ,KAAKwuD,IAAI,GAAG,IAAId,GAAGpmB,EAAEkG,MAAMxtC,KAAKwuD,IAAI,GAAG,IAAId,GAAGpmB,EAAEkG,MAAMxtC,KAAKwuD,IAAIlvD,GAAG8uD,YAAYpsC,QAAQ,GAAG,IAAI7R,UAAU5R,OAAO,CAAC,IAAIqwB,EAAEze,UAAU,GAAGrR,EAAEqR,UAAU,GAAGzQ,EAAEyQ,UAAU,GAAGnQ,KAAKwuD,IAAI,GAAG,IAAId,GAAG9+B,EAAE9vB,EAAEY,GAAGM,KAAKwuD,IAAI,GAAG,IAAId,GAAG9+B,EAAE9vB,EAAEY,QAAQ,GAAG,IAAIyQ,UAAU5R,OAAO,CAAC,IAAIkoC,EAAEt2B,UAAU,GAAGpE,EAAEoE,UAAU,GAAGwC,EAAExC,UAAU,GAAGnP,EAAEmP,UAAU,GAAGnQ,KAAKwuD,IAAI,GAAG,IAAId,GAAGpmB,EAAEkG,KAAKlG,EAAEkG,KAAKlG,EAAEkG,MAAMxtC,KAAKwuD,IAAI,GAAG,IAAId,GAAGpmB,EAAEkG,KAAKlG,EAAEkG,KAAKlG,EAAEkG,MAAMxtC,KAAKwuD,IAAI/nB,GAAGwnB,aAAaliD,EAAE4G,EAAE3R,KAAKutD,GAAGjsD,UAAUmsD,iBAAiB,WAAW,IAAIpvD,EAAE,EAAE,OAAOW,KAAKwuD,IAAI,GAAG7b,UAAUtzC,IAAIW,KAAKwuD,IAAI,GAAG7b,UAAUtzC,IAAIA,GAAGkvD,GAAGjsD,UAAUsrD,gBAAgB,SAASvuD,EAAE2Q,GAAGhQ,KAAKwuD,IAAInvD,GAAGuuD,gBAAgB59C,IAAIu+C,GAAGjsD,UAAUqwC,OAAO,SAAStzC,GAAG,OAAOW,KAAKwuD,IAAInvD,GAAGszC,UAAU4b,GAAGjsD,UAAUurD,sBAAsB,WAAW,GAAG,IAAI19C,UAAU5R,OAAO,CAAC,IAAIc,EAAE8Q,UAAU,GAAGnQ,KAAK6tD,sBAAsB,EAAExuD,GAAGW,KAAK6tD,sBAAsB,EAAExuD,QAAQ,GAAG,IAAI8Q,UAAU5R,OAAO,CAAC,IAAIyR,EAAEG,UAAU,GAAG1R,EAAE0R,UAAU,GAAGnQ,KAAKwuD,IAAIx+C,GAAG69C,sBAAsBpvD,KAAK8vD,GAAGjsD,UAAUwrD,OAAO,SAASzuD,GAAG,OAAOW,KAAKwuD,IAAInvD,GAAGyuD,UAAUS,GAAGjsD,UAAUkwB,MAAM,SAASnzB,GAAG,IAAI,IAAI2Q,EAAE,EAAEA,EAAE,EAAEA,IAAI,OAAOhQ,KAAKwuD,IAAIx+C,IAAI,OAAO3Q,EAAEmvD,IAAIx+C,GAAGhQ,KAAKwuD,IAAIx+C,GAAG,IAAI09C,GAAGruD,EAAEmvD,IAAIx+C,IAAIhQ,KAAKwuD,IAAIx+C,GAAGwiB,MAAMnzB,EAAEmvD,IAAIx+C,KAAKu+C,GAAGjsD,UAAU0rD,KAAK,WAAWhuD,KAAKwuD,IAAI,GAAGR,OAAOhuD,KAAKwuD,IAAI,GAAGR,QAAQO,GAAGjsD,UAAUk3C,YAAY,WAAW,GAAG,IAAIrpC,UAAU5R,OAAO,CAAC,IAAIc,EAAE8Q,UAAU,GAAG,OAAOnQ,KAAKwuD,IAAInvD,GAAGuoB,IAAI4iC,GAAGE,IAAI,GAAG,IAAIv6C,UAAU5R,OAAO,CAAC,IAAIyR,EAAEG,UAAU,GAAG1R,EAAE0R,UAAU,GAAG,OAAOnQ,KAAKwuD,IAAIx+C,GAAG4X,IAAInpB,KAAK8vD,GAAGjsD,UAAUkV,SAAS,WAAW,IAAInY,EAAE,IAAIkW,EAAE,OAAO,OAAOvV,KAAKwuD,IAAI,KAAKnvD,EAAE4uC,OAAO,MAAM5uC,EAAE4uC,OAAOjuC,KAAKwuD,IAAI,GAAGh3C,aAAa,OAAOxX,KAAKwuD,IAAI,KAAKnvD,EAAE4uC,OAAO,OAAO5uC,EAAE4uC,OAAOjuC,KAAKwuD,IAAI,GAAGh3C,aAAanY,EAAEmY,YAAY+2C,GAAGjsD,UAAU4rD,OAAO,WAAW,GAAG,IAAI/9C,UAAU5R,OAAO,OAAOyB,KAAKwuD,IAAI,GAAGN,UAAUluD,KAAKwuD,IAAI,GAAGN,SAAS,GAAG,IAAI/9C,UAAU5R,OAAO,CAAC,IAAIc,EAAE8Q,UAAU,GAAG,OAAOnQ,KAAKwuD,IAAInvD,GAAG6uD,WAAWK,GAAGjsD,UAAU6rD,UAAU,SAAS9uD,GAAG,OAAOW,KAAKwuD,IAAInvD,GAAG8uD,aAAaI,GAAGjsD,UAAU8rD,YAAY,WAAW,GAAG,IAAIj+C,UAAU5R,OAAO,CAAC,IAAIc,EAAE8Q,UAAU,GAAGH,EAAEG,UAAU,GAAGnQ,KAAKwuD,IAAInvD,GAAG+uD,YAAY5D,GAAGE,GAAG16C,QAAQ,GAAG,IAAIG,UAAU5R,OAAO,CAAC,IAAIE,EAAE0R,UAAU,GAAG7Q,EAAE6Q,UAAU,GAAG6R,EAAE7R,UAAU,GAAGnQ,KAAKwuD,IAAI/vD,GAAG2vD,YAAY9uD,EAAE0iB,KAAKusC,GAAGjsD,UAAU+rD,cAAc,SAAShvD,EAAE2Q,GAAG,OAAOhQ,KAAKwuD,IAAI,GAAGH,cAAchvD,EAAEmvD,IAAI,GAAGx+C,IAAIhQ,KAAKwuD,IAAI,GAAGH,cAAchvD,EAAEmvD,IAAI,GAAGx+C,IAAIu+C,GAAGjsD,UAAUgsD,kBAAkB,SAASjvD,EAAE2Q,GAAG,OAAOhQ,KAAKwuD,IAAInvD,GAAGivD,kBAAkBt+C,IAAIu+C,GAAGjsD,UAAUosD,OAAO,SAASrvD,GAAGW,KAAKwuD,IAAInvD,GAAG6uD,WAAWluD,KAAKwuD,IAAInvD,GAAG,IAAIquD,GAAG1tD,KAAKwuD,IAAInvD,GAAGsuD,SAAS,MAAMY,GAAGjsD,UAAUqpC,YAAY,WAAW,MAAM,IAAI4iB,GAAGjsD,UAAUspC,SAAS,WAAW,OAAO2iB,IAAIA,GAAGI,YAAY,SAAStvD,GAAG,IAAI,IAAI2Q,EAAE,IAAIu+C,GAAGjnB,EAAEkG,MAAM/uC,EAAE,EAAEA,EAAE,EAAEA,IAAIuR,EAAEo+C,YAAY3vD,EAAEY,EAAEm6C,YAAY/6C,IAAI,OAAOuR,GAAG,IAAI4+C,GAAG,WAAW5uD,KAAK6uD,SAAS,KAAK7uD,KAAK8uD,gBAAgB,EAAE9uD,KAAK+uD,OAAO,IAAIvQ,GAAGx+C,KAAKgvD,KAAK,IAAIxQ,GAAGx+C,KAAKivD,OAAO,IAAIV,GAAGjnB,EAAEkG,MAAMxtC,KAAKw+B,MAAM,KAAKx+B,KAAKkvD,QAAQ,KAAKlvD,KAAK+0C,OAAO,KAAK/0C,KAAKg1C,OAAO,IAAIwJ,GAAGx+C,KAAKmvD,iBAAiB,KAAK,IAAI9vD,EAAE8Q,UAAU,GAAGH,EAAEG,UAAU,GAAGnQ,KAAKmvD,iBAAiBn/C,EAAEhQ,KAAKovD,cAAc/vD,GAAGW,KAAKqvD,eAAeT,GAAGtsD,UAAU+sD,YAAY,WAAW,GAAG,OAAOrvD,KAAKw+B,MAAM,OAAO,KAAK,IAAI,IAAIn/B,EAAE,IAAI4H,MAAMjH,KAAKgvD,KAAKv6B,QAAQqc,KAAK,MAAM9gC,EAAE,EAAEA,EAAEhQ,KAAKgvD,KAAKv6B,OAAOzkB,IAAI3Q,EAAE2Q,GAAGhQ,KAAKgvD,KAAKpnC,IAAI5X,GAAGhQ,KAAKw+B,MAAMx+B,KAAKmvD,iBAAiB5Z,iBAAiBl2C,GAAGW,KAAKkvD,QAAQ96B,GAAGgmB,MAAMp6C,KAAKw+B,MAAMgkB,mBAAmBoM,GAAGtsD,UAAUgtD,WAAW,WAAW,OAAO,IAAItvD,KAAKivD,OAAOR,oBAAoBG,GAAGtsD,UAAU8sD,cAAc,SAAS/vD,GAAGW,KAAK6uD,SAASxvD,EAAE,IAAI2Q,EAAE3Q,EAAEZ,GAAE,EAAG,EAAE,CAAC,GAAG,OAAOuR,EAAE,MAAM,IAAI87C,GAAG,2BAA2B,GAAG97C,EAAEu/C,gBAAgBvvD,KAAK,MAAM,IAAI8rD,GAAG,uDAAuD97C,EAAE2hC,iBAAiB3xC,KAAK+uD,OAAO37B,IAAIpjB,GAAG,IAAI1Q,EAAE0Q,EAAEw/C,WAAWxZ,GAAGE,OAAO52C,EAAE4uD,UAAUluD,KAAKyvD,WAAWnwD,GAAGU,KAAK0vD,UAAU1/C,EAAEs7C,UAAUt7C,EAAE27C,YAAYltD,GAAGA,GAAE,EAAGuB,KAAK2vD,YAAY3/C,EAAEhQ,MAAMgQ,EAAEhQ,KAAK4vD,QAAQ5/C,SAASA,IAAIhQ,KAAK6uD,WAAWD,GAAGtsD,UAAUutD,cAAc,WAAW,OAAO7vD,KAAKw+B,OAAOowB,GAAGtsD,UAAUqvC,cAAc,SAAStyC,GAAG,OAAOW,KAAKgvD,KAAKpnC,IAAIvoB,IAAIuvD,GAAGtsD,UAAUwtD,qBAAqB,WAAW9vD,KAAK8uD,eAAe,EAAE,IAAIzvD,EAAEW,KAAK6uD,SAAS,EAAE,CAAC,IAAI7+C,EAAE3Q,EAAEmsD,UAAUC,WAAWsE,kBAAkB/vD,MAAMgQ,EAAEhQ,KAAK8uD,iBAAiB9uD,KAAK8uD,eAAe9+C,GAAG3Q,EAAEW,KAAK4vD,QAAQvwD,SAASA,IAAIW,KAAK6uD,UAAU7uD,KAAK8uD,gBAAgB,GAAGF,GAAGtsD,UAAUotD,UAAU,SAASrwD,EAAE2Q,EAAEvR,GAAG,IAAIa,EAAED,EAAEmjD,iBAAiB,GAAGxyC,EAAE,CAAC,IAAIgS,EAAE,EAAEvjB,IAAIujB,EAAE,GAAG,IAAI,IAAI4M,EAAE5M,EAAE4M,EAAEtvB,EAAEf,OAAOqwB,IAAI5uB,KAAKgvD,KAAK57B,IAAI9zB,EAAEsvB,QAAQ,CAAC,IAAI9vB,EAAEQ,EAAEf,OAAO,EAAEE,IAAIK,EAAEQ,EAAEf,OAAO,GAAG,IAAI,IAAImB,EAAEZ,EAAEY,GAAG,EAAEA,IAAIM,KAAKgvD,KAAK57B,IAAI9zB,EAAEI,MAAMkvD,GAAGtsD,UAAU0tD,OAAO,WAAW,OAAOhwD,KAAKkvD,SAASN,GAAGtsD,UAAUgrD,YAAY,WAAW,IAAIjuD,EAAEW,KAAK6uD,SAAS,GAAGxvD,EAAEisD,UAAUgC,aAAY,GAAIjuD,EAAEA,EAAEuwD,gBAAgBvwD,IAAIW,KAAK6uD,WAAWD,GAAGtsD,UAAU2tD,cAAc,SAAS5wD,GAAG,IAAI2Q,EAAEhQ,KAAK6vD,gBAAgB,IAAI7/C,EAAEwsC,sBAAsB16C,SAASzC,GAAG,OAAM,EAAG,IAAI+0B,GAAG8lB,cAAc76C,EAAE2Q,EAAEwyC,kBAAkB,OAAM,EAAG,IAAI,IAAI/jD,EAAEuB,KAAKg1C,OAAOzsB,WAAW9pB,EAAEu+C,WAAY,GAAGv+C,EAAE2T,OAAO69C,cAAc5wD,GAAG,OAAM,EAAG,OAAM,GAAIuvD,GAAGtsD,UAAU4tD,QAAQ,SAAS7wD,GAAGW,KAAKg1C,OAAO5hB,IAAI/zB,IAAIuvD,GAAGtsD,UAAU6tD,QAAQ,WAAW,OAAO,OAAOnwD,KAAK+0C,QAAQ6Z,GAAGtsD,UAAUktD,SAAS,WAAW,OAAOxvD,KAAKivD,QAAQL,GAAGtsD,UAAUmpD,SAAS,WAAW,OAAOzrD,KAAK+uD,QAAQH,GAAGtsD,UAAU8tD,iBAAiB,WAAW,OAAOpwD,KAAK8uD,eAAe,GAAG9uD,KAAK8vD,uBAAuB9vD,KAAK8uD,gBAAgBF,GAAGtsD,UAAU+tD,SAAS,WAAW,OAAOrwD,KAAK+0C,QAAQ6Z,GAAGtsD,UAAUmtD,WAAW,WAAW,GAAG,IAAIt/C,UAAU5R,OAAO,CAAC,IAAIc,EAAE8Q,UAAU,GAAGnQ,KAAKyvD,WAAWpwD,EAAE,GAAGW,KAAKyvD,WAAWpwD,EAAE,QAAQ,GAAG,IAAI8Q,UAAU5R,OAAO,CAAC,IAAmBE,EAAE0R,UAAU,GAAG7Q,EAA5B6Q,UAAU,GAAsBqpC,YAAY/6C,EAAE+rD,GAAG3Q,OAAO,GAAGv6C,IAAIgoC,EAAEkG,KAAK,OAAO,KAAK,GAAGxtC,KAAKivD,OAAOzV,YAAY/6C,KAAK6oC,EAAEkG,KAAK,OAAOxtC,KAAKivD,OAAOb,YAAY3vD,EAAEa,GAAG,OAAOsvD,GAAGtsD,UAAUguD,SAAS,SAASjxD,GAAGW,KAAK+0C,OAAO11C,EAAE,OAAOA,GAAGA,EAAE6wD,QAAQlwD,OAAO4uD,GAAGtsD,UAAUiuD,UAAU,SAASlxD,GAAG,IAAI,IAAI2Q,EAAE,IAAI/I,MAAMjH,KAAKg1C,OAAOvgB,QAAQqc,KAAK,MAAMryC,EAAE,EAAEA,EAAEuB,KAAKg1C,OAAOvgB,OAAOh2B,IAAIuR,EAAEvR,GAAGuB,KAAKg1C,OAAOptB,IAAInpB,GAAGoxD,gBAAgB,OAAOxwD,EAAEo2C,cAAcz1C,KAAK6vD,gBAAgB7/C,IAAI4+C,GAAGtsD,UAAUqpC,YAAY,WAAW,MAAM,IAAIijB,GAAGtsD,UAAUspC,SAAS,WAAW,OAAOgjB,IAAI,IAAI4B,GAAG,SAASnxD,GAAG,SAAS2Q,IAAI,IAAIA,EAAEG,UAAU,GAAG1R,EAAE0R,UAAU,GAAG9Q,EAAEuQ,KAAK5P,KAAKgQ,EAAEvR,GAAG,OAAOY,IAAI2Q,EAAEgY,UAAU3oB,GAAG2Q,EAAE1N,UAAUoG,OAAOojC,OAAOzsC,GAAGA,EAAEiD,WAAW0N,EAAE1N,UAAUkJ,YAAYwE,EAAEA,EAAE1N,UAAUqtD,YAAY,SAAStwD,EAAE2Q,GAAG3Q,EAAEoxD,eAAezgD,IAAIA,EAAE1N,UAAUstD,QAAQ,SAASvwD,GAAG,OAAOA,EAAEqxD,cAAc1gD,EAAE1N,UAAUqpC,YAAY,WAAW,MAAM,IAAI37B,EAAE1N,UAAUspC,SAAS,WAAW,OAAO57B,GAAGA,EAAnX,CAAsX4+C,IAAI+B,GAAG,SAAStxD,GAAG,SAAS2Q,IAAI,IAAIA,EAAEG,UAAU,GAAG1R,EAAE0R,UAAU,GAAG9Q,EAAEuQ,KAAK5P,KAAKgQ,EAAEvR,GAAG,OAAOY,IAAI2Q,EAAEgY,UAAU3oB,GAAG2Q,EAAE1N,UAAUoG,OAAOojC,OAAOzsC,GAAGA,EAAEiD,WAAW0N,EAAE1N,UAAUkJ,YAAYwE,EAAEA,EAAE1N,UAAUsuD,kBAAkB,WAAW,IAAIvxD,EAAE,IAAIm/C,GAAGxuC,EAAEhQ,KAAK6uD,SAAS,EAAE,CAAC,GAAG,OAAO7+C,EAAE6gD,iBAAiB,CAAC,IAAIpyD,EAAE,IAAI+xD,GAAGxgD,EAAEhQ,KAAKmvD,kBAAkB9vD,EAAE+zB,IAAI30B,GAAGuR,EAAEA,EAAE4/C,gBAAgB5/C,IAAIhQ,KAAK6uD,UAAU,OAAOxvD,GAAG2Q,EAAE1N,UAAUqtD,YAAY,SAAStwD,EAAE2Q,GAAG3Q,EAAEswD,YAAY3/C,IAAIA,EAAE1N,UAAUwuD,qCAAqC,WAAW,IAAIzxD,EAAEW,KAAK6uD,SAAS,GAAGxvD,EAAEmsD,UAAUC,WAAWsF,yBAAyB/wD,MAAMX,EAAEA,EAAEuwD,gBAAgBvwD,IAAIW,KAAK6uD,WAAW7+C,EAAE1N,UAAUstD,QAAQ,SAASvwD,GAAG,OAAOA,EAAEuwD,WAAW5/C,EAAE1N,UAAUqpC,YAAY,WAAW,MAAM,IAAI37B,EAAE1N,UAAUspC,SAAS,WAAW,OAAO57B,GAAGA,EAAruB,CAAwuB4+C,IAAIoC,GAAG,WAAW,GAAGhxD,KAAKivD,OAAO,KAAKjvD,KAAKg/B,aAAY,EAAGh/B,KAAKixD,YAAW,EAAGjxD,KAAKkxD,eAAc,EAAGlxD,KAAKmxD,YAAW,EAAG,IAAIhhD,UAAU5R,aAAa,GAAG,IAAI4R,UAAU5R,OAAO,CAAC,IAAIc,EAAE8Q,UAAU,GAAGnQ,KAAKivD,OAAO5vD,IAAI2xD,GAAG1uD,UAAUoqD,WAAW,SAASrtD,GAAGW,KAAKmxD,WAAW9xD,GAAG2xD,GAAG1uD,UAAUgrD,YAAY,SAASjuD,GAAGW,KAAKg/B,YAAY3/B,GAAG2xD,GAAG1uD,UAAU8uD,UAAU,WAAW,OAAOpxD,KAAKixD,YAAYD,GAAG1uD,UAAU+uD,aAAa,WAAW,OAAOrxD,KAAKkxD,eAAeF,GAAG1uD,UAAUgvD,SAAS,SAASjyD,GAAGW,KAAKivD,OAAO5vD,GAAG2xD,GAAG1uD,UAAUktD,SAAS,WAAW,OAAOxvD,KAAKivD,QAAQ+B,GAAG1uD,UAAUivD,WAAW,SAASlyD,GAAGW,KAAKixD,WAAW5xD,EAAEW,KAAKkxD,eAAc,GAAIF,GAAG1uD,UAAUkvD,SAAS,SAASnyD,GAAG22C,GAAGE,OAAOl2C,KAAKivD,OAAOR,oBAAoB,EAAE,uBAAuBzuD,KAAKyxD,UAAUpyD,IAAI2xD,GAAG1uD,UAAUi3B,WAAW,WAAW,OAAOv5B,KAAKg/B,aAAagyB,GAAG1uD,UAAUuqD,UAAU,WAAW,OAAO7sD,KAAKmxD,YAAYH,GAAG1uD,UAAUqpC,YAAY,WAAW,MAAM,IAAIqlB,GAAG1uD,UAAUspC,SAAS,WAAW,OAAOolB,IAAI,IAAIU,GAAG,SAASryD,GAAG,SAAS2Q,IAAI3Q,EAAEuQ,KAAK5P,MAAMA,KAAK2xD,OAAO,KAAK3xD,KAAK+uD,OAAO,KAAK,IAAI/+C,EAAEG,UAAU,GAAG1R,EAAE0R,UAAU,GAAGnQ,KAAK2xD,OAAO3hD,EAAEhQ,KAAK+uD,OAAOtwD,EAAEuB,KAAKivD,OAAO,IAAIV,GAAG,EAAEjnB,EAAEkG,MAAM,OAAOnuC,IAAI2Q,EAAEgY,UAAU3oB,GAAG2Q,EAAE1N,UAAUoG,OAAOojC,OAAOzsC,GAAGA,EAAEiD,WAAW0N,EAAE1N,UAAUkJ,YAAYwE,EAAEA,EAAE1N,UAAUsvD,uBAAuB,WAAW,IAAI,IAAIvyD,EAAEW,KAAKyrD,WAAWA,WAAWljC,WAAWlpB,EAAE29C,WAAY,GAAG39C,EAAE+S,OAAOk5C,UAAU/xB,aAAa,OAAM,EAAG,OAAM,GAAIvpB,EAAE1N,UAAUgtD,WAAW,WAAW,OAAO,IAAItvD,KAAKivD,OAAOR,oBAAoBz+C,EAAE1N,UAAUqvC,cAAc,WAAW,OAAO3xC,KAAK2xD,QAAQ3hD,EAAE1N,UAAUuvD,MAAM,SAASxyD,GAAGA,EAAEw5C,QAAQ,QAAQ74C,KAAK2xD,OAAO,SAAS3xD,KAAKivD,SAASj/C,EAAE1N,UAAUmvD,UAAU,SAASpyD,KAAK2Q,EAAE1N,UAAUwvD,sBAAsB,SAASzyD,EAAE2Q,GAAG,IAAIvR,EAAE6oC,EAAEkG,KAAK,GAAG/uC,EAAEuB,KAAKivD,OAAOzV,YAAYxpC,IAAI3Q,EAAEszC,OAAO3iC,GAAG,CAAC,IAAI1Q,EAAED,EAAEm6C,YAAYxpC,GAAGvR,IAAI6oC,EAAEgG,WAAW7uC,EAAEa,GAAG,OAAOb,GAAGuR,EAAE1N,UAAUgvD,SAAS,WAAW,GAAG,IAAInhD,UAAU5R,OAAO,OAAOc,EAAEiD,UAAUgvD,SAASptD,MAAMlE,KAAKmQ,WAAW,IAAIH,EAAEG,UAAU,GAAG1R,EAAE0R,UAAU,GAAG,OAAOnQ,KAAKivD,OAAOjvD,KAAKivD,OAAO,IAAIV,GAAGv+C,EAAEvR,GAAGuB,KAAKivD,OAAOb,YAAYp+C,EAAEvR,IAAIuR,EAAE1N,UAAUmpD,SAAS,WAAW,OAAOzrD,KAAK+uD,QAAQ/+C,EAAE1N,UAAUmtD,WAAW,WAAW,GAAGt/C,UAAU,aAAaH,EAAE,CAAC,IAAI3Q,EAAE8Q,UAAU,GAAGnQ,KAAKyvD,WAAWpwD,EAAE4vD,aAAa,GAAG9+C,UAAU,aAAao+C,GAAG,IAAI,IAAI9vD,EAAE0R,UAAU,GAAG7Q,EAAE,EAAEA,EAAE,EAAEA,IAAI,CAAC,IAAI0iB,EAAEhiB,KAAK8xD,sBAAsBrzD,EAAEa,GAAGU,KAAKivD,OAAOzV,YAAYl6C,KAAKgoC,EAAEkG,MAAMxtC,KAAKivD,OAAOb,YAAY9uD,EAAE0iB,KAAKhS,EAAE1N,UAAU8wB,IAAI,SAAS/zB,GAAGW,KAAK+uD,OAAO/rD,OAAO3D,GAAGA,EAAE0yD,QAAQ/xD,OAAOgQ,EAAE1N,UAAU0vD,iBAAiB,SAAS3yD,GAAG,GAAG,OAAOW,KAAKivD,OAAO,OAAO,KAAK,IAAIj/C,EAAEs3B,EAAEkG,KAAK,OAAOxtC,KAAKivD,SAASj/C,EAAEhQ,KAAKivD,OAAOzV,YAAYn6C,IAAI,IAAIZ,EAAE,KAAK,OAAOuR,GAAG,KAAKs3B,EAAEgG,SAAS7uC,EAAE6oC,EAAE+F,SAAS,MAAM,KAAK/F,EAAE+F,SAAS,QAAQ5uC,EAAE6oC,EAAEgG,SAASttC,KAAKivD,OAAOb,YAAY/uD,EAAEZ,IAAIuR,EAAE1N,UAAUqpC,YAAY,WAAW,MAAM,IAAI37B,EAAE1N,UAAUspC,SAAS,WAAW,OAAO57B,GAAGA,EAAvwD,CAA0wDghD,IAAIiB,GAAG,WAAWjyD,KAAKkyD,QAAQ,IAAIlxD,EAAEhB,KAAKmyD,SAAS,KAAK,IAAI9yD,EAAE8Q,UAAU,GAAGnQ,KAAKmyD,SAAS9yD,GAAG4yD,GAAG3vD,UAAUkxB,KAAK,SAASn0B,GAAG,OAAOW,KAAKkyD,QAAQtqC,IAAIvoB,IAAI4yD,GAAG3vD,UAAU8vD,QAAQ,WAAW,GAAGjiD,UAAU,aAAaw3B,EAAE,CAAC,IAAItoC,EAAE8Q,UAAU,GAAGH,EAAEhQ,KAAKkyD,QAAQtqC,IAAIvoB,GAAG,OAAO,OAAO2Q,IAAIA,EAAEhQ,KAAKmyD,SAASjxD,WAAW7B,GAAGW,KAAKkyD,QAAQ7R,IAAIhhD,EAAE2Q,IAAIA,EAAE,GAAGG,UAAU,aAAauhD,GAAG,CAAC,IAAIjzD,EAAE0R,UAAU,GAAG7Q,EAAEU,KAAKkyD,QAAQtqC,IAAInpB,EAAEkzC,iBAAiB,OAAO,OAAOryC,GAAGU,KAAKkyD,QAAQ7R,IAAI5hD,EAAEkzC,gBAAgBlzC,GAAGA,IAAIa,EAAEmwD,WAAWhxD,GAAGa,KAAK2yD,GAAG3vD,UAAUuvD,MAAM,SAASxyD,GAAG,IAAI,IAAI2Q,EAAEhQ,KAAKuoB,WAAWvY,EAAEgtC,WAAYhtC,EAAEoC,OAAOy/C,MAAMxyD,IAAK4yD,GAAG3vD,UAAUimB,SAAS,WAAW,OAAOvoB,KAAKkyD,QAAQj+B,SAAS1L,YAAY0pC,GAAG3vD,UAAU2xB,OAAO,WAAW,OAAOj0B,KAAKkyD,QAAQj+B,UAAUg+B,GAAG3vD,UAAU+vD,iBAAiB,SAAShzD,GAAG,IAAI,IAAI2Q,EAAE,IAAIwuC,GAAG//C,EAAEuB,KAAKuoB,WAAW9pB,EAAEu+C,WAAW,CAAC,IAAI19C,EAAEb,EAAE2T,OAAO9S,EAAEkwD,WAAWhW,YAAYn6C,KAAKioC,EAAEgG,UAAUt9B,EAAEojB,IAAI9zB,GAAG,OAAO0Q,GAAGiiD,GAAG3vD,UAAU8wB,IAAI,SAAS/zB,GAAG,IAAI2Q,EAAE3Q,EAAEsyC,gBAAgB3xC,KAAKoyD,QAAQpiD,GAAGojB,IAAI/zB,IAAI4yD,GAAG3vD,UAAUqpC,YAAY,WAAW,MAAM,IAAIsmB,GAAG3vD,UAAUspC,SAAS,WAAW,OAAOqmB,IAAI,IAAIK,GAAG,aAAaC,GAAG,CAACC,GAAG,CAACniD,cAAa,GAAIoiD,GAAG,CAACpiD,cAAa,GAAIqiD,GAAG,CAACriD,cAAa,GAAIsiD,GAAG,CAACtiD,cAAa,IAAKiiD,GAAGhwD,UAAUqpC,YAAY,WAAW,MAAM,IAAI2mB,GAAGhwD,UAAUspC,SAAS,WAAW,OAAO0mB,IAAIA,GAAGM,WAAW,SAASvzD,GAAG,OAAOA,IAAIizD,GAAGE,IAAInzD,IAAIizD,GAAGG,IAAIH,GAAGO,WAAW,SAASxzD,EAAE2Q,GAAG,OAAG3Q,IAAI2Q,GAAkB,KAAK3Q,EAAE2Q,EAAE,GAAG,GAAGsiD,GAAGQ,gBAAgB,SAASzzD,EAAE2Q,GAAG,GAAG3Q,IAAI2Q,EAAE,OAAO3Q,EAAE,GAAG,KAAKA,EAAE2Q,EAAE,GAAG,EAAE,OAAO,EAAE,IAAIvR,EAAEY,EAAE2Q,EAAE3Q,EAAE2Q,EAAE,OAAO,IAAIvR,GAAG,KAAKY,EAAE2Q,EAAE3Q,EAAE2Q,GAAG,EAAEvR,GAAG6zD,GAAGS,cAAc,SAAS1zD,EAAE2Q,GAAG,OAAOA,IAAIsiD,GAAGK,GAAGtzD,IAAIizD,GAAGK,IAAItzD,IAAIizD,GAAGI,GAAGrzD,IAAI2Q,GAAG3Q,IAAI2Q,EAAE,GAAGsiD,GAAGU,SAAS,WAAW,GAAG,iBAAiB7iD,UAAU,IAAI,iBAAiBA,UAAU,GAAG,CAAC,IAAI9Q,EAAE8Q,UAAU,GAAGH,EAAEG,UAAU,GAAG,GAAG,IAAI9Q,GAAG,IAAI2Q,EAAE,MAAM,IAAItR,EAAE,2CAA2CW,EAAE,KAAK2Q,EAAE,MAAM,OAAO3Q,GAAG,EAAE2Q,GAAG,EAAEsiD,GAAGE,GAAGF,GAAGK,GAAG3iD,GAAG,EAAEsiD,GAAGG,GAAGH,GAAGI,GAAG,GAAGviD,UAAU,aAAaw3B,GAAGx3B,UAAU,aAAaw3B,EAAE,CAAC,IAAIlpC,EAAE0R,UAAU,GAAG7Q,EAAE6Q,UAAU,GAAG,GAAG7Q,EAAE6U,IAAI1V,EAAE0V,GAAG7U,EAAE8U,IAAI3V,EAAE2V,EAAE,MAAM,IAAI1V,EAAE,wDAAwDD,GAAG,OAAOa,EAAE6U,GAAG1V,EAAE0V,EAAE7U,EAAE8U,GAAG3V,EAAE2V,EAAEk+C,GAAGE,GAAGF,GAAGK,GAAGrzD,EAAE8U,GAAG3V,EAAE2V,EAAEk+C,GAAGG,GAAGH,GAAGI,KAAKH,GAAGC,GAAG5qC,IAAI,WAAW,OAAO,GAAG2qC,GAAGE,GAAG7qC,IAAI,WAAW,OAAO,GAAG2qC,GAAGG,GAAG9qC,IAAI,WAAW,OAAO,GAAG2qC,GAAGI,GAAG/qC,IAAI,WAAW,OAAO,GAAGlf,OAAOyP,iBAAiBm6C,GAAGC,IAAI,IAAIU,GAAG,WAAW,GAAGjzD,KAAKkzD,MAAM,KAAKlzD,KAAKivD,OAAO,KAAKjvD,KAAKmzD,MAAM,KAAKnzD,KAAKozD,IAAI,KAAKpzD,KAAKqzD,IAAI,KAAKrzD,KAAKszD,IAAI,KAAKtzD,KAAKuzD,IAAI,KAAKvzD,KAAKwzD,UAAU,KAAK,IAAIrjD,UAAU5R,OAAO,CAAC,IAAIc,EAAE8Q,UAAU,GAAGnQ,KAAKkzD,MAAM7zD,OAAO,GAAG,IAAI8Q,UAAU5R,OAAO,CAAC,IAAIyR,EAAEG,UAAU,GAAG1R,EAAE0R,UAAU,GAAG7Q,EAAE6Q,UAAU,GAAGnQ,KAAKkzD,MAAMljD,EAAEhQ,KAAKma,KAAK1b,EAAEa,GAAGU,KAAKivD,OAAO,UAAU,GAAG,IAAI9+C,UAAU5R,OAAO,CAAC,IAAIyjB,EAAE7R,UAAU,GAAGye,EAAEze,UAAU,GAAGrR,EAAEqR,UAAU,GAAGzQ,EAAEyQ,UAAU,GAAGnQ,KAAKkzD,MAAMlxC,EAAEhiB,KAAKma,KAAKyU,EAAE9vB,GAAGkB,KAAKivD,OAAOvvD,IAAIuzD,GAAG3wD,UAAUmxD,iBAAiB,SAASp0D,GAAG,OAAOW,KAAKszD,MAAMj0D,EAAEi0D,KAAKtzD,KAAKuzD,MAAMl0D,EAAEk0D,IAAI,EAAEvzD,KAAKwzD,UAAUn0D,EAAEm0D,UAAU,EAAExzD,KAAKwzD,UAAUn0D,EAAEm0D,WAAW,EAAEp/B,GAAGimB,mBAAmBh7C,EAAE+zD,IAAI/zD,EAAEg0D,IAAIrzD,KAAKqzD,MAAMJ,GAAG3wD,UAAUoxD,MAAM,WAAW,OAAO1zD,KAAKuzD,KAAKN,GAAG3wD,UAAUqvC,cAAc,WAAW,OAAO3xC,KAAKozD,KAAKH,GAAG3wD,UAAUyvD,QAAQ,SAAS1yD,GAAGW,KAAKmzD,MAAM9zD,GAAG4zD,GAAG3wD,UAAUuvD,MAAM,SAASxyD,GAAG,IAAI2Q,EAAEpR,KAAK+0D,MAAM3zD,KAAKuzD,IAAIvzD,KAAKszD,KAAK70D,EAAEuB,KAAK4rC,WAAW6a,UAAUnnD,EAAEb,EAAEm1D,YAAY,KAAK5xC,EAAEvjB,EAAEwyC,UAAU3xC,EAAE,GAAGD,EAAEwyD,MAAM,KAAK7vC,EAAE,KAAKhiB,KAAKozD,IAAI,MAAMpzD,KAAKqzD,IAAI,IAAIrzD,KAAKwzD,UAAU,IAAIxjD,EAAE,MAAMhQ,KAAKivD,SAASgE,GAAG3wD,UAAUwqC,UAAU,SAASztC,GAAG,IAAI2Q,EAAE3Q,EAAE,OAAOW,KAAKyzD,iBAAiBzjD,IAAIijD,GAAG3wD,UAAUuxD,sBAAsB,WAAW,OAAO7zD,KAAKqzD,KAAKJ,GAAG3wD,UAAUwxD,MAAM,WAAW,OAAO9zD,KAAKszD,KAAKL,GAAG3wD,UAAUktD,SAAS,WAAW,OAAOxvD,KAAKivD,QAAQgE,GAAG3wD,UAAUgpD,QAAQ,WAAW,OAAOtrD,KAAKkzD,OAAOD,GAAG3wD,UAAUyxD,YAAY,WAAW,OAAO/zD,KAAKwzD,WAAWP,GAAG3wD,UAAUkpD,QAAQ,WAAW,OAAOxrD,KAAKmzD,OAAOF,GAAG3wD,UAAUkV,SAAS,WAAW,IAAInY,EAAET,KAAK+0D,MAAM3zD,KAAKuzD,IAAIvzD,KAAKszD,KAAKtjD,EAAEhQ,KAAK4rC,WAAW6a,UAAUhoD,EAAEuR,EAAE4jD,YAAY,KAAK,MAAM,KAAK5jD,EAAEihC,UAAUxyC,EAAE,GAAG,KAAKuB,KAAKozD,IAAI,MAAMpzD,KAAKqzD,IAAI,IAAIrzD,KAAKwzD,UAAU,IAAIn0D,EAAE,MAAMW,KAAKivD,QAAQgE,GAAG3wD,UAAU0xD,aAAa,SAAS30D,KAAK4zD,GAAG3wD,UAAU6X,KAAK,SAAS9a,EAAE2Q,GAAGhQ,KAAKozD,IAAI/zD,EAAEW,KAAKqzD,IAAIrjD,EAAEhQ,KAAKszD,IAAItjD,EAAEmE,EAAE9U,EAAE8U,EAAEnU,KAAKuzD,IAAIvjD,EAAEoE,EAAE/U,EAAE+U,EAAEpU,KAAKwzD,UAAUlB,GAAGU,SAAShzD,KAAKszD,IAAItzD,KAAKuzD,KAAKvd,GAAGE,SAAS,IAAIl2C,KAAKszD,KAAK,IAAItzD,KAAKuzD,KAAK,2CAA2CN,GAAG3wD,UAAUqpC,YAAY,WAAW,MAAM,CAAC/D,IAAIqrB,GAAG3wD,UAAUspC,SAAS,WAAW,OAAOqnB,IAAI,IAAIgB,GAAG,SAAS50D,GAAG,SAAS2Q,IAAI,IAAIA,EAAEG,UAAU,GAAG1R,EAAE0R,UAAU,GAAG,GAAG9Q,EAAEuQ,KAAK5P,KAAKgQ,GAAGhQ,KAAKk0D,WAAW,KAAKl0D,KAAKg/B,aAAY,EAAGh/B,KAAKmxD,YAAW,EAAGnxD,KAAKm0D,KAAK,KAAKn0D,KAAKo0D,MAAM,KAAKp0D,KAAKq0D,SAAS,KAAKr0D,KAAKs0D,UAAU,KAAKt0D,KAAKu0D,aAAa,KAAKv0D,KAAKw0D,OAAO,CAAC,GAAG,KAAK,KAAKx0D,KAAKk0D,WAAWz1D,EAAEA,EAAEuB,KAAKma,KAAKnK,EAAE2hC,cAAc,GAAG3hC,EAAE2hC,cAAc,QAAQ,CAAC,IAAIryC,EAAE0Q,EAAEyyC,eAAe,EAAEziD,KAAKma,KAAKnK,EAAE2hC,cAAcryC,GAAG0Q,EAAE2hC,cAAcryC,EAAE,IAAIU,KAAKy0D,uBAAuB,OAAOp1D,IAAI2Q,EAAEgY,UAAU3oB,GAAG2Q,EAAE1N,UAAUoG,OAAOojC,OAAOzsC,GAAGA,EAAEiD,WAAW0N,EAAE1N,UAAUkJ,YAAYwE,EAAEA,EAAE1N,UAAUouD,WAAW,WAAW,OAAO1wD,KAAKq0D,UAAUrkD,EAAE1N,UAAU8qD,SAAS,SAAS/tD,GAAG,OAAOW,KAAKw0D,OAAOn1D,IAAI2Q,EAAE1N,UAAUoqD,WAAW,SAASrtD,GAAGW,KAAKmxD,WAAW9xD,GAAG2Q,EAAE1N,UAAUmyD,qBAAqB,WAAWz0D,KAAKivD,OAAO,IAAIV,GAAGvuD,KAAKkzD,MAAM1D,YAAYxvD,KAAKk0D,YAAYl0D,KAAKivD,OAAOjB,QAAQh+C,EAAE1N,UAAUstD,QAAQ,WAAW,OAAO5vD,KAAKo0D,OAAOpkD,EAAE1N,UAAUirD,SAAS,SAASluD,EAAE2Q,GAAG,IAAI,MAAMhQ,KAAKw0D,OAAOn1D,IAAIW,KAAKw0D,OAAOn1D,KAAK2Q,EAAE,MAAM,IAAI87C,GAAG,+BAA+B9rD,KAAK2xC,iBAAiB3xC,KAAKw0D,OAAOn1D,GAAG2Q,GAAGA,EAAE1N,UAAU+qD,mBAAmB,WAAW,IAAI,IAAIhuD,GAAE,EAAG2Q,EAAE,EAAEA,EAAE,EAAEA,IAAIhQ,KAAKivD,OAAOf,OAAOl+C,IAAIhQ,KAAKivD,OAAOzV,YAAYxpC,EAAEw6C,GAAGzQ,QAAQzS,EAAE+F,UAAUrtC,KAAKivD,OAAOzV,YAAYxpC,EAAEw6C,GAAG3Q,SAASvS,EAAE+F,WAAWhuC,GAAE,GAAI,OAAOA,GAAG2Q,EAAE1N,UAAUoyD,WAAW,SAASr1D,GAAGW,KAAKq0D,SAASh1D,GAAG2Q,EAAE1N,UAAUuvD,MAAM,SAAS7hD,GAAG3Q,EAAEiD,UAAUuvD,MAAMjiD,KAAK5P,KAAKgQ,GAAGA,EAAE6hD,MAAM,IAAI7xD,KAAKw0D,OAAOhK,GAAGzQ,MAAM,IAAI/5C,KAAKw0D,OAAOhK,GAAG3Q,QAAQ7pC,EAAE6hD,MAAM,KAAK7xD,KAAK20D,gBAAgB,KAAK30D,KAAKg/B,aAAahvB,EAAE6hD,MAAM,cAAc7hD,EAAE1N,UAAUmuD,eAAe,SAASpxD,GAAGW,KAAKu0D,aAAal1D,GAAG2Q,EAAE1N,UAAUsyD,WAAW,WAAW,IAAIv1D,EAAEW,KAAKivD,OAAOnB,OAAO,IAAI9tD,KAAKivD,OAAOnB,OAAO,GAAG99C,GAAGhQ,KAAKivD,OAAOf,OAAO,IAAIluD,KAAKivD,OAAOX,kBAAkB,EAAEhnB,EAAEiG,UAAU9uC,GAAGuB,KAAKivD,OAAOf,OAAO,IAAIluD,KAAKivD,OAAOX,kBAAkB,EAAEhnB,EAAEiG,UAAU,OAAOluC,GAAG2Q,GAAGvR,GAAGuR,EAAE1N,UAAUqtD,YAAY,SAAStwD,GAAGW,KAAKs0D,UAAUj1D,GAAG2Q,EAAE1N,UAAUuuD,eAAe,WAAW,OAAO7wD,KAAKu0D,cAAcvkD,EAAE1N,UAAUqyD,cAAc,WAAW,IAAIt1D,EAAEW,KAAKkzD,MAAMyB,gBAAgB,OAAO30D,KAAKk0D,aAAa70D,GAAGA,GAAGA,GAAG2Q,EAAE1N,UAAUgrD,YAAY,SAASjuD,GAAGW,KAAKg/B,YAAY3/B,GAAG2Q,EAAE1N,UAAUspD,OAAO,WAAW,OAAO5rD,KAAKm0D,MAAMnkD,EAAE1N,UAAUqpD,UAAU,WAAW,OAAO3rD,KAAKk0D,YAAYlkD,EAAE1N,UAAUgpD,QAAQ,WAAW,OAAOtrD,KAAKkzD,OAAOljD,EAAE1N,UAAUuyD,UAAU,SAASx1D,GAAGW,KAAK6xD,MAAMxyD,GAAGA,EAAEwyD,MAAM,KAAK7xD,KAAKk0D,WAAWl0D,KAAKkzD,MAAMrB,MAAMxyD,GAAGW,KAAKkzD,MAAM4B,aAAaz1D,IAAI2Q,EAAE1N,UAAUyyD,OAAO,SAAS11D,GAAGW,KAAKm0D,KAAK90D,GAAG2Q,EAAE1N,UAAU0yD,eAAe,SAAS31D,GAAGW,KAAK0sD,WAAWrtD,GAAGW,KAAKm0D,KAAKzH,WAAWrtD,IAAI2Q,EAAE1N,UAAU2qD,cAAc,SAAS5tD,EAAE2Q,GAAG,IAAIvR,EAAEuB,KAAKsrD,UAAUqJ,gBAAgB30D,KAAKk0D,aAAaz1D,GAAGA,GAAG,IAAIa,EAAE,EAAED,IAAImrD,GAAGzQ,OAAOz6C,GAAG,GAAG,IAAI0iB,EAAEwoC,GAAGG,SAAStrD,GAAGuvB,EAAE5e,EAAEvR,EAAEa,EAAEU,KAAKutD,SAASluD,EAAE2Q,GAAGhQ,KAAKutD,SAASvrC,EAAE4M,IAAI5e,EAAE1N,UAAUitD,YAAY,WAAW,OAAOvvD,KAAKs0D,WAAWtkD,EAAE1N,UAAUi3B,WAAW,WAAW,OAAOv5B,KAAKg/B,aAAahvB,EAAE1N,UAAU2yD,QAAQ,SAAS51D,GAAGW,KAAKo0D,MAAM/0D,GAAG2Q,EAAE1N,UAAUuqD,UAAU,WAAW,OAAO7sD,KAAKmxD,YAAYnhD,EAAE1N,UAAUqpC,YAAY,WAAW,MAAM,IAAI37B,EAAE1N,UAAUspC,SAAS,WAAW,OAAO57B,GAAGA,EAAEklD,YAAY,SAAS71D,EAAE2Q,GAAG,OAAO3Q,IAAIioC,EAAEiG,UAAUv9B,IAAIs3B,EAAE+F,SAAS,EAAEhuC,IAAIioC,EAAE+F,UAAUr9B,IAAIs3B,EAAEiG,UAAU,EAAE,GAAGv9B,EAA5gG,CAA+gGijD,IAAIkC,GAAG,aAAaA,GAAG7yD,UAAUpB,WAAW,SAAS7B,GAAG,OAAO,IAAIqyD,GAAGryD,EAAE,OAAO81D,GAAG7yD,UAAUqpC,YAAY,WAAW,MAAM,IAAIwpB,GAAG7yD,UAAUspC,SAAS,WAAW,OAAOupB,IAAI,IAAIC,GAAG,WAAW,GAAGp1D,KAAK+uD,OAAO,IAAIvQ,GAAGx+C,KAAKssD,OAAO,KAAKtsD,KAAKq1D,aAAa,IAAI7W,GAAG,IAAIruC,UAAU5R,OAAOyB,KAAKssD,OAAO,IAAI2F,GAAG,IAAIkD,SAAS,GAAG,IAAIhlD,UAAU5R,OAAO,CAAC,IAAIc,EAAE8Q,UAAU,GAAGnQ,KAAKssD,OAAO,IAAI2F,GAAG5yD,KAAK+1D,GAAG9yD,UAAUgzD,WAAW,SAASj2D,GAAGA,EAAEw5C,QAAQ,UAAU,IAAI,IAAI7oC,EAAE,EAAEA,EAAEhQ,KAAK+uD,OAAOt6B,OAAOzkB,IAAI,CAAC3Q,EAAEw5C,QAAQ,QAAQ7oC,EAAE,KAAK,IAAIvR,EAAEuB,KAAK+uD,OAAOnnC,IAAI5X,GAAGvR,EAAEozD,MAAMxyD,GAAGZ,EAAE82D,OAAO1D,MAAMxyD,KAAK+1D,GAAG9yD,UAAUkxB,KAAK,SAASn0B,GAAG,OAAOW,KAAKssD,OAAO94B,KAAKn0B,IAAI+1D,GAAG9yD,UAAU8vD,QAAQ,WAAW,GAAGjiD,UAAU,aAAauhD,GAAG,CAAC,IAAIryD,EAAE8Q,UAAU,GAAG,OAAOnQ,KAAKssD,OAAO8F,QAAQ/yD,GAAG,GAAG8Q,UAAU,aAAaw3B,EAAE,CAAC,IAAI33B,EAAEG,UAAU,GAAG,OAAOnQ,KAAKssD,OAAO8F,QAAQpiD,KAAKolD,GAAG9yD,UAAUkzD,gBAAgB,WAAW,OAAOx1D,KAAKssD,OAAO/jC,YAAY6sC,GAAG9yD,UAAUmzD,wBAAwB,WAAW,IAAI,IAAIp2D,EAAEW,KAAKssD,OAAO/jC,WAAWlpB,EAAE29C,WAAY39C,EAAE+S,OAAOq5C,WAAWgK,2BAA4BL,GAAG9yD,UAAUozD,aAAa,SAASr2D,GAAGktC,EAAE1Z,IAAIgmB,QAAQx5C,IAAI+1D,GAAG9yD,UAAUqzD,eAAe,SAASt2D,EAAE2Q,GAAG,IAAIvR,EAAEuB,KAAKssD,OAAO94B,KAAKxjB,GAAG,GAAG,OAAOvR,EAAE,OAAM,EAAG,IAAIa,EAAEb,EAAE+wD,WAAW,OAAO,OAAOlwD,GAAGA,EAAEk6C,YAAYn6C,KAAKioC,EAAEgG,UAAU8nB,GAAG9yD,UAAUszD,qBAAqB,WAAW,IAAI,IAAIv2D,EAAEW,KAAKssD,OAAO/jC,WAAWlpB,EAAE29C,WAAY39C,EAAE+S,OAAOq5C,WAAWmK,wBAAyBR,GAAG9yD,UAAUuzD,qBAAqB,SAASx2D,EAAE2Q,EAAEvR,EAAEa,GAAG,QAAQD,EAAEqf,OAAOjgB,IAAK21B,GAAGimB,mBAAmBh7C,EAAE2Q,EAAE1Q,KAAK80B,GAAG0iB,WAAWwb,GAAGU,SAAS3zD,EAAE2Q,KAAKsiD,GAAGU,SAASv0D,EAAEa,IAAK81D,GAAG9yD,UAAUwzD,YAAY,WAAW,OAAO91D,KAAKq1D,cAAcD,GAAG9yD,UAAUyzD,WAAW,SAAS12D,GAAGktC,EAAE1Z,IAAIg/B,MAAMxyD,IAAI+1D,GAAG9yD,UAAU0zD,gBAAgB,WAAW,OAAOh2D,KAAK+uD,OAAOxmC,YAAY6sC,GAAG9yD,UAAU2zD,wBAAwB,SAAS52D,EAAE2Q,GAAG,IAAI,IAAIvR,EAAE,EAAEA,EAAEuB,KAAK+uD,OAAOt6B,OAAOh2B,IAAI,CAAC,IAAIa,EAAEU,KAAK+uD,OAAOnnC,IAAInpB,GAAGujB,EAAE1iB,EAAEkjD,iBAAiB,GAAGxiD,KAAK61D,qBAAqBx2D,EAAE2Q,EAAEgS,EAAE,GAAGA,EAAE,IAAI,OAAO1iB,EAAE,GAAGU,KAAK61D,qBAAqBx2D,EAAE2Q,EAAEgS,EAAEA,EAAEzjB,OAAO,GAAGyjB,EAAEA,EAAEzjB,OAAO,IAAI,OAAOe,EAAE,OAAO,MAAM81D,GAAG9yD,UAAU4zD,WAAW,SAAS72D,GAAGW,KAAK+uD,OAAO37B,IAAI/zB,IAAI+1D,GAAG9yD,UAAU6zD,YAAY,SAAS92D,GAAG,IAAI,IAAI2Q,EAAEhQ,KAAK81D,cAAcvtC,WAAWvY,EAAEgtC,WAAW,CAAC,IAAIv+C,EAAEuR,EAAEoC,OAAO,GAAG3T,EAAE6sD,YAAYjsD,EAAE,OAAOZ,EAAE,OAAO,MAAM22D,GAAG9yD,UAAU8zD,SAAS,SAAS/2D,GAAG,IAAI,IAAI2Q,EAAE3Q,EAAEkpB,WAAWvY,EAAEgtC,WAAW,CAAC,IAAIv+C,EAAEuR,EAAEoC,OAAOpS,KAAK+uD,OAAO37B,IAAI30B,GAAG,IAAIa,EAAE,IAAI20D,GAAGx1D,GAAE,GAAIujB,EAAE,IAAIiyC,GAAGx1D,GAAE,GAAIa,EAAEy1D,OAAO/yC,GAAGA,EAAE+yC,OAAOz1D,GAAGU,KAAKozB,IAAI9zB,GAAGU,KAAKozB,IAAIpR,KAAKozC,GAAG9yD,UAAU8wB,IAAI,SAAS/zB,GAAGW,KAAKssD,OAAOl5B,IAAI/zB,GAAGW,KAAKq1D,aAAajiC,IAAI/zB,IAAI+1D,GAAG9yD,UAAUkrD,SAAS,WAAW,OAAOxtD,KAAKssD,OAAOr4B,UAAUmhC,GAAG9yD,UAAUupD,SAAS,SAASxsD,EAAE2Q,GAAG,IAAI,IAAIvR,EAAE,EAAEA,EAAEuB,KAAK+uD,OAAOt6B,OAAOh2B,IAAI,CAAC,IAAIa,EAAEU,KAAK+uD,OAAOnnC,IAAInpB,GAAGujB,EAAE1iB,EAAEkjD,iBAAiB,GAAGnjD,EAAEqf,OAAOsD,EAAE,KAAKhS,EAAE0O,OAAOsD,EAAE,IAAI,OAAO1iB,EAAE,OAAO,MAAM81D,GAAG9yD,UAAUqpC,YAAY,WAAW,MAAM,IAAIypB,GAAG9yD,UAAUspC,SAAS,WAAW,OAAOwpB,IAAIA,GAAGK,wBAAwB,SAASp2D,GAAG,IAAI,IAAI2Q,EAAE3Q,EAAEkpB,WAAWvY,EAAEgtC,WAAYhtC,EAAEoC,OAAOq5C,WAAWgK,2BAA4B,IAAIY,GAAG,WAAWr2D,KAAKmvD,iBAAiB,KAAKnvD,KAAKs2D,WAAW,IAAI9X,GAAG,IAAIn/C,EAAE8Q,UAAU,GAAGnQ,KAAKmvD,iBAAiB9vD,GAAGg3D,GAAG/zD,UAAUi0D,mBAAmB,SAASl3D,EAAE2Q,EAAEvR,GAAG,IAAI,IAAIa,EAAED,EAAEkpB,WAAWjpB,EAAE09C,WAAW,CAAC,IAAIh7B,EAAE1iB,EAAE8S,OAAO4P,EAAEguC,SAASvxD,EAAE20B,IAAIpR,GAAGhS,EAAEojB,IAAIpR,KAAKq0C,GAAG/zD,UAAUk0D,gBAAgB,SAASn3D,GAAG,IAAI,IAAI2Q,EAAE,IAAIwuC,GAAG//C,EAAEY,EAAEkpB,WAAW9pB,EAAEu+C,WAAW,CAAC,IAAI19C,EAAEb,EAAE2T,OAAOm+C,UAAUvwD,KAAKmvD,kBAAkBn/C,EAAEojB,IAAI9zB,GAAG,OAAO0Q,GAAGqmD,GAAG/zD,UAAUm0D,eAAe,SAASp3D,EAAE2Q,GAAG,IAAI,IAAIvR,EAAEuR,EAAEuY,WAAW9pB,EAAEu+C,WAAW,CAAC,IAAI19C,EAAEb,EAAE2T,OAAO,GAAG,OAAO9S,EAAE+wD,WAAW,CAAC,IAAIruC,EAAEhiB,KAAK02D,uBAAuBp3D,EAAED,GAAG,GAAG,OAAO2iB,EAAE,MAAM,IAAI8pC,GAAG,mCAAmCxsD,EAAEqyC,cAAc,IAAIryC,EAAEgxD,SAAStuC,MAAMq0C,GAAG/zD,UAAUq0D,sBAAsB,SAASt3D,EAAE2Q,EAAEvR,GAAG,IAAI,IAAIa,EAAE,IAAIk/C,GAAGx8B,EAAE3iB,EAAEkpB,WAAWvG,EAAEg7B,WAAW,CAAC,IAAIpuB,EAAE5M,EAAE5P,OAAO,GAAGwc,EAAEwhC,mBAAmB,EAAE,CAACxhC,EAAEkiC,uCAAuC,IAAIhyD,EAAE8vB,EAAEgiC,oBAAoBlxD,EAAEM,KAAK42D,UAAU93D,GAAG,OAAOY,GAAGM,KAAK62D,kBAAkBn3D,EAAEZ,GAAGkR,EAAEojB,IAAI1zB,IAAIjB,EAAE+sC,OAAO1sC,QAAQQ,EAAE8zB,IAAIxE,GAAG,OAAOtvB,GAAG+2D,GAAG/zD,UAAU2tD,cAAc,SAAS5wD,GAAG,IAAI,IAAI2Q,EAAEhQ,KAAKs2D,WAAW/tC,WAAWvY,EAAEgtC,WAAY,GAAGhtC,EAAEoC,OAAO69C,cAAc5wD,GAAG,OAAM,EAAG,OAAM,GAAIg3D,GAAG/zD,UAAUw0D,sBAAsB,SAASz3D,GAAG,IAAI,IAAI2Q,EAAE,IAAIwuC,GAAG//C,EAAEY,EAAEkpB,WAAW9pB,EAAEu+C,WAAW,CAAC,IAAI19C,EAAEb,EAAE2T,OAAO,GAAG9S,EAAEi6B,cAAcj6B,EAAEkwD,WAAWtB,UAAU,OAAO5uD,EAAEiwD,cAAc,CAAC,IAAIvtC,EAAE,IAAI2uC,GAAGrxD,EAAEU,KAAKmvD,kBAAkBn/C,EAAEojB,IAAIpR,GAAGA,EAAEsrC,eAAe,OAAOt9C,GAAGqmD,GAAG/zD,UAAUu0D,kBAAkB,SAASx3D,EAAE2Q,GAAG,IAAI,IAAIvR,EAAEuR,EAAEuY,WAAW9pB,EAAEu+C,WAAW,CAAC,IAAI19C,EAAEb,EAAE2T,OAAO9S,EAAE0wD,UAAU1wD,EAAEgxD,SAASjxD,KAAKg3D,GAAG/zD,UAAUy0D,YAAY,WAAW,OAAO/2D,KAAKw2D,gBAAgBx2D,KAAKs2D,aAAaD,GAAG/zD,UAAUo0D,uBAAuB,SAASr3D,EAAE2Q,GAAG,IAAI,IAAIvR,EAAEY,EAAEwwD,gBAAgBvwD,EAAEb,EAAE+9C,sBAAsBx6B,EAAEvjB,EAAEolD,eAAe,GAAGj1B,EAAE,KAAK9vB,EAAE,KAAKY,EAAEsQ,EAAEuY,WAAW7oB,EAAEs9C,WAAW,CAAC,IAAIvW,EAAE/mC,EAAE0S,OAAOrG,EAAE06B,EAAEopB,gBAAgBl9C,EAAE5G,EAAEywC,sBAAsB,OAAO5tB,IAAI9vB,EAAE8vB,EAAEihC,gBAAgBrT,uBAAuB,IAAIx7C,GAAE,EAAG2R,EAAE7Q,SAASxC,IAAI80B,GAAG8lB,cAAcl4B,EAAEjW,EAAEy2C,oBAAoBxhD,GAAE,GAAIA,IAAI,OAAO4tB,GAAG9vB,EAAEgD,SAAS6Q,MAAMic,EAAE6X,GAAG,OAAO7X,GAAGynC,GAAG/zD,UAAUs0D,UAAU,SAASv3D,GAAG,IAAI,IAAI2Q,EAAE,EAAEvR,EAAE,KAAKa,EAAED,EAAEkpB,WAAWjpB,EAAE09C,WAAW,CAAC,IAAIh7B,EAAE1iB,EAAE8S,OAAO4P,EAAEguC,WAAWvxD,EAAEujB,EAAEhS,KAAK,OAAOgmC,GAAGE,OAAOlmC,GAAG,EAAE,4CAA4CvR,GAAG43D,GAAG/zD,UAAU8wB,IAAI,WAAW,GAAG,IAAIjjB,UAAU5R,OAAO,CAAC,IAAIc,EAAE8Q,UAAU,GAAGnQ,KAAKozB,IAAI/zB,EAAEy2D,cAAcz2D,EAAEmuD,iBAAiB,GAAG,IAAIr9C,UAAU5R,OAAO,CAAC,IAAIyR,EAAEG,UAAU,GAAG1R,EAAE0R,UAAU,GAAGilD,GAAGK,wBAAwBh3D,GAAG,IAAIa,EAAEU,KAAK82D,sBAAsB9mD,GAAGgS,EAAE,IAAIw8B,GAAG5vB,EAAE5uB,KAAK22D,sBAAsBr3D,EAAEU,KAAKs2D,WAAWt0C,GAAGhiB,KAAKu2D,mBAAmB3nC,EAAE5uB,KAAKs2D,WAAWt0C,GAAGhiB,KAAKy2D,eAAez2D,KAAKs2D,WAAWt0C,KAAKq0C,GAAG/zD,UAAUqpC,YAAY,WAAW,MAAM,IAAI0qB,GAAG/zD,UAAUspC,SAAS,WAAW,OAAOyqB,IAAI,IAAIW,GAAG,aAAaA,GAAG10D,UAAU20D,UAAU,aAAaD,GAAG10D,UAAUqpC,YAAY,WAAW,MAAM,IAAIqrB,GAAG10D,UAAUspC,SAAS,WAAW,OAAOorB,IAAI,IAAIE,GAAG,WAAWl3D,KAAKm3D,QAAQ,KAAKn3D,KAAKo3D,MAAM,KAAK,IAAI/3D,EAAE8Q,UAAU,GAAGH,EAAEG,UAAU,GAAGnQ,KAAKm3D,QAAQ93D,EAAEW,KAAKo3D,MAAMpnD,GAAGknD,GAAG50D,UAAU+0D,QAAQ,WAAW,OAAOr3D,KAAKo3D,OAAOF,GAAG50D,UAAU20D,UAAU,WAAW,OAAOj3D,KAAKm3D,SAASD,GAAG50D,UAAUqpC,YAAY,WAAW,MAAM,CAACqrB,GAAGhnD,IAAIknD,GAAG50D,UAAUspC,SAAS,WAAW,OAAOsrB,IAAI,IAAII,GAAG,WAAWt3D,KAAKkzB,MAAM,KAAKlzB,KAAKu3D,OAAO,KAAKv3D,KAAKkzB,MAAM,EAAElzB,KAAKu3D,OAAO,IAAI/Y,GAAGx+C,KAAKu3D,OAAOnkC,IAAI,OAAOkkC,GAAGh1D,UAAUk1D,KAAK,WAAW,GAAGx3D,KAAKg1B,UAAU,OAAO,KAAK,IAAI31B,EAAEW,KAAKu3D,OAAO3vC,IAAI,GAAG,OAAO5nB,KAAKu3D,OAAOr8C,IAAI,EAAElb,KAAKu3D,OAAO3vC,IAAI5nB,KAAKkzB,QAAQlzB,KAAKkzB,OAAO,EAAElzB,KAAKy3D,QAAQ,GAAGp4D,GAAGi4D,GAAGh1D,UAAUmyB,KAAK,WAAW,OAAOz0B,KAAKkzB,OAAOokC,GAAGh1D,UAAUm1D,QAAQ,SAASp4D,GAAG,IAAI,IAAI2Q,EAAE,KAAKvR,EAAEuB,KAAKu3D,OAAO3vC,IAAIvoB,GAAG,EAAEA,GAAGW,KAAKkzB,SAASljB,EAAE,EAAE3Q,KAAKW,KAAKkzB,OAAOlzB,KAAKu3D,OAAO3vC,IAAI5X,EAAE,GAAG88B,UAAU9sC,KAAKu3D,OAAO3vC,IAAI5X,IAAI,GAAGA,IAAIhQ,KAAKu3D,OAAO3vC,IAAI5X,GAAG88B,UAAUruC,GAAG,GAAGY,EAAE2Q,EAAEhQ,KAAKu3D,OAAOr8C,IAAI7b,EAAEW,KAAKu3D,OAAO3vC,IAAI5X,IAAIhQ,KAAKu3D,OAAOr8C,IAAI7b,EAAEZ,IAAI64D,GAAGh1D,UAAUjC,MAAM,WAAWL,KAAKkzB,MAAM,EAAElzB,KAAKu3D,OAAOl3D,SAASi3D,GAAGh1D,UAAU0yB,QAAQ,WAAW,OAAO,IAAIh1B,KAAKkzB,OAAOokC,GAAGh1D,UAAU8wB,IAAI,SAAS/zB,GAAGW,KAAKu3D,OAAOnkC,IAAI,MAAMpzB,KAAKkzB,OAAO,EAAE,IAAIljB,EAAEhQ,KAAKkzB,MAAM,IAAIlzB,KAAKu3D,OAAOr8C,IAAI,EAAE7b,GAAGA,EAAEytC,UAAU9sC,KAAKu3D,OAAO3vC,IAAIhpB,KAAK8sC,MAAM17B,EAAE,KAAK,EAAEA,GAAG,EAAEhQ,KAAKu3D,OAAOr8C,IAAIlL,EAAEhQ,KAAKu3D,OAAO3vC,IAAIhpB,KAAK8sC,MAAM17B,EAAE,KAAKhQ,KAAKu3D,OAAOr8C,IAAIlL,EAAE3Q,IAAIi4D,GAAGh1D,UAAUqpC,YAAY,WAAW,MAAM,IAAI2rB,GAAGh1D,UAAUspC,SAAS,WAAW,OAAO0rB,IAAI,IAAII,GAAG,aAAaA,GAAGp1D,UAAUq1D,UAAU,SAASt4D,KAAKq4D,GAAGp1D,UAAUqpC,YAAY,WAAW,MAAM,IAAI+rB,GAAGp1D,UAAUspC,SAAS,WAAW,OAAO8rB,IAAI,IAAIE,GAAG,aAAaA,GAAGt1D,UAAUU,OAAO,SAAS3D,EAAE2Q,KAAK4nD,GAAGt1D,UAAUgB,OAAO,SAASjE,EAAE2Q,KAAK4nD,GAAGt1D,UAAUu1D,MAAM,aAAaD,GAAGt1D,UAAUqpC,YAAY,WAAW,MAAM,IAAIisB,GAAGt1D,UAAUspC,SAAS,WAAW,OAAOgsB,IAAI,IAAIE,GAAG,WAAW,GAAG93D,KAAK+3D,iBAAiB,IAAIvZ,GAAGx+C,KAAKm3D,QAAQ,KAAKn3D,KAAKg4D,OAAO,KAAK,IAAI7nD,UAAU5R,aAAa,GAAG,IAAI4R,UAAU5R,OAAO,CAAC,IAAIc,EAAE8Q,UAAU,GAAGnQ,KAAKg4D,OAAO34D,IAAI44D,GAAG,CAAC5rB,iBAAiB,CAACh8B,cAAa,IAAKynD,GAAGx1D,UAAU41D,SAAS,WAAW,OAAOl4D,KAAKg4D,QAAQF,GAAGx1D,UAAUmyB,KAAK,WAAW,OAAOz0B,KAAK+3D,iBAAiBtjC,QAAQqjC,GAAGx1D,UAAU61D,mBAAmB,WAAW,OAAOn4D,KAAK+3D,kBAAkBD,GAAGx1D,UAAU81D,kBAAkB,SAAS/4D,GAAG22C,GAAGE,OAAO,OAAOl2C,KAAKm3D,SAASn3D,KAAK+3D,iBAAiB3kC,IAAI/zB,IAAIy4D,GAAGx1D,UAAU0yB,QAAQ,WAAW,OAAOh1B,KAAK+3D,iBAAiB/iC,WAAW8iC,GAAGx1D,UAAU20D,UAAU,WAAW,OAAO,OAAOj3D,KAAKm3D,UAAUn3D,KAAKm3D,QAAQn3D,KAAKq4D,iBAAiBr4D,KAAKm3D,SAASW,GAAGx1D,UAAUqpC,YAAY,WAAW,MAAM,CAACqrB,GAAGhnD,IAAI8nD,GAAGx1D,UAAUspC,SAAS,WAAW,OAAOksB,IAAIG,GAAG5rB,iBAAiBzkB,IAAI,WAAW,OAAO,oBAAoBlf,OAAOyP,iBAAiB2/C,GAAGG,IAAI,IAAIK,GAAG,aAAaA,GAAGC,aAAa,WAAW,MAAM,CAACl6D,QAAQ,SAASgB,EAAE2Q,GAAG,OAAOA,EAAE88B,UAAUztC,MAAMi5D,GAAGl5D,IAAI,SAASC,GAAG,OAAOi5D,GAAGxyD,KAAKzG,GAAGA,EAAEuoB,IAAI,IAAI0wC,GAAGxyD,KAAK,SAASzG,EAAE2Q,GAAG,IAAIvR,EAAEY,EAAEg/C,UAAUruC,EAAEoxC,GAAGt7C,KAAKrH,EAAEuR,GAAGoxC,GAAGt7C,KAAKrH,GAAG,IAAI,IAAIa,EAAED,EAAEkpB,WAAWvG,EAAE,EAAE4M,EAAEnwB,EAAEF,OAAOyjB,EAAE4M,EAAE5M,IAAI1iB,EAAE8S,OAAO9S,EAAE4b,IAAIzc,EAAEujB,KAAKs2C,GAAGE,cAAc,SAASn5D,GAAG,IAAI2Q,EAAE,IAAIwuC,GAAG,OAAOxuC,EAAEojB,IAAI/zB,GAAG2Q,GAAG,IAAIyoD,GAAG,WAAWz4D,KAAK04D,YAAY,KAAK14D,KAAK24D,YAAY,KAAK34D,KAAK44D,UAAU,KAAK54D,KAAK64D,cAAc,KAAK,IAAIx5D,EAAE8Q,UAAU,GAAGH,EAAEG,UAAU,GAAG1R,EAAE0R,UAAU,GAAGnQ,KAAK04D,YAAYr5D,EAAEW,KAAK24D,YAAY3oD,EAAEhQ,KAAK64D,cAAcp6D,EAAEuB,KAAK44D,UAAU54D,KAAKqI,YAAYowD,GAAGn2D,UAAUw2D,cAAc,SAASz5D,EAAE2Q,GAAG,IAAIvR,EAAEg6D,GAAGM,YAAY/4D,KAAK04D,aAAap5D,EAAEm5D,GAAGM,YAAY/4D,KAAK24D,aAAa,GAAGl6D,GAAGa,EAAE,OAAOm5D,GAAG5zD,KAAK7E,KAAK04D,aAAaD,GAAG5zD,KAAK7E,KAAK24D,cAAc34D,KAAKg5D,OAAOh5D,KAAK04D,YAAY14D,KAAK24D,YAAYt5D,EAAE2Q,GAAG,OAAOhQ,KAAKg5D,OAAOh5D,KAAK24D,YAAY34D,KAAK04D,YAAYr5D,EAAE2Q,GAAG,MAAM,GAAGvR,EAAE,OAAOuB,KAAKg5D,OAAOh5D,KAAK04D,YAAY14D,KAAK24D,YAAYt5D,EAAE2Q,GAAG,KAAK,GAAG1Q,EAAE,OAAOU,KAAKg5D,OAAOh5D,KAAK24D,YAAY34D,KAAK04D,YAAYr5D,EAAE2Q,GAAG,KAAK,MAAM,IAAItR,EAAE,mCAAmC+5D,GAAGn2D,UAAU22D,SAAS,WAAW,QAAQR,GAAGM,YAAY/4D,KAAK04D,cAAcD,GAAGM,YAAY/4D,KAAK24D,eAAeF,GAAGn2D,UAAUwqC,UAAU,SAASztC,GAAG,IAAI2Q,EAAE3Q,EAAE,OAAOW,KAAK44D,UAAU5oD,EAAE4oD,WAAW,EAAE54D,KAAK44D,UAAU5oD,EAAE4oD,UAAU,EAAE,GAAGH,GAAGn2D,UAAU02D,OAAO,SAAS35D,EAAE2Q,EAAEvR,EAAEa,GAAG,IAAI,IAAI0iB,EAAE3iB,EAAE84D,qBAAqB5vC,WAAWvG,EAAEg7B,WAAW,CAAC,IAAIpuB,EAAE5M,EAAE5P,OAAOtT,EAAE,IAAI25D,GAAG7pC,EAAE5e,EAAEhQ,KAAK64D,eAAe/5D,EAAEo6D,cAAc55D,GAAGb,EAAE20B,IAAIt0B,KAAK25D,GAAGn2D,UAAU62D,aAAa,SAAS95D,GAAG,OAAO,IAAIA,EAAEW,KAAK04D,YAAY14D,KAAK24D,aAAaF,GAAGn2D,UAAU42D,YAAY,WAAW,OAAOl5D,KAAK44D,WAAWH,GAAGn2D,UAAU+F,SAAS,WAAW,OAAOrI,KAAKi5D,WAAWj5D,KAAK64D,cAAcxwD,SAASrI,KAAK04D,YAAY14D,KAAK24D,aAAa34D,KAAK04D,YAAYzB,YAAY5uD,SAASrI,KAAK24D,YAAY1B,cAAcwB,GAAGn2D,UAAUqpC,YAAY,WAAW,MAAM,CAAC/D,IAAI6wB,GAAGn2D,UAAUspC,SAAS,WAAW,OAAO6sB,IAAIA,GAAG5zD,KAAK,SAASxF,GAAG,OAAOA,EAAE43D,YAAYzkB,WAAWimB,GAAGM,YAAY,SAAS15D,GAAG,OAAOA,aAAay4D,IAAI,IAAIsB,GAAG,SAAS/5D,IAAI,GAAGW,KAAKizB,MAAM,KAAKjzB,KAAKq5D,QAAO,EAAGr5D,KAAKs5D,gBAAgB,IAAI9a,GAAGx+C,KAAKu5D,cAAc,KAAK,IAAIppD,UAAU5R,OAAO,CAAC,IAAIyR,EAAE3Q,EAAEm6D,sBAAsBx5D,KAAKu5D,cAAcvpD,OAAO,GAAG,IAAIG,UAAU5R,OAAO,CAAC,IAAIE,EAAE0R,UAAU,GAAG6lC,GAAGE,OAAOz3C,EAAE,EAAE,wCAAwCuB,KAAKu5D,cAAc96D,IAAIg7D,GAAG,CAACC,aAAa,CAACrpD,cAAa,GAAIg8B,iBAAiB,CAACh8B,cAAa,GAAImpD,sBAAsB,CAACnpD,cAAa,IAAK+oD,GAAG92D,UAAUq3D,gBAAgB,WAAW,OAAO35D,KAAKu5D,eAAeH,GAAG92D,UAAUs3D,SAAS,SAASv6D,GAAG,OAAOA,EAAEuoB,IAAIvoB,EAAEo1B,OAAO,IAAI2kC,GAAG92D,UAAUmyB,KAAK,WAAW,GAAG,IAAItkB,UAAU5R,OAAO,OAAOyB,KAAKg1B,UAAU,GAAGh1B,KAAK65D,QAAQ75D,KAAKy0B,KAAKz0B,KAAKizB,QAAQ,GAAG,IAAI9iB,UAAU5R,OAAO,CAAC,IAAI,IAAIc,EAAE,EAAE2Q,EAAEG,UAAU,GAAGgoD,qBAAqB5vC,WAAWvY,EAAEgtC,WAAW,CAAC,IAAIv+C,EAAEuR,EAAEoC,OAAO3T,aAAaq5D,GAAGz4D,GAAGW,KAAKy0B,KAAKh2B,GAAGA,aAAay4D,KAAK73D,GAAG,GAAG,OAAOA,IAAI+5D,GAAG92D,UAAUw3D,WAAW,SAASz6D,EAAE2Q,GAAG,IAAI,IAAIvR,EAAE,KAAKa,EAAED,EAAE84D,qBAAqB5vC,WAAWjpB,EAAE09C,WAAW,CAAC,IAAIh7B,EAAE1iB,EAAE8S,OAAO4P,aAAak1C,IAAIl1C,EAAEq1C,YAAYrnD,IAAIvR,EAAEujB,GAAG,OAAO,OAAOvjB,IAAIY,EAAE84D,qBAAqB70D,OAAO7E,IAAG,IAAK26D,GAAG92D,UAAUy3D,UAAU,WAAW,GAAG,IAAI5pD,UAAU5R,OAAO,CAACyB,KAAK65D,QAAQ,IAAIx6D,EAAEW,KAAK+5D,UAAU/5D,KAAKizB,OAAO,OAAO,OAAO5zB,EAAE,IAAIm/C,GAAGn/C,EAAE,GAAG,IAAI8Q,UAAU5R,OAAO,CAAC,IAAI,IAAIyR,EAAEG,UAAU,GAAG1R,EAAE,IAAI+/C,GAAGl/C,EAAE0Q,EAAEmoD,qBAAqB5vC,WAAWjpB,EAAE09C,WAAW,CAAC,IAAIh7B,EAAE1iB,EAAE8S,OAAO,GAAG4P,aAAa81C,GAAG,CAAC,IAAIlpC,EAAE5uB,KAAK+5D,UAAU/3C,GAAG,OAAO4M,GAAGnwB,EAAE20B,IAAIxE,QAAQ5M,aAAak1C,GAAGz4D,EAAE20B,IAAIpR,EAAEq1C,WAAWrhB,GAAGC,uBAAuB,OAAOx3C,EAAEg2B,QAAQ,EAAE,KAAKh2B,IAAI26D,GAAG92D,UAAUU,OAAO,SAAS3D,EAAE2Q,GAAGgmC,GAAGE,QAAQl2C,KAAKq5D,OAAO,0EAA0Er5D,KAAKs5D,gBAAgBlmC,IAAI,IAAI8jC,GAAG73D,EAAE2Q,KAAKopD,GAAG92D,UAAU03D,kBAAkB,WAAW,GAAG,IAAI7pD,UAAU5R,OAAO,CAAC,IAAIc,EAAE8Q,UAAU,GAAGH,EAAE,IAAIwuC,GAAG,OAAOx+C,KAAKg6D,kBAAkB36D,EAAEW,KAAKizB,MAAMjjB,GAAGA,EAAE,GAAG,IAAIG,UAAU5R,OAAO,CAAC,IAAIE,EAAE0R,UAAU,GAAG7Q,EAAE6Q,UAAU,GAAG6R,EAAE7R,UAAU,GAAG,GAAG6lC,GAAGE,OAAOz3C,GAAG,GAAGa,EAAE44D,aAAaz5D,EAAE,OAAOujB,EAAEoR,IAAI9zB,GAAG,KAAK,IAAI,IAAIsvB,EAAEtvB,EAAE64D,qBAAqB5vC,WAAWqG,EAAEouB,WAAW,CAAC,IAAIl+C,EAAE8vB,EAAExc,OAAOtT,aAAag5D,GAAG93D,KAAKg6D,kBAAkBv7D,EAAEK,EAAEkjB,IAAIg0B,GAAGE,OAAOp3C,aAAao4D,KAAK,IAAIz4D,GAAGujB,EAAEoR,IAAIt0B,IAAI,OAAO,OAAOs6D,GAAG92D,UAAUu1D,MAAM,WAAW,GAAG,IAAI1nD,UAAU5R,OAAO,CAAC,IAAIc,EAAE8Q,UAAU,GAAGnQ,KAAK65D,QAAQ,IAAI7pD,EAAE,IAAIwuC,GAAG,OAAOx+C,KAAKg1B,WAAah1B,KAAKi6D,kBAAkBl4D,WAAW/B,KAAKizB,MAAMgkC,YAAY53D,IAAIW,KAAK63D,MAAMx4D,EAAEW,KAAKizB,MAAMjjB,GAAxFA,EAA8F,GAAG,IAAIG,UAAU5R,OAAO,CAAC,IAAIE,EAAE0R,UAAU,GAAG7Q,EAAE6Q,UAAU,GAAG,GAAGnQ,KAAK65D,QAAQ75D,KAAKg1B,UAAU,OAAO,KAAKh1B,KAAKi6D,kBAAkBl4D,WAAW/B,KAAKizB,MAAMgkC,YAAYx4D,IAAIuB,KAAK63D,MAAMp5D,EAAEuB,KAAKizB,MAAM3zB,QAAQ,GAAG,IAAI6Q,UAAU5R,OAAO,GAAGmvC,EAAEv9B,UAAU,GAAGunD,KAAKvnD,UAAU,aAAazH,QAAQyH,UAAU,aAAa2nD,GAAG,IAAI,IAAI91C,EAAE7R,UAAU,GAAkBrR,EAAEqR,UAAU,GAAGzQ,EAA5ByQ,UAAU,GAAsBgoD,qBAAqB1xB,EAAE,EAAEA,EAAE/mC,EAAE+0B,OAAOgS,IAAI,CAAC,IAAI16B,EAAErM,EAAEkoB,IAAI6e,GAAGzmC,KAAKi6D,kBAAkBl4D,WAAWgK,EAAEkrD,YAAYj1C,KAAKjW,aAAa+rD,GAAG93D,KAAK63D,MAAM71C,EAAEjW,EAAEjN,GAAGiN,aAAamrD,GAAGp4D,EAAE64D,UAAU5rD,EAAEsrD,WAAWrhB,GAAGC,6BAA6B,GAAGvI,EAAEv9B,UAAU,GAAGouC,KAAKpuC,UAAU,aAAazH,QAAQyH,UAAU,aAAa2nD,GAAG,IAAI,IAAInlD,EAAExC,UAAU,GAAkBq2B,EAAEr2B,UAAU,GAAGgL,EAA5BhL,UAAU,GAAsBgoD,qBAAqBnrD,EAAE,EAAEA,EAAEmO,EAAEsZ,OAAOznB,IAAI,CAAC,IAAI4F,EAAEuI,EAAEyM,IAAI5a,GAAGhN,KAAKi6D,kBAAkBl4D,WAAW6Q,EAAEqkD,YAAYtkD,KAAKC,aAAaklD,GAAG93D,KAAK63D,MAAMllD,EAAEC,EAAE4zB,GAAG5zB,aAAaskD,GAAG1wB,EAAEpT,IAAIxgB,EAAEykD,WAAWrhB,GAAGC,0BAA0BmjB,GAAG92D,UAAUu3D,MAAM,WAAW,GAAG75D,KAAKq5D,OAAO,OAAO,KAAKr5D,KAAKizB,MAAMjzB,KAAKs5D,gBAAgBtkC,UAAUh1B,KAAKkB,WAAW,GAAGlB,KAAKk6D,mBAAmBl6D,KAAKs5D,iBAAiB,GAAGt5D,KAAKs5D,gBAAgB,KAAKt5D,KAAKq5D,QAAO,GAAID,GAAG92D,UAAU63D,QAAQ,WAAW,OAAOn6D,KAAK65D,QAAQ75D,KAAKizB,OAAOmmC,GAAG92D,UAAUgB,OAAO,WAAW,GAAG,IAAI6M,UAAU5R,OAAO,CAAC,IAAIc,EAAE8Q,UAAU,GAAGH,EAAEG,UAAU,GAAG,OAAOnQ,KAAK65D,UAAU75D,KAAKi6D,kBAAkBl4D,WAAW/B,KAAKizB,MAAMgkC,YAAY53D,IAAIW,KAAKsD,OAAOjE,EAAEW,KAAKizB,MAAMjjB,GAAG,GAAG,IAAIG,UAAU5R,OAAO,CAAC,IAAIE,EAAE0R,UAAU,GAAG7Q,EAAE6Q,UAAU,GAAG6R,EAAE7R,UAAU,GAAGye,EAAE5uB,KAAK85D,WAAWx6D,EAAE0iB,GAAG,GAAG4M,EAAE,OAAM,EAAG,IAAI,IAAI9vB,EAAE,KAAKY,EAAEJ,EAAE64D,qBAAqB5vC,WAAW7oB,EAAEs9C,WAAW,CAAC,IAAIvW,EAAE/mC,EAAE0S,OAAO,GAAGpS,KAAKi6D,kBAAkBl4D,WAAW0kC,EAAEwwB,YAAYx4D,IAAKgoC,aAAaqxB,KAAKlpC,EAAE5uB,KAAKsD,OAAO7E,EAAEgoC,EAAEzkB,IAAK,CAACljB,EAAE2nC,EAAE,OAAO,OAAO,OAAO3nC,GAAGA,EAAEq5D,qBAAqBnjC,WAAW11B,EAAE64D,qBAAqB70D,OAAOxE,GAAG8vB,IAAIwqC,GAAG92D,UAAU43D,mBAAmB,SAAS76D,EAAE2Q,GAAGgmC,GAAGE,QAAQ72C,EAAE21B,WAAW,IAAIv2B,EAAEuB,KAAKo6D,uBAAuB/6D,EAAE2Q,EAAE,GAAG,OAAO,IAAIvR,EAAEg2B,OAAOh2B,EAAEmpB,IAAI,GAAG5nB,KAAKk6D,mBAAmBz7D,EAAEuR,EAAE,IAAIopD,GAAG92D,UAAU+3D,MAAM,WAAW,GAAG,IAAIlqD,UAAU5R,OAAO,OAAOyB,KAAKg1B,UAAU,GAAGh1B,KAAK65D,QAAQ75D,KAAKq6D,MAAMr6D,KAAKizB,QAAQ,GAAG,IAAI9iB,UAAU5R,OAAO,CAAC,IAAI,IAAIc,EAAE,EAAE2Q,EAAEG,UAAU,GAAGgoD,qBAAqB5vC,WAAWvY,EAAEgtC,WAAW,CAAC,IAAIv+C,EAAEuR,EAAEoC,OAAO,GAAG3T,aAAaq5D,GAAG,CAAC,IAAIx4D,EAAEU,KAAKq6D,MAAM57D,GAAGa,EAAED,IAAIA,EAAEC,IAAI,OAAOD,EAAE,IAAI+5D,GAAG92D,UAAU83D,uBAAuB,SAAS/6D,EAAE2Q,GAAGgmC,GAAGE,QAAQ72C,EAAE21B,WAAW,IAAIv2B,EAAE,IAAI+/C,GAAG//C,EAAE20B,IAAIpzB,KAAKkB,WAAW8O,IAAI,IAAI1Q,EAAE,IAAIk/C,GAAGn/C,GAAGi5D,GAAGxyD,KAAKxG,EAAEU,KAAKs6D,iBAAiB,IAAI,IAAIt4C,EAAE1iB,EAAEipB,WAAWvG,EAAEg7B,WAAW,CAAC,IAAIpuB,EAAE5M,EAAE5P,OAAOpS,KAAK45D,SAASn7D,GAAG05D,qBAAqB1jC,SAASz0B,KAAK25D,mBAAmBl7D,EAAE20B,IAAIpzB,KAAKkB,WAAW8O,IAAIhQ,KAAK45D,SAASn7D,GAAG25D,kBAAkBxpC,GAAG,OAAOnwB,GAAG26D,GAAG92D,UAAU0yB,QAAQ,WAAW,OAAOh1B,KAAKq5D,OAAOr5D,KAAKizB,MAAM+B,UAAUh1B,KAAKs5D,gBAAgBtkC,WAAWokC,GAAG92D,UAAUqpC,YAAY,WAAW,MAAM,CAAC37B,IAAIopD,GAAG92D,UAAUspC,SAAS,WAAW,OAAOwtB,IAAIA,GAAGmB,eAAe,SAASl7D,EAAE2Q,GAAG,OAAO3Q,EAAE2Q,EAAE,EAAE3Q,EAAE2Q,GAAG,EAAE,GAAGypD,GAAGC,aAAa9xC,IAAI,WAAW,OAAO4yC,IAAIf,GAAGptB,iBAAiBzkB,IAAI,WAAW,OAAO,oBAAoB6xC,GAAGD,sBAAsB5xC,IAAI,WAAW,OAAO,IAAIlf,OAAOyP,iBAAiBihD,GAAGK,IAAI,IAAIe,GAAG,aAAaC,GAAG,aAAaA,GAAGn4D,UAAU+F,SAAS,SAAShJ,EAAE2Q,KAAKyqD,GAAGn4D,UAAUqpC,YAAY,WAAW,MAAM,IAAI8uB,GAAGn4D,UAAUspC,SAAS,WAAW,OAAO6uB,IAAI,IAAIC,GAAG,SAASr7D,GAAG,SAASZ,EAAEuR,GAAGA,EAAEA,GAAGvR,EAAE+6D,sBAAsBn6D,EAAEuQ,KAAK5P,KAAKgQ,GAAG3Q,IAAIZ,EAAEupB,UAAU3oB,IAAIZ,EAAE6D,UAAUoG,OAAOojC,OAAOzsC,GAAGA,EAAEiD,YAAYkJ,YAAY/M,EAAE,IAAIa,EAAE,CAACq7D,YAAY,CAACtqD,cAAa,GAAIg8B,iBAAiB,CAACh8B,cAAa,GAAIuqD,YAAY,CAACvqD,cAAa,GAAIwqD,YAAY,CAACxqD,cAAa,GAAIyqD,aAAa,CAACzqD,cAAa,GAAImpD,sBAAsB,CAACnpD,cAAa,IAAK,OAAO5R,EAAE6D,UAAUy4D,yCAAyC,SAAS17D,EAAE2Q,GAAGgmC,GAAGE,OAAO72C,EAAEd,OAAO,GAAG,IAAI,IAAIE,EAAE,IAAI+/C,GAAGl/C,EAAE,EAAEA,EAAED,EAAEd,OAAOe,IAAIb,EAAE+sC,OAAOxrC,KAAKg7D,wCAAwC37D,EAAEC,GAAG0Q,IAAI,OAAOvR,GAAGA,EAAE6D,UAAUpB,WAAW,SAAS7B,GAAG,OAAO,IAAIqjB,GAAGrjB,IAAIZ,EAAE6D,UAAUmyB,KAAK,WAAW,OAAO,IAAItkB,UAAU5R,OAAOc,EAAEiD,UAAUmyB,KAAK7kB,KAAK5P,MAAMX,EAAEiD,UAAUmyB,KAAKvwB,MAAMlE,KAAKmQ,YAAY1R,EAAE6D,UAAUU,OAAO,WAAW,GAAG,IAAImN,UAAU5R,OAAO,OAAOc,EAAEiD,UAAUU,OAAOkB,MAAMlE,KAAKmQ,WAAW,IAAIH,EAAEG,UAAU,GAAG1R,EAAE0R,UAAU,GAAG,GAAGH,EAAE2iC,SAAS,OAAO,KAAKtzC,EAAEiD,UAAUU,OAAO4M,KAAK5P,KAAKgQ,EAAEvR,IAAIA,EAAE6D,UAAU23D,gBAAgB,WAAW,OAAOx7D,EAAEq8D,cAAcr8D,EAAE6D,UAAU24D,eAAe,SAAS57D,EAAE2Q,GAAG,IAAI,IAAIvR,EAAEG,KAAK8sC,MAAM9sC,KAAKuB,KAAKd,EAAEo1B,OAAOzkB,IAAI1Q,EAAE,IAAI2H,MAAM+I,GAAG8gC,KAAK,MAAM9uB,EAAE3iB,EAAEkpB,WAAWqG,EAAE,EAAEA,EAAE5e,EAAE4e,IAAI,CAACtvB,EAAEsvB,GAAG,IAAI4vB,GAAG,IAAI,IAAI1/C,EAAE,EAAEkjB,EAAEg7B,WAAWl+C,EAAEL,GAAG,CAAC,IAAIiB,EAAEsiB,EAAE5P,OAAO9S,EAAEsvB,GAAGwE,IAAI1zB,GAAGZ,KAAK,OAAOQ,GAAGb,EAAE6D,UAAUu1D,MAAM,WAAW,GAAG,IAAI1nD,UAAU5R,OAAO,CAAC,IAAIyR,EAAEG,UAAU,GAAG,OAAO9Q,EAAEiD,UAAUu1D,MAAMjoD,KAAK5P,KAAKgQ,GAAG,GAAG,IAAIG,UAAU5R,OAAO,CAAC,IAAIE,EAAE0R,UAAU,GAAG7Q,EAAE6Q,UAAU,GAAG9Q,EAAEiD,UAAUu1D,MAAMjoD,KAAK5P,KAAKvB,EAAEa,QAAQ,GAAG,IAAI6Q,UAAU5R,OAAO,GAAGmvC,EAAEv9B,UAAU,GAAGunD,KAAKvnD,UAAU,aAAazH,QAAQyH,UAAU,aAAa2nD,GAAG,CAAC,IAAI91C,EAAE7R,UAAU,GAAGye,EAAEze,UAAU,GAAGrR,EAAEqR,UAAU,GAAG9Q,EAAEiD,UAAUu1D,MAAMjoD,KAAK5P,KAAKgiB,EAAE4M,EAAE9vB,QAAQ,GAAG4uC,EAAEv9B,UAAU,GAAGouC,KAAKpuC,UAAU,aAAazH,QAAQyH,UAAU,aAAa2nD,GAAG,CAAC,IAAIp4D,EAAEyQ,UAAU,GAAGs2B,EAAEt2B,UAAU,GAAGpE,EAAEoE,UAAU,GAAG9Q,EAAEiD,UAAUu1D,MAAMjoD,KAAK5P,KAAKN,EAAE+mC,EAAE16B,KAAKtN,EAAE6D,UAAUg4D,cAAc,WAAW,OAAO77D,EAAEo8D,aAAap8D,EAAE6D,UAAU04D,wCAAwC,SAAShrD,EAAEvR,GAAG,OAAOY,EAAEiD,UAAU83D,uBAAuBxqD,KAAK5P,KAAKgQ,EAAEvR,IAAIA,EAAE6D,UAAUgB,OAAO,WAAW,GAAG,IAAI6M,UAAU5R,OAAO,CAAC,IAAIyR,EAAEG,UAAU,GAAG1R,EAAE0R,UAAU,GAAG,OAAO9Q,EAAEiD,UAAUgB,OAAOsM,KAAK5P,KAAKgQ,EAAEvR,GAAG,OAAOY,EAAEiD,UAAUgB,OAAOY,MAAMlE,KAAKmQ,YAAY1R,EAAE6D,UAAU+3D,MAAM,WAAW,OAAO,IAAIlqD,UAAU5R,OAAOc,EAAEiD,UAAU+3D,MAAMzqD,KAAK5P,MAAMX,EAAEiD,UAAU+3D,MAAMn2D,MAAMlE,KAAKmQ,YAAY1R,EAAE6D,UAAU83D,uBAAuB,SAAS/6D,EAAE2Q,GAAGgmC,GAAGE,QAAQ72C,EAAE21B,WAAW,IAAI11B,EAAEV,KAAK8sC,MAAM9sC,KAAKuB,KAAKd,EAAEo1B,OAAOz0B,KAAK25D,oBAAoB33C,EAAE,IAAIw8B,GAAGn/C,GAAGi5D,GAAGxyD,KAAKkc,EAAEvjB,EAAEm8D,aAAa,IAAIhsC,EAAE5uB,KAAKi7D,eAAej5C,EAAEpjB,KAAK8sC,MAAM9sC,KAAKuB,KAAKvB,KAAKK,KAAKK,MAAM,OAAOU,KAAK+6D,yCAAyCnsC,EAAE5e,IAAIvR,EAAE6D,UAAU44D,iBAAiB,WAAW,GAAG,IAAI/qD,UAAU5R,OAAO,CAAC,GAAGmvC,EAAEv9B,UAAU,GAAGsqD,IAAI,CAAC,IAAIp7D,EAAE8Q,UAAU,GAAGH,EAAE,IAAIyoD,GAAGz4D,KAAKm6D,UAAUn6D,KAAKm6D,UAAU96D,GAAG,OAAOW,KAAKk7D,iBAAiBlrD,GAAG,GAAGG,UAAU,aAAasoD,GAAG,CAAC,IAAIn5D,EAAE6Q,UAAU,GAAG,OAAOnQ,KAAKk7D,iBAAiB57D,EAAEizB,EAAEwO,yBAAyB,GAAG,IAAI5wB,UAAU5R,OAAO,CAAC,GAAG4R,UAAU,aAAa1R,GAAGivC,EAAEv9B,UAAU,GAAGsqD,IAAI,CAAC,IAAIz4C,EAAE7R,UAAU,GAAGye,EAAEze,UAAU,GAAGrR,EAAE,IAAI25D,GAAGz4D,KAAKm6D,UAAUn4C,EAAEm4C,UAAUvrC,GAAG,OAAO5uB,KAAKk7D,iBAAiBp8D,GAAG,GAAGqR,UAAU,aAAasoD,IAAI,iBAAiBtoD,UAAU,GAAG,CAAC,IAAIzQ,EAAEyQ,UAAU,GAAGs2B,EAAEt2B,UAAU,GAAGpE,EAAE,KAAK4G,EAAE,IAAI2kD,GAAG,IAAI3kD,EAAEygB,IAAI1zB,IAAIiT,EAAEqiB,WAAWyR,EAAE,GAAG,CAAC,IAAIzlC,EAAE2R,EAAE6kD,OAAOhxB,EAAExlC,EAAEk4D,cAAc,GAAG1yB,GAAGC,EAAE,MAAMzlC,EAAEi4D,YAAYxyB,EAAED,EAAEz6B,EAAE/K,GAAGA,EAAE83D,cAAcnmD,EAAE8zB,GAAG,MAAM,CAAC16B,EAAEotD,aAAa,GAAG9B,UAAUtrD,EAAEotD,aAAa,GAAG9B,iBAAiB,GAAG,IAAIlnD,UAAU5R,OAAO,CAAC,IAAkCqU,EAAEzC,UAAU,GAAGiE,EAAE,IAAI8iD,GAAjD/mD,UAAU,GAAKA,UAAU,IAAgCyH,EAAE,IAAI6gD,GAAGz4D,KAAKm6D,UAAU/lD,EAAExB,GAAG,OAAO5S,KAAKk7D,iBAAiBtjD,GAAG,KAAKnZ,EAAE6D,UAAUqpC,YAAY,WAAW,MAAM,CAACisB,GAAG5nD,IAAIvR,EAAE6D,UAAUspC,SAAS,WAAW,OAAOntC,GAAGA,EAAE08D,QAAQ,SAAS97D,GAAG,OAAOZ,EAAE28D,IAAI/7D,EAAEyzC,UAAUzzC,EAAEuzC,YAAYn0C,EAAE28D,IAAI,SAAS/7D,EAAE2Q,GAAG,OAAO3Q,EAAE2Q,GAAG,GAAGvR,EAAE48D,QAAQ,SAASh8D,GAAG,OAAOZ,EAAE28D,IAAI/7D,EAAE0zC,UAAU1zC,EAAEwzC,YAAYvzC,EAAEq7D,YAAY/yC,IAAI,WAAW,OAAOlF,IAAIpjB,EAAE+sC,iBAAiBzkB,IAAI,WAAW,OAAO,mBAAmBtoB,EAAEs7D,YAAYhzC,IAAI,WAAW,MAAM,CAAC+jB,YAAY,WAAW,MAAM,CAACxnC,IAAI9F,QAAQ,SAAS2R,EAAE1Q,GAAG,OAAOD,EAAEk7D,eAAe97D,EAAE08D,QAAQnrD,EAAEinD,aAAax4D,EAAE08D,QAAQ77D,EAAE23D,iBAAiB33D,EAAEu7D,YAAYjzC,IAAI,WAAW,MAAM,CAAC+jB,YAAY,WAAW,MAAM,CAACxnC,IAAI9F,QAAQ,SAAS2R,EAAE1Q,GAAG,OAAOD,EAAEk7D,eAAe97D,EAAE48D,QAAQrrD,EAAEinD,aAAax4D,EAAE48D,QAAQ/7D,EAAE23D,iBAAiB33D,EAAEw7D,aAAalzC,IAAI,WAAW,MAAM,CAAC+jB,YAAY,WAAW,MAAM,CAACtsC,EAAEq6D,eAAe33D,WAAW,SAAS1C,EAAE2Q,GAAG,OAAO3Q,EAAE0C,WAAWiO,MAAM1Q,EAAEk6D,sBAAsB5xC,IAAI,WAAW,OAAO,IAAIlf,OAAOyP,iBAAiB1Z,EAAEa,GAAGb,EAA7yI,CAAgzI26D,IAAI12C,GAAG,SAASrjB,GAAG,SAAS2Q,IAAI,IAAIA,EAAEG,UAAU,GAAG9Q,EAAEuQ,KAAK5P,KAAKgQ,GAAG,OAAO3Q,IAAI2Q,EAAEgY,UAAU3oB,GAAG2Q,EAAE1N,UAAUoG,OAAOojC,OAAOzsC,GAAGA,EAAEiD,WAAW0N,EAAE1N,UAAUkJ,YAAYwE,EAAEA,EAAE1N,UAAU+1D,cAAc,WAAW,IAAI,IAAIh5D,EAAE,KAAK2Q,EAAEhQ,KAAKm4D,qBAAqB5vC,WAAWvY,EAAEgtC,WAAW,CAAC,IAAIv+C,EAAEuR,EAAEoC,OAAO,OAAO/S,EAAEA,EAAE,IAAIE,EAAEd,EAAEw4D,aAAa53D,EAAE4zC,gBAAgBx0C,EAAEw4D,aAAa,OAAO53D,GAAG2Q,EAAE1N,UAAUqpC,YAAY,WAAW,MAAM,IAAI37B,EAAE1N,UAAUspC,SAAS,WAAW,OAAO57B,GAAGA,EAAnb,CAAsb8nD,IAAIwD,GAAG,aAAaA,GAAGh5D,UAAUqpC,YAAY,WAAW,MAAM,IAAI2vB,GAAGh5D,UAAUspC,SAAS,WAAW,OAAO0vB,IAAIA,GAAGC,aAAa,SAASl8D,EAAE2Q,GAAG,OAAO3Q,EAAE2Q,GAAG,EAAE3Q,EAAE2Q,EAAE,EAAE,GAAGsrD,GAAGj9D,QAAQ,SAASgB,EAAE2Q,EAAEvR,GAAG,GAAGuR,EAAE08B,SAASjuC,GAAG,OAAO,EAAE,IAAIa,EAAEg8D,GAAGC,aAAavrD,EAAEmE,EAAE1V,EAAE0V,GAAG6N,EAAEs5C,GAAGC,aAAavrD,EAAEoE,EAAE3V,EAAE2V,GAAG,OAAO/U,GAAG,KAAK,EAAE,OAAOi8D,GAAGE,aAAal8D,EAAE0iB,GAAG,KAAK,EAAE,OAAOs5C,GAAGE,aAAax5C,EAAE1iB,GAAG,KAAK,EAAE,OAAOg8D,GAAGE,aAAax5C,GAAG1iB,GAAG,KAAK,EAAE,OAAOg8D,GAAGE,cAAcl8D,EAAE0iB,GAAG,KAAK,EAAE,OAAOs5C,GAAGE,cAAcl8D,GAAG0iB,GAAG,KAAK,EAAE,OAAOs5C,GAAGE,cAAcx5C,GAAG1iB,GAAG,KAAK,EAAE,OAAOg8D,GAAGE,cAAcx5C,EAAE1iB,GAAG,KAAK,EAAE,OAAOg8D,GAAGE,aAAal8D,GAAG0iB,GAAG,OAAOg0B,GAAGC,qBAAqB,wBAAwB,GAAGqlB,GAAGE,aAAa,SAASn8D,EAAE2Q,GAAG,OAAO3Q,EAAE,GAAG,EAAEA,EAAE,EAAE,EAAE2Q,EAAE,GAAG,EAAEA,EAAE,EAAE,EAAE,GAAG,IAAIyrD,GAAG,WAAWz7D,KAAK07D,WAAW,KAAK17D,KAAKnC,MAAM,KAAKmC,KAAKuN,aAAa,KAAKvN,KAAK27D,eAAe,KAAK37D,KAAK47D,YAAY,KAAK,IAAIv8D,EAAE8Q,UAAU,GAAGH,EAAEG,UAAU,GAAG1R,EAAE0R,UAAU,GAAG7Q,EAAE6Q,UAAU,GAAGnQ,KAAK07D,WAAWr8D,EAAEW,KAAKnC,MAAM,IAAI8pC,EAAE33B,GAAGhQ,KAAKuN,aAAa9O,EAAEuB,KAAK27D,eAAer8D,EAAEU,KAAK47D,aAAa5rD,EAAE08B,SAASrtC,EAAEsyC,cAAclzC,KAAKg9D,GAAGn5D,UAAUqvC,cAAc,WAAW,OAAO3xC,KAAKnC,OAAO49D,GAAGn5D,UAAUuvD,MAAM,SAASxyD,GAAGA,EAAEwyD,MAAM7xD,KAAKnC,OAAOwB,EAAEwyD,MAAM,YAAY7xD,KAAKuN,eAAekuD,GAAGn5D,UAAUwqC,UAAU,SAASztC,GAAG,IAAI2Q,EAAE3Q,EAAE,OAAOW,KAAKuN,aAAayC,EAAEzC,cAAc,EAAEvN,KAAKuN,aAAayC,EAAEzC,aAAa,EAAEvN,KAAKnC,MAAM6uC,SAAS18B,EAAEnS,OAAO,EAAEy9D,GAAGj9D,QAAQ2B,KAAK27D,eAAe37D,KAAKnC,MAAMmS,EAAEnS,QAAQ49D,GAAGn5D,UAAU+0C,WAAW,SAASh4C,GAAG,OAAO,IAAIW,KAAKuN,eAAevN,KAAK47D,aAAa57D,KAAKuN,eAAelO,GAAGo8D,GAAGn5D,UAAUu5D,WAAW,WAAW,OAAO77D,KAAK47D,aAAaH,GAAGn5D,UAAUqpC,YAAY,WAAW,MAAM,CAAC/D,IAAI6zB,GAAGn5D,UAAUspC,SAAS,WAAW,OAAO6vB,IAAI,IAAIK,GAAG,WAAW97D,KAAK+7D,SAAS,IAAI/6D,EAAEhB,KAAKkzD,MAAM,KAAK,IAAI7zD,EAAE8Q,UAAU,GAAGnQ,KAAKkzD,MAAM7zD,GAAGy8D,GAAGx5D,UAAU05D,oBAAoB,WAAW,IAAI38D,EAAE,IAAIw/C,GAAG7+C,KAAKi8D,eAAe,IAAI,IAAIjsD,EAAEhQ,KAAKuoB,WAAW9pB,EAAEuR,EAAEoC,OAAOpC,EAAEgtC,WAAW,CAAC,IAAI19C,EAAE0Q,EAAEoC,OAAOpS,KAAKk8D,mBAAmBz9D,EAAEa,EAAED,GAAGZ,EAAEa,EAAE,OAAOD,EAAE4yC,qBAAqB6pB,GAAGx5D,UAAU65D,kBAAkB,WAAW,IAAI98D,EAAE,IAAIm/C,GAAGx+C,KAAKo8D,+BAA+B/8D,GAAGW,KAAKq8D,kCAAkCh9D,GAAG,IAAI,IAAI2Q,EAAE3Q,EAAEkpB,WAAWvY,EAAEgtC,WAAW,CAAC,IAAIv+C,EAAEuR,EAAEoC,OAAOg8B,WAAWpuC,KAAKozB,IAAIpzB,KAAKkzD,MAAMvhB,cAAclzC,GAAGA,KAAKq9D,GAAGx5D,UAAUuvD,MAAM,SAASxyD,GAAGA,EAAEw5C,QAAQ,kBAAkB,IAAI,IAAI7oC,EAAEhQ,KAAKuoB,WAAWvY,EAAEgtC,WAAYhtC,EAAEoC,OAAOy/C,MAAMxyD,IAAKy8D,GAAGx5D,UAAU+5D,kCAAkC,SAASh9D,GAAG,IAAI,IAAI2Q,EAAE,EAAEA,EAAEhQ,KAAKkzD,MAAMz+B,OAAO,EAAEzkB,IAAI,CAAC,IAAIvR,EAAEuB,KAAKkzD,MAAMvhB,cAAc3hC,GAAG1Q,EAAEU,KAAKkzD,MAAMvhB,cAAc3hC,EAAE,GAAGvR,EAAEiuC,SAASptC,IAAID,EAAE+zB,IAAI,IAAIhvB,EAAE4L,EAAE,MAAM8rD,GAAGx5D,UAAU45D,mBAAmB,SAAS78D,EAAE2Q,EAAEvR,GAAG,IAAIa,EAAEU,KAAKkzD,MAAMvhB,cAAc3hC,EAAEzC,cAAcyU,EAAEhS,EAAE6rD,eAAe7rD,EAAEnS,MAAM6uC,SAASptC,GAAGb,EAAE20B,IAAI,IAAIuU,EAAEtoC,EAAExB,QAAO,GAAI,IAAI,IAAI+wB,EAAEvvB,EAAEkO,aAAa,EAAEqhB,GAAG5e,EAAEzC,aAAaqhB,IAAInwB,EAAE20B,IAAIpzB,KAAKkzD,MAAMvhB,cAAc/iB,IAAI5M,GAAGvjB,EAAE20B,IAAI,IAAIuU,EAAE33B,EAAEnS,SAASi+D,GAAGx5D,UAAUimB,SAAS,WAAW,OAAOvoB,KAAK+7D,SAAS9nC,SAAS1L,YAAYuzC,GAAGx5D,UAAUg6D,cAAc,SAASj9D,GAAGW,KAAKi8D,eAAej8D,KAAKm8D,oBAAoB,IAAI,IAAInsD,EAAEhQ,KAAKuoB,WAAW9pB,EAAEuR,EAAEoC,OAAOpC,EAAEgtC,WAAW,CAAC,IAAI19C,EAAE0Q,EAAEoC,OAAO4P,EAAEhiB,KAAKu8D,gBAAgB99D,EAAEa,GAAGD,EAAE+zB,IAAIpR,GAAGvjB,EAAEa,IAAIw8D,GAAGx5D,UAAUk6D,kBAAkB,SAASn9D,EAAE2Q,EAAEvR,GAAG,IAAIY,EAAExB,MAAM6uC,SAAS18B,EAAEnS,OAAO,OAAM,EAAG,IAAIyB,EAAE0Q,EAAEzC,aAAalO,EAAEkO,aAAa,OAAOyC,EAAE6rD,cAAcv8D,IAAI,IAAIA,IAAIb,EAAE,GAAGY,EAAEkO,aAAa,GAAE,IAAKuuD,GAAGx5D,UAAU85D,+BAA+B,SAAS/8D,GAAG,IAAI,IAAI2Q,EAAE,IAAI/I,MAAM,GAAG6pC,KAAK,MAAMryC,EAAEuB,KAAKuoB,WAAWjpB,EAAEb,EAAE2T,OAAO3T,EAAEu+C,WAAW,CAAC,IAAIh7B,EAAEvjB,EAAE2T,OAAOpS,KAAKw8D,kBAAkBl9D,EAAE0iB,EAAEhS,IAAI3Q,EAAE+zB,IAAI,IAAIhvB,EAAE4L,EAAE,KAAK1Q,EAAE0iB,IAAI85C,GAAGx5D,UAAUgpD,QAAQ,WAAW,OAAOtrD,KAAKkzD,OAAO4I,GAAGx5D,UAAU25D,aAAa,WAAW,IAAI58D,EAAEW,KAAKkzD,MAAMz+B,OAAO,EAAEz0B,KAAKozB,IAAIpzB,KAAKkzD,MAAMvhB,cAAc,GAAG,GAAG3xC,KAAKozB,IAAIpzB,KAAKkzD,MAAMvhB,cAActyC,GAAGA,IAAIy8D,GAAGx5D,UAAUi6D,gBAAgB,SAASl9D,EAAE2Q,GAAG,IAAIvR,EAAEuR,EAAEzC,aAAalO,EAAEkO,aAAa,EAAEjO,EAAEU,KAAKkzD,MAAMvhB,cAAc3hC,EAAEzC,cAAcyU,EAAEhS,EAAE6rD,eAAe7rD,EAAEnS,MAAM6uC,SAASptC,GAAG0iB,GAAGvjB,IAAI,IAAImwB,EAAE,IAAI3nB,MAAMxI,GAAGqyC,KAAK,MAAMhyC,EAAE,EAAE8vB,EAAE9vB,KAAK,IAAI6oC,EAAEtoC,EAAExB,OAAO,IAAI,IAAI6B,EAAEL,EAAEkO,aAAa,EAAE7N,GAAGsQ,EAAEzC,aAAa7N,IAAIkvB,EAAE9vB,KAAKkB,KAAKkzD,MAAMvhB,cAAcjyC,GAAG,OAAOsiB,IAAI4M,EAAE9vB,GAAG,IAAI6oC,EAAE33B,EAAEnS,QAAQ,IAAI4+D,GAAG7tC,EAAE5uB,KAAKkzD,MAAMwJ,YAAYZ,GAAGx5D,UAAU8wB,IAAI,SAAS/zB,EAAE2Q,GAAG,IAAIvR,EAAE,IAAIg9D,GAAGz7D,KAAKkzD,MAAM7zD,EAAE2Q,EAAEhQ,KAAKkzD,MAAMyJ,iBAAiB3sD,IAAI1Q,EAAEU,KAAK+7D,SAASn0C,IAAInpB,GAAG,OAAO,OAAOa,GAAG02C,GAAGE,OAAO52C,EAAEzB,MAAM6uC,SAASrtC,GAAG,gDAAgDC,IAAIU,KAAK+7D,SAAS1b,IAAI5hD,EAAEA,GAAGA,IAAIq9D,GAAGx5D,UAAUs6D,2BAA2B,SAASv9D,GAAG,IAAI2Q,EAAEhQ,KAAKkzD,MAAM1Q,iBAAiB/jD,EAAEY,EAAEuoB,IAAI,GAAG+pB,cAAc,GAAG,IAAIlzC,EAAEiuC,SAAS18B,EAAE,IAAI,MAAM,IAAI8lC,EAAE,iCAAiCr3C,GAAG,IAAIa,EAAED,EAAEuoB,IAAIvoB,EAAEo1B,OAAO,GAAG+tB,iBAAiBxgC,EAAE1iB,EAAEA,EAAEf,OAAO,GAAG,IAAIyjB,EAAE0qB,SAAS18B,EAAEA,EAAEzR,OAAO,IAAI,MAAM,IAAIu3C,EAAE,+BAA+B9zB,IAAI85C,GAAGx5D,UAAUqpC,YAAY,WAAW,MAAM,IAAImwB,GAAGx5D,UAAUspC,SAAS,WAAW,OAAOkwB,IAAI,IAAIe,GAAG,aAAaA,GAAGv6D,UAAUqpC,YAAY,WAAW,MAAM,IAAIkxB,GAAGv6D,UAAUspC,SAAS,WAAW,OAAOixB,IAAIA,GAAGC,OAAO,WAAW,GAAG,iBAAiB3sD,UAAU,IAAI,iBAAiBA,UAAU,GAAG,CAAC,IAAI9Q,EAAE8Q,UAAU,GAAGH,EAAEG,UAAU,GAAG,GAAG,IAAI9Q,GAAG,IAAI2Q,EAAE,MAAM,IAAItR,EAAE,yCAAyCW,EAAE,KAAK2Q,EAAE,MAAM,IAAIvR,EAAEG,KAAKoiB,IAAI3hB,GAAGC,EAAEV,KAAKoiB,IAAIhR,GAAG,OAAO3Q,GAAG,EAAE2Q,GAAG,EAAEvR,GAAGa,EAAE,EAAE,EAAEb,GAAGa,EAAE,EAAE,EAAE0Q,GAAG,EAAEvR,GAAGa,EAAE,EAAE,EAAEb,GAAGa,EAAE,EAAE,EAAE,GAAG6Q,UAAU,aAAaw3B,GAAGx3B,UAAU,aAAaw3B,EAAE,CAAC,IAAI3lB,EAAE7R,UAAU,GAAGye,EAAEze,UAAU,GAAGrR,EAAE8vB,EAAEza,EAAE6N,EAAE7N,EAAEzU,EAAEkvB,EAAExa,EAAE4N,EAAE5N,EAAE,GAAG,IAAItV,GAAG,IAAIY,EAAE,MAAM,IAAIhB,EAAE,sDAAsDsjB,GAAG,OAAO66C,GAAGC,OAAOh+D,EAAEY,KAAK,IAAIq9D,GAAG,aAAaA,GAAGz6D,UAAUkgD,eAAe,aAAaua,GAAGz6D,UAAUmyB,KAAK,aAAasoC,GAAGz6D,UAAUqvC,cAAc,SAAStyC,KAAK09D,GAAGz6D,UAAUwgD,SAAS,aAAaia,GAAGz6D,UAAU06D,QAAQ,SAAS39D,KAAK09D,GAAGz6D,UAAUo6D,QAAQ,aAAaK,GAAGz6D,UAAUqpC,YAAY,WAAW,MAAM,IAAIoxB,GAAGz6D,UAAUspC,SAAS,WAAW,OAAOmxB,IAAI,IAAI9kD,GAAG,aAAaA,GAAG3V,UAAU26D,gBAAgB,SAAS59D,EAAE2Q,KAAKiI,GAAG3V,UAAUqpC,YAAY,WAAW,MAAM,CAACoxB,KAAK9kD,GAAG3V,UAAUspC,SAAS,WAAW,OAAO3zB,IAAI,IAAIwkD,GAAG,WAAWz8D,KAAKk9D,UAAU,IAAIpB,GAAG97D,MAAMA,KAAKgvD,KAAK,KAAKhvD,KAAKm9D,MAAM,KAAK,IAAI99D,EAAE8Q,UAAU,GAAGH,EAAEG,UAAU,GAAGnQ,KAAKgvD,KAAK3vD,EAAEW,KAAKm9D,MAAMntD,GAAGysD,GAAGn6D,UAAUkgD,eAAe,WAAW,OAAOxiD,KAAKgvD,MAAMyN,GAAGn6D,UAAUmyB,KAAK,WAAW,OAAOz0B,KAAKgvD,KAAKzwD,QAAQk+D,GAAGn6D,UAAUqvC,cAAc,SAAStyC,GAAG,OAAOW,KAAKgvD,KAAK3vD,IAAIo9D,GAAGn6D,UAAUwgD,SAAS,WAAW,OAAO9iD,KAAKgvD,KAAK,GAAGtwC,OAAO1e,KAAKgvD,KAAKhvD,KAAKgvD,KAAKzwD,OAAO,KAAKk+D,GAAGn6D,UAAUq6D,iBAAiB,SAASt9D,GAAG,OAAOA,IAAIW,KAAKgvD,KAAKzwD,OAAO,GAAG,EAAEyB,KAAKo9D,WAAWp9D,KAAK2xC,cAActyC,GAAGW,KAAK2xC,cAActyC,EAAE,KAAKo9D,GAAGn6D,UAAU06D,QAAQ,SAAS39D,GAAGW,KAAKm9D,MAAM99D,GAAGo9D,GAAGn6D,UAAU86D,WAAW,SAAS/9D,EAAE2Q,GAAG,OAAO3Q,EAAEqtC,SAAS18B,GAAG,EAAE6sD,GAAGC,OAAOz9D,EAAE2Q,IAAIysD,GAAGn6D,UAAUo6D,QAAQ,WAAW,OAAO18D,KAAKm9D,OAAOV,GAAGn6D,UAAU26D,gBAAgB,WAAW,GAAG,IAAI9sD,UAAU5R,OAAO,CAAC,IAAIc,EAAE8Q,UAAU,GAAGH,EAAEG,UAAU,GAAGnQ,KAAKq9D,oBAAoBh+D,EAAE2Q,QAAQ,GAAG,IAAIG,UAAU5R,OAAO,CAAC,IAAmBe,EAAE6Q,UAAU,GAAG6R,EAAE7R,UAAU,GAAGye,EAAE,IAAI+Y,EAAjDx3B,UAAU,GAA2C2zB,gBAAgB9hB,IAAIhiB,KAAKi9D,gBAAgBruC,EAAEtvB,KAAKm9D,GAAGn6D,UAAUkV,SAAS,WAAW,OAAOg1B,EAAEqJ,aAAa,IAAIkR,GAAG/mD,KAAKgvD,QAAQyN,GAAGn6D,UAAUg7D,YAAY,WAAW,OAAOt9D,KAAKk9D,WAAWT,GAAGn6D,UAAU+6D,oBAAoB,SAASh+D,EAAE2Q,GAAG,IAAIvR,EAAEuR,EAAE1Q,EAAEb,EAAE,EAAE,GAAGa,EAAEU,KAAKgvD,KAAKzwD,OAAO,CAAC,IAAIyjB,EAAEhiB,KAAKgvD,KAAK1vD,GAAGD,EAAEqtC,SAAS1qB,KAAKvjB,EAAEa,GAAG,OAAOU,KAAKk9D,UAAU9pC,IAAI/zB,EAAEZ,IAAIg+D,GAAGn6D,UAAUi7D,iBAAiB,SAASl+D,EAAE2Q,EAAEvR,GAAG,IAAI,IAAIa,EAAE,EAAEA,EAAED,EAAEo4C,qBAAqBn4C,IAAIU,KAAKi9D,gBAAgB59D,EAAE2Q,EAAEvR,EAAEa,IAAIm9D,GAAGn6D,UAAUqpC,YAAY,WAAW,MAAM,CAAC1zB,KAAKwkD,GAAGn6D,UAAUspC,SAAS,WAAW,OAAO6wB,IAAIA,GAAGe,mBAAmB,WAAW,GAAG,IAAIrtD,UAAU5R,OAAO,CAAC,IAAIc,EAAE8Q,UAAU,GAAGH,EAAE,IAAIwuC,GAAG,OAAOie,GAAGe,mBAAmBn+D,EAAE2Q,GAAGA,EAAE,GAAG,IAAIG,UAAU5R,OAAO,IAAI,IAAmBe,EAAE6Q,UAAU,GAAG6R,EAA5B7R,UAAU,GAAsBoY,WAAWvG,EAAEg7B,WAAYh7B,EAAE5P,OAAOkrD,cAAchB,cAAch9D,IAAK,IAAIm+D,GAAG,WAAW,GAAGz9D,KAAK09D,GAAG,KAAK19D,KAAK2T,GAAG,KAAK,IAAIxD,UAAU5R,OAAOyB,KAAK09D,GAAG,IAAI/1B,EAAE3nC,KAAK2T,GAAG,IAAIg0B,OAAO,GAAG,IAAIx3B,UAAU5R,OAAO,CAAC,IAAIc,EAAE8Q,UAAU,GAAGnQ,KAAK09D,GAAG,IAAI/1B,EAAEtoC,EAAEq+D,IAAI19D,KAAK2T,GAAG,IAAIg0B,EAAEtoC,EAAEsU,SAAS,GAAG,IAAIxD,UAAU5R,OAAOyB,KAAK09D,GAAGvtD,UAAU,GAAGnQ,KAAK2T,GAAGxD,UAAU,QAAQ,GAAG,IAAIA,UAAU5R,OAAO,CAAC,IAAIyR,EAAEG,UAAU,GAAG1R,EAAE0R,UAAU,GAAG7Q,EAAE6Q,UAAU,GAAG6R,EAAE7R,UAAU,GAAGnQ,KAAK09D,GAAG,IAAI/1B,EAAE33B,EAAEvR,GAAGuB,KAAK2T,GAAG,IAAIg0B,EAAEroC,EAAE0iB,KAAK27C,GAAG,CAACtxB,iBAAiB,CAACh8B,cAAa,IAAKotD,GAAGn7D,UAAUnB,KAAK,WAAW,OAAOvC,KAAKQ,IAAIY,KAAK09D,GAAGvpD,EAAEnU,KAAK2T,GAAGQ,IAAIspD,GAAGn7D,UAAUgvC,iBAAiB,WAAW,GAAGnhC,UAAU,aAAastD,GAAG,CAAC,IAAIp+D,EAAE8Q,UAAU,GAAGH,EAAEokB,GAAGkd,iBAAiBtxC,KAAK09D,GAAG19D,KAAK2T,GAAGtU,EAAEq+D,IAAIj/D,EAAE21B,GAAGkd,iBAAiBtxC,KAAK09D,GAAG19D,KAAK2T,GAAGtU,EAAEsU,IAAI,OAAO3D,GAAG,GAAGvR,GAAG,GAAgBuR,GAAG,GAAGvR,GAAG,EAAvBG,KAAKM,IAAI8Q,EAAEvR,GAA4B,EAAE,GAAG0R,UAAU,aAAaw3B,EAAE,CAAC,IAAIroC,EAAE6Q,UAAU,GAAG,OAAOikB,GAAGkd,iBAAiBtxC,KAAK09D,GAAG19D,KAAK2T,GAAGrU,KAAKm+D,GAAGn7D,UAAUi6C,WAAW,SAASl9C,GAAG,OAAOA,EAAEi2C,iBAAiB,CAACt1C,KAAK09D,GAAG19D,KAAK2T,MAAM8pD,GAAGn7D,UAAUs7D,WAAW,WAAW,OAAO59D,KAAK09D,GAAGvpD,IAAInU,KAAK2T,GAAGQ,GAAGspD,GAAGn7D,UAAUoc,OAAO,SAASrf,GAAG,KAAKA,aAAao+D,IAAI,OAAM,EAAG,IAAIztD,EAAE3Q,EAAE,OAAOW,KAAK09D,GAAGh/C,OAAO1O,EAAE0tD,KAAK19D,KAAK2T,GAAG+K,OAAO1O,EAAE2D,KAAK8pD,GAAGn7D,UAAUu1B,aAAa,SAASx4B,GAAG,IAAI2Q,EAAE,IAAIooC,GAAG,OAAOpoC,EAAEunC,oBAAoBv3C,KAAK09D,GAAG19D,KAAK2T,GAAGtU,EAAEq+D,GAAGr+D,EAAEsU,IAAI3D,EAAE4nC,kBAAkB5nC,EAAE8zB,gBAAgB,GAAG,MAAM25B,GAAGn7D,UAAUu7D,QAAQ,WAAW,GAAG1tD,UAAU,aAAaw3B,EAAE,CAAC,IAAItoC,EAAE8Q,UAAU,GAAG,GAAG9Q,EAAEqf,OAAO1e,KAAK09D,KAAKr+D,EAAEqf,OAAO1e,KAAK2T,IAAI,OAAO,IAAIg0B,EAAEtoC,GAAG,IAAI2Q,EAAEhQ,KAAK89D,iBAAiBz+D,GAAGZ,EAAE,IAAIkpC,EAAE,OAAOlpC,EAAE0V,EAAEnU,KAAK09D,GAAGvpD,EAAEnE,GAAGhQ,KAAK2T,GAAGQ,EAAEnU,KAAK09D,GAAGvpD,GAAG1V,EAAE2V,EAAEpU,KAAK09D,GAAGtpD,EAAEpE,GAAGhQ,KAAK2T,GAAGS,EAAEpU,KAAK09D,GAAGtpD,GAAG3V,EAAE,GAAG0R,UAAU,aAAastD,GAAG,CAAC,IAAIn+D,EAAE6Q,UAAU,GAAG6R,EAAEhiB,KAAK89D,iBAAiBx+D,EAAEo+D,IAAI9uC,EAAE5uB,KAAK89D,iBAAiBx+D,EAAEqU,IAAI,GAAGqO,GAAG,GAAG4M,GAAG,EAAE,OAAO,KAAK,GAAG5M,GAAG,GAAG4M,GAAG,EAAE,OAAO,KAAK,IAAI9vB,EAAEkB,KAAK69D,QAAQv+D,EAAEo+D,IAAI17C,EAAE,IAAIljB,EAAEkB,KAAK09D,IAAI17C,EAAE,IAAIljB,EAAEkB,KAAK2T,IAAI,IAAIjU,EAAEM,KAAK69D,QAAQv+D,EAAEqU,IAAI,OAAOib,EAAE,IAAIlvB,EAAEM,KAAK09D,IAAI9uC,EAAE,IAAIlvB,EAAEM,KAAK2T,IAAI,IAAI8pD,GAAG3+D,EAAEY,KAAK+9D,GAAGn7D,UAAUq6C,UAAU,WAAW38C,KAAK2T,GAAGm5B,UAAU9sC,KAAK09D,IAAI,GAAG19D,KAAKomB,WAAWq3C,GAAGn7D,UAAUwI,MAAM,WAAW,OAAOlM,KAAK+0D,MAAM3zD,KAAK2T,GAAGS,EAAEpU,KAAK09D,GAAGtpD,EAAEpU,KAAK2T,GAAGQ,EAAEnU,KAAK09D,GAAGvpD,IAAIspD,GAAGn7D,UAAUqvC,cAAc,SAAStyC,GAAG,OAAO,IAAIA,EAAEW,KAAK09D,GAAG19D,KAAK2T,IAAI8pD,GAAGn7D,UAAUy7D,sBAAsB,SAAS1+D,GAAG,OAAO+0B,GAAGkmB,+BAA+Bj7C,EAAEW,KAAK09D,GAAG19D,KAAK2T,KAAK8pD,GAAGn7D,UAAUlB,KAAK,WAAW,OAAOxC,KAAKQ,IAAIY,KAAK09D,GAAGtpD,EAAEpU,KAAK2T,GAAGS,IAAIqpD,GAAGn7D,UAAU07D,SAAS,WAAW,OAAOP,GAAGO,SAASh+D,KAAK09D,GAAG19D,KAAK2T,KAAK8pD,GAAGn7D,UAAUw7D,iBAAiB,SAASz+D,GAAG,GAAGA,EAAEqf,OAAO1e,KAAK09D,IAAI,OAAO,EAAE,GAAGr+D,EAAEqf,OAAO1e,KAAK2T,IAAI,OAAO,EAAE,IAAI3D,EAAEhQ,KAAK2T,GAAGQ,EAAEnU,KAAK09D,GAAGvpD,EAAE1V,EAAEuB,KAAK2T,GAAGS,EAAEpU,KAAK09D,GAAGtpD,EAAE9U,EAAE0Q,EAAEA,EAAEvR,EAAEA,EAAE,OAAGa,GAAG,EAASizB,EAAE4a,MAAY9tC,EAAE8U,EAAEnU,KAAK09D,GAAGvpD,GAAGnE,GAAG3Q,EAAE+U,EAAEpU,KAAK09D,GAAGtpD,GAAG3V,GAAGa,GAAGm+D,GAAGn7D,UAAU27D,cAAc,SAAS5+D,GAAG,IAAI2Q,EAAEhQ,KAAK63B,aAAax4B,GAAG,GAAG,OAAO2Q,EAAE,MAAM,CAACA,EAAEA,GAAG,IAAIvR,EAAE,IAAIwI,MAAM,GAAG6pC,KAAK,MAAMxxC,EAAEizB,EAAElX,UAAU2G,EAAE,KAAK4M,EAAE5uB,KAAKk+D,aAAa7+D,EAAEq+D,IAAIp+D,EAAEsvB,EAAEvmB,SAAShJ,EAAEq+D,IAAIj/D,EAAE,GAAGmwB,EAAEnwB,EAAE,GAAGY,EAAEq+D,GAAG,IAAI5+D,EAAEkB,KAAKk+D,aAAa7+D,EAAEsU,KAAKqO,EAAEljB,EAAEuJ,SAAShJ,EAAEsU,KAAKrU,IAAIA,EAAE0iB,EAAEvjB,EAAE,GAAGK,EAAEL,EAAE,GAAGY,EAAEsU,IAAI,IAAIjU,EAAEL,EAAE6+D,aAAal+D,KAAK09D,KAAK17C,EAAEtiB,EAAE2I,SAASrI,KAAK09D,KAAKp+D,IAAIA,EAAE0iB,EAAEvjB,EAAE,GAAGuB,KAAK09D,GAAGj/D,EAAE,GAAGiB,GAAG,IAAI+mC,EAAEpnC,EAAE6+D,aAAal+D,KAAK2T,IAAI,OAAOqO,EAAEykB,EAAEp+B,SAASrI,KAAK2T,KAAKrU,IAAIA,EAAE0iB,EAAEvjB,EAAE,GAAGuB,KAAK2T,GAAGlV,EAAE,GAAGgoC,GAAGhoC,GAAGg/D,GAAGn7D,UAAU47D,aAAa,SAAS7+D,GAAG,IAAI2Q,EAAEhQ,KAAK89D,iBAAiBz+D,GAAG,OAAG2Q,EAAE,GAAGA,EAAE,EAAShQ,KAAK69D,QAAQx+D,GAAUW,KAAK09D,GAAGr1D,SAAShJ,GAAGW,KAAK2T,GAAGtL,SAAShJ,GAAGW,KAAK09D,GAAG19D,KAAK2T,IAAI8pD,GAAGn7D,UAAUjB,KAAK,WAAW,OAAOzC,KAAKM,IAAIc,KAAK09D,GAAGvpD,EAAEnU,KAAK2T,GAAGQ,IAAIspD,GAAGn7D,UAAU45C,UAAU,WAAW,OAAOl8C,KAAK09D,GAAGr1D,SAASrI,KAAK2T,KAAK8pD,GAAGn7D,UAAUwqC,UAAU,SAASztC,GAAG,IAAI2Q,EAAE3Q,EAAEZ,EAAEuB,KAAK09D,GAAG5wB,UAAU98B,EAAE0tD,IAAI,OAAO,IAAIj/D,EAAEA,EAAEuB,KAAK2T,GAAGm5B,UAAU98B,EAAE2D,KAAK8pD,GAAGn7D,UAAU8jB,QAAQ,WAAW,IAAI/mB,EAAEW,KAAK09D,GAAG19D,KAAK09D,GAAG19D,KAAK2T,GAAG3T,KAAK2T,GAAGtU,GAAGo+D,GAAGn7D,UAAUs5C,WAAW,SAASv8C,GAAG,OAAOW,KAAK09D,GAAGh/C,OAAOrf,EAAEq+D,MAAM19D,KAAK2T,GAAG+K,OAAOrf,EAAEsU,KAAK3T,KAAK09D,GAAGh/C,OAAOrf,EAAEsU,MAAM3T,KAAK2T,GAAG+K,OAAOrf,EAAEq+D,KAAKD,GAAGn7D,UAAU67D,iBAAiB,SAAS9+D,GAAG,IAAI,OAAOnB,EAAE25B,aAAa73B,KAAK09D,GAAG19D,KAAK2T,GAAGtU,EAAEq+D,GAAGr+D,EAAEsU,IAAI,MAAMtU,GAAG,KAAKA,aAAaitC,GAAG,MAAMjtC,EAAE,OAAO,MAAMo+D,GAAGn7D,UAAUhB,KAAK,WAAW,OAAO1C,KAAKM,IAAIc,KAAK09D,GAAGtpD,EAAEpU,KAAK2T,GAAGS,IAAIqpD,GAAGn7D,UAAU87D,iBAAiB,SAAS/+D,EAAE2Q,GAAG,IAAIvR,EAAEuB,KAAK09D,GAAGvpD,EAAE9U,GAAGW,KAAK2T,GAAGQ,EAAEnU,KAAK09D,GAAGvpD,GAAG7U,EAAEU,KAAK09D,GAAGtpD,EAAE/U,GAAGW,KAAK2T,GAAGS,EAAEpU,KAAK09D,GAAGtpD,GAAG4N,EAAEhiB,KAAK2T,GAAGQ,EAAEnU,KAAK09D,GAAGvpD,EAAEya,EAAE5uB,KAAK2T,GAAGS,EAAEpU,KAAK09D,GAAGtpD,EAAEtV,EAAEF,KAAKK,KAAK+iB,EAAEA,EAAE4M,EAAEA,GAAGlvB,EAAE,EAAE+mC,EAAE,EAAE,GAAG,IAAIz2B,EAAE,CAAC,GAAGlR,GAAG,EAAE,MAAM,IAAIkI,MAAM,uDAAuDtH,EAAEsQ,EAAEgS,EAAEljB,EAAE2nC,EAAEz2B,EAAE4e,EAAE9vB,EAAE,OAAO,IAAI6oC,EAAElpC,EAAEgoC,EAAEnnC,EAAEI,IAAI+9D,GAAGn7D,UAAU+7D,eAAe,WAAW,GAAG,IAAIluD,UAAU5R,OAAO,CAAC,IAAIc,EAAE8Q,UAAU,GAAGnQ,KAAKq+D,eAAeh/D,EAAEq+D,GAAGr+D,EAAEsU,SAAS,GAAG,IAAIxD,UAAU5R,OAAO,CAAC,IAAIyR,EAAEG,UAAU,GAAG1R,EAAE0R,UAAU,GAAGnQ,KAAK09D,GAAGvpD,EAAEnE,EAAEmE,EAAEnU,KAAK09D,GAAGtpD,EAAEpE,EAAEoE,EAAEpU,KAAK2T,GAAGQ,EAAE1V,EAAE0V,EAAEnU,KAAK2T,GAAGS,EAAE3V,EAAE2V,IAAIqpD,GAAGn7D,UAAUg8D,gBAAgB,SAASj/D,GAAG,IAAI2Q,EAAEhQ,KAAK89D,iBAAiBz+D,GAAG,OAAO2Q,EAAE,EAAEA,EAAE,GAAGA,EAAE,GAAGuiB,EAAE9pB,MAAMuH,MAAMA,EAAE,GAAGA,GAAGytD,GAAGn7D,UAAUkV,SAAS,WAAW,MAAM,eAAexX,KAAK09D,GAAGvpD,EAAE,IAAInU,KAAK09D,GAAGtpD,EAAE,KAAKpU,KAAK2T,GAAGQ,EAAE,IAAInU,KAAK2T,GAAGS,EAAE,KAAKqpD,GAAGn7D,UAAUi8D,aAAa,WAAW,OAAOv+D,KAAK09D,GAAGtpD,IAAIpU,KAAK2T,GAAGS,GAAGqpD,GAAGn7D,UAAU+F,SAAS,WAAW,GAAG8H,UAAU,aAAastD,GAAG,CAAC,IAAIp+D,EAAE8Q,UAAU,GAAG,OAAOikB,GAAG6lB,iBAAiBj6C,KAAK09D,GAAG19D,KAAK2T,GAAGtU,EAAEq+D,GAAGr+D,EAAEsU,IAAI,GAAGxD,UAAU,aAAaw3B,EAAE,CAAC,IAAI33B,EAAEG,UAAU,GAAG,OAAOikB,GAAG4kB,kBAAkBhpC,EAAEhQ,KAAK09D,GAAG19D,KAAK2T,MAAM8pD,GAAGn7D,UAAUk8D,WAAW,SAASn/D,GAAG,IAAI2Q,EAAE,IAAI23B,EAAE,OAAO33B,EAAEmE,EAAEnU,KAAK09D,GAAGvpD,EAAE9U,GAAGW,KAAK2T,GAAGQ,EAAEnU,KAAK09D,GAAGvpD,GAAGnE,EAAEoE,EAAEpU,KAAK09D,GAAGtpD,EAAE/U,GAAGW,KAAK2T,GAAGS,EAAEpU,KAAK09D,GAAGtpD,GAAGpE,GAAGytD,GAAGn7D,UAAU2qC,SAAS,WAAW,IAAI5tC,EAAEkzB,EAAEwZ,iBAAiB/rC,KAAK09D,GAAGvpD,GAAG9U,GAAG,GAAGkzB,EAAEwZ,iBAAiB/rC,KAAK09D,GAAGtpD,GAAG,IAAIpE,EAAEpR,KAAK8sC,MAAMrsC,GAAGT,KAAK8sC,MAAMrsC,GAAG,IAAIZ,EAAE8zB,EAAEwZ,iBAAiB/rC,KAAK2T,GAAGQ,GAAuC,OAApC1V,GAAG,GAAG8zB,EAAEwZ,iBAAiB/rC,KAAK2T,GAAGS,GAAUpE,EAAGpR,KAAK8sC,MAAMjtC,GAAGG,KAAK8sC,MAAMjtC,GAAG,KAAMg/D,GAAGn7D,UAAUqpC,YAAY,WAAW,MAAM,CAAC/D,EAAE53B,IAAIytD,GAAGn7D,UAAUspC,SAAS,WAAW,OAAO6xB,IAAIA,GAAGO,SAAS,SAAS3+D,EAAE2Q,GAAG,OAAO,IAAI23B,GAAGtoC,EAAE8U,EAAEnE,EAAEmE,GAAG,GAAG9U,EAAE+U,EAAEpE,EAAEoE,GAAG,IAAIupD,GAAGtxB,iBAAiBzkB,IAAI,WAAW,OAAO,oBAAoBlf,OAAOyP,iBAAiBslD,GAAGE,IAAI,IAAIc,GAAG,WAAWz+D,KAAK0+D,SAAS,IAAIn/D,EAAES,KAAK2+D,SAAS,IAAIp/D,EAAES,KAAK4+D,aAAa,IAAInB,GAAGz9D,KAAK6+D,aAAa,IAAIpB,IAAIgB,GAAGn8D,UAAUqD,QAAQ,WAAW,GAAG,IAAIwK,UAAU5R,aAAa,GAAG,IAAI4R,UAAU5R,OAAO,CAAC,IAAmByR,EAAEG,UAAU,GAAG1R,EAAE0R,UAAU,GAAG7Q,EAAE6Q,UAAU,GAAvDA,UAAU,GAAkD2uD,eAAe9uD,EAAEhQ,KAAK4+D,cAAcngE,EAAEqgE,eAAex/D,EAAEU,KAAK6+D,cAAc7+D,KAAK2F,QAAQ3F,KAAK4+D,aAAa5+D,KAAK6+D,gBAAgBJ,GAAGn8D,UAAUqpC,YAAY,WAAW,MAAM,IAAI8yB,GAAGn8D,UAAUspC,SAAS,WAAW,OAAO6yB,IAAI,IAAIM,GAAG,WAAW/+D,KAAKgvD,KAAK,KAAKhvD,KAAKg/D,OAAO,KAAKh/D,KAAKi/D,KAAK,KAAKj/D,KAAKwsD,KAAK,KAAKxsD,KAAKk/D,SAAS,KAAKl/D,KAAKm/D,IAAI,KAAK,IAAI9/D,EAAE8Q,UAAU,GAAGH,EAAEG,UAAU,GAAG1R,EAAE0R,UAAU,GAAG7Q,EAAE6Q,UAAU,GAAGnQ,KAAKgvD,KAAK3vD,EAAEW,KAAKg/D,OAAOhvD,EAAEhQ,KAAKi/D,KAAKxgE,EAAEuB,KAAKk/D,SAAS5/D,GAAGy/D,GAAGz8D,UAAUw8D,eAAe,SAASz/D,EAAE2Q,GAAGA,EAAE0tD,GAAG19D,KAAKgvD,KAAK3vD,GAAG2Q,EAAE2D,GAAG3T,KAAKgvD,KAAK3vD,EAAE,IAAI0/D,GAAGz8D,UAAU88D,cAAc,SAAS//D,EAAE2Q,EAAEvR,EAAEa,GAAG,IAAI0iB,EAAEhiB,KAAKgvD,KAAKh/C,GAAG4e,EAAE5uB,KAAKgvD,KAAKvwD,GAAG,GAAGa,EAAEo/D,SAASvkD,KAAK6H,EAAE4M,GAAGnwB,EAAEuR,GAAG,EAAE,OAAO1Q,EAAE+/D,OAAOr/D,KAAKgQ,GAAG,KAAK,IAAI3Q,EAAE0C,WAAWzC,EAAEo/D,UAAU,OAAO,KAAK,IAAI5/D,EAAEF,KAAK8sC,OAAO17B,EAAEvR,GAAG,GAAGuR,EAAElR,GAAGkB,KAAKo/D,cAAc//D,EAAE2Q,EAAElR,EAAEQ,GAAGR,EAAEL,GAAGuB,KAAKo/D,cAAc//D,EAAEP,EAAEL,EAAEa,IAAIy/D,GAAGz8D,UAAUkgD,eAAe,WAAW,IAAI,IAAInjD,EAAE,IAAI4H,MAAMjH,KAAKi/D,KAAKj/D,KAAKg/D,OAAO,GAAGluB,KAAK,MAAM9gC,EAAE,EAAEvR,EAAEuB,KAAKg/D,OAAOvgE,GAAGuB,KAAKi/D,KAAKxgE,IAAIY,EAAE2Q,KAAKhQ,KAAKgvD,KAAKvwD,GAAG,OAAOY,GAAG0/D,GAAGz8D,UAAUg9D,gBAAgB,SAASjgE,EAAE2Q,GAAGhQ,KAAKu/D,wBAAwBv/D,KAAKg/D,OAAOh/D,KAAKi/D,KAAK5/D,EAAEA,EAAE2/D,OAAO3/D,EAAE4/D,KAAKjvD,IAAI+uD,GAAGz8D,UAAUk9D,MAAM,SAASngE,GAAGW,KAAKm/D,IAAI9/D,GAAG0/D,GAAGz8D,UAAU+8D,OAAO,SAAShgE,EAAE2Q,GAAGhQ,KAAKo/D,cAAc//D,EAAEW,KAAKg/D,OAAOh/D,KAAKi/D,KAAKjvD,IAAI+uD,GAAGz8D,UAAUg6C,YAAY,WAAW,GAAG,OAAOt8C,KAAKwsD,KAAK,CAAC,IAAIntD,EAAEW,KAAKgvD,KAAKhvD,KAAKg/D,QAAQhvD,EAAEhQ,KAAKgvD,KAAKhvD,KAAKi/D,MAAMj/D,KAAKwsD,KAAK,IAAIjtD,EAAEF,EAAE2Q,GAAG,OAAOhQ,KAAKwsD,MAAMuS,GAAGz8D,UAAUm9D,YAAY,WAAW,OAAOz/D,KAAKi/D,MAAMF,GAAGz8D,UAAUo9D,cAAc,WAAW,OAAO1/D,KAAKg/D,QAAQD,GAAGz8D,UAAUq9D,WAAW,WAAW,OAAO3/D,KAAKk/D,UAAUH,GAAGz8D,UAAUs9D,MAAM,WAAW,OAAO5/D,KAAKm/D,KAAKJ,GAAGz8D,UAAUi9D,wBAAwB,SAASlgE,EAAE2Q,EAAEvR,EAAEa,EAAE0iB,EAAE4M,GAAG,IAAI9vB,EAAEkB,KAAKgvD,KAAK3vD,GAAGK,EAAEM,KAAKgvD,KAAKh/C,GAAGy2B,EAAEhoC,EAAEuwD,KAAK1vD,GAAGyM,EAAEtN,EAAEuwD,KAAKhtC,GAAG,GAAGhS,EAAE3Q,GAAG,GAAG2iB,EAAE1iB,GAAG,EAAE,OAAOsvB,EAAEjpB,QAAQ3F,KAAKX,EAAEZ,EAAEa,GAAG,KAAK,GAAGsvB,EAAE8vC,SAASvkD,KAAKrb,EAAEY,GAAGkvB,EAAE+vC,SAASxkD,KAAKssB,EAAE16B,IAAI6iB,EAAE8vC,SAAS38D,WAAW6sB,EAAE+vC,UAAU,OAAO,KAAK,IAAIhsD,EAAE/T,KAAK8sC,OAAOrsC,EAAE2Q,GAAG,GAAGhP,EAAEpC,KAAK8sC,OAAOpsC,EAAE0iB,GAAG,GAAG3iB,EAAEsT,IAAIrT,EAAE0B,GAAGhB,KAAKu/D,wBAAwBlgE,EAAEsT,EAAElU,EAAEa,EAAE0B,EAAE4tB,GAAG5tB,EAAEghB,GAAGhiB,KAAKu/D,wBAAwBlgE,EAAEsT,EAAElU,EAAEuC,EAAEghB,EAAE4M,IAAIjc,EAAE3C,IAAI1Q,EAAE0B,GAAGhB,KAAKu/D,wBAAwB5sD,EAAE3C,EAAEvR,EAAEa,EAAE0B,EAAE4tB,GAAG5tB,EAAEghB,GAAGhiB,KAAKu/D,wBAAwB5sD,EAAE3C,EAAEvR,EAAEuC,EAAEghB,EAAE4M,KAAKmwC,GAAGz8D,UAAUqpC,YAAY,WAAW,MAAM,IAAIozB,GAAGz8D,UAAUspC,SAAS,WAAW,OAAOmzB,IAAI,IAAIc,GAAG,aAAaA,GAAGv9D,UAAUqpC,YAAY,WAAW,MAAM,IAAIk0B,GAAGv9D,UAAUspC,SAAS,WAAW,OAAOi0B,IAAIA,GAAGC,qBAAqB,SAASzgE,GAAG,IAAI2Q,EAAE,EAAEvR,EAAE,IAAI+/C,GAAG//C,EAAE20B,IAAI,IAAIhvB,EAAE4L,IAAI,EAAE,CAAC,IAAI1Q,EAAEugE,GAAGE,aAAa1gE,EAAE2Q,GAAGvR,EAAE20B,IAAI,IAAIhvB,EAAE9E,IAAI0Q,EAAE1Q,QAAQ0Q,EAAE3Q,EAAEd,OAAO,GAAG,OAAOshE,GAAGG,WAAWvhE,IAAIohE,GAAGE,aAAa,SAAS1gE,EAAE2Q,GAAG,IAAI,IAAIvR,EAAEuR,EAAEvR,EAAEY,EAAEd,OAAO,GAAGc,EAAEZ,GAAGiuC,SAASrtC,EAAEZ,EAAE,KAAKA,IAAI,GAAGA,GAAGY,EAAEd,OAAO,EAAE,OAAOc,EAAEd,OAAO,EAAE,IAAI,IAAIe,EAAEgzD,GAAGU,SAAS3zD,EAAEZ,GAAGY,EAAEZ,EAAE,IAAIujB,EAAEhS,EAAE,EAAEgS,EAAE3iB,EAAEd,SAAac,EAAE2iB,EAAE,GAAG0qB,SAASrtC,EAAE2iB,KAAQswC,GAAGU,SAAS3zD,EAAE2iB,EAAE,GAAG3iB,EAAE2iB,MAAM1iB,IAAQ0iB,IAAI,OAAOA,EAAE,GAAG69C,GAAGI,UAAU,WAAW,GAAG,IAAI9vD,UAAU5R,OAAO,CAAC,IAAIc,EAAE8Q,UAAU,GAAG,OAAO0vD,GAAGI,UAAU5gE,EAAE,MAAM,GAAG,IAAI8Q,UAAU5R,OAAO,CAAC,IAAI,IAAIyR,EAAEG,UAAU,GAAG1R,EAAE0R,UAAU,GAAG7Q,EAAE,IAAIk/C,GAAGx8B,EAAE69C,GAAGC,qBAAqB9vD,GAAG4e,EAAE,EAAEA,EAAE5M,EAAEzjB,OAAO,EAAEqwB,IAAI,CAAC,IAAI9vB,EAAE,IAAIigE,GAAG/uD,EAAEgS,EAAE4M,GAAG5M,EAAE4M,EAAE,GAAGnwB,GAAGa,EAAE8zB,IAAIt0B,GAAG,OAAOQ,IAAIugE,GAAGG,WAAW,SAAS3gE,GAAG,IAAI,IAAI2Q,EAAE,IAAI/I,MAAM5H,EAAEo1B,QAAQqc,KAAK,MAAMryC,EAAE,EAAEA,EAAEuR,EAAEzR,OAAOE,IAAIuR,EAAEvR,GAAGY,EAAEuoB,IAAInpB,GAAG2vC,WAAW,OAAOp+B,GAAG,IAAIkwD,GAAG,aAAaA,GAAG59D,UAAU69D,aAAa,SAAS9gE,KAAK6gE,GAAG59D,UAAUk7D,mBAAmB,aAAa0C,GAAG59D,UAAUqpC,YAAY,WAAW,MAAM,IAAIu0B,GAAG59D,UAAUspC,SAAS,WAAW,OAAOs0B,IAAI,IAAIE,GAAG,WAAW,GAAGpgE,KAAKqgE,QAAQ,KAAK,IAAIlwD,UAAU5R,aAAa,GAAG,IAAI4R,UAAU5R,OAAO,CAAC,IAAIc,EAAE8Q,UAAU,GAAGnQ,KAAKsgE,sBAAsBjhE,KAAK+gE,GAAG99D,UAAUg+D,sBAAsB,SAASjhE,GAAGW,KAAKqgE,QAAQhhE,GAAG+gE,GAAG99D,UAAUqpC,YAAY,WAAW,MAAM,CAACu0B,KAAKE,GAAG99D,UAAUspC,SAAS,WAAW,OAAOw0B,IAAI,IAAIG,GAAG,SAASlhE,GAAG,SAAS2Q,EAAEA,GAAGA,EAAE3Q,EAAEuQ,KAAK5P,KAAKgQ,GAAG3Q,EAAEuQ,KAAK5P,MAAMA,KAAKwgE,YAAY,IAAIhiB,GAAGx+C,KAAK2+B,OAAO,IAAI+7B,GAAG16D,KAAKygE,WAAW,EAAEzgE,KAAK0gE,iBAAiB,KAAK1gE,KAAK2gE,WAAW,EAAEthE,IAAI2Q,EAAEgY,UAAU3oB,IAAI2Q,EAAE1N,UAAUoG,OAAOojC,OAAOzsC,GAAGA,EAAEiD,YAAYkJ,YAAYwE,EAAE,IAAIvR,EAAE,CAACmiE,qBAAqB,CAACvwD,cAAa,IAAK,OAAOL,EAAE1N,UAAUu+D,kBAAkB,WAAW,OAAO7gE,KAAKwgE,aAAaxwD,EAAE1N,UAAUk7D,mBAAmB,WAAW,OAAOf,GAAGe,mBAAmBx9D,KAAK0gE,mBAAmB1wD,EAAE1N,UAAUw+D,SAAS,WAAW,OAAO9gE,KAAK2+B,QAAQ3uB,EAAE1N,UAAU8wB,IAAI,SAAS/zB,GAAG,IAAI,IAAI2Q,EAAE6vD,GAAGI,UAAU5gE,EAAEmjD,iBAAiBnjD,GAAGkpB,WAAWvY,EAAEgtC,WAAW,CAAC,IAAIv+C,EAAEuR,EAAEoC,OAAO3T,EAAE+gE,MAAMx/D,KAAKygE,cAAczgE,KAAK2+B,OAAO37B,OAAOvE,EAAE69C,cAAc79C,GAAGuB,KAAKwgE,YAAYptC,IAAI30B,KAAKuR,EAAE1N,UAAU69D,aAAa,SAAS9gE,GAAGW,KAAK0gE,iBAAiBrhE,EAAE,IAAI,IAAI2Q,EAAE3Q,EAAEkpB,WAAWvY,EAAEgtC,WAAWh9C,KAAKozB,IAAIpjB,EAAEoC,QAAQpS,KAAK+gE,mBAAmB/wD,EAAE1N,UAAUy+D,gBAAgB,WAAW,IAAI,IAAI1hE,EAAE,IAAI2hE,GAAGhhE,KAAKqgE,SAASrwD,EAAEhQ,KAAKwgE,YAAYj4C,WAAWvY,EAAEgtC,WAAW,IAAI,IAAIv+C,EAAEuR,EAAEoC,OAAO9S,EAAEU,KAAK2+B,OAAOk5B,MAAMp5D,EAAE69C,eAAe/zB,WAAWjpB,EAAE09C,WAAW,CAAC,IAAIh7B,EAAE1iB,EAAE8S,OAAO,GAAG4P,EAAE49C,QAAQnhE,EAAEmhE,UAAUnhE,EAAE6gE,gBAAgBt9C,EAAE3iB,GAAGW,KAAK2gE,cAAc3gE,KAAKqgE,QAAQhe,SAAS,OAAO,OAAOryC,EAAE1N,UAAUqpC,YAAY,WAAW,MAAM,IAAI37B,EAAE1N,UAAUspC,SAAS,WAAW,OAAO57B,GAAGvR,EAAEmiE,qBAAqBh5C,IAAI,WAAW,OAAOo5C,IAAIt4D,OAAOyP,iBAAiBnI,EAAEvR,GAAGuR,EAA/yC,CAAkzCowD,IAAIY,GAAG,SAAS3hE,GAAG,SAAS2Q,IAAI3Q,EAAEuQ,KAAK5P,MAAMA,KAAKihE,IAAI,KAAK,IAAIjxD,EAAEG,UAAU,GAAGnQ,KAAKihE,IAAIjxD,EAAE,OAAO3Q,IAAI2Q,EAAEgY,UAAU3oB,GAAG2Q,EAAE1N,UAAUoG,OAAOojC,OAAOzsC,GAAGA,EAAEiD,WAAW0N,EAAE1N,UAAUkJ,YAAYwE,EAAEA,EAAE1N,UAAUqD,QAAQ,WAAW,GAAG,IAAIwK,UAAU5R,OAAO,OAAOc,EAAEiD,UAAUqD,QAAQzB,MAAMlE,KAAKmQ,WAAW,IAAmB1R,EAAE0R,UAAU,GAAG7Q,EAAE6Q,UAAU,GAAG6R,EAAE7R,UAAU,GAAGye,EAA1Dze,UAAU,GAAoDwvD,aAAa7gE,EAAEQ,EAAEqgE,aAAa3/D,KAAKihE,IAAIC,qBAAqBtyC,EAAEnwB,EAAEK,EAAEkjB,IAAIhS,EAAE1N,UAAUqpC,YAAY,WAAW,MAAM,IAAI37B,EAAE1N,UAAUspC,SAAS,WAAW,OAAO57B,GAAGA,EAAzf,CAA4fyuD,IAAI0C,GAAG,SAAS9hE,IAAI,GAAGW,KAAKohE,kBAAkB/hE,EAAEgiE,0BAA0BrhE,KAAKshE,aAAajiE,EAAEkiE,UAAUvhE,KAAKwhE,WAAWniE,EAAEoiE,WAAWzhE,KAAK0hE,YAAYriE,EAAEsiE,oBAAoB3hE,KAAK4hE,gBAAe,EAAG5hE,KAAK6hE,gBAAgBxiE,EAAEyiE,wBAAwB,IAAI3xD,UAAU5R,aAAa,GAAG,IAAI4R,UAAU5R,OAAO,CAAC,IAAIyR,EAAEG,UAAU,GAAGnQ,KAAK+hE,oBAAoB/xD,QAAQ,GAAG,IAAIG,UAAU5R,OAAO,CAAC,IAAIE,EAAE0R,UAAU,GAAG7Q,EAAE6Q,UAAU,GAAGnQ,KAAK+hE,oBAAoBtjE,GAAGuB,KAAKgiE,eAAe1iE,QAAQ,GAAG,IAAI6Q,UAAU5R,OAAO,CAAC,IAAIyjB,EAAE7R,UAAU,GAAGye,EAAEze,UAAU,GAAGrR,EAAEqR,UAAU,GAAGzQ,EAAEyQ,UAAU,GAAGnQ,KAAK+hE,oBAAoB//C,GAAGhiB,KAAKgiE,eAAepzC,GAAG5uB,KAAKiiE,aAAanjE,GAAGkB,KAAKkiE,cAAcxiE,KAAKyiE,GAAG,CAACZ,UAAU,CAAClxD,cAAa,GAAI+xD,SAAS,CAAC/xD,cAAa,GAAIgyD,WAAW,CAAChyD,cAAa,GAAIoxD,WAAW,CAACpxD,cAAa,GAAIiyD,WAAW,CAACjyD,cAAa,GAAIkyD,WAAW,CAAClyD,cAAa,GAAIgxD,0BAA0B,CAAChxD,cAAa,GAAIsxD,oBAAoB,CAACtxD,cAAa,GAAIyxD,wBAAwB,CAACzxD,cAAa,IAAK8wD,GAAG7+D,UAAUkgE,eAAe,WAAW,OAAOxiE,KAAKshE,cAAcH,GAAG7+D,UAAUmgE,cAAc,WAAW,OAAOziE,KAAK4hE,gBAAgBT,GAAG7+D,UAAUy/D,oBAAoB,SAAS1iE,GAAGW,KAAKohE,kBAAkB/hE,EAAE,IAAIW,KAAKohE,oBAAoBphE,KAAKwhE,WAAWL,GAAGoB,YAAYviE,KAAKohE,kBAAkB,IAAIphE,KAAKwhE,WAAWL,GAAGmB,WAAWtiE,KAAK0hE,YAAY9iE,KAAKoiB,IAAIhhB,KAAKohE,oBAAoB/hE,GAAG,IAAIW,KAAKohE,kBAAkB,GAAGphE,KAAKwhE,aAAaL,GAAGM,aAAazhE,KAAKohE,kBAAkBD,GAAGE,4BAA4BF,GAAG7+D,UAAUogE,aAAa,WAAW,OAAO1iE,KAAKwhE,YAAYL,GAAG7+D,UAAU2/D,aAAa,SAAS5iE,GAAGW,KAAKwhE,WAAWniE,GAAG8hE,GAAG7+D,UAAUqgE,kBAAkB,SAAStjE,GAAGW,KAAK6hE,gBAAgBxiE,EAAE,EAAE,EAAEA,GAAG8hE,GAAG7+D,UAAUsgE,kBAAkB,WAAW,OAAO5iE,KAAK6hE,iBAAiBV,GAAG7+D,UAAUugE,oBAAoB,WAAW,OAAO7iE,KAAKohE,mBAAmBD,GAAG7+D,UAAU0/D,eAAe,SAAS3iE,GAAGW,KAAKshE,aAAajiE,GAAG8hE,GAAG7+D,UAAUwgE,cAAc,WAAW,OAAO9iE,KAAK0hE,aAAaP,GAAG7+D,UAAU4/D,cAAc,SAAS7iE,GAAGW,KAAK0hE,YAAYriE,GAAG8hE,GAAG7+D,UAAUygE,eAAe,SAAS1jE,GAAGW,KAAK4hE,eAAeviE,GAAG8hE,GAAG7+D,UAAUqpC,YAAY,WAAW,MAAM,IAAIw1B,GAAG7+D,UAAUspC,SAAS,WAAW,OAAOu1B,IAAIA,GAAG6B,oBAAoB,SAAS3jE,GAAG,IAAI2Q,EAAEpR,KAAK2J,GAAG,EAAElJ,EAAE,OAAO,EAAET,KAAKqkE,IAAIjzD,EAAE,IAAImyD,GAAGZ,UAAU35C,IAAI,WAAW,OAAO,GAAGu6C,GAAGC,SAASx6C,IAAI,WAAW,OAAO,GAAGu6C,GAAGE,WAAWz6C,IAAI,WAAW,OAAO,GAAGu6C,GAAGV,WAAW75C,IAAI,WAAW,OAAO,GAAGu6C,GAAGG,WAAW16C,IAAI,WAAW,OAAO,GAAGu6C,GAAGI,WAAW36C,IAAI,WAAW,OAAO,GAAGu6C,GAAGd,0BAA0Bz5C,IAAI,WAAW,OAAO,GAAGu6C,GAAGR,oBAAoB/5C,IAAI,WAAW,OAAO,GAAGu6C,GAAGL,wBAAwBl6C,IAAI,WAAW,MAAM,KAAKlf,OAAOyP,iBAAiBgpD,GAAGgB,IAAI,IAAIe,GAAG,SAAS7jE,GAAGW,KAAKmjE,aAAa,KAAKnjE,KAAKojE,WAAW,KAAKpjE,KAAKqjE,kBAAkBjvC,GAAG0lB,iBAAiB95C,KAAKsjE,WAAWjkE,GAAG,MAAMkkE,GAAG,CAACC,KAAK,CAACnzD,cAAa,GAAIozD,OAAO,CAACpzD,cAAa,GAAIqzD,KAAK,CAACrzD,cAAa,GAAIszD,iBAAiB,CAACtzD,cAAa,IAAK6yD,GAAG5gE,UAAUshE,YAAY,SAASvkE,EAAE2Q,EAAEvR,EAAEa,GAAG,IAAI0iB,EAAEhiB,KAAKsjE,WAAWjkE,GAAGuvB,EAAE5uB,KAAKsjE,WAAWtzD,GAAGlR,EAAEkB,KAAKsjE,WAAW7kE,GAAG,QAAQuB,KAAK6jE,UAAU7hD,EAAE4M,EAAE9vB,MAAOkB,KAAK8jE,UAAU9hD,EAAE4M,EAAE9vB,EAAEQ,IAAIU,KAAK+jE,iBAAiB/hD,EAAE4M,EAAEvvB,EAAEZ,EAAEa,IAAK4jE,GAAG5gE,UAAU0hE,yBAAyB,WAAW,IAAI,IAAI3kE,EAAE,EAAE2Q,EAAEhQ,KAAKikE,wBAAwB5kE,GAAGZ,EAAEuB,KAAKikE,wBAAwBj0D,GAAG1Q,GAAE,EAAGb,EAAEuB,KAAKsjE,WAAW/kE,QAAQ,CAAC,IAAIyjB,GAAE,EAAGhiB,KAAK4jE,YAAYvkE,EAAE2Q,EAAEvR,EAAEuB,KAAKmjE,gBAAgBnjE,KAAKojE,WAAWpzD,GAAGkzD,GAAGO,OAAOzhD,GAAE,EAAG1iB,GAAE,GAAID,EAAE2iB,EAAEvjB,EAAEuR,EAAEA,EAAEhQ,KAAKikE,wBAAwB5kE,GAAGZ,EAAEuB,KAAKikE,wBAAwBj0D,GAAG,OAAO1Q,GAAG4jE,GAAG5gE,UAAU4hE,mBAAmB,SAAS7kE,EAAE2Q,EAAEvR,EAAEa,GAAG,OAAK80B,GAAGimB,mBAAmBh7C,EAAE2Q,EAAEvR,KAAKuB,KAAKqjE,mBAAmCjvC,GAAG4kB,kBAAkBhpC,EAAE3Q,EAAEZ,GAAGa,GAAG4jE,GAAG5gE,UAAUyhE,iBAAiB,SAAS1kE,EAAE2Q,EAAEvR,EAAEa,EAAE0iB,GAAG,IAAI4M,EAAEhwB,KAAK8sC,OAAOpsC,EAAEb,GAAGykE,GAAGS,kBAAkB/0C,GAAG,IAAIA,EAAE,GAAG,IAAI,IAAI9vB,EAAEL,EAAEK,EAAEQ,EAAER,GAAG8vB,EAAE,IAAI5uB,KAAK8jE,UAAUzkE,EAAE2Q,EAAEhQ,KAAKsjE,WAAWxkE,GAAGkjB,GAAG,OAAM,EAAG,OAAM,GAAIkhD,GAAG5gE,UAAUuhE,UAAU,SAASxkE,EAAE2Q,EAAEvR,GAA+D,OAAtD21B,GAAGimB,mBAAmBh7C,EAAE2Q,EAAEvR,KAAKuB,KAAKqjE,mBAA4BH,GAAG5gE,UAAU6hE,SAAS,SAAS9kE,GAAGW,KAAKmjE,aAAavkE,KAAKoiB,IAAI3hB,GAAGA,EAAE,IAAIW,KAAKqjE,kBAAkBjvC,GAAGwlB,WAAW55C,KAAKojE,WAAW,IAAIn8D,MAAMjH,KAAKsjE,WAAW/kE,QAAQuyC,KAAK,MAAM,IAAI9gC,GAAE,EAAG,GAAGA,EAAEhQ,KAAKgkE,iCAAiCh0D,GAAG,OAAOhQ,KAAKokE,gBAAgBlB,GAAG5gE,UAAU2hE,wBAAwB,SAAS5kE,GAAG,IAAI,IAAI2Q,EAAE3Q,EAAE,EAAE2Q,EAAEhQ,KAAKsjE,WAAW/kE,QAAQyB,KAAKojE,WAAWpzD,KAAKkzD,GAAGO,QAAQzzD,IAAI,OAAOA,GAAGkzD,GAAG5gE,UAAUwhE,UAAU,SAASzkE,EAAE2Q,EAAEvR,EAAEa,GAAG,OAAO80B,GAAG4kB,kBAAkBhpC,EAAE3Q,EAAEZ,GAAGa,GAAG4jE,GAAG5gE,UAAU8hE,aAAa,WAAW,IAAI,IAAI/kE,EAAE,IAAIw/C,GAAG7uC,EAAE,EAAEA,EAAEhQ,KAAKsjE,WAAW/kE,OAAOyR,IAAIhQ,KAAKojE,WAAWpzD,KAAKkzD,GAAGO,QAAQpkE,EAAE+zB,IAAIpzB,KAAKsjE,WAAWtzD,IAAI,OAAO3Q,EAAE4yC,qBAAqBixB,GAAG5gE,UAAUqpC,YAAY,WAAW,MAAM,IAAIu3B,GAAG5gE,UAAUspC,SAAS,WAAW,OAAOs3B,IAAIA,GAAGiB,SAAS,SAAS9kE,EAAE2Q,GAAG,OAAO,IAAIkzD,GAAG7jE,GAAG8kE,SAASn0D,IAAIuzD,GAAGC,KAAK57C,IAAI,WAAW,OAAO,GAAG27C,GAAGE,OAAO77C,IAAI,WAAW,OAAO,GAAG27C,GAAGG,KAAK97C,IAAI,WAAW,OAAO,GAAG27C,GAAGI,iBAAiB/7C,IAAI,WAAW,OAAO,IAAIlf,OAAOyP,iBAAiB+qD,GAAGK,IAAI,IAAIc,GAAG,WAAWrkE,KAAKskE,QAAQ,KAAKtkE,KAAK22C,gBAAgB,KAAK32C,KAAKukE,uBAAuB,EAAEvkE,KAAKskE,QAAQ,IAAI9lB,IAAIgmB,GAAG,CAACC,sBAAsB,CAACp0D,cAAa,IAAKg0D,GAAG/hE,UAAUkgD,eAAe,WAAW,OAAOxiD,KAAKskE,QAAQjmB,QAAQgmB,GAAGI,wBAAwBJ,GAAG/hE,UAAUu1C,kBAAkB,SAASx4C,GAAGW,KAAK22C,gBAAgBt3C,GAAGglE,GAAG/hE,UAAUoiE,MAAM,SAASrlE,GAAG,IAAI2Q,EAAE,IAAI23B,EAAEtoC,GAAG,GAAGW,KAAK22C,gBAAgBgC,YAAY3oC,GAAGhQ,KAAK2kE,YAAY30D,GAAG,OAAO,KAAKhQ,KAAKskE,QAAQlxC,IAAIpjB,IAAIq0D,GAAG/hE,UAAUsiE,OAAO,aAAaP,GAAG/hE,UAAUuiE,OAAO,SAASxlE,EAAE2Q,GAAG,GAAGA,EAAE,IAAI,IAAIvR,EAAE,EAAEA,EAAEY,EAAEd,OAAOE,IAAIuB,KAAK0kE,MAAMrlE,EAAEZ,SAAS,IAAI,IAAIa,EAAED,EAAEd,OAAO,EAAEe,GAAG,EAAEA,IAAIU,KAAK0kE,MAAMrlE,EAAEC,KAAK+kE,GAAG/hE,UAAUqiE,YAAY,SAAStlE,GAAG,GAAGW,KAAKskE,QAAQ7vC,OAAO,EAAE,OAAM,EAAG,IAAIzkB,EAAEhQ,KAAKskE,QAAQ18C,IAAI5nB,KAAKskE,QAAQ7vC,OAAO,GAAG,OAAOp1B,EAAEgJ,SAAS2H,GAAGhQ,KAAKukE,wBAAwBF,GAAG/hE,UAAUkV,SAAS,WAAW,OAAM,IAAKw8B,IAAIsB,iBAAiBt1C,KAAKwiD,kBAAkBhrC,YAAY6sD,GAAG/hE,UAAUy8C,UAAU,WAAW,GAAG/+C,KAAKskE,QAAQ7vC,OAAO,EAAE,OAAO,KAAK,IAAIp1B,EAAE,IAAIsoC,EAAE3nC,KAAKskE,QAAQ18C,IAAI,IAAI5X,EAAEhQ,KAAKskE,QAAQ18C,IAAI5nB,KAAKskE,QAAQ7vC,OAAO,GAAG,GAAGp1B,EAAEqf,OAAO1O,GAAG,OAAO,KAAKhQ,KAAKskE,QAAQlxC,IAAI/zB,IAAIglE,GAAG/hE,UAAUwiE,yBAAyB,SAASzlE,GAAGW,KAAKukE,uBAAuBllE,GAAGglE,GAAG/hE,UAAUqpC,YAAY,WAAW,MAAM,IAAI04B,GAAG/hE,UAAUspC,SAAS,WAAW,OAAOy4B,IAAIG,GAAGC,sBAAsB78C,IAAI,WAAW,OAAO,IAAI3gB,MAAM,GAAG6pC,KAAK,OAAOpoC,OAAOyP,iBAAiBksD,GAAGG,IAAI,IAAIO,GAAG,aAAaC,GAAG,CAACC,WAAW,CAAC50D,cAAa,GAAI60D,UAAU,CAAC70D,cAAa,GAAI80D,UAAU,CAAC90D,cAAa,GAAIypC,iBAAiB,CAACzpC,cAAa,GAAIupC,UAAU,CAACvpC,cAAa,GAAIm9B,KAAK,CAACn9B,cAAa,IAAK00D,GAAGziE,UAAUqpC,YAAY,WAAW,MAAM,IAAIo5B,GAAGziE,UAAUspC,SAAS,WAAW,OAAOm5B,IAAIA,GAAGK,UAAU,SAAS/lE,GAAG,OAAO,IAAIA,EAAET,KAAK2J,IAAIw8D,GAAGpoB,UAAU,SAASt9C,GAAG,KAAKA,EAAET,KAAK2J,IAAIlJ,GAAG0lE,GAAGE,WAAW,KAAK5lE,IAAIT,KAAK2J,IAAIlJ,GAAG0lE,GAAGE,WAAW,OAAO5lE,GAAG0lE,GAAGj6D,MAAM,WAAW,GAAG,IAAIqF,UAAU5R,OAAO,CAAC,IAAIc,EAAE8Q,UAAU,GAAG,OAAOvR,KAAK+0D,MAAMt0D,EAAE+U,EAAE/U,EAAE8U,GAAG,GAAG,IAAIhE,UAAU5R,OAAO,CAAC,IAAIyR,EAAEG,UAAU,GAAG1R,EAAE0R,UAAU,GAAG7Q,EAAEb,EAAE0V,EAAEnE,EAAEmE,EAAE6N,EAAEvjB,EAAE2V,EAAEpE,EAAEoE,EAAE,OAAOxV,KAAK+0D,MAAM3xC,EAAE1iB,KAAKylE,GAAGM,QAAQ,SAAShmE,EAAE2Q,EAAEvR,GAAG,IAAIa,EAAED,EAAE8U,EAAEnE,EAAEmE,EAAE6N,EAAE3iB,EAAE+U,EAAEpE,EAAEoE,EAAE,OAAO9U,GAAGb,EAAE0V,EAAEnE,EAAEmE,GAAG6N,GAAGvjB,EAAE2V,EAAEpE,EAAEoE,GAAG,GAAG2wD,GAAGO,SAAS,SAASjmE,EAAE2Q,EAAEvR,GAAG,IAAIa,EAAED,EAAE8U,EAAEnE,EAAEmE,EAAE6N,EAAE3iB,EAAE+U,EAAEpE,EAAEoE,EAAE,OAAO9U,GAAGb,EAAE0V,EAAEnE,EAAEmE,GAAG6N,GAAGvjB,EAAE2V,EAAEpE,EAAEoE,GAAG,GAAG2wD,GAAGQ,cAAc,SAASlmE,EAAE2Q,EAAEvR,GAAG,IAAIa,EAAEylE,GAAGj6D,MAAMkF,EAAE3Q,GAAG2iB,EAAE+iD,GAAGj6D,MAAMkF,EAAEvR,GAAG,OAAOG,KAAKoiB,IAAIgB,EAAE1iB,IAAIylE,GAAGS,kBAAkB,SAASnmE,GAAG,GAAGA,EAAE,EAAE,CAAC,KAAKA,EAAE,GAAGA,GAAG0lE,GAAGE,WAAW5lE,GAAG0lE,GAAGE,aAAa5lE,EAAE,OAAO,CAAC,KAAKA,GAAG0lE,GAAGE,YAAY5lE,GAAG0lE,GAAGE,WAAW5lE,EAAE,IAAIA,EAAE,GAAG,OAAOA,GAAG0lE,GAAGU,aAAa,SAASpmE,EAAE2Q,EAAEvR,GAAG,IAAIa,EAAEylE,GAAGj6D,MAAMkF,EAAE3Q,GAAG2iB,EAAE+iD,GAAGj6D,MAAMkF,EAAEvR,GAAG,OAAOsmE,GAAGxpD,KAAKjc,EAAE0iB,IAAI+iD,GAAGxpD,KAAK,SAASlc,EAAE2Q,GAAG,IAAIvR,EAAE,KAAK,OAAOA,EAAEY,EAAE2Q,EAAEA,EAAE3Q,EAAEA,EAAE2Q,GAAGpR,KAAK2J,KAAK9J,EAAE,EAAEG,KAAK2J,GAAG9J,GAAGA,GAAGsmE,GAAGW,UAAU,SAASrmE,GAAG,OAAOA,EAAET,KAAK2J,GAAG,KAAKw8D,GAAGY,QAAQ,SAAStmE,EAAE2Q,GAAG,IAAIvR,EAAEG,KAAKgnE,IAAI51D,EAAE3Q,GAAG,OAAOZ,EAAE,EAAEsmE,GAAGjrB,iBAAiBr7C,EAAE,EAAEsmE,GAAGnrB,UAAUmrB,GAAGv3B,MAAMu3B,GAAGc,qBAAqB,SAASxmE,EAAE2Q,EAAEvR,GAAG,IAAIa,EAAEylE,GAAGj6D,MAAMkF,EAAE3Q,GAAG2iB,EAAE+iD,GAAGj6D,MAAMkF,EAAEvR,GAAGa,EAAE,OAAO0iB,IAAIpjB,KAAK2J,GAAGyZ,EAAE+iD,GAAGE,WAAWjjD,EAAEpjB,KAAK2J,GAAGyZ,EAAE+iD,GAAGE,WAAWjjD,GAAGgjD,GAAGC,WAAWr9C,IAAI,WAAW,OAAO,EAAEhpB,KAAK2J,IAAIy8D,GAAGE,UAAUt9C,IAAI,WAAW,OAAOhpB,KAAK2J,GAAG,GAAGy8D,GAAGG,UAAUv9C,IAAI,WAAW,OAAOhpB,KAAK2J,GAAG,GAAGy8D,GAAGlrB,iBAAiBlyB,IAAI,WAAW,OAAOwM,GAAG0lB,kBAAkBkrB,GAAGprB,UAAUhyB,IAAI,WAAW,OAAOwM,GAAGwlB,WAAWorB,GAAGx3B,KAAK5lB,IAAI,WAAW,OAAOwM,GAAG0iB,WAAWpuC,OAAOyP,iBAAiB4sD,GAAGC,IAAI,IAAIc,GAAG,SAASzmE,IAAIW,KAAK+lE,sBAAsB,EAAE/lE,KAAKgmE,oBAAoB,KAAKhmE,KAAKimE,wBAAwB,EAAEjmE,KAAKkmE,SAAS,KAAKlmE,KAAK44D,UAAU,EAAE54D,KAAK22C,gBAAgB,KAAK32C,KAAKmmE,WAAW,KAAKnmE,KAAKomE,IAAI,KAAKpmE,KAAKqmE,IAAI,KAAKrmE,KAAKsmE,IAAI,KAAKtmE,KAAKumE,IAAI,KAAKvmE,KAAKwmE,MAAM,IAAI/I,GAAGz9D,KAAKymE,MAAM,IAAIhJ,GAAGz9D,KAAK0mE,SAAS,IAAIjJ,GAAGz9D,KAAK2mE,SAAS,IAAIlJ,GAAGz9D,KAAK4mE,MAAM,EAAE5mE,KAAK6mE,wBAAuB,EAAG,IAAI72D,EAAEG,UAAU,GAAG1R,EAAE0R,UAAU,GAAG7Q,EAAE6Q,UAAU,GAAGnQ,KAAK22C,gBAAgB3mC,EAAEhQ,KAAKmmE,WAAW1nE,EAAEuB,KAAKomE,IAAI,IAAIhuB,GAAGp4C,KAAKgmE,oBAAoBpnE,KAAK2J,GAAG,EAAE9J,EAAEokE,sBAAsBpkE,EAAEokE,uBAAuB,GAAGpkE,EAAEikE,iBAAiBvB,GAAGM,aAAazhE,KAAKimE,wBAAwB5mE,EAAEynE,4BAA4B9mE,KAAKma,KAAK7a,IAAIynE,GAAG,CAACC,iCAAiC,CAAC32D,cAAa,GAAI42D,wCAAwC,CAAC52D,cAAa,GAAI62D,kCAAkC,CAAC72D,cAAa,GAAIy2D,2BAA2B,CAACz2D,cAAa,IAAKy1D,GAAGxjE,UAAU6kE,eAAe,SAAS9nE,EAAE2Q,GAAG,GAAGhQ,KAAKqmE,IAAIrmE,KAAKsmE,IAAItmE,KAAKsmE,IAAItmE,KAAKumE,IAAIvmE,KAAKumE,IAAIlnE,EAAEW,KAAKwmE,MAAMnI,eAAer+D,KAAKqmE,IAAIrmE,KAAKsmE,KAAKtmE,KAAKonE,qBAAqBpnE,KAAKwmE,MAAMxmE,KAAK4mE,MAAM5mE,KAAK44D,UAAU54D,KAAK0mE,UAAU1mE,KAAKymE,MAAMpI,eAAer+D,KAAKsmE,IAAItmE,KAAKumE,KAAKvmE,KAAKonE,qBAAqBpnE,KAAKymE,MAAMzmE,KAAK4mE,MAAM5mE,KAAK44D,UAAU54D,KAAK2mE,UAAU3mE,KAAKsmE,IAAI5nD,OAAO1e,KAAKumE,KAAK,OAAO,KAAK,IAAI9nE,EAAE21B,GAAGimB,mBAAmBr6C,KAAKqmE,IAAIrmE,KAAKsmE,IAAItmE,KAAKumE,KAAKjnE,EAAEb,IAAI21B,GAAGwlB,WAAW55C,KAAK4mE,QAAQpc,GAAGzQ,MAAMt7C,IAAI21B,GAAG0lB,kBAAkB95C,KAAK4mE,QAAQpc,GAAG3Q,MAAM,IAAIp7C,EAAEuB,KAAKqnE,aAAar3D,GAAG1Q,EAAEU,KAAKsnE,eAAe7oE,EAAEuR,GAAGhQ,KAAKunE,cAAc9oE,EAAEuR,IAAI81D,GAAGxjE,UAAUklE,cAAc,SAASnoE,EAAE2Q,GAAG,IAAIvR,EAAE,IAAIg/D,GAAGp+D,EAAE2Q,GAAG1Q,EAAE,IAAIm+D,GAAGz9D,KAAKonE,qBAAqB3oE,EAAE+rD,GAAGzQ,KAAK/5C,KAAK44D,UAAUt5D,GAAG,IAAI0iB,EAAE,IAAIy7C,GAAGz9D,KAAKonE,qBAAqB3oE,EAAE+rD,GAAG3Q,MAAM75C,KAAK44D,UAAU52C,GAAG,IAAI4M,EAAE5e,EAAEmE,EAAE9U,EAAE8U,EAAErV,EAAEkR,EAAEoE,EAAE/U,EAAE+U,EAAE1U,EAAEd,KAAK+0D,MAAM70D,EAAE8vB,GAAG,OAAO5uB,KAAKmmE,WAAW3D,kBAAkB,KAAKrB,GAAGI,UAAUvhE,KAAKkmE,SAASxB,MAAMplE,EAAEqU,IAAI3T,KAAKynE,aAAaz3D,EAAEtQ,EAAEd,KAAK2J,GAAG,EAAE7I,EAAEd,KAAK2J,GAAG,EAAE6rB,GAAGwlB,UAAU55C,KAAK44D,WAAW54D,KAAKkmE,SAASxB,MAAM1iD,EAAErO,IAAI,MAAM,KAAKwtD,GAAGiB,SAASpiE,KAAKkmE,SAASxB,MAAMplE,EAAEqU,IAAI3T,KAAKkmE,SAASxB,MAAM1iD,EAAErO,IAAI,MAAM,KAAKwtD,GAAGkB,WAAW,IAAI57B,EAAE,IAAIkB,EAAElB,EAAEtyB,EAAEvV,KAAKoiB,IAAIhhB,KAAK44D,WAAWh6D,KAAKqkE,IAAIvjE,GAAG+mC,EAAEryB,EAAExV,KAAKoiB,IAAIhhB,KAAK44D,WAAWh6D,KAAKgnE,IAAIlmE,GAAG,IAAIqM,EAAE,IAAI47B,EAAEroC,EAAEqU,GAAGQ,EAAEsyB,EAAEtyB,EAAE7U,EAAEqU,GAAGS,EAAEqyB,EAAEryB,GAAGzB,EAAE,IAAIg1B,EAAE3lB,EAAErO,GAAGQ,EAAEsyB,EAAEtyB,EAAE6N,EAAErO,GAAGS,EAAEqyB,EAAEryB,GAAGpU,KAAKkmE,SAASxB,MAAM34D,GAAG/L,KAAKkmE,SAASxB,MAAM/xD,KAAKmzD,GAAGxjE,UAAUkgD,eAAe,WAAW,OAAOxiD,KAAKkmE,SAAS1jB,kBAAkBsjB,GAAGxjE,UAAUolE,aAAa,SAASroE,EAAE2Q,EAAEvR,EAAEa,GAAG,IAAI0iB,GAAE,EAAG4M,EAAE,KAAK,IAAIA,EAAE1wB,EAAE25B,aAAa7nB,EAAE0tD,GAAG1tD,EAAE2D,GAAGlV,EAAEi/D,GAAGj/D,EAAEkV,KAAKrU,GAAG,EAAE,EAAEsvB,EAAEvmB,SAAShJ,GAAGT,KAAKoiB,IAAI1hB,IAAIU,KAAKmmE,WAAWrD,kBAAkB9gD,GAAE,GAAI,MAAM3iB,GAAG,KAAKA,aAAaitC,GAAG,MAAMjtC,EAAEuvB,EAAE,IAAI+Y,EAAE,EAAE,GAAG3lB,GAAE,EAAGA,EAAEhiB,KAAKkmE,SAASxB,MAAM91C,GAAG5uB,KAAK2nE,oBAAoB33D,EAAEvR,EAAEa,EAAEU,KAAKmmE,WAAWrD,kBAAkBgD,GAAGxjE,UAAUslE,gBAAgB,SAASvoE,EAAE2Q,EAAEvR,EAAEa,EAAE0iB,GAAG,IAAI4M,EAAE5e,EAAEmE,EAAE9U,EAAE8U,EAAErV,EAAEkR,EAAEoE,EAAE/U,EAAE+U,EAAE1U,EAAEd,KAAK+0D,MAAM70D,EAAE8vB,GAAG6X,EAAEhoC,EAAE0V,EAAE9U,EAAE8U,EAAEpI,EAAEtN,EAAE2V,EAAE/U,EAAE+U,EAAEzB,EAAE/T,KAAK+0D,MAAM5nD,EAAE06B,GAAGnnC,IAAI80B,GAAGwlB,UAAUl6C,GAAGiT,IAAIjT,GAAG,EAAEd,KAAK2J,IAAI7I,GAAGiT,IAAIjT,GAAG,EAAEd,KAAK2J,IAAIvI,KAAKkmE,SAASxB,MAAM10D,GAAGhQ,KAAKynE,aAAapoE,EAAEK,EAAEiT,EAAErT,EAAE0iB,GAAGhiB,KAAKkmE,SAASxB,MAAMjmE,IAAIqnE,GAAGxjE,UAAUglE,eAAe,SAASjoE,EAAE2Q,GAAG,GAAGhQ,KAAK0mE,SAAS/yD,GAAGtL,SAASrI,KAAK2mE,SAASjJ,IAAI19D,KAAK44D,UAAUkN,GAAGkB,iCAAiC,OAAOhnE,KAAKkmE,SAASxB,MAAM1kE,KAAK0mE,SAAS/yD,IAAI,KAAK3T,KAAKmmE,WAAWzD,iBAAiBvB,GAAGmB,WAAWtiE,KAAK0nE,aAAa1nE,KAAKsmE,IAAItmE,KAAK0mE,SAAS1mE,KAAK2mE,SAAS3mE,KAAK44D,WAAW54D,KAAKmmE,WAAWzD,iBAAiBvB,GAAGoB,WAAWviE,KAAK6nE,aAAa7nE,KAAK0mE,SAAS1mE,KAAK2mE,WAAW32D,GAAGhQ,KAAKkmE,SAASxB,MAAM1kE,KAAK0mE,SAAS/yD,IAAI3T,KAAK4nE,gBAAgB5nE,KAAKsmE,IAAItmE,KAAK0mE,SAAS/yD,GAAG3T,KAAK2mE,SAASjJ,GAAGr+D,EAAEW,KAAK44D,WAAW54D,KAAKkmE,SAASxB,MAAM1kE,KAAK2mE,SAASjJ,MAAMoI,GAAGxjE,UAAUwlE,aAAa,SAASzoE,GAAGW,KAAKkmE,SAASxB,MAAM,IAAI/8B,EAAEtoC,EAAE8U,EAAEnU,KAAK44D,UAAUv5D,EAAE+U,EAAEpU,KAAK44D,YAAY54D,KAAKkmE,SAASxB,MAAM,IAAI/8B,EAAEtoC,EAAE8U,EAAEnU,KAAK44D,UAAUv5D,EAAE+U,EAAEpU,KAAK44D,YAAY54D,KAAKkmE,SAASxB,MAAM,IAAI/8B,EAAEtoC,EAAE8U,EAAEnU,KAAK44D,UAAUv5D,EAAE+U,EAAEpU,KAAK44D,YAAY54D,KAAKkmE,SAASxB,MAAM,IAAI/8B,EAAEtoC,EAAE8U,EAAEnU,KAAK44D,UAAUv5D,EAAE+U,EAAEpU,KAAK44D,YAAY54D,KAAKkmE,SAASnnB,aAAa+mB,GAAGxjE,UAAUylE,YAAY,SAAS1oE,EAAE2Q,GAAGhQ,KAAKkmE,SAASrB,OAAOxlE,EAAE2Q,IAAI81D,GAAGxjE,UAAU0lE,gBAAgB,WAAWhoE,KAAKkmE,SAASxB,MAAM1kE,KAAK2mE,SAASjJ,KAAKoI,GAAGxjE,UAAU2lE,eAAe,WAAWjoE,KAAKkmE,SAASxB,MAAM1kE,KAAK2mE,SAAShzD,KAAKmyD,GAAGxjE,UAAU4lE,iBAAiB,SAAS7oE,EAAE2Q,EAAEvR,GAAGuB,KAAKsmE,IAAIjnE,EAAEW,KAAKumE,IAAIv2D,EAAEhQ,KAAK4mE,MAAMnoE,EAAEuB,KAAKymE,MAAMpI,eAAeh/D,EAAE2Q,GAAGhQ,KAAKonE,qBAAqBpnE,KAAKymE,MAAMhoE,EAAEuB,KAAK44D,UAAU54D,KAAK2mE,WAAWb,GAAGxjE,UAAUqlE,oBAAoB,SAAStoE,EAAE2Q,EAAEvR,EAAEa,GAAG,IAAI0iB,EAAEhiB,KAAKwmE,MAAM7yD,GAAGib,EAAEm2C,GAAGj6D,MAAMkX,EAAEhiB,KAAKwmE,MAAM9I,IAAI5+D,EAAEimE,GAAGc,qBAAqB7lE,KAAKwmE,MAAM9I,GAAG17C,EAAEhiB,KAAKymE,MAAM9yD,IAAI,EAAEjU,EAAEqlE,GAAGpoB,UAAU/tB,EAAE9vB,GAAG2nC,EAAEs+B,GAAGpoB,UAAUj9C,EAAEd,KAAK2J,IAAIwD,EAAEzM,EAAEb,EAAEkU,EAAElU,EAAEsN,EAAEnN,KAAKoiB,IAAIpiB,KAAKgnE,IAAI9mE,IAAIkC,EAAEghB,EAAE7N,EAAEpI,EAAEnN,KAAKqkE,IAAIx8B,GAAGD,EAAExkB,EAAE5N,EAAErI,EAAEnN,KAAKgnE,IAAIn/B,GAAGtrB,EAAE,IAAIwsB,EAAE3mC,EAAEwlC,GAAGx5B,EAAE,IAAIywD,GAAGz7C,EAAE7G,GAAGvI,EAAE5F,EAAEoxD,iBAAiB,EAAEzrD,GAAGyB,EAAEpH,EAAEoxD,iBAAiB,GAAGzrD,GAAG3S,KAAK4mE,QAAQpc,GAAGzQ,MAAM/5C,KAAKkmE,SAASxB,MAAM9xD,GAAG5S,KAAKkmE,SAASxB,MAAMtwD,KAAKpU,KAAKkmE,SAASxB,MAAMtwD,GAAGpU,KAAKkmE,SAASxB,MAAM9xD,KAAKkzD,GAAGxjE,UAAU8kE,qBAAqB,SAAS/nE,EAAE2Q,EAAEvR,EAAEa,GAAG,IAAI0iB,EAAEhS,IAAIw6C,GAAGzQ,KAAK,GAAG,EAAEnrB,EAAEvvB,EAAEsU,GAAGQ,EAAE9U,EAAEq+D,GAAGvpD,EAAErV,EAAEO,EAAEsU,GAAGS,EAAE/U,EAAEq+D,GAAGtpD,EAAE1U,EAAEd,KAAKK,KAAK2vB,EAAEA,EAAE9vB,EAAEA,GAAG2nC,EAAEzkB,EAAEvjB,EAAEmwB,EAAElvB,EAAEqM,EAAEiW,EAAEvjB,EAAEK,EAAEY,EAAEJ,EAAEo+D,GAAGvpD,EAAE9U,EAAEq+D,GAAGvpD,EAAEpI,EAAEzM,EAAEo+D,GAAGtpD,EAAE/U,EAAEq+D,GAAGtpD,EAAEqyB,EAAEnnC,EAAEqU,GAAGQ,EAAE9U,EAAEsU,GAAGQ,EAAEpI,EAAEzM,EAAEqU,GAAGS,EAAE/U,EAAEsU,GAAGS,EAAEqyB,GAAGq/B,GAAGxjE,UAAUmlE,aAAa,SAASpoE,EAAE2Q,EAAEvR,EAAEa,EAAE0iB,GAAG,IAAI4M,EAAEtvB,IAAI80B,GAAGwlB,WAAW,EAAE,EAAE96C,EAAEF,KAAKoiB,IAAIhR,EAAEvR,GAAGiB,EAAEd,KAAK8sC,MAAM5sC,EAAEkB,KAAKgmE,oBAAoB,IAAI,GAAGtmE,EAAE,EAAE,OAAO,KAAK,IAAI,IAAI+mC,EAAE3nC,EAAEY,EAAEqM,EAAE,EAAE4G,EAAE,IAAIg1B,EAAE57B,EAAEjN,GAAG,CAAC,IAAIkC,EAAEgP,EAAE4e,EAAE7iB,EAAE4G,EAAEwB,EAAE9U,EAAE8U,EAAE6N,EAAEpjB,KAAKqkE,IAAIjiE,GAAG2R,EAAEyB,EAAE/U,EAAE+U,EAAE4N,EAAEpjB,KAAKgnE,IAAI5kE,GAAGhB,KAAKkmE,SAASxB,MAAM/xD,GAAG5G,GAAG06B,IAAIq/B,GAAGxjE,UAAUilE,cAAc,SAASloE,EAAE2Q,GAAG,GAAGhQ,KAAKomE,IAAI7uB,oBAAoBv3C,KAAK0mE,SAAShJ,GAAG19D,KAAK0mE,SAAS/yD,GAAG3T,KAAK2mE,SAASjJ,GAAG19D,KAAK2mE,SAAShzD,IAAI3T,KAAKomE,IAAIxuB,kBAAkB53C,KAAKkmE,SAASxB,MAAM1kE,KAAKomE,IAAItiC,gBAAgB,SAAS,GAAG9jC,KAAK6mE,wBAAuB,EAAG7mE,KAAK0mE,SAAS/yD,GAAGtL,SAASrI,KAAK2mE,SAASjJ,IAAI19D,KAAK44D,UAAUkN,GAAGmB,wCAAwCjnE,KAAKkmE,SAASxB,MAAM1kE,KAAK0mE,SAAS/yD,QAAQ,CAAC,GAAG3T,KAAKkmE,SAASxB,MAAM1kE,KAAK0mE,SAAS/yD,IAAI3T,KAAKimE,wBAAwB,EAAE,CAAC,IAAIxnE,EAAE,IAAIkpC,GAAG3nC,KAAKimE,wBAAwBjmE,KAAK0mE,SAAS/yD,GAAGQ,EAAEnU,KAAKsmE,IAAInyD,IAAInU,KAAKimE,wBAAwB,IAAIjmE,KAAKimE,wBAAwBjmE,KAAK0mE,SAAS/yD,GAAGS,EAAEpU,KAAKsmE,IAAIlyD,IAAIpU,KAAKimE,wBAAwB,IAAIjmE,KAAKkmE,SAASxB,MAAMjmE,GAAG,IAAIa,EAAE,IAAIqoC,GAAG3nC,KAAKimE,wBAAwBjmE,KAAK2mE,SAASjJ,GAAGvpD,EAAEnU,KAAKsmE,IAAInyD,IAAInU,KAAKimE,wBAAwB,IAAIjmE,KAAKimE,wBAAwBjmE,KAAK2mE,SAASjJ,GAAGtpD,EAAEpU,KAAKsmE,IAAIlyD,IAAIpU,KAAKimE,wBAAwB,IAAIjmE,KAAKkmE,SAASxB,MAAMplE,QAAQU,KAAKkmE,SAASxB,MAAM1kE,KAAKsmE,KAAKtmE,KAAKkmE,SAASxB,MAAM1kE,KAAK2mE,SAASjJ,MAAMoI,GAAGxjE,UAAU6lE,aAAa,SAAS9oE,GAAG,IAAI2Q,EAAE,IAAI23B,EAAEtoC,EAAE8U,EAAEnU,KAAK44D,UAAUv5D,EAAE+U,GAAGpU,KAAKkmE,SAASxB,MAAM10D,GAAGhQ,KAAKynE,aAAapoE,EAAE,EAAE,EAAET,KAAK2J,IAAI,EAAEvI,KAAK44D,WAAW54D,KAAKkmE,SAASnnB,aAAa+mB,GAAGxjE,UAAUulE,aAAa,SAASxoE,EAAE2Q,GAAGhQ,KAAKkmE,SAASxB,MAAMrlE,EAAEsU,IAAI3T,KAAKkmE,SAASxB,MAAM10D,EAAE0tD,KAAKoI,GAAGxjE,UAAU6X,KAAK,SAAS9a,GAAGW,KAAK44D,UAAUv5D,EAAEW,KAAK+lE,sBAAsB1mE,GAAG,EAAET,KAAKqkE,IAAIjjE,KAAKgmE,oBAAoB,IAAIhmE,KAAKkmE,SAAS,IAAI7B,GAAGrkE,KAAKkmE,SAASruB,kBAAkB73C,KAAK22C,iBAAiB32C,KAAKkmE,SAASpB,yBAAyBzlE,EAAEymE,GAAGoB,oCAAoCpB,GAAGxjE,UAAU+kE,aAAa,SAAShoE,GAAGW,KAAKomE,IAAI7uB,oBAAoBv3C,KAAKqmE,IAAIrmE,KAAKsmE,IAAItmE,KAAKsmE,IAAItmE,KAAKumE,KAAKvmE,KAAKomE,IAAI3uB,sBAAsB,IAAIz3C,KAAKmmE,WAAWzD,iBAAiBvB,GAAGoB,YAAYviE,KAAKmmE,WAAWzD,iBAAiBvB,GAAGmB,YAAYjjE,GAAGW,KAAKkmE,SAASxB,MAAM1kE,KAAK0mE,SAAS/yD,IAAI3T,KAAKkmE,SAASxB,MAAM1kE,KAAK2mE,SAASjJ,KAAK19D,KAAK4nE,gBAAgB5nE,KAAKsmE,IAAItmE,KAAK0mE,SAAS/yD,GAAG3T,KAAK2mE,SAASjJ,GAAGtpC,GAAGwlB,UAAU55C,KAAK44D,aAAakN,GAAGxjE,UAAUy8C,UAAU,WAAW/+C,KAAKkmE,SAASnnB,aAAa+mB,GAAGxjE,UAAU8lE,sBAAsB,WAAW,OAAOpoE,KAAK6mE,wBAAwBf,GAAGxjE,UAAUqpC,YAAY,WAAW,MAAM,IAAIm6B,GAAGxjE,UAAUspC,SAAS,WAAW,OAAOk6B,IAAIiB,GAAGC,iCAAiCp/C,IAAI,WAAW,MAAM,MAAMm/C,GAAGE,wCAAwCr/C,IAAI,WAAW,MAAM,MAAMm/C,GAAGG,kCAAkCt/C,IAAI,WAAW,OAAO,MAAMm/C,GAAGD,2BAA2Bl/C,IAAI,WAAW,OAAO,IAAIlf,OAAOyP,iBAAiB2tD,GAAGiB,IAAI,IAAIsB,GAAG,WAAWroE,KAAK44D,UAAU,EAAE54D,KAAK22C,gBAAgB,KAAK32C,KAAKmmE,WAAW,KAAK,IAAI9mE,EAAE8Q,UAAU,GAAGH,EAAEG,UAAU,GAAGnQ,KAAK22C,gBAAgBt3C,EAAEW,KAAKmmE,WAAWn2D,GAAGq4D,GAAG/lE,UAAUgmE,eAAe,SAASjpE,EAAE2Q,GAAG,GAAGhQ,KAAK44D,UAAU5oD,EAAE,IAAIA,EAAE,OAAO,KAAK,IAAIvR,EAAEuR,EAAE,EAAE1Q,EAAEV,KAAKoiB,IAAIhR,GAAGgS,EAAEhiB,KAAKuoE,UAAUjpE,GAAGD,EAAEd,QAAQ,EAAEyB,KAAKwoE,kBAAkBnpE,EAAE,GAAG2iB,GAAGhiB,KAAKyoE,mBAAmBppE,EAAEZ,EAAEujB,GAAG,IAAI4M,EAAE5M,EAAEwgC,iBAAiB,OAAO/jD,GAAGugD,GAAG54B,QAAQwI,GAAGA,GAAGy5C,GAAG/lE,UAAUomE,8BAA8B,SAASrpE,EAAE2Q,EAAEvR,GAAG,IAAIa,EAAEU,KAAK2oE,kBAAkB3oE,KAAK44D,WAAW,GAAG5oD,EAAE,CAACvR,EAAEspE,YAAY1oE,GAAE,GAAI,IAAI2iB,EAAEkhD,GAAGiB,SAAS9kE,GAAGC,GAAGsvB,EAAE5M,EAAEzjB,OAAO,EAAEE,EAAEypE,iBAAiBlmD,EAAE4M,GAAG5M,EAAE4M,EAAE,GAAG47B,GAAGzQ,MAAMt7C,EAAEupE,kBAAkB,IAAI,IAAIlpE,EAAE8vB,EAAE,EAAE9vB,GAAG,EAAEA,IAAIL,EAAE0oE,eAAenlD,EAAEljB,IAAG,OAAQ,CAACL,EAAEspE,YAAY1oE,GAAE,GAAI,IAAIK,EAAEwjE,GAAGiB,SAAS9kE,EAAEC,GAAGmnC,EAAE/mC,EAAEnB,OAAO,EAAEE,EAAEypE,iBAAiBxoE,EAAE,GAAGA,EAAE,GAAG8qD,GAAGzQ,MAAMt7C,EAAEupE,kBAAkB,IAAI,IAAIj8D,EAAE,EAAEA,GAAG06B,EAAE16B,IAAItN,EAAE0oE,eAAeznE,EAAEqM,IAAG,GAAItN,EAAEwpE,iBAAiBxpE,EAAEsgD,aAAaspB,GAAG/lE,UAAUsmE,uBAAuB,SAASvpE,EAAE2Q,EAAEvR,GAAG,IAAIa,EAAEU,KAAK2oE,kBAAkB3oE,KAAK44D,WAAW5oD,IAAIw6C,GAAG3Q,QAAQv6C,GAAGA,GAAG,IAAI0iB,EAAEkhD,GAAGiB,SAAS9kE,EAAEC,GAAGsvB,EAAE5M,EAAEzjB,OAAO,EAAEE,EAAEypE,iBAAiBlmD,EAAE4M,EAAE,GAAG5M,EAAE,GAAGhS,GAAG,IAAI,IAAIlR,EAAE,EAAEA,GAAG8vB,EAAE9vB,IAAI,CAAC,IAAIY,EAAE,IAAIZ,EAAEL,EAAE0oE,eAAenlD,EAAEljB,GAAGY,GAAGjB,EAAEsgD,aAAaspB,GAAG/lE,UAAUumE,uBAAuB,SAASxpE,EAAE2Q,GAAG,IAAIvR,EAAEuB,KAAK2oE,kBAAkB3oE,KAAK44D,WAAWt5D,EAAE4jE,GAAGiB,SAAS9kE,EAAEZ,GAAGujB,EAAE1iB,EAAEf,OAAO,EAAEyR,EAAEk4D,iBAAiB5oE,EAAE,GAAGA,EAAE,GAAGkrD,GAAGzQ,MAAM,IAAI,IAAInrB,EAAE,EAAEA,GAAG5M,EAAE4M,IAAI5e,EAAEm3D,eAAe7nE,EAAEsvB,IAAG,GAAI5e,EAAEi4D,iBAAiBj4D,EAAEw3D,cAAcloE,EAAE0iB,EAAE,GAAG1iB,EAAE0iB,IAAI,IAAIljB,EAAEokE,GAAGiB,SAAS9kE,GAAGZ,GAAGiB,EAAEZ,EAAEP,OAAO,EAAEyR,EAAEk4D,iBAAiBppE,EAAEY,GAAGZ,EAAEY,EAAE,GAAG8qD,GAAGzQ,MAAM,IAAI,IAAItT,EAAE/mC,EAAE,EAAE+mC,GAAG,EAAEA,IAAIz2B,EAAEm3D,eAAeroE,EAAE2nC,IAAG,GAAIz2B,EAAEi4D,iBAAiBj4D,EAAEw3D,cAAc1oE,EAAE,GAAGA,EAAE,IAAIkR,EAAE+uC,aAAaspB,GAAG/lE,UAAUkmE,kBAAkB,SAASnpE,EAAE2Q,GAAG,OAAOhQ,KAAKmmE,WAAW3D,kBAAkB,KAAKrB,GAAGI,UAAUvxD,EAAEm4D,aAAa9oE,GAAG,MAAM,KAAK8hE,GAAGkB,WAAWryD,EAAE83D,aAAazoE,KAAKgpE,GAAG/lE,UAAUwmE,aAAa,SAASzpE,EAAE2Q,GAAG,GAAGhQ,KAAK44D,UAAU5oD,EAAEA,EAAE,IAAIhQ,KAAKmmE,WAAW1D,gBAAgB,OAAO,KAAK,GAAG,IAAIzyD,EAAE,OAAO,KAAK,IAAIvR,EAAEG,KAAKoiB,IAAIhR,GAAG1Q,EAAEU,KAAKuoE,UAAU9pE,GAAG,GAAGY,EAAEd,QAAQ,EAAEyB,KAAKwoE,kBAAkBnpE,EAAE,GAAGC,QAAQ,GAAGU,KAAKmmE,WAAW1D,gBAAgB,CAAC,IAAIzgD,EAAEhS,EAAE,EAAEhQ,KAAK0oE,8BAA8BrpE,EAAE2iB,EAAE1iB,QAAQU,KAAK6oE,uBAAuBxpE,EAAEC,GAAG,OAAOA,EAAEkjD,kBAAkB6lB,GAAG/lE,UAAUymE,oBAAoB,WAAW,OAAO/oE,KAAKmmE,YAAYkC,GAAG/lE,UAAUqmE,kBAAkB,SAAStpE,GAAG,OAAOA,EAAEW,KAAKmmE,WAAWvD,qBAAqByF,GAAG/lE,UAAU0mE,aAAa,SAAS3pE,EAAE2Q,EAAEvR,GAAG,GAAGuB,KAAK44D,UAAUn6D,EAAEY,EAAEd,QAAQ,EAAE,OAAOyB,KAAK8oE,aAAazpE,EAAEZ,GAAG,GAAG,IAAIA,EAAE,OAAO4pE,GAAGY,gBAAgB5pE,GAAG,IAAIC,EAAEU,KAAKuoE,UAAU9pE,GAAG,OAAOuB,KAAK4oE,uBAAuBvpE,EAAE2Q,EAAE1Q,GAAGA,EAAEkjD,kBAAkB6lB,GAAG/lE,UAAUmmE,mBAAmB,SAASppE,EAAE2Q,EAAEvR,GAAG,IAAIa,EAAEU,KAAK2oE,kBAAkB3oE,KAAK44D,WAAW,GAAG5oD,EAAE,CAAC,IAAIgS,EAAEkhD,GAAGiB,SAAS9kE,GAAGC,GAAGsvB,EAAE5M,EAAEzjB,OAAO,EAAEE,EAAEypE,iBAAiBlmD,EAAE4M,GAAG5M,EAAE4M,EAAE,GAAG47B,GAAGzQ,MAAMt7C,EAAEupE,kBAAkB,IAAI,IAAIlpE,EAAE8vB,EAAE,EAAE9vB,GAAG,EAAEA,IAAIL,EAAE0oE,eAAenlD,EAAEljB,IAAG,OAAQ,CAAC,IAAIY,EAAEwjE,GAAGiB,SAAS9kE,EAAEC,GAAGmnC,EAAE/mC,EAAEnB,OAAO,EAAEE,EAAEypE,iBAAiBxoE,EAAE,GAAGA,EAAE,GAAG8qD,GAAGzQ,MAAMt7C,EAAEupE,kBAAkB,IAAI,IAAIj8D,EAAE,EAAEA,GAAG06B,EAAE16B,IAAItN,EAAE0oE,eAAeznE,EAAEqM,IAAG,GAAItN,EAAEwpE,kBAAkBI,GAAG/lE,UAAUimE,UAAU,SAASlpE,GAAG,OAAO,IAAIymE,GAAG9lE,KAAK22C,gBAAgB32C,KAAKmmE,WAAW9mE,IAAIgpE,GAAG/lE,UAAUqpC,YAAY,WAAW,MAAM,IAAI08B,GAAG/lE,UAAUspC,SAAS,WAAW,OAAOy8B,IAAIA,GAAGY,gBAAgB,SAAS5pE,GAAG,IAAI,IAAI2Q,EAAE,IAAI/I,MAAM5H,EAAEd,QAAQuyC,KAAK,MAAMryC,EAAE,EAAEA,EAAEuR,EAAEzR,OAAOE,IAAIuR,EAAEvR,GAAG,IAAIkpC,EAAEtoC,EAAEZ,IAAI,OAAOuR,GAAG,IAAIk5D,GAAG,WAAWlpE,KAAKmpE,WAAW,KAAKnpE,KAAKopE,KAAK,IAAI3L,GAAGz9D,KAAKqpE,KAAK,IAAIj1C,GAAG,IAAI/0B,EAAE8Q,UAAU,GAAGnQ,KAAKmpE,WAAW9pE,GAAGiqE,GAAG,CAACC,aAAa,CAACl5D,cAAa,IAAK64D,GAAG5mE,UAAUknE,oBAAoB,WAAW,GAAG,IAAIr5D,UAAU5R,OAAO,CAAC,IAAI,IAAIc,EAAE8Q,UAAU,GAAGH,EAAE,IAAIwuC,GAAG//C,EAAEuB,KAAKmpE,WAAW5gD,WAAW9pB,EAAEu+C,WAAW,CAAC,IAAI19C,EAAEb,EAAE2T,OAAO4P,EAAE1iB,EAAEg9C,cAAcj9C,EAAE+U,EAAE4N,EAAE+wB,WAAW1zC,EAAE+U,EAAE4N,EAAE6wB,WAAW7yC,KAAKwpE,oBAAoBnqE,EAAEC,EAAEmuD,mBAAmBz9C,GAAG,OAAOA,EAAE,GAAG,IAAIG,UAAU5R,OAAO,GAAGmvC,EAAEv9B,UAAU,GAAGouC,KAAKpuC,UAAU,aAAaw3B,GAAGx3B,UAAU,aAAa8jD,IAAG,IAAI,IAAIrlC,EAAEze,UAAU,GAAGrR,EAAEqR,UAAU,GAAGzQ,EAAEyQ,UAAU,GAAGs2B,EAAE3nC,EAAEwsD,UAAU9I,iBAAiBz2C,EAAE,EAAEA,EAAE06B,EAAEloC,OAAO,EAAEwN,IAA8F,GAAzF/L,KAAKopE,KAAK1L,GAAGj3B,EAAE16B,GAAG/L,KAAKopE,KAAKz1D,GAAG8yB,EAAE16B,EAAE,GAAG/L,KAAKopE,KAAK1L,GAAGtpD,EAAEpU,KAAKopE,KAAKz1D,GAAGS,GAAGpU,KAAKopE,KAAKhjD,YAAexnB,KAAKM,IAAIc,KAAKopE,KAAK1L,GAAGvpD,EAAEnU,KAAKopE,KAAKz1D,GAAGQ,GAAGya,EAAEza,MAAMnU,KAAKopE,KAAK7K,gBAAgB3vC,EAAExa,EAAEpU,KAAKopE,KAAK1L,GAAGtpD,GAAGwa,EAAExa,EAAEpU,KAAKopE,KAAKz1D,GAAGS,GAAGggB,GAAGimB,mBAAmBr6C,KAAKopE,KAAK1L,GAAG19D,KAAKopE,KAAKz1D,GAAGib,KAAKwF,GAAGylB,OAAO,CAAC,IAAIlnC,EAAE7T,EAAEsuD,SAAS5C,GAAGzQ,MAAM/5C,KAAKopE,KAAK1L,GAAGh/C,OAAO+nB,EAAE16B,MAAM4G,EAAE7T,EAAEsuD,SAAS5C,GAAG3Q,QAAQ,IAAI74C,EAAE,IAAIyoE,GAAGzpE,KAAKopE,KAAKz2D,GAAGjT,EAAE0zB,IAAIpyB,SAAS,GAAG0sC,EAAEv9B,UAAU,GAAGouC,KAAKpuC,UAAU,aAAaw3B,GAAG+F,EAAEv9B,UAAU,GAAGouC,IAAI,IAAI,IAAI/X,EAAEr2B,UAAU,GAAkBnD,EAAEmD,UAAU,GAAGyC,EAA5BzC,UAAU,GAAsBoY,WAAW3V,EAAEoqC,WAAW,CAAC,IAAI5oC,EAAExB,EAAER,OAAOgC,EAAEu3C,aAAa3rD,KAAKwpE,oBAAoBhjC,EAAEpyB,EAAEpH,KAAKk8D,GAAG5mE,UAAU8qD,SAAS,SAAS/tD,GAAG,IAAI2Q,EAAEhQ,KAAKwpE,oBAAoBnqE,GAAG,OAAG,IAAI2Q,EAAEykB,OAAc,EAAS6jC,GAAGl5D,IAAI4Q,GAAG05D,YAAYR,GAAG5mE,UAAUqpC,YAAY,WAAW,MAAM,IAAIu9B,GAAG5mE,UAAUspC,SAAS,WAAW,OAAOs9B,IAAII,GAAGC,aAAa3hD,IAAI,WAAW,OAAO6hD,IAAI/gE,OAAOyP,iBAAiB+wD,GAAGI,IAAI,IAAIG,GAAG,WAAWzpE,KAAK2pE,WAAW,KAAK3pE,KAAK0pE,WAAW,KAAK,IAAIrqE,EAAE8Q,UAAU,GAAGH,EAAEG,UAAU,GAAGnQ,KAAK2pE,WAAW,IAAIlM,GAAGp+D,GAAGW,KAAK0pE,WAAW15D,GAAGy5D,GAAGnnE,UAAUwqC,UAAU,SAASztC,GAAG,IAAI2Q,EAAE3Q,EAAE,GAAGW,KAAK2pE,WAAWxoE,QAAQ6O,EAAE25D,WAAWtoE,OAAO,OAAO,EAAE,GAAGrB,KAAK2pE,WAAWtoE,QAAQ2O,EAAE25D,WAAWxoE,OAAO,OAAO,EAAE,IAAI1C,EAAEuB,KAAK2pE,WAAWr4B,iBAAiBthC,EAAE25D,YAAY,OAAO,IAAIlrE,GAAI,IAAIA,GAAG,EAAEuR,EAAE25D,WAAWr4B,iBAAiBtxC,KAAK2pE,aAA9ClrE,EAA6DuB,KAAK2pE,WAAW78B,UAAU98B,EAAE25D,aAAaF,GAAGnnE,UAAU2b,SAAS,SAAS5e,EAAE2Q,GAAG,IAAIvR,EAAEY,EAAEq+D,GAAG5wB,UAAU98B,EAAE0tD,IAAI,OAAO,IAAIj/D,EAAEA,EAAEY,EAAEsU,GAAGm5B,UAAU98B,EAAE2D,KAAK81D,GAAGnnE,UAAUkV,SAAS,WAAW,OAAOxX,KAAK2pE,WAAWnyD,YAAYiyD,GAAGnnE,UAAUqpC,YAAY,WAAW,MAAM,CAAC/D,IAAI6hC,GAAGnnE,UAAUspC,SAAS,WAAW,OAAO69B,IAAI,IAAIG,GAAG,SAASvqE,EAAE2Q,EAAEvR,GAAGuB,KAAK09D,GAAGr+D,GAAG,KAAKW,KAAK2T,GAAG3D,GAAG,KAAKhQ,KAAK6T,GAAGpV,GAAG,MAAMmrE,GAAGtnE,UAAUuC,KAAK,WAAW,OAAO+kE,GAAG/kE,KAAK7E,KAAK09D,GAAG19D,KAAK2T,GAAG3T,KAAK6T,KAAK+1D,GAAGtnE,UAAUmc,WAAW,WAAW,OAAOmrD,GAAGnrD,WAAWze,KAAK09D,GAAG19D,KAAK2T,GAAG3T,KAAK6T,KAAK+1D,GAAGtnE,UAAUunE,aAAa,SAASxqE,GAAG,GAAG,OAAOA,EAAE,MAAM,IAAIX,EAAE,2BAA2B,OAAOkrE,GAAGC,aAAaxqE,EAAEW,KAAK09D,GAAG19D,KAAK2T,GAAG3T,KAAK6T,KAAK+1D,GAAGtnE,UAAUwnE,kBAAkB,WAAW,OAAOF,GAAGE,kBAAkB9pE,KAAK09D,GAAG19D,KAAK2T,GAAG3T,KAAK6T,KAAK+1D,GAAGtnE,UAAU+iE,QAAQ,WAAW,OAAOuE,GAAGvE,QAAQrlE,KAAK09D,GAAG19D,KAAK2T,GAAG3T,KAAK6T,KAAK+1D,GAAGtnE,UAAUynE,aAAa,WAAW,OAAOH,GAAGG,aAAa/pE,KAAK09D,GAAG19D,KAAK2T,GAAG3T,KAAK6T,KAAK+1D,GAAGtnE,UAAU0nE,OAAO,WAAW,OAAOJ,GAAGI,OAAOhqE,KAAK09D,GAAG19D,KAAK2T,GAAG3T,KAAK6T,KAAK+1D,GAAGtnE,UAAUuY,SAAS,WAAW,OAAO+uD,GAAG/uD,SAAS7a,KAAK09D,GAAG19D,KAAK2T,GAAG3T,KAAK6T,KAAK+1D,GAAGtnE,UAAU2nE,SAAS,WAAW,OAAOL,GAAGK,SAASjqE,KAAK09D,GAAG19D,KAAK2T,GAAG3T,KAAK6T,KAAK+1D,GAAGtnE,UAAUqpC,YAAY,WAAW,MAAM,IAAIi+B,GAAGtnE,UAAUspC,SAAS,WAAW,OAAOg+B,IAAIA,GAAG/kE,KAAK,SAASxF,EAAE2Q,EAAEvR,GAAG,OAAOG,KAAKoiB,MAAMviB,EAAE0V,EAAE9U,EAAE8U,IAAInE,EAAEoE,EAAE/U,EAAE+U,IAAIpE,EAAEmE,EAAE9U,EAAE8U,IAAI1V,EAAE2V,EAAE/U,EAAE+U,IAAI,IAAIw1D,GAAGnrD,WAAW,SAASpf,EAAE2Q,EAAEvR,GAAG,QAAQA,EAAE0V,EAAE9U,EAAE8U,IAAInE,EAAEoE,EAAE/U,EAAE+U,IAAIpE,EAAEmE,EAAE9U,EAAE8U,IAAI1V,EAAE2V,EAAE/U,EAAE+U,IAAI,GAAGw1D,GAAGM,IAAI,SAAS7qE,EAAE2Q,EAAEvR,EAAEa,GAAG,OAAOD,EAAEC,EAAE0Q,EAAEvR,GAAGmrE,GAAGC,aAAa,SAASxqE,EAAE2Q,EAAEvR,EAAEa,GAAG,IAAI0iB,EAAEhS,EAAEmE,EAAEya,EAAE5e,EAAEoE,EAAEtV,EAAEL,EAAE0V,EAAE6N,EAAEtiB,EAAEJ,EAAE6U,EAAE6N,EAAEykB,EAAEhoC,EAAE2V,EAAEwa,EAAE7iB,EAAEzM,EAAE8U,EAAEwa,EAAEjc,EAAE7T,EAAEiN,EAAErM,EAAE+mC,EAAEzlC,EAAE3B,EAAE8U,EAAE6N,EAAEwkB,EAAEnnC,EAAE+U,EAAEwa,EAAEzT,GAAGpP,EAAE/K,EAAEtB,EAAE8mC,GAAG7zB,EAAE3F,IAAIy5B,EAAEzlC,EAAElC,EAAE0nC,GAAG7zB,EAAE,OAAO3C,EAAErR,EAAEwc,GAAG1c,EAAEE,EAAEqR,EAAErR,GAAGqO,GAAG1N,EAAEX,EAAEqR,EAAErR,IAAIirE,GAAGE,kBAAkB,SAASzqE,EAAE2Q,EAAEvR,GAAG,IAAIa,EAAED,EAAEgJ,SAAS2H,GAAGgS,EAAEhS,EAAE3H,SAAS5J,GAAGmwB,EAAEnwB,EAAE4J,SAAShJ,GAAGP,EAAEQ,EAAE,OAAO0iB,EAAEljB,IAAIA,EAAEkjB,GAAG4M,EAAE9vB,IAAIA,EAAE8vB,GAAG9vB,GAAG8qE,GAAGvE,QAAQ,SAAShmE,EAAE2Q,EAAEvR,GAAG,QAAQsmE,GAAGM,QAAQhmE,EAAE2Q,EAAEvR,MAAOsmE,GAAGM,QAAQr1D,EAAEvR,EAAEY,MAAM0lE,GAAGM,QAAQ5mE,EAAEY,EAAE2Q,IAAK45D,GAAGG,aAAa,SAAS1qE,EAAE2Q,EAAEvR,GAAG,IAAIa,EAAEb,EAAE0V,EAAE6N,EAAEvjB,EAAE2V,EAAEwa,EAAEvvB,EAAE8U,EAAE7U,EAAER,EAAEO,EAAE+U,EAAE4N,EAAEtiB,EAAEsQ,EAAEmE,EAAE7U,EAAEmnC,EAAEz2B,EAAEoE,EAAE4N,EAAEjW,EAAE,EAAE69D,GAAGM,IAAIt7C,EAAE9vB,EAAEY,EAAE+mC,GAAG9zB,EAAEi3D,GAAGM,IAAIprE,EAAE8vB,EAAEA,EAAE9vB,EAAEA,EAAE2nC,EAAE/mC,EAAEA,EAAE+mC,EAAEA,GAAGzlC,EAAE4oE,GAAGM,IAAIt7C,EAAEA,EAAEA,EAAE9vB,EAAEA,EAAEY,EAAEA,EAAEA,EAAE+mC,EAAEA,GAAG,OAAO,IAAIkB,EAAEroC,EAAEqT,EAAE5G,EAAEiW,EAAEhhB,EAAE+K,IAAI69D,GAAGO,sBAAsB,SAAS9qE,EAAE2Q,GAAG,IAAIvR,EAAEuR,EAAEmE,EAAE9U,EAAE8U,EAAE7U,EAAE0Q,EAAEoE,EAAE/U,EAAE+U,EAAE4N,EAAE,IAAI9jB,EAAEmB,EAAE8U,EAAE1V,EAAE,EAAEY,EAAE+U,EAAE9U,EAAE,EAAE,GAAGsvB,EAAE,IAAI1wB,EAAEmB,EAAE8U,EAAE7U,EAAEb,EAAE,EAAEY,EAAE+U,EAAE3V,EAAEa,EAAE,EAAE,GAAG,OAAO,IAAIpB,EAAE8jB,EAAE4M,IAAIg7C,GAAGQ,cAAc,SAAS/qE,EAAE2Q,EAAEvR,GAAG,IAAIa,EAAE0Q,EAAE3H,SAAShJ,GAAG2iB,EAAE1iB,GAAGA,EAAE0Q,EAAE3H,SAAS5J,IAAImwB,EAAEnwB,EAAE0V,EAAE9U,EAAE8U,EAAErV,EAAEL,EAAE2V,EAAE/U,EAAE+U,EAAE,OAAO,IAAIuzB,EAAEtoC,EAAE8U,EAAE6N,EAAE4M,EAAEvvB,EAAE+U,EAAE4N,EAAEljB,IAAI8qE,GAAGI,OAAO,SAAS3qE,EAAE2Q,EAAEvR,GAAG,IAAIa,EAAE0Q,EAAEmE,EAAE9U,EAAE8U,EAAE6N,EAAEhS,EAAEoE,EAAE/U,EAAE+U,EAAEwa,EAAE5e,EAAErR,EAAEU,EAAEV,EAAEG,EAAEL,EAAE0V,EAAE9U,EAAE8U,EAAEzU,EAAEjB,EAAE2V,EAAE/U,EAAE+U,EAAEqyB,EAAEhoC,EAAEE,EAAEU,EAAEV,EAAEoN,EAAEiW,EAAEykB,EAAE7X,EAAElvB,EAAEiT,EAAEic,EAAE9vB,EAAEQ,EAAEmnC,EAAEzlC,EAAE1B,EAAEI,EAAEsiB,EAAEljB,EAAE0nC,EAAEz6B,EAAEA,EAAE4G,EAAEA,EAAE3R,EAAEA,EAAmB,OAAfpC,KAAKK,KAAKunC,GAAG,GAAYojC,GAAG/uD,SAAS,SAASxb,EAAE2Q,EAAEvR,GAAG,IAAIa,GAAGD,EAAE8U,EAAEnE,EAAEmE,EAAE1V,EAAE0V,GAAG,EAAE6N,GAAG3iB,EAAE+U,EAAEpE,EAAEoE,EAAE3V,EAAE2V,GAAG,EAAE,OAAO,IAAIuzB,EAAEroC,EAAE0iB,IAAI4nD,GAAGK,SAAS,SAAS5qE,EAAE2Q,EAAEvR,GAAG,IAAIa,EAAE0Q,EAAE3H,SAAS5J,GAAGujB,EAAE3iB,EAAEgJ,SAAS5J,GAAGmwB,EAAEvvB,EAAEgJ,SAAS2H,GAAGlR,EAAEQ,EAAE0iB,EAAE4M,EAAElvB,GAAGJ,EAAED,EAAE8U,EAAE6N,EAAEhS,EAAEmE,EAAEya,EAAEnwB,EAAE0V,GAAGrV,EAAE2nC,GAAGnnC,EAAED,EAAE+U,EAAE4N,EAAEhS,EAAEoE,EAAEwa,EAAEnwB,EAAE2V,GAAGtV,EAAE,OAAO,IAAI6oC,EAAEjoC,EAAE+mC,IAAI,IAAI4jC,GAAG,WAAWrqE,KAAKsqE,WAAW,KAAKtqE,KAAK44D,UAAU,KAAK54D,KAAKuqE,cAAc,KAAKvqE,KAAKwqE,WAAW,IAAIhsB,GAAG,IAAIn/C,EAAE8Q,UAAU,GAAGH,EAAEG,UAAU,GAAG1R,EAAE0R,UAAU,GAAGnQ,KAAKsqE,WAAWjrE,EAAEW,KAAK44D,UAAU5oD,EAAEhQ,KAAKuqE,cAAc9rE,GAAG4rE,GAAG/nE,UAAUmoE,SAAS,SAASprE,GAAG,GAAGW,KAAK44D,WAAW,EAAE,OAAO,KAAK,IAAI5oD,EAAE3Q,EAAEmjD,iBAAiB/jD,EAAEuB,KAAKuqE,cAAczB,aAAa94D,EAAEhQ,KAAK44D,WAAW54D,KAAK0qE,SAASjsE,EAAE6oC,EAAEiG,SAASjG,EAAE+F,WAAWg9B,GAAG/nE,UAAUqoE,WAAW,SAAStrE,GAAG,IAAI2Q,EAAEhQ,KAAK44D,UAAUn6D,EAAE+rD,GAAGzQ,KAAK/5C,KAAK44D,UAAU,IAAI5oD,GAAGhQ,KAAK44D,UAAUn6D,EAAE+rD,GAAG3Q,OAAO,IAAIv6C,EAAED,EAAEimD,kBAAkBtjC,EAAEg9B,GAAGU,qBAAqBpgD,EAAEkjD,kBAAkB,GAAGxiD,KAAK44D,UAAU,GAAG54D,KAAK4qE,mBAAmBtrE,EAAEU,KAAK44D,WAAW,OAAO,KAAK,GAAG54D,KAAK44D,WAAW,GAAG52C,EAAEzjB,OAAO,EAAE,OAAO,KAAKyB,KAAK6qE,eAAe7oD,EAAEhS,EAAEvR,EAAE6oC,EAAEiG,SAASjG,EAAE+F,UAAU,IAAI,IAAIze,EAAE,EAAEA,EAAEvvB,EAAEgmD,qBAAqBz2B,IAAI,CAAC,IAAI9vB,EAAEO,EAAEkmD,iBAAiB32B,GAAGlvB,EAAEs/C,GAAGU,qBAAqB5gD,EAAE0jD,kBAAkBxiD,KAAK44D,UAAU,GAAG54D,KAAK4qE,mBAAmB9rE,GAAGkB,KAAK44D,YAAY54D,KAAK6qE,eAAenrE,EAAEsQ,EAAEw6C,GAAGG,SAASlsD,GAAG6oC,EAAE+F,SAAS/F,EAAEiG,YAAY88B,GAAG/nE,UAAUwoE,2BAA2B,SAASzrE,EAAE2Q,GAAG,IAAIvR,EAAE,IAAImrE,GAAGvqE,EAAE,GAAGA,EAAE,GAAGA,EAAE,IAAIC,EAAEb,EAAEwrE,WAAW,OAAO71C,GAAG4kB,kBAAkB15C,EAAEb,EAAEi/D,GAAGj/D,EAAEkV,IAAI/U,KAAKoiB,IAAIhR,IAAIq6D,GAAG/nE,UAAUyoE,cAAc,SAAS1rE,GAAG,GAAGW,KAAK44D,WAAW,IAAI54D,KAAKuqE,cAAcxB,sBAAsBtG,gBAAgB,OAAO,KAAK,IAAIzyD,EAAEgvC,GAAGU,qBAAqBrgD,EAAEmjD,kBAAkB/jD,EAAEuB,KAAKuqE,cAAczB,aAAa94D,EAAEhQ,KAAK44D,WAAW54D,KAAK0qE,SAASjsE,EAAE6oC,EAAEiG,SAASjG,EAAE+F,WAAWg9B,GAAG/nE,UAAUooE,SAAS,SAASrrE,EAAE2Q,EAAEvR,GAAG,GAAG,OAAOY,GAAGA,EAAEd,OAAO,EAAE,OAAO,KAAK,IAAIe,EAAE,IAAIm9D,GAAGp9D,EAAE,IAAIkvD,GAAG,EAAEjnB,EAAEgG,SAASt9B,EAAEvR,IAAIuB,KAAKwqE,WAAWp3C,IAAI9zB,IAAI+qE,GAAG/nE,UAAU0oE,UAAU,WAAW,OAAOhrE,KAAKozB,IAAIpzB,KAAKsqE,YAAYtqE,KAAKwqE,YAAYH,GAAG/nE,UAAUuoE,eAAe,SAASxrE,EAAE2Q,EAAEvR,EAAEa,EAAE0iB,GAAG,GAAG,IAAIhS,GAAG3Q,EAAEd,OAAOmnD,GAAGE,mBAAmB,OAAO,KAAK,IAAIh3B,EAAEtvB,EAAER,EAAEkjB,EAAE3iB,EAAEd,QAAQmnD,GAAGE,oBAAoBxxB,GAAGgmB,MAAM/6C,KAAKuvB,EAAE5M,EAAEljB,EAAEQ,EAAEb,EAAE+rD,GAAGG,SAASlsD,IAAI,IAAIiB,EAAEM,KAAKuqE,cAAcvB,aAAa3pE,EAAEZ,EAAEuR,GAAGhQ,KAAK0qE,SAAShrE,EAAEkvB,EAAE9vB,IAAIurE,GAAG/nE,UAAU8wB,IAAI,SAAS/zB,GAAG,GAAGA,EAAE21B,UAAU,OAAO,KAAK31B,aAAa+lD,GAAGplD,KAAK2qE,WAAWtrE,GAAGA,aAAamkD,GAAGxjD,KAAK+qE,cAAc1rE,GAAGA,aAAa6lD,GAAGllD,KAAKyqE,SAASprE,IAAGA,aAAammD,IAAyBnmD,aAAawjD,IAAyBxjD,aAAawmD,IAAyBxmD,aAAakjD,KAA/GviD,KAAKirE,cAAc5rE,IAAuHgrE,GAAG/nE,UAAUsoE,mBAAmB,SAASvrE,EAAE2Q,GAAG,IAAIvR,EAAEY,EAAEmjD,iBAAiB,GAAG/jD,EAAEF,OAAO,EAAE,OAAOyR,EAAE,EAAE,GAAG,IAAIvR,EAAEF,OAAO,OAAOyB,KAAK8qE,2BAA2BrsE,EAAEuR,GAAG,IAAI1Q,EAAED,EAAEm9C,sBAAsBx6B,EAAEpjB,KAAKQ,IAAIE,EAAEozC,YAAYpzC,EAAEmzC,YAAY,OAAOziC,EAAE,GAAG,EAAEpR,KAAKoiB,IAAIhR,GAAGgS,GAAGqoD,GAAG/nE,UAAU2oE,cAAc,SAAS5rE,GAAG,IAAI,IAAI2Q,EAAE,EAAEA,EAAE3Q,EAAE88C,mBAAmBnsC,IAAI,CAAC,IAAIvR,EAAEY,EAAEq8C,aAAa1rC,GAAGhQ,KAAKozB,IAAI30B,KAAK4rE,GAAG/nE,UAAUqpC,YAAY,WAAW,MAAM,IAAI0+B,GAAG/nE,UAAUspC,SAAS,WAAW,OAAOy+B,IAAI,IAAIa,GAAG,aAAaA,GAAG5oE,UAAU6oE,OAAO,SAAS9rE,KAAK6rE,GAAG5oE,UAAUqpC,YAAY,WAAW,MAAM,IAAIu/B,GAAG5oE,UAAUspC,SAAS,WAAW,OAAOs/B,IAAI,IAAIE,GAAG,WAAWprE,KAAKqrE,QAAQ,KAAKrrE,KAAKsrE,SAAS,KAAKtrE,KAAKurE,KAAK,KAAKvrE,KAAK2+B,OAAO,KAAK3+B,KAAKwrE,uBAAuB,KAAK,IAAInsE,EAAE8Q,UAAU,GAAGnQ,KAAKqrE,QAAQhsE,EAAEW,KAAKsrE,UAAS,EAAGtrE,KAAK2+B,OAAO,EAAE3+B,KAAKurE,KAAKlsE,EAAE88C,oBAAoBivB,GAAG9oE,UAAU8P,KAAK,WAAW,GAAGpS,KAAKsrE,SAAS,OAAOtrE,KAAKsrE,UAAS,EAAGF,GAAGK,SAASzrE,KAAKqrE,UAAUrrE,KAAK2+B,SAAS3+B,KAAKqrE,QAAQ,GAAG,OAAOrrE,KAAKwrE,uBAAuB,CAAC,GAAGxrE,KAAKwrE,uBAAuBxuB,UAAU,OAAOh9C,KAAKwrE,uBAAuBp5D,OAAOpS,KAAKwrE,uBAAuB,KAAK,GAAGxrE,KAAK2+B,QAAQ3+B,KAAKurE,KAAK,MAAM,IAAIjsE,EAAE,IAAID,EAAEW,KAAKqrE,QAAQ3vB,aAAa17C,KAAK2+B,UAAU,OAAOt/B,aAAakjD,IAAIviD,KAAKwrE,uBAAuB,IAAIJ,GAAG/rE,GAAGW,KAAKwrE,uBAAuBp5D,QAAQ/S,GAAG+rE,GAAG9oE,UAAUgB,OAAO,WAAW,MAAM,IAAI0D,MAAMhH,KAAK4rC,WAAW6a,YAAY2kB,GAAG9oE,UAAU06C,QAAQ,WAAW,GAAGh9C,KAAKsrE,SAAS,OAAM,EAAG,GAAG,OAAOtrE,KAAKwrE,uBAAuB,CAAC,GAAGxrE,KAAKwrE,uBAAuBxuB,UAAU,OAAM,EAAGh9C,KAAKwrE,uBAAuB,KAAK,QAAQxrE,KAAK2+B,QAAQ3+B,KAAKurE,OAAOH,GAAG9oE,UAAUqpC,YAAY,WAAW,MAAM,CAAC2S,KAAK8sB,GAAG9oE,UAAUspC,SAAS,WAAW,OAAOw/B,IAAIA,GAAGK,SAAS,SAASpsE,GAAG,QAAQA,aAAakjD,KAAK,IAAImpB,GAAG,WAAW1rE,KAAKgjD,MAAM,KAAK,IAAI3jD,EAAE8Q,UAAU,GAAGnQ,KAAKgjD,MAAM3jD,GAAGqsE,GAAGppE,UAAU6oE,OAAO,SAAS9rE,GAAG,OAAOqsE,GAAGP,OAAO9rE,EAAEW,KAAKgjD,QAAQ0oB,GAAGppE,UAAUqpC,YAAY,WAAW,MAAM,CAACu/B,KAAKQ,GAAGppE,UAAUspC,SAAS,WAAW,OAAO8/B,IAAIA,GAAGxxB,cAAc,SAAS76C,EAAE2Q,GAAG,QAAQA,EAAEwsC,sBAAsBz6C,WAAW1C,IAAI+0B,GAAG8lB,cAAc76C,EAAE2Q,EAAEwyC,mBAAmBkpB,GAAGC,uBAAuB,SAAStsE,EAAE2Q,GAAG,GAAGA,EAAEglB,UAAU,OAAM,EAAG,IAAIv2B,EAAEuR,EAAEs1C,kBAAkB,IAAIomB,GAAGxxB,cAAc76C,EAAEZ,GAAG,OAAM,EAAG,IAAI,IAAIa,EAAE,EAAEA,EAAE0Q,EAAEq1C,qBAAqB/lD,IAAI,CAAC,IAAI0iB,EAAEhS,EAAEu1C,iBAAiBjmD,GAAG,GAAGosE,GAAGxxB,cAAc76C,EAAE2iB,GAAG,OAAM,EAAG,OAAM,GAAI0pD,GAAGzb,cAAc,SAAS5wD,EAAE2Q,GAAG,GAAGA,aAAao1C,GAAG,OAAOsmB,GAAGC,uBAAuBtsE,EAAE2Q,GAAG,GAAGA,aAAauyC,GAAG,IAAI,IAAI9jD,EAAE,IAAI2sE,GAAGp7D,GAAGvR,EAAEu+C,WAAW,CAAC,IAAI19C,EAAEb,EAAE2T,OAAO,GAAG9S,IAAI0Q,GAAG07D,GAAGzb,cAAc5wD,EAAEC,GAAG,OAAM,EAAG,OAAM,GAAIosE,GAAGP,OAAO,SAAS9rE,EAAE2Q,GAAG,OAAOA,EAAEglB,UAAUsS,EAAEiG,SAASm+B,GAAGzb,cAAc5wD,EAAE2Q,GAAGs3B,EAAE+F,SAAS/F,EAAEiG,UAAU,IAAIq+B,GAAG,WAAW5rE,KAAK6rE,SAAS,IAAI7qE,EAAEhB,KAAK8rE,UAAU,KAAK9rE,KAAK+rE,kBAAkB,CAACzkC,EAAEkG,KAAKlG,EAAEkG,OAAOo+B,GAAGtpE,UAAU0pE,UAAU,SAAS3sE,GAAGW,KAAKyrD,WAAW,IAAIz7C,EAAEhQ,KAAK8rE,UAAUprE,QAAQrB,GAAGZ,EAAEuR,EAAE,EAAE,OAAO,IAAIA,IAAIvR,EAAEuB,KAAK8rE,UAAUr3C,OAAO,GAAGz0B,KAAK8rE,UAAUlkD,IAAInpB,IAAImtE,GAAGtpE,UAAU2pE,oBAAoB,SAAS5sE,GAAG,IAAI,IAAI2Q,EAAEs3B,EAAEkG,KAAK/uC,EAAEuB,KAAKuoB,WAAW9pB,EAAEu+C,WAAW,CAAC,IAAI19C,EAAEb,EAAE2T,OAAOo9C,WAAWlwD,EAAE4uD,OAAO7uD,IAAIC,EAAEk6C,YAAYn6C,EAAEmrD,GAAGzQ,QAAQzS,EAAEkG,OAAOx9B,EAAE1Q,EAAEk6C,YAAYn6C,EAAEmrD,GAAGzQ,OAAO,GAAG/pC,IAAIs3B,EAAEkG,KAAK,OAAO,KAAK,IAAI,IAAIxrB,EAAEhS,EAAE4e,EAAE5uB,KAAKuoB,WAAWqG,EAAEouB,WAAW,CAAC,IAAIl+C,EAAE8vB,EAAExc,OAAO1S,EAAEZ,EAAE0wD,WAAW,GAAG9vD,EAAE85C,YAAYn6C,EAAEmrD,GAAGE,MAAMpjB,EAAEkG,MAAM9tC,EAAE0uD,YAAY/uD,EAAEmrD,GAAGE,GAAG1oC,GAAGtiB,EAAEwuD,OAAO7uD,GAAG,CAAC,IAAIonC,EAAE/mC,EAAE85C,YAAYn6C,EAAEmrD,GAAGzQ,MAAMhuC,EAAErM,EAAE85C,YAAYn6C,EAAEmrD,GAAG3Q,OAAO,GAAG9tC,IAAIu7B,EAAEkG,KAAK,CAAC,GAAGzhC,IAAIiW,EAAE,MAAM,IAAI8pC,GAAG,yBAAyBhtD,EAAE6yC,iBAAiBlL,IAAIa,EAAEkG,MAAMwI,GAAGC,qBAAqB,8BAA8Bn3C,EAAE6yC,gBAAgB,KAAK3vB,EAAEykB,OAAOuP,GAAGE,OAAOx2C,EAAE85C,YAAYn6C,EAAEmrD,GAAGzQ,QAAQzS,EAAEkG,KAAK,0BAA0B9tC,EAAE0uD,YAAY/uD,EAAEmrD,GAAG3Q,MAAM73B,GAAGtiB,EAAE0uD,YAAY/uD,EAAEmrD,GAAGzQ,KAAK/3B,MAAM4pD,GAAGtpE,UAAUqvC,cAAc,WAAW,IAAItyC,EAAEW,KAAKuoB,WAAW,OAAIlpB,EAAE29C,UAA6B39C,EAAE+S,OAAOu/B,gBAArB,MAAsCi6B,GAAGtpE,UAAUuvD,MAAM,SAASxyD,GAAGktC,EAAE1Z,IAAIgmB,QAAQ,kBAAkB74C,KAAK2xC,iBAAiB,IAAI,IAAI3hC,EAAEhQ,KAAKuoB,WAAWvY,EAAEgtC,WAAYhtC,EAAEoC,OAAOy/C,MAAMxyD,IAAKusE,GAAGtpE,UAAU4pE,uBAAuB,SAAS7sE,GAAG,OAAOW,KAAKmsE,qBAAqB9sE,EAAE+sE,uBAAuBpsE,KAAKqsE,0BAA0B,IAAIT,GAAGtpE,UAAU+pE,0BAA0B,SAAShtE,GAAG,IAAI2Q,EAAEhQ,KAAKyrD,WAAW,GAAGz7C,EAAEykB,QAAQ,EAAE,OAAM,EAAG,IAAIh2B,EAAEuR,EAAEykB,OAAO,EAAEn1B,EAAE0Q,EAAE4X,IAAInpB,GAAG+wD,WAAWhW,YAAYn6C,EAAEmrD,GAAGzQ,MAAM/D,GAAGE,OAAO52C,IAAIgoC,EAAEkG,KAAK,8BAA8B,IAAI,IAAIxrB,EAAE1iB,EAAEsvB,EAAE5uB,KAAKuoB,WAAWqG,EAAEouB,WAAW,CAAC,IAAIl+C,EAAE8vB,EAAExc,OAAOo9C,WAAWxZ,GAAGE,OAAOp3C,EAAEovD,OAAO7uD,GAAG,uBAAuB,IAAIK,EAAEZ,EAAE06C,YAAYn6C,EAAEmrD,GAAGzQ,MAAMtT,EAAE3nC,EAAE06C,YAAYn6C,EAAEmrD,GAAG3Q,OAAO,GAAGn6C,IAAI+mC,EAAE,OAAM,EAAG,GAAGA,IAAIzkB,EAAE,OAAM,EAAGA,EAAEtiB,EAAE,OAAM,GAAIksE,GAAGtpE,UAAUgqE,UAAU,SAASjtE,GAAGW,KAAKuoB,WAAW,IAAI,IAAIvY,EAAE,EAAEA,EAAEhQ,KAAK8rE,UAAUr3C,OAAOzkB,IAAK,GAAGhQ,KAAK8rE,UAAUlkD,IAAI5X,KAAK3Q,EAAE,OAAO2Q,EAAE,OAAO,GAAG47D,GAAGtpE,UAAUimB,SAAS,WAAW,OAAOvoB,KAAKyrD,WAAWljC,YAAYqjD,GAAGtpE,UAAUmpD,SAAS,WAAW,OAAO,OAAOzrD,KAAK8rE,YAAY9rE,KAAK8rE,UAAU,IAAIttB,GAAGx+C,KAAK6rE,SAAS53C,WAAWj0B,KAAK8rE,WAAWF,GAAGtpE,UAAUk3C,YAAY,SAASn6C,EAAE2Q,EAAEvR,GAAG,OAAOuB,KAAK+rE,kBAAkB1sE,KAAKioC,EAAEkG,OAAOxtC,KAAK+rE,kBAAkB1sE,GAAGqsE,GAAGP,OAAOn7D,EAAEvR,EAAEY,GAAGktE,gBAAgBvsE,KAAK+rE,kBAAkB1sE,IAAIusE,GAAGtpE,UAAUkV,SAAS,WAAW,IAAInY,EAAE,IAAIkW,EAAElW,EAAE4uC,OAAO,kBAAkBjuC,KAAK2xC,iBAAiBtyC,EAAE4uC,OAAO,MAAM,IAAI,IAAIj+B,EAAEhQ,KAAKuoB,WAAWvY,EAAEgtC,WAAW,CAAC,IAAIv+C,EAAEuR,EAAEoC,OAAO/S,EAAE4uC,OAAOxvC,GAAGY,EAAE4uC,OAAO,MAAM,OAAO5uC,EAAEmY,YAAYo0D,GAAGtpE,UAAU6pE,qBAAqB,SAAS9sE,GAAG,IAAI,IAAI2Q,EAAEhQ,KAAKuoB,WAAWvY,EAAEgtC,WAAYhtC,EAAEoC,OAAO4hD,aAAa30D,IAAKusE,GAAGtpE,UAAUkqE,iBAAiB,SAASntE,GAAGW,KAAKmsE,qBAAqB9sE,EAAE,GAAG+sE,uBAAuBpsE,KAAKisE,oBAAoB,GAAGjsE,KAAKisE,oBAAoB,GAAG,IAAI,IAAIj8D,EAAE,EAAC,GAAG,GAAIvR,EAAEuB,KAAKuoB,WAAW9pB,EAAEu+C,WAAW,IAAI,IAAI19C,EAAEb,EAAE2T,OAAOo9C,WAAWxtC,EAAE,EAAEA,EAAE,EAAEA,IAAI1iB,EAAEwuD,OAAO9rC,IAAI1iB,EAAEk6C,YAAYx3B,KAAKslB,EAAEgG,WAAWt9B,EAAEgS,IAAG,GAAI,IAAI,IAAI4M,EAAE5uB,KAAKuoB,WAAWqG,EAAEouB,WAAW,IAAI,IAAIl+C,EAAE8vB,EAAExc,OAAO1S,EAAEZ,EAAE0wD,WAAW/oB,EAAE,EAAEA,EAAE,EAAEA,IAAI,GAAG/mC,EAAEyuD,UAAU1nB,GAAG,CAAC,IAAI16B,EAAEu7B,EAAEkG,KAAK,GAAGx9B,EAAEy2B,GAAG16B,EAAEu7B,EAAEiG,aAAa,CAAC,IAAI56B,EAAE7T,EAAE6yC,gBAAgB5lC,EAAE/L,KAAKw5C,YAAY/S,EAAE9zB,EAAEtT,GAAGK,EAAEmuD,sBAAsBpnB,EAAE16B,KAAK6/D,GAAGtpE,UAAUmqE,UAAU,WAAW,OAAOzsE,KAAK6rE,SAASp3C,QAAQm3C,GAAGtpE,UAAUoqE,cAAc,SAASrtE,EAAE2Q,GAAGhQ,KAAK6rE,SAASxrB,IAAIhhD,EAAE2Q,GAAGhQ,KAAK8rE,UAAU,MAAMF,GAAGtpE,UAAUqpC,YAAY,WAAW,MAAM,IAAIigC,GAAGtpE,UAAUspC,SAAS,WAAW,OAAOggC,IAAI,IAAIe,GAAG,SAASttE,GAAG,SAAS2Q,IAAI3Q,EAAEuQ,KAAK5P,MAAMA,KAAK4sE,oBAAoB,KAAK5sE,KAAKivD,OAAO,KAAKjvD,KAAK6sE,uBAAuB,EAAE7sE,KAAK8sE,qBAAqB,EAAE,OAAOztE,IAAI2Q,EAAEgY,UAAU3oB,GAAG2Q,EAAE1N,UAAUoG,OAAOojC,OAAOzsC,GAAGA,EAAEiD,WAAW0N,EAAE1N,UAAUkJ,YAAYwE,EAAEA,EAAE1N,UAAUmzD,wBAAwB,WAAWz1D,KAAK+sE,qBAAqB,IAAI,IAAI1tE,EAAE,KAAK2Q,EAAE,KAAKvR,EAAEuB,KAAK6sE,uBAAuBvtE,EAAE,EAAEA,EAAEU,KAAK4sE,oBAAoBn4C,OAAOn1B,IAAI,CAAC,IAAI0iB,EAAEhiB,KAAK4sE,oBAAoBhlD,IAAItoB,GAAGsvB,EAAE5M,EAAE4pC,SAAS,GAAG5pC,EAAEwtC,WAAWtB,SAAS,OAAO,OAAO7uD,GAAG2iB,EAAEuX,eAAel6B,EAAE2iB,GAAGvjB,GAAG,KAAKuB,KAAK6sE,uBAAuB,IAAIj+C,EAAE2K,aAAa,SAASvpB,EAAE4e,EAAEnwB,EAAEuB,KAAK8sE,qBAAqB,MAAM,KAAK9sE,KAAK8sE,qBAAqB,IAAI9qD,EAAEuX,aAAa,SAASvpB,EAAEilD,QAAQjzC,GAAGvjB,EAAEuB,KAAK6sE,wBAAwB,GAAGpuE,IAAIuB,KAAK8sE,qBAAqB,CAAC,GAAG,OAAOztE,EAAE,MAAM,IAAIysD,GAAG,4BAA4B9rD,KAAK2xC,iBAAiBqE,GAAGE,OAAO72C,EAAEk6B,aAAa,wCAAwCvpB,EAAEilD,QAAQ51D,KAAK2Q,EAAE1N,UAAUU,OAAO,SAAS3D,GAAG,IAAI2Q,EAAE3Q,EAAEW,KAAK0sE,cAAc18D,EAAEA,IAAIA,EAAE1N,UAAUopD,iBAAiB,WAAW,IAAIrsD,EAAEW,KAAKyrD,WAAWz7C,EAAE3Q,EAAEo1B,OAAO,GAAGzkB,EAAE,EAAE,OAAO,KAAK,IAAIvR,EAAEY,EAAEuoB,IAAI,GAAG,GAAG,IAAI5X,EAAE,OAAOvR,EAAE,IAAIa,EAAED,EAAEuoB,IAAI5X,EAAE,GAAGgS,EAAEvjB,EAAEs1D,cAAcnlC,EAAEtvB,EAAEy0D,cAAc,OAAOzB,GAAGM,WAAW5wC,IAAIswC,GAAGM,WAAWhkC,GAAGnwB,EAAE6zD,GAAGM,WAAW5wC,IAAIswC,GAAGM,WAAWhkC,GAAG,IAAInwB,EAAEi1D,QAAQj1D,EAAE,IAAIa,EAAEo0D,QAAQp0D,GAAG02C,GAAGC,qBAAqB,+CAA+C,MAAM32C,GAAG0Q,EAAE1N,UAAUuvD,MAAM,SAASxyD,GAAGktC,EAAE1Z,IAAIgmB,QAAQ,qBAAqB74C,KAAK2xC,iBAAiB,IAAI,IAAI3hC,EAAEhQ,KAAKuoB,WAAWvY,EAAEgtC,WAAW,CAAC,IAAIv+C,EAAEuR,EAAEoC,OAAO/S,EAAEwyD,MAAM,QAAQpzD,EAAEozD,MAAMxyD,GAAGA,EAAEw5C,UAAUx5C,EAAEwyD,MAAM,OAAOpzD,EAAEmtD,SAASiG,MAAMxyD,GAAGA,EAAEw5C,YAAY7oC,EAAE1N,UAAUyqE,mBAAmB,WAAW,GAAG,OAAO/sE,KAAK4sE,oBAAoB,OAAO5sE,KAAK4sE,oBAAoB5sE,KAAK4sE,oBAAoB,IAAIpuB,GAAG,IAAI,IAAIn/C,EAAEW,KAAKuoB,WAAWlpB,EAAE29C,WAAW,CAAC,IAAIhtC,EAAE3Q,EAAE+S,QAAQpC,EAAEupB,cAAcvpB,EAAE47C,SAASryB,eAAev5B,KAAK4sE,oBAAoBx5C,IAAIpjB,GAAG,OAAOhQ,KAAK4sE,qBAAqB58D,EAAE1N,UAAU0qE,gBAAgB,SAAS3tE,GAAG,IAAI,IAAI2Q,EAAEhQ,KAAKuoB,WAAWvY,EAAEgtC,WAAW,CAAC,IAAIv+C,EAAEuR,EAAEoC,OAAOo9C,WAAW/wD,EAAEovD,sBAAsB,EAAExuD,EAAEm6C,YAAY,IAAI/6C,EAAEovD,sBAAsB,EAAExuD,EAAEm6C,YAAY,MAAMxpC,EAAE1N,UAAUszD,qBAAqB,WAAW51D,KAAKyrD,WAAW,IAAI,IAAIpsD,EAAE,KAAK2Q,EAAE,KAAKvR,EAAEuB,KAAK8rE,UAAUr3C,OAAO,EAAEh2B,GAAG,EAAEA,IAAI,CAAC,IAAIa,EAAEU,KAAK8rE,UAAUlkD,IAAInpB,GAAGujB,EAAE1iB,EAAEssD,SAAS,OAAO57C,IAAIA,EAAEgS,GAAG,OAAO3iB,GAAG2iB,EAAEizC,QAAQ51D,GAAGA,EAAEC,EAAE0Q,EAAEilD,QAAQ51D,IAAI2Q,EAAE1N,UAAUwqD,cAAc,WAAW,GAAG,IAAI38C,UAAU5R,OAAO,CAAC,IAAIc,EAAE8Q,UAAU,GAAGH,EAAEhQ,KAAKssE,UAAUjtE,GAAGZ,EAAEY,EAAE+tD,SAAS5C,GAAGzQ,MAAMz6C,EAAED,EAAE+tD,SAAS5C,GAAG3Q,OAAO73B,EAAEhiB,KAAK8sD,cAAc98C,EAAE,EAAEhQ,KAAK8rE,UAAUr3C,OAAOh2B,GAAG,GAAGuB,KAAK8sD,cAAc,EAAE98C,EAAEgS,KAAK1iB,EAAE,MAAM,IAAIwsD,GAAG,qBAAqBzsD,EAAEsyC,sBAAsB,GAAG,IAAIxhC,UAAU5R,OAAO,CAAC,IAAI,IAAmBO,EAAEqR,UAAU,GAAGzQ,EAAEyQ,UAAU,GAAGs2B,EAA3Ct2B,UAAU,GAAqCs2B,EAAE3nC,EAAE2nC,IAAI,CAAC,IAAI16B,EAAE/L,KAAK8rE,UAAUlkD,IAAI6e,GAAG16B,EAAEkhD,cAAczC,GAAG3Q,MAAMn6C,GAAGA,EAAEqM,EAAEqhD,SAAS5C,GAAGzQ,MAAM,OAAOr6C,IAAIsQ,EAAE1N,UAAU2qE,eAAe,WAAW,IAAI,IAAI5tE,EAAEW,KAAKuoB,WAAWlpB,EAAE29C,WAAW,CAAC,IAAIhtC,EAAE3Q,EAAE+S,OAAOpC,EAAEw/C,WAAWh9B,MAAMxiB,EAAE47C,SAAS4D,cAAcx/C,EAAE1N,UAAUyuD,yBAAyB,SAAS1xD,GAAG,IAAI,IAAI2Q,EAAE,KAAKvR,EAAE,KAAKa,EAAEU,KAAK6sE,uBAAuB7qD,EAAEhiB,KAAK4sE,oBAAoBn4C,OAAO,EAAEzS,GAAG,EAAEA,IAAI,CAAC,IAAI4M,EAAE5uB,KAAK4sE,oBAAoBhlD,IAAI5F,GAAGljB,EAAE8vB,EAAEg9B,SAAS,OAAO,OAAO57C,GAAG4e,EAAE2gC,gBAAgBlwD,IAAI2Q,EAAE4e,GAAGtvB,GAAG,KAAKU,KAAK6sE,uBAAuB,GAAG/tE,EAAEywD,gBAAgBlwD,EAAE,SAASZ,EAAEK,EAAEQ,EAAEU,KAAK8sE,qBAAqB,MAAM,KAAK9sE,KAAK8sE,qBAAqB,GAAGl+C,EAAE2gC,gBAAgBlwD,EAAE,SAASZ,EAAEi2D,WAAW9lC,GAAGtvB,EAAEU,KAAK6sE,wBAAwBvtE,IAAIU,KAAK8sE,uBAAuB92B,GAAGE,OAAO,OAAOlmC,EAAE,yCAAyCgmC,GAAGE,OAAOlmC,EAAEu/C,gBAAgBlwD,EAAE,wCAAwCZ,EAAEi2D,WAAW1kD,KAAKA,EAAE1N,UAAUytD,kBAAkB,WAAW,GAAG,IAAI5/C,UAAU5R,OAAO,CAAC,IAAI,IAAIc,EAAE,EAAE2Q,EAAEhQ,KAAKuoB,WAAWvY,EAAEgtC,WAAYhtC,EAAEoC,OAAOmnB,cAAcl6B,IAAI,OAAOA,EAAE,GAAG,IAAI8Q,UAAU5R,OAAO,CAAC,IAAI,IAAIE,EAAE0R,UAAU,GAAG7Q,EAAE,EAAE0iB,EAAEhiB,KAAKuoB,WAAWvG,EAAEg7B,WAAYh7B,EAAE5P,OAAOm9C,gBAAgB9wD,GAAGa,IAAI,OAAOA,IAAI0Q,EAAE1N,UAAUktD,SAAS,WAAW,OAAOxvD,KAAKivD,QAAQj/C,EAAE1N,UAAU4qE,qBAAqB,WAAW,IAAI,IAAI7tE,EAAEioC,EAAEkG,KAAKx9B,EAAEhQ,KAAKuoB,WAAWvY,EAAEgtC,WAAW,CAAC,IAAIv+C,EAAEuR,EAAEoC,OAAO9S,EAAEb,EAAEmtD,SAAS,IAAIntD,EAAEm2D,aAAa,CAAC,GAAGn2D,EAAE86B,aAAa,CAACl6B,EAAEioC,EAAE+F,SAAS,MAAM,GAAG/tC,EAAEi6B,aAAa,CAACl6B,EAAEioC,EAAEiG,SAAS,QAAQ,GAAGluC,IAAIioC,EAAEkG,KAAK,OAAO,KAAK,IAAI,IAAIxrB,EAAE3iB,EAAEuvB,EAAE5uB,KAAKuoB,WAAWqG,EAAEouB,WAAW,CAAC,IAAIl+C,EAAE8vB,EAAExc,OAAO1S,EAAEZ,EAAE8sD,SAAS9sD,EAAE81D,aAAa91D,EAAEwsD,UAAUiG,WAAWvvC,IAAIslB,EAAE+F,WAAWvuC,EAAEy6B,eAAevX,EAAEslB,EAAEiG,UAAU7tC,EAAE65B,eAAevX,EAAEslB,EAAE+F,aAAar9B,EAAE1N,UAAUkqE,iBAAiB,SAASx8D,GAAG3Q,EAAEiD,UAAUkqE,iBAAiB58D,KAAK5P,KAAKgQ,GAAGhQ,KAAKivD,OAAO,IAAIV,GAAGjnB,EAAEkG,MAAM,IAAI,IAAI/uC,EAAEuB,KAAKuoB,WAAW9pB,EAAEu+C,WAAW,IAAI,IAAI19C,EAAEb,EAAE2T,OAAOk5C,UAAUkE,WAAWxtC,EAAE,EAAEA,EAAE,EAAEA,IAAI,CAAC,IAAI4M,EAAEtvB,EAAEk6C,YAAYx3B,GAAG4M,IAAI0Y,EAAE+F,UAAUze,IAAI0Y,EAAEgG,UAAUttC,KAAKivD,OAAOb,YAAYpsC,EAAEslB,EAAE+F,YAAYr9B,EAAE1N,UAAUqpC,YAAY,WAAW,MAAM,IAAI37B,EAAE1N,UAAUspC,SAAS,WAAW,OAAO57B,GAAGA,EAA1kJ,CAA6kJ47D,IAAIuB,GAAG,SAAS9tE,GAAG,SAAS2Q,IAAI3Q,EAAE6E,MAAMlE,KAAKmQ,WAAW,OAAO9Q,IAAI2Q,EAAEgY,UAAU3oB,GAAG2Q,EAAE1N,UAAUoG,OAAOojC,OAAOzsC,GAAGA,EAAEiD,WAAW0N,EAAE1N,UAAUkJ,YAAYwE,EAAEA,EAAE1N,UAAUpB,WAAW,SAAS7B,GAAG,OAAO,IAAIqyD,GAAGryD,EAAE,IAAIstE,KAAK38D,EAAE1N,UAAUqpC,YAAY,WAAW,MAAM,IAAI37B,EAAE1N,UAAUspC,SAAS,WAAW,OAAO57B,GAAGA,EAAlS,CAAqSmlD,IAAIiY,GAAG,SAAS/tE,IAAIW,KAAKgvD,KAAK,KAAKhvD,KAAKqtE,aAAa,KAAK,IAAIr9D,EAAEG,UAAU,GAAGnQ,KAAKgvD,KAAKh/C,EAAEhQ,KAAKqtE,aAAahuE,EAAEiuE,YAAYt9D,IAAIo9D,GAAG9qE,UAAUwqC,UAAU,SAASztC,GAAG,IAAI2Q,EAAE3Q,EAAE,OAAO+tE,GAAGG,gBAAgBvtE,KAAKgvD,KAAKhvD,KAAKqtE,aAAar9D,EAAEg/C,KAAKh/C,EAAEq9D,eAAeD,GAAG9qE,UAAUqpC,YAAY,WAAW,MAAM,CAAC/D,IAAIwlC,GAAG9qE,UAAUspC,SAAS,WAAW,OAAOwhC,IAAIA,GAAGE,YAAY,SAASjuE,GAAG,OAAO,IAAI2/C,GAAGgB,oBAAoB3gD,IAAI+tE,GAAGG,gBAAgB,SAASluE,EAAE2Q,EAAEvR,EAAEa,GAAG,IAAI,IAAI0iB,EAAEhS,EAAE,GAAG,EAAE4e,EAAEtvB,EAAE,GAAG,EAAER,EAAEkR,EAAE3Q,EAAEd,QAAQ,EAAEmB,EAAEJ,EAAEb,EAAEF,QAAQ,EAAEkoC,EAAEz2B,EAAE,EAAE3Q,EAAEd,OAAO,EAAEwN,EAAEzM,EAAE,EAAEb,EAAEF,OAAO,IAAI,CAAC,IAAIoU,EAAEtT,EAAEonC,GAAGqG,UAAUruC,EAAEsN,IAAI,GAAG,IAAI4G,EAAE,OAAOA,EAAE,IAAI3R,GAAGylC,GAAGzkB,KAAKljB,EAAE0nC,GAAGz6B,GAAG6iB,KAAKlvB,EAAE,GAAGsB,IAAIwlC,EAAE,OAAO,EAAE,IAAIxlC,GAAGwlC,EAAE,OAAO,EAAE,GAAGxlC,GAAGwlC,EAAE,OAAO,IAAI,IAAIgnC,GAAG,WAAWxtE,KAAK+uD,OAAO,IAAIvQ,GAAGx+C,KAAKytE,QAAQ,IAAIzsE,GAAGwsE,GAAGlrE,UAAUuvD,MAAM,SAASxyD,GAAGA,EAAEwyD,MAAM,sBAAsB,IAAI,IAAI7hD,EAAE,EAAEA,EAAEhQ,KAAK+uD,OAAOt6B,OAAOzkB,IAAI,CAAC,IAAIvR,EAAEuB,KAAK+uD,OAAOnnC,IAAI5X,GAAGA,EAAE,GAAG3Q,EAAEwyD,MAAM,KAAKxyD,EAAEwyD,MAAM,KAAK,IAAI,IAAIvyD,EAAEb,EAAE+jD,iBAAiBxgC,EAAE,EAAEA,EAAE1iB,EAAEf,OAAOyjB,IAAIA,EAAE,GAAG3iB,EAAEwyD,MAAM,KAAKxyD,EAAEwyD,MAAMvyD,EAAE0iB,GAAG7N,EAAE,IAAI7U,EAAE0iB,GAAG5N,GAAG/U,EAAEw5C,QAAQ,KAAKx5C,EAAEwyD,MAAM,QAAQ2b,GAAGlrE,UAAUkpC,OAAO,SAASnsC,GAAG,IAAI,IAAI2Q,EAAE3Q,EAAEkpB,WAAWvY,EAAEgtC,WAAWh9C,KAAKozB,IAAIpjB,EAAEoC,SAASo7D,GAAGlrE,UAAUorE,cAAc,SAASruE,GAAG,IAAI,IAAI2Q,EAAE,EAAEA,EAAEhQ,KAAK+uD,OAAOt6B,OAAOzkB,IAAI,GAAGhQ,KAAK+uD,OAAOnnC,IAAI5X,GAAG0O,OAAOrf,GAAG,OAAO2Q,EAAE,OAAO,GAAGw9D,GAAGlrE,UAAUimB,SAAS,WAAW,OAAOvoB,KAAK+uD,OAAOxmC,YAAYilD,GAAGlrE,UAAUmpD,SAAS,WAAW,OAAOzrD,KAAK+uD,QAAQye,GAAGlrE,UAAUslB,IAAI,SAASvoB,GAAG,OAAOW,KAAK+uD,OAAOnnC,IAAIvoB,IAAImuE,GAAGlrE,UAAUqrE,cAAc,SAAStuE,GAAG,IAAI2Q,EAAE,IAAIo9D,GAAG/tE,EAAEmjD,kBAAkB,OAAOxiD,KAAKytE,QAAQ7lD,IAAI5X,IAAIw9D,GAAGlrE,UAAU8wB,IAAI,SAAS/zB,GAAGW,KAAK+uD,OAAO37B,IAAI/zB,GAAG,IAAI2Q,EAAE,IAAIo9D,GAAG/tE,EAAEmjD,kBAAkBxiD,KAAKytE,QAAQptB,IAAIrwC,EAAE3Q,IAAImuE,GAAGlrE,UAAUqpC,YAAY,WAAW,MAAM,IAAI6hC,GAAGlrE,UAAUspC,SAAS,WAAW,OAAO4hC,IAAI,IAAII,GAAG,aAAaA,GAAGtrE,UAAU4+D,qBAAqB,SAAS7hE,EAAE2Q,EAAEvR,EAAEa,KAAKsuE,GAAGtrE,UAAU+/C,OAAO,aAAaurB,GAAGtrE,UAAUqpC,YAAY,WAAW,MAAM,IAAIiiC,GAAGtrE,UAAUspC,SAAS,WAAW,OAAOgiC,IAAI,IAAIC,GAAG,WAAW7tE,KAAK8tE,kBAAiB,EAAG9tE,KAAK+tE,YAAW,EAAG/tE,KAAKguE,oBAAmB,EAAGhuE,KAAKiuE,cAAa,EAAGjuE,KAAKkuE,yBAAyB,KAAKluE,KAAKomE,IAAI,KAAKpmE,KAAKmuE,oBAAoB,KAAKnuE,KAAKouE,iBAAiB,EAAEpuE,KAAKquE,yBAAyB,EAAEruE,KAAKsuE,uBAAuB,EAAEtuE,KAAKuuE,SAAS,EAAE,IAAIlvE,EAAE8Q,UAAU,GAAGnQ,KAAKomE,IAAI/mE,GAAGwuE,GAAGvrE,UAAUksE,sBAAsB,SAASnvE,EAAE2Q,EAAEvR,EAAEa,GAAG,GAAGD,IAAIZ,GAAG,IAAIuB,KAAKomE,IAAI3uB,qBAAqB,CAAC,GAAGo2B,GAAGY,mBAAmBz+D,EAAE1Q,GAAG,OAAM,EAAG,GAAGD,EAAEyjD,WAAW,CAAC,IAAI9gC,EAAE3iB,EAAEo1B,OAAO,EAAE,GAAG,IAAIzkB,GAAG1Q,IAAI0iB,GAAG,IAAI1iB,GAAG0Q,IAAIgS,EAAE,OAAM,GAAI,OAAM,GAAI6rD,GAAGvrE,UAAUosE,2BAA2B,WAAW,OAAO1uE,KAAKkuE,0BAA0BL,GAAGvrE,UAAUqsE,8BAA8B,WAAW,OAAO3uE,KAAKguE,oBAAoBH,GAAGvrE,UAAUssE,mBAAmB,WAAW,OAAO5uE,KAAKomE,KAAKyH,GAAGvrE,UAAUusE,sBAAsB,WAAW,OAAO7uE,KAAK+tE,YAAYF,GAAGvrE,UAAU4+D,qBAAqB,SAAS7hE,EAAE2Q,EAAEvR,EAAEa,GAAG,GAAGD,IAAIZ,GAAGuR,IAAI1Q,EAAE,OAAO,KAAKU,KAAKuuE,WAAW,IAAIvsD,EAAE3iB,EAAEmjD,iBAAiBxyC,GAAG4e,EAAEvvB,EAAEmjD,iBAAiBxyC,EAAE,GAAGlR,EAAEL,EAAE+jD,iBAAiBljD,GAAGI,EAAEjB,EAAE+jD,iBAAiBljD,EAAE,GAAGU,KAAKomE,IAAI7uB,oBAAoBv1B,EAAE4M,EAAE9vB,EAAEY,GAAGM,KAAKomE,IAAIxuB,oBAAoB53C,KAAKouE,mBAAmBpuE,KAAKomE,IAAItuB,2BAA2B93C,KAAKquE,2BAA2BruE,KAAKiuE,cAAa,GAAIjuE,KAAKwuE,sBAAsBnvE,EAAE2Q,EAAEvR,EAAEa,KAAKU,KAAK8tE,kBAAiB,EAAGzuE,EAAEk+D,iBAAiBv9D,KAAKomE,IAAIp2D,EAAE,GAAGvR,EAAE8+D,iBAAiBv9D,KAAKomE,IAAI9mE,EAAE,GAAGU,KAAKomE,IAAIzuB,aAAa33C,KAAKsuE,yBAAyBtuE,KAAK+tE,YAAW,EAAG/tE,KAAKguE,oBAAmB,MAAOH,GAAGvrE,UAAUs1C,gBAAgB,WAAW,OAAO53C,KAAK8tE,kBAAkBD,GAAGvrE,UAAU+/C,OAAO,WAAW,OAAM,GAAIwrB,GAAGvrE,UAAUwsE,wBAAwB,WAAW,OAAO9uE,KAAKiuE,cAAcJ,GAAGvrE,UAAUqpC,YAAY,WAAW,MAAM,CAACiiC,KAAKC,GAAGvrE,UAAUspC,SAAS,WAAW,OAAOiiC,IAAIA,GAAGY,mBAAmB,SAASpvE,EAAE2Q,GAAG,OAAO,IAAIpR,KAAKoiB,IAAI3hB,EAAE2Q,IAAI,IAAI++D,GAAG,WAAW/uE,KAAKnC,MAAM,KAAKmC,KAAKuN,aAAa,KAAKvN,KAAK+S,KAAK,KAAK,IAAI1T,EAAE8Q,UAAU,GAAGH,EAAEG,UAAU,GAAG1R,EAAE0R,UAAU,GAAGnQ,KAAKnC,MAAM,IAAI8pC,EAAEtoC,GAAGW,KAAKuN,aAAayC,EAAEhQ,KAAK+S,KAAKtU,GAAGswE,GAAGzsE,UAAU0sE,gBAAgB,WAAW,OAAOhvE,KAAKuN,cAAcwhE,GAAGzsE,UAAUqvC,cAAc,WAAW,OAAO3xC,KAAKnC,OAAOkxE,GAAGzsE,UAAUuvD,MAAM,SAASxyD,GAAGA,EAAEwyD,MAAM7xD,KAAKnC,OAAOwB,EAAEwyD,MAAM,YAAY7xD,KAAKuN,cAAclO,EAAEw5C,QAAQ,WAAW74C,KAAK+S,OAAOg8D,GAAGzsE,UAAUwqC,UAAU,SAASztC,GAAG,IAAI2Q,EAAE3Q,EAAE,OAAOW,KAAK3B,QAAQ2R,EAAEzC,aAAayC,EAAE+C,OAAOg8D,GAAGzsE,UAAU+0C,WAAW,SAASh4C,GAAG,OAAO,IAAIW,KAAKuN,cAAc,IAAIvN,KAAK+S,MAAM/S,KAAKuN,eAAelO,GAAG0vE,GAAGzsE,UAAUkV,SAAS,WAAW,OAAOxX,KAAKnC,MAAM,YAAYmC,KAAKuN,aAAa,WAAWvN,KAAK+S,MAAMg8D,GAAGzsE,UAAU42D,YAAY,WAAW,OAAOl5D,KAAK+S,MAAMg8D,GAAGzsE,UAAUjE,QAAQ,SAASgB,EAAE2Q,GAAG,OAAOhQ,KAAKuN,aAAalO,GAAG,EAAEW,KAAKuN,aAAalO,EAAE,EAAEW,KAAK+S,KAAK/C,GAAG,EAAEhQ,KAAK+S,KAAK/C,EAAE,EAAE,GAAG++D,GAAGzsE,UAAUqpC,YAAY,WAAW,MAAM,CAAC/D,IAAImnC,GAAGzsE,UAAUspC,SAAS,WAAW,OAAOmjC,IAAI,IAAIE,GAAG,WAAWjvE,KAAK+7D,SAAS,IAAI/6D,EAAEhB,KAAKkvE,KAAK,KAAK,IAAI7vE,EAAE8Q,UAAU,GAAGnQ,KAAKkvE,KAAK7vE,GAAG4vE,GAAG3sE,UAAUuvD,MAAM,SAASxyD,GAAGA,EAAEw5C,QAAQ,kBAAkB,IAAI,IAAI7oC,EAAEhQ,KAAKuoB,WAAWvY,EAAEgtC,WAAYhtC,EAAEoC,OAAOy/C,MAAMxyD,IAAK4vE,GAAG3sE,UAAUimB,SAAS,WAAW,OAAOvoB,KAAK+7D,SAAS9nC,SAAS1L,YAAY0mD,GAAG3sE,UAAUg6D,cAAc,SAASj9D,GAAGW,KAAKi8D,eAAe,IAAI,IAAIjsD,EAAEhQ,KAAKuoB,WAAW9pB,EAAEuR,EAAEoC,OAAOpC,EAAEgtC,WAAW,CAAC,IAAI19C,EAAE0Q,EAAEoC,OAAO4P,EAAEhiB,KAAKu8D,gBAAgB99D,EAAEa,GAAGD,EAAE+zB,IAAIpR,GAAGvjB,EAAEa,IAAI2vE,GAAG3sE,UAAU25D,aAAa,WAAW,IAAI58D,EAAEW,KAAKkvE,KAAKC,IAAI5wE,OAAO,EAAEyB,KAAKozB,IAAIpzB,KAAKkvE,KAAKC,IAAI,GAAG,EAAE,GAAGnvE,KAAKozB,IAAIpzB,KAAKkvE,KAAKC,IAAI9vE,GAAGA,EAAE,IAAI4vE,GAAG3sE,UAAUi6D,gBAAgB,SAASl9D,EAAE2Q,GAAG,IAAIvR,EAAEuR,EAAEzC,aAAalO,EAAEkO,aAAa,EAAEjO,EAAEU,KAAKkvE,KAAKC,IAAIn/D,EAAEzC,cAAcyU,EAAEhS,EAAE+C,KAAK,IAAI/C,EAAEnS,MAAM6uC,SAASptC,GAAG0iB,GAAGvjB,IAAI,IAAImwB,EAAE,IAAI3nB,MAAMxI,GAAGqyC,KAAK,MAAMhyC,EAAE,EAAE8vB,EAAE9vB,KAAK,IAAI6oC,EAAEtoC,EAAExB,OAAO,IAAI,IAAI6B,EAAEL,EAAEkO,aAAa,EAAE7N,GAAGsQ,EAAEzC,aAAa7N,IAAIkvB,EAAE9vB,KAAKkB,KAAKkvE,KAAKC,IAAIzvE,GAAG,OAAOsiB,IAAI4M,EAAE9vB,GAAGkR,EAAEnS,OAAO,IAAIuxE,GAAGxgD,EAAE,IAAI2/B,GAAGvuD,KAAKkvE,KAAKjgB,UAAUggB,GAAG3sE,UAAU8wB,IAAI,SAAS/zB,EAAE2Q,EAAEvR,GAAG,IAAIa,EAAE,IAAIyvE,GAAG1vE,EAAE2Q,EAAEvR,GAAGujB,EAAEhiB,KAAK+7D,SAASn0C,IAAItoB,GAAG,OAAO,OAAO0iB,EAAEA,GAAGhiB,KAAK+7D,SAAS1b,IAAI/gD,EAAEA,GAAGA,IAAI2vE,GAAG3sE,UAAU21C,eAAe,SAAS54C,GAAG,IAAI,IAAI2Q,EAAEhQ,KAAKuoB,WAAWvY,EAAEgtC,WAAY,GAAGhtC,EAAEoC,OAAOvU,MAAM6gB,OAAOrf,GAAG,OAAM,EAAG,OAAM,GAAI4vE,GAAG3sE,UAAUqpC,YAAY,WAAW,MAAM,IAAIsjC,GAAG3sE,UAAUspC,SAAS,WAAW,OAAOqjC,IAAI,IAAII,GAAG,aAAaA,GAAG/sE,UAAUw9D,qBAAqB,SAASzgE,GAAG,IAAI2Q,EAAE,EAAEvR,EAAE,IAAI+/C,GAAG//C,EAAE20B,IAAI,IAAIhvB,EAAE4L,IAAI,EAAE,CAAC,IAAI1Q,EAAEU,KAAK+/D,aAAa1gE,EAAE2Q,GAAGvR,EAAE20B,IAAI,IAAIhvB,EAAE9E,IAAI0Q,EAAE1Q,QAAQ0Q,EAAE3Q,EAAEd,OAAO,GAAG,OAAO8wE,GAAGrP,WAAWvhE,IAAI4wE,GAAG/sE,UAAUy9D,aAAa,SAAS1gE,EAAE2Q,GAAG,IAAI,IAAIvR,EAAE6zD,GAAGU,SAAS3zD,EAAE2Q,GAAG3Q,EAAE2Q,EAAE,IAAI1Q,EAAE0Q,EAAE,EAAE1Q,EAAED,EAAEd,QAAY+zD,GAAGU,SAAS3zD,EAAEC,EAAE,GAAGD,EAAEC,MAAMb,GAAQa,IAAI,OAAOA,EAAE,GAAG+vE,GAAG/sE,UAAUqpC,YAAY,WAAW,MAAM,IAAI0jC,GAAG/sE,UAAUspC,SAAS,WAAW,OAAOyjC,IAAIA,GAAGrP,WAAW,SAAS3gE,GAAG,IAAI,IAAI2Q,EAAE,IAAI/I,MAAM5H,EAAEo1B,QAAQqc,KAAK,MAAMryC,EAAE,EAAEA,EAAEuR,EAAEzR,OAAOE,IAAIuR,EAAEvR,GAAGY,EAAEuoB,IAAInpB,GAAG2vC,WAAW,OAAOp+B,GAAG,IAAIs/D,GAAG,WAAWtvE,KAAKgQ,EAAE,KAAKhQ,KAAKmvE,IAAI,KAAKnvE,KAAKuvE,WAAW,KAAKvvE,KAAKwvE,KAAK,IAAIjwE,EAAES,KAAKyvE,KAAK,IAAIlwE,EAAE,IAAIF,EAAE8Q,UAAU,GAAGnQ,KAAKgQ,EAAE3Q,EAAEW,KAAKmvE,IAAI9vE,EAAEmjD,iBAAiB,IAAIxyC,EAAE,IAAIq/D,GAAGrvE,KAAKuvE,WAAWv/D,EAAE8vD,qBAAqB9/D,KAAKmvE,MAAMG,GAAGhtE,UAAUkgD,eAAe,WAAW,OAAOxiD,KAAKmvE,KAAKG,GAAGhtE,UAAUswC,QAAQ,SAASvzC,GAAG,IAAI2Q,EAAEhQ,KAAKmvE,IAAInvE,KAAKuvE,WAAWlwE,IAAI8U,EAAE1V,EAAEuB,KAAKmvE,IAAInvE,KAAKuvE,WAAWlwE,EAAE,IAAI8U,EAAE,OAAOnE,EAAEvR,EAAEuR,EAAEvR,GAAG6wE,GAAGhtE,UAAUwwC,QAAQ,SAASzzC,GAAG,IAAI2Q,EAAEhQ,KAAKmvE,IAAInvE,KAAKuvE,WAAWlwE,IAAI8U,EAAE1V,EAAEuB,KAAKmvE,IAAInvE,KAAKuvE,WAAWlwE,EAAE,IAAI8U,EAAE,OAAOnE,EAAEvR,EAAEuR,EAAEvR,GAAG6wE,GAAGhtE,UAAUotE,0BAA0B,WAAW,GAAG,IAAIv/D,UAAU5R,OAAO,CAAC,IAAIc,EAAE8Q,UAAU,GAAGH,EAAEG,UAAU,GAAG1R,EAAE0R,UAAU,GAAG7Q,EAAE6Q,UAAU,GAAGnQ,KAAK0vE,0BAA0B1vE,KAAKuvE,WAAWlwE,GAAGW,KAAKuvE,WAAWlwE,EAAE,GAAG2Q,EAAEA,EAAEu/D,WAAW9wE,GAAGuR,EAAEu/D,WAAW9wE,EAAE,GAAGa,QAAQ,GAAG,IAAI6Q,UAAU5R,OAAO,CAAC,IAAIyjB,EAAE7R,UAAU,GAAGye,EAAEze,UAAU,GAAGrR,EAAEqR,UAAU,GAAGzQ,EAAEyQ,UAAU,GAAGs2B,EAAEt2B,UAAU,GAAGpE,EAAEoE,UAAU,GAAGwC,EAAE3S,KAAKmvE,IAAIntD,GAAGhhB,EAAEhB,KAAKmvE,IAAIvgD,GAAG4X,EAAE1nC,EAAEqwE,IAAIzvE,GAAGyb,EAAErc,EAAEqwE,IAAI1oC,GAAG,GAAG7X,EAAE5M,GAAG,GAAGykB,EAAE/mC,GAAG,EAAE,OAAOqM,EAAEwxD,iBAAiBv9D,KAAKgQ,EAAEgS,EAAEljB,EAAEkR,EAAEtQ,GAAG,KAAK,GAAGM,KAAKwvE,KAAKr1D,KAAKxH,EAAE3R,GAAGhB,KAAKyvE,KAAKt1D,KAAKqsB,EAAErrB,IAAInb,KAAKwvE,KAAKztE,WAAW/B,KAAKyvE,MAAM,OAAO,KAAK,IAAIziE,EAAEpO,KAAK8sC,OAAO1pB,EAAE4M,GAAG,GAAGhc,EAAEhU,KAAK8sC,OAAOhsC,EAAE+mC,GAAG,GAAGzkB,EAAEhV,IAAItN,EAAEkT,GAAG5S,KAAK0vE,0BAA0B1tD,EAAEhV,EAAElO,EAAEY,EAAEkT,EAAE7G,GAAG6G,EAAE6zB,GAAGzmC,KAAK0vE,0BAA0B1tD,EAAEhV,EAAElO,EAAE8T,EAAE6zB,EAAE16B,IAAIiB,EAAE4hB,IAAIlvB,EAAEkT,GAAG5S,KAAK0vE,0BAA0B1iE,EAAE4hB,EAAE9vB,EAAEY,EAAEkT,EAAE7G,GAAG6G,EAAE6zB,GAAGzmC,KAAK0vE,0BAA0B1iE,EAAE4hB,EAAE9vB,EAAE8T,EAAE6zB,EAAE16B,MAAMujE,GAAGhtE,UAAUqtE,gBAAgB,WAAW,OAAO3vE,KAAKuvE,YAAYD,GAAGhtE,UAAUstE,kBAAkB,SAASvwE,EAAE2Q,GAAG,IAAI,IAAIvR,EAAE,EAAEA,EAAEuB,KAAKuvE,WAAWhxE,OAAO,EAAEE,IAAI,IAAI,IAAIa,EAAE,EAAEA,EAAED,EAAEkwE,WAAWhxE,OAAO,EAAEe,IAAIU,KAAK0vE,0BAA0BjxE,EAAEY,EAAEC,EAAE0Q,IAAIs/D,GAAGhtE,UAAUqpC,YAAY,WAAW,MAAM,IAAI2jC,GAAGhtE,UAAUspC,SAAS,WAAW,OAAO0jC,IAAI,IAAIO,GAAG,SAASxwE,IAAIW,KAAKw0D,OAAOvtD,MAAM,GAAG6pC,OAAO5mC,KAAI,WAAW,OAAOjD,MAAM,MAAK,IAAI,IAAI+I,EAAE,EAAEA,EAAE,EAAEA,IAAI,IAAI,IAAIvR,EAAE,EAAEA,EAAE,EAAEA,IAAIuB,KAAKw0D,OAAOxkD,GAAGvR,GAAGY,EAAEywE,YAAYC,GAAG,CAACD,WAAW,CAACz/D,cAAa,IAAKw/D,GAAGvtE,UAAU8qD,SAAS,SAAS/tD,EAAE2Q,GAAG,OAAOhQ,KAAKw0D,OAAOn1D,GAAG2Q,IAAI6/D,GAAGvtE,UAAUirD,SAAS,SAASluD,EAAE2Q,EAAEvR,GAAGuB,KAAKw0D,OAAOn1D,GAAG2Q,GAAGvR,GAAGoxE,GAAGvtE,UAAUqwC,OAAO,WAAW,GAAG,IAAIxiC,UAAU5R,OAAO,CAAC,IAAI,IAAIc,EAAE,EAAEA,EAAE,EAAEA,IAAI,IAAI,IAAI2Q,EAAE,EAAEA,EAAE,EAAEA,IAAI,GAAGhQ,KAAKw0D,OAAOn1D,GAAG2Q,KAAK6/D,GAAGC,WAAW,OAAM,EAAG,OAAM,EAAG,GAAG,IAAI3/D,UAAU5R,OAAO,CAAC,IAAIE,EAAE0R,UAAU,GAAG,OAAOnQ,KAAKw0D,OAAO/1D,GAAG,KAAKoxE,GAAGC,WAAW,GAAG,IAAI3/D,UAAU5R,OAAO,CAAC,IAAIe,EAAE6Q,UAAU,GAAG6R,EAAE7R,UAAU,GAAG,OAAOnQ,KAAKw0D,OAAOl1D,GAAG0iB,KAAK6tD,GAAGC,aAAaD,GAAGvtE,UAAUq6C,UAAU,WAAW,IAAI,IAAIt9C,EAAE,EAAEA,EAAE,EAAEA,IAAI,IAAIW,KAAK2yC,OAAOtzC,GAAG,CAAC,IAAI2Q,EAAEhQ,KAAKw0D,OAAOn1D,GAAG,GAAGW,KAAKw0D,OAAOn1D,GAAG,GAAG2Q,IAAIA,EAAEhQ,KAAKw0D,OAAOn1D,GAAG,IAAI2Q,EAAE,IAAIA,EAAE,GAAG,IAAI,IAAIvR,EAAE,EAAEA,EAAE,EAAEA,IAAI,CAAC,IAAIa,EAAE,EAAEU,KAAKw0D,OAAOn1D,GAAGZ,GAAGuR,IAAI1Q,EAAE,GAAGU,KAAKw0D,OAAOn1D,GAAGZ,GAAGa,KAAKuwE,GAAGvtE,UAAU0tE,SAAS,SAAS3wE,GAAG,OAAOW,KAAKw0D,OAAOn1D,GAAGmrD,GAAG3Q,OAAO75C,KAAKw0D,OAAOn1D,GAAGmrD,GAAGzQ,OAAO81B,GAAGvtE,UAAUk3C,YAAY,SAASn6C,EAAE2Q,GAAG,OAAOhQ,KAAKw0D,OAAOn1D,GAAG2Q,IAAI,EAAEs3B,EAAEiG,SAASjG,EAAE+F,UAAUwiC,GAAGvtE,UAAUkV,SAAS,WAAW,MAAM,MAAMxX,KAAKw0D,OAAO,GAAG,GAAG,IAAIx0D,KAAKw0D,OAAO,GAAG,GAAG,OAAOx0D,KAAKw0D,OAAO,GAAG,GAAG,IAAIx0D,KAAKw0D,OAAO,GAAG,IAAIqb,GAAGvtE,UAAU8wB,IAAI,WAAW,GAAG,IAAIjjB,UAAU5R,OAAO,IAAI,IAAIc,EAAE8Q,UAAU,GAAGH,EAAE,EAAEA,EAAE,EAAEA,IAAI,IAAI,IAAIvR,EAAE,EAAEA,EAAE,EAAEA,IAAI,CAAC,IAAIa,EAAED,EAAEm6C,YAAYxpC,EAAEvR,GAAGa,IAAIgoC,EAAEiG,UAAUjuC,IAAIgoC,EAAE+F,WAAWrtC,KAAK2yC,OAAO3iC,EAAEvR,GAAGuB,KAAKw0D,OAAOxkD,GAAGvR,GAAGoxE,GAAGI,gBAAgB3wE,GAAGU,KAAKw0D,OAAOxkD,GAAGvR,IAAIoxE,GAAGI,gBAAgB3wE,SAAS,GAAG,IAAI6Q,UAAU5R,OAAO,CAAC,IAAIyjB,EAAE7R,UAAU,GAAGye,EAAEze,UAAU,GAAGA,UAAU,KAAKm3B,EAAE+F,UAAUrtC,KAAKw0D,OAAOxyC,GAAG4M,OAAOihD,GAAGvtE,UAAUqpC,YAAY,WAAW,MAAM,IAAIkkC,GAAGvtE,UAAUspC,SAAS,WAAW,OAAOikC,IAAIA,GAAGI,gBAAgB,SAAS5wE,GAAG,OAAOA,IAAIioC,EAAEiG,SAAS,EAAEluC,IAAIioC,EAAE+F,SAAS,EAAEwiC,GAAGC,YAAYC,GAAGD,WAAWloD,IAAI,WAAW,OAAO,GAAGlf,OAAOyP,iBAAiB03D,GAAGE,IAAI,IAAIX,GAAG,SAAS/vE,GAAG,SAAS2Q,IAAI,GAAG3Q,EAAEuQ,KAAK5P,MAAMA,KAAKmvE,IAAI,KAAKnvE,KAAKwsD,KAAK,KAAKxsD,KAAKu1D,OAAO,IAAI0Z,GAAGjvE,MAAMA,KAAKsoD,MAAM,KAAKtoD,KAAKkwE,KAAK,KAAKlwE,KAAKmwE,aAAY,EAAGnwE,KAAKw0D,OAAO,IAAIqb,GAAG7vE,KAAKowE,YAAY,EAAE,IAAIjgE,UAAU5R,OAAO,CAAC,IAAIE,EAAE0R,UAAU,GAAGH,EAAEJ,KAAK5P,KAAKvB,EAAE,WAAW,GAAG,IAAI0R,UAAU5R,OAAO,CAAC,IAAIe,EAAE6Q,UAAU,GAAG6R,EAAE7R,UAAU,GAAGnQ,KAAKmvE,IAAI7vE,EAAEU,KAAKivD,OAAOjtC,GAAG,OAAO3iB,IAAI2Q,EAAEgY,UAAU3oB,GAAG2Q,EAAE1N,UAAUoG,OAAOojC,OAAOzsC,GAAGA,EAAEiD,WAAW0N,EAAE1N,UAAUkJ,YAAYwE,EAAEA,EAAE1N,UAAU8qD,SAAS,WAAW,OAAOptD,KAAKw0D,QAAQxkD,EAAE1N,UAAU+tE,iBAAiB,WAAW,IAAIhxE,EAAE,IAAI4H,MAAM,GAAG6pC,KAAK,MAAwC,OAAlCzxC,EAAE,GAAGW,KAAKmvE,IAAI,GAAG9vE,EAAE,GAAGW,KAAKmvE,IAAI,GAAU,IAAIn/D,EAAE3Q,EAAEkvD,GAAGI,YAAY3uD,KAAKivD,UAAUj/C,EAAE1N,UAAUgtD,WAAW,WAAW,OAAOtvD,KAAKmwE,aAAangE,EAAE1N,UAAUkgD,eAAe,WAAW,OAAOxiD,KAAKmvE,KAAKn/D,EAAE1N,UAAUguE,YAAY,SAASjxE,GAAGW,KAAKmwE,YAAY9wE,GAAG2Q,EAAE1N,UAAUiuE,QAAQ,SAASlxE,GAAGW,KAAKsoD,MAAMjpD,GAAG2Q,EAAE1N,UAAUoc,OAAO,SAASrf,GAAG,KAAKA,aAAa2Q,GAAG,OAAM,EAAG,IAAIvR,EAAEY,EAAE,GAAGW,KAAKmvE,IAAI5wE,SAASE,EAAE0wE,IAAI5wE,OAAO,OAAM,EAAG,IAAI,IAAIe,GAAE,EAAG0iB,GAAE,EAAG4M,EAAE5uB,KAAKmvE,IAAI5wE,OAAOO,EAAE,EAAEA,EAAEkB,KAAKmvE,IAAI5wE,OAAOO,IAAI,GAAGkB,KAAKmvE,IAAIrwE,GAAG4tC,SAASjuC,EAAE0wE,IAAIrwE,MAAMQ,GAAE,GAAIU,KAAKmvE,IAAIrwE,GAAG4tC,SAASjuC,EAAE0wE,MAAMvgD,MAAM5M,GAAE,IAAK1iB,IAAI0iB,EAAE,OAAM,EAAG,OAAM,GAAIhS,EAAE1N,UAAUqvC,cAAc,WAAW,GAAG,IAAIxhC,UAAU5R,OAAO,OAAOyB,KAAKmvE,IAAI5wE,OAAO,EAAEyB,KAAKmvE,IAAI,GAAG,KAAK,GAAG,IAAIh/D,UAAU5R,OAAO,CAAC,IAAIc,EAAE8Q,UAAU,GAAG,OAAOnQ,KAAKmvE,IAAI9vE,KAAK2Q,EAAE1N,UAAUuvD,MAAM,SAASxyD,GAAGA,EAAEwyD,MAAM,QAAQ7xD,KAAKsoD,MAAM,MAAMjpD,EAAEwyD,MAAM,gBAAgB,IAAI,IAAI7hD,EAAE,EAAEA,EAAEhQ,KAAKmvE,IAAI5wE,OAAOyR,IAAIA,EAAE,GAAG3Q,EAAEwyD,MAAM,KAAKxyD,EAAEwyD,MAAM7xD,KAAKmvE,IAAIn/D,GAAGmE,EAAE,IAAInU,KAAKmvE,IAAIn/D,GAAGoE,GAAG/U,EAAEwyD,MAAM,MAAM7xD,KAAKivD,OAAO,IAAIjvD,KAAKowE,cAAcpgE,EAAE1N,UAAUmvD,UAAU,SAASpyD,GAAG2Q,EAAEwhD,SAASxxD,KAAKivD,OAAO5vD,IAAI2Q,EAAE1N,UAAUkuE,YAAY,WAAW,QAAQxwE,KAAKivD,OAAOf,UAAW,IAAIluD,KAAKmvE,IAAI5wE,UAAUyB,KAAKmvE,IAAI,GAAGzwD,OAAO1e,KAAKmvE,IAAI,KAAMn/D,EAAE1N,UAAUwgD,SAAS,WAAW,OAAO9iD,KAAKmvE,IAAI,GAAGzwD,OAAO1e,KAAKmvE,IAAInvE,KAAKmvE,IAAI5wE,OAAO,KAAKyR,EAAE1N,UAAUmuE,uBAAuB,WAAW,OAAOzwE,KAAKmvE,IAAI5wE,OAAO,GAAGyR,EAAE1N,UAAUqyD,cAAc,WAAW,OAAO30D,KAAKowE,aAAapgE,EAAE1N,UAAUmgD,aAAa,WAAW,OAAOziD,KAAKmvE,IAAI5wE,QAAQyR,EAAE1N,UAAUwyD,aAAa,SAASz1D,GAAGA,EAAEwyD,MAAM,QAAQ7xD,KAAKsoD,MAAM,MAAM,IAAI,IAAIt4C,EAAEhQ,KAAKmvE,IAAI5wE,OAAO,EAAEyR,GAAG,EAAEA,IAAI3Q,EAAEwyD,MAAM7xD,KAAKmvE,IAAIn/D,GAAG,KAAK3Q,EAAEw5C,QAAQ,KAAK7oC,EAAE1N,UAAUouE,qBAAqB,WAAW,OAAO,OAAO1wE,KAAKkwE,OAAOlwE,KAAKkwE,KAAK,IAAIZ,GAAGtvE,OAAOA,KAAKkwE,MAAMlgE,EAAE1N,UAAUg6C,YAAY,WAAW,GAAG,OAAOt8C,KAAKwsD,KAAK,CAACxsD,KAAKwsD,KAAK,IAAIjtD,EAAE,IAAI,IAAIF,EAAE,EAAEA,EAAEW,KAAKmvE,IAAI5wE,OAAOc,IAAIW,KAAKwsD,KAAKvZ,gBAAgBjzC,KAAKmvE,IAAI9vE,IAAI,OAAOW,KAAKwsD,MAAMx8C,EAAE1N,UAAU26D,gBAAgB,SAAS59D,EAAE2Q,EAAEvR,EAAEa,GAAG,IAAI0iB,EAAE,IAAI2lB,EAAEtoC,EAAEykC,gBAAgBxkC,IAAIsvB,EAAE5e,EAAElR,EAAEO,EAAEq4C,gBAAgBj5C,EAAEa,GAAGI,EAAEkvB,EAAE,EAAE,GAAGlvB,EAAEM,KAAKmvE,IAAI5wE,OAAO,CAAC,IAAIkoC,EAAEzmC,KAAKmvE,IAAIzvE,GAAGsiB,EAAE0qB,SAASjG,KAAK7X,EAAElvB,EAAEZ,EAAE,GAAGkB,KAAKu1D,OAAOniC,IAAIpR,EAAE4M,EAAE9vB,IAAIkR,EAAE1N,UAAUkV,SAAS,WAAW,IAAInY,EAAE,IAAIkW,EAAElW,EAAE4uC,OAAO,QAAQjuC,KAAKsoD,MAAM,MAAMjpD,EAAE4uC,OAAO,gBAAgB,IAAI,IAAIj+B,EAAE,EAAEA,EAAEhQ,KAAKmvE,IAAI5wE,OAAOyR,IAAIA,EAAE,GAAG3Q,EAAE4uC,OAAO,KAAK5uC,EAAE4uC,OAAOjuC,KAAKmvE,IAAIn/D,GAAGmE,EAAE,IAAInU,KAAKmvE,IAAIn/D,GAAGoE,GAAG,OAAO/U,EAAE4uC,OAAO,MAAMjuC,KAAKivD,OAAO,IAAIjvD,KAAKowE,aAAa/wE,EAAEmY,YAAYxH,EAAE1N,UAAUquE,iBAAiB,SAAStxE,GAAG,GAAGW,KAAKmvE,IAAI5wE,SAASc,EAAE8vE,IAAI5wE,OAAO,OAAM,EAAG,IAAI,IAAIyR,EAAE,EAAEA,EAAEhQ,KAAKmvE,IAAI5wE,OAAOyR,IAAI,IAAIhQ,KAAKmvE,IAAIn/D,GAAG08B,SAASrtC,EAAE8vE,IAAIn/D,IAAI,OAAM,EAAG,OAAM,GAAIA,EAAE1N,UAAUsuE,cAAc,SAASvxE,GAAGW,KAAKowE,YAAY/wE,GAAG2Q,EAAE1N,UAAUuuE,wBAAwB,WAAW,OAAO7wE,KAAKu1D,QAAQvlD,EAAE1N,UAAUi7D,iBAAiB,SAASl+D,EAAE2Q,EAAEvR,GAAG,IAAI,IAAIa,EAAE,EAAEA,EAAED,EAAEo4C,qBAAqBn4C,IAAIU,KAAKi9D,gBAAgB59D,EAAE2Q,EAAEvR,EAAEa,IAAI0Q,EAAE1N,UAAUqpC,YAAY,WAAW,MAAM,IAAI37B,EAAE1N,UAAUspC,SAAS,WAAW,OAAO57B,GAAGA,EAAEwhD,SAAS,WAAW,GAAG,IAAIrhD,UAAU5R,OAAO,OAAOc,EAAEiD,UAAUkvD,SAASttD,MAAMlE,KAAKmQ,WAAW,IAAIH,EAAEG,UAAU,GAAG1R,EAAE0R,UAAU,GAAG1R,EAAEqyE,kBAAkB9gE,EAAEwpC,YAAY,EAAEgR,GAAGE,IAAI16C,EAAEwpC,YAAY,EAAEgR,GAAGE,IAAI,GAAG16C,EAAEk+C,WAAWzvD,EAAEqyE,kBAAkB9gE,EAAEwpC,YAAY,EAAEgR,GAAGzQ,MAAM/pC,EAAEwpC,YAAY,EAAEgR,GAAGzQ,MAAM,GAAGt7C,EAAEqyE,kBAAkB9gE,EAAEwpC,YAAY,EAAEgR,GAAG3Q,OAAO7pC,EAAEwpC,YAAY,EAAEgR,GAAG3Q,OAAO,KAAK7pC,EAA9pH,CAAiqHghD,IAAIz/C,GAAG,SAASlS,GAAGW,KAAK+wE,uBAAuB,KAAK/wE,KAAKgxE,cAAc,KAAKhxE,KAAKijD,UAAU,KAAKjjD,KAAKixE,OAAO,KAAKjxE,KAAK8rE,UAAU,IAAI0B,GAAGxtE,KAAKmmE,WAAW9mE,GAAG,MAAMkS,GAAGjP,UAAU4uE,yBAAyB,SAAS7xE,GAAGW,KAAK+wE,uBAAuB1xE,GAAGkS,GAAGjP,UAAU6uE,iBAAiB,SAAS9xE,GAAG,IAAI2Q,EAAEhQ,KAAK8rE,UAAU6B,cAActuE,GAAG,GAAG,OAAO2Q,EAAE,CAAC,IAAIvR,EAAEuR,EAAEw/C,WAAWlwD,EAAED,EAAEmwD,WAAWx/C,EAAE2gE,iBAAiBtxE,KAAKC,EAAE,IAAIivD,GAAGlvD,EAAEmwD,aAAaxB,OAAOvvD,EAAE+zB,MAAMlzB,GAAG,IAAI0iB,EAAEzQ,GAAG6/D,WAAW9xE,GAAGsvB,EAAE5e,EAAE2kD,gBAAgB3yC,EAAEhS,EAAE4gE,cAAchiD,QAAQ5uB,KAAK8rE,UAAU14C,IAAI/zB,GAAGA,EAAEuxE,cAAcr/D,GAAG6/D,WAAW/xE,EAAEmwD,cAAcj+C,GAAGjP,UAAU+uE,eAAe,SAAShyE,EAAE2Q,GAAG,IAAI,IAAIvR,EAAE,IAAI+/C,GAAGl/C,EAAED,EAAEkpB,WAAWjpB,EAAE09C,WAAW,CAAC,IAAIh7B,EAAE1iB,EAAE8S,OAAOwc,EAAE5M,EAAE2qC,yBAAyB7tD,EAAE,IAAIoqE,GAAGzqE,GAAG2uD,SAASx+B,GAAG5M,EAAEgrC,aAAaluD,GAAGkjB,EAAEmrC,kBAAkB1uD,EAAE20B,IAAIpR,GAAGhS,EAAEojB,IAAIpR,EAAEyrC,mBAAmBzrC,EAAEwrC,cAAcj8C,GAAGjP,UAAUgvE,gBAAgB,SAASjyE,GAAG,IAAI,IAAI2Q,EAAE,IAAIwuC,GAAG//C,EAAEY,EAAEmuD,WAAWjlC,WAAW9pB,EAAEu+C,WAAW,CAAC,IAAI19C,EAAEb,EAAE2T,OAAO,IAAI9S,EAAEutD,YAAY,CAAC,IAAI7qC,EAAE,IAAImqC,GAAGnqC,EAAE8pB,OAAOxsC,GAAG0Q,EAAEojB,IAAIpR,IAAI,OAAOs2C,GAAGxyD,KAAKkK,EAAEsoD,GAAGC,gBAAgBvoD,GAAGuB,GAAGjP,UAAUivE,0BAA0B,WAAW,OAAOvxE,KAAKijD,UAAUxN,iBAAiBlkC,GAAGjP,UAAUkvE,SAAS,SAASnyE,GAAG,GAAG,OAAOW,KAAKgxE,cAAc,OAAOhxE,KAAKgxE,cAAc,IAAIhhE,EAAE,IAAIuwD,GAAG9hE,EAAE,IAAI25C,GAAG,OAAO35C,EAAEo5C,kBAAkBx4C,GAAG2Q,EAAEswD,sBAAsB,IAAIuN,GAAGpvE,IAAIuR,GAAGuB,GAAGjP,UAAUmvE,OAAO,SAASpyE,EAAE2Q,GAAG,IAAIvR,EAAEuB,KAAK+wE,uBAAuB,OAAOtyE,IAAIA,EAAEY,EAAEu9C,qBAAqB58C,KAAKijD,UAAU5jD,EAAEo8C,aAAa,IAAIn8C,EAAE,IAAI+oE,GAAG5pE,EAAEuB,KAAKmmE,YAAYnkD,EAAE,IAAIqoD,GAAGhrE,EAAE2Q,EAAE1Q,GAAG0rE,YAAY,GAAGhpD,EAAEyS,QAAQ,EAAE,OAAOz0B,KAAKuxE,4BAA4BvxE,KAAK0xE,kBAAkB1vD,EAAEvjB,GAAGuB,KAAKixE,OAAO,IAAI7b,GAAG,IAAI+X,IAAIntE,KAAKixE,OAAO7a,SAASp2D,KAAK8rE,UAAUrgB,YAAY,IAAI78B,EAAE5uB,KAAKsxE,gBAAgBtxE,KAAKixE,QAAQnyE,EAAE,IAAIu3D,GAAGr2D,KAAKijD,WAAWjjD,KAAKqxE,eAAeziD,EAAE9vB,GAAG,IAAIY,EAAEZ,EAAEi4D,cAAc,OAAGr3D,EAAE+0B,QAAQ,EAASz0B,KAAKuxE,4BAAmCvxE,KAAKijD,UAAU4F,cAAcnpD,IAAI6R,GAAGjP,UAAUovE,kBAAkB,SAASryE,EAAE2Q,GAAG,IAAIvR,EAAEuB,KAAKwxE,SAASxhE,GAAGvR,EAAE0hE,aAAa9gE,GAAG,IAAI,IAAIC,EAAEb,EAAE++D,qBAAqBj1C,WAAWjpB,EAAE09C,WAAW,CAAC,IAAIh7B,EAAE1iB,EAAE8S,OAAOwc,EAAE5M,EAAEwgC,iBAAiB,GAAG,IAAI5zB,EAAErwB,SAASqwB,EAAE,GAAG8d,SAAS9d,EAAE,IAAI,CAAC,IAAI9vB,EAAEkjB,EAAE06C,UAAUh9D,EAAE,IAAI0vE,GAAGptD,EAAEwgC,iBAAiB,IAAI+L,GAAGzvD,IAAIkB,KAAKmxE,iBAAiBzxE,MAAM6R,GAAGjP,UAAUqvE,SAAS,SAAStyE,GAAGW,KAAKgxE,cAAc3xE,GAAGkS,GAAGjP,UAAUqpC,YAAY,WAAW,MAAM,IAAIp6B,GAAGjP,UAAUspC,SAAS,WAAW,OAAOr6B,IAAIA,GAAG6/D,WAAW,SAAS/xE,GAAG,IAAI2Q,EAAE3Q,EAAEm6C,YAAY,EAAEgR,GAAGzQ,MAAMt7C,EAAEY,EAAEm6C,YAAY,EAAEgR,GAAG3Q,OAAO,OAAO7pC,IAAIs3B,EAAE+F,UAAU5uC,IAAI6oC,EAAEiG,SAAS,EAAEv9B,IAAIs3B,EAAEiG,UAAU9uC,IAAI6oC,EAAE+F,UAAU,EAAE,GAAG97B,GAAGqgE,kBAAkB,SAASvyE,GAAG,IAAI,IAAI2Q,EAAE,IAAIgkC,GAAGv1C,EAAE,IAAI+/C,GAAGn/C,EAAE29C,WAAW,CAAC,IAAI19C,EAAED,EAAE+S,OAAO4P,EAAEhS,EAAEslC,iBAAiBh2C,EAAEkjD,kBAAkB/jD,EAAE20B,IAAIpR,GAAG,OAAOhS,EAAE64C,cAAcpqD,IAAI,IAAIozE,GAAG,WAAW,GAAG7xE,KAAK8xE,OAAO,KAAK9xE,KAAK+xE,aAAa,KAAK/xE,KAAKgyE,SAAS,KAAKhyE,KAAKiyE,SAAS,KAAKjyE,KAAKkyE,WAAU,EAAG,IAAI/hE,UAAU5R,OAAO,CAAC,IAAIc,EAAE8Q,UAAU,GAAGH,EAAEG,UAAU,GAAGnQ,KAAK8xE,OAAOzyE,EAAEW,KAAK+xE,aAAa/hE,EAAEhQ,KAAKgyE,SAAS,EAAEhyE,KAAKiyE,SAAS,EAAEjyE,KAAKkyE,WAAWlyE,KAAKmyE,0BAA0B,GAAG,IAAIhiE,UAAU5R,OAAO,CAAC,IAAIE,EAAE0R,UAAU,GAAG7Q,EAAE6Q,UAAU,GAAG6R,EAAE7R,UAAU,GAAGye,EAAEze,UAAU,GAAGnQ,KAAK8xE,OAAOrzE,EAAEuB,KAAK+xE,aAAazyE,EAAEU,KAAKgyE,SAAShwD,EAAEhiB,KAAKiyE,SAASrjD,EAAE5uB,KAAKkyE,WAAWlyE,KAAKmyE,uBAAuBN,GAAGvvE,UAAU8vE,QAAQ,WAAW,GAAG1kC,EAAEv9B,UAAU,GAAGo7B,IAAI,IAAI,IAAIlsC,EAAE8Q,UAAU,GAAGoY,WAAWlpB,EAAE29C,WAAW,CAAC,IAAIhtC,EAAE3Q,EAAE+S,OAAOpS,KAAKoyE,QAAQpiE,EAAEwyC,uBAAuB,GAAGryC,UAAU,aAAalJ,MAAM,CAAC,IAAI,IAAIxI,EAAE0R,UAAU,GAAG7Q,EAAE,EAAEA,EAAEb,EAAEF,OAAOe,IAAIb,EAAEa,GAAG6U,EAAE1V,EAAEa,GAAG6U,EAAEnU,KAAK+xE,aAAa/xE,KAAKgyE,SAASvzE,EAAEa,GAAG8U,EAAE3V,EAAEa,GAAG8U,EAAEpU,KAAK+xE,aAAa/xE,KAAKiyE,SAAS,IAAIxzE,EAAEF,QAAQE,EAAE,GAAGiuC,SAASjuC,EAAE,KAAK8tC,EAAE1Z,IAAIgmB,QAAQp6C,KAAKozE,GAAGvvE,UAAU+vE,MAAM,WAAW,GAAG3kC,EAAEv9B,UAAU,GAAGo7B,IAAI,CAAC,IAAI,IAAIlsC,EAAE8Q,UAAU,GAAGH,EAAE,IAAIwuC,GAAG//C,EAAEY,EAAEkpB,WAAW9pB,EAAEu+C,WAAW,CAAC,IAAI19C,EAAEb,EAAE2T,OAAOpC,EAAEojB,IAAI,IAAIqpC,GAAGz8D,KAAKqyE,MAAM/yE,EAAEkjD,kBAAkBljD,EAAEo9D,YAAY,OAAO1sD,EAAE,GAAGG,UAAU,aAAalJ,MAAM,CAAC,IAAI,IAAI+a,EAAE7R,UAAU,GAAGye,EAAE,IAAI3nB,MAAM+a,EAAEzjB,QAAQuyC,KAAK,MAAMhyC,EAAE,EAAEA,EAAEkjB,EAAEzjB,OAAOO,IAAI8vB,EAAE9vB,GAAG,IAAI6oC,EAAE/oC,KAAK4L,OAAOwX,EAAEljB,GAAGqV,EAAEnU,KAAKgyE,UAAUhyE,KAAK+xE,cAAcnzE,KAAK4L,OAAOwX,EAAEljB,GAAGsV,EAAEpU,KAAKiyE,UAAUjyE,KAAK+xE,cAAc/vD,EAAEljB,GAAGH,GAAG,OAAOqgD,GAAGU,qBAAqB9wB,KAAKijD,GAAGvvE,UAAU6vE,mBAAmB,WAAW,OAAO,IAAInyE,KAAK+xE,cAAcF,GAAGvvE,UAAUk7D,mBAAmB,WAAW,IAAIn+D,EAAEW,KAAK8xE,OAAOtU,qBAAqB,OAAOx9D,KAAKkyE,WAAWlyE,KAAKoyE,QAAQ/yE,GAAGA,GAAGwyE,GAAGvvE,UAAU69D,aAAa,SAAS9gE,GAAG,IAAI2Q,EAAE3Q,EAAEW,KAAKkyE,YAAYliE,EAAEhQ,KAAKqyE,MAAMhzE,IAAIW,KAAK8xE,OAAO3R,aAAanwD,IAAI6hE,GAAGvvE,UAAUqpC,YAAY,WAAW,MAAM,CAACu0B,KAAK2R,GAAGvvE,UAAUspC,SAAS,WAAW,OAAOimC,IAAI,IAAIS,GAAG,WAAWtyE,KAAKomE,IAAI,IAAIhuB,GAAGp4C,KAAKuyE,YAAY,KAAK,IAAIlzE,EAAE8Q,UAAU,GAAGnQ,KAAKuyE,YAAYlzE,GAAGmzE,GAAG,CAACC,KAAK,CAACpiE,cAAa,IAAKiiE,GAAGhwE,UAAUowE,8BAA8B,WAAW,GAAG,IAAIviE,UAAU5R,OAAO,IAAI,IAAIc,EAAEW,KAAKuyE,YAAYhqD,WAAWlpB,EAAE29C,WAAW,CAAC,IAAIhtC,EAAE3Q,EAAE+S,OAAOowC,iBAAiBxiD,KAAK0yE,8BAA8B1iE,EAAE,GAAGhQ,KAAKuyE,aAAavyE,KAAK0yE,8BAA8B1iE,EAAEA,EAAEzR,OAAO,GAAGyB,KAAKuyE,kBAAkB,GAAG,IAAIpiE,UAAU5R,OAAO,IAAI,IAAIE,EAAE0R,UAAU,GAAG7Q,EAAE6Q,UAAU,GAAGoY,WAAWjpB,EAAE09C,WAAW,IAAI,IAAIh7B,EAAE1iB,EAAE8S,OAAOowC,iBAAiB5zB,EAAE,EAAEA,EAAE5M,EAAEzjB,OAAO,EAAEqwB,IAAI,GAAG5M,EAAE4M,GAAGlQ,OAAOjgB,GAAG,MAAM,IAAIq3C,EAAE,iDAAiDlnB,EAAE,QAAQnwB,IAAI6zE,GAAGhwE,UAAUqwE,2BAA2B,WAAW,GAAG,IAAIxiE,UAAU5R,OAAO,IAAI,IAAIc,EAAEW,KAAKuyE,YAAYhqD,WAAWlpB,EAAE29C,WAAW,IAAI,IAAIhtC,EAAE3Q,EAAE+S,OAAO3T,EAAEuB,KAAKuyE,YAAYhqD,WAAW9pB,EAAEu+C,WAAW,CAAC,IAAI19C,EAAEb,EAAE2T,OAAOpS,KAAK2yE,2BAA2B3iE,EAAE1Q,QAAQ,GAAG,IAAI6Q,UAAU5R,OAAO,IAAI,IAAIyjB,EAAE7R,UAAU,GAAGye,EAAEze,UAAU,GAAGrR,EAAEkjB,EAAEwgC,iBAAiB9iD,EAAEkvB,EAAE4zB,iBAAiB/b,EAAE,EAAEA,EAAE3nC,EAAEP,OAAO,EAAEkoC,IAAI,IAAI,IAAI16B,EAAE,EAAEA,EAAErM,EAAEnB,OAAO,EAAEwN,IAAI/L,KAAK2yE,2BAA2B3wD,EAAEykB,EAAE7X,EAAE7iB,QAAQ,GAAG,IAAIoE,UAAU5R,OAAO,CAAC,IAAIoU,EAAExC,UAAU,GAAGnP,EAAEmP,UAAU,GAAGq2B,EAAEr2B,UAAU,GAAGgL,EAAEhL,UAAU,GAAG,GAAGwC,IAAI6zB,GAAGxlC,IAAIma,EAAE,OAAO,KAAK,IAAInO,EAAE2F,EAAE6vC,iBAAiBxhD,GAAG4R,EAAED,EAAE6vC,iBAAiBxhD,EAAE,GAAGoT,EAAEoyB,EAAEgc,iBAAiBrnC,GAAGvD,EAAE4uB,EAAEgc,iBAAiBrnC,EAAE,GAAG,GAAGnb,KAAKomE,IAAI7uB,oBAAoBvqC,EAAE4F,EAAEwB,EAAEwD,GAAG5X,KAAKomE,IAAIxuB,oBAAoB53C,KAAKomE,IAAIzuB,YAAY33C,KAAK8uE,wBAAwB9uE,KAAKomE,IAAIp5D,EAAE4F,IAAI5S,KAAK8uE,wBAAwB9uE,KAAKomE,IAAIhyD,EAAEwD,IAAI,MAAM,IAAIk+B,EAAE,mCAAmC9oC,EAAE,IAAI4F,EAAE,QAAQwB,EAAE,IAAIwD,KAAK06D,GAAGhwE,UAAUswE,WAAW,WAAW5yE,KAAK0yE,gCAAgC1yE,KAAK2yE,6BAA6B3yE,KAAK6yE,kBAAkBP,GAAGhwE,UAAUuwE,eAAe,WAAW,GAAG,IAAI1iE,UAAU5R,OAAO,IAAI,IAAIc,EAAEW,KAAKuyE,YAAYhqD,WAAWlpB,EAAE29C,WAAW,CAAC,IAAIhtC,EAAE3Q,EAAE+S,OAAOpS,KAAK6yE,eAAe7iE,QAAQ,GAAG,IAAIG,UAAU5R,OAAO,IAAI,IAAIE,EAAE0R,UAAU,GAAGqyC,iBAAiBljD,EAAE,EAAEA,EAAEb,EAAEF,OAAO,EAAEe,IAAIU,KAAK8yE,cAAcr0E,EAAEa,GAAGb,EAAEa,EAAE,GAAGb,EAAEa,EAAE,KAAKgzE,GAAGhwE,UAAUwsE,wBAAwB,SAASzvE,EAAE2Q,EAAEvR,GAAG,IAAI,IAAIa,EAAE,EAAEA,EAAED,EAAEo4C,qBAAqBn4C,IAAI,CAAC,IAAI0iB,EAAE3iB,EAAEykC,gBAAgBxkC,GAAG,IAAI0iB,EAAEtD,OAAO1O,KAAKgS,EAAEtD,OAAOjgB,GAAG,OAAM,EAAG,OAAM,GAAI6zE,GAAGhwE,UAAUwwE,cAAc,SAASzzE,EAAE2Q,EAAEvR,GAAG,GAAGY,EAAEqf,OAAOjgB,GAAG,MAAM,IAAIq3C,EAAE,+BAA+Bw8B,GAAGG,KAAKn9B,iBAAiB,CAACj2C,EAAE2Q,EAAEvR,MAAM6zE,GAAGhwE,UAAUqpC,YAAY,WAAW,MAAM,IAAI2mC,GAAGhwE,UAAUspC,SAAS,WAAW,OAAO0mC,IAAIE,GAAGC,KAAK7qD,IAAI,WAAW,OAAO,IAAIosB,IAAItrC,OAAOyP,iBAAiBm6D,GAAGE,IAAI,IAAIO,GAAG,WAAW/yE,KAAKomE,IAAI,KAAKpmE,KAAKmiC,IAAI,KAAKniC,KAAKgzE,YAAY,KAAKhzE,KAAKizE,UAAU,KAAKjzE,KAAKkzE,UAAU,KAAKlzE,KAAKmzE,UAAU,KAAKnzE,KAAK+xE,aAAa,KAAK/xE,KAAKoyC,MAAM,KAAKpyC,KAAKqyC,MAAM,KAAKryC,KAAKsyC,MAAM,KAAKtyC,KAAKuyC,MAAM,KAAKvyC,KAAKozE,QAAQ,IAAInsE,MAAM,GAAG6pC,KAAK,MAAM9wC,KAAKqzE,SAAS,KAAK,IAAIh0E,EAAE8Q,UAAU,GAAGH,EAAEG,UAAU,GAAG1R,EAAE0R,UAAU,GAAG,GAAGnQ,KAAKgzE,YAAY3zE,EAAEW,KAAKmiC,IAAI9iC,EAAEW,KAAK+xE,aAAa/hE,EAAEhQ,KAAKomE,IAAI3nE,EAAEuR,GAAG,EAAE,MAAM,IAAItR,EAAE,iCAAiC,IAAIsR,IAAIhQ,KAAKmiC,IAAI,IAAIwF,EAAE3nC,KAAKqyE,MAAMhzE,EAAE8U,GAAGnU,KAAKqyE,MAAMhzE,EAAE+U,IAAIpU,KAAKkzE,UAAU,IAAIvrC,EAAE3nC,KAAKmzE,UAAU,IAAIxrC,GAAG3nC,KAAKszE,YAAYtzE,KAAKmiC,MAAMoxC,GAAG,CAACC,0BAA0B,CAACnjE,cAAa,IAAK0iE,GAAGzwE,UAAUmxE,iBAAiB,SAASp0E,EAAE2Q,GAAG,IAAIvR,EAAEG,KAAKQ,IAAIC,EAAE8U,EAAEnE,EAAEmE,GAAG7U,EAAEV,KAAKM,IAAIG,EAAE8U,EAAEnE,EAAEmE,GAAG6N,EAAEpjB,KAAKQ,IAAIC,EAAE+U,EAAEpE,EAAEoE,GAAGwa,EAAEhwB,KAAKM,IAAIG,EAAE+U,EAAEpE,EAAEoE,GAAGtV,EAAEkB,KAAKqyC,MAAM5zC,GAAGuB,KAAKoyC,MAAM9yC,GAAGU,KAAKuyC,MAAMvwB,GAAGhiB,KAAKsyC,MAAM1jB,EAAE,GAAG9vB,EAAE,OAAM,EAAG,IAAIY,EAAEM,KAAK0zE,0BAA0Br0E,EAAE2Q,GAAG,OAAOgmC,GAAGE,SAASp3C,GAAGY,GAAG,2BAA2BA,GAAGqzE,GAAGzwE,UAAUgxE,YAAY,SAASj0E,GAAGW,KAAKoyC,MAAM/yC,EAAE8U,EAAE,GAAGnU,KAAKqyC,MAAMhzC,EAAE8U,EAAE,GAAGnU,KAAKsyC,MAAMjzC,EAAE+U,EAAE,GAAGpU,KAAKuyC,MAAMlzC,EAAE+U,EAAE,GAAGpU,KAAKozE,QAAQ,GAAG,IAAIzrC,EAAE3nC,KAAKqyC,MAAMryC,KAAKuyC,OAAOvyC,KAAKozE,QAAQ,GAAG,IAAIzrC,EAAE3nC,KAAKoyC,MAAMpyC,KAAKuyC,OAAOvyC,KAAKozE,QAAQ,GAAG,IAAIzrC,EAAE3nC,KAAKoyC,MAAMpyC,KAAKsyC,OAAOtyC,KAAKozE,QAAQ,GAAG,IAAIzrC,EAAE3nC,KAAKqyC,MAAMryC,KAAKsyC,QAAQygC,GAAGzwE,UAAUP,WAAW,SAAS1C,EAAE2Q,GAAG,OAAO,IAAIhQ,KAAK+xE,aAAa/xE,KAAKyzE,iBAAiBp0E,EAAE2Q,IAAIhQ,KAAK2zE,WAAWt0E,EAAEW,KAAKkzE,WAAWlzE,KAAK2zE,WAAW3jE,EAAEhQ,KAAKmzE,WAAWnzE,KAAKyzE,iBAAiBzzE,KAAKkzE,UAAUlzE,KAAKmzE,aAAaJ,GAAGzwE,UAAU+vE,MAAM,SAAShzE,GAAG,OAAOT,KAAK4L,MAAMnL,EAAEW,KAAK+xE,eAAegB,GAAGzwE,UAAUqvC,cAAc,WAAW,OAAO3xC,KAAKgzE,aAAaD,GAAGzwE,UAAUqxE,WAAW,SAASt0E,EAAE2Q,GAAGA,EAAEmE,EAAEnU,KAAKqyE,MAAMhzE,EAAE8U,GAAGnE,EAAEoE,EAAEpU,KAAKqyE,MAAMhzE,EAAE+U,IAAI2+D,GAAGzwE,UAAUsxE,gBAAgB,WAAW,GAAG,OAAO5zE,KAAKqzE,SAAS,CAAC,IAAIh0E,EAAE0zE,GAAGS,0BAA0BxzE,KAAK+xE,aAAa/xE,KAAKqzE,SAAS,IAAI9zE,EAAES,KAAKgzE,YAAY7+D,EAAE9U,EAAEW,KAAKgzE,YAAY7+D,EAAE9U,EAAEW,KAAKgzE,YAAY5+D,EAAE/U,EAAEW,KAAKgzE,YAAY5+D,EAAE/U,GAAG,OAAOW,KAAKqzE,UAAUN,GAAGzwE,UAAUuxE,uBAAuB,SAASx0E,EAAE2Q,GAAG,OAAOhQ,KAAKomE,IAAI7uB,oBAAoBl4C,EAAE2Q,EAAEhQ,KAAKozE,QAAQ,GAAGpzE,KAAKozE,QAAQ,MAAMpzE,KAAKomE,IAAIxuB,oBAAoB53C,KAAKomE,IAAI7uB,oBAAoBl4C,EAAE2Q,EAAEhQ,KAAKozE,QAAQ,GAAGpzE,KAAKozE,QAAQ,MAAMpzE,KAAKomE,IAAIxuB,oBAAoB53C,KAAKomE,IAAI7uB,oBAAoBl4C,EAAE2Q,EAAEhQ,KAAKozE,QAAQ,GAAGpzE,KAAKozE,QAAQ,MAAMpzE,KAAKomE,IAAIxuB,oBAAoB53C,KAAKomE,IAAI7uB,oBAAoBl4C,EAAE2Q,EAAEhQ,KAAKozE,QAAQ,GAAGpzE,KAAKozE,QAAQ,MAAMpzE,KAAKomE,IAAIxuB,sBAAsBm7B,GAAGzwE,UAAUoxE,0BAA0B,SAASr0E,EAAE2Q,GAAG,IAAIvR,GAAE,EAAGa,GAAE,EAAG,OAAOU,KAAKomE,IAAI7uB,oBAAoBl4C,EAAE2Q,EAAEhQ,KAAKozE,QAAQ,GAAGpzE,KAAKozE,QAAQ,MAAMpzE,KAAKomE,IAAIzuB,aAAa33C,KAAKomE,IAAI7uB,oBAAoBl4C,EAAE2Q,EAAEhQ,KAAKozE,QAAQ,GAAGpzE,KAAKozE,QAAQ,MAAMpzE,KAAKomE,IAAIzuB,aAAa33C,KAAKomE,IAAIxuB,oBAAoBn5C,GAAE,GAAIuB,KAAKomE,IAAI7uB,oBAAoBl4C,EAAE2Q,EAAEhQ,KAAKozE,QAAQ,GAAGpzE,KAAKozE,QAAQ,MAAMpzE,KAAKomE,IAAIzuB,aAAa33C,KAAKomE,IAAIxuB,oBAAoBt4C,GAAE,GAAIU,KAAKomE,IAAI7uB,oBAAoBl4C,EAAE2Q,EAAEhQ,KAAKozE,QAAQ,GAAGpzE,KAAKozE,QAAQ,MAAMpzE,KAAKomE,IAAIzuB,eAAgBl5C,IAAIa,MAAOD,EAAEqf,OAAO1e,KAAKmiC,QAAQnyB,EAAE0O,OAAO1e,KAAKmiC,SAAW4wC,GAAGzwE,UAAUwxE,eAAe,SAASz0E,EAAE2Q,GAAG,IAAIvR,EAAEY,EAAEsyC,cAAc3hC,GAAG1Q,EAAED,EAAEsyC,cAAc3hC,EAAE,GAAG,QAAQhQ,KAAK+B,WAAWtD,EAAEa,KAAKD,EAAE49D,gBAAgBj9D,KAAK2xC,gBAAgB3hC,IAAG,IAAK+iE,GAAGzwE,UAAUqpC,YAAY,WAAW,MAAM,IAAIonC,GAAGzwE,UAAUspC,SAAS,WAAW,OAAOmnC,IAAIQ,GAAGC,0BAA0B5rD,IAAI,WAAW,MAAM,KAAKlf,OAAOyP,iBAAiB46D,GAAGQ,IAAI,IAAIQ,GAAG,WAAW/zE,KAAK0+D,SAAS,IAAIn/D,EAAES,KAAKg0E,gBAAgB,IAAIvW,IAAIsW,GAAGzxE,UAAU+8D,OAAO,WAAW,GAAG,IAAIlvD,UAAU5R,aAAa,GAAG,IAAI4R,UAAU5R,OAAO,CAAC,IAAmByR,EAAEG,UAAU,GAAzBA,UAAU,GAAoB2uD,eAAe9uD,EAAEhQ,KAAKg0E,iBAAiBh0E,KAAKq/D,OAAOr/D,KAAKg0E,mBAAmBD,GAAGzxE,UAAUqpC,YAAY,WAAW,MAAM,IAAIooC,GAAGzxE,UAAUspC,SAAS,WAAW,OAAOmoC,IAAI,IAAIE,GAAG,WAAWj0E,KAAK2+B,OAAO,KAAK,IAAIt/B,EAAE8Q,UAAU,GAAGnQ,KAAK2+B,OAAOt/B,GAAG60E,GAAG,CAACC,mBAAmB,CAAC9jE,cAAa,IAAK4jE,GAAG3xE,UAAU8xE,KAAK,WAAW,GAAG,IAAIjkE,UAAU5R,OAAO,CAAC,IAAIc,EAAE8Q,UAAU,GAAG,OAAOnQ,KAAKo0E,KAAK/0E,EAAE,MAAM,GAAG,GAAG,IAAI8Q,UAAU5R,OAAO,CAAC,IAAIyR,EAAEG,UAAU,GAAG1R,EAAE0R,UAAU,GAAG7Q,EAAE6Q,UAAU,GAAG6R,EAAEhS,EAAE4jE,kBAAkBhlD,EAAE,IAAIylD,GAAGrkE,EAAEvR,EAAEa,GAAG,OAAOU,KAAK2+B,OAAOk5B,MAAM71C,EAAE,CAAC2pB,YAAY,WAAW,MAAM,CAAC+rB,KAAKC,UAAU,SAASt4D,GAAGA,EAAEggE,OAAOr9C,EAAE4M,MAAMA,EAAE0lD,gBAAgBL,GAAG3xE,UAAUqpC,YAAY,WAAW,MAAM,IAAIsoC,GAAG3xE,UAAUspC,SAAS,WAAW,OAAOqoC,IAAIC,GAAGC,mBAAmBvsD,IAAI,WAAW,OAAOysD,IAAI3rE,OAAOyP,iBAAiB87D,GAAGC,IAAI,IAAIG,GAAG,SAASh1E,GAAG,SAAS2Q,IAAI3Q,EAAEuQ,KAAK5P,MAAMA,KAAKu0E,UAAU,KAAKv0E,KAAKw0E,YAAY,KAAKx0E,KAAKy0E,qBAAqB,KAAKz0E,KAAK00E,cAAa,EAAG,IAAI1kE,EAAEG,UAAU,GAAG1R,EAAE0R,UAAU,GAAG7Q,EAAE6Q,UAAU,GAAGnQ,KAAKu0E,UAAUvkE,EAAEhQ,KAAKw0E,YAAY/1E,EAAEuB,KAAKy0E,qBAAqBn1E,EAAE,OAAOD,IAAI2Q,EAAEgY,UAAU3oB,GAAG2Q,EAAE1N,UAAUoG,OAAOojC,OAAOzsC,GAAGA,EAAEiD,WAAW0N,EAAE1N,UAAUkJ,YAAYwE,EAAEA,EAAE1N,UAAUgyE,YAAY,WAAW,OAAOt0E,KAAK00E,cAAc1kE,EAAE1N,UAAU+8D,OAAO,WAAW,GAAG,IAAIlvD,UAAU5R,OAAO,OAAOc,EAAEiD,UAAU+8D,OAAOn7D,MAAMlE,KAAKmQ,WAAW,IAAmB1R,EAAE0R,UAAU,GAAG7Q,EAA5B6Q,UAAU,GAAsBwvD,aAAa,GAAG,OAAO3/D,KAAKw0E,aAAal1E,IAAIU,KAAKw0E,aAAa/1E,IAAIuB,KAAKy0E,qBAAqB,OAAO,KAAKz0E,KAAK00E,aAAa10E,KAAKu0E,UAAUT,eAAex0E,EAAEb,IAAIuR,EAAE1N,UAAUqpC,YAAY,WAAW,MAAM,IAAI37B,EAAE1N,UAAUspC,SAAS,WAAW,OAAO57B,GAAGA,EAAlxB,CAAqxB+jE,IAAIY,GAAG,WAAW30E,KAAKomE,IAAI,KAAKpmE,KAAK40E,uBAAuB,KAAK,IAAIv1E,EAAE8Q,UAAU,GAAGnQ,KAAKomE,IAAI/mE,EAAEW,KAAK40E,uBAAuB,IAAIp2B,IAAIm2B,GAAGryE,UAAU4+D,qBAAqB,SAAS7hE,EAAE2Q,EAAEvR,EAAEa,GAAG,GAAGD,IAAIZ,GAAGuR,IAAI1Q,EAAE,OAAO,KAAK,IAAI0iB,EAAE3iB,EAAEmjD,iBAAiBxyC,GAAG4e,EAAEvvB,EAAEmjD,iBAAiBxyC,EAAE,GAAGlR,EAAEL,EAAE+jD,iBAAiBljD,GAAGI,EAAEjB,EAAE+jD,iBAAiBljD,EAAE,GAAG,GAAGU,KAAKomE,IAAI7uB,oBAAoBv1B,EAAE4M,EAAE9vB,EAAEY,GAAGM,KAAKomE,IAAIxuB,mBAAmB53C,KAAKomE,IAAItuB,yBAAyB,CAAC,IAAI,IAAIrR,EAAE,EAAEA,EAAEzmC,KAAKomE,IAAI3uB,qBAAqBhR,IAAIzmC,KAAK40E,uBAAuBxhD,IAAIpzB,KAAKomE,IAAItiC,gBAAgB2C,IAAIpnC,EAAEk+D,iBAAiBv9D,KAAKomE,IAAIp2D,EAAE,GAAGvR,EAAE8+D,iBAAiBv9D,KAAKomE,IAAI9mE,EAAE,KAAKq1E,GAAGryE,UAAU+/C,OAAO,WAAW,OAAM,GAAIsyB,GAAGryE,UAAUuyE,yBAAyB,WAAW,OAAO70E,KAAK40E,wBAAwBD,GAAGryE,UAAUqpC,YAAY,WAAW,MAAM,CAACiiC,KAAK+G,GAAGryE,UAAUspC,SAAS,WAAW,OAAO+oC,IAAI,IAAIG,GAAG,WAAW90E,KAAK+0E,IAAI,KAAK/0E,KAAKomE,IAAI,KAAKpmE,KAAK+xE,aAAa,KAAK/xE,KAAK8xE,OAAO,KAAK9xE,KAAKg1E,cAAc,KAAKh1E,KAAK0gE,iBAAiB,KAAK,IAAIrhE,EAAE8Q,UAAU,GAAGnQ,KAAK+0E,IAAI11E,EAAEW,KAAKomE,IAAI,IAAIhuB,GAAGp4C,KAAKomE,IAAIvuB,kBAAkBx4C,GAAGW,KAAK+xE,aAAa1yE,EAAE4oD,YAAY6sB,GAAGxyE,UAAU2yE,iBAAiB,SAAS51E,GAAG,IAAI2Q,EAAEysD,GAAGe,mBAAmBn+D,GAAGZ,EAAE,IAAI6zE,GAAGtiE,GAAG,IAAIvR,EAAEm0E,aAAa,MAAMvzE,GAAG,KAAKA,aAAaV,GAAG,MAAMU,EAAEA,EAAEglD,oBAAoBywB,GAAGxyE,UAAUk7D,mBAAmB,WAAW,OAAOf,GAAGe,mBAAmBx9D,KAAK0gE,mBAAmBoU,GAAGxyE,UAAU4yE,UAAU,SAAS71E,EAAE2Q,GAAG,IAAIvR,EAAEuB,KAAKm1E,0BAA0B91E,EAAE2Q,GAAGhQ,KAAKo1E,yBAAyB32E,GAAGuB,KAAKq1E,mBAAmBh2E,IAAIy1E,GAAGxyE,UAAU6yE,0BAA0B,SAAS91E,EAAE2Q,GAAG,IAAIvR,EAAE,IAAIk2E,GAAG3kE,GAAG,OAAOhQ,KAAK8xE,OAAOxR,sBAAsB7hE,GAAGuB,KAAK8xE,OAAO3R,aAAa9gE,GAAGZ,EAAEo2E,4BAA4BC,GAAGxyE,UAAU+yE,mBAAmB,WAAW,GAAG3nC,EAAEv9B,UAAU,GAAGo7B,IAAI,IAAI,IAAIlsC,EAAE8Q,UAAU,GAAGoY,WAAWlpB,EAAE29C,WAAW,CAAC,IAAIhtC,EAAE3Q,EAAE+S,OAAOpS,KAAKq1E,mBAAmBrlE,QAAQ,GAAGG,UAAU,aAAassD,GAAG,IAAI,IAAIh+D,EAAE0R,UAAU,GAAG7Q,EAAEb,EAAE+jD,iBAAiBxgC,EAAE,EAAEA,EAAE1iB,EAAEf,OAAOyjB,IAAI,CAAC,IAAI4M,EAAE,IAAImkD,GAAGzzE,EAAE0iB,GAAGhiB,KAAK+xE,aAAa/xE,KAAKomE,KAAKpmE,KAAKg1E,cAAcZ,KAAKxlD,EAAEnwB,EAAEujB,IAAIvjB,EAAEw+D,gBAAgB39D,EAAE0iB,GAAGA,KAAK8yD,GAAGxyE,UAAU69D,aAAa,SAAS9gE,GAAGW,KAAK0gE,iBAAiBrhE,EAAEW,KAAK8xE,OAAO,IAAIvR,GAAGvgE,KAAKg1E,cAAc,IAAIf,GAAGj0E,KAAK8xE,OAAOhR,YAAY9gE,KAAKk1E,UAAU71E,EAAEW,KAAKomE,MAAM0O,GAAGxyE,UAAU8yE,yBAAyB,SAAS/1E,GAAG,IAAI,IAAI2Q,EAAE3Q,EAAEkpB,WAAWvY,EAAEgtC,WAAW,CAAC,IAAIv+C,EAAEuR,EAAEoC,OAAO9S,EAAE,IAAIyzE,GAAGt0E,EAAEuB,KAAK+xE,aAAa/xE,KAAKomE,KAAKpmE,KAAKg1E,cAAcZ,KAAK90E,KAAKw1E,GAAGxyE,UAAUqpC,YAAY,WAAW,MAAM,CAACu0B,KAAK4U,GAAGxyE,UAAUspC,SAAS,WAAW,OAAOkpC,IAAI,IAAIQ,GAAG,WAAW,GAAGt1E,KAAKu1E,SAAS,KAAKv1E,KAAK44D,UAAU,KAAK54D,KAAKmmE,WAAW,IAAIhF,GAAGnhE,KAAKw1E,gBAAgB,KAAKx1E,KAAKy1E,eAAe,KAAK,IAAItlE,UAAU5R,OAAO,CAAC,IAAIc,EAAE8Q,UAAU,GAAGnQ,KAAKu1E,SAASl2E,OAAO,GAAG,IAAI8Q,UAAU5R,OAAO,CAAC,IAAIyR,EAAEG,UAAU,GAAG1R,EAAE0R,UAAU,GAAGnQ,KAAKu1E,SAASvlE,EAAEhQ,KAAKmmE,WAAW1nE,IAAI2yB,GAAG,CAACmwC,UAAU,CAAClxD,cAAa,GAAIqlE,SAAS,CAACrlE,cAAa,GAAI+xD,SAAS,CAAC/xD,cAAa,GAAIgyD,WAAW,CAAChyD,cAAa,GAAIslE,qBAAqB,CAACtlE,cAAa,IAAKilE,GAAGhzE,UAAUszE,qBAAqB,SAASv2E,GAAG,IAAI2Q,EAAE,IAAI6hE,GAAG,IAAIiD,GAAG,IAAIttB,GAAG,IAAInoD,EAAE4oD,YAAYxpD,EAAE,IAAI8S,GAAGvR,KAAKmmE,YAAY1nE,EAAEyyE,yBAAyB7xE,GAAGZ,EAAEkzE,SAAS3hE,GAAGhQ,KAAKw1E,gBAAgB/2E,EAAEgzE,OAAOzxE,KAAKu1E,SAASv1E,KAAK44D,YAAY0c,GAAGhzE,UAAUuzE,uBAAuB,WAAW,IAAIx2E,EAAEW,KAAK,GAAG,IAAImQ,UAAU5R,OAAO,CAAC,IAAI,IAAIyR,EAAEslE,GAAGK,qBAAqB3lE,GAAG,EAAEA,IAAI,CAAC,IAAI3Q,EAAEw2E,uBAAuB7lE,GAAG,MAAMA,GAAG,KAAKA,aAAa87C,IAAI,MAAM97C,EAAE3Q,EAAEo2E,eAAezlE,EAAE,GAAG,OAAO3Q,EAAEm2E,gBAAgB,OAAO,KAAK,MAAMx1E,KAAKy1E,eAAe,GAAG,IAAItlE,UAAU5R,OAAO,CAAC,IAAIE,EAAE0R,UAAU,GAAG7Q,EAAEg2E,GAAGQ,qBAAqB91E,KAAKu1E,SAASv1E,KAAK44D,UAAUn6D,GAAGujB,EAAE,IAAIwlC,GAAGloD,GAAGU,KAAK41E,qBAAqB5zD,KAAKszD,GAAGhzE,UAAUyzE,gBAAgB,WAAW,GAAG/1E,KAAKg2E,0BAA0B,OAAOh2E,KAAKw1E,gBAAgB,OAAO,KAAK,IAAIn2E,EAAEW,KAAKu1E,SAAS95B,aAAamB,oBAAoBv9C,EAAE+oD,YAAYZ,GAAGK,MAAM7nD,KAAK41E,qBAAqBv2E,GAAGW,KAAK61E,0BAA0BP,GAAGhzE,UAAUy/D,oBAAoB,SAAS1iE,GAAGW,KAAKmmE,WAAWpE,oBAAoB1iE,IAAIi2E,GAAGhzE,UAAU0zE,wBAAwB,WAAW,IAAI,IAAI32E,EAAE,IAAIkS,GAAGvR,KAAKmmE,YAAYnmE,KAAKw1E,gBAAgBn2E,EAAEoyE,OAAOzxE,KAAKu1E,SAASv1E,KAAK44D,WAAW,MAAMv5D,GAAG,KAAKA,aAAay2C,GAAG,MAAMz2C,EAAEW,KAAKy1E,eAAep2E,IAAIi2E,GAAGhzE,UAAU2zE,kBAAkB,SAAS52E,GAAG,OAAOW,KAAK44D,UAAUv5D,EAAEW,KAAK+1E,kBAAkB/1E,KAAKw1E,iBAAiBF,GAAGhzE,UAAU0/D,eAAe,SAAS3iE,GAAGW,KAAKmmE,WAAWnE,eAAe3iE,IAAIi2E,GAAGhzE,UAAUqpC,YAAY,WAAW,MAAM,IAAI2pC,GAAGhzE,UAAUspC,SAAS,WAAW,OAAO0pC,IAAIA,GAAGY,SAAS,WAAW,GAAG,IAAI/lE,UAAU5R,OAAO,CAAC,IAAmByR,EAAEG,UAAU,GAAG,OAAO,IAAImlE,GAAvCnlE,UAAU,IAAmC8lE,kBAAkBjmE,GAAG,GAAG,IAAIG,UAAU5R,OAAO,CAAC,GAAG6c,OAAOqwB,UAAUt7B,UAAU,KAAKA,UAAU,aAAasqC,IAAI,iBAAiBtqC,UAAU,GAAG,CAAC,IAAmB7Q,EAAE6Q,UAAU,GAAG6R,EAAE7R,UAAU,GAAGye,EAAE,IAAI0mD,GAAjDnlE,UAAU,IAAsE,OAAzBye,EAAEmzC,oBAAoB//C,GAAU4M,EAAEqnD,kBAAkB32E,GAAG,GAAG6Q,UAAU,aAAagxD,IAAIhxD,UAAU,aAAasqC,IAAI,iBAAiBtqC,UAAU,GAAG,CAAC,IAAmBzQ,EAAEyQ,UAAU,GAAkB,OAAO,IAAImlE,GAAtDnlE,UAAU,GAAoBA,UAAU,IAAsB8lE,kBAAkBv2E,SAAS,GAAG,IAAIyQ,UAAU5R,OAAO,CAAC,IAAmBoU,EAAExC,UAAU,GAAGnP,EAAEmP,UAAU,GAAGq2B,EAAEr2B,UAAU,GAAGgL,EAAE,IAAIm6D,GAAhEnlE,UAAU,IAAyG,OAA7CgL,EAAE4mD,oBAAoB/gE,GAAGma,EAAE6mD,eAAex7B,GAAUrrB,EAAE86D,kBAAkBtjE,KAAK2iE,GAAGQ,qBAAqB,SAASz2E,EAAE2Q,EAAEvR,GAAG,IAAIa,EAAED,EAAEm9C,sBAAsBx6B,EAAE2rB,EAAEzuC,IAAIN,KAAKoiB,IAAI1hB,EAAEszC,WAAWh0C,KAAKoiB,IAAI1hB,EAAEuzC,WAAWj0C,KAAKoiB,IAAI1hB,EAAEwzC,WAAWl0C,KAAKoiB,IAAI1hB,EAAEyzC,YAAY,GAAG/iC,EAAE,EAAEA,EAAE,GAAG4e,EAAEnwB,EAAEG,KAAK8sC,MAAM9sC,KAAKC,IAAImjB,GAAGpjB,KAAKC,IAAI,IAAI,GAAG,OAAOD,KAAKyF,IAAI,GAAGuqB,IAAIwC,GAAGmwC,UAAU35C,IAAI,WAAW,OAAOu5C,GAAGI,WAAWnwC,GAAGskD,SAAS9tD,IAAI,WAAW,OAAOu5C,GAAGiB,UAAUhxC,GAAGgxC,SAASx6C,IAAI,WAAW,OAAOu5C,GAAGiB,UAAUhxC,GAAGixC,WAAWz6C,IAAI,WAAW,OAAOu5C,GAAGkB,YAAYjxC,GAAGukD,qBAAqB/tD,IAAI,WAAW,OAAO,IAAIlf,OAAOyP,iBAAiBm9D,GAAGlkD,IAAI,IAAI/pB,GAAG,WAAWrH,KAAKmiC,IAAI,CAAC,IAAIwF,EAAE,IAAIA,GAAG3nC,KAAK44D,UAAUrmC,EAAE4a,IAAIntC,KAAKm2E,SAAQ,GAAI9uE,GAAG/E,UAAUkgD,eAAe,WAAW,OAAOxiD,KAAKmiC,KAAK96B,GAAG/E,UAAUqvC,cAAc,SAAStyC,GAAG,OAAOW,KAAKmiC,IAAI9iC,IAAIgI,GAAG/E,UAAU8zE,WAAW,WAAW,GAAG,IAAIjmE,UAAU5R,OAAO,CAAC,IAAIc,EAAE8Q,UAAU,GAAGnQ,KAAKo2E,WAAW/2E,EAAE8iC,IAAI,GAAG9iC,EAAE8iC,IAAI,SAAS,GAAG,IAAIhyB,UAAU5R,OAAO,CAAC,IAAIyR,EAAEG,UAAU,GAAG1R,EAAE0R,UAAU,GAAG,GAAGnQ,KAAKm2E,QAAQ,OAAOn2E,KAAKq2E,WAAWrmE,EAAEvR,GAAG,KAAK,IAAIa,EAAE0Q,EAAE3H,SAAS5J,GAAGa,EAAEU,KAAK44D,WAAW54D,KAAKq2E,WAAWrmE,EAAEvR,EAAEa,KAAK+H,GAAG/E,UAAU+zE,WAAW,WAAW,GAAG,IAAIlmE,UAAU5R,OAAOyB,KAAKm2E,SAAQ,OAAQ,GAAG,IAAIhmE,UAAU5R,OAAO,CAAC,IAAIc,EAAE8Q,UAAU,GAAGH,EAAEG,UAAU,GAAGnQ,KAAKmiC,IAAI,GAAG+K,cAAc7tC,GAAGW,KAAKmiC,IAAI,GAAG+K,cAAcl9B,GAAGhQ,KAAK44D,UAAUv5D,EAAEgJ,SAAS2H,GAAGhQ,KAAKm2E,SAAQ,OAAQ,GAAG,IAAIhmE,UAAU5R,OAAO,CAAC,IAAIE,EAAE0R,UAAU,GAAG7Q,EAAE6Q,UAAU,GAAG6R,EAAE7R,UAAU,GAAGnQ,KAAKmiC,IAAI,GAAG+K,cAAczuC,GAAGuB,KAAKmiC,IAAI,GAAG+K,cAAc5tC,GAAGU,KAAK44D,UAAU52C,EAAEhiB,KAAKm2E,SAAQ,IAAK9uE,GAAG/E,UAAU42D,YAAY,WAAW,OAAOl5D,KAAK44D,WAAWvxD,GAAG/E,UAAUg0E,WAAW,WAAW,GAAG,IAAInmE,UAAU5R,OAAO,CAAC,IAAIc,EAAE8Q,UAAU,GAAGnQ,KAAKs2E,WAAWj3E,EAAE8iC,IAAI,GAAG9iC,EAAE8iC,IAAI,SAAS,GAAG,IAAIhyB,UAAU5R,OAAO,CAAC,IAAIyR,EAAEG,UAAU,GAAG1R,EAAE0R,UAAU,GAAG,GAAGnQ,KAAKm2E,QAAQ,OAAOn2E,KAAKq2E,WAAWrmE,EAAEvR,GAAG,KAAK,IAAIa,EAAE0Q,EAAE3H,SAAS5J,GAAGa,EAAEU,KAAK44D,WAAW54D,KAAKq2E,WAAWrmE,EAAEvR,EAAEa,KAAK+H,GAAG/E,UAAUqpC,YAAY,WAAW,MAAM,IAAItkC,GAAG/E,UAAUspC,SAAS,WAAW,OAAOvkC,IAAI,IAAIkvE,GAAG,aAAaA,GAAGj0E,UAAUqpC,YAAY,WAAW,MAAM,IAAI4qC,GAAGj0E,UAAUspC,SAAS,WAAW,OAAO2qC,IAAIA,GAAGC,gBAAgB,WAAW,GAAGrmE,UAAU,aAAa9I,IAAI8I,UAAU,aAAaqzC,IAAIrzC,UAAU,aAAaw3B,EAAE,IAAI,IAAmB33B,EAAEG,UAAU,GAAG1R,EAAE0R,UAAU,GAAG7Q,EAA3C6Q,UAAU,GAAqCqyC,iBAAiBxgC,EAAE,IAAIy7C,GAAG7uC,EAAE,EAAEA,EAAEtvB,EAAEf,OAAO,EAAEqwB,IAAI,CAAC5M,EAAEq8C,eAAe/+D,EAAEsvB,GAAGtvB,EAAEsvB,EAAE,IAAI,IAAI9vB,EAAEkjB,EAAEk8C,aAAaluD,GAAGvR,EAAE23E,WAAWt3E,EAAEkR,QAAQ,GAAGG,UAAU,aAAa9I,IAAI8I,UAAU,aAAai1C,IAAIj1C,UAAU,aAAaw3B,EAAE,CAAC,IAAIjoC,EAAEyQ,UAAU,GAAGs2B,EAAEt2B,UAAU,GAAGpE,EAAEoE,UAAU,GAAGomE,GAAGC,gBAAgB92E,EAAE4lD,kBAAkB7e,EAAE16B,GAAG,IAAI,IAAI4G,EAAE,EAAEA,EAAEjT,EAAE2lD,qBAAqB1yC,IAAI4jE,GAAGC,gBAAgB92E,EAAE6lD,iBAAiB5yC,GAAG8zB,EAAE16B,QAAQ,GAAGoE,UAAU,aAAa9I,IAAI8I,UAAU,aAAasqC,IAAItqC,UAAU,aAAaw3B,EAAE,CAAC,IAAI3mC,EAAEmP,UAAU,GAAGq2B,EAAEr2B,UAAU,GAAGgL,EAAEhL,UAAU,GAAG,GAAGnP,aAAawiD,GAAG+yB,GAAGC,gBAAgBx1E,EAAEwlC,EAAErrB,QAAQ,GAAGna,aAAaokD,GAAGmxB,GAAGC,gBAAgBx1E,EAAEwlC,EAAErrB,QAAQ,GAAGna,aAAauhD,GAAG,IAAI,IAAIv1C,EAAEhM,EAAE4R,EAAE,EAAEA,EAAE5F,EAAEmvC,mBAAmBvpC,IAAI,CAAC,IAAIwB,EAAEpH,EAAE0uC,aAAa9oC,GAAG2jE,GAAGC,gBAAgBpiE,EAAEoyB,EAAErrB,QAAQA,EAAEi7D,WAAWp1E,EAAE2wC,gBAAgBnL,QAAQ,GAAGr2B,UAAU,aAAa9I,IAAI8I,UAAU,aAAastD,IAAIttD,UAAU,aAAaw3B,EAAE,CAAC,IAAmBjpC,EAAEyR,UAAU,GAAGoiB,EAAEpiB,UAAU,GAAG43B,EAA3C53B,UAAU,GAAqC+tD,aAAax/D,GAAG6zB,EAAE6jD,WAAWruC,EAAErpC,KAAK,IAAI+3E,GAAG,SAASp3E,GAAGW,KAAK02E,WAAW,IAAIrvE,GAAGrH,KAAKsqE,WAAWjrE,GAAG,MAAMs3E,GAAG,CAACC,uBAAuB,CAACvmE,cAAa,GAAIwmE,0BAA0B,CAACxmE,cAAa,IAAKomE,GAAGn0E,UAAUw0E,2BAA2B,SAASz3E,GAAG,IAAI2Q,EAAE,IAAImhB,GAAGnxB,KAAKsqE,YAAYjrE,EAAE6E,MAAM8L,GAAGhQ,KAAK02E,WAAWJ,WAAWtmE,EAAE+mE,wBAAwBN,GAAGn0E,UAAU00E,yBAAyB,SAAS33E,GAAG,IAAI2Q,EAAE,IAAIinE,GAAGj3E,KAAKsqE,YAAYjrE,EAAE6E,MAAM8L,GAAGhQ,KAAK02E,WAAWJ,WAAWtmE,EAAE+mE,wBAAwBN,GAAGn0E,UAAU40E,aAAa,SAAS73E,GAAG,OAAOW,KAAKg3E,yBAAyB33E,GAAGW,KAAK82E,2BAA2Bz3E,GAAGW,KAAK02E,WAAWxd,eAAeud,GAAGn0E,UAAU60E,kBAAkB,WAAW,OAAOn3E,KAAK02E,YAAYD,GAAGn0E,UAAUqpC,YAAY,WAAW,MAAM,IAAI8qC,GAAGn0E,UAAUspC,SAAS,WAAW,OAAO6qC,IAAIE,GAAGC,uBAAuBhvD,IAAI,WAAW,OAAOqvD,IAAIN,GAAGE,0BAA0BjvD,IAAI,WAAW,OAAOuJ,IAAIzoB,OAAOyP,iBAAiBs+D,GAAGE,IAAI,IAAIM,GAAG,SAAS53E,GAAGW,KAAK02E,WAAW,IAAIrvE,GAAGrH,KAAKo3E,WAAW,IAAI/vE,GAAGrH,KAAKgjD,MAAM3jD,GAAG,MAAM43E,GAAG30E,UAAUk4C,OAAO,SAASn7C,GAAGW,KAAKo3E,WAAWf,aAAaE,GAAGC,gBAAgBx2E,KAAKgjD,MAAM3jD,EAAEW,KAAKo3E,YAAYp3E,KAAK02E,WAAWJ,WAAWt2E,KAAKo3E,aAAaH,GAAG30E,UAAUy0E,oBAAoB,WAAW,OAAO/2E,KAAK02E,YAAYO,GAAG30E,UAAUqpC,YAAY,WAAW,MAAM,CAAC0R,KAAK45B,GAAG30E,UAAUspC,SAAS,WAAW,OAAOqrC,IAAI,IAAI9lD,GAAG,SAAS9xB,GAAGW,KAAK02E,WAAW,IAAIrvE,GAAGrH,KAAKo3E,WAAW,IAAI/vE,GAAGrH,KAAKgjD,MAAM3jD,GAAG,MAAM8xB,GAAG7uB,UAAUk4C,OAAO,SAASn7C,EAAE2Q,GAAG,GAAG,IAAIA,EAAE,OAAO,KAAK,IAAIvR,EAAEY,EAAEsyC,cAAc3hC,EAAE,GAAG1Q,EAAED,EAAEsyC,cAAc3hC,GAAGgS,EAAE,IAAI2lB,GAAGlpC,EAAE0V,EAAE7U,EAAE6U,GAAG,GAAG1V,EAAE2V,EAAE9U,EAAE8U,GAAG,GAAGpU,KAAKo3E,WAAWf,aAAaE,GAAGC,gBAAgBx2E,KAAKgjD,MAAMhhC,EAAEhiB,KAAKo3E,YAAYp3E,KAAK02E,WAAWJ,WAAWt2E,KAAKo3E,aAAajmD,GAAG7uB,UAAU+/C,OAAO,WAAW,OAAM,GAAIlxB,GAAG7uB,UAAUggD,kBAAkB,WAAW,OAAM,GAAInxB,GAAG7uB,UAAUy0E,oBAAoB,WAAW,OAAO/2E,KAAK02E,YAAYvlD,GAAG7uB,UAAUqpC,YAAY,WAAW,MAAM,CAACyW,KAAKjxB,GAAG7uB,UAAUspC,SAAS,WAAW,OAAOza,IAAI,IAAIkmD,GAAG,SAASh4E,GAAGW,KAAKs3E,OAAOj4E,GAAG,MAAMg4E,GAAG/0E,UAAUk4C,OAAO,SAASn7C,GAAGA,aAAa+lD,IAAIplD,KAAKs3E,OAAOlkD,IAAI/zB,IAAIg4E,GAAG/0E,UAAUqpC,YAAY,WAAW,MAAM,CAACwW,KAAKk1B,GAAG/0E,UAAUspC,SAAS,WAAW,OAAOyrC,IAAIA,GAAGtgB,YAAY,WAAW,GAAG,IAAI5mD,UAAU5R,OAAO,CAAC,IAAIc,EAAE8Q,UAAU,GAAG,OAAOknE,GAAGtgB,YAAY13D,EAAE,IAAIm/C,IAAI,GAAG,IAAIruC,UAAU5R,OAAO,CAAC,IAAIyR,EAAEG,UAAU,GAAG1R,EAAE0R,UAAU,GAAG,OAAOH,aAAao1C,GAAG3mD,EAAE20B,IAAIpjB,GAAGA,aAAauyC,IAAIvyC,EAAE9L,MAAM,IAAImzE,GAAG54E,IAAIA,IAAI,IAAI84E,GAAG,WAAW,GAAGv3E,KAAKw3E,OAAO,KAAKx3E,KAAKy3E,uBAAsB,EAAG,IAAItnE,UAAU5R,OAAO,CAAC,IAAIc,EAAE8Q,UAAU,GAAGnQ,KAAKw3E,OAAOn4E,OAAO,GAAG,IAAI8Q,UAAU5R,OAAO,CAAC,IAAIyR,EAAEG,UAAU,GAAG1R,EAAE0R,UAAU,GAAGnQ,KAAKw3E,OAAOxnE,EAAEhQ,KAAKy3E,sBAAsBh5E,IAAI84E,GAAGj1E,UAAUk4C,OAAO,SAASn7C,GAAG,GAAGW,KAAKy3E,uBAAuBp4E,aAAaqmD,GAAG,CAAC,IAAI11C,EAAE3Q,EAAEo8C,aAAanG,iBAAiBj2C,EAAEylD,yBAAyB,OAAO9kD,KAAKw3E,OAAOpkD,IAAIpjB,GAAG,KAAK3Q,aAAamkD,IAAIxjD,KAAKw3E,OAAOpkD,IAAI/zB,IAAIk4E,GAAGj1E,UAAUo1E,qBAAqB,SAASr4E,GAAGW,KAAKy3E,sBAAsBp4E,GAAGk4E,GAAGj1E,UAAUqpC,YAAY,WAAW,MAAM,CAAC6D,KAAK+nC,GAAGj1E,UAAUspC,SAAS,WAAW,OAAO2rC,IAAIA,GAAGhL,YAAY,WAAW,GAAG,IAAIp8D,UAAU5R,OAAO,CAAC,IAAIc,EAAE8Q,UAAU,GAAG,OAAO9Q,EAAEo8C,aAAaoN,cAAc0uB,GAAGI,SAASt4E,IAAI,GAAG,IAAI8Q,UAAU5R,OAAO,CAAC,IAAIyR,EAAEG,UAAU,GAAG1R,EAAE0R,UAAU,GAAG,OAAOH,EAAEyrC,aAAaoN,cAAc0uB,GAAGI,SAAS3nE,EAAEvR,MAAM84E,GAAGI,SAAS,WAAW,GAAG,IAAIxnE,UAAU5R,OAAO,CAAC,IAAIc,EAAE8Q,UAAU,GAAG,OAAOonE,GAAGI,SAASt4E,GAAE,GAAI,GAAG,IAAI8Q,UAAU5R,OAAO,CAAC,GAAGmvC,EAAEv9B,UAAU,GAAGo7B,KAAKmC,EAAEv9B,UAAU,GAAGo7B,IAAI,CAAC,IAAI,IAAmB9sC,EAAE0R,UAAU,GAAG7Q,EAA5B6Q,UAAU,GAAsBoY,WAAWjpB,EAAE09C,WAAW,CAAC,IAAIh7B,EAAE1iB,EAAE8S,OAAOmlE,GAAGI,SAAS31D,EAAEvjB,GAAG,OAAOA,EAAE,GAAG0R,UAAU,aAAasqC,IAAI,kBAAkBtqC,UAAU,GAAG,CAAC,IAAIye,EAAEze,UAAU,GAAGrR,EAAEqR,UAAU,GAAGzQ,EAAE,IAAI8+C,GAAG,OAAO5vB,EAAE1qB,MAAM,IAAIqzE,GAAG73E,EAAEZ,IAAIY,EAAE,GAAGyQ,UAAU,aAAasqC,IAAI/M,EAAEv9B,UAAU,GAAGo7B,IAAI,CAAC,IAAI9E,EAAEt2B,UAAU,GAAGpE,EAAEoE,UAAU,GAAG,OAAOs2B,aAAa+c,GAAGz3C,EAAEqnB,IAAIqT,GAAGA,EAAEviC,MAAM,IAAIqzE,GAAGxrE,IAAIA,QAAQ,GAAG,IAAIoE,UAAU5R,OAAO,CAAC,GAAG,kBAAkB4R,UAAU,IAAIu9B,EAAEv9B,UAAU,GAAGo7B,KAAKmC,EAAEv9B,UAAU,GAAGo7B,IAAI,CAAC,IAAI,IAAmBvqC,EAAEmP,UAAU,GAAGq2B,EAAEr2B,UAAU,GAAGgL,EAA3ChL,UAAU,GAAqCoY,WAAWpN,EAAE6hC,WAAW,CAAC,IAAIhwC,EAAEmO,EAAE/I,OAAOmlE,GAAGI,SAAS3qE,EAAEhM,EAAEwlC,GAAG,OAAOxlC,EAAE,GAAG,kBAAkBmP,UAAU,IAAIA,UAAU,aAAasqC,IAAI/M,EAAEv9B,UAAU,GAAGo7B,IAAI,CAAC,IAAmBn3B,EAAEjE,UAAU,GAAGyH,EAAEzH,UAAU,GAAG,OAA3CA,UAAU,GAA0CjM,MAAM,IAAIqzE,GAAGnjE,EAAEwD,IAAIxD,KAAK,IAAIwjE,GAAG,WAAW,GAAG53E,KAAK63E,cAActoC,GAAGwO,sBAAsB/9C,KAAK83E,MAAM,KAAK93E,KAAK+3E,eAAe,KAAK,IAAI5nE,UAAU5R,aAAa,GAAG,IAAI4R,UAAU5R,OAAO,CAAC,IAAIc,EAAE8Q,UAAU,GAAG,GAAG,OAAO9Q,EAAE,MAAM,IAAIX,EAAE,yBAAyBsB,KAAK63E,cAAcx4E,IAAIu4E,GAAGt1E,UAAU01E,eAAe,WAAW,GAAG7nE,UAAU,aAAaw3B,GAAGx3B,UAAU,aAAai1C,GAAG,CAAC,IAAI/lD,EAAE8Q,UAAU,GAAGH,EAAEG,UAAU,GAAG,GAAGH,EAAEglB,UAAU,OAAOsS,EAAEiG,SAAS,IAAI9uC,EAAEuR,EAAEs1C,kBAAkBhmD,EAAEU,KAAKi4E,oBAAoB54E,EAAEZ,GAAG,GAAGa,IAAIgoC,EAAEiG,SAAS,OAAOjG,EAAEiG,SAAS,GAAGjuC,IAAIgoC,EAAEgG,SAAS,OAAOhG,EAAEgG,SAAS,IAAI,IAAItrB,EAAE,EAAEA,EAAEhS,EAAEq1C,qBAAqBrjC,IAAI,CAAC,IAAI4M,EAAE5e,EAAEu1C,iBAAiBvjC,GAAGljB,EAAEkB,KAAKi4E,oBAAoB54E,EAAEuvB,GAAG,GAAG9vB,IAAIwoC,EAAE+F,SAAS,OAAO/F,EAAEiG,SAAS,GAAGzuC,IAAIwoC,EAAEgG,SAAS,OAAOhG,EAAEgG,SAAS,OAAOhG,EAAE+F,SAAS,GAAGl9B,UAAU,aAAaw3B,GAAGx3B,UAAU,aAAaqzC,GAAG,CAAC,IAAI9jD,EAAEyQ,UAAU,GAAGs2B,EAAEt2B,UAAU,GAAG,IAAIs2B,EAAE+V,sBAAsBz6C,WAAWrC,GAAG,OAAO4nC,EAAEiG,SAAS,IAAIxhC,EAAE06B,EAAE+b,iBAAiB,OAAO/b,EAAEqc,aAAapjD,EAAEgf,OAAO3S,EAAE,MAAMrM,EAAEgf,OAAO3S,EAAEA,EAAExN,OAAO,IAAI61B,GAAGmmB,SAAS76C,EAAEqM,GAAGu7B,EAAE+F,SAAS/F,EAAEiG,SAASjG,EAAEgG,SAAS,GAAGn9B,UAAU,aAAaw3B,GAAGx3B,UAAU,aAAa+0C,GAAG,CAAC,IAAIvyC,EAAExC,UAAU,GAAG,OAAOA,UAAU,GAAGwhC,gBAAgBjF,SAAS/5B,GAAG20B,EAAE+F,SAAS/F,EAAEiG,WAAWqqC,GAAGt1E,UAAU21E,oBAAoB,SAAS54E,EAAE2Q,GAAG,OAAOA,EAAEwsC,sBAAsBz6C,WAAW1C,GAAG+0B,GAAGslB,kBAAkBr6C,EAAE2Q,EAAEwyC,kBAAkBlb,EAAEiG,UAAUqqC,GAAGt1E,UAAUP,WAAW,SAAS1C,EAAE2Q,GAAG,OAAOhQ,KAAKmrE,OAAO9rE,EAAE2Q,KAAKs3B,EAAEiG,UAAUqqC,GAAGt1E,UAAU41E,mBAAmB,SAAS74E,GAAGA,IAAIioC,EAAE+F,WAAWrtC,KAAK83E,OAAM,GAAIz4E,IAAIioC,EAAEgG,UAAUttC,KAAK+3E,kBAAkBH,GAAGt1E,UAAU61E,gBAAgB,SAAS94E,EAAE2Q,GAAG,GAAGA,aAAak1C,IAAIllD,KAAKk4E,mBAAmBl4E,KAAKg4E,eAAe34E,EAAE2Q,IAAIA,aAAawzC,GAAGxjD,KAAKk4E,mBAAmBl4E,KAAKg4E,eAAe34E,EAAE2Q,SAAS,GAAGA,aAAao1C,GAAGplD,KAAKk4E,mBAAmBl4E,KAAKg4E,eAAe34E,EAAE2Q,SAAS,GAAGA,aAAa6yC,GAAG,IAAI,IAAIpkD,EAAEuR,EAAE1Q,EAAE,EAAEA,EAAEb,EAAE09C,mBAAmB78C,IAAI,CAAC,IAAI0iB,EAAEvjB,EAAEi9C,aAAap8C,GAAGU,KAAKk4E,mBAAmBl4E,KAAKg4E,eAAe34E,EAAE2iB,SAAS,GAAGhS,aAAa61C,GAAG,IAAI,IAAIj3B,EAAE5e,EAAElR,EAAE,EAAEA,EAAE8vB,EAAEutB,mBAAmBr9C,IAAI,CAAC,IAAIY,EAAEkvB,EAAE8sB,aAAa58C,GAAGkB,KAAKk4E,mBAAmBl4E,KAAKg4E,eAAe34E,EAAEK,SAAS,GAAGsQ,aAAauyC,GAAG,IAAI,IAAI9b,EAAE,IAAI2kC,GAAGp7D,GAAGy2B,EAAEuW,WAAW,CAAC,IAAIjxC,EAAE06B,EAAEr0B,OAAOrG,IAAIiE,GAAGhQ,KAAKm4E,gBAAgB94E,EAAE0M,KAAK6rE,GAAGt1E,UAAU6oE,OAAO,SAAS9rE,EAAE2Q,GAAG,OAAOA,EAAEglB,UAAUsS,EAAEiG,SAASv9B,aAAawzC,IAA4BxzC,aAAao1C,GAAtCplD,KAAKg4E,eAAe34E,EAAE2Q,IAA6ChQ,KAAK83E,OAAM,EAAG93E,KAAK+3E,eAAe,EAAE/3E,KAAKm4E,gBAAgB94E,EAAE2Q,GAAGhQ,KAAK63E,cAAc75B,aAAah+C,KAAK+3E,gBAAgBzwC,EAAEgG,SAASttC,KAAK+3E,eAAe,GAAG/3E,KAAK83E,MAAMxwC,EAAE+F,SAAS/F,EAAEiG,WAAWqqC,GAAGt1E,UAAUqpC,YAAY,WAAW,MAAM,IAAIisC,GAAGt1E,UAAUspC,SAAS,WAAW,OAAOgsC,IAAI,IAAIQ,GAAG,SAAS/4E,IAAI,GAAGW,KAAKq4E,WAAW,KAAKr4E,KAAKs4E,UAAU,KAAKt4E,KAAKmiC,IAAI,KAAK,IAAIhyB,UAAU5R,OAA0Cc,EAAEuQ,KAAK5P,KAAnCmQ,UAAU,GAAgC9Q,EAAEk5E,YAA7BpoE,UAAU,SAAuC,GAAG,IAAIA,UAAU5R,OAAO,CAAC,IAAIe,EAAE6Q,UAAU,GAAG6R,EAAE7R,UAAU,GAAGye,EAAEze,UAAU,GAAGnQ,KAAKq4E,WAAW/4E,EAAEU,KAAKs4E,UAAUt2D,EAAEhiB,KAAKmiC,IAAIvT,IAAI4pD,GAAG,CAACD,YAAY,CAACloE,cAAa,IAAK+nE,GAAG91E,UAAUm2E,aAAa,WAAW,OAAOz4E,KAAKs4E,YAAYF,GAAGG,aAAaH,GAAG91E,UAAUqvC,cAAc,WAAW,OAAO3xC,KAAKmiC,KAAKi2C,GAAG91E,UAAUo2E,qBAAqB,WAAW,OAAO14E,KAAKq4E,YAAYD,GAAG91E,UAAU0sE,gBAAgB,WAAW,OAAOhvE,KAAKs4E,WAAWF,GAAG91E,UAAUqpC,YAAY,WAAW,MAAM,IAAIysC,GAAG91E,UAAUspC,SAAS,WAAW,OAAOwsC,IAAII,GAAGD,YAAY3wD,IAAI,WAAW,OAAO,GAAGlf,OAAOyP,iBAAiBigE,GAAGI,IAAI,IAAIG,GAAG,SAASt5E,GAAGW,KAAKgvD,KAAK3vD,GAAG,MAAMs5E,GAAGr2E,UAAUk4C,OAAO,SAASn7C,GAAGA,aAAa6lD,IAAIllD,KAAKgvD,KAAK57B,IAAI/zB,IAAIs5E,GAAGr2E,UAAUqpC,YAAY,WAAW,MAAM,CAACwW,KAAKw2B,GAAGr2E,UAAUspC,SAAS,WAAW,OAAO+sC,IAAIA,GAAGC,UAAU,WAAW,GAAG,IAAIzoE,UAAU5R,OAAO,CAAC,IAAIc,EAAE8Q,UAAU,GAAG,OAAO9Q,aAAa6lD,GAAGoT,GAAGE,cAAcn5D,GAAGs5E,GAAGC,UAAUv5E,EAAE,IAAIm/C,IAAI,GAAG,IAAIruC,UAAU5R,OAAO,CAAC,IAAIyR,EAAEG,UAAU,GAAG1R,EAAE0R,UAAU,GAAG,OAAOH,aAAak1C,GAAGzmD,EAAE20B,IAAIpjB,GAAGA,aAAauyC,IAAIvyC,EAAE9L,MAAM,IAAIy0E,GAAGl6E,IAAIA,IAAI,IAAIo6E,GAAG,WAAW74E,KAAK84E,WAAW,KAAK,IAAIz5E,EAAE8Q,UAAU,GAAGnQ,KAAK84E,WAAWz5E,GAAGw5E,GAAGv2E,UAAUk4C,OAAO,SAASn7C,IAAIA,aAAa6lD,IAAI7lD,aAAamkD,IAAInkD,aAAa+lD,KAAKplD,KAAK84E,WAAW1lD,IAAI,IAAIglD,GAAG/4E,EAAE,EAAEA,EAAEsyC,mBAAmBknC,GAAGv2E,UAAUqpC,YAAY,WAAW,MAAM,CAACwW,KAAK02B,GAAGv2E,UAAUspC,SAAS,WAAW,OAAOitC,IAAIA,GAAG9qB,aAAa,SAAS1uD,GAAG,IAAI2Q,EAAE,IAAIwuC,GAAG,OAAOn/C,EAAE6E,MAAM,IAAI20E,GAAG7oE,IAAIA,GAAG,IAAI+oE,GAAG,WAAW,GAAG/4E,KAAKgjD,MAAM,KAAKhjD,KAAKg5E,mBAAmB,EAAEh5E,KAAKi5E,WAAW,IAAIrB,GAAG53E,KAAKk5E,qBAAqB,KAAKl5E,KAAKm5E,aAAa5mD,EAAElX,UAAU,IAAIlL,UAAU5R,OAAO,CAAC,IAAIc,EAAE8Q,UAAU,GAAGH,EAAEG,UAAU,GAAGnQ,KAAKgjD,MAAM,CAAC3jD,EAAE2Q,GAAGhQ,KAAKg5E,mBAAmB,OAAO,GAAG,IAAI7oE,UAAU5R,OAAO,CAAC,IAAIE,EAAE0R,UAAU,GAAG7Q,EAAE6Q,UAAU,GAAG6R,EAAE7R,UAAU,GAAGnQ,KAAKgjD,MAAM,IAAI/7C,MAAM,GAAG6pC,KAAK,MAAM9wC,KAAKgjD,MAAM,GAAGvkD,EAAEuB,KAAKgjD,MAAM,GAAG1jD,EAAEU,KAAKg5E,mBAAmBh3D,IAAI+2D,GAAGz2E,UAAU82E,2BAA2B,WAAW,GAAG,IAAIjpE,UAAU5R,OAAO,CAAC,IAAIc,EAAE,IAAI4H,MAAM,GAAG6pC,KAAK,MAAM,GAAG9wC,KAAKo5E,2BAA2B,EAAE/5E,GAAGW,KAAKm5E,cAAcn5E,KAAKg5E,mBAAmB,OAAO,KAAKh5E,KAAKo5E,2BAA2B,EAAE/5E,QAAQ,GAAG,IAAI8Q,UAAU5R,OAAO,CAAC,IAAIyR,EAAEG,UAAU,GAAG1R,EAAE0R,UAAU,GAAG7Q,EAAE,EAAE0Q,EAAEgS,EAAEq1D,GAAGtgB,YAAY/2D,KAAKgjD,MAAMhzC,IAAI,GAAGgS,EAAEyS,OAAO,EAAE,CAAC,IAAI7F,EAAEiqD,GAAG9qB,aAAa/tD,KAAKgjD,MAAM1jD,IAAI,GAAGU,KAAKo5E,2BAA2BxqD,EAAE5M,EAAEvjB,GAAGuB,KAAKm5E,cAAcn5E,KAAKg5E,mBAAmB,OAAOh5E,KAAKk5E,qBAAqB55E,GAAGb,EAAE,GAAGuB,KAAKk5E,qBAAqBlpE,GAAGvR,EAAE,GAAG,WAAW,GAAG,IAAI0R,UAAU5R,OAAO,GAAG4R,UAAU,aAAalJ,OAAOymC,EAAEv9B,UAAU,GAAGouC,KAAK7Q,EAAEv9B,UAAU,GAAGouC,KAAK,IAAI,IAAIz/C,EAAEqR,UAAU,GAAGzQ,EAAEyQ,UAAU,GAAGs2B,EAAEt2B,UAAU,GAAGpE,EAAE,EAAEA,EAAEjN,EAAE21B,OAAO1oB,IAAI,IAAI,IAAI4G,EAAE7T,EAAE8oB,IAAI7b,GAAG/K,EAAE,EAAEA,EAAEtB,EAAE+0B,OAAOzzB,IAAI,GAAGhB,KAAKo5E,2BAA2BzmE,EAAEjT,EAAEkoB,IAAI5mB,GAAGylC,GAAGzmC,KAAKm5E,cAAcn5E,KAAKg5E,mBAAmB,OAAO,UAAU,GAAG7oE,UAAU,aAAalJ,OAAOkJ,UAAU,aAAaioE,IAAIjoE,UAAU,aAAai1C,GAAG,CAAC,IAAI5e,EAAEr2B,UAAU,GAAGgL,EAAEhL,UAAU,GAAGnD,EAAEmD,UAAU,GAAGyC,EAAE4zB,EAAEmL,gBAAgB,GAAGrK,EAAEiG,WAAWvtC,KAAKi5E,WAAW9N,OAAOv4D,EAAEuI,GAAG,OAAOnb,KAAKm5E,aAAa,EAAEnsE,EAAE,GAAGw5B,EAAEx5B,EAAE,GAAG,IAAIorE,GAAGj9D,EAAEvI,GAAG,OAAOmmE,GAAGz2E,UAAU+2E,8BAA8B,SAASh6E,EAAE2Q,EAAEvR,GAAG,IAAI,IAAIa,EAAE,EAAEA,EAAED,EAAEo1B,OAAOn1B,IAAI,IAAI,IAAI0iB,EAAE3iB,EAAEuoB,IAAItoB,GAAGsvB,EAAE,EAAEA,EAAE5e,EAAEykB,OAAO7F,IAAI,CAAC,IAAI9vB,EAAEkR,EAAE4X,IAAIgH,GAAG,GAAG5uB,KAAKs5E,mBAAmBt3D,EAAEljB,EAAEL,GAAGuB,KAAKm5E,cAAcn5E,KAAKg5E,mBAAmB,OAAO,OAAOD,GAAGz2E,UAAUi3E,qBAAqB,WAAW,IAAIl6E,EAAE,IAAI4H,MAAM,GAAG6pC,KAAK,MAAM9gC,EAAEunE,GAAGI,SAAS33E,KAAKgjD,MAAM,IAAIvkD,EAAE84E,GAAGI,SAAS33E,KAAKgjD,MAAM,IAAI1jD,EAAEq5E,GAAGC,UAAU54E,KAAKgjD,MAAM,IAAIhhC,EAAE22D,GAAGC,UAAU54E,KAAKgjD,MAAM,IAAI,OAAOhjD,KAAKw5E,wBAAwBxpE,EAAEvR,EAAEY,GAAGW,KAAKy5E,kBAAkBp6E,GAAE,GAAIW,KAAKm5E,cAAcn5E,KAAKg5E,mBAAmB,MAAM35E,EAAE,GAAG,KAAKA,EAAE,GAAG,KAAKW,KAAKq5E,8BAA8BrpE,EAAEgS,EAAE3iB,GAAGW,KAAKy5E,kBAAkBp6E,GAAE,GAAIW,KAAKm5E,cAAcn5E,KAAKg5E,mBAAmB,MAAM35E,EAAE,GAAG,KAAKA,EAAE,GAAG,KAAKW,KAAKq5E,8BAA8B56E,EAAEa,EAAED,GAAGW,KAAKy5E,kBAAkBp6E,GAAE,GAAIW,KAAKm5E,cAAcn5E,KAAKg5E,mBAAmB,MAAM35E,EAAE,GAAG,KAAKA,EAAE,GAAG,KAAKW,KAAK05E,yBAAyBp6E,EAAE0iB,EAAE3iB,QAAQW,KAAKy5E,kBAAkBp6E,GAAE,OAAQ05E,GAAGz2E,UAAUq3E,iBAAiB,WAAW,OAAO35E,KAAKs5E,qBAAqBt5E,KAAKk5E,sBAAsBH,GAAGz2E,UAAUm3E,kBAAkB,SAASp6E,EAAE2Q,GAAG,GAAG,OAAO3Q,EAAE,GAAG,OAAO,KAAK2Q,GAAGhQ,KAAKk5E,qBAAqB,GAAG75E,EAAE,GAAGW,KAAKk5E,qBAAqB,GAAG75E,EAAE,KAAKW,KAAKk5E,qBAAqB,GAAG75E,EAAE,GAAGW,KAAKk5E,qBAAqB,GAAG75E,EAAE,KAAK05E,GAAGz2E,UAAUs3E,cAAc,WAAqC,OAA1B55E,KAAKs5E,qBAA2B,CAACt5E,KAAKk5E,qBAAqB,GAAGvnC,gBAAgB3xC,KAAKk5E,qBAAqB,GAAGvnC,kBAAkBonC,GAAGz2E,UAAUg3E,mBAAmB,WAAW,GAAG,IAAInpE,UAAU5R,OAAO,CAAC,GAAG,OAAOyB,KAAKk5E,qBAAqB,OAAO,KAAK,GAAGl5E,KAAKk5E,qBAAqB,IAAIjyE,MAAM,GAAG6pC,KAAK,MAAM9wC,KAAKo5E,6BAA6Bp5E,KAAKm5E,cAAcn5E,KAAKg5E,mBAAmB,OAAO,KAAKh5E,KAAKu5E,4BAA4B,GAAG,IAAIppE,UAAU5R,OAAO,GAAG4R,UAAU,aAAalJ,OAAOkJ,UAAU,aAAaqzC,IAAIrzC,UAAU,aAAa+0C,GAAG,CAAC,IAAI7lD,EAAE8Q,UAAU,GAAGH,EAAEG,UAAU,GAAG1R,EAAE0R,UAAU,GAAG,GAAG9Q,EAAEm9C,sBAAsBn0C,SAAS2H,EAAEwsC,uBAAuBx8C,KAAKm5E,aAAa,OAAO,KAAK,IAAI,IAAI75E,EAAED,EAAEmjD,iBAAiBxgC,EAAEhS,EAAE2hC,gBAAgB/iB,EAAE,EAAEA,EAAEtvB,EAAEf,OAAO,EAAEqwB,IAAI,CAAC,IAAI9vB,EAAEs1B,GAAG4kB,kBAAkBh3B,EAAE1iB,EAAEsvB,GAAGtvB,EAAEsvB,EAAE,IAAI,GAAG9vB,EAAEkB,KAAKm5E,aAAa,CAACn5E,KAAKm5E,aAAar6E,EAAE,IAAIY,EAAE,IAAI+9D,GAAGn+D,EAAEsvB,GAAGtvB,EAAEsvB,EAAE,IAAIsvC,aAAal8C,GAAGvjB,EAAE,GAAG,IAAI25E,GAAG/4E,EAAEuvB,EAAElvB,GAAGjB,EAAE,GAAG,IAAI25E,GAAGpoE,EAAE,EAAEgS,GAAG,GAAGhiB,KAAKm5E,cAAcn5E,KAAKg5E,mBAAmB,OAAO,WAAW,GAAG7oE,UAAU,aAAalJ,OAAOkJ,UAAU,aAAaqzC,IAAIrzC,UAAU,aAAaqzC,GAAG,CAAC,IAAI/c,EAAEt2B,UAAU,GAAGpE,EAAEoE,UAAU,GAAGwC,EAAExC,UAAU,GAAG,GAAGs2B,EAAE+V,sBAAsBn0C,SAAS0D,EAAEywC,uBAAuBx8C,KAAKm5E,aAAa,OAAO,KAAK,IAAI,IAAIn4E,EAAEylC,EAAE+b,iBAAiBhc,EAAEz6B,EAAEy2C,iBAAiBrnC,EAAE,EAAEA,EAAEna,EAAEzC,OAAO,EAAE4c,IAAI,IAAI,IAAInO,EAAE,EAAEA,EAAEw5B,EAAEjoC,OAAO,EAAEyO,IAAI,CAAC,IAAI4F,EAAEwhB,GAAG6lB,iBAAiBj5C,EAAEma,GAAGna,EAAEma,EAAE,GAAGqrB,EAAEx5B,GAAGw5B,EAAEx5B,EAAE,IAAI,GAAG4F,EAAE5S,KAAKm5E,aAAa,CAACn5E,KAAKm5E,aAAavmE,EAAE,IAAIwB,EAAE,IAAIqpD,GAAGz8D,EAAEma,GAAGna,EAAEma,EAAE,IAAIvD,EAAE,IAAI6lD,GAAGj3B,EAAEx5B,GAAGw5B,EAAEx5B,EAAE,IAAItO,EAAE0V,EAAE6pD,cAAcrmD,GAAGjF,EAAE,GAAG,IAAIylE,GAAG3xC,EAAEtrB,EAAEzc,EAAE,IAAIiU,EAAE,GAAG,IAAIylE,GAAGrsE,EAAEiB,EAAEtO,EAAE,IAAI,GAAGsB,KAAKm5E,cAAcn5E,KAAKg5E,mBAAmB,OAAO,QAAQD,GAAGz2E,UAAUo3E,yBAAyB,SAASr6E,EAAE2Q,EAAEvR,GAAG,IAAI,IAAIa,EAAE,EAAEA,EAAED,EAAEo1B,OAAOn1B,IAAI,IAAI,IAAI0iB,EAAE3iB,EAAEuoB,IAAItoB,GAAGsvB,EAAE,EAAEA,EAAE5e,EAAEykB,OAAO7F,IAAI,CAAC,IAAI9vB,EAAEkR,EAAE4X,IAAIgH,GAAGlvB,EAAEsiB,EAAE2vB,gBAAgBtpC,SAASvJ,EAAE6yC,iBAAiB,GAAGjyC,EAAEM,KAAKm5E,eAAen5E,KAAKm5E,aAAaz5E,EAAEjB,EAAE,GAAG,IAAI25E,GAAGp2D,EAAE,EAAEA,EAAE2vB,iBAAiBlzC,EAAE,GAAG,IAAI25E,GAAGt5E,EAAE,EAAEA,EAAE6yC,kBAAkB3xC,KAAKm5E,cAAcn5E,KAAKg5E,mBAAmB,OAAO,OAAOD,GAAGz2E,UAAU+F,SAAS,WAAW,GAAG,OAAOrI,KAAKgjD,MAAM,IAAI,OAAOhjD,KAAKgjD,MAAM,GAAG,MAAM,IAAItkD,EAAE,qCAAqC,OAAOsB,KAAKgjD,MAAM,GAAGhuB,WAAWh1B,KAAKgjD,MAAM,GAAGhuB,UAAU,GAAGh1B,KAAKs5E,qBAAqBt5E,KAAKm5E,eAAeJ,GAAGz2E,UAAUk3E,wBAAwB,SAASn6E,EAAE2Q,EAAEvR,GAAG,IAAI,IAAIa,EAAE,EAAEA,EAAED,EAAEo1B,OAAOn1B,IAAI,IAAI,IAAI0iB,EAAE3iB,EAAEuoB,IAAItoB,GAAGsvB,EAAE,EAAEA,EAAE5e,EAAEykB,OAAO7F,IAAI,CAAC,IAAI9vB,EAAEkR,EAAE4X,IAAIgH,GAAG,GAAG5uB,KAAKs5E,mBAAmBt3D,EAAEljB,EAAEL,GAAGuB,KAAKm5E,cAAcn5E,KAAKg5E,mBAAmB,OAAO,OAAOD,GAAGz2E,UAAUqpC,YAAY,WAAW,MAAM,IAAIotC,GAAGz2E,UAAUspC,SAAS,WAAW,OAAOmtC,IAAIA,GAAG1wE,SAAS,SAAShJ,EAAE2Q,GAAG,OAAO,IAAI+oE,GAAG15E,EAAE2Q,GAAG3H,YAAY0wE,GAAGc,iBAAiB,SAASx6E,EAAE2Q,EAAEvR,GAAG,OAAO,IAAIs6E,GAAG15E,EAAE2Q,EAAEvR,GAAG4J,YAAY5J,GAAGs6E,GAAGa,cAAc,SAASv6E,EAAE2Q,GAAG,OAAO,IAAI+oE,GAAG15E,EAAE2Q,GAAG4pE,iBAAiB,IAAIE,GAAG,WAAW95E,KAAKmiC,IAAI,CAAC,IAAIwF,EAAE,IAAIA,GAAG3nC,KAAK44D,UAAUrmC,EAAE4a,IAAIntC,KAAKm2E,SAAQ,GAAI2D,GAAGx3E,UAAUkgD,eAAe,WAAW,OAAOxiD,KAAKmiC,KAAK23C,GAAGx3E,UAAUqvC,cAAc,SAAStyC,GAAG,OAAOW,KAAKmiC,IAAI9iC,IAAIy6E,GAAGx3E,UAAU8zE,WAAW,WAAW,GAAG,IAAIjmE,UAAU5R,OAAO,CAAC,IAAIc,EAAE8Q,UAAU,GAAGnQ,KAAKo2E,WAAW/2E,EAAE8iC,IAAI,GAAG9iC,EAAE8iC,IAAI,SAAS,GAAG,IAAIhyB,UAAU5R,OAAO,CAAC,IAAIyR,EAAEG,UAAU,GAAG1R,EAAE0R,UAAU,GAAG,GAAGnQ,KAAKm2E,QAAQ,OAAOn2E,KAAKq2E,WAAWrmE,EAAEvR,GAAG,KAAK,IAAIa,EAAE0Q,EAAE3H,SAAS5J,GAAGa,EAAEU,KAAK44D,WAAW54D,KAAKq2E,WAAWrmE,EAAEvR,EAAEa,KAAKw6E,GAAGx3E,UAAU+zE,WAAW,WAAW,GAAG,IAAIlmE,UAAU5R,OAAOyB,KAAKm2E,SAAQ,OAAQ,GAAG,IAAIhmE,UAAU5R,OAAO,CAAC,IAAIc,EAAE8Q,UAAU,GAAGH,EAAEG,UAAU,GAAGnQ,KAAKmiC,IAAI,GAAG+K,cAAc7tC,GAAGW,KAAKmiC,IAAI,GAAG+K,cAAcl9B,GAAGhQ,KAAK44D,UAAUv5D,EAAEgJ,SAAS2H,GAAGhQ,KAAKm2E,SAAQ,OAAQ,GAAG,IAAIhmE,UAAU5R,OAAO,CAAC,IAAIE,EAAE0R,UAAU,GAAG7Q,EAAE6Q,UAAU,GAAG6R,EAAE7R,UAAU,GAAGnQ,KAAKmiC,IAAI,GAAG+K,cAAczuC,GAAGuB,KAAKmiC,IAAI,GAAG+K,cAAc5tC,GAAGU,KAAK44D,UAAU52C,EAAEhiB,KAAKm2E,SAAQ,IAAK2D,GAAGx3E,UAAUkV,SAAS,WAAW,OAAOg1B,EAAEqJ,aAAa71C,KAAKmiC,IAAI,GAAGniC,KAAKmiC,IAAI,KAAK23C,GAAGx3E,UAAU42D,YAAY,WAAW,OAAOl5D,KAAK44D,WAAWkhB,GAAGx3E,UAAUg0E,WAAW,WAAW,GAAG,IAAInmE,UAAU5R,OAAO,CAAC,IAAIc,EAAE8Q,UAAU,GAAGnQ,KAAKs2E,WAAWj3E,EAAE8iC,IAAI,GAAG9iC,EAAE8iC,IAAI,SAAS,GAAG,IAAIhyB,UAAU5R,OAAO,CAAC,IAAIyR,EAAEG,UAAU,GAAG1R,EAAE0R,UAAU,GAAG,GAAGnQ,KAAKm2E,QAAQ,OAAOn2E,KAAKq2E,WAAWrmE,EAAEvR,GAAG,KAAK,IAAIa,EAAE0Q,EAAE3H,SAAS5J,GAAGa,EAAEU,KAAK44D,WAAW54D,KAAKq2E,WAAWrmE,EAAEvR,EAAEa,KAAKw6E,GAAGx3E,UAAUqpC,YAAY,WAAW,MAAM,IAAImuC,GAAGx3E,UAAUspC,SAAS,WAAW,OAAOkuC,IAAI,IAAIC,GAAG,aAAaA,GAAGz3E,UAAUqpC,YAAY,WAAW,MAAM,IAAIouC,GAAGz3E,UAAUspC,SAAS,WAAW,OAAOmuC,IAAIA,GAAGvD,gBAAgB,WAAW,GAAGrmE,UAAU,aAAa2pE,IAAI3pE,UAAU,aAAaqzC,IAAIrzC,UAAU,aAAaw3B,EAAE,IAAI,IAAItoC,EAAE8Q,UAAU,GAAGH,EAAEG,UAAU,GAAG1R,EAAE0R,UAAU,GAAG7Q,EAAE,IAAIm+D,GAAGz7C,EAAE3iB,EAAEmjD,iBAAiB5zB,EAAE,EAAEA,EAAE5M,EAAEzjB,OAAO,EAAEqwB,IAAI,CAACtvB,EAAE++D,eAAer8C,EAAE4M,GAAG5M,EAAE4M,EAAE,IAAI,IAAI9vB,EAAEQ,EAAE4+D,aAAaluD,GAAGvR,EAAE23E,WAAWt3E,EAAEkR,QAAQ,GAAGG,UAAU,aAAa2pE,IAAI3pE,UAAU,aAAai1C,IAAIj1C,UAAU,aAAaw3B,EAAE,CAAC,IAAIjoC,EAAEyQ,UAAU,GAAGs2B,EAAEt2B,UAAU,GAAGpE,EAAEoE,UAAU,GAAG4pE,GAAGvD,gBAAgB92E,EAAE4lD,kBAAkB7e,EAAE16B,GAAG,IAAI,IAAI4G,EAAE,EAAEA,EAAEjT,EAAE2lD,qBAAqB1yC,IAAIonE,GAAGvD,gBAAgB92E,EAAE6lD,iBAAiB5yC,GAAG8zB,EAAE16B,QAAQ,GAAGoE,UAAU,aAAa2pE,IAAI3pE,UAAU,aAAasqC,IAAItqC,UAAU,aAAaw3B,EAAE,CAAC,IAAI3mC,EAAEmP,UAAU,GAAGq2B,EAAEr2B,UAAU,GAAGgL,EAAEhL,UAAU,GAAG,GAAGnP,aAAawiD,GAAGu2B,GAAGvD,gBAAgBx1E,EAAEwlC,EAAErrB,QAAQ,GAAGna,aAAaokD,GAAG20B,GAAGvD,gBAAgBx1E,EAAEwlC,EAAErrB,QAAQ,GAAGna,aAAauhD,GAAG,IAAI,IAAIv1C,EAAEhM,EAAE4R,EAAE,EAAEA,EAAE5F,EAAEmvC,mBAAmBvpC,IAAI,CAAC,IAAIwB,EAAEpH,EAAE0uC,aAAa9oC,GAAGmnE,GAAGvD,gBAAgBpiE,EAAEoyB,EAAErrB,QAAQA,EAAEi7D,WAAWp1E,EAAE2wC,gBAAgBnL,QAAQ,GAAGr2B,UAAU,aAAa2pE,IAAI3pE,UAAU,aAAastD,IAAIttD,UAAU,aAAaw3B,EAAE,CAAC,IAAmBjpC,EAAEyR,UAAU,GAAGoiB,EAAEpiB,UAAU,GAAG43B,EAA3C53B,UAAU,GAAqC+tD,aAAax/D,GAAG6zB,EAAE6jD,WAAWruC,EAAErpC,KAAK,IAAIs7E,GAAG,WAAWh6E,KAAKi6E,IAAI,KAAKj6E,KAAKk6E,IAAI,KAAKl6E,KAAKm6E,QAAQ,IAAIL,GAAG95E,KAAKo6E,aAAa,EAAE,IAAI/6E,EAAE8Q,UAAU,GAAGH,EAAEG,UAAU,GAAGnQ,KAAKi6E,IAAI56E,EAAEW,KAAKk6E,IAAIlqE,GAAGqqE,GAAG,CAACzD,uBAAuB,CAACvmE,cAAa,GAAIiqE,qCAAqC,CAACjqE,cAAa,IAAK2pE,GAAG13E,UAAUkgD,eAAe,WAAW,OAAOxiD,KAAKm6E,QAAQ33B,kBAAkBw3B,GAAG13E,UAAUi4E,mBAAmB,SAASl7E,GAAG,GAAGA,EAAE,GAAGA,GAAG,EAAE,MAAM,IAAIX,EAAE,wCAAwCsB,KAAKo6E,aAAa/6E,GAAG26E,GAAG13E,UAAUk4E,QAAQ,SAASn7E,EAAE2Q,GAAGhQ,KAAKy6E,wBAAwBp7E,EAAE2Q,EAAEhQ,KAAKm6E,SAASn6E,KAAKy6E,wBAAwBzqE,EAAE3Q,EAAEW,KAAKm6E,UAAUH,GAAG13E,UAAU+F,SAAS,WAAW,OAAOrI,KAAKw6E,QAAQx6E,KAAKi6E,IAAIj6E,KAAKk6E,KAAKl6E,KAAKm6E,QAAQjhB,eAAe8gB,GAAG13E,UAAUm4E,wBAAwB,SAASp7E,EAAE2Q,EAAEvR,GAAG,IAAIa,EAAE,IAAIo7E,GAAG1qE,GAAG,GAAG3Q,EAAE6E,MAAM5E,GAAGb,EAAE63E,WAAWh3E,EAAEy3E,uBAAuB/2E,KAAKo6E,aAAa,EAAE,CAAC,IAAIp4D,EAAE,IAAI24D,GAAG3qE,EAAEhQ,KAAKo6E,cAAc/6E,EAAE6E,MAAM8d,GAAGvjB,EAAE63E,WAAWt0D,EAAE+0D,yBAAyBiD,GAAG13E,UAAUs4E,iBAAiB,WAAW,OAAO56E,KAAKy6E,wBAAwBz6E,KAAKi6E,IAAIj6E,KAAKk6E,IAAIl6E,KAAKm6E,SAASn6E,KAAKm6E,QAAQjhB,eAAe8gB,GAAG13E,UAAUqpC,YAAY,WAAW,MAAM,IAAIquC,GAAG13E,UAAUspC,SAAS,WAAW,OAAOouC,IAAIA,GAAG3xE,SAAS,WAAW,GAAG,IAAI8H,UAAU5R,OAA0C,OAAO,IAAIy7E,GAAvC7pE,UAAU,GAAKA,UAAU,IAAsB9H,WAAW,GAAG,IAAI8H,UAAU5R,OAAO,CAAC,IAAkCyjB,EAAE7R,UAAU,GAAGye,EAAE,IAAIorD,GAAjD7pE,UAAU,GAAKA,UAAU,IAAgC,OAAOye,EAAE2rD,mBAAmBv4D,GAAG4M,EAAEvmB,aAAagyE,GAAGzD,uBAAuBhvD,IAAI,WAAW,OAAO8yD,IAAIL,GAAGC,qCAAqC1yD,IAAI,WAAW,OAAO+yD,IAAIjyE,OAAOyP,iBAAiB6hE,GAAGK,IAAI,IAAIK,GAAG,WAAW16E,KAAK02E,WAAW,IAAIoD,GAAG95E,KAAKo3E,WAAW,IAAI0C,GAAG95E,KAAK66E,eAAe,IAAId,GAAG/5E,KAAKgjD,MAAM,KAAK,IAAI3jD,EAAE8Q,UAAU,GAAGnQ,KAAKgjD,MAAM3jD,GAAGq7E,GAAGp4E,UAAUk4C,OAAO,SAASn7C,GAAGW,KAAKo3E,WAAWf,aAAa0D,GAAGvD,gBAAgBx2E,KAAKgjD,MAAM3jD,EAAEW,KAAKo3E,YAAYp3E,KAAK02E,WAAWJ,WAAWt2E,KAAKo3E,aAAasD,GAAGp4E,UAAUy0E,oBAAoB,WAAW,OAAO/2E,KAAK02E,YAAYgE,GAAGp4E,UAAUqpC,YAAY,WAAW,MAAM,CAAC0R,KAAKq9B,GAAGp4E,UAAUspC,SAAS,WAAW,OAAO8uC,IAAI,IAAIC,GAAG,WAAW36E,KAAK02E,WAAW,IAAIoD,GAAG95E,KAAKo3E,WAAW,IAAI0C,GAAG95E,KAAKgjD,MAAM,KAAKhjD,KAAK86E,YAAY,EAAE,IAAIz7E,EAAE8Q,UAAU,GAAGH,EAAEG,UAAU,GAAGnQ,KAAKgjD,MAAM3jD,EAAEW,KAAK86E,YAAYl8E,KAAK8sC,MAAM9sC,KAAK4L,MAAM,EAAEwF,KAAK2qE,GAAGr4E,UAAUk4C,OAAO,SAASn7C,EAAE2Q,GAAG,GAAG,IAAIA,EAAE,OAAO,KAAK,IAAI,IAAIvR,EAAEY,EAAEsyC,cAAc3hC,EAAE,GAAG1Q,EAAED,EAAEsyC,cAAc3hC,GAAGgS,GAAG1iB,EAAE6U,EAAE1V,EAAE0V,GAAGnU,KAAK86E,YAAYlsD,GAAGtvB,EAAE8U,EAAE3V,EAAE2V,GAAGpU,KAAK86E,YAAYh8E,EAAE,EAAEA,EAAEkB,KAAK86E,YAAYh8E,IAAI,CAAC,IAAIY,EAAEjB,EAAE0V,EAAErV,EAAEkjB,EAAEykB,EAAEhoC,EAAE2V,EAAEtV,EAAE8vB,EAAE7iB,EAAE,IAAI47B,EAAEjoC,EAAE+mC,GAAGzmC,KAAKo3E,WAAWf,aAAa0D,GAAGvD,gBAAgBx2E,KAAKgjD,MAAMj3C,EAAE/L,KAAKo3E,YAAYp3E,KAAK02E,WAAWJ,WAAWt2E,KAAKo3E,cAAcuD,GAAGr4E,UAAU+/C,OAAO,WAAW,OAAM,GAAIs4B,GAAGr4E,UAAUggD,kBAAkB,WAAW,OAAM,GAAIq4B,GAAGr4E,UAAUy0E,oBAAoB,WAAW,OAAO/2E,KAAK02E,YAAYiE,GAAGr4E,UAAUqpC,YAAY,WAAW,MAAM,CAACyW,KAAKu4B,GAAGr4E,UAAUspC,SAAS,WAAW,OAAO+uC,IAAI,IAAII,GAAG,SAAS17E,EAAE2Q,EAAEvR,GAAGuB,KAAKg7E,kBAAkB,KAAKh7E,KAAKi7E,kBAAkB,KAAKj7E,KAAKk7E,kBAAkB,KAAKl7E,KAAKm7E,kBAAkB,KAAKn7E,KAAKo7E,UAAS,EAAGp7E,KAAKq7E,QAAQ,KAAKr7E,KAAKs7E,eAAe,KAAKt7E,KAAKu7E,gBAAgB,KAAKv7E,KAAKw7E,OAAOn8E,GAAG,KAAKW,KAAKy7E,aAAazrE,GAAG,KAAKhQ,KAAKo2C,QAAQ33C,GAAG,MAAMi9E,GAAG,CAACC,QAAQ,CAACtrE,cAAa,GAAIurE,uBAAuB,CAACvrE,cAAa,IAAK0qE,GAAGz4E,UAAUu5E,qBAAqB,SAASx8E,EAAE2Q,EAAEvR,GAAG,IAAIa,EAAE,IAAI06E,GAAGhqE,EAAE3Q,GAAG,GAAGC,EAAEi7E,mBAAmB,KAAKv6E,KAAKm7E,kBAAkB77E,EAAEs7E,mBAAmB56E,KAAKm7E,kBAAkB18E,EAAE,CAACuB,KAAKo7E,UAAS,EAAG,IAAIp5D,EAAE1iB,EAAEkjD,iBAAiBxiD,KAAKs7E,eAAet5D,EAAE,GAAGhiB,KAAKu7E,gBAAgBl8E,EAAEo8C,aAAanG,iBAAiBtzB,GAAGhiB,KAAKq7E,QAAQ,yDAAyDr7E,KAAKm7E,kBAAkB,OAAO3uC,EAAEqJ,aAAa7zB,EAAE,GAAGA,EAAE,IAAI,MAAM+4D,GAAGz4E,UAAUmjD,QAAQ,WAAW,IAAIpmD,EAAET,KAAKoiB,IAAIhhB,KAAKy7E,cAAczrE,EAAE+qE,GAAGa,uBAAuBv8E,EAAE,OAAOW,KAAKg7E,kBAAkB37E,EAAE2Q,EAAEhQ,KAAKi7E,kBAAkB57E,EAAE2Q,KAAKhQ,KAAKw7E,OAAOxmD,YAAYh1B,KAAKo2C,QAAQphB,aAAah1B,KAAKy7E,aAAa,EAAEz7E,KAAK87E,qBAAqB97E,KAAK+7E,qBAAqBhB,GAAGY,SAASpvC,EAAE1Z,IAAIgmB,QAAQ,aAAa74C,KAAKk7E,kBAAkB,WAAW,EAAEl7E,KAAKk7E,kBAAkBl7E,KAAKy7E,cAAc,eAAez7E,KAAKm7E,kBAAkB,WAAWn7E,KAAKm7E,kBAAkBn7E,KAAKy7E,aAAa,IAAIz7E,KAAKo7E,WAAWL,GAAGz4E,UAAUy5E,mBAAmB,WAAW,KAAK/7E,KAAKw7E,kBAAkBp2B,IAAIplD,KAAKw7E,kBAAkB31B,IAAI7lD,KAAKw7E,kBAAkBj5B,IAAI,OAAO,KAAK,IAAIljD,EAAEW,KAAKg8E,gBAAgBh8E,KAAKw7E,QAAQ,GAAGx7E,KAAKi8E,qBAAqB58E,EAAEW,KAAKo2C,QAAQp2C,KAAKg7E,oBAAoBh7E,KAAKo7E,SAAS,OAAO,KAAKp7E,KAAK67E,qBAAqBx8E,EAAEW,KAAKo2C,QAAQp2C,KAAKi7E,oBAAoBF,GAAGz4E,UAAU45E,kBAAkB,WAAW,OAAOl8E,KAAKu7E,iBAAiBR,GAAGz4E,UAAU25E,qBAAqB,SAAS58E,EAAE2Q,EAAEvR,GAAG,IAAIa,EAAE,IAAIy5E,GAAG15E,EAAE2Q,EAAEvR,GAAG,GAAGuB,KAAKk7E,kBAAkB57E,EAAE+I,WAAWrI,KAAKk7E,kBAAkBz8E,EAAE,CAACuB,KAAKo7E,UAAS,EAAG,IAAIp5D,EAAE1iB,EAAEs6E,gBAAgB55E,KAAKs7E,eAAeh8E,EAAEs6E,gBAAgB,GAAG55E,KAAKu7E,gBAAgBl8E,EAAEo8C,aAAanG,iBAAiBtzB,GAAGhiB,KAAKq7E,QAAQ,yDAAyDr7E,KAAKk7E,kBAAkB,OAAO1uC,EAAEqJ,aAAa7zB,EAAE,GAAGA,EAAE,IAAI,OAAO+4D,GAAGz4E,UAAUw5E,mBAAmB,WAAW,IAAIz8E,EAAEW,KAAKo2C,QAAQwM,cAAc,GAAG5iD,KAAKi8E,qBAAqBj8E,KAAKw7E,OAAOn8E,EAAEW,KAAKg7E,oBAAoBh7E,KAAKo7E,SAAS,OAAO,KAAKp7E,KAAK67E,qBAAqB77E,KAAKw7E,OAAOn8E,EAAEW,KAAKi7E,oBAAoBF,GAAGz4E,UAAU65E,iBAAiB,WAAW,OAAOn8E,KAAKs7E,gBAAgBP,GAAGz4E,UAAU05E,gBAAgB,SAAS38E,GAAG,IAAI,IAAI2Q,EAAE,IAAIwuC,GAAG//C,EAAE,IAAI84E,GAAGvnE,GAAG1Q,EAAE+3E,GAAGtgB,YAAY13D,GAAGkpB,WAAWjpB,EAAE09C,WAAY19C,EAAE8S,OAAOlO,MAAMzF,GAAG,OAAOY,EAAEo8C,aAAaoN,cAAc74C,IAAI+qE,GAAGz4E,UAAU85E,gBAAgB,WAAW,OAAOp8E,KAAKq7E,SAASN,GAAGz4E,UAAUqpC,YAAY,WAAW,MAAM,IAAIovC,GAAGz4E,UAAUspC,SAAS,WAAW,OAAOmvC,IAAIW,GAAGC,QAAQ/zD,IAAI,WAAW,OAAM,GAAI8zD,GAAGE,uBAAuBh0D,IAAI,WAAW,MAAM,MAAMlf,OAAOyP,iBAAiB4iE,GAAGW,IAAI,IAAIW,GAAG,SAASh9E,EAAE2Q,EAAEvR,GAAGuB,KAAKo7E,UAAS,EAAGp7E,KAAKs8E,UAAU,KAAKt8E,KAAKs7E,eAAe,KAAKt7E,KAAKu7E,gBAAgB,KAAKv7E,KAAKw7E,OAAOn8E,GAAG,KAAKW,KAAK44D,UAAU5oD,GAAG,KAAKhQ,KAAKo2C,QAAQ33C,GAAG,MAAM89E,GAAG,CAACZ,QAAQ,CAACtrE,cAAa,GAAImsE,kBAAkB,CAACnsE,cAAa,IAAKgsE,GAAG/5E,UAAUmjD,QAAQ,WAAW,OAAOzlD,KAAKy8E,iBAAiBz8E,KAAKo7E,UAAUp7E,KAAK08E,qBAAqB18E,KAAKo7E,UAAUp7E,KAAK28E,gBAAgB38E,KAAKo7E,UAAUp7E,KAAK48E,YAAY58E,KAAKo7E,UAAUp7E,KAAK68E,gBAAgB78E,KAAKo7E,UAAUp7E,KAAKo7E,UAAUp7E,KAAKo7E,UAAUp7E,KAAKo7E,UAAUp7E,KAAKo7E,UAAUiB,GAAG/5E,UAAUq6E,cAAc,WAAW,GAAG38E,KAAK44D,UAAU,EAAE,OAAO,KAAK,IAAIv5D,EAAEW,KAAK44D,UAAUyjB,GAAGG,kBAAkB,IAAIn9E,IAAIA,EAAE,MAAM,IAAI2Q,EAAE,IAAIzQ,EAAES,KAAKw7E,OAAOh/B,uBAAuBxsC,EAAEsjC,SAAStzC,KAAK44D,WAAW,IAAIn6D,EAAE,IAAIc,EAAES,KAAKo2C,QAAQoG,uBAAuB/9C,EAAE60C,SAASj0C,GAAGZ,EAAEqD,SAASkO,KAAKhQ,KAAKo7E,UAAS,EAAGp7E,KAAKs8E,UAAU,+BAA+Bt8E,KAAKu7E,gBAAgBv7E,KAAKw7E,OAAO//B,aAAac,WAAW99C,IAAIuB,KAAK88E,OAAO,aAAaT,GAAG/5E,UAAUu6E,cAAc,WAAW,IAAIx9E,EAAE,IAAI07E,GAAG/6E,KAAKw7E,OAAOx7E,KAAK44D,UAAU54D,KAAKo2C,SAAS/2C,EAAEomD,YAAYzlD,KAAKo7E,UAAS,EAAGp7E,KAAKs8E,UAAUj9E,EAAE+8E,kBAAkBp8E,KAAKs7E,eAAej8E,EAAE88E,mBAAmBn8E,KAAKu7E,gBAAgBl8E,EAAE68E,qBAAqBl8E,KAAK88E,OAAO,aAAaT,GAAG/5E,UAAUs6E,UAAU,WAAW,IAAIv9E,EAAEW,KAAKw7E,OAAOhpC,UAAUxiC,EAAEhQ,KAAKo2C,QAAQ5D,UAAUxyC,KAAK44D,UAAU,GAAGv5D,EAAE2Q,IAAIhQ,KAAKo7E,UAAS,EAAGp7E,KAAKs8E,UAAU,gDAAgDt8E,KAAKu7E,gBAAgBv7E,KAAKo2C,SAASp2C,KAAK44D,UAAU,GAAGv5D,EAAE2Q,IAAIhQ,KAAKo7E,UAAS,EAAGp7E,KAAKs8E,UAAU,+CAA+Ct8E,KAAKu7E,gBAAgBv7E,KAAKo2C,SAASp2C,KAAK88E,OAAO,SAAST,GAAG/5E,UAAUm6E,eAAe,WAAWz8E,KAAKo2C,mBAAmBgP,IAAIplD,KAAKo2C,mBAAmByP,KAAK7lD,KAAKo7E,UAAS,GAAIp7E,KAAKs8E,UAAU,0BAA0Bt8E,KAAKu7E,gBAAgBv7E,KAAKo2C,QAAQp2C,KAAK88E,OAAO,cAAcT,GAAG/5E,UAAU45E,kBAAkB,WAAW,OAAOl8E,KAAKu7E,iBAAiBc,GAAG/5E,UAAU65E,iBAAiB,WAAW,OAAOn8E,KAAKs7E,gBAAgBe,GAAG/5E,UAAUo6E,mBAAmB,WAAW,OAAO18E,KAAKw7E,OAAO3pC,gBAAgB,GAAO7xC,KAAK44D,UAAU,EAApB,MAA4B54D,KAAKo2C,QAAQphB,YAAYh1B,KAAKo7E,UAAS,EAAGp7E,KAAKs8E,UAAU,sBAAsBt8E,KAAKu7E,gBAAgBv7E,KAAKo2C,cAAcp2C,KAAK88E,OAAO,mBAAmBT,GAAG/5E,UAAUw6E,OAAO,SAASz9E,GAAG,IAAIg9E,GAAGV,QAAQ,OAAO,KAAKpvC,EAAE1Z,IAAIgmB,QAAQ,SAASx5C,EAAE,MAAMW,KAAKo7E,SAAS,SAAS,YAAYiB,GAAG/5E,UAAU85E,gBAAgB,WAAW,OAAOp8E,KAAKs8E,WAAWD,GAAG/5E,UAAUqpC,YAAY,WAAW,MAAM,IAAI0wC,GAAG/5E,UAAUspC,SAAS,WAAW,OAAOywC,IAAIA,GAAGU,WAAW,SAAS19E,EAAE2Q,EAAEvR,GAAG,IAAIa,EAAE,IAAI+8E,GAAGh9E,EAAE2Q,EAAEvR,GAAG,OAAOa,EAAEmmD,UAAU,KAAKnmD,EAAE88E,mBAAmBC,GAAG52B,QAAQ,SAASpmD,EAAE2Q,EAAEvR,GAAG,QAAQ,IAAI49E,GAAGh9E,EAAE2Q,EAAEvR,GAAGgnD,WAAW82B,GAAGZ,QAAQ/zD,IAAI,WAAW,OAAM,GAAI20D,GAAGC,kBAAkB50D,IAAI,WAAW,MAAM,MAAMlf,OAAOyP,iBAAiBkkE,GAAGE,IAAI,IAAIS,GAAG,WAAWh9E,KAAKgvD,KAAK,KAAKhvD,KAAKm9D,MAAM,KAAK,IAAI99D,EAAE8Q,UAAU,GAAGH,EAAEG,UAAU,GAAGnQ,KAAKgvD,KAAK3vD,EAAEW,KAAKm9D,MAAMntD,GAAGgtE,GAAG16E,UAAUkgD,eAAe,WAAW,OAAOxiD,KAAKgvD,MAAMguB,GAAG16E,UAAUmyB,KAAK,WAAW,OAAOz0B,KAAKgvD,KAAKzwD,QAAQy+E,GAAG16E,UAAUqvC,cAAc,SAAStyC,GAAG,OAAOW,KAAKgvD,KAAK3vD,IAAI29E,GAAG16E,UAAUwgD,SAAS,WAAW,OAAO9iD,KAAKgvD,KAAK,GAAGtwC,OAAO1e,KAAKgvD,KAAKhvD,KAAKgvD,KAAKzwD,OAAO,KAAKy+E,GAAG16E,UAAUq6D,iBAAiB,SAASt9D,GAAG,OAAOA,IAAIW,KAAKgvD,KAAKzwD,OAAO,GAAG,EAAEs+D,GAAGC,OAAO98D,KAAK2xC,cAActyC,GAAGW,KAAK2xC,cAActyC,EAAE,KAAK29E,GAAG16E,UAAU06D,QAAQ,SAAS39D,GAAGW,KAAKm9D,MAAM99D,GAAG29E,GAAG16E,UAAUo6D,QAAQ,WAAW,OAAO18D,KAAKm9D,OAAO6f,GAAG16E,UAAUkV,SAAS,WAAW,OAAOg1B,EAAEqJ,aAAa,IAAIkR,GAAG/mD,KAAKgvD,QAAQguB,GAAG16E,UAAUqpC,YAAY,WAAW,MAAM,CAACoxB,KAAKigB,GAAG16E,UAAUspC,SAAS,WAAW,OAAOoxC,IAAI,IAAIC,GAAG,WAAWj9E,KAAKk9E,uBAAsB,EAAGl9E,KAAKm9E,yBAAwB,EAAGn9E,KAAKomE,IAAI,KAAKpmE,KAAKo9E,sBAAsB,KAAKp9E,KAAKq9E,aAAa,KAAKr9E,KAAKs9E,eAAe,IAAI9+B,GAAGx+C,KAAKu9E,mBAAmB,EAAEv9E,KAAKw9E,oBAAmB,EAAG,IAAIn+E,EAAE8Q,UAAU,GAAGnQ,KAAKomE,IAAI/mE,EAAEW,KAAKo9E,sBAAsB,MAAMH,GAAG36E,UAAUm7E,wBAAwB,WAAW,OAAOz9E,KAAKo9E,uBAAuBH,GAAG36E,UAAUo7E,wBAAwB,SAASr+E,GAAGW,KAAKm9E,wBAAwB99E,GAAG49E,GAAG36E,UAAUq7E,wBAAwB,WAAW,OAAO39E,KAAKq9E,cAAcJ,GAAG36E,UAAUoY,MAAM,WAAW,OAAO1a,KAAKu9E,oBAAoBN,GAAG36E,UAAUs7E,iBAAiB,WAAW,OAAO59E,KAAKs9E,gBAAgBL,GAAG36E,UAAUu7E,wBAAwB,SAASx+E,GAAGW,KAAKk9E,sBAAsB79E,GAAG49E,GAAG36E,UAAUw7E,qBAAqB,SAASz+E,GAAGW,KAAKw9E,mBAAmBn+E,GAAG49E,GAAG36E,UAAU4+D,qBAAqB,SAAS7hE,EAAE2Q,EAAEvR,EAAEa,GAAG,IAAIU,KAAKk9E,uBAAuBl9E,KAAK43C,kBAAkB,OAAO,KAAK,GAAGv4C,IAAIZ,GAAGuR,IAAI1Q,EAAE,OAAO,KAAK,GAAGU,KAAKm9E,0BAA8Bn9E,KAAK+9E,aAAa1+E,EAAE2Q,KAAIhQ,KAAK+9E,aAAat/E,EAAEa,GAAI,OAAO,KAAK,IAAI0iB,EAAE3iB,EAAEmjD,iBAAiBxyC,GAAG4e,EAAEvvB,EAAEmjD,iBAAiBxyC,EAAE,GAAGlR,EAAEL,EAAE+jD,iBAAiBljD,GAAGI,EAAEjB,EAAE+jD,iBAAiBljD,EAAE,GAAGU,KAAKomE,IAAI7uB,oBAAoBv1B,EAAE4M,EAAE9vB,EAAEY,GAAGM,KAAKomE,IAAIxuB,mBAAmB53C,KAAKomE,IAAItuB,2BAA2B93C,KAAKq9E,aAAa,IAAIp2E,MAAM,GAAG6pC,KAAK,MAAM9wC,KAAKq9E,aAAa,GAAGr7D,EAAEhiB,KAAKq9E,aAAa,GAAGzuD,EAAE5uB,KAAKq9E,aAAa,GAAGv+E,EAAEkB,KAAKq9E,aAAa,GAAG39E,EAAEM,KAAKo9E,sBAAsBp9E,KAAKomE,IAAItiC,gBAAgB,GAAG9jC,KAAKw9E,oBAAoBx9E,KAAKs9E,eAAelqD,IAAIpzB,KAAKo9E,uBAAuBp9E,KAAKu9E,uBAAuBN,GAAG36E,UAAUy7E,aAAa,SAAS1+E,EAAE2Q,GAAG,OAAO,IAAIA,GAAGA,GAAG3Q,EAAEo1B,OAAO,GAAGwoD,GAAG36E,UAAUs1C,gBAAgB,WAAW,OAAO,OAAO53C,KAAKo9E,uBAAuBH,GAAG36E,UAAU+/C,OAAO,WAAW,OAAOriD,KAAKk9E,uBAAuB,OAAOl9E,KAAKo9E,uBAAuBH,GAAG36E,UAAUqpC,YAAY,WAAW,MAAM,CAACiiC,KAAKqP,GAAG36E,UAAUspC,SAAS,WAAW,OAAOqxC,IAAIA,GAAGe,6BAA6B,SAAS3+E,GAAG,IAAI2Q,EAAE,IAAIitE,GAAG59E,GAAG,OAAO2Q,EAAE6tE,yBAAwB,GAAI7tE,GAAGitE,GAAGgB,4BAA4B,SAAS5+E,GAAG,OAAO,IAAI49E,GAAG59E,IAAI49E,GAAGiB,0BAA0B,SAAS7+E,GAAG,IAAI2Q,EAAE,IAAIitE,GAAG59E,GAAG,OAAO2Q,EAAE6tE,yBAAwB,GAAI7tE,EAAE8tE,sBAAqB,GAAI9tE,GAAG,IAAImuE,GAAG,WAAWn+E,KAAKomE,IAAI,IAAIhuB,GAAGp4C,KAAKuyE,YAAY,KAAKvyE,KAAKk9E,uBAAsB,EAAGl9E,KAAKqgE,QAAQ,KAAKrgE,KAAKo7E,UAAS,EAAG,IAAI/7E,EAAE8Q,UAAU,GAAGnQ,KAAKuyE,YAAYlzE,GAAG8+E,GAAG77E,UAAU87E,QAAQ,WAAW,GAAG,OAAOp+E,KAAKqgE,QAAQ,OAAO,KAAKrgE,KAAK2yE,8BAA8BwL,GAAG77E,UAAUs7E,iBAAiB,WAAW,OAAO59E,KAAKqgE,QAAQud,oBAAoBO,GAAG77E,UAAUmjD,QAAQ,WAAW,OAAOzlD,KAAKo+E,UAAUp+E,KAAKo7E,UAAU+C,GAAG77E,UAAUu7E,wBAAwB,SAASx+E,GAAGW,KAAKk9E,sBAAsB79E,GAAG8+E,GAAG77E,UAAUqwE,2BAA2B,WAAW3yE,KAAKo7E,UAAS,EAAGp7E,KAAKqgE,QAAQ,IAAI4c,GAAGj9E,KAAKomE,KAAKpmE,KAAKqgE,QAAQwd,wBAAwB79E,KAAKk9E,uBAAuB,IAAI79E,EAAE,IAAIkhE,GAAG,GAAGlhE,EAAEihE,sBAAsBtgE,KAAKqgE,SAAShhE,EAAE8gE,aAAangE,KAAKuyE,aAAavyE,KAAKqgE,QAAQzoB,kBAAkB,OAAO53C,KAAKo7E,UAAS,EAAG,MAAM+C,GAAG77E,UAAUswE,WAAW,WAAW,GAAG5yE,KAAKo+E,WAAWp+E,KAAKo7E,SAAS,MAAM,IAAItvB,GAAG9rD,KAAKo8E,kBAAkBp8E,KAAKqgE,QAAQod,4BAA4BU,GAAG77E,UAAU85E,gBAAgB,WAAW,GAAGp8E,KAAKo7E,SAAS,MAAM,yBAAyB,IAAI/7E,EAAEW,KAAKqgE,QAAQsd,0BAA0B,MAAM,wCAAwCnxC,EAAEqJ,aAAax2C,EAAE,GAAGA,EAAE,IAAI,QAAQmtC,EAAEqJ,aAAax2C,EAAE,GAAGA,EAAE,KAAK8+E,GAAG77E,UAAUqpC,YAAY,WAAW,MAAM,IAAIwyC,GAAG77E,UAAUspC,SAAS,WAAW,OAAOuyC,IAAIA,GAAGE,qBAAqB,SAASh/E,GAAG,IAAI2Q,EAAE,IAAImuE,GAAG9+E,GAAG,OAAO2Q,EAAE6tE,yBAAwB,GAAI7tE,EAAEy1C,UAAUz1C,EAAE4tE,oBAAoB,IAAIU,GAAG,SAASj/E,IAAIW,KAAKu+E,IAAI,KAAK,IAAIvuE,EAAEG,UAAU,GAAGnQ,KAAKu+E,IAAI,IAAIJ,GAAG9+E,EAAEm/E,iBAAiBxuE,KAAKsuE,GAAGh8E,UAAUswE,WAAW,WAAW5yE,KAAKu+E,IAAI3L,cAAc0L,GAAGh8E,UAAUqpC,YAAY,WAAW,MAAM,IAAI2yC,GAAGh8E,UAAUspC,SAAS,WAAW,OAAO0yC,IAAIA,GAAGE,iBAAiB,SAASn/E,GAAG,IAAI,IAAI2Q,EAAE,IAAIwuC,GAAG//C,EAAEY,EAAEkpB,WAAW9pB,EAAEu+C,WAAW,CAAC,IAAI19C,EAAEb,EAAE2T,OAAOpC,EAAEojB,IAAI,IAAI4pD,GAAG19E,EAAEkjD,iBAAiBljD,IAAI,OAAO0Q,GAAGsuE,GAAG1L,WAAW,SAASvzE,GAAG,IAAIi/E,GAAGj/E,GAAGuzE,cAAc,IAAI6L,GAAG,SAASp/E,GAAGW,KAAK0+E,OAAOr/E,GAAGo/E,GAAGn8E,UAAU4H,IAAI,SAAS7K,GAAG,IAAI,IAAI2Q,EAAE,IAAIwuC,GAAG//C,EAAE,EAAEA,EAAEY,EAAE88C,mBAAmB19C,IAAI,CAAC,IAAIa,EAAEU,KAAK0+E,OAAOx0E,IAAI7K,EAAEq8C,aAAaj9C,IAAIa,EAAE01B,WAAWhlB,EAAEojB,IAAI9zB,GAAG,OAAOD,EAAEo8C,aAAa9F,yBAAyB3B,GAAG8U,gBAAgB94C,KAAKyuE,GAAGn8E,UAAUqpC,YAAY,WAAW,MAAM,IAAI8yC,GAAGn8E,UAAUspC,SAAS,WAAW,OAAO6yC,IAAIA,GAAGv0E,IAAI,SAAS7K,EAAE2Q,GAAG,OAAO,IAAIyuE,GAAGzuE,GAAG9F,IAAI7K,IAAI,IAAIs/E,GAAG,WAAW3+E,KAAK4+E,IAAI,KAAK5+E,KAAKmvD,iBAAiB,KAAKnvD,KAAKi5E,WAAW,KAAKj5E,KAAK6+E,eAAe,IAAIrgC,GAAGx+C,KAAK8+E,gBAAgB,IAAItgC,GAAG,IAAIn/C,EAAE8Q,UAAU,GAAGH,EAAEG,UAAU,GAAG1R,EAAE0R,UAAU,GAAGnQ,KAAK4+E,IAAIv/E,EAAEW,KAAKmvD,iBAAiBn/C,EAAEhQ,KAAKi5E,WAAWx6E,GAAGkgF,GAAGr8E,UAAUy8E,aAAa,SAAS1/E,GAAG,IAAI,IAAI2Q,EAAEhQ,KAAK4+E,IAAII,WAAWlpB,cAAcvtC,WAAWvY,EAAEgtC,WAAW,CAAC,IAAIv+C,EAAEuR,EAAEoC,OAAOpS,KAAKi/E,gBAAgBxgF,EAAEY,EAAEW,KAAK6+E,gBAAgB7+E,KAAKk/E,yBAAyBzgF,EAAEY,EAAEW,KAAK6+E,kBAAkBF,GAAGr8E,UAAU68E,kBAAkB,SAAS9/E,EAAE2Q,GAAG,IAAIvR,EAAEuB,KAAKi5E,WAAW9N,OAAO9rE,EAAEsyC,gBAAgB3xC,KAAK4+E,IAAIQ,eAAepvE,IAAI3Q,EAAEmwD,WAAWpB,YAAYp+C,EAAEvR,IAAIkgF,GAAGr8E,UAAUu3D,MAAM,SAASx6D,GAAG,OAAOW,KAAKktE,uBAAuBltE,KAAK++E,aAAa1/E,GAAGW,KAAKq/E,WAAWhgF,GAAGW,KAAK8+E,iBAAiBH,GAAGr8E,UAAU28E,gBAAgB,SAAS5/E,EAAE2Q,EAAEvR,GAAG,IAAIa,EAAED,EAAEmwD,WAAWxtC,EAAE3iB,EAAEisD,UAAUjsD,EAAEu1D,eAAev1D,EAAEwtD,cAAcyyB,GAAGC,aAAajgF,EAAE0Q,IAAIgS,EAAEovC,cAAc3yD,EAAE20B,IAAIpR,GAAG3iB,EAAE21D,gBAAe,MAAO2pB,GAAGr8E,UAAU4qE,qBAAqB,WAAW,IAAI,IAAI7tE,EAAEW,KAAK4+E,IAAII,WAAWxxB,WAAWjlC,WAAWlpB,EAAE29C,WAAY39C,EAAE+S,OAAOq5C,WAAWyhB,uBAAuB,IAAI,IAAIl9D,EAAEhQ,KAAK4+E,IAAII,WAAWlpB,cAAcvtC,WAAWvY,EAAEgtC,WAAW,CAAC,IAAIv+C,EAAEuR,EAAEoC,OAAO9S,EAAEb,EAAE6sD,UAAU,GAAG7sD,EAAEm2D,eAAet1D,EAAE+xD,eAAe,CAAC,IAAIrvC,EAAEhiB,KAAK4+E,IAAIY,aAAa/gF,EAAEkzC,iBAAiBryC,EAAEiyD,WAAWvvC,MAAM28D,GAAGr8E,UAAUm9E,mBAAmB,SAASpgF,GAAG,IAAI,IAAI2Q,EAAE3Q,EAAEkpB,WAAWvY,EAAEgtC,WAAW,CAAC,IAAIv+C,EAAEuR,EAAEoC,OAAO9S,EAAEb,EAAE+wD,WAAW/wD,EAAE6wD,eAAehwD,EAAEqzC,OAAO,GAAG3yC,KAAKm/E,kBAAkB1gF,EAAE,GAAGuB,KAAKm/E,kBAAkB1gF,EAAE,MAAMkgF,GAAGr8E,UAAU+8E,WAAW,SAAShgF,GAAG,IAAI,IAAI2Q,EAAEhQ,KAAK6+E,eAAet2D,WAAWvY,EAAEgtC,WAAW,CAAC,IAAIv+C,EAAEuR,EAAEoC,OAAO9S,EAAEU,KAAKmvD,iBAAiB7Z,iBAAiB72C,EAAE+jD,kBAAkBxiD,KAAK8+E,gBAAgB1rD,IAAI9zB,GAAGb,EAAE6uD,aAAY,KAAMqxB,GAAGr8E,UAAU48E,yBAAyB,SAAS7/E,EAAE2Q,EAAEvR,GAAG,IAAIa,EAAED,EAAEmwD,WAAW,OAAOnwD,EAAEu1D,cAAkBv1D,EAAEwtD,aAAiBxtD,EAAEguD,sBAA0BhuD,EAAEisD,UAAU/xB,aAAhE,MAAmFyc,GAAGE,SAAS72C,EAAEk6B,cAAcl6B,EAAEusD,SAASryB,gBAAgBl6B,EAAEisD,UAAU/xB,mBAAmB+lD,GAAGC,aAAajgF,EAAE0Q,IAAIA,IAAIsvE,GAAGI,eAAejhF,EAAE20B,IAAI/zB,EAAEisD,WAAWjsD,EAAE21D,gBAAe,OAAQ2pB,GAAGr8E,UAAUqpC,YAAY,WAAW,MAAM,IAAIgzC,GAAGr8E,UAAUspC,SAAS,WAAW,OAAO+yC,IAAI,IAAIgB,GAAG,WAAW3/E,KAAK4+E,IAAI,KAAK5+E,KAAKmvD,iBAAiB,KAAKnvD,KAAK4/E,iBAAiB,IAAIphC,GAAG,IAAIn/C,EAAE8Q,UAAU,GAAGH,EAAEG,UAAU,GAAGnQ,KAAK4+E,IAAIv/E,EAAEW,KAAKmvD,iBAAiBn/C,GAAG2vE,GAAGr9E,UAAUu9E,yBAAyB,SAASxgF,GAAG,IAAI2Q,EAAE3Q,EAAEsyC,gBAAgB,IAAI3xC,KAAK4+E,IAAIkB,cAAc9vE,GAAG,CAAC,IAAIvR,EAAEuB,KAAKmvD,iBAAiBha,YAAYnlC,GAAGhQ,KAAK4/E,iBAAiBxsD,IAAI30B,KAAKkhF,GAAGr9E,UAAUy9E,6BAA6B,SAAS1gF,GAAG,IAAI,IAAI2Q,EAAEhQ,KAAK4+E,IAAII,WAAWxxB,WAAWjlC,WAAWvY,EAAEgtC,WAAW,CAAC,IAAIv+C,EAAEuR,EAAEoC,OAAO,IAAI3T,EAAE86B,eAAgB96B,EAAEmzD,2BAA2B,IAAInzD,EAAEgtD,WAAWghB,aAAaptE,IAAIigF,GAAGI,cAAe,CAAC,IAAIpgF,EAAEb,EAAE+wD,WAAW8vB,GAAGC,aAAajgF,EAAED,IAAIW,KAAK6/E,yBAAyBphF,MAAMkhF,GAAGr9E,UAAUu3D,MAAM,SAASx6D,GAAG,OAAOW,KAAK+/E,6BAA6B1gF,GAAGW,KAAK4/E,kBAAkBD,GAAGr9E,UAAUqpC,YAAY,WAAW,MAAM,IAAIg0C,GAAGr9E,UAAUspC,SAAS,WAAW,OAAO+zC,IAAI,IAAIK,GAAG,WAAWhgF,KAAKsqE,WAAW,KAAKtqE,KAAK26C,SAAS,KAAK36C,KAAKigF,qBAAoB,EAAGjgF,KAAKkgF,iCAAgC,EAAGlgF,KAAKmgF,sBAAqB,EAAGngF,KAAKogF,eAAc,GAAIJ,GAAG19E,UAAU+9E,eAAe,SAAShhF,EAAE2Q,GAAG,OAAOhQ,KAAK26C,SAASxF,YAAYn1C,KAAKsgF,qBAAqBjhF,EAAEylD,wBAAwBzlD,KAAK2gF,GAAG19E,UAAUi+E,iBAAiB,SAASlhF,EAAE2Q,GAAG,IAAIvR,GAAE,EAAGa,EAAEU,KAAKwgF,oBAAoBnhF,EAAEimD,kBAAkBjmD,GAAG,OAAOC,GAAGA,aAAaomD,KAAKpmD,EAAE01B,YAAYv2B,GAAE,GAAI,IAAI,IAAIujB,EAAE,IAAIw8B,GAAG5vB,EAAE,EAAEA,EAAEvvB,EAAEgmD,qBAAqBz2B,IAAI,CAAC,IAAI9vB,EAAEkB,KAAKwgF,oBAAoBnhF,EAAEkmD,iBAAiB32B,GAAGvvB,GAAG,OAAOP,GAAGA,EAAEk2B,YAAYl2B,aAAa4mD,KAAKjnD,GAAE,GAAIujB,EAAEoR,IAAIt0B,IAAI,GAAGL,EAAE,OAAOuB,KAAK26C,SAASlF,cAAcn2C,EAAE0iB,EAAEq8B,QAAQ,KAAK,IAAI3+C,EAAE,IAAI8+C,GAAG,OAAO,OAAOl/C,GAAGI,EAAE0zB,IAAI9zB,GAAGI,EAAE8rC,OAAOxpB,GAAGhiB,KAAK26C,SAASkO,cAAcnpD,IAAIsgF,GAAG19E,UAAUm+E,yBAAyB,SAASphF,GAAG,OAAOW,KAAK26C,SAASoK,+BAA+BjZ,OAAOzsC,IAAI2gF,GAAG19E,UAAUo+E,iBAAiB,WAAW,OAAO1gF,KAAKsqE,YAAY0V,GAAG19E,UAAUq+E,yBAAyB,SAASthF,EAAE2Q,GAAG,IAAI,IAAIvR,EAAE,IAAI+/C,GAAGl/C,EAAE,EAAEA,EAAED,EAAE88C,mBAAmB78C,IAAI,CAAC,IAAI0iB,EAAEhiB,KAAK4gF,oBAAoBvhF,EAAEq8C,aAAap8C,GAAGD,GAAG,OAAO2iB,IAAIA,EAAEgT,WAAWv2B,EAAE20B,IAAIpR,IAAI,OAAOhiB,KAAK26C,SAASkO,cAAcpqD,IAAIuhF,GAAG19E,UAAUg+E,qBAAqB,SAASjhF,EAAE2Q,GAAG,OAAOhQ,KAAKmX,KAAK9X,IAAI2gF,GAAG19E,UAAUs+E,oBAAoB,SAASvhF,EAAE2Q,GAAG,OAAOhQ,KAAK26C,SAASrF,iBAAiBt1C,KAAKsgF,qBAAqBjhF,EAAEylD,wBAAwBzlD,KAAK2gF,GAAG19E,UAAUu+E,oBAAoB,SAASxhF,EAAE2Q,GAAG,IAAI,IAAIvR,EAAE,IAAI+/C,GAAGl/C,EAAE,EAAEA,EAAED,EAAE88C,mBAAmB78C,IAAI,CAAC,IAAI0iB,EAAEhiB,KAAKqgF,eAAehhF,EAAEq8C,aAAap8C,GAAGD,GAAG,OAAO2iB,IAAIA,EAAEgT,WAAWv2B,EAAE20B,IAAIpR,IAAI,OAAOhiB,KAAK26C,SAASkO,cAAcpqD,IAAIuhF,GAAG19E,UAAUw+E,sBAAsB,SAASzhF,EAAE2Q,GAAG,IAAI,IAAIvR,EAAE,IAAI+/C,GAAGl/C,EAAE,EAAEA,EAAED,EAAE88C,mBAAmB78C,IAAI,CAAC,IAAI0iB,EAAEhiB,KAAKugF,iBAAiBlhF,EAAEq8C,aAAap8C,GAAGD,GAAG,OAAO2iB,IAAIA,EAAEgT,WAAWv2B,EAAE20B,IAAIpR,IAAI,OAAOhiB,KAAK26C,SAASkO,cAAcpqD,IAAIuhF,GAAG19E,UAAU6U,KAAK,SAAS9X,GAAG,OAAOA,EAAE8X,QAAQ6oE,GAAG19E,UAAUy+E,4BAA4B,SAAS1hF,EAAE2Q,GAAG,IAAI,IAAIvR,EAAE,IAAI+/C,GAAGl/C,EAAE,EAAEA,EAAED,EAAE88C,mBAAmB78C,IAAI,CAAC,IAAI0iB,EAAEhiB,KAAKghF,UAAU3hF,EAAEq8C,aAAap8C,IAAI,OAAO0iB,IAAIhiB,KAAKigF,qBAAqBj+D,EAAEgT,WAAWv2B,EAAE20B,IAAIpR,IAAI,OAAOhiB,KAAKkgF,gCAAgClgF,KAAK26C,SAAShF,yBAAyB3B,GAAG8U,gBAAgBrqD,IAAIuB,KAAK26C,SAASkO,cAAcpqD,IAAIuhF,GAAG19E,UAAU0+E,UAAU,SAAS3hF,GAAG,GAAGW,KAAKsqE,WAAWjrE,EAAEW,KAAK26C,SAASt7C,EAAEo8C,aAAap8C,aAAa6lD,GAAG,OAAOllD,KAAKqgF,eAAehhF,EAAE,MAAM,GAAGA,aAAammD,GAAG,OAAOxlD,KAAK6gF,oBAAoBxhF,EAAE,MAAM,GAAGA,aAAaqmD,GAAG,OAAO1lD,KAAKwgF,oBAAoBnhF,EAAE,MAAM,GAAGA,aAAamkD,GAAG,OAAOxjD,KAAK4gF,oBAAoBvhF,EAAE,MAAM,GAAGA,aAAawjD,GAAG,OAAO7iD,KAAK2gF,yBAAyBthF,EAAE,MAAM,GAAGA,aAAa+lD,GAAG,OAAOplD,KAAKugF,iBAAiBlhF,EAAE,MAAM,GAAGA,aAAawmD,GAAG,OAAO7lD,KAAK8gF,sBAAsBzhF,EAAE,MAAM,GAAGA,aAAakjD,GAAG,OAAOviD,KAAK+gF,4BAA4B1hF,EAAE,MAAM,MAAM,IAAIX,EAAE,6BAA6BW,EAAEusC,WAAW6a,YAAYu5B,GAAG19E,UAAUk+E,oBAAoB,SAASnhF,EAAE2Q,GAAG,IAAIvR,EAAEuB,KAAKsgF,qBAAqBjhF,EAAEylD,wBAAwBzlD,GAAG,GAAG,OAAOZ,EAAE,OAAOuB,KAAK26C,SAASpF,iBAAiB,MAAM,IAAIj2C,EAAEb,EAAEg2B,OAAO,OAAOn1B,EAAE,GAAGA,EAAE,IAAIU,KAAKogF,cAAcpgF,KAAK26C,SAASrF,iBAAiB72C,GAAGuB,KAAK26C,SAASpF,iBAAiB92C,IAAIuhF,GAAG19E,UAAUqpC,YAAY,WAAW,MAAM,IAAIq0C,GAAG19E,UAAUspC,SAAS,WAAW,OAAOo0C,IAAI,IAAIiB,GAAG,SAAS5hF,IAAI,GAAGW,KAAKkhF,eAAe,EAAElhF,KAAKmhF,QAAQ,KAAKnhF,KAAKopE,KAAK,IAAI3L,GAAGz9D,KAAKohF,gCAA+B,EAAGphF,KAAKqhF,WAAU,EAAGlxE,UAAU,aAAaqzC,IAAI,iBAAiBrzC,UAAU,GAAG,CAAC,IAAmB1R,EAAE0R,UAAU,GAAG9Q,EAAEuQ,KAAK5P,KAAnCmQ,UAAU,GAAgCqyC,iBAAiB/jD,QAAQ,GAAG0R,UAAU,aAAalJ,OAAO,iBAAiBkJ,UAAU,GAAG,CAAC,IAAI7Q,EAAE6Q,UAAU,GAAG6R,EAAE7R,UAAU,GAAGnQ,KAAKmhF,QAAQ7hF,EAAEU,KAAKqhF,UAAUhiF,EAAEyjD,SAASxjD,GAAGU,KAAKkhF,eAAel/D,IAAIi/D,GAAG3+E,UAAUg/E,aAAa,SAASjiF,EAAE2Q,GAAG,IAAI,IAAIvR,EAAEuB,KAAKqhF,UAAUhiF,EAAEo1B,OAAO,EAAEp1B,EAAEo1B,OAAOn1B,EAAE,EAAEA,EAAEb,EAAEa,IAAI,CAAC,IAAI0iB,EAAE3iB,EAAEuoB,IAAItoB,GAAGsvB,EAAE5uB,KAAKuhF,kBAAkBv/D,EAAEhS,GAAG,OAAO4e,IAAIvvB,EAAE6b,IAAI5b,EAAE,IAAIqoC,EAAE/Y,IAAI,IAAItvB,GAAGU,KAAKqhF,WAAWhiF,EAAE6b,IAAI7b,EAAEo1B,OAAO,EAAE,IAAIkT,EAAE/Y,OAAOqyD,GAAG3+E,UAAUi/E,kBAAkB,SAASliF,EAAE2Q,GAAG,IAAI,IAAIvR,EAAE,EAAEA,EAAEuR,EAAEzR,OAAOE,IAAI,CAAC,GAAGY,EAAEqtC,SAAS18B,EAAEvR,IAAI,OAAO,KAAK,GAAGY,EAAEgJ,SAAS2H,EAAEvR,IAAIuB,KAAKkhF,eAAe,OAAOlxE,EAAEvR,GAAG,OAAO,MAAMwiF,GAAG3+E,UAAUk/E,OAAO,SAASniF,GAAG,IAAI2Q,EAAE,IAAI6uC,GAAG7+C,KAAKmhF,SAAuD,OAA9CnhF,KAAKshF,aAAatxE,EAAE3Q,GAAGW,KAAKyhF,aAAazxE,EAAE3Q,GAAU2Q,EAAEiiC,qBAAqBgvC,GAAG3+E,UAAUm/E,aAAa,SAASpiF,EAAE2Q,GAAG,GAAG,IAAIA,EAAEzR,OAAO,OAAO,KAAK,IAAIE,EAAEuR,EAAEzR,OAAOyR,EAAE,GAAG08B,SAAS18B,EAAEA,EAAEzR,OAAO,MAAME,EAAEuR,EAAEzR,OAAO,GAAG,IAAI,IAAIe,EAAE,EAAEA,EAAEb,EAAEa,IAAI,CAAC,IAAI0iB,EAAEhS,EAAE1Q,GAAGsvB,EAAE5uB,KAAK0hF,uBAAuB1/D,EAAE3iB,GAAGuvB,GAAG,GAAGvvB,EAAE+zB,IAAIxE,EAAE,EAAE,IAAI+Y,EAAE3lB,IAAG,KAAMi/D,GAAG3+E,UAAUo/E,uBAAuB,SAASriF,EAAE2Q,GAAG,IAAI,IAAIvR,EAAE8zB,EAAElX,UAAU/b,GAAG,EAAE0iB,EAAE,EAAEA,EAAEhS,EAAEykB,OAAO,EAAEzS,IAAI,CAAC,GAAGhiB,KAAKopE,KAAK1L,GAAG1tD,EAAE4X,IAAI5F,GAAGhiB,KAAKopE,KAAKz1D,GAAG3D,EAAE4X,IAAI5F,EAAE,GAAGhiB,KAAKopE,KAAK1L,GAAGhxB,SAASrtC,IAAIW,KAAKopE,KAAKz1D,GAAG+4B,SAASrtC,GAAG,CAAC,GAAGW,KAAKohF,+BAA+B,SAAS,OAAO,EAAE,IAAIxyD,EAAE5uB,KAAKopE,KAAK/gE,SAAShJ,GAAGuvB,EAAE5uB,KAAKkhF,gBAAgBtyD,EAAEnwB,IAAIA,EAAEmwB,EAAEtvB,EAAE0iB,GAAG,OAAO1iB,GAAG2hF,GAAG3+E,UAAUq/E,iCAAiC,SAAStiF,GAAGW,KAAKohF,+BAA+B/hF,GAAG4hF,GAAG3+E,UAAUqpC,YAAY,WAAW,MAAM,IAAIs1C,GAAG3+E,UAAUspC,SAAS,WAAW,OAAOq1C,IAAIA,GAAGn+B,SAAS,SAASzjD,GAAG,QAAQA,EAAEd,QAAQ,IAAIc,EAAE,GAAGqtC,SAASrtC,EAAEA,EAAEd,OAAO,KAAK,IAAIqjF,GAAG,SAASviF,GAAGW,KAAK6hF,SAASxiF,GAAG,MAAMyiF,GAAG,CAACC,sBAAsB,CAAC1xE,cAAa,IAAKuxE,GAAGt/E,UAAUk/E,OAAO,SAASniF,EAAE2Q,GAAG,IAAIvR,EAAEuB,KAAKgiF,yBAAyB3iF,GAAG,OAAO,IAAI4iF,GAAGjyE,EAAEvR,GAAGuiF,UAAUhhF,KAAK6hF,WAAWD,GAAGt/E,UAAU4/E,WAAW,SAAS7iF,EAAE2Q,GAAG,IAAIvR,EAAEuB,KAAKgiF,yBAAyBhiF,KAAK6hF,UAAUviF,EAAE,IAAI2iF,GAAG5iF,EAAEZ,GAAE,GAAIuiF,UAAUhhF,KAAK6hF,UAAU7/D,EAAE1iB,EAAE,OAAO0Q,GAAG09B,EAAE1rB,EAAEmjC,MAAMnjC,EAAE1iB,EAAEmyE,OAAO,IAAIzvD,GAAG4/D,GAAGt/E,UAAU6/E,qBAAqB,SAAS9iF,GAAG,OAAOW,KAAKoiF,4BAA4B/iF,GAAG,IAAIuiF,GAAGt/E,UAAU0/E,yBAAyB,SAAS3iF,GAAG,IAAI,IAAI2Q,EAAE,IAAImL,EAAE1c,EAAEY,EAAEmjD,iBAAiBljD,EAAE,EAAEA,EAAEb,EAAEF,OAAOe,IAAI0Q,EAAEojB,IAAI30B,EAAEa,IAAI,OAAO0Q,EAAEquC,QAAQ,IAAIp3C,MAAM,GAAG6pC,KAAK,QAAQ8wC,GAAGt/E,UAAU8/E,4BAA4B,SAAS/iF,GAAG,IAAI,IAAI2Q,EAAEuiB,EAAElX,UAAU5c,EAAE,EAAEA,EAAEY,EAAEd,OAAO,EAAEE,IAAI,CAAC,IAAIa,EAAED,EAAEZ,GAAG4J,SAAShJ,EAAEZ,EAAE,IAAIa,EAAE0Q,IAAIA,EAAE1Q,GAAG,OAAO0Q,GAAG4xE,GAAGt/E,UAAUqpC,YAAY,WAAW,MAAM,IAAIi2C,GAAGt/E,UAAUspC,SAAS,WAAW,OAAOg2C,IAAIA,GAAGxN,KAAK,SAAS/0E,EAAE2Q,EAAEvR,GAAG,IAAIa,EAAE,IAAI2H,MAAM,GAAG6pC,KAAK,MAAM9uB,EAAE,IAAI4/D,GAAGviF,GAAGC,EAAE,GAAG0iB,EAAEw/D,OAAOxxE,EAAEvR,GAAG,IAAImwB,EAAE,IAAIgzD,GAAG5xE,GAAG,OAAO1Q,EAAE,GAAGsvB,EAAE4yD,OAAOliF,EAAE,GAAGb,GAAGa,GAAGsiF,GAAGS,4BAA4B,WAAW,GAAG,IAAIlyE,UAAU5R,OAAO,CAAC,IAAIc,EAAE8Q,UAAU,GAAGH,EAAE4xE,GAAGU,8BAA8BjjF,GAAGZ,EAAEY,EAAEu9C,oBAAoB,GAAGn+C,EAAE2pD,YAAYZ,GAAGK,MAAM,CAAC,IAAIvoD,EAAE,EAAEb,EAAEwpD,WAAW,EAAE,MAAM3oD,EAAE0Q,IAAIA,EAAE1Q,GAAG,OAAO0Q,EAAE,GAAG,IAAIG,UAAU5R,OAAO,CAAC,IAAIyjB,EAAE7R,UAAU,GAAGye,EAAEze,UAAU,GAAG,OAAOvR,KAAKQ,IAAIwiF,GAAGS,4BAA4BrgE,GAAG4/D,GAAGS,4BAA4BzzD,MAAMgzD,GAAGU,8BAA8B,SAASjjF,GAAG,IAAI2Q,EAAE3Q,EAAEm9C,sBAAsB,OAAO59C,KAAKQ,IAAI4Q,EAAE0iC,YAAY1iC,EAAEyiC,YAAYmvC,GAAGG,uBAAuBH,GAAGM,WAAW,SAAS7iF,EAAE2Q,EAAEvR,GAAG,OAAO,IAAImjF,GAAGviF,GAAG6iF,WAAWlyE,EAAEvR,IAAIqjF,GAAGC,sBAAsBn6D,IAAI,WAAW,OAAO,MAAMlf,OAAOyP,iBAAiBypE,GAAGE,IAAI,IAAIG,GAAG,SAAS5iF,GAAG,SAAS2Q,EAAEA,EAAEvR,EAAEa,GAAGD,EAAEuQ,KAAK5P,MAAMA,KAAKkhF,eAAelxE,GAAG,KAAKhQ,KAAKuiF,SAAS9jF,GAAG,KAAKuB,KAAKwiF,iBAAY,IAASljF,GAAGA,EAAE,OAAOD,IAAI2Q,EAAEgY,UAAU3oB,GAAG2Q,EAAE1N,UAAUoG,OAAOojC,OAAOzsC,GAAGA,EAAEiD,WAAW0N,EAAE1N,UAAUkJ,YAAYwE,EAAEA,EAAE1N,UAAUmgF,SAAS,SAASpjF,EAAE2Q,GAAG,IAAIvR,EAAE,IAAIwiF,GAAG5hF,EAAEW,KAAKkhF,gBAAgB,OAAOziF,EAAEkjF,iCAAiC3hF,KAAKwiF,aAAa/jF,EAAE+iF,OAAOxxE,IAAIA,EAAE1N,UAAUg+E,qBAAqB,SAASjhF,EAAE2Q,GAAG,IAAIvR,EAAEY,EAAE4yC,oBAAoB3yC,EAAEU,KAAKyiF,SAAShkF,EAAEuB,KAAKuiF,UAAU,OAAOviF,KAAK26C,SAASoK,+BAA+BjZ,OAAOxsC,IAAI0Q,EAAE1N,UAAUqpC,YAAY,WAAW,MAAM,IAAI37B,EAAE1N,UAAUspC,SAAS,WAAW,OAAO57B,GAAGA,EAA5mB,CAA+mBgwE,IAAI0C,GAAG,WAAW1iF,KAAK2iF,UAAS,EAAG3iF,KAAK4iF,yBAAyB,GAAG5iF,KAAK6iF,YAAY,EAAE7iF,KAAK8iF,eAAe,MAAMJ,GAAGpgF,UAAUygF,UAAU,WAAW,OAAOxwD,EAAEyZ,iBAAiBhsC,KAAK6iF,cAAcH,GAAGpgF,UAAU8wB,IAAI,SAAS/zB,GAAG,IAAI2Q,EAAEuiB,EAAEwZ,iBAAiB1sC,GAAG,OAAGW,KAAK2iF,UAAgB3iF,KAAK6iF,YAAY7yE,EAAEhQ,KAAK8iF,eAAeJ,GAAGM,YAAYhjF,KAAK6iF,aAAa7iF,KAAK2iF,UAAS,EAAG,MAAQD,GAAGM,YAAYhzE,KAAKhQ,KAAK8iF,gBAAsB9iF,KAAK6iF,YAAY,EAAE,OAAK7iF,KAAK4iF,yBAAyBF,GAAGO,6BAA6BjjF,KAAK6iF,YAAY7yE,QAAGhQ,KAAK6iF,YAAYH,GAAGQ,cAAcljF,KAAK6iF,YAAY,IAAI,GAAG7iF,KAAK4iF,8BAA4BF,GAAGpgF,UAAUkV,SAAS,WAAW,GAAG,IAAIrH,UAAU5R,OAAO,CAAC,IAAIc,EAAE8Q,UAAU,GAAGH,EAAEuiB,EAAEyZ,iBAAiB3sC,GAAGZ,EAAE,mEAAmE8zB,EAAE4wD,eAAe9jF,GAAGC,EAAEb,EAAEwyC,UAAUxyC,EAAEF,OAAO,IAAI,OAAOe,EAAE2xC,UAAU,EAAE,GAAG,KAAK3xC,EAAE2xC,UAAU,EAAE,IAAI,SAAS3xC,EAAE2xC,UAAU,IAAI,MAAMjhC,EAAE,OAAO0yE,GAAGpgF,UAAUqpC,YAAY,WAAW,MAAM,IAAI+2C,GAAGpgF,UAAUspC,SAAS,WAAW,OAAO82C,IAAIA,GAAGU,OAAO,SAAS/jF,EAAE2Q,GAAG,OAAO,IAAI3Q,EAAE,GAAG2Q,GAAG,EAAE,GAAG0yE,GAAGM,YAAY,SAAS3jF,GAAG,OAAOA,GAAG,IAAIqjF,GAAGQ,cAAc,SAAS7jF,EAAE2Q,GAAG,OAAO3Q,KAAK,GAAG2Q,GAAG,IAAI0yE,GAAGO,6BAA6B,SAAS5jF,EAAE2Q,GAAG,IAAI,IAAIvR,EAAE,EAAEa,EAAE,GAAGA,GAAG,EAAEA,IAAI,CAAC,GAAGojF,GAAGU,OAAO/jF,EAAEC,KAAKojF,GAAGU,OAAOpzE,EAAE1Q,GAAG,OAAOb,EAAEA,IAAI,OAAO,IAAI,IAAI4kF,GAAG,WAAWrjF,KAAKsjF,aAAa,KAAKtjF,KAAKujF,UAAU,IAAIC,IAAIC,GAAG,CAACC,uBAAuB,CAACrzE,cAAa,GAAIszE,WAAW,CAACtzE,cAAa,IAAKgzE,GAAG/gF,UAAUshF,cAAc,SAASvkF,GAAG,IAAI2Q,EAAE,IAAI6zE,GAAG7jF,KAAKsjF,cAAcjkF,EAAE6E,MAAM8L,GAAG3Q,EAAEy8C,mBAAmBunC,GAAG/gF,UAAUwhF,iBAAiB,SAASzkF,GAAG,GAAG,IAAIW,KAAKsjF,aAAanvE,GAAG,IAAInU,KAAKsjF,aAAalvE,EAAE,OAAO/U,EAAE,IAAI2Q,EAAE,IAAI23B,EAAE3nC,KAAKsjF,cAActzE,EAAEmE,GAAGnE,EAAEmE,EAAEnE,EAAEoE,GAAGpE,EAAEoE,EAAE,IAAI3V,EAAE,IAAIolF,GAAG7zE,GAAG,OAAO3Q,EAAE6E,MAAMzF,GAAGY,EAAEy8C,kBAAkBz8C,GAAGgkF,GAAG/gF,UAAUyhF,oBAAoB,WAAW,OAAO/jF,KAAKsjF,cAAcD,GAAG/gF,UAAU8wB,IAAI,SAAS/zB,GAAGA,EAAE6E,MAAMlE,KAAKujF,WAAWvjF,KAAKsjF,aAAatjF,KAAKujF,UAAUQ,uBAAuBV,GAAG/gF,UAAUqpC,YAAY,WAAW,MAAM,IAAI03C,GAAG/gF,UAAUspC,SAAS,WAAW,OAAOy3C,IAAII,GAAGC,uBAAuB97D,IAAI,WAAW,OAAO47D,IAAIC,GAAGE,WAAW/7D,IAAI,WAAW,OAAOi8D,IAAIn7E,OAAOyP,iBAAiBkrE,GAAGI,IAAI,IAAID,GAAG,WAAWxjF,KAAKgkF,aAAa,IAAItB,GAAG1iF,KAAKikF,aAAa,IAAIvB,IAAIc,GAAGlhF,UAAUk4C,OAAO,SAASn7C,GAAGW,KAAKgkF,aAAa5wD,IAAI/zB,EAAE8U,GAAGnU,KAAKikF,aAAa7wD,IAAI/zB,EAAE+U,IAAIovE,GAAGlhF,UAAUyhF,oBAAoB,WAAW,OAAO,IAAIp8C,EAAE3nC,KAAKgkF,aAAajB,YAAY/iF,KAAKikF,aAAalB,cAAcS,GAAGlhF,UAAUqpC,YAAY,WAAW,MAAM,CAAC0R,KAAKmmC,GAAGlhF,UAAUspC,SAAS,WAAW,OAAO43C,IAAI,IAAIK,GAAG,WAAW7jF,KAAKkkF,MAAM,KAAK,IAAI7kF,EAAE8Q,UAAU,GAAGnQ,KAAKkkF,MAAM7kF,GAAGwkF,GAAGvhF,UAAUk4C,OAAO,SAASn7C,EAAE2Q,GAAG,IAAIvR,EAAEY,EAAEstC,YAAY38B,EAAE,GAAGhQ,KAAKkkF,MAAM/vE,EAAE7U,EAAED,EAAEstC,YAAY38B,EAAE,GAAGhQ,KAAKkkF,MAAM9vE,EAAE/U,EAAEotC,YAAYz8B,EAAE,EAAEvR,GAAGY,EAAEotC,YAAYz8B,EAAE,EAAE1Q,IAAIukF,GAAGvhF,UAAU+/C,OAAO,WAAW,OAAM,GAAIwhC,GAAGvhF,UAAUggD,kBAAkB,WAAW,OAAM,GAAIuhC,GAAGvhF,UAAUqpC,YAAY,WAAW,MAAM,CAACyW,KAAKyhC,GAAGvhF,UAAUspC,SAAS,WAAW,OAAOi4C,IAAI,IAAIM,GAAG,SAAS9kF,EAAE2Q,GAAGhQ,KAAKgjD,MAAM,IAAI/7C,MAAM,GAAG6pC,KAAK,MAAM9wC,KAAKkhF,eAAe,KAAKlhF,KAAKokF,KAAK,KAAKpkF,KAAKgjD,MAAM,GAAG3jD,EAAEW,KAAKgjD,MAAM,GAAGhzC,EAAEhQ,KAAKmiF,wBAAwBgC,GAAG7hF,UAAU+hF,SAAS,SAAShlF,GAAG,OAAO,IAAIuiF,GAAGviF,GAAGmiF,OAAOniF,EAAEW,KAAKkhF,iBAAiBiD,GAAG7hF,UAAUwhF,iBAAiB,SAASzkF,GAAGW,KAAKokF,KAAK,IAAIf,GAAGrjF,KAAKokF,KAAKhxD,IAAI/zB,EAAE,IAAIW,KAAKokF,KAAKhxD,IAAI/zB,EAAE,IAAI,IAAI2Q,EAAE,IAAI/I,MAAM,GAAG6pC,KAAK,MAAM,OAAO9gC,EAAE,GAAGhQ,KAAKokF,KAAKN,iBAAiBzkF,EAAE,GAAG8X,QAAQnH,EAAE,GAAGhQ,KAAKokF,KAAKN,iBAAiBzkF,EAAE,GAAG8X,QAAQnH,GAAGm0E,GAAG7hF,UAAUgiF,cAAc,SAASjlF,GAAG,OAAOW,KAAKokF,KAAKR,cAAcvkF,GAAGA,GAAG8kF,GAAG7hF,UAAU2zE,kBAAkB,SAAS52E,GAAG,IAAI2Q,EAAEhQ,KAAKo0E,KAAKp0E,KAAKgjD,OAAOvkD,EAAE6gF,GAAGiF,UAAUv0E,EAAE,GAAGA,EAAE,GAAG3Q,GAAG,OAAOW,KAAKskF,cAAc7lF,IAAI0lF,GAAG7hF,UAAUswE,WAAW,SAASvzE,GAAGA,EAAEomD,WAAWlZ,EAAE1Z,IAAIgmB,QAAQ,gCAAgCsrC,GAAG7hF,UAAU6/E,qBAAqB,WAAWniF,KAAKkhF,eAAeU,GAAGS,4BAA4BriF,KAAKgjD,MAAM,GAAGhjD,KAAKgjD,MAAM,KAAKmhC,GAAG7hF,UAAU8xE,KAAK,SAAS/0E,GAAG,IAAI2Q,EAAEhQ,KAAK8jF,iBAAiBzkF,GAAG,OAAOuiF,GAAGxN,KAAKpkE,EAAE,GAAGA,EAAE,GAAGhQ,KAAKkhF,iBAAiBiD,GAAG7hF,UAAUqpC,YAAY,WAAW,MAAM,IAAIw4C,GAAG7hF,UAAUspC,SAAS,WAAW,OAAOu4C,IAAIA,GAAGI,UAAU,SAASllF,EAAE2Q,EAAEvR,GAAG,OAAO,IAAI0lF,GAAG9kF,EAAE2Q,GAAGimE,kBAAkBx3E,IAAI0lF,GAAGz+C,MAAM,SAASrmC,EAAE2Q,GAAG,OAAOm0E,GAAGI,UAAUllF,EAAE2Q,EAAEsvE,GAAGkF,QAAQL,GAAGtsD,aAAa,SAASx4B,EAAE2Q,GAAG,OAAOm0E,GAAGI,UAAUllF,EAAE2Q,EAAEsvE,GAAGI,eAAeyE,GAAGM,cAAc,SAASplF,EAAE2Q,GAAG,OAAOm0E,GAAGI,UAAUllF,EAAE2Q,EAAEsvE,GAAGoF,gBAAgBP,GAAGh+C,WAAW,SAAS9mC,EAAE2Q,GAAG,OAAOm0E,GAAGI,UAAUllF,EAAE2Q,EAAEsvE,GAAGqF,aAAa,IAAIC,GAAG,SAASvlF,EAAE2Q,GAAGhQ,KAAKgjD,MAAM,IAAI/7C,MAAM,GAAG6pC,KAAK,MAAM9wC,KAAKgjD,MAAM,GAAG3jD,EAAEW,KAAKgjD,MAAM,GAAGhzC,GAAG40E,GAAGtiF,UAAU2zE,kBAAkB,SAAS52E,GAAG,IAAI2Q,EAAE,KAAKvR,GAAE,EAAGa,EAAE,KAAK,IAAI0Q,EAAEsvE,GAAGiF,UAAUvkF,KAAKgjD,MAAM,GAAGhjD,KAAKgjD,MAAM,GAAG3jD,GAAGZ,GAAE,EAAG,MAAMY,GAAG,KAAKA,aAAay2C,GAAG,MAAMz2C,EAAEC,EAAED,EAAE,IAAIZ,EAAE,IAAIuR,EAAEm0E,GAAGI,UAAUvkF,KAAKgjD,MAAM,GAAGhjD,KAAKgjD,MAAM,GAAG3jD,GAAG,MAAMA,GAAG,MAAMA,aAAay2C,EAAEx2C,EAAED,EAAE,OAAO2Q,GAAG40E,GAAGtiF,UAAUqpC,YAAY,WAAW,MAAM,IAAIi5C,GAAGtiF,UAAUspC,SAAS,WAAW,OAAOg5C,IAAIA,GAAGL,UAAU,SAASllF,EAAE2Q,EAAEvR,GAAG,OAAO,IAAImmF,GAAGvlF,EAAE2Q,GAAGimE,kBAAkBx3E,IAAImmF,GAAGl/C,MAAM,SAASrmC,EAAE2Q,GAAG,OAAO40E,GAAGL,UAAUllF,EAAE2Q,EAAEsvE,GAAGkF,QAAQI,GAAG/sD,aAAa,SAASx4B,EAAE2Q,GAAG,OAAO40E,GAAGL,UAAUllF,EAAE2Q,EAAEsvE,GAAGI,eAAekF,GAAGH,cAAc,SAASplF,EAAE2Q,GAAG,OAAO40E,GAAGL,UAAUllF,EAAE2Q,EAAEsvE,GAAGoF,gBAAgBE,GAAGz+C,WAAW,SAAS9mC,EAAE2Q,GAAG,OAAO40E,GAAGL,UAAUllF,EAAE2Q,EAAEsvE,GAAGqF,aAAa,IAAIE,GAAG,WAAW7kF,KAAK8kF,IAAI,KAAK9kF,KAAK+kF,WAAW,KAAK,IAAI1lF,EAAE8Q,UAAU,GAAGH,EAAEG,UAAU,GAAGnQ,KAAK8kF,IAAIzlF,EAAEW,KAAK+kF,WAAW/0E,GAAG60E,GAAGviF,UAAU+7E,qBAAqB,SAASh/E,EAAE2Q,GAAGhQ,KAAK8kF,IAAIpV,0BAA0B1vE,KAAK+kF,WAAW1lF,EAAEylF,IAAIzlF,EAAE0lF,WAAW/0E,IAAI60E,GAAGviF,UAAUqpC,YAAY,WAAW,MAAM,IAAIk5C,GAAGviF,UAAUspC,SAAS,WAAW,OAAOi5C,IAAI,IAAIG,GAAG,SAAS3lF,IAAI,GAAGW,KAAKivD,OAAO,KAAKjvD,KAAKilF,QAAQ,KAAKjlF,KAAKklF,WAAW,KAAKllF,KAAKmlF,aAAa,KAAKnlF,KAAKolF,kBAAkB,KAAKplF,KAAKqlF,KAAK,KAAK,IAAIl1E,UAAU5R,OAAO,CAAC,IAAIyR,EAAEG,UAAU,GAAG1R,EAAE0R,UAAU,GAAGnQ,KAAKklF,WAAW7lF,EAAEokE,OAAOzjE,KAAKilF,QAAQj1E,EAAEhQ,KAAKmlF,aAAa1mF,OAAO,GAAG,IAAI0R,UAAU5R,OAAO,CAAC,IAAIe,EAAE6Q,UAAU,GAAG6R,EAAE7R,UAAU,GAAGye,EAAEze,UAAU,GAAGnQ,KAAKklF,WAAW7lF,EAAEimF,OAAOtlF,KAAKivD,OAAO3vD,EAAEU,KAAKilF,QAAQjjE,EAAEhiB,KAAKqlF,KAAKz2D,IAAI8G,GAAG,CAAC4vD,OAAO,CAACj1E,cAAa,GAAIozD,OAAO,CAACpzD,cAAa,IAAK20E,GAAG1iF,UAAUijF,SAAS,WAAW,OAAOvlF,KAAKklF,aAAaF,GAAGvhB,QAAQuhB,GAAG1iF,UAAUkjF,oBAAoB,SAASnmF,GAAGW,KAAKolF,kBAAkB/lF,GAAG2lF,GAAG1iF,UAAUmjF,UAAU,WAAW,OAAOzlF,KAAKqlF,MAAML,GAAG1iF,UAAUwqC,UAAU,SAASztC,GAAG,IAAI2Q,EAAE3Q,EAAE,OAAOW,KAAKilF,QAAQj1E,EAAEi1E,SAAS,EAAEjlF,KAAKilF,QAAQj1E,EAAEi1E,QAAQ,EAAEjlF,KAAKklF,WAAWl1E,EAAEk1E,YAAY,EAAEllF,KAAKklF,WAAWl1E,EAAEk1E,WAAW,EAAE,GAAGF,GAAG1iF,UAAUojF,eAAe,WAAW,OAAO1lF,KAAKmlF,cAAcH,GAAG1iF,UAAUqjF,SAAS,WAAW,OAAO3lF,KAAKklF,aAAaF,GAAGM,QAAQN,GAAG1iF,UAAUsjF,YAAY,SAASvmF,GAAG,OAAO,OAAOW,KAAKivD,QAAQjvD,KAAKivD,SAAS5vD,EAAE4vD,QAAQ+1B,GAAG1iF,UAAUujF,oBAAoB,WAAW,OAAO7lF,KAAKolF,mBAAmBJ,GAAG1iF,UAAUqpC,YAAY,WAAW,MAAM,CAAC/D,IAAIo9C,GAAG1iF,UAAUspC,SAAS,WAAW,OAAOo5C,IAAItvD,GAAG4vD,OAAO19D,IAAI,WAAW,OAAO,GAAG8N,GAAG+tC,OAAO77C,IAAI,WAAW,OAAO,GAAGlf,OAAOyP,iBAAiB6sE,GAAGtvD,IAAI,IAAIowD,GAAG,aAAaA,GAAGxjF,UAAUqpC,YAAY,WAAW,MAAM,IAAIm6C,GAAGxjF,UAAUspC,SAAS,WAAW,OAAOk6C,IAAI,IAAIC,GAAG,WAAW/lF,KAAK8tE,kBAAiB,EAAG9tE,KAAK+tE,YAAW,EAAG/tE,KAAKguE,oBAAmB,EAAGhuE,KAAKkuE,yBAAyB,KAAKluE,KAAKomE,IAAI,KAAKpmE,KAAKgmF,eAAe,KAAKhmF,KAAKimF,gBAAgB,KAAKjmF,KAAKmuE,oBAAoB,KAAKnuE,KAAKkmF,kBAAkB,EAAElmF,KAAKuuE,SAAS,EAAEvuE,KAAKmmF,UAAU,KAAKnmF,KAAKomF,SAAQ,EAAGpmF,KAAKqmF,sBAAqB,EAAG,IAAIhnF,EAAE8Q,UAAU,GAAGH,EAAEG,UAAU,GAAG1R,EAAE0R,UAAU,GAAGnQ,KAAKomE,IAAI/mE,EAAEW,KAAKgmF,eAAeh2E,EAAEhQ,KAAKimF,gBAAgBxnF,GAAGsnF,GAAGzjF,UAAUksE,sBAAsB,SAASnvE,EAAE2Q,EAAEvR,EAAEa,GAAG,GAAGD,IAAIZ,GAAG,IAAIuB,KAAKomE,IAAI3uB,qBAAqB,CAAC,GAAGsuC,GAAGtX,mBAAmBz+D,EAAE1Q,GAAG,OAAM,EAAG,GAAGD,EAAEyjD,WAAW,CAAC,IAAI9gC,EAAE3iB,EAAEojD,eAAe,EAAE,GAAG,IAAIzyC,GAAG1Q,IAAI0iB,GAAG,IAAI1iB,GAAG0Q,IAAIgS,EAAE,OAAM,GAAI,OAAM,GAAI+jE,GAAGzjF,UAAUosE,2BAA2B,WAAW,OAAO1uE,KAAKkuE,0BAA0B6X,GAAGzjF,UAAUgkF,qBAAqB,SAASjnF,GAAGW,KAAKqmF,qBAAqBhnF,GAAG0mF,GAAGzjF,UAAUqsE,8BAA8B,WAAW,OAAO3uE,KAAKguE,oBAAoB+X,GAAGzjF,UAAUikF,wBAAwB,SAASlnF,EAAE2Q,GAAG,IAAI,IAAIvR,EAAEuR,EAAEuY,WAAW9pB,EAAEu+C,WAAW,CAAC,IAAI19C,EAAEb,EAAE2T,OAAOu/B,gBAAgB,GAAGtyC,EAAE44C,eAAe34C,GAAG,OAAM,EAAG,OAAM,GAAIymF,GAAGzjF,UAAUusE,sBAAsB,WAAW,OAAO7uE,KAAK+tE,YAAYgY,GAAGzjF,UAAUs1C,gBAAgB,WAAW,OAAO53C,KAAK8tE,kBAAkBiY,GAAGzjF,UAAU+/C,OAAO,WAAW,OAAOriD,KAAKomF,SAASL,GAAGzjF,UAAUkkF,gBAAgB,SAASnnF,EAAE2Q,GAAG,OAAO,OAAOA,MAAMhQ,KAAKumF,wBAAwBlnF,EAAE2Q,EAAE,OAAOhQ,KAAKumF,wBAAwBlnF,EAAE2Q,EAAE,MAAM+1E,GAAGzjF,UAAUmkF,iBAAiB,SAASpnF,EAAE2Q,GAAGhQ,KAAKmmF,UAAU,IAAIl/E,MAAM,GAAG6pC,KAAK,MAAM9wC,KAAKmmF,UAAU,GAAG9mF,EAAEW,KAAKmmF,UAAU,GAAGn2E,GAAG+1E,GAAGzjF,UAAUi7D,iBAAiB,SAASl+D,EAAE2Q,EAAEvR,EAAEa,GAAG,GAAGD,IAAIZ,GAAGuR,IAAI1Q,EAAE,OAAO,KAAKU,KAAKuuE,WAAW,IAAIvsD,EAAE3iB,EAAEmjD,iBAAiBxyC,GAAG4e,EAAEvvB,EAAEmjD,iBAAiBxyC,EAAE,GAAGlR,EAAEL,EAAE+jD,iBAAiBljD,GAAGI,EAAEjB,EAAE+jD,iBAAiBljD,EAAE,GAAGU,KAAKomE,IAAI7uB,oBAAoBv1B,EAAE4M,EAAE9vB,EAAEY,GAAGM,KAAKomE,IAAIxuB,oBAAoB53C,KAAKimF,kBAAkB5mF,EAAEixE,aAAY,GAAI7xE,EAAE6xE,aAAY,IAAKtwE,KAAKkmF,oBAAoBlmF,KAAKwuE,sBAAsBnvE,EAAE2Q,EAAEvR,EAAEa,KAAKU,KAAK8tE,kBAAiB,GAAI9tE,KAAKgmF,gBAAgBhmF,KAAKomE,IAAIzuB,aAAat4C,EAAEk+D,iBAAiBv9D,KAAKomE,IAAIp2D,EAAE,GAAGvR,EAAE8+D,iBAAiBv9D,KAAKomE,IAAI9mE,EAAE,IAAIU,KAAKomE,IAAIzuB,aAAa33C,KAAKkuE,yBAAyBluE,KAAKomE,IAAItiC,gBAAgB,GAAG3sB,OAAOnX,KAAK+tE,YAAW,EAAG/tE,KAAKqmF,uBAAuBrmF,KAAKomF,SAAQ,GAAIpmF,KAAKwmF,gBAAgBxmF,KAAKomE,IAAIpmE,KAAKmmF,aAAanmF,KAAKguE,oBAAmB,OAAQ+X,GAAGzjF,UAAUqpC,YAAY,WAAW,MAAM,IAAIo6C,GAAGzjF,UAAUspC,SAAS,WAAW,OAAOm6C,IAAIA,GAAGtX,mBAAmB,SAASpvE,EAAE2Q,GAAG,OAAO,IAAIpR,KAAKoiB,IAAI3hB,EAAE2Q,IAAI,IAAIg5B,GAAG,SAAS3pC,GAAG,SAAS2Q,IAAI3Q,EAAEuQ,KAAK5P,MAAMA,KAAKm4B,OAAO,IAAIqmB,GAAGx+C,KAAK0mF,UAAU,KAAK,OAAOrnF,IAAI2Q,EAAEgY,UAAU3oB,GAAG2Q,EAAE1N,UAAUoG,OAAOojC,OAAOzsC,GAAGA,EAAEiD,WAAW0N,EAAE1N,UAAUkJ,YAAYwE,EAAEA,EAAE1N,UAAUqkF,cAAc,WAAWruB,GAAGxyD,KAAK9F,KAAKm4B,QAAQ,IAAI,IAAI94B,EAAE,EAAEA,EAAEW,KAAKm4B,OAAO1D,OAAOp1B,IAAI,CAAC,IAAI2Q,EAAEhQ,KAAKm4B,OAAOvQ,IAAIvoB,GAAG2Q,EAAEu1E,YAAYv1E,EAAE01E,iBAAiBF,oBAAoBnmF,KAAK2Q,EAAE1N,UAAU+7E,qBAAqB,WAAW,GAAG,IAAIluE,UAAU5R,OAAO,CAAC,IAAIc,EAAE8Q,UAAU,GAAGnQ,KAAK0mF,UAAU,EAAE1mF,KAAK2mF,gBAAgB,IAAI,IAAI32E,EAAE,EAAEA,EAAEhQ,KAAKm4B,OAAO1D,OAAOzkB,IAAI,CAAC,IAAIvR,EAAEuB,KAAKm4B,OAAOvQ,IAAI5X,GAAG,GAAGvR,EAAEknF,YAAY3lF,KAAK4mF,gBAAgB52E,EAAEvR,EAAEonF,sBAAsBpnF,EAAEY,GAAGA,EAAEgjD,SAAS,YAAY,GAAG,IAAIlyC,UAAU5R,OAAO,GAAG4R,UAAU,aAAa41E,IAAIr4C,EAAEv9B,UAAU,GAAGouC,KAAK7Q,EAAEv9B,UAAU,GAAGouC,IAAI,CAAC,IAAIj/C,EAAE6Q,UAAU,GAAG6R,EAAE7R,UAAU,GAAGye,EAAEze,UAAU,GAAGnQ,KAAKo2D,SAAS92D,EAAEA,GAAGU,KAAKo2D,SAASp0C,EAAEA,GAAGhiB,KAAKq+E,qBAAqBzvD,QAAQ,GAAG,kBAAkBze,UAAU,IAAIu9B,EAAEv9B,UAAU,GAAGouC,KAAKpuC,UAAU,aAAa41E,GAAG,CAAC,IAAIjnF,EAAEqR,UAAU,GAAGzQ,EAAEyQ,UAAU,GAAGA,UAAU,GAAGnQ,KAAKo2D,SAASt3D,EAAE,MAAMkB,KAAKo2D,SAASt3D,GAAGkB,KAAKq+E,qBAAqB3+E,KAAKsQ,EAAE1N,UAAUukF,QAAQ,SAASxnF,EAAE2Q,GAAG,IAAI,IAAIvR,EAAEY,EAAEqxE,uBAAuBpxE,EAAEb,EAAEkxE,kBAAkB3tD,EAAE,EAAEA,EAAE1iB,EAAEf,OAAO,EAAEyjB,IAAI,CAAC,IAAI4M,EAAE,IAAIi2D,GAAGpmF,EAAEujB,GAAGljB,EAAE,IAAIkmF,GAAGh1E,EAAEvR,EAAEq0C,QAAQ9wB,GAAG4M,GAAG5uB,KAAKm4B,OAAO/E,IAAIt0B,GAAGkB,KAAKm4B,OAAO/E,IAAI,IAAI4xD,GAAGvmF,EAAEm0C,QAAQ5wB,GAAGljB,MAAMkR,EAAE1N,UAAUskF,gBAAgB,SAASvnF,EAAE2Q,EAAEvR,EAAEa,GAAG,IAAI,IAAI0iB,EAAEvjB,EAAEgnF,YAAY72D,EAAEvvB,EAAEuvB,EAAE5e,EAAE4e,IAAI,CAAC,IAAI9vB,EAAEkB,KAAKm4B,OAAOvQ,IAAIgH,GAAG,GAAG9vB,EAAE6mF,WAAW,CAAC,IAAIjmF,EAAEZ,EAAE2mF,YAAYhnF,EAAEmnF,YAAY9mF,KAAKkjB,EAAEq8D,qBAAqB3+E,EAAEJ,GAAGU,KAAK0mF,gBAAgB12E,EAAE1N,UAAU8zD,SAAS,WAAW,GAAG,IAAIjmD,UAAU5R,OAAO,IAAI,IAAIc,EAAE8Q,UAAU,GAAGoY,WAAWlpB,EAAE29C,WAAW,CAAC,IAAIhtC,EAAE3Q,EAAE+S,OAAOpS,KAAK6mF,QAAQ72E,EAAEA,QAAQ,GAAG,IAAIG,UAAU5R,OAAO,IAAI,IAAmBe,EAAE6Q,UAAU,GAAG6R,EAA5B7R,UAAU,GAAsBoY,WAAWvG,EAAEg7B,WAAW,CAAC,IAAIpuB,EAAE5M,EAAE5P,OAAOpS,KAAK6mF,QAAQj4D,EAAEtvB,KAAK0Q,EAAE1N,UAAUqpC,YAAY,WAAW,MAAM,IAAI37B,EAAE1N,UAAUspC,SAAS,WAAW,OAAO57B,GAAGA,EAAxyD,CAA2yD81E,IAAIgB,GAAG,WAAW9mF,KAAK+mF,KAAKx0D,EAAEwO,kBAAkB/gC,KAAKurE,KAAKh5C,EAAEyO,mBAAmBgmD,GAAG,CAACC,eAAe,CAAC52E,cAAa,IAAKy2E,GAAGxkF,UAAU4kF,OAAO,WAAW,OAAOlnF,KAAK+mF,MAAMD,GAAGxkF,UAAUP,WAAW,SAAS1C,EAAE2Q,GAAG,QAAQhQ,KAAK+mF,KAAK/2E,GAAGhQ,KAAKurE,KAAKlsE,IAAIynF,GAAGxkF,UAAU6kF,OAAO,WAAW,OAAOnnF,KAAKurE,MAAMub,GAAGxkF,UAAUkV,SAAS,WAAW,OAAOg1B,EAAEqJ,aAAa,IAAIlO,EAAE3nC,KAAK+mF,KAAK,GAAG,IAAIp/C,EAAE3nC,KAAKurE,KAAK,KAAKub,GAAGxkF,UAAUqpC,YAAY,WAAW,MAAM,IAAIm7C,GAAGxkF,UAAUspC,SAAS,WAAW,OAAOk7C,IAAIE,GAAGC,eAAer/D,IAAI,WAAW,OAAOw/D,IAAI1+E,OAAOyP,iBAAiB2uE,GAAGE,IAAI,IAAII,GAAG,aAAaA,GAAG9kF,UAAUjE,QAAQ,SAASgB,EAAE2Q,GAAG,IAAIvR,EAAEY,EAAEC,EAAE0Q,EAAEgS,GAAGvjB,EAAEsoF,KAAKtoF,EAAE8sE,MAAM,EAAE38C,GAAGtvB,EAAEynF,KAAKznF,EAAEisE,MAAM,EAAE,OAAOvpD,EAAE4M,GAAG,EAAE5M,EAAE4M,EAAE,EAAE,GAAGw4D,GAAG9kF,UAAUqpC,YAAY,WAAW,MAAM,CAACxnC,IAAIijF,GAAG9kF,UAAUspC,SAAS,WAAW,OAAOw7C,IAAI,IAAIC,GAAG,SAAShoF,GAAG,SAAS2Q,IAAI3Q,EAAEuQ,KAAK5P,MAAMA,KAAKo3D,MAAM,KAAK,IAAIpnD,EAAEG,UAAU,GAAG1R,EAAE0R,UAAU,GAAG7Q,EAAE6Q,UAAU,GAAGnQ,KAAK+mF,KAAK/2E,EAAEhQ,KAAKurE,KAAK9sE,EAAEuB,KAAKo3D,MAAM93D,EAAE,OAAOD,IAAI2Q,EAAEgY,UAAU3oB,GAAG2Q,EAAE1N,UAAUoG,OAAOojC,OAAOzsC,GAAGA,EAAEiD,WAAW0N,EAAE1N,UAAUkJ,YAAYwE,EAAEA,EAAE1N,UAAUu1D,MAAM,SAASx4D,EAAE2Q,EAAEvR,GAAG,IAAIuB,KAAK+B,WAAW1C,EAAE2Q,GAAG,OAAO,KAAKvR,EAAEk5D,UAAU33D,KAAKo3D,QAAQpnD,EAAE1N,UAAUqpC,YAAY,WAAW,MAAM,IAAI37B,EAAE1N,UAAUspC,SAAS,WAAW,OAAO57B,GAAGA,EAAja,CAAoa82E,IAAIQ,GAAG,SAASjoF,GAAG,SAAS2Q,IAAI3Q,EAAEuQ,KAAK5P,MAAMA,KAAKunF,OAAO,KAAKvnF,KAAKwnF,OAAO,KAAK,IAAIx3E,EAAEG,UAAU,GAAG1R,EAAE0R,UAAU,GAAGnQ,KAAKunF,OAAOv3E,EAAEhQ,KAAKwnF,OAAO/oF,EAAEuB,KAAKynF,YAAYznF,KAAKunF,OAAOvnF,KAAKwnF,QAAQ,OAAOnoF,IAAI2Q,EAAEgY,UAAU3oB,GAAG2Q,EAAE1N,UAAUoG,OAAOojC,OAAOzsC,GAAGA,EAAEiD,WAAW0N,EAAE1N,UAAUkJ,YAAYwE,EAAEA,EAAE1N,UAAUmlF,YAAY,SAASpoF,EAAE2Q,GAAGhQ,KAAK+mF,KAAKnoF,KAAKQ,IAAIC,EAAE0nF,KAAK/2E,EAAE+2E,MAAM/mF,KAAKurE,KAAK3sE,KAAKM,IAAIG,EAAEksE,KAAKv7D,EAAEu7D,OAAOv7D,EAAE1N,UAAUu1D,MAAM,SAASx4D,EAAE2Q,EAAEvR,GAAG,IAAIuB,KAAK+B,WAAW1C,EAAE2Q,GAAG,OAAO,KAAK,OAAOhQ,KAAKunF,QAAQvnF,KAAKunF,OAAO1vB,MAAMx4D,EAAE2Q,EAAEvR,GAAG,OAAOuB,KAAKwnF,QAAQxnF,KAAKwnF,OAAO3vB,MAAMx4D,EAAE2Q,EAAEvR,IAAIuR,EAAE1N,UAAUqpC,YAAY,WAAW,MAAM,IAAI37B,EAAE1N,UAAUspC,SAAS,WAAW,OAAO57B,GAAGA,EAAlnB,CAAqnB82E,IAAIY,GAAG,WAAW1nF,KAAK2nF,QAAQ,IAAInpC,GAAGx+C,KAAKizB,MAAM,KAAKjzB,KAAKg4D,OAAO,GAAG0vB,GAAGplF,UAAUslF,UAAU,WAAWtvB,GAAGxyD,KAAK9F,KAAK2nF,QAAQ,IAAIb,GAAGG,gBAAgB,IAAI,IAAI5nF,EAAEW,KAAK2nF,QAAQ33E,EAAE,KAAKvR,EAAE,IAAI+/C,KAAK,CAAC,GAAGx+C,KAAK6nF,WAAWxoF,EAAEZ,GAAG,IAAIA,EAAEg2B,OAAO,OAAOh2B,EAAEmpB,IAAI,GAAG5X,EAAE3Q,EAAEA,EAAEZ,EAAEA,EAAEuR,IAAI03E,GAAGplF,UAAUU,OAAO,SAAS3D,EAAE2Q,EAAEvR,GAAG,GAAG,OAAOuB,KAAKizB,MAAM,MAAM,IAAIjsB,MAAM,qDAAqDhH,KAAK2nF,QAAQv0D,IAAI,IAAIi0D,GAAGhoF,EAAE2Q,EAAEvR,KAAKipF,GAAGplF,UAAUu1D,MAAM,SAASx4D,EAAE2Q,EAAEvR,GAAGuB,KAAKma,OAAOna,KAAKizB,MAAM4kC,MAAMx4D,EAAE2Q,EAAEvR,IAAIipF,GAAGplF,UAAUwlF,UAAU,WAAW,GAAG,OAAO9nF,KAAKizB,MAAM,OAAO,KAAKjzB,KAAKizB,MAAMjzB,KAAK4nF,aAAaF,GAAGplF,UAAUwwB,UAAU,SAASzzB,GAAGktC,EAAE1Z,IAAIgmB,QAAQrM,EAAEqJ,aAAa,IAAIlO,EAAEtoC,EAAE0nF,KAAK/mF,KAAKg4D,QAAQ,IAAIrwB,EAAEtoC,EAAEksE,KAAKvrE,KAAKg4D,WAAW0vB,GAAGplF,UAAU6X,KAAK,WAAW,GAAG,OAAOna,KAAKizB,MAAM,OAAO,KAAKjzB,KAAK8nF,aAAaJ,GAAGplF,UAAUulF,WAAW,SAASxoF,EAAE2Q,GAAGhQ,KAAKg4D,SAAShoD,EAAE3P,QAAQ,IAAI,IAAI5B,EAAE,EAAEA,EAAEY,EAAEo1B,OAAOh2B,GAAG,EAAE,CAAC,IAAIa,EAAED,EAAEuoB,IAAInpB,GAAG,GAAG,QAAQA,EAAE,EAAEY,EAAEo1B,OAAOp1B,EAAEuoB,IAAInpB,GAAG,MAAMuR,EAAEojB,IAAI9zB,OAAO,CAAC,IAAI0iB,EAAE,IAAIslE,GAAGjoF,EAAEuoB,IAAInpB,GAAGY,EAAEuoB,IAAInpB,EAAE,IAAIuR,EAAEojB,IAAIpR,MAAM0lE,GAAGplF,UAAUqpC,YAAY,WAAW,MAAM,IAAI+7C,GAAGplF,UAAUspC,SAAS,WAAW,OAAO87C,IAAI,IAAIK,GAAG,WAAW/nF,KAAKu3D,OAAO,IAAI/Y,IAAIupC,GAAGzlF,UAAUq1D,UAAU,SAASt4D,GAAGW,KAAKu3D,OAAOnkC,IAAI/zB,IAAI0oF,GAAGzlF,UAAU0lF,SAAS,WAAW,OAAOhoF,KAAKu3D,QAAQwwB,GAAGzlF,UAAUqpC,YAAY,WAAW,MAAM,CAAC+rB,KAAKqwB,GAAGzlF,UAAUspC,SAAS,WAAW,OAAOm8C,IAAI,IAAIE,GAAG,WAAWjoF,KAAK2+B,OAAO,KAAK,IAAIt/B,EAAE8Q,UAAU,GAAG,IAAIu9B,EAAEruC,EAAE8lD,IAAI,MAAM,IAAIzmD,EAAE,8BAA8BsB,KAAK2+B,OAAO,IAAIupD,GAAG7oF,IAAI8oF,GAAG,CAACC,eAAe,CAAC/3E,cAAa,GAAIg4E,wBAAwB,CAACh4E,cAAa,IAAK43E,GAAG3lF,UAAU6oE,OAAO,SAAS9rE,GAAG,IAAI2Q,EAAE,IAAIkpC,GAAG75C,GAAGZ,EAAE,IAAI6pF,GAAGt4E,GAAG,OAAOhQ,KAAK2+B,OAAOk5B,MAAMx4D,EAAE+U,EAAE/U,EAAE+U,EAAE3V,GAAGuR,EAAEwpC,eAAeyuC,GAAG3lF,UAAUqpC,YAAY,WAAW,MAAM,CAACu/B,KAAK+c,GAAG3lF,UAAUspC,SAAS,WAAW,OAAOq8C,IAAIE,GAAGC,eAAexgE,IAAI,WAAW,OAAO0gE,IAAIH,GAAGE,wBAAwBzgE,IAAI,WAAW,OAAOsgE,IAAIx/E,OAAOyP,iBAAiB8vE,GAAGE,IAAI,IAAIG,GAAG,WAAWtoF,KAAKuoF,SAAS,KAAK,IAAIlpF,EAAE8Q,UAAU,GAAGnQ,KAAKuoF,SAASlpF,GAAGipF,GAAGhmF,UAAUq1D,UAAU,SAASt4D,GAAG,IAAI2Q,EAAE3Q,EAAEW,KAAKuoF,SAASjvC,aAAatpC,EAAE2hC,cAAc,GAAG3hC,EAAE2hC,cAAc,KAAK22C,GAAGhmF,UAAUqpC,YAAY,WAAW,MAAM,CAAC+rB,KAAK4wB,GAAGhmF,UAAUspC,SAAS,WAAW,OAAO08C,IAAI,IAAIJ,GAAG,WAAWloF,KAAK2+B,OAAO,IAAI+oD,GAAG,IAAIroF,EAAE8Q,UAAU,GAAGnQ,KAAKma,KAAK9a,IAAI6oF,GAAG5lF,UAAU6X,KAAK,SAAS9a,GAAG,IAAI,IAAI2Q,EAAEunE,GAAGI,SAASt4E,GAAGkpB,WAAWvY,EAAEgtC,WAAW,CAAC,IAAIv+C,EAAEuR,EAAEoC,OAAOowC,iBAAiBxiD,KAAKwoF,QAAQ/pF,KAAKypF,GAAG5lF,UAAUkmF,QAAQ,SAASnpF,GAAG,IAAI,IAAI2Q,EAAE,EAAEA,EAAE3Q,EAAEd,OAAOyR,IAAI,CAAC,IAAIvR,EAAE,IAAIg/D,GAAGp+D,EAAE2Q,EAAE,GAAG3Q,EAAE2Q,IAAI1Q,EAAEV,KAAKQ,IAAIX,EAAEi/D,GAAGtpD,EAAE3V,EAAEkV,GAAGS,GAAG4N,EAAEpjB,KAAKM,IAAIT,EAAEi/D,GAAGtpD,EAAE3V,EAAEkV,GAAGS,GAAGpU,KAAK2+B,OAAO37B,OAAO1D,EAAE0iB,EAAEvjB,KAAKypF,GAAG5lF,UAAUu1D,MAAM,WAAW,GAAG,IAAI1nD,UAAU5R,OAAO,CAAC,IAAIc,EAAE8Q,UAAU,GAAGH,EAAEG,UAAU,GAAG1R,EAAE,IAAIspF,GAAG,OAAO/nF,KAAK2+B,OAAOk5B,MAAMx4D,EAAE2Q,EAAEvR,GAAGA,EAAEupF,WAAW,GAAG,IAAI73E,UAAU5R,OAAO,CAAC,IAAIe,EAAE6Q,UAAU,GAAG6R,EAAE7R,UAAU,GAAGye,EAAEze,UAAU,GAAGnQ,KAAK2+B,OAAOk5B,MAAMv4D,EAAE0iB,EAAE4M,KAAKs5D,GAAG5lF,UAAUqpC,YAAY,WAAW,MAAM,IAAIu8C,GAAG5lF,UAAUspC,SAAS,WAAW,OAAOs8C,IAAI,IAAIO,GAAG,SAASppF,GAAG,SAAS2Q,IAAI,GAAG3Q,EAAEuQ,KAAK5P,MAAMA,KAAK0oF,YAAY,KAAK1oF,KAAK2oF,aAAa,IAAIthC,GAAGrnD,KAAK4oF,kBAAkB,KAAK5oF,KAAK6oF,+BAA8B,EAAG7oF,KAAK8oF,UAAU,KAAK9oF,KAAK+oF,eAAe,KAAK/oF,KAAKgpF,kBAAiB,EAAGhpF,KAAKipF,cAAc,KAAKjpF,KAAKkpF,eAAe,KAAKlpF,KAAKi5E,WAAW,IAAIrB,GAAG,IAAIznE,UAAU5R,OAAO,CAAC,IAAIyR,EAAEG,UAAU,GAAG1R,EAAE0R,UAAU,GAAG7Q,EAAEiwC,GAAGwO,sBAAsB/9C,KAAK8oF,UAAU94E,EAAEhQ,KAAK0oF,YAAYjqF,EAAEuB,KAAK4oF,kBAAkBtpF,EAAE,OAAOb,GAAGuB,KAAKozB,IAAI30B,QAAQ,GAAG,IAAI0R,UAAU5R,OAAO,CAAC,IAAIyjB,EAAE7R,UAAU,GAAGye,EAAEze,UAAU,GAAGrR,EAAEqR,UAAU,GAAGnQ,KAAK8oF,UAAU9mE,EAAEhiB,KAAK0oF,YAAY95D,EAAE5uB,KAAK4oF,kBAAkB9pF,EAAE,OAAO8vB,GAAG5uB,KAAKozB,IAAIxE,IAAI,OAAOvvB,IAAI2Q,EAAEgY,UAAU3oB,GAAG2Q,EAAE1N,UAAUoG,OAAOojC,OAAOzsC,GAAGA,EAAEiD,WAAW0N,EAAE1N,UAAUkJ,YAAYwE,EAAEA,EAAE1N,UAAU6mF,oBAAoB,SAAS9pF,EAAEZ,GAAG,IAAIa,EAAEU,KAAKssD,OAAO8F,QAAQ3zD,GAAG+wD,WAAWxtC,EAAE,EAAEslB,EAAEkG,KAAKluC,EAAEk6C,YAAYn6C,EAAEmrD,GAAGE,MAAMpjB,EAAEgG,UAAUtrB,IAAI,IAAI4M,EAAE5e,EAAEo5E,kBAAkBppF,KAAK4oF,kBAAkB5mE,GAAG1iB,EAAE8uD,YAAY/uD,EAAEuvB,IAAI5e,EAAE1N,UAAU+mF,iBAAiB,WAAW,GAAG,IAAIl5E,UAAU5R,OAAO,CAAC,IAAIc,EAAE8Q,UAAU,GAAGH,EAAEG,UAAU,GAAG,OAAOnQ,KAAKqpF,iBAAiBhqF,EAAE2Q,GAAE,GAAI,GAAG,IAAIG,UAAU5R,OAAO,CAAC,IAAmBe,EAAE6Q,UAAU,GAAG6R,EAAE7R,UAAU,GAAGye,EAAE,IAAIm3D,GAAjD51E,UAAU,IAA4C,GAAG,GAAIye,EAAE03D,qBAAqBtkE,GAAG,IAAIljB,EAAEkB,KAAKspF,2BAA2B5pF,EAAEM,KAAK0oF,uBAAuBhjC,IAAI1lD,KAAK0oF,uBAAuBtjC,IAAIplD,KAAK0oF,uBAAuB7iC,GAAGpf,EAAEnnC,IAAII,EAAE,OAAOZ,EAAEu/E,qBAAqBr+E,KAAK+uD,OAAOngC,EAAE6X,GAAGzmC,KAAKupF,yBAAyBvpF,KAAK8oF,WAAWl6D,IAAI5e,EAAE1N,UAAUknF,kBAAkB,SAASnqF,GAAG,IAAI,IAAI2Q,EAAEhQ,KAAK+uD,OAAOxmC,WAAWvY,EAAEgtC,WAAYhtC,EAAEoC,OAAOmjD,OAAO+G,cAAcj9D,IAAK2Q,EAAE1N,UAAUmnF,yBAAyB,SAASpqF,EAAE2Q,EAAEvR,GAAG,IAAIa,EAAE,IAAIymF,GAAG/1E,EAAEvR,GAAE,GAAqE,OAAjEa,EAAEmnF,iBAAiBzmF,KAAKqyD,mBAAmBhzD,EAAEgzD,oBAA2BryD,KAAKspF,2BAA2BjL,qBAAqBr+E,KAAK+uD,OAAO1vD,EAAE0vD,OAAOzvD,GAAGA,GAAG0Q,EAAE1N,UAAUiqE,YAAY,WAAW,OAAOvsE,KAAK0oF,aAAa14E,EAAE1N,UAAU8pE,oBAAoB,WAAW,OAAOpsE,KAAK4oF,mBAAmB54E,EAAE1N,UAAUonF,gBAAgB,WAAW,OAAO1pF,KAAKgpF,kBAAkBh5E,EAAE1N,UAAUmoE,SAAS,WAAW,GAAGt6D,UAAU,aAAa+0C,GAAG,CAAC,IAAI7lD,EAAE8Q,UAAU,GAAGwhC,gBAAgB3xC,KAAK2pF,YAAY3pF,KAAK8oF,UAAUzpF,EAAEioC,EAAE+F,eAAe,GAAGl9B,UAAU,aAAaw3B,EAAE,CAAC,IAAI33B,EAAEG,UAAU,GAAGnQ,KAAK2pF,YAAY3pF,KAAK8oF,UAAU94E,EAAEs3B,EAAE+F,YAAYr9B,EAAE1N,UAAUqoE,WAAW,SAAStrE,GAAGW,KAAK6qE,eAAexrE,EAAEimD,kBAAkBhe,EAAEiG,SAASjG,EAAE+F,UAAU,IAAI,IAAIr9B,EAAE,EAAEA,EAAE3Q,EAAEgmD,qBAAqBr1C,IAAI,CAAC,IAAIvR,EAAEY,EAAEkmD,iBAAiBv1C,GAAGhQ,KAAK6qE,eAAepsE,EAAE6oC,EAAE+F,SAAS/F,EAAEiG,YAAYv9B,EAAE1N,UAAUukF,QAAQ,SAASxnF,GAAGW,KAAKk2D,WAAW72D,GAAG,IAAI2Q,EAAE3Q,EAAEmjD,iBAAiBxiD,KAAK2pF,YAAY3pF,KAAK8oF,UAAU94E,EAAE,GAAGs3B,EAAEgG,UAAUttC,KAAK2pF,YAAY3pF,KAAK8oF,UAAU94E,EAAEA,EAAEzR,OAAO,GAAG+oC,EAAEgG,WAAWt9B,EAAE1N,UAAUyoE,cAAc,SAAS1rE,GAAG,IAAI2Q,EAAEgvC,GAAGU,qBAAqBrgD,EAAEmjD,kBAAkB,GAAGxyC,EAAEzR,OAAO,EAAE,OAAOyB,KAAKgpF,kBAAiB,EAAGhpF,KAAKipF,cAAcj5E,EAAE,GAAG,KAAK,IAAIvR,EAAE,IAAI2wE,GAAGp/D,EAAE,IAAIu+C,GAAGvuD,KAAK8oF,UAAUxhD,EAAE+F,WAAWrtC,KAAK2oF,aAAatoC,IAAIhhD,EAAEZ,GAAGuB,KAAKk2D,WAAWz3D,GAAGu3C,GAAGE,OAAOlmC,EAAEzR,QAAQ,EAAE,sCAAsCyB,KAAKmpF,oBAAoBnpF,KAAK8oF,UAAU94E,EAAE,IAAIhQ,KAAKmpF,oBAAoBnpF,KAAK8oF,UAAU94E,EAAEA,EAAEzR,OAAO,KAAKyR,EAAE1N,UAAUsnF,gBAAgB,WAAW,OAAO5pF,KAAKipF,eAAej5E,EAAE1N,UAAUunF,kBAAkB,WAAW,IAAI,IAAIxqF,EAAEW,KAAKqyD,mBAAmBriD,EAAE,IAAI/I,MAAM5H,EAAEo1B,QAAQqc,KAAK,MAAMryC,EAAE,EAAEa,EAAED,EAAEkpB,WAAWjpB,EAAE09C,WAAW,CAAC,IAAIh7B,EAAE1iB,EAAE8S,OAAOpC,EAAEvR,KAAKujB,EAAE2vB,gBAAgBx6B,OAAO,OAAOnH,GAAGA,EAAE1N,UAAU+vD,iBAAiB,WAAW,OAAO,OAAOryD,KAAK+oF,iBAAiB/oF,KAAK+oF,eAAe/oF,KAAKssD,OAAO+F,iBAAiBryD,KAAK8oF,YAAY9oF,KAAK+oF,gBAAgB/4E,EAAE1N,UAAUwnF,wBAAwB,SAASzqF,EAAE2Q,EAAEvR,GAAG,GAAGuB,KAAK21D,eAAet2D,EAAE2Q,GAAG,OAAO,KAAKvR,IAAI6oC,EAAEgG,UAAUttC,KAAK6oF,8BAA8B7oF,KAAKmpF,oBAAoB9pF,EAAE2Q,GAAGhQ,KAAK2pF,YAAYtqF,EAAE2Q,EAAEvR,IAAIuR,EAAE1N,UAAUuoE,eAAe,SAASxrE,EAAE2Q,EAAEvR,GAAG,GAAGY,EAAE21B,UAAU,OAAO,KAAK,IAAI11B,EAAE0/C,GAAGU,qBAAqBrgD,EAAEmjD,kBAAkB,GAAGljD,EAAEf,OAAO,EAAE,OAAOyB,KAAKgpF,kBAAiB,EAAGhpF,KAAKipF,cAAc3pF,EAAE,GAAG,KAAK,IAAI0iB,EAAEhS,EAAE4e,EAAEnwB,EAAE21B,GAAGgmB,MAAM96C,KAAK0iB,EAAEvjB,EAAEmwB,EAAE5e,GAAG,IAAIlR,EAAE,IAAIswE,GAAG9vE,EAAE,IAAIivD,GAAGvuD,KAAK8oF,UAAUxhD,EAAEgG,SAAStrB,EAAE4M,IAAI5uB,KAAK2oF,aAAatoC,IAAIhhD,EAAEP,GAAGkB,KAAKk2D,WAAWp3D,GAAGkB,KAAK2pF,YAAY3pF,KAAK8oF,UAAUxpF,EAAE,GAAGgoC,EAAEgG,WAAWt9B,EAAE1N,UAAUqnF,YAAY,SAAStqF,EAAE2Q,EAAEvR,GAAG,IAAIa,EAAEU,KAAKssD,OAAO8F,QAAQpiD,GAAGgS,EAAE1iB,EAAEkwD,WAAW,OAAOxtC,EAAE1iB,EAAE2vD,OAAO,IAAIV,GAAGlvD,EAAEZ,GAAGujB,EAAEosC,YAAY/uD,EAAEZ,IAAIuR,EAAE1N,UAAUgnF,yBAAyB,WAAW,OAAO,IAAItgD,IAAIh5B,EAAE1N,UAAUinF,yBAAyB,SAASlqF,GAAG,IAAI,IAAI2Q,EAAEhQ,KAAK+uD,OAAOxmC,WAAWvY,EAAEgtC,WAAW,IAAI,IAAIv+C,EAAEuR,EAAEoC,OAAO9S,EAAEb,EAAE+wD,WAAWhW,YAAYn6C,GAAG2iB,EAAEvjB,EAAE82D,OAAOhtC,WAAWvG,EAAEg7B,WAAW,CAAC,IAAIpuB,EAAE5M,EAAE5P,OAAOpS,KAAK8pF,wBAAwBzqF,EAAEuvB,EAAE/wB,MAAMyB,KAAK0Q,EAAE1N,UAAU8wB,IAAI,WAAW,GAAG,IAAIjjB,UAAU5R,OAAO,OAAOc,EAAEiD,UAAU8wB,IAAIlvB,MAAMlE,KAAKmQ,WAAW,IAAIH,EAAEG,UAAU,GAAG,GAAGH,EAAEglB,UAAU,OAAO,KAAK,GAAGhlB,aAAa61C,KAAK7lD,KAAK6oF,+BAA8B,GAAI74E,aAAao1C,GAAGplD,KAAK2qE,WAAW36D,QAAQ,GAAGA,aAAawzC,GAAGxjD,KAAK+qE,cAAc/6D,QAAQ,GAAGA,aAAak1C,GAAGllD,KAAKyqE,SAASz6D,QAAQ,GAAGA,aAAaw1C,GAAGxlD,KAAKirE,cAAcj7D,QAAQ,GAAGA,aAAa6yC,GAAG7iD,KAAKirE,cAAcj7D,QAAQ,GAAGA,aAAa61C,GAAG7lD,KAAKirE,cAAcj7D,OAAO,CAAC,KAAKA,aAAauyC,IAAI,MAAM,IAAIv7C,MAAMgJ,EAAE47B,WAAW6a,WAAWzmD,KAAKirE,cAAcj7D,KAAKA,EAAE1N,UAAU2oE,cAAc,SAAS5rE,GAAG,IAAI,IAAI2Q,EAAE,EAAEA,EAAE3Q,EAAE88C,mBAAmBnsC,IAAI,CAAC,IAAIvR,EAAEY,EAAEq8C,aAAa1rC,GAAGhQ,KAAKozB,IAAI30B,KAAKuR,EAAE1N,UAAU6oE,OAAO,SAAS9rE,GAAG,OAAOquC,EAAE1tC,KAAK0oF,YAAYvjC,KAAKnlD,KAAK0oF,YAAYvsC,mBAAmB,IAAI,OAAOn8C,KAAKkpF,iBAAiBlpF,KAAKkpF,eAAe,IAAIjB,GAAGjoF,KAAK0oF,cAAc1oF,KAAKkpF,eAAe/d,OAAO9rE,IAAIW,KAAKi5E,WAAW9N,OAAO9rE,EAAEW,KAAK0oF,cAAc14E,EAAE1N,UAAUupD,SAAS,WAAW,GAAG,IAAI17C,UAAU5R,OAAO,CAAC,IAAIyR,EAAEG,UAAU,GAAG,OAAOnQ,KAAK2oF,aAAa/gE,IAAI5X,GAAG,OAAO3Q,EAAEiD,UAAUupD,SAAS3nD,MAAMlE,KAAKmQ,YAAYH,EAAE1N,UAAUqpC,YAAY,WAAW,MAAM,IAAI37B,EAAE1N,UAAUspC,SAAS,WAAW,OAAO57B,GAAGA,EAAEo5E,kBAAkB,SAAS/pF,EAAE2Q,GAAG,OAAO3Q,EAAE2+C,aAAahuC,GAAGs3B,EAAEgG,SAAShG,EAAE+F,UAAUr9B,EAAlmL,CAAqmLolD,IAAI20B,GAAG,WAAW,GAAG/pF,KAAKomE,IAAI,IAAIhuB,GAAGp4C,KAAKgqF,sBAAsB,KAAKhqF,KAAKiqF,KAAK,KAAK,IAAI95E,UAAU5R,OAAO,CAAC,IAAIc,EAAE8Q,UAAU,GAAGnQ,KAAKkqF,wBAAwB7qF,EAAEu9C,qBAAqB58C,KAAKiqF,KAAK,IAAIhjF,MAAM,GAAG6pC,KAAK,MAAM9wC,KAAKiqF,KAAK,GAAG,IAAIxB,GAAG,EAAEppF,QAAQ,GAAG,IAAI8Q,UAAU5R,OAAO,CAAC,IAAIyR,EAAEG,UAAU,GAAG1R,EAAE0R,UAAU,GAAG7Q,EAAEiwC,GAAGwO,sBAAsB/tC,EAAE4sC,oBAAoB9P,UAAUruC,EAAEm+C,sBAAsB,EAAE58C,KAAKkqF,wBAAwBl6E,EAAE4sC,qBAAqB58C,KAAKkqF,wBAAwBzrF,EAAEm+C,qBAAqB58C,KAAKiqF,KAAK,IAAIhjF,MAAM,GAAG6pC,KAAK,MAAM9wC,KAAKiqF,KAAK,GAAG,IAAIxB,GAAG,EAAEz4E,EAAE1Q,GAAGU,KAAKiqF,KAAK,GAAG,IAAIxB,GAAG,EAAEhqF,EAAEa,QAAQ,GAAG,IAAI6Q,UAAU5R,OAAO,CAAC,IAAIyjB,EAAE7R,UAAU,GAAGye,EAAEze,UAAU,GAAGrR,EAAEqR,UAAU,GAAG6R,EAAE46B,oBAAoB9P,UAAUle,EAAEguB,sBAAsB,EAAE58C,KAAKkqF,wBAAwBloE,EAAE46B,qBAAqB58C,KAAKkqF,wBAAwBt7D,EAAEguB,qBAAqB58C,KAAKiqF,KAAK,IAAIhjF,MAAM,GAAG6pC,KAAK,MAAM9wC,KAAKiqF,KAAK,GAAG,IAAIxB,GAAG,EAAEzmE,EAAEljB,GAAGkB,KAAKiqF,KAAK,GAAG,IAAIxB,GAAG,EAAE75D,EAAE9vB,KAAKirF,GAAGznF,UAAU88E,eAAe,SAAS//E,GAAG,OAAOW,KAAKiqF,KAAK5qF,GAAGktE,eAAewd,GAAGznF,UAAU4nF,wBAAwB,SAAS7qF,GAAGW,KAAKgqF,sBAAsB3qF,EAAEW,KAAKomE,IAAIvuB,kBAAkB73C,KAAKgqF,wBAAwBD,GAAGznF,UAAUqpC,YAAY,WAAW,MAAM,IAAIo+C,GAAGznF,UAAUspC,SAAS,WAAW,OAAOm+C,IAAI,IAAII,GAAG,aAAaA,GAAG7nF,UAAUqpC,YAAY,WAAW,MAAM,IAAIw+C,GAAG7nF,UAAUspC,SAAS,WAAW,OAAOu+C,IAAIA,GAAGjgF,IAAI,WAAW,GAAGiG,UAAU,aAAasqC,IAAI/M,EAAEv9B,UAAU,GAAGg6E,GAAGC,OAAO,CAAC,IAAI,IAAI/qF,EAAE8Q,UAAU,GAAGH,EAAEG,UAAU,GAAG1R,EAAE,IAAI+/C,GAAGl/C,EAAE,EAAEA,EAAED,EAAE88C,mBAAmB78C,IAAI,CAAC,IAAI0iB,EAAEhS,EAAE9F,IAAI7K,EAAEq8C,aAAap8C,IAAI,OAAO0iB,GAAGvjB,EAAE20B,IAAIpR,GAAG,OAAO3iB,EAAEo8C,aAAaoN,cAAcpqD,GAAG,GAAGivC,EAAEv9B,UAAU,GAAGo7B,KAAKmC,EAAEv9B,UAAU,GAAGg6E,GAAGC,OAAO,CAAC,IAAI,IAAIx7D,EAAEze,UAAU,GAAGrR,EAAEqR,UAAU,GAAGzQ,EAAE,IAAI8+C,GAAG/X,EAAE7X,EAAErG,WAAWke,EAAEuW,WAAW,CAAC,IAAIjxC,EAAE06B,EAAEr0B,OAAOO,EAAE7T,EAAEoL,IAAI6B,GAAG,OAAO4G,GAAGjT,EAAE0zB,IAAIzgB,GAAG,OAAOjT,IAAIyqF,GAAGC,MAAM,aAAa,IAAI9K,GAAG,SAASjgF,GAAG,SAAS2Q,IAAI,IAAIA,EAAEG,UAAU,GAAG1R,EAAE0R,UAAU,GAAG9Q,EAAEuQ,KAAK5P,KAAKgQ,EAAEvR,GAAGuB,KAAKi5E,WAAW,IAAIrB,GAAG53E,KAAKijD,UAAU,KAAKjjD,KAAKqqF,YAAY,KAAKrqF,KAAKixE,OAAO,KAAKjxE,KAAK8rE,UAAU,IAAI0B,GAAGxtE,KAAKsqF,gBAAgB,IAAI9rC,GAAGx+C,KAAK8+E,gBAAgB,IAAItgC,GAAGx+C,KAAK4/E,iBAAiB,IAAIphC,GAAGx+C,KAAKixE,OAAO,IAAI7b,GAAG,IAAI+X,IAAIntE,KAAKijD,UAAUjzC,EAAEyrC,aAAa,OAAOp8C,IAAI2Q,EAAEgY,UAAU3oB,GAAG2Q,EAAE1N,UAAUoG,OAAOojC,OAAOzsC,GAAGA,EAAEiD,WAAW0N,EAAE1N,UAAUkJ,YAAYwE,EAAEA,EAAE1N,UAAU6uE,iBAAiB,SAAS9xE,GAAG,IAAI2Q,EAAEhQ,KAAK8rE,UAAU6B,cAActuE,GAAG,GAAG,OAAO2Q,EAAE,CAAC,IAAIvR,EAAEuR,EAAEw/C,WAAWlwD,EAAED,EAAEmwD,WAAWx/C,EAAE2gE,iBAAiBtxE,KAAKC,EAAE,IAAIivD,GAAGlvD,EAAEmwD,aAAaxB,OAAO,IAAIhsC,EAAEhS,EAAEo9C,WAAWprC,EAAE2wB,UAAU3wB,EAAEoR,IAAI30B,GAAGujB,EAAEoR,IAAI9zB,GAAGb,EAAE+zB,MAAMlzB,QAAQU,KAAK8rE,UAAU14C,IAAI/zB,IAAI2Q,EAAE1N,UAAU08E,SAAS,WAAW,OAAOh/E,KAAKixE,QAAQjhE,EAAE1N,UAAUioF,2BAA2B,WAAW,IAAI,IAAIlrF,EAAEW,KAAKixE,OAAOnb,cAAcvtC,WAAWlpB,EAAE29C,WAAW,CAAC,IAAIhtC,EAAE3Q,EAAE+S,OAAO3T,EAAEuR,EAAE47C,SAAS57C,EAAEupB,cAAc96B,EAAE86B,eAAevpB,EAAEs9C,aAAY,GAAI7uD,EAAE6uD,aAAY,MAAOt9C,EAAE1N,UAAUw9E,cAAc,SAASzgF,GAAG,QAAQW,KAAKoxD,UAAU/xD,EAAEW,KAAK8+E,oBAAoB9+E,KAAKoxD,UAAU/xD,EAAEW,KAAKsqF,kBAAkBt6E,EAAE1N,UAAUyzE,gBAAgB,SAAS12E,EAAEZ,EAAEa,EAAE0iB,GAAG,IAAI4M,EAAE,IAAI4vB,GAAG,OAAO5vB,EAAE4c,OAAOnsC,GAAGuvB,EAAE4c,OAAO/sC,GAAGmwB,EAAE4c,OAAOlsC,GAAGsvB,EAAEoG,UAAUhlB,EAAEw6E,kBAAkBxoE,EAAEhiB,KAAKiqF,KAAK,GAAG1d,cAAcvsE,KAAKiqF,KAAK,GAAG1d,cAAcvsE,KAAKijD,WAAWjjD,KAAKijD,UAAU4F,cAAcj6B,IAAI5e,EAAE1N,UAAU2qE,eAAe,WAAW,IAAI,IAAI5tE,EAAEW,KAAKixE,OAAOzjB,WAAWjlC,WAAWlpB,EAAE29C,WAAY39C,EAAE+S,OAAOq5C,WAAWwhB,kBAAmBj9D,EAAE1N,UAAU8uD,UAAU,SAAS/xD,EAAE2Q,GAAG,IAAI,IAAIvR,EAAEuR,EAAEuY,WAAW9pB,EAAEu+C,WAAW,CAAC,IAAI19C,EAAEb,EAAE2T,OAAO,GAAGpS,KAAKi5E,WAAW9N,OAAO9rE,EAAEC,KAAKgoC,EAAEiG,SAAS,OAAM,EAAG,OAAM,GAAIv9B,EAAE1N,UAAUmoF,sBAAsB,WAAW,IAAI,IAAIprF,EAAE,IAAIm/C,GAAGxuC,EAAEhQ,KAAK8rE,UAAUvjD,WAAWvY,EAAEgtC,WAAW,CAAC,IAAIv+C,EAAEuR,EAAEoC,OAAO3T,EAAE+xE,gBAAgBxgE,EAAE1M,SAASjE,EAAE+zB,IAAI30B,EAAE4xE,qBAAqBrwE,KAAK8rE,UAAUtgC,OAAOnsC,IAAI2Q,EAAE1N,UAAUooF,oBAAoB,WAAW,IAAI,IAAIrrF,EAAEW,KAAKixE,OAAOzjB,WAAWjlC,WAAWlpB,EAAE29C,WAAW,CAAC,IAAIhtC,EAAE3Q,EAAE+S,OAAO3T,EAAEuR,EAAEy7C,WAAW+D,WAAWx/C,EAAEw/C,WAAWh9B,MAAM/zB,KAAKuR,EAAE1N,UAAU2zE,kBAAkB,SAAS52E,GAAG,OAAOW,KAAK2qF,eAAetrF,GAAGW,KAAKqqF,aAAar6E,EAAE1N,UAAUsoF,kBAAkB,SAASvrF,GAAG,IAAI,IAAI2Q,EAAE3Q,EAAEkpB,WAAWvY,EAAEgtC,WAAW,CAAC,IAAIv+C,EAAEuR,EAAEoC,OAAOpS,KAAKmxE,iBAAiB1yE,KAAKuR,EAAE1N,UAAUqoF,eAAe,SAAStrF,GAAGW,KAAK6qF,WAAW,GAAG7qF,KAAK6qF,WAAW,GAAG7qF,KAAKiqF,KAAK,GAAGZ,iBAAiBrpF,KAAKomE,KAAI,GAAIpmE,KAAKiqF,KAAK,GAAGZ,iBAAiBrpF,KAAKomE,KAAI,GAAIpmE,KAAKiqF,KAAK,GAAGR,yBAAyBzpF,KAAKiqF,KAAK,GAAGjqF,KAAKomE,KAAI,GAAI,IAAIp2D,EAAE,IAAIwuC,GAAGx+C,KAAKiqF,KAAK,GAAGT,kBAAkBx5E,GAAGhQ,KAAKiqF,KAAK,GAAGT,kBAAkBx5E,GAAGhQ,KAAK4qF,kBAAkB56E,GAAGhQ,KAAK8qF,0BAA0B9qF,KAAKyqF,wBAAwBnM,GAAG1L,WAAW5yE,KAAK8rE,UAAUrgB,YAAYzrD,KAAKixE,OAAO7a,SAASp2D,KAAK8rE,UAAUrgB,YAAYzrD,KAAKwsE,mBAAmBxsE,KAAK+qF,uBAAuB/qF,KAAKgrF,oBAAoB3rF,GAAGW,KAAKuqF,6BAA6B,IAAI9rF,EAAE,IAAI43D,GAAGr2D,KAAKijD,WAAWxkD,EAAE20B,IAAIpzB,KAAKixE,QAAQjxE,KAAKsqF,gBAAgB7rF,EAAEs4D,cAAc,IAAIz3D,EAAE,IAAIq/E,GAAG3+E,KAAKA,KAAKijD,UAAUjjD,KAAKi5E,YAAYj5E,KAAK8+E,gBAAgBx/E,EAAEu6D,MAAMx6D,GAAG,IAAI2iB,EAAE,IAAI29D,GAAG3/E,KAAKA,KAAKijD,UAAUjjD,KAAKi5E,YAAYj5E,KAAK4/E,iBAAiB59D,EAAE63C,MAAMx6D,GAAGW,KAAKqqF,YAAYrqF,KAAK+1E,gBAAgB/1E,KAAK4/E,iBAAiB5/E,KAAK8+E,gBAAgB9+E,KAAKsqF,gBAAgBjrF,IAAI2Q,EAAE1N,UAAU2oF,oBAAoB,SAAS5rF,EAAE2Q,GAAG,IAAIvR,EAAEuB,KAAKi5E,WAAW9N,OAAO9rE,EAAEsyC,gBAAgB3xC,KAAKiqF,KAAKj6E,GAAGu8D,eAAeltE,EAAEmwD,WAAWpB,YAAYp+C,EAAEvR,IAAIuR,EAAE1N,UAAUuoF,WAAW,SAASxrF,GAAG,IAAI,IAAI2Q,EAAEhQ,KAAKiqF,KAAK5qF,GAAGm2D,kBAAkBxlD,EAAEgtC,WAAW,CAAC,IAAIv+C,EAAEuR,EAAEoC,OAAOpS,KAAKixE,OAAO7e,QAAQ3zD,EAAEkzC,iBAAiB2f,SAASjyD,EAAEZ,EAAE+wD,WAAWhW,YAAYn6C,MAAM2Q,EAAE1N,UAAU0oF,oBAAoB,SAAS3rF,GAAG,IAAI,IAAIZ,EAAEuB,KAAKixE,OAAOnb,cAAcvtC,WAAW9pB,EAAEu+C,WAAW,CAAC,IAAI19C,EAAEb,EAAE2T,OAAO4P,EAAE1iB,EAAEkwD,WAAWxtC,EAAEksC,WAAW5uD,EAAE+tD,sBAAsBr9C,EAAEuvE,aAAav9D,EAAEw3B,YAAY,EAAEgR,GAAG3Q,OAAO73B,EAAEw3B,YAAY,EAAEgR,GAAG3Q,OAAOx6C,IAAIC,EAAEguD,aAAY,KAAMt9C,EAAE1N,UAAUwoF,wBAAwB,WAAW,IAAI,IAAIzrF,EAAEW,KAAK8rE,UAAUvjD,WAAWlpB,EAAE29C,WAAW,CAAC,IAAIhtC,EAAE3Q,EAAE+S,OAAO3T,EAAEuR,EAAEw/C,WAAWlwD,EAAE0Q,EAAEo9C,WAAW,IAAI9tD,EAAEqzC,SAAS,CAACrzC,EAAEq9C,YAAY,IAAI,IAAI36B,EAAE,EAAEA,EAAE,EAAEA,IAAIvjB,EAAEk0C,OAAO3wB,KAAKvjB,EAAEyvD,UAAU5uD,EAAEqzC,OAAO3wB,KAAK,IAAI1iB,EAAE0wE,SAAShuD,GAAGvjB,EAAEiwD,OAAO1sC,IAAIg0B,GAAGE,QAAQ52C,EAAEqzC,OAAO3wB,EAAEwoC,GAAGzQ,MAAM,+CAA+Ct7C,EAAE2vD,YAAYpsC,EAAEwoC,GAAGzQ,KAAKz6C,EAAEk6C,YAAYx3B,EAAEwoC,GAAGzQ,OAAO/D,GAAGE,QAAQ52C,EAAEqzC,OAAO3wB,EAAEwoC,GAAG3Q,OAAO,gDAAgDp7C,EAAE2vD,YAAYpsC,EAAEwoC,GAAG3Q,MAAMv6C,EAAEk6C,YAAYx3B,EAAEwoC,GAAG3Q,aAAa7pC,EAAE1N,UAAUkqE,iBAAiB,WAAW,IAAI,IAAIntE,EAAEW,KAAKixE,OAAOzjB,WAAWjlC,WAAWlpB,EAAE29C,WAAY39C,EAAE+S,OAAOq5C,WAAW+gB,iBAAiBxsE,KAAKiqF,MAAMjqF,KAAKitE,iBAAiBjtE,KAAK0qF,uBAAuB16E,EAAE1N,UAAUyoF,qBAAqB,WAAW,IAAI,IAAI1rF,EAAEW,KAAKixE,OAAOzjB,WAAWjlC,WAAWlpB,EAAE29C,WAAW,CAAC,IAAIhtC,EAAE3Q,EAAE+S,OAAO3T,EAAEuR,EAAEw/C,WAAWx/C,EAAEs/C,eAAe7wD,EAAEk0C,OAAO,GAAG3yC,KAAKirF,oBAAoBj7E,EAAE,GAAGhQ,KAAKirF,oBAAoBj7E,EAAE,IAAIA,EAAEy7C,WAAWuhB,gBAAgBvuE,KAAKuR,EAAE1N,UAAUk9E,aAAa,SAASngF,GAAG,QAAQW,KAAKoxD,UAAU/xD,EAAEW,KAAKsqF,kBAAkBt6E,EAAE1N,UAAUqpC,YAAY,WAAW,MAAM,IAAI37B,EAAE1N,UAAUspC,SAAS,WAAW,OAAO57B,GAAGA,EAAvxJ,CAA0xJ+5E,IAAIzK,GAAGiF,UAAU,SAASllF,EAAE2Q,EAAEvR,GAAG,OAAO,IAAI6gF,GAAGjgF,EAAE2Q,GAAGimE,kBAAkBx3E,IAAI6gF,GAAGznD,aAAa,SAASx4B,EAAE2Q,GAAG,GAAG3Q,EAAE21B,WAAWhlB,EAAEglB,UAAU,OAAOsqD,GAAGkL,kBAAkBlL,GAAGI,aAAargF,EAAE2Q,EAAE3Q,EAAEo8C,cAAc,GAAGp8C,EAAE6M,uBAAuB,CAAC,IAAIzN,EAAEuR,EAAE,OAAOyuE,GAAGv0E,IAAI7K,EAAE,CAACssC,YAAY,WAAW,MAAM,CAACw+C,GAAGC,QAAQlgF,IAAI,SAAS7K,GAAG,OAAOA,EAAEw4B,aAAap5B,MAAM,OAAOY,EAAEo9C,2BAA2Bp9C,GAAGA,EAAEo9C,2BAA2BzsC,GAAG40E,GAAGL,UAAUllF,EAAE2Q,EAAEsvE,GAAGI,eAAeJ,GAAGmF,cAAc,SAASplF,EAAE2Q,GAAG,GAAG3Q,EAAE21B,WAAWhlB,EAAEglB,UAAU,CAAC,GAAG31B,EAAE21B,WAAWhlB,EAAEglB,UAAU,OAAOsqD,GAAGkL,kBAAkBlL,GAAGoF,cAAcrlF,EAAE2Q,EAAE3Q,EAAEo8C,cAAc,GAAGp8C,EAAE21B,UAAU,OAAOhlB,EAAEmH,OAAO,GAAGnH,EAAEglB,UAAU,OAAO31B,EAAE8X,OAAO,OAAO9X,EAAEo9C,2BAA2Bp9C,GAAGA,EAAEo9C,2BAA2BzsC,GAAG40E,GAAGL,UAAUllF,EAAE2Q,EAAEsvE,GAAGoF,gBAAgBpF,GAAG4L,gBAAgB,SAAS7rF,EAAE2Q,EAAEvR,GAAG,IAAIa,EAAE0Q,EAAE6hC,eAAe7vB,EAAEvjB,EAAEozC,eAAejjB,GAAG,EAAE,OAAOvvB,GAAG,KAAKigF,GAAGI,aAAa9wD,EAAEhwB,KAAKQ,IAAIE,EAAE0iB,GAAG,MAAM,KAAKs9D,GAAGkF,MAAM51D,EAAEhwB,KAAKM,IAAII,EAAE0iB,GAAG,MAAM,KAAKs9D,GAAGqF,WAAW/1D,EAAEtvB,EAAE,MAAM,KAAKggF,GAAGoF,cAAc91D,EAAEhwB,KAAKM,IAAII,EAAE0iB,GAAG,OAAO4M,GAAG0wD,GAAGkL,kBAAkB,SAASnrF,EAAE2Q,EAAEvR,EAAEa,GAAG,IAAI0iB,EAAE,KAAK,OAAOs9D,GAAG4L,gBAAgB7rF,EAAE2Q,EAAEvR,IAAI,KAAK,EAAEujB,EAAE1iB,EAAEq2C,yBAAyB,IAAI1uC,MAAM,GAAG6pC,KAAK,OAAO,MAAM,KAAK,EAAE9uB,EAAE1iB,EAAE61C,cAAc,MAAM,KAAK,EAAEnzB,EAAE1iB,EAAEg2C,mBAAmB,MAAM,KAAK,EAAEtzB,EAAE1iB,EAAEm2C,gBAAgB,OAAOzzB,GAAGs9D,GAAGn5C,WAAW,SAAS9mC,EAAE2Q,GAAG,OAAO3Q,EAAE21B,UAAUsqD,GAAGkL,kBAAkBlL,GAAGqF,WAAWtlF,EAAE2Q,EAAE3Q,EAAEo8C,cAAczrC,EAAEglB,UAAU31B,EAAE8X,QAAQ9X,EAAEo9C,2BAA2Bp9C,GAAGA,EAAEo9C,2BAA2BzsC,GAAG40E,GAAGL,UAAUllF,EAAE2Q,EAAEsvE,GAAGqF,cAAcrF,GAAGC,aAAa,WAAW,GAAG,IAAIpvE,UAAU5R,OAAO,CAAC,IAAIc,EAAE8Q,UAAU,GAAGH,EAAEG,UAAU,GAAG1R,EAAEY,EAAEm6C,YAAY,GAAGl6C,EAAED,EAAEm6C,YAAY,GAAG,OAAO8lC,GAAGC,aAAa9gF,EAAEa,EAAE0Q,GAAG,GAAG,IAAIG,UAAU5R,OAAO,CAAC,IAAIyjB,EAAE7R,UAAU,GAAGye,EAAEze,UAAU,GAAGrR,EAAEqR,UAAU,GAAG,OAAO6R,IAAIslB,EAAEgG,WAAWtrB,EAAEslB,EAAE+F,UAAUze,IAAI0Y,EAAEgG,WAAW1e,EAAE0Y,EAAE+F,UAAUvuC,GAAG,KAAKwgF,GAAGI,aAAa,OAAO19D,IAAIslB,EAAE+F,UAAUze,IAAI0Y,EAAE+F,SAAS,KAAKiyC,GAAGkF,MAAM,OAAOxiE,IAAIslB,EAAE+F,UAAUze,IAAI0Y,EAAE+F,SAAS,KAAKiyC,GAAGqF,WAAW,OAAO3iE,IAAIslB,EAAE+F,UAAUze,IAAI0Y,EAAE+F,SAAS,KAAKiyC,GAAGoF,cAAc,OAAO1iE,IAAIslB,EAAE+F,UAAUze,IAAI0Y,EAAE+F,UAAUrrB,IAAIslB,EAAE+F,UAAUze,IAAI0Y,EAAE+F,SAAS,OAAM,IAAKiyC,GAAGI,aAAa,EAAEJ,GAAGkF,MAAM,EAAElF,GAAGqF,WAAW,EAAErF,GAAGoF,cAAc,EAAE,IAAIyG,GAAG,WAAWnrF,KAAKorF,GAAG,KAAKprF,KAAKqrF,2BAA2B,KAAKrrF,KAAKsrF,UAAU,KAAKtrF,KAAKi5E,WAAW,IAAIrB,GAAG53E,KAAKopE,KAAK,IAAI3L,GAAG,IAAIp+D,EAAE8Q,UAAU,GAAGH,EAAEG,UAAU,GAAGnQ,KAAKorF,GAAG/rF,EAAEW,KAAKqrF,2BAA2Br7E,EAAEhQ,KAAKsrF,UAAUtrF,KAAKurF,gBAAgBlsF,IAAI8rF,GAAG7oF,UAAUkpF,4BAA4B,SAASnsF,GAAG,IAAI,IAAI2Q,EAAE,EAAEA,EAAEhQ,KAAKsrF,UAAUnvC,mBAAmBnsC,IAAI,IAAI,IAAIvR,EAAEuB,KAAKsrF,UAAU5vC,aAAa1rC,GAAG80C,wBAAwBxlD,EAAE,EAAEA,EAAEb,EAAEg2B,OAAO,EAAEn1B,IAAuE,GAAlEb,EAAEkzC,cAAcryC,EAAEU,KAAKopE,KAAK1L,IAAIj/D,EAAEkzC,cAAcryC,EAAE,EAAEU,KAAKopE,KAAKz1D,IAAO3T,KAAKopE,KAAK/gE,SAAShJ,IAAIW,KAAKqrF,2BAA2B,OAAM,EAAG,OAAM,GAAIF,GAAG7oF,UAAUk3C,YAAY,SAASn6C,GAAG,OAAOW,KAAKwrF,4BAA4BnsF,GAAGioC,EAAEgG,SAASttC,KAAKi5E,WAAW9N,OAAO9rE,EAAEW,KAAKorF,KAAKD,GAAG7oF,UAAUipF,gBAAgB,SAASlsF,GAAG,IAAI2Q,EAAE,IAAIy7E,GAAGpsF,EAAE6E,MAAM8L,GAAG,IAAIvR,EAAEuR,EAAE07E,cAAcpsF,EAAE00C,GAAGgV,kBAAkBvqD,GAAG,OAAOY,EAAEo8C,aAAajG,sBAAsBl2C,IAAI6rF,GAAG7oF,UAAUqpC,YAAY,WAAW,MAAM,IAAIw/C,GAAG7oF,UAAUspC,SAAS,WAAW,OAAOu/C,IAAI,IAAIM,GAAG,WAAWzrF,KAAKsrF,UAAU,KAAKtrF,KAAKsrF,UAAU,IAAI9sC,IAAIitC,GAAGnpF,UAAUopF,YAAY,WAAW,OAAO1rF,KAAKsrF,WAAWG,GAAGnpF,UAAUk4C,OAAO,SAASn7C,GAAG,GAAGA,aAAa+lD,GAAG,CAAC,IAAIp1C,EAAE3Q,EAAEW,KAAKsrF,UAAUl4D,IAAIpjB,EAAEs1C,mBAAmB,IAAI,IAAI7mD,EAAE,EAAEA,EAAEuR,EAAEq1C,qBAAqB5mD,IAAIuB,KAAKsrF,UAAUl4D,IAAIpjB,EAAEu1C,iBAAiB9mD,MAAMgtF,GAAGnpF,UAAUqpC,YAAY,WAAW,MAAM,CAACwW,KAAKspC,GAAGnpF,UAAUspC,SAAS,WAAW,OAAO6/C,IAAI,IAAIE,GAAG,WAAW3rF,KAAKorF,GAAG,KAAKprF,KAAK4rF,SAAQ,EAAG5rF,KAAK6rF,UAAS,EAAG,IAAIxsF,EAAE8Q,UAAU,GAAGnQ,KAAKorF,GAAG/rF,GAAGssF,GAAGrpF,UAAUwpF,cAAc,SAASzsF,EAAE2Q,EAAEvR,GAAG,IAAI,IAAIa,EAAED,EAAEmjD,iBAAiBxgC,EAAE,EAAEA,EAAE1iB,EAAEf,OAAO,EAAEyjB,IAAIhiB,KAAK+rF,oBAAoBzsF,EAAE0iB,GAAG1iB,EAAE0iB,EAAE,GAAGhS,EAAEvR,IAAIktF,GAAGrpF,UAAU0pF,mBAAmB,SAAS3sF,EAAE2Q,GAAGhQ,KAAK4rF,QAAQvsF,EAAEW,KAAK6rF,SAAS77E,GAAG27E,GAAGrpF,UAAUs2E,UAAU,SAASv5E,GAAG,IAAI,IAAI2Q,EAAE,IAAIwuC,GAAG//C,EAAE84E,GAAGI,SAAS33E,KAAKorF,IAAI7iE,WAAW9pB,EAAEu+C,WAAW,CAAC,IAAI19C,EAAEb,EAAE2T,OAAOpS,KAAK8rF,cAAcxsF,EAAED,EAAE2Q,GAAG,OAAOA,GAAG27E,GAAGrpF,UAAUypF,oBAAoB,SAAS1sF,EAAE2Q,EAAEvR,EAAEa,GAAG,IAAI0iB,EAAEhS,EAAEmE,EAAE9U,EAAE8U,EAAEya,EAAE5e,EAAEoE,EAAE/U,EAAE+U,EAAEtV,EAAEF,KAAKK,KAAK+iB,EAAEA,EAAE4M,EAAEA,GAAGlvB,EAAEjB,EAAEujB,EAAEljB,EAAE2nC,EAAEhoC,EAAEmwB,EAAE9vB,EAAEiN,GAAGiE,EAAEmE,EAAE9U,EAAE8U,GAAG,EAAExB,GAAG3C,EAAEoE,EAAE/U,EAAE+U,GAAG,EAAE,GAAGpU,KAAK4rF,QAAQ,CAAC,IAAI5qF,EAAE,IAAI2mC,EAAE57B,EAAE06B,EAAE9zB,EAAEjT,GAAGJ,EAAE8zB,IAAIpyB,GAAG,GAAGhB,KAAK6rF,SAAS,CAAC,IAAIrlD,EAAE,IAAImB,EAAE57B,EAAE06B,EAAE9zB,EAAEjT,GAAGJ,EAAE8zB,IAAIoT,KAAKmlD,GAAGrpF,UAAUqpC,YAAY,WAAW,MAAM,IAAIggD,GAAGrpF,UAAUspC,SAAS,WAAW,OAAO+/C,IAAI,IAAIM,GAAG,SAAS5sF,IAAIW,KAAKgjD,MAAM,KAAKhjD,KAAKksF,WAAW,KAAKlsF,KAAKmsF,UAAU,IAAIllF,MAAM,GAAG6pC,KAAK,MAAM9wC,KAAKosF,iBAAiB,KAAKpsF,KAAKqrF,2BAA2BhsF,EAAEgtF,UAAUrsF,KAAKssF,YAAY,IAAI9tC,GAAG,IAAIxuC,EAAEG,UAAU,GAAG1R,EAAE0R,UAAU,GAAG7Q,EAAE6Q,UAAU,GAAGnQ,KAAKqrF,2BAA2BhsF,EAAEktF,iCAAiCv8E,EAAEvR,GAAGuB,KAAKgjD,MAAM,CAAChzC,EAAEvR,EAAEa,GAAGU,KAAKksF,WAAW,CAAC,IAAIf,GAAGnrF,KAAKgjD,MAAM,GAAGhjD,KAAKqrF,4BAA4B,IAAIF,GAAGnrF,KAAKgjD,MAAM,GAAGhjD,KAAKqrF,4BAA4B,IAAIF,GAAGnrF,KAAKgjD,MAAM,GAAGhjD,KAAKqrF,8BAA8BmB,GAAG,CAACH,UAAU,CAACh8E,cAAa,IAAK47E,GAAG3pF,UAAUmqF,aAAa,SAASptF,EAAE2Q,EAAEvR,GAAG8tC,EAAE1Z,IAAIgmB,QAAQ,8BAA8BvR,EAAEmG,iBAAiBz9B,EAAE,IAAI,MAAMs3B,EAAEmG,iBAAiBz9B,EAAE,IAAI,cAAcvR,EAAE,IAAI,KAAK,WAAW6oC,EAAEmG,iBAAiBz9B,EAAE,MAAMi8E,GAAG3pF,UAAUmjD,QAAQ,SAASpmD,GAA0F,OAAvFW,KAAK0sF,WAAW1sF,KAAKgjD,MAAM,IAAIhjD,KAAK0sF,WAAW1sF,KAAKgjD,MAAM,IAAUhjD,KAAK4yE,WAAWvzE,IAAa4sF,GAAG3pF,UAAUswE,WAAW,WAAW,GAAG,IAAIziE,UAAU5R,OAAO,CAAC,IAAI,IAAIc,EAAE8Q,UAAU,GAAGH,EAAE,EAAEA,EAAEhQ,KAAKssF,YAAY73D,OAAOzkB,IAAI,CAAC,IAAIvR,EAAEuB,KAAKssF,YAAY1kE,IAAI5X,GAAG,IAAIhQ,KAAK4yE,WAAWvzE,EAAEZ,GAAG,OAAOuB,KAAKosF,iBAAiB3tF,GAAE,EAAG,OAAM,EAAG,GAAG,IAAI0R,UAAU5R,OAAO,CAAC,IAAIe,EAAE6Q,UAAU,GAAG6R,EAAE7R,UAAU,GAAG,OAAOnQ,KAAKmsF,UAAU,GAAGnsF,KAAKksF,WAAW,GAAG1yC,YAAYx3B,GAAGhiB,KAAKmsF,UAAU,GAAGnsF,KAAKksF,WAAW,GAAG1yC,YAAYx3B,GAAGhiB,KAAKmsF,UAAU,GAAGnsF,KAAKksF,WAAW,GAAG1yC,YAAYx3B,KAAKiqE,GAAGU,YAAY3sF,KAAKmsF,UAAU7kD,EAAEgG,WAAWttC,KAAK4sF,cAActtF,EAAEU,KAAKmsF,aAAaF,GAAG3pF,UAAUoqF,WAAW,SAASrtF,GAAG,IAAI2Q,EAAE,IAAI27E,GAAGtsF,GAAGW,KAAKssF,YAAY9gD,OAAOx7B,EAAE4oE,UAAU,EAAE54E,KAAKqrF,8BAA8BY,GAAG3pF,UAAUsqF,cAAc,SAASvtF,EAAE2Q,GAAG,IAAIvR,EAAE6gF,GAAGC,aAAavvE,EAAE,GAAGA,EAAE,GAAG3Q,GAAGC,IAAIb,EAAEuR,EAAE,KAAKs3B,EAAE+F,UAAU,OAAO/tC,GAAGU,KAAKysF,aAAaptF,EAAE2Q,EAAEvR,GAAGa,GAAG2sF,GAAG3pF,UAAUuqF,mBAAmB,WAAW,OAAO7sF,KAAKosF,kBAAkBH,GAAG3pF,UAAUqpC,YAAY,WAAW,MAAM,IAAIsgD,GAAG3pF,UAAUspC,SAAS,WAAW,OAAOqgD,IAAIA,GAAGU,YAAY,SAASttF,EAAE2Q,GAAG,IAAI,IAAIvR,EAAE,EAAEA,EAAE,EAAEA,IAAI,GAAGY,EAAEZ,KAAKuR,EAAE,OAAM,EAAG,OAAM,GAAIi8E,GAAGM,iCAAiC,SAASltF,EAAE2Q,GAAG,OAAOpR,KAAKQ,IAAIwiF,GAAGU,8BAA8BjjF,GAAGuiF,GAAGU,8BAA8BtyE,KAAKi8E,GAAGxmC,QAAQ,SAASpmD,EAAE2Q,EAAEvR,EAAEa,GAAG,OAAO,IAAI2sF,GAAG5sF,EAAE2Q,EAAE1Q,GAAGmmD,QAAQhnD,IAAI+tF,GAAGH,UAAUzkE,IAAI,WAAW,OAAO,MAAMlf,OAAOyP,iBAAiB8zE,GAAGO,IAAI,IAAIM,GAAG,SAASztF,EAAE2Q,GAAGhQ,KAAK+sF,aAAa,KAAK/sF,KAAKgtF,YAAW,EAAGhtF,KAAKitF,YAAY,KAAKjtF,KAAK+sF,aAAa1tF,EAAE6tF,eAAel9E,GAAGhQ,KAAKitF,YAAYj9E,GAAG88E,GAAGxqF,UAAU6qF,gBAAgB,SAAS9tF,EAAE2Q,GAAG,GAAG,OAAO3Q,EAAE,OAAO,KAAK,IAAI,IAAIZ,EAAE,EAAEA,EAAEY,EAAE88C,mBAAmB19C,IAAI,CAAC,IAAIa,EAAED,EAAEq8C,aAAaj9C,GAAGuB,KAAKgtF,YAAY1tF,EAAE01B,WAAWhlB,EAAEojB,IAAI9zB,KAAKwtF,GAAGxqF,UAAU8qF,QAAQ,WAAW,IAAI,IAAI/tF,EAAE,IAAIm/C,GAAGxuC,EAAEhQ,KAAKitF,YAAY1kE,WAAWvY,EAAEgtC,WAAW,CAAC,IAAIv+C,EAAEuR,EAAEoC,OAAOpS,KAAKmtF,gBAAgB1uF,EAAEY,GAAG,OAAO,IAAIA,EAAEo1B,OAAO,OAAOz0B,KAAK+sF,aAAa/sF,KAAK+sF,aAAap3C,yBAAyB,MAAM,KAAK31C,KAAK+sF,aAAalkC,cAAcxpD,IAAIytF,GAAGxqF,UAAUqpC,YAAY,WAAW,MAAM,IAAImhD,GAAGxqF,UAAUspC,SAAS,WAAW,OAAOkhD,IAAIA,GAAGM,QAAQ,WAAW,GAAG,IAAIj9E,UAAU5R,OAA2B,OAAO,IAAIuuF,GAAxB38E,UAAU,IAAoBi9E,UAAU,GAAG,IAAIj9E,UAAU5R,OAAO,CAAC,IAAIyR,EAAEG,UAAU,GAAG1R,EAAE0R,UAAU,GAAG,OAAO,IAAI28E,GAAGA,GAAGj4D,WAAW7kB,EAAEvR,IAAI2uF,UAAU,GAAG,IAAIj9E,UAAU5R,OAAO,CAAC,IAAIe,EAAE6Q,UAAU,GAAG6R,EAAE7R,UAAU,GAAGye,EAAEze,UAAU,GAAG,OAAO,IAAI28E,GAAGA,GAAGj4D,WAAWv1B,EAAE0iB,EAAE4M,IAAIw+D,YAAYN,GAAGI,eAAe,SAAS7tF,GAAG,OAAOA,EAAE21B,UAAU,KAAK31B,EAAEkpB,WAAWnW,OAAOqpC,cAAcqxC,GAAGj4D,WAAW,WAAW,GAAG,IAAI1kB,UAAU5R,OAAO,CAAC,IAAIc,EAAE8Q,UAAU,GAAGH,EAAEG,UAAU,GAAG1R,EAAE,IAAI+/C,GAAG,OAAO//C,EAAE20B,IAAI/zB,GAAGZ,EAAE20B,IAAIpjB,GAAGvR,EAAE,GAAG,IAAI0R,UAAU5R,OAAO,CAAC,IAAIe,EAAE6Q,UAAU,GAAG6R,EAAE7R,UAAU,GAAGye,EAAEze,UAAU,GAAGrR,EAAE,IAAI0/C,GAAG,OAAO1/C,EAAEs0B,IAAI9zB,GAAGR,EAAEs0B,IAAIpR,GAAGljB,EAAEs0B,IAAIxE,GAAG9vB,IAAI,IAAIuuF,GAAG,WAAWrtF,KAAKstF,YAAY,KAAKttF,KAAK+sF,aAAa,KAAK,IAAI1tF,EAAE8Q,UAAU,GAAGnQ,KAAKstF,YAAYjuF,EAAE,OAAOW,KAAKstF,cAActtF,KAAKstF,YAAY,IAAI9uC,KAAK+uC,GAAG,CAACC,sBAAsB,CAACn9E,cAAa,IAAKg9E,GAAG/qF,UAAUmrF,mBAAmB,SAASpuF,GAAG,IAAI,IAAI2Q,EAAE,IAAIwuC,GAAG//C,EAAEY,EAAEkpB,WAAW9pB,EAAEu+C,WAAW,CAAC,IAAI19C,EAAEb,EAAE2T,OAAO4P,EAAE,KAAK0rB,EAAEpuC,EAAEi/C,IAAIv8B,EAAEhiB,KAAK0tF,UAAUpuF,GAAGA,aAAam7C,KAAKz4B,EAAE1iB,GAAG0Q,EAAEojB,IAAIpR,GAAG,OAAOhS,GAAGq9E,GAAG/qF,UAAUqrF,kBAAkB,SAAStuF,EAAE2Q,EAAEvR,GAAG,IAAI,IAAIa,EAAE,IAAIk/C,GAAGx8B,EAAE,EAAEA,EAAEhS,EAAEmsC,mBAAmBn6B,IAAI,CAAC,IAAI4M,EAAE5e,EAAE0rC,aAAa15B,GAAG4M,EAAE4tB,sBAAsBz6C,WAAW1C,GAAGC,EAAE8zB,IAAIxE,GAAGnwB,EAAE20B,IAAIxE,GAAG,OAAO5uB,KAAK+sF,aAAalkC,cAAcvpD,IAAI+tF,GAAG/qF,UAAUsrF,eAAe,SAASvuF,EAAE2Q,GAAG,IAAIvR,EAAEY,EAAEm9C,sBAAsBl9C,EAAE0Q,EAAEwsC,sBAAsB,IAAI/9C,EAAEsD,WAAWzC,GAAI,OAAOwtF,GAAGM,QAAQ/tF,EAAE2Q,GAAG,GAAG3Q,EAAE88C,oBAAoB,GAAGnsC,EAAEmsC,oBAAoB,EAAE,OAAOn8C,KAAK6tF,YAAYxuF,EAAE2Q,GAAG,IAAIgS,EAAEvjB,EAAEo5B,aAAav4B,GAAG,OAAOU,KAAK8tF,+BAA+BzuF,EAAE2Q,EAAEgS,IAAIqrE,GAAG/qF,UAAUojC,MAAM,WAAW,GAAG,OAAO1lC,KAAKstF,YAAY,MAAM,IAAItmF,MAAM,yCAAyC,GAAGhH,KAAKstF,YAAYt4D,UAAU,OAAO,KAAKh1B,KAAK+sF,aAAa/sF,KAAKstF,YAAY/kE,WAAWnW,OAAOqpC,aAAa,IAAI,IAAIp8C,EAAE,IAAIq7D,GAAG2yB,GAAGG,uBAAuBx9E,EAAEhQ,KAAKstF,YAAY/kE,WAAWvY,EAAEgtC,WAAW,CAAC,IAAIv+C,EAAEuR,EAAEoC,OAAO/S,EAAE2D,OAAOvE,EAAE+9C,sBAAsB/9C,GAAGuB,KAAKstF,YAAY,KAAK,IAAIhuF,EAAED,EAAE06D,YAAY,OAAO/5D,KAAK0tF,UAAUpuF,IAAI+tF,GAAG/qF,UAAUyrF,YAAY,WAAW,GAAG,IAAI59E,UAAU5R,OAAO,CAAC,IAAIc,EAAE8Q,UAAU,GAAG,OAAOnQ,KAAK+tF,YAAY1uF,EAAE,EAAEA,EAAEo1B,QAAQ,GAAG,IAAItkB,UAAU5R,OAAO,CAAC,IAAIyR,EAAEG,UAAU,GAAG1R,EAAE0R,UAAU,GAAG7Q,EAAE6Q,UAAU,GAAG,GAAG7Q,EAAEb,GAAG,EAAE,CAAC,IAAIujB,EAAEqrE,GAAG9gB,YAAYv8D,EAAEvR,GAAG,OAAOuB,KAAKguF,UAAUhsE,EAAE,MAAM,GAAG1iB,EAAEb,GAAG,EAAE,OAAOuB,KAAKguF,UAAUX,GAAG9gB,YAAYv8D,EAAEvR,GAAG4uF,GAAG9gB,YAAYv8D,EAAEvR,EAAE,IAAI,IAAImwB,EAAEhwB,KAAK8sC,OAAOpsC,EAAEb,GAAG,GAAGK,EAAEkB,KAAK+tF,YAAY/9E,EAAEvR,EAAEmwB,GAAGlvB,EAAEM,KAAK+tF,YAAY/9E,EAAE4e,EAAEtvB,GAAG,OAAOU,KAAKguF,UAAUlvF,EAAEY,KAAK2tF,GAAG/qF,UAAU2rF,cAAc,SAAS5uF,GAAG,IAAI,IAAI2Q,EAAE,KAAKvR,EAAEY,EAAEkpB,WAAW9pB,EAAEu+C,WAAW,CAAC,IAAI19C,EAAEb,EAAE2T,OAAOpC,EAAE,OAAOA,EAAE1Q,EAAE6X,OAAOnH,EAAE01B,MAAMpmC,GAAG,OAAO0Q,GAAGq9E,GAAG/qF,UAAU0rF,UAAU,SAAS3uF,EAAE2Q,GAAG,OAAO,OAAO3Q,GAAG,OAAO2Q,EAAE,KAAK,OAAO3Q,EAAE2Q,EAAEmH,OAAO,OAAOnH,EAAE3Q,EAAE8X,OAAOnX,KAAK4tF,eAAevuF,EAAE2Q,IAAIq9E,GAAG/qF,UAAUurF,YAAY,SAASxuF,EAAE2Q,GAAG,OAAOq9E,GAAGa,mBAAmB7uF,EAAEqmC,MAAM11B,KAAKq9E,GAAG/qF,UAAUorF,UAAU,SAASruF,GAAG,IAAI2Q,EAAEhQ,KAAKytF,mBAAmBpuF,GAAG,OAAOW,KAAK+tF,YAAY/9E,IAAIq9E,GAAG/qF,UAAUwrF,+BAA+B,SAASzuF,EAAE2Q,EAAEvR,GAAG,IAAIa,EAAE,IAAIk/C,GAAGx8B,EAAEhiB,KAAK2tF,kBAAkBlvF,EAAEY,EAAEC,GAAGsvB,EAAE5uB,KAAK2tF,kBAAkBlvF,EAAEuR,EAAE1Q,GAAGR,EAAEkB,KAAK6tF,YAAY7rE,EAAE4M,GAAY,OAATtvB,EAAE8zB,IAAIt0B,GAAUguF,GAAGM,QAAQ9tF,IAAI+tF,GAAG/qF,UAAU6rF,YAAY,WAAW,GAAG,IAAIh+E,UAAU5R,OAAO,CAAC,IAAIc,EAAE8Q,UAAU,GAAG,OAAO9Q,EAAEuoB,IAAI,GAAG6zB,aAAaoN,cAAcxpD,GAAGoyE,OAAO,GAAG,GAAG,IAAIthE,UAAU5R,OAAO,CAAC,IAAIyR,EAAEG,UAAU,GAAG1R,EAAE0R,UAAU,GAAG,OAAOH,EAAEyrC,aAAa9F,yBAAyB,CAAC3lC,EAAEvR,IAAIgzE,OAAO,KAAK4b,GAAG/qF,UAAUqpC,YAAY,WAAW,MAAM,IAAI0hD,GAAG/qF,UAAUspC,SAAS,WAAW,OAAOyhD,IAAIA,GAAGa,mBAAmB,SAAS7uF,GAAG,GAAGquC,EAAEruC,EAAE8lD,IAAI,OAAO9lD,EAAE,IAAI2Q,EAAEqnE,GAAGtgB,YAAY13D,GAAG,OAAO,IAAI2Q,EAAEykB,OAAOzkB,EAAE4X,IAAI,GAAGvoB,EAAEo8C,aAAa/F,mBAAmB1B,GAAG+U,eAAe/4C,KAAKq9E,GAAG9gB,YAAY,SAASltE,EAAE2Q,GAAG,OAAOA,GAAG3Q,EAAEo1B,OAAO,KAAKp1B,EAAEuoB,IAAI5X,IAAIq9E,GAAG3nD,MAAM,SAASrmC,GAAG,OAAO,IAAIguF,GAAGhuF,GAAGqmC,SAAS6nD,GAAGC,sBAAsB5lE,IAAI,WAAW,OAAO,GAAGlf,OAAOyP,iBAAiBk1E,GAAGE,IAAI,IAAIa,GAAG,aAAaA,GAAG9rF,UAAUqpC,YAAY,WAAW,MAAM,IAAIyiD,GAAG9rF,UAAUspC,SAAS,WAAW,OAAOwiD,IAAIA,GAAG1oD,MAAM,SAASrmC,EAAE2Q,GAAG,GAAG3Q,EAAE21B,WAAWhlB,EAAEglB,UAAU,CAAC,GAAG31B,EAAE21B,WAAWhlB,EAAEglB,UAAU,OAAOsqD,GAAGkL,kBAAkBlL,GAAGkF,MAAMnlF,EAAE2Q,EAAE3Q,EAAEo8C,cAAc,GAAGp8C,EAAE21B,UAAU,OAAOhlB,EAAEmH,OAAO,GAAGnH,EAAEglB,UAAU,OAAO31B,EAAE8X,OAAO,OAAO9X,EAAEo9C,2BAA2Bp9C,GAAGA,EAAEo9C,2BAA2BzsC,GAAG40E,GAAGL,UAAUllF,EAAE2Q,EAAEsvE,GAAGkF,QAAQnlF,EAAEgvF,cAAcjkC,GAAG/qD,EAAEivF,cAAc/jC,GAAGlrD,EAAEkvF,UAAUjP,GAAGjgF,EAAEmvF,QAAQJ,GAAG/uF,EAAEovF,SAASnZ,GAAG5sE,OAAOC,eAAetJ,EAAE,aAAa,CAACuJ,OAAM,IAA11yUoH,CAAElS,8iBCS/D,IAAI,EAAc,UAOdqK,EAAU,CACjBW,YAAa,UACbC,YAAa,UACbC,QAAS,kBACTC,KAAM,gBACNC,OAAQ,mBACRC,WAAY,UACZC,WAAY,UACZC,OAAQ,EACRC,OAAQ,EACRC,MAAO,kBACPC,YAAa,WACbC,YAAa,WACbC,cAAe,kBACf1B,QAAS,EACT2B,MAAO,mBAmEJ,SAAS,EAAQpD,EAAMC,EAAYC,QACtB,IAAZA,IAAsBA,EAAU,IACpC,IAAIC,EAAO,CAAEC,KAAM,WASnB,OARmB,IAAfF,EAAQG,IAAYH,EAAQG,MAC5BF,EAAKE,GAAKH,EAAQG,IAElBH,EAAQjJ,OACRkJ,EAAKlJ,KAAOiJ,EAAQjJ,MAExBkJ,EAAKF,WAAaA,GAAc,GAChCE,EAAKG,SAAWN,EACTG,EAmDJ,SAAS,EAAMK,EAAaP,EAAYC,GAE3C,QADgB,IAAZA,IAAsBA,EAAU,KAC/BM,EACD,MAAM,IAAIC,MAAM,2BAEpB,IAAKC,MAAMC,QAAQH,GACf,MAAM,IAAIC,MAAM,gCAEpB,GAAID,EAAYxI,OAAS,EACrB,MAAM,IAAIyI,MAAM,+CAEpB,IAAK,EAASD,EAAY,MAAQ,EAASA,EAAY,IACnD,MAAM,IAAIC,MAAM,oCAMpB,OAAO,EAJI,CACPL,KAAM,QACNI,YAAaA,GAEIP,EAAYC,GA2C9B,SAAS,EAAQM,EAAaP,EAAYC,QAC7B,IAAZA,IAAsBA,EAAU,IACpC,IAAK,IAAIY,EAAK,EAAGC,EAAgBP,EAAaM,EAAKC,EAAc/I,OAAQ8I,IAAM,CAC3E,IAAIE,EAAOD,EAAcD,GACzB,GAAIE,EAAKhJ,OAAS,EACd,MAAM,IAAIyI,MAAM,+DAEpB,IAAK,IAAIzH,EAAI,EAAGA,EAAIgI,EAAKA,EAAKhJ,OAAS,GAAGA,OAAQgB,IAE9C,GAAIgI,EAAKA,EAAKhJ,OAAS,GAAGgB,KAAOgI,EAAK,GAAGhI,GACrC,MAAM,IAAIyH,MAAM,+CAQ5B,OAAO,EAJI,CACPL,KAAM,UACNI,YAAaA,GAEIP,EAAYC,GA2C9B,SAAS,EAAWM,EAAaP,EAAYC,GAEhD,QADgB,IAAZA,IAAsBA,EAAU,IAChCM,EAAYxI,OAAS,EACrB,MAAM,IAAIyI,MAAM,yDAMpB,OAAO,EAJI,CACPL,KAAM,aACNI,YAAaA,GAEIP,EAAYC,GAiD9B,SAAS,EAAkBiB,EAAUjB,QACxB,IAAZA,IAAsBA,EAAU,IACpC,IAAIkB,EAAK,CAAEhB,KAAM,qBAQjB,OAPIF,EAAQG,KACRe,EAAGf,GAAKH,EAAQG,IAEhBH,EAAQjJ,OACRmK,EAAGnK,KAAOiJ,EAAQjJ,MAEtBmK,EAAGD,SAAWA,EACPC,EAmBJ,SAAS,EAAgBZ,EAAaP,EAAYC,GAMrD,YALgB,IAAZA,IAAsBA,EAAU,IAK7B,EAJI,CACPE,KAAM,kBACNI,YAAaA,GAEIP,EAAYC,GAmB9B,SAAS,EAAWM,EAAaP,EAAYC,GAMhD,YALgB,IAAZA,IAAsBA,EAAU,IAK7B,EAJI,CACPE,KAAM,aACNI,YAAaA,GAEIP,EAAYC,GAqF9B,SAAS,EAAgBuB,EAASC,QACvB,IAAVA,IAAoBA,EAAQ,cAChC,IAAIC,EAASC,EAAQF,GACrB,IAAKC,EACD,MAAM,IAAIlB,MAAMiB,EAAQ,qBAE5B,OAAOD,EAAUE,EAYd,SAAS,EAAgBG,EAAUJ,QACxB,IAAVA,IAAoBA,EAAQ,cAChC,IAAIC,EAASC,EAAQF,GACrB,IAAKC,EACD,MAAM,IAAIlB,MAAMiB,EAAQ,qBAE5B,OAAOI,EAAWH,EAqCf,SAAS,EAAiBF,GAE7B,OAAkB,KADJA,GAAW,EAAIpJ,KAAK2J,KACT3J,KAAK2J,GAS3B,SAAS,EAAiBS,GAE7B,OADcA,EAAU,IACNpK,KAAK2J,GAAM,IAW1B,SAAS,EAAchK,EAAQ0M,EAAcC,GAGhD,QAFqB,IAAjBD,IAA2BA,EAAe,mBAC5B,IAAdC,IAAwBA,EAAY,gBAClC3M,GAAU,GACZ,MAAM,IAAIyI,MAAM,oCAEpB,OAAO,EAAgB,EAAgBzI,EAAQ0M,GAAeC,GAqC3D,SAAS,EAAS1C,GACrB,OAAQC,MAAMD,IAAgB,OAARA,IAAiBvB,MAAMC,QAAQsB,GCnkBzD,SAAS,EAAU/K,EAASoO,EAAUC,GAEpC,GAAgB,OAAZrO,EA4BJ,IA3BA,IAAI8B,EACFrB,EACA6N,EACAlF,EACAmF,EACA7B,EACA8B,EAGAC,EAFAC,EAAa,EACbC,EAAa,EAEbzF,EAAOlJ,EAAQkJ,KACf0F,EAA+B,sBAAT1F,EACtB2F,EAAqB,YAAT3F,EACZ4F,EAAOF,EAAsB5O,EAAQiK,SAASnJ,OAAS,EAchDiO,EAAe,EAAGA,EAAeD,EAAMC,IAAgB,CAS9DR,GAHAE,KALAD,EAA0BI,EACtB5O,EAAQiK,SAAS8E,GAAc3F,SAC/ByF,EACA7O,EAAQoJ,SACRpJ,IAEiC,uBAAjCwO,EAAwBtF,MAGxBsF,EAAwB1B,WAAWhM,OACnC,EAEJ,IAAK,IAAIkO,EAAY,EAAGA,EAAYT,EAAOS,IAAa,CACtD,IAAIC,EAAoB,EACpBC,EAAgB,EAMpB,GAAiB,QALjB9F,EAAWqF,EACPD,EAAwB1B,WAAWkC,GACnCR,GAGJ,CACA9B,EAAStD,EAASE,YAClB,IAAI6F,EAAW/F,EAASF,KAQxB,OANAwF,GACEL,GACc,YAAbc,GAAuC,iBAAbA,EAEvB,EADA,EAGEA,GACN,KAAK,KACH,MACF,IAAK,QACH,IAOQ,IANNf,EACE1B,EACAiC,EACAI,EACAE,EACAC,GAGF,OAAO,EACTP,IACAM,IACA,MACF,IAAK,aACL,IAAK,aACH,IAAKnN,EAAI,EAAGA,EAAI4K,EAAO5L,OAAQgB,IAAK,CAClC,IAOQ,IANNsM,EACE1B,EAAO5K,GACP6M,EACAI,EACAE,EACAC,GAGF,OAAO,EACTP,IACiB,eAAbQ,GAA2BF,IAEhB,eAAbE,GAA2BF,IAC/B,MACF,IAAK,UACL,IAAK,kBACH,IAAKnN,EAAI,EAAGA,EAAI4K,EAAO5L,OAAQgB,IAAK,CAClC,IAAKrB,EAAI,EAAGA,EAAIiM,EAAO5K,GAAGhB,OAAS4N,EAAYjO,IAAK,CAClD,IAOQ,IANN2N,EACE1B,EAAO5K,GAAGrB,GACVkO,EACAI,EACAE,EACAC,GAGF,OAAO,EACTP,IAEe,oBAAbQ,GAAgCF,IACnB,YAAbE,GAAwBD,IAEb,YAAbC,GAAwBF,IAC5B,MACF,IAAK,eACH,IAAKnN,EAAI,EAAGA,EAAI4K,EAAO5L,OAAQgB,IAAK,CAElC,IADAoN,EAAgB,EACXzO,EAAI,EAAGA,EAAIiM,EAAO5K,GAAGhB,OAAQL,IAAK,CACrC,IAAK6N,EAAI,EAAGA,EAAI5B,EAAO5K,GAAGrB,GAAGK,OAAS4N,EAAYJ,IAAK,CACrD,IAOQ,IANNF,EACE1B,EAAO5K,GAAGrB,GAAG6N,GACbK,EACAI,EACAE,EACAC,GAGF,OAAO,EACTP,IAEFO,IAEFD,IAEF,MACF,IAAK,qBACH,IAAKnN,EAAI,EAAGA,EAAIsH,EAAS0D,WAAWhM,OAAQgB,IAC1C,IAEE,IADA,EAAUsH,EAAS0D,WAAWhL,GAAIsM,EAAUC,GAG5C,OAAO,EACX,MACF,QACE,MAAM,IAAI9E,MAAM,6BA8M1B,SAAS,EAAYvJ,EAASoO,GAC5B,GAAqB,YAAjBpO,EAAQkJ,KACVkF,EAASpO,EAAS,QACb,GAAqB,sBAAjBA,EAAQkJ,KACjB,IAAK,IAAIrH,EAAI,EAAGA,EAAI7B,EAAQiK,SAASnJ,SACM,IAArCsN,EAASpO,EAAQiK,SAASpI,GAAIA,GADSA,MAgDjD,SAAS,EAAc7B,EAASoO,EAAUsC,GACxC,IAAIC,EAAgBD,EAMpB,OALA,EAAY1Q,GAAS,SAAU6Q,EAAgB9B,GAE3C4B,EADmB,IAAjB5B,QAAuCY,IAAjBe,EACRG,EACGzC,EAASuC,EAAeE,EAAgB9B,MAExD4B,EAkBT,SAAS,EAAS3Q,GAChB,IAAI0M,EAAS,GAIb,OAHA,EAAU1M,GAAS,SAAUI,GAC3BsM,EAAO9H,KAAKxE,MAEPsM,EAmCT,SAAS,EAAS1M,EAASoO,GACzB,IAAIvM,EACFC,EACAyN,EACAnG,EACAmF,EACAC,EACAC,EACAe,EACAC,EACAC,EACAX,EAAe,EACfH,EAAuC,sBAAjB5O,EAAQkJ,KAC9B2F,EAA6B,YAAjB7O,EAAQkJ,KACpB4F,EAAOF,EAAsB5O,EAAQiK,SAASnJ,OAAS,EAczD,IAAKe,EAAI,EAAGA,EAAIiN,EAAMjN,IAAK,CA4BzB,IA3BA2M,EAA0BI,EACtB5O,EAAQiK,SAASpI,GAAGuH,SACpByF,EACA7O,EAAQoJ,SACRpJ,EACJwP,EAAoBZ,EAChB5O,EAAQiK,SAASpI,GAAGkH,WACpB8F,EACA7O,EAAQ+I,WACR,GACJ0G,EAAcb,EACV5O,EAAQiK,SAASpI,GAAG9B,KACpB8O,EACA7O,EAAQD,UACR4P,EACJD,EAAYd,EACR5O,EAAQiK,SAASpI,GAAGsH,GACpB0F,EACA7O,EAAQmJ,QACRwG,EAIJpB,GAHAE,IAAuBD,GACc,uBAAjCA,EAAwBtF,MAGxBsF,EAAwB1B,WAAWhM,OACnC,EAECyO,EAAI,EAAGA,EAAIhB,EAAOgB,IAMrB,GAAiB,QALjBnG,EAAWqF,EACPD,EAAwB1B,WAAWyC,GACnCf,GAgBJ,OAAQpF,EAASF,MACf,IAAK,QACL,IAAK,aACL,IAAK,aACL,IAAK,UACL,IAAK,kBACL,IAAK,eACH,IAOQ,IANNkF,EACEhF,EACA2F,EACAS,EACAC,EACAC,GAGF,OAAO,EACT,MAEF,IAAK,qBACH,IAAK5N,EAAI,EAAGA,EAAIsH,EAAS0D,WAAWhM,OAAQgB,IAC1C,IAOQ,IANNsM,EACEhF,EAAS0D,WAAWhL,GACpBiN,EACAS,EACAC,EACAC,GAGF,OAAO,EAEX,MAEF,QACE,MAAM,IAAInG,MAAM,8BA/ClB,IAOQ,IANN6E,EACE,KACAW,EACAS,EACAC,EACAC,GAGF,OAAO,EA0CbX,KA2GJ,SAAS,EAAY/O,EAASoO,GAC5B,EAASpO,GAAS,SAAUoJ,EAAU2F,EAAchG,EAAYhJ,EAAMoJ,GAEpE,IAiBIgG,EAjBAjG,EAAoB,OAAbE,EAAoB,KAAOA,EAASF,KAC/C,OAAQA,GACN,KAAK,KACL,IAAK,QACL,IAAK,aACL,IAAK,UACH,OAKQ,IAJNkF,EACE,EAAQhF,EAAUL,EAAY,CAAEhJ,KAAMA,EAAMoJ,GAAIA,IAChD4F,EACA,SAIJ,EAMJ,OAAQ7F,GACN,IAAK,aACHiG,EAAW,QACX,MACF,IAAK,kBACHA,EAAW,aACX,MACF,IAAK,eACHA,EAAW,UAIf,IACE,IAAIF,EAAoB,EACxBA,EAAoB7F,EAASE,YAAYxI,OACzCmO,IACA,CACA,IAAI6nC,EAAa1tC,EAASE,YAAY2F,GAKtC,IAEE,IADAb,EAAS,EALA,CACTlF,KAAMiG,EACN7F,YAAawtC,GAGU/tC,GAAagG,EAAcE,GAGlD,OAAO,MA6Gf,SAAS,EAAYjP,EAASoO,GAC5B,EAAYpO,GAAS,SAAU6I,EAASkG,EAAcE,GACpD,IAAIa,EAAe,EAGnB,GAAKjH,EAAQO,SAAb,CAEA,IAAIF,EAAOL,EAAQO,SAASF,KAC5B,GAAa,UAATA,GAA6B,eAATA,EAAxB,CAGA,IAAI6G,EACAC,EAAuB,EACvBC,EAAqB,EACrBC,EAAgB,EACpB,OAyCQ,IAxCN,EACErH,GACA,SACEsH,EACAxB,EACAyB,EACAC,EACAnB,GAGA,QACqBS,IAAnBI,GACAhB,EAAeiB,GACfK,EAAsBJ,GACtBf,EAAgBgB,EAOhB,OALAH,EAAiBI,EACjBH,EAAuBjB,EACvBkB,EAAqBI,EACrBH,EAAgBhB,OAChBY,EAAe,GAGjB,IAAIQ,EAAiB,EACnB,CAACP,EAAgBI,GACjBtH,EAAQE,YAEV,IAOQ,IANNqF,EACEkC,EACAvB,EACAE,EACAC,EACAY,GAGF,OAAO,EACTA,IACAC,EAAiBI,WAvCvB,OAoGJ,SAASoB,EAAcvR,EAASoO,EAAUsC,GACxC,IAAIC,EAAgBD,EAChBc,GAAU,EAwBd,OAvBA,EACExR,GACA,SACEsQ,EACAvB,EACAE,EACAC,EACAY,GAGEa,GADc,IAAZa,QAAsC7B,IAAjBe,EACPJ,EAEAlC,EACduC,EACAL,EACAvB,EACAE,EACAC,EACAY,GAEJ0B,GAAU,KAGPb,ECn/BT,SAAS,EAAK3Q,GACV,IAAIC,EAAS,CAACC,EAAAA,EAAUA,EAAAA,GAAWA,EAAAA,GAAWA,EAAAA,GAe9C,OAdA,EAAUF,GAAS,SAAUI,GACrBH,EAAO,GAAKG,EAAM,KAClBH,EAAO,GAAKG,EAAM,IAElBH,EAAO,GAAKG,EAAM,KAClBH,EAAO,GAAKG,EAAM,IAElBH,EAAO,GAAKG,EAAM,KAClBH,EAAO,GAAKG,EAAM,IAElBH,EAAO,GAAKG,EAAM,KAClBH,EAAO,GAAKG,EAAM,OAGnBH,EAEX,EAAc,QAAI,EAClB,QCrBO,SAAS,EAASG,GACrB,IAAKA,EACD,MAAM,IAAImJ,MAAM,qBAEpB,IAAKC,MAAMC,QAAQrJ,GAAQ,CACvB,GAAmB,YAAfA,EAAM8I,MACa,OAAnB9I,EAAMgJ,UACkB,UAAxBhJ,EAAMgJ,SAASF,KACf,OAAO9I,EAAMgJ,SAASE,YAE1B,GAAmB,UAAflJ,EAAM8I,KACN,OAAO9I,EAAMkJ,YAGrB,GAAIE,MAAMC,QAAQrJ,IACdA,EAAMU,QAAU,IACf0I,MAAMC,QAAQrJ,EAAM,MACpBoJ,MAAMC,QAAQrJ,EAAM,IACrB,OAAOA,EAEX,MAAM,IAAImJ,MAAM,sDAcb,SAAS,EAAUmD,GACtB,GAAIlD,MAAMC,QAAQiD,GACd,OAAOA,EAGX,GAAoB,YAAhBA,EAAOxD,MACP,GAAwB,OAApBwD,EAAOtD,SACP,OAAOsD,EAAOtD,SAASE,iBAK3B,GAAIoD,EAAOpD,YACP,OAAOoD,EAAOpD,YAGtB,MAAM,IAAIC,MAAM,+DAoDb,SAAS0nF,EAAUpoF,EAASK,EAAM0I,GACrC,IAAK/I,EACD,MAAM,IAAIU,MAAM,qBAEpB,IAAKqI,EACD,MAAM,IAAIrI,MAAM,gCAEpB,IAAKV,GAA4B,YAAjBA,EAAQK,OAAuBL,EAAQO,SACnD,MAAM,IAAIG,MAAM,oBAAsBqI,EAAO,oCAEjD,IAAK/I,EAAQO,UAAYP,EAAQO,SAASF,OAASA,EAC/C,MAAM,IAAIK,MAAM,oBACZqI,EACA,eACA1I,EACA,WACAL,EAAQO,SAASF,MAwDtB,SAAS,EAAQlJ,GACpB,MAAqB,YAAjBA,EAAQkJ,KACDlJ,EAAQoJ,SAEZpJ,EAoBJ,SAAS,EAAQA,EAAS6qD,GAC7B,MAAqB,sBAAjB7qD,EAAQkJ,KACD,oBAEU,uBAAjBlJ,EAAQkJ,KACD,qBAEU,YAAjBlJ,EAAQkJ,MAA2C,OAArBlJ,EAAQoJ,SAC/BpJ,EAAQoJ,SAASF,KAErBlJ,EAAQkJ,uBCjMJ,SAAS,EAAsBG,EAAOM,EAASX,GAG1D,QAFgB,IAAZA,IAAsBA,EAAU,KAE/BK,EACD,MAAM,IAAIE,MAAM,qBAEpB,IAAKI,EACD,MAAM,IAAIJ,MAAM,uBAEpB,IAAI2wB,EAAK,EAAS7wB,GACdP,EAAO,EAAQa,GACfT,EAAOJ,EAAKI,KACZnJ,EAAO4J,EAAQ5J,KACfsjC,EAAQv6B,EAAKQ,YAEjB,GAAIvJ,IAA6B,IAqErC,SAAgBm6B,EAAIn6B,GAChB,OAAQA,EAAK,IAAMm6B,EAAG,IAAMn6B,EAAK,IAAMm6B,EAAG,IAAMn6B,EAAK,IAAMm6B,EAAG,IAAMn6B,EAAK,IAAMm6B,EAAG,GAtEtEg3D,CAAOh3D,EAAIn6B,GACnB,OAAO,EAGE,YAATmJ,IACAm6B,EAAQ,CAACA,IAGb,IADA,IAAI8tD,GAAa,EACRtvF,EAAI,EAAGA,EAAIwhC,EAAMviC,SAAWqwF,EAAYtvF,IAE7C,GAAIuvF,EAAOl3D,EAAImJ,EAAMxhC,GAAG,GAAImH,EAAQqoF,gBAAiB,CAIjD,IAHA,IAAIC,GAAS,EACT7wF,EAAI,EAEDA,EAAI4iC,EAAMxhC,GAAGf,SAAWwwF,GACvBF,EAAOl3D,EAAImJ,EAAMxhC,GAAGpB,IAAKuI,EAAQqoF,kBACjCC,GAAS,GAEb7wF,IAEC6wF,IACDH,GAAa,GAIzB,OAAOA,EAWX,SAASC,EAAOl3D,EAAIpwB,EAAMunF,GACtB,IAAIE,GAAW,EACXznF,EAAK,GAAG,KAAOA,EAAKA,EAAKhJ,OAAS,GAAG,IACrCgJ,EAAK,GAAG,KAAOA,EAAKA,EAAKhJ,OAAS,GAAG,KACrCgJ,EAAOA,EAAKrE,MAAM,EAAGqE,EAAKhJ,OAAS,IAEvC,IAAK,IAAIe,EAAI,EAAGC,EAAIgI,EAAKhJ,OAAS,EAAGe,EAAIiI,EAAKhJ,OAAQgB,EAAID,IAAK,CAC3D,IAAI6xB,EAAK5pB,EAAKjI,GAAG,GACb8xB,EAAK7pB,EAAKjI,GAAG,GACb+xB,EAAK9pB,EAAKhI,GAAG,GACb+xB,EAAK/pB,EAAKhI,GAAG,GAIjB,GAHiBo4B,EAAG,IAAMxG,EAAKE,GAAMD,GAAMC,EAAKsG,EAAG,IAAMrG,GAAMqG,EAAG,GAAKxG,KAAQ,IAC1EA,EAAKwG,EAAG,KAAOtG,EAAKsG,EAAG,KAAO,IAC9BvG,EAAKuG,EAAG,KAAOrG,EAAKqG,EAAG,KAAO,EAE/B,OAAQm3D,EAEI19D,EAAKuG,EAAG,KAAOrG,EAAKqG,EAAG,IACnCA,EAAG,IAAOtG,EAAKF,IAAOwG,EAAG,GAAKvG,IAAQE,EAAKF,GAAMD,IAEjD69D,GAAYA,GAGpB,OAAOA,EChEX,MAZA,SAAkBC,EAAMC,EAAIzoF,QACR,IAAZA,IAAsBA,EAAU,IACpC,IAAI0oF,EAAe,EAASF,GACxBG,EAAe,EAASF,GACxBG,EAAO,EAAiBD,EAAa,GAAKD,EAAa,IACvDG,EAAO,EAAiBF,EAAa,GAAKD,EAAa,IACvDI,EAAO,EAAiBJ,EAAa,IACrCK,EAAO,EAAiBJ,EAAa,IACrC1vF,EAAId,KAAKyF,IAAIzF,KAAKgnE,IAAIypB,EAAO,GAAI,GACjCzwF,KAAKyF,IAAIzF,KAAKgnE,IAAI0pB,EAAO,GAAI,GAAK1wF,KAAKqkE,IAAIssB,GAAQ3wF,KAAKqkE,IAAIusB,GAChE,OAAO,EAAgB,EAAI5wF,KAAK+0D,MAAM/0D,KAAKK,KAAKS,GAAId,KAAKK,KAAK,EAAIS,IAAK+G,EAAQwB,QCpCvDS,OAAOpG,UAAUqiB,eCE7C,IAAI8sD,EAAS,IAAInpD,YAAY,IAChB,IAAIa,aAAasoD,GAClB,IAAIjnD,YAAYinD,SCsF5B,SAASge,EAAUC,GACf,IAAIzlF,EAAS,EAAUylF,GAEvB,GAAsB,IAAlBzlF,EAAO1L,SAAiBmgB,EAAOzU,EAAO,GAAIA,EAAO,IACjD,OAAOA,EACX,IAAI0lF,EAAY,GACZC,EAAe3lF,EAAO1L,OAAS,EAC/BsxF,EAAkBF,EAAUpxF,OAChCoxF,EAAUttF,KAAK4H,EAAO,IACtB,IAAK,IAAI3K,EAAI,EAAGA,EAAIswF,EAActwF,IAAK,CACnC,IAAIwwF,EAAiBH,EAAUA,EAAUpxF,OAAS,GAC9C0L,EAAO3K,GAAG,KAAOwwF,EAAe,IAChC7lF,EAAO3K,GAAG,KAAOwwF,EAAe,KAGhCH,EAAUttF,KAAK4H,EAAO3K,KACtBuwF,EAAkBF,EAAUpxF,QACN,GACdwxF,EAAqBJ,EAAUE,EAAkB,GAAIF,EAAUE,EAAkB,GAAIF,EAAUE,EAAkB,KACjHF,EAAU/rF,OAAO+rF,EAAUpxF,OAAS,EAAG,IAMvD,GAFAoxF,EAAUttF,KAAK4H,EAAOA,EAAO1L,OAAS,IACtCsxF,EAAkBF,EAAUpxF,OACxBmgB,EAAOzU,EAAO,GAAIA,EAAOA,EAAO1L,OAAS,KAAOsxF,EAAkB,EAClE,MAAM,IAAI7oF,MAAM,mBAGpB,OAFI+oF,EAAqBJ,EAAUE,EAAkB,GAAIF,EAAUE,EAAkB,GAAIF,EAAUE,EAAkB,KACjHF,EAAU/rF,OAAO+rF,EAAUpxF,OAAS,EAAG,GACpCoxF,EAUX,SAASjxE,EAAOoZ,EAAKC,GACjB,OAAOD,EAAI,KAAOC,EAAI,IAAMD,EAAI,KAAOC,EAAI,GAY/C,SAASg4D,EAAqBzxE,EAAOC,EAAKzX,GACtC,IAAIqN,EAAIrN,EAAM,GAAIsN,EAAItN,EAAM,GACxBkpF,EAAS1xE,EAAM,GAAI2xE,EAAS3xE,EAAM,GAClC4xE,EAAO3xE,EAAI,GAAI4xE,EAAO5xE,EAAI,GAG1B6xE,EAAMF,EAAOF,EACbK,EAAMF,EAAOF,EAEjB,OAAc,KALJ97E,EAAI67E,GAIIK,GAHRj8E,EAAI67E,GAGgBG,IAGrBxxF,KAAKoiB,IAAIovE,IAAQxxF,KAAKoiB,IAAIqvE,GACxBD,EAAM,EAAIJ,GAAU77E,GAAKA,GAAK+7E,EAAOA,GAAQ/7E,GAAKA,GAAK67E,EAEvDK,EAAM,EAAIJ,GAAU77E,GAAKA,GAAK+7E,EAAOA,GAAQ/7E,GAAKA,GAAK67E,GAEtE,MAzIA,SAAqBxyF,EAASgJ,QACV,IAAZA,IAAsBA,EAAU,IAEpC,IAAI6pF,EAA4B,kBAAZ7pF,EAAuBA,EAAQ6pF,OAAS7pF,EAC5D,IAAKhJ,EACD,MAAM,IAAIuJ,MAAM,uBACpB,IAAIL,EAAO,EAAQlJ,GAEf8yF,EAAY,GAChB,OAAQ5pF,GACJ,IAAK,aACD4pF,EAAYd,EAAUhyF,GACtB,MACJ,IAAK,kBACL,IAAK,UACD,EAAUA,GAASiO,SAAQ,SAAUgkF,GACjCa,EAAUluF,KAAKotF,EAAUC,OAE7B,MACJ,IAAK,eACD,EAAUjyF,GAASiO,SAAQ,SAAUtB,GACjC,IAAIomF,EAAa,GACjBpmF,EAASsB,SAAQ,SAAUnE,GACvBipF,EAAWnuF,KAAKotF,EAAUloF,OAE9BgpF,EAAUluF,KAAKmuF,MAEnB,MACJ,IAAK,QACD,OAAO/yF,EACX,IAAK,aACD,IAAIgzF,EAAW,GACf,EAAUhzF,GAASiO,SAAQ,SAAU7N,GACjC,IAAI2Y,EAAM3Y,EAAMwI,KAAK,KAChBqC,OAAOpG,UAAUqiB,eAAe/U,KAAK6gF,EAAUj6E,KAChD+5E,EAAUluF,KAAKxE,GACf4yF,EAASj6E,IAAO,MAGxB,MACJ,QACI,MAAM,IAAIxP,MAAML,EAAO,2BAG/B,OAAIlJ,EAAQsJ,aACO,IAAXupF,GACA7yF,EAAQsJ,YAAcwpF,EACf9yF,GAEJ,CAAEkJ,KAAMA,EAAMI,YAAawpF,IAGnB,IAAXD,GACA7yF,EAAQoJ,SAASE,YAAcwpF,EACxB9yF,GAEJ,EAAQ,CAAEkJ,KAAMA,EAAMI,YAAawpF,GAAa9yF,EAAQ+I,WAAY,CACvEhJ,KAAMC,EAAQD,KACdoJ,GAAInJ,EAAQmJ,MCvCxB,SAAS8pF,EAAajzF,GAClB,IAAIkzF,EAAS,CAAEhqF,KAAM,WAerB,OAbA+B,OAAO0O,KAAK3Z,GAASiO,SAAQ,SAAU8K,GACnC,OAAQA,GACJ,IAAK,OACL,IAAK,aACL,IAAK,WACD,OACJ,QACIm6E,EAAOn6E,GAAO/Y,EAAQ+Y,OAIlCm6E,EAAOnqF,WAAaoqF,EAAgBnzF,EAAQ+I,YAC5CmqF,EAAO9pF,SAAWgqF,EAAcpzF,EAAQoJ,UACjC8pF,EASX,SAASC,EAAgBpqF,GACrB,IAAImqF,EAAS,GACb,OAAKnqF,GAGLkC,OAAO0O,KAAK5Q,GAAYkF,SAAQ,SAAU8K,GACtC,IAAI5N,EAAQpC,EAAWgQ,GACF,kBAAV5N,EACO,OAAVA,EAEA+nF,EAAOn6E,GAAO,KAETvP,MAAMC,QAAQ0B,GAEnB+nF,EAAOn6E,GAAO5N,EAAMsB,KAAI,SAAU3J,GAC9B,OAAOA,KAKXowF,EAAOn6E,GAAOo6E,EAAgBhoF,GAIlC+nF,EAAOn6E,GAAO5N,KAGf+nF,GAxBIA,EA0Df,SAASE,EAAchqF,GACnB,IAAIN,EAAO,CAAEI,KAAME,EAASF,MAI5B,OAHIE,EAASrJ,OACT+I,EAAK/I,KAAOqJ,EAASrJ,MAEH,uBAAlBqJ,EAASF,MACTJ,EAAKgE,WAAa1D,EAAS0D,WAAWL,KAAI,SAAU8C,GAChD,OAAO6jF,EAAc7jF,MAElBzG,IAEXA,EAAKQ,YAAc+pF,EAAUjqF,EAASE,aAC/BR,GASX,SAASuqF,EAAU3mF,GACf,IAAIwmF,EAASxmF,EACb,MAAyB,kBAAdwmF,EAAO,GACPA,EAAOztF,QAEXytF,EAAOzmF,KAAI,SAAUrM,GACxB,OAAOizF,EAAUjzF,MAGzB,MAhJA,SAAeJ,GACX,IAAKA,EACD,MAAM,IAAIuJ,MAAM,uBAEpB,OAAQvJ,EAAQkJ,MACZ,IAAK,UACD,OAAO+pF,EAAajzF,GACxB,IAAK,oBACD,OAiFZ,SAAgCA,GAC5B,IAAIkzF,EAAS,CAAEhqF,KAAM,qBAerB,OAbA+B,OAAO0O,KAAK3Z,GAASiO,SAAQ,SAAU8K,GACnC,OAAQA,GACJ,IAAK,OACL,IAAK,WACD,OACJ,QACIm6E,EAAOn6E,GAAO/Y,EAAQ+Y,OAIlCm6E,EAAOjpF,SAAWjK,EAAQiK,SAASwC,KAAI,SAAU5D,GAC7C,OAAOoqF,EAAapqF,MAEjBqqF,EAjGQI,CAAuBtzF,GAClC,IAAK,QACL,IAAK,aACL,IAAK,UACL,IAAK,aACL,IAAK,kBACL,IAAK,eACL,IAAK,qBACD,OAAOozF,EAAcpzF,GACzB,QACI,MAAM,IAAIuJ,MAAM,0BCP5B,SAASgqF,EAAahwF,EAAG2S,EAAIE,GAC3B,IAAIM,EAAIR,EAAGQ,EACTC,EAAIT,EAAGS,EACPH,EAAKJ,EAAGM,EAAIA,EACZD,EAAKL,EAAGO,EAAIA,EAEd,GAAW,IAAPH,GAAmB,IAAPC,EAAU,CACxB,IAAI7U,IAAM2B,EAAEmT,EAAIA,GAAKF,GAAMjT,EAAEoT,EAAIA,GAAKF,IAAOD,EAAKA,EAAKC,EAAKA,GAExD7U,EAAI,GACN8U,EAAIN,EAAGM,EACPC,EAAIP,EAAGO,GACE/U,EAAI,IACb8U,GAAKF,EAAK5U,EACV+U,GAAKF,EAAK7U,GAOd,OAHA4U,EAAKjT,EAAEmT,EAAIA,GAGCF,GAFZC,EAAKlT,EAAEoT,EAAIA,GAEWF,EAwBxB,SAAS+8E,EAAehnF,EAAQwhB,EAAO7Z,EAAMs/E,EAAaC,GAIxD,IAHA,IACE3tF,EADE4tF,EAAYF,EAGP5xF,EAAImsB,EAAQ,EAAGnsB,EAAIsS,EAAMtS,IAAK,CACrC,IAAI+xF,EAASL,EAAa/mF,EAAO3K,GAAI2K,EAAOwhB,GAAQxhB,EAAO2H,IAEvDy/E,EAASD,IACX5tF,EAAQlE,EACR8xF,EAAYC,GAIZD,EAAYF,IACV1tF,EAAQioB,EAAQ,GAClBwlE,EAAehnF,EAAQwhB,EAAOjoB,EAAO0tF,EAAaC,GACpDA,EAAW9uF,KAAK4H,EAAOzG,IACnBoO,EAAOpO,EAAQ,GACjBytF,EAAehnF,EAAQzG,EAAOoO,EAAMs/E,EAAaC,IAKvD,SAASG,EAAuBrnF,EAAQinF,GACtC,IAAIt/E,EAAO3H,EAAO1L,OAAS,EAEvB4yF,EAAa,CAAClnF,EAAO,IAIzB,OAHAgnF,EAAehnF,EAAQ,EAAG2H,EAAMs/E,EAAaC,GAC7CA,EAAW9uF,KAAK4H,EAAO2H,IAEhBu/E,EAIT,SAAShtB,EAASl6D,EAAQsnF,EAAWC,GACnC,GAAIvnF,EAAO1L,QAAU,EAAG,OAAO0L,EAE/B,IAAIinF,OAA4B9jF,IAAdmkF,EAA0BA,EAAYA,EAAY,EAKpE,OAHAtnF,EAASunF,EAAiBvnF,EA1D5B,SAA4BA,EAAQinF,GAKlC,IAJA,IAEEpqF,EArCe6M,EAAIE,EACjBI,EACFC,EAiCEgsB,EAAYj2B,EAAO,GACrB0lF,EAAY,CAACzvD,GAGN5gC,EAAI,EAAGqD,EAAMsH,EAAO1L,OAAQe,EAAIqD,EAAKrD,IAC5CwH,EAAQmD,EAAO3K,GAxCIuU,EA0CEqsB,EAzCnBjsB,OAAAA,EACFC,OAAAA,EADED,GADaN,EA0CD7M,GAzCJqN,EAAIN,EAAGM,EACjBD,EAAKP,EAAGS,EAAIP,EAAGO,EAEVH,EAAKA,EAAKC,EAAKA,EAsCcg9E,IAChCvB,EAAUttF,KAAKyE,GACfo5B,EAAYp5B,GAMhB,OAFIo5B,IAAcp5B,GAAO6oF,EAAUttF,KAAKyE,GAEjC6oF,EA0C4B8B,CAAmBxnF,EAAQinF,GAC9DjnF,EAASqnF,EAAuBrnF,EAAQinF,GAyH1C,SAASQ,EAAa3qF,EAAawqF,EAAWI,GAC5C,OAAOxtB,EACLp9D,EAAYmD,KAAI,SAAUrM,GACxB,MAAO,CAAEsW,EAAGtW,EAAM,GAAIuW,EAAGvW,EAAM,GAAIc,EAAGd,EAAM,OAE9C0zF,EACAI,GACAznF,KAAI,SAAUC,GACd,OAAOA,EAAOxL,EAAI,CAACwL,EAAOgK,EAAGhK,EAAOiK,EAAGjK,EAAOxL,GAAK,CAACwL,EAAOgK,EAAGhK,EAAOiK,MAazE,SAASw9E,EAAgB7qF,EAAawqF,EAAWI,GAC/C,OAAO5qF,EAAYmD,KAAI,SAAU3C,GAC/B,IAAI4nE,EAAM5nE,EAAK2C,KAAI,SAAUrM,GAC3B,MAAO,CAAEsW,EAAGtW,EAAM,GAAIuW,EAAGvW,EAAM,OAEjC,GAAIsxE,EAAI5wE,OAAS,EACf,MAAM,IAAIyI,MAAM,mBAQlB,IANA,IAAI6qF,EAAa1tB,EAASgL,EAAKoiB,EAAWI,GAAaznF,KAAI,SACzDC,GAEA,MAAO,CAACA,EAAOgK,EAAGhK,EAAOiK,OAGnB09E,EAAcD,IAEpBA,EAAa1tB,EAASgL,EADtBoiB,GAAyB,IAAZA,EACyBI,GAAaznF,KAAI,SACrDC,GAEA,MAAO,CAACA,EAAOgK,EAAGhK,EAAOiK,MAS7B,OALEy9E,EAAWA,EAAWtzF,OAAS,GAAG,KAAOszF,EAAW,GAAG,IACvDA,EAAWA,EAAWtzF,OAAS,GAAG,KAAOszF,EAAW,GAAG,IAEvDA,EAAWxvF,KAAKwvF,EAAW,IAEtBA,KAWX,SAASC,EAAcvqF,GACrB,QAAIA,EAAKhJ,OAAS,MAGA,IAAhBgJ,EAAKhJ,QACLgJ,EAAK,GAAG,KAAOA,EAAK,GAAG,IACvBA,EAAK,GAAG,KAAOA,EAAK,GAAG,IAI3B,MAlJA,SAAoB9J,EAASgJ,GAG3B,KVuduB8E,EUxdvB9E,EAAUA,GAAW,KVydD8E,EAAMC,cAAgB9C,OUxdlB,MAAM,IAAI1B,MAAM,sBVudnC,IAAkBuE,EUtdnBgmF,OAAkCnkF,IAAtB3G,EAAQ8qF,UAA0B9qF,EAAQ8qF,UAAY,EAClEI,EAAclrF,EAAQkrF,cAAe,EACrCrB,EAAS7pF,EAAQ6pF,SAAU,EAE/B,IAAK7yF,EAAS,MAAM,IAAIuJ,MAAM,uBAC9B,GAAIuqF,GAAaA,EAAY,EAAG,MAAM,IAAIvqF,MAAM,qBAQhD,OALe,IAAXspF,IAAiB7yF,EAAU,EAAMA,IAErC,EAASA,GAAS,SAAU8I,IAe9B,SAAsBM,EAAU0qF,EAAWI,GACzC,IAAIhrF,EAAOE,EAASF,KAGpB,GAAa,UAATA,GAA6B,eAATA,EAAuB,OAAOE,EAGtD,EAAYA,GAAU,GAEtB,IAAIE,EAAcF,EAASE,YAC3B,OAAQJ,GACN,IAAK,aACHE,EAAsB,YAAI6qF,EACxB3qF,EACAwqF,EACAI,GAEF,MACF,IAAK,kBACH9qF,EAAsB,YAAIE,EAAYmD,KAAI,SAAU6nF,GAClD,OAAOL,EAAaK,EAAOR,EAAWI,MAExC,MACF,IAAK,UACH9qF,EAAsB,YAAI+qF,EACxB7qF,EACAwqF,EACAI,GAEF,MACF,IAAK,eACH9qF,EAAsB,YAAIE,EAAYmD,KAAI,SAAUuwB,GAClD,OAAOm3D,EAAgBn3D,EAAO82D,EAAWI,OA9C7CK,CAAazrF,EAAMgrF,EAAWI,MAEzBl0F,IChJmB,WACxB,SAASw0F,EAAOxrF,GACZzG,KAAKiK,OAASxD,EAAQwD,QAAU,GAChCjK,KAAKkyF,SAAWzrF,EAAQyrF,UAAY,IACpClyF,KAAKmyF,UAAY1rF,EAAQ0rF,WAAa,IACtCnyF,KAAKoyF,QAAU,GACfpyF,KAAKqyF,SAAW,GAChBryF,KAAKsyF,WAAa7rF,EAAQ6rF,YAAc,GACxCtyF,KAAKzB,OAASyB,KAAKiK,OAAO1L,OAC1ByB,KAAKuyF,MAAQ,EAEb,IAAK,IAAIjzF,EAAI,EAAGA,EAAIU,KAAKzB,OAAQe,IAC7BU,KAAKiK,OAAO3K,GAAGX,EAAIqB,KAAKiK,OAAO3K,GAAGX,GAAK,EAE3C,IAASW,EAAI,EAAGA,EAAIU,KAAKzB,OAAS,EAAGe,IAAK,CACtC,IAAIqU,EAAK3T,KAAKiK,OAAO3K,GACjBuU,EAAK7T,KAAKiK,OAAO3K,EAAI,GACzBU,KAAKoyF,QAAQ/vF,KAAK,CACd8R,GAAIR,EAAGQ,EAAIN,EAAGM,GAAK,EACnBC,GAAIT,EAAGS,EAAIP,EAAGO,GAAK,EACnBzV,GAAIgV,EAAGhV,EAAIkV,EAAGlV,GAAK,IAG3BqB,KAAKqyF,SAAShwF,KAAK,CAACrC,KAAKiK,OAAO,GAAIjK,KAAKiK,OAAO,KAChD,IAAS3K,EAAI,EAAGA,EAAIU,KAAKoyF,QAAQ7zF,OAAS,EAAGe,IAAK,CAC9C,IAAI2U,EAAKjU,KAAKiK,OAAO3K,EAAI,GAAG6U,GAAKnU,KAAKoyF,QAAQ9yF,GAAG6U,EAAInU,KAAKoyF,QAAQ9yF,EAAI,GAAG6U,GAAK,EAC1ED,EAAKlU,KAAKiK,OAAO3K,EAAI,GAAG8U,GAAKpU,KAAKoyF,QAAQ9yF,GAAG8U,EAAIpU,KAAKoyF,QAAQ9yF,EAAI,GAAG8U,GAAK,EAC1Eo+E,EAAKxyF,KAAKiK,OAAO3K,EAAI,GAAGX,GAAKqB,KAAKoyF,QAAQ9yF,GAAG8U,EAAIpU,KAAKoyF,QAAQ9yF,EAAI,GAAGX,GAAK,EAC9EqB,KAAKqyF,SAAShwF,KAAK,CACf,CACI8R,GAAI,EAAMnU,KAAKmyF,WAAanyF,KAAKiK,OAAO3K,EAAI,GAAG6U,EAC3CnU,KAAKmyF,WAAanyF,KAAKoyF,QAAQ9yF,GAAG6U,EAAIF,GAC1CG,GAAI,EAAMpU,KAAKmyF,WAAanyF,KAAKiK,OAAO3K,EAAI,GAAG8U,EAC3CpU,KAAKmyF,WAAanyF,KAAKoyF,QAAQ9yF,GAAG8U,EAAIF,GAC1CvV,GAAI,EAAMqB,KAAKmyF,WAAanyF,KAAKiK,OAAO3K,EAAI,GAAGX,EAC3CqB,KAAKmyF,WAAanyF,KAAKoyF,QAAQ9yF,GAAGX,EAAI6zF,IAE9C,CACIr+E,GAAI,EAAMnU,KAAKmyF,WAAanyF,KAAKiK,OAAO3K,EAAI,GAAG6U,EAC3CnU,KAAKmyF,WAAanyF,KAAKoyF,QAAQ9yF,EAAI,GAAG6U,EAAIF,GAC9CG,GAAI,EAAMpU,KAAKmyF,WAAanyF,KAAKiK,OAAO3K,EAAI,GAAG8U,EAC3CpU,KAAKmyF,WAAanyF,KAAKoyF,QAAQ9yF,EAAI,GAAG8U,EAAIF,GAC9CvV,GAAI,EAAMqB,KAAKmyF,WAAanyF,KAAKiK,OAAO3K,EAAI,GAAGX,EAC3CqB,KAAKmyF,WAAanyF,KAAKoyF,QAAQ9yF,EAAI,GAAGX,EAAI6zF,MAS1D,OALAxyF,KAAKqyF,SAAShwF,KAAK,CACfrC,KAAKiK,OAAOjK,KAAKzB,OAAS,GAC1ByB,KAAKiK,OAAOjK,KAAKzB,OAAS,KAE9ByB,KAAKyyF,MAAQzyF,KAAK0yF,WAAW1yF,KAAKsyF,YAC3BtyF,KAKXiyF,EAAO3vF,UAAUowF,WAAa,SAAUC,GACpC,IAAIF,EAAQ,GACRG,EAAW5yF,KAAK8qC,IAAI,GACxB2nD,EAAMpwF,KAAK,GACX,IAAK,IAAIhD,EAAI,EAAGA,EAAIW,KAAKkyF,SAAU7yF,GAAK,GAAI,CACxC,IAAIijC,EAAOtiC,KAAK8qC,IAAIzrC,GACTT,KAAKK,MAAMqjC,EAAKnuB,EAAIy+E,EAASz+E,IAAMmuB,EAAKnuB,EAAIy+E,EAASz+E,IAC3DmuB,EAAKluB,EAAIw+E,EAASx+E,IAAMkuB,EAAKluB,EAAIw+E,EAASx+E,IAC1CkuB,EAAK3jC,EAAIi0F,EAASj0F,IAAM2jC,EAAK3jC,EAAIi0F,EAASj0F,IACpCg0F,IACPF,EAAMpwF,KAAKhD,GACXuzF,EAAWtwD,GAGnB,OAAOmwD,GAKXR,EAAO3vF,UAAUw5B,OAAS,SAAUz8B,GAChC,IAAIsU,EAAK3T,KAAK8qC,IAAIzrC,EAAI,IAClBwU,EAAK7T,KAAK8qC,IAAIzrC,EAAI,IACtB,MAAO,CACHyL,MAAQ,IAAMlM,KAAK+0D,MAAMhgD,EAAGS,EAAIP,EAAGO,EAAGT,EAAGQ,EAAIN,EAAGM,GAAM,KACtD0+E,MAAOj0F,KAAKK,MAAM4U,EAAGM,EAAIR,EAAGQ,IAAMN,EAAGM,EAAIR,EAAGQ,IACvCN,EAAGO,EAAIT,EAAGS,IAAMP,EAAGO,EAAIT,EAAGS,IAC1BP,EAAGlV,EAAIgV,EAAGhV,IAAMkV,EAAGlV,EAAIgV,EAAGhV,MAUvCszF,EAAO3vF,UAAUwoC,IAAM,SAAUgoD,GAC7B,IAAIzzF,EAAIyzF,EAAO9yF,KAAKuyF,MAChBlzF,EAAI,IACJA,EAAI,GAEJA,EAAIW,KAAKkyF,WACT7yF,EAAIW,KAAKkyF,SAAW,GAGxB,IAAIa,EAAK1zF,EAAIW,KAAKkyF,SAClB,GAAIa,GAAM,EACN,OAAO/yF,KAAKiK,OAAOjK,KAAKzB,OAAS,GAErC,IAAIE,EAAIG,KAAKO,OAAOa,KAAKiK,OAAO1L,OAAS,GAAKw0F,GAE9C,OAKR,SAAgB1zF,EAAGsU,EAAI8R,EAAIC,EAAI7R,GAC3B,IAAIlU,EAQR,SAAWN,GACP,IAAI0zF,EAAK1zF,EAAIA,EAEb,MAAO,CADE0zF,EAAK1zF,EAGV,EAAI0zF,GAAM,EAAI1zF,GACd,EAAIA,GAAK,EAAIA,IAAM,EAAIA,IACtB,EAAIA,IAAM,EAAIA,IAAM,EAAIA,IAfrBqoC,CAAEroC,GAMV,MALU,CACN8U,EAAGN,EAAGM,EAAIxU,EAAE,GAAK+lB,EAAGvR,EAAIxU,EAAE,GAAK8lB,EAAGtR,EAAIxU,EAAE,GAAKgU,EAAGQ,EAAIxU,EAAE,GACtDyU,EAAGP,EAAGO,EAAIzU,EAAE,GAAK+lB,EAAGtR,EAAIzU,EAAE,GAAK8lB,EAAGrR,EAAIzU,EAAE,GAAKgU,EAAGS,EAAIzU,EAAE,GACtDhB,EAAGkV,EAAGlV,EAAIgB,EAAE,GAAK+lB,EAAG/mB,EAAIgB,EAAE,GAAK8lB,EAAG9mB,EAAIgB,EAAE,GAAKgU,EAAGhV,EAAIgB,EAAE,IAV/CqzF,EADGhzF,KAAKzB,OAAS,GAAKw0F,EAAKt0F,EAChBuB,KAAKiK,OAAOxL,GAAIuB,KAAKqyF,SAAS5zF,GAAG,GAAIuB,KAAKqyF,SAAS5zF,EAAI,GAAG,GAAIuB,KAAKiK,OAAOxL,EAAI,KA5G7E,GCRZ,SAAS,GAAYjB,EAAMiJ,QACtB,IAAZA,IAAsBA,EAAU,IAIpC,IAAIwsF,EAAO73E,OAAO5d,EAAK,IACnB01F,EAAQ93E,OAAO5d,EAAK,IACpB21F,EAAO/3E,OAAO5d,EAAK,IACnB41F,EAAQh4E,OAAO5d,EAAK,IACxB,GAAoB,IAAhBA,EAAKe,OACL,MAAM,IAAIyI,MAAM,6DAEpB,IAAIqsF,EAAU,CAACJ,EAAMC,GAIrB,OAAO,EAAQ,CAAC,CAACG,EADF,CAACF,EAAMD,GADP,CAACC,EAAMC,GADR,CAACH,EAAMG,GAGkCC,IAAW5sF,EAAQD,WAAY,CAAEhJ,KAAMA,EAAMoJ,GAAIH,EAAQG,KCTpH,OAJA,SAAkBnJ,GAChB,OAAO,GAAY,EAAKA,KCQX,SAAS,GAAY61F,EAAQjrF,EAAUwC,EAASpE,QAC3C,IAAZA,IAAsBA,EAAU,IAEpC,IAAI0oF,EAAe,EAASmE,GACxBC,EAAa,EAAiBpE,EAAa,IAC3CqE,EAAY,EAAiBrE,EAAa,IAC1CsE,EAAa,EAAiB5oF,GAC9B7C,EAAU,EAAgBK,EAAU5B,EAAQwB,OAE5CyrF,EAAY90F,KAAK+0F,KAAK/0F,KAAKgnE,IAAI4tB,GAAa50F,KAAKqkE,IAAIj7D,GACrDpJ,KAAKqkE,IAAIuwB,GAAa50F,KAAKgnE,IAAI59D,GAAWpJ,KAAKqkE,IAAIwwB,IAKvD,OAAO,EAAM,CAFH,EAFOF,EACb30F,KAAK+0D,MAAM/0D,KAAKgnE,IAAI6tB,GAAc70F,KAAKgnE,IAAI59D,GAAWpJ,KAAKqkE,IAAIuwB,GAAY50F,KAAKqkE,IAAIj7D,GAAWpJ,KAAKgnE,IAAI4tB,GAAa50F,KAAKgnE,IAAI8tB,KAExH,EAAiBA,IACFjtF,EAAQD,YCnBtB,SAAS,GAAQ8X,EAAOC,EAAK9X,GAGxC,QAFgB,IAAZA,IAAsBA,EAAU,KAEd,IAAlBA,EAAQmtF,MACR,OAqBR,SAA+Bt1E,EAAOC,GAElC,IAAIs1E,EAAO,GAAQt1E,EAAKD,GAExB,OADAu1E,GAAQA,EAAO,KAAO,IAxBXC,CAAsBx1E,EAAOC,GAExC,IAAI4wE,EAAe,EAAS7wE,GACxB8wE,EAAe,EAAS7wE,GACxBw1E,EAAO,EAAiB5E,EAAa,IACrC6E,EAAO,EAAiB5E,EAAa,IACrCG,EAAO,EAAiBJ,EAAa,IACrCK,EAAO,EAAiBJ,EAAa,IACrC1vF,EAAId,KAAKgnE,IAAIouB,EAAOD,GAAQn1F,KAAKqkE,IAAIusB,GACrC7vF,EAAIf,KAAKqkE,IAAIssB,GAAQ3wF,KAAKgnE,IAAI4pB,GAC9B5wF,KAAKgnE,IAAI2pB,GAAQ3wF,KAAKqkE,IAAIusB,GAAQ5wF,KAAKqkE,IAAI+wB,EAAOD,GACtD,OAAO,EAAiBn1F,KAAK+0D,MAAMj0D,EAAGC,YCmD1C,OA3EA,SAAqBlC,GACjB,IAAKA,EACD,MAAM,IAAIuJ,MAAM,uBAEpB,IAAIitF,EAAU,GAId,OAHA,EAAYx2F,GAAS,SAAU6I,IAanC,SAA4B7I,EAASw2F,GACjC,IAAI9pF,EAAS,GACTtD,EAAWpJ,EAAQoJ,SACvB,GAAiB,OAAbA,EAAmB,CACnB,OAAQA,EAASF,MACb,IAAK,UACDwD,EAAS,EAAUtD,GACnB,MACJ,IAAK,aACDsD,EAAS,CAAC,EAAUtD,IAE5BsD,EAAOuB,SAAQ,SAAU7N,GACrB,IAAImiC,EAgBhB,SAAwB71B,EAAQ3D,GAC5B,IAAIw5B,EAAW,GAOf,OANA71B,EAAO+pF,QAAO,SAAU1mF,EAAgB2mF,GACpC,IAAI37D,EAAU,EAAW,CAAChrB,EAAgB2mF,GAAgB3tF,GAG1D,OAFAgyB,EAAQh7B,KAchB,SAAc42F,EAASC,GACnB,IAAI9/E,EAAK6/E,EAAQ,GACb5/E,EAAK4/E,EAAQ,GACb3/E,EAAK4/E,EAAQ,GACb3/E,EAAK2/E,EAAQ,GAKjB,MAAO,CAJI9/E,EAAKE,EAAKF,EAAKE,EACdD,EAAKE,EAAKF,EAAKE,EAChBH,EAAKE,EAAKF,EAAKE,EACdD,EAAKE,EAAKF,EAAKE,GAtBR,CAAKlH,EAAgB2mF,GACpCn0D,EAAS39B,KAAKm2B,GACP27D,KAEJn0D,EAxBgBs0D,CAAez2F,EAAOJ,EAAQ+I,YAC7Cw5B,EAASt0B,SAAQ,SAAU8sB,GACvBA,EAAQ5xB,GAAKqtF,EAAQ11F,OACrB01F,EAAQ5xF,KAAKm2B,UA3BrB+7D,CAAmBjuF,EAAS2tF,MAEzB,EAAkBA,gBC8C7B,SAASlyF,GAAWyyF,EAAOC,GACvB,IAAIL,EAAU,EAAUI,GACpBH,EAAU,EAAUI,GACxB,GAAuB,IAAnBL,EAAQ71F,OACR,MAAM,IAAIyI,MAAM,sDAEpB,GAAuB,IAAnBqtF,EAAQ91F,OACR,MAAM,IAAIyI,MAAM,sDAEpB,IAAIuN,EAAK6/E,EAAQ,GAAG,GAChB5/E,EAAK4/E,EAAQ,GAAG,GAChB3/E,EAAK2/E,EAAQ,GAAG,GAChB1/E,EAAK0/E,EAAQ,GAAG,GAChBz/E,EAAK0/E,EAAQ,GAAG,GAChBz/E,EAAKy/E,EAAQ,GAAG,GAChBK,EAAKL,EAAQ,GAAG,GAChBM,EAAKN,EAAQ,GAAG,GAChBO,GAASD,EAAK//E,IAAOH,EAAKF,IAAOmgF,EAAK//E,IAAOD,EAAKF,GAClDqgF,GAASH,EAAK//E,IAAOH,EAAKI,IAAO+/E,EAAK//E,IAAOL,EAAKI,GAClDmgF,GAASrgF,EAAKF,IAAOC,EAAKI,IAAOF,EAAKF,IAAOD,EAAKI,GACtD,GAAc,IAAVigF,EACA,OACW,KAIf,IAAIG,EAAKF,EAAQD,EACbI,EAAKF,EAAQF,EACjB,OAAIG,GAAM,GAAKA,GAAM,GAAKC,GAAM,GAAKA,GAAM,EAGhC,EAAM,CAFLzgF,EAAKwgF,GAAMtgF,EAAKF,GAChBC,EAAKugF,GAAMrgF,EAAKF,KAGrB,KAEX,OAtFA,SAAuBggF,EAAOC,GAC1B,IAAIQ,EAAS,GACThB,EAAU,GASd,GANmB,eAAfO,EAAM7tF,OACN6tF,EAAQ,EAAQA,IAED,eAAfC,EAAM9tF,OACN8tF,EAAQ,EAAQA,IAED,YAAfD,EAAM7tF,MACS,YAAf8tF,EAAM9tF,MACa,OAAnB6tF,EAAM3tF,UACa,OAAnB4tF,EAAM5tF,UACkB,eAAxB2tF,EAAM3tF,SAASF,MACS,eAAxB8tF,EAAM5tF,SAASF,MACuB,IAAtC6tF,EAAM3tF,SAASE,YAAYxI,QACW,IAAtCk2F,EAAM5tF,SAASE,YAAYxI,OAAc,CACzC,IAAI22F,EAAYnzF,GAAWyyF,EAAOC,GAIlC,OAHIS,GACAjB,EAAQ5xF,KAAK6yF,GAEV,EAAkBjB,GAG7B,IAAItiF,EAAO,KAeX,OAdAA,EAAK5O,KAAK,GAAY0xF,IACtB,EAAY,GAAYD,IAAQ,SAAUh8D,GACtC,EAAY7mB,EAAKjP,OAAO81B,IAAU,SAAU9M,GACxC,IAAIwpE,EAAYnzF,GAAWy2B,EAAS9M,GACpC,GAAIwpE,EAAW,CAEX,IAAI1+E,EAAM,EAAU0+E,GAAW7uF,KAAK,KAC/B4uF,EAAOz+E,KACRy+E,EAAOz+E,IAAO,EACdy9E,EAAQ5xF,KAAK6yF,WAKtB,EAAkBjB,IC0B7B,OAtDA,SAA4BlC,EAAOp6D,EAAIlxB,QACnB,IAAZA,IAAsBA,EAAU,IACpC,IAAI0uF,EAAY,EAAM,CAACx3F,EAAAA,EAAUA,EAAAA,GAAW,CACxCoV,KAAMpV,EAAAA,IAENY,EAAS,EA+Cb,OA9CA,EAAYwzF,GAAO,SAAUrC,GAEzB,IADA,IAAIvlF,EAAS,EAAUulF,GACdpwF,EAAI,EAAGA,EAAI6K,EAAO5L,OAAS,EAAGe,IAAK,CAExC,IAAIgf,EAAQ,EAAMnU,EAAO7K,IACzBgf,EAAM9X,WAAWuM,KAAO,EAAS4kB,EAAIrZ,EAAO7X,GAE5C,IAAI2uF,EAAS,EAAMjrF,EAAO7K,EAAI,IAC9B81F,EAAO5uF,WAAWuM,KAAO,EAAS4kB,EAAIy9D,EAAQ3uF,GAE9C,IAAI4uF,EAAgB,EAAS/2E,EAAO82E,EAAQ3uF,GAExC6uF,EAAiB12F,KAAKM,IAAIof,EAAM9X,WAAWuM,KAAMqiF,EAAO5uF,WAAWuM,MACnEmR,EAAY,GAAQ5F,EAAO82E,GAC3BG,EAAmB,GAAY59D,EAAI29D,EAAgBpxE,EAAY,GAAIzd,GACnE+uF,EAAmB,GAAY79D,EAAI29D,EAAgBpxE,EAAY,GAAIzd,GACnEyuF,EAAY,GAAe,EAAW,CACtCK,EAAiB1uF,SAASE,YAC1ByuF,EAAiB3uF,SAASE,cAC1B,EAAW,CAACuX,EAAMzX,SAASE,YAAaquF,EAAOvuF,SAASE,eACxD0uF,EAAc,KACdP,EAAUxtF,SAASnJ,OAAS,KAC5Bk3F,EAAcP,EAAUxtF,SAAS,IACrBlB,WAAWuM,KAAO,EAAS4kB,EAAI89D,EAAahvF,GACxDgvF,EAAYjvF,WAAWmnD,SACnBpvD,EAAS,EAAS+f,EAAOm3E,EAAahvF,IAE1C6X,EAAM9X,WAAWuM,KAAOoiF,EAAU3uF,WAAWuM,QAC7CoiF,EAAY72E,GACF9X,WAAWhD,MAAQlE,EAC7B61F,EAAU3uF,WAAWmnD,SAAWpvD,GAEhC62F,EAAO5uF,WAAWuM,KAAOoiF,EAAU3uF,WAAWuM,QAC9CoiF,EAAYC,GACF5uF,WAAWhD,MAAQlE,EAAI,EACjC61F,EAAU3uF,WAAWmnD,SAAWpvD,EAAS82F,GAEzCI,GACAA,EAAYjvF,WAAWuM,KAAOoiF,EAAU3uF,WAAWuM,QACnDoiF,EAAYM,GACFjvF,WAAWhD,MAAQlE,GAGjCf,GAAU82F,MAGXF,GCFX,OA1DA,SAAuBlG,EAAMC,EAAIzoF,QACb,IAAZA,IAAsBA,EAAU,IACpC,IAAI6sF,EAAS,EAASrE,GAClByG,EAAc,EAASxG,GAG3BwG,EAAY,IACRA,EAAY,GAAKpC,EAAO,GAAK,KACtB,IACDA,EAAO,GAAKoC,EAAY,GAAK,IACzB,IACA,EACd,IAAIC,EAmBR,SAAgCrC,EAAQoC,EAAaE,GASjD,IAAIjoD,EAFJioD,OAAoBxoF,IAAXwoF,EAAuB,EAAcx6E,OAAOw6E,GAGjDC,EAAQvC,EAAO,GAAK10F,KAAK2J,GAAM,IAC/ButF,EAAQJ,EAAY,GAAK92F,KAAK2J,GAAM,IACpCwtF,EAAWD,EAAOD,EAClBG,EAAep3F,KAAKoiB,IAAI00E,EAAY,GAAKpC,EAAO,IAAM10F,KAAK2J,GAAM,IAEjEytF,EAAcp3F,KAAK2J,KACnBytF,GAAe,EAAIp3F,KAAK2J,IAI5B,IAAI0tF,EAAWr3F,KAAKC,IAAID,KAAKgiB,IAAIk1E,EAAO,EAAIl3F,KAAK2J,GAAK,GAAK3J,KAAKgiB,IAAIi1E,EAAO,EAAIj3F,KAAK2J,GAAK,IACrFuR,EAAIlb,KAAKoiB,IAAIi1E,GAAY,MAASF,EAAWE,EAAWr3F,KAAKqkE,IAAI4yB,GAIrE,OAFYj3F,KAAKK,KAAK82F,EAAWA,EAAWj8E,EAAIA,EAAIk8E,EAAcA,GAC/CroD,EA3CIuoD,CAAuB5C,EAAQoC,GAEtD,OADe,EAAcC,EAAkB,SAAUlvF,EAAQwB,QC2DrE,SAASkuF,GAAI1vD,EAAGlU,GACZ,OAAOkU,EAAE,GAAKlU,EAAE,GAAKkU,EAAE,GAAKlU,EAAE,GAElC,SAAS6jE,GAAa12F,EAAGC,EAAG8G,GACxB,MAA0B,WAAnBA,EAAQ4vF,OACT,GAAkB32F,EAAGC,EAAG8G,GACxB,EAAY/G,EAAGC,EAAG8G,GAE5B,OA/EA,SAA6BkxB,EAAI+3D,EAAMjpF,GAUnC,QATgB,IAAZA,IAAsBA,EAAU,IAE/BA,EAAQ4vF,SACT5vF,EAAQ4vF,OAAS,YAEhB5vF,EAAQwB,QACTxB,EAAQwB,MAAQ,eAGf0vB,EACD,MAAM,IAAI3wB,MAAM,kBAWpB,GATIC,MAAMC,QAAQywB,GACdA,EAAK,EAAMA,GAEM,UAAZA,EAAGhxB,KACRgxB,EAAK,EAAQA,GAGb+2D,EAAU/2D,EAAI,QAAS,UAEtB+3D,EACD,MAAM,IAAI1oF,MAAM,oBAEhBC,MAAMC,QAAQwoF,GACdA,EAAO,EAAWA,GAEC,eAAdA,EAAK/oF,KACV+oF,EAAO,EAAQA,GAGfhB,EAAUgB,EAAM,aAAc,QAElC,IAAIrnF,EAAW1K,EAAAA,EACXqD,EAAI22B,EAAG9wB,SAASE,YASpB,OARA,EAAY2oF,GAAM,SAAUl3D,GACxB,IAAI94B,EAAI84B,EAAQ3xB,SAASE,YAAY,GACjCpH,EAAI64B,EAAQ3xB,SAASE,YAAY,GACjC6L,EAiBZ,SAA2B5R,EAAGtB,EAAGC,EAAG8G,GAChC,IAAI8rB,EAAI,CAAC5yB,EAAE,GAAKD,EAAE,GAAIC,EAAE,GAAKD,EAAE,IAE3B+lB,EAAK0wE,GADD,CAACn1F,EAAE,GAAKtB,EAAE,GAAIsB,EAAE,GAAKtB,EAAE,IACf6yB,GAChB,GAAI9M,GAAM,EACN,OAAO2wE,GAAap1F,EAAGtB,EAAG,CAAE22F,OAAQ5vF,EAAQ4vF,OAAQpuF,MAAO,YAE/D,IAAIyd,EAAKywE,GAAI5jE,EAAGA,GAChB,GAAI7M,GAAMD,EACN,OAAO2wE,GAAap1F,EAAGrB,EAAG,CAAE02F,OAAQ5vF,EAAQ4vF,OAAQpuF,MAAO,YAE/D,IAAIwa,EAAKgD,EAAKC,EACV4wE,EAAK,CAAC52F,EAAE,GAAK+iB,EAAK8P,EAAE,GAAI7yB,EAAE,GAAK+iB,EAAK8P,EAAE,IAC1C,OAAO6jE,GAAap1F,EAAGs1F,EAAI,CAAED,OAAQ5vF,EAAQ4vF,OAAQpuF,MAAO,YA9BhDsuF,CAAkBv1F,EAAGtB,EAAGC,EAAG8G,GAC/BmM,EAAIvK,IACJA,EAAWuK,MAGZ,EAAcvK,EAAU,UAAW5B,EAAQwB,QC/CvC,SAASuuF,GAAM9G,EAAMrnF,EAAU5B,QAC1B,IAAZA,IAAsBA,EAAU,IAKpC,IAHA,IACI0D,EADO,EAAQulF,GACD3oF,YACd0vF,EAAY,EACPn3F,EAAI,EAAGA,EAAI6K,EAAO5L,UACnB8J,GAAYouF,GAAan3F,IAAM6K,EAAO5L,OAAS,GADpBe,IAAK,CAI/B,GAAIm3F,GAAapuF,EAAU,CAC5B,IAAIquF,EAAWruF,EAAWouF,EAC1B,GAAKC,EAGA,CACD,IAAIxyE,EAAY,GAAQ/Z,EAAO7K,GAAI6K,EAAO7K,EAAI,IAAM,IAEpD,OADmB,GAAY6K,EAAO7K,GAAIo3F,EAAUxyE,EAAWzd,GAJ/D,OAAO,EAAM0D,EAAO7K,IASxBm3F,GAAa,EAAgBtsF,EAAO7K,GAAI6K,EAAO7K,EAAI,GAAImH,GAG/D,OAAO,EAAM0D,EAAOA,EAAO5L,OAAS,IC9BzB,SAAS,GAAOd,EAASgJ,GAGpC,YAFgB,IAAZA,IAAsBA,EAAU,IAE7BuI,EAAcvR,GAAS,SAAU2Q,EAAeoqB,GACnD,IAAIruB,EAASquB,EAAQ3xB,SAASE,YAC9B,OAAOqH,EAAgB,EAASjE,EAAO,GAAIA,EAAO,GAAI1D,KACvD,GCmCP,OA1BA,SAAmBkwF,EAASC,EAAQlH,GAElC,IAAIvlF,EAAS,EAAUulF,GACvB,GAAsB,eAAlB,EAAQA,GACV,MAAM,IAAI1oF,MAAM,6BAWlB,IATA,IAEI6vF,EAFAC,EAAc,GAAmBpH,EAAMiH,GACvCI,EAAa,GAAmBrH,EAAMkH,GAOtCI,EAAa,EAJfH,EADEC,EAAYtwF,WAAWhD,OAASuzF,EAAWvwF,WAAWhD,MACjD,CAACszF,EAAaC,GAEd,CAACA,EAAYD,IAEC,GAAGjwF,SAASE,aAE7BzH,EAAIu3F,EAAK,GAAGrwF,WAAWhD,MAAQ,EACnClE,EAAIu3F,EAAK,GAAGrwF,WAAWhD,MAAQ,EAC/BlE,IAEA03F,EAAW30F,KAAK8H,EAAO7K,IAGzB,OADA03F,EAAW30F,KAAKw0F,EAAK,GAAGhwF,SAASE,aAC1B,EAAWiwF,EAAYtH,EAAKlpF,aCDrC,SAAS,GAAqBywF,EAAkBC,EAAgBv/D,EAAIw/D,EAAiB1+E,GACjF,IAAItE,EAAIwjB,EAAG,GACPvjB,EAAIujB,EAAG,GACPpjB,EAAK0iF,EAAiB,GACtBziF,EAAKyiF,EAAiB,GACtBxiF,EAAKyiF,EAAe,GACpBxiF,EAAKwiF,EAAe,GAGpB9G,EAAM37E,EAAKF,EACX87E,EAAM37E,EAAKF,EACXnD,GAJMsmB,EAAG,GAAKpjB,GAIA87E,GAHR14D,EAAG,GAAKnjB,GAGY47E,EAC9B,GAAgB,OAAZ33E,GACA,GAAI7Z,KAAKoiB,IAAI3P,GAASoH,EAClB,OAAO,OAGV,GAAc,IAAVpH,EACL,OAAO,EAEX,OAAK8lF,EAMwB,UAApBA,EACDv4F,KAAKoiB,IAAIovE,IAAQxxF,KAAKoiB,IAAIqvE,GACnBD,EAAM,EAAI77E,EAAKJ,GAAKA,GAAKM,EAAKA,GAAMN,GAAKA,EAAII,EAEjD87E,EAAM,EAAI77E,EAAKJ,GAAKA,GAAKM,EAAKA,GAAMN,GAAKA,EAAII,EAE3B,QAApB2iF,EACDv4F,KAAKoiB,IAAIovE,IAAQxxF,KAAKoiB,IAAIqvE,GACnBD,EAAM,EAAI77E,GAAMJ,GAAKA,EAAIM,EAAKA,EAAKN,GAAKA,GAAKI,EAEjD87E,EAAM,EAAI77E,GAAMJ,GAAKA,EAAIM,EAAKA,EAAKN,GAAKA,GAAKI,EAE3B,SAApB2iF,IACDv4F,KAAKoiB,IAAIovE,IAAQxxF,KAAKoiB,IAAIqvE,GACnBD,EAAM,EAAI77E,EAAKJ,GAAKA,EAAIM,EAAKA,EAAKN,GAAKA,EAAII,EAE/C87E,EAAM,EAAI77E,EAAKJ,GAAKA,EAAIM,EAAKA,EAAKN,GAAKA,EAAII,GArB9C5V,KAAKoiB,IAAIovE,IAAQxxF,KAAKoiB,IAAIqvE,GACnBD,EAAM,EAAI77E,GAAMJ,GAAKA,GAAKM,EAAKA,GAAMN,GAAKA,GAAKI,EAEnD87E,EAAM,EAAI77E,GAAMJ,GAAKA,GAAKM,EAAKA,GAAMN,GAAKA,GAAKI,EAsB9D,OAnFA,SAA4BmjB,EAAI+3D,EAAMjpF,QAClB,IAAZA,IAAsBA,EAAU,IAKpC,IAHA,IAAI2wF,EAAW,EAASz/D,GACpB0/D,EAAa,EAAU3H,GAElBpwF,EAAI,EAAGA,EAAI+3F,EAAW94F,OAAS,EAAGe,IAAK,CAC5C,IAAIwvF,GAAiB,EAYrB,GAXIroF,EAAQ6wF,oBACE,IAANh4F,IACAwvF,EAAiB,SAEjBxvF,IAAM+3F,EAAW94F,OAAS,IAC1BuwF,EAAiB,OAEX,IAANxvF,GAAWA,EAAI,IAAM+3F,EAAW94F,OAAS,IACzCuwF,EAAiB,SAGrB,GAAqBuI,EAAW/3F,GAAI+3F,EAAW/3F,EAAI,GAAI83F,EAAUtI,EAA2C,qBAApBroF,EAAQgS,QAA0B,KAAOhS,EAAQgS,SACzI,OAAO,EAGf,OAAO,YC4uBX,ICnxBI8+E,GAAM34F,KAAK2J,GAAK,IAChBivF,GAAM,IAAM54F,KAAK2J,GAEjBkvF,GAAQ,SAAUC,EAAKC,GACzB33F,KAAK03F,IAAMA,EACX13F,KAAK23F,IAAMA,EACX33F,KAAKmU,EAAIojF,GAAMG,EACf13F,KAAKoU,EAAImjF,GAAMI,GAGjBF,GAAMn1F,UAAUs1F,KAAO,WACrB,OAAOvtE,OAAOrqB,KAAK03F,KAAKx0F,MAAM,EAAG,GAAK,IAAMmnB,OAAOrqB,KAAK23F,KAAKz0F,MAAM,EAAG,IAGxEu0F,GAAMn1F,UAAUu1F,SAAW,WACzB,IAAIC,GAAY,EAAI93F,KAAK23F,IACrBI,EAAW/3F,KAAK03F,IAAM,EAAI,IAAM13F,KAAK03F,KAA0B,GAAnB,IAAM13F,KAAK03F,KAC3D,OAAO,IAAID,GAAMM,EAAUD,IAG7B,IAAI/tC,GAAa,WACf/pD,KAAKmK,OAAS,GACdnK,KAAKzB,OAAS,GAGhBwrD,GAAWznD,UAAU01F,QAAU,SAAUn6F,GACvCmC,KAAKzB,SACLyB,KAAKmK,OAAO9H,KAAKxE,IAGnB,IAAIo6F,GAAM,SAAUzxF,GAClBxG,KAAKwG,WAAaA,GAAc,GAChCxG,KAAKuK,WAAa,IAGpB0tF,GAAI31F,UAAU2kB,KAAO,WACnB,GAAIjnB,KAAKuK,WAAWhM,QAAU,EAC5B,MAAO,CACLsI,SAAU,CAAEF,KAAM,aAAcI,YAAa,MAC7CJ,KAAM,UACNH,WAAYxG,KAAKwG,YAEd,GAA+B,IAA3BxG,KAAKuK,WAAWhM,OACzB,MAAO,CACLsI,SAAU,CAAEF,KAAM,aAAcI,YAAa/G,KAAKuK,WAAW,GAAGJ,QAChExD,KAAM,UACNH,WAAYxG,KAAKwG,YAInB,IADA,IAAIqgC,EAAY,GACPvnC,EAAI,EAAGA,EAAIU,KAAKuK,WAAWhM,OAAQe,IAC1CunC,EAAUxkC,KAAKrC,KAAKuK,WAAWjL,GAAG6K,QAEpC,MAAO,CACLtD,SAAU,CAAEF,KAAM,kBAAmBI,YAAa8/B,GAClDlgC,KAAM,UACNH,WAAYxG,KAAKwG,aAMvByxF,GAAI31F,UAAU41F,IAAM,WAMlB,IALA,IAAIC,EAAa,GACbD,EAAM,cACNE,EAAU,SAAUzlF,GACtBulF,GAAOvlF,EAAE,GAAK,IAAMA,EAAE,GAAK,KAEpBrT,EAAI,EAAGA,EAAIU,KAAKuK,WAAWhM,OAAQe,IAAK,CAC/C,GAAyC,IAArCU,KAAKuK,WAAWjL,GAAG6K,OAAO5L,OAC5B,MAAO,oBAEMyB,KAAKuK,WAAWjL,GAAG6K,OACzBuB,QAAQ0sF,GACfD,GAAcD,EAAIjnD,UAAU,EAAGinD,EAAI35F,OAAS,GAAK,IAGrD,OAAO45F,GAOT,IAAIE,GAAc,SAAU/5E,EAAOC,EAAK/X,GACtC,IAAK8X,QAAqBlR,IAAZkR,EAAMnK,QAA+B/G,IAAZkR,EAAMlK,EAC3C,MAAM,IAAIpN,MACR,2FAGJ,IAAKuX,QAAiBnR,IAAVmR,EAAIpK,QAA6B/G,IAAVmR,EAAInK,EACrC,MAAM,IAAIpN,MACR,2FAGJhH,KAAKse,MAAQ,IAAIm5E,GAAMn5E,EAAMnK,EAAGmK,EAAMlK,GACtCpU,KAAKue,IAAM,IAAIk5E,GAAMl5E,EAAIpK,EAAGoK,EAAInK,GAChCpU,KAAKwG,WAAaA,GAAc,GAEhC,IAAI8gC,EAAItnC,KAAKse,MAAMnK,EAAInU,KAAKue,IAAIpK,EAC5BqyB,EAAIxmC,KAAKse,MAAMlK,EAAIpU,KAAKue,IAAInK,EAC5BzV,EACFC,KAAKyF,IAAIzF,KAAKgnE,IAAIp/B,EAAI,GAAM,GAC5B5nC,KAAKqkE,IAAIjjE,KAAKse,MAAMlK,GAClBxV,KAAKqkE,IAAIjjE,KAAKue,IAAInK,GAClBxV,KAAKyF,IAAIzF,KAAKgnE,IAAIt+B,EAAI,GAAM,GAGhC,GAFAtnC,KAAKgN,EAAI,EAAMpO,KAAK+0F,KAAK/0F,KAAKK,KAAKN,IAE/BqB,KAAKgN,IAAMpO,KAAK2J,GAClB,MAAM,IAAIvB,MACR,cACEsX,EAAMs5E,OACN,QACAr5E,EAAIq5E,OACJ,mGAEC,GAAInvF,MAAMzI,KAAKgN,GACpB,MAAM,IAAIhG,MACR,4CAA8CsX,EAAQ,QAAUC,IAQtE85E,GAAY/1F,UAAUg2F,YAAc,SAAUn9E,GAC5C,IAAIosB,EAAI3oC,KAAKgnE,KAAK,EAAIzqD,GAAKnb,KAAKgN,GAAKpO,KAAKgnE,IAAI5lE,KAAKgN,GAC/C06B,EAAI9oC,KAAKgnE,IAAIzqD,EAAInb,KAAKgN,GAAKpO,KAAKgnE,IAAI5lE,KAAKgN,GACzCmH,EACFozB,EAAI3oC,KAAKqkE,IAAIjjE,KAAKse,MAAMlK,GAAKxV,KAAKqkE,IAAIjjE,KAAKse,MAAMnK,GACjDuzB,EAAI9oC,KAAKqkE,IAAIjjE,KAAKue,IAAInK,GAAKxV,KAAKqkE,IAAIjjE,KAAKue,IAAIpK,GAC3CC,EACFmzB,EAAI3oC,KAAKqkE,IAAIjjE,KAAKse,MAAMlK,GAAKxV,KAAKgnE,IAAI5lE,KAAKse,MAAMnK,GACjDuzB,EAAI9oC,KAAKqkE,IAAIjjE,KAAKue,IAAInK,GAAKxV,KAAKgnE,IAAI5lE,KAAKue,IAAIpK,GAC3CxV,EAAI4oC,EAAI3oC,KAAKgnE,IAAI5lE,KAAKse,MAAMlK,GAAKszB,EAAI9oC,KAAKgnE,IAAI5lE,KAAKue,IAAInK,GACvDujF,EAAMH,GAAM54F,KAAK+0D,MAAMh1D,EAAGC,KAAKK,KAAKL,KAAKyF,IAAI8P,EAAG,GAAKvV,KAAKyF,IAAI+P,EAAG,KAErE,MAAO,CADGojF,GAAM54F,KAAK+0D,MAAMv/C,EAAGD,GACjBwjF,IAMfU,GAAY/1F,UAAU21F,IAAM,SAAUM,EAAS9xF,GAC7C,IAAI+xF,EAAa,GACjB,IAAKD,GAAWA,GAAW,EACzBC,EAAWn2F,KAAK,CAACrC,KAAKse,MAAMo5E,IAAK13F,KAAKse,MAAMq5E,MAC5Ca,EAAWn2F,KAAK,CAACrC,KAAKue,IAAIm5E,IAAK13F,KAAKue,IAAIo5E,WAGxC,IADA,IAAIc,EAAQ,GAAOF,EAAU,GACpBj5F,EAAI,EAAGA,EAAIi5F,IAAWj5F,EAAG,CAChC,IAAIgjC,EAAOm2D,EAAQn5F,EACfo5F,EAAO14F,KAAKs4F,YAAYh2D,GAC5Bk2D,EAAWn2F,KAAKq2F,GAmBpB,IAXA,IAAIC,GAAc,EACdC,EAAqB,EAIrBC,EAAmBpyF,GAAWA,EAAQqyF,OAASryF,EAAQqyF,OAAS,GAChEC,EAAgB,IAAMF,EACtBG,GAAkB,IAAMH,EACxBI,EAAc,IAAMJ,EAGft5F,EAAI,EAAGA,EAAIi5F,EAAWj6F,SAAUgB,EAAG,CAC1C,IAAI25F,EAAUV,EAAWj5F,EAAI,GAAG,GAC5B45F,EAAMX,EAAWj5F,GAAG,GACpB65F,EAAax6F,KAAKoiB,IAAIm4E,EAAMD,GAE9BE,EAAaH,IACXE,EAAMJ,GAAiBG,EAAUF,GAChCE,EAAUH,GAAiBI,EAAMH,GAEpCL,GAAc,EACLS,EAAaR,IACtBA,EAAqBQ,GAIzB,IAAIC,EAAU,GACd,GAAIV,GAAeC,EAAqBC,EAAkB,CACxD,IAAIS,EAAU,GACdD,EAAQh3F,KAAKi3F,GACb,IAAK,IAAIp7F,EAAI,EAAGA,EAAIs6F,EAAWj6F,SAAUL,EAAG,CAC1C,IAAIq7F,EAAO5vE,WAAW6uE,EAAWt6F,GAAG,IACpC,GAAIA,EAAI,GAAKU,KAAKoiB,IAAIu4E,EAAOf,EAAWt6F,EAAI,GAAG,IAAM+6F,EAAa,CAChE,IAAIO,EAAO7vE,WAAW6uE,EAAWt6F,EAAI,GAAG,IACpCu7F,EAAO9vE,WAAW6uE,EAAWt6F,EAAI,GAAG,IACpCw7F,EAAO/vE,WAAW6uE,EAAWt6F,GAAG,IAChCy7F,EAAOhwE,WAAW6uE,EAAWt6F,GAAG,IACpC,GACEs7F,GAAQ,KACRA,EAAOR,GACE,MAATU,GACAx7F,EAAI,EAAIs6F,EAAWj6F,QACnBi6F,EAAWt6F,EAAI,GAAG,IAAM,KACxBs6F,EAAWt6F,EAAI,GAAG,GAAK86F,EACvB,CACAM,EAAQj3F,KAAK,EAAE,IAAKm2F,EAAWt6F,GAAG,KAClCA,IACAo7F,EAAQj3F,KAAK,CAACm2F,EAAWt6F,GAAG,GAAIs6F,EAAWt6F,GAAG,KAC9C,SACK,GACLs7F,EAAOT,GACPS,EAAO,MACG,MAAVE,GACAx7F,EAAI,EAAIs6F,EAAWj6F,QACnBi6F,EAAWt6F,EAAI,GAAG,GAAK66F,GACvBP,EAAWt6F,EAAI,GAAG,GAAK,IACvB,CACAo7F,EAAQj3F,KAAK,CAAC,IAAKm2F,EAAWt6F,GAAG,KACjCA,IACAo7F,EAAQj3F,KAAK,CAACm2F,EAAWt6F,GAAG,GAAIs6F,EAAWt6F,GAAG,KAC9C,SAGF,GAAIs7F,EAAOR,GAAkBU,EAAOX,EAAe,CAEjD,IAAIa,EAAOJ,EACXA,EAAOE,EACPA,EAAOE,EAEP,IAAIC,EAAOJ,EACXA,EAAOE,EACPA,EAAOE,EAMT,GAJIL,EAAOT,GAAiBW,EAAOV,IACjCU,GAAQ,KAGNF,GAAQ,KAAOE,GAAQ,KAAOF,EAAOE,EAAM,CAC7C,IAAII,GAAW,IAAMN,IAASE,EAAOF,GACjCO,EAAMD,EAAUH,GAAQ,EAAIG,GAAWL,EAC3CH,EAAQj3F,KAAK,CACXm2F,EAAWt6F,EAAI,GAAG,GAAK66F,EAAgB,KAAO,IAC9CgB,KAEFT,EAAU,IACFj3F,KAAK,CACXm2F,EAAWt6F,EAAI,GAAG,GAAK66F,GAAiB,IAAM,IAC9CgB,IAEFV,EAAQh3F,KAAKi3F,QAEbA,EAAU,GACVD,EAAQh3F,KAAKi3F,GAEfA,EAAQj3F,KAAK,CAACk3F,EAAMf,EAAWt6F,GAAG,UAElCo7F,EAAQj3F,KAAK,CAACm2F,EAAWt6F,GAAG,GAAIs6F,EAAWt6F,GAAG,UAG7C,CAEL,IAAI87F,EAAW,GACfX,EAAQh3F,KAAK23F,GACb,IAAK,IAAIjuF,EAAI,EAAGA,EAAIysF,EAAWj6F,SAAUwN,EACvCiuF,EAAS33F,KAAK,CAACm2F,EAAWzsF,GAAG,GAAIysF,EAAWzsF,GAAG,KAKnD,IADA,IAAIkuF,EAAM,IAAIhC,GAAIj4F,KAAKwG,YACd9H,EAAI,EAAGA,EAAI26F,EAAQ96F,SAAUG,EAAG,CACvC,IAAIgxF,EAAO,IAAI3lC,GACfkwC,EAAI1vF,WAAWlI,KAAKqtF,GAEpB,IADA,IAAIzlF,EAASovF,EAAQ36F,GACZw7F,EAAK,EAAGA,EAAKjwF,EAAO1L,SAAU27F,EACrCxK,EAAKsI,QAAQ/tF,EAAOiwF,IAGxB,OAAOD,GCtQM,SAAS,GAACx7D,EAAMh4B,QACX,IAAZA,IAAsBA,EAAU,IACpC,IAAIF,EAAO,EAAQk4B,GAInB,OAHKh4B,EAAQD,YAA4B,YAAdi4B,EAAK93B,OAC5BF,EAAQD,WAAai4B,EAAKj4B,YAEtBD,EAAKI,MACT,IAAK,UACD,OAUL,SAAuB83B,EAAMh4B,QAChB,IAAZA,IAAsBA,EAAU,IACpC,IACI0D,EADO,EAAQs0B,GACD13B,YACdP,EAAaC,EAAQD,WACnBC,EAAQD,WACM,YAAdi4B,EAAK93B,KACD83B,EAAKj4B,WACL,GACV,OAAO2zF,GAAahwF,EAAQ3D,GAnBb,CAAcD,EAAME,GAC/B,IAAK,eACD,OAsBL,SAA4Bs4B,EAAWt4B,QAC1B,IAAZA,IAAsBA,EAAU,IACpC,IACI0D,EADO,EAAQ40B,GACDh4B,YACdP,EAAaC,EAAQD,WACnBC,EAAQD,WACW,YAAnBu4B,EAAUp4B,KACNo4B,EAAUv4B,WACV,GACNurF,EAAQ,GAIZ,OAHA5nF,EAAOuB,SAAQ,SAAU7N,GACrBk0F,EAAM1vF,KAAK83F,GAAat8F,EAAO2I,OAE5B,EAAkBurF,GAnCVqI,CAAmB7zF,EAAME,GACpC,QACI,MAAM,IAAIO,MAAM,iBAsCrB,SAASmzF,GAAahwF,EAAQ3D,GACjC,OAAI2D,EAAO5L,OAAS,EACT,EAAgB4L,EAAQ3D,GAE5B,EAAW2D,EAAO,GAAI3D,YC8IjC,IAUI6zF,GAAiB,GACjBC,GAAiB,GACjBC,GAAiB,GAEjBC,GAAiB,GACjBC,GAAiB,GACjBC,GAAiB,GAEjBC,GAAiB,GACjBC,GAAiB,GACjBC,GAAiB,GAEjBC,GAAiB,GACjBC,GAAiB,GACjBC,GAAiB,GAEjBC,GAAiB,GACjBC,GAAiB,GACjBC,GAAiB,GAEjBC,GAAiB,GACjBC,GAAiB,GACjBC,GAAiB,GAEjBC,GAAiB,GACjBC,GAAiB,GACjBC,GAAiB,GAEjBC,GAAiB,GACjBC,GAAiB,GACjBC,GAAiB,GAErBjB,GAAe,IAAMG,GAAe,KAAO,EAC3CF,GAAe,IAAMG,GAAe,IAAM,EAC1CF,GAAe,IAAMG,GAAe,IAAM,EAC1CO,GAAe,IAAMG,GAAe,IAAM,EAC1CF,GAAe,IAAMG,GAAe,IAAM,EAC1CF,GAAe,IAAMG,GAAe,IAAM,EAE1CvB,GAAe,IAAMG,GAAe,IAAM,EAC1CF,GAAe,IAAMG,GAAe,KAAO,EAC3CF,GAAe,IAAMY,GAAe,IAAM,EAC1CC,GAAe,IAAMH,GAAe,IAAM,EAC1CI,GAAe,IAAMH,GAAe,IAAM,EAC1CR,GAAe,IAAMY,GAAe,IAAM,EAG1CI,GAAe,GAAKA,GAAe,KAAO,EAC1CC,GAAe,GAAKA,GAAe,MAAQ,EAC3CC,GAAe,GAAKA,GAAe,KAAO,EAC1CX,GAAe,GAAKA,GAAe,MAAQ,EAC3CC,GAAe,GAAKA,GAAe,KAAO,EAC1CC,GAAe,GAAKA,GAAe,KAAO,EAE1CL,GAAe,GAAKA,GAAe,KAAO,EAC1CC,GAAe,GAAKA,GAAe,MAAQ,EAC3CC,GAAe,GAAKA,GAAe,KAAO,EAC1CI,GAAe,GAAKA,GAAe,KAAO,EAC1CC,GAAe,GAAKA,GAAe,KAAO,EAC1CC,GAAe,GAAKA,GAAe,KAAO,EAE1CX,GAAe,IAAMA,GAAe,KAAO,EAC3CC,GAAe,IAAMA,GAAe,KAAO,EAC3CC,GAAe,IAAMA,GAAe,KAAO,EAC3CL,GAAe,IAAMA,GAAe,KAAO,EAC3CC,GAAe,IAAMA,GAAe,KAAO,EAC3CC,GAAe,IAAMA,GAAe,KAAO,EAE3Ca,GAAe,IAAMA,GAAe,KAAO,EAC3CC,GAAe,IAAMA,GAAe,KAAO,EAC3CC,GAAe,IAAMA,GAAe,KAAO,EAC3CpB,GAAe,IAAMA,GAAe,MAAQ,EAC5CC,GAAe,IAAMA,GAAe,KAAO,EAC3CC,GAAe,IAAMA,GAAe,KAAO,EAG3CgB,GAAe,GAAKA,GAAe,KAAO,EAC1CC,GAAe,GAAKA,GAAe,MAAQ,EAC3CC,GAAe,GAAKA,GAAe,KAAO,EAC1CC,GAAe,GAAKA,GAAe,KAAO,EAC1CC,GAAe,GAAKA,GAAe,MAAQ,EAC3CC,GAAe,GAAKA,GAAe,KAAO,EAC1CX,GAAe,GAAKA,GAAe,MAAQ,EAC3CC,GAAe,GAAKA,GAAe,KAAO,EAC1CC,GAAe,GAAKA,GAAe,KAAO,EAC1CC,GAAe,GAAKA,GAAe,MAAQ,EAC3CC,GAAe,GAAKA,GAAe,KAAO,EAC1CC,GAAe,GAAKA,GAAe,KAAO,EAE1CX,GAAe,GAAKA,GAAe,KAAO,EAC1CC,GAAe,GAAKA,GAAe,MAAQ,EAC3CC,GAAe,GAAKA,GAAe,KAAO,EAC1CC,GAAe,GAAKA,GAAe,KAAO,EAC1CC,GAAe,GAAKA,GAAe,MAAQ,EAC3CC,GAAe,GAAKA,GAAe,KAAO,EAC1CC,GAAe,GAAKA,GAAe,KAAO,EAC1CC,GAAe,GAAKA,GAAe,KAAO,EAC1CC,GAAe,GAAKA,GAAe,KAAO,EAC1CC,GAAe,GAAKA,GAAe,KAAO,EAC1CC,GAAe,GAAKA,GAAe,KAAO,EAC1CC,GAAe,GAAKA,GAAe,KAAO,EAE1CX,GAAe,IAAMA,GAAe,KAAO,EAC3CC,GAAe,IAAMA,GAAe,KAAO,EAC3CC,GAAe,IAAMA,GAAe,KAAO,EAC3CC,GAAe,IAAMA,GAAe,KAAO,EAC3CC,GAAe,IAAMA,GAAe,KAAO,EAC3CC,GAAe,IAAMA,GAAe,KAAO,EAC3CX,GAAe,IAAMA,GAAe,KAAO,EAC3CC,GAAe,IAAMA,GAAe,KAAO,EAC3CC,GAAe,IAAMA,GAAe,KAAO,EAC3CC,GAAe,IAAMA,GAAe,KAAO,EAC3CC,GAAe,IAAMA,GAAe,KAAO,EAC3CC,GAAe,IAAMA,GAAe,KAAO,EAE3CgB,GAAe,KAAOA,GAAe,IAAM,EAC3CC,GAAe,KAAOA,GAAe,IAAM,EAC3CC,GAAe,KAAOA,GAAe,IAAM,EAC3CL,GAAe,KAAOA,GAAe,IAAM,EAC3CC,GAAe,KAAOA,GAAe,IAAM,EAC3CC,GAAe,KAAOA,GAAe,IAAM,EAC3CpB,GAAe,KAAOA,GAAe,KAAO,EAC5CC,GAAe,KAAOA,GAAe,IAAM,EAC3CC,GAAe,KAAOA,GAAe,IAAM,EAC3CC,GAAe,KAAOA,GAAe,KAAO,EAC5CC,GAAe,KAAOA,GAAe,IAAM,EAC3CC,GAAe,KAAOA,GAAe,IAAM,EAG3CI,GAAe,GAAKA,GAAe,MAAQ,EAC3CC,GAAe,GAAKA,GAAe,KAAO,EAC1CC,GAAe,GAAKA,GAAe,KAAO,EAC1CU,GAAe,GAAKA,GAAe,KAAO,EAC1CC,GAAe,GAAKA,GAAe,KAAO,EAC1CC,GAAe,GAAKA,GAAe,KAAO,EAE1CR,GAAe,IAAMA,GAAe,KAAO,EAC3CC,GAAe,IAAMA,GAAe,KAAO,EAC3CC,GAAe,IAAMA,GAAe,KAAO,EAC3Cd,GAAe,IAAMA,GAAe,KAAO,EAC3CC,GAAe,IAAMA,GAAe,MAAQ,EAC5CC,GAAe,IAAMA,GAAe,KAAO,EAE3CC,GAAe,IAAMA,GAAe,KAAO,EAC3CC,GAAe,IAAMA,GAAe,IAAM,EAC1CC,GAAe,IAAMA,GAAe,IAAM,EAC1CU,GAAe,IAAMA,GAAe,IAAM,EAC1CC,GAAe,IAAMA,GAAe,IAAM,EAC1CC,GAAe,IAAMA,GAAe,IAAM,EAE1CR,GAAe,IAAMA,GAAe,KAAO,EAC3CC,GAAe,IAAMA,GAAe,KAAO,EAC3CC,GAAe,IAAMA,GAAe,KAAO,EAC3Cd,GAAe,IAAMA,GAAe,KAAO,EAC3CC,GAAe,IAAMA,GAAe,MAAQ,EAC5CC,GAAe,IAAMA,GAAe,KAAO,EAE3CI,GAAe,KAAOA,GAAe,KAAO,EAC5CC,GAAe,KAAOA,GAAe,IAAM,EAC3CC,GAAe,KAAOA,GAAe,IAAM,EAC3CC,GAAe,KAAOA,GAAe,KAAO,EAC5CC,GAAe,KAAOA,GAAe,IAAM,EAC3CC,GAAe,KAAOA,GAAe,IAAM,EAC3CU,GAAe,KAAOA,GAAe,IAAM,EAC3CC,GAAe,KAAOA,GAAe,IAAM,EAC3CC,GAAe,KAAOA,GAAe,IAAM,EAC3CL,GAAe,KAAOA,GAAe,IAAM,EAC3CC,GAAe,KAAOA,GAAe,IAAM,EAC3CC,GAAe,KAAOA,GAAe,IAAM,EAE3CL,GAAe,KAAOA,GAAe,IAAM,EAC3CC,GAAe,KAAOA,GAAe,IAAM,EAC3CC,GAAe,KAAOA,GAAe,IAAM,EAC3CL,GAAe,KAAOA,GAAe,IAAM,EAC3CC,GAAe,KAAOA,GAAe,IAAM,EAC3CC,GAAe,KAAOA,GAAe,IAAM,EAC3Cd,GAAe,KAAOA,GAAe,IAAM,EAC3CC,GAAe,KAAOA,GAAe,KAAO,EAC5CC,GAAe,KAAOA,GAAe,IAAM,EAC3CC,GAAe,KAAOA,GAAe,IAAM,EAC3CC,GAAe,KAAOA,GAAe,KAAO,EAC5CC,GAAe,KAAOA,GAAe,IAAM,EAG3CI,GAAe,IAAMA,GAAe,KAAO,EAC3CC,GAAe,IAAMA,GAAe,KAAO,EAC3CC,GAAe,IAAMA,GAAe,KAAO,EAC3CU,GAAe,IAAMA,GAAe,KAAO,EAC3CC,GAAe,IAAMA,GAAe,KAAO,EAC3CC,GAAe,IAAMA,GAAe,KAAO,EAC3CvB,GAAe,IAAMA,GAAe,MAAQ,EAC5CC,GAAe,IAAMA,GAAe,KAAO,EAC3CC,GAAe,IAAMA,GAAe,KAAO,EAC3CC,GAAe,IAAMA,GAAe,KAAO,EAC3CC,GAAe,IAAMA,GAAe,KAAO,EAC3CC,GAAe,IAAMA,GAAe,KAAO,EAE3CU,GAAe,KAAOA,GAAe,KAAO,EAC5CC,GAAe,KAAOA,GAAe,IAAM,EAC3CC,GAAe,KAAOA,GAAe,IAAM,EAC3CI,GAAe,KAAOA,GAAe,IAAM,EAC3CC,GAAe,KAAOA,GAAe,KAAO,EAC5CC,GAAe,KAAOA,GAAe,IAAM,EAC3CL,GAAe,KAAOA,GAAe,IAAM,EAC3CC,GAAe,KAAOA,GAAe,IAAM,EAC3CC,GAAe,KAAOA,GAAe,IAAM,EAC3CjB,GAAe,KAAOA,GAAe,KAAO,EAC5CC,GAAe,KAAOA,GAAe,IAAM,EAC3CC,GAAe,KAAOA,GAAe,IAAM,EAE3CC,GAAe,IAAMA,GAAe,IAAM,EAC1CC,GAAe,IAAMA,GAAe,KAAO,EAC3CC,GAAe,IAAMA,GAAe,IAAM,EAC1CO,GAAe,IAAMA,GAAe,IAAM,EAC1CC,GAAe,IAAMA,GAAe,IAAM,EAC1CC,GAAe,IAAMA,GAAe,IAAM,EAC1CL,GAAe,IAAMA,GAAe,KAAO,EAC3CC,GAAe,IAAMA,GAAe,IAAM,EAC1CC,GAAe,IAAMA,GAAe,IAAM,EAC1CI,GAAe,IAAMA,GAAe,IAAM,EAC1CC,GAAe,IAAMA,GAAe,KAAO,EAC3CC,GAAe,IAAMA,GAAe,IAAM,EAE1Cd,GAAe,IAAMA,GAAe,IAAM,EAC1CC,GAAe,IAAMA,GAAe,IAAM,EAC1CC,GAAe,IAAMA,GAAe,IAAM,EAC1CC,GAAe,IAAMA,GAAe,IAAM,EAC1CC,GAAe,IAAMA,GAAe,KAAO,EAC3CC,GAAe,IAAMA,GAAe,IAAM,EAC1CC,GAAe,IAAMA,GAAe,IAAM,EAC1CC,GAAe,IAAMA,GAAe,IAAM,EAC1CC,GAAe,IAAMA,GAAe,IAAM,EAC1Cd,GAAe,IAAMA,GAAe,IAAM,EAC1CC,GAAe,IAAMA,GAAe,IAAM,EAC1CC,GAAe,IAAMA,GAAe,IAAM,EAE1CI,GAAe,KAAOA,GAAe,IAAM,EAC3CC,GAAe,KAAOA,GAAe,KAAO,EAC5CC,GAAe,KAAOA,GAAe,IAAM,EAC3CI,GAAe,KAAOA,GAAe,IAAM,EAC3CC,GAAe,KAAOA,GAAe,IAAM,EAC3CC,GAAe,KAAOA,GAAe,IAAM,EAC3CO,GAAe,KAAOA,GAAe,IAAM,EAC3CC,GAAe,KAAOA,GAAe,IAAM,EAC3CC,GAAe,KAAOA,GAAe,IAAM,EAC3CpB,GAAe,KAAOA,GAAe,KAAO,EAC5CC,GAAe,KAAOA,GAAe,IAAM,EAC3CC,GAAe,KAAOA,GAAe,IAAM,EAE3CI,GAAe,IAAMA,GAAe,KAAO,EAC3CC,GAAe,IAAMA,GAAe,KAAO,EAC3CC,GAAe,IAAMA,GAAe,KAAO,EAC3CI,GAAe,IAAMA,GAAe,MAAQ,EAC5CC,GAAe,IAAMA,GAAe,KAAO,EAC3CC,GAAe,IAAMA,GAAe,KAAO,EAC3CC,GAAe,IAAMA,GAAe,KAAO,EAC3CC,GAAe,IAAMA,GAAe,MAAQ,EAC5CC,GAAe,IAAMA,GAAe,KAAO,EAC3CpB,GAAe,IAAMA,GAAe,KAAO,EAC3CC,GAAe,IAAMA,GAAe,KAAO,EAC3CC,GAAe,IAAMA,GAAe,KAAO,EAG3CO,GAAe,KAAOA,GAAe,IAAM,EAC3CC,GAAe,KAAOA,GAAe,IAAM,EAC3CC,GAAe,KAAOA,GAAe,IAAM,EAC3CX,GAAe,KAAOA,GAAe,IAAM,EAC3CC,GAAe,KAAOA,GAAe,IAAM,EAC3CC,GAAe,KAAOA,GAAe,IAAM,EAE3CmB,GAAe,KAAOA,GAAe,IAAM,EAC3CC,GAAe,KAAOA,GAAe,IAAM,EAC3CC,GAAe,KAAOA,GAAe,IAAM,EAC3CpB,GAAe,KAAOA,GAAe,KAAO,EAC5CC,GAAe,KAAOA,GAAe,IAAM,EAC3CC,GAAe,KAAOA,GAAe,IAAM,EAE3CU,GAAe,IAAMA,GAAe,KAAO,EAC3CC,GAAe,IAAMA,GAAe,IAAM,EAC1CC,GAAe,IAAMA,GAAe,IAAM,EAC1CC,GAAe,IAAMA,GAAe,IAAM,EAC1CC,GAAe,IAAMA,GAAe,KAAO,EAC3CC,GAAe,IAAMA,GAAe,IAAM,EAE1Cd,GAAe,IAAMA,GAAe,IAAM,EAC1CC,GAAe,IAAMA,GAAe,KAAO,EAC3CC,GAAe,IAAMA,GAAe,IAAM,EAC1CI,GAAe,IAAMA,GAAe,IAAM,EAC1CC,GAAe,IAAMA,GAAe,IAAM,EAC1CC,GAAe,IAAMA,GAAe,IAAM,EAE1CR,GAAe,IAAMA,GAAe,IAAM,EAC1CC,GAAe,IAAMA,GAAe,IAAM,EAC1CC,GAAe,IAAMA,GAAe,IAAM,EAC1CC,GAAe,IAAMA,GAAe,KAAO,EAC3CC,GAAe,IAAMA,GAAe,IAAM,EAC1CC,GAAe,IAAMA,GAAe,IAAM,EAC1CO,GAAe,IAAMA,GAAe,IAAM,EAC1CC,GAAe,IAAMA,GAAe,IAAM,EAC1CC,GAAe,IAAMA,GAAe,IAAM,EAC1CpB,GAAe,IAAMA,GAAe,IAAM,EAC1CC,GAAe,IAAMA,GAAe,IAAM,EAC1CC,GAAe,IAAMA,GAAe,IAAM,EAE1CI,GAAe,IAAMA,GAAe,KAAO,EAC3CC,GAAe,IAAMA,GAAe,MAAQ,EAC5CC,GAAe,IAAMA,GAAe,KAAO,EAC3CO,GAAe,IAAMA,GAAe,KAAO,EAC3CC,GAAe,IAAMA,GAAe,KAAO,EAC3CC,GAAe,IAAMA,GAAe,KAAO,EAC3CL,GAAe,IAAMA,GAAe,KAAO,EAC3CC,GAAe,IAAMA,GAAe,KAAO,EAC3CC,GAAe,IAAMA,GAAe,KAAO,EAC3CX,GAAe,IAAMA,GAAe,KAAO,EAC3CC,GAAe,IAAMA,GAAe,MAAQ,EAC5CC,GAAe,IAAMA,GAAe,KAAO,EAE3CI,GAAe,GAAKA,GAAe,MAAQ,EAC3CC,GAAe,GAAKA,GAAe,KAAO,EAC1CC,GAAe,GAAKA,GAAe,KAAO,EAC1CI,GAAe,GAAKA,GAAe,MAAQ,EAC3CC,GAAe,GAAKA,GAAe,KAAO,EAC1CC,GAAe,GAAKA,GAAe,KAAO,EAC1CI,GAAe,GAAKA,GAAe,KAAO,EAC1CC,GAAe,GAAKA,GAAe,MAAQ,EAC3CC,GAAe,GAAKA,GAAe,KAAO,EAC1CL,GAAe,GAAKA,GAAe,KAAO,EAC1CC,GAAe,GAAKA,GAAe,KAAO,EAC1CC,GAAe,GAAKA,GAAe,KAAO,EAE1CR,GAAe,KAAOA,GAAe,IAAM,EAC3CC,GAAe,KAAOA,GAAe,IAAM,EAC3CC,GAAe,KAAOA,GAAe,IAAM,EAC3CO,GAAe,KAAOA,GAAe,IAAM,EAC3CC,GAAe,KAAOA,GAAe,IAAM,EAC3CC,GAAe,KAAOA,GAAe,IAAM,EAC3CvB,GAAe,KAAOA,GAAe,KAAO,EAC5CC,GAAe,KAAOA,GAAe,IAAM,EAC3CC,GAAe,KAAOA,GAAe,IAAM,EAC3CC,GAAe,KAAOA,GAAe,IAAM,EAC3CC,GAAe,KAAOA,GAAe,KAAO,EAC5CC,GAAe,KAAOA,GAAe,IAAM,EAE3CU,GAAe,IAAMA,GAAe,KAAO,EAC3CC,GAAe,IAAMA,GAAe,KAAO,EAC3CC,GAAe,IAAMA,GAAe,KAAO,EAC3CL,GAAe,IAAMA,GAAe,MAAQ,EAC5CC,GAAe,IAAMA,GAAe,KAAO,EAC3CC,GAAe,IAAMA,GAAe,KAAO,EAC3CI,GAAe,IAAMA,GAAe,KAAO,EAC3CC,GAAe,IAAMA,GAAe,MAAQ,EAC5CC,GAAe,IAAMA,GAAe,KAAO,EAC3CpB,GAAe,IAAMA,GAAe,KAAO,EAC3CC,GAAe,IAAMA,GAAe,MAAQ,EAC5CC,GAAe,IAAMA,GAAe,KAAO,EAE3CI,GAAe,KAAOA,GAAe,KAAO,EAC5CC,GAAe,KAAOA,GAAe,IAAM,EAC3CC,GAAe,KAAOA,GAAe,IAAM,EAC3Ca,GAAe,KAAOA,GAAe,IAAM,EAC3CC,GAAe,KAAOA,GAAe,IAAM,EAC3CC,GAAe,KAAOA,GAAe,IAAM,EAC3CL,GAAe,KAAOA,GAAe,IAAM,EAC3CC,GAAe,KAAOA,GAAe,IAAM,EAC3CC,GAAe,KAAOA,GAAe,IAAM,EAC3CjB,GAAe,KAAOA,GAAe,KAAO,EAC5CC,GAAe,KAAOA,GAAe,IAAM,EAC3CC,GAAe,KAAOA,GAAe,IAAM,EAE3CI,GAAe,IAAMA,GAAe,KAAO,EAC3CC,GAAe,IAAMA,GAAe,KAAO,EAC3CC,GAAe,IAAMA,GAAe,KAAO,EAC3CI,GAAe,IAAMA,GAAe,KAAO,EAC3CC,GAAe,IAAMA,GAAe,KAAO,EAC3CC,GAAe,IAAMA,GAAe,KAAO,EAC3CjB,GAAe,IAAMA,GAAe,KAAO,EAC3CC,GAAe,IAAMA,GAAe,MAAQ,EAC5CC,GAAe,IAAMA,GAAe,KAAO,EAC3CC,GAAe,IAAMA,GAAe,KAAO,EAC3CC,GAAe,IAAMA,GAAe,KAAO,EAC3CC,GAAe,IAAMA,GAAe,KAAO,EAE3CC,GAAe,GAAKA,GAAe,MAAQ,EAC3CC,GAAe,GAAKA,GAAe,KAAO,EAC1CC,GAAe,GAAKA,GAAe,KAAO,EAC1CC,GAAe,GAAKA,GAAe,KAAO,EAC1CC,GAAe,GAAKA,GAAe,MAAQ,EAC3CC,GAAe,GAAKA,GAAe,KAAO,EAC1CC,GAAe,GAAKA,GAAe,KAAO,EAC1CC,GAAe,GAAKA,GAAe,KAAO,EAC1CC,GAAe,GAAKA,GAAe,KAAO,EAC1CO,GAAe,GAAKA,GAAe,KAAO,EAC1CC,GAAe,GAAKA,GAAe,KAAO,EAC1CC,GAAe,GAAKA,GAAe,KAAO,EAG1CjB,GAAe,KAAO,EACtBC,GAAe,KAAO,EACtBC,GAAe,KAAO,EACtBC,GAAe,KAAO,EACtBC,GAAe,KAAO,EACtBC,GAAe,KAAO,EACtBI,GAAe,MAAQ,EACvBC,GAAe,KAAO,EACtBC,GAAe,KAAO,EACtBL,GAAe,MAAQ,EACvBC,GAAe,KAAO,EACtBC,GAAe,KAAO,EACtBO,GAAe,KAAO,EACtBC,GAAe,MAAQ,EACvBC,GAAe,KAAO,EACtBL,GAAe,KAAO,EACtBC,GAAe,MAAQ,EACvBC,GAAe,KAAO,EACtBpB,GAAe,KAAO,EACtBC,GAAe,KAAO,EACtBC,GAAe,KAAO,EACtBC,GAAe,KAAO,EACtBC,GAAe,KAAO,EACtBC,GAAe,KAAO,EAEtBC,GAAe,IAAM,EACrBC,GAAe,KAAO,EACtBC,GAAe,IAAM,EACrBC,GAAe,IAAM,EACrBC,GAAe,KAAO,EACtBC,GAAe,IAAM,EACrBI,GAAe,IAAM,EACrBC,GAAe,IAAM,EACrBC,GAAe,IAAM,EACrBL,GAAe,IAAM,EACrBC,GAAe,IAAM,EACrBC,GAAe,IAAM,EACrBO,GAAe,IAAM,EACrBC,GAAe,IAAM,EACrBC,GAAe,IAAM,EACrBL,GAAe,IAAM,EACrBC,GAAe,IAAM,EACrBC,GAAe,IAAM,EACrBpB,GAAe,KAAO,EACtBC,GAAe,IAAM,EACrBC,GAAe,IAAM,EACrBC,GAAe,KAAO,EACtBC,GAAe,IAAM,EACrBC,GAAe,IAAM,EAErBC,GAAe,IAAM,EACrBC,GAAe,IAAM,EACrBC,GAAe,IAAM,EACrBC,GAAe,IAAM,EACrBC,GAAe,KAAO,EACtBC,GAAe,IAAM,EACrBI,GAAe,IAAM,EACrBC,GAAe,IAAM,EACrBC,GAAe,IAAM,EACrBL,GAAe,KAAO,EACtBC,GAAe,IAAM,EACrBC,GAAe,IAAM,EACrBO,GAAe,IAAM,EACrBC,GAAe,KAAO,EACtBC,GAAe,IAAM,EACrBL,GAAe,IAAM,EACrBC,GAAe,IAAM,EACrBC,GAAe,IAAM,EACrBpB,GAAe,KAAO,EACtBC,GAAe,IAAM,EACrBC,GAAe,IAAM,EACrBC,GAAe,IAAM,EACrBC,GAAe,IAAM,EACrBC,GAAe,IAAM,EAGrBC,GAAe,KAAO,EACtBC,GAAe,KAAO,EACtBC,GAAe,KAAO,EACtBI,GAAe,MAAQ,EACvBC,GAAe,KAAO,EACtBC,GAAe,KAAO,EACtBO,GAAe,KAAO,EACtBC,GAAe,MAAQ,EACvBC,GAAe,KAAO,EACtBpB,GAAe,KAAO,EACtBC,GAAe,KAAO,EACtBC,GAAe,KAAO,EAEtBI,GAAe,KAAO,EACtBC,GAAe,MAAQ,EACvBC,GAAe,KAAO,EACtBI,GAAe,KAAO,EACtBC,GAAe,KAAO,EACtBC,GAAe,KAAO,EACtBC,GAAe,KAAO,EACtBC,GAAe,KAAO,EACtBC,GAAe,KAAO,EACtBpB,GAAe,MAAQ,EACvBC,GAAe,KAAO,EACtBC,GAAe,KAAO,EAEtBI,GAAe,KAAO,EACtBC,GAAe,MAAQ,EACvBC,GAAe,KAAO,EACtBI,GAAe,KAAO,EACtBC,GAAe,KAAO,EACtBC,GAAe,KAAO,EACtBO,GAAe,KAAO,EACtBC,GAAe,KAAO,EACtBC,GAAe,KAAO,EACtBpB,GAAe,MAAQ,EACvBC,GAAe,KAAO,EACtBC,GAAe,KAAO,EAEtBI,GAAe,KAAO,EACtBC,GAAe,KAAO,EACtBC,GAAe,KAAO,EACtBI,GAAe,MAAQ,EACvBC,GAAe,KAAO,EACtBC,GAAe,KAAO,EACtBC,GAAe,KAAO,EACtBC,GAAe,MAAQ,EACvBC,GAAe,KAAO,EACtBpB,GAAe,KAAO,EACtBC,GAAe,KAAO,EACtBC,GAAe,KAAO,EAGtBI,GAAe,KAAO,EACtBC,GAAe,KAAO,EACtBC,GAAe,KAAO,EACtBO,GAAe,MAAQ,EACvBC,GAAe,KAAO,EACtBC,GAAe,KAAO,EACtBL,GAAe,MAAQ,EACvBC,GAAe,KAAO,EACtBC,GAAe,KAAO,EACtBO,GAAe,KAAO,EACtBC,GAAe,MAAQ,EACvBC,GAAe,KAAO,EACtBL,GAAe,KAAO,EACtBC,GAAe,MAAQ,EACvBC,GAAe,KAAO,EACtBjB,GAAe,KAAO,EACtBC,GAAe,KAAO,EACtBC,GAAe,KAAO,EAEtBC,GAAe,KAAO,EACtBC,GAAe,MAAQ,EACvBC,GAAe,KAAO,EACtBO,GAAe,KAAO,EACtBC,GAAe,KAAO,EACtBC,GAAe,KAAO,EACtBL,GAAe,MAAQ,EACvBC,GAAe,KAAO,EACtBC,GAAe,KAAO,EACtBO,GAAe,KAAO,EACtBC,GAAe,MAAQ,EACvBC,GAAe,KAAO,EACtBL,GAAe,KAAO,EACtBC,GAAe,KAAO,EACtBC,GAAe,KAAO,EACtBjB,GAAe,MAAQ,EACvBC,GAAe,KAAO,EACtBC,GAAe,KAAO,EAEtBC,GAAe,KAAO,EACtBC,GAAe,KAAO,EACtBC,GAAe,KAAO,EACtBC,GAAe,KAAO,EACtBC,GAAe,KAAO,EACtBC,GAAe,KAAO,EACtBC,GAAe,MAAQ,EACvBC,GAAe,KAAO,EACtBC,GAAe,KAAO,EACtBO,GAAe,KAAO,EACtBC,GAAe,MAAQ,EACvBC,GAAe,KAAO,EACtBvB,GAAe,KAAO,EACtBC,GAAe,KAAO,EACtBC,GAAe,KAAO,EACtBC,GAAe,KAAO,EACtBC,GAAe,KAAO,EACtBC,GAAe,KAAO,EAEtBC,GAAe,KAAO,EACtBC,GAAe,KAAO,EACtBC,GAAe,KAAO,EACtBC,GAAe,KAAO,EACtBC,GAAe,MAAQ,EACvBC,GAAe,KAAO,EACtBC,GAAe,KAAO,EACtBC,GAAe,KAAO,EACtBC,GAAe,KAAO,EACtBO,GAAe,KAAO,EACtBC,GAAe,KAAO,EACtBC,GAAe,KAAO,EACtBvB,GAAe,MAAQ,EACvBC,GAAe,KAAO,EACtBC,GAAe,KAAO,EACtBC,GAAe,KAAO,EACtBC,GAAe,KAAO,EACtBC,GAAe,KAAO,EAEtBC,GAAe,IAAM,EACrBC,GAAe,KAAO,EACtBC,GAAe,IAAM,EACrBC,GAAe,IAAM,EACrBC,GAAe,KAAO,EACtBC,GAAe,IAAM,EACrBI,GAAe,IAAM,EACrBC,GAAe,IAAM,EACrBC,GAAe,IAAM,EACrBL,GAAe,IAAM,EACrBC,GAAe,IAAM,EACrBC,GAAe,IAAM,EACrBI,GAAe,IAAM,EACrBC,GAAe,IAAM,EACrBC,GAAe,IAAM,EACrBpB,GAAe,KAAO,EACtBC,GAAe,IAAM,EACrBC,GAAe,IAAM,EAErBI,GAAe,IAAM,EACrBC,GAAe,IAAM,EACrBC,GAAe,IAAM,EACrBC,GAAe,IAAM,EACrBC,GAAe,KAAO,EACtBC,GAAe,IAAM,EACrBI,GAAe,IAAM,EACrBC,GAAe,IAAM,EACrBC,GAAe,IAAM,EACrBL,GAAe,KAAO,EACtBC,GAAe,IAAM,EACrBC,GAAe,IAAM,EACrBI,GAAe,IAAM,EACrBC,GAAe,KAAO,EACtBC,GAAe,IAAM,EACrBpB,GAAe,IAAM,EACrBC,GAAe,IAAM,EACrBC,GAAe,IAAM,EAErBO,GAAe,IAAM,EACrBC,GAAe,KAAO,EACtBC,GAAe,IAAM,EACrBI,GAAe,IAAM,EACrBC,GAAe,IAAM,EACrBC,GAAe,IAAM,EACrBI,GAAe,IAAM,EACrBC,GAAe,IAAM,EACrBC,GAAe,IAAM,EACrBL,GAAe,IAAM,EACrBC,GAAe,IAAM,EACrBC,GAAe,IAAM,EACrBpB,GAAe,KAAO,EACtBC,GAAe,IAAM,EACrBC,GAAe,IAAM,EACrBC,GAAe,KAAO,EACtBC,GAAe,IAAM,EACrBC,GAAe,IAAM,EAErBI,GAAe,IAAM,EACrBC,GAAe,IAAM,EACrBC,GAAe,IAAM,EACrBI,GAAe,KAAO,EACtBC,GAAe,IAAM,EACrBC,GAAe,IAAM,EACrBI,GAAe,IAAM,EACrBC,GAAe,KAAO,EACtBC,GAAe,IAAM,EACrBL,GAAe,IAAM,EACrBC,GAAe,IAAM,EACrBC,GAAe,IAAM,EACrBpB,GAAe,KAAO,EACtBC,GAAe,IAAM,EACrBC,GAAe,IAAM,EACrBC,GAAe,IAAM,EACrBC,GAAe,IAAM,EACrBC,GAAe,IAAM,EAOrB,IAAImB,GAAM,SAAUC,GAClB,MAAO,CACL,CAACA,EAAKC,WAAY,GAClB,CAAC,EAAG,GACJ,CAAC,EAAGD,EAAKE,cAGTC,GAAM,SAAUH,GAClB,MAAO,CACL,CAAC,EAAGA,EAAKI,aACT,CAAC,EAAG,GACJ,CAACJ,EAAKK,YAAa,KAGnBC,GAAM,SAAUN,GAClB,MAAO,CACL,CAACA,EAAKO,SAAU,GAChB,CAAC,EAAG,GACJ,CAAC,EAAGP,EAAKQ,YAGTC,GAAM,SAAUT,GAClB,MAAO,CACL,CAAC,EAAGA,EAAKU,SACT,CAAC,EAAG,GACJ,CAACV,EAAKW,QAAS,KAIfC,GAAM,SAAUZ,GAClB,MAAO,CACL,CAACA,EAAKK,YAAa,GACnB,CAACL,EAAKC,WAAY,GAClB,CAAC,EAAGD,EAAKE,YACT,CAAC,EAAGF,EAAKU,WAGTG,GAAM,SAAUb,GAClB,MAAO,CACL,CAACA,EAAKK,YAAa,GACnB,CAACL,EAAKC,WAAY,GAClB,CAAC,EAAGD,EAAKQ,UACT,CAAC,EAAGR,EAAKI,eAGTU,GAAM,SAAUd,GAClB,MAAO,CACL,CAAC,EAAGA,EAAKQ,UACT,CAAC,EAAGR,EAAKI,aACT,CAACJ,EAAKW,QAAS,GACf,CAACX,EAAKO,SAAU,KAGhBQ,GAAM,SAAUf,GAClB,MAAO,CACL,CAAC,EAAGA,EAAKE,YACT,CAAC,EAAGF,EAAKU,SACT,CAACV,EAAKW,QAAS,GACf,CAACX,EAAKO,SAAU,KAqVhBS,GAAgB,GAChBC,GAAgB,GAChBC,GAAgB,GAChBC,GAAgB,GAChBC,GAAgB,GAChBC,GAAgB,GAChBC,GAAgB,GAChBC,GAAgB,GAGpBJ,GAAc,GAAKC,GAAc,GAAK,GACtCD,GAAc,KAAOC,GAAc,KAAO,GAC1CF,GAAc,GAAKD,GAAc,GAAK,GACtCC,GAAc,KAAOD,GAAc,KAAO,GAC1CD,GAAc,IAAMO,GAAc,IAAM,EACxCP,GAAc,KAAOO,GAAc,KAAO,EAC1CF,GAAc,IAAMC,GAAc,IAAM,GACxCD,GAAc,KAAOC,GAAc,KAAO,GAG1CJ,GAAc,GAAKG,GAAc,GAAK,GACtCF,GAAc,GAAKC,GAAc,GAAK,GACtCF,GAAc,KAAOG,GAAc,KAAO,GAC1CF,GAAc,KAAOC,GAAc,KAAO,GAC1CJ,GAAc,GAAKG,GAAc,GAAK,EACtCF,GAAc,GAAKC,GAAc,GAAK,GACtCF,GAAc,KAAOG,GAAc,KAAO,EAC1CF,GAAc,KAAOC,GAAc,KAAO,GAC1CF,GAAc,IAAMO,GAAc,IAAM,EACxCN,GAAc,IAAMK,GAAc,IAAM,EACxCN,GAAc,KAAOO,GAAc,KAAO,EAC1CN,GAAc,KAAOK,GAAc,KAAO,EAC1CF,GAAc,KAAOG,GAAc,KAAO,GAC1CF,GAAc,KAAOC,GAAc,KAAO,GAC1CF,GAAc,IAAMG,GAAc,IAAM,GACxCF,GAAc,IAAMC,GAAc,IAAM,GAGxCL,GAAc,GAAKG,GAAc,GAAK,GACtCH,GAAc,KAAOG,GAAc,KAAO,GAC1CF,GAAc,IAAMK,GAAc,IAAM,EACxCL,GAAc,KAAOK,GAAc,KAAO,EAC1CP,GAAc,IAAMK,GAAc,IAAM,GACxCL,GAAc,IAAMK,GAAc,IAAM,GACxCF,GAAc,IAAMG,GAAc,IAAM,EACxCH,GAAc,KAAOG,GAAc,KAAO,EAC1CN,GAAc,KAAOK,GAAc,KAAO,GAC1CJ,GAAc,KAAOG,GAAc,KAAO,GAC1CJ,GAAc,IAAMK,GAAc,IAAM,GACxCJ,GAAc,IAAMG,GAAc,IAAM,GACxCF,GAAc,KAAOK,GAAc,KAAO,EAC1CJ,GAAc,KAAOG,GAAc,KAAO,EAC1CJ,GAAc,IAAMK,GAAc,IAAM,EACxCJ,GAAc,IAAMG,GAAc,IAAM,EAGxCL,GAAc,KAAOK,GAAc,KAAO,EAC1CL,GAAc,IAAMK,GAAc,IAAM,EACxCF,GAAc,KAAOG,GAAc,KAAO,GAC1CH,GAAc,IAAMG,GAAc,IAAM,GACxCL,GAAc,IAAMG,GAAc,IAAM,GACxCH,GAAc,IAAMG,GAAc,IAAM,GACxCL,GAAc,IAAMG,GAAc,IAAM,EACxCH,GAAc,IAAMG,GAAc,IAAM,EACxCH,GAAc,IAAMM,GAAc,IAAM,EACxCL,GAAc,IAAMI,GAAc,IAAM,GACxCL,GAAc,IAAMM,GAAc,IAAM,EACxCL,GAAc,IAAMI,GAAc,IAAM,GACxCL,GAAc,IAAME,GAAc,IAAM,EACxCC,GAAc,IAAMI,GAAc,IAAM,EACxCP,GAAc,KAAOE,GAAc,KAAO,EAC1CC,GAAc,KAAOI,GAAc,KAAO,EAC1CN,GAAc,GAAKI,GAAc,GAAK,GACtCH,GAAc,GAAKE,GAAc,GAAK,GACtCH,GAAc,KAAOI,GAAc,KAAO,GAC1CH,GAAc,KAAOE,GAAc,KAAO,GAC1CD,GAAc,KAAOI,GAAc,KAAO,EAC1CH,GAAc,KAAOE,GAAc,KAAO,GAC1CH,GAAc,IAAMI,GAAc,IAAM,EACxCH,GAAc,IAAME,GAAc,IAAM,GACxCJ,GAAc,IAAMI,GAAc,IAAM,EACxCH,GAAc,IAAME,GAAc,IAAM,GACxCH,GAAc,KAAOI,GAAc,KAAO,EAC1CH,GAAc,KAAOE,GAAc,KAAO,GAC1CL,GAAc,KAAOI,GAAc,KAAO,GAC1CC,GAAc,KAAOE,GAAc,KAAO,GAC1CP,GAAc,IAAMI,GAAc,IAAM,GACxCC,GAAc,IAAME,GAAc,IAAM,GACxCN,GAAc,IAAMM,GAAc,IAAM,EACxCL,GAAc,IAAMI,GAAc,IAAM,EACxCL,GAAc,KAAOM,GAAc,KAAO,EAC1CL,GAAc,KAAOI,GAAc,KAAO,EAC1CN,GAAc,GAAKI,GAAc,GAAK,GACtCH,GAAc,GAAKE,GAAc,GAAK,GACtCH,GAAc,KAAOI,GAAc,KAAO,GAC1CH,GAAc,KAAOE,GAAc,KAAO,GAG1CF,GAAc,IAAMM,GAAc,IAAM,EACxCH,GAAc,IAAME,GAAc,IAAM,GACxCL,GAAc,KAAOM,GAAc,KAAO,EAC1CH,GAAc,KAAOE,GAAc,KAAO,GAC1CJ,GAAc,KAAOE,GAAc,KAAO,GAC1CC,GAAc,KAAOE,GAAc,KAAO,GAC1CL,GAAc,IAAME,GAAc,IAAM,GACxCC,GAAc,IAAME,GAAc,IAAM,GACxCP,GAAc,IAAME,GAAc,IAAM,EACxCC,GAAc,IAAME,GAAc,IAAM,GACxCL,GAAc,IAAME,GAAc,IAAM,EACxCC,GAAc,IAAME,GAAc,IAAM,GACxCL,GAAc,IAAMM,GAAc,IAAM,EACxCL,GAAc,IAAME,GAAc,IAAM,GACxCH,GAAc,IAAMM,GAAc,IAAM,EACxCL,GAAc,IAAME,GAAc,IAAM,GACxCH,GAAc,KAAOG,GAAc,KAAO,EAC1CC,GAAc,KAAOG,GAAc,KAAO,GAC1CP,GAAc,IAAMG,GAAc,IAAM,EACxCC,GAAc,IAAMG,GAAc,IAAM,GACxCN,GAAc,IAAMK,GAAc,IAAM,EACxCJ,GAAc,IAAMG,GAAc,IAAM,GACxCJ,GAAc,KAAOK,GAAc,KAAO,EAC1CJ,GAAc,KAAOG,GAAc,KAAO,GAG1CL,GAAc,IAAMG,GAAc,IAAM,EACxCF,GAAc,IAAMC,GAAc,IAAM,GACxCE,GAAc,IAAMG,GAAc,IAAM,GACxCF,GAAc,IAAMC,GAAc,IAAM,GACxCN,GAAc,KAAOO,GAAc,KAAO,EAC1CN,GAAc,KAAOK,GAAc,KAAO,EAC1CJ,GAAc,KAAOG,GAAc,KAAO,GAC1CF,GAAc,KAAOC,GAAc,KAAO,GAC1CJ,GAAc,IAAMO,GAAc,IAAM,EACxCN,GAAc,IAAMC,GAAc,IAAM,GACxCC,GAAc,IAAMC,GAAc,IAAM,GACxCC,GAAc,IAAMC,GAAc,IAAM,GAGxCN,GAAc,KAAOO,GAAc,KAAO,EAC1CJ,GAAc,KAAOC,GAAc,KAAO,GAC1CH,GAAc,KAAOC,GAAc,KAAO,GAC1CG,GAAc,KAAOC,GAAc,KAAO,GAC1CN,GAAc,KAAOG,GAAc,KAAO,EAC1CC,GAAc,KAAOG,GAAc,KAAO,GAC1CN,GAAc,KAAOK,GAAc,KAAO,EAC1CJ,GAAc,KAAOG,GAAc,KAAO,GAG1CL,GAAc,KAAOO,GAAc,KAAO,EAC1CL,GAAc,KAAOG,GAAc,KAAO,GAC1CF,GAAc,KAAOC,GAAc,KAAO,GAC1CJ,GAAc,KAAOE,GAAc,KAAO,EAC1CC,GAAc,KAAOC,GAAc,KAAO,GAC1CC,GAAc,KAAOE,GAAc,KAAO,GAC1CP,GAAc,KAAOO,GAAc,KAAO,EAC1CN,GAAc,KAAOK,GAAc,KAAO,EAC1CH,GAAc,KAAOC,GAAc,KAAO,GAC1CJ,GAAc,KAAOO,GAAc,KAAO,EAC1CN,GAAc,KAAOE,GAAc,KAAO,GAC1CC,GAAc,KAAOE,GAAc,KAAO,GAC1CN,GAAc,IAAMG,GAAc,IAAM,EACxCF,GAAc,IAAMC,GAAc,IAAM,GACxCG,GAAc,IAAMC,GAAc,IAAM,GACxCN,GAAc,IAAMM,GAAc,IAAM,EACxCL,GAAc,IAAMC,GAAc,IAAM,GACxCC,GAAc,IAAME,GAAc,IAAM,GACxCJ,GAAc,IAAMC,GAAc,IAAM,GACxCE,GAAc,IAAMG,GAAc,IAAM,GACxCF,GAAc,IAAMC,GAAc,IAAM,GACxCL,GAAc,IAAMM,GAAc,IAAM,EACxCL,GAAc,IAAME,GAAc,IAAM,GACxCC,GAAc,IAAMC,GAAc,IAAM,GAOxC,IAAIE,GAAgB,GAGpBA,GAAc,GAAKA,GAAc,KAAOzB,GACxCyB,GAAc,GAAKA,GAAc,KAAOrB,GACxCqB,GAAc,IAAMA,GAAc,KAAOlB,GACzCkB,GAAc,IAAMA,GAAc,KAAOf,GAGzCe,GAAc,KAAOA,GAAc,GAAKZ,GACxCY,GAAc,KAAOA,GAAc,GAAKX,GACxCW,GAAc,KAAOA,GAAc,IAAMV,GACzCU,GAAc,IAAMA,GAAc,KAAOT,GAGzCS,GAAc,GAAKA,GAAc,KAlhBvB,SAAUxB,GAClB,MAAO,CACL,CAAC,EAAG,GACJ,CAAC,EAAGA,EAAKE,YACT,CAAC,EAAGF,EAAKI,aACT,CAAC,EAAG,KA8gBRoB,GAAc,IAAMA,GAAc,KA3gBxB,SAAUxB,GAClB,MAAO,CACL,CAAC,EAAG,GACJ,CAACA,EAAKK,YAAa,GACnB,CAACL,EAAKO,SAAU,GAChB,CAAC,EAAG,KAugBRiB,GAAc,IAAMA,GAAc,IApgBxB,SAAUxB,GAClB,MAAO,CACL,CAAC,EAAG,GACJ,CAAC,EAAGA,EAAKQ,UACT,CAAC,EAAGR,EAAKU,SACT,CAAC,EAAG,KAggBRc,GAAc,IAAMA,GAAc,KA7fxB,SAAUxB,GAClB,MAAO,CACL,CAACA,EAAKC,WAAY,GAClB,CAAC,EAAG,GACJ,CAAC,EAAG,GACJ,CAACD,EAAKW,QAAS,KAyfnBa,GAAc,KAAOA,GAAc,IAtfzB,SAAUxB,GAClB,MAAO,CACL,CAAC,EAAGA,EAAKQ,UACT,CAAC,EAAGR,EAAKI,aACT,CAAC,EAAGJ,EAAKE,YACT,CAAC,EAAGF,EAAKU,WAkfbc,GAAc,KAAOA,GAAc,IA/ezB,SAAUxB,GAClB,MAAO,CACL,CAACA,EAAKW,QAAS,GACf,CAACX,EAAKO,SAAU,GAChB,CAACP,EAAKK,YAAa,GACnB,CAACL,EAAKC,WAAY,KA6etBuB,GAAc,IAzeJ,WACR,MAAO,CACL,CAAC,EAAG,GACJ,CAAC,EAAG,GACJ,CAAC,EAAG,GACJ,CAAC,EAAG,KAueRA,GAAc,KAAOA,GAAc,IAnezB,SAAUxB,GAClB,MAAO,CACL,CAAC,EAAGA,EAAKI,aACT,CAAC,EAAG,GACJ,CAAC,EAAG,GACJ,CAAC,EAAG,GACJ,CAACJ,EAAKW,QAAS,KA8dnBa,GAAc,KAAOA,GAAc,IA1dzB,SAAUxB,GAClB,MAAO,CACL,CAACA,EAAKO,SAAU,GAChB,CAAC,EAAG,GACJ,CAAC,EAAG,GACJ,CAAC,EAAG,GACJ,CAAC,EAAGP,EAAKE,cAqdbsB,GAAc,IAAMA,GAAc,IAjdxB,SAAUxB,GAClB,MAAO,CACL,CAAC,EAAG,GACJ,CAACA,EAAKK,YAAa,GACnB,CAAC,EAAGL,EAAKU,SACT,CAAC,EAAG,GACJ,CAAC,EAAG,KA4cRc,GAAc,IAAMA,GAAc,IAxcxB,SAAUxB,GAClB,MAAO,CACL,CAAC,EAAG,GACJ,CAAC,EAAGA,EAAKQ,UACT,CAACR,EAAKC,WAAY,GAClB,CAAC,EAAG,GACJ,CAAC,EAAG,KAmcRuB,GAAc,IAAMA,GAAc,IA/bxB,SAAUxB,GAClB,MAAO,CACL,CAAC,EAAGA,EAAKQ,UACT,CAAC,EAAGR,EAAKI,aACT,CAAC,EAAGJ,EAAKU,SACT,CAAC,EAAG,GACJ,CAACV,EAAKW,QAAS,KA0bnBa,GAAc,IAAMA,GAAc,KAtbxB,SAAUxB,GAClB,MAAO,CACL,CAAC,EAAG,GACJ,CAAC,EAAGA,EAAKQ,UACT,CAACR,EAAKK,YAAa,GACnB,CAACL,EAAKC,WAAY,GAClB,CAACD,EAAKO,SAAU,KAibpBiB,GAAc,GAAKA,GAAc,KA7avB,SAAUxB,GAClB,MAAO,CACL,CAAC,EAAGA,EAAKI,aACT,CAAC,EAAG,GACJ,CAACJ,EAAKK,YAAa,GACnB,CAAC,EAAGL,EAAKE,YACT,CAAC,EAAGF,EAAKU,WAwabc,GAAc,KAAOA,GAAc,IApazB,SAAUxB,GAClB,MAAO,CACL,CAACA,EAAKO,SAAU,GAChB,CAACP,EAAKC,WAAY,GAClB,CAAC,EAAG,GACJ,CAAC,EAAGD,EAAKE,YACT,CAACF,EAAKW,QAAS,KA+ZnBa,GAAc,IAAMA,GAAc,KA3ZxB,SAAUxB,GAClB,MAAO,CACL,CAACA,EAAKK,YAAa,GACnB,CAACL,EAAKC,WAAY,GAClB,CAAC,EAAGD,EAAKU,SACT,CAAC,EAAG,GACJ,CAACV,EAAKW,QAAS,KAsZnBa,GAAc,KAAOA,GAAc,IAlZzB,SAAUxB,GAClB,MAAO,CACL,CAAC,EAAG,GACJ,CAAC,EAAGA,EAAKQ,UACT,CAAC,EAAGR,EAAKE,YACT,CAAC,EAAGF,EAAKU,SACT,CAACV,EAAKO,SAAU,KA6YpBiB,GAAc,IAAMA,GAAc,KAzYxB,SAAUxB,GAClB,MAAO,CACL,CAAC,EAAGA,EAAKI,aACT,CAAC,EAAG,GACJ,CAACJ,EAAKK,YAAa,GACnB,CAACL,EAAKW,QAAS,GACf,CAACX,EAAKO,SAAU,KAoYpBiB,GAAc,GAAKA,GAAc,KAhYvB,SAAUxB,GAClB,MAAO,CACL,CAAC,EAAGA,EAAKQ,UACT,CAAC,EAAGR,EAAKI,aACT,CAACJ,EAAKC,WAAY,GAClB,CAAC,EAAG,GACJ,CAAC,EAAGD,EAAKE,cA6XbsB,GAAc,IAAMA,GAAc,KAxXxB,SAAUxB,GAClB,MAAO,CACL,CAAC,EAAGA,EAAKI,aACT,CAAC,EAAG,GACJ,CAAC,EAAG,GACJ,CAAC,EAAGJ,EAAKE,YACT,CAACF,EAAKW,QAAS,GACf,CAACX,EAAKO,SAAU,KAkXpBiB,GAAc,KAAOA,GAAc,IA9WzB,SAAUxB,GAClB,MAAO,CACL,CAAC,EAAG,GACJ,CAAC,EAAG,GACJ,CAACA,EAAKK,YAAa,GACnB,CAAC,EAAGL,EAAKE,YACT,CAAC,EAAGF,EAAKU,SACT,CAACV,EAAKO,SAAU,KAwWpBiB,GAAc,IAAMA,GAAc,IApWxB,SAAUxB,GAClB,MAAO,CACL,CAAC,EAAG,GACJ,CAAC,EAAGA,EAAKQ,UACT,CAACR,EAAKK,YAAa,GACnB,CAACL,EAAKC,WAAY,GAClB,CAAC,EAAGD,EAAKU,SACT,CAAC,EAAG,KA8VRc,GAAc,IAAMA,GAAc,IA1VxB,SAAUxB,GAClB,MAAO,CACL,CAAC,EAAGA,EAAKQ,UACT,CAAC,EAAGR,EAAKI,aACT,CAACJ,EAAKC,WAAY,GAClB,CAAC,EAAG,GACJ,CAAC,EAAG,GACJ,CAACD,EAAKW,QAAS,KAoVnBa,GAAc,KAAOA,GAAc,IAhVzB,SAAUxB,GAClB,MAAO,CACL,CAAC,EAAG,GACJ,CAAC,EAAGA,EAAKQ,UACT,CAACR,EAAKC,WAAY,GAClB,CAAC,EAAG,GACJ,CAAC,EAAGD,EAAKE,YACT,CAACF,EAAKO,SAAU,KA0UpBiB,GAAc,IAAMA,GAAc,KAtUxB,SAAUxB,GAClB,MAAO,CACL,CAAC,EAAGA,EAAKI,aACT,CAAC,EAAG,GACJ,CAACJ,EAAKK,YAAa,GACnB,CAAC,EAAGL,EAAKU,SACT,CAAC,EAAG,GACJ,CAACV,EAAKW,QAAS,KAkUnBa,GAAc,IAAM,SAAU3qF,GAC5B,MAAO,CAACkqF,GAAIlqF,GAAIgqF,GAAIhqF,KAEtB2qF,GAAc,IAhUJ,SAAUxB,GAClB,MAAO,CACL,CAAC,EAAGA,EAAKQ,UACT,CAAC,EAAGR,EAAKI,aACT,CAACJ,EAAKK,YAAa,GACnB,CAACL,EAAKC,WAAY,GAClB,CAAC,EAAGD,EAAKE,YACT,CAAC,EAAGF,EAAKU,SACT,CAACV,EAAKW,QAAS,GACf,CAACX,EAAKO,SAAU,KAwTpBiB,GAAc,KAAO,SAAU3qF,GAC7B,MAAO,CAACiqF,GAAIjqF,GAAI+pF,GAAI/pF,KAItB2qF,GAAc,KAAO,SAAU3qF,GAC7B,MAAO,CAACypF,GAAIzpF,GAAIkpF,GAAIlpF,KAEtB2qF,GAAc,KAAO,SAAU3qF,GAC7B,MAAO,CAACspF,GAAItpF,GAAI4pF,GAAI5pF,KAEtB2qF,GAAc,KA9TJ,SAAUxB,GAClB,MAAO,CACL,CAAC,EAAG,GACJ,CAAC,EAAGA,EAAKQ,UACT,CAACR,EAAKC,WAAY,GAClB,CAAC,EAAG,GACJ,CAAC,EAAGD,EAAKE,YACT,CAACF,EAAKO,SAAU,KAwTpBiB,GAAc,KApTJ,SAAUxB,GAClB,MAAO,CACL,CAAC,EAAGA,EAAKI,aACT,CAAC,EAAG,GACJ,CAACJ,EAAKK,YAAa,GACnB,CAAC,EAAGL,EAAKU,SACT,CAAC,EAAG,GACJ,CAACV,EAAKW,QAAS,KAgTnBa,GAAc,KAAO,SAAU3qF,GAC7B,MAAO,CAACypF,GAAIzpF,GAAI+pF,GAAI/pF,KAEtB2qF,GAAc,KA9SJ,SAAUxB,GAClB,MAAO,CACL,CAAC,EAAG,GACJ,CAAC,EAAGA,EAAKQ,UACT,CAACR,EAAKK,YAAa,GACnB,CAACL,EAAKC,WAAY,GAClB,CAAC,EAAGD,EAAKE,YACT,CAAC,EAAGF,EAAKU,SACT,CAACV,EAAKO,SAAU,KAuSpBiB,GAAc,KAAO,SAAU3qF,GAC7B,MAAO,CAACiqF,GAAIjqF,GAAIkpF,GAAIlpF,KAEtB2qF,GAAc,KAtSJ,SAAUxB,GAClB,MAAO,CACL,CAAC,EAAGA,EAAKQ,UACT,CAAC,EAAGR,EAAKI,aACT,CAACJ,EAAKC,WAAY,GAClB,CAAC,EAAG,GACJ,CAAC,EAAGD,EAAKE,YACT,CAACF,EAAKW,QAAS,GACf,CAACX,EAAKO,SAAU,KA+RpBiB,GAAc,IAAM,SAAU3qF,GAC5B,MAAO,CAACgqF,GAAIhqF,GAAI4pF,GAAI5pF,KAEtB2qF,GAAc,IA9RJ,SAAUxB,GAClB,MAAO,CACL,CAAC,EAAGA,EAAKQ,UACT,CAAC,EAAGR,EAAKI,aACT,CAACJ,EAAKK,YAAa,GACnB,CAACL,EAAKC,WAAY,GAClB,CAAC,EAAGD,EAAKU,SACT,CAAC,EAAG,GACJ,CAACV,EAAKW,QAAS,KAuRnBa,GAAc,IAAM,SAAU3qF,GAC5B,MAAO,CAACspF,GAAItpF,GAAIkqF,GAAIlqF,KAEtB2qF,GAAc,IAtRJ,SAAUxB,GAClB,MAAO,CACL,CAAC,EAAGA,EAAKI,aACT,CAAC,EAAG,GACJ,CAACJ,EAAKK,YAAa,GACnB,CAAC,EAAGL,EAAKE,YACT,CAAC,EAAGF,EAAKU,SACT,CAACV,EAAKW,QAAS,GACf,CAACX,EAAKO,SAAU,KC5vCb,SAAS/qD,GAAiB39B,EAAIE,EAAIiG,GACrC,IAlBc3F,EAkBVopF,EAAM1pF,EAAG,GAAKF,EAAG,GAAI6pF,EAAM3pF,EAAG,GAAKF,EAAG,GAAI8pF,EAAM3jF,EAAE,GAAKjG,EAAG,GAAI6pF,EAAM5jF,EAAE,GAAKjG,EAAG,GAClF,QAnBcM,EAmBEopF,EAAMG,EAAMD,EAAMD,GAlBrB,IAAMrpF,EAAI,KAAOA,EA+C3B,SAASwpF,GAAiBxhF,EAAMyhF,GACnC,OAAOA,EAAI/2F,SAASE,YAAY,GAAGse,OAAM,SAAU1S,GAC/C,OAAO,EAAsB,EAAMA,GAAIwJ,MCjD/C,IAAIqG,GAAsB,WACtB,SAASA,EAAKzb,GACV/G,KAAK4G,GAAK4b,EAAKq7E,QAAQ92F,GACvB/G,KAAK+G,YAAcA,EACnB/G,KAAK89F,WAAa,GAElB99F,KAAK+9F,WAAa,GAClB/9F,KAAKg+F,kBAAmB,EA+E5B,OA7EAx7E,EAAKq7E,QAAU,SAAU92F,GACrB,OAAOA,EAAYV,KAAK,MAE5Bmc,EAAKlgB,UAAU27F,gBAAkB,SAAU/uB,GACvClvE,KAAK89F,WAAa99F,KAAK89F,WAAWtjD,QAAO,SAAUxqC,GAAK,OAAOA,EAAEi/E,KAAKroF,KAAOsoE,EAAK+f,KAAKroF,OAE3F4b,EAAKlgB,UAAU47F,gBAAkB,SAAUhvB,GACvClvE,KAAK+9F,WAAa/9F,KAAK+9F,WAAWvjD,QAAO,SAAUxqC,GAAK,OAAOA,EAAEk/E,GAAGtoF,KAAOsoE,EAAKggB,GAAGtoF,OAQvF4b,EAAKlgB,UAAU67F,aAAe,SAAUjvB,GACpClvE,KAAK+9F,WAAW17F,KAAK6sE,GACrBlvE,KAAKg+F,kBAAmB,GAQ5Bx7E,EAAKlgB,UAAU87F,eAAiB,WAC5B,IAAI3kE,EAAQz5B,KACPA,KAAKg+F,mBAGNh+F,KAAK+9F,WAAWj4F,MAAK,SAAUpG,EAAGC,GAC9B,IAAI0+F,EAAQ3+F,EAAEwvF,GAAIoP,EAAQ3+F,EAAEuvF,GAC5B,GAAImP,EAAMt3F,YAAY,GAAK0yB,EAAM1yB,YAAY,IAAM,GAC/Cu3F,EAAMv3F,YAAY,GAAK0yB,EAAM1yB,YAAY,GAAK,EAC9C,OAAO,EACX,GAAIs3F,EAAMt3F,YAAY,GAAK0yB,EAAM1yB,YAAY,GAAK,GAC9Cu3F,EAAMv3F,YAAY,GAAK0yB,EAAM1yB,YAAY,IAAM,EAC/C,OAAQ,EACZ,GAAIs3F,EAAMt3F,YAAY,GAAK0yB,EAAM1yB,YAAY,KAAO,GAChDu3F,EAAMv3F,YAAY,GAAK0yB,EAAM1yB,YAAY,KAAO,EAChD,OAAIs3F,EAAMt3F,YAAY,GAAK0yB,EAAM1yB,YAAY,IAAM,GAC/Cu3F,EAAMv3F,YAAY,GAAK0yB,EAAM1yB,YAAY,IAAM,EACxCs3F,EAAMt3F,YAAY,GAAKu3F,EAAMv3F,YAAY,GAC7Cu3F,EAAMv3F,YAAY,GAAKs3F,EAAMt3F,YAAY,GAEpD,IAAImjE,EAAM54B,GAAiB7X,EAAM1yB,YAAas3F,EAAMt3F,YAAau3F,EAAMv3F,aACvE,OAAImjE,EAAM,EACC,EACPA,EAAM,GACE,EACHtrE,KAAKyF,IAAIg6F,EAAMt3F,YAAY,GAAK0yB,EAAM1yB,YAAY,GAAI,GAC3DnI,KAAKyF,IAAIg6F,EAAMt3F,YAAY,GAAK0yB,EAAM1yB,YAAY,GAAI,IAASnI,KAAKyF,IAAIi6F,EAAMv3F,YAAY,GAAK0yB,EAAM1yB,YAAY,GAAI,GACrHnI,KAAKyF,IAAIi6F,EAAMv3F,YAAY,GAAK0yB,EAAM1yB,YAAY,GAAI,OAG9D/G,KAAKg+F,kBAAmB,IAWhCx7E,EAAKlgB,UAAUi8F,cAAgB,WAE3B,OADAv+F,KAAKo+F,iBACEp+F,KAAK+9F,YAEhBv7E,EAAKlgB,UAAUk8F,aAAe,SAAUl/F,GAEpC,OADAU,KAAKo+F,iBACEp+F,KAAK+9F,WAAWz+F,IAE3BkjB,EAAKlgB,UAAUm8F,aAAe,SAAUvvB,GACpClvE,KAAK89F,WAAWz7F,KAAK6sE,IAElB1sD,EAtFc,GAwFzB,MChBA,GAvE0B,WAKtB,SAASk8E,EAAKzP,EAAMC,GAChBlvF,KAAKivF,KAAOA,EACZjvF,KAAKkvF,GAAKA,EACVlvF,KAAKoS,UAAOhF,EACZpN,KAAK2+F,WAAQvxF,EACbpN,KAAK4+F,cAAWxxF,EAChBpN,KAAKuH,UAAO6F,EACZpN,KAAKivF,KAAKkP,aAAan+F,MACvBA,KAAKkvF,GAAGuP,aAAaz+F,MAwDzB,OAjDA0+F,EAAKp8F,UAAUu8F,YAAc,WAKzB,OAJK7+F,KAAK4+F,WACN5+F,KAAK4+F,SAAW,IAAIF,EAAK1+F,KAAKkvF,GAAIlvF,KAAKivF,MACvCjvF,KAAK4+F,SAASA,SAAW5+F,MAEtBA,KAAK4+F,UAKhBF,EAAKp8F,UAAUw8F,WAAa,WACxB9+F,KAAKivF,KAAKiP,gBAAgBl+F,MAC1BA,KAAKkvF,GAAG+O,gBAAgBj+F,OAU5B0+F,EAAKp8F,UAAUmiD,QAAU,SAAUyqB,GAC/B,OAAOlvE,KAAKivF,KAAKroF,KAAOsoE,EAAK+f,KAAKroF,IAAM5G,KAAKkvF,GAAGtoF,KAAOsoE,EAAKggB,GAAGtoF,IAEnE83F,EAAKp8F,UAAUkV,SAAW,WACtB,MAAO,UAAYxX,KAAKivF,KAAKroF,GAAK,OAAS5G,KAAKkvF,GAAGtoF,GAAK,MAO5D83F,EAAKp8F,UAAUuzC,aAAe,WAC1B,OAAO,EAAW,CAAC71C,KAAKivF,KAAKloF,YAAa/G,KAAKkvF,GAAGnoF,eAYtD23F,EAAKp8F,UAAUwqC,UAAY,SAAUoiC,GACjC,OAAO59B,GAAiB49B,EAAK+f,KAAKloF,YAAamoE,EAAKggB,GAAGnoF,YAAa/G,KAAKkvF,GAAGnoF,cAEzE23F,EArEc,GCMrB,GAA0B,WAC1B,SAASK,IACL/+F,KAAK+T,MAAQ,GACb/T,KAAKoH,aAAUgG,EACfpN,KAAK8/C,cAAW1yC,EAqLpB,OA7KA2xF,EAASz8F,UAAUD,KAAO,SAAU6sE,GAChClvE,KAAK+T,MAAM1R,KAAK6sE,GAChBlvE,KAAKoH,QAAUpH,KAAK8/C,cAAW1yC,GASnC2xF,EAASz8F,UAAUslB,IAAM,SAAUtoB,GAC/B,OAAOU,KAAK+T,MAAMzU,IAEtBoJ,OAAOC,eAAeo2F,EAASz8F,UAAW,SAAU,CAOhDslB,IAAK,WACD,OAAO5nB,KAAK+T,MAAMxV,QAEtBsZ,YAAY,EACZxH,cAAc,IAQlB0uF,EAASz8F,UAAUoJ,QAAU,SAAUyP,GACnCnb,KAAK+T,MAAMrI,QAAQyP,IASvB4jF,EAASz8F,UAAU4H,IAAM,SAAUiR,GAC/B,OAAOnb,KAAK+T,MAAM7J,IAAIiR,IAS1B4jF,EAASz8F,UAAUijB,KAAO,SAAUpK,GAChC,OAAOnb,KAAK+T,MAAMwR,KAAKpK,IAY3B4jF,EAASz8F,UAAUmjD,QAAU,WAEzB,OAAO,GAWXs5C,EAASz8F,UAAU0tD,OAAS,WACxB,IAAIv2B,EAAQz5B,KAGRg/F,EAAUh/F,KAAK+T,MAAMmgF,QAAO,SAAUngE,EAAMm7C,EAAM5vE,GAGlD,OAFI4vE,EAAK+f,KAAKloF,YAAY,GAAK0yB,EAAM1lB,MAAMggB,GAAMk7D,KAAKloF,YAAY,KAC9DgtB,EAAOz0B,GACJy0B,IACR,GAAIkrE,GAAqB,IAAZD,EAAgBh/F,KAAKzB,OAASygG,GAAW,EAAGE,GAASF,EAAU,GAAKh/F,KAAKzB,OAAQ4gG,EAAO7tD,GAAiBtxC,KAAK+T,MAAMkrF,GAAOhQ,KAAKloF,YAAa/G,KAAK+T,MAAMirF,GAAS/P,KAAKloF,YAAa/G,KAAK+T,MAAMmrF,GAAOjQ,KAAKloF,aAC1N,OAAa,IAATo4F,EACQn/F,KAAK+T,MAAMkrF,GAAOhQ,KAAKloF,YAAY,GACvC/G,KAAK+T,MAAMmrF,GAAOjQ,KAAKloF,YAAY,GACpCo4F,EAAO,GAQlBJ,EAASz8F,UAAU88F,aAAe,WAC9B,OAAO,EAAWp/F,KAAK+T,MAAM7J,KAAI,SAAUglE,GAAQ,OAAOA,EAAK+f,KAAKloF,iBAQxEg4F,EAASz8F,UAAUiuD,UAAY,WAC3B,GAAIvwD,KAAKoH,QACL,OAAOpH,KAAKoH,QAChB,IAAIL,EAAc/G,KAAK+T,MAAM7J,KAAI,SAAUglE,GAAQ,OAAOA,EAAK+f,KAAKloF,eAEpE,OADAA,EAAY1E,KAAKrC,KAAK+T,MAAM,GAAGk7E,KAAKloF,aAC5B/G,KAAKoH,QAAU,EAAQ,CAACL,KAQpCg4F,EAASz8F,UAAUg6C,YAAc,WAC7B,OAAIt8C,KAAK8/C,SACE9/C,KAAK8/C,SACR9/C,KAAK8/C,SAAW,GAAS9/C,KAAKuwD,cAU1CwuC,EAASroC,uBAAyB,SAAU2oC,EAAcC,GACtD,IACIC,EAAaC,EADbC,EAAeJ,EAAa/iD,cA2BhC,OAzBAgjD,EAAU5zF,SAAQ,SAAUg0F,GACxB,IHhIoBlwB,EAAMC,EAC9BkwB,EAAyEC,EAAyEC,EAAyEC,EG+HnNC,EAAcL,EAAMpjD,cAIxB,IAHIkjD,IACAD,EAAcC,EAASljD,eHlIDmzB,EGoIOgwB,EHnIrCE,GADwBnwB,EGoIAuwB,GHnIXl5F,SAASE,YAAY,GAAGmD,KAAI,SAAUyI,GAAK,OAAOA,EAAE,MAAQitF,EAAQpwB,EAAK3oE,SAASE,YAAY,GAAGmD,KAAI,SAAUyI,GAAK,OAAOA,EAAE,MAAQktF,EAAQpwB,EAAK5oE,SAASE,YAAY,GAAGmD,KAAI,SAAUyI,GAAK,OAAOA,EAAE,MAAQmtF,EAAQrwB,EAAK5oE,SAASE,YAAY,GAAGmD,KAAI,SAAUyI,GAAK,OAAOA,EAAE,MACxR/T,KAAKM,IAAIgF,MAAM,KAAMy7F,KAAW/gG,KAAKM,IAAIgF,MAAM,KAAM27F,IACzDjhG,KAAKM,IAAIgF,MAAM,KAAM07F,KAAWhhG,KAAKM,IAAIgF,MAAM,KAAM47F,IACrDlhG,KAAKQ,IAAI8E,MAAM,KAAMy7F,KAAW/gG,KAAKQ,IAAI8E,MAAM,KAAM27F,IACrDjhG,KAAKQ,IAAI8E,MAAM,KAAM07F,KAAWhhG,KAAKQ,IAAI8E,MAAM,KAAM47F,KGiI7CnC,GAAiBoC,EAAaN,GAAe,CAQ7C,IAPA,IAAIO,EAA0BX,EAAan1F,KAAI,SAAUglE,GAAQ,OAAOA,EAAK+f,KAAKloF,eAC9Ek5F,OAAY,EACZC,EAAU,SAAUvoE,GACf+nE,EAAMn6E,MAAK,SAAU2pD,GAAQ,OH5GrBixB,EG4G6CxoE,EH5GrCyoE,EG4GyClxB,EAAK+f,KAAKloF,YH3GjFo5F,EAAO,KAAOC,EAAO,IAAMD,EAAO,KAAOC,EAAO,GADpD,IAA0BD,EAAQC,OG6GjBH,EAAYtoE,IAGXtwB,EAAK,EAAGg5F,EAA4BL,EAAyB34F,EAAKg5F,EAA0B9hG,OAAQ8I,IAAM,CAE/G64F,EADSG,EAA0Bh5F,IAGnC44F,GAAaP,EAAMpsF,OAAO,EAAM2sF,MAC3BT,IAAY7B,GAAiB4B,EAAaQ,KAC3CP,EAAWE,QAIpBF,GAQXT,EAASz8F,UAAUgR,OAAS,SAAUqkB,GAClC,OAAO,EAAsBA,EAAI33B,KAAKuwD,cAEnCwuC,EAzLkB,GA2L7B,OCxK2B,WACvB,SAASuB,IACLtgG,KAAK+T,MAAQ,GAEb/T,KAAKugG,MAAQ,GASjBD,EAAME,YAAc,SAAUC,IAhClC,SAAyBA,GACrB,IAAKA,EACD,MAAM,IAAIz5F,MAAM,qBACpB,GAAqB,sBAAjBy5F,EAAQ95F,MACS,uBAAjB85F,EAAQ95F,MACS,oBAAjB85F,EAAQ95F,MACS,eAAjB85F,EAAQ95F,MACS,YAAjB85F,EAAQ95F,KACR,MAAM,IAAIK,MAAM,uBAAyBy5F,EAAQ95F,KAAO,oGAyBxD+5F,CAAgBD,GAChB,IAAIE,EAAQ,IAAIL,EAYhB,OAXA,EAAYG,GAAS,SAAUn6F,GhCiMvC,IAA8BuF,EAAUsC,EAAcrC,EAChDsC,EgCjMMsgF,EAAUpoF,EAAS,aAAc,sBhCgMfuF,EgC9LG,SAAU4G,EAAMmuF,GACjC,GAAInuF,EAAM,CACN,IAAI6L,EAAQqiF,EAAMn1C,QAAQ/4C,GAAO8L,EAAMoiF,EAAMn1C,QAAQo1C,GACrDD,EAAM9Z,QAAQvoE,EAAOC,GAEzB,OAAOqiF,GhC0LjBxyF,EAAgBD,EACpB,EgChMsB7H,GhCkMpB,SACEsH,EACAxB,EACAI,EACAE,EACAC,GAGEyB,EADiB,IAAfhC,QAAqCgB,IAAjBe,EACNP,EAEA/B,EACduC,EACAR,EACAxB,EACAI,EACAE,EACAC,KAGNb,MgC7MW60F,GAQXL,EAAMh+F,UAAUkpD,QAAU,SAAUzkD,GAChC,IAAIH,EAAK,WAAaG,GAClBnG,EAAOZ,KAAKugG,MAAM35F,GAGtB,OAFKhG,IACDA,EAAOZ,KAAKugG,MAAM35F,GAAM,IAAI,GAAKG,IAC9BnG,GAUX0/F,EAAMh+F,UAAUukF,QAAU,SAAUoI,EAAMC,GACtC,IAAIhgB,EAAO,IAAI,GAAK+f,EAAMC,GAAK2R,EAAe3xB,EAAK2vB,cACnD7+F,KAAK+T,MAAM1R,KAAK6sE,GAChBlvE,KAAK+T,MAAM1R,KAAKw+F,IAKpBP,EAAMh+F,UAAUw+F,cAAgB,WAC5B,IAAIrnE,EAAQz5B,KACZ0I,OAAO0O,KAAKpX,KAAKugG,OACZr2F,KAAI,SAAUtD,GAAM,OAAO6yB,EAAM8mE,MAAM35F,MACvC8E,SAAQ,SAAU9K,GAAQ,OAAO64B,EAAMsnE,gBAAgBngG,OAShE0/F,EAAMh+F,UAAUy+F,gBAAkB,SAAUngG,GACxC,IAAI64B,EAAQz5B,KAEZ,GAAIY,EAAKk9F,WAAWv/F,QAAU,EAAG,CAC7B,IAAIyiG,EAAapgG,EAAK29F,gBAAgBr0F,KAAI,SAAU8F,GAAK,OAAOA,EAAEk/E,MAClElvF,KAAK2e,WAAW/d,GAChBogG,EAAWt1F,SAAQ,SAAUjN,GAAK,OAAOg7B,EAAMsnE,gBAAgBtiG,QAUvE6hG,EAAMh+F,UAAU2+F,eAAiB,WAC7B,IAAIxnE,EAAQz5B,KACZA,KAAKkhG,sBACLlhG,KAAKmhG,wBAELnhG,KAAK+T,MAAMrI,SAAQ,SAAUwjE,GACrBA,EAAKyvB,QAAUzvB,EAAK0vB,SAASD,QAC7BllE,EAAM2nE,WAAWlyB,EAAK0vB,UACtBnlE,EAAM2nE,WAAWlyB,QAY7BoxB,EAAMh+F,UAAU4+F,oBAAsB,SAAUtgG,GAC5C,IAAI64B,EAAQz5B,KACQ,qBAATY,EACP8H,OAAO0O,KAAKpX,KAAKugG,OAAO70F,SAAQ,SAAU9E,GACtC,OAAO6yB,EAAMynE,oBAAoBznE,EAAM8mE,MAAM35F,OAIjDhG,EAAK29F,gBAAgB7yF,SAAQ,SAAUwjE,EAAM5vE,GACzCsB,EAAK49F,cAAoB,IAANl/F,EAAUsB,EAAK29F,gBAAgBhgG,OAASe,GAAK,GAAGs/F,SAASxsF,KAAO88D,MAe/FoxB,EAAMh+F,UAAU++F,qBAAuB,SAAUzgG,EAAM+9F,GAGnD,IAFA,IACI2C,EAAYC,EADZxtF,EAAQnT,EAAK29F,gBAERj/F,EAAIyU,EAAMxV,OAAS,EAAGe,GAAK,IAAKA,EAAG,CACxC,IAAIsoD,EAAK7zC,EAAMzU,GAAIktB,EAAMo7B,EAAGg3C,SAAU4C,OAAQ,EAAQC,OAAO,EACzD75C,EAAG+2C,QAAUA,IACb6C,EAAQ55C,GACRp7B,EAAImyE,QAAUA,IACd8C,EAAOj1E,GACNg1E,GAAUC,IAGXA,IACAF,EAAWE,GACXD,IACID,IACAA,EAASnvF,KAAOovF,EAChBD,OAAWn0F,GAEVk0F,IACDA,EAAaE,KAGrBD,IACAA,EAASnvF,KAAOkvF,IASxBhB,EAAMh+F,UAAU6+F,sBAAwB,WACpC,IAAIO,EAAiB,GACjB/C,EAAQ,EAYZ,OAXA3+F,KAAK+T,MAAMrI,SAAQ,SAAUwjE,GACzB,KAAIA,EAAKyvB,OAAS,GAAlB,CAEA+C,EAAer/F,KAAK6sE,GACpB,IAAIl/D,EAAIk/D,EACR,GACIl/D,EAAE2uF,MAAQA,EACV3uF,EAAIA,EAAEoC,YACA88D,EAAKzqB,QAAQz0C,IACvB2uF,QAEG+C,GAOXpB,EAAMh+F,UAAUq/F,aAAe,WAC3B,IAAIloE,EAAQz5B,KACZA,KAAKkhG,sBAELlhG,KAAK+T,MAAMrI,SAAQ,SAAUwjE,GACzBA,EAAKyvB,WAAQvxF,KAEjBpN,KAAKmhG,wBAAwBz1F,SAAQ,SAAUwjE,GAE3Cz1C,EAAMmoE,uBAAuB1yB,GAAMxjE,SAAQ,SAAU9K,GACjD64B,EAAM4nE,qBAAqBzgG,EAAMsuE,EAAKyvB,aAG9C,IAAIkD,EAAe,GAOnB,OALA7hG,KAAK+T,MAAMrI,SAAQ,SAAUwjE,GACrBA,EAAK3nE,MAETs6F,EAAax/F,KAAKo3B,EAAMqoE,cAAc5yB,OAEnC2yB,GAQXvB,EAAMh+F,UAAUs/F,uBAAyB,SAAUG,GAC/C,IAAIC,EAAoB,GACpB9yB,EAAO6yB,EACP7B,EAAU,WAEV,IAAI+B,EAAS,EACb/yB,EAAK+f,KAAKsP,gBAAgB7yF,SAAQ,SAAUsE,GACpCA,EAAE2uF,QAAUoD,EAAUpD,SACpBsD,KAENA,EAAS,GACTD,EAAkB3/F,KAAK6sE,EAAK+f,MAChC/f,EAAOA,EAAK98D,MAEhB,GACI8tF,WACM6B,EAAUt9C,QAAQyqB,IAC5B,OAAO8yB,GAQX1B,EAAMh+F,UAAUw/F,cAAgB,SAAUC,GACtC,IAAI7yB,EAAO6yB,EACPG,EAAW,IAAI,GACnB,GACIA,EAAS7/F,KAAK6sE,GACdA,EAAK3nE,KAAO26F,EACZhzB,EAAOA,EAAK98D,YACN2vF,EAAUt9C,QAAQyqB,IAC5B,OAAOgzB,GAQX5B,EAAMh+F,UAAUqc,WAAa,SAAU/d,GACnC,IAAI64B,EAAQz5B,KACZY,EAAK29F,gBAAgB7yF,SAAQ,SAAUwjE,GAAQ,OAAOz1C,EAAM2nE,WAAWlyB,MACvEtuE,EAAKk9F,WAAWpyF,SAAQ,SAAUwjE,GAAQ,OAAOz1C,EAAM2nE,WAAWlyB,aAC3DlvE,KAAKugG,MAAM3/F,EAAKgG,KAO3B05F,EAAMh+F,UAAU8+F,WAAa,SAAUlyB,GACnClvE,KAAK+T,MAAQ/T,KAAK+T,MAAMymC,QAAO,SAAUxqC,GAAK,OAAQA,EAAEy0C,QAAQyqB,MAChEA,EAAK4vB,cA3Qa,GC6C1B,SAASqD,GAAc36F,EAAYmwB,GAC/B,IAAK,IAAIr4B,EAAI,EAAGA,EAAIkI,EAAWT,YAAYxI,OAAS,EAAGe,IACnD,GAAI,GAAqBkI,EAAWT,YAAYzH,GAAIkI,EAAWT,YAAYzH,EAAI,GAAIq4B,EAAG5wB,aAClF,OAAO,EAGf,OAAO,EASX,SAAS,GAAaK,EAASI,GAC3B,IAAK,IAAIH,EAAK,EAAG2sB,EAAKxsB,EAAWT,YAAaM,EAAK2sB,EAAGz1B,OAAQ8I,IAAM,CAEhE,GAAI,EADQ2sB,EAAG3sB,GACkBD,GAC7B,OAAO,EAIf,OADuB,GAAcI,EAAY,GAAcJ,IAC1CM,SAASnJ,OAAS,EAkC3C,SAAS,GAAqB04F,EAAkBC,EAAgBv/D,GAC5D,IAAIyqE,EAAMzqE,EAAG,GAAKs/D,EAAiB,GAC/BoL,EAAM1qE,EAAG,GAAKs/D,EAAiB,GAC/B7G,EAAM8G,EAAe,GAAKD,EAAiB,GAC3C5G,EAAM6G,EAAe,GAAKD,EAAiB,GAE/C,OAAc,IADFmL,EAAM/R,EAAMgS,EAAMjS,IAI1BxxF,KAAKoiB,IAAIovE,IAAQxxF,KAAKoiB,IAAIqvE,GACtBD,EAAM,EACC6G,EAAiB,IAAMt/D,EAAG,IAAMA,EAAG,IAAMu/D,EAAe,GAGxDA,EAAe,IAAMv/D,EAAG,IAAMA,EAAG,IAAMs/D,EAAiB,GAG9D5G,EAAM,EACJ4G,EAAiB,IAAMt/D,EAAG,IAAMA,EAAG,IAAMu/D,EAAe,GAGxDA,EAAe,IAAMv/D,EAAG,IAAMA,EAAG,IAAMs/D,EAAiB,IAcvE,OArJA,SAAyBqL,EAAUC,GAC/B,IAAIC,GAAO,EASX,OARA,EAAYF,GAAU,SAAUG,GAC5B,EAAYF,GAAU,SAAUG,GAC5B,IAAa,IAATF,EACA,OAAO,EAEXA,EAaZ,SAAkBG,EAAOC,GACrB,OAAQD,EAAMh8F,MACV,IAAK,QACD,OAAQi8F,EAAMj8F,MACV,IAAK,QACD,OAyHGk8F,EAzHmBF,EAAM57F,YAyHlB+7F,EAzH+BF,EAAM77F,cA0HxD87F,EAAM,KAAOC,EAAM,IAAMD,EAAM,KAAOC,EAAM,IAzHvC,IAAK,aACD,OAAQX,GAAcS,EAAOD,GACjC,IAAK,UACD,OAAQ,EAAsBA,EAAOC,GAG7C,MACJ,IAAK,aACD,OAAQA,EAAMj8F,MACV,IAAK,QACD,OAAQw7F,GAAcQ,EAAOC,GACjC,IAAK,aACD,OA2BpB,SAAsBG,EAAaC,GAE/B,GADuB,GAAcD,EAAaC,GAC7Bt7F,SAASnJ,OAAS,EACnC,OAAO,EAEX,OAAO,EAhCiB,CAAaokG,EAAOC,GAChC,IAAK,UACD,OAAQ,GAAaA,EAAOD,GAGpC,MACJ,IAAK,UACD,OAAQC,EAAMj8F,MACV,IAAK,QACD,OAAQ,EAAsBi8F,EAAOD,GACzC,IAAK,aACD,OAAQ,GAAaA,EAAOC,GAChC,IAAK,UACD,OA4CpB,SAAsBN,EAAUC,GAC5B,IAAK,IAAIl7F,EAAK,EAAG2sB,EAAKsuE,EAASv7F,YAAY,GAAIM,EAAK2sB,EAAGz1B,OAAQ8I,IAAM,CAEjE,GAAI,EADS2sB,EAAG3sB,GACkBk7F,GAC9B,OAAO,EAGf,IAAK,IAAIU,EAAK,EAAGC,EAAKX,EAASx7F,YAAY,GAAIk8F,EAAKC,EAAG3kG,OAAQ0kG,IAAM,CAEjE,GAAI,EADSC,EAAGD,GACkBX,GAC9B,OAAO,EAIf,GADuB,GAAc,GAAcA,GAAW,GAAcC,IACvD76F,SAASnJ,OAAS,EACnC,OAAO,EAEX,OAAO,EA7DiB,CAAaqkG,EAAOD,IA+FhD,IAAuBE,EAAOC,EA5F1B,OAAO,EA/CQK,CAASV,EAAS57F,SAAU67F,EAAS77F,gBAG7C27F,GCPI,SAASY,GAAgBd,EAAUC,GAC9C,IAAII,EAAQ,EAAQL,GAChBM,EAAQ,EAAQL,GAChBc,EAAQV,EAAMh8F,KACd28F,EAAQV,EAAMj8F,KACdytF,EAAUuO,EAAM57F,YAChBstF,EAAUuO,EAAM77F,YACpB,OAAQs8F,GACJ,IAAK,QACD,GACS,UADDC,EAEA,OAAO,GAAclP,EAASC,GAE9B,MAAM,IAAIrtF,MAAM,YAAcs8F,EAAQ,2BAElD,IAAK,aACD,OAAQA,GACJ,IAAK,QACD,OAkCb,SAA6Bz7F,EAAY8vB,GAC5C,IAAIr4B,EACAikG,GAAS,EACb,IAAKjkG,EAAI,EAAGA,EAAIuI,EAAWd,YAAYxI,OAAQe,IAC3C,GAAI,GAAcuI,EAAWd,YAAYzH,GAAIq4B,EAAG5wB,aAAc,CAC1Dw8F,GAAS,EACT,MAGR,OAAOA,EA3CgB,CAAoBZ,EAAOC,GACtC,IAAK,aACD,OA2Cb,SAAkCY,EAAaC,GAClD,IAAK,IAAIp8F,EAAK,EAAG2sB,EAAKyvE,EAAY18F,YAAaM,EAAK2sB,EAAGz1B,OAAQ8I,IAAM,CAGjE,IAFA,IAAI+4F,EAASpsE,EAAG3sB,GACZq8F,GAAa,EACRT,EAAK,EAAGC,EAAKM,EAAYz8F,YAAak8F,EAAKC,EAAG3kG,OAAQ0kG,IAAM,CAEjE,GAAI,GAAc7C,EADL8C,EAAGD,IACmB,CAC/BS,GAAa,EACb,OAGR,IAAKA,EACD,OAAO,EAGf,OAAO,EA1DgB,CAAyBf,EAAOC,GAC3C,QACI,MAAM,IAAI57F,MAAM,YAAcs8F,EAAQ,2BAElD,IAAK,aACD,OAAQA,GACJ,IAAK,QACD,OAAO,GAAcV,EAAOD,EAAO,CAAErL,mBAAmB,IAC5D,IAAK,aACD,OA4Eb,SAAsByL,EAAaC,GAEtC,IADA,IAAIW,GAAyB,EACpBt8F,EAAK,EAAG2sB,EAAKgvE,EAAYj8F,YAAaM,EAAK2sB,EAAGz1B,OAAQ8I,IAAM,CACjE,IAAI8C,EAAS6pB,EAAG3sB,GAMhB,GALI,GAAc,CAAEV,KAAM,QAASI,YAAaoD,GAAU44F,EAAa,CACnEzL,mBAAmB,MAEnBqM,GAAyB,IAExB,GAAc,CAAEh9F,KAAM,QAASI,YAAaoD,GAAU44F,EAAa,CACpEzL,mBAAmB,IAEnB,OAAO,EAGf,OAAOqM,EA3FgB,CAAahB,EAAOC,GAC/B,IAAK,aACD,OAiDb,SAA4Bp7F,EAAYK,GAE3C,IADA,IAAI87F,GAAyB,EACpBt8F,EAAK,EAAG2sB,EAAKnsB,EAAWd,YAAaM,EAAK2sB,EAAGz1B,OAAQ8I,IAAM,CAChE,IAAIxJ,EAAQm2B,EAAG3sB,GAIf,GAHI,GAAcxJ,EAAO2J,EAAY,CAAE8vF,mBAAmB,MACtDqM,GAAyB,IAExB,GAAc9lG,EAAO2J,GACtB,OAAO,EAGf,GAAIm8F,EACA,OAAO,EAEX,OAAO,EA/DgB,CAAmBhB,EAAOC,GACrC,QACI,MAAM,IAAI57F,MAAM,YAAcs8F,EAAQ,2BAElD,IAAK,UACD,OAAQA,GACJ,IAAK,QACD,OAAO,EAAsBV,EAAOD,EAAO,CAAE7T,gBAAgB,IACjE,IAAK,aACD,OAkFb,SAAsB1nF,EAASutC,GAClC,IAAI4uD,GAAS,EACTjkG,EAAI,EACJskG,EAAW,EAASx8F,GACpBy8F,EAAW,EAASlvD,GACxB,IAAK,GAAcivD,EAAUC,GACzB,OAAO,EAEX,KAAQvkG,EAAIq1C,EAAW5tC,YAAYxI,OAAS,EAAGe,IAAK,CAEhD,GAAI,EAAsB,CAAEqH,KAAM,QAASI,YAD5B,GAAY4tC,EAAW5tC,YAAYzH,GAAIq1C,EAAW5tC,YAAYzH,EAAI,KACb8H,EAAS,CACzE0nF,gBAAgB,IAChB,CACAyU,GAAS,EACT,OAGR,OAAOA,EAnGgB,CAAaZ,EAAOC,GAC/B,IAAK,UACD,OA4Gb,SAAsBN,EAAUC,GAEnC,GAAsB,YAAlBD,EAAS37F,MAA4C,OAAtB27F,EAASz7F,SACxC,OAAO,EAEX,GAAsB,YAAlB07F,EAAS57F,MAA4C,OAAtB47F,EAAS17F,SACxC,OAAO,EAEX,IAAIi9F,EAAY,EAASxB,GACrByB,EAAY,EAASxB,GACzB,IAAK,GAAcuB,EAAWC,GAC1B,OAAO,EAGX,IADA,IAAI55F,EAAS,EAAQo4F,GAAUx7F,YACtBM,EAAK,EAAG28F,EAAW75F,EAAQ9C,EAAK28F,EAASzlG,OAAQ8I,IAEtD,IADA,IACS2sB,EAAK,EAAGiwE,EADND,EAAS38F,GACY2sB,EAAKiwE,EAAO1lG,OAAQy1B,IAAM,CAEtD,IAAK,EADOiwE,EAAOjwE,GACesuE,GAC9B,OAAO,EAInB,OAAO,EAnIgB,CAAaK,EAAOC,GAC/B,IAAK,aACD,OAoDb,SAA4Bx7F,EAASS,GACxC,IAAK,IAAIR,EAAK,EAAG2sB,EAAKnsB,EAAWd,YAAaM,EAAK2sB,EAAGz1B,OAAQ8I,IAAM,CAEhE,IAAK,EADO2sB,EAAG3sB,GACmBD,EAAS,CAAE0nF,gBAAgB,IACzD,OAAO,EAGf,OAAO,EA3DgB,CAAmB6T,EAAOC,GACrC,QACI,MAAM,IAAI57F,MAAM,YAAcs8F,EAAQ,2BAElD,QACI,MAAM,IAAIt8F,MAAM,YAAcq8F,EAAQ,4BA8H3C,SAAS,GAAc59F,EAAOC,GACjC,QAAID,EAAM,GAAKC,EAAM,QAGjBD,EAAM,GAAKC,EAAM,QAGjBD,EAAM,GAAKC,EAAM,OAGjBD,EAAM,GAAKC,EAAM,MAalB,SAAS,GAAcm9F,EAAOC,GACjC,OAAOD,EAAM,KAAOC,EAAM,IAAMD,EAAM,KAAOC,EAAM,GAEhD,SAAS,GAAYD,EAAOC,GAC/B,MAAO,EAAED,EAAM,GAAKC,EAAM,IAAM,GAAID,EAAM,GAAKC,EAAM,IAAM,YC/MhD,SAASoB,GAAkB5B,EAAUC,GAChD,IAAIC,GAAO,EASX,OARA,EAAYF,GAAU,SAAUG,GAC5B,EAAYF,GAAU,SAAUG,GAC5B,IAAa,IAATF,EACA,OAAO,EAEXA,GAAQ,GAAgBC,EAAS57F,SAAU67F,EAAS77F,gBAGrD27F,oBCVX,SAAS2B,GAAOvjG,GAGd,IAFA,IAAIwjG,EAAOxjG,EACT8C,EAAO,GACF0gG,EAAK7gG,QACVG,EAAKu+B,QAAQmiE,GACbA,EAAOA,EAAK7gG,OAEd,OAAOG,EAaT,IAAI2gG,GAAQ,CAcV3hG,OAAQ,SAAUi+F,EAAOriF,EAAOC,EAAK9X,GACnCk6F,EAAM2D,aAEN,IAAIC,GADJ99F,EAAUA,GAAW,IACG89F,WAAaF,GAAMG,WAAWC,UACpDC,EAAUj+F,EAAQi+F,UAAW,EAE3BC,EA7BC,IAAIC,IAAW,SAAUhkG,GAC9B,OAAOA,EAAKua,KA6BV0pF,EAAcvmF,EAMhB,IAJAA,EAAMkoB,EAAI+9D,EAAUjmF,EAAOC,GAE3BomF,EAAStiG,KAAKic,GAEPqmF,EAASlwE,OAAS,GAAG,CAE1B,IAAIqwE,EAAcH,EAASviG,MAG3B,GAAI0iG,IAAgBvmF,EAClB,OAAO4lF,GAAOW,GAIhBA,EAAYC,QAAS,EAKrB,IAFA,IAAI1rF,EAAYsnF,EAAMtnF,UAAUyrF,GAEvBxlG,EAAI,EAAG0lG,EAAK3rF,EAAU9a,OAAQe,EAAI0lG,IAAM1lG,EAAG,CAClD,IAAI2lG,EAAW5rF,EAAU/Z,GAEzB,IAAI2lG,EAASF,SAAUE,EAASC,SAAhC,CAOA,IAAIC,EAASL,EAAY93F,EAAIi4F,EAASG,QAAQN,GAC5CO,EAAcJ,EAASK,UAEpBD,GAAeF,EAASF,EAASj4F,KAEpCi4F,EAASK,SAAU,EACnBL,EAAS1hG,OAASuhG,EAClBG,EAASz+D,EAAIy+D,EAASz+D,GAAK+9D,EAAUU,EAAU1mF,GAC/C0mF,EAASj4F,EAAIm4F,EACbF,EAAS9pF,EAAI8pF,EAASj4F,EAAIi4F,EAASz+D,EACnCm6D,EAAM4E,UAAUN,GACZP,IAIAO,EAASz+D,EAAIq+D,EAAYr+D,GACxBy+D,EAASz+D,IAAMq+D,EAAYr+D,GAAKy+D,EAASj4F,EAAI63F,EAAY73F,KAE1D63F,EAAcI,GAIbI,EAKHV,EAASa,eAAeP,GAHxBN,EAAStiG,KAAK4iG,MAStB,OAAIP,EACKP,GAAOU,GAIT,IAGTL,WAAY,CACVC,UAAW,SAAUgB,EAAMC,GAGzB,OAFS9mG,KAAKoiB,IAAI0kF,EAAKvxF,EAAIsxF,EAAKtxF,GACvBvV,KAAKoiB,IAAI0kF,EAAKtxF,EAAIqxF,EAAKrxF,IAGlCuxF,SAAU,SAAUF,EAAMC,GACxB,IACIE,EAAKhnG,KAAKK,KAAK,GACfmU,EAAKxU,KAAKoiB,IAAI0kF,EAAKvxF,EAAIsxF,EAAKtxF,GAC5BX,EAAK5U,KAAKoiB,IAAI0kF,EAAKtxF,EAAIqxF,EAAKrxF,GAChC,OAJQ,GAIIhB,EAAKI,IAAOoyF,EAAK,GAAShnG,KAAKQ,IAAIgU,EAAII,KAGvDqyF,UAAW,SAAUjlG,GACnBA,EAAKua,EAAI,EACTva,EAAKoM,EAAI,EACTpM,EAAK4lC,EAAI,EACT5lC,EAAK0kG,SAAU,EACf1kG,EAAKmkG,QAAS,EACdnkG,EAAK2C,OAAS,OAalB,SAAS,GAAMuiG,EAAQr/F,GACrBA,EAAUA,GAAW,GACrBzG,KAAKugG,MAAQ,GACbvgG,KAAK2lG,WAAal/F,EAAQk/F,SAC1B3lG,KAAK+lG,KAAO,GACZ,IAAK,IAAI5xF,EAAI,EAAGA,EAAI2xF,EAAOvnG,OAAQ4V,IAAK,CACtCnU,KAAK+lG,KAAK5xF,GAAK,GAEf,IAAK,IAAIC,EAAI,EAAG4xF,EAAMF,EAAO3xF,GAAIC,EAAI4xF,EAAIznG,OAAQ6V,IAAK,CACpD,IAAIxT,EAAO,IAAIqlG,GAAS9xF,EAAGC,EAAG4xF,EAAI5xF,IAClCpU,KAAK+lG,KAAK5xF,GAAGC,GAAKxT,EAClBZ,KAAKugG,MAAMl+F,KAAKzB,IAGpBZ,KAAKma,OA0FP,SAAS8rF,GAAS9xF,EAAGC,EAAG8xF,GACtBlmG,KAAKmU,EAAIA,EACTnU,KAAKoU,EAAIA,EACTpU,KAAKkmG,OAASA,EAmBhB,SAAStB,GAAWuB,GAClBnmG,KAAKomG,QAAU,GACfpmG,KAAKmmG,cAAgBA,EA/GvB,GAAM7jG,UAAU6X,KAAO,WACrBna,KAAKqmG,WAAa,GAClB,IAAK,IAAI/mG,EAAI,EAAGA,EAAIU,KAAKugG,MAAMhiG,OAAQe,IACrC+kG,GAAMwB,UAAU7lG,KAAKugG,MAAMjhG,KAI/B,GAAMgD,UAAUgiG,WAAa,WAC3B,IAAK,IAAIhlG,EAAI,EAAGA,EAAIU,KAAKqmG,WAAW9nG,OAAQe,IAC1C+kG,GAAMwB,UAAU7lG,KAAKqmG,WAAW/mG,IAElCU,KAAKqmG,WAAa,IAGpB,GAAM/jG,UAAUijG,UAAY,SAAU3kG,GACpCZ,KAAKqmG,WAAWhkG,KAAKzB,IAGvB,GAAM0B,UAAU+W,UAAY,SAAUzY,GACpC,IAAI0lG,EAAM,GACRnyF,EAAIvT,EAAKuT,EACTC,EAAIxT,EAAKwT,EACT2xF,EAAO/lG,KAAK+lG,KA4Cd,OAzCIA,EAAK5xF,EAAI,IAAM4xF,EAAK5xF,EAAI,GAAGC,IAC7BkyF,EAAIjkG,KAAK0jG,EAAK5xF,EAAI,GAAGC,IAInB2xF,EAAK5xF,EAAI,IAAM4xF,EAAK5xF,EAAI,GAAGC,IAC7BkyF,EAAIjkG,KAAK0jG,EAAK5xF,EAAI,GAAGC,IAInB2xF,EAAK5xF,IAAM4xF,EAAK5xF,GAAGC,EAAI,IACzBkyF,EAAIjkG,KAAK0jG,EAAK5xF,GAAGC,EAAI,IAInB2xF,EAAK5xF,IAAM4xF,EAAK5xF,GAAGC,EAAI,IACzBkyF,EAAIjkG,KAAK0jG,EAAK5xF,GAAGC,EAAI,IAGnBpU,KAAK2lG,WAEHI,EAAK5xF,EAAI,IAAM4xF,EAAK5xF,EAAI,GAAGC,EAAI,IACjCkyF,EAAIjkG,KAAK0jG,EAAK5xF,EAAI,GAAGC,EAAI,IAIvB2xF,EAAK5xF,EAAI,IAAM4xF,EAAK5xF,EAAI,GAAGC,EAAI,IACjCkyF,EAAIjkG,KAAK0jG,EAAK5xF,EAAI,GAAGC,EAAI,IAIvB2xF,EAAK5xF,EAAI,IAAM4xF,EAAK5xF,EAAI,GAAGC,EAAI,IACjCkyF,EAAIjkG,KAAK0jG,EAAK5xF,EAAI,GAAGC,EAAI,IAIvB2xF,EAAK5xF,EAAI,IAAM4xF,EAAK5xF,EAAI,GAAGC,EAAI,IACjCkyF,EAAIjkG,KAAK0jG,EAAK5xF,EAAI,GAAGC,EAAI,KAItBkyF,GAGT,GAAMhkG,UAAUkV,SAAW,WAOzB,IANA,IAEE+uF,EACAP,EACA5xF,EACArI,EALEy6F,EAAc,GAChBjG,EAAQvgG,KAAK+lG,KAKN5xF,EAAI,EAAGxR,EAAM49F,EAAMhiG,OAAQ4V,EAAIxR,EAAKwR,IAAK,CAGhD,IAFAoyF,EAAW,GAENnyF,EAAI,EAAGrI,GADZi6F,EAAMzF,EAAMpsF,IACQ5V,OAAQ6V,EAAIrI,EAAGqI,IACjCmyF,EAASlkG,KAAK2jG,EAAI5xF,GAAG8xF,QAEvBM,EAAYnkG,KAAKkkG,EAASlgG,KAAK,MAEjC,OAAOmgG,EAAYngG,KAAK,OAS1B4/F,GAAS3jG,UAAUkV,SAAW,WAC5B,MAAO,IAAMxX,KAAKmU,EAAI,IAAMnU,KAAKoU,EAAI,KAGvC6xF,GAAS3jG,UAAU8iG,QAAU,SAAUqB,GAErC,OAAIA,GAAgBA,EAAatyF,IAAMnU,KAAKmU,GAAKsyF,EAAaryF,IAAMpU,KAAKoU,EAClD,QAAdpU,KAAKkmG,OAEPlmG,KAAKkmG,QAGdD,GAAS3jG,UAAU4iG,OAAS,WAC1B,OAAuB,IAAhBllG,KAAKkmG,QAQdtB,GAAWtiG,UAAY,CACrBD,KAAM,SAAUqkG,GAEd1mG,KAAKomG,QAAQ/jG,KAAKqkG,GAGlB1mG,KAAK2mG,SAAS3mG,KAAKomG,QAAQ7nG,OAAS,IAEtC6D,IAAK,WAEH,IAAI1E,EAASsC,KAAKomG,QAAQ,GAEtB7nF,EAAMve,KAAKomG,QAAQhkG,MAOvB,OAJIpC,KAAKomG,QAAQ7nG,OAAS,IACxByB,KAAKomG,QAAQ,GAAK7nF,EAClBve,KAAK4mG,SAAS,IAETlpG,GAET4F,OAAQ,SAAU1C,GAChB,IAAItB,EAAIU,KAAKomG,QAAQ1lG,QAAQE,GAIzB2d,EAAMve,KAAKomG,QAAQhkG,MAEnB9C,IAAMU,KAAKomG,QAAQ7nG,OAAS,IAC9ByB,KAAKomG,QAAQ9mG,GAAKif,EAEdve,KAAKmmG,cAAc5nF,GAAOve,KAAKmmG,cAAcvlG,GAC/CZ,KAAK2mG,SAASrnG,GAEdU,KAAK4mG,SAAStnG,KAIpBm1B,KAAM,WACJ,OAAOz0B,KAAKomG,QAAQ7nG,QAEtBinG,eAAgB,SAAU5kG,GACxBZ,KAAK2mG,SAAS3mG,KAAKomG,QAAQ1lG,QAAQE,KAErC+lG,SAAU,SAAUloG,GAKlB,IAHA,IAAIioG,EAAU1mG,KAAKomG,QAAQ3nG,GAGpBA,EAAI,GAAG,CAEZ,IAAIooG,GAAYpoG,EAAI,GAAM,GAAK,EAC7B8E,EAASvD,KAAKomG,QAAQS,GAExB,KAAI7mG,KAAKmmG,cAAcO,GAAW1mG,KAAKmmG,cAAc5iG,IAOnD,MANAvD,KAAKomG,QAAQS,GAAWH,EACxB1mG,KAAKomG,QAAQ3nG,GAAK8E,EAElB9E,EAAIooG,IAOVD,SAAU,SAAUnoG,GAMlB,IAJA,IAAIF,EAASyB,KAAKomG,QAAQ7nG,OACxBmoG,EAAU1mG,KAAKomG,QAAQ3nG,GACvBqoG,EAAY9mG,KAAKmmG,cAAcO,KAEpB,CAEX,IAIEK,EAJEC,EAAWvoG,EAAI,GAAM,EACvBwoG,EAAUD,EAAU,EAElBxnG,EAAO,KAGX,GAAIynG,EAAU1oG,EAAQ,CAEpB,IAAI2oG,EAASlnG,KAAKomG,QAAQa,IAC1BF,EAAc/mG,KAAKmmG,cAAce,IAGfJ,IAChBtnG,EAAOynG,GAKX,GAAID,EAAUzoG,EAAQ,CACpB,IAAI4oG,EAASnnG,KAAKomG,QAAQY,GACVhnG,KAAKmmG,cAAcgB,IACP,OAAT3nG,EAAgBsnG,EAAYC,KAC7CvnG,EAAOwnG,GAKX,GAAa,OAATxnG,EAMF,MALAQ,KAAKomG,QAAQ3nG,GAAKuB,KAAKomG,QAAQ5mG,GAC/BQ,KAAKomG,QAAQ5mG,GAAQknG,EACrBjoG,EAAIe,KC5YZ,SAAS4nG,KACPpnG,KAAK4X,EAAI,KAGJ,SAASyvF,GAAazmG,GAC3BA,EAAK8wC,EACL9wC,EAAK+mC,EACL/mC,EAAKsnC,EACLtnC,EAAK+sC,EACL/sC,EAAKiZ,EACLjZ,EAAKuD,EAAI,KAuLX,SAASmjG,GAAmB31F,EAAM/Q,GAChC,IAAII,EAAIJ,EACJkZ,EAAIlZ,EAAK+sC,EACTpqC,EAASvC,EAAE0wC,EAEXnuC,EACEA,EAAO2kC,IAAMlnC,EAAGuC,EAAO2kC,EAAIpuB,EAC1BvW,EAAOoqC,EAAI7zB,EAEhBnI,EAAKiG,EAAIkC,EAGXA,EAAE43B,EAAInuC,EACNvC,EAAE0wC,EAAI53B,EACN9Y,EAAE2sC,EAAI7zB,EAAEouB,EACJlnC,EAAE2sC,IAAG3sC,EAAE2sC,EAAE+D,EAAI1wC,GACjB8Y,EAAEouB,EAAIlnC,EAGR,SAASumG,GAAoB51F,EAAM/Q,GACjC,IAAII,EAAIJ,EACJkZ,EAAIlZ,EAAKsnC,EACT3kC,EAASvC,EAAE0wC,EAEXnuC,EACEA,EAAO2kC,IAAMlnC,EAAGuC,EAAO2kC,EAAIpuB,EAC1BvW,EAAOoqC,EAAI7zB,EAEhBnI,EAAKiG,EAAIkC,EAGXA,EAAE43B,EAAInuC,EACNvC,EAAE0wC,EAAI53B,EACN9Y,EAAEknC,EAAIpuB,EAAE6zB,EACJ3sC,EAAEknC,IAAGlnC,EAAEknC,EAAEwJ,EAAI1wC,GACjB8Y,EAAE6zB,EAAI3sC,EAGR,SAASwmG,GAAc5mG,GACrB,KAAOA,EAAKsnC,GAAGtnC,EAAOA,EAAKsnC,EAC3B,OAAOtnC,EA5NTwmG,GAAa9kG,UAAY,CACvBkJ,YAAa47F,GAEbpkG,OAAQ,SAASykG,EAAO7mG,GACtB,IAAI2C,EAAQmkG,EAASC,EAErB,GAAIF,EAAO,CAKT,GAJA7mG,EAAKiZ,EAAI4tF,EACT7mG,EAAKuD,EAAIsjG,EAAMtjG,EACXsjG,EAAMtjG,IAAGsjG,EAAMtjG,EAAE0V,EAAIjZ,GACzB6mG,EAAMtjG,EAAIvD,EACN6mG,EAAM95D,EAAG,CAEX,IADA85D,EAAQA,EAAM95D,EACP85D,EAAMv/D,GAAGu/D,EAAQA,EAAMv/D,EAC9Bu/D,EAAMv/D,EAAItnC,OAEV6mG,EAAM95D,EAAI/sC,EAEZ2C,EAASkkG,OACAznG,KAAK4X,GACd6vF,EAAQD,GAAcxnG,KAAK4X,GAC3BhX,EAAKiZ,EAAI,KACTjZ,EAAKuD,EAAIsjG,EACTA,EAAM5tF,EAAI4tF,EAAMv/D,EAAItnC,EACpB2C,EAASkkG,IAET7mG,EAAKiZ,EAAIjZ,EAAKuD,EAAI,KAClBnE,KAAK4X,EAAIhX,EACT2C,EAAS,MAOX,IALA3C,EAAKsnC,EAAItnC,EAAK+sC,EAAI,KAClB/sC,EAAK8wC,EAAInuC,EACT3C,EAAK+mC,GAAI,EAET8/D,EAAQ7mG,EACD2C,GAAUA,EAAOokC,GAElBpkC,KADJmkG,EAAUnkG,EAAOmuC,GACMxJ,GACrBy/D,EAAQD,EAAQ/5D,IACHg6D,EAAMhgE,GACjBpkC,EAAOokC,EAAIggE,EAAMhgE,GAAI,EACrB+/D,EAAQ//D,GAAI,EACZ8/D,EAAQC,IAEJD,IAAUlkG,EAAOoqC,IACnB25D,GAAmBtnG,KAAMuD,GAEzBA,GADAkkG,EAAQlkG,GACOmuC,GAEjBnuC,EAAOokC,GAAI,EACX+/D,EAAQ//D,GAAI,EACZ4/D,GAAoBvnG,KAAM0nG,KAG5BC,EAAQD,EAAQx/D,IACHy/D,EAAMhgE,GACjBpkC,EAAOokC,EAAIggE,EAAMhgE,GAAI,EACrB+/D,EAAQ//D,GAAI,EACZ8/D,EAAQC,IAEJD,IAAUlkG,EAAO2kC,IACnBq/D,GAAoBvnG,KAAMuD,GAE1BA,GADAkkG,EAAQlkG,GACOmuC,GAEjBnuC,EAAOokC,GAAI,EACX+/D,EAAQ//D,GAAI,EACZ2/D,GAAmBtnG,KAAM0nG,IAG7BnkG,EAASkkG,EAAM/1D,EAEjB1xC,KAAK4X,EAAE+vB,GAAI,GAGbrkC,OAAQ,SAAS1C,GACXA,EAAKuD,IAAGvD,EAAKuD,EAAE0V,EAAIjZ,EAAKiZ,GACxBjZ,EAAKiZ,IAAGjZ,EAAKiZ,EAAE1V,EAAIvD,EAAKuD,GAC5BvD,EAAKuD,EAAIvD,EAAKiZ,EAAI,KAElB,IACI+tF,EAGAx1F,EACAy1F,EALAtkG,EAAS3C,EAAK8wC,EAEdvzC,EAAOyC,EAAKsnC,EACZ9pC,EAAQwC,EAAK+sC,EAsCjB,GAhCKv7B,EAFAjU,EACKC,EACEopG,GAAcppG,GADFD,EADNC,EAIdmF,EACEA,EAAO2kC,IAAMtnC,EAAM2C,EAAO2kC,EAAI91B,EAC7B7O,EAAOoqC,EAAIv7B,EAEhBpS,KAAK4X,EAAIxF,EAGPjU,GAAQC,GACVypG,EAAMz1F,EAAKu1B,EACXv1B,EAAKu1B,EAAI/mC,EAAK+mC,EACdv1B,EAAK81B,EAAI/pC,EACTA,EAAKuzC,EAAIt/B,EACLA,IAAShU,GACXmF,EAAS6O,EAAKs/B,EACdt/B,EAAKs/B,EAAI9wC,EAAK8wC,EACd9wC,EAAOwR,EAAKu7B,EACZpqC,EAAO2kC,EAAItnC,EACXwR,EAAKu7B,EAAIvvC,EACTA,EAAMszC,EAAIt/B,IAEVA,EAAKs/B,EAAInuC,EACTA,EAAS6O,EACTxR,EAAOwR,EAAKu7B,KAGdk6D,EAAMjnG,EAAK+mC,EACX/mC,EAAOwR,GAGLxR,IAAMA,EAAK8wC,EAAInuC,IACfskG,EACJ,GAAIjnG,GAAQA,EAAK+mC,EAAK/mC,EAAK+mC,GAAI,MAA/B,CAEA,EAAG,CACD,GAAI/mC,IAASZ,KAAK4X,EAAG,MACrB,GAAIhX,IAAS2C,EAAO2kC,GAQlB,IAPA0/D,EAAUrkG,EAAOoqC,GACLhG,IACVigE,EAAQjgE,GAAI,EACZpkC,EAAOokC,GAAI,EACX2/D,GAAmBtnG,KAAMuD,GACzBqkG,EAAUrkG,EAAOoqC,GAEdi6D,EAAQ1/D,GAAK0/D,EAAQ1/D,EAAEP,GACpBigE,EAAQj6D,GAAKi6D,EAAQj6D,EAAEhG,EAAI,CAC5BigE,EAAQj6D,GAAMi6D,EAAQj6D,EAAEhG,IAC3BigE,EAAQ1/D,EAAEP,GAAI,EACdigE,EAAQjgE,GAAI,EACZ4/D,GAAoBvnG,KAAM4nG,GAC1BA,EAAUrkG,EAAOoqC,GAEnBi6D,EAAQjgE,EAAIpkC,EAAOokC,EACnBpkC,EAAOokC,EAAIigE,EAAQj6D,EAAEhG,GAAI,EACzB2/D,GAAmBtnG,KAAMuD,GACzB3C,EAAOZ,KAAK4X,EACZ,YAUF,IAPAgwF,EAAUrkG,EAAO2kC,GACLP,IACVigE,EAAQjgE,GAAI,EACZpkC,EAAOokC,GAAI,EACX4/D,GAAoBvnG,KAAMuD,GAC1BqkG,EAAUrkG,EAAO2kC,GAEd0/D,EAAQ1/D,GAAK0/D,EAAQ1/D,EAAEP,GACtBigE,EAAQj6D,GAAKi6D,EAAQj6D,EAAEhG,EAAI,CAC1BigE,EAAQ1/D,GAAM0/D,EAAQ1/D,EAAEP,IAC3BigE,EAAQj6D,EAAEhG,GAAI,EACdigE,EAAQjgE,GAAI,EACZ2/D,GAAmBtnG,KAAM4nG,GACzBA,EAAUrkG,EAAO2kC,GAEnB0/D,EAAQjgE,EAAIpkC,EAAOokC,EACnBpkC,EAAOokC,EAAIigE,EAAQ1/D,EAAEP,GAAI,EACzB4/D,GAAoBvnG,KAAMuD,GAC1B3C,EAAOZ,KAAK4X,EACZ,MAGJgwF,EAAQjgE,GAAI,EACZ/mC,EAAO2C,EACPA,EAASA,EAAOmuC,SACR9wC,EAAK+mC,GAEX/mC,IAAMA,EAAK+mC,GAAI,MA+CvB,UC1OO,SAASmgE,GAAW3pG,EAAMC,EAAO2pG,EAAI/wE,GAC1C,IAAIk4C,EAAO,CAAC,KAAM,MACd1rE,EAAQuQ,GAAM1R,KAAK6sE,GAAQ,EAO/B,OANAA,EAAK/wE,KAAOA,EACZ+wE,EAAK9wE,MAAQA,EACT2pG,GAAIC,GAAW94B,EAAM/wE,EAAMC,EAAO2pG,GAClC/wE,GAAIgxE,GAAW94B,EAAM9wE,EAAOD,EAAM64B,GACtCixE,GAAM9pG,EAAKqF,OAAO0kG,UAAU7lG,KAAKmB,GACjCykG,GAAM7pG,EAAMoF,OAAO0kG,UAAU7lG,KAAKmB,GAC3B0rE,EAGF,SAASi5B,GAAiBhqG,EAAM4pG,EAAI/wE,GACzC,IAAIk4C,EAAO,CAAC64B,EAAI/wE,GAEhB,OADAk4C,EAAK/wE,KAAOA,EACL+wE,EAGF,SAAS84B,GAAW94B,EAAM/wE,EAAMC,EAAOgqG,GACvCl5B,EAAK,IAAOA,EAAK,GAIXA,EAAK/wE,OAASC,EACvB8wE,EAAK,GAAKk5B,EAEVl5B,EAAK,GAAKk5B,GANVl5B,EAAK,GAAKk5B,EACVl5B,EAAK/wE,KAAOA,EACZ+wE,EAAK9wE,MAAQA,GASjB,SAASiqG,GAASn5B,EAAM76D,EAAIC,EAAIC,EAAIC,GAClC,IAUIwN,EAVAtiB,EAAIwvE,EAAK,GACTvvE,EAAIuvE,EAAK,GACT5tD,EAAK5hB,EAAE,GACP6hB,EAAK7hB,EAAE,GAGP4oG,EAAK,EACLC,EAAK,EACLt0F,EAJKtU,EAAE,GAIG2hB,EACVpN,EAJKvU,EAAE,GAIG4hB,EAId,GADAS,EAAI3N,EAAKiN,EACJrN,KAAM+N,EAAI,GAAf,CAEA,GADAA,GAAK/N,EACDA,EAAK,EAAG,CACV,GAAI+N,EAAIsmF,EAAI,OACRtmF,EAAIumF,IAAIA,EAAKvmF,QACZ,GAAI/N,EAAK,EAAG,CACjB,GAAI+N,EAAIumF,EAAI,OACRvmF,EAAIsmF,IAAIA,EAAKtmF,GAInB,GADAA,EAAIzN,EAAK+M,EACJrN,KAAM+N,EAAI,GAAf,CAEA,GADAA,GAAK/N,EACDA,EAAK,EAAG,CACV,GAAI+N,EAAIumF,EAAI,OACRvmF,EAAIsmF,IAAIA,EAAKtmF,QACZ,GAAI/N,EAAK,EAAG,CACjB,GAAI+N,EAAIsmF,EAAI,OACRtmF,EAAIumF,IAAIA,EAAKvmF,GAInB,GADAA,EAAI1N,EAAKiN,EACJrN,KAAM8N,EAAI,GAAf,CAEA,GADAA,GAAK9N,EACDA,EAAK,EAAG,CACV,GAAI8N,EAAIsmF,EAAI,OACRtmF,EAAIumF,IAAIA,EAAKvmF,QACZ,GAAI9N,EAAK,EAAG,CACjB,GAAI8N,EAAIumF,EAAI,OACRvmF,EAAIsmF,IAAIA,EAAKtmF,GAInB,GADAA,EAAIxN,EAAK+M,EACJrN,KAAM8N,EAAI,GAAf,CAEA,GADAA,GAAK9N,EACDA,EAAK,EAAG,CACV,GAAI8N,EAAIumF,EAAI,OACRvmF,EAAIsmF,IAAIA,EAAKtmF,QACZ,GAAI9N,EAAK,EAAG,CACjB,GAAI8N,EAAIsmF,EAAI,OACRtmF,EAAIumF,IAAIA,EAAKvmF,GAGnB,QAAMsmF,EAAK,GAAQC,EAAK,KAEpBD,EAAK,IAAGp5B,EAAK,GAAK,CAAC5tD,EAAKgnF,EAAKr0F,EAAIsN,EAAK+mF,EAAKp0F,IAC3Cq0F,EAAK,IAAGr5B,EAAK,GAAK,CAAC5tD,EAAKinF,EAAKt0F,EAAIsN,EAAKgnF,EAAKr0F,KACxC,OAGT,SAASs0F,GAAYt5B,EAAM76D,EAAIC,EAAIC,EAAIC,GACrC,IAAIwiB,EAAKk4C,EAAK,GACd,GAAIl4C,EAAI,OAAO,EAEf,IASIyxE,EACAC,EAVAX,EAAK74B,EAAK,GACV/wE,EAAO+wE,EAAK/wE,KACZC,EAAQ8wE,EAAK9wE,MACbuqG,EAAKxqG,EAAK,GACVyqG,EAAKzqG,EAAK,GACV0qG,EAAKzqG,EAAM,GACX0qG,EAAK1qG,EAAM,GACX2qG,GAAMJ,EAAKE,GAAM,EACjBG,GAAMJ,EAAKE,GAAM,EAIrB,GAAIA,IAAOF,EAAI,CACb,GAAIG,EAAK10F,GAAM00F,GAAMx0F,EAAI,OACzB,GAAIo0F,EAAKE,EAAI,CACX,GAAKd,GACA,GAAIA,EAAG,IAAMvzF,EAAI,YADbuzF,EAAK,CAACgB,EAAIz0F,GAEnB0iB,EAAK,CAAC+xE,EAAIv0F,OACL,CACL,GAAKuzF,GACA,GAAIA,EAAG,GAAKzzF,EAAI,YADZyzF,EAAK,CAACgB,EAAIv0F,GAEnBwiB,EAAK,CAAC+xE,EAAIz0F,SAKZ,GADAo0F,EAAKM,GADLP,GAAME,EAAKE,IAAOC,EAAKF,IACRG,EACXN,GAAM,GAAKA,EAAK,EAClB,GAAIE,EAAKE,EAAI,CACX,GAAKd,GACA,GAAIA,EAAG,IAAMvzF,EAAI,YADbuzF,EAAK,EAAEzzF,EAAKo0F,GAAMD,EAAIn0F,GAE/B0iB,EAAK,EAAExiB,EAAKk0F,GAAMD,EAAIj0F,OACjB,CACL,GAAKuzF,GACA,GAAIA,EAAG,GAAKzzF,EAAI,YADZyzF,EAAK,EAAEvzF,EAAKk0F,GAAMD,EAAIj0F,GAE/BwiB,EAAK,EAAE1iB,EAAKo0F,GAAMD,EAAIn0F,QAGxB,GAAIs0F,EAAKE,EAAI,CACX,GAAKf,GACA,GAAIA,EAAG,IAAMxzF,EAAI,YADbwzF,EAAK,CAAC1zF,EAAIo0F,EAAKp0F,EAAKq0F,GAE7B1xE,EAAK,CAACziB,EAAIk0F,EAAKl0F,EAAKm0F,OACf,CACL,GAAKX,GACA,GAAIA,EAAG,GAAK1zF,EAAI,YADZ0zF,EAAK,CAACxzF,EAAIk0F,EAAKl0F,EAAKm0F,GAE7B1xE,EAAK,CAAC3iB,EAAIo0F,EAAKp0F,EAAKq0F,GAO1B,OAFAx5B,EAAK,GAAK64B,EACV74B,EAAK,GAAKl4C,GACH,EC9IT,SAASiyE,GAAkBnN,EAAM5sB,GAC/B,IAAIg6B,EAAOpN,EAAKoN,KACZC,EAAKj6B,EAAK/wE,KACVirG,EAAKl6B,EAAK9wE,MAEd,OADI8qG,IAASE,IAAIA,EAAKD,EAAIA,EAAKD,GAC3BE,EAAWxqG,KAAK+0D,MAAMy1C,EAAG,GAAKD,EAAG,GAAIC,EAAG,GAAKD,EAAG,KAChDD,IAASC,GAAIA,EAAKj6B,EAAK,GAAIk6B,EAAKl6B,EAAK,KACpCi6B,EAAKj6B,EAAK,GAAIk6B,EAAKl6B,EAAK,IACtBtwE,KAAK+0D,MAAMw1C,EAAG,GAAKC,EAAG,GAAIA,EAAG,GAAKD,EAAG,KAGvC,SAASE,GAAkBvN,EAAM5sB,GACtC,OAAOA,IAAOA,EAAK/wE,OAAS29F,EAAKoN,OAG5B,SAASI,GAAgBxN,EAAM5sB,GACpC,OAAOA,IAAOA,EAAK/wE,OAAS29F,EAAKoN,OCvBnC,IAEWK,GAFPC,GAAa,GAIjB,SAASC,KACPpC,GAAarnG,MACbA,KAAKmU,EACLnU,KAAKoU,EACLpU,KAAKi6F,IACLj6F,KAAKkpG,KACLlpG,KAAK2hB,GAAK,KAGL,SAAS+nF,GAAazP,GAC3B,IAAI0P,EAAO1P,EAAIpgF,EACX+vF,EAAO3P,EAAI91F,EAEf,GAAKwlG,GAASC,EAAd,CAEA,IAAIC,EAAQF,EAAKT,KACbY,EAAQ7P,EAAIiP,KACZa,EAAQH,EAAKV,KAEjB,GAAIW,IAAUE,EAAd,CAEA,IAAIvoF,EAAKsoF,EAAM,GACXroF,EAAKqoF,EAAM,GACXxoF,EAAKuoF,EAAM,GAAKroF,EAChBD,EAAKsoF,EAAM,GAAKpoF,EAChBC,EAAKqoF,EAAM,GAAKvoF,EAChBG,EAAKooF,EAAM,GAAKtoF,EAEhB7O,EAAI,GAAK0O,EAAKK,EAAKJ,EAAKG,GAC5B,KAAI9O,IAAM,IAAV,CAEA,IAAIo3F,EAAK1oF,EAAKA,EAAKC,EAAKA,EACpB0oF,EAAKvoF,EAAKA,EAAKC,EAAKA,EACpBxN,GAAKwN,EAAKqoF,EAAKzoF,EAAK0oF,GAAMr3F,EAC1BwB,GAAKkN,EAAK2oF,EAAKvoF,EAAKsoF,GAAMp3F,EAE1Bs3F,EAASV,GAAWpnG,OAAS,IAAIqnG,GACrCS,EAAOjQ,IAAMA,EACbiQ,EAAOhB,KAAOY,EACdI,EAAO/1F,EAAIA,EAAIqN,EACf0oF,EAAO91F,GAAK81F,EAAOvoF,GAAKvN,EAAIqN,GAAM7iB,KAAKK,KAAKkV,EAAIA,EAAIC,EAAIA,GAExD6lF,EAAIiQ,OAASA,EAKb,IAHA,IAAIC,EAAS,KACTvpG,EAAOwpG,GAAQxyF,EAEZhX,GACL,GAAIspG,EAAO91F,EAAIxT,EAAKwT,GAAM81F,EAAO91F,IAAMxT,EAAKwT,GAAK81F,EAAO/1F,GAAKvT,EAAKuT,EAAI,CACpE,IAAIvT,EAAKsnC,EACJ,CAAEiiE,EAASvpG,EAAKiZ,EAAG,MADZjZ,EAAOA,EAAKsnC,MAEnB,CACL,IAAItnC,EAAK+sC,EACJ,CAAEw8D,EAASvpG,EAAM,MADVA,EAAOA,EAAK+sC,EAK5By8D,GAAQpnG,OAAOmnG,EAAQD,GAClBC,IAAQZ,GAAcW,MAGtB,SAASG,GAAapQ,GAC3B,IAAIiQ,EAASjQ,EAAIiQ,OACbA,IACGA,EAAOrwF,IAAG0vF,GAAcW,EAAO/lG,GACpCimG,GAAQ9mG,OAAO4mG,GACfV,GAAWnnG,KAAK6nG,GAChB7C,GAAa6C,GACbjQ,EAAIiQ,OAAS,MCrEjB,IAAII,GAAY,GAEhB,SAASC,KACPlD,GAAarnG,MACbA,KAAKkvE,KACLlvE,KAAKkpG,KACLlpG,KAAKkqG,OAAS,KAGhB,SAASM,GAAYtB,GACnB,IAAIuB,EAAQH,GAAUloG,OAAS,IAAImoG,GAEnC,OADAE,EAAMvB,KAAOA,EACNuB,EAGT,SAASC,GAAYD,GACnBJ,GAAaI,GACbE,GAAQrnG,OAAOmnG,GACfH,GAAUjoG,KAAKooG,GACfpD,GAAaoD,GAGR,SAASG,GAAYH,GAC1B,IAAIP,EAASO,EAAMP,OACf/1F,EAAI+1F,EAAO/1F,EACXC,EAAI81F,EAAOvoF,GACXymF,EAAS,CAACj0F,EAAGC,GACby2F,EAAWJ,EAAM5wF,EACjBzH,EAAOq4F,EAAMtmG,EACb2mG,EAAe,CAACL,GAEpBC,GAAYD,GAGZ,IADA,IAAId,EAAOkB,EACJlB,EAAKO,QACLtrG,KAAKoiB,IAAI7M,EAAIw1F,EAAKO,OAAO/1F,GAAK,IAC9BvV,KAAKoiB,IAAI5M,EAAIu1F,EAAKO,OAAOvoF,IAAM,IACpCkpF,EAAWlB,EAAK9vF,EAChBixF,EAAa7oE,QAAQ0nE,GACrBe,GAAYf,GACZA,EAAOkB,EAGTC,EAAa7oE,QAAQ0nE,GACrBU,GAAaV,GAGb,IADA,IAAIC,EAAOx3F,EACJw3F,EAAKM,QACLtrG,KAAKoiB,IAAI7M,EAAIy1F,EAAKM,OAAO/1F,GAAK,IAC9BvV,KAAKoiB,IAAI5M,EAAIw1F,EAAKM,OAAOvoF,IAAM,IACpCvP,EAAOw3F,EAAKzlG,EACZ2mG,EAAazoG,KAAKunG,GAClBc,GAAYd,GACZA,EAAOx3F,EAGT04F,EAAazoG,KAAKunG,GAClBS,GAAaT,GAEb,IACImB,EADAC,EAAQF,EAAavsG,OAEzB,IAAKwsG,EAAO,EAAGA,EAAOC,IAASD,EAC7BnB,EAAOkB,EAAaC,GACpBpB,EAAOmB,EAAaC,EAAO,GAC3B/C,GAAW4B,EAAK16B,KAAMy6B,EAAKT,KAAMU,EAAKV,KAAMd,GAG9CuB,EAAOmB,EAAa,IACpBlB,EAAOkB,EAAaE,EAAQ,IACvB97B,KAAO44B,GAAW6B,EAAKT,KAAMU,EAAKV,KAAM,KAAMd,GAEnDsB,GAAaC,GACbD,GAAaE,GAGR,SAASqB,GAAS/B,GASvB,IARA,IAEIS,EACAC,EACAxZ,EACA8a,EALA/2F,EAAI+0F,EAAK,GACTiC,EAAYjC,EAAK,GAKjBtoG,EAAO+pG,GAAQ/yF,EAEZhX,GAEL,IADAwvF,EAAMgb,GAAexqG,EAAMuqG,GAAah3F,GAC9B,GAASvT,EAAOA,EAAKsnC,MAAQ,CAErC,MADAgjE,EAAM/2F,EAAIk3F,GAAgBzqG,EAAMuqG,IACtB,IAMH,CACD/a,GAAO,IACTuZ,EAAO/oG,EAAKiZ,EACZ+vF,EAAOhpG,GACEsqG,GAAO,IAChBvB,EAAO/oG,EACPgpG,EAAOhpG,EAAKuD,GAEZwlG,EAAOC,EAAOhpG,EAEhB,MAfA,IAAKA,EAAK+sC,EAAG,CACXg8D,EAAO/oG,EACP,MAEFA,EAAOA,EAAK+sC,GFhGb,SAAoBu7D,GAClBjB,GAAMiB,EAAK1lG,OAAS,CACzB0lG,KAAMA,EACNhB,UAAW,IE6GboD,CAAWpC,GACX,IAAIqC,EAASf,GAAYtB,GAGzB,GAFAyB,GAAQ3nG,OAAO2mG,EAAM4B,GAEhB5B,GAASC,EAAd,CAEA,GAAID,IAASC,EAOX,OANAS,GAAaV,GACbC,EAAOY,GAAYb,EAAKT,MACxByB,GAAQ3nG,OAAOuoG,EAAQ3B,GACvB2B,EAAOr8B,KAAO06B,EAAK16B,KAAO44B,GAAW6B,EAAKT,KAAMqC,EAAOrC,MACvDQ,GAAaC,QACbD,GAAaE,GAIf,GAAKA,EAAL,CAMAS,GAAaV,GACbU,GAAaT,GAEb,IAAIC,EAAQF,EAAKT,KACb5nF,EAAKuoF,EAAM,GACXtoF,EAAKsoF,EAAM,GACXroF,EAAK0nF,EAAK,GAAK5nF,EACfG,EAAKynF,EAAK,GAAK3nF,EACfwoF,EAAQH,EAAKV,KACbxnF,EAAKqoF,EAAM,GAAKzoF,EAChBK,EAAKooF,EAAM,GAAKxoF,EAChB3O,EAAI,GAAK4O,EAAKG,EAAKF,EAAKC,GACxB8pF,EAAKhqF,EAAKA,EAAKC,EAAKA,EACpBwoF,EAAKvoF,EAAKA,EAAKC,EAAKA,EACpBymF,EAAS,EAAEzmF,EAAK6pF,EAAK/pF,EAAKwoF,GAAMr3F,EAAI0O,GAAKE,EAAKyoF,EAAKvoF,EAAK8pF,GAAM54F,EAAI2O,GAEtEymF,GAAW4B,EAAK16B,KAAM26B,EAAOE,EAAO3B,GACpCmD,EAAOr8B,KAAO44B,GAAW+B,EAAOX,EAAM,KAAMd,GAC5CwB,EAAK16B,KAAO44B,GAAWoB,EAAMa,EAAO,KAAM3B,GAC1CsB,GAAaC,GACbD,GAAaE,QAzBX2B,EAAOr8B,KAAO44B,GAAW6B,EAAKT,KAAMqC,EAAOrC,OA4B/C,SAASkC,GAAenR,EAAKkR,GAC3B,IAAIjC,EAAOjP,EAAIiP,KACXuC,EAAQvC,EAAK,GACbwC,EAAQxC,EAAK,GACbyC,EAAOD,EAAQP,EAEnB,IAAKQ,EAAM,OAAOF,EAElB,IAAI9B,EAAO1P,EAAIpgF,EACf,IAAK8vF,EAAM,OAAQhsG,EAAAA,EAGnB,IAAIiuG,GADJ1C,EAAOS,EAAKT,MACK,GACb2C,EAAQ3C,EAAK,GACb4C,EAAQD,EAAQV,EAEpB,IAAKW,EAAO,OAAOF,EAEnB,IAAIG,EAAKH,EAAQH,EACbO,EAAO,EAAIL,EAAO,EAAIG,EACtBnsG,EAAIosG,EAAKD,EAEb,OAAIE,IAAersG,EAAIf,KAAKK,KAAKU,EAAIA,EAAI,EAAIqsG,GAAQD,EAAKA,IAAO,EAAID,GAASD,EAAQC,EAAQ,EAAIJ,EAAQC,EAAO,KAAOK,EAAOP,GAEvHA,EAAQG,GAAS,EAG3B,SAASP,GAAgBpR,EAAKkR,GAC5B,IAAIvB,EAAO3P,EAAI91F,EACf,GAAIylG,EAAM,OAAOwB,GAAexB,EAAMuB,GACtC,IAAIjC,EAAOjP,EAAIiP,KACf,OAAOA,EAAK,KAAOiC,EAAYjC,EAAK,GAAKvrG,EAAAA,ECzLpC,IAEIgtG,GACA1C,GACAmC,GACAr2F,GALA,GAAU,KACV,GAAW,MAUtB,SAASk4F,GAAcvsG,EAAGC,GACxB,OAAOA,EAAE,GAAKD,EAAE,IACTC,EAAE,GAAKD,EAAE,GAGH,SAAS,GAAQwsG,EAAOC,GACrC,IACIh4F,EACAC,EACA81F,EAHAhB,EAAOgD,EAAMpmG,KAAKmmG,IAAe7pG,MAUrC,IALA2R,GAAQ,GACRk0F,GAAQ,IAAIhhG,MAAMilG,EAAM3tG,QACxBosG,GAAU,IAAI,GACdP,GAAU,IAAI,KAIZ,GADAF,EAASX,GACLL,KAAUgB,GAAUhB,EAAK,GAAKgB,EAAO91F,GAAM80F,EAAK,KAAOgB,EAAO91F,GAAK80F,EAAK,GAAKgB,EAAO/1F,GAClF+0F,EAAK,KAAO/0F,GAAK+0F,EAAK,KAAO90F,IAC/B62F,GAAS/B,GACT/0F,EAAI+0F,EAAK,GAAI90F,EAAI80F,EAAK,IAExBA,EAAOgD,EAAM9pG,UACR,KAAI8nG,EAGT,MAFAU,GAAYV,EAAOjQ,KAQvB,GHrBK,WACL,IAAK,IAA6B6B,EAAMoM,EAAW3oG,EAAGb,EAA7CY,EAAI,EAAGb,EAAIwpG,GAAM1pG,OAA+Be,EAAIb,IAAKa,EAChE,IAAKw8F,EAAOmM,GAAM3oG,MAAQZ,GAAKwpG,EAAYpM,EAAKoM,WAAW3pG,QAAS,CAClE,IAAIiF,EAAQ,IAAIyD,MAAMvI,GAClB0tG,EAAQ,IAAInlG,MAAMvI,GACtB,IAAKa,EAAI,EAAGA,EAAIb,IAAKa,EAAGiE,EAAMjE,GAAKA,EAAG6sG,EAAM7sG,GAAK0pG,GAAkBnN,EAAM/nF,GAAMm0F,EAAU3oG,KAEzF,IADAiE,EAAMsC,MAAK,SAASxG,EAAGC,GAAK,OAAO6sG,EAAM7sG,GAAK6sG,EAAM9sG,MAC/CC,EAAI,EAAGA,EAAIb,IAAKa,EAAG6sG,EAAM7sG,GAAK2oG,EAAU1kG,EAAMjE,IACnD,IAAKA,EAAI,EAAGA,EAAIb,IAAKa,EAAG2oG,EAAU3oG,GAAK6sG,EAAM7sG,IGWjD8sG,GAEIF,EAAQ,CACV,IAAI93F,GAAM83F,EAAO,GAAG,GAChB73F,GAAM63F,EAAO,GAAG,GAChB53F,GAAM43F,EAAO,GAAG,GAChB33F,GAAM23F,EAAO,GAAG,IJqGjB,SAAmB93F,EAAIC,EAAIC,EAAIC,GAIpC,IAHA,IACI06D,EADA5vE,EAAIyU,GAAMxV,OAGPe,KACAkpG,GAAYt5B,EAAOn7D,GAAMzU,GAAI+U,EAAIC,EAAIC,EAAIC,IACtC6zF,GAASn5B,EAAM76D,EAAIC,EAAIC,EAAIC,KAC1B5V,KAAKoiB,IAAIkuD,EAAK,GAAG,GAAKA,EAAK,GAAG,IAAM,IAClCtwE,KAAKoiB,IAAIkuD,EAAK,GAAG,GAAKA,EAAK,GAAG,IAAM,YACtCn7D,GAAMzU,GI7GfgtG,CAAUj4F,EAAIC,EAAIC,EAAIC,GHbnB,SAAmBH,EAAIC,EAAIC,EAAIC,GACpC,IACI+3F,EACAzQ,EACAoN,EACAsD,EACAtE,EACAuE,EACAnuF,EACA0xE,EACAC,EACA1xE,EACA2xE,EACAC,EAZAuc,EAASzE,GAAM1pG,OAafouG,GAAQ,EAEZ,IAAKJ,EAAQ,EAAGA,EAAQG,IAAUH,EAChC,GAAIzQ,EAAOmM,GAAMsE,GAAQ,CAMvB,IALArD,EAAOpN,EAAKoN,KAEZsD,GADAtE,EAAYpM,EAAKoM,WACK3pG,OAGfiuG,KACAz4F,GAAMm0F,EAAUsE,KACnBtE,EAAUtkG,OAAO4oG,EAAW,GAMhC,IADAA,EAAY,EAAGC,EAAavE,EAAU3pG,OAC/BiuG,EAAYC,GACyCvc,GAA1D3xE,EAAM+qF,GAAgBxN,EAAM/nF,GAAMm0F,EAAUsE,MAAyB,GAAIrc,EAAO5xE,EAAI,GACPyxE,GAA7E1xE,EAAQ+qF,GAAkBvN,EAAM/nF,GAAMm0F,IAAYsE,EAAYC,MAA8B,GAAIxc,EAAS3xE,EAAM,IAC3G1f,KAAKoiB,IAAIkvE,EAAOF,GAAU,IAAWpxF,KAAKoiB,IAAImvE,EAAOF,GAAU,MACjEiY,EAAUtkG,OAAO4oG,EAAW,EAAGz4F,GAAM1R,KAAK8lG,GAAiBe,EAAM3qF,EAC7D3f,KAAKoiB,IAAIkvE,EAAO77E,GAAM,IAAWG,EAAK27E,EAAO,GAAU,CAAC97E,EAAIzV,KAAKoiB,IAAIgvE,EAAS37E,GAAM,GAAU47E,EAASz7E,GACrG5V,KAAKoiB,IAAImvE,EAAO37E,GAAM,IAAWD,EAAK27E,EAAO,GAAU,CAACtxF,KAAKoiB,IAAIivE,EAASz7E,GAAM,GAAUw7E,EAASz7E,EAAIC,GACvG5V,KAAKoiB,IAAIkvE,EAAO37E,GAAM,IAAW47E,EAAO77E,EAAK,GAAU,CAACC,EAAI3V,KAAKoiB,IAAIgvE,EAASz7E,GAAM,GAAU07E,EAAS37E,GACvG1V,KAAKoiB,IAAImvE,EAAO77E,GAAM,IAAW47E,EAAO77E,EAAK,GAAU,CAACzV,KAAKoiB,IAAIivE,EAAS37E,GAAM,GAAU07E,EAAS37E,EAAIC,GACvG,OAAS,KACbm4F,GAIFA,IAAYE,GAAQ,GAM5B,GAAIA,EAAO,CACT,IAAI14F,EAAIC,EAAIV,EAAIo5F,EAAKjvG,EAAAA,EAErB,IAAK4uG,EAAQ,EAAGI,EAAQ,KAAMJ,EAAQG,IAAUH,GAC1CzQ,EAAOmM,GAAMsE,MAIf/4F,GAFAS,GADAi1F,EAAOpN,EAAKoN,MACF,GAAK70F,GAELJ,GADVC,EAAKg1F,EAAK,GAAK50F,GACKJ,GACX04F,IAAIA,EAAKp5F,EAAIm5F,EAAQ7Q,GAIlC,GAAI6Q,EAAO,CACT,IAAIE,EAAM,CAACx4F,EAAIC,GAAKw4F,EAAM,CAACz4F,EAAIG,GAAKu4F,EAAM,CAACx4F,EAAIC,GAAKw4F,EAAM,CAACz4F,EAAID,GAC/Dq4F,EAAMzE,UAAU7lG,KACd0R,GAAM1R,KAAK8lG,GAAiBe,EAAOyD,EAAMzD,KAAM2D,EAAKC,IAAQ,EAC5D/4F,GAAM1R,KAAK8lG,GAAiBe,EAAM4D,EAAKC,IAAQ,EAC/Ch5F,GAAM1R,KAAK8lG,GAAiBe,EAAM6D,EAAKC,IAAQ,EAC/Cj5F,GAAM1R,KAAK8lG,GAAiBe,EAAM8D,EAAKH,IAAQ,IAMrD,IAAKN,EAAQ,EAAGA,EAAQG,IAAUH,GAC5BzQ,EAAOmM,GAAMsE,MACVzQ,EAAKoM,UAAU3pG,eACX0pG,GAAMsE,IGjEjBU,CAAU54F,EAAIC,EAAIC,EAAIC,GAGxBxU,KAAK+T,MAAQA,GACb/T,KAAKioG,MAAQA,GAEb0C,GACAP,GACAr2F,GACAk0F,GAAQ,KAGV,GAAQ3lG,UAAY,CAClBkJ,YAAa,GAEbpB,SAAU,WACR,IAAI2J,EAAQ/T,KAAK+T,MAEjB,OAAO/T,KAAKioG,MAAM/9F,KAAI,SAAS4xF,GAC7B,IAAI10F,EAAU00F,EAAKoM,UAAUh+F,KAAI,SAAS5K,GAAK,OAAO+pG,GAAkBvN,EAAM/nF,EAAMzU,OAEpF,OADA8H,EAAQ3E,KAAOq5F,EAAKoN,KAAKzmG,KAClB2E,MAIXyW,UAAW,WACT,IAAIA,EAAY,GACZ9J,EAAQ/T,KAAK+T,MAsBjB,OApBA/T,KAAKioG,MAAMv8F,SAAQ,SAASowF,EAAMx8F,GAChC,GAAMZ,GAAKwpG,EAAYpM,EAAKoM,WAAW3pG,OASvC,IARA,IACI2pG,EAEAxpG,EACAwuG,EA9EYxtG,EAAGC,EAAGgT,EA0ElBu2F,EAAOpN,EAAKoN,KAEZ3pG,GAAK,EAGL4tG,EAAKp5F,EAAMm0F,EAAUxpG,EAAI,IACzB0uG,EAAKD,EAAGhvG,OAAS+qG,EAAOiE,EAAG/uG,MAAQ+uG,EAAGhvG,OAEjCoB,EAAIb,GACXwuG,EAAKE,EAELA,GADAD,EAAKp5F,EAAMm0F,EAAU3oG,KACbpB,OAAS+qG,EAAOiE,EAAG/uG,MAAQ+uG,EAAGhvG,KAClC+uG,GAAME,GAAM9tG,EAAI4tG,EAAG1pG,OAASlE,EAAI8tG,EAAG5pG,QAtFtB7D,EAsFkDutG,EAtF/Cv6F,EAsFmDy6F,IAtFzD1tG,EAsF+CwpG,GArFzD,GAAKv2F,EAAE,KAAOhT,EAAE,GAAKD,EAAE,KAAOA,EAAE,GAAKC,EAAE,KAAOgT,EAAE,GAAKjT,EAAE,IAqFkB,IAC3Eme,EAAUxb,KAAK,CAAC6mG,EAAKzmG,KAAMyqG,EAAGzqG,KAAM2qG,EAAG3qG,UAKtCob,GAGTwvF,MAAO,WACL,OAAOrtG,KAAK+T,MAAMymC,QAAO,SAAS00B,GAChC,OAAOA,EAAK9wE,SACX8L,KAAI,SAASglE,GACd,MAAO,CACLt4D,OAAQs4D,EAAK/wE,KAAKsE,KAClB8gB,OAAQ2rD,EAAK9wE,MAAMqE,UAKzB+wB,KAAM,SAASrf,EAAGC,EAAGwhF,GAInB,IAHA,IAAiB0X,EAAkDxR,EAA/Dx4E,EAAOtjB,KAAUutG,EAAKjqF,EAAKkqF,QAAU,EAAG/uG,EAAI6kB,EAAK2kF,MAAM1pG,SAGlDu9F,EAAOx4E,EAAK2kF,MAAMsF,UAAYA,GAAM9uG,EAAG,OAAO,KACvD,IAAIwV,EAAKE,EAAI2nF,EAAKoN,KAAK,GAAIh1F,EAAKE,EAAI0nF,EAAKoN,KAAK,GAAI11F,EAAKS,EAAKA,EAAKC,EAAKA,EAGtE,GACE4nF,EAAOx4E,EAAK2kF,MAAMqF,EAAKC,GAAKA,EAAK,KACjCzR,EAAKoM,UAAUx8F,SAAQ,SAASsE,GAC9B,IAAIk/D,EAAO5rD,EAAKvP,MAAM/D,GAAIuiB,EAAI28C,EAAK/wE,KACnC,GAAKo0B,IAAMupE,EAAKoN,MAAS32E,IAAQA,EAAI28C,EAAK9wE,OAA1C,CACA,IAAI+W,EAAKhB,EAAIoe,EAAE,GAAInd,EAAKhB,EAAIme,EAAE,GAAI0E,EAAK9hB,EAAKA,EAAKC,EAAKA,EAClD6hB,EAAKzjB,IAAIA,EAAKyjB,EAAIs2E,EAAKh7E,EAAE/uB,iBAEjB,OAAP+pG,GAIT,OAFAjqF,EAAKkqF,OAASF,EAEG,MAAV1X,GAAkBpiF,GAAMoiF,EAASA,EAASkG,EAAKoN,KAAO,OCzH1D,SAASuE,GAAWhwG,EAASgJ,GAEhC,YADgB,IAAZA,IAAsBA,EAAU,IAC7BinG,GAAQjwG,EAAS,WAAYgJ,GAiBjC,SAASknG,GAAQlwG,EAASgJ,GAE7B,YADgB,IAAZA,IAAsBA,EAAU,IAC7BinG,GAAQjwG,EAAS,QAASgJ,GAYrC,SAASinG,GAAQjwG,EAASmwG,EAAYnnG,QAClB,IAAZA,IAAsBA,EAAU,IAGpC,IAAI6pF,GADJ7pF,EAAUA,GAAW,IACA6pF,OAErB,IAAK7yF,EACD,MAAM,IAAIuJ,MAAM,uBAoBpB,OAlBIC,MAAMC,QAAQzJ,IAAY,EAASA,EAAQ,IAC3CA,EACmB,aAAfmwG,EACMC,GAAkBpwG,GAClBqwG,GAAerwG,KAIV,IAAX6yF,IACA7yF,EAAU,EAAMA,IACpB,EAAUA,GAAS,SAAUI,GACzB,IAAIkwG,EAA0B,aAAfH,EACTC,GAAkBhwG,GAClBiwG,GAAejwG,GACrBA,EAAM,GAAKkwG,EAAS,GACpBlwG,EAAM,GAAKkwG,EAAS,OAGrBtwG,EAUX,SAASowG,GAAkBG,GACvB,IA6CU75F,EA7CNojF,EAAM34F,KAAK2J,GAAK,IAEpBg/B,EAAI,QAAW0mE,EAAY,mBAIvBC,EAAK,CACL3mE,GAFW3oC,KAAKoiB,IAAIgtF,EAAO,KAAO,IAAMA,EAAO,GAAKA,EAAO,GAAuB,MAwC5E75F,EAxC+D65F,EAAO,IAyCrE,GAAK,EAAI75F,EAAI,EAAI,EAAI,IAvCbojF,EACfhwD,EAAI3oC,KAAKC,IAAID,KAAKgiB,IAAc,IAAVhiB,KAAK2J,GAAY,GAAMylG,EAAO,GAAKzW,KAW7D,OARI2W,EAAG,GAAKD,IACRC,EAAG,GAAKD,GACRC,EAAG,IAAMD,IACTC,EAAG,IAAMD,GACTC,EAAG,GAAKD,IACRC,EAAG,GAAKD,GACRC,EAAG,IAAMD,IACTC,EAAG,IAAMD,GACNC,EAUX,SAASJ,GAAeI,GAEpB,IAAI1W,EAAM,IAAM54F,KAAK2J,GACjBg/B,EAAI,QACR,MAAO,CACF2mE,EAAG,GAAK1W,EAAOjwD,GACL,GAAV3oC,KAAK2J,GAAW,EAAM3J,KAAKuvG,KAAKvvG,KAAKG,KAAKmvG,EAAG,GAAK3mE,KAAOiwD,qBCrHnD,cACb,OAAO,IAAI4W,GAGb,SAASA,KACPpuG,KAAKm2B,QAGPi4E,GAAM9rG,UAAY,CAChBkJ,YAAa4iG,GACbj4E,MAAO,WACLn2B,KAAKlB,EACLkB,KAAKX,EAAI,GAEX+zB,IAAK,SAAShf,GACZ,GAAIi6F,GAAMj6F,EAAGpU,KAAKX,GAClB,GAAIW,KAAMquG,GAAKvvG,EAAGkB,KAAKlB,GACnBkB,KAAKlB,EAAGkB,KAAKX,GAAKgvG,GAAKhvG,EACtBW,KAAKlB,EAAIuvG,GAAKhvG,GAErBwuB,QAAS,WACP,OAAO7tB,KAAKlB,IAIhB,IAAIuvG,GAAO,IAAID,GAEf,SAAS,GAAIE,EAAO5uG,EAAGC,GACrB,IAAIwU,EAAIm6F,EAAMxvG,EAAIY,EAAIC,EAClB4uG,EAAKp6F,EAAIzU,EACT8uG,EAAKr6F,EAAIo6F,EACbD,EAAMjvG,EAAKK,EAAI8uG,GAAO7uG,EAAI4uG,GCtCrB,IAAI,GAAU,KAEV,GAAK3vG,KAAK2J,GACV,GAAS,GAAK,EACdkmG,GAAY,GAAK,EACjB,GAAW,EAAL,GAGN,GAAU,GAAK,IAEf,GAAM7vG,KAAKoiB,IACX,GAAOpiB,KAAKuvG,KACZ,GAAQvvG,KAAK+0D,MACb,GAAM/0D,KAAKqkE,IAEXlkE,IADOH,KAAKuB,KACNvB,KAAKG,KAEX,IADQH,KAAKO,MACPP,KAAKC,KAEX,IADMD,KAAKyF,IACLzF,KAAKgnE,KAEX,IADOhnE,KAAKsjB,KACLtjB,KAAKK,MACZ,GAAML,KAAKgiB,IAMf,SAAS,GAAKzM,GACnB,OAAOA,EAAI,EAAI,GAASA,GAAK,GAAK,GAASvV,KAAK+0F,KAAKx/E,GC7BxC,SAASu6F,MCKCJ,KAEXA,KCDP,SAAS,GAAUK,GACxB,IAAIC,EAASD,EAAU,GAAIE,EAAMF,EAAU,GAAIG,EAAS,GAAID,GAC5D,MAAO,CAACC,EAAS,GAAIF,GAASE,EAAS,GAAIF,GAAS,GAAIC,IAOnD,SAAS,GAAenvG,EAAGC,GAChC,MAAO,CAACD,EAAE,GAAKC,EAAE,GAAKD,EAAE,GAAKC,EAAE,GAAID,EAAE,GAAKC,EAAE,GAAKD,EAAE,GAAKC,EAAE,GAAID,EAAE,GAAKC,EAAE,GAAKD,EAAE,GAAKC,EAAE,IAahF,SAAS,GAA0BiT,GACxC,IAAI7G,EAAI,GAAK6G,EAAE,GAAKA,EAAE,GAAKA,EAAE,GAAKA,EAAE,GAAKA,EAAE,GAAKA,EAAE,IAClDA,EAAE,IAAM7G,EAAG6G,EAAE,IAAM7G,EAAG6G,EAAE,IAAM7G,ECrBjBuiG,KCPf,SAASS,GAAiBH,EAAQC,GAChC,MAAO,CAACD,EAAS,GAAKA,EAAS,GAAMA,GAAU,GAAKA,EAAS,GAAMA,EAAQC,GCF7E,SAASG,GAAaloG,EAAOmD,EAAQ0uB,EAAOs2E,GAC1CjvG,KAAKmU,EAAIrN,EACT9G,KAAKrB,EAAIsL,EACTjK,KAAK4uB,EAAI+J,EACT34B,KAAKgQ,EAAIi/F,EACTjvG,KAAKuyB,GAAI,EACTvyB,KAAKvB,EAAIuB,KAAKgB,EAAI,KAML,YAASg/B,EAAUkvE,EAAqBC,EAAa7W,EAAa8W,GAC/E,IAEI9vG,EACAb,EAHA0mC,EAAU,GACVkqE,EAAO,GAwBX,GApBArvE,EAASt0B,SAAQ,SAAS8sB,GACxB,MAAK/5B,EAAI+5B,EAAQj6B,OAAS,IAAM,GAAhC,CACA,IAAIE,EAAqC0V,EAAlCupD,EAAKllC,EAAQ,GAAI7kB,EAAK6kB,EAAQ/5B,GAKrC,GCzBuBkB,EDyBJgU,ECxBd,IADejU,EDyBLg+D,GCxBJ,GAAK/9D,EAAE,IAAM,IAAW,GAAID,EAAE,GAAKC,EAAE,IAAM,GDwBtD,CAEE,IADAyvG,EAAOE,YACFhwG,EAAI,EAAGA,EAAIb,IAAKa,EAAG8vG,EAAOtoG,OAAO42D,EAAKllC,EAAQl5B,IAAI,GAAIo+D,EAAG,IAC9D0xC,EAAOG,cAHT,CCzBW,IAAS7vG,EAAGC,EDgCvBwlC,EAAQ9iC,KAAK8R,EAAI,IAAI66F,GAAatxC,EAAIllC,EAAS,MAAM,IACrD62E,EAAKhtG,KAAK8R,EAAEya,EAAI,IAAIogF,GAAatxC,EAAI,KAAMvpD,GAAG,IAC9CgxB,EAAQ9iC,KAAK8R,EAAI,IAAI66F,GAAar7F,EAAI6kB,EAAS,MAAM,IACrD62E,EAAKhtG,KAAK8R,EAAEya,EAAI,IAAIogF,GAAar7F,EAAI,KAAMQ,GAAG,SAG3CgxB,EAAQ5mC,OAAb,CAMA,IAJA8wG,EAAKvpG,KAAKopG,GACV,GAAK/pE,GACL,GAAKkqE,GAEA/vG,EAAI,EAAGb,EAAI4wG,EAAK9wG,OAAQe,EAAIb,IAAKa,EACpC+vG,EAAK/vG,GAAG0Q,EAAIm/F,GAAeA,EAO7B,IAJA,IACIllG,EACAnD,EAFAwX,EAAQ6mB,EAAQ,KAIV,CAIR,IAFA,IAAI5R,EAAUjV,EACVohB,GAAY,EACTnM,EAAQhB,OAAQgB,EAAUA,EAAQ90B,KAAO6f,EAAO,OACvDrU,EAASspB,EAAQ50B,EACjBywG,EAAOE,YACP,EAAG,CAED,GADA/7E,EAAQhB,EAAIgB,EAAQ3E,EAAE2D,GAAI,EACtBgB,EAAQvjB,EAAG,CACb,GAAI0vB,EACF,IAAKpgC,EAAI,EAAGb,EAAIwL,EAAO1L,OAAQe,EAAIb,IAAKa,EAAG8vG,EAAOtoG,OAAOA,EAAQmD,EAAO3K,IAAI,GAAIwH,EAAM,SAEtFwxF,EAAY/kE,EAAQpf,EAAGof,EAAQ90B,EAAE0V,EAAG,EAAGi7F,GAEzC77E,EAAUA,EAAQ90B,MACb,CACL,GAAIihC,EAEF,IADAz1B,EAASspB,EAAQvyB,EAAErC,EACdW,EAAI2K,EAAO1L,OAAS,EAAGe,GAAK,IAAKA,EAAG8vG,EAAOtoG,OAAOA,EAAQmD,EAAO3K,IAAI,GAAIwH,EAAM,SAEpFwxF,EAAY/kE,EAAQpf,EAAGof,EAAQvyB,EAAEmT,GAAI,EAAGi7F,GAE1C77E,EAAUA,EAAQvyB,EAGpBiJ,GADAspB,EAAUA,EAAQ3E,GACDjwB,EACjB+gC,GAAaA,SACLnM,EAAQhB,GAClB68E,EAAOG,YAIX,SAAS,GAAKnD,GACZ,GAAM3tG,EAAI2tG,EAAM7tG,OAAhB,CAKA,IAJA,IAAIE,EAGAkB,EAFAL,EAAI,EACJI,EAAI0sG,EAAM,KAEL9sG,EAAIb,GACXiB,EAAEjB,EAAIkB,EAAIysG,EAAM9sG,GAChBK,EAAEqB,EAAItB,EACNA,EAAIC,EAEND,EAAEjB,EAAIkB,EAAIysG,EAAM,GAChBzsG,EAAEqB,EAAItB,GEnGO,YAASA,EAAGC,GACzB,OAAOD,EAAIC,GAAK,EAAID,EAAIC,EAAI,EAAID,GAAKC,EAAI,EAAIwtC,IHM/C4hE,GAAiBS,OAAST,GIJD,KADD1wG,GCCO,IDAjBE,SAyBe4c,GAzB6B9c,GAA9BA,GA0BnB,SAASuU,EAAGuB,GACjB,OAAO,GAAUgH,GAAEvI,GAAIuB,KC3B3B,IDDwB9V,GA0BK8c,GE5BzBixF,GAAQnlG,MAAM3E,UAEC8pG,GAAMlpG,MACRkpG,GAAMliG,ICHbtL,KAAKK,KAAK,IACXL,KAAKK,KAAK,IACVL,KAAKK,KAAK,GCEnB,IAAI8a,GAAMu0F,KAEK,YAASlnG,EAASN,GAC/B,IAAI8nG,EAAS9nG,EAAM,GACf+nG,EAAM/nG,EAAM,GACZ2oG,EAAS,CAAC,GAAIb,IAAU,GAAIA,GAAS,GACrC9jG,EAAQ,EACR2yB,EAAU,EAEd1jB,GAAIoc,QAEJ,IAAK,IAAI72B,EAAI,EAAGb,EAAI2I,EAAQ7I,OAAQe,EAAIb,IAAKa,EAC3C,GAAMZ,GAAK6I,EAAOH,EAAQ9H,IAAIf,OAS9B,IARA,IAAIgJ,EACA7I,EACAgxG,EAASnoG,EAAK7I,EAAI,GAClBixG,EAAUD,EAAO,GACjBE,EAAOF,EAAO,GAAK,EAAIjB,GACvBoB,EAAU,GAAID,GACdE,EAAU,GAAIF,GAETrwG,EAAI,EAAGA,EAAIb,IAAKa,EAAGowG,EAAUI,EAASF,EAAUG,EAASF,EAAUG,EAASP,EAASQ,EAAQ,CACpG,IAAIA,EAAS3oG,EAAKhI,GACdwwG,EAAUG,EAAO,GACjBra,EAAOqa,EAAO,GAAK,EAAIzB,GACvBuB,EAAU,GAAIna,GACdoa,EAAU,GAAIpa,GACd4C,EAAQsX,EAAUJ,EAClBztF,EAAOu2E,GAAS,EAAI,GAAK,EACzB0X,EAAWjuF,EAAOu2E,EAClB2X,EAAeD,EAAW,GAC1BjyG,EAAI2xG,EAAUG,EAOlB,GALAj2F,GAAIqZ,IAAI,GAAMl1B,EAAIgkB,EAAO,GAAIiuF,GAAWL,EAAUG,EAAU/xG,EAAI,GAAIiyG,KACpErlG,GAASslG,EAAe3X,EAAQv2E,EAAO,GAAMu2E,EAIzC2X,EAAeT,GAAWf,EAASmB,GAAWnB,EAAQ,CACxD,IAAI3U,EAAM,GAAe,GAAUyV,GAAS,GAAUQ,IACtD,GAA0BjW,GAC1B,IAAIpiE,EAAe,GAAe43E,EAAQxV,GAC1C,GAA0BpiE,GAC1B,IAAIw4E,GAAUD,EAAe3X,GAAS,GAAK,EAAI,GAAK,GAAK5gE,EAAa,KAClEg3E,EAAMwB,GAAUxB,IAAQwB,IAAWpW,EAAI,IAAMA,EAAI,OACnDx8D,GAAW2yE,EAAe3X,GAAS,EAAI,GAAK,IAiBpD,OAAQ3tF,GAAQ,MAAYA,EAAQ,IAAWiP,IAAM,MAAuB,EAAV0jB,EC7DpD6wE,KCDFA,KACIA,KCDFA,KCiDhB,SAAS,GAAO1Y,GACd,MAAO,MAAQA,EACT,IAAMA,EAAS,IAAMA,EAAS,aAAe,EAAIA,EACjD,IAAMA,EAAS,IAAMA,EAAS,YAAc,EAAIA,EAChD,ICoER,SAAS0a,GAAa93E,GACpB,OAAOA,EAAQj6B,OAAS,EAK1B,SAAS2wG,GAAoBxvG,EAAGC,GAC9B,QAASD,EAAIA,EAAEyU,GAAG,GAAK,EAAIzU,EAAE,GAAK,GAAS,GAAU,GAASA,EAAE,MACvDC,EAAIA,EAAEwU,GAAG,GAAK,EAAIxU,EAAE,GAAK,GAAS,GAAU,GAASA,EAAE,ID/HvD,GAAO,KEAX,SAAS,GAAY4wG,GAC1B,OAAO,SAASnB,GACd,IAAItwG,EAAI,IAAI0xG,GACZ,IAAK,IAAIh6F,KAAO+5F,EAASzxG,EAAE0X,GAAO+5F,EAAQ/5F,GAE1C,OADA1X,EAAEswG,OAASA,EACJtwG,GAIX,SAAS0xG,MAETA,GAAgBluG,UAAY,CAC1BkJ,YAAaglG,GACb1pG,MAAO,SAASqN,EAAGC,GAAKpU,KAAKovG,OAAOtoG,MAAMqN,EAAGC,IAC7Cq8F,OAAQ,WAAazwG,KAAKovG,OAAOqB,UACjCnB,UAAW,WAAatvG,KAAKovG,OAAOE,aACpCC,QAAS,WAAavvG,KAAKovG,OAAOG,WAClCmB,aAAc,WAAa1wG,KAAKovG,OAAOsB,gBACvCC,WAAY,WAAa3wG,KAAKovG,OAAOuB,eCnBlB,GAAI,GAAK,ICMP,GAAY,CACjC7pG,MAAO,SAASqN,EAAGC,GACjBpU,KAAKovG,OAAOtoG,MAAMqN,EAAI,GAASC,EAAI,OCXhC,SAASw8F,GAAav+B,GAC3B,OAAO,SAASl+D,EAAGC,GACjB,IAAIsN,EAAK,GAAIvN,GACTwN,EAAK,GAAIvN,GACTlW,EAAIm0E,EAAM3wD,EAAKC,GACnB,MAAO,CACLzjB,EAAIyjB,EAAK,GAAIxN,GACbjW,EAAI,GAAIkW,KAKP,SAASy8F,GAAgB/lG,GAC9B,OAAO,SAASqJ,EAAGC,GACjB,IAAIzV,EAAI,GAAKwV,EAAIA,EAAIC,EAAIA,GACrBzB,EAAI7H,EAAMnM,GACVkW,EAAK,GAAIlC,GACTm+F,EAAK,GAAIn+F,GACb,MAAO,CACL,GAAMwB,EAAIU,EAAIlW,EAAImyG,GAClB,GAAKnyG,GAAKyV,EAAIS,EAAKlW,KClBlB,IAAIoyG,GAAwBH,IAAa,SAASI,GACvD,OAAO,GAAK,GAAK,EAAIA,OAGvBD,GAAsBvB,OAASqB,IAAgB,SAASlyG,GACtD,OAAO,EAAI,GAAKA,EAAI,MCLf,IAAIsyG,GAA0BL,IAAa,SAASj+F,GACzD,OAAQA,GxBmBWwB,EwBnBFxB,GxBoBN,EAAI,EAAIwB,GAAK,EAAI,GAAKvV,KAAKsyG,KAAK/8F,KwBpBnBxB,EAAI,GAAIA,GxBmB3B,IAAcwB,KyBpBd,SAAS,GAAYy6F,EAAQC,GAClC,MAAO,CAACD,EAAQ,GAAI,IAAK,GAASC,GAAO,KCHpC,SAAS,GAAmBD,EAAQC,GACzC,MAAO,CAACD,EAAQC,GCCX,SAASsC,GAAYh9F,EAAGC,GAC7B,IAAIuN,EAAK,GAAIvN,GAAIlW,EAAI,GAAIiW,GAAKwN,EAC9B,MAAO,CAACA,EAAK,GAAIxN,GAAKjW,EAAG,GAAIkW,GAAKlW,GCH7B,SAASkzG,GAAiBxC,EAAQC,GACvC,IAAI/Y,EAAO+Y,EAAMA,EAAKwC,EAAOvb,EAAOA,EACpC,MAAO,CACL8Y,GAAU,MAAS,QAAW9Y,EAAOub,GAAoBA,GAAQ,QAAWvb,EAAO,QAAWub,GAAhD,UAC9CxC,GAAO,SAAW/Y,GAAQ,QAAWub,GAAoB,QAAWvb,EAAtB,QAA6B,QAAWub,MCHnF,SAASC,GAAgBn9F,EAAGC,GACjC,MAAO,CAAC,GAAIA,GAAK,GAAID,GAAI,GAAIC,ICDxB,SAASm9F,GAAiBp9F,EAAGC,GAClC,IAAIuN,EAAK,GAAIvN,GAAIlW,EAAI,EAAI,GAAIiW,GAAKwN,EAClC,MAAO,CAACA,EAAK,GAAIxN,GAAKjW,EAAG,GAAIkW,GAAKlW,GCH7B,SAASszG,GAAsB5C,EAAQC,GAC5C,MAAO,CAAC,GAAI,IAAK,GAASA,GAAO,KAAMD,GPIzCqC,GAAwBzB,OAASqB,IAAgB,SAASlyG,GACxD,OAAOA,KCDT,GAAY6wG,OAAS,SAASr7F,EAAGC,GAC/B,MAAO,CAACD,EAAG,EAAI,GAAKpV,GAAIqV,IAAM,KCHhC,GAAmBo7F,OAAS,GCG5B2B,GAAY3B,OAASqB,GAAgB,ICErCO,GAAiB5B,OAAS,SAASr7F,EAAGC,GACpC,IAAqBqkF,EAAjBoW,EAAMz6F,EAAG9U,EAAI,GACjB,EAAG,CACD,IAAIw2F,EAAO+Y,EAAMA,EAAKwC,EAAOvb,EAAOA,EACpC+Y,GAAOpW,GAASoW,GAAO,SAAW/Y,GAAQ,QAAWub,GAAoB,QAAWvb,EAAtB,QAA6B,QAAWub,KAAUj9F,IAC3G,SAAW0hF,GAAQ,QAAeub,GAAwB,QAAevb,EAA/B,QAAsC,QAAW,GAAKub,WAC9F,GAAI5Y,GAAS,MAAan5F,EAAI,GACvC,MAAO,CACL6U,GAAK,OAAU2hF,EAAO+Y,EAAMA,IAAoB/Y,GAAoBA,EAAOA,EAAOA,GAAQ,QAAW,QAAWA,GAAvD,SAApB,UACrC+Y,ICZJyC,GAAgB9B,OAASqB,GAAgB,ICCzCU,GAAiB/B,OAASqB,IAAgB,SAASlyG,GACjD,OAAO,EAAI,GAAKA,MCHlB6yG,GAAsBhC,OAAS,SAASr7F,EAAGC,GACzC,MAAO,EAAEA,EAAG,EAAI,GAAKrV,GAAIoV,IAAM,6CCPzBs9F,2CADJC,GACID,EAAgB,SAAU7+F,EAAGjT,GAI7B,OAHA8xG,EAAgB/oG,OAAOipG,gBAClB,CAAE3pF,UAAW,cAAgB/gB,OAAS,SAAU2L,EAAGjT,GAAKiT,EAAEoV,UAAYroB,IACvE,SAAUiT,EAAGjT,GAAK,IAAK,IAAIqB,KAAKrB,EAAO+I,OAAOpG,UAAUqiB,eAAe/U,KAAKjQ,EAAGqB,KAAI4R,EAAE5R,GAAKrB,EAAEqB,KACzFywG,EAAc7+F,EAAGjT,IAErB,SAAUiT,EAAGjT,GAChB,GAAiB,oBAANA,GAA0B,OAANA,EAC3B,MAAM,IAAI6jB,UAAU,uBAAyB6G,OAAO1qB,GAAK,iCAE7D,SAASiyG,IAAO5xG,KAAKwL,YAAcoH,EADnC6+F,EAAc7+F,EAAGjT,GAEjBiT,EAAEtQ,UAAkB,OAAN3C,EAAa+I,OAAOojC,OAAOnsC,IAAMiyG,EAAGtvG,UAAY3C,EAAE2C,UAAW,IAAIsvG,KAcnFC,EACQ,SAORC,EAAiC,SAAUC,GAO3C,SAASD,EAAgBnrG,EAAMqrG,EAAaC,GACxC,IAAIx4E,EAAQs4E,EAAOniG,KAAK5P,KAAM2G,IAAS3G,KAavC,OAPAy5B,EAAMitE,QAAUsL,EAMhBv4E,EAAMj2B,MAAQyuG,EACPx4E,EAEX,OAtBAi4E,EAAUI,EAAiBC,GAsBpBD,EAvByB,CAwBlC,MA4BEI,EAA4B,SAAUH,GAMtC,SAASG,EAAWC,EAAWC,GAC3B,IAAI34E,EAAQs4E,EAAOniG,KAAK5P,OAASA,KAIjCy5B,EAAMghC,GAINhhC,EAAM44E,KAIN54E,EAAM6hC,GACN,IAAI70D,EAAU2rG,GAAe,GAW7B,GANA34E,EAAM64E,UAAY7rG,EAAQwuF,OAK1Bx7D,EAAM6R,OAAS6mE,GAAwB,GACnC14E,EAAM64E,QACN,IAAK,IAAIhzG,EAAI,EAAGiS,EAAKkoB,EAAM6R,OAAO/sC,OAAQe,EAAIiS,IAAMjS,EAChDm6B,EAAM84E,cAAc94E,EAAM6R,OAAOhsC,GAAIA,GAI7C,OADAm6B,EAAM+4E,gBACC/4E,EA8KX,OAlNAi4E,EAAUQ,EAAYH,GA0CtBG,EAAW5vG,UAAUjC,MAAQ,WACzB,KAAOL,KAAKk8C,YAAc,GACtBl8C,KAAKoC,OAUb8vG,EAAW5vG,UAAUd,OAAS,SAAUvD,GACpC,IAAK,IAAIqB,EAAI,EAAGiS,EAAKtT,EAAIM,OAAQe,EAAIiS,IAAMjS,EACvCU,KAAKqC,KAAKpE,EAAIqB,IAElB,OAAOU,MASXkyG,EAAW5vG,UAAUoJ,QAAU,SAAUyP,GAErC,IADA,IAAIixF,EAAQpsG,KAAKsrC,OACRhsC,EAAI,EAAGiS,EAAK66F,EAAM7tG,OAAQe,EAAIiS,IAAMjS,EACzC6b,EAAEixF,EAAM9sG,GAAIA,EAAG8sG,IAWvB8F,EAAW5vG,UAAUmwG,SAAW,WAC5B,OAAOzyG,KAAKsrC,QAQhB4mE,EAAW5vG,UAAU/B,KAAO,SAAUiD,GAClC,OAAOxD,KAAKsrC,OAAO9nC,IAQvB0uG,EAAW5vG,UAAU45C,UAAY,WAC7B,OAAOl8C,KAAK4nB,IAAIiqF,IAQpBK,EAAW5vG,UAAUowG,SAAW,SAAUlvG,EAAOmvG,GACzC3yG,KAAKsyG,SACLtyG,KAAKuyG,cAAcI,GAEvB3yG,KAAKsrC,OAAO1nC,OAAOJ,EAAO,EAAGmvG,GAC7B3yG,KAAKwyG,gBACLxyG,KAAK4yG,cAAc,IAAId,EAAgB,QAAyBa,EAAMnvG,KAQ1E0uG,EAAW5vG,UAAUF,IAAM,WACvB,OAAOpC,KAAK6yG,SAAS7yG,KAAKk8C,YAAc,IAQ5Cg2D,EAAW5vG,UAAUD,KAAO,SAAUswG,GAC9B3yG,KAAKsyG,SACLtyG,KAAKuyG,cAAcI,GAEvB,IAAIl0G,EAAIuB,KAAKk8C,YAEb,OADAl8C,KAAK0yG,SAASj0G,EAAGk0G,GACV3yG,KAAKk8C,aAQhBg2D,EAAW5vG,UAAUgB,OAAS,SAAUqvG,GAEpC,IADA,IAAI10G,EAAM+B,KAAKsrC,OACNhsC,EAAI,EAAGiS,EAAKtT,EAAIM,OAAQe,EAAIiS,IAAMjS,EACvC,GAAIrB,EAAIqB,KAAOqzG,EACX,OAAO3yG,KAAK6yG,SAASvzG,IAYjC4yG,EAAW5vG,UAAUuwG,SAAW,SAAUrvG,GACtC,IAAIiP,EAAOzS,KAAKsrC,OAAO9nC,GAIvB,OAHAxD,KAAKsrC,OAAO1nC,OAAOJ,EAAO,GAC1BxD,KAAKwyG,gBACLxyG,KAAK4yG,cAAc,IAAId,EAAgB,WAA4Br/F,EAAMjP,IAClEiP,GAQXy/F,EAAW5vG,UAAUwwG,MAAQ,SAAUtvG,EAAOmvG,GAC1C,IAAIl0G,EAAIuB,KAAKk8C,YACb,GAAI14C,EAAQ/E,EAAG,CACPuB,KAAKsyG,SACLtyG,KAAKuyG,cAAcI,EAAMnvG,GAE7B,IAAIiP,EAAOzS,KAAKsrC,OAAO9nC,GACvBxD,KAAKsrC,OAAO9nC,GAASmvG,EACrB3yG,KAAK4yG,cAAc,IAAId,EAAgB,WAA4Br/F,EAAMjP,IACzExD,KAAK4yG,cAAc,IAAId,EAAgB,QAAyBa,EAAMnvG,QAErE,CACD,IAAK,IAAIjE,EAAId,EAAGc,EAAIiE,IAASjE,EACzBS,KAAK0yG,SAASnzG,OAAG6N,GAErBpN,KAAK0yG,SAASlvG,EAAOmvG,KAM7BT,EAAW5vG,UAAUkwG,cAAgB,WACjCxyG,KAAKkb,IAAI22F,EAAiB7xG,KAAKsrC,OAAO/sC,SAO1C2zG,EAAW5vG,UAAUiwG,cAAgB,SAAUI,EAAMI,GACjD,IAAK,IAAIzzG,EAAI,EAAGiS,EAAKvR,KAAKsrC,OAAO/sC,OAAQe,EAAIiS,IAAMjS,EAC/C,GAAIU,KAAKsrC,OAAOhsC,KAAOqzG,GAAQrzG,IAAMyzG,EACjC,MAAM,IAAI,IAAe,KAI9Bb,EAnNoB,CAoN7B,KACF,wCCrSA,KAMIc,IAAK,MAMLC,OAAQ,kFCjBJxB,iCADJC,GACID,EAAgB,SAAU7+F,EAAGjT,GAI7B,OAHA8xG,EAAgB/oG,OAAOipG,gBAClB,CAAE3pF,UAAW,cAAgB/gB,OAAS,SAAU2L,EAAGjT,GAAKiT,EAAEoV,UAAYroB,IACvE,SAAUiT,EAAGjT,GAAK,IAAK,IAAIqB,KAAKrB,EAAO+I,OAAOpG,UAAUqiB,eAAe/U,KAAKjQ,EAAGqB,KAAI4R,EAAE5R,GAAKrB,EAAEqB,KACzFywG,EAAc7+F,EAAGjT,IAErB,SAAUiT,EAAGjT,GAChB,GAAiB,oBAANA,GAA0B,OAANA,EAC3B,MAAM,IAAI6jB,UAAU,uBAAyB6G,OAAO1qB,GAAK,iCAE7D,SAASiyG,IAAO5xG,KAAKwL,YAAcoH,EADnC6+F,EAAc7+F,EAAGjT,GAEjBiT,EAAEtQ,UAAkB,OAAN3C,EAAa+I,OAAOojC,OAAOnsC,IAAMiyG,EAAGtvG,UAAY3C,EAAE2C,UAAW,IAAIsvG,KAYnFsB,EAA2B,SAAUnB,GAQrC,SAASmB,EAAU/G,EAAQgH,EAAYC,EAAYC,GAC/C,IAAI55E,EAAQs4E,EAAOniG,KAAK5P,OAASA,KAqBjC,OAhBAy5B,EAAM0yE,OAASA,EAKf1yE,EAAM65E,YAAcF,EAKpB35E,EAAM05E,WAAaA,EAKnB15E,EAAM45E,MAAQA,EACP55E,EA8CX,OA3EAi4E,EAAUwB,EAAWnB,GAkCrBmB,EAAU5wG,UAAUixG,QAAU,WAC1BvzG,KAAK4yG,cAAcY,EAAA,WAKvBN,EAAU5wG,UAAUmxG,UAAY,WAC5B,OAAOzzG,KAAKmsG,QAMhB+G,EAAU5wG,UAAUoxG,SAAW,WAC3B,OAAO,WAKXR,EAAU5wG,UAAUqxG,cAAgB,WAChC,OAAO3zG,KAAKszG,aAKhBJ,EAAU5wG,UAAUsxG,cAAgB,WAChC,OAA8B5zG,KAAe,YAKjDkzG,EAAU5wG,UAAUuxG,SAAW,WAC3B,OAAO7zG,KAAKqzG,OAMhBH,EAAU5wG,UAAUS,KAAO,YACvB,WAEGmwG,EA5EmB,CA6E5B,KACF,gDCtGI,EAAwC,WACxC,IAAIzB,EAAgB,SAAU7+F,EAAGjT,GAI7B,OAHA8xG,EAAgB/oG,OAAOipG,gBAClB,CAAE3pF,UAAW,cAAgB/gB,OAAS,SAAU2L,EAAGjT,GAAKiT,EAAEoV,UAAYroB,IACvE,SAAUiT,EAAGjT,GAAK,IAAK,IAAIqB,KAAKrB,EAAO+I,OAAOpG,UAAUqiB,eAAe/U,KAAKjQ,EAAGqB,KAAI4R,EAAE5R,GAAKrB,EAAEqB,KACzFywG,EAAc7+F,EAAGjT,IAE5B,OAAO,SAAUiT,EAAGjT,GAChB,GAAiB,oBAANA,GAA0B,OAANA,EAC3B,MAAM,IAAI6jB,UAAU,uBAAyB6G,OAAO1qB,GAAK,iCAE7D,SAASiyG,IAAO5xG,KAAKwL,YAAcoH,EADnC6+F,EAAc7+F,EAAGjT,GAEjBiT,EAAEtQ,UAAkB,OAAN3C,EAAa+I,OAAOojC,OAAOnsC,IAAMiyG,EAAGtvG,UAAY3C,EAAE2C,UAAW,IAAIsvG,IAZ3C,IAyCV,SAAUG,GAUxC,SAAS+B,EAAa3H,EAAQgH,EAAYC,EAAYW,EAAKC,EAAaC,GACpE,IAAIx6E,EAAQs4E,EAAOniG,KAAK5P,KAAMmsG,EAAQgH,EAAYC,EAAYc,EAAA,SAAoBl0G,KA6BlF,OAxBAy5B,EAAM06E,KAAOJ,EAKbt6E,EAAM26E,OAAS,IAAIC,MACC,OAAhBL,IACAv6E,EAAM26E,OAAOJ,YAAcA,GAM/Bv6E,EAAM66E,UAAY,KAKlB76E,EAAM45E,MAAQa,EAAA,OAKdz6E,EAAM86E,mBAAqBN,EACpBx6E,EAvCX,EAAUq6E,EAAc/B,GA6CxB+B,EAAaxxG,UAAUoxG,SAAW,WAC9B,OAAO1zG,KAAKo0G,QAOhBN,EAAaxxG,UAAUkyG,kBAAoB,WACvCx0G,KAAKqzG,MAAQa,EAAA,QACbl0G,KAAKy0G,iBACLz0G,KAAKuzG,WAOTO,EAAaxxG,UAAUoyG,iBAAmB,gBACdtnG,IAApBpN,KAAKmzG,aACLnzG,KAAKmzG,YAAa,QAAUnzG,KAAKmsG,QAAUnsG,KAAKo0G,OAAOpyG,QAE3DhC,KAAKqzG,MAAQa,EAAA,SACbl0G,KAAKy0G,iBACLz0G,KAAKuzG,WAQTO,EAAaxxG,UAAUS,KAAO,WACtB/C,KAAKqzG,OAASa,EAAA,QAAmBl0G,KAAKqzG,OAASa,EAAA,UAC/Cl0G,KAAKqzG,MAAQa,EAAA,UACbl0G,KAAKuzG,UACLvzG,KAAKu0G,mBAAmBv0G,KAAMA,KAAKm0G,MACnCn0G,KAAKs0G,UAAYK,EAAY30G,KAAKo0G,OAAQp0G,KAAK00G,iBAAiBllG,KAAKxP,MAAOA,KAAKw0G,kBAAkBhlG,KAAKxP,SAMhH8zG,EAAaxxG,UAAUsyG,SAAW,SAAUC,GACxC70G,KAAKo0G,OAASS,EACd70G,KAAKmzG,YAAa,QAAUnzG,KAAKmsG,QAAUnsG,KAAKo0G,OAAOpyG,QAO3D8xG,EAAaxxG,UAAUmyG,eAAiB,WAChCz0G,KAAKs0G,YACLt0G,KAAKs0G,YACLt0G,KAAKs0G,UAAY,OArGI,CAyG/B,GAOK,SAASK,EAAYE,EAAOC,EAAaC,GAC5C,IAAIC,EAAsC,EAC1C,GAAIA,EAAIjB,KAAO,KAAc,CACzB,IAAIkB,EAAUD,EAAIE,SACdC,GAAc,EAuBlB,OAnBAF,EACKG,MAAK,WACFD,GACAL,OAGHO,OAAM,SAAUC,GACbH,IAGmB,kBAAfG,EAAMjmG,MACY,wBAAlBimG,EAAMrqE,QACN6pE,IAGAC,QAlBG,WACXI,GAAc,GAuBtB,IAAII,EAAe,EACf,QAAWP,EAAKxB,EAAA,OAAgBsB,IAChC,QAAWE,EAAKxB,EAAA,QAAiBuB,IAErC,OAAO,WACHQ,EAAa7pG,QAAQ,0CCrL7B,KACI8pG,KAAM,EACNC,QAAS,EACTC,OAAQ,EACRC,MAAO,EACPC,MAAO,4ECVHnE,wFADJC,GACID,EAAgB,SAAU7+F,EAAGjT,GAI7B,OAHA8xG,EAAgB/oG,OAAOipG,gBAClB,CAAE3pF,UAAW,cAAgB/gB,OAAS,SAAU2L,EAAGjT,GAAKiT,EAAEoV,UAAYroB,IACvE,SAAUiT,EAAGjT,GAAK,IAAK,IAAIqB,KAAKrB,EAAO+I,OAAOpG,UAAUqiB,eAAe/U,KAAKjQ,EAAGqB,KAAI4R,EAAE5R,GAAKrB,EAAEqB,KACzFywG,EAAc7+F,EAAGjT,IAErB,SAAUiT,EAAGjT,GAChB,GAAiB,oBAANA,GAA0B,OAANA,EAC3B,MAAM,IAAI6jB,UAAU,uBAAyB6G,OAAO1qB,GAAK,iCAE7D,SAASiyG,IAAO5xG,KAAKwL,YAAcoH,EADnC6+F,EAAc7+F,EAAGjT,GAEjBiT,EAAEtQ,UAAkB,OAAN3C,EAAa+I,OAAOojC,OAAOnsC,IAAMiyG,EAAGtvG,UAAY3C,EAAE2C,UAAW,IAAIsvG,KAqMvF,SAASiE,EAAgB3rG,EAAK4rG,GAC1B,aAEJ,MA9KiC,SAAU/D,GAKvC,SAASgE,EAAY7rG,GACjB,IAAIuvB,EAAQs4E,EAAOniG,KAAK5P,OAASA,KAMjC,OADAy5B,EAAM6tB,KAAOp9C,EACNuvB,EAyJX,OApKAi4E,EAAUqE,EAAahE,GAkBvBgE,EAAYzzG,UAAU0zG,oBAAsB,SAAUrvG,EAAMmvG,IACxD,WAMJC,EAAYzzG,UAAU2zG,oBAAsB,SAAUH,GAClD,IAAII,EAAYJ,EAAWI,UACvBC,EAA6BL,EAAWK,2BACxCC,EAA6BN,EAAWM,4BAC5C,QAAiBD,EAA4BL,EAAWrhF,KAAK,GAAK,EAAGqhF,EAAWrhF,KAAK,GAAK,EAAG,EAAIyhF,EAAU/C,YAAa,EAAI+C,EAAU/C,YAAa+C,EAAUG,UAAWH,EAAUI,OAAO,IAAKJ,EAAUI,OAAO,KAC/M,QAAYF,EAA4BD,IAiB5CJ,EAAYzzG,UAAUi0G,2BAA6B,SAAUhiE,EAAYuhE,EAAYU,EAAcC,EAAc5qG,EAAU6qG,EAASC,EAAaC,GAC7I,IAAIl5G,EACAw4G,EAAYJ,EAAWI,UAQ3B,SAASK,EAA2BM,EAASvwG,EAASwwG,EAAOjwG,GACzD,OAAOgF,EAAS+D,KAAK8mG,EAASpwG,EAASuwG,EAAUC,EAAQ,KAAMjwG,GAEnE,IAAI+mG,EAAasI,EAAUtI,WACvBmJ,GAAuB,QAAMxiE,EAAWrxC,QAAS0qG,GACjDoJ,EAAU,CAAC,CAAC,EAAG,IACnB,GAAIpJ,EAAWqJ,YAAcR,EAAc,CACvC,IAAIS,EAAmBtJ,EAAW6F,YAC9B0D,GAAa,QAASD,GAC1BF,EAAQ30G,KAAK,EAAE80G,EAAY,GAAI,CAACA,EAAY,IAMhD,IAJA,IAAIC,EAActB,EAAWuB,iBACzBC,EAAYF,EAAY74G,OACxBg5G,EAA4C,GAC5CC,EAAW,GACNl4G,EAAI,EAAGA,EAAI03G,EAAQz4G,OAAQe,IAChC,IAAK,IAAIC,EAAI+3G,EAAY,EAAG/3G,GAAK,IAAKA,EAAG,CACrC,IAAIk4G,EAAaL,EAAY73G,GACzBu3G,EAAQW,EAAWX,MACvB,GAAIA,EAAMY,gBACN,OAAOD,EAAYvB,IACnBS,EAAY/mG,KAAKgnG,EAAUE,GAAQ,CACnC,IAAIa,EAAgBb,EAAMc,cACtBhhG,EAASkgG,EAAMe,YACnB,GAAIF,GAAiB/gG,EAAQ,CACzB,IAAI7P,EAAc6P,EAAOkhG,WACnBf,EACAxiE,EACFwjE,EAAaxB,EAA2B/mG,KAAK,KAAMioG,EAAWZ,SAClEW,EAAS,GAAKzwG,EAAY,GAAKiwG,EAAQ13G,GAAG,GAC1Ck4G,EAAS,GAAKzwG,EAAY,GAAKiwG,EAAQ13G,GAAG,GAC1C5B,EAASi6G,EAAcpB,2BAA2BiB,EAAU1B,EAAYU,EAAcuB,EAAYR,GAEtG,GAAI75G,EACA,OAAOA,GAKvB,GAAuB,IAAnB65G,EAAQh5G,OAAZ,CAGA,IAAIy5G,EAAQ,EAAIT,EAAQh5G,OAMxB,OALAg5G,EAAQ7rG,SAAQ,SAAUhN,EAAGY,GAAK,OAAQZ,EAAEu5G,YAAc34G,EAAI04G,KAC9DT,EAAQzxG,MAAK,SAAUpG,EAAGC,GAAK,OAAOD,EAAEu4G,WAAat4G,EAAEs4G,cACvDV,EAAQhyF,MAAK,SAAU7mB,GACnB,OAAQhB,EAASgB,EAAEmN,SAASnN,EAAE4H,QAAS5H,EAAEo4G,MAAOp4G,EAAEmI,aAE/CnJ,IAgBXq4G,EAAYzzG,UAAU41G,oBAAsB,SAAUC,EAAOrC,EAAYU,EAAc3qG,EAAU8qG,GAC7F,OAAO,WAeXZ,EAAYzzG,UAAU81G,uBAAyB,SAAU7jE,EAAYuhE,EAAYU,EAAcC,EAAcE,EAAaD,GAEtH,YAAsBtpG,IADLpN,KAAKu2G,2BAA2BhiE,EAAYuhE,EAAYU,EAAcC,EAAc,KAAMz2G,KAAM22G,EAAaD,IAMlIX,EAAYzzG,UAAU+1G,OAAS,WAC3B,OAAOr4G,KAAKsnD,MAOhByuD,EAAYzzG,UAAUg2G,YAAc,SAAUxC,IAC1C,WAMJC,EAAYzzG,UAAUi2G,wBAA0B,SAAUzC,GAClD,sBACAA,EAAW0C,oBAAoBn2G,KAAKwzG,IAGrCE,EArKqB,CAsK9B0C,EAAA,2FC5ME,EAAwC,WACxC,IAAIhH,EAAgB,SAAU7+F,EAAGjT,GAI7B,OAHA8xG,EAAgB/oG,OAAOipG,gBAClB,CAAE3pF,UAAW,cAAgB/gB,OAAS,SAAU2L,EAAGjT,GAAKiT,EAAEoV,UAAYroB,IACvE,SAAUiT,EAAGjT,GAAK,IAAK,IAAIqB,KAAKrB,EAAO+I,OAAOpG,UAAUqiB,eAAe/U,KAAKjQ,EAAGqB,KAAI4R,EAAE5R,GAAKrB,EAAEqB,KACzFywG,EAAc7+F,EAAGjT,IAE5B,OAAO,SAAUiT,EAAGjT,GAChB,GAAiB,oBAANA,GAA0B,OAANA,EAC3B,MAAM,IAAI6jB,UAAU,uBAAyB6G,OAAO1qB,GAAK,iCAE7D,SAASiyG,IAAO5xG,KAAKwL,YAAcoH,EADnC6+F,EAAc7+F,EAAGjT,GAEjBiT,EAAEtQ,UAAkB,OAAN3C,EAAa+I,OAAOojC,OAAOnsC,IAAMiyG,EAAGtvG,UAAY3C,EAAE2C,UAAW,IAAIsvG,IAZ3C,GAmL5C,EAlJ0C,SAAUG,GAKhD,SAAS2G,EAAqBxuG,GAC1B,IAAIuvB,EAAQs4E,EAAOniG,KAAK5P,KAAMkK,IAAQlK,KAItCy5B,EAAMk/E,wBAAyB,QAAO,KAAcC,EAAA,iBAAgC1uG,EAAI2uG,WAAWrpG,KAAKtF,IAKxGuvB,EAAMq/E,SAAWC,SAASC,cAAc,OACxC,IAAIC,EAAQx/E,EAAMq/E,SAASG,MAC3BA,EAAMC,SAAW,WACjBD,EAAME,MAAQ,OACdF,EAAMj3G,OAAS,OACfi3G,EAAMG,OAAS,IACf3/E,EAAMq/E,SAASO,UAAY,KAAqB,aAChD,IAAIC,EAAYpvG,EAAIqvG,cAYpB,OAXAD,EAAUE,aAAa//E,EAAMq/E,SAAUQ,EAAUG,YAAc,MAK/DhgF,EAAMigF,UAAY,GAKlBjgF,EAAMkgF,kBAAmB,EAClBlgF,EA8GX,OA/IA,EAAUi/E,EAAsB3G,GAuChC2G,EAAqBp2G,UAAU0zG,oBAAsB,SAAUrvG,EAAMmvG,GACjE,IAAI5rG,EAAMlK,KAAKq4G,SACf,GAAInuG,EAAI0vG,YAAYjzG,GAAO,CACvB,IAAIkzG,EAAU,IAAI,IAAYlzG,OAAMyG,EAAW0oG,GAC/C5rG,EAAI0oG,cAAciH,KAG1BnB,EAAqBp2G,UAAUw3G,gBAAkB,YAC7C,QAAc95G,KAAK24G,wBACnB34G,KAAK84G,SAASiB,WAAWC,YAAYh6G,KAAK84G,UAC1C/G,EAAOzvG,UAAUw3G,gBAAgBlqG,KAAK5P,OAM1C04G,EAAqBp2G,UAAUg2G,YAAc,SAAUxC,GACnD,GAAKA,EAAL,CAOA91G,KAAKi2G,oBAAoBH,GACzB91G,KAAKg2G,oBAAoB,eAA4BF,GACrD,IAAIuB,EAAmBvB,EAAWuB,iBAAiBvxG,MAAK,SAAUpG,EAAGC,GACjE,OAAOD,EAAE05G,OAASz5G,EAAEy5G,UAEpBlD,EAAYJ,EAAWI,UAC3Bl2G,KAAK05G,UAAUn7G,OAAS,EAMxB,IAFA,IAAI07G,EAAkB,GAClBC,EAAkB,KACb56G,EAAI,EAAGiS,EAAK8lG,EAAiB94G,OAAQe,EAAIiS,IAAMjS,EAAG,CACvD,IAAIm4G,EAAaJ,EAAiB/3G,GAElC,GADAw2G,EAAWqE,WAAa76G,GACnB,OAAOm4G,EAAYvB,KACnBuB,EAAW2C,aAAe,WACvB3C,EAAW2C,aAAe,eAFlC,CAKA,IAAItD,EAAQW,EAAWX,MACnBpQ,EAAUoQ,EAAMuD,OAAOvE,EAAYoE,GAClCxT,IAGDA,IAAYwT,IACZl6G,KAAK05G,UAAUr3G,KAAKqkG,GACpBwT,EAAkBxT,GAElB,iBAAkBoQ,GAClBmD,EAAgB53G,KACwC,KAGhE,IAAS/C,EAAI26G,EAAgB17G,OAAS,EAAGe,GAAK,IAAKA,EAC/C26G,EAAgB36G,GAAGg7G,gBAAgBxE,IAEvC,QAAgB91G,KAAK84G,SAAU94G,KAAK05G,WACpC15G,KAAKg2G,oBAAoB,gBAA6BF,GACjD91G,KAAK25G,mBACN35G,KAAK84G,SAASG,MAAMsB,QAAU,GAC9Bv6G,KAAK25G,kBAAmB,GAE5B35G,KAAKu4G,wBAAwBzC,QAjDrB91G,KAAK25G,mBACL35G,KAAK84G,SAASG,MAAMsB,QAAU,OAC9Bv6G,KAAK25G,kBAAmB,IA8DpCjB,EAAqBp2G,UAAU41G,oBAAsB,SAAUC,EAAOrC,EAAYU,EAAc3qG,EAAU8qG,GAItG,IAHA,IAAIT,EAAYJ,EAAWI,UACvBkB,EAActB,EAAWuB,iBAEpB/3G,EADO83G,EAAY74G,OACH,EAAGe,GAAK,IAAKA,EAAG,CACrC,IAAIm4G,EAAaL,EAAY93G,GACzBw3G,EAAQW,EAAWX,MACvB,GAAIA,EAAMY,gBACN,OAAOD,EAAYvB,IACnBS,EAAYG,GAAQ,CACpB,IACIr0G,EADgBq0G,EAAMc,cACD4C,eAAerC,EAAOrC,EAAYU,GAC3D,GAAI/zG,EAAM,CACN,IAAI/E,EAASmO,EAASirG,EAAOr0G,GAC7B,GAAI/E,EACA,OAAOA,MAOpBg7G,EAhJ8B,CAiJvChvF,mEClLE,EAAwC,WACxC,IAAI+nF,EAAgB,SAAU7+F,EAAGjT,GAI7B,OAHA8xG,EAAgB/oG,OAAOipG,gBAClB,CAAE3pF,UAAW,cAAgB/gB,OAAS,SAAU2L,EAAGjT,GAAKiT,EAAEoV,UAAYroB,IACvE,SAAUiT,EAAGjT,GAAK,IAAK,IAAIqB,KAAKrB,EAAO+I,OAAOpG,UAAUqiB,eAAe/U,KAAKjQ,EAAGqB,KAAI4R,EAAE5R,GAAKrB,EAAEqB,KACzFywG,EAAc7+F,EAAGjT,IAE5B,OAAO,SAAUiT,EAAGjT,GAChB,GAAiB,oBAANA,GAA0B,OAANA,EAC3B,MAAM,IAAI6jB,UAAU,uBAAyB6G,OAAO1qB,GAAK,iCAE7D,SAASiyG,IAAO5xG,KAAKwL,YAAcoH,EADnC6+F,EAAc7+F,EAAGjT,GAEjBiT,EAAEtQ,UAAkB,OAAN3C,EAAa+I,OAAOojC,OAAOnsC,IAAMiyG,EAAGtvG,UAAY3C,EAAE2C,UAAW,IAAIsvG,IAZ3C,GAiD5C,EAzB8B,SAAUG,GAOpC,SAAS0I,EAAS9zG,EAAMuD,EAAKwwG,GACzB,IAAIjhF,EAAQs4E,EAAOniG,KAAK5P,KAAM2G,IAAS3G,KAavC,OAPAy5B,EAAMvvB,IAAMA,EAMZuvB,EAAMq8E,gBAAgC1oG,IAAnBstG,EAA+BA,EAAiB,KAC5DjhF,EAEX,OAtBA,EAAUghF,EAAU1I,GAsBb0I,EAvBkB,CAwB3B,MChDE,EAAwC,WACxC,IAAIhJ,EAAgB,SAAU7+F,EAAGjT,GAI7B,OAHA8xG,EAAgB/oG,OAAOipG,gBAClB,CAAE3pF,UAAW,cAAgB/gB,OAAS,SAAU2L,EAAGjT,GAAKiT,EAAEoV,UAAYroB,IACvE,SAAUiT,EAAGjT,GAAK,IAAK,IAAIqB,KAAKrB,EAAO+I,OAAOpG,UAAUqiB,eAAe/U,KAAKjQ,EAAGqB,KAAI4R,EAAE5R,GAAKrB,EAAEqB,KACzFywG,EAAc7+F,EAAGjT,IAE5B,OAAO,SAAUiT,EAAGjT,GAChB,GAAiB,oBAANA,GAA0B,OAANA,EAC3B,MAAM,IAAI6jB,UAAU,uBAAyB6G,OAAO1qB,GAAK,iCAE7D,SAASiyG,IAAO5xG,KAAKwL,YAAcoH,EADnC6+F,EAAc7+F,EAAGjT,GAEjBiT,EAAEtQ,UAAkB,OAAN3C,EAAa+I,OAAOojC,OAAOnsC,IAAMiyG,EAAGtvG,UAAY3C,EAAE2C,UAAW,IAAIsvG,IAZ3C,GA4H5C,EAnGqC,SAAUG,GAS3C,SAAS4I,EAAgBh0G,EAAMuD,EAAK0wG,EAAeC,EAAcH,GAC7D,IAAIjhF,EAAQs4E,EAAOniG,KAAK5P,KAAM2G,EAAMuD,EAAKwwG,IAAmB16G,KA0B5D,OAnBAy5B,EAAMmhF,cAAgBA,EAKtBnhF,EAAMqhF,OAAS,KAKfrhF,EAAMshF,YAAc,KAQpBthF,EAAMuhF,cAA4B5tG,IAAjBytG,GAA6BA,EACvCphF,EA6DX,OAhGA,EAAUkhF,EAAiB5I,GAqC3BrpG,OAAOC,eAAegyG,EAAgBr4G,UAAW,QAAS,CAMtDslB,IAAK,WAID,OAHK5nB,KAAK86G,SACN96G,KAAK86G,OAAS96G,KAAKkK,IAAI+wG,cAAcj7G,KAAK46G,gBAEvC56G,KAAK86G,QAEhB5/F,IAAK,SAAUi9F,GACXn4G,KAAK86G,OAAS3C,GAElBtgG,YAAY,EACZxH,cAAc,IAElB3H,OAAOC,eAAegyG,EAAgBr4G,UAAW,aAAc,CAO3DslB,IAAK,WAID,OAHK5nB,KAAK+6G,cACN/6G,KAAK+6G,YAAc/6G,KAAKkK,IAAIgxG,uBAAuBl7G,KAAKm4G,QAErDn4G,KAAK+6G,aAEhB7/F,IAAK,SAAUq5B,GACXv0C,KAAK+6G,YAAcxmE,GAEvB18B,YAAY,EACZxH,cAAc,IAOlBsqG,EAAgBr4G,UAAU64G,eAAiB,WACvCpJ,EAAOzvG,UAAU64G,eAAevrG,KAAK5P,MACjC,mBAAoBA,KAAK46G,eACD56G,KAAkB,cAAEm7G,kBAQpDR,EAAgBr4G,UAAU84G,gBAAkB,WACxCrJ,EAAOzvG,UAAU84G,gBAAgBxrG,KAAK5P,MAClC,oBAAqBA,KAAK46G,eACF56G,KAAkB,cAAEo7G,mBAG7CT,EAjGyB,CAkGlC,6CCxHE,EAAwC,WACxC,IAAIlJ,EAAgB,SAAU7+F,EAAGjT,GAI7B,OAHA8xG,EAAgB/oG,OAAOipG,gBAClB,CAAE3pF,UAAW,cAAgB/gB,OAAS,SAAU2L,EAAGjT,GAAKiT,EAAEoV,UAAYroB,IACvE,SAAUiT,EAAGjT,GAAK,IAAK,IAAIqB,KAAKrB,EAAO+I,OAAOpG,UAAUqiB,eAAe/U,KAAKjQ,EAAGqB,KAAI4R,EAAE5R,GAAKrB,EAAEqB,KACzFywG,EAAc7+F,EAAGjT,IAE5B,OAAO,SAAUiT,EAAGjT,GAChB,GAAiB,oBAANA,GAA0B,OAANA,EAC3B,MAAM,IAAI6jB,UAAU,uBAAyB6G,OAAO1qB,GAAK,iCAE7D,SAASiyG,IAAO5xG,KAAKwL,YAAcoH,EADnC6+F,EAAc7+F,EAAGjT,GAEjBiT,EAAEtQ,UAAkB,OAAN3C,EAAa+I,OAAOojC,OAAOnsC,IAAMiyG,EAAGtvG,UAAY3C,EAAE2C,UAAW,IAAIsvG,IAZ3C,GA0S5C,EAnR4C,SAAUG,GAMlD,SAASsJ,EAAuBnxG,EAAKoxG,GACjC,IAAI7hF,EAAQs4E,EAAOniG,KAAK5P,KAAMkK,IAAQlK,KAMtCy5B,EAAM6tB,KAAOp9C,EAKbuvB,EAAM8hF,gBAKN9hF,EAAM+hF,gBAAiB,EAKvB/hF,EAAMgiF,WAAY,EAKlBhiF,EAAMiiF,kBAAoB,GAK1BjiF,EAAMkiF,oBAAmCvuG,IAAlBkuG,EAA8B,EAAIA,EAOzD7hF,EAAMmiF,MAAQ,KACd,IAAIlV,EAAUjtE,EAAM6tB,KAAKiyD,cAgCzB,OA3BA9/E,EAAMoiF,gBAAkB,EAKxBpiF,EAAMqiF,gBAAkB,GACxBriF,EAAMq/E,SAAWpS,EAKjBjtE,EAAMsiF,yBAA0B,QAAOrV,EAAS,gBAA8BjtE,EAAMuiF,mBAAoBviF,GAKxGA,EAAMwiF,0BAKNxiF,EAAMyiF,qBAAsB,QAAOxV,EAAS,gBAA8BjtE,EAAM0iF,YAAa1iF,GAI7FA,EAAM2iF,sBAAwB3iF,EAAM4iF,iBAAiB7sG,KAAKiqB,GAC1DA,EAAMq/E,SAASwD,iBAAiB,cAAqB7iF,EAAM2iF,wBAAuB,MAA0B,CAAEG,SAAS,IAChH9iF,EAmMX,OAhRA,EAAU4hF,EAAwBtJ,GAoFlCsJ,EAAuB/4G,UAAUk6G,cAAgB,SAAUC,GACvD,IAAIC,EAAW,IAAI,EAAgBC,EAAA,QAA2B38G,KAAKsnD,KAAMm1D,GACzEz8G,KAAK4yG,cAAc8J,QACUtvG,IAAzBpN,KAAKu7G,iBAELqB,aAAa58G,KAAKu7G,iBAClBv7G,KAAKu7G,qBAAkBnuG,EACvBsvG,EAAW,IAAI,EAAgBC,EAAA,WAA8B38G,KAAKsnD,KAAMm1D,GACxEz8G,KAAK4yG,cAAc8J,IAInB18G,KAAKu7G,gBAAkBsB,WAEvB,WACI78G,KAAKu7G,qBAAkBnuG,EACvB,IAAIsvG,EAAW,IAAI,EAAgBC,EAAA,cAAiC38G,KAAKsnD,KAAMm1D,GAC/Ez8G,KAAK4yG,cAAc8J,IACrBltG,KAAKxP,MAAO,MAUtBq7G,EAAuB/4G,UAAUw6G,sBAAwB,SAAUL,GAC/D,IAAIn7E,EAAQm7E,EACRn7E,EAAM36B,MAAQg2G,EAAA,aACdr7E,EAAM36B,MAAQg2G,EAAA,uBACP38G,KAAK87G,gBAAgBx6E,EAAMy7E,WAE7Bz7E,EAAM36B,MAAQg2G,EAAA,gBACnB38G,KAAK87G,gBAAgBx6E,EAAMy7E,YAAa,GAE5C/8G,KAAK67G,gBAAkBnzG,OAAO0O,KAAKpX,KAAK87G,iBAAiBv9G,QAO7D88G,EAAuB/4G,UAAU06G,iBAAmB,SAAUP,GAC1Dz8G,KAAK88G,sBAAsBL,GAC3B,IAAIC,EAAW,IAAI,EAAgBC,EAAA,YAA+B38G,KAAKsnD,KAAMm1D,GAC7Ez8G,KAAK4yG,cAAc8J,GAOf18G,KAAKw7G,iBACJkB,EAASO,mBACTj9G,KAAKy7G,WACNz7G,KAAKk9G,qBAAqBT,IAC1Bz8G,KAAKw8G,cAAcx8G,KAAK47G,OAEC,IAAzB57G,KAAK67G,kBACL77G,KAAK07G,kBAAkBhwG,QAAQ,MAC/B1L,KAAK07G,kBAAkBn9G,OAAS,EAChCyB,KAAKy7G,WAAY,EACjBz7G,KAAK47G,MAAQ,OASrBP,EAAuB/4G,UAAU46G,qBAAuB,SAAUT,GAC9D,OAA+B,IAAxBA,EAAaU,QAOxB9B,EAAuB/4G,UAAU05G,mBAAqB,SAAUS,GAC5Dz8G,KAAKw7G,eAA0C,IAAzBx7G,KAAK67G,gBAC3B77G,KAAK88G,sBAAsBL,GAC3B,IAAIC,EAAW,IAAI,EAAgBC,EAAA,cAAiC38G,KAAKsnD,KAAMm1D,GAI/E,IAAK,IAAIW,KAHTp9G,KAAK4yG,cAAc8J,GAEnB18G,KAAK47G,MAAoC,GACpBa,EAAc,CAC/B,IAAI7zG,EAAQ6zG,EAAaW,GACzBp9G,KAAK47G,MAAMwB,GAA6B,oBAAVx0G,EAAuB,KAAOA,EAEhE,GAAsC,IAAlC5I,KAAK07G,kBAAkBn9G,OAAc,CACrC,IAAI8+G,EAAMr9G,KAAKsnD,KAAKg2D,mBACpBt9G,KAAK07G,kBAAkBr5G,MAAK,QAAOg7G,EAAKV,EAAA,cAAiC38G,KAAKu9G,mBAAoBv9G,OAAO,QAAOq9G,EAAKV,EAAA,YAA+B38G,KAAKg9G,iBAAkBh9G,OAc3K,QAAOA,KAAK84G,SAAU6D,EAAA,gBAAmC38G,KAAKg9G,iBAAkBh9G,OAC5EA,KAAK84G,SAAS0E,aAAex9G,KAAK84G,SAAS0E,gBAAkBH,GAC7Dr9G,KAAK07G,kBAAkBr5G,MAAK,QAAOrC,KAAK84G,SAAS0E,cAAeb,EAAA,YAA+B38G,KAAKg9G,iBAAkBh9G,SASlIq7G,EAAuB/4G,UAAUi7G,mBAAqB,SAAUd,GAI5D,GAAIz8G,KAAKy9G,UAAUhB,GAAe,CAC9Bz8G,KAAKy7G,WAAY,EACjB,IAAIiB,EAAW,IAAI,EAAgBC,EAAA,cAAiC38G,KAAKsnD,KAAMm1D,EAAcz8G,KAAKy7G,WAClGz7G,KAAK4yG,cAAc8J,KAU3BrB,EAAuB/4G,UAAU65G,YAAc,SAAUM,GACrDz8G,KAAKi8G,0BAA4BQ,EACjC,IAAIzB,KAAch7G,KAAK47G,QAAS57G,KAAKy9G,UAAUhB,IAC/Cz8G,KAAK4yG,cAAc,IAAI,EAAgB6J,EAAa91G,KAAM3G,KAAKsnD,KAAMm1D,EAAczB,KAUvFK,EAAuB/4G,UAAU+5G,iBAAmB,SAAU/6E,GAG1D,IAAIs5E,EAAgB56G,KAAKi8G,0BACnBrB,IAAiBA,EAAcqC,kBACJ,mBAArB37E,EAAMo8E,aAAiD,IAArBp8E,EAAMo8E,YAChDp8E,EAAM65E,kBASdE,EAAuB/4G,UAAUm7G,UAAY,SAAUhB,GACnD,OAAQz8G,KAAKy7G,WACT78G,KAAKoiB,IAAIy7F,EAAakB,QAAU39G,KAAK47G,MAAM+B,SACvC39G,KAAK27G,gBACT/8G,KAAKoiB,IAAIy7F,EAAamB,QAAU59G,KAAK47G,MAAMgC,SAAW59G,KAAK27G,gBAKnEN,EAAuB/4G,UAAUw3G,gBAAkB,WAC3C95G,KAAKk8G,uBACL,QAAcl8G,KAAKk8G,qBACnBl8G,KAAKk8G,oBAAsB,MAE/Bl8G,KAAK84G,SAAS+E,oBAAoB,cAAqB79G,KAAKo8G,uBACxDp8G,KAAK+7G,2BACL,QAAc/7G,KAAK+7G,yBACnB/7G,KAAK+7G,wBAA0B,MAEnC/7G,KAAK07G,kBAAkBhwG,QAAQ,MAC/B1L,KAAK07G,kBAAkBn9G,OAAS,EAChCyB,KAAK84G,SAAW,KAChB/G,EAAOzvG,UAAUw3G,gBAAgBlqG,KAAK5P,OAEnCq7G,EAjRgC,CAkRzCyC,EAAA,cCtSF,EACgB,aADhB,EAEU,OAFV,EAGY,SAHZ,EAIU,6BCFCC,EAAOpgH,EAAAA,EAsOlB,EAzNmC,WAK/B,SAAS6d,EAAcwiG,EAAkBC,GAKrCj+G,KAAKk+G,kBAAoBF,EAKzBh+G,KAAKm+G,aAAeF,EAKpBj+G,KAAKo+G,UAAY,GAKjBp+G,KAAKq+G,YAAc,GAKnBr+G,KAAKs+G,gBAAkB,GAyL3B,OApLA9iG,EAAclZ,UAAUjC,MAAQ,WAC5BL,KAAKo+G,UAAU7/G,OAAS,EACxByB,KAAKq+G,YAAY9/G,OAAS,GAC1B,QAAMyB,KAAKs+G,kBAMf9iG,EAAclZ,UAAUi8G,QAAU,WAC9B,IAAI/hG,EAAWxc,KAAKo+G,UAChB3hG,EAAazc,KAAKq+G,YAClB3X,EAAUlqF,EAAS,GACA,GAAnBA,EAASje,QACTie,EAASje,OAAS,EAClBke,EAAWle,OAAS,IAGpBie,EAAS,GAAKA,EAASpa,MACvBqa,EAAW,GAAKA,EAAWra,MAC3BpC,KAAKw+G,QAAQ,IAEjB,IAAIC,EAAaz+G,KAAKm+G,aAAazX,GAEnC,cADO1mG,KAAKs+G,gBAAgBG,GACrB/X,GAOXlrF,EAAclZ,UAAUo8G,QAAU,SAAUhY,IACxC,SAAS1mG,KAAKm+G,aAAazX,KAAY1mG,KAAKs+G,iBAAkB,IAC9D,IAAIvhG,EAAW/c,KAAKk+G,kBAAkBxX,GACtC,OAAI3pF,GAAYghG,IACZ/9G,KAAKo+G,UAAU/7G,KAAKqkG,GACpB1mG,KAAKq+G,YAAYh8G,KAAK0a,GACtB/c,KAAKs+G,gBAAgBt+G,KAAKm+G,aAAazX,KAAY,EACnD1mG,KAAK2+G,UAAU,EAAG3+G,KAAKo+G,UAAU7/G,OAAS,IACnC,IAOfid,EAAclZ,UAAUs8G,SAAW,WAC/B,OAAO5+G,KAAKo+G,UAAU7/G,QAQ1Bid,EAAclZ,UAAUu8G,mBAAqB,SAAUr7G,GACnD,OAAe,EAARA,EAAY,GAQvBgY,EAAclZ,UAAUw8G,oBAAsB,SAAUt7G,GACpD,OAAe,EAARA,EAAY,GAQvBgY,EAAclZ,UAAUy8G,gBAAkB,SAAUv7G,GAChD,OAAQA,EAAQ,GAAM,GAM1BgY,EAAclZ,UAAU08G,SAAW,WAC/B,IAAI1/G,EACJ,IAAKA,GAAKU,KAAKo+G,UAAU7/G,QAAU,GAAK,EAAGe,GAAK,EAAGA,IAC/CU,KAAKw+G,QAAQl/G,IAMrBkc,EAAclZ,UAAU0yB,QAAU,WAC9B,OAAiC,IAA1Bh1B,KAAKo+G,UAAU7/G,QAM1Bid,EAAclZ,UAAU28G,YAAc,SAAUzoG,GAC5C,OAAOA,KAAOxW,KAAKs+G,iBAMvB9iG,EAAclZ,UAAU48G,SAAW,SAAUxY,GACzC,OAAO1mG,KAAKi/G,YAAYj/G,KAAKm+G,aAAazX,KAM9ClrF,EAAclZ,UAAUk8G,QAAU,SAAUh7G,GAOxC,IANA,IAAIgZ,EAAWxc,KAAKo+G,UAChB3hG,EAAazc,KAAKq+G,YAClB3jG,EAAQ8B,EAASje,OACjBmoG,EAAUlqF,EAAShZ,GACnBuZ,EAAWN,EAAWjZ,GACtB+rE,EAAa/rE,EACVA,EAAQkX,GAAS,GAAG,CACvB,IAAIykG,EAASn/G,KAAK6+G,mBAAmBr7G,GACjC47G,EAASp/G,KAAK8+G,oBAAoBt7G,GAClC67G,EAAoBD,EAAS1kG,GAAS+B,EAAW2iG,GAAU3iG,EAAW0iG,GACpEC,EACAD,EACN3iG,EAAShZ,GAASgZ,EAAS6iG,GAC3B5iG,EAAWjZ,GAASiZ,EAAW4iG,GAC/B77G,EAAQ67G,EAEZ7iG,EAAShZ,GAASkjG,EAClBjqF,EAAWjZ,GAASuZ,EACpB/c,KAAK2+G,UAAUpvC,EAAY/rE,IAO/BgY,EAAclZ,UAAUq8G,UAAY,SAAUpvC,EAAY/rE,GAKtD,IAJA,IAAIgZ,EAAWxc,KAAKo+G,UAChB3hG,EAAazc,KAAKq+G,YAClB3X,EAAUlqF,EAAShZ,GACnBuZ,EAAWN,EAAWjZ,GACnBA,EAAQ+rE,GAAY,CACvB,IAAI+vC,EAAct/G,KAAK++G,gBAAgBv7G,GACvC,KAAIiZ,EAAW6iG,GAAeviG,GAM1B,MALAP,EAAShZ,GAASgZ,EAAS8iG,GAC3B7iG,EAAWjZ,GAASiZ,EAAW6iG,GAC/B97G,EAAQ87G,EAMhB9iG,EAAShZ,GAASkjG,EAClBjqF,EAAWjZ,GAASuZ,GAKxBvB,EAAclZ,UAAUi9G,aAAe,WACnC,IAKI7Y,EAASpnG,EAAGyd,EALZihG,EAAmBh+G,KAAKk+G,kBACxB1hG,EAAWxc,KAAKo+G,UAChB3hG,EAAazc,KAAKq+G,YAClB76G,EAAQ,EACR/E,EAAI+d,EAASje,OAEjB,IAAKe,EAAI,EAAGA,EAAIb,IAAKa,GAEjByd,EAAWihG,EADXtX,EAAUlqF,EAASld,MAEHy+G,SACL/9G,KAAKs+G,gBAAgBt+G,KAAKm+G,aAAazX,KAG9CjqF,EAAWjZ,GAASuZ,EACpBP,EAAShZ,KAAWkjG,GAG5BlqF,EAASje,OAASiF,EAClBiZ,EAAWle,OAASiF,EACpBxD,KAAKg/G,YAEFxjG,EAvNuB,cCrB9B,EAAwC,WACxC,IAAIi2F,EAAgB,SAAU7+F,EAAGjT,GAI7B,OAHA8xG,EAAgB/oG,OAAOipG,gBAClB,CAAE3pF,UAAW,cAAgB/gB,OAAS,SAAU2L,EAAGjT,GAAKiT,EAAEoV,UAAYroB,IACvE,SAAUiT,EAAGjT,GAAK,IAAK,IAAIqB,KAAKrB,EAAO+I,OAAOpG,UAAUqiB,eAAe/U,KAAKjQ,EAAGqB,KAAI4R,EAAE5R,GAAKrB,EAAEqB,KACzFywG,EAAc7+F,EAAGjT,IAE5B,OAAO,SAAUiT,EAAGjT,GAChB,GAAiB,oBAANA,GAA0B,OAANA,EAC3B,MAAM,IAAI6jB,UAAU,uBAAyB6G,OAAO1qB,GAAK,iCAE7D,SAASiyG,IAAO5xG,KAAKwL,YAAcoH,EADnC6+F,EAAc7+F,EAAGjT,GAEjBiT,EAAEtQ,UAAkB,OAAN3C,EAAa+I,OAAOojC,OAAOnsC,IAAMiyG,EAAGtvG,UAAY3C,EAAE2C,UAAW,IAAIsvG,IAZ3C,GA6H5C,EArG+B,SAAUG,GAMrC,SAASyN,EAAUC,EAAsBC,GACrC,IAAIjmF,EAAQs4E,EAAOniG,KAAK5P,MAKxB,SAAU0mG,GACN,OAAO+Y,EAAqBv7G,MAAM,KAAMwiG,MAM5C,SAAUA,GACN,OAAmDA,EAAQ,GAAI9lD,aAC7D5gD,KAkBN,OAhBAy5B,EAAMkmF,uBAAyBlmF,EAAMmmF,iBAAiBpwG,KAAKiqB,GAK3DA,EAAMomF,oBAAsBH,EAK5BjmF,EAAMqmF,cAAgB,EAKtBrmF,EAAMsmF,kBAAoB,GACnBtmF,EA4DX,OAlGA,EAAU+lF,EAAWzN,GA4CrByN,EAAUl9G,UAAUo8G,QAAU,SAAUhY,GACpC,IAAIsZ,EAAQjO,EAAOzvG,UAAUo8G,QAAQ9uG,KAAK5P,KAAM0mG,GAC5CsZ,GACWtZ,EAAQ,GACd4V,iBAAiB,WAAkBt8G,KAAK2/G,wBAEjD,OAAOK,GAKXR,EAAUl9G,UAAU29G,gBAAkB,WAClC,OAAOjgH,KAAK8/G,eAMhBN,EAAUl9G,UAAUs9G,iBAAmB,SAAUt+E,GAC7C,IAAI4+E,EAAmD5+E,EAAY,OAC/D+xE,EAAQ6M,EAAKrM,WACjB,GAAIR,IAAU8M,EAAA,UACV9M,IAAU8M,EAAA,SACV9M,IAAU8M,EAAA,QAAiB,CAC3BD,EAAKrC,oBAAoB,WAAkB79G,KAAK2/G,wBAChD,IAAIS,EAAUF,EAAKt/D,SACfw/D,KAAWpgH,KAAK+/G,2BACT//G,KAAK+/G,kBAAkBK,KAC5BpgH,KAAK8/G,eAEX9/G,KAAK6/G,wBAObL,EAAUl9G,UAAU+9G,cAAgB,SAAUC,EAAiBC,GAG3D,IAFA,IACWL,EAAME,EADbI,EAAW,EAERxgH,KAAK8/G,cAAgBQ,GACxBE,EAAWD,GACXvgH,KAAK4+G,WAAa,GAElBwB,GADAF,EAAmDlgH,KAAKu+G,UAAU,IACnD39D,SACPs/D,EAAKrM,aACCsM,EAAA,QAAoBC,KAAWpgH,KAAK+/G,oBAC9C//G,KAAK+/G,kBAAkBK,IAAW,IAChCpgH,KAAK8/G,gBACLU,EACFN,EAAKn9G,SAIVy8G,EAnGmB,CAoG5B,qDC5HE,GAAwC,WACxC,IAAI/N,EAAgB,SAAU7+F,EAAGjT,GAI7B,OAHA8xG,EAAgB/oG,OAAOipG,gBAClB,CAAE3pF,UAAW,cAAgB/gB,OAAS,SAAU2L,EAAGjT,GAAKiT,EAAEoV,UAAYroB,IACvE,SAAUiT,EAAGjT,GAAK,IAAK,IAAIqB,KAAKrB,EAAO+I,OAAOpG,UAAUqiB,eAAe/U,KAAKjQ,EAAGqB,KAAI4R,EAAE5R,GAAKrB,EAAEqB,KACzFywG,EAAc7+F,EAAGjT,IAE5B,OAAO,SAAUiT,EAAGjT,GAChB,GAAiB,oBAANA,GAA0B,OAANA,EAC3B,MAAM,IAAI6jB,UAAU,uBAAyB6G,OAAO1qB,GAAK,iCAE7D,SAASiyG,IAAO5xG,KAAKwL,YAAcoH,EADnC6+F,EAAc7+F,EAAGjT,GAEjBiT,EAAEtQ,UAAkB,OAAN3C,EAAa+I,OAAOojC,OAAOnsC,IAAMiyG,EAAGtvG,UAAY3C,EAAE2C,UAAW,IAAIsvG,IAZ3C,GA43C5C,OAruCkC,SAAUG,GAKxC,SAAS0O,EAAah6G,GAClB,IAAIgzB,EAAQs4E,EAAOniG,KAAK5P,OAASA,KAIjCy5B,EAAMghC,GAINhhC,EAAM44E,KAIN54E,EAAM6hC,GACN,IAAIolD,EAipCZ,SAA+Bj6G,GAI3B,IAAIk6G,EAAsB,UACUvzG,IAAhC3G,EAAQk6G,sBACRA,EAC2C,kBAAhCl6G,EAAQk6G,oBACT5H,SAAS6H,eAAen6G,EAAQk6G,qBAChCl6G,EAAQk6G,qBAKtB,IASItuB,EAUAwuB,EAWAC,EA9BA7sF,EAAS,GACT8sF,EAAat6G,EAAQu6G,QACoC,oBAA/Bv6G,EAAc,OAAW,UACtBA,EAAc,OACzC,IAAI,IAAW,CAAEu6G,OAAmCv6G,EAAc,SACxEwtB,EAAOgtF,GAA0BF,EACjC9sF,EAAOgtF,GAAsBx6G,EAAQ8c,OACrC0Q,EAAOgtF,GACHx6G,EAAQmxF,gBAAgBspB,EAAA,GAAOz6G,EAAQmxF,KAAO,IAAIspB,EAAA,QAE7B9zG,IAArB3G,EAAQ4rF,WACJprF,MAAMC,QAAQT,EAAQ4rF,UACtBA,EAAW,IAAI6f,EAAA,EAAWzrG,EAAQ4rF,SAASnvF,WAG3C,OAAiE,oBAAhCuD,EAAgB,SAAU,SAAkB,IAC7E4rF,EAAsC5rF,EAAgB,gBAIjC2G,IAAzB3G,EAAQo6G,eACJ55G,MAAMC,QAAQT,EAAQo6G,cACtBA,EAAe,IAAI3O,EAAA,EAAWzrG,EAAQo6G,aAAa39G,WAGnD,OACI,oBAD6BuD,EAAoB,aAAU,SAC/C,IAChBo6G,EAA0Cp6G,EAAoB,oBAI7C2G,IAArB3G,EAAQq6G,SACJ75G,MAAMC,QAAQT,EAAQq6G,UACtBA,EAAW,IAAI5O,EAAA,EAAWzrG,EAAQq6G,SAAS59G,WAG3C,OAAiE,oBAAhCuD,EAAgB,SAAU,SAAkB,IAC7Eq6G,EAAWr6G,EAAQq6G,UAIvBA,EAAW,IAAI5O,EAAA,EAEnB,MAAO,CACH7f,SAAUA,EACVwuB,aAAcA,EACdF,oBAAqBA,EACrBG,SAAUA,EACV7sF,OAAQA,GA/sCcktF,CAAsB16G,GAE5CgzB,EAAM2nF,yBAA2B3nF,EAAM4nF,mBAAmB7xG,KAAKiqB,GAK/DA,EAAM6nF,sBAC0Bl0G,IAA5B3G,EAAQ86G,gBAAgC96G,EAAQ86G,gBAAkB,GAKtE9nF,EAAM65E,iBACqBlmG,IAAvB3G,EAAQ2sG,WACF3sG,EAAQ2sG,WACR,KAKV35E,EAAM+nF,yBAKN/nF,EAAMgoF,mBAINhoF,EAAMioF,gBAA8C,WAChD1hH,KAAKyhH,wBAAqBr0G,EAC1BpN,KAAK2hH,aAAazrG,KAAK0rG,QACzBpyG,KAAKiqB,GAKPA,EAAMooF,6BAA8B,UAKpCpoF,EAAMqoF,6BAA8B,UAKpCroF,EAAMsoF,YAAc,EAKpBtoF,EAAMuoF,YAAc,KAMpBvoF,EAAMwoF,gBAAkB,KAKxBxoF,EAAMyoF,yBAA2B,KAKjCzoF,EAAM0oF,uBAAyB,KAK/B1oF,EAAM2oF,gCAAkC,KAKxC3oF,EAAM4oF,UAAYtJ,SAASC,cAAc,OACzCv/E,EAAM4oF,UAAUhJ,UACZ,eAAiB,iBAAkB9oF,OAAS,YAAc,IAC9DkJ,EAAM4oF,UAAUpJ,MAAMC,SAAW,WACjCz/E,EAAM4oF,UAAUpJ,MAAMqJ,SAAW,SACjC7oF,EAAM4oF,UAAUpJ,MAAME,MAAQ,OAC9B1/E,EAAM4oF,UAAUpJ,MAAMj3G,OAAS,OAK/By3B,EAAM8oF,kBAAoBxJ,SAASC,cAAc,OACjDv/E,EAAM8oF,kBAAkBtJ,MAAMC,SAAW,WACzCz/E,EAAM8oF,kBAAkBtJ,MAAMG,OAAS,IACvC3/E,EAAM8oF,kBAAkBtJ,MAAME,MAAQ,OACtC1/E,EAAM8oF,kBAAkBtJ,MAAMj3G,OAAS,OACvCy3B,EAAM8oF,kBAAkBtJ,MAAMuJ,cAAgB,OAC9C/oF,EAAM8oF,kBAAkBlJ,UAAY,sBACpC5/E,EAAM4oF,UAAUI,YAAYhpF,EAAM8oF,mBAKlC9oF,EAAMipF,2BAA6B3J,SAASC,cAAc,OAC1Dv/E,EAAMipF,2BAA2BzJ,MAAMC,SAAW,WAClDz/E,EAAMipF,2BAA2BzJ,MAAMG,OAAS,IAChD3/E,EAAMipF,2BAA2BzJ,MAAME,MAAQ,OAC/C1/E,EAAMipF,2BAA2BzJ,MAAMj3G,OAAS,OAChDy3B,EAAMipF,2BAA2BzJ,MAAMuJ,cAAgB,OACvD/oF,EAAMipF,2BAA2BrJ,UAAY,gCAC7C5/E,EAAM4oF,UAAUI,YAAYhpF,EAAMipF,4BAKlCjpF,EAAMkpF,wBAA0B,KAKhClpF,EAAMkiF,eAAiBl1G,EAAQ60G,cAK/B7hF,EAAMmpF,qBAAuBlC,EAAgBC,oBAK7ClnF,EAAMopF,gBAAkB,KAKxBppF,EAAM44D,SAAWquB,EAAgBruB,UAAY,IAAI6f,EAAA,EAKjDz4E,EAAMonF,aAAeH,EAAgBG,cAAgB,IAAI3O,EAAA,EAKzDz4E,EAAMqpF,UAAYpC,EAAgBI,SAMlCrnF,EAAMspF,gBAAkB,GAKxBtpF,EAAMupF,UAAY,KAKlBvpF,EAAMwpF,cAKNxpF,EAAMypF,qBAAuB,GAK7BzpF,EAAM0pF,WAAa,IAAI,EAAU1pF,EAAM2pF,gBAAgB5zG,KAAKiqB,GAAQA,EAAM4pF,kBAAkB7zG,KAAKiqB,IACjGA,EAAM6pF,kBAAkBrC,EAAwBxnF,EAAM8pF,0BACtD9pF,EAAM6pF,kBAAkBrC,EAAkBxnF,EAAM+pF,oBAChD/pF,EAAM6pF,kBAAkBrC,EAAkBxnF,EAAMgqF,oBAChDhqF,EAAM6pF,kBAAkBrC,EAAoBxnF,EAAMiqF,sBAGlDjqF,EAAMkqF,cAAcjD,EAAgBzsF,QACpC,IAAI/pB,EAAMuvB,EAuEV,OAtEIhzB,EAAQmxF,MAAUnxF,EAAQmxF,gBAAgBspB,EAAA,IAC1Cz6G,EAAQmxF,KAAKwd,MAAK,SAAUwO,GACxB15G,EAAI25G,QAAQ,IAAI3C,EAAA,GAAK0C,OAG7BnqF,EAAM44D,SAASiqB,iBAAiBwH,EAAA,MAIhC,SAAUxiF,GACNA,EAAMolE,QAAQqd,OAAO/jH,OACvBwP,KAAKiqB,IACPA,EAAM44D,SAASiqB,iBAAiBwH,EAAA,SAIhC,SAAUxiF,GACNA,EAAMolE,QAAQqd,OAAO,OACvBv0G,KAAKiqB,IACPA,EAAMonF,aAAavE,iBAAiBwH,EAAA,MAIpC,SAAUxiF,GACNA,EAAMolE,QAAQqd,OAAO/jH,OACvBwP,KAAKiqB,IACPA,EAAMonF,aAAavE,iBAAiBwH,EAAA,SAIpC,SAAUxiF,GACNA,EAAMolE,QAAQqd,OAAO,OACvBv0G,KAAKiqB,IACPA,EAAMqpF,UAAUxG,iBAAiBwH,EAAA,MAIjC,SAAUxiF,GACNthC,KAAKgkH,oBAC0C1iF,EAAa,UAC9D9xB,KAAKiqB,IACPA,EAAMqpF,UAAUxG,iBAAiBwH,EAAA,SAIjC,SAAUxiF,GACN,IACI16B,EADyD06B,EAAa,QACzDs+B,aACNxyD,IAAPxG,UACO5G,KAAK+iH,gBAAgBn8G,EAAG4Q,YAEnC8pB,EAAMolE,QAAQqd,OAAO,OACvBv0G,KAAKiqB,IACPA,EAAM44D,SAAS3mF,QAKf,SAAUu4G,GACNA,EAAQF,OAAO/jH,OACjBwP,KAAKiqB,IACPA,EAAMonF,aAAan1G,QAKnB,SAAUw4G,GACNA,EAAYH,OAAO/jH,OACrBwP,KAAKiqB,IACPA,EAAMqpF,UAAUp3G,QAAQ+tB,EAAMuqF,oBAAoBx0G,KAAKiqB,IAChDA,EAk5BX,OA7pCA,GAAUgnF,EAAc1O,GAiRxB0O,EAAan+G,UAAU6hH,eAAiB,WACpC,MAAM,IAAIn9G,MAAM,oDAOpBy5G,EAAan+G,UAAU8hH,WAAa,SAAUH,GAC1CjkH,KAAKqkH,cAAchiH,KAAK4hH,IAW5BxD,EAAan+G,UAAUgiH,eAAiB,SAAUJ,GAC9ClkH,KAAKukH,kBAAkBliH,KAAK6hH,IAShCzD,EAAan+G,UAAUkiH,SAAW,SAAU1N,GAC3B92G,KAAKykH,gBAAgBC,YAC3BriH,KAAKy0G,IAOhB2J,EAAan+G,UAAUqiH,WAAa,SAAUC,GAC1C5kH,KAAK6kH,cAAcxiH,KAAKuiH,IAO5BnE,EAAan+G,UAAU0hH,oBAAsB,SAAUY,GACnD,IAAIh+G,EAAKg+G,EAAQhlD,aACNxyD,IAAPxG,IACA5G,KAAK+iH,gBAAgBn8G,EAAG4Q,YAAcotG,GAE1CA,EAAQb,OAAO/jH,OAMnBygH,EAAan+G,UAAUw3G,gBAAkB,WACrC95G,KAAK8kH,UAAU,MACf/S,EAAOzvG,UAAUw3G,gBAAgBlqG,KAAK5P,OAoB1CygH,EAAan+G,UAAUyiH,sBAAwB,SAAU5M,EAAOtsG,EAAUumG,GACtE,GAAKpyG,KAAKgiH,YAAV,CAGA,IAAIztE,EAAav0C,KAAKglH,+BAA+B7M,GAEjD3B,OAA4CppG,KADhDglG,OAA8BhlG,IAAhBglG,EAA4BA,EAAc,IACzBoE,aAA6BpE,EAAYoE,aAAe,EACnFG,OAA0CvpG,IAA5BglG,EAAYuE,YAA4BvE,EAAYuE,YAAc,KAChFF,GAA4C,IAA7BrE,EAAYqE,aAC/B,OAAOz2G,KAAKgjH,UAAUzM,2BAA2BhiE,EAAYv0C,KAAKgiH,YAAaxL,EAAcC,EAAc5qG,EAAU,KAAM8qG,EAAa,QAU5I8J,EAAan+G,UAAU2iH,mBAAqB,SAAU9M,EAAO/F,GACzD,IAAI1qG,EAAW,GAIf,OAHA1H,KAAK+kH,sBAAsB5M,GAAO,SAAU7xG,GACxCoB,EAASrF,KAAKiE,KACf8rG,GACI1qG,GAuBX+4G,EAAan+G,UAAU41G,oBAAsB,SAAUC,EAAOtsG,EAAUumG,GACpE,GAAKpyG,KAAKgiH,YAAV,CAGA,IAAIv7G,EAAU2rG,GAAe,GACzBoE,OAAwCppG,IAAzB3G,EAAQ+vG,aAA6B/vG,EAAQ+vG,aAAe,EAC3EG,EAAclwG,EAAQkwG,aAAe,KACzC,OAAO32G,KAAKgjH,UAAU9K,oBAAoBC,EAAOn4G,KAAKgiH,YAAaxL,EAAc3qG,EAAU8qG,KAU/F8J,EAAan+G,UAAU4iH,kBAAoB,SAAU/M,EAAO/F,GACxD,IAAKpyG,KAAKgiH,YACN,OAAO,EAEX,IAAIztE,EAAav0C,KAAKglH,+BAA+B7M,GAEjDxB,OAA0CvpG,KAD9CglG,OAA8BhlG,IAAhBglG,EAA4BA,EAAc,IAC1BuE,YAA4BvE,EAAYuE,YAAc,KAChFH,OAA4CppG,IAA7BglG,EAAYoE,aAA6BpE,EAAYoE,aAAe,EACnFC,GAA4C,IAA7BrE,EAAYqE,aAC/B,OAAOz2G,KAAKgjH,UAAU5K,uBAAuB7jE,EAAYv0C,KAAKgiH,YAAaxL,EAAcC,EAAcE,EAAa,OAQxH8J,EAAan+G,UAAU6iH,mBAAqB,SAAU7jF,GAClD,OAAOthC,KAAKk7G,uBAAuBl7G,KAAKi7G,cAAc35E,KAO1Dm/E,EAAan+G,UAAU8iH,2BAA6B,SAAU9jF,GAC1D,OAAOthC,KAAKglH,+BAA+BhlH,KAAKi7G,cAAc35E,KAQlEm/E,EAAan+G,UAAU24G,cAAgB,SAAU35E,GAC7C,IAAI+jF,EAAmBrlH,KAAKqiH,UAAUiD,wBAClCC,EAEJ,mBAAoBjkF,EACY,EAAQkkF,eAAe,GACvB,EAChC,MAAO,CACHD,EAAc5H,QAAU0H,EAAiBlnH,KACzConH,EAAc3H,QAAUyH,EAAiBt0G,MAYjD0vG,EAAan+G,UAAUmjH,UAAY,WAC/B,OAAoDzlH,KAAK4nB,IAAIq5F,IASjER,EAAan+G,UAAUojH,iBAAmB,WACtC,IAAIniG,EAASvjB,KAAKylH,YAClB,YAAer4G,IAAXmW,EACyB,kBAAXA,EACRw1F,SAAS6H,eAAer9F,GACxBA,EAGC,MAUfk9F,EAAan+G,UAAU44G,uBAAyB,SAAU/C,GACtD,OAAO,SAAiBn4G,KAAKglH,+BAA+B7M,GAAQn4G,KAAK2lH,UAAUC,kBAQvFnF,EAAan+G,UAAU0iH,+BAAiC,SAAU7M,GAC9D,IAAIrC,EAAa91G,KAAKgiH,YACtB,OAAKlM,GAIM,QAAeA,EAAWM,2BAA4B+B,EAAMj1G,SAH5D,MAYfu9G,EAAan+G,UAAU+hH,YAAc,WACjC,OAAOrkH,KAAKqyF,UAQhBouB,EAAan+G,UAAUuiH,YAAc,WACjC,OAAO7kH,KAAK8iH,WAUhBrC,EAAan+G,UAAUujH,eAAiB,SAAUj/G,GAC9C,IAAIg+G,EAAU5kH,KAAK+iH,gBAAgBn8G,EAAG4Q,YACtC,YAAmBpK,IAAZw3G,EAAwBA,EAAU,MAU7CnE,EAAan+G,UAAUiiH,gBAAkB,WACrC,OAAOvkH,KAAK6gH,cAQhBJ,EAAan+G,UAAUmiH,cAAgB,WACnC,OAAkCzkH,KAAK4nB,IAAIq5F,IAO/CR,EAAan+G,UAAUwjH,UAAY,SAAU9E,GACzC,IAAI+E,EAAQ/lH,KAAKykH,gBACjB,GAAIzD,aAAkB9O,EAAA,EAClB6T,EAAMD,UAAU9E,OADpB,CAIA,IAAIgF,EAAaD,EAAMrB,YACvBsB,EAAW3lH,QACX2lH,EAAWxkH,OAAOw/G,KAOtBP,EAAan+G,UAAUoiH,UAAY,WAE/B,OADa1kH,KAAKykH,gBAAgBC,aAMtCjE,EAAan+G,UAAU2jH,WAAa,WAEhC,IADA,IAAI5O,EAAmBr3G,KAAKykH,gBAAgByB,sBACnC5mH,EAAI,EAAGiS,EAAK8lG,EAAiB94G,OAAQe,EAAIiS,IAAMjS,EAAG,CACvD,IACIsX,EADQygG,EAAiB/3G,GAAGw3G,MACuCe,YACvE,GAAIjhG,GAAUA,EAAOuvG,QACjB,OAAO,EAGf,OAAO,GASX1F,EAAan+G,UAAU8jH,uBAAyB,SAAU7xE,GACtD,IAAI8xE,GAAiB,SAAmB9xE,EAAYv0C,KAAK2lH,UAAUC,iBACnE,OAAO5lH,KAAKsmH,+BAA+BD,IAQ/C5F,EAAan+G,UAAUgkH,+BAAiC,SAAU/xE,GAC9D,IAAIuhE,EAAa91G,KAAKgiH,YACtB,OAAKlM,GAIM,QAAeA,EAAWK,2BAA4B5hE,EAAWrxC,MAAM,EAAG,IAH1E,MAUfu9G,EAAan+G,UAAUs1G,YAAc,WACjC,OAAO53G,KAAKgjH,WAQhBvC,EAAan+G,UAAUikH,QAAU,WAC7B,OAA0DvmH,KAAK4nB,IAAIq5F,IASvER,EAAan+G,UAAUqjH,QAAU,WAC7B,OAA4B3lH,KAAK4nB,IAAIq5F,IAOzCR,EAAan+G,UAAUi3G,YAAc,WACjC,OAAOv5G,KAAKqiH,WAShB5B,EAAan+G,UAAUkkH,oBAAsB,WACzC,OAAOxmH,KAAKuiH,mBAShB9B,EAAan+G,UAAUmkH,6BAA+B,WAClD,OAAOzmH,KAAK0iH,4BAKhBjC,EAAan+G,UAAUg7G,iBAAmB,WACtC,IAAIoJ,EAAgB1mH,KAAK0lH,mBACzB,OAAOgB,EAAgBA,EAAcC,cAAgB5N,UASzD0H,EAAan+G,UAAU8gH,gBAAkB,SAAUlD,EAAM0G,EAAeC,EAAYC,GAChF,OD/sBD,SAAyBhR,EAAYoK,EAAM0G,EAAeC,EAAYC,GAGzE,IAAKhR,KAAgB8Q,KAAiB9Q,EAAWiR,aAC7C,OAAOhJ,EAEX,IAAKjI,EAAWiR,YAAYH,GAAe1G,EAAKt/D,UAC5C,OAAOm9D,EAQX,IAAIzH,EAASR,EAAWI,UAAUI,OAC9B0Q,EAASH,EAAW,GAAKvQ,EAAO,GAChC2Q,EAASJ,EAAW,GAAKvQ,EAAO,GACpC,OAAQ,MAAQ13G,KAAKC,IAAIioH,GACrBloH,KAAKK,KAAK+nH,EAASA,EAASC,EAASA,GAAUH,EC4rBxC1D,CAAgBpjH,KAAKgiH,YAAa9B,EAAM0G,EAAeC,EAAYC,IAM9ErG,EAAan+G,UAAU++G,mBAAqB,SAAU6F,EAAcC,GAChE,IAAIxgH,EAAOwgH,GAAYD,EAAavgH,KAChCygH,EAAkB,IAAI,EAAgBzgH,EAAM3G,KAAMknH,GACtDlnH,KAAKqnH,sBAAsBD,IAK/B3G,EAAan+G,UAAU+kH,sBAAwB,SAAUD,GACrD,GAAKpnH,KAAKgiH,YAAV,CAKA,IAAIpH,EAA6CwM,EAA6B,cAC1EE,EAAY1M,EAAcj0G,KAC9B,GAAI2gH,IAAc,iBACdA,IAAc,WACdA,IAAc,YAAmB,CACjC,IAAIjK,EAAMr9G,KAAKs9G,mBACXiK,EAAWvnH,KAAKqiH,UAAU7E,YACxBx9G,KAAKqiH,UAAU7E,cACfH,EACF95F,EAA8Bq3F,EAAoB,OACtD,GAGA56G,KAAK0iH,2BAA2B5gH,SAASyhB,MAKnCgkG,IAAalK,EAAMA,EAAImK,gBAAkBD,GAAUzlH,SAASyhB,GAC9D,OAIR,GADA6jG,EAAgBtR,WAAa91G,KAAKgiH,aACU,IAAxChiH,KAAK4yG,cAAcwU,GAEnB,IADA,IAAIK,EAAoBznH,KAAKukH,kBAAkB9R,WAAWvvG,QACjD5D,EAAImoH,EAAkBlpH,OAAS,EAAGe,GAAK,EAAGA,IAAK,CACpD,IAAI4kH,EAAcuD,EAAkBnoH,GACpC,GAAI4kH,EAAY7L,WAAar4G,MACxBkkH,EAAYwD,aACZ1nH,KAAK0lH,mBAIV,IADWxB,EAAYyD,YAAYP,IACtBA,EAAgBQ,mBACzB,SAQhBnH,EAAan+G,UAAUulH,iBAAmB,WACtC,IAAI/R,EAAa91G,KAAKgiH,YAUlB8F,EAAY9nH,KAAKmjH,WACrB,IAAK2E,EAAU9yF,UAAW,CACtB,IAAIsrF,EAAkBtgH,KAAKshH,iBACvBf,EAAcD,EAClB,GAAIxK,EAAY,CACZ,IAAIiS,EAAQjS,EAAWkS,UACvB,GAAID,EAAME,GAAA,cAAuBF,EAAME,GAAA,eAAuB,CAC1D,IAAIC,EAAmBhyG,KAAK0rG,MAAQ9L,EAAWhjB,KAAO,EACtDwtB,EAAkB4H,EAAmB,EAAI,EACzC3H,EAAc2H,EAAmB,EAAI,GAGzCJ,EAAU7H,kBAAoBK,IAC9BwH,EAAUvI,eACVuI,EAAUzH,cAAcC,EAAiBC,KAG7CzK,IACA91G,KAAK45G,YAAY,qBAChB9D,EAAWqS,SACXnoH,KAAKmjH,WAAWlD,mBAChBjgH,KAAKimH,cACNjmH,KAAKgjH,UAAUhN,oBAAoB,mBAAgCF,GAGvE,IADA,IAAI0C,EAAsBx4G,KAAKkjH,qBACtB5jH,EAAI,EAAGiS,EAAKinG,EAAoBj6G,OAAQe,EAAIiS,IAAMjS,EACvDk5G,EAAoBl5G,GAAGU,KAAM81G,GAEjC0C,EAAoBj6G,OAAS,GAKjCkiH,EAAan+G,UAAUmhH,mBAAqB,WACpCzjH,KAAK2lH,YAAc3lH,KAAK2lH,UAAUyC,gBAClCpoH,KAAK2lH,UAAU0C,mBAAmB,GAEtCroH,KAAKq6G,UAKToG,EAAan+G,UAAUohH,qBAAuB,WAK1C,IAAIgD,EAIJ,GAHI1mH,KAAKylH,cACLiB,EAAgB1mH,KAAK0lH,oBAErB1lH,KAAK2iH,wBAAyB,CAC9B,IAAK,IAAIrjH,EAAI,EAAGiS,EAAKvR,KAAK6iH,gBAAgBtkH,OAAQe,EAAIiS,IAAMjS,GACxD,QAAcU,KAAK6iH,gBAAgBvjH,IAEvCU,KAAK6iH,gBAAkB,KACvB7iH,KAAKqiH,UAAUxE,oBAAoB,gBAAuB79G,KAAKohH,0BAC/DphH,KAAKqiH,UAAUxE,oBAAoB,UAAiB79G,KAAKohH,+BAC9Bh0G,IAAvBpN,KAAKijH,gBACLpF,oBAAoB,WAAkB79G,KAAKijH,eAAe,GAC1DjjH,KAAKijH,mBAAgB71G,GAEzBpN,KAAK2iH,wBAAwB2F,UAC7BtoH,KAAK2iH,wBAA0B,MAC/B,QAAW3iH,KAAKqiH,WAEpB,GAAKqE,EAaA,CAMD,IAAK,IAAIlwG,KALTkwG,EAAcjE,YAAYziH,KAAKqiH,WAC1BriH,KAAKgjH,YACNhjH,KAAKgjH,UAAYhjH,KAAKmkH,kBAE1BnkH,KAAK2iH,wBAA0B,IAAI,EAAuB3iH,KAAMA,KAAK27G,gBACrDgB,EAAA,EACZ38G,KAAK2iH,wBAAwBrG,iBAAiBK,EAAA,EAAoBnmG,GAAMxW,KAAKqnH,sBAAsB73G,KAAKxP,OAE5GA,KAAKqiH,UAAU/F,iBAAiB,gBAAuBt8G,KAAKohH,0BAA0B,GACtFphH,KAAKqiH,UAAU/F,iBAAiB,UAAiBt8G,KAAKohH,2BAA0B,MAA0B,CAAE7E,SAAS,IACrH,IAAIoE,EAAuB3gH,KAAK4iH,qBAE1B5iH,KAAK4iH,qBADL8D,EAEN1mH,KAAK6iH,gBAAkB,EACnB,QAAOlC,EAAqB,YAAmB3gH,KAAKqhH,mBAAoBrhH,OACxE,QAAO2gH,EAAqB,aAAoB3gH,KAAKqhH,mBAAoBrhH,OAExEA,KAAKijH,gBACNjjH,KAAKijH,cAAgBjjH,KAAKuoH,WAAW/4G,KAAKxP,MAC1CuwB,OAAO+rF,iBAAiB,WAAkBt8G,KAAKijH,eAAe,SAhC9DjjH,KAAKgjH,YACLpG,aAAa58G,KAAKwhH,0BAClBxhH,KAAKwhH,8BAA2Bp0G,EAChCpN,KAAKkjH,qBAAqB3kH,OAAS,EACnCyB,KAAKgjH,UAAUsF,UACftoH,KAAKgjH,UAAY,MAEjBhjH,KAAKyhH,qBACL+G,qBAAqBxoH,KAAKyhH,oBAC1BzhH,KAAKyhH,wBAAqBr0G,GA0BlCpN,KAAKuoH,cAOT9H,EAAan+G,UAAU+gH,kBAAoB,WACvCrjH,KAAKq6G,UAKToG,EAAan+G,UAAUmmH,2BAA6B,WAChDzoH,KAAKq6G,UAKToG,EAAan+G,UAAUkhH,mBAAqB,WACpCxjH,KAAKkiH,4BACL,QAAcliH,KAAKkiH,0BACnBliH,KAAKkiH,yBAA2B,MAEhCliH,KAAKmiH,0BACL,QAAcniH,KAAKmiH,wBACnBniH,KAAKmiH,uBAAyB,MAElC,IAAIvqB,EAAO53F,KAAK2lH,UACZ/tB,IACA53F,KAAK0oH,sBACL1oH,KAAKkiH,0BAA2B,QAAOtqB,EAAMghB,EAAA,iBAAgC54G,KAAKyoH,2BAA4BzoH,MAC9GA,KAAKmiH,wBAAyB,QAAOvqB,EAAM,WAAkB53F,KAAKyoH,2BAA4BzoH,MAC9F43F,EAAKywB,mBAAmB,IAE5BroH,KAAKq6G,UAKToG,EAAan+G,UAAUihH,yBAA2B,WAC1CvjH,KAAKoiH,kCACLpiH,KAAKoiH,gCAAgC12G,QAAQ,MAC7C1L,KAAKoiH,gCAAkC,MAE3C,IAAIrB,EAAa/gH,KAAKykH,gBAClB1D,IACA/gH,KAAKoiH,gCAAkC,EACnC,QAAOrB,EAAYnI,EAAA,iBAAgC54G,KAAKq6G,OAAQr6G,OAChE,QAAO+gH,EAAY,WAAkB/gH,KAAKq6G,OAAQr6G,QAG1DA,KAAKq6G,UAKToG,EAAan+G,UAAUqmH,WAAa,WAChC,QAAS3oH,KAAKgiH,aAMlBvB,EAAan+G,UAAUsmH,WAAa,WAC5B5oH,KAAKyhH,oBACL+G,qBAAqBxoH,KAAKyhH,oBAE9BzhH,KAAK0hH,mBAKTjB,EAAan+G,UAAUu2G,WAAa,WAEhC,IADA,IAAIzB,EAAcp3G,KAAKykH,gBAAgByB,sBAC9B5mH,EAAI,EAAGiS,EAAK6lG,EAAY74G,OAAQe,EAAIiS,IAAMjS,EAAG,CAClD,IAAIw3G,EAAQM,EAAY93G,GAAGw3G,MACvBA,EAAMY,eACNZ,EAAMc,cAAciR,uBAQhCpI,EAAan+G,UAAU+3G,OAAS,WACxBr6G,KAAKgjH,gBAAyC51G,IAA5BpN,KAAKyhH,qBACvBzhH,KAAKyhH,mBAAqBqH,sBAAsB9oH,KAAK0hH,mBAU7DjB,EAAan+G,UAAUymH,cAAgB,SAAU9E,GAC7C,OAAOjkH,KAAKqkH,cAAc/gH,OAAO2gH,IASrCxD,EAAan+G,UAAU0mH,kBAAoB,SAAU9E,GACjD,OAAOlkH,KAAKukH,kBAAkBjhH,OAAO4gH,IASzCzD,EAAan+G,UAAU2mH,YAAc,SAAUnS,GAE3C,OADa92G,KAAKykH,gBAAgBC,YACpBphH,OAAOwzG,IASzB2J,EAAan+G,UAAU4mH,cAAgB,SAAUtE,GAC7C,OAAO5kH,KAAK6kH,cAAcvhH,OAAOshH,IAMrCnE,EAAan+G,UAAUq/G,aAAe,SAAU7uB,GAC5C,IAAIr5D,EAAQz5B,KACRy0B,EAAOz0B,KAAKumH,UACZ3uB,EAAO53F,KAAK2lH,UACZwD,EAAqBnpH,KAAKgiH,YAE1BlM,EAAa,KACjB,QAAa1oG,IAATqnB,IAAsB,SAAQA,IAASmjE,GAAQA,EAAKwxB,QAAS,CAC7D,IAAIpB,EAAYpwB,EAAKyxB,SAASrpH,KAAKgiH,YAAchiH,KAAKgiH,YAAYgG,eAAY56G,GAC1E8oG,EAAYte,EAAKic,WAoBrB,GAnBAiC,EAAa,CACTqS,SAAS,EACThS,2BAA4Bn2G,KAAK6hH,4BACjCyH,cAAe,KACfnd,QAAQ,QAAkB+J,EAAUI,OAAQJ,EAAU/C,WAAY+C,EAAUG,SAAU5hF,GACtFjxB,MAAOxD,KAAK+hH,cACZ5H,WAAY,EACZ9C,iBAAkBr3G,KAAKykH,gBAAgByB,sBACvC9S,WAAYpzG,KAAKszG,YACjB8C,2BAA4Bp2G,KAAK8hH,4BACjCtJ,oBAAqB,GACrB/jF,KAAMA,EACNqzF,UAAW9nH,KAAKmjH,WAChBrwB,KAAMA,EACNy2B,UAAW,GACXrT,UAAWA,EACX8R,UAAWA,EACXjB,YAAa,IAEb7Q,EAAUsT,YAActT,EAAUuT,eAAgB,CAClD,IAAIpT,EAAW5tG,MAAMytG,EAAUwT,cACzBxT,EAAUG,SACVH,EAAUwT,aAChB5T,EAAW6T,YAAa,QAAkBzT,EAAUsT,WAAYtT,EAAUuT,eAAgBpT,EAAU5hF,IAK5G,GAFAz0B,KAAKgiH,YAAclM,EACnB91G,KAAKgjH,UAAU1K,YAAYxC,GACvBA,EAAY,CAKZ,GAJIA,EAAWqS,SACXnoH,KAAKq6G,SAETpzG,MAAM3E,UAAUD,KAAK6B,MAAMlE,KAAKkjH,qBAAsBpN,EAAW0C,qBAC7D2Q,IACiBnpH,KAAKiiH,mBAChB,QAAQjiH,KAAKiiH,oBACV,QAAOnM,EAAW3J,OAAQnsG,KAAKiiH,oBAEpCjiH,KAAK4yG,cAAc,IAAI,EAASgX,EAAA,YAAwB5pH,KAAMmpH,IAC9DnpH,KAAKiiH,iBAAkB,QAAoBjiH,KAAKiiH,kBAG7CjiH,KAAKiiH,kBACXnM,EAAWkS,UAAUC,GAAA,eACrBnS,EAAWkS,UAAUC,GAAA,kBACrB,QAAOnS,EAAW3J,OAAQnsG,KAAKiiH,mBAEhCjiH,KAAK4yG,cAAc,IAAI,EAASgX,EAAA,UAAsB5pH,KAAM81G,KAC5D,QAAMA,EAAW3J,OAAQnsG,KAAKiiH,kBAGtCjiH,KAAK4yG,cAAc,IAAI,EAASgX,EAAA,aAAyB5pH,KAAM81G,IAC1D91G,KAAKwhH,2BACNxhH,KAAKwhH,yBAA2B3E,YAAW,WACvCpjF,EAAM+nF,8BAA2Bp0G,EACjCqsB,EAAMouF,qBACP,KASXpH,EAAan+G,UAAUunH,cAAgB,SAAU9I,GAC7C/gH,KAAKkb,IAAI+lG,EAAwBF,IAQrCN,EAAan+G,UAAUwnH,QAAU,SAAUr1F,GACvCz0B,KAAKkb,IAAI+lG,EAAkBxsF,IAS/BgsF,EAAan+G,UAAUwiH,UAAY,SAAUvhG,GACzCvjB,KAAKkb,IAAI+lG,EAAoB19F,IAWjCk9F,EAAan+G,UAAUuhH,QAAU,SAAUjsB,GACvC,IAAKA,GAAQA,aAAgBspB,EAAA,GACzBlhH,KAAKkb,IAAI+lG,EAAkBrpB,OAD/B,CAIA53F,KAAKkb,IAAI+lG,EAAkB,IAAIC,EAAA,IAC/B,IAAIh3G,EAAMlK,KACV43F,EAAKwd,MAAK,SAAUwO,GAChB15G,EAAI25G,QAAQ,IAAI3C,EAAA,GAAK0C,SAQ7BnD,EAAan+G,UAAUimH,WAAa,WAChC,IAAI7B,EAAgB1mH,KAAK0lH,mBACrBjxF,OAAOrnB,EACX,GAAIs5G,EAAe,CACf,IAAIqD,EAAgBC,iBAAiBtD,GACjCvN,EAAQuN,EAAcuD,YACtBtgG,WAAWogG,EAA+B,iBAC1CpgG,WAAWogG,EAA2B,aACtCpgG,WAAWogG,EAA4B,cACvCpgG,WAAWogG,EAAgC,kBAC3C/nH,EAAS0kH,EAAcwD,aACvBvgG,WAAWogG,EAA8B,gBACzCpgG,WAAWogG,EAA0B,YACrCpgG,WAAWogG,EAA6B,eACxCpgG,WAAWogG,EAAiC,mBAC3CthH,MAAM0wG,IAAW1wG,MAAMzG,KACxByyB,EAAO,CAAC0kF,EAAOn3G,KACV,SAAQyyB,KACNiyF,EAAcuD,aACbvD,EAAcwD,cACdxD,EAAcyD,iBAAiB5rH,SAEnC6rH,QAAQC,KAAK,sEAIzBrqH,KAAK8pH,QAAQr1F,GACbz0B,KAAK0oH,uBAMTjI,EAAan+G,UAAUomH,oBAAsB,WACzC,IAAI9wB,EAAO53F,KAAK2lH,UAChB,GAAI/tB,EAAM,CACN,IAAInjE,OAAOrnB,EACP28G,EAAgBC,iBAAiBhqH,KAAKqiH,WACtC0H,EAAc5Q,OAAS4Q,EAAc/nH,SACrCyyB,EAAO,CACH7K,SAASmgG,EAAc5Q,MAAO,IAC9BvvF,SAASmgG,EAAc/nH,OAAQ,MAGvC41F,EAAK0yB,gBAAgB71F,KAGtBgsF,EA9pCsB,CA+pC/B,6BCtzCE,GAAwC,WACxC,IAAIhP,EAAgB,SAAU7+F,EAAGjT,GAI7B,OAHA8xG,EAAgB/oG,OAAOipG,gBAClB,CAAE3pF,UAAW,cAAgB/gB,OAAS,SAAU2L,EAAGjT,GAAKiT,EAAEoV,UAAYroB,IACvE,SAAUiT,EAAGjT,GAAK,IAAK,IAAIqB,KAAKrB,EAAO+I,OAAOpG,UAAUqiB,eAAe/U,KAAKjQ,EAAGqB,KAAI4R,EAAE5R,GAAKrB,EAAEqB,KACzFywG,EAAc7+F,EAAGjT,IAE5B,OAAO,SAAUiT,EAAGjT,GAChB,GAAiB,oBAANA,GAA0B,OAANA,EAC3B,MAAM,IAAI6jB,UAAU,uBAAyB6G,OAAO1qB,GAAK,iCAE7D,SAASiyG,IAAO5xG,KAAKwL,YAAcoH,EADnC6+F,EAAc7+F,EAAGjT,GAEjBiT,EAAEtQ,UAAkB,OAAN3C,EAAa+I,OAAOojC,OAAOnsC,IAAMiyG,EAAGtvG,UAAY3C,EAAE2C,UAAW,IAAIsvG,IAZ3C,GAkV5C,GAvRiC,SAAUG,GAKvC,SAASwY,EAAYnY,GACjB,IAAI34E,EAAQz5B,KACRyG,EAAU2rG,GAA4B,IAC1C34E,EAAQs4E,EAAOniG,KAAK5P,KAAM,CACtB0mG,QAASqS,SAASC,cAAc,OAChCqB,OAAQ5zG,EAAQ4zG,OAChB92F,OAAQ9c,EAAQ8c,UACdvjB,MAKAwqH,WAAazR,SAASC,cAAc,MAK1Cv/E,EAAMgxF,gBACoBr9G,IAAtB3G,EAAQikH,WAA0BjkH,EAAQikH,UAK9CjxF,EAAMkxF,eAAiBlxF,EAAMgxF,WAK7BhxF,EAAMmxF,0BAA+Cx9G,IAAxB3G,EAAQokH,YAKrCpxF,EAAMqxF,kBACsB19G,IAAxB3G,EAAQokH,aAA4BpkH,EAAQokH,YAC3CpxF,EAAMqxF,eACPrxF,EAAMgxF,YAAa,GAEvB,IAAIpR,OAAkCjsG,IAAtB3G,EAAQ4yG,UAA0B5yG,EAAQ4yG,UAAY,iBAClE0R,OAAgC39G,IAArB3G,EAAQskH,SAAyBtkH,EAAQskH,SAAW,eAC/DC,OAA8C59G,IAA5B3G,EAAQukH,gBACxBvkH,EAAQukH,gBACR3R,EAAY,UACd4R,OAA0C79G,IAA1B3G,EAAQwkH,cAA8BxkH,EAAQwkH,cAAgB,SAC9EC,OAAkD99G,IAA9B3G,EAAQykH,kBAC1BzkH,EAAQykH,kBACR7R,EAAY,YACW,kBAAlB4R,GAKPxxF,EAAM0xF,eAAiBpS,SAASC,cAAc,QAC9Cv/E,EAAM0xF,eAAeC,YAAcH,EACnCxxF,EAAM0xF,eAAe9R,UAAY6R,GAGjCzxF,EAAM0xF,eAAiBF,EAE3B,IAAItsB,OAA0BvxF,IAAlB3G,EAAQk4F,MAAsBl4F,EAAQk4F,MAAQ,IACrC,kBAAVA,GAKPllE,EAAM4xF,OAAStS,SAASC,cAAc,QACtCv/E,EAAM4xF,OAAOD,YAAczsB,EAC3BllE,EAAM4xF,OAAOhS,UAAY2R,GAGzBvxF,EAAM4xF,OAAS1sB,EAEnB,IAAI2sB,EAAc7xF,EAAMqxF,eAAiBrxF,EAAMgxF,WAAahxF,EAAM0xF,eAAiB1xF,EAAM4xF,OAKzF5xF,EAAM8xF,cAAgBxS,SAASC,cAAc,UAC7Cv/E,EAAM8xF,cAAcC,aAAa,OAAQ,UACzC/xF,EAAM8xF,cAAcC,aAAa,gBAAiBnhG,QAAQoP,EAAMgxF,aAChEhxF,EAAM8xF,cAAcE,MAAQV,EAC5BtxF,EAAM8xF,cAAc9I,YAAY6I,GAChC7xF,EAAM8xF,cAAcjP,iBAAiB,UAAiB7iF,EAAMiyF,aAAal8G,KAAKiqB,IAAQ,GACtF,IAAIkyF,EAAatS,EACb,IACA,KACA,IACA,MACC5/E,EAAMgxF,YAAchxF,EAAMqxF,aAAe,IAAM,KAAkB,KACjErxF,EAAMqxF,aAAe,GAAK,qBAC3BpkB,EAAUjtE,EAAMitE,QAepB,OAdAA,EAAQ2S,UAAYsS,EACpBjlB,EAAQ+b,YAAYhpF,EAAM8xF,eAC1B7kB,EAAQ+b,YAAYhpF,EAAM+wF,YAM1B/wF,EAAMmyF,sBAAwB,GAK9BnyF,EAAMkgF,kBAAmB,EAClBlgF,EAuKX,OApRA,GAAU8wF,EAAaxY,GAqHvBwY,EAAYjoH,UAAUupH,2BAA6B,SAAU/V,GAazD,IARA,IAAIgW,EAAS,GAKTC,EAAsB,GACtBlB,GAAc,EACdxT,EAAmBvB,EAAWuB,iBACzB/3G,EAAI,EAAGiS,EAAK8lG,EAAiB94G,OAAQe,EAAIiS,IAAMjS,EAAG,CACvD,IAAIm4G,EAAaJ,EAAiB/3G,GAClC,IAAK,OAAOm4G,EAAY3B,EAAWI,WAAnC,CAGA,IAAIt/F,EAA6D6gG,EAAgB,MAAEI,YACnF,GAAKjhG,EAAL,CAGA,IAAIo1G,EAAoBp1G,EAAOq1G,kBAC/B,GAAKD,EAAL,CAGA,IAAIE,EAAeF,EAAkBlW,GACrC,GAAKoW,EAKL,GAFArB,EACIA,IAAuD,IAAxCj0G,EAAOu1G,6BACtBllH,MAAMC,QAAQglH,GACd,IAAK,IAAI3sH,EAAI,EAAG6sH,EAAKF,EAAa3tH,OAAQgB,EAAI6sH,IAAM7sH,EAC1C2sH,EAAa3sH,KAAMusH,IACrBC,EAAoB1pH,KAAK6pH,EAAa3sH,IACtCusH,EAAOI,EAAa3sH,KAAM,QAK5B2sH,KAAgBJ,IAClBC,EAAoB1pH,KAAK6pH,GACzBJ,EAAOI,IAAgB,MAOnC,OAHKlsH,KAAK4qH,sBACN5qH,KAAKqsH,eAAexB,GAEjBkB,GAMXxB,EAAYjoH,UAAUgqH,eAAiB,SAAUxW,GAC7C,GAAKA,EAAL,CAOA,IAAIoW,EAAelsH,KAAK6rH,2BAA2B/V,GAC/CyW,EAAUL,EAAa3tH,OAAS,EAKpC,GAJIyB,KAAK25G,kBAAoB4S,IACzBvsH,KAAK0mG,QAAQuS,MAAMsB,QAAUgS,EAAU,GAAK,OAC5CvsH,KAAK25G,iBAAmB4S,KAExB,SAAOL,EAAclsH,KAAK4rH,uBAA9B,EAGA,QAAe5rH,KAAKwqH,YAEpB,IAAK,IAAIlrH,EAAI,EAAGiS,EAAK26G,EAAa3tH,OAAQe,EAAIiS,IAAMjS,EAAG,CACnD,IAAIonG,EAAUqS,SAASC,cAAc,MACrCtS,EAAQ8lB,UAAYN,EAAa5sH,GACjCU,KAAKwqH,WAAW/H,YAAY/b,GAEhC1mG,KAAK4rH,sBAAwBM,QAtBrBlsH,KAAK25G,mBACL35G,KAAK0mG,QAAQuS,MAAMsB,QAAU,OAC7Bv6G,KAAK25G,kBAAmB,IA0BpC4Q,EAAYjoH,UAAUopH,aAAe,SAAUpqF,GAC3CA,EAAM65E,iBACNn7G,KAAKysH,gBACLzsH,KAAK2qH,eAAiB3qH,KAAKyqH,YAK/BF,EAAYjoH,UAAUmqH,cAAgB,WAClCzsH,KAAK0mG,QAAQgmB,UAAUC,OAAO,MAC1B3sH,KAAKyqH,YACL,QAAYzqH,KAAKmrH,eAAgBnrH,KAAKqrH,SAGtC,QAAYrrH,KAAKqrH,OAAQrrH,KAAKmrH,gBAElCnrH,KAAKyqH,YAAczqH,KAAKyqH,WACxBzqH,KAAKurH,cAAcC,aAAa,gBAAiBnhG,QAAQrqB,KAAKyqH,cAOlEF,EAAYjoH,UAAUsqH,eAAiB,WACnC,OAAO5sH,KAAK8qH,cAOhBP,EAAYjoH,UAAU+pH,eAAiB,SAAUxB,GACzC7qH,KAAK8qH,eAAiBD,IAG1B7qH,KAAK8qH,aAAeD,EACpB7qH,KAAK0mG,QAAQgmB,UAAUC,OAAO,oBAC1B3sH,KAAK2qH,gBACL3qH,KAAKysH,kBAUblC,EAAYjoH,UAAUuqH,aAAe,SAAUnC,GAC3C1qH,KAAK2qH,eAAiBD,EACjB1qH,KAAK8qH,cAAgB9qH,KAAKyqH,aAAeC,GAG9C1qH,KAAKysH,iBAQTlC,EAAYjoH,UAAUwqH,aAAe,WACjC,OAAO9sH,KAAKyqH,YAOhBF,EAAYjoH,UAAU+3G,OAAS,SAAU0S,GACrC/sH,KAAKssH,eAAeS,EAASjX,aAE1ByU,EArRqB,CAsR9ByC,GAAA,eCjVE,GAAwC,WACxC,IAAIvb,EAAgB,SAAU7+F,EAAGjT,GAI7B,OAHA8xG,EAAgB/oG,OAAOipG,gBAClB,CAAE3pF,UAAW,cAAgB/gB,OAAS,SAAU2L,EAAGjT,GAAKiT,EAAEoV,UAAYroB,IACvE,SAAUiT,EAAGjT,GAAK,IAAK,IAAIqB,KAAKrB,EAAO+I,OAAOpG,UAAUqiB,eAAe/U,KAAKjQ,EAAGqB,KAAI4R,EAAE5R,GAAKrB,EAAEqB,KACzFywG,EAAc7+F,EAAGjT,IAE5B,OAAO,SAAUiT,EAAGjT,GAChB,GAAiB,oBAANA,GAA0B,OAANA,EAC3B,MAAM,IAAI6jB,UAAU,uBAAyB6G,OAAO1qB,GAAK,iCAE7D,SAASiyG,IAAO5xG,KAAKwL,YAAcoH,EADnC6+F,EAAc7+F,EAAGjT,GAEjBiT,EAAEtQ,UAAkB,OAAN3C,EAAa+I,OAAOojC,OAAOnsC,IAAMiyG,EAAGtvG,UAAY3C,EAAE2C,UAAW,IAAIsvG,IAZ3C,GA8CxCqb,GAAwB,SAAUlb,GAKlC,SAASkb,EAAO7a,GACZ,IAAI34E,EAAQz5B,KACRyG,EAAU2rG,GAA4B,GAC1C34E,EAAQs4E,EAAOniG,KAAK5P,KAAM,CACtB0mG,QAASqS,SAASC,cAAc,OAChCqB,OAAQ5zG,EAAQ4zG,OAChB92F,OAAQ9c,EAAQ8c,UACdvjB,KACN,IAAIq5G,OAAkCjsG,IAAtB3G,EAAQ4yG,UAA0B5yG,EAAQ4yG,UAAY,YAClE1a,OAA0BvxF,IAAlB3G,EAAQk4F,MAAsBl4F,EAAQk4F,MAAQ,SACtDuuB,OAAgD9/G,IAA7B3G,EAAQymH,iBACzBzmH,EAAQymH,iBACR,aAKNzzF,EAAM4xF,OAAS,KACM,kBAAV1sB,GACPllE,EAAM4xF,OAAStS,SAASC,cAAc,QACtCv/E,EAAM4xF,OAAOhS,UAAY6T,EACzBzzF,EAAM4xF,OAAOD,YAAczsB,IAG3BllE,EAAM4xF,OAAS1sB,EACfllE,EAAM4xF,OAAOqB,UAAUt5F,IAAI85F,IAE/B,IAAInC,EAAWtkH,EAAQskH,SAAWtkH,EAAQskH,SAAW,iBACjD5N,EAASpE,SAASC,cAAc,UACpCmE,EAAO9D,UAAYA,EAAY,SAC/B8D,EAAOqO,aAAa,OAAQ,UAC5BrO,EAAOsO,MAAQV,EACf5N,EAAOsF,YAAYhpF,EAAM4xF,QACzBlO,EAAOb,iBAAiB,UAAiB7iF,EAAMiyF,aAAal8G,KAAKiqB,IAAQ,GACzE,IAAIkyF,EAAatS,EAAY,IAAM,KAAqB,IAAM,KAC1D3S,EAAUjtE,EAAMitE,QAsBpB,OArBAA,EAAQ2S,UAAYsS,EACpBjlB,EAAQ+b,YAAYtF,GACpB1jF,EAAM0zF,gBAAkB1mH,EAAQ2mH,WAAa3mH,EAAQ2mH,gBAAahgH,EAKlEqsB,EAAM4zF,eAAiCjgH,IAArB3G,EAAQyrF,SAAyBzrF,EAAQyrF,SAAW,IAKtEz4D,EAAM6zF,eAAiClgH,IAArB3G,EAAQ8mH,UAAyB9mH,EAAQ8mH,SAK3D9zF,EAAM+zF,eAAYpgH,EACdqsB,EAAM6zF,WACN7zF,EAAMitE,QAAQgmB,UAAUt5F,IAAI,MAEzBqG,EAkEX,OA/HA,GAAUwzF,EAAQlb,GAmElBkb,EAAO3qH,UAAUopH,aAAe,SAAUpqF,GACtCA,EAAM65E,sBACuB/tG,IAAzBpN,KAAKmtH,gBACLntH,KAAKmtH,kBAGLntH,KAAKytH,eAMbR,EAAO3qH,UAAUmrH,YAAc,WAC3B,IACI71B,EADM53F,KAAKq4G,SACAsN,UACf,GAAK/tB,EAAL,CAKA,IAAIye,EAAWze,EAAK81B,mBACHtgH,IAAbipG,IACIr2G,KAAKqtH,UAAY,GAAKhX,GAAY,EAAIz3G,KAAK2J,MAAQ,EACnDqvF,EAAKuwB,QAAQ,CACT9R,SAAU,EACVnkB,SAAUlyF,KAAKqtH,UACfM,OAAQ,QAIZ/1B,EAAKg2B,YAAY,MAS7BX,EAAO3qH,UAAU+3G,OAAS,SAAU0S,GAChC,IAAIjX,EAAaiX,EAASjX,WAC1B,GAAKA,EAAL,CAGA,IAAIO,EAAWP,EAAWI,UAAUG,SACpC,GAAIA,GAAYr2G,KAAKwtH,UAAW,CAC5B,IAAIxsC,EAAY,UAAYq1B,EAAW,OACvC,GAAIr2G,KAAKstH,UAAW,CAChB,IAAIxrH,EAAW9B,KAAK0mG,QAAQgmB,UAAU5qH,SAAS,MAC1CA,GAAyB,IAAbu0G,EAGRv0G,GAAyB,IAAbu0G,GACjBr2G,KAAK0mG,QAAQgmB,UAAUppH,OAAO,MAH9BtD,KAAK0mG,QAAQgmB,UAAUt5F,IAAI,MAMnCpzB,KAAKqrH,OAAOpS,MAAMj4B,UAAYA,EAElChhF,KAAKwtH,UAAYnX,IAEd4W,EAhIgB,CAiIzBD,GAAA,GACF,kCChLI,GAAwC,WACxC,IAAIvb,EAAgB,SAAU7+F,EAAGjT,GAI7B,OAHA8xG,EAAgB/oG,OAAOipG,gBAClB,CAAE3pF,UAAW,cAAgB/gB,OAAS,SAAU2L,EAAGjT,GAAKiT,EAAEoV,UAAYroB,IACvE,SAAUiT,EAAGjT,GAAK,IAAK,IAAIqB,KAAKrB,EAAO+I,OAAOpG,UAAUqiB,eAAe/U,KAAKjQ,EAAGqB,KAAI4R,EAAE5R,GAAKrB,EAAEqB,KACzFywG,EAAc7+F,EAAGjT,IAE5B,OAAO,SAAUiT,EAAGjT,GAChB,GAAiB,oBAANA,GAA0B,OAANA,EAC3B,MAAM,IAAI6jB,UAAU,uBAAyB6G,OAAO1qB,GAAK,iCAE7D,SAASiyG,IAAO5xG,KAAKwL,YAAcoH,EADnC6+F,EAAc7+F,EAAGjT,GAEjBiT,EAAEtQ,UAAkB,OAAN3C,EAAa+I,OAAOojC,OAAOnsC,IAAMiyG,EAAGtvG,UAAY3C,EAAE2C,UAAW,IAAIsvG,IAZ3C,GAwE5C,GA1CqC,SAAUG,GAK3C,SAAS8b,EAAgBzb,GACrB,IAAI34E,EAAQs4E,EAAOniG,KAAK5P,OAASA,KAC7ByG,EAAU2rG,GAA4B,GAW1C,OANA34E,EAAMq0F,OAASrnH,EAAQgyF,MAAQhyF,EAAQgyF,MAAQ,EAK/Ch/D,EAAM4zF,eAAiCjgH,IAArB3G,EAAQyrF,SAAyBzrF,EAAQyrF,SAAW,IAC/Dz4D,EAsBX,OAvCA,GAAUo0F,EAAiB9b,GAyB3B8b,EAAgBvrH,UAAUqlH,YAAc,SAAUP,GAC9C,IAAI2G,GAAY,EAChB,GAAI3G,EAAgBzgH,MAAQg2G,EAAA,WAA8B,CACtD,IAAIuK,EAA0CE,EAA6B,cACvEl9G,EAAMk9G,EAAgBl9G,IACtB8jH,EAAS5G,EAAgB7yE,WACzBkkD,EAAQyuB,EAAa+G,UAAYjuH,KAAK8tH,OAAS9tH,KAAK8tH,OACpDl2B,EAAO1tF,EAAIy7G,WACf,SAAY/tB,EAAMa,EAAOu1B,EAAQhuH,KAAKqtH,WACtCnG,EAAa/L,iBACb4S,GAAY,EAEhB,OAAQA,GAELF,EAxCyB,CAyClCK,GAAA,4BCvEE,GAAwC,WACxC,IAAIzc,EAAgB,SAAU7+F,EAAGjT,GAI7B,OAHA8xG,EAAgB/oG,OAAOipG,gBAClB,CAAE3pF,UAAW,cAAgB/gB,OAAS,SAAU2L,EAAGjT,GAAKiT,EAAEoV,UAAYroB,IACvE,SAAUiT,EAAGjT,GAAK,IAAK,IAAIqB,KAAKrB,EAAO+I,OAAOpG,UAAUqiB,eAAe/U,KAAKjQ,EAAGqB,KAAI4R,EAAE5R,GAAKrB,EAAEqB,KACzFywG,EAAc7+F,EAAGjT,IAE5B,OAAO,SAAUiT,EAAGjT,GAChB,GAAiB,oBAANA,GAA0B,OAANA,EAC3B,MAAM,IAAI6jB,UAAU,uBAAyB6G,OAAO1qB,GAAK,iCAE7D,SAASiyG,IAAO5xG,KAAKwL,YAAcoH,EADnC6+F,EAAc7+F,EAAGjT,GAEjBiT,EAAEtQ,UAAkB,OAAN3C,EAAa+I,OAAOojC,OAAOnsC,IAAMiyG,EAAGtvG,UAAY3C,EAAE2C,UAAW,IAAIsvG,IAZ3C,GAyL5C,GApJ6B,SAAUG,GAKnC,SAASoc,EAAQ/b,GACb,IAAI34E,EAAQs4E,EAAOniG,KAAK5P,KAAM,CAC1BouH,SAAU,QACRpuH,KACFyG,EAAU2rG,GAA4B,GAK1C34E,EAAM40F,SAAW5nH,EAAQ6nH,QAIzB70F,EAAM80F,aAAe,KAIrB90F,EAAM+0F,mBAIN/0F,EAAMg1F,UAAW,EACjB,IAAIC,EAAYjoH,EAAQioH,UAClBjoH,EAAQioH,WACR,SAAI,MAAgB,OAa1B,OARAj1F,EAAMk1F,WAAaloH,EAAQmoH,aACrB,SAAI,MAAmBF,GACvBA,EAKNj1F,EAAMo1F,YAAa,EACZp1F,EAwGX,OAjJA,GAAU00F,EAASpc,GA+CnBoc,EAAQ7rH,UAAUwsH,gBAAkB,SAAU1H,GACrCpnH,KAAKyuH,WACNzuH,KAAKyuH,UAAW,EAChBzuH,KAAKq4G,SAASsN,UAAUoJ,oBAE5B,IAAIC,EAAiBhvH,KAAKgvH,eACtBn0G,GAAW,QAAqBm0G,GACpC,GAAIA,EAAezwH,QAAUyB,KAAKwuH,oBAI9B,GAHIxuH,KAAKquH,UACLruH,KAAKquH,SAASp5F,OAAOpa,EAAS,GAAIA,EAAS,IAE3C7a,KAAKuuH,aAAc,CACnB,IAAI91B,EAAQ,CACRz4F,KAAKuuH,aAAa,GAAK1zG,EAAS,GAChCA,EAAS,GAAK7a,KAAKuuH,aAAa,IAGhC32B,EADMwvB,EAAgBl9G,IACXy7G,WACf,QAAgBltB,EAAOb,EAAKgc,kBAC5B,QAAiBnb,EAAOb,EAAK81B,eAC7B91B,EAAKq3B,qBAAqBx2B,SAGzBz4F,KAAKquH,UAGVruH,KAAKquH,SAASa,QAElBlvH,KAAKuuH,aAAe1zG,EACpB7a,KAAKwuH,mBAAqBQ,EAAezwH,OACzC6oH,EAAgBxM,cAAcO,kBAOlCgT,EAAQ7rH,UAAU6sH,cAAgB,SAAU/H,GACxC,IAAIl9G,EAAMk9G,EAAgBl9G,IACtB0tF,EAAO1tF,EAAIy7G,UACf,GAAmC,IAA/B3lH,KAAKgvH,eAAezwH,OAAc,CAClC,IAAKyB,KAAK6uH,YAAc7uH,KAAKquH,UAAYruH,KAAKquH,SAAS9vG,MAAO,CAC1D,IAAIlW,EAAWrI,KAAKquH,SAASn1D,cACzBpuD,EAAQ9K,KAAKquH,SAASe,WACtB9Y,EAAS1e,EAAKy3B,oBACdC,EAAWplH,EAAIo8G,+BAA+BhQ,GAC9CiZ,EAAOrlH,EAAI86G,+BAA+B,CAC1CsK,EAAS,GAAKjnH,EAAWzJ,KAAKqkE,IAAIn4D,GAClCwkH,EAAS,GAAKjnH,EAAWzJ,KAAKgnE,IAAI96D,KAEtC8sF,EAAK43B,gBAAgB,CACjBlZ,OAAQ1e,EAAK63B,qBAAqBF,GAClCr9B,SAAU,IACVy7B,OAAQ,QAOhB,OAJI3tH,KAAKyuH,WACLzuH,KAAKyuH,UAAW,EAChB72B,EAAK83B,mBAEF,EASP,OANI1vH,KAAKquH,UAGLruH,KAAKquH,SAASa,QAElBlvH,KAAKuuH,aAAe,MACb,GAQfJ,EAAQ7rH,UAAUqtH,gBAAkB,SAAUvI,GAC1C,GAAIpnH,KAAKgvH,eAAezwH,OAAS,GAAKyB,KAAK2uH,WAAWvH,GAAkB,CACpE,IACIxvB,EADMwvB,EAAgBl9G,IACXy7G,UAYf,OAXA3lH,KAAKuuH,aAAe,KAEhB32B,EAAKwwB,gBACLxwB,EAAKg4B,mBAEL5vH,KAAKquH,UACLruH,KAAKquH,SAASa,QAIlBlvH,KAAK6uH,WAAa7uH,KAAKgvH,eAAezwH,OAAS,GACxC,EAGP,OAAO,GAGR4vH,EAlJiB,CAmJ1B0B,GAAA,eCxLE,GAAwC,WACxC,IAAIpe,EAAgB,SAAU7+F,EAAGjT,GAI7B,OAHA8xG,EAAgB/oG,OAAOipG,gBAClB,CAAE3pF,UAAW,cAAgB/gB,OAAS,SAAU2L,EAAGjT,GAAKiT,EAAEoV,UAAYroB,IACvE,SAAUiT,EAAGjT,GAAK,IAAK,IAAIqB,KAAKrB,EAAO+I,OAAOpG,UAAUqiB,eAAe/U,KAAKjQ,EAAGqB,KAAI4R,EAAE5R,GAAKrB,EAAEqB,KACzFywG,EAAc7+F,EAAGjT,IAE5B,OAAO,SAAUiT,EAAGjT,GAChB,GAAiB,oBAANA,GAA0B,OAANA,EAC3B,MAAM,IAAI6jB,UAAU,uBAAyB6G,OAAO1qB,GAAK,iCAE7D,SAASiyG,IAAO5xG,KAAKwL,YAAcoH,EADnC6+F,EAAc7+F,EAAGjT,GAEjBiT,EAAEtQ,UAAkB,OAAN3C,EAAa+I,OAAOojC,OAAOnsC,IAAMiyG,EAAGtvG,UAAY3C,EAAE2C,UAAW,IAAIsvG,IAZ3C,GA6H5C,GAtFgC,SAAUG,GAKtC,SAAS+d,EAAW1d,GAChB,IAAI34E,EAAQz5B,KACRyG,EAAU2rG,GAA4B,GAmB1C,OAlBA34E,EAAQs4E,EAAOniG,KAAK5P,KAAM,CACtBouH,SAAU,QACRpuH,MAKA2uH,WAAaloH,EAAQioH,UAAYjoH,EAAQioH,UAAY,MAK3Dj1F,EAAMs2F,gBAAa3iH,EAKnBqsB,EAAM4zF,eAAiCjgH,IAArB3G,EAAQyrF,SAAyBzrF,EAAQyrF,SAAW,IAC/Dz4D,EA0DX,OAnFA,GAAUq2F,EAAY/d,GA+BtB+d,EAAWxtH,UAAUwsH,gBAAkB,SAAU1H,GAC7C,IAAK,SAAUA,GAAf,CAGA,IAAIl9G,EAAMk9G,EAAgBl9G,IACtB0tF,EAAO1tF,EAAIy7G,UACf,GAAI/tB,EAAKo4B,iBAAiB3Z,WAAa,MAAvC,CAGA,IAAI5hF,EAAOvqB,EAAIq8G,UACXztB,EAASsuB,EAAgBjP,MACzB8X,EAAQrxH,KAAK+0D,MAAMl/B,EAAK,GAAK,EAAIqkE,EAAO,GAAIA,EAAO,GAAKrkE,EAAK,GAAK,GACtE,QAAwBrnB,IAApBpN,KAAK+vH,WAA0B,CAC/B,IAAIt3B,EAAQw3B,EAAQjwH,KAAK+vH,WACzBn4B,EAAKs4B,wBAAwBz3B,GAEjCz4F,KAAK+vH,WAAaE,KAOtBH,EAAWxtH,UAAU6sH,cAAgB,SAAU/H,GAC3C,QAAK,SAAUA,KAGLA,EAAgBl9G,IACXy7G,UACV+J,eAAe1vH,KAAKqtH,YAClB,IAOXyC,EAAWxtH,UAAUqtH,gBAAkB,SAAUvI,GAC7C,SAAK,SAAUA,SAGX,SAAkBA,KAClBpnH,KAAK2uH,WAAWvH,MACNA,EAAgBl9G,IACtBy7G,UAAUoJ,mBACd/uH,KAAK+vH,gBAAa3iH,GACX,KAMR0iH,EApFoB,CAqF7BD,GAAA,eCzHE,GAAwC,WACxC,IAAIpe,EAAgB,SAAU7+F,EAAGjT,GAI7B,OAHA8xG,EAAgB/oG,OAAOipG,gBAClB,CAAE3pF,UAAW,cAAgB/gB,OAAS,SAAU2L,EAAGjT,GAAKiT,EAAEoV,UAAYroB,IACvE,SAAUiT,EAAGjT,GAAK,IAAK,IAAIqB,KAAKrB,EAAO+I,OAAOpG,UAAUqiB,eAAe/U,KAAKjQ,EAAGqB,KAAI4R,EAAE5R,GAAKrB,EAAEqB,KACzFywG,EAAc7+F,EAAGjT,IAE5B,OAAO,SAAUiT,EAAGjT,GAChB,GAAiB,oBAANA,GAA0B,OAANA,EAC3B,MAAM,IAAI6jB,UAAU,uBAAyB6G,OAAO1qB,GAAK,iCAE7D,SAASiyG,IAAO5xG,KAAKwL,YAAcoH,EADnC6+F,EAAc7+F,EAAGjT,GAEjBiT,EAAEtQ,UAAkB,OAAN3C,EAAa+I,OAAOojC,OAAOnsC,IAAMiyG,EAAGtvG,UAAY3C,EAAE2C,UAAW,IAAIsvG,IAZ3C,GAkI5C,GAjH+B,SAAUG,GAKrC,SAASoe,EAAU9W,GACf,IAAI5/E,EAAQs4E,EAAOniG,KAAK5P,OAASA,KA6BjC,OAxBAy5B,EAAM22F,UAAY,KAKlB32F,EAAMq/E,SAAWC,SAASC,cAAc,OACxCv/E,EAAMq/E,SAASG,MAAMC,SAAW,WAChCz/E,EAAMq/E,SAASG,MAAMuJ,cAAgB,OACrC/oF,EAAMq/E,SAASO,UAAY,UAAYA,EAKvC5/E,EAAM6tB,KAAO,KAKb7tB,EAAM42F,YAAc,KAKpB52F,EAAM62F,UAAY,KACX72F,EA4EX,OA9GA,GAAU02F,EAAWpe,GAuCrBoe,EAAU7tH,UAAUw3G,gBAAkB,WAClC95G,KAAK+jH,OAAO,OAKhBoM,EAAU7tH,UAAUiuH,QAAU,WAC1B,IAAIC,EAAaxwH,KAAKqwH,YAClBI,EAAWzwH,KAAKswH,UAChB1uG,EAAK,KACLq3F,EAAQj5G,KAAK84G,SAASG,MAC1BA,EAAM96G,KAAOS,KAAKQ,IAAIoxH,EAAW,GAAIC,EAAS,IAAM7uG,EACpDq3F,EAAMloG,IAAMnS,KAAKQ,IAAIoxH,EAAW,GAAIC,EAAS,IAAM7uG,EACnDq3F,EAAME,MAAQv6G,KAAKoiB,IAAIyvG,EAAS,GAAKD,EAAW,IAAM5uG,EACtDq3F,EAAMj3G,OAASpD,KAAKoiB,IAAIyvG,EAAS,GAAKD,EAAW,IAAM5uG,GAK3DuuG,EAAU7tH,UAAUyhH,OAAS,SAAU75G,GACnC,GAAIlK,KAAKsnD,KAAM,CACXtnD,KAAKsnD,KAAKk/D,sBAAsBxM,YAAYh6G,KAAK84G,UACjD,IAAIG,EAAQj5G,KAAK84G,SAASG,MAC1BA,EAAM96G,KAAO,UACb86G,EAAMloG,IAAM,UACZkoG,EAAME,MAAQ,UACdF,EAAMj3G,OAAS,UAEnBhC,KAAKsnD,KAAOp9C,EACRlK,KAAKsnD,MACLtnD,KAAKsnD,KAAKk/D,sBAAsB/D,YAAYziH,KAAK84G,WAOzDqX,EAAU7tH,UAAUouH,UAAY,SAAUF,EAAYC,GAClDzwH,KAAKqwH,YAAcG,EACnBxwH,KAAKswH,UAAYG,EACjBzwH,KAAK2wH,yBACL3wH,KAAKuwH,WAKTJ,EAAU7tH,UAAUquH,uBAAyB,WACzC,IAAIH,EAAaxwH,KAAKqwH,YAClBI,EAAWzwH,KAAKswH,UAOhBvpH,EANS,CACTypH,EACA,CAACA,EAAW,GAAIC,EAAS,IACzBA,EACA,CAACA,EAAS,GAAID,EAAW,KAEJtmH,IAAIlK,KAAKsnD,KAAK09D,+BAAgChlH,KAAKsnD,MAE5EvgD,EAAY,GAAKA,EAAY,GAAG7D,QAC3BlD,KAAKowH,UAINpwH,KAAKowH,UAAU/xD,eAAe,CAACt3D,IAH/B/G,KAAKowH,UAAY,IAAInmE,GAAA,GAAQ,CAACljD,KAStCopH,EAAU7tH,UAAUiqE,YAAc,WAC9B,OAAOvsE,KAAKowH,WAETD,EA/GmB,CAgH5B1X,EAAA,GCpIE,GAAwC,WACxC,IAAIhH,EAAgB,SAAU7+F,EAAGjT,GAI7B,OAHA8xG,EAAgB/oG,OAAOipG,gBAClB,CAAE3pF,UAAW,cAAgB/gB,OAAS,SAAU2L,EAAGjT,GAAKiT,EAAEoV,UAAYroB,IACvE,SAAUiT,EAAGjT,GAAK,IAAK,IAAIqB,KAAKrB,EAAO+I,OAAOpG,UAAUqiB,eAAe/U,KAAKjQ,EAAGqB,KAAI4R,EAAE5R,GAAKrB,EAAEqB,KACzFywG,EAAc7+F,EAAGjT,IAE5B,OAAO,SAAUiT,EAAGjT,GAChB,GAAiB,oBAANA,GAA0B,OAANA,EAC3B,MAAM,IAAI6jB,UAAU,uBAAyB6G,OAAO1qB,GAAK,iCAE7D,SAASiyG,IAAO5xG,KAAKwL,YAAcoH,EADnC6+F,EAAc7+F,EAAGjT,GAEjBiT,EAAEtQ,UAAkB,OAAN3C,EAAa+I,OAAOojC,OAAOnsC,IAAMiyG,EAAGtvG,UAAY3C,EAAE2C,UAAW,IAAIsvG,IAZ3C,GA8CxCgf,GAMU,WANVA,GAYS,UAZTA,GAkBQ,SAlBRA,GAwBW,YAOXC,GAA8B,SAAU9e,GAOxC,SAAS8e,EAAalqH,EAAM4tC,EAAY6yE,GACpC,IAAI3tF,EAAQs4E,EAAOniG,KAAK5P,KAAM2G,IAAS3G,KAcvC,OAPAy5B,EAAM8a,WAAaA,EAMnB9a,EAAM2tF,gBAAkBA,EACjB3tF,EAEX,OAvBA,GAAUo3F,EAAc9e,GAuBjB8e,EAxBsB,CAyB/B,MA+IF,GAxH6B,SAAU9e,GAKnC,SAAS+e,EAAQ1e,GACb,IAAI34E,EAAQs4E,EAAOniG,KAAK5P,OAASA,KAIjCy5B,EAAMghC,GAINhhC,EAAM44E,KAIN54E,EAAM6hC,GACN,IAAI70D,EAAU2rG,GAA4B,GA+B1C,OA1BA34E,EAAMs3F,KAAO,IAAI,GAAUtqH,EAAQ4yG,WAAa,cAKhD5/E,EAAMu3F,cAA+B5jH,IAApB3G,EAAQ1B,QAAwB0B,EAAQ1B,QAAU,GAC/D0B,EAAQwqH,WACRx3F,EAAMw3F,SAAWxqH,EAAQwqH,UAM7Bx3F,EAAM42F,YAAc,KAKpB52F,EAAMk1F,WAAaloH,EAAQioH,UAAYjoH,EAAQioH,UAAY,MAK3Dj1F,EAAMy3F,iBAAmBzqH,EAAQ0qH,gBAC3B1qH,EAAQ0qH,gBACR13F,EAAM23F,uBACL33F,EAoEX,OArHA,GAAUq3F,EAAS/e,GA4DnB+e,EAAQxuH,UAAU8uH,uBAAyB,SAAUhK,EAAiBoJ,EAAYC,GAC9E,IAAItX,EAAQsX,EAAS,GAAKD,EAAW,GACjCxuH,EAASyuH,EAAS,GAAKD,EAAW,GACtC,OAAOrX,EAAQA,EAAQn3G,EAASA,GAAUhC,KAAKgxH,UAOnDF,EAAQxuH,UAAUiqE,YAAc,WAC5B,OAAOvsE,KAAK+wH,KAAKxkD,eAMrBukD,EAAQxuH,UAAUwsH,gBAAkB,SAAU1H,GAC1CpnH,KAAK+wH,KAAKL,UAAU1wH,KAAKqwH,YAAajJ,EAAgBjP,OACtDn4G,KAAK4yG,cAAc,IAAIie,GAAaD,GAA0BxJ,EAAgB7yE,WAAY6yE,KAO9F0J,EAAQxuH,UAAU6sH,cAAgB,SAAU/H,GACxCpnH,KAAK+wH,KAAKhN,OAAO,MACjB,IAAIsN,EAAcrxH,KAAKkxH,iBAAiB9J,EAAiBpnH,KAAKqwH,YAAajJ,EAAgBjP,OAK3F,OAJIkZ,GACArxH,KAAKixH,SAAS7J,GAElBpnH,KAAK4yG,cAAc,IAAIie,GAAaQ,EAAcT,GAA0BA,GAA4BxJ,EAAgB7yE,WAAY6yE,KAC7H,GAOX0J,EAAQxuH,UAAUqtH,gBAAkB,SAAUvI,GAC1C,QAAIpnH,KAAK2uH,WAAWvH,KAChBpnH,KAAKqwH,YAAcjJ,EAAgBjP,MACnCn4G,KAAK+wH,KAAKhN,OAAOqD,EAAgBl9G,KACjClK,KAAK+wH,KAAKL,UAAU1wH,KAAKqwH,YAAarwH,KAAKqwH,aAC3CrwH,KAAK4yG,cAAc,IAAIie,GAAaD,GAA2BxJ,EAAgB7yE,WAAY6yE,KACpF,IAUf0J,EAAQxuH,UAAU2uH,SAAW,SAAU3vF,KAChCwvF,EAtHiB,CAuH1BjB,GAAA,GCpPE,GAAwC,WACxC,IAAIpe,EAAgB,SAAU7+F,EAAGjT,GAI7B,OAHA8xG,EAAgB/oG,OAAOipG,gBAClB,CAAE3pF,UAAW,cAAgB/gB,OAAS,SAAU2L,EAAGjT,GAAKiT,EAAEoV,UAAYroB,IACvE,SAAUiT,EAAGjT,GAAK,IAAK,IAAIqB,KAAKrB,EAAO+I,OAAOpG,UAAUqiB,eAAe/U,KAAKjQ,EAAGqB,KAAI4R,EAAE5R,GAAKrB,EAAEqB,KACzFywG,EAAc7+F,EAAGjT,IAE5B,OAAO,SAAUiT,EAAGjT,GAChB,GAAiB,oBAANA,GAA0B,OAANA,EAC3B,MAAM,IAAI6jB,UAAU,uBAAyB6G,OAAO1qB,GAAK,iCAE7D,SAASiyG,IAAO5xG,KAAKwL,YAAcoH,EADnC6+F,EAAc7+F,EAAGjT,GAEjBiT,EAAEtQ,UAAkB,OAAN3C,EAAa+I,OAAOojC,OAAOnsC,IAAMiyG,EAAGtvG,UAAY3C,EAAE2C,UAAW,IAAIsvG,IAZ3C,GA4F5C,GAhD8B,SAAUG,GAKpC,SAASuf,EAASlf,GACd,IAAI34E,EAAQz5B,KACRyG,EAAU2rG,GAA4B,GACtCsc,EAAYjoH,EAAQioH,UAAYjoH,EAAQioH,UAAY,MAgBxD,OAfAj1F,EAAQs4E,EAAOniG,KAAK5P,KAAM,CACtB0uH,UAAWA,EACXrV,UAAW5yG,EAAQ4yG,WAAa,cAChCt0G,QAAS0B,EAAQ1B,WACf/E,MAKAqtH,eAAiCjgH,IAArB3G,EAAQyrF,SAAyBzrF,EAAQyrF,SAAW,IAKtEz4D,EAAM83F,UAAuBnkH,IAAhB3G,EAAQosB,KAAoBpsB,EAAQosB,IAC1C4G,EAsBX,OA7CA,GAAU63F,EAAUvf,GA6BpBuf,EAAShvH,UAAU2uH,SAAW,SAAU3vF,GACpC,IACIs2D,EADM53F,KAAKq4G,SAC8CsN,UACzD9+G,EAAW7G,KAAKusE,cACpB,GAAIvsE,KAAKuxH,KAAM,CACX,IAAIC,EAAgB55B,EAAK65B,yBAAyB5qH,GAC9CssG,EAAavb,EAAK85B,+BAA+BF,GACjDtpH,EAAS0vF,EAAKgc,gBAAkBT,GACpCtsG,EAAWA,EAASkmC,SACXslC,MAAMnqE,EAASA,GAE5B0vF,EAAK+5B,YAAY9qH,EAAU,CACvBqrF,SAAUlyF,KAAKqtH,UACfM,OAAQ,SAGT2D,EA9CkB,CA+C3B,ICpFF,GACU,GADV,GAEQ,GAFR,GAGW,GAHX,GAIU,GCXN,GAAwC,WACxC,IAAI7f,EAAgB,SAAU7+F,EAAGjT,GAI7B,OAHA8xG,EAAgB/oG,OAAOipG,gBAClB,CAAE3pF,UAAW,cAAgB/gB,OAAS,SAAU2L,EAAGjT,GAAKiT,EAAEoV,UAAYroB,IACvE,SAAUiT,EAAGjT,GAAK,IAAK,IAAIqB,KAAKrB,EAAO+I,OAAOpG,UAAUqiB,eAAe/U,KAAKjQ,EAAGqB,KAAI4R,EAAE5R,GAAKrB,EAAEqB,KACzFywG,EAAc7+F,EAAGjT,IAE5B,OAAO,SAAUiT,EAAGjT,GAChB,GAAiB,oBAANA,GAA0B,OAANA,EAC3B,MAAM,IAAI6jB,UAAU,uBAAyB6G,OAAO1qB,GAAK,iCAE7D,SAASiyG,IAAO5xG,KAAKwL,YAAcoH,EADnC6+F,EAAc7+F,EAAGjT,GAEjBiT,EAAEtQ,UAAkB,OAAN3C,EAAa+I,OAAOojC,OAAOnsC,IAAMiyG,EAAGtvG,UAAY3C,EAAE2C,UAAW,IAAIsvG,IAZ3C,GAiI5C,GAlFiC,SAAUG,GAKvC,SAAS6f,EAAYxf,GACjB,IAAI34E,EAAQs4E,EAAOniG,KAAK5P,OAASA,KAC7ByG,EAAU2rG,GAAe,GA4B7B,OAtBA34E,EAAMo4F,kBAAoB,SAAUzK,GAChC,OAAQ,SAAeA,KAAoB,SAAkBA,IAMjE3tF,EAAMk1F,gBACoBvhH,IAAtB3G,EAAQioH,UACFjoH,EAAQioH,UACRj1F,EAAMo4F,kBAKhBp4F,EAAM4zF,eAAiCjgH,IAArB3G,EAAQyrF,SAAyBzrF,EAAQyrF,SAAW,IAKtEz4D,EAAMq4F,iBACqB1kH,IAAvB3G,EAAQsrH,WAA2BtrH,EAAQsrH,WAAa,IACrDt4F,EA6CX,OA/EA,GAAUm4F,EAAa7f,GA4CvB6f,EAAYtvH,UAAUqlH,YAAc,SAAUP,GAC1C,IAAI2G,GAAY,EAChB,GAAI3G,EAAgBzgH,MAAQ,YAAmB,CAC3C,IAAIqrH,EAAyC5K,EAA6B,cACtE6K,EAAUD,EAASC,QACvB,GAAIjyH,KAAK2uH,WAAWvH,KACf6K,GAAWC,IACRD,GAAWC,IACXD,GAAWC,IACXD,GAAWC,IAAa,CAC5B,IACIt6B,EADMwvB,EAAgBl9G,IACXy7G,UACXwM,EAAgBv6B,EAAKgc,gBAAkB5zG,KAAK8xH,YAC5C9K,EAAS,EAAGC,EAAS,EACrBgL,GAAWC,GACXjL,GAAUkL,EAELF,GAAWC,GAChBlL,GAAUmL,EAELF,GAAWC,GAChBlL,EAASmL,EAGTlL,EAASkL,EAEb,IAAI15B,EAAQ,CAACuuB,EAAQC,IACrB,QAAiBxuB,EAAOb,EAAK81B,gBAC7B,SAAI91B,EAAMa,EAAOz4F,KAAKqtH,WACtB2E,EAAS7W,iBACT4S,GAAY,GAGpB,OAAQA,GAEL6D,EAhFqB,CAiF9B1D,GAAA,IChIE,GAAwC,WACxC,IAAIzc,EAAgB,SAAU7+F,EAAGjT,GAI7B,OAHA8xG,EAAgB/oG,OAAOipG,gBAClB,CAAE3pF,UAAW,cAAgB/gB,OAAS,SAAU2L,EAAGjT,GAAKiT,EAAEoV,UAAYroB,IACvE,SAAUiT,EAAGjT,GAAK,IAAK,IAAIqB,KAAKrB,EAAO+I,OAAOpG,UAAUqiB,eAAe/U,KAAKjQ,EAAGqB,KAAI4R,EAAE5R,GAAKrB,EAAEqB,KACzFywG,EAAc7+F,EAAGjT,IAE5B,OAAO,SAAUiT,EAAGjT,GAChB,GAAiB,oBAANA,GAA0B,OAANA,EAC3B,MAAM,IAAI6jB,UAAU,uBAAyB6G,OAAO1qB,GAAK,iCAE7D,SAASiyG,IAAO5xG,KAAKwL,YAAcoH,EADnC6+F,EAAc7+F,EAAGjT,GAEjBiT,EAAEtQ,UAAkB,OAAN3C,EAAa+I,OAAOojC,OAAOnsC,IAAMiyG,EAAGtvG,UAAY3C,EAAE2C,UAAW,IAAIsvG,IAZ3C,GAgG5C,GArDkC,SAAUG,GAKxC,SAASqgB,EAAahgB,GAClB,IAAI34E,EAAQs4E,EAAOniG,KAAK5P,OAASA,KAC7ByG,EAAU2rG,GAA4B,GAgB1C,OAXA34E,EAAMk1F,WAAaloH,EAAQioH,UAAYjoH,EAAQioH,UAAY,MAK3Dj1F,EAAMq0F,OAASrnH,EAAQgyF,MAAQhyF,EAAQgyF,MAAQ,EAK/Ch/D,EAAM4zF,eAAiCjgH,IAArB3G,EAAQyrF,SAAyBzrF,EAAQyrF,SAAW,IAC/Dz4D,EA4BX,OAlDA,GAAU24F,EAAcrgB,GAgCxBqgB,EAAa9vH,UAAUqlH,YAAc,SAAUP,GAC3C,IAAI2G,GAAY,EAChB,GAAI3G,EAAgBzgH,MAAQ,aACxBygH,EAAgBzgH,MAAQ,aAAoB,CAC5C,IAAIqrH,EAAyC5K,EAA6B,cACtEiL,EAAWL,EAASK,SACxB,GAAIryH,KAAK2uH,WAAWvH,KACfiL,GAAY,IAAIC,WAAW,IAAMD,GAAY,IAAIC,WAAW,IAAK,CAClE,IAAIpoH,EAAMk9G,EAAgBl9G,IACtBuuF,EAAQ45B,GAAY,IAAIC,WAAW,GAAKtyH,KAAK8tH,QAAU9tH,KAAK8tH,OAC5Dl2B,EAAO1tF,EAAIy7G,WACf,SAAY/tB,EAAMa,OAAOrrF,EAAWpN,KAAKqtH,WACzC2E,EAAS7W,iBACT4S,GAAY,GAGpB,OAAQA,GAELqE,EAnDsB,CAoD/BlE,GAAA,ICgBF,GAtG6B,WAOzB,SAASqE,EAAQC,EAAOC,EAAalgC,GAKjCvyF,KAAK0yH,OAASF,EAKdxyH,KAAK2yH,aAAeF,EAKpBzyH,KAAK4yH,OAASrgC,EAKdvyF,KAAK6yH,QAAU,GAKf7yH,KAAK8yH,OAAS,EAKd9yH,KAAK+yH,iBAAmB,EA+D5B,OA1DAR,EAAQjwH,UAAU4sH,MAAQ,WACtBlvH,KAAK6yH,QAAQt0H,OAAS,EACtByB,KAAK8yH,OAAS,EACd9yH,KAAK+yH,iBAAmB,GAM5BR,EAAQjwH,UAAU2yB,OAAS,SAAU9gB,EAAGC,GACpCpU,KAAK6yH,QAAQxwH,KAAK8R,EAAGC,EAAG8B,KAAK0rG,QAKjC2Q,EAAQjwH,UAAUic,IAAM,WACpB,GAAIve,KAAK6yH,QAAQt0H,OAAS,EAGtB,OAAO,EAEX,IAAIg0F,EAAQr8E,KAAK0rG,MAAQ5hH,KAAK4yH,OAC1BI,EAAYhzH,KAAK6yH,QAAQt0H,OAAS,EACtC,GAAIyB,KAAK6yH,QAAQG,EAAY,GAAKzgC,EAG9B,OAAO,EAIX,IADA,IAAI0gC,EAAaD,EAAY,EACtBC,EAAa,GAAKjzH,KAAK6yH,QAAQI,EAAa,GAAK1gC,GACpD0gC,GAAc,EAElB,IAAI/gC,EAAWlyF,KAAK6yH,QAAQG,EAAY,GAAKhzH,KAAK6yH,QAAQI,EAAa,GAIvE,GAAI/gC,EAAW,IAAO,GAClB,OAAO,EAEX,IAAIj+E,EAAKjU,KAAK6yH,QAAQG,GAAahzH,KAAK6yH,QAAQI,GAC5C/+G,EAAKlU,KAAK6yH,QAAQG,EAAY,GAAKhzH,KAAK6yH,QAAQI,EAAa,GAGjE,OAFAjzH,KAAK8yH,OAASl0H,KAAK+0D,MAAMz/C,EAAID,GAC7BjU,KAAK+yH,iBAAmBn0H,KAAKK,KAAKgV,EAAKA,EAAKC,EAAKA,GAAMg+E,EAChDlyF,KAAK+yH,iBAAmB/yH,KAAK2yH,cAKxCJ,EAAQjwH,UAAU42D,YAAc,WAC5B,OAAQl5D,KAAK2yH,aAAe3yH,KAAK+yH,kBAAoB/yH,KAAK0yH,QAK9DH,EAAQjwH,UAAU8sH,SAAW,WACzB,OAAOpvH,KAAK8yH,QAETP,EApGiB,eCTxB,GAAwC,WACxC,IAAI9gB,EAAgB,SAAU7+F,EAAGjT,GAI7B,OAHA8xG,EAAgB/oG,OAAOipG,gBAClB,CAAE3pF,UAAW,cAAgB/gB,OAAS,SAAU2L,EAAGjT,GAAKiT,EAAEoV,UAAYroB,IACvE,SAAUiT,EAAGjT,GAAK,IAAK,IAAIqB,KAAKrB,EAAO+I,OAAOpG,UAAUqiB,eAAe/U,KAAKjQ,EAAGqB,KAAI4R,EAAE5R,GAAKrB,EAAEqB,KACzFywG,EAAc7+F,EAAGjT,IAE5B,OAAO,SAAUiT,EAAGjT,GAChB,GAAiB,oBAANA,GAA0B,OAANA,EAC3B,MAAM,IAAI6jB,UAAU,uBAAyB6G,OAAO1qB,GAAK,iCAE7D,SAASiyG,IAAO5xG,KAAKwL,YAAcoH,EADnC6+F,EAAc7+F,EAAGjT,GAEjBiT,EAAEtQ,UAAkB,OAAN3C,EAAa+I,OAAOojC,OAAOnsC,IAAMiyG,EAAGtvG,UAAY3C,EAAE2C,UAAW,IAAIsvG,IAZ3C,GA0BjCshB,GACG,WADHA,GAEA,QAuOX,GA9MoC,SAAUnhB,GAK1C,SAASohB,EAAe/gB,GACpB,IAAI34E,EAAQz5B,KACRyG,EAAU2rG,GAA4B,IAC1C34E,EAAQs4E,EAAOniG,KAAK5P,KACyC,IAAcA,MAKrEozH,YAAc,EAKpB35F,EAAM45F,WAAa,EAKnB55F,EAAM65F,eAAiClmH,IAArB3G,EAAQ8sH,SAAyB9sH,EAAQ8sH,SAAW,EAKtE95F,EAAM4zF,eAAiCjgH,IAArB3G,EAAQyrF,SAAyBzrF,EAAQyrF,SAAW,IAKtEz4D,EAAM+5F,cAA+BpmH,IAApB3G,EAAQgtH,QAAwBhtH,EAAQgtH,QAAU,GAKnEh6F,EAAMi6F,gBACoBtmH,IAAtB3G,EAAQktH,WAA0BltH,EAAQktH,UAK9Cl6F,EAAMm6F,0BAC8BxmH,IAAhC3G,EAAQotH,qBACFptH,EAAQotH,oBAElB,IAAInF,EAAYjoH,EAAQioH,UAAYjoH,EAAQioH,UAAY,MA4CxD,OAvCAj1F,EAAMk1F,WAAaloH,EAAQmoH,aACrB,SAAI,MAAmBF,GACvBA,EAKNj1F,EAAMq6F,YAAc,KAKpBr6F,EAAMs6F,gBAAa3mH,EAKnBqsB,EAAMu6F,WAKNv6F,EAAMw6F,WAAQ7mH,EAMdqsB,EAAMy6F,kBAAoB,IAI1Bz6F,EAAM06F,mBAMN16F,EAAM26F,cAAgB,IACf36F,EA+GX,OA3MA,GAAU05F,EAAgBphB,GAiG1BohB,EAAe7wH,UAAU+xH,gBAAkB,WACvCr0H,KAAKm0H,wBAAqB/mH,EACfpN,KAAKq4G,SAASsN,UACpB+J,oBAAetiH,EAAWpN,KAAKqzH,WAAcrzH,KAAKqzH,WAAa,EAAI,GAAK,EAAK,EAAGrzH,KAAK8zH,cAQ9FX,EAAe7wH,UAAUqlH,YAAc,SAAUP,GAC7C,IAAKpnH,KAAK2uH,WAAWvH,GACjB,OAAO,EAGX,GADWA,EAAgBzgH,OACd,UACT,OAAO,EAEX,IAQI8xF,EARAvuF,EAAMk9G,EAAgBl9G,IACtBoqH,EAAwClN,EAA6B,cAiBzE,GAhBAkN,EAAWnZ,iBACPn7G,KAAK0zH,aACL1zH,KAAK8zH,YAAc1M,EAAgB7yE,YAKnC6yE,EAAgBzgH,MAAQ,YACxB8xF,EAAQ67B,EAAWrN,OACf,KAAWqN,EAAWC,YAAcC,WAAWC,kBAC/Ch8B,GAAS,MAET67B,EAAWC,YAAcC,WAAWE,iBACpCj8B,GAAS,KAGH,IAAVA,EACA,OAAO,EAGPz4F,KAAKqzH,WAAa56B,EAEtB,IAAImpB,EAAM1rG,KAAK0rG,WACSx0G,IAApBpN,KAAK+zH,aACL/zH,KAAK+zH,WAAanS,KAEjB5hH,KAAKi0H,OAASrS,EAAM5hH,KAAK+zH,WAAa/zH,KAAKk0H,qBAC5Cl0H,KAAKi0H,MAAQr1H,KAAKoiB,IAAIy3E,GAAS,EAAIy6B,GAAgBA,IAEvD,IAAIt7B,EAAO1tF,EAAIy7G,UACf,GAAI3lH,KAAKi0H,QAAUf,KACbt7B,EAAK+8B,2BAA4B30H,KAAK4zH,qBAaxC,OAZI5zH,KAAKm0H,mBACLvX,aAAa58G,KAAKm0H,qBAGdv8B,EAAKwwB,gBACLxwB,EAAKg4B,mBAETh4B,EAAKm3B,oBAET/uH,KAAKm0H,mBAAqBtX,WAAW78G,KAAKq0H,gBAAgB7kH,KAAKxP,MAAOA,KAAKwzH,UAC3E57B,EAAKg9B,YAAYn8B,EAAQz4F,KAAKo0H,cAAep0H,KAAK8zH,aAClD9zH,KAAK+zH,WAAanS,GACX,EAEX5hH,KAAKozH,aAAe36B,EACpB,IAAIo8B,EAAWj2H,KAAKM,IAAIc,KAAKwzH,UAAY5R,EAAM5hH,KAAK+zH,YAAa,GAGjE,OAFAnX,aAAa58G,KAAKg0H,YAClBh0H,KAAKg0H,WAAanX,WAAW78G,KAAK80H,iBAAiBtlH,KAAKxP,KAAMkK,GAAM2qH,IAC7D,GAMX1B,EAAe7wH,UAAUwyH,iBAAmB,SAAU5qH,GAClD,IAAI0tF,EAAO1tF,EAAIy7G,UACX/tB,EAAKwwB,gBACLxwB,EAAKg4B,mBAET,IAAIn3B,IAAS,SAAMz4F,KAAKozH,aAAcpzH,KAAKszH,UAAYtzH,KAAKo0H,cAAep0H,KAAKszH,UAAYtzH,KAAKo0H,eAAiBp0H,KAAKo0H,eACnHx8B,EAAK+8B,0BAA4B30H,KAAK4zH,wBAEtCn7B,EAAQA,EAASA,EAAQ,EAAI,GAAK,EAAK,IAE3C,SAAYb,EAAMa,EAAOz4F,KAAK8zH,YAAa9zH,KAAKqtH,WAChDrtH,KAAKi0H,WAAQ7mH,EACbpN,KAAKozH,YAAc,EACnBpzH,KAAK8zH,YAAc,KACnB9zH,KAAK+zH,gBAAa3mH,EAClBpN,KAAKg0H,gBAAa5mH,GAQtB+lH,EAAe7wH,UAAUyyH,eAAiB,SAAUpB,GAChD3zH,KAAK0zH,WAAaC,EACbA,IACD3zH,KAAK8zH,YAAc,OAGpBX,EA5MwB,CA6MjCjF,GAAA,IClQE,GAAwC,WACxC,IAAIzc,EAAgB,SAAU7+F,EAAGjT,GAI7B,OAHA8xG,EAAgB/oG,OAAOipG,gBAClB,CAAE3pF,UAAW,cAAgB/gB,OAAS,SAAU2L,EAAGjT,GAAKiT,EAAEoV,UAAYroB,IACvE,SAAUiT,EAAGjT,GAAK,IAAK,IAAIqB,KAAKrB,EAAO+I,OAAOpG,UAAUqiB,eAAe/U,KAAKjQ,EAAGqB,KAAI4R,EAAE5R,GAAKrB,EAAEqB,KACzFywG,EAAc7+F,EAAGjT,IAE5B,OAAO,SAAUiT,EAAGjT,GAChB,GAAiB,oBAANA,GAA0B,OAANA,EAC3B,MAAM,IAAI6jB,UAAU,uBAAyB6G,OAAO1qB,GAAK,iCAE7D,SAASiyG,IAAO5xG,KAAKwL,YAAcoH,EADnC6+F,EAAc7+F,EAAGjT,GAEjBiT,EAAEtQ,UAAkB,OAAN3C,EAAa+I,OAAOojC,OAAOnsC,IAAMiyG,EAAGtvG,UAAY3C,EAAE2C,UAAW,IAAIsvG,IAZ3C,GA2J5C,GA1HiC,SAAUG,GAKvC,SAASijB,EAAY5iB,GACjB,IAAI34E,EAAQz5B,KACRyG,EAAU2rG,GAA4B,GACtC6iB,EAA+D,EAmCnE,OAlCKA,EAAe7G,WAChB6G,EAAe7G,SAAW,OAE9B30F,EAAQs4E,EAAOniG,KAAK5P,KAAMi1H,IAAmBj1H,MAKvCk1H,QAAU,KAKhBz7F,EAAMs2F,gBAAa3iH,EAKnBqsB,EAAM07F,WAAY,EAKlB17F,EAAM27F,eAAiB,EAKvB37F,EAAM47F,gBAAmCjoH,IAAtB3G,EAAQ6uH,UAA0B7uH,EAAQ6uH,UAAY,GAKzE77F,EAAM4zF,eAAiCjgH,IAArB3G,EAAQyrF,SAAyBzrF,EAAQyrF,SAAW,IAC/Dz4D,EA6EX,OAvHA,GAAUu7F,EAAajjB,GAgDvBijB,EAAY1yH,UAAUwsH,gBAAkB,SAAU1H,GAC9C,IAAImO,EAAgB,EAChBC,EAASx1H,KAAKgvH,eAAe,GAC7ByG,EAASz1H,KAAKgvH,eAAe,GAE7BlkH,EAAQlM,KAAK+0D,MAAM8hE,EAAO7X,QAAU4X,EAAO5X,QAAS6X,EAAO9X,QAAU6X,EAAO7X,SAChF,QAAwBvwG,IAApBpN,KAAK+vH,WAA0B,CAC/B,IAAIt3B,EAAQ3tF,EAAQ9K,KAAK+vH,WACzB/vH,KAAKo1H,gBAAkB38B,GAClBz4F,KAAKm1H,WAAav2H,KAAKoiB,IAAIhhB,KAAKo1H,gBAAkBp1H,KAAKq1H,aACxDr1H,KAAKm1H,WAAY,GAErBI,EAAgB98B,EAEpBz4F,KAAK+vH,WAAajlH,EAClB,IAAIZ,EAAMk9G,EAAgBl9G,IACtB0tF,EAAO1tF,EAAIy7G,UACf,GAAI/tB,EAAKo4B,iBAAiB3Z,WAAa,MAAvC,CAMA,IAAIgP,EAAmBn7G,EAAIqvG,cAAc+L,wBACrCzqG,GAAW,QAAqB7a,KAAKgvH,gBACzCn0G,EAAS,IAAMwqG,EAAiBlnH,KAChC0c,EAAS,IAAMwqG,EAAiBt0G,IAChC/Q,KAAKk1H,QAAUhrH,EAAI86G,+BAA+BnqG,GAE9C7a,KAAKm1H,YACLjrH,EAAImwG,SACJziB,EAAKs4B,uBAAuBqF,EAAev1H,KAAKk1H,YAQxDF,EAAY1yH,UAAU6sH,cAAgB,SAAU/H,GAC5C,QAAIpnH,KAAKgvH,eAAezwH,OAAS,KACnB6oH,EAAgBl9G,IACXy7G,UACV+J,eAAe1vH,KAAKqtH,YAClB,IAWf2H,EAAY1yH,UAAUqtH,gBAAkB,SAAUvI,GAC9C,GAAIpnH,KAAKgvH,eAAezwH,QAAU,EAAG,CACjC,IAAI2L,EAAMk9G,EAAgBl9G,IAQ1B,OAPAlK,KAAKk1H,QAAU,KACfl1H,KAAK+vH,gBAAa3iH,EAClBpN,KAAKm1H,WAAY,EACjBn1H,KAAKo1H,eAAiB,EACjBp1H,KAAK01H,wBACNxrH,EAAIy7G,UAAUoJ,oBAEX,EAGP,OAAO,GAGRiG,EAxHqB,CAyH9BnF,GAAA,GC1JE,GAAwC,WACxC,IAAIpe,EAAgB,SAAU7+F,EAAGjT,GAI7B,OAHA8xG,EAAgB/oG,OAAOipG,gBAClB,CAAE3pF,UAAW,cAAgB/gB,OAAS,SAAU2L,EAAGjT,GAAKiT,EAAEoV,UAAYroB,IACvE,SAAUiT,EAAGjT,GAAK,IAAK,IAAIqB,KAAKrB,EAAO+I,OAAOpG,UAAUqiB,eAAe/U,KAAKjQ,EAAGqB,KAAI4R,EAAE5R,GAAKrB,EAAEqB,KACzFywG,EAAc7+F,EAAGjT,IAE5B,OAAO,SAAUiT,EAAGjT,GAChB,GAAiB,oBAANA,GAA0B,OAANA,EAC3B,MAAM,IAAI6jB,UAAU,uBAAyB6G,OAAO1qB,GAAK,iCAE7D,SAASiyG,IAAO5xG,KAAKwL,YAAcoH,EADnC6+F,EAAc7+F,EAAGjT,GAEjBiT,EAAEtQ,UAAkB,OAAN3C,EAAa+I,OAAOojC,OAAOnsC,IAAMiyG,EAAGtvG,UAAY3C,EAAE2C,UAAW,IAAIsvG,IAZ3C,GAuI5C,GAzG+B,SAAUG,GAKrC,SAAS4jB,EAAUvjB,GACf,IAAI34E,EAAQz5B,KACRyG,EAAU2rG,GAA4B,GACtC6iB,EAA+D,EAyBnE,OAxBKA,EAAe7G,WAChB6G,EAAe7G,SAAW,OAE9B30F,EAAQs4E,EAAOniG,KAAK5P,KAAMi1H,IAAmBj1H,MAKvCk1H,QAAU,KAKhBz7F,EAAM4zF,eAAiCjgH,IAArB3G,EAAQyrF,SAAyBzrF,EAAQyrF,SAAW,IAKtEz4D,EAAMm8F,mBAAgBxoH,EAKtBqsB,EAAMo8F,gBAAkB,EACjBp8F,EAsEX,OAtGA,GAAUk8F,EAAW5jB,GAsCrB4jB,EAAUrzH,UAAUwsH,gBAAkB,SAAU1H,GAC5C,IAAI0O,EAAa,EACbN,EAASx1H,KAAKgvH,eAAe,GAC7ByG,EAASz1H,KAAKgvH,eAAe,GAC7B/6G,EAAKuhH,EAAO7X,QAAU8X,EAAO9X,QAC7BzpG,EAAKshH,EAAO5X,QAAU6X,EAAO7X,QAE7Bv1G,EAAWzJ,KAAKK,KAAKgV,EAAKA,EAAKC,EAAKA,QACb9G,IAAvBpN,KAAK41H,gBACLE,EAAa91H,KAAK41H,cAAgBvtH,GAEtCrI,KAAK41H,cAAgBvtH,EACrB,IAAI6B,EAAMk9G,EAAgBl9G,IACtB0tF,EAAO1tF,EAAIy7G,UACG,GAAdmQ,IACA91H,KAAK61H,gBAAkBC,GAG3B,IAAIzQ,EAAmBn7G,EAAIqvG,cAAc+L,wBACrCzqG,GAAW,QAAqB7a,KAAKgvH,gBACzCn0G,EAAS,IAAMwqG,EAAiBlnH,KAChC0c,EAAS,IAAMwqG,EAAiBt0G,IAChC/Q,KAAKk1H,QAAUhrH,EAAI86G,+BAA+BnqG,GAElD3Q,EAAImwG,SACJziB,EAAKm+B,yBAAyBD,EAAY91H,KAAKk1H,UAOnDS,EAAUrzH,UAAU6sH,cAAgB,SAAU/H,GAC1C,GAAIpnH,KAAKgvH,eAAezwH,OAAS,EAAG,CAChC,IACIq5F,EADMwvB,EAAgBl9G,IACXy7G,UACXzhG,EAAYlkB,KAAK61H,gBAAkB,EAAI,GAAK,EAEhD,OADAj+B,EAAK83B,eAAe1vH,KAAKqtH,UAAWnpG,IAC7B,EAGP,OAAO,GAQfyxG,EAAUrzH,UAAUqtH,gBAAkB,SAAUvI,GAC5C,GAAIpnH,KAAKgvH,eAAezwH,QAAU,EAAG,CACjC,IAAI2L,EAAMk9G,EAAgBl9G,IAO1B,OANAlK,KAAKk1H,QAAU,KACfl1H,KAAK41H,mBAAgBxoH,EACrBpN,KAAK61H,gBAAkB,EAClB71H,KAAK01H,wBACNxrH,EAAIy7G,UAAUoJ,oBAEX,EAGP,OAAO,GAGR4G,EAvGmB,CAwG5B9F,GAAA,GCtIF,IAAI,GAAwC,WACxC,IAAIpe,EAAgB,SAAU7+F,EAAGjT,GAI7B,OAHA8xG,EAAgB/oG,OAAOipG,gBAClB,CAAE3pF,UAAW,cAAgB/gB,OAAS,SAAU2L,EAAGjT,GAAKiT,EAAEoV,UAAYroB,IACvE,SAAUiT,EAAGjT,GAAK,IAAK,IAAIqB,KAAKrB,EAAO+I,OAAOpG,UAAUqiB,eAAe/U,KAAKjQ,EAAGqB,KAAI4R,EAAE5R,GAAKrB,EAAEqB,KACzFywG,EAAc7+F,EAAGjT,IAE5B,OAAO,SAAUiT,EAAGjT,GAChB,GAAiB,oBAANA,GAA0B,OAANA,EAC3B,MAAM,IAAI6jB,UAAU,uBAAyB6G,OAAO1qB,GAAK,iCAE7D,SAASiyG,IAAO5xG,KAAKwL,YAAcoH,EADnC6+F,EAAc7+F,EAAGjT,GAEjBiT,EAAEtQ,UAAkB,OAAN3C,EAAa+I,OAAOojC,OAAOnsC,IAAMiyG,EAAGtvG,UAAY3C,EAAE2C,UAAW,IAAIsvG,IAZ3C,GAsExC,GAAqB,SAAUG,GAK/B,SAASroF,EAAIjjB,GAYT,OAVAA,GAAU,QAAO,GAAIA,IACR4rF,WACT5rF,EAAQ4rF,SCjCb,SAAkB+f,GACrB,IAAI3rG,EAAU2rG,GAA4B,GACtC/f,EAAW,IAAI6f,EAAA,EAanB,YAZmC9kG,IAAjB3G,EAAQuvH,MAAqBvvH,EAAQuvH,OAEnD3jC,EAAShwF,KAAK,IAAI4zH,GAAAzpF,EAAK/lC,EAAQyvH,oBAEI9oH,IAAnB3G,EAAQ0vH,QAAuB1vH,EAAQ0vH,SAEvD9jC,EAAShwF,KAAK,IAAI,GAAOoE,EAAQ2vH,sBAEYhpH,IAAxB3G,EAAQ4vH,aAA4B5vH,EAAQ4vH,cAEjEhkC,EAAShwF,KAAK,IAAI,GAAYoE,EAAQ6vH,qBAEnCjkC,EDkBoB,IAElB5rF,EAAQo6G,eACTp6G,EAAQo6G,aEFb,SAAkBzO,GACrB,IAAI3rG,EAAU2rG,GAA4B,GACtCyO,EAAe,IAAI3O,EAAA,EACnBoc,EAAU,IAAI,IAAS,KAAO,IAAM,KAoDxC,YAnDwDlhH,IAA/B3G,EAAQ8vH,oBAC3B9vH,EAAQ8vH,qBAGV1V,EAAax+G,KAAK,IAAI,UAEwB+K,IAA5B3G,EAAQ+vH,iBAAgC/vH,EAAQ+vH,kBAElE3V,EAAax+G,KAAK,IAAI,GAAgB,CAClCo2F,MAAOhyF,EAAQgwH,UACfvkC,SAAUzrF,EAAQiwH,sBAGQtpH,IAApB3G,EAAQkwH,SAAwBlwH,EAAQkwH,UAElD9V,EAAax+G,KAAK,IAAI,GAAQ,CAC1BusH,YAAanoH,EAAQmoH,YACrBN,QAASA,WAGyBlhH,IAAxB3G,EAAQmwH,aAA4BnwH,EAAQmwH,cAE1D/V,EAAax+G,KAAK,IAAI,UAEY+K,IAAtB3G,EAAQowH,WAA0BpwH,EAAQowH,YAEtDhW,EAAax+G,KAAK,IAAI,GAAU,CAC5B6vF,SAAUzrF,EAAQiwH,sBAGUtpH,IAArB3G,EAAQqwH,UAAyBrwH,EAAQqwH,YAEpDjW,EAAax+G,KAAK,IAAI,IACtBw+G,EAAax+G,KAAK,IAAI,GAAa,CAC/Bo2F,MAAOhyF,EAAQgwH,UACfvkC,SAAUzrF,EAAQiwH,uBAGsBtpH,IAA3B3G,EAAQswH,gBAA+BtwH,EAAQswH,iBAEhElW,EAAax+G,KAAK,IAAI,GAAe,CACjCusH,YAAanoH,EAAQmoH,YACrB18B,SAAUzrF,EAAQiwH,sBAGoBtpH,IAA1B3G,EAAQuwH,eAA8BvwH,EAAQuwH,gBAE9DnW,EAAax+G,KAAK,IAAI,GAAS,CAC3B6vF,SAAUzrF,EAAQiwH,gBAGnB7V,EFrDwB,CAAoB,CACvC+N,aAAa,KAGb7c,EAAOniG,KAAK5P,KAAMyG,IAAYzG,KAM1C,OArBA,GAAU0pB,EAAKqoF,GAkBfroF,EAAIpnB,UAAU6hH,eAAiB,WAC3B,OAAO,IAAI8S,EAAqBj3H,OAE7B0pB,EAtBa,CAuBtB,IACF,yDGtFA,KAOIwtG,YAAa,cAMbC,MAAO,UAMPC,SAAU,aAMVC,YAAa,cAObC,YAAa,cACbC,YAAa,cACbC,UAAW,YACXC,YAAa,cACbC,WAAY,aACZC,aAAc,eACdC,aAAc,eACdC,cAAe,mDCzCnB,KAMIC,WAAY,aAMZC,UAAW,YAMXC,QAAS,8ECjBb,IAAIC,EAA2B,WAO3B,SAASA,EAAU92H,EAAME,EAAMD,EAAME,GAIjCtB,KAAKmB,KAAOA,EAIZnB,KAAKqB,KAAOA,EAIZrB,KAAKoB,KAAOA,EAIZpB,KAAKsB,KAAOA,EAkFhB,OA5EA22H,EAAU31H,UAAUR,SAAW,SAAUo2H,GACrC,OAAOl4H,KAAKm4H,WAAWD,EAAU,GAAIA,EAAU,KAMnDD,EAAU31H,UAAU81H,kBAAoB,SAAUC,GAC9C,OAAQr4H,KAAKmB,MAAQk3H,EAAUl3H,MAC3Bk3H,EAAUh3H,MAAQrB,KAAKqB,MACvBrB,KAAKoB,MAAQi3H,EAAUj3H,MACvBi3H,EAAU/2H,MAAQtB,KAAKsB,MAO/B22H,EAAU31H,UAAU61H,WAAa,SAAUhkH,EAAGC,GAC1C,OAAOpU,KAAKmB,MAAQgT,GAAKA,GAAKnU,KAAKqB,MAAQrB,KAAKoB,MAAQgT,GAAKA,GAAKpU,KAAKsB,MAM3E22H,EAAU31H,UAAUoc,OAAS,SAAU25G,GACnC,OAAQr4H,KAAKmB,MAAQk3H,EAAUl3H,MAC3BnB,KAAKoB,MAAQi3H,EAAUj3H,MACvBpB,KAAKqB,MAAQg3H,EAAUh3H,MACvBrB,KAAKsB,MAAQ+2H,EAAU/2H,MAK/B22H,EAAU31H,UAAUd,OAAS,SAAU62H,GAC/BA,EAAUl3H,KAAOnB,KAAKmB,OACtBnB,KAAKmB,KAAOk3H,EAAUl3H,MAEtBk3H,EAAUh3H,KAAOrB,KAAKqB,OACtBrB,KAAKqB,KAAOg3H,EAAUh3H,MAEtBg3H,EAAUj3H,KAAOpB,KAAKoB,OACtBpB,KAAKoB,KAAOi3H,EAAUj3H,MAEtBi3H,EAAU/2H,KAAOtB,KAAKsB,OACtBtB,KAAKsB,KAAO+2H,EAAU/2H,OAM9B22H,EAAU31H,UAAUowC,UAAY,WAC5B,OAAO1yC,KAAKsB,KAAOtB,KAAKoB,KAAO,GAKnC62H,EAAU31H,UAAUikH,QAAU,WAC1B,MAAO,CAACvmH,KAAKyyC,WAAYzyC,KAAK0yC,cAKlCulF,EAAU31H,UAAUmwC,SAAW,WAC3B,OAAOzyC,KAAKqB,KAAOrB,KAAKmB,KAAO,GAMnC82H,EAAU31H,UAAUP,WAAa,SAAUs2H,GACvC,OAAQr4H,KAAKmB,MAAQk3H,EAAUh3H,MAC3BrB,KAAKqB,MAAQg3H,EAAUl3H,MACvBnB,KAAKoB,MAAQi3H,EAAU/2H,MACvBtB,KAAKsB,MAAQ+2H,EAAUj3H,MAExB62H,EAzGmB,GAmHvB,SAASK,EAAen3H,EAAME,EAAMD,EAAME,EAAM+2H,GACnD,YAAkBjrH,IAAdirH,GACAA,EAAUl3H,KAAOA,EACjBk3H,EAAUh3H,KAAOA,EACjBg3H,EAAUj3H,KAAOA,EACjBi3H,EAAU/2H,KAAOA,EACV+2H,GAGA,IAAIJ,EAAU92H,EAAME,EAAMD,EAAME,GAG/C,wCChIA,KACIk0G,KAAM,EACNC,QAAS,EACTC,OAAQ,EAKRC,MAAO,EACPC,MAAO,wHCTX,EACY,SADZ,EAEgB,aAFhB,EAGc,wFCKP,SAAS2iB,EAAapsB,EAAQqsB,EAAYC,GAC7C,OAAO,SASGniB,EAAQnD,EAAY1+E,EAAMikG,EAAcC,GAC9C,GAAIriB,EAAQ,CACR,IAAIsiB,EAAYJ,EAAa,EAAI/jG,EAAK,GAAK0+E,EACvC0lB,EAAaL,EAAa,EAAI/jG,EAAK,GAAK0+E,EACxC2lB,EAASH,EAAkBA,EAAgB,GAAK,EAChDI,EAASJ,EAAkBA,EAAgB,GAAK,EAChDx3H,EAAOgrG,EAAO,GAAKysB,EAAY,EAAIE,EACnCz3H,EAAO8qG,EAAO,GAAKysB,EAAY,EAAIE,EACnC13H,EAAO+qG,EAAO,GAAK0sB,EAAa,EAAIE,EACpCz3H,EAAO6qG,EAAO,GAAK0sB,EAAa,EAAIE,EAGpC53H,EAAOE,IAEPA,EADAF,GAAQE,EAAOF,GAAQ,GAGvBC,EAAOE,IAEPA,EADAF,GAAQE,EAAOF,GAAQ,GAG3B,IAAI+S,GAAI,QAAMmiG,EAAO,GAAIn1G,EAAME,GAC3B+S,GAAI,QAAMkiG,EAAO,GAAIl1G,EAAME,GAC3B03H,EAAQ,GAAK7lB,EAUjB,OARIulB,GAAgBD,IAChBtkH,IACK6kH,EAAQp6H,KAAKC,IAAI,EAAID,KAAKM,IAAI,EAAGiC,EAAOm1G,EAAO,IAAM0iB,GAClDA,EAAQp6H,KAAKC,IAAI,EAAID,KAAKM,IAAI,EAAGo3G,EAAO,GAAKj1G,GAAQ23H,GAC7D5kH,IACK4kH,EAAQp6H,KAAKC,IAAI,EAAID,KAAKM,IAAI,EAAGkC,EAAOk1G,EAAO,IAAM0iB,GAClDA,EAAQp6H,KAAKC,IAAI,EAAID,KAAKM,IAAI,EAAGo3G,EAAO,GAAKh1G,GAAQ03H,IAE1D,CAAC7kH,EAAGC,KAWhB,SAAS6kH,EAAK3iB,GACjB,OAAOA,4BClDX,SAAS4iB,EAA6B/lB,EAAY9/D,EAAW8lF,EAAcC,GACvE,IAAIC,GAAc,QAAShmF,GAAa8lF,EAAa,GACjDG,GAAc,QAAUjmF,GAAa8lF,EAAa,GACtD,OAAIC,EACOx6H,KAAKQ,IAAI+zG,EAAYv0G,KAAKM,IAAIm6H,EAAaC,IAE/C16H,KAAKQ,IAAI+zG,EAAYv0G,KAAKQ,IAAIi6H,EAAaC,IActD,SAASC,EAA2BpmB,EAAYqmB,EAAeC,GAC3D,IAAI/7H,EAASkB,KAAKQ,IAAI+zG,EAAYqmB,GAYlC,OAVA97H,GACIkB,KAAKC,IAAI,EAFD,GAEaD,KAAKM,IAAI,EAAGi0G,EAAaqmB,EAAgB,IAFtD,GAGJ,EACJC,IACA/7H,EAASkB,KAAKM,IAAIxB,EAAQ+7H,GAC1B/7H,GACIkB,KAAKC,IAAI,EAPL,GAOiBD,KAAKM,IAAI,EAAGu6H,EAAgBtmB,EAAa,IAP1D,GASA,IAEL,QAAMz1G,EAAQ+7H,EAAgB,EAAmB,EAAhBD,GAmGrC,SAASE,EAAuBF,EAAeC,EAAeE,EAAYC,EAAeC,GAC5F,OAAO,SAQG1mB,EAAYjvF,EAAWuQ,EAAMikG,GACnC,QAAmBtrH,IAAf+lG,EAA0B,CAC1B,IAAI2mB,EAAeF,EACbV,EAA6BM,EAAeI,EAAenlG,EAAMolG,GACjEL,EAEN,YAD4BpsH,IAAfusH,GAA2BA,IACxBjB,EAGTa,EAA2BpmB,EAAY2mB,EAAcL,IAFjD,QAAMtmB,EAAYsmB,EAAeK,SCrKhDroB,mCADJC,GACID,EAAgB,SAAU7+F,EAAGjT,GAI7B,OAHA8xG,EAAgB/oG,OAAOipG,gBAClB,CAAE3pF,UAAW,cAAgB/gB,OAAS,SAAU2L,EAAGjT,GAAKiT,EAAEoV,UAAYroB,IACvE,SAAUiT,EAAGjT,GAAK,IAAK,IAAIqB,KAAKrB,EAAO+I,OAAOpG,UAAUqiB,eAAe/U,KAAKjQ,EAAGqB,KAAI4R,EAAE5R,GAAKrB,EAAEqB,KACzFywG,EAAc7+F,EAAGjT,IAErB,SAAUiT,EAAGjT,GAChB,GAAiB,oBAANA,GAA0B,OAANA,EAC3B,MAAM,IAAI6jB,UAAU,uBAAyB6G,OAAO1qB,GAAK,iCAE7D,SAASiyG,IAAO5xG,KAAKwL,YAAcoH,EADnC6+F,EAAc7+F,EAAGjT,GAEjBiT,EAAEtQ,UAAkB,OAAN3C,EAAa+I,OAAOojC,OAAOnsC,IAAMiyG,EAAGtvG,UAAY3C,EAAE2C,UAAW,IAAIsvG,KAiRnFsP,EAAsB,SAAUnP,GAKhC,SAASmP,EAAK9O,GACV,IAAI34E,EAAQs4E,EAAOniG,KAAK5P,OAASA,KAIjCy5B,EAAMghC,GAINhhC,EAAM44E,KAIN54E,EAAM6hC,GACN,IAAI70D,GAAU,QAAO,GAAI2rG,GAqEzB,OAhEA34E,EAAMsgG,OAAS,CAAC,EAAG,GAKnBtgG,EAAMugG,YAAc,GAKpBvgG,EAAMwgG,oBAMNxgG,EAAMygG,aAAc,QAAiBzzH,EAAQmnG,WAAY,aAKzDn0E,EAAM0gG,cAAgB,CAAC,IAAK,KAK5B1gG,EAAM2gG,cAAgB,KAKtB3gG,EAAM4gG,kBAKN5gG,EAAM6gG,gBAKN7gG,EAAM8gG,YAAc,KAKpB9gG,EAAM+gG,gBAKN/gG,EAAMghG,cAKNhhG,EAAMihG,mBAAgBttH,EAClB3G,EAAQ6vG,SACR7vG,EAAQ6vG,QAAS,QAAmB7vG,EAAQ6vG,OAAQ78E,EAAMygG,cAE1DzzH,EAAQ0lG,SACR1lG,EAAQ0lG,QAAS,QAAe1lG,EAAQ0lG,OAAQ1yE,EAAMygG,cAE1DzgG,EAAMkhG,cAAcl0H,GACbgzB,EAquCX,OA5zCAi4E,EAAUwP,EAAMnP,GA6FhBmP,EAAK5+G,UAAUq4H,cAAgB,SAAUl0H,GAIrC,IACIm0H,EA8vCL,SAAoCn0H,GACvC,IAAIo0H,EACArB,EACAC,EAGAqB,EAAiB,GACjBC,EAAoB,EACpBC,OAA8B5tH,IAApB3G,EAAQu0H,QAAwBv0H,EAAQu0H,QA37CnC,EA47CfC,OAA8B7tH,IAApB3G,EAAQw0H,QAAwBx0H,EAAQw0H,QAAUH,EAC5DI,OAAoC9tH,IAAvB3G,EAAQy0H,WAA2Bz0H,EAAQy0H,WAAaH,EACrEI,OAAoC/tH,IAAvB3G,EAAQ00H,YAA2B10H,EAAQ00H,WACxD1C,OAAgDrrH,IAAvC3G,EAAQ20H,4BACf30H,EAAQ20H,2BAEVhC,OAA4ChsH,IAA3B3G,EAAQ2yH,gBAA+B3yH,EAAQ2yH,eAChExrB,GAAa,QAAiBnnG,EAAQmnG,WAAY,aAClDytB,EAAaztB,EAAW6F,YACxB6nB,EAAsB70H,EAAQ60H,oBAC9BnvB,EAAS1lG,EAAQ0lG,OAChBgvB,GAAehvB,IAAUyB,EAAW2tB,aACrCD,GAAsB,EACtBnvB,EAASkvB,GAEb,QAA4BjuH,IAAxB3G,EAAQ+0H,YAA2B,CACnC,IAAIA,EAAc/0H,EAAQ+0H,YAC1BhC,EAAgBgC,EAAYR,GAC5BvB,OAC6BrsH,IAAzBouH,EAAYP,GACNO,EAAYP,GACZO,EAAYA,EAAYj9H,OAAS,GAEvCs8H,EADAp0H,EAAQotH,oBDjmDb,SAAiC2H,EAAa7B,EAAYC,EAAeC,GAC5E,OAAO,SAQG1mB,EAAYjvF,EAAWuQ,EAAMikG,GACnC,QAAmBtrH,IAAf+lG,EAA0B,CAC1B,IAAIqmB,EAAgBgC,EAAY,GAC5B/B,EAAgB+B,EAAYA,EAAYj9H,OAAS,GACjDu7H,EAAeF,EACbV,EAA6BM,EAAeI,EAAenlG,EAAMolG,GACjEL,EAEN,GAAId,EAEA,YAD4BtrH,IAAfusH,GAA2BA,EAIjCJ,EAA2BpmB,EAAY2mB,EAAcL,IAFjD,QAAMtmB,EAAYsmB,EAAeK,GAIhD,IAAI2B,EAAS78H,KAAKQ,IAAI06H,EAAc3mB,GAChCx0G,EAAIC,KAAKO,OAAM,QAAkBq8H,EAAaC,EAAQv3G,IAC1D,OAAIs3G,EAAY78H,GAAKm7H,GAAgBn7H,EAAI68H,EAAYj9H,OAAS,EACnDi9H,EAAY78H,EAAI,GAEpB68H,EAAY78H,KCqkDI+8H,CAAwBF,EAAa/C,GAAS6C,GAAuBnvB,EAAQitB,GAG7EM,EAAuBF,EAAeC,EAAehB,GAAS6C,GAAuBnvB,EAAQitB,OAGvH,CAED,IAIIuC,GAJQN,EAGNz8H,KAAKM,KAAI,QAASm8H,IAAa,QAAUA,IADtC,IAAM,KAAgBO,EAAA,YAAkBhuB,EAAWiuB,oBAE1B,IAAoBj9H,KAAKyF,IAAI02H,EA/9ChD,GAg+CXe,EAAuBH,EACvB/8H,KAAKyF,IAAI02H,EAAmBD,EAj+CjB,QAo+CO1tH,KADtBosH,EAAgB/yH,EAAQ+yH,eAEpBwB,EAAU,EAGVxB,EAAgBmC,EAAuB/8H,KAAKyF,IAAI62H,EAAYF,QAI1C5tH,KADtBqsH,EAAgBhzH,EAAQgzH,iBAIZA,OAFgBrsH,IAApB3G,EAAQw0H,aACsB7tH,IAA1B3G,EAAQ+yH,cACQA,EAAgB56H,KAAKyF,IAAI62H,EAAYD,GAGrCU,EAAuB/8H,KAAKyF,IAAI62H,EAAYD,GAIhDa,GAIxBb,EACID,EACIp8H,KAAKO,MAAMP,KAAKC,IAAI26H,EAAgBC,GAAiB76H,KAAKC,IAAIq8H,IACtEzB,EAAgBD,EAAgB56H,KAAKyF,IAAI62H,EAAYD,EAAUD,GAE3DH,EADAp0H,EAAQotH,oBDhmDb,SAA2BkI,EAAOvC,EAAewC,EAAmBrC,EAAYC,EAAeC,GAClG,OAAO,SAQG1mB,EAAYjvF,EAAWuQ,EAAMikG,GACnC,QAAmBtrH,IAAf+lG,EAA0B,CAC1B,IAAI2mB,EAAeF,EACbV,EAA6BM,EAAeI,EAAenlG,EAAMolG,GACjEL,EACFC,OAAsCrsH,IAAtB4uH,EAAkCA,EAAoB,EAE1E,GAAItD,EAEA,YAD4BtrH,IAAfusH,GAA2BA,EAIjCJ,EAA2BpmB,EAAY2mB,EAAcL,IAFjD,QAAMtmB,EAAYsmB,EAAeK,GAIhD,IACImC,EAAer9H,KAAKuB,KAAKvB,KAAKC,IAAI26H,EAAgBM,GAAgBl7H,KAAKC,IAAIk9H,GAD/D,MAEZjjC,GAAU50E,GAAa,GAFX,MAE8B,GAC1Cu3G,EAAS78H,KAAKQ,IAAI06H,EAAc3mB,GAChC+oB,EAAkBt9H,KAAKO,MAAMP,KAAKC,IAAI26H,EAAgBiC,GAAU78H,KAAKC,IAAIk9H,GAASjjC,GAClFqjC,EAAYv9H,KAAKM,IAAI+8H,EAAcC,GACnCE,EAAgB5C,EAAgB56H,KAAKyF,IAAI03H,EAAOI,GACpD,OAAO,QAAMC,EAAe3C,EAAeK,KCmkDpBuC,CAAkBnB,EAAY1B,EAAeC,EAAehB,GAAS6C,GAAuBnvB,EAAQitB,GAGpGM,EAAuBF,EAAeC,EAAehB,GAAS6C,GAAuBnvB,EAAQitB,GAG5H,MAAO,CACHkD,WAAYzB,EACZrB,cAAeA,EACfC,cAAeA,EACfuB,QAASA,EACTE,WAAYA,GAr1CmBqB,CAA2B91H,GAK1DzG,KAAKw8H,eAAiB5B,EAAyBpB,cAK/Cx5H,KAAKy8H,eAAiB7B,EAAyBnB,cAK/Cz5H,KAAK08H,YAAc9B,EAAyBM,WAK5Cl7H,KAAK28H,aAAel2H,EAAQ+0H,YAK5Bx7H,KAAK48H,SAAWn2H,EAAQo2H,QAKxB78H,KAAK88H,SAAWlC,EAAyBI,QACzC,IAAI+B,EA0sCL,SAAgCt2H,GACnC,QAAuB2G,IAAnB3G,EAAQ0lG,OAAsB,CAC9B,IAAIssB,OAA4CrrH,IAAnC3G,EAAQu2H,wBACfv2H,EAAQu2H,uBAEd,OAAOzE,EAAa9xH,EAAQ0lG,OAAQ1lG,EAAQ60H,oBAAqB7C,GAErE,IAAI7qB,GAAa,QAAiBnnG,EAAQmnG,WAAY,aACtD,IAA2B,IAAvBnnG,EAAQ00H,YAAuBvtB,EAAW2tB,WAAY,CACtD,IAAIpvB,EAASyB,EAAW6F,YAAYvwG,QAGpC,OAFAipG,EAAO,IAAMxuG,EAAAA,EACbwuG,EAAO,GAAKxuG,EAAAA,EACL46H,EAAapsB,GAAQ,GAAO,GAEvC,OAAO,EAxtCoB8wB,CAAuBx2H,GAC1Co0H,EAAuBD,EAAyB0B,WAChDY,EA2zCL,SAAkCz2H,GAErC,QADgD2G,IAA3B3G,EAAQ02H,gBAA+B12H,EAAQ02H,eAChD,CAChB,IAAIC,EAAoB32H,EAAQ22H,kBAChC,YAA0BhwH,IAAtBgwH,IAAyD,IAAtBA,GAC5B,WAEoB,IAAtBA,EACE,KAE2B,kBAAtBA,GACL,QAAcA,GAGd,KAIX,OAAO,KA70CkBC,CAAyB52H,GAKlDzG,KAAKs9H,aAAe,CAChBhnB,OAAQymB,EACR5pB,WAAY0nB,EACZxkB,SAAU6mB,GAEdl9H,KAAK4tH,iBAAiCxgH,IAArB3G,EAAQ4vG,SAAyB5vG,EAAQ4vG,SAAW,GACrEr2G,KAAKu9H,uBAAqCnwH,IAAnB3G,EAAQ6vG,OAAuB7vG,EAAQ6vG,OAAS,WAC5ClpG,IAAvB3G,EAAQ0sG,WACRnzG,KAAKw9H,cAAc/2H,EAAQ0sG,iBAEL/lG,IAAjB3G,EAAQuvH,MACbh2H,KAAKy9H,QAAQh3H,EAAQuvH,MAEzBh2H,KAAK2jH,cApDY,IAyDjB3jH,KAAK09H,SAAWj3H,GAEpBiC,OAAOC,eAAeu4G,EAAK5+G,UAAW,UAAW,CAU7CslB,IAAK,WACD,OAAO5nB,KAAK48H,UAEhB1hH,IAAK,SAAU2hH,GACX,IAAIc,EAAa39H,KAAK48H,SACtB58H,KAAK48H,SAAWC,EAChB,IAAIvmB,EAASt2G,KAAK49H,YAClB,GAAItnB,EAAQ,CACR,IAAIunB,EAAahB,GAAW,CAAC,EAAG,EAAG,EAAG,GACtCc,EAAaA,GAAc,CAAC,EAAG,EAAG,EAAG,GACrC,IAAIxqB,EAAanzG,KAAK4zG,gBAClBkqB,EAAW3qB,EAAa,GACvB0qB,EAAW,GAAKF,EAAW,GAAKA,EAAW,GAAKE,EAAW,IAC5DE,EAAW5qB,EAAa,GACvB0qB,EAAW,GAAKF,EAAW,GAAKA,EAAW,GAAKE,EAAW,IAChE79H,KAAKu9H,kBAAkB,CAACjnB,EAAO,GAAKwnB,EAASxnB,EAAO,GAAKynB,MAGjElmH,YAAY,EACZxH,cAAc,IAUlB6wG,EAAK5+G,UAAU07H,mBAAqB,SAAUC,GAC1C,IAAIx3H,GAAU,QAAO,GAAIzG,KAAK09H,UAY9B,YAV2BtwH,IAAvB3G,EAAQ0sG,WACR1sG,EAAQ0sG,WAAanzG,KAAK4zG,gBAG1BntG,EAAQuvH,KAAOh2H,KAAKk+H,UAGxBz3H,EAAQ6vG,OAASt2G,KAAKqvH,oBAEtB5oH,EAAQ4vG,SAAWr2G,KAAK0tH,eACjB,QAAO,GAAIjnH,EAASw3H,IAmC/B/c,EAAK5+G,UAAU6lH,QAAU,SAAUgW,GAC3Bn+H,KAAKopH,UAAYppH,KAAKooH,gBACtBpoH,KAAKqoH,mBAAmB,GAG5B,IADA,IAAI3kG,EAAO,IAAIzc,MAAMkJ,UAAU5R,QACtBe,EAAI,EAAGA,EAAIokB,EAAKnlB,SAAUe,EAAG,CAClC,IAAImH,EAAU0J,UAAU7Q,GACpBmH,EAAQ6vG,UACR7vG,GAAU,QAAO,GAAIA,IACb6vG,QAAS,QAAmB7vG,EAAQ6vG,OAAQt2G,KAAK4lH,kBAEzDn/G,EAAQunH,UACRvnH,GAAU,QAAO,GAAIA,IACbunH,QAAS,QAAmBvnH,EAAQunH,OAAQhuH,KAAK4lH,kBAE7DliG,EAAKpkB,GAAKmH,EAEdzG,KAAKwvH,gBAAgBtrH,MAAMlE,KAAM0jB,IAKrCw9F,EAAK5+G,UAAUktH,gBAAkB,SAAU2O,GACvC,IACItyH,EADAuyH,EAAiBjuH,UAAU5R,OAE3B6/H,EAAiB,GACwB,oBAAlCjuH,UAAUiuH,EAAiB,KAClCvyH,EAAWsE,UAAUiuH,EAAiB,KACpCA,GAGN,IADA,IAAI9+H,EAAI,EACDA,EAAI8+H,IAAmBp+H,KAAKopH,UAAW9pH,EAAG,CAE7C,IAAI+zG,EAAQljG,UAAU7Q,GAClB+zG,EAAMiD,QACNt2G,KAAKu9H,kBAAkBlqB,EAAMiD,aAEdlpG,IAAfimG,EAAM2iB,KACNh2H,KAAKy9H,QAAQpqB,EAAM2iB,MAEd3iB,EAAMF,YACXnzG,KAAKw9H,cAAcnqB,EAAMF,iBAEN/lG,IAAnBimG,EAAMgD,UACNr2G,KAAK4tH,YAAYva,EAAMgD,UAG/B,GAAI/2G,IAAM8+H,EAAV,CAWA,IALA,IAAI9/G,EAAQpI,KAAK0rG,MACbtL,EAASt2G,KAAKo6H,cAAcl3H,QAC5BiwG,EAAanzG,KAAKq6H,kBAClBhkB,EAAWr2G,KAAKs6H,gBAChB+D,EAAS,GACN/+H,EAAI8+H,IAAkB9+H,EAAG,CAC5B,IAAImH,EAA2C0J,UAAU7Q,GACrDg/H,EAAY,CACZhgH,MAAOA,EACPigH,UAAU,EACVvQ,OAAQvnH,EAAQunH,OAChB97B,cAA+B9kF,IAArB3G,EAAQyrF,SAAyBzrF,EAAQyrF,SAAW,IAC9Dy7B,OAAQlnH,EAAQknH,QAAU,KAC1B9hH,SAAUA,GAiBd,GAfIpF,EAAQ6vG,SACRgoB,EAAUE,aAAeloB,EACzBgoB,EAAUG,aAAeh4H,EAAQ6vG,OAAOpzG,QACxCozG,EAASgoB,EAAUG,mBAEFrxH,IAAjB3G,EAAQuvH,MACRsI,EAAUI,iBAAmBvrB,EAC7BmrB,EAAUK,iBAAmB3+H,KAAK4+H,qBAAqBn4H,EAAQuvH,MAC/D7iB,EAAamrB,EAAUK,kBAElBl4H,EAAQ0sG,aACbmrB,EAAUI,iBAAmBvrB,EAC7BmrB,EAAUK,iBAAmBl4H,EAAQ0sG,WACrCA,EAAamrB,EAAUK,uBAEFvxH,IAArB3G,EAAQ4vG,SAAwB,CAChCioB,EAAUO,eAAiBxoB,EAC3B,IAAI5d,GAAQ,QAAOhyF,EAAQ4vG,SAAWA,EAAWz3G,KAAK2J,GAAI,EAAI3J,KAAK2J,IAAM3J,KAAK2J,GAC9E+1H,EAAUQ,eAAiBzoB,EAAW5d,EACtC4d,EAAWioB,EAAUQ,eAGrBC,EAAgBT,GAChBA,EAAUC,UAAW,EAIrBjgH,GAASggH,EAAUpsC,SAEvBmsC,EAAOh8H,KAAKi8H,GAEhBt+H,KAAKg6H,YAAY33H,KAAKg8H,GACtBr+H,KAAKg/H,QAAQ/W,EAAA,YAAoB,GACjCjoH,KAAKi/H,yBArDGpzH,GACAqzH,EAAkBrzH,GAAU,IA2DxCq1G,EAAK5+G,UAAU8lH,aAAe,WAC1B,OAAOpoH,KAAK+5H,OAAO9R,EAAA,aAAsB,GAO7C/G,EAAK5+G,UAAU68H,eAAiB,WAC5B,OAAOn/H,KAAK+5H,OAAO9R,EAAA,eAAwB,GAM/C/G,EAAK5+G,UAAUstH,iBAAmB,WAE9B,IAAI5B,EADJhuH,KAAKg/H,QAAQ/W,EAAA,aAAqBjoH,KAAK+5H,OAAO9R,EAAA,cAE9C,IAAK,IAAI3oH,EAAI,EAAGiS,EAAKvR,KAAKg6H,YAAYz7H,OAAQe,EAAIiS,IAAMjS,EAAG,CACvD,IAAI++H,EAASr+H,KAAKg6H,YAAY16H,GAI9B,GAHI++H,EAAO,GAAGxyH,UACVqzH,EAAkBb,EAAO,GAAGxyH,UAAU,IAErCmiH,EACD,IAAK,IAAIzuH,EAAI,EAAG6sH,EAAKiS,EAAO9/H,OAAQgB,EAAI6sH,IAAM7sH,EAAG,CAC7C,IAAI++H,EAAYD,EAAO9+H,GACvB,IAAK++H,EAAUC,SAAU,CACrBvQ,EAASsQ,EAAUtQ,OACnB,QAKhBhuH,KAAKg6H,YAAYz7H,OAAS,EAC1ByB,KAAK06H,cAAgB1M,EACrBhuH,KAAKu6H,YAAc,KACnBv6H,KAAKw6H,gBAAkBrtF,IACvBntC,KAAKy6H,cAAgBttF,KAKzB+zE,EAAK5+G,UAAU28H,kBAAoB,WAK/B,QAJiC7xH,IAA7BpN,KAAKi6H,sBACLzR,qBAAqBxoH,KAAKi6H,qBAC1Bj6H,KAAKi6H,yBAAsB7sH,GAE1BpN,KAAKooH,eAAV,CAKA,IAFA,IAAIxG,EAAM1rG,KAAK0rG,MACXwd,GAAO,EACF9/H,EAAIU,KAAKg6H,YAAYz7H,OAAS,EAAGe,GAAK,IAAKA,EAAG,CAGnD,IAFA,IAAI++H,EAASr+H,KAAKg6H,YAAY16H,GAC1B+/H,GAAiB,EACZ9/H,EAAI,EAAG6sH,EAAKiS,EAAO9/H,OAAQgB,EAAI6sH,IAAM7sH,EAAG,CAC7C,IAAI++H,EAAYD,EAAO9+H,GACvB,IAAI++H,EAAUC,SAAd,CAGA,IAAIe,EAAU1d,EAAM0c,EAAUhgH,MAC1BihH,EAAWjB,EAAUpsC,SAAW,EAAIotC,EAAUhB,EAAUpsC,SAAW,EACnEqtC,GAAY,GACZjB,EAAUC,UAAW,EACrBgB,EAAW,GAGXF,GAAiB,EAErB,IAAIG,EAAWlB,EAAU3Q,OAAO4R,GAChC,GAAIjB,EAAUE,aAAc,CACxB,IAAInqH,EAAKiqH,EAAUE,aAAa,GAC5BlqH,EAAKgqH,EAAUE,aAAa,GAC5BjqH,EAAK+pH,EAAUG,aAAa,GAC5BjqH,EAAK8pH,EAAUG,aAAa,GAChCz+H,KAAKu6H,YAAc+D,EAAUG,aAC7B,IAAItqH,EAAIE,EAAKmrH,GAAYjrH,EAAKF,GAC1BD,EAAIE,EAAKkrH,GAAYhrH,EAAKF,GAC9BtU,KAAKo6H,cAAgB,CAACjmH,EAAGC,GAE7B,GAAIkqH,EAAUI,kBAAoBJ,EAAUK,iBAAkB,CAC1D,IAAIxrB,EAA0B,IAAbqsB,EACXlB,EAAUK,iBACVL,EAAUI,iBACRc,GACKlB,EAAUK,iBAAmBL,EAAUI,kBACpD,GAAIJ,EAAUtQ,OAAQ,CAClB,IAAIv5F,EAAOz0B,KAAKy/H,iBAAiBz/H,KAAK0tH,eAClCgS,EAAwB1/H,KAAKs9H,aAAanqB,WAAWA,EAAY,EAAG1+E,GAAM,GAC9Ez0B,KAAKo6H,cAAgBp6H,KAAK2/H,oBAAoBD,EAAuBpB,EAAUtQ,QAEnFhuH,KAAKw6H,gBAAkB8D,EAAUK,iBACjC3+H,KAAKq6H,kBAAoBlnB,EACzBnzG,KAAK4/H,mBAAkB,GAE3B,QAAiCxyH,IAA7BkxH,EAAUO,qBACmBzxH,IAA7BkxH,EAAUQ,eAA8B,CACxC,IAAIzoB,EAAwB,IAAbmpB,GACT,QAAOlB,EAAUQ,eAAiBlgI,KAAK2J,GAAI,EAAI3J,KAAK2J,IAClD3J,KAAK2J,GACP+1H,EAAUO,eACRW,GACKlB,EAAUQ,eAAiBR,EAAUO,gBAClD,GAAIP,EAAUtQ,OAAQ,CAClB,IAAI6R,EAAsB7/H,KAAKs9H,aAAajnB,SAASA,GAAU,GAC/Dr2G,KAAKo6H,cAAgBp6H,KAAK8/H,sBAAsBD,EAAqBvB,EAAUtQ,QAEnFhuH,KAAKy6H,cAAgB6D,EAAUQ,eAC/B9+H,KAAKs6H,gBAAkBjkB,EAI3B,GAFAr2G,KAAK4/H,mBAAkB,GACvBR,GAAO,GACFd,EAAUC,SACX,OAGR,GAAIc,EAAgB,CAChBr/H,KAAKg6H,YAAY16H,GAAK,KACtBU,KAAKg/H,QAAQ/W,EAAA,aAAqB,GAClCjoH,KAAKu6H,YAAc,KACnBv6H,KAAKw6H,gBAAkBrtF,IACvBntC,KAAKy6H,cAAgBttF,IACrB,IAAIthC,EAAWwyH,EAAO,GAAGxyH,SACrBA,GACAqzH,EAAkBrzH,GAAU,IAKxC7L,KAAKg6H,YAAch6H,KAAKg6H,YAAYx/E,OAAO9xB,SACvC02G,QAAqChyH,IAA7BpN,KAAKi6H,sBACbj6H,KAAKi6H,oBAAsBnR,sBAAsB9oH,KAAKi/H,kBAAkBzvH,KAAKxP,UAQrFkhH,EAAK5+G,UAAUw9H,sBAAwB,SAAUzpB,EAAU2X,GACvD,IAAI1X,EACAypB,EAAgB//H,KAAKqvH,oBAMzB,YALsBjiH,IAAlB2yH,IACAzpB,EAAS,CAACypB,EAAc,GAAK/R,EAAO,GAAI+R,EAAc,GAAK/R,EAAO,KAClE,QAAiB1X,EAAQD,EAAWr2G,KAAK0tH,gBACzC,QAAcpX,EAAQ0X,IAEnB1X,GAOX4K,EAAK5+G,UAAUq9H,oBAAsB,SAAUxsB,EAAY6a,GACvD,IAAI1X,EACAypB,EAAgB//H,KAAKqvH,oBACrB2Q,EAAoBhgI,KAAK4zG,qBACPxmG,IAAlB2yH,QAAqD3yH,IAAtB4yH,IAK/B1pB,EAAS,CAJD0X,EAAO,GACV7a,GAAc6a,EAAO,GAAK+R,EAAc,IAAOC,EAC5ChS,EAAO,GACV7a,GAAc6a,EAAO,GAAK+R,EAAc,IAAOC,IAGxD,OAAO1pB,GAQX4K,EAAK5+G,UAAUm9H,iBAAmB,SAAUQ,GACxC,IAAIxrG,EAAOz0B,KAAKm6H,cAChB,GAAI8F,EAAc,CACd,IAAI34F,EAAI7S,EAAK,GACT+R,EAAI/R,EAAK,GACb,MAAO,CACH71B,KAAKoiB,IAAIsmB,EAAI1oC,KAAKqkE,IAAIg9D,IAClBrhI,KAAKoiB,IAAIwlB,EAAI5nC,KAAKgnE,IAAIq6D,IAC1BrhI,KAAKoiB,IAAIsmB,EAAI1oC,KAAKgnE,IAAIq6D,IAClBrhI,KAAKoiB,IAAIwlB,EAAI5nC,KAAKqkE,IAAIg9D,KAI9B,OAAOxrG,GAUfysF,EAAK5+G,UAAUgoH,gBAAkB,SAAU4V,GACvClgI,KAAKm6H,cAAgBlzH,MAAMC,QAAQg5H,GAC7BA,EAASh9H,QACT,CAAC,IAAK,KACPlD,KAAKooH,gBACNpoH,KAAKqoH,mBAAmB,IAShCnH,EAAK5+G,UAAUs7H,UAAY,WACvB,IAAItnB,EAASt2G,KAAKqvH,oBAClB,OAAK/Y,GAGE,QAAiBA,EAAQt2G,KAAK4lH,iBAF1BtP,GAQf4K,EAAK5+G,UAAU+sH,kBAAoB,WAC/B,OAAsErvH,KAAK4nB,IAAIu4G,IAKnFjf,EAAK5+G,UAAU0tH,eAAiB,WAC5B,OAAOhwH,KAAKs9H,cAKhBpc,EAAK5+G,UAAUqyH,uBAAyB,WACpC,OAAO30H,KAAK09H,SAAS7J,qBAMzB3S,EAAK5+G,UAAU+mH,SAAW,SAAU+W,GAChC,YAAkBhzH,IAAdgzH,GACAA,EAAU,GAAKpgI,KAAK+5H,OAAO,GAC3BqG,EAAU,GAAKpgI,KAAK+5H,OAAO,GACpBqG,GAGApgI,KAAK+5H,OAAO72H,SAa3Bg+G,EAAK5+G,UAAU+9H,gBAAkB,SAAUH,GACvC,IAAI/zB,EAASnsG,KAAKsgI,wBAAwBJ,GAC1C,OAAO,QAAa/zB,EAAQnsG,KAAK4lH,kBAOrC1E,EAAK5+G,UAAUg+H,wBAA0B,SAAUJ,GAC/C,IAAIzrG,EAAOyrG,GAAYlgI,KAAKugI,+BACxBjqB,EAA+Dt2G,KAAKqvH,qBACxE,OAAO/Y,EAAQ,GACf,IAAInD,EAAqCnzG,KAAK4zG,iBAC9C,YAAsBxmG,IAAf+lG,EAA0B,GACjC,IAAIkD,EAAmCr2G,KAAK0tH,cAE5C,OADA,YAAoBtgH,IAAbipG,EAAwB,IACxB,QAAkBC,EAAQnD,EAAYkD,EAAU5hF,IAO3DysF,EAAK5+G,UAAUk+H,iBAAmB,WAC9B,OAAOxgI,KAAKw8H,gBAOhBtb,EAAK5+G,UAAUm+H,iBAAmB,WAC9B,OAAOzgI,KAAKy8H,gBAOhBvb,EAAK5+G,UAAUo+H,WAAa,WACxB,OAA8B1gI,KAAK2gI,qBAAqB3gI,KAAKy8H,iBAOjEvb,EAAK5+G,UAAUs+H,WAAa,SAAU5K,GAClCh2H,KAAK26H,cAAc36H,KAAKg+H,mBAAmB,CAAE/C,QAASjF,MAO1D9U,EAAK5+G,UAAUu+H,WAAa,WACxB,OAA8B7gI,KAAK2gI,qBAAqB3gI,KAAKw8H,iBAOjEtb,EAAK5+G,UAAUw+H,WAAa,SAAU9K,GAClCh2H,KAAK26H,cAAc36H,KAAKg+H,mBAAmB,CAAEhD,QAAShF,MAO1D9U,EAAK5+G,UAAUy+H,uBAAyB,SAAUC,GAC9ChhI,KAAK26H,cAAc36H,KAAKg+H,mBAAmB,CAAEnK,oBAAqBmN,MAOtE9f,EAAK5+G,UAAUsjH,cAAgB,WAC3B,OAAO5lH,KAAKk6H,aAQhBhZ,EAAK5+G,UAAUsxG,cAAgB,WAC3B,OAAwC5zG,KAAK4nB,IAAIu4G,IAQrDjf,EAAK5+G,UAAU2+H,eAAiB,WAC5B,OAAOjhI,KAAK28H,cAUhBzb,EAAK5+G,UAAU4+H,uBAAyB,SAAU/0B,EAAQ+zB,GACtD,OAAOlgI,KAAK0xH,gCAA+B,QAAevlB,EAAQnsG,KAAK4lH,iBAAkBsa,IAS7Fhf,EAAK5+G,UAAUovH,+BAAiC,SAAUvlB,EAAQ+zB,GAC9D,IAAIzrG,EAAOyrG,GAAYlgI,KAAKugI,+BACxBlH,GAAc,QAASltB,GAAU13E,EAAK,GACtC6kG,GAAc,QAAUntB,GAAU13E,EAAK,GAC3C,OAAO71B,KAAKM,IAAIm6H,EAAaC,IAQjCpY,EAAK5+G,UAAU6+H,8BAAgC,SAAUC,GACrD,IAAIrF,EAAQqF,GAAa,EACrB5H,EAAgBx5H,KAAKqhI,yBAAyBrhI,KAAKw8H,gBACnD/C,EAAgBz5H,KAAKy8H,eACrBv9H,EAAMN,KAAKC,IAAI26H,EAAgBC,GAAiB76H,KAAKC,IAAIk9H,GAC7D,OAAO,SAKGnzH,GAEN,OADiB4wH,EAAgB56H,KAAKyF,IAAI03H,EAAOnzH,EAAQ1J,KAUjEgiH,EAAK5+G,UAAUorH,YAAc,WACzB,OAA8B1tH,KAAK4nB,IAAIu4G,IAQ3Cjf,EAAK5+G,UAAUg/H,8BAAgC,SAAUF,GACrD,IAAIG,EAAW3iI,KAAKC,IAAIuiI,GAAa,GACjC5H,EAAgBx5H,KAAKqhI,yBAAyBrhI,KAAKw8H,gBACnD/C,EAAgBz5H,KAAKy8H,eACrBv9H,EAAMN,KAAKC,IAAI26H,EAAgBC,GAAiB8H,EACpD,OAAO,SAKGpuB,GAEN,OADYv0G,KAAKC,IAAI26H,EAAgBrmB,GAAcouB,EAAWriI,IAUtEgiH,EAAK5+G,UAAUi+H,6BAA+B,SAAUN,GACpD,IAAIxrG,EAAOz0B,KAAKy/H,iBAAiBQ,GAC7BpD,EAAU78H,KAAK48H,SAOnB,OANIC,IACApoG,EAAO,CACHA,EAAK,GAAKooG,EAAQ,GAAKA,EAAQ,GAC/BpoG,EAAK,GAAKooG,EAAQ,GAAKA,EAAQ,KAGhCpoG,GAKXysF,EAAK5+G,UAAUuxG,SAAW,WACtB,IAAIjG,EAAa5tG,KAAK4lH,gBAClBzS,EAAanzG,KAAK4zG,gBAClByC,EAAWr2G,KAAK0tH,cAChBpX,EAA8Dt2G,KAAKqvH,oBACnEwN,EAAU78H,KAAK48H,SACnB,GAAIC,EAAS,CACT,IAAI2E,EAAcxhI,KAAKugI,+BACvBjqB,EAASmrB,EAAkBnrB,EAAQt2G,KAAKy/H,mBAAoB,CAAC+B,EAAY,GAAK,EAAI3E,EAAQ,GAAI2E,EAAY,GAAK,EAAI3E,EAAQ,IAAK1pB,EAAYkD,GAEhJ,MAAO,CACHC,OAAQA,EAAOpzG,MAAM,GACrB0qG,gBAA2BxgG,IAAfwgG,EAA2BA,EAAa,KACpDuF,WAAYA,EACZqW,WAAYxpH,KAAKu6H,YACjB9Q,eAAgBzpH,KAAKw6H,gBACrB9Q,aAAc1pH,KAAKy6H,cACnBpkB,SAAUA,EACV2f,KAAMh2H,KAAKk+H,YAUnBhd,EAAK5+G,UAAU47H,QAAU,WACrB,IAAIlI,EACA7iB,EAAanzG,KAAK4zG,gBAItB,YAHmBxmG,IAAf+lG,IACA6iB,EAAOh2H,KAAK2gI,qBAAqBxtB,IAE9B6iB,GAQX9U,EAAK5+G,UAAUq+H,qBAAuB,SAAUxtB,GAC5C,IACIj0G,EAAKg8H,EADLpiC,EAAS94F,KAAK88H,UAAY,EAE9B,GAAI98H,KAAK28H,aAAc,CACnB,IAAI+E,GAAU,QAAkB1hI,KAAK28H,aAAcxpB,EAAY,GAC/Dra,EAAS4oC,EACTxiI,EAAMc,KAAK28H,aAAa+E,GAEpBxG,EADAwG,GAAW1hI,KAAK28H,aAAap+H,OAAS,EACzB,EAGAW,EAAMc,KAAK28H,aAAa+E,EAAU,QAInDxiI,EAAMc,KAAKw8H,eACXtB,EAAal7H,KAAK08H,YAEtB,OAAO5jC,EAASl6F,KAAKC,IAAIK,EAAMi0G,GAAcv0G,KAAKC,IAAIq8H,IAQ1Dha,EAAK5+G,UAAUs8H,qBAAuB,SAAU5I,GAC5C,GAAIh2H,KAAK28H,aAAc,CACnB,GAAI38H,KAAK28H,aAAap+H,QAAU,EAC5B,OAAO,EAEX,IAAIojI,GAAY,QAAM/iI,KAAKO,MAAM62H,GAAO,EAAGh2H,KAAK28H,aAAap+H,OAAS,GAClE28H,EAAal7H,KAAK28H,aAAagF,GAAa3hI,KAAK28H,aAAagF,EAAY,GAC9E,OAAQ3hI,KAAK28H,aAAagF,GACtB/iI,KAAKyF,IAAI62H,GAAY,QAAMlF,EAAO2L,EAAW,EAAG,IAGpD,OAAQ3hI,KAAKw8H,eAAiB59H,KAAKyF,IAAIrE,KAAK08H,YAAa1G,EAAOh2H,KAAK88H,WAa7E5b,EAAK5+G,UAAUs/H,IAAM,SAAUC,EAAkBzvB,GAE7C,IAAIvrG,EAIJ,IAHA,OAAOI,MAAMC,QAAQ26H,IAEb,oBADqB,EAAwC,sBACjD,IAChB56H,MAAMC,QAAQ26H,GAAmB,EACjC,SAAQ,QAAQA,GAAmB,IACnC,IAAI11B,GAAS,QAAe01B,EAAkB7hI,KAAK4lH,iBACnD/+G,GAAW,QAAkBslG,QAE5B,GAAI01B,EAAiBz5E,YAAc05E,EAAA,SAAqB,CACrD31B,GAAS,QAAe01B,EAAiBpuB,YAAazzG,KAAK4lH,kBAC/D/+G,GAAW,QAAkBslG,IACpBgqB,OAAOn2H,KAAK0tH,eAAe,QAAUvhB,QAE7C,CACD,IAAI41B,GAAiB,UAEjBl7H,EADAk7H,EACsEF,EACjE90F,QACAi0C,UAAU+gD,EAAgB/hI,KAAK4lH,iBAGzBic,EAGnB7hI,KAAK2xH,YAAY9qH,EAAUurG,IAO/B8O,EAAK5+G,UAAUmvH,yBAA2B,SAAU5qH,GAUhD,IATA,IAAIwvG,EAAWr2G,KAAK0tH,cAChBsU,EAAWpjI,KAAKqkE,IAAIozC,GACpB4rB,EAAWrjI,KAAKgnE,KAAKywC,GACrBlsG,EAAStD,EAASq7H,qBAClBC,EAASt7H,EAASu7H,YAClBC,EAAW1kI,EAAAA,EACX2kI,EAAW3kI,EAAAA,EACX4kI,GAAW5kI,EAAAA,EACX6kI,GAAW7kI,EAAAA,EACN2B,EAAI,EAAGiS,EAAKpH,EAAO5L,OAAQe,EAAIiS,EAAIjS,GAAK6iI,EAAQ,CACrD,IAAIM,EAAOt4H,EAAO7K,GAAK0iI,EAAW73H,EAAO7K,EAAI,GAAK2iI,EAC9CS,EAAOv4H,EAAO7K,GAAK2iI,EAAW93H,EAAO7K,EAAI,GAAK0iI,EAClDK,EAAUzjI,KAAKQ,IAAIijI,EAASI,GAC5BH,EAAU1jI,KAAKQ,IAAIkjI,EAASI,GAC5BH,EAAU3jI,KAAKM,IAAIqjI,EAASE,GAC5BD,EAAU5jI,KAAKM,IAAIsjI,EAASE,GAEhC,MAAO,CAACL,EAASC,EAASC,EAASC,IAMvCthB,EAAK5+G,UAAUqvH,YAAc,SAAU9qH,EAAUurG,GAC7C,IAAI3rG,EAAU2rG,GAAe,GACzB39E,EAAOhuB,EAAQguB,KACdA,IACDA,EAAOz0B,KAAKugI,gCAEhB,IAEI9G,EAFAoD,OAA8BzvH,IAApB3G,EAAQo2H,QAAwBp2H,EAAQo2H,QAAU,CAAC,EAAG,EAAG,EAAG,GACtE6E,OAA8Bt0H,IAApB3G,EAAQi7H,SAAwBj7H,EAAQi7H,QAGlDjI,OAD0BrsH,IAA1B3G,EAAQgzH,cACQhzH,EAAQgzH,mBAECrsH,IAApB3G,EAAQw0H,QACGj7H,KAAK4+H,qBAAqBn4H,EAAQw0H,SAGlC,EAEpB,IAAIzJ,EAAgBxxH,KAAKyxH,yBAAyB5qH,GAE9CssG,EAAanzG,KAAK0xH,+BAA+BF,EAAe,CAChE/8F,EAAK,GAAKooG,EAAQ,GAAKA,EAAQ,GAC/BpoG,EAAK,GAAKooG,EAAQ,GAAKA,EAAQ,KAEnC1pB,EAAa1qG,MAAM0qG,GACbsmB,EACA76H,KAAKM,IAAIi0G,EAAYsmB,GAC3BtmB,EAAanzG,KAAKqhI,yBAAyBluB,EAAYuuB,EAAU,EAAI,GAErE,IAAIrrB,EAAWr2G,KAAK0tH,cAChBuU,EAAWrjI,KAAKgnE,IAAIywC,GACpB2rB,EAAWpjI,KAAKqkE,IAAIozC,GACpBssB,GAAY,QAAUnR,GAC1BmR,EAAU,KAAQ9F,EAAQ,GAAKA,EAAQ,IAAM,EAAK1pB,EAClDwvB,EAAU,KAAQ9F,EAAQ,GAAKA,EAAQ,IAAM,EAAK1pB,EAClD,IAAIyvB,EAAUD,EAAU,GAAKX,EAAWW,EAAU,GAAKV,EACnDY,EAAUF,EAAU,GAAKX,EAAWW,EAAU,GAAKV,EACnD3rB,EAASt2G,KAAKyvH,qBAAqB,CAACmT,EAASC,GAAU1vB,GACvDtnG,EAAWpF,EAAQoF,SAAWpF,EAAQoF,SAAW,UAC5BuB,IAArB3G,EAAQyrF,SACRlyF,KAAKwvH,gBAAgB,CACjBrc,WAAYA,EACZmD,OAAQA,EACRpkB,SAAUzrF,EAAQyrF,SAClBy7B,OAAQlnH,EAAQknH,QACjB9hH,IAGH7L,KAAKq6H,kBAAoBlnB,EACzBnzG,KAAKo6H,cAAgB9jB,EACrBt2G,KAAK4/H,mBAAkB,GAAO,GAC9BV,EAAkBrzH,GAAU,KAUpCq1G,EAAK5+G,UAAUwgI,SAAW,SAAUvuF,EAAY9f,EAAMykF,GAClDl5G,KAAK+iI,kBAAiB,QAAmBxuF,EAAYv0C,KAAK4lH,iBAAkBnxF,EAAMykF,IAOtFgI,EAAK5+G,UAAUygI,iBAAmB,SAAUxuF,EAAY9f,EAAMykF,GAC1Dl5G,KAAKu9H,kBAAkBkE,EAAkBltF,EAAY9f,EAAMykF,EAAUl5G,KAAK4zG,gBAAiB5zG,KAAK0tH,iBAUpGxM,EAAK5+G,UAAU0gI,qBAAuB,SAAU1sB,EAAQnD,EAAYkD,EAAU5hF,GAC1E,IAAIwuG,EACApG,EAAU78H,KAAK48H,SACnB,GAAIC,GAAWvmB,EAAQ,CACnB,IAAIkrB,EAAcxhI,KAAKugI,8BAA8BlqB,GACjD6sB,EAAgBzB,EAAkBnrB,EAAQ7hF,EAAM,CAAC+sG,EAAY,GAAK,EAAI3E,EAAQ,GAAI2E,EAAY,GAAK,EAAI3E,EAAQ,IAAK1pB,EAAYkD,GACpI4sB,EAAc,CACV3sB,EAAO,GAAK4sB,EAAc,GAC1B5sB,EAAO,GAAK4sB,EAAc,IAGlC,OAAOD,GAKX/hB,EAAK5+G,UAAU8mH,MAAQ,WACnB,QAASppH,KAAKqvH,0BAAgDjiH,IAAzBpN,KAAK4zG,iBAO9CsN,EAAK5+G,UAAU6gI,aAAe,SAAUC,GACpC,IAAI9sB,GAAS,QAAiBt2G,KAAKo6H,cAAep6H,KAAK4lH,iBACvD5lH,KAAKqjI,UAAU,CACX/sB,EAAO,GAAK8sB,EAAiB,GAC7B9sB,EAAO,GAAK8sB,EAAiB,MAOrCliB,EAAK5+G,UAAU2sH,qBAAuB,SAAUmU,GAC5C,IAAI9sB,EAASt2G,KAAKo6H,cAClBp6H,KAAKu9H,kBAAkB,CACnBjnB,EAAO,GAAK8sB,EAAiB,GAC7B9sB,EAAO,GAAK8sB,EAAiB,MAUrCliB,EAAK5+G,UAAUghI,iBAAmB,SAAUtK,EAAOuK,GAC/C,IAAIvV,EAASuV,IAAc,QAAmBA,EAAYvjI,KAAK4lH,iBAC/D5lH,KAAK+1H,yBAAyBiD,EAAOhL,IAQzC9M,EAAK5+G,UAAUyzH,yBAA2B,SAAUiD,EAAOuK,GACvD,IAAIC,EAAWxjI,KAAKooH,gBAAkBpoH,KAAKm/H,iBACvC1qG,EAAOz0B,KAAKy/H,iBAAiBz/H,KAAK0tH,eAClC0O,EAAgBp8H,KAAKs9H,aAAanqB,WAAWnzG,KAAKq6H,kBAAoBrB,EAAO,EAAGvkG,EAAM+uG,GACtFD,IACAvjI,KAAKo6H,cAAgBp6H,KAAK2/H,oBAAoBvD,EAAemH,IAEjEvjI,KAAKq6H,mBAAqBrB,EAC1Bh5H,KAAK4/H,qBAST1e,EAAK5+G,UAAUsyH,WAAa,SAAUn8B,EAAO8qC,GACzCvjI,KAAKsjI,iBAAiB1kI,KAAKyF,IAAIrE,KAAK08H,aAAcjkC,GAAQ8qC,IAS9DriB,EAAK5+G,UAAUmhI,eAAiB,SAAUhrC,EAAO8qC,GACzCA,IACAA,GAAa,QAAmBA,EAAYvjI,KAAK4lH,kBAErD5lH,KAAKkwH,uBAAuBz3B,EAAO8qC,IAMvCriB,EAAK5+G,UAAU4tH,uBAAyB,SAAUz3B,EAAO8qC,GACrD,IAAIC,EAAWxjI,KAAKooH,gBAAkBpoH,KAAKm/H,iBACvCuE,EAAc1jI,KAAKs9H,aAAajnB,SAASr2G,KAAKs6H,gBAAkB7hC,EAAO+qC,GACvED,IACAvjI,KAAKo6H,cAAgBp6H,KAAK8/H,sBAAsB4D,EAAaH,IAEjEvjI,KAAKs6H,iBAAmB7hC,EACxBz4F,KAAK4/H,qBAQT1e,EAAK5+G,UAAU+gI,UAAY,SAAU/sB,GACjCt2G,KAAKu9H,mBAAkB,QAAmBjnB,EAAQt2G,KAAK4lH,mBAM3D1E,EAAK5+G,UAAUi7H,kBAAoB,SAAUjnB,GACzCt2G,KAAKo6H,cAAgB9jB,EACrBt2G,KAAK4/H,qBAOT1e,EAAK5+G,UAAU08H,QAAU,SAAU2E,EAAMlrC,GAGrC,OAFAz4F,KAAK+5H,OAAO4J,IAASlrC,EACrBz4F,KAAKuzG,UACEvzG,KAAK+5H,OAAO4J,IAQvBziB,EAAK5+G,UAAUk7H,cAAgB,SAAUrqB,GACrCnzG,KAAKq6H,kBAAoBlnB,EACzBnzG,KAAK4/H,qBAQT1e,EAAK5+G,UAAUsrH,YAAc,SAAUvX,GACnCr2G,KAAKs6H,gBAAkBjkB,EACvBr2G,KAAK4/H,qBAOT1e,EAAK5+G,UAAUm7H,QAAU,SAAUzH,GAC/Bh2H,KAAKw9H,cAAcx9H,KAAK4+H,qBAAqB5I,KAUjD9U,EAAK5+G,UAAUs9H,kBAAoB,SAAUgE,EAAsBC,GAC/D,IAAIL,EAAWxjI,KAAKooH,gBAAkBpoH,KAAKm/H,kBAAoB0E,EAE3DH,EAAc1jI,KAAKs9H,aAAajnB,SAASr2G,KAAKs6H,gBAAiBkJ,GAC/D/uG,EAAOz0B,KAAKy/H,iBAAiBiE,GAC7BtH,EAAgBp8H,KAAKs9H,aAAanqB,WAAWnzG,KAAKq6H,kBAAmB,EAAG5lG,EAAM+uG,GAC9EM,EAAY9jI,KAAKs9H,aAAahnB,OAAOt2G,KAAKo6H,cAAegC,EAAe3nG,EAAM+uG,EAAUxjI,KAAKgjI,qBAAqBhjI,KAAKo6H,cAAegC,EAAesH,EAAajvG,IAClKz0B,KAAK4nB,IAAIu4G,KAA2BuD,GACpC1jI,KAAKkb,IAAIilH,EAAuBuD,GAEhC1jI,KAAK4nB,IAAIu4G,KAA6B/D,GACtCp8H,KAAKkb,IAAIilH,EAAyB/D,GAEjCp8H,KAAK4nB,IAAIu4G,KACT,QAAOngI,KAAK4nB,IAAIu4G,GAAsB2D,IACvC9jI,KAAKkb,IAAIilH,EAAqB2D,GAE9B9jI,KAAKooH,iBAAmBwb,GACxB5jI,KAAK4vH,mBAET5vH,KAAK06H,mBAAgBttH,GAWzB8zG,EAAK5+G,UAAU+lH,mBAAqB,SAAU0b,EAAcC,EAAyBT,GACjF,IAAIrxC,OAA4B9kF,IAAjB22H,EAA6BA,EAAe,IACvD7/G,EAAY8/G,GAA2B,EACvCN,EAAc1jI,KAAKs9H,aAAajnB,SAASr2G,KAAKs6H,iBAC9C7lG,EAAOz0B,KAAKy/H,iBAAiBiE,GAC7BtH,EAAgBp8H,KAAKs9H,aAAanqB,WAAWnzG,KAAKq6H,kBAAmBn2G,EAAWuQ,GAChFqvG,EAAY9jI,KAAKs9H,aAAahnB,OAAOt2G,KAAKo6H,cAAegC,EAAe3nG,GAAM,EAAOz0B,KAAKgjI,qBAAqBhjI,KAAKo6H,cAAegC,EAAesH,EAAajvG,IACnK,GAAiB,IAAby9D,IAAmBlyF,KAAK06H,cAKxB,OAJA16H,KAAKq6H,kBAAoB+B,EACzBp8H,KAAKs6H,gBAAkBoJ,EACvB1jI,KAAKo6H,cAAgB0J,OACrB9jI,KAAK4/H,oBAGT,IAAI5R,EAASuV,IAA4B,IAAbrxC,EAAiBlyF,KAAK06H,mBAAgBttH,GAClEpN,KAAK06H,mBAAgBttH,EACjBpN,KAAK4zG,kBAAoBwoB,GACzBp8H,KAAK0tH,gBAAkBgW,GACtB1jI,KAAKqvH,sBACL,QAAOrvH,KAAKqvH,oBAAqByU,KAC9B9jI,KAAKooH,gBACLpoH,KAAK4vH,mBAET5vH,KAAKwvH,gBAAgB,CACjBnZ,SAAUqtB,EACVptB,OAAQwtB,EACR3wB,WAAYipB,EACZlqC,SAAUA,EACVy7B,OAAQ,KACRK,OAAQA,MAUpB9M,EAAK5+G,UAAUysH,iBAAmB,WAC9B/uH,KAAKqoH,mBAAmB,GACxBroH,KAAKg/H,QAAQ/W,EAAA,cAAsB,IAUvC/G,EAAK5+G,UAAUotH,eAAiB,SAAUqU,EAAcC,EAAyBT,GAC7E,IAAIvV,EAASuV,IAAc,QAAmBA,EAAYvjI,KAAK4lH,iBAC/D5lH,KAAKikI,uBAAuBF,EAAcC,EAAyBhW,IASvE9M,EAAK5+G,UAAU2hI,uBAAyB,SAAUF,EAAcC,EAAyBT,GACrFvjI,KAAKg/H,QAAQ/W,EAAA,eAAuB,GACpCjoH,KAAKqoH,mBAAmB0b,EAAcC,EAAyBT,IASnEriB,EAAK5+G,UAAUmtH,qBAAuB,SAAUgP,EAAcyF,GAC1D,IAAIzvG,EAAOz0B,KAAKy/H,iBAAiBz/H,KAAK0tH,eACtC,OAAO1tH,KAAKs9H,aAAahnB,OAAOmoB,EAAcyF,GAAwBlkI,KAAK4zG,gBAAiBn/E,IAWhGysF,EAAK5+G,UAAU6hI,mBAAqB,SAAUC,EAAYC,GACtD,IAAIC,EAAYtkI,KAAK4+H,qBAAqBwF,GAC1C,OAAOpkI,KAAK2gI,qBAAqB3gI,KAAKqhI,yBAAyBiD,EAAWD,KAW9EnjB,EAAK5+G,UAAU++H,yBAA2B,SAAU1C,EAAkB0F,GAClE,IAAIngH,EAAYmgH,GAAiB,EAC7B5vG,EAAOz0B,KAAKy/H,iBAAiBz/H,KAAK0tH,eACtC,OAAO1tH,KAAKs9H,aAAanqB,WAAWwrB,EAAkBz6G,EAAWuQ,IAE9DysF,EA7zCc,CA8zCvB,KAKF,SAASge,EAAkBrzH,EAAU04H,GACjC1nB,YAAW,WACPhxG,EAAS04H,KACV,GAmJA,SAASxF,EAAgBT,GAC5B,QAAIA,EAAUE,cAAgBF,EAAUG,gBAC/B,EAAAlqF,EAAA,IAAiB+pF,EAAUE,aAAcF,EAAUG,iBAIxDH,EAAUI,mBAAqBJ,EAAUK,kBAGzCL,EAAUO,iBAAmBP,EAAUQ,gBAa/C,SAAS2C,EAAkBltF,EAAY9f,EAAMykF,EAAU/F,EAAYkD,GAE/D,IAAI2rB,EAAWpjI,KAAKqkE,KAAKozC,GACrB4rB,EAAWrjI,KAAKgnE,KAAKywC,GACrBosB,EAAOluF,EAAW,GAAKytF,EAAWztF,EAAW,GAAK0tF,EAClDS,EAAOnuF,EAAW,GAAKytF,EAAWztF,EAAW,GAAK0tF,EAOtD,MAAO,EANPQ,IAAShuG,EAAK,GAAK,EAAIykF,EAAS,IAAM/F,GAIjB6uB,GAHrBU,IAASxpB,EAAS,GAAKzkF,EAAK,GAAK,GAAK0+E,IAEtC8uB,GAAYA,GAEES,EAAOV,EAAWS,EAAOR,GAG3C,0CCpxDA,KACIuC,UAAW,EACXC,YAAa,kJCWbC,EAAgB,oDAOhBC,EAAkB,4BAOf,SAASC,EAASz5F,GACrB,MAAqB,kBAAVA,EACAA,EAGA3zB,EAAS2zB,GAQxB,SAAS05F,EAAU15F,GACf,IAAI25F,EAAK/rB,SAASC,cAAc,OAEhC,GADA8rB,EAAG7rB,MAAM9tE,MAAQA,EACM,KAAnB25F,EAAG7rB,MAAM9tE,MAAc,CACvB4tE,SAASgsB,KAAKtiB,YAAYqiB,GAC1B,IAAIE,EAAMhb,iBAAiB8a,GAAI35F,MAE/B,OADA4tE,SAASgsB,KAAK/qB,YAAY8qB,GACnBE,EAGP,MAAO,GAOR,IAYCtrG,EAIAurG,EAhBGC,GAYHxrG,EAAQ,GAIRurG,EAAY,EACT,SAKGnmI,GACN,IAAIqsC,EACJ,GAAIzR,EAAM/U,eAAe7lB,GACrBqsC,EAAQzR,EAAM56B,OAEb,CACD,GAAImmI,GApBS,KAoBoB,CAC7B,IAAI3lI,EAAI,EACR,IAAK,IAAIkX,KAAOkjB,EACM,KAAP,EAANp6B,cACMo6B,EAAMljB,KACXyuH,GAId95F,EA2BZ,SAA6BrsC,GACzB,IAAIkjB,EAAGhV,EAAGrN,EAAGD,EAAGyrC,EAIhB,GAHIw5F,EAAgBzwF,KAAKp1C,KACrBA,EAAI+lI,EAAU/lI,IAEd4lI,EAAcxwF,KAAKp1C,GAAI,CAEvB,IAAIL,EAAIK,EAAEP,OAAS,EACfqU,OACH,EAEGA,EADAnU,GAAK,EACD,EAGA,EAER,IAAI0mI,EAAiB,IAAN1mI,GAAiB,IAANA,EAC1BujB,EAAI4H,SAAS9qB,EAAEqvC,OAAO,EAAI,EAAIv7B,EAAGA,GAAI,IACrC5F,EAAI4c,SAAS9qB,EAAEqvC,OAAO,EAAI,EAAIv7B,EAAGA,GAAI,IACrCjT,EAAIiqB,SAAS9qB,EAAEqvC,OAAO,EAAI,EAAIv7B,EAAGA,GAAI,IAEjClT,EADAylI,EACIv7G,SAAS9qB,EAAEqvC,OAAO,EAAI,EAAIv7B,EAAGA,GAAI,IAGjC,IAEC,GAALA,IACAoP,GAAKA,GAAK,GAAKA,EACfhV,GAAKA,GAAK,GAAKA,EACfrN,GAAKA,GAAK,GAAKA,EACXwlI,IACAzlI,GAAKA,GAAK,GAAKA,IAGvByrC,EAAQ,CAACnpB,EAAGhV,EAAGrN,EAAGD,EAAI,UAEK,GAAtBZ,EAAE4B,QAAQ,SAGfi8C,EADAxR,EAAQrsC,EAAEoE,MAAM,GAAI,GAAGovB,MAAM,KAAKpoB,IAAIkR,SAGZ,GAArBtc,EAAE4B,QAAQ,UAEfyqC,EAAQrsC,EAAEoE,MAAM,GAAI,GAAGovB,MAAM,KAAKpoB,IAAIkR,SAChC/Y,KAAK,GACXs6C,EAAUxR,KAGV,QAAO,EAAO,IAElB,OAAOA,EA7ESi6F,CAAoBtmI,GAC5B46B,EAAM56B,GAAKqsC,IACT85F,EAEN,OAAO95F,IAUR,SAASk6F,EAAQl6F,GACpB,OAAIlkC,MAAMC,QAAQikC,GACPA,EAGA+5F,EAAW/5F,GAiEnB,SAASwR,EAAUxR,GAKtB,OAJAA,EAAM,IAAK,QAAOA,EAAM,GAAK,GAAO,EAAG,EAAG,KAC1CA,EAAM,IAAK,QAAOA,EAAM,GAAK,GAAO,EAAG,EAAG,KAC1CA,EAAM,IAAK,QAAOA,EAAM,GAAK,GAAO,EAAG,EAAG,KAC1CA,EAAM,IAAK,QAAMA,EAAM,GAAI,EAAG,GACvBA,EAMJ,SAAS3zB,EAAS2zB,GACrB,IAAInpB,EAAImpB,EAAM,GACVnpB,IAAU,EAAJA,KACNA,EAAKA,EAAI,GAAO,GAEpB,IAAIhV,EAAIm+B,EAAM,GACVn+B,IAAU,EAAJA,KACNA,EAAKA,EAAI,GAAO,GAEpB,IAAIrN,EAAIwrC,EAAM,GAKd,OAJIxrC,IAAU,EAAJA,KACNA,EAAKA,EAAI,GAAO,GAGb,QAAUqiB,EAAI,IAAMhV,EAAI,IAAMrN,EAAI,UADpByN,IAAb+9B,EAAM,GAAmB,EAAIA,EAAM,IACQ,wFC7LhD,SAASm6F,EAAYn6F,GACxB,OAAIlkC,MAAMC,QAAQikC,IACP,QAASA,GAGTA,2CCxBPsmE,yDADJC,GACID,EAAgB,SAAU7+F,EAAGjT,GAI7B,OAHA8xG,EAAgB/oG,OAAOipG,gBAClB,CAAE3pF,UAAW,cAAgB/gB,OAAS,SAAU2L,EAAGjT,GAAKiT,EAAEoV,UAAYroB,IACvE,SAAUiT,EAAGjT,GAAK,IAAK,IAAIqB,KAAKrB,EAAO+I,OAAOpG,UAAUqiB,eAAe/U,KAAKjQ,EAAGqB,KAAI4R,EAAE5R,GAAKrB,EAAEqB,KACzFywG,EAAc7+F,EAAGjT,IAErB,SAAUiT,EAAGjT,GAChB,GAAiB,oBAANA,GAA0B,OAANA,EAC3B,MAAM,IAAI6jB,UAAU,uBAAyB6G,OAAO1qB,GAAK,iCAE7D,SAASiyG,IAAO5xG,KAAKwL,YAAcoH,EADnC6+F,EAAc7+F,EAAGjT,GAEjBiT,EAAEtQ,UAAkB,OAAN3C,EAAa+I,OAAOojC,OAAOnsC,IAAMiyG,EAAGtvG,UAAY3C,EAAE2C,UAAW,IAAIsvG,KA8CnFob,EAAyB,SAAUjb,GAKnC,SAASib,EAAQvmH,GACb,IAAIgzB,EAAQs4E,EAAOniG,KAAK5P,OAASA,KAC7B0mG,EAAUjgG,EAAQigG,QA8BtB,OA7BIA,GAAYjgG,EAAQ8c,QAAWmjF,EAAQuS,MAAMuJ,gBAC7C9b,EAAQuS,MAAMuJ,cAAgB,QAMlC/oF,EAAMitE,QAAUA,GAAoB,KAKpCjtE,EAAM8rG,QAAU,KAKhB9rG,EAAM6tB,KAAO,KAKb7tB,EAAM87E,aAAe,GACjB9uG,EAAQ4zG,SACR5gF,EAAM4gF,OAAS5zG,EAAQ4zG,QAEvB5zG,EAAQ8c,QACRkW,EAAMqrF,UAAUr+G,EAAQ8c,QAErBkW,EA+DX,OAnGAi4E,EAAUsb,EAASjb,GAyCnBib,EAAQ1qH,UAAUw3G,gBAAkB,YAChC,QAAW95G,KAAK0mG,SAChBqL,EAAOzvG,UAAUw3G,gBAAgBlqG,KAAK5P,OAO1CgtH,EAAQ1qH,UAAU+1G,OAAS,WACvB,OAAOr4G,KAAKsnD,MAShB0lE,EAAQ1qH,UAAUyhH,OAAS,SAAU75G,GAC7BlK,KAAKsnD,OACL,QAAWtnD,KAAK0mG,SAEpB,IAAK,IAAIpnG,EAAI,EAAGiS,EAAKvR,KAAKu1G,aAAah3G,OAAQe,EAAIiS,IAAMjS,GACrD,QAAcU,KAAKu1G,aAAaj2G,KAEpCU,KAAKu1G,aAAah3G,OAAS,EAC3ByB,KAAKsnD,KAAOp9C,EACRlK,KAAKsnD,SACQtnD,KAAKulI,QACZvlI,KAAKulI,QACLr7H,EAAIu8G,gCACHhE,YAAYziH,KAAK0mG,SACpB1mG,KAAKq6G,SAAW,MAChBr6G,KAAKu1G,aAAalzG,MAAK,QAAO6H,EAAK,eAAyBlK,KAAKq6G,OAAQr6G,OAE7EkK,EAAImwG,WAQZ2S,EAAQ1qH,UAAU+3G,OAAS,SAAU0S,KAUrCC,EAAQ1qH,UAAUwiH,UAAY,SAAUvhG,GACpCvjB,KAAKulI,QACiB,kBAAXhiH,EAAsBw1F,SAAS6H,eAAer9F,GAAUA,GAEhEypG,EApGiB,CAqG1B,KACF,8CC/JQvb,yDADJC,GACID,EAAgB,SAAU7+F,EAAGjT,GAI7B,OAHA8xG,EAAgB/oG,OAAOipG,gBAClB,CAAE3pF,UAAW,cAAgB/gB,OAAS,SAAU2L,EAAGjT,GAAKiT,EAAEoV,UAAYroB,IACvE,SAAUiT,EAAGjT,GAAK,IAAK,IAAIqB,KAAKrB,EAAO+I,OAAOpG,UAAUqiB,eAAe/U,KAAKjQ,EAAGqB,KAAI4R,EAAE5R,GAAKrB,EAAEqB,KACzFywG,EAAc7+F,EAAGjT,IAErB,SAAUiT,EAAGjT,GAChB,GAAiB,oBAANA,GAA0B,OAANA,EAC3B,MAAM,IAAI6jB,UAAU,uBAAyB6G,OAAO1qB,GAAK,iCAE7D,SAASiyG,IAAO5xG,KAAKwL,YAAcoH,EADnC6+F,EAAc7+F,EAAGjT,GAEjBiT,EAAEtQ,UAAkB,OAAN3C,EAAa+I,OAAOojC,OAAOnsC,IAAMiyG,EAAGtvG,UAAY3C,EAAE2C,UAAW,IAAIsvG,KAcnF4zB,EAAa,QAMN5J,EACE,UADFA,EAEG,WAFHA,EAGG,WAHHA,EAIC,SAJDA,EAKH,KAMJ6J,EAAiB,CAAC,EAAG,EAAG,GAKxBC,EAAc,KAAO,IAyCrBC,EAA2B,SAAU5zB,GAKrC,SAAS4zB,EAAUvzB,GACf,IAAI34E,EAAQz5B,KACRyG,EAAU2rG,GAA4B,GACtCiH,OAAkCjsG,IAAtB3G,EAAQ4yG,UAClB5yG,EAAQ4yG,UACR5yG,EAAQm/H,IACJ,eACA,gBAyEV,OAxEAnsG,EAAQs4E,EAAOniG,KAAK5P,KAAM,CACtB0mG,QAASqS,SAASC,cAAc,OAChCqB,OAAQ5zG,EAAQ4zG,OAChB92F,OAAQ9c,EAAQ8c,UACdvjB,MAIAy6D,GAINhhC,EAAM44E,KAIN54E,EAAM6hC,GAKN7hC,EAAMosG,cAAgB9sB,SAASC,cAAc,OAC7Cv/E,EAAMosG,cAAcxsB,UAAYA,EAAY,SAC5C5/E,EAAMitE,QAAQ2S,UAAYA,EAAY,IAAM,KAC5C5/E,EAAMitE,QAAQ+b,YAAYhpF,EAAMosG,eAKhCpsG,EAAMqsG,WAAa,KAKnBrsG,EAAMssG,eAAiC34H,IAArB3G,EAAQu/H,SAAyBv/H,EAAQu/H,SAAW,GAKtEvsG,EAAMkgF,kBAAmB,EAKzBlgF,EAAMwsG,oBAAiB74H,EAKvBqsB,EAAMysG,cAAgB,GACtBzsG,EAAM6pF,kBAAkBkiB,EAAY/rG,EAAM0sG,qBAC1C1sG,EAAM2sG,SAAS3/H,EAAQwB,OAAS2zH,GAKhCniG,EAAM4sG,UAAY5/H,EAAQm/H,MAAO,EAKjCnsG,EAAM6sG,eAAiB7/H,EAAQgsF,OAAS,EAKxCh5D,EAAM8sG,cAAgB9/H,EAAQ+/H,OAAQ,EAKtC/sG,EAAMgtG,KAAOhgI,EAAQigI,UAAOt5H,EACrBqsB,EAkTX,OAtYAi4E,EAAUi0B,EAAW5zB,GA6FrB4zB,EAAUrjI,UAAUqkI,SAAW,WAC3B,OAAO3mI,KAAK4nB,IAAI49G,IAKpBG,EAAUrjI,UAAU6jI,oBAAsB,WACtCnmI,KAAKssH,kBAQTqZ,EAAUrjI,UAAU8jI,SAAW,SAAUn+H,GACrCjI,KAAKkb,IAAIsqH,EAAYv9H,IAOzB09H,EAAUrjI,UAAUskI,OAAS,SAAUF,GACnC1mI,KAAKymI,KAAOC,GAKhBf,EAAUrjI,UAAUgqH,eAAiB,WACjC,IAAIpW,EAAYl2G,KAAK8lI,WACrB,GAAK5vB,EAAL,CAOA,IAAII,EAASJ,EAAUI,OACnB1I,EAAasI,EAAUtI,WACvB3lG,EAAQjI,KAAK2mI,WACbE,EAAuB5+H,GAAS2zH,EAAgB,aAAoB,YACpEkL,GAAkB,QAAmBl5B,EAAYsI,EAAU/C,WAAYmD,EAAQuwB,GAC/Eb,EAAYhmI,KAAK+lI,WAAa/lI,KAAKymI,MAAQf,GAAgBA,EAC3DqB,EAAef,EAAWc,EAC1BE,EAAS,GACb,GAAI/+H,GAAS2zH,EAAe,CACxB,IAAIqL,EAAkB,KAAgB,eACtCF,GAAgBE,GACGA,EAAkB,IACjCD,EAAS,SACTF,GAAmB,MAEdC,EAAeE,GACpBD,EAAS,SACTF,GAAmB,IAGnBE,EAAS,YAGR/+H,GAAS2zH,EACVmL,EAAe,OACfC,EAAS,KACTF,GAAmB,OAEdC,EAAe,UACpBC,EAAS,KACTF,GAAmB,QAGnBE,EAAS,KACTF,GAAmB,UAGlB7+H,GAAS2zH,GACdkL,GAAmB,KACnBE,EAAS,MAEJ/+H,GAAS2zH,EACVmL,EAAe,MACfC,EAAS,UACTF,GAAmB,KAEdC,EAAe,GACpBC,EAAS,KACTF,GAAmB,KAEdC,EAAe,IACpBC,EAAS,KAGTA,EAAS,KACTF,GAAmB,KAGlB7+H,GAAS2zH,EACVmL,EAAe,OACfC,EAAS,KACTF,GAAmB,OAEdC,EAAe,UACpBC,EAAS,KACTF,GAAmB,YAGnBE,EAAS,KACTF,GAAmB,YAIvB,QAAO,EAAO,IAIlB,IAFA,IACIpsH,EAAOy+F,EAAO+tB,EAgBdC,EAjBA7nI,EAAI,EAAIV,KAAKO,MAAMP,KAAKC,IAAImnI,EAAWc,GAAmBloI,KAAKC,IAAI,OAE1D,CACTqoI,EAAetoI,KAAKO,MAAMG,EAAI,GAC9B,IAAI8nI,EAAUxoI,KAAKyF,IAAI,GAAI6iI,GAG3B,GAFAxsH,EAAQ+qH,GAAiBnmI,EAAI,EAAK,GAAK,GAAK8nI,EAC5CjuB,EAAQv6G,KAAK4L,MAAMkQ,EAAQosH,GACvBr+H,MAAM0wG,GAGN,OAFAn5G,KAAK0mG,QAAQuS,MAAMsB,QAAU,YAC7Bv6G,KAAK25G,kBAAmB,GAGvB,GAAIR,GAAS6sB,EACd,QAEF1mI,EAIF6nI,EADAnnI,KAAKqmI,UACErmI,KAAKqnI,eAAeluB,EAAOz+F,EAAOssH,GAGlCtsH,EAAMiL,QAAQuhH,EAAe,GAAKA,EAAe,GAAK,IAAMF,EAEnEhnI,KAAKkmI,eAAiBiB,IACtBnnI,KAAK6lI,cAAcrZ,UAAY2a,EAC/BnnI,KAAKkmI,cAAgBiB,GAErBnnI,KAAKimI,gBAAkB9sB,IACvBn5G,KAAK6lI,cAAc5sB,MAAME,MAAQA,EAAQ,KACzCn5G,KAAKimI,eAAiB9sB,GAErBn5G,KAAK25G,mBACN35G,KAAK0mG,QAAQuS,MAAMsB,QAAU,GAC7Bv6G,KAAK25G,kBAAmB,QAnHpB35G,KAAK25G,mBACL35G,KAAK0mG,QAAQuS,MAAMsB,QAAU,OAC7Bv6G,KAAK25G,kBAAmB,IA2HpCgsB,EAAUrjI,UAAU+kI,eAAiB,SAAUluB,EAAO9mC,EAAO20D,GAKzD,IAJA,IAAIM,EAAW,OAAS1oI,KAAK4L,MAAMxK,KAAKunI,yBAAyBC,iBAC7DC,EAAa,GACbC,EAAYvuB,EAAQn5G,KAAKsmI,eACzBqB,EAAkB,UACbroI,EAAI,EAAGA,EAAIU,KAAKsmI,eAAgBhnI,IAC3B,IAANA,GAEAmoI,EAAWplI,KAAKrC,KAAK4nI,aAAa,WAAYtoI,IAElDmoI,EAAWplI,KAAK,sDAKZqlI,EALY,wBAQZC,EARY,YAYZ3nI,KAAK4nI,aAAa,WAAYtoI,IAE7BA,EAAI,IAAM,GAA6B,IAAxBU,KAAKsmI,eACftmI,KAAK6nI,eAAevoI,EAAG65G,GAAO,EAAO9mC,EAAO20D,GAC5C,IACN,UACA1nI,IAAMU,KAAKsmI,eAAiB,GAI5BmB,EAAWplI,KAAKrC,KAAK6nI,eAAevoI,EAAI,EAAG65G,GAAO,EAAM9mC,EAAO20D,IAI/DW,EADoB,YAApBA,EACkB,UAGA,UAsB1B,MALgB,gCAbZ3nI,KAAKumI,cAED,4CAGIptB,EACA,QACAmuB,EACA,SAGO,IAKfG,EAAWphI,KAAK,IAChB,UASRs/H,EAAUrjI,UAAUslI,aAAe,SAAU1uB,EAAU55G,GAEnD,MAAQ,sDAGJ45G,EAHI,UADe,aAAbA,EAA0B,GAAK,IAClC,eAmBXysB,EAAUrjI,UAAUulI,eAAiB,SAAUvoI,EAAG65G,EAAO2uB,EAAQz1D,EAAO20D,GACpE,IACIe,GADe,IAANzoI,EAAU,EAAIV,KAAK4L,MAAO6nE,EAAQryE,KAAKsmI,eAAkBhnI,EAAI,KAAO,MAC9C,IAANA,EAAU,GAAK,IAAM0nI,GAGlD,MAAQ,wDAFW,IAAN1nI,GAAW,EAAK65G,EAAQn5G,KAAKsmI,gBAAmB,GAErD,mBAOG,IAANhnI,EAAU,OAAS,UAPhB,iBADa,IAANA,EAAU,EAAK65G,EAAQn5G,KAAKsmI,eAAkB,GACrD,aAaHwB,EAAS3uB,EAAQ,KAAO,SAbrB,MAgBJ4uB,EACA,UAMRpC,EAAUrjI,UAAUilI,sBAAwB,WACxC,IAAIp0B,GAAa,QAAmBnzG,KAAK8lI,WAAWl4B,WAAY5tG,KAAK8lI,WAAW3yB,WAAYnzG,KAAK8lI,WAAWxvB,QACxGowB,EAAM1mI,KAAKymI,MAAQf,EACnBsC,EAAMhoI,KAAK8lI,WAAWl4B,WAAWiuB,mBAErC,OAAOlyG,WAAWwpF,EAAW37F,YAAcwwH,GADtB,IAAO,MACsCtB,GAOtEf,EAAUrjI,UAAU+3G,OAAS,SAAU0S,GACnC,IAAIjX,EAAaiX,EAASjX,WAKtB91G,KAAK8lI,WAJJhwB,EAIiBA,EAAWI,UAHX,KAKtBl2G,KAAKssH,kBAEFqZ,EAvYmB,CAwY5B,KACF,8CCjeQl0B,8CADJC,GACID,EAAgB,SAAU7+F,EAAGjT,GAI7B,OAHA8xG,EAAgB/oG,OAAOipG,gBAClB,CAAE3pF,UAAW,cAAgB/gB,OAAS,SAAU2L,EAAGjT,GAAKiT,EAAEoV,UAAYroB,IACvE,SAAUiT,EAAGjT,GAAK,IAAK,IAAIqB,KAAKrB,EAAO+I,OAAOpG,UAAUqiB,eAAe/U,KAAKjQ,EAAGqB,KAAI4R,EAAE5R,GAAKrB,EAAEqB,KACzFywG,EAAc7+F,EAAGjT,IAErB,SAAUiT,EAAGjT,GAChB,GAAiB,oBAANA,GAA0B,OAANA,EAC3B,MAAM,IAAI6jB,UAAU,uBAAyB6G,OAAO1qB,GAAK,iCAE7D,SAASiyG,IAAO5xG,KAAKwL,YAAcoH,EADnC6+F,EAAc7+F,EAAGjT,GAEjBiT,EAAEtQ,UAAkB,OAAN3C,EAAa+I,OAAOojC,OAAOnsC,IAAMiyG,EAAGtvG,UAAY3C,EAAE2C,UAAW,IAAIsvG,KAkCnFqkB,EAAsB,SAAUlkB,GAKhC,SAASkkB,EAAK7jB,GACV,IAAI34E,EAAQz5B,KACRyG,EAAU2rG,GAA4B,GAC1C34E,EAAQs4E,EAAOniG,KAAK5P,KAAM,CACtB0mG,QAASqS,SAASC,cAAc,OAChCz1F,OAAQ9c,EAAQ8c,UACdvjB,KACN,IAAIq5G,OAAkCjsG,IAAtB3G,EAAQ4yG,UAA0B5yG,EAAQ4yG,UAAY,UAClE5gB,OAA0BrrF,IAAlB3G,EAAQgyF,MAAsBhyF,EAAQgyF,MAAQ,EACtDwvC,OAA8C76H,IAA5B3G,EAAQwhI,gBACxBxhI,EAAQwhI,gBACR5uB,EAAY,MACd6uB,OAAgD96H,IAA7B3G,EAAQyhI,iBACzBzhI,EAAQyhI,iBACR7uB,EAAY,OACd8uB,OAAsC/6H,IAAxB3G,EAAQ0hI,YAA4B1hI,EAAQ0hI,YAAc,IACxEC,OAAwCh7H,IAAzB3G,EAAQ2hI,aAA6B3hI,EAAQ2hI,aAAe,SAC3EC,OAA4Cj7H,IAA3B3G,EAAQ4hI,eAA+B5hI,EAAQ4hI,eAAiB,UACjFC,OAA8Cl7H,IAA5B3G,EAAQ6hI,gBACxB7hI,EAAQ6hI,gBACR,WACFC,EAAYxvB,SAASC,cAAc,UACvCuvB,EAAUlvB,UAAY4uB,EACtBM,EAAU/c,aAAa,OAAQ,UAC/B+c,EAAU9c,MAAQ4c,EAClBE,EAAU9lB,YAAmC,kBAAhB0lB,EACvBpvB,SAASyvB,eAAeL,GACxBA,GACNI,EAAUjsB,iBAAiB,UAAiB7iF,EAAMiyF,aAAal8G,KAAKiqB,EAAOg/D,IAAQ,GACnF,IAAIgwC,EAAa1vB,SAASC,cAAc,UACxCyvB,EAAWpvB,UAAY6uB,EACvBO,EAAWjd,aAAa,OAAQ,UAChCid,EAAWhd,MAAQ6c,EACnBG,EAAWhmB,YAAoC,kBAAjB2lB,EACxBrvB,SAASyvB,eAAeJ,GACxBA,GACNK,EAAWnsB,iBAAiB,UAAiB7iF,EAAMiyF,aAAal8G,KAAKiqB,GAAQg/D,IAAQ,GACrF,IAAIkzB,EAAatS,EAAY,IAAM,KAAqB,IAAM,KAC1D3S,EAAUjtE,EAAMitE,QASpB,OARAA,EAAQ2S,UAAYsS,EACpBjlB,EAAQ+b,YAAY8lB,GACpB7hC,EAAQ+b,YAAYgmB,GAKpBhvG,EAAM4zF,eAAiCjgH,IAArB3G,EAAQyrF,SAAyBzrF,EAAQyrF,SAAW,IAC/Dz4D,EAyCX,OA5FAi4E,EAAUukB,EAAMlkB,GA0DhBkkB,EAAK3zH,UAAUopH,aAAe,SAAUjzB,EAAOn3D,GAC3CA,EAAM65E,iBACNn7G,KAAK0oI,aAAajwC,IAMtBw9B,EAAK3zH,UAAUomI,aAAe,SAAUjwC,GACpC,IACIb,EADM53F,KAAKq4G,SACAsN,UACf,GAAK/tB,EAAL,CAKA,IAAI+wC,EAAc/wC,EAAKsmC,UACvB,QAAoB9wH,IAAhBu7H,EAA2B,CAC3B,IAAIC,EAAUhxC,EAAKusC,mBAAmBwE,EAAclwC,GAChDz4F,KAAKqtH,UAAY,GACbz1B,EAAKwwB,gBACLxwB,EAAKg4B,mBAETh4B,EAAKuwB,QAAQ,CACT6N,KAAM4S,EACN12C,SAAUlyF,KAAKqtH,UACfM,OAAQ,QAIZ/1B,EAAK6lC,QAAQmL,MAIlB3S,EA7Fc,CA8FvB,KACF,8CCzIQxkB,wFADJC,GACID,EAAgB,SAAU7+F,EAAGjT,GAI7B,OAHA8xG,EAAgB/oG,OAAOipG,gBAClB,CAAE3pF,UAAW,cAAgB/gB,OAAS,SAAU2L,EAAGjT,GAAKiT,EAAEoV,UAAYroB,IACvE,SAAUiT,EAAGjT,GAAK,IAAK,IAAIqB,KAAKrB,EAAO+I,OAAOpG,UAAUqiB,eAAe/U,KAAKjQ,EAAGqB,KAAI4R,EAAE5R,GAAKrB,EAAEqB,KACzFywG,EAAc7+F,EAAGjT,IAErB,SAAUiT,EAAGjT,GAChB,GAAiB,oBAANA,GAA0B,OAANA,EAC3B,MAAM,IAAI6jB,UAAU,uBAAyB6G,OAAO1qB,GAAK,iCAE7D,SAASiyG,IAAO5xG,KAAKwL,YAAcoH,EADnC6+F,EAAc7+F,EAAGjT,GAEjBiT,EAAEtQ,UAAkB,OAAN3C,EAAa+I,OAAOojC,OAAOnsC,IAAMiyG,EAAGtvG,UAAY3C,EAAE2C,UAAW,IAAIsvG,KAgBnFi3B,EACU,EADVA,EAEY,EAmBZC,EAA4B,SAAU/2B,GAKtC,SAAS+2B,EAAW12B,GAChB,IAAI34E,EAAQz5B,KACRyG,EAAU2rG,GAA4B,IAC1C34E,EAAQs4E,EAAOniG,KAAK5P,KAAM,CACtB0mG,QAASqS,SAASC,cAAc,OAChCqB,OAAQ5zG,EAAQ4zG,UACdr6G,MAKA07G,kBAAoB,GAO1BjiF,EAAMsvG,wBAAqB37H,EAQ3BqsB,EAAMuvG,WAAaH,EAKnBpvG,EAAMgiF,UAKNhiF,EAAMwvG,aAAe,EAKrBxvG,EAAMyvG,YAAc,EAKpBzvG,EAAM0vG,QAKN1vG,EAAM2vG,QAON3vG,EAAM4vG,WAAa,KAMnB5vG,EAAM6vG,oBAAqB,EAK3B7vG,EAAM4zF,eAAiCjgH,IAArB3G,EAAQyrF,SAAyBzrF,EAAQyrF,SAAW,IACtE,IAAImnB,OAAkCjsG,IAAtB3G,EAAQ4yG,UAA0B5yG,EAAQ4yG,UAAY,gBAClEkwB,EAAexwB,SAASC,cAAc,UAC1CuwB,EAAa/d,aAAa,OAAQ,UAClC+d,EAAalwB,UAAYA,EAAY,UAAY,KACjD,IAAImwB,EAAmB/vG,EAAMitE,QAS7B,OARA8iC,EAAiBnwB,UACbA,EAAY,IAAM,KAAqB,IAAM,KACjDmwB,EAAiB/mB,YAAY8mB,GAC7BC,EAAiBltB,iBAAiB,gBAA8B7iF,EAAMgwG,oBAAoBj6H,KAAKiqB,IAAQ,GACvG+vG,EAAiBltB,iBAAiB,gBAA8B7iF,EAAMiwG,mBAAmBl6H,KAAKiqB,IAAQ,GACtG+vG,EAAiBltB,iBAAiB,cAA4B7iF,EAAMkwG,kBAAkBn6H,KAAKiqB,IAAQ,GACnG+vG,EAAiBltB,iBAAiB,UAAiB7iF,EAAMmwG,sBAAsBp6H,KAAKiqB,IAAQ,GAC5F8vG,EAAajtB,iBAAiB,UAAiB,MAAiB,GACzD7iF,EAwMX,OA/RAi4E,EAAUo3B,EAAY/2B,GAgGtB+2B,EAAWxmI,UAAUyhH,OAAS,SAAU75G,GACpC6nG,EAAOzvG,UAAUyhH,OAAOn0G,KAAK5P,KAAMkK,GAC/BA,GACAA,EAAImwG,UAWZyuB,EAAWxmI,UAAUunI,YAAc,WAC/B,IAAIvwB,EAAYt5G,KAAK0mG,QACjBojC,EAAiBxwB,EAAU2Q,YAC3B8f,EAAkBzwB,EAAU4Q,aAChC,GAAuB,IAAnB4f,GAA4C,IAApBC,EACxB,OAAQ/pI,KAAKspI,oBAAqB,EAEtC,IAAIU,EAAiBhgB,iBAAiB1Q,GACtCwwB,GACIngH,WAAWqgH,EAA6B,cACpCrgH,WAAWqgH,EAA4B,aAC/CD,GACIpgH,WAAWqgH,EAA2B,YAClCrgH,WAAWqgH,EAA8B,eACjD,IAAIC,EAAoC3wB,EAA2B,kBAC/D4wB,EAAalgB,iBAAiBigB,GAC9BE,EAAaF,EAAMhgB,YACnBtgG,WAAWugH,EAAwB,aACnCvgH,WAAWugH,EAAuB,YAClCE,EAAcH,EAAM/f,aACpBvgG,WAAWugH,EAAsB,WACjCvgH,WAAWugH,EAAyB,cAUxC,OATAlqI,KAAKqpI,WAAa,CAACc,EAAYC,GAC3BN,EAAiBC,GACjB/pI,KAAKgpI,WAAaH,EAClB7oI,KAAKkpI,YAAcY,EAAiBK,IAGpCnqI,KAAKgpI,WAAaH,EAClB7oI,KAAKipI,aAAec,EAAkBK,GAElCpqI,KAAKspI,oBAAqB,GAMtCR,EAAWxmI,UAAUsnI,sBAAwB,SAAUtoG,GACnD,IAAIs2D,EAAO53F,KAAKq4G,SAASsN,UACrB0kB,EAAmBrqI,KAAKsqI,qBAAqBhpG,EAAMw8F,QAAU99H,KAAKqpI,WAAW,GAAK,EAAG/nG,EAAMy8F,QAAU/9H,KAAKqpI,WAAW,GAAK,GAC1Hl2B,EAAanzG,KAAKuqI,0BAA0BF,GAC5CrU,EAAOp+B,EAAKusC,mBAAmBvsC,EAAK+oC,qBAAqBxtB,IAC7Dvb,EAAK43B,gBAAgB,CACjBwG,KAAMA,EACN9jC,SAAUlyF,KAAKqtH,UACfM,OAAQ,QAQhBmb,EAAWxmI,UAAUmnI,oBAAsB,SAAUnoG,GACjD,IAAKthC,KAAKy7G,WAAan6E,EAAM/d,SAAWvjB,KAAK0mG,QAAQ8jC,kBAAmB,CACpE,IAAI9jC,EAAsC1mG,KAAK0mG,QAAyB,kBAKxE,GAJA1mG,KAAKq4G,SAASsN,UAAUoJ,mBACxB/uH,KAAKmpI,QAAU7nG,EAAMq8E,QAAUh0F,WAAW+8E,EAAQuS,MAAM96G,MACxD6B,KAAKopI,QAAU9nG,EAAMs8E,QAAUj0F,WAAW+8E,EAAQuS,MAAMloG,KACxD/Q,KAAKy7G,WAAY,EACqB,IAAlCz7G,KAAK07G,kBAAkBn9G,OAAc,CACrC,IAAIksI,EAAOzqI,KAAK0pI,mBACZnrH,EAAMve,KAAK2pI,kBACXtsB,EAAMr9G,KAAKq4G,SAASiF,mBACxBt9G,KAAK07G,kBAAkBr5G,MAAK,QAAOg7G,EAAK,gBAA8BotB,EAAMzqI,OAAO,QAAOq9G,EAAK,cAA4B9+F,EAAKve,UAU5I8oI,EAAWxmI,UAAUonI,mBAAqB,SAAUpoG,GAChD,GAAIthC,KAAKy7G,UAAW,CAChB,IAAIuL,EAAS1lF,EAAMq8E,QAAU39G,KAAKmpI,QAC9BliB,EAAS3lF,EAAMs8E,QAAU59G,KAAKopI,QAC9BiB,EAAmBrqI,KAAKsqI,qBAAqBtjB,EAAQC,GACzDjnH,KAAK+oI,mBACD/oI,KAAKuqI,0BAA0BF,GACnCrqI,KAAKq4G,SAASsN,UAAU6X,cAAcx9H,KAAK+oI,sBAQnDD,EAAWxmI,UAAUqnI,kBAAoB,SAAUroG,GAC3CthC,KAAKy7G,YACMz7G,KAAKq4G,SAASsN,UACpB+J,iBACL1vH,KAAKy7G,WAAY,EACjBz7G,KAAKmpI,aAAU/7H,EACfpN,KAAKopI,aAAUh8H,EACfpN,KAAK07G,kBAAkBhwG,QAAQ,MAC/B1L,KAAK07G,kBAAkBn9G,OAAS,IASxCuqI,EAAWxmI,UAAUooI,kBAAoB,SAAUC,GAC/C,IAAIzxB,EAAWl5G,KAAK4qI,0BAA0BD,GAC1CV,EAAoCjqI,KAAK0mG,QAAyB,kBAClE1mG,KAAKgpI,YAAcH,EACnBoB,EAAMhxB,MAAM96G,KAAO6B,KAAKkpI,YAAchwB,EAAW,KAGjD+wB,EAAMhxB,MAAMloG,IAAM/Q,KAAKipI,aAAe/vB,EAAW,MAazD4vB,EAAWxmI,UAAUgoI,qBAAuB,SAAUn2H,EAAGC,GACrD,IAAIy2H,EAOJ,OALIA,EADA7qI,KAAKgpI,aAAeH,EACX10H,EAAInU,KAAKkpI,YAGT90H,EAAIpU,KAAKipI,cAEf,QAAM4B,EAAQ,EAAG,IAU5B/B,EAAWxmI,UAAUioI,0BAA4B,SAAUrxB,GAEvD,OADSl5G,KAAKq4G,SAASsN,UAAUwb,+BAC1BlpH,CAAG,EAAIihG,IAWlB4vB,EAAWxmI,UAAUsoI,0BAA4B,SAAUD,GACvD,IAAI1yH,EAAKjY,KAAKq4G,SAASsN,UAAU2b,gCACjC,OAAO,QAAM,EAAIrpH,EAAG0yH,GAAM,EAAG,IAOjC7B,EAAWxmI,UAAU+3G,OAAS,SAAU0S,GACpC,GAAKA,EAASjX,aAGT91G,KAAKspI,oBAAuBtpI,KAAK6pI,eAAtC,CAGA,IAAIc,EAAM5d,EAASjX,WAAWI,UAAU/C,WACxCnzG,KAAK+oI,mBAAqB4B,EAC1B3qI,KAAK0qI,kBAAkBC,KAEpB7B,EAhSoB,CAiS7B,KACF,0UClTO,SAAS11G,EAAImhB,EAAYkkD,GAG5B,OAFAlkD,EAAW,KAAOkkD,EAAM,GACxBlkD,EAAW,KAAOkkD,EAAM,GACjBlkD,EASJ,SAASu2F,EAAgBv2F,EAAY21D,GACxC,IAAIloF,EAAIkoF,EAAO6gC,YACXz0B,EAASpM,EAAO0zB,YAChBvpH,EAAKiiG,EAAO,GACZhiG,EAAKgiG,EAAO,GAGZriG,EAFKsgC,EAAW,GAENlgC,EACVH,EAFKqgC,EAAW,GAENjgC,EACH,IAAPL,GAAmB,IAAPC,IACZD,EAAK,GAET,IAAIrB,EAAIhU,KAAKK,KAAKgV,EAAKA,EAAKC,EAAKA,GAGjC,MAAO,CAFCG,EAAM2N,EAAI/N,EAAMrB,EAChB0B,EAAM0N,EAAI9N,EAAMtB,GAerB,SAASo4H,EAAiBz2F,EAAY/b,GACzC,IAaIrkB,EAAGC,EAbHC,EAAKkgC,EAAW,GAChBjgC,EAAKigC,EAAW,GAChBj2B,EAAQka,EAAQ,GAChBja,EAAMia,EAAQ,GACdjkB,EAAK+J,EAAM,GACX9J,EAAK8J,EAAM,GACX7J,EAAK8J,EAAI,GACT7J,EAAK6J,EAAI,GACTtK,EAAKQ,EAAKF,EACVL,EAAKQ,EAAKF,EACVgiF,EAAe,IAAPviF,GAAmB,IAAPC,EAClB,GACCD,GAAMI,EAAKE,GAAML,GAAMI,EAAKE,KAAQP,EAAKA,EAAKC,EAAKA,GAAM,GAchE,OAZIsiF,GAAS,GACTriF,EAAII,EACJH,EAAII,GAECgiF,GAAS,GACdriF,EAAIM,EACJL,EAAIM,IAGJP,EAAII,EAAKiiF,EAAQviF,EACjBG,EAAII,EAAKgiF,EAAQtiF,GAEd,CAACC,EAAGC,GAwHR,SAASsK,EAAOusH,EAAaC,GAEhC,IADA,IAAIxsH,GAAS,EACJpf,EAAI2rI,EAAY1sI,OAAS,EAAGe,GAAK,IAAKA,EAC3C,GAAI2rI,EAAY3rI,IAAM4rI,EAAY5rI,GAAI,CAClCof,GAAS,EACT,MAGR,OAAOA,EAoBJ,SAASy3G,EAAO5hF,EAAYzpC,GAC/B,IAAIk3H,EAAWpjI,KAAKqkE,IAAIn4D,GACpBm3H,EAAWrjI,KAAKgnE,IAAI96D,GACpBqJ,EAAIogC,EAAW,GAAKytF,EAAWztF,EAAW,GAAK0tF,EAC/C7tH,EAAImgC,EAAW,GAAKytF,EAAWztF,EAAW,GAAK0tF,EAGnD,OAFA1tF,EAAW,GAAKpgC,EAChBogC,EAAW,GAAKngC,EACTmgC,EAmBJ,SAAS89B,EAAM99B,EAAY89B,GAG9B,OAFA99B,EAAW,IAAM89B,EACjB99B,EAAW,IAAM89B,EACV99B,EAOJ,SAAS42F,EAAgBhrC,EAAQC,GACpC,IAAInsF,EAAKksF,EAAO,GAAKC,EAAO,GACxBlsF,EAAKisF,EAAO,GAAKC,EAAO,GAC5B,OAAOnsF,EAAKA,EAAKC,EAAKA,EAOnB,SAAS7L,EAAS83F,EAAQC,GAC7B,OAAOxhG,KAAKK,KAAKksI,EAAgBhrC,EAAQC,IAUtC,SAASgrC,EAAyB72F,EAAY/b,GACjD,OAAO2yG,EAAgB52F,EAAYy2F,EAAiBz2F,EAAY/b,IA+D7D,SAAS6yG,EAAW92F,EAAY+2F,GACnC,OArKG,SAAgB/2F,EAAYg3F,EAAUD,GACzC,OAAI/2F,EACOg3F,EACFhnH,QAAQ,MAAOgwB,EAAW,GAAG5uB,QAAQ2lH,IACrC/mH,QAAQ,MAAOgwB,EAAW,GAAG5uB,QAAQ2lH,IAGnC,GA8JJvrI,CAAOw0C,EAAY,WAAY+2F,GAWnC,SAASE,EAAMj3F,EAAYq5D,GAC9B,GAAIA,EAAWqJ,WAAY,CACvB,IAAIE,GAAa,QAASvJ,EAAW6F,aACjCg4B,EAaL,SAAuBl3F,EAAYq5D,EAAY89B,GAClD,IAAIx0B,EAAmBtJ,EAAW6F,YAC9Bg4B,EAAa,EACjB,GAAI79B,EAAWqJ,aACV1iE,EAAW,GAAK2iE,EAAiB,IAAM3iE,EAAW,GAAK2iE,EAAiB,IAAK,CAC9E,IAAIy0B,EAAoBD,IAAyB,QAASx0B,GAC1Du0B,EAAa7sI,KAAKO,OAAOo1C,EAAW,GAAK2iE,EAAiB,IAAMy0B,GAEpE,OAAOF,EArBcG,CAAcr3F,EAAYq5D,EAAYuJ,GACnDs0B,IACAl3F,EAAW,IAAMk3F,EAAat0B,GAGtC,OAAO5iE,+LCtXJ,IAAIs3F,EAAe,YAcfC,EAAqB,kBAcrBC,EAAgB,aAQhBC,EAAkB,eAKzBC,EAAY,IAAI/hH,OAAO,CACvB,qDACA,4CACA,8DACA,gDACA,8EACA,gEACA,mCACF7jB,KAAK,IAAK,KACR6lI,EAAsB,CACtB,QACA,UACA,SACA,OACA,aACA,UAQOC,EAAoB,SAAUC,GACrC,IAAI1gH,EAAQ0gH,EAAS1gH,MAAMugH,GAC3B,IAAKvgH,EACD,OAAO,KASX,IAPA,IAAIutF,EAAsC,CACtCozB,WAAY,SACZ53G,KAAM,QACNwkF,MAAO,SACP/S,OAAQ,SACRomC,QAAS,UAEJhtI,EAAI,EAAGiS,EAAK26H,EAAoB3tI,OAAQe,EAAIiS,IAAMjS,EAAG,CAC1D,IAAIsJ,EAAQ8iB,EAAMpsB,EAAI,QACR8N,IAAVxE,IACAqwG,EAAMizB,EAAoB5sI,IAAMsJ,GAIxC,OADAqwG,EAAMszB,SAAWtzB,EAAMuzB,OAAOl6G,MAAM,QAC7B2mF,GAMJ,SAASwzB,EAAWC,GACvB,OAAmB,IAAZA,EAAgB,GAAKriH,OAAOzrB,KAAK4L,MAAgB,IAAVkiI,GAAiB,0LChG5D,SAASC,EAAsBC,EAAWC,EAAYC,EAAgBC,GAEzE,IAAIC,EAkBJ,OAjBIF,GAAkBA,EAAevuI,OACjCyuI,EAASF,EAAe36H,QAEnB,KACL66H,EAAS,IAAIC,gBAAgBL,GAAa,IAAKC,GAAc,MAG7DG,EAASj0B,SAASC,cAAc,WACzBC,MAAM12G,IAAM,QAEnBqqI,IACAI,EAAO7zB,MAAQyzB,GAEfC,IACAG,EAAOhrI,OAAS6qI,GAG4BG,EAAOrtE,WAAW,KAAMotE,GAgCrE,SAASG,EAAY1nI,EAAS2nI,GACjC,IAAI5pI,EAAS4pI,EAAQpzB,WACjBx2G,GACAA,EAAO6pI,aAAa5nI,EAAS2nI,GAO9B,SAASxuH,EAAW/d,GACvB,OAAOA,GAAQA,EAAKm5G,WAAan5G,EAAKm5G,WAAWC,YAAYp5G,GAAQ,KAKlE,SAASysI,EAAezsI,GAC3B,KAAOA,EAAK0sI,WACR1sI,EAAKo5G,YAAYp5G,EAAK0sI,WAWvB,SAASC,EAAgB3sI,EAAMG,GAElC,IADA,IAAIysI,EAAc5sI,EAAK6sI,WACdnuI,EAAI,KAAWA,EAAG,CACvB,IAAIouI,EAAWF,EAAYluI,GACvBquI,EAAW5sI,EAASzB,GAExB,IAAKouI,IAAaC,EACd,MAGAD,IAAaC,IAIZD,EAKAC,EAML/sI,EAAK44G,aAAam0B,EAAUD,IALxB9sI,EAAKo5G,YAAY0zB,KACfpuI,GANFsB,EAAK6hH,YAAYkrB,0CCpGtB,SAASC,EAAOvuI,GACnB,OAAOT,KAAKyF,IAAIhF,EAAG,GAQhB,SAASwuI,EAAQxuI,GACpB,OAAO,EAAIuuI,EAAO,EAAIvuI,GAQnB,SAASyuI,EAASzuI,GACrB,OAAO,EAAIA,EAAIA,EAAI,EAAIA,EAAIA,EAAIA,EAQ5B,SAAS0uI,EAAO1uI,GACnB,OAAOA,ggBCnBJ,SAASkD,EAAI47H,GAChB,IAAI6P,EAAa79H,UAKjB,OAAO,SAAUmxB,GAEb,IADA,IAAIxiB,GAAO,EACFxf,EAAI,EAAGiS,EAAKy8H,EAAWzvI,OAAQe,EAAIiS,IACxCuN,EAAOA,GAAQkvH,EAAW1uI,GAAGgiC,MADiBhiC,GAMlD,OAAOwf,GAWR,IAAImvH,EAAa,SAAU7mB,GAC9B,IAAIxM,EAAoEwM,EAA6B,cACrG,OAAQxM,EAAcszB,UAChBtzB,EAAcuzB,SAAWvzB,EAAcwzB,WACxCxzB,EAAcqT,UAUZogB,EAAmB,SAAUjnB,GACpC,IAAIxM,EAAoEwM,EAA6B,cACrG,OAAQxM,EAAcszB,UAChBtzB,EAAcuzB,SAAWvzB,EAAcwzB,UACzCxzB,EAAcqT,UAmBXqgB,EAAoB,SAAUhtG,GACrC,OAAOA,EAAMp3B,IAAIw7G,mBAAmB6oB,aAAa,aAVlC,SAAUjtG,GACzB,OAAOA,EAAM/d,OAAOmiG,mBAAmB5jH,SAASi3G,SAASy1B,eAUnDC,CAAMntG,IAULotG,EAAS,KAoBTC,EAAoB,SAAUvnB,GACrC,IAAIxM,EAA2CwM,EAA6B,cAC5E,OAA+B,GAAxBxM,EAAcuC,UAAiB,MAAU,MAAOvC,EAAcwzB,UAS9DQ,EAAQ,KAmBRC,EAAc,SAAUznB,GAC/B,OAAOA,EAAgBzgH,MAAQ,iBAoBxBmoI,EAAiB,SAAU1nB,GAClC,IAAIxM,EAAoEwM,EAA6B,cACrG,OAASxM,EAAcszB,UACjBtzB,EAAcuzB,SAAWvzB,EAAcwzB,WACxCxzB,EAAcqT,UAyBZ8gB,EAAe,SAAU3nB,GAChC,IAAIxM,EAAoEwM,EAA6B,cACrG,OAASxM,EAAcszB,UACjBtzB,EAAcuzB,SAAWvzB,EAAcwzB,UACzCxzB,EAAcqT,UAUX+gB,EAAoB,SAAU5nB,GACrC,IACI6nB,EADoE7nB,EAA6B,cAC3C,OAAE6nB,QAC5D,MAAmB,UAAZA,GAAmC,WAAZA,GAAoC,aAAZA,GAS/CC,EAAY,SAAU9nB,GAC7B,IAAI3K,EAAmE,EAAkB7B,cAGzF,OAFA,YAAwBxtG,IAAjBqvG,EAA4B,IAEA,SAA5BA,EAAa0yB,aAqCbC,EAAgB,SAAUhoB,GACjC,IAAI3K,EAAmE,EAAkB7B,cAEzF,OADA,YAAwBxtG,IAAjBqvG,EAA4B,IAC5BA,EAAa4yB,WAAqC,IAAxB5yB,EAAaU,iICrQ1C1L,aCKR,EACY,oBDPRC,GACID,EAAgB,SAAU7+F,EAAGjT,GAI7B,OAHA8xG,EAAgB/oG,OAAOipG,gBAClB,CAAE3pF,UAAW,cAAgB/gB,OAAS,SAAU2L,EAAGjT,GAAKiT,EAAEoV,UAAYroB,IACvE,SAAUiT,EAAGjT,GAAK,IAAK,IAAIqB,KAAKrB,EAAO+I,OAAOpG,UAAUqiB,eAAe/U,KAAKjQ,EAAGqB,KAAI4R,EAAE5R,GAAKrB,EAAEqB,KACzFywG,EAAc7+F,EAAGjT,IAErB,SAAUiT,EAAGjT,GAChB,GAAiB,oBAANA,GAA0B,OAANA,EAC3B,MAAM,IAAI6jB,UAAU,uBAAyB6G,OAAO1qB,GAAK,iCAE7D,SAASiyG,IAAO5xG,KAAKwL,YAAcoH,EADnC6+F,EAAc7+F,EAAGjT,GAEjBiT,EAAEtQ,UAAkB,OAAN3C,EAAa+I,OAAOojC,OAAOnsC,IAAMiyG,EAAGtvG,UAAY3C,EAAE2C,UAAW,IAAIsvG,KAyHhF,SAAS09B,EAAI13C,EAAMa,EAAOsrC,GAC7B,IAAIhE,EAAgBnoC,EAAKy3B,oBACzB,GAAI0Q,EAAe,CACf,IAAIzpB,EAAS,CAACypB,EAAc,GAAKtnC,EAAM,GAAIsnC,EAAc,GAAKtnC,EAAM,IACpEb,EAAK43B,gBAAgB,CACjBt9B,cAA2B9kF,IAAjB22H,EAA6BA,EAAe,IACtDpW,OAAQ,KACRrX,OAAQ1e,EAAK63B,qBAAqBnZ,MAUvC,SAASi5B,EAAY33C,EAAMa,EAAO8qC,EAAYQ,GACjD,IAAI4E,EAAc/wC,EAAKsmC,UACvB,QAAoB9wH,IAAhBu7H,EAAJ,CAGA,IAAIC,EAAUhxC,EAAKusC,mBAAmBwE,EAAclwC,GAChD2jC,EAAgBxkC,EAAKgnC,qBAAqBgK,GAC1ChxC,EAAKwwB,gBACLxwB,EAAKg4B,mBAETh4B,EAAKuwB,QAAQ,CACThV,WAAYipB,EACZpO,OAAQuV,EACRrxC,cAA2B9kF,IAAjB22H,EAA6BA,EAAe,IACtDpW,OAAQ,QAGhB,MAnHiC,SAAU5b,GAKvC,SAASmc,EAAY9b,GACjB,IAAI34E,EAAQs4E,EAAOniG,KAAK5P,OAASA,KAsBjC,OAlBAy5B,EAAMghC,GAINhhC,EAAM44E,KAIN54E,EAAM6hC,GACF82C,GAAeA,EAAYuV,cAC3BluF,EAAMkuF,YAAcvV,EAAYuV,aAMpCluF,EAAM6tB,KAAO,KACb7tB,EAAM+1G,WAAU,GACT/1G,EA8CX,OAzEAi4E,EAAUwc,EAAanc,GAmCvBmc,EAAY5rH,UAAUolH,UAAY,WAC9B,OAA+B1nH,KAAK4nB,IAAI,IAO5CsmG,EAAY5rH,UAAU+1G,OAAS,WAC3B,OAAOr4G,KAAKsnD,MAQhB4mE,EAAY5rH,UAAUqlH,YAAc,SAAUP,GAC1C,OAAO,GAQX8G,EAAY5rH,UAAUktI,UAAY,SAAUC,GACxCzvI,KAAKkb,IAAI,EAA4Bu0H,IAQzCvhB,EAAY5rH,UAAUyhH,OAAS,SAAU75G,GACrClK,KAAKsnD,KAAOp9C,GAETgkH,EA1EqB,CA2E9B,6EE9HMzc,mCADJC,GACID,EAAgB,SAAU7+F,EAAGjT,GAI7B,OAHA8xG,EAAgB/oG,OAAOipG,gBAClB,CAAE3pF,UAAW,cAAgB/gB,OAAS,SAAU2L,EAAGjT,GAAKiT,EAAEoV,UAAYroB,IACvE,SAAUiT,EAAGjT,GAAK,IAAK,IAAIqB,KAAKrB,EAAO+I,OAAOpG,UAAUqiB,eAAe/U,KAAKjQ,EAAGqB,KAAI4R,EAAE5R,GAAKrB,EAAEqB,KACzFywG,EAAc7+F,EAAGjT,IAErB,SAAUiT,EAAGjT,GAChB,GAAiB,oBAANA,GAA0B,OAANA,EAC3B,MAAM,IAAI6jB,UAAU,uBAAyB6G,OAAO1qB,GAAK,iCAE7D,SAASiyG,IAAO5xG,KAAKwL,YAAcoH,EADnC6+F,EAAc7+F,EAAGjT,GAEjBiT,EAAEtQ,UAAkB,OAAN3C,EAAa+I,OAAOojC,OAAOnsC,IAAMiyG,EAAGtvG,UAAY3C,EAAE2C,UAAW,IAAIsvG,KA8CnF89B,EAAoC,SAAU39B,GAK9C,SAAS29B,EAAmBt9B,GACxB,IAAI34E,EAAQz5B,KACRyG,EAAU2rG,GAA4B,GAiC1C,OAhCA34E,EAAQs4E,EAAOniG,KAAK5P,KACyC,IAAcA,KACvEyG,EAAQkpH,kBACRl2F,EAAMk2F,gBAAkBlpH,EAAQkpH,iBAEhClpH,EAAQqoH,kBACRr1F,EAAMq1F,gBAAkBroH,EAAQqoH,iBAEhCroH,EAAQkpI,kBACRl2G,EAAMk2G,gBAAkBlpI,EAAQkpI,iBAEhClpI,EAAQ0oH,gBACR11F,EAAM01F,cAAgB1oH,EAAQ0oH,eAE9B1oH,EAAQ2nH,WACR30F,EAAM20F,SAAW3nH,EAAQ2nH,UAM7B30F,EAAMi8F,wBAAyB,EAK/Bj8F,EAAMm2G,iBAAmB,GAKzBn2G,EAAMu1F,eAAiB,GAChBv1F,EA6GX,OApJAi4E,EAAUg+B,EAAoB39B,GA+C9B29B,EAAmBptI,UAAUutI,gBAAkB,WAC3C,OAAO7vI,KAAKgvH,eAAezwH,QAQ/BmxI,EAAmBptI,UAAUqtH,gBAAkB,SAAUvI,GACrD,OAAO,GAOXsoB,EAAmBptI,UAAUwsH,gBAAkB,SAAU1H,KASzDsoB,EAAmBptI,UAAUqlH,YAAc,SAAUP,GACjD,IAAKA,EAAgBxM,cACjB,OAAO,EAEX,IAAImT,GAAY,EAEhB,GADA/tH,KAAK8vI,uBAAuB1oB,GACxBpnH,KAAK01H,wBACL,GAAItO,EAAgBzgH,MAAQ,gBACxB3G,KAAK8uH,gBAAgB1H,GAErBA,EAAgBxM,cAAcO,sBAE7B,GAAIiM,EAAgBzgH,MAAQ,cAA+B,CAC5D,IAAIopI,EAAY/vI,KAAKmvH,cAAc/H,GACnCpnH,KAAK01H,uBACDqa,GAAa/vI,KAAKgvH,eAAezwH,OAAS,QAIlD,GAAI6oH,EAAgBzgH,MAAQ,gBAAiC,CACzD,IAAIqpI,EAAUhwI,KAAK2vH,gBAAgBvI,GACnCpnH,KAAK01H,uBAAyBsa,EAC9BjiB,EAAY/tH,KAAKouH,SAAS4hB,QAErB5oB,EAAgBzgH,MAAQ,iBAC7B3G,KAAK2vI,gBAAgBvoB,GAG7B,OAAQ2G,GAOZ2hB,EAAmBptI,UAAUqtI,gBAAkB,SAAUvoB,KAOzDsoB,EAAmBptI,UAAU6sH,cAAgB,SAAU/H,GACnD,OAAO,GAQXsoB,EAAmBptI,UAAU8rH,SAAW,SAAU4hB,GAC9C,OAAOA,GAMXN,EAAmBptI,UAAUwtI,uBAAyB,SAAU1oB,GAC5D,GAqCR,SAAgCA,GAC5B,IAAIzgH,EAAOygH,EAAgBzgH,KAC3B,OAAQA,IAAS,iBACbA,IAAS,iBACTA,IAAS,cAzCLspI,CAAuB7oB,GAAkB,CACzC,IAAIvN,EAAUuN,EAAgBxM,cAC1Bh0G,EAAKizG,EAAQkD,UAAUvlG,WACvB4vG,EAAgBzgH,MAAQ,qBACjB3G,KAAK4vI,iBAAiBhpI,IAExBwgH,EAAgBzgH,MAAQ,iBAGxBC,KAAM5G,KAAK4vI,oBAFhB5vI,KAAK4vI,iBAAiBhpI,GAAMizG,GAMhC75G,KAAKgvH,gBAAiB,QAAUhvH,KAAK4vI,oBAGtCF,EArJ4B,CAsJrC,MAKK,SAAS70H,EAAS2nG,GAIrB,IAHA,IAAIjkH,EAASikH,EAAcjkH,OACvBo/G,EAAU,EACVC,EAAU,EACLt+G,EAAI,EAAGA,EAAIf,EAAQe,IACxBq+G,GAAW6E,EAAcljH,GAAGq+G,QAC5BC,GAAW4E,EAAcljH,GAAGs+G,QAEhC,MAAO,CAACD,EAAUp/G,EAAQq/G,EAAUr/G,GAaxC,4CCzOQkzG,oEADJC,GACID,EAAgB,SAAU7+F,EAAGjT,GAI7B,OAHA8xG,EAAgB/oG,OAAOipG,gBAClB,CAAE3pF,UAAW,cAAgB/gB,OAAS,SAAU2L,EAAGjT,GAAKiT,EAAEoV,UAAYroB,IACvE,SAAUiT,EAAGjT,GAAK,IAAK,IAAIqB,KAAKrB,EAAO+I,OAAOpG,UAAUqiB,eAAe/U,KAAKjQ,EAAGqB,KAAI4R,EAAE5R,GAAKrB,EAAEqB,KACzFywG,EAAc7+F,EAAGjT,IAErB,SAAUiT,EAAGjT,GAChB,GAAiB,oBAANA,GAA0B,OAANA,EAC3B,MAAM,IAAI6jB,UAAU,uBAAyB6G,OAAO1qB,GAAK,iCAE7D,SAASiyG,IAAO5xG,KAAKwL,YAAcoH,EADnC6+F,EAAc7+F,EAAGjT,GAEjBiT,EAAEtQ,UAAkB,OAAN3C,EAAa+I,OAAOojC,OAAOnsC,IAAMiyG,EAAGtvG,UAAY3C,EAAE2C,UAAW,IAAIsvG,KAqDnFs+B,EAA2B,SAAUn+B,GAKrC,SAASm+B,EAAUzpI,GACf,IAAIgzB,EAAQs4E,EAAOniG,KAAK5P,OAASA,KAIjCy5B,EAAMghC,GAINhhC,EAAM44E,KAIN54E,EAAM6hC,GAIN,IAAI90D,GAAa,QAAO,GAAIC,GAgC5B,MA/BkC,kBAAvBA,EAAQD,oBACRA,EAAWA,YAClB,QAAOA,EAAYC,EAAQD,aAE/BA,EAAW,kBACa4G,IAApB3G,EAAQimI,QAAwBjmI,EAAQimI,QAAU,GACtD,OAAoD,kBAAtClmI,EAAW,aAAqC,IAC9DA,EAAW,kBACa4G,IAApB3G,EAAQ8lH,SAAwB9lH,EAAQ8lH,QAC5C/lH,EAAW,aAAyBC,EAAQ2yG,OAC5C5yG,EAAW,yBACmB4G,IAA1B3G,EAAQ+yH,cAA8B/yH,EAAQ+yH,cAAgB77H,EAAAA,EAClE6I,EAAW,yBACmB4G,IAA1B3G,EAAQgzH,cAA8BhzH,EAAQgzH,cAAgB,EAClEjzH,EAAW,mBACa4G,IAApB3G,EAAQu0H,QAAwBv0H,EAAQu0H,SAAWr9H,EAAAA,EACvD6I,EAAW,mBACa4G,IAApB3G,EAAQw0H,QAAwBx0H,EAAQw0H,QAAUt9H,EAAAA,EAKtD87B,EAAM02G,gBACuB/iI,IAAzB5G,EAAW6yG,UAA0B5yG,EAAQ4yG,UAAY,kBACtD7yG,EAAW6yG,UAClB5/E,EAAMkqF,cAAcn9G,GAKpBizB,EAAM22G,OAAS,KACR32G,EA+NX,OApRAi4E,EAAUw+B,EAAWn+B,GA0DrBm+B,EAAU5tI,UAAU+tI,aAAe,WAC/B,OAAOrwI,KAAKmwI,YAShBD,EAAU5tI,UAAUguI,cAAgB,SAAUC,GAE1C,IAAIl9B,EAAQrzG,KAAKowI,QACI,CACbt5B,MAAO92G,KACP62G,aAAyBzpG,IAAhBmjI,GAAmCA,GAEhDn3B,EAASp5G,KAAKwwI,YAWlB,OAVAn9B,EAAMq5B,SAAU,QAAM9tI,KAAK4L,MAA0B,IAApBxK,KAAKywI,cAAsB,IAAK,EAAG,GACpEp9B,EAAM+G,YAAcp6G,KAAK0wI,iBACzBr9B,EAAMkZ,QAAUvsH,KAAK2wI,aACrBt9B,EAAMlH,OAASnsG,KAAKyzG,YACpBJ,EAAM+F,YAAoBhsG,IAAXgsG,GAAyB/F,EAAMwD,QAAqBuC,EAAXz7G,EAAAA,EACxD01G,EAAMmmB,cAAgBx5H,KAAKwgI,mBAC3BntB,EAAMomB,cAAgB76H,KAAKM,IAAIc,KAAKygI,mBAAoB,GACxDptB,EAAM2nB,QAAUh7H,KAAK6gI,aACrBxtB,EAAM4nB,QAAUj7H,KAAK0gI,aACrB1gI,KAAKowI,OAAS/8B,EACPA,GAQX68B,EAAU5tI,UAAUsuI,eAAiB,SAAUz+B,GAC3C,OAAO,WAQX+9B,EAAU5tI,UAAU4jH,oBAAsB,SAAU2qB,GAChD,OAAO,WASXX,EAAU5tI,UAAUmxG,UAAY,WAC5B,OAA+DzzG,KAAK4nB,IAAI,aAQ5EsoH,EAAU5tI,UAAUk+H,iBAAmB,WACnC,OAA8BxgI,KAAK4nB,IAAI,qBAQ3CsoH,EAAU5tI,UAAUm+H,iBAAmB,WACnC,OAA8BzgI,KAAK4nB,IAAI,qBAQ3CsoH,EAAU5tI,UAAUu+H,WAAa,WAC7B,OAA8B7gI,KAAK4nB,IAAI,eAQ3CsoH,EAAU5tI,UAAUo+H,WAAa,WAC7B,OAA8B1gI,KAAK4nB,IAAI,eAQ3CsoH,EAAU5tI,UAAUmuI,WAAa,WAC7B,OAA8BzwI,KAAK4nB,IAAI,cAM3CsoH,EAAU5tI,UAAUouI,eAAiB,WACjC,OAAO,WAQXR,EAAU5tI,UAAUquI,WAAa,WAC7B,OAA+B3wI,KAAK4nB,IAAI,cAS5CsoH,EAAU5tI,UAAUkuI,UAAY,WAC5B,OAA8BxwI,KAAK4nB,IAAI,cAS3CsoH,EAAU5tI,UAAUwuI,UAAY,SAAU3kC,GACtCnsG,KAAKkb,IAAI,WAAsBixF,IAQnC+jC,EAAU5tI,UAAUyuI,iBAAmB,SAAUvX,GAC7Cx5H,KAAKkb,IAAI,mBAA8Bs+G,IAQ3C0W,EAAU5tI,UAAU0uI,iBAAmB,SAAUvX,GAC7Cz5H,KAAKkb,IAAI,mBAA8Bu+G,IAU3CyW,EAAU5tI,UAAUs+H,WAAa,SAAU3F,GACvCj7H,KAAKkb,IAAI,aAAwB+/G,IAUrCiV,EAAU5tI,UAAUw+H,WAAa,SAAU9F,GACvCh7H,KAAKkb,IAAI,aAAwB8/G,IAQrCkV,EAAU5tI,UAAU2uI,WAAa,SAAUvE,IACvC,OAA0B,kBAAZA,EAAsB,IACpC1sI,KAAKkb,IAAI,YAAuBwxH,IAQpCwD,EAAU5tI,UAAU4uI,WAAa,SAAU3kB,GACvCvsH,KAAKkb,IAAI,YAAuBqxG,IASpC2jB,EAAU5tI,UAAU6uI,UAAY,SAAUC,GACtCpxI,KAAKkb,IAAI,YAAuBk2H,IAKpClB,EAAU5tI,UAAUw3G,gBAAkB,WAC9B95G,KAAKowI,SACLpwI,KAAKowI,OAAOt5B,MAAQ,KACpB92G,KAAKowI,OAAS,MAElBr+B,EAAOzvG,UAAUw3G,gBAAgBlqG,KAAK5P,OAEnCkwI,EArRmB,CAsR5B,KACF,8CCvVQz+B,yHADJC,GACID,EAAgB,SAAU7+F,EAAGjT,GAI7B,OAHA8xG,EAAgB/oG,OAAOipG,gBAClB,CAAE3pF,UAAW,cAAgB/gB,OAAS,SAAU2L,EAAGjT,GAAKiT,EAAEoV,UAAYroB,IACvE,SAAUiT,EAAGjT,GAAK,IAAK,IAAIqB,KAAKrB,EAAO+I,OAAOpG,UAAUqiB,eAAe/U,KAAKjQ,EAAGqB,KAAI4R,EAAE5R,GAAKrB,EAAEqB,KACzFywG,EAAc7+F,EAAGjT,IAErB,SAAUiT,EAAGjT,GAChB,GAAiB,oBAANA,GAA0B,OAANA,EAC3B,MAAM,IAAI6jB,UAAU,uBAAyB6G,OAAO1qB,GAAK,iCAE7D,SAASiyG,IAAO5xG,KAAKwL,YAAcoH,EADnC6+F,EAAc7+F,EAAGjT,GAEjBiT,EAAEtQ,UAAkB,OAAN3C,EAAa+I,OAAOojC,OAAOnsC,IAAMiyG,EAAGtvG,UAAY3C,EAAE2C,UAAW,IAAIsvG,KAiDnFC,EACQ,SAURw/B,EAA4B,SAAUt/B,GAKtC,SAASs/B,EAAWj/B,GAChB,IAAI34E,EAAQz5B,KACRyG,EAAU2rG,GAAe,GACzBk/B,GAAsC,QAAO,GAAI7qI,UAC9C6qI,EAAYtwB,OACnB,IAAIA,EAASv6G,EAAQu6G,OAqCrB,OApCAvnF,EAAQs4E,EAAOniG,KAAK5P,KAAMsxI,IAAgBtxI,MAIpCy6D,GAINhhC,EAAM44E,KAIN54E,EAAM6hC,GAKN7hC,EAAM83G,oBAAsB,GAK5B93G,EAAM+3G,cAAgB,GACtB/3G,EAAM6pF,kBAAkBzR,EAAiBp4E,EAAMg4G,sBAC3CzwB,EACI/5G,MAAMC,QAAQ85G,GACdA,EAAS,IAAI,IAAWA,EAAO99G,QAAS,CAAE+xF,QAAQ,KAGlD,OAAuD,oBAAvB,EAAiB,SAAkB,IAIvE+rB,EAAS,IAAI,SAAW5zG,EAAW,CAAE6nF,QAAQ,IAEjDx7D,EAAMqsF,UAAU9E,GACTvnF,EAsIX,OApLAi4E,EAAU2/B,EAAYt/B,GAmDtBs/B,EAAW/uI,UAAUovI,mBAAqB,WACtC1xI,KAAKuzG,WAKT89B,EAAW/uI,UAAUmvI,qBAAuB,WACxCzxI,KAAKuxI,oBAAoB7lI,QAAQ,MACjC1L,KAAKuxI,oBAAoBhzI,OAAS,EAClC,IAAIyiH,EAAShhH,KAAK0kH,YAElB,IAAK,IAAI99G,KADT5G,KAAKuxI,oBAAoBlvI,MAAK,QAAO2+G,EAAQ,QAAyBhhH,KAAK2xI,iBAAkB3xI,OAAO,QAAOghH,EAAQ,WAA4BhhH,KAAK4xI,oBAAqB5xI,OAC1JA,KAAKwxI,cAChBxxI,KAAKwxI,cAAc5qI,GAAI8E,QAAQ,OAEnC,QAAM1L,KAAKwxI,eAEX,IADA,IAAIK,EAAc7wB,EAAOvO,WAChBnzG,EAAI,EAAGiS,EAAKsgI,EAAYtzI,OAAQe,EAAIiS,EAAIjS,IAAK,CAClD,IAAIw3G,EAAQ+6B,EAAYvyI,GACxBU,KAAKwxI,eAAc,QAAO16B,IAAU,EAChC,QAAOA,EAAO,mBAAgC92G,KAAK0xI,mBAAoB1xI,OACvE,QAAO82G,EAAO,WAAkB92G,KAAK0xI,mBAAoB1xI,OAGjEA,KAAKuzG,WAMT89B,EAAW/uI,UAAUqvI,iBAAmB,SAAUG,GAC9C,IAAIh7B,EAAoDg7B,EAAuB,QAC/E9xI,KAAKwxI,eAAc,QAAO16B,IAAU,EAChC,QAAOA,EAAO,mBAAgC92G,KAAK0xI,mBAAoB1xI,OACvE,QAAO82G,EAAO,WAAkB92G,KAAK0xI,mBAAoB1xI,OAE7DA,KAAKuzG,WAMT89B,EAAW/uI,UAAUsvI,oBAAsB,SAAUE,GACjD,IAAIh7B,EAAoDg7B,EAAuB,QAC3Et7H,GAAM,QAAOsgG,GACjB92G,KAAKwxI,cAAch7H,GAAK9K,QAAQ,aACzB1L,KAAKwxI,cAAch7H,GAC1BxW,KAAKuzG,WAUT89B,EAAW/uI,UAAUoiH,UAAY,WAC7B,OAAwF1kH,KAAK4nB,IAAIiqF,IAUrGw/B,EAAW/uI,UAAUwjH,UAAY,SAAU9E,GACvChhH,KAAKkb,IAAI22F,EAAiBmP,IAM9BqwB,EAAW/uI,UAAUsuI,eAAiB,SAAUz+B,GAC5C,IAAI/F,OAAsBh/F,IAAd+kG,EAA0BA,EAAY,GAIlD,OAHAnyG,KAAK0kH,YAAYh5G,SAAQ,SAAUorG,GAC/BA,EAAM85B,eAAexkC,MAElBA,GAWXilC,EAAW/uI,UAAU4jH,oBAAsB,SAAU2qB,GACjD,IAAIkB,OAAwB3kI,IAAfyjI,EAA2BA,EAAa,GACjD/lG,EAAMinG,EAAOxzI,OACjByB,KAAK0kH,YAAYh5G,SAAQ,SAAUorG,GAC/BA,EAAMoP,oBAAoB6rB,MAE9B,IAAIC,EAAgBhyI,KAAKswI,gBACrB2B,EAAgBD,EAAc54B,OAC7By3B,QAAuCzjI,IAAzB4kI,EAAc54B,SAC7B64B,EAAgB,GAEpB,IAAK,IAAI3yI,EAAIwrC,EAAKv5B,EAAKwgI,EAAOxzI,OAAQe,EAAIiS,EAAIjS,IAAK,CAC/C,IAAIm4G,EAAas6B,EAAOzyI,GACxBm4G,EAAWi1B,SAAWsF,EAActF,QACpCj1B,EAAW8U,QAAU9U,EAAW8U,SAAWylB,EAAczlB,QACzD9U,EAAW+hB,cAAgB56H,KAAKQ,IAAIq4G,EAAW+hB,cAAewY,EAAcxY,eAC5E/hB,EAAWgiB,cAAgB76H,KAAKM,IAAIu4G,EAAWgiB,cAAeuY,EAAcvY,eAC5EhiB,EAAWujB,QAAUp8H,KAAKM,IAAIu4G,EAAWujB,QAASgX,EAAchX,SAChEvjB,EAAWwjB,QAAUr8H,KAAKQ,IAAIq4G,EAAWwjB,QAAS+W,EAAc/W,cACnC7tH,IAAzB4kI,EAAc7lC,cACY/+F,IAAtBqqG,EAAWtL,OACXsL,EAAWtL,QAAS,QAAgBsL,EAAWtL,OAAQ6lC,EAAc7lC,QAGrEsL,EAAWtL,OAAS6lC,EAAc7lC,aAGhB/+F,IAAtBqqG,EAAW2B,SACX3B,EAAW2B,OAAS64B,GAG5B,OAAOF,GAKXV,EAAW/uI,UAAUouI,eAAiB,WAClC,OAAO,WAEJW,EArLoB,CAsL7B,KACF,6EC9PQ5/B,wFADJC,GACID,EAAgB,SAAU7+F,EAAGjT,GAI7B,OAHA8xG,EAAgB/oG,OAAOipG,gBAClB,CAAE3pF,UAAW,cAAgB/gB,OAAS,SAAU2L,EAAGjT,GAAKiT,EAAEoV,UAAYroB,IACvE,SAAUiT,EAAGjT,GAAK,IAAK,IAAIqB,KAAKrB,EAAO+I,OAAOpG,UAAUqiB,eAAe/U,KAAKjQ,EAAGqB,KAAI4R,EAAE5R,GAAKrB,EAAEqB,KACzFywG,EAAc7+F,EAAGjT,IAErB,SAAUiT,EAAGjT,GAChB,GAAiB,oBAANA,GAA0B,OAANA,EAC3B,MAAM,IAAI6jB,UAAU,uBAAyB6G,OAAO1qB,GAAK,iCAE7D,SAASiyG,IAAO5xG,KAAKwL,YAAcoH,EADnC6+F,EAAc7+F,EAAGjT,GAEjBiT,EAAEtQ,UAAkB,OAAN3C,EAAa+I,OAAOojC,OAAOnsC,IAAMiyG,EAAGtvG,UAAY3C,EAAE2C,UAAW,IAAIsvG,KAgGnFsgC,EAAuB,SAAUngC,GAKjC,SAASmgC,EAAMzrI,GACX,IAAIgzB,EAAQz5B,KACRsxI,GAAc,QAAO,GAAI7qI,UACtB6qI,EAAY16H,QACnB6iB,EAAQs4E,EAAOniG,KAAK5P,KAAMsxI,IAAgBtxI,MAIpCy6D,GAINhhC,EAAM44E,KAIN54E,EAAM6hC,GAKN7hC,EAAM04G,kBAAoB,KAK1B14G,EAAM24G,cAAgB,KAKtB34G,EAAM44G,iBAAmB,KAKzB54G,EAAMupF,UAAY,KAEdv8G,EAAQ4zG,SACR5gF,EAAM4gF,OAAS5zG,EAAQ4zG,QAEvB5zG,EAAQyD,KACRuvB,EAAMsqF,OAAOt9G,EAAQyD,KAEzBuvB,EAAM6pF,kBAAkB,WAAsB7pF,EAAM64G,6BACpD,IAAI17H,EAASnQ,EAAQmQ,OACYnQ,EAAc,OACzC,KAEN,OADAgzB,EAAM84G,UAAU37H,GACT6iB,EAqKX,OA1NAi4E,EAAUwgC,EAAOngC,GA2DjBmgC,EAAM5vI,UAAUsuI,eAAiB,SAAUz+B,GACvC,IAAI/F,EAAQ+F,GAAwB,GAEpC,OADA/F,EAAM/pG,KAAKrC,MACJosG,GAMX8lC,EAAM5vI,UAAU4jH,oBAAsB,SAAU2qB,GAC5C,IAAIkB,EAASlB,GAA0B,GAEvC,OADAkB,EAAO1vI,KAAKrC,KAAKswI,iBACVyB,GAQXG,EAAM5vI,UAAUu1G,UAAY,WACxB,OAAkC73G,KAAK4nB,IAAI,aAA0B,MAKzEsqH,EAAM5vI,UAAUouI,eAAiB,WAC7B,IAAI95H,EAAS5W,KAAK63G,YAClB,OAAQjhG,EAAiCA,EAAOi9F,WAA/B,eAKrBq+B,EAAM5vI,UAAUkwI,oBAAsB,WAClCxyI,KAAKuzG,WAKT2+B,EAAM5vI,UAAUgwI,4BAA8B,WACtCtyI,KAAKqyI,oBACL,QAAcryI,KAAKqyI,kBACnBryI,KAAKqyI,iBAAmB,MAE5B,IAAIz7H,EAAS5W,KAAK63G,YACdjhG,IACA5W,KAAKqyI,kBAAmB,QAAOz7H,EAAQ,WAAkB5W,KAAKwyI,oBAAqBxyI,OAEvFA,KAAKuzG,WAOT2+B,EAAM5vI,UAAUmwI,YAAc,SAAUt6B,GACpC,OAAKn4G,KAAKgjH,UAGHhjH,KAAKgjH,UAAUyvB,YAAYt6B,GAFvB,IAAItuF,SAAQ,SAAU6oH,GAAW,OAAOA,EAAQ,QAY/DR,EAAM5vI,UAAU+3G,OAAS,SAAUvE,EAAYvyF,GAC3C,IAAIo0F,EAAgB33G,KAAK43G,cACzB,GAAID,EAAcg7B,aAAa78B,GAC3B,OAAO6B,EAAcW,YAAYxC,EAAYvyF,IAerD2uH,EAAM5vI,UAAUyhH,OAAS,SAAU75G,GAC3BlK,KAAKmyI,qBACL,QAAcnyI,KAAKmyI,mBACnBnyI,KAAKmyI,kBAAoB,MAExBjoI,GACDlK,KAAKuzG,UAELvzG,KAAKoyI,iBACL,QAAcpyI,KAAKoyI,eACnBpyI,KAAKoyI,cAAgB,MAErBloI,IACAlK,KAAKmyI,mBAAoB,QAAOjoI,EAAK,gBAA4B,SAAU4uB,GACvE,IAEIu+E,EADgD,EACjBvB,WAAWuB,iBAC1CI,EAAaz3G,KAAKswI,eAAc,IAEpC,QAAQj5B,EAAiB9xF,MAAK,SAAUqtH,GACpC,OAAOA,EAAgB97B,QAAUW,EAAWX,SAC5C,IACJO,EAAiBh1G,KAAKo1G,KACvBz3G,MACHA,KAAKoyI,eAAgB,QAAOpyI,KAAM,WAAkBkK,EAAImwG,OAAQnwG,GAChElK,KAAKuzG,YASb2+B,EAAM5vI,UAAUiwI,UAAY,SAAU37H,GAClC5W,KAAKkb,IAAI,WAAsBtE,IAMnCs7H,EAAM5vI,UAAUs1G,YAAc,WAI1B,OAHK53G,KAAKgjH,YACNhjH,KAAKgjH,UAAYhjH,KAAKmkH,kBAEnBnkH,KAAKgjH,WAKhBkvB,EAAM5vI,UAAUo1G,YAAc,WAC1B,QAAS13G,KAAKgjH,WAOlBkvB,EAAM5vI,UAAU6hH,eAAiB,WAC7B,OAAO,MAKX+tB,EAAM5vI,UAAUw3G,gBAAkB,WAC1B95G,KAAKgjH,YACLhjH,KAAKgjH,UAAUsF,iBACRtoH,KAAKgjH,WAEhBhjH,KAAKuyI,UAAU,MACfxgC,EAAOzvG,UAAUw3G,gBAAgBlqG,KAAK5P,OAEnCkyI,EA3Ne,CA4NxB,KAQK,SAASW,EAAOp7B,EAAYvB,GAC/B,IAAKuB,EAAW8U,QACZ,OAAO,EAEX,IAAIpZ,EAAa+C,EAAU/C,WAC3B,GAAIA,EAAasE,EAAWgiB,eACxBtmB,GAAcsE,EAAW+hB,cACzB,OAAO,EAEX,IAAIxD,EAAO9f,EAAU8f,KACrB,OAAOA,EAAOve,EAAWujB,SAAWhF,GAAQve,EAAWwjB,QAE3D,wCCtVA,KACI6X,QAAS,UACTC,QAAS,UACTC,OAAQ,SACRC,QAAS,SACTC,eAAgB,gBAChBC,eAAgB,gBAChBC,SAAU,UACVC,SAAU,UACVC,OAAQ,kFCdJ7hC,YCKR,EACa,UADb,EAEgC,oCDR5BC,GACID,EAAgB,SAAU7+F,EAAGjT,GAI7B,OAHA8xG,EAAgB/oG,OAAOipG,gBAClB,CAAE3pF,UAAW,cAAgB/gB,OAAS,SAAU2L,EAAGjT,GAAKiT,EAAEoV,UAAYroB,IACvE,SAAUiT,EAAGjT,GAAK,IAAK,IAAIqB,KAAKrB,EAAO+I,OAAOpG,UAAUqiB,eAAe/U,KAAKjQ,EAAGqB,KAAI4R,EAAE5R,GAAKrB,EAAEqB,KACzFywG,EAAc7+F,EAAGjT,IAErB,SAAUiT,EAAGjT,GAChB,GAAiB,oBAANA,GAA0B,OAANA,EAC3B,MAAM,IAAI6jB,UAAU,uBAAyB6G,OAAO1qB,GAAK,iCAE7D,SAASiyG,IAAO5xG,KAAKwL,YAAcoH,EADnC6+F,EAAc7+F,EAAGjT,GAEjBiT,EAAEtQ,UAAkB,OAAN3C,EAAa+I,OAAOojC,OAAOnsC,IAAMiyG,EAAGtvG,UAAY3C,EAAE2C,UAAW,IAAIsvG,KAgIvF,EApEmC,SAAUG,GAKzC,SAASwhC,EAAcnhC,GACnB,IAAI34E,EAAQz5B,KACRyG,EAAU2rG,GAA4B,GACtCk/B,GAAc,QAAO,GAAI7qI,GAoB7B,cAnBO6qI,EAAYkC,eACZlC,EAAYmC,wBACnBh6G,EAAQs4E,EAAOniG,KAAK5P,KAAMsxI,IAAgBtxI,MAIpCy6D,GAINhhC,EAAM44E,KAIN54E,EAAM6hC,GACN7hC,EAAMi6G,gBAA+BtmI,IAApB3G,EAAQ+sI,QAAwB/sI,EAAQ+sI,QAAU,GACnE/5G,EAAMk6G,+BAA6DvmI,IAAnC3G,EAAQgtI,wBAClChtI,EAAQgtI,wBAEPh6G,EAsCX,OAjEAi4E,EAAU6hC,EAAexhC,GAmCzBwhC,EAAcjxI,UAAUsxI,WAAa,WACjC,OAA8B5zI,KAAK4nB,IAAIisH,IAQ3CN,EAAcjxI,UAAUoxI,WAAa,SAAUF,GAC3CxzI,KAAKkb,IAAI24H,EAAsBL,IAQnCD,EAAcjxI,UAAUwxI,0BAA4B,WAChD,OAA+B9zI,KAAK4nB,IAAIisH,IAQ5CN,EAAcjxI,UAAUqxI,0BAA4B,SAAUF,GAC1DzzI,KAAKkb,IAAI24H,EAAyCJ,IAE/CF,EAlEuB,CAmEhCrB,EAAA,oGE3IE,EAAwC,WACxC,IAAIzgC,EAAgB,SAAU7+F,EAAGjT,GAI7B,OAHA8xG,EAAgB/oG,OAAOipG,gBAClB,CAAE3pF,UAAW,cAAgB/gB,OAAS,SAAU2L,EAAGjT,GAAKiT,EAAEoV,UAAYroB,IACvE,SAAUiT,EAAGjT,GAAK,IAAK,IAAIqB,KAAKrB,EAAO+I,OAAOpG,UAAUqiB,eAAe/U,KAAKjQ,EAAGqB,KAAI4R,EAAE5R,GAAKrB,EAAEqB,KACzFywG,EAAc7+F,EAAGjT,IAE5B,OAAO,SAAUiT,EAAGjT,GAChB,GAAiB,oBAANA,GAA0B,OAANA,EAC3B,MAAM,IAAI6jB,UAAU,uBAAyB6G,OAAO1qB,GAAK,iCAE7D,SAASiyG,IAAO5xG,KAAKwL,YAAcoH,EADnC6+F,EAAc7+F,EAAGjT,GAEjBiT,EAAEtQ,UAAkB,OAAN3C,EAAa+I,OAAOojC,OAAOnsC,IAAMiyG,EAAGtvG,UAAY3C,EAAE2C,UAAW,IAAIsvG,IAZ3C,GAkCxCmiC,EAAyC,SAAUhiC,GAKnD,SAASgiC,EAAwBC,GAC7B,IAAIv6G,EAAQs4E,EAAOniG,KAAK5P,KAAMg0I,IAAch0I,KA8C5C,OAzCAy5B,EAAMw6G,eAAgB,EAKtBx6G,EAAMy6G,gBAAkB,KAKxBz6G,EAAM06G,mBAKN16G,EAAM26G,mBAAqB,KAK3B36G,EAAM46G,iBAKN56G,EAAM66G,cAAgB,GAKtB76G,EAAM86G,WAAY,EAKlB96G,EAAM+6G,WAAY,UAKlB/6G,EAAMg7G,cAAgB,IAAIxc,EAAA,EAAU,EAAG,EAAG,EAAG,GACtCx+F,EAiaX,OApdA,EAAUs6G,EAAyBhiC,GA0DnCgiC,EAAwBzxI,UAAUoyI,eAAiB,SAAUx0B,GACzD,IAAI8zB,EAAYh0I,KAAK20I,WACjBC,EAAY10B,EAAKrM,WACjB4/B,EAAyBO,EAAUF,4BACvC,OAAQc,GAAaz0B,EAAA,UACjBy0B,GAAaz0B,EAAA,SACZy0B,GAAaz0B,EAAA,UAAoBszB,GAS1CM,EAAwBzxI,UAAUuyI,QAAU,SAAUl2I,EAAGwV,EAAGC,EAAG0hG,GAC3D,IAAI1C,EAAa0C,EAAW1C,WACxBxF,EAAakI,EAAWI,UAAUtI,WAClComC,EAAYh0I,KAAK20I,WAEjBz0B,EADa8zB,EAAUn8B,YACLg9B,QAAQl2I,EAAGwV,EAAGC,EAAGg/F,EAAYxF,GAcnD,OAbIsS,EAAKrM,YAAcsM,EAAA,UACd6zB,EAAUF,4BAINE,EAAUJ,aAAe,IAE9B5zI,KAAKu0I,WAAY,GAJjBr0B,EAAK40B,SAAS30B,EAAA,WAOjBngH,KAAK00I,eAAex0B,KACrBA,EAAOA,EAAK60B,kBAET70B,GAQX6zB,EAAwBzxI,UAAU0yI,mBAAqB,SAAUC,EAAOjf,EAAM9V,GAC1E,QAAIlgH,KAAK00I,eAAex0B,IACbnO,EAAOzvG,UAAU0yI,mBAAmBplI,KAAK5P,KAAMi1I,EAAOjf,EAAM9V,IAS3E6zB,EAAwBzxI,UAAUqwI,aAAe,SAAU78B,GACvD,QAAS91G,KAAK20I,WAAW98B,aAQ7Bk8B,EAAwBzxI,UAAUg2G,YAAc,SAAUxC,EAAYvyF,GAClE,IAAIk0F,EAAa3B,EAAWuB,iBAAiBvB,EAAWqE,YACpDjE,EAAYJ,EAAWI,UACvBtI,EAAasI,EAAUtI,WACvBsnC,EAAiBh/B,EAAU/C,WAC3BgiC,EAAaj/B,EAAUI,OACvBD,EAAWH,EAAUG,SACrBjD,EAAa0C,EAAW1C,WACxB4gC,EAAYh0I,KAAK20I,WACjBS,EAAapB,EAAUn8B,YACvBw9B,EAAiBD,EAAWE,cAC5BC,EAAWH,EAAWI,yBAAyB5nC,GAC/CjvG,EAAI42I,EAASE,kBAAkBP,EAAgBE,EAAWM,YAC1D5uB,EAAiByuB,EAAS3hC,cAAcj1G,GACxCwtG,EAAS2J,EAAW3J,OACpBwpC,EAAcl+B,EAAWtL,SAAU,QAAesL,EAAWtL,OAAQyB,GACrE+nC,IACAxpC,GAAS,QAAgBA,GAAQ,QAAesL,EAAWtL,OAAQyB,KAEvE,IAAIgoC,EAAiBR,EAAWS,kBAAkBziC,GAE9C+F,EAAQv6G,KAAK4L,MAAMsrG,EAAWrhF,KAAK,GAAKmhH,GACxC5zI,EAASpD,KAAK4L,MAAMsrG,EAAWrhF,KAAK,GAAKmhH,GAC7C,GAAIv/B,EAAU,CACV,IAAI5hF,EAAO71B,KAAK4L,MAAM5L,KAAKK,KAAKk6G,EAAQA,EAAQn3G,EAASA,IACzDm3G,EAAQ1kF,EACRzyB,EAASyyB,EAEb,IAAIxgB,EAAM6yG,EAAiB3N,EAAS,EAAIy8B,EACpC1hI,EAAM4yG,EAAiB9kH,EAAU,EAAI4zI,EACrCE,EAAe,CACfX,EAAW,GAAKlhI,EAChBkhI,EAAW,GAAKjhI,EAChBihI,EAAW,GAAKlhI,EAChBkhI,EAAW,GAAKjhI,GAEhBmkH,EAAYkd,EAASQ,0BAA0B5pC,EAAQxtG,GAIvDq3I,EAAiB,GACrBA,EAAer3I,GAAK,GACpB,IAAIs3I,EAAkBj2I,KAAKk2I,uBAAuBd,EAAYxnC,EAAYooC,GACtExB,EAAYx0I,KAAKw0I,UACjB2B,EAAen2I,KAAKy0I,cACxBz0I,KAAKu0I,WAAY,EACjB,IAAK,IAAIpgI,EAAIkkH,EAAUl3H,KAAMgT,GAAKkkH,EAAUh3H,OAAQ8S,EAChD,IAAK,IAAIC,EAAIikH,EAAUj3H,KAAMgT,GAAKikH,EAAU/2H,OAAQ8S,EAAG,CACnD,IAAI8rG,EAAOlgH,KAAK60I,QAAQl2I,EAAGwV,EAAGC,EAAG0hG,GACjC,GAAI91G,KAAK00I,eAAex0B,GAAO,CAC3B,IAAIk2B,GAAM,QAAOp2I,MACjB,GAAIkgH,EAAKrM,YAAcsM,EAAA,SAAkB,CACrC61B,EAAer3I,GAAGuhH,EAAKgY,UAAU1gH,YAAc0oG,EAC/C,IAAIm2B,EAAen2B,EAAKm2B,aAAaD,GAChCp2I,KAAKu0I,YACL8B,IAAsD,IAAtCr2I,KAAKs0I,cAAc5zI,QAAQw/G,KAC5ClgH,KAAKu0I,WAAY,GAGzB,GAA4C,IAAxCr0B,EAAKo2B,SAASF,EAAKtgC,EAAWhjB,MAE9B,SAGR,IAAIyjD,EAAiBhB,EAASiB,2BAA2Bt2B,EAAKgY,UAAWie,EAAc3B,GACnFiC,GAAU,EACVF,IACAE,EAAUR,EAAgBt3I,EAAI,EAAG43I,IAEhCE,GACDlB,EAASmB,gCAAgCx2B,EAAKgY,UAAW+d,EAAiBE,EAAc3B,GAIpG,IAAImC,EAAc7vB,EAAiBouB,GAEnC,QAAiBl1I,KAAK42I,eAAgB9gC,EAAWrhF,KAAK,GAAK,EAAGqhF,EAAWrhF,KAAK,GAAK,EAAG,EAAImhH,EAAgB,EAAIA,EAAgBv/B,GAAW8C,EAAQ,GAAIn3G,EAAS,GAC9J,IAAI60I,GAAkB,QAAkB72I,KAAK42I,gBAC7C52I,KAAK82I,aAAavzH,EAAQszH,EAAiBp/B,EAAWi1B,SACtD,IAAIxnH,EAAUllB,KAAKklB,QACf8nH,EAAS9nH,EAAQ8nH,QACrB,QAAYhtI,KAAK+2I,sBAAuB/2I,KAAK42I,iBAE7C,QAAiB52I,KAAKg3I,cAAe79B,EAAQ,EAAGn3G,EAAS,EAAG20I,EAAaA,EAAa,GAAIx9B,EAAQ,GAAIn3G,EAAS,GAC3GgrI,EAAO7zB,OAASA,GAAS6zB,EAAOhrI,QAAUA,GAC1CgrI,EAAO7zB,MAAQA,EACf6zB,EAAOhrI,OAASA,GAEVhC,KAAKi3I,iBACX/xH,EAAQgyH,UAAU,EAAG,EAAG/9B,EAAOn3G,GAE/B2zI,GACA31I,KAAKm3I,cAAcjyH,EAAS4wF,EAAY6/B,IAE5C,QAAOzwH,EAASkwH,EAAWgC,qBAC3Bp3I,KAAKq3I,UAAUnyH,EAAS4wF,GACxB91G,KAAKs0I,cAAc/1I,OAAS,EAE5B,IAEI+4I,EAAOC,EAAQC,EAFfC,EAAK/uI,OAAO0O,KAAK4+H,GAAgB9rI,IAAIkR,QACzCq8H,EAAG3xI,KAAK,MAEmB,IAAvB2xG,EAAWi1B,SACT1sI,KAAKi3I,kBACH7B,EAAWsC,UAAU5hC,EAAWI,UAAUtI,aAI9C0pC,EAAQ,GACRC,EAAS,IAJTE,EAAKA,EAAGrxH,UAMZ,IAAK,IAAI9mB,EAAIm4I,EAAGl5I,OAAS,EAAGe,GAAK,IAAKA,EAAG,CACrC,IAAIq4I,EAAWF,EAAGn4I,GACds4I,GAAuBxC,EAAWyC,iBAAiBF,EAAUvkC,EAAYxF,GAEzEkqC,GADoBvC,EAAS3hC,cAAc+jC,GACR7wB,EACnCixB,GAAOH,GAAqB,GAAKE,GAAenB,EAChDqB,GAAOJ,GAAqB,GAAKE,GAAenB,EAChDsB,GAAkB1C,EAAS2C,0BAAyB,QAAWpC,GAAe6B,GAC9EQ,GAAmB5C,EAAS6C,mBAAmBH,IAC/CI,IAAW,QAAer4I,KAAKg3I,cAAe,CAC7CpB,GAAkBuC,GAAiB,GAAKrC,EAAa,IAClDhvB,EACH8uB,GAAkBE,EAAa,GAAKqC,GAAiB,IAClDrxB,IAEJwxB,GAAa1C,EAAiBR,EAAWmD,uBAAuB3qC,GAChE4qC,GAAcxC,EAAe2B,GACjC,IAAK,IAAIc,MAAgBD,GAAa,CAClC,IACItgB,IADAhY,EAA4Ds4B,GAAYC,KACvDvgB,UAEjBwgB,GAAST,GAAgB,GAAK/f,GAAU,GACxCygB,GAAQ/5I,KAAK4L,MAAM6tI,GAAS,IAAMK,GAAS,GAAKX,IAChDa,GAASX,GAAgB,GAAK/f,GAAU,GACxC2gB,GAAQj6I,KAAK4L,MAAM6tI,GAAS,IAAMO,GAAS,GAAKZ,IAGhD1wG,GAAIqxG,IAFJxkI,EAAIvV,KAAK4L,MAAM6tI,GAAS,GAAKK,GAASX,KAGtCvxG,GAAIqyG,IAFJzkI,EAAIxV,KAAK4L,MAAM6tI,GAAS,GAAKO,GAASZ,KAGtCc,GAAan6I,IAAMg5I,EAEvB,KADItB,EAAeyC,IAA+D,IAAjD54B,EAAKo2B,UAAS,QAAOt2I,MAAO81G,EAAWhjB,OAEpE,GAAIwkD,EAAO,CAEPpyH,EAAQ6zH,OACRvB,EAAc,CAACrjI,EAAGC,EAAGD,EAAImzB,GAAGlzB,EAAGD,EAAImzB,GAAGlzB,EAAIoyB,GAAGryB,EAAGC,EAAIoyB,IACpD,IAAK,IAAIwyG,GAAM,EAAGznI,GAAK+lI,EAAM/4I,OAAQy6I,GAAMznI,KAAMynI,GAC7C,GAAIr6I,IAAMg5I,GAAYA,EAAWJ,EAAOyB,IAAM,CAC1C,IAAI3pC,GAAOioC,EAAM0B,IACjB9zH,EAAQ+zH,YAER/zH,EAAQg0H,OAAO1B,EAAY,GAAIA,EAAY,IAC3CtyH,EAAQi0H,OAAO3B,EAAY,GAAIA,EAAY,IAC3CtyH,EAAQi0H,OAAO3B,EAAY,GAAIA,EAAY,IAC3CtyH,EAAQi0H,OAAO3B,EAAY,GAAIA,EAAY,IAE3CtyH,EAAQg0H,OAAO7pC,GAAK,GAAIA,GAAK,IAC7BnqF,EAAQi0H,OAAO9pC,GAAK,GAAIA,GAAK,IAC7BnqF,EAAQi0H,OAAO9pC,GAAK,GAAIA,GAAK,IAC7BnqF,EAAQi0H,OAAO9pC,GAAK,GAAIA,GAAK,IAC7BnqF,EAAQmqF,OAGhBioC,EAAMj1I,KAAKm1I,GACXD,EAAOl1I,KAAKs1I,QAGZzyH,EAAQgyH,UAAU/iI,EAAGC,EAAGkzB,GAAGd,IAGnCxmC,KAAKo5I,cAAcl5B,EAAMpK,EAAY3hG,EAAGC,EAAGkzB,GAAGd,GAAG8xG,GAAYQ,IACzDxB,IAAUjB,GACVnxH,EAAQm0H,UACRr5I,KAAKs0I,cAAcryG,QAAQi+E,IAG3BlgH,KAAKs0I,cAAcjyI,KAAK69G,GAE5BlgH,KAAKs5I,gBAAgBxjC,EAAWyT,UAAW6rB,EAAYl1B,IAG/DlgH,KAAKq0I,iBAAmBgB,EACxBr1I,KAAKu5I,mBAAqBzyB,EAC1B9mH,KAAKi0I,eACAj0I,KAAKk0I,mBAAoB,QAAOl0I,KAAKk0I,gBAAiB4B,GAC3D91I,KAAKk0I,gBAAkB4B,EACvB91I,KAAKm0I,mBAAqB/gC,EAC1BpzG,KAAKo0I,mBAAqBxmC,EAC1B5tG,KAAKw5I,kBAAkB1jC,EAAYs/B,EAAYG,EAAUniC,EAAYxF,EAAYzB,EAAQxtG,EAAGq1I,EAAUJ,cACtG5zI,KAAKy5I,oBAAoB3jC,EAAYs/B,GACrCp1I,KAAK05I,WAAWx0H,EAAS4wF,GACrB2B,EAAWtL,QACXjnF,EAAQm0H,UAERxC,IAAoB7J,EAAO/zB,MAAMj4B,YACjCgsD,EAAO/zB,MAAMj4B,UAAY61D,GAE7B,IAAInK,IAAU,EAAAiN,EAAA,IAAWliC,EAAWi1B,SAChCpzB,GAAYt5G,KAAKs5G,UAIrB,OAHIozB,KAAYpzB,GAAUL,MAAMyzB,UAC5BpzB,GAAUL,MAAMyzB,QAAUA,IAEvB1sI,KAAKs5G,WAYhBy6B,EAAwBzxI,UAAU82I,cAAgB,SAAUl5B,EAAMpK,EAAY3hG,EAAGC,EAAGkzB,EAAGd,EAAGozG,EAAQd,GAC9F,IAAIjkC,EAAQ70G,KAAK65I,aAAa35B,GAC9B,GAAKrL,EAAL,CAGA,IAAIuhC,GAAM,QAAOp2I,MACb85I,EAAQhB,EAAa54B,EAAKo2B,SAASF,EAAKtgC,EAAWhjB,MAAQ,EAC3DinD,EAAeD,IAAU95I,KAAKklB,QAAQ80H,YACtCD,IACA/5I,KAAKklB,QAAQ6zH,OACb/4I,KAAKklB,QAAQ80H,YAAcF,GAE/B95I,KAAKklB,QAAQ+0H,UAAUplC,EAAO+kC,EAAQA,EAAQ/kC,EAAMsE,MAAQ,EAAIygC,EAAQ/kC,EAAM7yG,OAAS,EAAI43I,EAAQzlI,EAAGC,EAAGkzB,EAAGd,GACxGuzG,GACA/5I,KAAKklB,QAAQm0H,UAEH,IAAVS,EACAhkC,EAAWqS,SAAU,EAEhB2wB,GACL54B,EAAKg6B,cAAc9D,KAM3BrC,EAAwBzxI,UAAUoxG,SAAW,WACzC,IAAIxuF,EAAUllB,KAAKklB,QACnB,OAAOA,EAAUA,EAAQ8nH,OAAS,MAQtC+G,EAAwBzxI,UAAUu3I,aAAe,SAAU35B,GACvD,OAAOA,EAAKxM,YAOhBqgC,EAAwBzxI,UAAUm3I,oBAAsB,SAAU3jC,EAAYs/B,GAC1E,GAAIA,EAAW+E,iBAAkB,CAM7B,IAAIC,EAAqB,SAAUhF,EAAYlrI,EAAK4rG,GAChD,IAAI8Q,GAAgB,QAAOwuB,GACvBxuB,KAAiB9Q,EAAWyT,WAC5B6rB,EAAWiF,YAAYvkC,EAAWI,UAAUtI,WAAYkI,EAAWyT,UAAU3C,KAEnFp3G,KAAK,KAAM4lI,GACbt/B,EAAW0C,oBAAoBn2G,KACmC,KAS1E0xI,EAAwBzxI,UAAUg3I,gBAAkB,SAAU/vB,EAAW6rB,EAAYl1B,GAEjF,IAAI0G,GAAgB,QAAOwuB,GACrBxuB,KAAiB2C,IACnBA,EAAU3C,GAAiB,IAE/B2C,EAAU3C,GAAe1G,EAAKt/D,WAAY,GAoB9CmzF,EAAwBzxI,UAAUk3I,kBAAoB,SAAU1jC,EAAYs/B,EAAYG,EAAUniC,EAAYxF,EAAYzB,EAAQwrC,EAAUnE,EAAS8G,GACjJ,IAAI1zB,GAAgB,QAAOwuB,GACrBxuB,KAAiB9Q,EAAWiR,cAC9BjR,EAAWiR,YAAYH,GAAiB,IAE5C,IAII1G,EAAMmY,EAAWvR,EAAgB3yG,EAAGC,EAAGzV,EAJvCooH,EAAcjR,EAAWiR,YAAYH,GACrCkB,EAAYhS,EAAWgS,UAEvByyB,EAAY,EAEhB,IAAK57I,EAHS42I,EAAS1U,aAGLliI,GAAKg5I,IAAYh5I,EAG/B,IAFA05H,EAAYkd,EAASQ,0BAA0B5pC,EAAQxtG,EAAG05H,GAC1DvR,EAAiByuB,EAAS3hC,cAAcj1G,GACnCwV,EAAIkkH,EAAUl3H,KAAMgT,GAAKkkH,EAAUh3H,OAAQ8S,EAC5C,IAAKC,EAAIikH,EAAUj3H,KAAMgT,GAAKikH,EAAU/2H,OAAQ8S,EACxCujI,EAAWh5I,GAAK60I,KACd+G,GACFr6B,EAAOk1B,EAAWP,QAAQl2I,EAAGwV,EAAGC,EAAGg/F,EAAYxF,IACtCiG,YAAcsM,EAAA,SACnB4G,EAAY7G,EAAKt/D,WAAY,EACxBknE,EAAU7I,YAAYiB,EAAKt/D,WAC5BknE,EAAUpJ,QAAQ,CACdwB,EACA0G,EACA2uB,EAASiF,mBAAmBt6B,EAAKgY,WACjCpR,UAIa15G,IAArBktI,GACAA,EAAiBp6B,IAIrBk1B,EAAWqF,QAAQ97I,EAAGwV,EAAGC,EAAGw5F,GAK5CwnC,EAAWsF,gBAAgBH,EAAW3sC,IAEnCmmC,EArdiC,CAsd1C,KAKFA,EAAwBzxI,UAAUqyI,SAClC,QC9fI,EAAwC,WACxC,IAAIljC,EAAgB,SAAU7+F,EAAGjT,GAI7B,OAHA8xG,EAAgB/oG,OAAOipG,gBAClB,CAAE3pF,UAAW,cAAgB/gB,OAAS,SAAU2L,EAAGjT,GAAKiT,EAAEoV,UAAYroB,IACvE,SAAUiT,EAAGjT,GAAK,IAAK,IAAIqB,KAAKrB,EAAO+I,OAAOpG,UAAUqiB,eAAe/U,KAAKjQ,EAAGqB,KAAI4R,EAAE5R,GAAKrB,EAAEqB,KACzFywG,EAAc7+F,EAAGjT,IAE5B,OAAO,SAAUiT,EAAGjT,GAChB,GAAiB,oBAANA,GAA0B,OAANA,EAC3B,MAAM,IAAI6jB,UAAU,uBAAyB6G,OAAO1qB,GAAK,iCAE7D,SAASiyG,IAAO5xG,KAAKwL,YAAcoH,EADnC6+F,EAAc7+F,EAAGjT,GAEjBiT,EAAEtQ,UAAkB,OAAN3C,EAAa+I,OAAOojC,OAAOnsC,IAAMiyG,EAAGtvG,UAAY3C,EAAE2C,UAAW,IAAIsvG,IAZ3C,GAkD5C,EAlB+B,SAAUG,GAKrC,SAAS4oC,EAAUvoC,GACf,OAAOL,EAAOniG,KAAK5P,KAAMoyG,IAAgBpyG,KAU7C,OAfA,EAAU26I,EAAW5oC,GAYrB4oC,EAAUr4I,UAAU6hH,eAAiB,WACjC,OAAO,IAAI,EAAwBnkH,OAEhC26I,EAhBmB,CAiB5BC,4EChDMnpC,6CADJC,GACID,EAAgB,SAAU7+F,EAAGjT,GAI7B,OAHA8xG,EAAgB/oG,OAAOipG,gBAClB,CAAE3pF,UAAW,cAAgB/gB,OAAS,SAAU2L,EAAGjT,GAAKiT,EAAEoV,UAAYroB,IACvE,SAAUiT,EAAGjT,GAAK,IAAK,IAAIqB,KAAKrB,EAAO+I,OAAOpG,UAAUqiB,eAAe/U,KAAKjQ,EAAGqB,KAAI4R,EAAE5R,GAAKrB,EAAEqB,KACzFywG,EAAc7+F,EAAGjT,IAErB,SAAUiT,EAAGjT,GAChB,GAAiB,oBAANA,GAA0B,OAANA,EAC3B,MAAM,IAAI6jB,UAAU,uBAAyB6G,OAAO1qB,GAAK,iCAE7D,SAASiyG,IAAO5xG,KAAKwL,YAAcoH,EADnC6+F,EAAc7+F,EAAGjT,GAEjBiT,EAAEtQ,UAAkB,OAAN3C,EAAa+I,OAAOojC,OAAOnsC,IAAMiyG,EAAGtvG,UAAY3C,EAAE2C,UAAW,IAAIsvG,KA6DnFC,EACc,cA4KlB,EA/JqC,SAAUE,GAK3C,SAAS8oC,EAAgBzoC,GACrB,IAAI34E,EAAQz5B,KACRyG,EAAU2rG,GAA4B,GACtCk/B,GAAc,QAAO,GAAI7qI,GA+C7B,cA9CO6qI,EAAYr4B,aACZq4B,EAAYwJ,oBACZxJ,EAAYyJ,4BACZzJ,EAAY0J,wBACnBvhH,EAAQs4E,EAAOniG,KAAK5P,KAAMsxI,IAAgBtxI,MAKpCi7I,gBACoB7tI,IAAtB3G,EAAQy0I,WAA0Bz0I,EAAQy0I,UAK9CzhH,EAAM0hH,mBACuB/tI,IAAzB3G,EAAQq0I,aAA6Br0I,EAAQq0I,aAAe,IAMhErhH,EAAM2hH,OAAS,KAMf3hH,EAAM4hH,oBAAiBjuI,EACvBqsB,EAAM6hH,SAAS70I,EAAQwyG,OAKvBx/E,EAAM8hH,2BAC+BnuI,IAAjC3G,EAAQs0I,sBACFt0I,EAAQs0I,qBAMlBthH,EAAM+hH,6BACiCpuI,IAAnC3G,EAAQu0I,wBACFv0I,EAAQu0I,uBAEXvhH,EAsGX,OA5JAi4E,EAAUmpC,EAAiB9oC,GA2D3B8oC,EAAgBv4I,UAAUm5I,aAAe,WACrC,OAAOz7I,KAAKi7I,YAgBhBJ,EAAgBv4I,UAAUmwI,YAAc,SAAUt6B,GAC9C,OAAOpG,EAAOzvG,UAAUmwI,YAAY7iI,KAAK5P,KAAMm4G,IAKnD0iC,EAAgBv4I,UAAUo5I,gBAAkB,WACxC,OAAO17I,KAAKm7I,eAMhBN,EAAgBv4I,UAAUq5I,eAAiB,WACvC,OAA2E37I,KAAK4nB,IAAIiqF,IAQxFgpC,EAAgBv4I,UAAUs5I,SAAW,WACjC,OAAO57I,KAAKo7I,QAOhBP,EAAgBv4I,UAAUu5I,iBAAmB,WACzC,OAAO77I,KAAKq7I,gBAMhBR,EAAgBv4I,UAAUw5I,wBAA0B,WAChD,OAAO97I,KAAKu7I,uBAMhBV,EAAgBv4I,UAAUy5I,0BAA4B,WAClD,OAAO/7I,KAAKw7I,yBAMhBX,EAAgBv4I,UAAUg4G,gBAAkB,SAAUxE,GAC7CA,EAAWwT,gBACZxT,EAAWwT,cAAgB,IAAI,EAAM,IAEvBtpH,KAAK43G,cAAe0C,gBAAgBxE,IAM1D+kC,EAAgBv4I,UAAU05I,eAAiB,SAAUC,GACjDj8I,KAAKkb,IAAI22F,EAAuBoqC,IAYpCpB,EAAgBv4I,UAAUg5I,SAAW,SAAUY,GAC3Cl8I,KAAKo7I,YAAuBhuI,IAAd8uI,EAA0BA,EAAY,KACpDl8I,KAAKq7I,eACa,OAAda,OAAqB9uI,GAAY,QAAgBpN,KAAKo7I,QAC1Dp7I,KAAKuzG,WAEFsnC,EA7JyB,CA8JlC3I,EAAA,GC/OEiK,EAAc,CACdC,eAAgB,EAChBC,WAAY,EACZC,OAAQ,EACRC,WAAY,EACZC,OAAQ,EACRC,WAAY,EACZC,WAAY,EACZC,aAAc,EACdC,KAAM,EACNC,gBAAiB,EACjBC,eAAgB,GAChBC,iBAAkB,GAClBC,OAAQ,IAKDC,EAAkB,CAACd,EAAYS,MAI/BM,EAAoB,CAACf,EAAYa,QAIjCG,EAAuB,CAAChB,EAAYE,YAIpCe,EAAuB,CAACjB,EAAYI,YAC/C,0BC+DA,EA3FmC,WAC/B,SAASc,KAwFT,OA9EAA,EAAc/6I,UAAUg7I,WAAa,SAAUz2I,EAAUP,EAASi3I,EAAUC,KAM5EH,EAAc/6I,UAAUm7I,aAAe,SAAU52I,KAMjDw2I,EAAc/6I,UAAUg5I,SAAW,SAAUriC,KAK7CokC,EAAc/6I,UAAUo7I,WAAa,SAAUC,EAAgBr3I,KAK/D+2I,EAAc/6I,UAAUs7I,YAAc,SAAUt3I,EAAS2yG,KAKzDokC,EAAc/6I,UAAUu7I,uBAAyB,SAAUC,EAA4Bx3I,KAKvF+2I,EAAc/6I,UAAUy7I,eAAiB,SAAUC,EAAoB13I,KAKvE+2I,EAAc/6I,UAAU27I,oBAAsB,SAAUC,EAAyB53I,KAKjF+2I,EAAc/6I,UAAU67I,eAAiB,SAAUC,EAAoB93I,KAKvE+2I,EAAc/6I,UAAU+7I,iBAAmB,SAAUC,EAAsBh4I,KAK3E+2I,EAAc/6I,UAAUi8I,UAAY,SAAUC,EAAel4I,KAK7D+2I,EAAc/6I,UAAUm8I,YAAc,SAAUC,EAAiBp4I,KAKjE+2I,EAAc/6I,UAAUq8I,SAAW,SAAU93I,EAAUP,KAKvD+2I,EAAc/6I,UAAUs8I,mBAAqB,SAAUC,EAAWC,KAKlEzB,EAAc/6I,UAAUy8I,cAAgB,SAAUC,EAAYC,KAK9D5B,EAAc/6I,UAAU48I,aAAe,SAAUC,EAAWF,KACrD5B,EAzFuB,0DCT9B,EAAwC,WACxC,IAAI5rC,EAAgB,SAAU7+F,EAAGjT,GAI7B,OAHA8xG,EAAgB/oG,OAAOipG,gBAClB,CAAE3pF,UAAW,cAAgB/gB,OAAS,SAAU2L,EAAGjT,GAAKiT,EAAEoV,UAAYroB,IACvE,SAAUiT,EAAGjT,GAAK,IAAK,IAAIqB,KAAKrB,EAAO+I,OAAOpG,UAAUqiB,eAAe/U,KAAKjQ,EAAGqB,KAAI4R,EAAE5R,GAAKrB,EAAEqB,KACzFywG,EAAc7+F,EAAGjT,IAE5B,OAAO,SAAUiT,EAAGjT,GAChB,GAAiB,oBAANA,GAA0B,OAANA,EAC3B,MAAM,IAAI6jB,UAAU,uBAAyB6G,OAAO1qB,GAAK,iCAE7D,SAASiyG,IAAO5xG,KAAKwL,YAAcoH,EADnC6+F,EAAc7+F,EAAGjT,GAEjBiT,EAAEtQ,UAAkB,OAAN3C,EAAa+I,OAAOojC,OAAOnsC,IAAMiyG,EAAGtvG,UAAY3C,EAAE2C,UAAW,IAAIsvG,IAZ3C,GA2BxCwtC,EAA+B,SAAUrtC,GAQzC,SAASqtC,EAAc7tD,EAAWl+C,EAAW8/D,EAAYC,GACrD,IAAI35E,EAAQs4E,EAAOniG,KAAK5P,OAASA,KAoEjC,OA/DAy5B,EAAM83D,UAAYA,EAMlB93D,EAAM4Z,UAAYA,EAKlB5Z,EAAM25E,WAAaA,EAKnB35E,EAAM4lH,aAAe,EAMrB5lH,EAAM05E,WAAaA,EAKnB15E,EAAM6lH,2BAA6B,KAKnC7lH,EAAM8lH,2BAA6B,KAKnC9lH,EAAM+lH,mBAAqB,KAK3B/lH,EAAMgmH,aAAe,GAKrBhmH,EAAM1yB,YAAc,GAKpB0yB,EAAMimH,eAAiB,GAKvBjmH,EAAMkmH,yBAA2B,GAKjClmH,EAAM45E,MAA8D,GAC7D55E,EAidX,OA7hBA,EAAU2lH,EAAertC,GAmFzBqtC,EAAc98I,UAAUs9I,gBAAkB,SAAUC,GAChD,IAAIzsC,EAAapzG,KAAKozG,WACtB,OAAqB,GAAdA,EACDysC,EACAA,EAAU31I,KAAI,SAAU41I,GACtB,OAAOA,EAAO1sC,MAS1BgsC,EAAc98I,UAAUy9I,2BAA6B,SAAUC,EAAiB7d,GAK5E,IAJA,IAAIh2B,EAASnsG,KAAKigJ,uBACdzoC,EAAWx3G,KAAK0/I,eAChB34I,EAAc/G,KAAK+G,YACnBm5I,EAAQn5I,EAAYxI,OACfe,EAAI,EAAGiS,EAAKyuI,EAAgBzhJ,OAAQe,EAAIiS,EAAIjS,GAAK6iI,EACtD3qB,EAAS,GAAKwoC,EAAgB1gJ,GAC9Bk4G,EAAS,GAAKwoC,EAAgB1gJ,EAAI,IAC9B,QAAmB6sG,EAAQqL,KAC3BzwG,EAAYm5I,KAAW1oC,EAAS,GAChCzwG,EAAYm5I,KAAW1oC,EAAS,IAGxC,OAAO0oC,GAYXd,EAAc98I,UAAU69I,0BAA4B,SAAUH,EAAiBlnD,EAAQv6E,EAAK4jH,EAAQp9B,EAAQq7C,GACxG,IAAIr5I,EAAc/G,KAAK+G,YACnBm5I,EAAQn5I,EAAYxI,OACpB4tG,EAASnsG,KAAKigJ,uBACdG,IACAtnD,GAAUqpC,GAEd,IAII7iI,EAAG+gJ,EAASC,EAJZC,EAAaP,EAAgBlnD,GAC7B0nD,EAAaR,EAAgBlnD,EAAS,GACtC2nD,EAAYzgJ,KAAK0/I,eACjBgB,GAAU,EAEd,IAAKphJ,EAAIw5F,EAASqpC,EAAQ7iI,EAAIif,EAAKjf,GAAK6iI,EACpCse,EAAU,GAAKT,EAAgB1gJ,GAC/BmhJ,EAAU,GAAKT,EAAgB1gJ,EAAI,IACnCghJ,GAAU,QAAuBn0C,EAAQs0C,MACzBJ,GACRK,IACA35I,EAAYm5I,KAAWK,EACvBx5I,EAAYm5I,KAAWM,EACvBE,GAAU,GAEd35I,EAAYm5I,KAAWO,EAAU,GACjC15I,EAAYm5I,KAAWO,EAAU,IAE5BH,IAAYK,EAAA,gBACjB55I,EAAYm5I,KAAWO,EAAU,GACjC15I,EAAYm5I,KAAWO,EAAU,GACjCC,GAAU,GAGVA,GAAU,EAEdH,EAAaE,EAAU,GACvBD,EAAaC,EAAU,GACvBJ,EAAUC,EAOd,OAJKv7C,GAAU27C,GAAYphJ,IAAMw5F,EAASqpC,KACtCp7H,EAAYm5I,KAAWK,EACvBx5I,EAAYm5I,KAAWM,GAEpBN,GAUXd,EAAc98I,UAAUs+I,uBAAyB,SAAUZ,EAAiBlnD,EAAQjC,EAAMsrC,EAAQ0e,GAC9F,IAAK,IAAIvhJ,EAAI,EAAGiS,EAAKslF,EAAKt4F,OAAQe,EAAIiS,IAAMjS,EAAG,CAC3C,IAAIif,EAAMs4E,EAAKv3F,GACXwhJ,EAAa9gJ,KAAKmgJ,0BAA0BH,EAAiBlnD,EAAQv6E,EAAK4jH,GAAQ,GAAO,GAC7F0e,EAAYx+I,KAAKy+I,GACjBhoD,EAASv6E,EAEb,OAAOu6E,GAQXsmD,EAAc98I,UAAUg7I,WAAa,SAAUz2I,EAAUP,EAASi3I,EAAUC,GACxEx9I,KAAK+gJ,cAAcl6I,EAAUP,GAC7B,IAGI05I,EAAiBc,EAAYD,EAAaG,EAC1CloD,EAJAnyF,EAAOE,EAASuhD,UAChB+5E,EAASt7H,EAASu7H,YAClB6e,EAAejhJ,KAAK+G,YAAYxI,OAGpC,OAAQoI,GACJ,KAAKm7H,EAAA,gBACDke,EACgE,EAAWkB,6BAC3EF,EAAe,GACf,IAAIG,EACwD,EAAWC,WACvEtoD,EAAS,EACT,IAAK,IAAIx5F,EAAI,EAAGiS,EAAK4vI,EAAM5iJ,OAAQe,EAAIiS,IAAMjS,EAAG,CAC5C,IAAI+hJ,EAAS,GACbvoD,EAAS94F,KAAK4gJ,uBAAuBZ,EAAiBlnD,EAAQqoD,EAAM7hJ,GAAI6iI,EAAQkf,GAChFL,EAAa3+I,KAAKg/I,GAEtBrhJ,KAAKy/I,aAAap9I,KAAK,CACnB,SACA4+I,EACAD,EACAn6I,EACA02I,EACA+D,EAAA,KAEJthJ,KAAK2/I,yBAAyBt9I,KAAK,CAC/B,SACA4+I,EACAD,EACAn6I,EACA22I,GAAwBD,EACxB+D,EAAA,KAEJ,MACJ,KAAKxf,EAAA,UACL,KAAKA,EAAA,oBACD+e,EAAc,GACdb,EACIr5I,GAAQm7H,EAAA,UACqD,EAAWof,6BAClEr6I,EAASq7H,qBACnBppC,EAAS94F,KAAK4gJ,uBAAuBZ,EAAiB,EACiD,EAAWuB,UAAWpf,EAAQ0e,GACrI7gJ,KAAKy/I,aAAap9I,KAAK,CACnB,SACA4+I,EACAJ,EACAh6I,EACA02I,EACA+D,EAAA,KAEJthJ,KAAK2/I,yBAAyBt9I,KAAK,CAC/B,SACA4+I,EACAJ,EACAh6I,EACA22I,GAAwBD,EACxB+D,EAAA,KAEJ,MACJ,KAAKxf,EAAA,cACL,KAAKA,EAAA,SACDke,EAAkBn5I,EAASq7H,qBAC3B4e,EAAa9gJ,KAAKmgJ,0BAA0BH,EAAiB,EAAGA,EAAgBzhJ,OAAQ4jI,GAAQ,GAAO,GACvGniI,KAAKy/I,aAAap9I,KAAK,CACnB,SACA4+I,EACAH,EACAj6I,EACA02I,EACA+D,EAAA,KAEJthJ,KAAK2/I,yBAAyBt9I,KAAK,CAC/B,SACA4+I,EACAH,EACAj6I,EACA22I,GAAwBD,EACxB+D,EAAA,KAEJ,MACJ,KAAKxf,EAAA,cACDke,EAAkBn5I,EAASq7H,sBAC3B4e,EAAa9gJ,KAAK+/I,2BAA2BC,EAAiB7d,IAC7C8e,IACbjhJ,KAAKy/I,aAAap9I,KAAK,CACnB,SACA4+I,EACAH,EACAj6I,EACA02I,EACA+D,EAAA,KAEJthJ,KAAK2/I,yBAAyBt9I,KAAK,CAC/B,SACA4+I,EACAH,EACAj6I,EACA22I,GAAwBD,EACxB+D,EAAA,MAGR,MACJ,KAAKxf,EAAA,QACDke,EAAkBn5I,EAASq7H,qBAC3BliI,KAAK+G,YAAY1E,KAAK29I,EAAgB,GAAIA,EAAgB,IAC1Dc,EAAa9gJ,KAAK+G,YAAYxI,OAC9ByB,KAAKy/I,aAAap9I,KAAK,CACnB,SACA4+I,EACAH,EACAj6I,EACA02I,IAEJv9I,KAAK2/I,yBAAyBt9I,KAAK,CAC/B,SACA4+I,EACAH,EACAj6I,EACA22I,GAAwBD,IAKpCv9I,KAAKwhJ,YAAYl7I,IAOrB84I,EAAc98I,UAAUy+I,cAAgB,SAAUl6I,EAAUP,GACxDtG,KAAKs/I,2BAA6B,CAC9B,iBACAh5I,EACA,EACAO,GAEJ7G,KAAKy/I,aAAap9I,KAAKrC,KAAKs/I,4BAC5Bt/I,KAAKu/I,2BAA6B,CAC9B,iBACAj5I,EACA,EACAO,GAEJ7G,KAAK2/I,yBAAyBt9I,KAAKrC,KAAKu/I,6BAK5CH,EAAc98I,UAAUm/I,OAAS,WAC7B,MAAO,CACHhC,aAAcz/I,KAAKy/I,aACnBE,yBAA0B3/I,KAAK2/I,yBAC/B54I,YAAa/G,KAAK+G,cAM1Bq4I,EAAc98I,UAAUo/I,gCAAkC,WACtD,IAIIpiJ,EAJAqgJ,EAA2B3/I,KAAK2/I,yBAEpCA,EAAyBv5H,UAGzB,IACIu7H,EACAh7I,EAFAlI,EAAIkhJ,EAAyBphJ,OAG7B2wH,GAAS,EACb,IAAK5vH,EAAI,EAAGA,EAAIb,IAAKa,GAEjBqH,GADAg7I,EAAchC,EAAyBrgJ,IAC+B,KAC1D,eACR4vH,EAAQ5vH,EAEHqH,GAAQ,mBACbg7I,EAAY,GAAKriJ,GACjB,QAAgBU,KAAK2/I,yBAA0BzwB,EAAO5vH,GACtD4vH,GAAS,IAQrBkwB,EAAc98I,UAAUs8I,mBAAqB,SAAUC,EAAWC,GAC9D,IAAIzrC,EAAQrzG,KAAKqzG,MACjB,GAAIwrC,EAAW,CACX,IAAI+C,EAAiB/C,EAAUgD,WAC/BxuC,EAAMwrC,WAAY,OAAY+C,GAAkC,WAGhEvuC,EAAMwrC,eAAYzxI,EAEtB,GAAI0xI,EAAa,CACb,IAAIgD,EAAmBhD,EAAY+C,WACnCxuC,EAAMyrC,aAAc,OAAYgD,GAAsC,MACtE,IAAIC,EAAqBjD,EAAYkD,aACrC3uC,EAAM4uC,aACqB70I,IAAvB20I,EAAmCA,EAAqB,KAC5D,IAAIG,EAAsBpD,EAAYqD,cACtC9uC,EAAM+uC,SAAWF,EACXA,EAAoBh/I,QACpB,KACN,IAAIm/I,EAA4BvD,EAAYwD,oBAC5CjvC,EAAMkvC,eAAiBF,GAEjB,KACN,IAAIG,EAAsB1D,EAAY2D,cACtCpvC,EAAMqvC,cACsBt1I,IAAxBo1I,EACMA,EACA,KACV,IAAIG,EAAmB7D,EAAYrsG,WACnC4gE,EAAMuvC,eACmBx1I,IAArBu1I,EAAiCA,EAAmB,KACxD,IAAIE,EAAwB/D,EAAYgE,gBACxCzvC,EAAM0vC,gBACwB31I,IAA1By1I,EACMA,EACA,KACNxvC,EAAMuvC,UAAY5iJ,KAAKq/I,eACvBr/I,KAAKq/I,aAAehsC,EAAMuvC,UAE1B5iJ,KAAKw/I,mBAAqB,WAI9BnsC,EAAMyrC,iBAAc1xI,EACpBimG,EAAM4uC,aAAU70I,EAChBimG,EAAM+uC,SAAW,KACjB/uC,EAAMkvC,oBAAiBn1I,EACvBimG,EAAMqvC,cAAWt1I,EACjBimG,EAAMuvC,eAAYx1I,EAClBimG,EAAM0vC,gBAAa31I,GAO3BgyI,EAAc98I,UAAU0gJ,WAAa,SAAU3vC,GAC3C,IAAIwrC,EAAYxrC,EAAMwrC,UAElB5B,EAAkB,CAAC,iBAAkC4B,GAKzD,MAJyB,kBAAdA,GAEP5B,EAAgB56I,MAAK,GAElB46I,GAKXmC,EAAc98I,UAAU2gJ,YAAc,SAAU5vC,GAC5CrzG,KAAKy/I,aAAap9I,KAAKrC,KAAKkjJ,aAAa7vC,KAM7C+rC,EAAc98I,UAAU4gJ,aAAe,SAAU7vC,GAC7C,MAAO,CACH,mBACAA,EAAMyrC,YACNzrC,EAAMuvC,UAAY5iJ,KAAKozG,WACvBC,EAAM4uC,QACN5uC,EAAMqvC,SACNrvC,EAAM0vC,WACN/iJ,KAAK4/I,gBAAgBvsC,EAAM+uC,UAC3B/uC,EAAMkvC,eAAiBviJ,KAAKozG,aAOpCgsC,EAAc98I,UAAU6gJ,gBAAkB,SAAU9vC,EAAO2vC,GACvD,IAAInE,EAAYxrC,EAAMwrC,UACG,kBAAdA,GAA0BxrC,EAAM+vC,kBAAoBvE,SACzCzxI,IAAdyxI,GACA7+I,KAAKy/I,aAAap9I,KAAK2gJ,EAAWpzI,KAAK5P,KAAMqzG,IAEjDA,EAAM+vC,iBAAmBvE,IAOjCO,EAAc98I,UAAU+gJ,kBAAoB,SAAUhwC,EAAO4vC,GACzD,IAAInE,EAAczrC,EAAMyrC,YACpBmD,EAAU5uC,EAAM4uC,QAChBG,EAAW/uC,EAAM+uC,SACjBG,EAAiBlvC,EAAMkvC,eACvBG,EAAWrvC,EAAMqvC,SACjBE,EAAYvvC,EAAMuvC,UAClBG,EAAa1vC,EAAM0vC,YACnB1vC,EAAMiwC,oBAAsBxE,GAC5BzrC,EAAMkwC,gBAAkBtB,GACvBG,GAAY/uC,EAAMmwC,mBACd,QAAOnwC,EAAMmwC,gBAAiBpB,IACnC/uC,EAAMowC,uBAAyBlB,GAC/BlvC,EAAMqwC,iBAAmBhB,GACzBrvC,EAAMswC,kBAAoBf,GAC1BvvC,EAAMuwC,mBAAqBb,UACP31I,IAAhB0xI,GACAmE,EAAYrzI,KAAK5P,KAAMqzG,GAE3BA,EAAMiwC,mBAAqBxE,EAC3BzrC,EAAMkwC,eAAiBtB,EACvB5uC,EAAMmwC,gBAAkBpB,EACxB/uC,EAAMowC,sBAAwBlB,EAC9BlvC,EAAMqwC,gBAAkBhB,EACxBrvC,EAAMswC,iBAAmBf,EACzBvvC,EAAMuwC,kBAAoBb,IAMlC3D,EAAc98I,UAAUk/I,YAAc,SAAUl7I,GAC5CtG,KAAKs/I,2BAA2B,GAAKt/I,KAAKy/I,aAAalhJ,OACvDyB,KAAKs/I,2BAA6B,KAClCt/I,KAAKu/I,2BAA2B,GAAKv/I,KAAK2/I,yBAAyBphJ,OACnEyB,KAAKu/I,2BAA6B,KAClC,IAAIsE,EAAyB,CAAC,eAAgCv9I,GAC9DtG,KAAKy/I,aAAap9I,KAAKwhJ,GACvB7jJ,KAAK2/I,yBAAyBt9I,KAAKwhJ,IASvCzE,EAAc98I,UAAU29I,qBAAuB,WAC3C,IAAKjgJ,KAAKw/I,qBACNx/I,KAAKw/I,oBAAqB,QAAMx/I,KAAKqzC,WACjCrzC,KAAKq/I,aAAe,GAAG,CACvB,IAAIlmC,EAASn5G,KAAKmzG,YAAcnzG,KAAKq/I,aAAe,GAAM,GAC1D,QAAOr/I,KAAKw/I,mBAAoBrmC,EAAOn5G,KAAKw/I,oBAGpD,OAAOx/I,KAAKw/I,oBAETJ,EA9hBuB,CA+hBhC,GACF,IC3jBI,EAAwC,WACxC,IAAI3tC,EAAgB,SAAU7+F,EAAGjT,GAI7B,OAHA8xG,EAAgB/oG,OAAOipG,gBAClB,CAAE3pF,UAAW,cAAgB/gB,OAAS,SAAU2L,EAAGjT,GAAKiT,EAAEoV,UAAYroB,IACvE,SAAUiT,EAAGjT,GAAK,IAAK,IAAIqB,KAAKrB,EAAO+I,OAAOpG,UAAUqiB,eAAe/U,KAAKjQ,EAAGqB,KAAI4R,EAAE5R,GAAKrB,EAAEqB,KACzFywG,EAAc7+F,EAAGjT,IAE5B,OAAO,SAAUiT,EAAGjT,GAChB,GAAiB,oBAANA,GAA0B,OAANA,EAC3B,MAAM,IAAI6jB,UAAU,uBAAyB6G,OAAO1qB,GAAK,iCAE7D,SAASiyG,IAAO5xG,KAAKwL,YAAcoH,EADnC6+F,EAAc7+F,EAAGjT,GAEjBiT,EAAEtQ,UAAkB,OAAN3C,EAAa+I,OAAOojC,OAAOnsC,IAAMiyG,EAAGtvG,UAAY3C,EAAE2C,UAAW,IAAIsvG,IAZ3C,GAmQ5C,EA/OwC,SAAUG,GAQ9C,SAAS+xC,EAAmBvyD,EAAWl+C,EAAW8/D,EAAYC,GAC1D,IAAI35E,EAAQs4E,EAAOniG,KAAK5P,KAAMuxF,EAAWl+C,EAAW8/D,EAAYC,IAAepzG,KAwE/E,OAnEAy5B,EAAMsqH,mBAAqB,KAK3BtqH,EAAM26E,OAAS,KAKf36E,EAAMuqH,sBAAmB52I,EAKzBqsB,EAAMwqH,cAAW72I,EAKjBqsB,EAAMyqH,cAAW92I,EAKjBqsB,EAAM0qH,aAAU/2I,EAKhBqsB,EAAM2qH,cAAWh3I,EAKjBqsB,EAAM4qH,cAAWj3I,EAKjBqsB,EAAM6qH,cAAWl3I,EAKjBqsB,EAAM8qH,qBAAkBn3I,EAKxBqsB,EAAM+zF,eAAYpgH,EAKlBqsB,EAAM+qH,YAASp3I,EAKfqsB,EAAMgrH,YAASr3I,EAMfqsB,EAAMirH,6BAA0Bt3I,EACzBqsB,EA4JX,OA5OA,EAAUqqH,EAAoB/xC,GAsF9B+xC,EAAmBxhJ,UAAUi8I,UAAY,SAAUC,EAAel4I,GAC9D,GAAKtG,KAAKo0G,OAAV,CAGAp0G,KAAK+gJ,cAAcvC,EAAel4I,GAClC,IAAI05I,EAAkBxB,EAActc,qBAChCC,EAASqc,EAAcpc,YACvBuiB,EAAU3kJ,KAAK+G,YAAYxI,OAC3B2hJ,EAAQlgJ,KAAK+/I,2BAA2BC,EAAiB7d,GAC7DniI,KAAKy/I,aAAap9I,KAAK,CACnB,aACAsiJ,EACAzE,EACAlgJ,KAAKo0G,OAELp0G,KAAKikJ,SAAWjkJ,KAAKgkJ,iBACrBhkJ,KAAKkkJ,SAAWlkJ,KAAKgkJ,iBACrBplJ,KAAKuB,KAAKH,KAAKmkJ,QAAUnkJ,KAAKgkJ,kBAC9BhkJ,KAAKokJ,SACLpkJ,KAAKqkJ,SACLrkJ,KAAKskJ,SACLtkJ,KAAKukJ,gBACLvkJ,KAAKwtH,UACL,CACKxtH,KAAKwkJ,OAAO,GAAKxkJ,KAAKozG,WAAcpzG,KAAKgkJ,iBACzChkJ,KAAKwkJ,OAAO,GAAKxkJ,KAAKozG,WAAcpzG,KAAKgkJ,kBAE9CplJ,KAAKuB,KAAKH,KAAKykJ,OAASzkJ,KAAKgkJ,kBAC7BhkJ,KAAK0kJ,0BAET1kJ,KAAK2/I,yBAAyBt9I,KAAK,CAC/B,aACAsiJ,EACAzE,EACAlgJ,KAAK+jJ,mBAEL/jJ,KAAKikJ,SACLjkJ,KAAKkkJ,SACLlkJ,KAAKmkJ,QACLnkJ,KAAKokJ,SACLpkJ,KAAKqkJ,SACLrkJ,KAAKskJ,SACLtkJ,KAAKukJ,gBACLvkJ,KAAKwtH,UACLxtH,KAAKwkJ,OACLxkJ,KAAKykJ,OACLzkJ,KAAK0kJ,0BAET1kJ,KAAKwhJ,YAAYl7I,KAMrBw9I,EAAmBxhJ,UAAU67I,eAAiB,SAAUC,EAAoB93I,GACxE,GAAKtG,KAAKo0G,OAAV,CAGAp0G,KAAK+gJ,cAAc3C,EAAoB93I,GACvC,IAAI05I,EAAkB5B,EAAmBlc,qBACrCC,EAASic,EAAmBhc,YAC5BuiB,EAAU3kJ,KAAK+G,YAAYxI,OAC3B2hJ,EAAQlgJ,KAAK+/I,2BAA2BC,EAAiB7d,GAC7DniI,KAAKy/I,aAAap9I,KAAK,CACnB,aACAsiJ,EACAzE,EACAlgJ,KAAKo0G,OAELp0G,KAAKikJ,SAAWjkJ,KAAKgkJ,iBACrBhkJ,KAAKkkJ,SAAWlkJ,KAAKgkJ,iBACrBplJ,KAAKuB,KAAKH,KAAKmkJ,QAAUnkJ,KAAKgkJ,kBAC9BhkJ,KAAKokJ,SACLpkJ,KAAKqkJ,SACLrkJ,KAAKskJ,SACLtkJ,KAAKukJ,gBACLvkJ,KAAKwtH,UACL,CACKxtH,KAAKwkJ,OAAO,GAAKxkJ,KAAKozG,WAAcpzG,KAAKgkJ,iBACzChkJ,KAAKwkJ,OAAO,GAAKxkJ,KAAKozG,WAAcpzG,KAAKgkJ,kBAE9CplJ,KAAKuB,KAAKH,KAAKykJ,OAASzkJ,KAAKgkJ,kBAC7BhkJ,KAAK0kJ,0BAET1kJ,KAAK2/I,yBAAyBt9I,KAAK,CAC/B,aACAsiJ,EACAzE,EACAlgJ,KAAK+jJ,mBAEL/jJ,KAAKikJ,SACLjkJ,KAAKkkJ,SACLlkJ,KAAKmkJ,QACLnkJ,KAAKokJ,SACLpkJ,KAAKqkJ,SACLrkJ,KAAKskJ,SACLtkJ,KAAKukJ,gBACLvkJ,KAAKwtH,UACLxtH,KAAKwkJ,OACLxkJ,KAAKykJ,OACLzkJ,KAAK0kJ,0BAET1kJ,KAAKwhJ,YAAYl7I,KAKrBw9I,EAAmBxhJ,UAAUm/I,OAAS,WAgBlC,OAfAzhJ,KAAK0hJ,kCAEL1hJ,KAAKikJ,cAAW72I,EAChBpN,KAAKkkJ,cAAW92I,EAChBpN,KAAK+jJ,mBAAqB,KAC1B/jJ,KAAKo0G,OAAS,KACdp0G,KAAKgkJ,sBAAmB52I,EACxBpN,KAAKmkJ,aAAU/2I,EACfpN,KAAKwkJ,YAASp3I,EACdpN,KAAKokJ,cAAWh3I,EAChBpN,KAAKqkJ,cAAWj3I,EAChBpN,KAAKskJ,cAAWl3I,EAChBpN,KAAKukJ,qBAAkBn3I,EACvBpN,KAAKwtH,eAAYpgH,EACjBpN,KAAKykJ,YAASr3I,EACP2kG,EAAOzvG,UAAUm/I,OAAO7xI,KAAK5P,OAMxC8jJ,EAAmBxhJ,UAAUy8I,cAAgB,SAAUC,EAAY4F,GAC/D,IAAI52B,EAASgxB,EAAW6F,YACpBpwH,EAAOuqH,EAAWz4B,UAClBu+B,EAAoB9F,EAAW+F,uBAC/BlwC,EAAQmqC,EAAWtrC,SAAS1zG,KAAKozG,YACjC9f,EAAS0rD,EAAWgG,YACxBhlJ,KAAKgkJ,iBAAmBhF,EAAWrrC,cAAc3zG,KAAKozG,YACtDpzG,KAAKikJ,SAAWj2B,EAAO,GACvBhuH,KAAKkkJ,SAAWl2B,EAAO,GACvBhuH,KAAK+jJ,mBAAqBe,EAC1B9kJ,KAAKo0G,OAASS,EACd70G,KAAKmkJ,QAAU1vH,EAAK,GACpBz0B,KAAKokJ,SAAWpF,EAAWvO,aAC3BzwI,KAAKqkJ,SAAW/wD,EAAO,GAAKtzF,KAAKgkJ,iBACjChkJ,KAAKskJ,SAAWhxD,EAAO,GAAKtzF,KAAKgkJ,iBACjChkJ,KAAKukJ,gBAAkBvF,EAAWiG,oBAClCjlJ,KAAKwtH,UAAYwxB,EAAWtxB,cAC5B1tH,KAAKwkJ,OAASxF,EAAWkG,gBACzBllJ,KAAKykJ,OAAShwH,EAAK,GACnBz0B,KAAK0kJ,wBAA0BE,GAE5Bd,EA7O4B,CA8OrC,GClQE,EAAwC,WACxC,IAAIryC,EAAgB,SAAU7+F,EAAGjT,GAI7B,OAHA8xG,EAAgB/oG,OAAOipG,gBAClB,CAAE3pF,UAAW,cAAgB/gB,OAAS,SAAU2L,EAAGjT,GAAKiT,EAAEoV,UAAYroB,IACvE,SAAUiT,EAAGjT,GAAK,IAAK,IAAIqB,KAAKrB,EAAO+I,OAAOpG,UAAUqiB,eAAe/U,KAAKjQ,EAAGqB,KAAI4R,EAAE5R,GAAKrB,EAAEqB,KACzFywG,EAAc7+F,EAAGjT,IAE5B,OAAO,SAAUiT,EAAGjT,GAChB,GAAiB,oBAANA,GAA0B,OAANA,EAC3B,MAAM,IAAI6jB,UAAU,uBAAyB6G,OAAO1qB,GAAK,iCAE7D,SAASiyG,IAAO5xG,KAAKwL,YAAcoH,EADnC6+F,EAAc7+F,EAAGjT,GAEjBiT,EAAEtQ,UAAkB,OAAN3C,EAAa+I,OAAOojC,OAAOnsC,IAAMiyG,EAAGtvG,UAAY3C,EAAE2C,UAAW,IAAIsvG,IAZ3C,GA+I5C,EA1H6C,SAAUG,GAQnD,SAASozC,EAAwB5zD,EAAWl+C,EAAW8/D,EAAYC,GAC/D,OAAOrB,EAAOniG,KAAK5P,KAAMuxF,EAAWl+C,EAAW8/D,EAAYC,IAAepzG,KA+G9E,OAvHA,EAAUmlJ,EAAyBpzC,GAkBnCozC,EAAwB7iJ,UAAU8iJ,qBAAuB,SAAUpF,EAAiBlnD,EAAQv6E,EAAK4jH,GAC7F,IAAIwiB,EAAU3kJ,KAAK+G,YAAYxI,OAC3B2hJ,EAAQlgJ,KAAKmgJ,0BAA0BH,EAAiBlnD,EAAQv6E,EAAK4jH,GAAQ,GAAO,GACpFkjB,EAA0B,CAC1B,kBACAV,EACAzE,GAIJ,OAFAlgJ,KAAKy/I,aAAap9I,KAAKgjJ,GACvBrlJ,KAAK2/I,yBAAyBt9I,KAAKgjJ,GAC5B9mI,GAMX4mI,EAAwB7iJ,UAAUy7I,eAAiB,SAAUC,EAAoB13I,GAC7E,IAAI+sG,EAAQrzG,KAAKqzG,MACbyrC,EAAczrC,EAAMyrC,YACpB8D,EAAYvvC,EAAMuvC,UACtB,QAAoBx1I,IAAhB0xI,QAA2C1xI,IAAdw1I,EAAjC,CAGA5iJ,KAAKqjJ,kBAAkBhwC,EAAOrzG,KAAKijJ,aACnCjjJ,KAAK+gJ,cAAc/C,EAAoB13I,GACvCtG,KAAK2/I,yBAAyBt9I,KAAK,CAC/B,mBACAgxG,EAAMyrC,YACNzrC,EAAMuvC,UACNvvC,EAAM4uC,QACN5uC,EAAMqvC,SACNrvC,EAAM0vC,WACN,KACA,MACD5F,GACH,IAAI6C,EAAkBhC,EAAmB9b,qBACrCC,EAAS6b,EAAmB5b,YAChCpiI,KAAKolJ,qBAAqBpF,EAAiB,EAAGA,EAAgBzhJ,OAAQ4jI,GACtEniI,KAAK2/I,yBAAyBt9I,KAAK66I,GACnCl9I,KAAKwhJ,YAAYl7I,KAMrB6+I,EAAwB7iJ,UAAU27I,oBAAsB,SAAUC,EAAyB53I,GACvF,IAAI+sG,EAAQrzG,KAAKqzG,MACbyrC,EAAczrC,EAAMyrC,YACpB8D,EAAYvvC,EAAMuvC,UACtB,QAAoBx1I,IAAhB0xI,QAA2C1xI,IAAdw1I,EAAjC,CAGA5iJ,KAAKqjJ,kBAAkBhwC,EAAOrzG,KAAKijJ,aACnCjjJ,KAAK+gJ,cAAc7C,EAAyB53I,GAC5CtG,KAAK2/I,yBAAyBt9I,KAAK,CAC/B,mBACAgxG,EAAMyrC,YACNzrC,EAAMuvC,UACNvvC,EAAM4uC,QACN5uC,EAAMqvC,SACNrvC,EAAM0vC,WACN1vC,EAAM+uC,SACN/uC,EAAMkvC,gBACPpF,GAKH,IAJA,IAAItmD,EAAOqnD,EAAwBqD,UAC/BvB,EAAkB9B,EAAwBhc,qBAC1CC,EAAS+b,EAAwB9b,YACjCtpC,EAAS,EACJx5F,EAAI,EAAGiS,EAAKslF,EAAKt4F,OAAQe,EAAIiS,IAAMjS,EACxCw5F,EAAS94F,KAAKolJ,qBAAqBpF,EAAiBlnD,EAC7BjC,EAAKv3F,GAAK6iI,GAErCniI,KAAK2/I,yBAAyBt9I,KAAK66I,GACnCl9I,KAAKwhJ,YAAYl7I,KAKrB6+I,EAAwB7iJ,UAAUm/I,OAAS,WACvC,IAAIpuC,EAAQrzG,KAAKqzG,MAOjB,YANwBjmG,GAApBimG,EAAMiyC,YACNjyC,EAAMiyC,YAActlJ,KAAK+G,YAAYxI,QACrCyB,KAAKy/I,aAAap9I,KAAK66I,GAE3Bl9I,KAAK0hJ,kCACL1hJ,KAAKqzG,MAAQ,KACNtB,EAAOzvG,UAAUm/I,OAAO7xI,KAAK5P,OAKxCmlJ,EAAwB7iJ,UAAU2gJ,YAAc,SAAU5vC,QAC9BjmG,GAApBimG,EAAMiyC,YACNjyC,EAAMiyC,YAActlJ,KAAK+G,YAAYxI,SACrCyB,KAAKy/I,aAAap9I,KAAK66I,GACvB7pC,EAAMiyC,WAAatlJ,KAAK+G,YAAYxI,QAExC80G,EAAMiyC,WAAa,EACnBvzC,EAAOzvG,UAAU2gJ,YAAYrzI,KAAK5P,KAAMqzG,GACxCrzG,KAAKy/I,aAAap9I,KAAK86I,IAEpBgI,EAxHiC,CAyH1C,cC9IE,EAAwC,WACxC,IAAI1zC,EAAgB,SAAU7+F,EAAGjT,GAI7B,OAHA8xG,EAAgB/oG,OAAOipG,gBAClB,CAAE3pF,UAAW,cAAgB/gB,OAAS,SAAU2L,EAAGjT,GAAKiT,EAAEoV,UAAYroB,IACvE,SAAUiT,EAAGjT,GAAK,IAAK,IAAIqB,KAAKrB,EAAO+I,OAAOpG,UAAUqiB,eAAe/U,KAAKjQ,EAAGqB,KAAI4R,EAAE5R,GAAKrB,EAAEqB,KACzFywG,EAAc7+F,EAAGjT,IAE5B,OAAO,SAAUiT,EAAGjT,GAChB,GAAiB,oBAANA,GAA0B,OAANA,EAC3B,MAAM,IAAI6jB,UAAU,uBAAyB6G,OAAO1qB,GAAK,iCAE7D,SAASiyG,IAAO5xG,KAAKwL,YAAcoH,EADnC6+F,EAAc7+F,EAAGjT,GAEjBiT,EAAEtQ,UAAkB,OAAN3C,EAAa+I,OAAOojC,OAAOnsC,IAAMiyG,EAAGtvG,UAAY3C,EAAE2C,UAAW,IAAIsvG,IAZ3C,GA6O5C,EAvN0C,SAAUG,GAQhD,SAASwzC,EAAqBh0D,EAAWl+C,EAAW8/D,EAAYC,GAC5D,OAAOrB,EAAOniG,KAAK5P,KAAMuxF,EAAWl+C,EAAW8/D,EAAYC,IAAepzG,KA4M9E,OApNA,EAAUulJ,EAAsBxzC,GAkBhCwzC,EAAqBjjJ,UAAUkjJ,sBAAwB,SAAUxF,EAAiBlnD,EAAQjC,EAAMsrC,GAC5F,IAAI9uB,EAAQrzG,KAAKqzG,MACbviE,OAA2B1jC,IAApBimG,EAAMwrC,UACb4G,OAA+Br4I,IAAtBimG,EAAMyrC,YACf4G,EAAU7uD,EAAKt4F,OACnByB,KAAKy/I,aAAap9I,KAAK86I,GACvBn9I,KAAK2/I,yBAAyBt9I,KAAK86I,GACnC,IAAK,IAAI79I,EAAI,EAAGA,EAAIomJ,IAAWpmJ,EAAG,CAC9B,IAAIif,EAAMs4E,EAAKv3F,GACXqlJ,EAAU3kJ,KAAK+G,YAAYxI,OAC3B2hJ,EAAQlgJ,KAAKmgJ,0BAA0BH,EAAiBlnD,EAAQv6E,EAAK4jH,GAAQ,GAAOsjB,GACpFJ,EAA0B,CAC1B,kBACAV,EACAzE,GAEJlgJ,KAAKy/I,aAAap9I,KAAKgjJ,GACvBrlJ,KAAK2/I,yBAAyBt9I,KAAKgjJ,GAC/BI,IAGAzlJ,KAAKy/I,aAAap9I,KAAK+6I,GACvBp9I,KAAK2/I,yBAAyBt9I,KAAK+6I,IAEvCtkD,EAASv6E,EAUb,OARIuyB,IACA9wC,KAAKy/I,aAAap9I,KAAK46I,GACvBj9I,KAAK2/I,yBAAyBt9I,KAAK46I,IAEnCwI,IACAzlJ,KAAKy/I,aAAap9I,KAAK66I,GACvBl9I,KAAK2/I,yBAAyBt9I,KAAK66I,IAEhCpkD,GAMXysD,EAAqBjjJ,UAAUo7I,WAAa,SAAUC,EAAgBr3I,GAClE,IAAI+sG,EAAQrzG,KAAKqzG,MACbwrC,EAAYxrC,EAAMwrC,UAClBC,EAAczrC,EAAMyrC,YACxB,QAAkB1xI,IAAdyxI,QAA2CzxI,IAAhB0xI,EAA/B,CAGA9+I,KAAK2lJ,uBACL3lJ,KAAK+gJ,cAAcpD,EAAgBr3I,QACX8G,IAApBimG,EAAMwrC,WACN7+I,KAAK2/I,yBAAyBt9I,KAAK,CAC/B,iBACA,YAGkB+K,IAAtBimG,EAAMyrC,aACN9+I,KAAK2/I,yBAAyBt9I,KAAK,CAC/B,mBACAgxG,EAAMyrC,YACNzrC,EAAMuvC,UACNvvC,EAAM4uC,QACN5uC,EAAMqvC,SACNrvC,EAAM0vC,WACN1vC,EAAM+uC,SACN/uC,EAAMkvC,iBAGd,IAAIvC,EAAkBrC,EAAezb,qBACjCC,EAASwb,EAAevb,YACxBuiB,EAAU3kJ,KAAK+G,YAAYxI,OAC/ByB,KAAKmgJ,0BAA0BH,EAAiB,EAAGA,EAAgBzhJ,OAAQ4jI,GAAQ,GAAO,GAC1F,IAAIyjB,EAAoB,CAAC,SAA0BjB,GACnD3kJ,KAAKy/I,aAAap9I,KAAK86I,EAAsByI,GAC7C5lJ,KAAK2/I,yBAAyBt9I,KAAK86I,EAAsByI,QACjCx4I,IAApBimG,EAAMwrC,YACN7+I,KAAKy/I,aAAap9I,KAAK46I,GACvBj9I,KAAK2/I,yBAAyBt9I,KAAK46I,SAEb7vI,IAAtBimG,EAAMyrC,cACN9+I,KAAKy/I,aAAap9I,KAAK66I,GACvBl9I,KAAK2/I,yBAAyBt9I,KAAK66I,IAEvCl9I,KAAKwhJ,YAAYl7I,KAMrBi/I,EAAqBjjJ,UAAUm8I,YAAc,SAAUC,EAAiBp4I,GACpE,IAAI+sG,EAAQrzG,KAAKqzG,MACbwrC,EAAYxrC,EAAMwrC,UAClBC,EAAczrC,EAAMyrC,YACxB,QAAkB1xI,IAAdyxI,QAA2CzxI,IAAhB0xI,EAA/B,CAGA9+I,KAAK2lJ,uBACL3lJ,KAAK+gJ,cAAcrC,EAAiBp4I,QACZ8G,IAApBimG,EAAMwrC,WACN7+I,KAAK2/I,yBAAyBt9I,KAAK,CAC/B,iBACA,YAGkB+K,IAAtBimG,EAAMyrC,aACN9+I,KAAK2/I,yBAAyBt9I,KAAK,CAC/B,mBACAgxG,EAAMyrC,YACNzrC,EAAMuvC,UACNvvC,EAAM4uC,QACN5uC,EAAMqvC,SACNrvC,EAAM0vC,WACN1vC,EAAM+uC,SACN/uC,EAAMkvC,iBAGd,IAAI1rD,EAAO6nD,EAAgB6C,UACvBvB,EAAkBtB,EAAgBwC,6BAClC/e,EAASuc,EAAgBtc,YAC7BpiI,KAAKwlJ,sBAAsBxF,EAAiB,EACf,EAAQ7d,GACrCniI,KAAKwhJ,YAAYl7I,KAMrBi/I,EAAqBjjJ,UAAU+7I,iBAAmB,SAAUC,EAAsBh4I,GAC9E,IAAI+sG,EAAQrzG,KAAKqzG,MACbwrC,EAAYxrC,EAAMwrC,UAClBC,EAAczrC,EAAMyrC,YACxB,QAAkB1xI,IAAdyxI,QAA2CzxI,IAAhB0xI,EAA/B,CAGA9+I,KAAK2lJ,uBACL3lJ,KAAK+gJ,cAAczC,EAAsBh4I,QACjB8G,IAApBimG,EAAMwrC,WACN7+I,KAAK2/I,yBAAyBt9I,KAAK,CAC/B,iBACA,YAGkB+K,IAAtBimG,EAAMyrC,aACN9+I,KAAK2/I,yBAAyBt9I,KAAK,CAC/B,mBACAgxG,EAAMyrC,YACNzrC,EAAMuvC,UACNvvC,EAAM4uC,QACN5uC,EAAMqvC,SACNrvC,EAAM0vC,WACN1vC,EAAM+uC,SACN/uC,EAAMkvC,iBAOd,IAJA,IAAIpB,EAAQ7C,EAAqB8C,WAC7BpB,EAAkB1B,EAAqB4C,6BACvC/e,EAASmc,EAAqBlc,YAC9BtpC,EAAS,EACJx5F,EAAI,EAAGiS,EAAK4vI,EAAM5iJ,OAAQe,EAAIiS,IAAMjS,EACzCw5F,EAAS94F,KAAKwlJ,sBAAsBxF,EAAiBlnD,EAAQqoD,EAAM7hJ,GAAI6iI,GAE3EniI,KAAKwhJ,YAAYl7I,KAKrBi/I,EAAqBjjJ,UAAUm/I,OAAS,WACpCzhJ,KAAK0hJ,kCACL1hJ,KAAKqzG,MAAQ,KAKb,IAAI9hB,EAAYvxF,KAAKuxF,UACrB,GAAkB,IAAdA,EAEA,IADA,IAAIxqF,EAAc/G,KAAK+G,YACdzH,EAAI,EAAGiS,EAAKxK,EAAYxI,OAAQe,EAAIiS,IAAMjS,EAC/CyH,EAAYzH,IAAK,QAAKyH,EAAYzH,GAAIiyF,GAG9C,OAAOwgB,EAAOzvG,UAAUm/I,OAAO7xI,KAAK5P,OAKxCulJ,EAAqBjjJ,UAAUqjJ,qBAAuB,WAClD,IAAItyC,EAAQrzG,KAAKqzG,WAECjmG,IADFimG,EAAMwrC,WAElB7+I,KAAKmjJ,gBAAgB9vC,EAAOrzG,KAAKgjJ,iBAEX51I,IAAtBimG,EAAMyrC,aACN9+I,KAAKqjJ,kBAAkBhwC,EAAOrzG,KAAKijJ,cAGpCsC,EArN8B,CAsNvC,GClOF,EAEU,kBCAH,SAASM,EAAcC,EAAU9F,EAAiBlnD,EAAQv6E,EAAK4jH,GAClE,IAKU7iI,EAAGymJ,EAAKC,EAAKzxI,EAAIC,EAAIyxI,EAAKC,EAAKC,EAAKC,EAL1CC,EAAavtD,EACbwtD,EAAWxtD,EACXytD,EAAS,EACT7nJ,EAAI,EACJ4f,EAAQw6E,EAEZ,IAAKx5F,EAAIw5F,EAAQx5F,EAAIif,EAAKjf,GAAK6iI,EAAQ,CACnC,IAAI1tH,EAAKurI,EAAgB1gJ,GACrBoV,EAAKsrI,EAAgB1gJ,EAAI,QAClB8N,IAAPmH,IACA4xI,EAAM1xI,EAAKF,EACX6xI,EAAM1xI,EAAKF,EACXwxI,EAAMpnJ,KAAKK,KAAKknJ,EAAMA,EAAMC,EAAMA,QACtBh5I,IAAR64I,IACAvnJ,GAAKqnJ,EACEnnJ,KAAKsyG,MAAM+0C,EAAME,EAAMD,EAAME,IAAQL,EAAMC,IACvCF,IACHpnJ,EAAI6nJ,IACJA,EAAS7nJ,EACT2nJ,EAAa/nI,EACbgoI,EAAWhnJ,GAEfZ,EAAI,EACJ4f,EAAQhf,EAAI6iI,IAGpB4jB,EAAMC,EACNC,EAAME,EACND,EAAME,GAEV7xI,EAAKE,EACLD,EAAKE,EAGT,OADAhW,GAAKsnJ,GACMO,EAAS,CAACjoI,EAAOhf,GAAK,CAAC+mJ,EAAYC,GC/ClD,IAAI,EAAwC,WACxC,IAAI70C,EAAgB,SAAU7+F,EAAGjT,GAI7B,OAHA8xG,EAAgB/oG,OAAOipG,gBAClB,CAAE3pF,UAAW,cAAgB/gB,OAAS,SAAU2L,EAAGjT,GAAKiT,EAAEoV,UAAYroB,IACvE,SAAUiT,EAAGjT,GAAK,IAAK,IAAIqB,KAAKrB,EAAO+I,OAAOpG,UAAUqiB,eAAe/U,KAAKjQ,EAAGqB,KAAI4R,EAAE5R,GAAKrB,EAAEqB,KACzFywG,EAAc7+F,EAAGjT,IAE5B,OAAO,SAAUiT,EAAGjT,GAChB,GAAiB,oBAANA,GAA0B,OAANA,EAC3B,MAAM,IAAI6jB,UAAU,uBAAyB6G,OAAO1qB,GAAK,iCAE7D,SAASiyG,IAAO5xG,KAAKwL,YAAcoH,EADnC6+F,EAAc7+F,EAAGjT,GAEjBiT,EAAEtQ,UAAkB,OAAN3C,EAAa+I,OAAOojC,OAAOnsC,IAAMiyG,EAAGtvG,UAAY3C,EAAE2C,UAAW,IAAIsvG,IAZ3C,GA+BjC40C,EAAa,CACpB,KAAQ,EACR,IAAO,EACP,OAAU,GACV,MAAS,EACT,MAAS,EACT,IAAO,EACP,OAAU,GACV,QAAW,GACX,WAAc,GACd,YAAe,GACf,OAAU,GAEVC,EAAmC,SAAU10C,GAQ7C,SAAS00C,EAAkBl1D,EAAWl+C,EAAW8/D,EAAYC,GACzD,IAAI35E,EAAQs4E,EAAOniG,KAAK5P,KAAMuxF,EAAWl+C,EAAW8/D,EAAYC,IAAepzG,KA+E/E,OA1EAy5B,EAAMitH,QAAU,KAKhBjtH,EAAMktH,MAAQ,GAKdltH,EAAMmtH,aAAe,EAKrBntH,EAAMotH,aAAe,EAKrBptH,EAAMqtH,yBAAsB15I,EAK5BqsB,EAAMstH,cAAgB,EAKtBttH,EAAMutH,eAAiB,KAIvBvtH,EAAMwtH,WAAa,GAKnBxtH,EAAMytH,iBAAmB,KAIzBztH,EAAM0tH,aAAe,GAKrB1tH,EAAM2tH,WAA6D,GAInE3tH,EAAM4tH,WAAa,GAKnB5tH,EAAM6tH,SAAW,GAKjB7tH,EAAM8tH,SAAW,GAKjB9tH,EAAM+tH,WAAa,GAMnB/tH,EAAMirH,6BAA0Bt3I,EACzBqsB,EA+aX,OAtgBA,EAAUgtH,EAAmB10C,GA4F7B00C,EAAkBnkJ,UAAUm/I,OAAS,WACjC,IAAIhC,EAAe1tC,EAAOzvG,UAAUm/I,OAAO7xI,KAAK5P,MAIhD,OAHAy/I,EAAa4H,WAAarnJ,KAAKqnJ,WAC/B5H,EAAawH,WAAajnJ,KAAKinJ,WAC/BxH,EAAa0H,aAAennJ,KAAKmnJ,aAC1B1H,GAMXgH,EAAkBnkJ,UAAUq8I,SAAW,SAAU93I,EAAUP,GACvD,IAAImhJ,EAAYznJ,KAAKgnJ,eACjBU,EAAc1nJ,KAAKknJ,iBACnBS,EAAY3nJ,KAAKonJ,WACrB,GAAmB,KAAfpnJ,KAAK2mJ,OAAiBgB,IAAeF,GAAcC,GAAvD,CAGA,IAAI3gJ,EAAc/G,KAAK+G,YACnBmoH,EAAQnoH,EAAYxI,OACpBqpJ,EAAe/gJ,EAASuhD,UACxB43F,EAAkB,KAClB7d,EAASt7H,EAASu7H,YACtB,GAAIulB,EAAUE,YAAcC,GACvBF,GAAgB9lB,EAAA,eACb8lB,GAAgB9lB,EAAA,qBAChB8lB,GAAgB9lB,EAAA,WAChB8lB,GAAgB9lB,EAAA,gBAgDnB,CACD,IAAIimB,EAAiBJ,EAAUrlC,SAAW,KAAO,GACjD,OAAQslC,GACJ,KAAK9lB,EAAA,QACL,KAAKA,EAAA,cACDke,EAC8D,EAAW9d,qBACzE,MACJ,KAAKJ,EAAA,cACDke,EAC8D,EAAWgI,kBACzE,MACJ,KAAKlmB,EAAA,SACDke,EAC0D,EAAWpiB,YACrE,MACJ,KAAKkE,EAAA,oBACDke,EACmE,EAAWiI,mBAC9E9lB,EAAS,EACT,MACJ,KAAKL,EAAA,UACDke,EAC2D,EAAWkI,uBACjEP,EAAUrlC,UACXylC,EAAe1lJ,KAAK29I,EAAgB,GAAKhgJ,KAAKmzG,YAElDgvB,EAAS,EACT,MACJ,KAAKL,EAAA,gBACD,IAAIqmB,EACwD,EAAWC,wBACvEpI,EAAkB,GAClB,IAAS1gJ,EAAI,EAAGiS,EAAK42I,EAAe5pJ,OAAQe,EAAIiS,EAAIjS,GAAK,EAChDqoJ,EAAUrlC,UACXylC,EAAe1lJ,KAAK8lJ,EAAe7oJ,EAAI,GAAKU,KAAKmzG,YAErD6sC,EAAgB39I,KAAK8lJ,EAAe7oJ,GAAI6oJ,EAAe7oJ,EAAI,IAE/D,GAA+B,IAA3B0gJ,EAAgBzhJ,OAChB,OAEJ4jI,EAAS,EAKjB,IADI5jH,EAAMve,KAAK+/I,2BAA2BC,EAAiB7d,MAC/CjT,EACR,OAEJ,GAAI64B,IACCxpI,EAAM2wG,GAAS,IAAM8wB,EAAgBzhJ,OAAS4jI,EAAQ,CACvD,IAAIkmB,EAAQn5B,EAAQ,EACpB64B,EAAiBA,EAAevtG,QAAO,SAAUlT,EAAGhoC,GAChD,IAAIgpJ,EAAOvhJ,EAA0B,GAAbshJ,EAAQ/oJ,MAAY0gJ,EAAgB1gJ,EAAI6iI,IAC5Dp7H,EAA0B,GAAbshJ,EAAQ/oJ,GAAS,KAAO0gJ,EAAgB1gJ,EAAI6iI,EAAS,GAItE,OAHKmmB,KACCD,EAECC,KAGftoJ,KAAKuoJ,mBACDZ,EAAUa,gBAAkBb,EAAUc,oBACtCzoJ,KAAK4+I,mBAAmB+I,EAAUa,eAAgBb,EAAUc,kBACxDd,EAAUa,iBACVxoJ,KAAKmjJ,gBAAgBnjJ,KAAKqzG,MAAOrzG,KAAKgjJ,YACtChjJ,KAAK2/I,yBAAyBt9I,KAAKrC,KAAKgjJ,WAAWhjJ,KAAKqzG,SAExDs0C,EAAUc,mBACVzoJ,KAAKqjJ,kBAAkBrjJ,KAAKqzG,MAAOrzG,KAAKijJ,aACxCjjJ,KAAK2/I,yBAAyBt9I,KAAKrC,KAAKkjJ,aAAaljJ,KAAKqzG,UAGlErzG,KAAK+gJ,cAAcl6I,EAAUP,GAE7B,IAAIu2H,EAAU8qB,EAAU9qB,QACxB,GAAIA,GAAW,OACV8qB,EAAUt1E,MAAM,GAAK,GAAKs1E,EAAUt1E,MAAM,GAAK,GAAI,CACpD,IAAI3U,EAAKiqF,EAAU9qB,QAAQ,GACvBlpH,EAAKg0I,EAAU9qB,QAAQ,GACvBhpH,EAAK8zI,EAAU9qB,QAAQ,GACvB7oH,EAAK2zI,EAAU9qB,QAAQ,GACvB8qB,EAAUt1E,MAAM,GAAK,IACrB1+D,GAAMA,EACNK,GAAMA,GAEN2zI,EAAUt1E,MAAM,GAAK,IACrB3U,GAAMA,EACN7pD,GAAMA,GAEVgpH,EAAU,CAACn/D,EAAI/pD,EAAIE,EAAIG,GAK3B,IAAI00I,EAAe1oJ,KAAKozG,WACxBpzG,KAAKy/I,aAAap9I,KAAK,CACnB,aACA6sH,EACA3wG,EACA,KACA4uB,IACAA,IACAA,IACA,EACA,EACA,EACAntC,KAAK8mJ,oBACL9mJ,KAAK+mJ,cACL,CAAC,EAAG,GACJ55G,IACAntC,KAAK0kJ,wBACL7nB,GAAW,KACL,KACAA,EAAQ3yH,KAAI,SAAUlJ,GACpB,OAAOA,EAAI0nJ,OAEjBf,EAAUa,iBACVb,EAAUc,iBACZzoJ,KAAK2mJ,MACL3mJ,KAAKsnJ,SACLtnJ,KAAKwnJ,WACLxnJ,KAAKunJ,SACLvnJ,KAAK4mJ,aACL5mJ,KAAK6mJ,aACLkB,IAEJ,IAAI11E,EAAQ,EAAIq2E,EAChB1oJ,KAAK2/I,yBAAyBt9I,KAAK,CAC/B,aACA6sH,EACA3wG,EACA,KACA4uB,IACAA,IACAA,IACA,EACA,EACA,EACAntC,KAAK8mJ,oBACL9mJ,KAAK+mJ,cACL,CAAC10E,EAAOA,GACRllC,IACAntC,KAAK0kJ,wBACL7nB,IACE8qB,EAAUa,iBACVb,EAAUc,iBACZzoJ,KAAK2mJ,MACL3mJ,KAAKsnJ,SACLtnJ,KAAKwnJ,WACLxnJ,KAAKunJ,SACLvnJ,KAAK4mJ,aACL5mJ,KAAK6mJ,aACLkB,IAEJ/nJ,KAAKwhJ,YAAYl7I,OA5MgC,CACjD,KAAK,QAAWtG,KAAKigJ,uBAAwBp5I,EAAS4sG,aAClD,OAEJ,IAAI5c,OAAO,EAEX,GADAmpD,EAAkBn5I,EAASq7H,qBACvB0lB,GAAgB9lB,EAAA,cAChBjrC,EAAO,CAACmpD,EAAgBzhJ,aAEvB,GAAIqpJ,GAAgB9lB,EAAA,oBACrBjrC,EAAsE,EAAW0qD,eAEhF,GAAIqG,GAAgB9lB,EAAA,UACrBjrC,EAA8D,EACzD0qD,UACAr+I,MAAM,EAAG,QAEb,GAAI0kJ,GAAgB9lB,EAAA,gBAA4B,CACjD,IAAIqf,EACwD,EAAWC,WACvEvqD,EAAO,GACP,IAAK,IAAIv3F,EAAI,EAAGiS,EAAK4vI,EAAM5iJ,OAAQe,EAAIiS,IAAMjS,EACzCu3F,EAAKx0F,KAAK8+I,EAAM7hJ,GAAG,IAG3BU,KAAK+gJ,cAAcl6I,EAAUP,GAI7B,IAHA,IAAIqiJ,EAAYhB,EAAUgB,UACtBC,EAAa,EACbC,OAAU,EACLj6H,EAAI,EAAGk6H,EAAKjyD,EAAKt4F,OAAQqwB,EAAIk6H,IAAMl6H,EAAG,CAC3C,QAAiBxhB,GAAbu7I,EAAwB,CACxB,IAAI90H,EAAQgyH,EAAc8B,EAAU7B,SAAU9F,EAAiB4I,EAAY/xD,EAAKjoE,GAAIuzG,GACpFymB,EAAa/0H,EAAM,GACnBg1H,EAAUh1H,EAAM,QAGhBg1H,EAAUhyD,EAAKjoE,GAEnB,IAAK,IAAItvB,EAAIspJ,EAAYtpJ,EAAIupJ,EAASvpJ,GAAK6iI,EACvCp7H,EAAY1E,KAAK29I,EAAgB1gJ,GAAI0gJ,EAAgB1gJ,EAAI,IAE7D,IAAIif,EAAMxX,EAAYxI,OACtBqqJ,EAAa/xD,EAAKjoE,GAClB5uB,KAAK+oJ,WAAW75B,EAAO3wG,GACvB2wG,EAAQ3wG,EAEZve,KAAKwhJ,YAAYl7I,MAoKzBmgJ,EAAkBnkJ,UAAUimJ,gBAAkB,WAC1C,IAAIb,EAAc1nJ,KAAKknJ,iBACnBS,EAAY3nJ,KAAKonJ,WACjBK,EAAYznJ,KAAKgnJ,eACjBgC,EAAYhpJ,KAAKwnJ,WACjBE,IACMsB,KAAahpJ,KAAKmnJ,eACpBnnJ,KAAKmnJ,aAAa6B,GAAa,CAC3BlK,YAAa4I,EAAY5I,YACzBmD,QAASyF,EAAYzF,QACrBM,eAAgBmF,EAAYnF,eAC5BK,UAAW8E,EAAY9E,UACvBF,SAAUgF,EAAYhF,SACtBK,WAAY2E,EAAY3E,WACxBX,SAAUsF,EAAYtF,YAIlC,IAAI6G,EAAUjpJ,KAAKsnJ,SACb2B,KAAWjpJ,KAAKqnJ,aAClBrnJ,KAAKqnJ,WAAW4B,GAAW,CACvBC,KAAMvB,EAAUuB,KAChBP,UAAWhB,EAAUgB,WAAa,KAClCQ,aAAcxB,EAAUwB,cAAgB,KACxC92E,MAAOs1E,EAAUt1E,QAGzB,IAAI+2E,EAAUppJ,KAAKunJ,SACfE,IACM2B,KAAWppJ,KAAKinJ,aAClBjnJ,KAAKinJ,WAAWmC,GAAW,CACvBvK,UAAW4I,EAAU5I,cAUrC4H,EAAkBnkJ,UAAUymJ,WAAa,SAAU75B,EAAO3wG,GACtD,IAAImpI,EAAc1nJ,KAAKknJ,iBACnBS,EAAY3nJ,KAAKonJ,WACjB4B,EAAYhpJ,KAAKwnJ,WACjByB,EAAUjpJ,KAAKsnJ,SACf8B,EAAUppJ,KAAKunJ,SACnBvnJ,KAAKuoJ,kBACL,IAAIn1C,EAAapzG,KAAKozG,WAClBi2C,EAAW7C,EAAWmB,EAAUwB,cAChCprB,EAAU/9H,KAAK6mJ,aAAezzC,EAC9BozB,EAAOxmI,KAAK2mJ,MACZ2C,EAAc5B,EACXA,EAAY9E,UAAYhkJ,KAAKoiB,IAAI2mI,EAAUt1E,MAAM,IAAO,EACzD,EACNryE,KAAKy/I,aAAap9I,KAAK,CACnB,aACA6sH,EACA3wG,EACA8qI,EACA1B,EAAUrlC,SACV8mC,EACAzB,EAAU7B,SACV1yC,EACA2qB,EACAirB,EACAM,EAAcl2C,EACdozB,EACAyiB,EACA,IAEJjpJ,KAAK2/I,yBAAyBt9I,KAAK,CAC/B,aACA6sH,EACA3wG,EACA8qI,EACA1B,EAAUrlC,SACV8mC,EACAzB,EAAU7B,SACV,EACA/nB,EACAirB,EACAM,EACA9iB,EACAyiB,EACA,EAAI71C,KAOZqzC,EAAkBnkJ,UAAU48I,aAAe,SAAUC,EAAWyF,GAC5D,IAAI+C,EAAWF,EAAWC,EAC1B,GAAKvI,EAGA,CACD,IAAIoK,EAAgBpK,EAAUqK,UACzBD,IAKD9B,EAAYznJ,KAAKgnJ,kBAEbS,EAA4D,GAC5DznJ,KAAKgnJ,eAAiBS,GAE1BA,EAAU5I,WAAY,OAAY0K,EAAc1H,YAAc,QAT9D4F,EAAY,KACZznJ,KAAKgnJ,eAAiBS,GAU1B,IAAIgC,EAAkBtK,EAAUuK,YAChC,GAAKD,EAIA,EACD/B,EAAc1nJ,KAAKknJ,oBAEfQ,EAAgE,GAChE1nJ,KAAKknJ,iBAAmBQ,GAE5B,IAAItF,EAAWqH,EAAgBtH,cAC3BI,EAAiBkH,EAAgBnH,oBACjCM,EAAY6G,EAAgBh3G,WAC5BswG,EAAa0G,EAAgB3G,gBACjC4E,EAAYzF,QAAUwH,EAAgBzH,cAAgB,KACtD0F,EAAYtF,SAAWA,EAAWA,EAASl/I,QAAU,KACrDwkJ,EAAYnF,oBACWn1I,IAAnBm1I,EAA+B,KAAwBA,EAC3DmF,EAAYhF,SAAW+G,EAAgBhH,eAAiB,KACxDiF,EAAY9E,eACMx1I,IAAdw1I,EAA0B,KAAmBA,EACjD8E,EAAY3E,gBACO31I,IAAf21I,EAA2B,KAAoBA,EACnD2E,EAAY5I,aAAc,OAAY2K,EAAgB5H,YAAc,WAtBpE6F,EAAc,KACd1nJ,KAAKknJ,iBAAmBQ,EAuB5BC,EAAY3nJ,KAAKonJ,WACjB,IAAI8B,EAAO/J,EAAUwK,WAAa,MAClC,QAAaT,GACb,IAAIU,EAAYzK,EAAU+F,gBAC1ByC,EAAUrlC,SAAW68B,EAAU0K,cAC/BlC,EAAUuB,KAAOA,EACjBvB,EAAU7B,SAAW3G,EAAU2K,cAC/BnC,EAAUE,UAAY1I,EAAU4K,eAChCpC,EAAUgB,UAAYxJ,EAAU6K,eAChCrC,EAAUwB,aACNhK,EAAU8K,mBAAqB,KACnCtC,EAAUa,eAAiBrJ,EAAU+K,oBACrCvC,EAAUc,iBAAmBtJ,EAAUgL,sBACvCxC,EAAU9qB,QAAUsiB,EAAUiL,cAAgB,KAC9CzC,EAAUt1E,WAAsBjlE,IAAdw8I,EAA0B,CAAC,EAAG,GAAKA,EACrD,IAAIS,EAAclL,EAAUmL,aACxBC,EAAcpL,EAAUqL,aACxBC,EAAqBtL,EAAU8F,oBAC/ByF,EAAevL,EAAUzxB,cAC7B1tH,KAAK2mJ,MAAQxH,EAAUwL,WAAa,GACpC3qJ,KAAK4mJ,kBAA+Bx5I,IAAhBi9I,EAA4B,EAAIA,EACpDrqJ,KAAK6mJ,kBAA+Bz5I,IAAhBm9I,EAA4B,EAAIA,EACpDvqJ,KAAK8mJ,yBACsB15I,IAAvBq9I,GAA2CA,EAC/CzqJ,KAAK+mJ,mBAAiC35I,IAAjBs9I,EAA6B,EAAIA,EACtD1qJ,KAAKwnJ,WAAaE,GACuB,iBAA3BA,EAAY5I,YAChB4I,EAAY5I,aACZ,QAAO4I,EAAY5I,cACrB4I,EAAYzF,QACZyF,EAAYnF,eACZ,IACAmF,EAAY9E,UACZ8E,EAAYhF,SACZgF,EAAY3E,WACZ,IACA2E,EAAYtF,SAAS/7I,OACrB,IACF,GACNrG,KAAKsnJ,SACDK,EAAUuB,KACNvB,EAAUt1E,OACTs1E,EAAUgB,WAAa,MACvBhB,EAAUwB,cAAgB,KACnCnpJ,KAAKunJ,SAAWE,EACoB,iBAAvBA,EAAU5I,UACb4I,EAAU5I,UACV,KAAM,QAAO4I,EAAU5I,WAC3B,QA1FN7+I,KAAK2mJ,MAAQ,GA4FjB3mJ,KAAK0kJ,wBAA0BE,GAE5B6B,EAvgB2B,CAwgBpC,GCziBEmE,EAAqB,CACrB,OAAUC,EACV,QAAWC,EACX,MAASC,EACT,WAAcC,EACd,QAAWH,EACX,KDoiBJ,GC3dA,EAvEkC,WAO9B,SAASI,EAAa15D,EAAWl+C,EAAW8/D,EAAYC,GAKpDpzG,KAAKkrJ,WAAa35D,EAKlBvxF,KAAKmrJ,WAAa93G,EAKlBrzC,KAAKszG,YAAcF,EAKnBpzG,KAAKorJ,YAAcj4C,EAKnBnzG,KAAKqrJ,kBAAoB,GAqC7B,OAhCAJ,EAAa3oJ,UAAUm/I,OAAS,WAC5B,IAAI6J,EAAsB,GAC1B,IAAK,IAAIC,KAAQvrJ,KAAKqrJ,kBAAmB,CACrCC,EAAoBC,GAAQD,EAAoBC,IAAS,GACzD,IAAIC,EAAWxrJ,KAAKqrJ,kBAAkBE,GACtC,IAAK,IAAIE,KAAcD,EAAU,CAC7B,IAAIE,EAAqBF,EAASC,GAAYhK,SAC9C6J,EAAoBC,GAAME,GAAcC,GAGhD,OAAOJ,GAOXL,EAAa3oJ,UAAUqpJ,WAAa,SAAUvyC,EAAQwyC,GAClD,IAAIC,OAAuBz+I,IAAXgsG,EAAuBA,EAAO5hG,WAAa,IACvDs0I,EAAU9rJ,KAAKqrJ,kBAAkBQ,QACrBz+I,IAAZ0+I,IACAA,EAAU,GACV9rJ,KAAKqrJ,kBAAkBQ,GAAaC,GAExC,IAAIC,EAASD,EAAQF,QACNx+I,IAAX2+I,IAEAA,EAAS,IAAIl6H,EADK+4H,EAAmBgB,IACZ5rJ,KAAKkrJ,WAAYlrJ,KAAKmrJ,WAAYnrJ,KAAKorJ,YAAaprJ,KAAKszG,aAClFw4C,EAAQF,GAAeG,GAE3B,OAAOA,GAEJd,EArEsB,cCbjC,EACY,SADZ,EAEa,UAFb,EAGW,QAHX,EAIiB,aAJjB,EAKa,UALb,EAMU,kDCSH,SAASe,GAAehM,EAAiBlnD,EAAQv6E,EAAK4jH,EAAQqE,EAAMylB,EAAQnG,EAAUzzE,EAAO65E,EAA0BhD,EAAMxvH,EAAO28E,GACvI,IAAI5hG,EAAKurI,EAAgBlnD,GACrBpkF,EAAKsrI,EAAgBlnD,EAAS,GAC9BvkF,EAAK,EACLC,EAAK,EACL23I,EAAgB,EAChBC,EAAW,EACf,SAASC,IACL93I,EAAKE,EACLD,EAAKE,EAELD,EAAKurI,EADLlnD,GAAUqpC,GAEVztH,EAAKsrI,EAAgBlnD,EAAS,GAC9BszD,GAAYD,EACZA,EAAgBvtJ,KAAKK,MAAMwV,EAAKF,IAAOE,EAAKF,IAAOG,EAAKF,IAAOE,EAAKF,IAExE,GACI63I,UACKvzD,EAASv6E,EAAM4jH,GAAUiqB,EAAWD,EAAgBF,GAO7D,IANA,IAAI3zD,EAAgC,IAAlB6zD,EAAsB,GAAKF,EAASG,GAAYD,EAC9DG,GAAS,QAAK/3I,EAAIE,EAAI6jF,GACtBi0D,GAAS,QAAK/3I,EAAIE,EAAI4jF,GACtBk0D,EAAc1zD,EAASqpC,EACvBsqB,EAAcL,EACdM,EAAOT,EAAS55E,EAAQ65E,EAAyBhD,EAAM1iB,EAAM9sG,GAC1Do/D,EAASv6E,EAAM4jH,GAAUiqB,EAAWD,EAAgBO,GACvDL,IAEJ/zD,EAAgC,IAAlB6zD,EAAsB,GAAKO,EAAON,GAAYD,EAC5D,IAGI/lI,EAHA8pE,GAAO,QAAK37E,EAAIE,EAAI6jF,GACpBnI,GAAO,QAAK37E,EAAIE,EAAI4jF,GAGxB,GAAI+d,EAAU,CACV,IAAI3kF,EAAO,CAAC46H,EAAQC,EAAQr8D,EAAMC,IAClC,QAAOz+D,EAAM,EAAG,EAAG,EAAG2kF,EAAU3kF,EAAMA,GACtCtL,EAAUsL,EAAK,GAAKA,EAAK,QAGzBtL,EAAUkmI,EAASp8D,EAEvB,IAQIy8D,EARApkJ,EAAK3J,KAAK2J,GACV7K,EAAS,GACTkvJ,EAAgBJ,EAAcrqB,IAAWrpC,EAQ7C,GANAqzD,EAAgB,EAChBC,EAAWK,EACXh4I,EAAKurI,EAHLlnD,EAAS0zD,GAIT93I,EAAKsrI,EAAgBlnD,EAAS,GAG1B8zD,EAAe,CACfP,IACAM,EAAgB/tJ,KAAK+0D,MAAMj/C,EAAKF,EAAIC,EAAKF,GACrC6R,IACAumI,GAAiBA,EAAgB,GAAKpkJ,EAAKA,GAE/C,IAAI4L,GAAK+7E,EAAOo8D,GAAU,EACtBl4I,GAAK+7E,EAAOo8D,GAAU,EAE1B,OADA7uJ,EAAO,GAAK,CAACyW,EAAGC,GAAIs4I,EAAOT,GAAU,EAAGU,EAAenmB,GAChD9oI,EAEX,IAAK,IAAI4B,EAAI,EAAGiS,EAAKi1H,EAAKjoI,OAAQe,EAAIiS,GAAK,CACvC86I,IACA,IAAIvhJ,EAAQlM,KAAK+0D,MAAMj/C,EAAKF,EAAIC,EAAKF,GAIrC,GAHI6R,IACAtb,GAASA,EAAQ,GAAKvC,EAAKA,QAET6E,IAAlBu/I,EAA6B,CAC7B,IAAIl0D,EAAQ3tF,EAAQ6hJ,EAEpB,GADAl0D,GAASA,EAAQlwF,GAAM,EAAIA,EAAKkwF,GAASlwF,EAAK,EAAIA,EAAK,EACnD3J,KAAKoiB,IAAIy3E,GAASqtD,EAClB,OAAO,KAGf6G,EAAgB7hJ,EAGhB,IAFA,IAAI03B,EAASljC,EACTutJ,EAAa,EACVvtJ,EAAIiS,IAAMjS,EAAG,CAChB,IACIqD,EAAM0vE,EAAQ65E,EAAyBhD,EAAM1iB,EADrCpgH,EAAU7U,EAAKjS,EAAI,EAAIA,GAC2Bo6B,GAC9D,GAAIo/D,EAASqpC,EAAS5jH,GAClB6tI,EAAWD,EAAgBF,EAASY,EAAalqJ,EAAM,EACvD,MAEJkqJ,GAAclqJ,EAElB,GAAIrD,IAAMkjC,EAAV,CAGA,IAAI2hB,EAAQ/9B,EACNogH,EAAKv1F,UAAU1/B,EAAKixB,EAAQjxB,EAAKjS,GACjCknI,EAAKv1F,UAAUzO,EAAQljC,GAC7Bg5F,EACsB,IAAlB6zD,EACM,GACCF,EAASY,EAAa,EAAIT,GAAYD,EAC7Ch4I,GAAI,QAAKI,EAAIE,EAAI6jF,GACjBlkF,GAAI,QAAKI,EAAIE,EAAI4jF,GACrB56F,EAAO2E,KAAK,CAAC8R,EAAGC,EAAGy4I,EAAa,EAAG/hJ,EAAOq5C,IAC1C8nG,GAAUY,GAEd,OAAOnvJ,kBC/EP82I,IAAY,UAEZ7gI,GAAK,GAELE,GAAK,GAELG,GAAK,GAEL84I,GAAK,GAKT,SAASC,GAAgBC,GACrB,OAAOA,EAAuB,GAAGC,aAErC,IAAIC,GAAW,IAAIhjI,OAEnB,IACIG,OAAO8iI,aAAa,MAAW,IAAM9iI,OAAO8iI,aAAa,MACzD9iI,OAAO8iI,aAAa,OAAW,IAAM9iI,OAAO8iI,aAAa,OACzD9iI,OAAO8iI,aAAa,OAAW,IAAM9iI,OAAO8iI,aAAa,OACzD9iI,OAAO8iI,aAAa,OAAW,IAAM9iI,OAAO8iI,aAAa,OACzD9iI,OAAO8iI,aAAa,QAAW,IAAM9iI,OAAO8iI,aAAa,QACzD,KAQJ,SAASC,GAAoB5mB,EAAM6mB,GAI/B,MAHe,UAAVA,GAA+B,QAAVA,GAAqBH,GAASI,KAAK9mB,KACzD6mB,EAAkB,UAAVA,EAAoB,OAAS,SAElC7G,EAAW6G,GAEtB,IAAIE,GAA0B,WAO1B,SAASA,EAASp6C,EAAYC,EAAYo6C,EAAU/N,GAKhDz/I,KAAKwtJ,SAAWA,EAKhBxtJ,KAAKozG,WAAaA,EAMlBpzG,KAAKmzG,WAAaA,EAKlBnzG,KAAKytJ,WAKLztJ,KAAKy/I,aAAeA,EAAaA,aAKjCz/I,KAAK+G,YAAc04I,EAAa14I,YAKhC/G,KAAK0tJ,iBAAmB,GAKxB1tJ,KAAK2tJ,oBAAqB,UAK1B3tJ,KAAK2/I,yBAA2BF,EAAaE,yBAK7C3/I,KAAK4tJ,kBAAoB,KAKzB5tJ,KAAK6tJ,cAAgB,EAIrB7tJ,KAAKinJ,WAAaxH,EAAawH,YAAc,GAI7CjnJ,KAAKmnJ,aAAe1H,EAAa0H,cAAgB,GAIjDnnJ,KAAKqnJ,WAAa5H,EAAa4H,YAAc,GAK7CrnJ,KAAK8tJ,QAAU,GAKf9tJ,KAAK0mJ,QAAU,GAwuBnB,OA/tBA6G,EAASjrJ,UAAUyrJ,YAAc,SAAUvnB,EAAMyiB,EAASG,EAASJ,GAC/D,IAAIxyI,EAAMgwH,EAAOyiB,EAAUG,EAAUJ,EACrC,GAAIhpJ,KAAK0mJ,QAAQlwI,GACb,OAAOxW,KAAK0mJ,QAAQlwI,GAExB,IAAIkxI,EAAcsB,EAAYhpJ,KAAKmnJ,aAAa6B,GAAa,KACzDvB,EAAY2B,EAAUppJ,KAAKinJ,WAAWmC,GAAW,KACjDzB,EAAY3nJ,KAAKqnJ,WAAW4B,GAC5B71C,EAAapzG,KAAKozG,WAClB/gC,EAAQ,CACRs1E,EAAUt1E,MAAM,GAAK+gC,EACrBu0C,EAAUt1E,MAAM,GAAK+gC,GAErBi6C,EAAQD,GAAoB5mB,EAAMmhB,EAAUgB,WAAa,MACzDW,EAAcN,GAAatB,EAAY9E,UAAY8E,EAAY9E,UAAY,EAC3E7wD,EAAQy0C,EAAKl0G,MAAM,MACnB07H,EAAWj8D,EAAMxzF,OACjB0vJ,EAAS,GACT90C,GAAQ,QAAkBwuC,EAAUuB,KAAMn3D,EAAOk8D,GACjD5hB,GAAa,QAAkBsb,EAAUuB,MAEzCgF,EAAc/0C,EAAQmwC,EACtB6E,EAAsB,GAEtB7mH,GAAK4mH,EAAc,GAAK77E,EAAM,GAC9B7rC,GALS6lG,EAAa2hB,EAKR1E,GAAej3E,EAAM,GAEnCssB,EAAQ,CACRwa,MAAO7xE,EAAI,EAAI1oC,KAAKO,MAAMmoC,GAAK1oC,KAAKuB,KAAKmnC,GACzCtlC,OAAQwkC,EAAI,EAAI5nC,KAAKO,MAAMqnC,GAAK5nC,KAAKuB,KAAKqmC,GAC1C2nH,oBAAqBA,IAET,GAAZ97E,EAAM,IAAuB,GAAZA,EAAM,IACvB87E,EAAoB9rJ,KAAK,QAASgwE,GAEtC87E,EAAoB9rJ,KAAK,OAAQslJ,EAAUuB,MACvCF,KACAmF,EAAoB9rJ,KAAK,cAAeqlJ,EAAY5I,aACpDqP,EAAoB9rJ,KAAK,YAAainJ,GACtC6E,EAAoB9rJ,KAAK,UAAWqlJ,EAAYzF,SAChDkM,EAAoB9rJ,KAAK,WAAYqlJ,EAAYhF,UACjDyL,EAAoB9rJ,KAAK,aAAcqlJ,EAAY3E,aAErC,KAA0BqL,kCAAoCC,0BAChE/rJ,UAAUgsJ,cAClBH,EAAoB9rJ,KAAK,cAAe,CAACqlJ,EAAYtF,WACrD+L,EAAoB9rJ,KAAK,iBAAkBqlJ,EAAYnF,kBAG3D6G,GACA+E,EAAoB9rJ,KAAK,YAAaolJ,EAAU5I,WAEpDsP,EAAoB9rJ,KAAK,eAAgB,UACzC8rJ,EAAoB9rJ,KAAK,YAAa,UACtC,IAEI/C,EAFAivJ,EAAY,GAAMlB,EAClBl5I,EAAIk5I,EAAQa,EAAcK,EAAYjF,EAE1C,GAAIN,EACA,IAAK1pJ,EAAI,EAAGA,EAAI0uJ,IAAY1uJ,EACxB6uJ,EAAoB9rJ,KAAK,aAAc,CACnC0vF,EAAMzyF,GACN6U,EAAIo6I,EAAYN,EAAO3uJ,GACvB,IAAOgqJ,EAAcjd,GAAc/sI,EAAI+sI,IAInD,GAAI+c,EACA,IAAK9pJ,EAAI,EAAGA,EAAI0uJ,IAAY1uJ,EACxB6uJ,EAAoB9rJ,KAAK,WAAY,CACjC0vF,EAAMzyF,GACN6U,EAAIo6I,EAAYN,EAAO3uJ,GACvB,IAAOgqJ,EAAcjd,GAAc/sI,EAAI+sI,IAKnD,OADArsI,KAAK0mJ,QAAQlwI,GAAOmoF,EACbA,GAWX4uD,EAASjrJ,UAAUksJ,sBAAwB,SAAUtpI,EAASvR,EAAIE,EAAIG,EAAI84I,EAAI7P,EAAiBC,GAC3Fh4H,EAAQ+zH,YACR/zH,EAAQg0H,OAAOh1I,MAAMghB,EAASvR,GAC9BuR,EAAQi0H,OAAOj1I,MAAMghB,EAASrR,GAC9BqR,EAAQi0H,OAAOj1I,MAAMghB,EAASlR,GAC9BkR,EAAQi0H,OAAOj1I,MAAMghB,EAAS4nI,GAC9B5nI,EAAQi0H,OAAOj1I,MAAMghB,EAASvR,GAC1BspI,IACAj9I,KAAKytJ,WAAqCxQ,EAAgB,GAC1Dj9I,KAAKyuJ,MAAMvpI,IAEXg4H,IACAl9I,KAAK0uJ,gBAAgBxpI,EACG,GACxBA,EAAQugI,WAuBhB8H,EAASjrJ,UAAUqsJ,iCAAmC,SAAUC,EAAYC,EAAajsB,EAASC,EAAS1pB,EAAOn3G,EAAQ8sJ,EAASC,EAASC,EAASC,EAAS54C,EAAUhkC,EAAO68E,EAAaryB,EAASsyB,EAAY7oJ,GAG7M,IAkBI06E,EAlBA7sE,EAAIyuH,GAFRksB,GAAWz8E,EAAM,IAGbj+D,EAAIyuH,GAFRksB,GAAW18E,EAAM,IAGb/qC,EAAI6xE,EAAQ61C,EAAUJ,EAAaA,EAAaI,EAAU71C,EAC1D3yE,EAAIxkC,EAASitJ,EAAUJ,EAAcA,EAAcI,EAAUjtJ,EAC7DotJ,EAAOvyB,EAAQ,GAAKv1F,EAAI+qC,EAAM,GAAKwqD,EAAQ,GAC3CwyB,EAAOxyB,EAAQ,GAAKr2F,EAAI6rC,EAAM,GAAKwqD,EAAQ,GAC3CyyB,EAAOn7I,EAAI0oH,EAAQ,GACnB0yB,EAAOn7I,EAAIyoH,EAAQ,GA2BvB,OA1BIsyB,GAA2B,IAAb94C,KACd1iG,GAAG,GAAK27I,EACRxC,GAAG,GAAKwC,EACR37I,GAAG,GAAK47I,EACR17I,GAAG,GAAK07I,EACR17I,GAAG,GAAKy7I,EAAOF,EACfp7I,GAAG,GAAKH,GAAG,GACXG,GAAG,GAAKu7I,EAAOF,EACfvC,GAAG,GAAK94I,GAAG,IAGE,IAAbqiG,GACAr1B,GAAY,SAAiB,UAAmB4hD,EAASC,EAAS,EAAG,EAAGxsB,GAAWusB,GAAUC,IAC7F,QAAe7hD,EAAWrtE,KAC1B,QAAeqtE,EAAWntE,KAC1B,QAAemtE,EAAWhtE,KAC1B,QAAegtE,EAAW8rE,KAC1B,QAAeluJ,KAAKQ,IAAIuU,GAAG,GAAIE,GAAG,GAAIG,GAAG,GAAI84I,GAAG,IAAKluJ,KAAKQ,IAAIuU,GAAG,GAAIE,GAAG,GAAIG,GAAG,GAAI84I,GAAG,IAAKluJ,KAAKM,IAAIyU,GAAG,GAAIE,GAAG,GAAIG,GAAG,GAAI84I,GAAG,IAAKluJ,KAAKM,IAAIyU,GAAG,GAAIE,GAAG,GAAIG,GAAG,GAAI84I,GAAG,IAAKtY,MAGvK,QAAe51I,KAAKQ,IAAIkwJ,EAAMA,EAAOF,GAAOxwJ,KAAKQ,IAAImwJ,EAAMA,EAAOF,GAAOzwJ,KAAKM,IAAIowJ,EAAMA,EAAOF,GAAOxwJ,KAAKM,IAAIqwJ,EAAMA,EAAOF,GAAO7a,IAEnI0a,IACA/6I,EAAIvV,KAAK4L,MAAM2J,GACfC,EAAIxV,KAAK4L,MAAM4J,IAEZ,CACHo7I,WAAYr7I,EACZs7I,WAAYr7I,EACZs7I,WAAYpoH,EACZqoH,WAAYnpH,EACZwoH,QAASA,EACTC,QAASA,EACThC,aAAc,CACV9rJ,KAAMqzI,GAAU,GAChBpzI,KAAMozI,GAAU,GAChBnzI,KAAMmzI,GAAU,GAChBlzI,KAAMkzI,GAAU,GAChB5rI,MAAOtC,GAEXuwI,gBAAiB71D,EACjB3O,MAAOA,IAcfk7E,EAASjrJ,UAAUstJ,oBAAsB,SAAU1qI,EAAS2qI,EAAcC,EAAc5sI,EAAYwpH,EAASuQ,EAAiBC,GAC1H,IAAIiS,KAAgBlS,IAAmBC,GACnC6S,EAAM7sI,EAAW+pI,aACjBjgB,EAAS9nH,EAAQ8nH,OACjBgjB,EAAgB9S,EACbA,EAAkB,GAAKh6H,EAAWmvD,MAAM,GAAM,EAC/C,EAaN,OAZiB09E,EAAI5uJ,KAAO6uJ,GAAiBhjB,EAAO7zB,MAAQ02C,GACxDE,EAAI1uJ,KAAO2uJ,GAAiB,GAC5BD,EAAI3uJ,KAAO4uJ,GAAiBhjB,EAAOhrI,OAAS6tJ,GAC5CE,EAAIzuJ,KAAO0uJ,GAAiB,IAExBb,GACAnvJ,KAAKwuJ,sBAAsBtpI,EAASvR,GAAIE,GAAIG,GAAI84I,GACxB,EACA,IAE5B,QAAiB5nI,EAAShC,EAAW2zH,gBAAiBnK,EAASojB,EAAc5sI,EAAW8rI,QAAS9rI,EAAW+rI,QAAS/rI,EAAWwsI,WAAYxsI,EAAWysI,WAAYzsI,EAAWssI,WAAYtsI,EAAWusI,WAAYvsI,EAAWmvD,SAEzN,GAMXk7E,EAASjrJ,UAAUmsJ,MAAQ,SAAUvpI,GACjC,GAAIllB,KAAKytJ,WAAY,CACjB,IAAIpV,GAAW,QAAer4I,KAAK2tJ,mBAAoB,CAAC,EAAG,IACvDsC,EAAa,IAAMjwJ,KAAKozG,WAC5BluF,EAAQ6zH,OACR7zH,EAAQiuB,UAAUklG,EAAS,GAAK4X,EAAY5X,EAAS,GAAK4X,GAC1D/qI,EAAQixG,OAAOn2H,KAAK6tJ,eAExB3oI,EAAQ4rB,OACJ9wC,KAAKytJ,YACLvoI,EAAQm0H,WAQhBkU,EAASjrJ,UAAUosJ,gBAAkB,SAAUxpI,EAASy8H,GACpDz8H,EAAqB,YACsCy8H,EAAY,GACvEz8H,EAAQ09H,UAAmCjB,EAAY,GACvDz8H,EAAQ+8H,QAAwCN,EAAY,GAC5Dz8H,EAAQw9H,SAA0Cf,EAAY,GAC9Dz8H,EAAQ69H,WAAoCpB,EAAY,GACpDz8H,EAAQopI,cACRppI,EAAQq9H,eAAwCZ,EAAY,GAC5Dz8H,EAAQopI,YAA0C3M,EAAY,MAWtE4L,EAASjrJ,UAAU4tJ,6BAA+B,SAAU1pB,EAAMyiB,EAASD,EAAWI,GAClF,IAAIzB,EAAY3nJ,KAAKqnJ,WAAW4B,GAC5BtqD,EAAQ3+F,KAAK+tJ,YAAYvnB,EAAMyiB,EAASG,EAASJ,GACjDtB,EAAc1nJ,KAAKmnJ,aAAa6B,GAChC51C,EAAapzG,KAAKozG,WAClBi6C,EAAQD,GAAoB5mB,EAAMmhB,EAAUgB,WAAa,MACzDU,EAAW7C,EAAWmB,EAAUwB,cAAgB,MAChDG,EAAc5B,GAAeA,EAAY9E,UAAY8E,EAAY9E,UAAY,EAMjF,MAAO,CACHjkD,MAAOA,EACPmwD,QALUzB,GADF1uD,EAAMwa,MAAQ/F,EAAa,EAAIu0C,EAAUt1E,MAAM,IAC7B,GAAK,GAAMg7E,GAAS/D,EAM9CyF,QALW1F,EAAW1qD,EAAM38F,OAAUoxG,EACtC,GAAK,GAAMi2C,GAAYC,IAqB/BiE,EAASjrJ,UAAU6tJ,SAAW,SAAUjrI,EAAS2qI,EAAc7uE,EAAWy+D,EAAcyP,EAAakB,EAAqBC,EAAeC,GAErI,IAAIC,EACAvwJ,KAAK4tJ,oBAAqB,QAAO5sE,EAAWhhF,KAAK2tJ,oBACjD4C,EAAmBvwJ,KAAK4tJ,mBAGnB5tJ,KAAK4tJ,oBACN5tJ,KAAK4tJ,kBAAoB,IAE7B2C,GAAmB,QAAYvwJ,KAAK+G,YAAa,EAAG/G,KAAK+G,YAAYxI,OAAQ,EAAGyiF,EAAWhhF,KAAK4tJ,oBAChG,QAAsB5tJ,KAAK2tJ,mBAAoB3sE,IAyBnD,IAvBA,IAGIwvE,EACA1B,EAASC,EAAS0B,EAAOC,EAAOC,EAAQC,EAAQ/7C,EAAO2xB,EAAMyiB,EAASD,EAAWI,EAiB3B9iJ,EACtD6N,EAAGC,EAAGzF,EAtBNrP,EAAI,EACJiS,EAAKkuI,EAAalhJ,OAClBqU,EAAI,EAGJi+I,EAAc,EACdC,EAAgB,EAChBC,EAAsB,KACtBC,EAAwB,KACxBC,EAAkBjxJ,KAAK0tJ,iBACvBwD,EAAelxJ,KAAK6tJ,cACpBsD,EAA4BvyJ,KAAK4L,MAAgD,KAA1C5L,KAAK+0D,OAAOqtB,EAAU,GAAIA,EAAU,KAAc,KACzFqyB,EAAuD,CACvDnuF,QAASA,EACTkuF,WAAYpzG,KAAKozG,WACjBD,WAAYnzG,KAAKmzG,WACjBkD,SAAU66C,GAIVE,EAAYpxJ,KAAKy/I,cAAgBA,GAAgBz/I,KAAKwtJ,SAAW,EAAI,IAGlEluJ,EAAIiS,GAAI,CACX,IAAIowI,EAAclC,EAAangJ,GAE/B,OAD8DqiJ,EAAY,IAEtE,KAAK,iBACDr7I,EAAiEq7I,EAAY,GAC7EhzI,EAAkBgzI,EAAY,GACzBr7I,EAAQimE,mBAGcn/D,IAAlBijJ,IACJ,QAAWA,EAAe1hJ,EAAgB8kG,eAIzCn0G,EAHFA,EAA2BqiJ,EAAY,GAAM,EAJ7CriJ,EAA2BqiJ,EAAY,GAS3C,MACJ,KAAK,aACGkP,EAAcO,IACdpxJ,KAAKyuJ,MAAMvpI,GACX2rI,EAAc,GAEdC,EAAgBM,IAChBlsI,EAAQugI,SACRqL,EAAgB,GAEfD,GAAgBC,IACjB5rI,EAAQ+zH,YACRwX,EAAQtjH,IACRujH,EAAQvjH,OAEV7tC,EACF,MACJ,KAAK,SAED,IAAIiV,EAAKg8I,EADT39I,EAA2B+uI,EAAY,IAEnCntI,EAAK+7I,EAAiB39I,EAAI,GAG1BqB,EAFKs8I,EAAiB39I,EAAI,GAEhB2B,EACVL,EAFKq8I,EAAiB39I,EAAI,GAEhB4B,EACVwN,EAAIpjB,KAAKK,KAAKgV,EAAKA,EAAKC,EAAKA,GACjCgR,EAAQg0H,OAAO3kI,EAAKyN,EAAGxN,GACvB0Q,EAAQ+0E,IAAI1lF,EAAIC,EAAIwN,EAAG,EAAG,EAAIpjB,KAAK2J,IAAI,KACrCjJ,EACF,MACJ,KAAK,aACD4lB,EAAQmsI,cACN/xJ,EACF,MACJ,KAAK,SACDsT,EAA2B+uI,EAAY,GACvC6O,EAAK7O,EAAY,GACjB,IAAI96I,EAC2D86I,EAAY,GACvEpE,EAAWoE,EAAY,GACvB1pI,EAA2B,GAAtB0pI,EAAYpjJ,OAAcojJ,EAAY,QAAKv0I,EACpDimG,EAAMxsG,SAAWA,EACjBwsG,EAAM/sG,QAAUA,EACVhH,KAAK2xJ,IACPA,EAAgB3xJ,GAAK,IAEzB,IAAI6K,EAAS8mJ,EAAgB3xJ,GACzB2Y,EACAA,EAAGs4I,EAAkB39I,EAAG49I,EAAI,EAAGrmJ,IAG/BA,EAAO,GAAKomJ,EAAiB39I,GAC7BzI,EAAO,GAAKomJ,EAAiB39I,EAAI,GACjCzI,EAAO5L,OAAS,GAEpBg/I,EAASpzI,EAAQkpG,KACf/zG,EACF,MACJ,KAAK,aACDsT,EAA2B+uI,EAAY,GACvC6O,EAA4B7O,EAAY,GACxC9sC,EACwE8sC,EAAY,GAEpFmN,EAAiCnN,EAAY,GAC7CoN,EAAiCpN,EAAY,GAC7C,IAAI3/I,GAAgC2/I,EAAY,GAC5CjV,GAAiCiV,EAAY,GAC7CqN,GAAiCrN,EAAY,GAC7CsN,GAAiCtN,EAAY,GAC7C2P,GAAyC3P,EAAY,IACrDtrC,GAAkCsrC,EAAY,IAC9CtvE,GAAqDsvE,EAAY,IACjExoC,GAA+BwoC,EAAY,IAC3C4P,GAC0D5P,EAAY,IAC1E,IAAK9sC,GAAS8sC,EAAYpjJ,QAAU,GAAI,CAEpCioI,EAA8Bmb,EAAY,IAC1CsH,EAAiCtH,EAAY,IAC7CqH,EAAmCrH,EAAY,IAC/CyH,EAAiCzH,EAAY,IAC7C,IAAI6P,GAAkBxxJ,KAAKkwJ,6BAA6B1pB,EAAMyiB,EAASD,EAAWI,GAClFv0C,EAAQ28C,GAAgB7yD,MACxBgjD,EAAY,GAAK9sC,EACjB,IAAIw1C,GAAqC1I,EAAY,IACrDmN,GAAW0C,GAAgB1C,QAAUzE,IAAerqJ,KAAKozG,WACzDuuC,EAAY,GAAKmN,EACjB,IAAIvE,GAAqC5I,EAAY,IACrDoN,GAAWyC,GAAgBzC,QAAUxE,IAAevqJ,KAAKozG,WACzDuuC,EAAY,GAAKoN,EACjB/sJ,GAAS6yG,EAAM7yG,OACf2/I,EAAY,GAAK3/I,GACjBm3G,GAAQtE,EAAMsE,MACdwoC,EAAY,IAAMxoC,GAEtB,IAAI4uC,QAAiB,EACjBpG,EAAYpjJ,OAAS,KACrBwpJ,GAAwCpG,EAAY,KAExD,IAAI9kB,QAAU,EAAQ2rB,QAAiB,EAAQC,QAAmB,EAC9D9G,EAAYpjJ,OAAS,IACrBs+H,GAAwC8kB,EAAY,IACpD6G,GAAyC7G,EAAY,IACrD8G,GAA2C9G,EAAY,MAGvD9kB,GAAU,KACV2rB,IAAiB,EACjBC,IAAmB,GAEnB6I,IAAkBH,EAElB96C,IAAY66C,EAENI,IAAmBH,IAEzB96C,IAAY66C,GAGhB,IADA,IAAIO,GAAa,EACV7+I,EAAI49I,EAAI59I,GAAK,EAChB,KAAIm1I,IACAA,GAAe0J,MAAgBt4C,GAAQn5G,KAAKozG,YADhD,CAIA,IAEI1vF,GAAO,CACPwB,EACA2qI,EACAh7C,EALA3xF,GAAaljB,KAAK2uJ,iCAAiC95C,EAAMsE,MAAOtE,EAAM7yG,OAAQuuJ,EAAiB39I,GAAI29I,EAAiB39I,EAAI,GAAIumG,GAAOn3G,GAAQ8sJ,EAASC,EAASC,GAASC,GAAS54C,GAAUhkC,GAAO68E,EAAaryB,GAAS2rB,IAAkBC,GAAkBniJ,GAO1PomI,GACA8b,GAC8B,EACxB,KACNC,GAC8B,EACxB,MAENiJ,QAAY,EACZC,QAAoB,EACxB,GAAIrB,GAAqBiB,GAAwB,CAC7C,IAAI/tJ,GAAQgtJ,EAAK59I,EACjB,IAAK2+I,GAAuB/tJ,IAAQ,CAEhC+tJ,GAAuB/tJ,IAASkgB,GAEhC,SAKJ,GAHAguI,GAAYH,GAAuB/tJ,WAC5B+tJ,GAAuB/tJ,IAC9BmuJ,GAAoB5E,GAAgB2E,IAChCpB,EAAkBxtJ,SAAS6uJ,IAC3B,SAGJrB,GACAA,EAAkBxtJ,SAASogB,GAAW+pI,gBAGtCyE,KAEIpB,GACAA,EAAkBttJ,OAAO2uJ,IAG7B3xJ,KAAK4vJ,oBAAoB1rJ,MAAMlE,KAAM0xJ,KAErCpB,GACAA,EAAkBttJ,OAAOkgB,GAAW+pI,cAExCjtJ,KAAK4vJ,oBAAoB1rJ,MAAMlE,KAAM0jB,OAEvCpkB,EACF,MACJ,KAAK,aACD,IAAI4vH,GAA+ByyB,EAAY,GAC3CpjI,GAA6BojI,EAAY,GACzC0H,GAAkC1H,EAAY,GAC9Cr/B,GAAkCq/B,EAAY,GAClDyH,EAAiCzH,EAAY,GAC7C,IAAImE,GAAkCnE,EAAY,GAC9CiQ,GAA2CjQ,EAAY,GACvD5jB,GAAiC4jB,EAAY,GACjDqH,EAAmCrH,EAAY,GAC/C,IAAI2H,GAAqC3H,EAAY,IACrDnb,EAA8Bmb,EAAY,IAC1CsH,EAAiCtH,EAAY,IAC7C,IAAIkQ,GAAkB,CACKlQ,EAAY,IACZA,EAAY,KAEnCgG,GAAY3nJ,KAAKqnJ,WAAW4B,GAC5BC,GAAOvB,GAAUuB,KACjBU,GAAY,CACZjC,GAAUt1E,MAAM,GAAKu/E,GACrBjK,GAAUt1E,MAAM,GAAKu/E,IAErBE,QAAe,EACf5I,MAAQlpJ,KAAK8tJ,QACbgE,GAAe9xJ,KAAK8tJ,QAAQ5E,KAG5B4I,GAAe,GACf9xJ,KAAK8tJ,QAAQ5E,IAAQ4I,IAEzB,IAAIC,IAAa,QAAiBxB,EAAkBrhC,GAAO3wG,GAAK,GAC5DyzI,GAAapzJ,KAAKoiB,IAAI4oI,GAAU,KAChC,QAAyBV,GAAM1iB,EAAMsrB,IACzC,GAAIxvC,IAAY0vC,IAAcD,GAAY,CACtC,IAAIpJ,GAAY3oJ,KAAKqnJ,WAAW4B,GAASN,UAErC18H,GAAQ+/H,GAAeuE,EAAkBrhC,GAAO3wG,GAAK,EAAGioH,GAD9CurB,GAAaC,IAAcxL,EAAWmC,IACsB7C,GAAUlnJ,KAAKoiB,IAAI4oI,GAAU,IAAK,KAA0BV,GAAM4I,GAAcX,EAA4B,EAAInxJ,KAAK6tJ,eAC/LoE,EAAW,GAAIhmI,GAAO,CAElB,IAAI+gI,GAAyB,GACzBr6I,QAAI,EAAQm+F,QAAK,EAAQ3sD,QAAQ,EAAQw6C,QAAQ,EAAQr6E,QAAO,EACpE,GAAI0kI,EACA,IAAKr2I,GAAI,EAAGm+F,GAAK7kF,GAAM1tB,OAAQoU,GAAIm+F,KAAMn+F,GAAG,CAExCwxC,IADA7/B,GAAO2H,GAAMtZ,KACuB,GACpCgsF,GAAQ3+F,KAAK+tJ,YAAY5pG,GAAO8kG,EAAS,GAAID,GAC7C8F,EAC2BxqI,GAAK,IACvBslI,GAAU,GAAK,GAAKN,GAAcA,IAC3CyF,EACI1F,GAAW1qD,GAAM38F,OACO,GAAlB,GAAMqnJ,IAAgBC,GAAcM,GAAU,GAC5CA,GAAU,GACd7rB,GACR,IAAI76G,GAAaljB,KAAK2uJ,iCAAiChwD,GAAMwa,MAAOxa,GAAM38F,OAAQsiB,GAAK,GAAIA,GAAK,GAAIq6E,GAAMwa,MAAOxa,GAAM38F,OAAQ8sJ,EAASC,EAAS,EAAG,EAAGzqI,GAAK,GAAIutI,IAAiB,EAAO,MAAgB,EAAOvrJ,GAC/M,GAAIgqJ,GACAA,EAAkBxtJ,SAASogB,GAAW+pI,cACtC,MAAMgF,EAEVjF,GAAuB3qJ,KAAK,CACxB6iB,EACA2qI,EACAlxD,GACAz7E,GACA,EACA,KACA,OAIZ,GAAIkmI,EACA,IAAKz2I,GAAI,EAAGm+F,GAAK7kF,GAAM1tB,OAAQoU,GAAIm+F,KAAMn+F,GAAG,CAExCwxC,IADA7/B,GAAO2H,GAAMtZ,KACuB,GACpCgsF,GAAQ3+F,KAAK+tJ,YAAY5pG,GAAO8kG,EAASG,EAAS,IAClD0F,EAAiCxqI,GAAK,GACtCyqI,EAAU1F,GAAW1qD,GAAM38F,OAAS+7H,GAChC76G,GAAaljB,KAAK2uJ,iCAAiChwD,GAAMwa,MAAOxa,GAAM38F,OAAQsiB,GAAK,GAAIA,GAAK,GAAIq6E,GAAMwa,MAAOxa,GAAM38F,OAAQ8sJ,EAASC,EAAS,EAAG,EAAGzqI,GAAK,GAAIutI,IAAiB,EAAO,MAAgB,EAAOvrJ,GAC/M,GAAIgqJ,GACAA,EAAkBxtJ,SAASogB,GAAW+pI,cACtC,MAAMgF,EAEVjF,GAAuB3qJ,KAAK,CACxB6iB,EACA2qI,EACAlxD,GACAz7E,GACA,EACA,KACA,OAIRotI,GACAA,EAAkBvtJ,KAAKiqJ,GAAuB9iJ,IAAI6iJ,KAEtD,IAAK,IAAI/T,GAAM,EAAGkZ,GAAOlF,GAAuBzuJ,OAAQy6I,GAAMkZ,KAAQlZ,GAClEh5I,KAAK4vJ,oBAAoB1rJ,MAAMlE,KAAMgtJ,GAAuBhU,QAItE15I,EACF,MACJ,KAAK,eACD,QAA4B8N,IAAxBgjJ,EAAmC,CAEnC,IAAI1yJ,GAAS0yJ,EADb9pJ,EAAiEq7I,EAAY,GACnChzI,GAC1C,GAAIjR,GACA,OAAOA,KAGb4B,EACF,MACJ,KAAK,OACG8xJ,EACAP,IAGA7wJ,KAAKyuJ,MAAMvpI,KAEb5lB,EACF,MACJ,KAAK,kBAYD,IAXAsT,EAA2B+uI,EAAY,GACvC6O,EAA4B7O,EAAY,GACxCxtI,EAAIo8I,EAAiB39I,GAGrBg+I,GAFAx8I,EAAIm8I,EAAiB39I,EAAI,IAEX,GAAO,GADrB+9I,EAAUx8I,EAAI,GAAO,KAENs8I,GAASG,IAAWF,IAC/BxrI,EAAQg0H,OAAO/kI,EAAGC,GAClBq8I,EAAQE,EACRD,EAAQE,GAEPh+I,GAAK,EAAGA,EAAI49I,EAAI59I,GAAK,EAGtB+9I,GAFAx8I,EAAIo8I,EAAiB39I,IAEP,GAAO,EACrBg+I,GAFAx8I,EAAIm8I,EAAiB39I,EAAI,IAEX,GAAO,EACjBA,GAAK49I,EAAK,GAAKG,IAAWF,GAASG,IAAWF,IAC9CxrI,EAAQi0H,OAAOhlI,EAAGC,GAClBq8I,EAAQE,EACRD,EAAQE,KAGdtxJ,EACF,MACJ,KAAK,iBACDyxJ,EAAsBpP,EACtB3hJ,KAAKytJ,WAAa9L,EAAY,GAC1BkP,IACA7wJ,KAAKyuJ,MAAMvpI,GACX2rI,EAAc,EACVC,IACA5rI,EAAQugI,SACRqL,EAAgB,IAGxB5rI,EAAQ25H,UACmD8C,EAAY,KACrEriJ,EACF,MACJ,KAAK,mBACD0xJ,EAAwBrP,EACpBmP,IACA5rI,EAAQugI,SACRqL,EAAgB,GAEpB9wJ,KAAK0uJ,gBAAgBxpI,EAAiC,KACpD5lB,EACF,MACJ,KAAK,SACG8xJ,EACAN,IAGA5rI,EAAQugI,WAEVnmJ,EACF,MACJ,UACMA,GAIVuxJ,GACA7wJ,KAAKyuJ,MAAMvpI,GAEX4rI,GACA5rI,EAAQugI,UAYhB8H,EAASjrJ,UAAU87E,QAAU,SAAUl5D,EAAS2qI,EAAc7uE,EAAWkwE,EAAchC,EAAaoB,GAChGtwJ,KAAK6tJ,cAAgBqD,EACrBlxJ,KAAKmwJ,SAASjrI,EAAS2qI,EAAc7uE,EAAWhhF,KAAKy/I,aAAcyP,OAAa9hJ,OAAWA,EAAWkjJ,IAY1G/C,EAASjrJ,UAAU6vJ,oBAAsB,SAAUjtI,EAAS87D,EAAWkwE,EAAcd,EAAqBC,GAEtG,OADArwJ,KAAK6tJ,cAAgBqD,EACdlxJ,KAAKmwJ,SAASjrI,EAAS,EAAG87D,EAAWhhF,KAAK2/I,0BAA0B,EAAMyQ,EAAqBC,IAEnG9C,EA7zBkB,GA+zB7B,kBCl4BI6E,GAAQ,CACRC,EACAA,EACAA,EACAA,EACAA,EACAA,GAEAC,GAA+B,WAa/B,SAASA,EAAcj/G,EAAW8/D,EAAYC,EAAYo6C,EAAU+E,EAAiBC,GAKjFxyJ,KAAKmrJ,WAAa93G,EAKlBrzC,KAAKyyJ,UAAYjF,EAKjBxtJ,KAAKszG,YAAcF,EAKnBpzG,KAAKorJ,YAAcj4C,EAKnBnzG,KAAKm7I,cAAgBqX,EAKrBxyJ,KAAK0yJ,mBAAqB,GAK1B1yJ,KAAK2yJ,qBAAuB,KAK5B3yJ,KAAK4yJ,wBAAyB,UAC9B5yJ,KAAK6yJ,iBAAiBN,GAqM1B,OA/LAD,EAAchwJ,UAAU+sG,KAAO,SAAUnqF,EAAS87D,GAC9C,IAAI8xE,EAAiB9yJ,KAAK+yJ,cAAc/xE,GACxC97D,EAAQ+zH,YACR/zH,EAAQg0H,OAAO4Z,EAAe,GAAIA,EAAe,IACjD5tI,EAAQi0H,OAAO2Z,EAAe,GAAIA,EAAe,IACjD5tI,EAAQi0H,OAAO2Z,EAAe,GAAIA,EAAe,IACjD5tI,EAAQi0H,OAAO2Z,EAAe,GAAIA,EAAe,IACjD5tI,EAAQmqF,QAOZijD,EAAchwJ,UAAUuwJ,iBAAmB,SAAUN,GACjD,IAAK,IAAIn5C,KAAUm5C,EAAiB,CAChC,IAAIS,EAAYhzJ,KAAK0yJ,mBAAmBt5C,QACtBhsG,IAAd4lJ,IACAA,EAAY,GACZhzJ,KAAK0yJ,mBAAmBt5C,GAAU45C,GAEtC,IAAIC,EAAsBV,EAAgBn5C,GAC1C,IAAK,IAAIwyC,KAAeqH,EAAqB,CACzC,IAAIxT,EAAewT,EAAoBrH,GACvCoH,EAAUpH,GAAe,IAAI,GAAS5rJ,KAAKorJ,YAAaprJ,KAAKszG,YAAatzG,KAAKyyJ,UAAWhT,MAQtG6S,EAAchwJ,UAAU4wJ,aAAe,SAAUF,GAC7C,IAAK,IAAI55C,KAAUp5G,KAAK0yJ,mBAEpB,IADA,IAAIS,EAAanzJ,KAAK0yJ,mBAAmBt5C,GAChC95G,EAAI,EAAGiS,EAAKyhJ,EAAUz0J,OAAQe,EAAIiS,IAAMjS,EAC7C,GAAI0zJ,EAAU1zJ,KAAM6zJ,EAChB,OAAO,EAInB,OAAO,GAYXb,EAAchwJ,UAAUi0G,2BAA6B,SAAUhiE,EAAY4+D,EAAYkD,EAAUG,EAAc3qG,EAAUunJ,GAErH,IAAIC,EAA6B,GADjC78C,EAAe53G,KAAK4L,MAAMgsG,IACW,EACjCx1B,GAAY,QAAiBhhF,KAAK4yJ,uBAAwBp8C,EAAe,GAAKA,EAAe,GAAK,EAAIrD,GAAa,EAAIA,GAAakD,GAAW9hE,EAAW,IAAKA,EAAW,IAC1K++G,GAActzJ,KAAK2yJ,qBACnBW,IACAtzJ,KAAK2yJ,sBAAuB,SAAsBU,EAAaA,IAEnE,IAYIE,EAZAruI,EAAUllB,KAAK2yJ,qBACfztI,EAAQ8nH,OAAO7zB,QAAUk6C,GACzBnuI,EAAQ8nH,OAAOhrI,SAAWqxJ,GAC1BnuI,EAAQ8nH,OAAO7zB,MAAQk6C,EACvBnuI,EAAQ8nH,OAAOhrI,OAASqxJ,GAElBC,GACNpuI,EAAQgyH,UAAU,EAAG,EAAGmc,EAAaA,QAMdjmJ,IAAvBpN,KAAKm7I,gBACLoY,GAAY,WACZ,QAAiBA,EAAWh/G,IAC5B,QAAOg/G,EAAWpgD,GAAcnzG,KAAKm7I,cAAgB3kC,GAAe+8C,IAExE,IACI3H,EADAjoJ,EAgIL,SAA4BiyF,GAC/B,QAA2CxoF,IAAvComJ,GAA2B59D,GAC3B,OAAO49D,GAA2B59D,GAKtC,IAHA,IAAInhE,EAAgB,EAATmhE,EAAa,EACpB69D,EAAgB79D,EAASA,EACzB89D,EAAY,IAAIzsJ,MAAMwsJ,EAAgB,GACjCn0J,EAAI,EAAGA,GAAKs2F,IAAUt2F,EAC3B,IAAK,IAAIC,EAAI,EAAGA,GAAKq2F,IAAUr2F,EAAG,CAC9B,IAAI04G,EAAa34G,EAAIA,EAAIC,EAAIA,EAC7B,GAAI04G,EAAaw7C,EACb,MAEJ,IAAIprJ,EAAWqrJ,EAAUz7C,GACpB5vG,IACDA,EAAW,GACXqrJ,EAAUz7C,GAAc5vG,GAE5BA,EAAShG,KAA4C,IAArCuzF,EAASt2F,GAAKm1B,GAAQmhE,EAASr2F,IAAU,GACrDD,EAAI,GACJ+I,EAAShG,KAA4C,IAArCuzF,EAASt2F,GAAKm1B,GAAQmhE,EAASr2F,IAAU,GAEzDA,EAAI,IACJ8I,EAAShG,KAA4C,IAArCuzF,EAASt2F,GAAKm1B,GAAQmhE,EAASr2F,IAAU,GACrDD,EAAI,GACJ+I,EAAShG,KAA4C,IAArCuzF,EAASt2F,GAAKm1B,GAAQmhE,EAASr2F,IAAU,IAMzE,IADA,IAAIo0J,EAAa,GACDpiJ,GAAPjS,EAAI,EAAQo0J,EAAUn1J,QAAQe,EAAIiS,IAAMjS,EACzCo0J,EAAUp0J,IACVq0J,EAAWtxJ,KAAK6B,MAAMyvJ,EAAYD,EAAUp0J,IAIpD,OADAk0J,GAA2B59D,GAAU+9D,EAC9BA,EArKWC,CAAmBp9C,GAOjC,SAASq9C,EAAgBvtJ,EAASO,GAE9B,IADA,IAAIitJ,EAAY5uI,EAAQ6uI,aAAa,EAAG,EAAGV,EAAaA,GAAa5wJ,KAC5Du2I,EAAM,EAAGznI,EAAK5N,EAAQpF,OAAQy6I,EAAMznI,EAAIynI,IAC7C,GAAI8a,EAAUnwJ,EAAQq1I,IAAQ,EAAG,CAC7B,IAAKoa,GACAxH,IAAgByG,GACbzG,IAAgByG,IACsB,IAA1Ce,EAAoB1yJ,QAAQ4F,GAAiB,CAC7C,IAAI6iC,GAAOxlC,EAAQq1I,GAAO,GAAK,EAC3B7kI,EAAIqiG,EAAgBrtE,EAAMkqH,EAC1Bj/I,EAAIoiG,GAAiBrtE,EAAMkqH,EAAe,GAC1CW,EAAWnoJ,EAASvF,EAASO,EAAUsN,EAAIA,EAAIC,EAAIA,GACvD,GAAI4/I,EACA,OAAOA,EAGf9uI,EAAQgyH,UAAU,EAAG,EAAGmc,EAAaA,GACrC,OAMZ,IAEI/zJ,EAAGC,EAAGyzJ,EAAWiB,EAAUv2J,EAF3B+5I,EAAK/uI,OAAO0O,KAAKpX,KAAK0yJ,oBAAoBxoJ,IAAIkR,QAGlD,IAFAq8H,EAAG3xI,KAAK,MAEHxG,EAAIm4I,EAAGl5I,OAAS,EAAGe,GAAK,IAAKA,EAAG,CACjC,IAAIusJ,EAAYpU,EAAGn4I,GAAGkY,WAEtB,IADAw7I,EAAYhzJ,KAAK0yJ,mBAAmB7G,GAC/BtsJ,EAAI6yJ,GAAM7zJ,OAAS,EAAGgB,GAAK,IAAKA,EAGjC,QAAiB6N,KADjB6mJ,EAAWjB,EADXpH,EAAcwG,GAAM7yJ,OAGhB7B,EAASu2J,EAAS9B,oBAAoBjtI,EAAS87D,EAAWq1B,EAAUw9C,EAAiBN,IAEjF,OAAO71J,IAW3B40J,EAAchwJ,UAAUywJ,cAAgB,SAAU/xE,GAC9C,IAAI3tC,EAAYrzC,KAAKmrJ,WACrB,IAAK93G,EACD,OAAO,KAEX,IAAIlyC,EAAOkyC,EAAU,GACjBjyC,EAAOiyC,EAAU,GACjBhyC,EAAOgyC,EAAU,GACjB/xC,EAAO+xC,EAAU,GACjBy/G,EAAiB,CAAC3xJ,EAAMC,EAAMD,EAAMG,EAAMD,EAAMC,EAAMD,EAAMD,GAEhE,OADA,QAAY0xJ,EAAgB,EAAG,EAAG,EAAG9xE,EAAW8xE,GACzCA,GAKXR,EAAchwJ,UAAU0yB,QAAU,WAC9B,OAAO,QAAQh1B,KAAK0yJ,qBAYxBJ,EAAchwJ,UAAU87E,QAAU,SAAUl5D,EAAS2qI,EAAc7uE,EAAWkwE,EAAchC,EAAagF,EAAkB5D,GAEvH,IAAI7Y,EAAK/uI,OAAO0O,KAAKpX,KAAK0yJ,oBAAoBxoJ,IAAIkR,QAClDq8H,EAAG3xI,KAAK,MAGJ9F,KAAKmrJ,aACLjmI,EAAQ6zH,OACR/4I,KAAKqvG,KAAKnqF,EAAS87D,IAEvB,IACI1hF,EAAGiS,EAAIhS,EAAG6sH,EAAI0/B,EAASC,EADvBoI,EAAeD,GAAsC9B,GAKzD,IAHI9B,GACA7Y,EAAGrxH,UAEF9mB,EAAI,EAAGiS,EAAKkmI,EAAGl5I,OAAQe,EAAIiS,IAAMjS,EAAG,CACrC,IAAIusJ,EAAYpU,EAAGn4I,GAAGkY,WAEtB,IADAs0I,EAAU9rJ,KAAK0yJ,mBAAmB7G,GAC7BtsJ,EAAI,EAAG6sH,EAAK+nC,EAAa51J,OAAQgB,EAAI6sH,IAAM7sH,EAAG,MAGhC6N,KADf2+I,EAASD,EADSqI,EAAa50J,MAG3BwsJ,EAAO3tE,QAAQl5D,EAAS2qI,EAAc7uE,EAAWkwE,EAAchC,EAAaoB,IAIpFtwJ,KAAKmrJ,YACLjmI,EAAQm0H,WAGTiZ,EA3PuB,GAmQ9BkB,GAA6B,GA+CjC,kCCnUI,GAAwC,WACxC,IAAI/hD,EAAgB,SAAU7+F,EAAGjT,GAI7B,OAHA8xG,EAAgB/oG,OAAOipG,gBAClB,CAAE3pF,UAAW,cAAgB/gB,OAAS,SAAU2L,EAAGjT,GAAKiT,EAAEoV,UAAYroB,IACvE,SAAUiT,EAAGjT,GAAK,IAAK,IAAIqB,KAAKrB,EAAO+I,OAAOpG,UAAUqiB,eAAe/U,KAAKjQ,EAAGqB,KAAI4R,EAAE5R,GAAKrB,EAAEqB,KACzFywG,EAAc7+F,EAAGjT,IAE5B,OAAO,SAAUiT,EAAGjT,GAChB,GAAiB,oBAANA,GAA0B,OAANA,EAC3B,MAAM,IAAI6jB,UAAU,uBAAyB6G,OAAO1qB,GAAK,iCAE7D,SAASiyG,IAAO5xG,KAAKwL,YAAcoH,EADnC6+F,EAAc7+F,EAAGjT,GAEjBiT,EAAEtQ,UAAkB,OAAN3C,EAAa+I,OAAOojC,OAAOnsC,IAAMiyG,EAAGtvG,UAAY3C,EAAE2C,UAAW,IAAIsvG,IAZ3C,GA26B5C,GA14B6C,SAAUG,GAWnD,SAASqiD,EAAwBlvI,EAASkuF,EAAYjH,EAAQnrB,EAAWkwE,EAAcmD,EAAsBC,GACzG,IAAI76H,EAAQs4E,EAAOniG,KAAK5P,OAASA,KA2KjC,OAtKAy5B,EAAM86H,SAAWrvI,EAKjBuU,EAAM65E,YAAcF,EAKpB35E,EAAM+6H,QAAUroD,EAKhB1yE,EAAMg7H,WAAazzE,EAKnBvnD,EAAMo0H,cAAgBqD,EAKtBz3H,EAAMi7H,kBAAoBL,EAK1B56H,EAAMk7H,eAAiBL,EAKvB76H,EAAMm7H,kBAAoB,KAK1Bn7H,EAAMo7H,oBAAsB,KAK5Bp7H,EAAMq7H,kBAAoB,KAK1Br7H,EAAMs7H,WAAa,KAKnBt7H,EAAMu7H,aAAe,KAKrBv7H,EAAM26E,OAAS,KAKf36E,EAAMw7H,cAAgB,EAKtBx7H,EAAMy7H,cAAgB,EAKtBz7H,EAAM07H,aAAe,EAKrB17H,EAAM27H,cAAgB,EAKtB37H,EAAM47H,cAAgB,EAKtB57H,EAAM67H,cAAgB,EAKtB77H,EAAM87H,sBAAuB,EAK7B97H,EAAM+7H,eAAiB,EAKvB/7H,EAAMg8H,YAAc,CAAC,EAAG,GAKxBh8H,EAAMi8H,YAAc,EAKpBj8H,EAAMktH,MAAQ,GAKdltH,EAAMmtH,aAAe,EAKrBntH,EAAMotH,aAAe,EAKrBptH,EAAMqtH,qBAAsB,EAK5BrtH,EAAMstH,cAAgB,EAKtBttH,EAAMk8H,WAAa,CAAC,EAAG,GAKvBl8H,EAAMutH,eAAiB,KAKvBvtH,EAAMytH,iBAAmB,KAKzBztH,EAAM2tH,WAAa,KAKnB3tH,EAAMm0H,kBAAoB,GAK1Bn0H,EAAMm8H,oBAAqB,UACpBn8H,EAitBX,OAv4BA,GAAU26H,EAAyBriD,GA+LnCqiD,EAAwB9xJ,UAAUuzJ,YAAc,SAAU7V,EAAiBlnD,EAAQv6E,EAAK4jH,GACpF,GAAKniI,KAAKo0G,OAAV,CAGA,IAAIm8C,GAAmB,QAAYvQ,EAAiBlnD,EAAQv6E,EAAK4jH,EAAQniI,KAAKy0J,WAAYz0J,KAAK4tJ,mBAC3F1oI,EAAUllB,KAAKu0J,SACfuB,EAAiB91J,KAAK41J,mBACtB9b,EAAQ50H,EAAQ80H,YACM,GAAtBh6I,KAAKo1J,gBACLlwI,EAAQ80H,YAAcF,EAAQ95I,KAAKo1J,eAEvC,IAAI/+C,EAAWr2G,KAAKw1J,eAChBx1J,KAAKu1J,uBACLl/C,GAAYr2G,KAAK6tJ,eAErB,IAAK,IAAIvuJ,EAAI,EAAGiS,EAAKg/I,EAAiBhyJ,OAAQe,EAAIiS,EAAIjS,GAAK,EAAG,CAC1D,IAAI6U,EAAIo8I,EAAiBjxJ,GAAKU,KAAKi1J,cAC/B7gJ,EAAIm8I,EAAiBjxJ,EAAI,GAAKU,KAAKk1J,cACvC,GAAiB,IAAb7+C,GACuB,GAAvBr2G,KAAKy1J,YAAY,IACM,GAAvBz1J,KAAKy1J,YAAY,GAAS,CAC1B,IAAI7yB,EAAUzuH,EAAInU,KAAKi1J,cACnBpyB,EAAUzuH,EAAIpU,KAAKk1J,eACvB,QAAiBY,EAAgBlzB,EAASC,EAAS,EAAG,EAAGxsB,GAAWusB,GAAUC,GAC9E39G,EAAQ6wI,aAAa7xJ,MAAMghB,EAAS4wI,GACpC5wI,EAAQiuB,UAAUyvF,EAASC,GAC3B39G,EAAQmtD,MAAMryE,KAAKy1J,YAAY,GAAIz1J,KAAKy1J,YAAY,IACpDvwI,EAAQ+0H,UAAUj6I,KAAKo0G,OAAQp0G,KAAKq1J,cAAer1J,KAAKs1J,cAAet1J,KAAK01J,YAAa11J,KAAKm1J,cAAen1J,KAAKi1J,eAAgBj1J,KAAKk1J,cAAel1J,KAAK01J,YAAa11J,KAAKm1J,cAC7KjwI,EAAQ6wI,aAAa,EAAG,EAAG,EAAG,EAAG,EAAG,QAGpC7wI,EAAQ+0H,UAAUj6I,KAAKo0G,OAAQp0G,KAAKq1J,cAAer1J,KAAKs1J,cAAet1J,KAAK01J,YAAa11J,KAAKm1J,aAAchhJ,EAAGC,EAAGpU,KAAK01J,YAAa11J,KAAKm1J,cAGvH,GAAtBn1J,KAAKo1J,gBACLlwI,EAAQ80H,YAAcF,KAU9Bsa,EAAwB9xJ,UAAU0zJ,UAAY,SAAUhW,EAAiBlnD,EAAQv6E,EAAK4jH,GAClF,GAAKniI,KAAKonJ,YAA6B,KAAfpnJ,KAAK2mJ,MAA7B,CAGI3mJ,KAAKgnJ,gBACLhnJ,KAAKi2J,qBAAqBj2J,KAAKgnJ,gBAE/BhnJ,KAAKknJ,kBACLlnJ,KAAKk2J,uBAAuBl2J,KAAKknJ,kBAErClnJ,KAAKm2J,qBAAqBn2J,KAAKonJ,YAC/B,IAAImJ,GAAmB,QAAYvQ,EAAiBlnD,EAAQv6E,EAAK4jH,EAAQniI,KAAKy0J,WAAYz0J,KAAK4tJ,mBAC3F1oI,EAAUllB,KAAKu0J,SACfl+C,EAAWr2G,KAAK+mJ,cAIpB,IAHI/mJ,KAAK8mJ,sBACLzwC,GAAYr2G,KAAK6tJ,eAEd/0D,EAASv6E,EAAKu6E,GAAUqpC,EAAQ,CACnC,IAAIhuH,EAAIo8I,EAAiBz3D,GAAU94F,KAAK4mJ,aACpCxyI,EAAIm8I,EAAiBz3D,EAAS,GAAK94F,KAAK6mJ,aAC5C,GAAiB,IAAbxwC,GACsB,GAAtBr2G,KAAK21J,WAAW,IACM,GAAtB31J,KAAK21J,WAAW,GAAS,CACzB,IAAIG,GAAiB,QAAiB91J,KAAK41J,mBAAoBzhJ,EAAGC,EAAG,EAAG,EAAGiiG,GAAWliG,GAAIC,GAC1F8Q,EAAQ6wI,aAAa7xJ,MAAMghB,EAAS4wI,GACpC5wI,EAAQiuB,UAAUh/B,EAAGC,GACrB8Q,EAAQmtD,MAAMryE,KAAK21J,WAAW,GAAI31J,KAAK21J,WAAW,IAC9C31J,KAAKknJ,kBACLhiI,EAAQkxI,WAAWp2J,KAAK2mJ,MAAO,EAAG,GAElC3mJ,KAAKgnJ,gBACL9hI,EAAQmxI,SAASr2J,KAAK2mJ,MAAO,EAAG,GAEpCzhI,EAAQ6wI,aAAa,EAAG,EAAG,EAAG,EAAG,EAAG,QAGhC/1J,KAAKknJ,kBACLhiI,EAAQkxI,WAAWp2J,KAAK2mJ,MAAOxyI,EAAGC,GAElCpU,KAAKgnJ,gBACL9hI,EAAQmxI,SAASr2J,KAAK2mJ,MAAOxyI,EAAGC,MAchDggJ,EAAwB9xJ,UAAUg0J,cAAgB,SAAUtW,EAAiBlnD,EAAQv6E,EAAK4jH,EAAQo0B,GAC9F,IAAIrxI,EAAUllB,KAAKu0J,SACfhE,GAAmB,QAAYvQ,EAAiBlnD,EAAQv6E,EAAK4jH,EAAQniI,KAAKy0J,WAAYz0J,KAAK4tJ,mBAC/F1oI,EAAQg0H,OAAOqX,EAAiB,GAAIA,EAAiB,IACrD,IAAIhyJ,EAASgyJ,EAAiBhyJ,OAC1Bg4J,IACAh4J,GAAU,GAEd,IAAK,IAAIe,EAAI,EAAGA,EAAIf,EAAQe,GAAK,EAC7B4lB,EAAQi0H,OAAOoX,EAAiBjxJ,GAAIixJ,EAAiBjxJ,EAAI,IAK7D,OAHIi3J,GACArxI,EAAQmsI,YAEL9yI,GAUX61I,EAAwB9xJ,UAAUk0J,WAAa,SAAUxW,EAAiBlnD,EAAQjC,EAAMsrC,GACpF,IAAK,IAAI7iI,EAAI,EAAGiS,EAAKslF,EAAKt4F,OAAQe,EAAIiS,IAAMjS,EACxCw5F,EAAS94F,KAAKs2J,cAActW,EAAiBlnD,EAAQjC,EAAKv3F,GAAI6iI,GAAQ,GAE1E,OAAOrpC,GASXs7D,EAAwB9xJ,UAAUo7I,WAAa,SAAU72I,GACrD,IAAK,QAAW7G,KAAKw0J,QAAS3tJ,EAAS4sG,aAAvC,CAGA,GAAIzzG,KAAK+0J,YAAc/0J,KAAKg1J,aAAc,CAClCh1J,KAAK+0J,YACL/0J,KAAKi2J,qBAAqBj2J,KAAK+0J,YAE/B/0J,KAAKg1J,cACLh1J,KAAKk2J,uBAAuBl2J,KAAKg1J,cAErC,IAAIzE,GAAmB,SAAgB1pJ,EAAU7G,KAAKy0J,WAAYz0J,KAAK4tJ,mBACnE35I,EAAKs8I,EAAiB,GAAKA,EAAiB,GAC5Cr8I,EAAKq8I,EAAiB,GAAKA,EAAiB,GAC5C36D,EAASh3F,KAAKK,KAAKgV,EAAKA,EAAKC,EAAKA,GAClCgR,EAAUllB,KAAKu0J,SACnBrvI,EAAQ+zH,YACR/zH,EAAQ+0E,IAAIs2D,EAAiB,GAAIA,EAAiB,GAAI36D,EAAQ,EAAG,EAAIh3F,KAAK2J,IACtEvI,KAAK+0J,YACL7vI,EAAQ4rB,OAER9wC,KAAKg1J,cACL9vI,EAAQugI,SAGG,KAAfzlJ,KAAK2mJ,OACL3mJ,KAAKg2J,UAAUnvJ,EAAS+2H,YAAa,EAAG,EAAG,KAUnDw2B,EAAwB9xJ,UAAUg5I,SAAW,SAAUriC,GACnDj5G,KAAK4+I,mBAAmB3lC,EAAMuwC,UAAWvwC,EAAMywC,aAC/C1pJ,KAAK++I,cAAc9lC,EAAMvF,YACzB1zG,KAAKk/I,aAAajmC,EAAM0xC,YAK5ByJ,EAAwB9xJ,UAAUyzJ,aAAe,SAAU/0E,GACvDhhF,KAAKy0J,WAAazzE,GAStBozE,EAAwB9xJ,UAAUm7I,aAAe,SAAU52I,GAEvD,OADWA,EAASuhD,WAEhB,KAAK05E,EAAA,QACD9hI,KAAKu+I,UACgD,GACrD,MACJ,KAAKzc,EAAA,cACD9hI,KAAK+9I,eACqD,GAC1D,MACJ,KAAKjc,EAAA,UACD9hI,KAAKy+I,YACkD,GACvD,MACJ,KAAK3c,EAAA,cACD9hI,KAAKm+I,eACqD,GAC1D,MACJ,KAAKrc,EAAA,oBACD9hI,KAAKi+I,oBAC0D,GAC/D,MACJ,KAAKnc,EAAA,gBACD9hI,KAAKq+I,iBACuD,GAC5D,MACJ,KAAKvc,EAAA,sBACD9hI,KAAK69I,uBAC6D,GAClE,MACJ,KAAK/b,EAAA,SACD9hI,KAAK09I,WACiD,KAelE0W,EAAwB9xJ,UAAUs7I,YAAc,SAAUt3I,EAAS2yG,GAC/D,IAAIpyG,EAAWoyG,EAAMw9C,qBAANx9C,CAA4B3yG,GACtCO,IAAa,QAAW7G,KAAKw0J,QAAS3tJ,EAAS4sG,eAGpDzzG,KAAKs7I,SAASriC,GACdj5G,KAAKy9I,aAAa52I,KAQtButJ,EAAwB9xJ,UAAUu7I,uBAAyB,SAAUh3I,GAEjE,IADA,IAAI0D,EAAa1D,EAAS6vJ,qBACjBp3J,EAAI,EAAGiS,EAAKhH,EAAWhM,OAAQe,EAAIiS,IAAMjS,EAC9CU,KAAKy9I,aAAalzI,EAAWjL,KASrC80J,EAAwB9xJ,UAAUi8I,UAAY,SAAU13I,GAChD7G,KAAK00J,oBACL7tJ,EAAiEA,EAAS8vJ,oBAAoB32J,KAAK00J,kBAAmB10J,KAAK20J,iBAE/H,IAAI3U,EAAkBn5I,EAASq7H,qBAC3BC,EAASt7H,EAASu7H,YAClBpiI,KAAKo0G,QACLp0G,KAAK61J,YAAY7V,EAAiB,EAAGA,EAAgBzhJ,OAAQ4jI,GAE9C,KAAfniI,KAAK2mJ,OACL3mJ,KAAKg2J,UAAUhW,EAAiB,EAAGA,EAAgBzhJ,OAAQ4jI,IASnEiyB,EAAwB9xJ,UAAU67I,eAAiB,SAAUt3I,GACrD7G,KAAK00J,oBACL7tJ,EAAsEA,EAAS8vJ,oBAAoB32J,KAAK00J,kBAAmB10J,KAAK20J,iBAEpI,IAAI3U,EAAkBn5I,EAASq7H,qBAC3BC,EAASt7H,EAASu7H,YAClBpiI,KAAKo0G,QACLp0G,KAAK61J,YAAY7V,EAAiB,EAAGA,EAAgBzhJ,OAAQ4jI,GAE9C,KAAfniI,KAAK2mJ,OACL3mJ,KAAKg2J,UAAUhW,EAAiB,EAAGA,EAAgBzhJ,OAAQ4jI,IASnEiyB,EAAwB9xJ,UAAUy7I,eAAiB,SAAUl3I,GAIzD,GAHI7G,KAAK00J,oBACL7tJ,EAAsEA,EAAS8vJ,oBAAoB32J,KAAK00J,kBAAmB10J,KAAK20J,kBAE/H,QAAW30J,KAAKw0J,QAAS3tJ,EAAS4sG,aAAvC,CAGA,GAAIzzG,KAAKg1J,aAAc,CACnBh1J,KAAKk2J,uBAAuBl2J,KAAKg1J,cACjC,IAAI9vI,EAAUllB,KAAKu0J,SACfvU,EAAkBn5I,EAASq7H,qBAC/Bh9G,EAAQ+zH,YACRj5I,KAAKs2J,cAActW,EAAiB,EAAGA,EAAgBzhJ,OAAQsI,EAASu7H,aAAa,GACrFl9G,EAAQugI,SAEZ,GAAmB,KAAfzlJ,KAAK2mJ,MAAc,CACnB,IAAIiQ,EAAe/vJ,EAASmhJ,kBAC5BhoJ,KAAKg2J,UAAUY,EAAc,EAAG,EAAG,MAS3CxC,EAAwB9xJ,UAAU27I,oBAAsB,SAAUp3I,GAC1D7G,KAAK00J,oBACL7tJ,EACoEA,EAAS8vJ,oBAAoB32J,KAAK00J,kBAAmB10J,KAAK20J,iBAElI,IAAIkC,EAAiBhwJ,EAAS4sG,YAC9B,IAAK,QAAWzzG,KAAKw0J,QAASqC,GAA9B,CAGA,GAAI72J,KAAKg1J,aAAc,CACnBh1J,KAAKk2J,uBAAuBl2J,KAAKg1J,cACjC,IAAI9vI,EAAUllB,KAAKu0J,SACfvU,EAAkBn5I,EAASq7H,qBAC3BppC,EAAS,EACTjC,EAAqChwF,EAAS06I,UAC9Cpf,EAASt7H,EAASu7H,YACtBl9G,EAAQ+zH,YACR,IAAK,IAAI35I,EAAI,EAAGiS,EAAKslF,EAAKt4F,OAAQe,EAAIiS,IAAMjS,EACxCw5F,EAAS94F,KAAKs2J,cAActW,EAAiBlnD,EAAQjC,EAAKv3F,GAAI6iI,GAAQ,GAE1Ej9G,EAAQugI,SAEZ,GAAmB,KAAfzlJ,KAAK2mJ,MAAc,CACnB,IAAImQ,EAAgBjwJ,EAASohJ,mBAC7BjoJ,KAAKg2J,UAAUc,EAAe,EAAGA,EAAcv4J,OAAQ,MAS/D61J,EAAwB9xJ,UAAUm8I,YAAc,SAAU53I,GAItD,GAHI7G,KAAK00J,oBACL7tJ,EAAmEA,EAAS8vJ,oBAAoB32J,KAAK00J,kBAAmB10J,KAAK20J,kBAE5H,QAAW30J,KAAKw0J,QAAS3tJ,EAAS4sG,aAAvC,CAGA,GAAIzzG,KAAKg1J,cAAgBh1J,KAAK+0J,WAAY,CAClC/0J,KAAK+0J,YACL/0J,KAAKi2J,qBAAqBj2J,KAAK+0J,YAE/B/0J,KAAKg1J,cACLh1J,KAAKk2J,uBAAuBl2J,KAAKg1J,cAErC,IAAI9vI,EAAUllB,KAAKu0J,SACnBrvI,EAAQ+zH,YACRj5I,KAAKw2J,WAAW3vJ,EAASq6I,6BAA8B,EACzBr6I,EAAS06I,UAAY16I,EAASu7H,aACxDpiI,KAAK+0J,YACL7vI,EAAQ4rB,OAER9wC,KAAKg1J,cACL9vI,EAAQugI,SAGhB,GAAmB,KAAfzlJ,KAAK2mJ,MAAc,CACnB,IAAIoQ,EAAoBlwJ,EAASqhJ,uBACjCloJ,KAAKg2J,UAAUe,EAAmB,EAAG,EAAG,MAQhD3C,EAAwB9xJ,UAAU+7I,iBAAmB,SAAUx3I,GAI3D,GAHI7G,KAAK00J,oBACL7tJ,EAAwEA,EAAS8vJ,oBAAoB32J,KAAK00J,kBAAmB10J,KAAK20J,kBAEjI,QAAW30J,KAAKw0J,QAAS3tJ,EAAS4sG,aAAvC,CAGA,GAAIzzG,KAAKg1J,cAAgBh1J,KAAK+0J,WAAY,CAClC/0J,KAAK+0J,YACL/0J,KAAKi2J,qBAAqBj2J,KAAK+0J,YAE/B/0J,KAAKg1J,cACLh1J,KAAKk2J,uBAAuBl2J,KAAKg1J,cAErC,IAAI9vI,EAAUllB,KAAKu0J,SACfvU,EAAkBn5I,EAASq6I,6BAC3BpoD,EAAS,EACTqoD,EAAQt6I,EAASu6I,WACjBjf,EAASt7H,EAASu7H,YACtBl9G,EAAQ+zH,YACR,IAAK,IAAI35I,EAAI,EAAGiS,EAAK4vI,EAAM5iJ,OAAQe,EAAIiS,IAAMjS,EAAG,CAC5C,IAAIu3F,EAAOsqD,EAAM7hJ,GACjBw5F,EAAS94F,KAAKw2J,WAAWxW,EAAiBlnD,EAAQjC,EAAMsrC,GAExDniI,KAAK+0J,YACL7vI,EAAQ4rB,OAER9wC,KAAKg1J,cACL9vI,EAAQugI,SAGhB,GAAmB,KAAfzlJ,KAAK2mJ,MAAc,CACnB,IAAIqQ,EAAqBnwJ,EAASuhJ,wBAClCpoJ,KAAKg2J,UAAUgB,EAAoB,EAAGA,EAAmBz4J,OAAQ,MAOzE61J,EAAwB9xJ,UAAU2zJ,qBAAuB,SAAUxO,GAC/D,IAAIviI,EAAUllB,KAAKu0J,SACf0C,EAAmBj3J,KAAK40J,kBACvBqC,EAOGA,EAAiBpY,WAAa4I,EAAU5I,YACxCoY,EAAiBpY,UAAY4I,EAAU5I,UACvC35H,EAAQ25H,UAAY4I,EAAU5I,YARlC35H,EAAQ25H,UAAY4I,EAAU5I,UAC9B7+I,KAAK40J,kBAAoB,CACrB/V,UAAW4I,EAAU5I,aAcjCuV,EAAwB9xJ,UAAU4zJ,uBAAyB,SAAUxO,GACjE,IAAIxiI,EAAUllB,KAAKu0J,SACf2C,EAAqBl3J,KAAK60J,oBACzBqC,GAqBGA,EAAmBjV,SAAWyF,EAAYzF,UAC1CiV,EAAmBjV,QAAUyF,EAAYzF,QACzC/8H,EAAQ+8H,QAAUyF,EAAYzF,SAE9B/8H,EAAQopI,eACH,QAAO4I,EAAmB9U,SAAUsF,EAAYtF,WACjDl9H,EAAQopI,YAAa4I,EAAmB9U,SAAWsF,EAAYtF,UAE/D8U,EAAmB3U,gBAAkBmF,EAAYnF,iBACjD2U,EAAmB3U,eAAiBmF,EAAYnF,eAChDr9H,EAAQq9H,eAAiBmF,EAAYnF,iBAGzC2U,EAAmBxU,UAAYgF,EAAYhF,WAC3CwU,EAAmBxU,SAAWgF,EAAYhF,SAC1Cx9H,EAAQw9H,SAAWgF,EAAYhF,UAE/BwU,EAAmBtU,WAAa8E,EAAY9E,YAC5CsU,EAAmBtU,UAAY8E,EAAY9E,UAC3C19H,EAAQ09H,UAAY8E,EAAY9E,WAEhCsU,EAAmBnU,YAAc2E,EAAY3E,aAC7CmU,EAAmBnU,WAAa2E,EAAY3E,WAC5C79H,EAAQ69H,WAAa2E,EAAY3E,YAEjCmU,EAAmBpY,aAAe4I,EAAY5I,cAC9CoY,EAAmBpY,YAAc4I,EAAY5I,YAC7C55H,EAAQ45H,YAAc4I,EAAY5I,eA/CtC55H,EAAQ+8H,QAAUyF,EAAYzF,QAC1B/8H,EAAQopI,cACRppI,EAAQopI,YAAY5G,EAAYtF,UAChCl9H,EAAQq9H,eAAiBmF,EAAYnF,gBAEzCr9H,EAAQw9H,SAAWgF,EAAYhF,SAC/Bx9H,EAAQ09H,UAAY8E,EAAY9E,UAChC19H,EAAQ69H,WAAa2E,EAAY3E,WACjC79H,EAAQ45H,YAAc4I,EAAY5I,YAClC9+I,KAAK60J,oBAAsB,CACvB5S,QAASyF,EAAYzF,QACrBG,SAAUsF,EAAYtF,SACtBG,eAAgBmF,EAAYnF,eAC5BG,SAAUgF,EAAYhF,SACtBE,UAAW8E,EAAY9E,UACvBG,WAAY2E,EAAY3E,WACxBjE,YAAa4I,EAAY5I,eAuCrCsV,EAAwB9xJ,UAAU6zJ,qBAAuB,SAAUxO,GAC/D,IAAIziI,EAAUllB,KAAKu0J,SACf4C,EAAmBn3J,KAAK80J,kBACxBnM,EAAYhB,EAAUgB,UACpBhB,EAAUgB,UACV,KACDwO,GAWGA,EAAiBjO,MAAQvB,EAAUuB,OACnCiO,EAAiBjO,KAAOvB,EAAUuB,KAClChkI,EAAQgkI,KAAOvB,EAAUuB,MAEzBiO,EAAiBxO,WAAaA,IAC9BwO,EAAiBxO,UAA2C,EAC5DzjI,EAAQyjI,UAA2C,GAEnDwO,EAAiBhO,cAAgBxB,EAAUwB,eAC3CgO,EAAiBhO,aAAkDxB,EAAsB,aACzFziI,EAAQikI,aAAkDxB,EAAsB,gBApBpFziI,EAAQgkI,KAAOvB,EAAUuB,KACzBhkI,EAAQyjI,UAA2C,EACnDzjI,EAAQikI,aAAkDxB,EAAsB,aAChF3nJ,KAAK80J,kBAAoB,CACrB5L,KAAMvB,EAAUuB,KAChBP,UAAWA,EACXQ,aAAcxB,EAAUwB,gBAyBpCiL,EAAwB9xJ,UAAUs8I,mBAAqB,SAAUC,EAAWC,GACxE,IAAIrlH,EAAQz5B,KACZ,GAAK6+I,EAGA,CACD,IAAI+C,EAAiB/C,EAAUgD,WAC/B7hJ,KAAK+0J,WAAa,CACdlW,WAAW,OAAY+C,GAAkC,YAL7D5hJ,KAAK+0J,WAAa,KAQtB,GAAKjW,EAGA,CACD,IAAIgD,EAAmBhD,EAAY+C,WAC/BE,EAAqBjD,EAAYkD,aACjCE,EAAsBpD,EAAYqD,cAClCE,EAA4BvD,EAAYwD,oBACxCE,EAAsB1D,EAAY2D,cAClCE,EAAmB7D,EAAYrsG,WAC/BowG,EAAwB/D,EAAYgE,gBACpCV,EAAWF,GAET,KACNliJ,KAAKg1J,aAAe,CAChB/S,aAAgC70I,IAAvB20I,EACHA,EACA,KACNK,SAA+B,IAArBpiJ,KAAKszG,YACT8uC,EACAA,EAASl4I,KAAI,SAAUzL,GAAK,OAAOA,EAAIg7B,EAAM65E,eACnDivC,gBAAiBF,GAEX,MAAyBriJ,KAAKszG,YACpCovC,cAAkCt1I,IAAxBo1I,EACJA,EACA,KACNI,gBAAiCx1I,IAArBu1I,EACNA,EACA,MAAoB3iJ,KAAKszG,YAC/ByvC,gBAAsC31I,IAA1By1I,EACNA,EACA,KACN/D,aAAa,OAAYgD,GAAsC,YAhCnE9hJ,KAAKg1J,aAAe,MA0C5BZ,EAAwB9xJ,UAAUy8I,cAAgB,SAAUC,GACxD,IAAIoY,EACJ,GAAKpY,IAAgBoY,EAAYpY,EAAWz4B,WAA5C,CAIA,IAAI8wC,EAAcrY,EAAW6F,YACzByS,EAActY,EAAWgG,YAC7BhlJ,KAAKo0G,OAAS4qC,EAAWtrC,SAAS1zG,KAAKszG,aACvCtzG,KAAKi1J,cAAgBoC,EAAY,GAAKr3J,KAAKszG,YAC3CtzG,KAAKk1J,cAAgBmC,EAAY,GAAKr3J,KAAKszG,YAC3CtzG,KAAKm1J,aAAeiC,EAAU,GAAKp3J,KAAKszG,YACxCtzG,KAAKo1J,cAAgBpW,EAAWvO,aAChCzwI,KAAKq1J,cAAgBiC,EAAY,GACjCt3J,KAAKs1J,cAAgBgC,EAAY,GACjCt3J,KAAKu1J,qBAAuBvW,EAAWiG,oBACvCjlJ,KAAKw1J,eAAiBxW,EAAWtxB,cACjC1tH,KAAKy1J,YAAczW,EAAWkG,gBAC9BllJ,KAAK01J,YAAc0B,EAAU,GAAKp3J,KAAKszG,iBAfnCtzG,KAAKo0G,OAAS,MAuBtBggD,EAAwB9xJ,UAAU48I,aAAe,SAAUC,GACvD,GAAKA,EAGA,CACD,IAAIoK,EAAgBpK,EAAUqK,UAC9B,GAAKD,EAGA,CACD,IAAIgO,EAAqBhO,EAAc1H,WACvC7hJ,KAAKgnJ,eAAiB,CAClBnI,WAAW,OAAY0Y,GAA0C,YALrEv3J,KAAKgnJ,eAAiB,KAQ1B,IAAIyC,EAAkBtK,EAAUuK,YAChC,GAAKD,EAGA,CACD,IAAI+N,EAAuB/N,EAAgB5H,WACvC4V,EAAyBhO,EAAgBzH,aACzC0V,EAA0BjO,EAAgBtH,cAC1CwV,EAAgClO,EAAgBnH,oBAChDsV,EAA0BnO,EAAgBhH,cAC1CoV,EAAuBpO,EAAgBh3G,WACvCqlH,EAA4BrO,EAAgB3G,gBAChD9iJ,KAAKknJ,iBAAmB,CACpBjF,aAAoC70I,IAA3BqqJ,EACHA,EACA,KACNrV,SAAUsV,GAEJ,KACNnV,eAAgBoV,GAEV,KACNjV,cAAsCt1I,IAA5BwqJ,EACJA,EACA,KACNhV,eAAoCx1I,IAAzByqJ,EACLA,EACA,KACN9U,gBAA0C31I,IAA9B0qJ,EACNA,EACA,KACNhZ,aAAa,OAAY0Y,GAA8C,YA7B3Ex3J,KAAKknJ,iBAAmB,KAgC5B,IAAI6Q,EAAW5Y,EAAUwK,UACrBU,EAAclL,EAAUmL,aACxBC,EAAcpL,EAAUqL,aACxBC,EAAqBtL,EAAU8F,oBAC/ByF,EAAevL,EAAUzxB,cACzBk8B,EAAYzK,EAAU+F,gBACtB8S,EAAW7Y,EAAUwL,UACrBsN,EAAgB9Y,EAAU6K,eAC1BkO,EAAmB/Y,EAAU8K,kBACjCjqJ,KAAKonJ,WAAa,CACd8B,UAAmB97I,IAAb2qJ,EAAyBA,EAAW,KAC1CpP,eAA6Bv7I,IAAlB6qJ,EAA8BA,EAAgB,KACzD9O,kBAAmC/7I,IAArB8qJ,EACRA,EACA,MAEVl4J,KAAK2mJ,WAAqBv5I,IAAb4qJ,EAAyBA,EAAW,GACjDh4J,KAAK4mJ,kBACex5I,IAAhBi9I,EAA4BrqJ,KAAKszG,YAAc+2C,EAAc,EACjErqJ,KAAK6mJ,kBACez5I,IAAhBm9I,EAA4BvqJ,KAAKszG,YAAci3C,EAAc,EACjEvqJ,KAAK8mJ,yBACsB15I,IAAvBq9I,GAAmCA,EACvCzqJ,KAAK+mJ,mBAAiC35I,IAAjBs9I,EAA6BA,EAAe,EACjE1qJ,KAAK21J,WAAa,CACd31J,KAAKszG,YAAcs2C,EAAU,GAC7B5pJ,KAAKszG,YAAcs2C,EAAU,SAzEjC5pJ,KAAK2mJ,MAAQ,IA6EdyN,EAx4BiC,CAy4B1C,2BCr6BS+D,GAAwB,+BCgB/BC,GAAqB,CACrB,MAsNJ,SAA6BC,EAAcxxJ,EAAUoyG,EAAO3yG,EAASgyJ,GACjE,IAGI/G,EAHAvS,EAAa/lC,EAAMvF,WACnByrC,EAAYlmC,EAAM0xC,UAGlB2N,IACAD,EAAeC,EACf/G,EACIvS,GAAcG,GAAaA,EAAUwL,UAAY,QAAKv9I,GAE9D,GAAI4xI,EAAY,CACZ,GAAIA,EAAWuZ,iBAAmBrkD,GAAA,SAC9B,OAEJ,IAAIskD,EAAcH,EAAa1M,WAAW1yC,EAAMu3B,YAAa6hB,GAC7DmG,EAAYzZ,cAAcC,EAAYuS,GACtCiH,EAAYja,UAAU13I,EAAUP,GAEpC,GAAI64I,GAAaA,EAAUwL,UAAW,CAClC,IAAI8N,EAAaJ,EAAa1M,WAAW1yC,EAAMu3B,YAAa6hB,GAC5DoG,EAAWvZ,aAAaC,EAAWoS,GACnCkH,EAAW9Z,SAAS93I,EAAUP,KA1OlC,WAqJJ,SAAkC+xJ,EAAcxxJ,EAAUoyG,EAAO3yG,EAASgyJ,GACtE,IAAIxZ,EAAc7lC,EAAMywC,YACxB,GAAI5K,EAAa,CACb,IAAI4Z,EAAmBL,EAAa1M,WAAW1yC,EAAMu3B,YAAa6hB,GAClEqG,EAAiB9Z,mBAAmB,KAAME,GAC1C4Z,EAAiB3a,eAAel3I,EAAUP,GAE9C,IAAI64I,EAAYlmC,EAAM0xC,UACtB,GAAIxL,GAAaA,EAAUwL,UAAW,CAClC,IAAI8N,GAAcH,GAA6BD,GAAc1M,WAAW1yC,EAAMu3B,YAAa6hB,GAC3FoG,EAAWvZ,aAAaC,GACxBsZ,EAAW9Z,SAAS93I,EAAUP,KA/JlC,QAkRJ,SAA+B+xJ,EAAcxxJ,EAAUoyG,EAAO3yG,EAASgyJ,GACnE,IAAIzZ,EAAY5lC,EAAMuwC,UAClB1K,EAAc7lC,EAAMywC,YACxB,GAAI7K,GAAaC,EAAa,CAC1B,IAAI6Z,EAAgBN,EAAa1M,WAAW1yC,EAAMu3B,YAAa6hB,GAC/DsG,EAAc/Z,mBAAmBC,EAAWC,GAC5C6Z,EAAcla,YAAY53I,EAAUP,GAExC,IAAI64I,EAAYlmC,EAAM0xC,UACtB,GAAIxL,GAAaA,EAAUwL,UAAW,CAClC,IAAI8N,GAAcH,GAA6BD,GAAc1M,WAAW1yC,EAAMu3B,YAAa6hB,GAC3FoG,EAAWvZ,aAAaC,GACxBsZ,EAAW9Z,SAAS93I,EAAUP,KA7RlC,WAkPJ,SAAkC+xJ,EAAcxxJ,EAAUoyG,EAAO3yG,EAASgyJ,GACtE,IAGI/G,EAHAvS,EAAa/lC,EAAMvF,WACnByrC,EAAYlmC,EAAM0xC,UAGlB2N,IACAD,EAAeC,EACf/G,EACIvS,GAAcG,GAAaA,EAAUwL,UAAY,QAAKv9I,GAE9D,GAAI4xI,EAAY,CACZ,GAAIA,EAAWuZ,iBAAmBrkD,GAAA,SAC9B,OAEJ,IAAIskD,EAAcH,EAAa1M,WAAW1yC,EAAMu3B,YAAa6hB,GAC7DmG,EAAYzZ,cAAcC,EAAYuS,GACtCiH,EAAYra,eAAet3I,EAAUP,GAEzC,GAAI64I,GAAaA,EAAUwL,UAAW,CAClC,IAAI8N,GAAcH,GAA6BD,GAAc1M,WAAW1yC,EAAMu3B,YAAa6hB,GAC3FoG,EAAWvZ,aAAaC,EAAWoS,GACnCkH,EAAW9Z,SAAS93I,EAAUP,KAtQlC,gBAuKJ,SAAuC+xJ,EAAcxxJ,EAAUoyG,EAAO3yG,EAASgyJ,GAC3E,IAAIxZ,EAAc7lC,EAAMywC,YACxB,GAAI5K,EAAa,CACb,IAAI4Z,EAAmBL,EAAa1M,WAAW1yC,EAAMu3B,YAAa6hB,GAClEqG,EAAiB9Z,mBAAmB,KAAME,GAC1C4Z,EAAiBza,oBAAoBp3I,EAAUP,GAEnD,IAAI64I,EAAYlmC,EAAM0xC,UACtB,GAAIxL,GAAaA,EAAUwL,UAAW,CAClC,IAAI8N,GAAcH,GAA6BD,GAAc1M,WAAW1yC,EAAMu3B,YAAa6hB,GAC3FoG,EAAWvZ,aAAaC,GACxBsZ,EAAW9Z,SAAS93I,EAAUP,KAjLlC,aA2LJ,SAAoC+xJ,EAAcxxJ,EAAUoyG,EAAO3yG,EAASgyJ,GACxE,IAAIzZ,EAAY5lC,EAAMuwC,UAClB1K,EAAc7lC,EAAMywC,YACxB,GAAI5K,GAAeD,EAAW,CAC1B,IAAI8Z,EAAgBN,EAAa1M,WAAW1yC,EAAMu3B,YAAa6hB,GAC/DsG,EAAc/Z,mBAAmBC,EAAWC,GAC5C6Z,EAActa,iBAAiBx3I,EAAUP,GAE7C,IAAI64I,EAAYlmC,EAAM0xC,UACtB,GAAIxL,GAAaA,EAAUwL,UAAW,CAClC,IAAI8N,GAAcH,GAA6BD,GAAc1M,WAAW1yC,EAAMu3B,YAAa6hB,GAC3FoG,EAAWvZ,aAAaC,GACxBsZ,EAAW9Z,SAAS93I,EAAUP,KAtMlC,mBAiIJ,SAA0CsyJ,EAAa/xJ,EAAUoyG,EAAO3yG,EAASgyJ,GAC7E,IACIh5J,EAAGiS,EADHhH,EAAa1D,EAAS6vJ,qBAE1B,IAAKp3J,EAAI,EAAGiS,EAAKhH,EAAWhM,OAAQe,EAAIiS,IAAMjS,EAAG,EAE7Cu5J,EADuBT,GAAmB7tJ,EAAWjL,GAAG8oD,YACvCwwG,EAAaruJ,EAAWjL,GAAI25G,EAAO3yG,EAASgyJ,KArIjE,OAkCJ,SAA8BD,EAAcxxJ,EAAUoyG,EAAO3yG,EAASgyJ,GAClE,IAAIzZ,EAAY5lC,EAAMuwC,UAClB1K,EAAc7lC,EAAMywC,YACxB,GAAI7K,GAAaC,EAAa,CAC1B,IAAIga,EAAeT,EAAa1M,WAAW1yC,EAAMu3B,YAAa6hB,GAC9DyG,EAAala,mBAAmBC,EAAWC,GAC3Cga,EAAapb,WAAW72I,EAAUP,GAEtC,IAAI64I,EAAYlmC,EAAM0xC,UACtB,GAAIxL,GAAaA,EAAUwL,UAAW,CAClC,IAAI8N,GAAcH,GAA6BD,GAAc1M,WAAW1yC,EAAMu3B,YAAa6hB,GAC3FoG,EAAWvZ,aAAaC,GACxBsZ,EAAW9Z,SAAS93I,EAAUP,MAvC/B,SAASyyJ,GAAaz2D,EAAUC,GACnC,OAAO34E,UAAS,QAAO04E,GAAW,IAAM14E,UAAS,QAAO24E,GAAW,IAgBhE,SAASy2D,GAAa7lD,EAAYC,GACrC,MAxCqB,GAwCQD,EAAcC,EAkCxC,SAAS6lD,GAAcL,EAAatyJ,EAAS2yG,EAAOigD,EAAkBC,EAAUC,EAAed,GAClG,IAAInyC,GAAU,EACV64B,EAAa/lC,EAAMvF,WACvB,GAAIsrC,EAAY,CACZ,IAAIqa,EAAara,EAAWuZ,gBACxBc,GAAcnlD,GAAA,UAAqBmlD,GAAcnlD,GAAA,QACjD8qC,EAAWsa,oBAAoBH,IAG3BE,GAAcnlD,GAAA,QACd8qC,EAAWj8I,OAEfs2J,EAAara,EAAWuZ,gBACxBvZ,EAAWua,kBAAkBJ,GAC7BhzC,GAAU,GAIlB,OAUJ,SAA+ByyC,EAAatyJ,EAAS2yG,EAAOigD,EAAkBE,EAAed,GACzF,IAAIzxJ,EAAWoyG,EAAMw9C,qBAANx9C,CAA4B3yG,GAC3C,IAAKO,EACD,OAEJ,IAAI2yJ,EAAqB3yJ,EAAS8vJ,oBAAoBuC,EAAkBE,GAExE,GADengD,EAAMrB,cAEjB6hD,GAAeb,EAAaY,EAAoBvgD,EAAO3yG,OAEtD,EAEDuyJ,EADuBT,GAAmBoB,EAAmBpxG,YAC5CwwG,EAAaY,EAAoBvgD,EAAO3yG,EAASgyJ,IAvBtEoB,CAAsBd,EAAatyJ,EAAS2yG,EAAOigD,EAAkBE,EAAed,GAC7EnyC,EA+BX,SAASszC,GAAeb,EAAa/xJ,EAAUoyG,EAAO3yG,GAClD,GAAIO,EAASuhD,WAAa05E,EAAA,sBAQb82B,EAAYjN,WAAW1yC,EAAMu3B,YAAa6hB,GAChD/U,WACoD,EAAYh3I,EAAS2yG,EAAMrB,cAAeqB,EAAM0gD,gCAPvG,IAFA,IAAIpvJ,EAC2D,EAAWqvJ,gBACjEt6J,EAAI,EAAGiS,EAAKhH,EAAWhM,OAAQe,EAAIiS,IAAMjS,EAC9Cm6J,GAAeb,EAAaruJ,EAAWjL,GAAI25G,EAAO3yG,+BCpJ1D,GAAwC,WACxC,IAAImrG,EAAgB,SAAU7+F,EAAGjT,GAI7B,OAHA8xG,EAAgB/oG,OAAOipG,gBAClB,CAAE3pF,UAAW,cAAgB/gB,OAAS,SAAU2L,EAAGjT,GAAKiT,EAAEoV,UAAYroB,IACvE,SAAUiT,EAAGjT,GAAK,IAAK,IAAIqB,KAAKrB,EAAO+I,OAAOpG,UAAUqiB,eAAe/U,KAAKjQ,EAAGqB,KAAI4R,EAAE5R,GAAKrB,EAAEqB,KACzFywG,EAAc7+F,EAAGjT,IAE5B,OAAO,SAAUiT,EAAGjT,GAChB,GAAiB,oBAANA,GAA0B,OAANA,EAC3B,MAAM,IAAI6jB,UAAU,uBAAyB6G,OAAO1qB,GAAK,iCAE7D,SAASiyG,IAAO5xG,KAAKwL,YAAcoH,EADnC6+F,EAAc7+F,EAAGjT,GAEjBiT,EAAEtQ,UAAkB,OAAN3C,EAAa+I,OAAOojC,OAAOnsC,IAAMiyG,EAAGtvG,UAAY3C,EAAE2C,UAAW,IAAIsvG,IAZ3C,GA4iB5C,GAxgB+C,SAAUG,GAKrD,SAAS8nD,EAA0BC,GAC/B,IAAIrgI,EAAQs4E,EAAOniG,KAAK5P,KAAM85J,IAAgB95J,KA+E9C,OA7EAy5B,EAAMsgI,6BAA+BtgI,EAAMugI,wBAAwBxqJ,KAAKiqB,GAIxEA,EAAMwgI,wBAKNxgI,EAAMygI,QAAS,EAIfzgI,EAAM0gI,uBAAyB,KAI/B1gI,EAAM2gI,kBAAoB,KAK1B3gI,EAAM4gI,mBAAqB,EAK3B5gI,EAAM6gI,oBAAsBntH,IAK5B1T,EAAMy6G,iBAAkB,UAKxBz6G,EAAM8gI,wBAAyB,UAK/B9gI,EAAM+gI,kBAKN/gI,EAAMghI,gBAAkB,KAKxBhhI,EAAMihI,oBAAsB,KAK5BjhI,EAAMkhI,qBAAuB,KAK7BlhI,EAAMmhI,aAAe,KAKrBnhI,EAAMohI,oBAAqB,EAI3BphI,EAAMqhI,uBAAyB,KAK/BrhI,EAAMshI,UAAW,EACVthI,EAibX,OArgBA,GAAUogI,EAA2B9nD,GA4FrC8nD,EAA0Bv3J,UAAUw0I,aAAe,SAAUvzH,EAAQy9D,EAAW0rD,GACxEA,EAAU,IACVnpH,EAAS,MAEbwuF,EAAOzvG,UAAUw0I,aAAalnI,KAAK5P,KAAMujB,EAAQy9D,EAAW0rD,IAOhEmtB,EAA0Bv3J,UAAU04J,aAAe,SAAUC,EAAenlD,EAAYw6C,GACpF,IAAInkD,EAAS2J,EAAW3J,OACpB+J,EAAYJ,EAAWI,UACvBI,EAASJ,EAAUI,OACnBnD,EAAa+C,EAAU/C,WACvBvF,EAAasI,EAAUtI,WACvByI,EAAWH,EAAUG,SACrBa,EAAmBtJ,EAAW6F,YAC9BynD,EAAel7J,KAAK20I,WAAW98B,YAC/BzE,EAAa0C,EAAW1C,WACxB4U,EAAYlS,EAAWkS,UACvBknC,IAAgBlnC,EAAUC,GAAA,cAAuBD,EAAUC,GAAA,gBAC3D/iG,EAAUllB,KAAKklB,QACfi0F,EAAQv6G,KAAK4L,MAAMsrG,EAAWrhF,KAAK,GAAK2+E,GACxCpxG,EAASpD,KAAK4L,MAAMsrG,EAAWrhF,KAAK,GAAK2+E,GACzC+nB,EAAa+/B,EAAapjD,YAAclK,EAAWqJ,WACnDE,EAAagkB,GAAa,QAASjkB,GAAoB,KACvDikD,EAAWhgC,EACTv8H,KAAKuB,MAAMgsG,EAAO,GAAK+K,EAAiB,IAAMC,GAAc,EAC5D,EACFikD,EAAQjgC,EACNv8H,KAAKO,OAAOgtG,EAAO,GAAK+K,EAAiB,IAAMC,GAC/C,EACN,EAAG,CACC,IAAIn2B,EAAYhhF,KAAKq7J,mBAAmB/kD,EAAQnD,EAAYkD,EAAUjD,EAAY+F,EAAOn3G,EAAQo5J,EAAQjkD,GACzG8jD,EAAc78E,QAAQl5D,EAAS,EAAG87D,EAAWq1B,EAAU64C,OAAa9hJ,EAAWkjJ,WACxE8K,EAAQD,IAMvBtB,EAA0Bv3J,UAAUg4G,gBAAkB,SAAUxE,GACxD91G,KAAK86J,wBACL96J,KAAKg7J,aAAah7J,KAAK86J,uBAAwBhlD,EAAYA,EAAWwT,gBAS9EuwC,EAA0Bv3J,UAAUg2G,YAAc,SAAUxC,EAAYvyF,GACpE,IAAI6vF,EAAa0C,EAAW1C,WACxBqE,EAAa3B,EAAWuB,iBAAiBvB,EAAWqE,aAExD,QAAUn6G,KAAK42I,eAAgB,EAAIxjC,EAAY,EAAIA,IACnD,QAAYpzG,KAAK+2I,sBAAuB/2I,KAAK42I,gBAC7C,IAAIC,GAAkB,QAAkB72I,KAAK42I,gBAC7C52I,KAAK82I,aAAavzH,EAAQszH,EAAiBp/B,EAAWi1B,SACtD,IAAIxnH,EAAUllB,KAAKklB,QACf8nH,EAAS9nH,EAAQ8nH,OACjB4rB,EAAc54J,KAAK46J,aACnBE,EAAyB96J,KAAK86J,uBAClC,KAAMlC,GAAeA,EAAY5jI,cAC3B8lI,GAA0BA,EAAuB9lI,WACnD,OAAO,KAGX,IAAImkF,EAAQv6G,KAAK4L,MAAMsrG,EAAWrhF,KAAK,GAAK2+E,GACxCpxG,EAASpD,KAAK4L,MAAMsrG,EAAWrhF,KAAK,GAAK2+E,GACzC45B,EAAO7zB,OAASA,GAAS6zB,EAAOhrI,QAAUA,GAC1CgrI,EAAO7zB,MAAQA,EACf6zB,EAAOhrI,OAASA,EACZgrI,EAAO/zB,MAAMj4B,YAAc61D,IAC3B7J,EAAO/zB,MAAMj4B,UAAY61D,IAGvB72I,KAAKi3I,iBACX/xH,EAAQgyH,UAAU,EAAG,EAAG/9B,EAAOn3G,GAEnChC,KAAKq3I,UAAUnyH,EAAS4wF,GACxB,IAAII,EAAYJ,EAAWI,UACvBtI,EAAasI,EAAUtI,WAEvB0tD,GAAU,EACVjhD,GAAS,EACb,GAAI5C,EAAWtL,QAAUnsG,KAAK+6J,SAAU,CACpC,IAAIplB,GAAc,SAAel+B,EAAWtL,OAAQyB,IAEpD0tD,GADAjhD,GAAS,QAAiBs7B,EAAa7/B,EAAW3J,YAC7B,QAAewpC,EAAa7/B,EAAW3J,UAExDnsG,KAAKm3I,cAAcjyH,EAAS4wF,EAAY6/B,GAG5Ct7B,GACAr6G,KAAKg7J,aAAapC,EAAa9iD,GAE/BwlD,GACAp2I,EAAQm0H,UAEZr5I,KAAK05I,WAAWx0H,EAAS4wF,GACzB,IAAI42B,GAAU,EAAAiN,GAAA,IAAWliC,EAAWi1B,SAChCpzB,EAAYt5G,KAAKs5G,UAQrB,OAPIozB,IAAYpzB,EAAUL,MAAMyzB,UAC5BpzB,EAAUL,MAAMyzB,QAAUA,GAE1B1sI,KAAKw6J,oBAAsBtkD,EAAUG,WACrCr2G,KAAKw6J,kBAAoBtkD,EAAUG,SACnCr2G,KAAKm6J,uBAAyB,MAE3Bn6J,KAAKs5G,WAOhBugD,EAA0Bv3J,UAAUmwI,YAAc,SAAUt6B,GACxD,OAAO,IAAItuF,QAKX,SAAU6oH,GACN,IAAK1yI,KAAKm6J,yBAA2Bn6J,KAAKi6J,wBAAyB,CAC/D,IAAIxlI,EAAO,CAACz0B,KAAKklB,QAAQ8nH,OAAO7zB,MAAOn5G,KAAKklB,QAAQ8nH,OAAOhrI,SAC3D,QAAMhC,KAAK42I,eAAgBniH,GAC3B,IAAI6hF,EAASt2G,KAAKy6J,gBACdtnD,EAAanzG,KAAKs6J,oBAClBjkD,EAAWr2G,KAAKw6J,kBAChB5sD,EAAa5tG,KAAK06J,oBAClBvuD,EAASnsG,KAAKu6J,uBACdzjD,EAAQ92G,KAAK20I,WACb4mB,EAAa,GACbpiD,EAAQ1kF,EAAK,GAAK0jI,GAClBn2J,EAASyyB,EAAK,GAAK0jI,GACvBoD,EAAWl5J,KAAKrC,KAAKq7J,mBAAmB/kD,EAAQnD,EAAYkD,EAAU8hD,GAAuBh/C,EAAOn3G,EAAQ,GAAGkB,SAC/G,IAAI0T,EAASkgG,EAAMe,YACfX,EAAmBtJ,EAAW6F,YAClC,GAAI78F,EAAOkhG,YACPlK,EAAWqJ,cACV,QAAeC,EAAkB/K,GAAS,CAK3C,IAJA,IAAInc,EAASmc,EAAO,GAChBgL,GAAa,QAASD,GACtBkkD,EAAQ,EACRt9B,OAAU,EACP9tC,EAASknB,EAAiB,IAE7B4mB,EAAU3mB,IADRikD,EAEFG,EAAWl5J,KAAKrC,KAAKq7J,mBAAmB/kD,EAAQnD,EAAYkD,EAAU8hD,GAAuBh/C,EAAOn3G,EAAQ87H,GAAS56H,SACrH8sF,GAAUmnB,EAId,IAFAikD,EAAQ,EACRprE,EAASmc,EAAO,GACTnc,EAASknB,EAAiB,IAE7B4mB,EAAU3mB,IADRikD,EAEFG,EAAWl5J,KAAKrC,KAAKq7J,mBAAmB/kD,EAAQnD,EAAYkD,EAAU8hD,GAAuBh/C,EAAOn3G,EAAQ87H,GAAS56H,SACrH8sF,GAAUmnB,EAGlBn3G,KAAKm6J,uBF3Qd,SAAqC1lI,EAAM8mI,EAAY7zJ,EAAU8zJ,EAAervD,EAAQgH,EAAYkD,GACvG,IAAI8C,EAAQ1kF,EAAK,GAAK0jI,GAClBn2J,EAASyyB,EAAK,GAAK0jI,GACnBjzI,GAAU,SAAsBi0F,EAAOn3G,GAC3CkjB,EAAQu2I,uBAAwB,EAOhC,IANA,IAAIzuB,EAAS9nH,EAAQ8nH,OACjBuQ,EAAW,IAAI,GAAwBr4H,EAASizI,GAAuBhsD,EAAQ,KAAMkK,GACrFqlD,EAAeh0J,EAASnJ,OAExBo9J,EAAc/8J,KAAKO,MAAM,SAAwBu8J,GACjDE,EAAmB,GACdt8J,EAAI,EAAGA,GAAKo8J,IAAgBp8J,EAAG,CACpC,IAAIgH,EAAUoB,EAASpI,EAAI,GACvBu8J,EAAuBv1J,EAAQu1I,oBAAsB2f,EACzD,GAAKA,EAAL,CAGA,IAAIM,EAASD,EAAqBv1J,EAAS6sG,GAC3C,GAAK2oD,EAAL,CAGK70J,MAAMC,QAAQ40J,KACfA,EAAS,CAACA,IAId,IAFA,IACI3wH,EAAQ,KAAO,UADP7rC,EAAIq8J,GACoBnkJ,SAAS,KAAKtU,OAAO,GAChD3D,EAAI,EAAG6sH,EAAK0vC,EAAOv9J,OAAQgB,EAAI6sH,IAAM7sH,EAAG,CAC7C,IAAIw8J,EAAgBD,EAAOv8J,GACvBsH,EAAWk1J,EAActF,qBAAdsF,CAAoCz1J,GACnD,GAAKO,IAAa,QAAWslG,EAAQtlG,EAAS4sG,aAA9C,CAGA,IAAIwF,EAAQ8iD,EAAchvH,QACtB+D,EAAOmoE,EAAMuwC,UACb14G,GACAA,EAAKkrH,SAAS7wH,GAElB,IAAIs6G,EAASxsC,EAAMywC,YACfjE,IACAA,EAAOuW,SAAS7wH,GAChBs6G,EAAO6I,YAAY,OAEvBr1C,EAAMgjD,aAAQ7uJ,GACd,IAAIynG,EAAQknD,EAAcroD,WAC1B,GAAImB,GAAgC,IAAvBA,EAAM47B,aAAoB,CACnC,IAAIyrB,EAAUrnD,EAAMsnD,eACpB,IAAKD,EACD,SAEJ,IAAIE,GAAa,SAAsBF,EAAQ,GAAIA,EAAQ,QAAI9uJ,EAAW,CAAE0sI,OAAO,IAC/E9kC,EAAMonD,EAAWpvB,OACrBovB,EAAWvd,UAAY1zG,EACvBixH,EAAWC,SAAS,EAAG,EAAGrnD,EAAImE,MAAOnE,EAAIhzG,QACzCi3G,EAAMrE,SAAS,IAAI0nD,GAAA,EAAK,CACpBtnD,IAAKA,EACLknD,QAASA,EACTluC,OAAQnZ,EAAMgwC,YACd0X,aAAcC,GAAA,SACdC,aAAcD,GAAA,SACd1jE,OAAQ+b,EAAMmwC,YACdtY,QAAS,EACTj4G,KAAMogF,EAAM0R,UACZl0C,MAAOwiC,EAAM5sD,WACbouD,SAAUxB,EAAM6Y,cAChB4jC,eAAgBz8C,EAAMowC,uBAG9B,IAAI7rC,EAASH,EAAMu3B,aAAe,GAC9BksB,EAAiBd,EAAiBxiD,MAElCsjD,EAAiB,GACjBd,EAAiBxiD,GAAUsjD,EAC3BA,EAAe56B,EAAA,WAAwB,GACvC46B,EAAe56B,EAAA,UAAuB,GACtC46B,EAAe56B,EAAA,eAA4B,GAC3C46B,EAAe56B,EAAA,SAAsB,IAEzC46B,EAAe71J,EAASuhD,UAAU7jC,QAAQ,QAAS,KAAKliB,KAAKwE,EAAUoyG,OAM/E,IAHA,IAAI0jD,EAAaj0J,OAAO0O,KAAKwkJ,GACxB1xJ,IAAIkR,QACJtV,KAAK,MACMyL,GAAPjS,EAAI,EAAQq9J,EAAWp+J,QAAQe,EAAIiS,IAAMjS,EAAG,CACjD,IAAIo9J,EAAiBd,EAAiBe,EAAWr9J,IACjD,IAAK,IAAIqH,KAAQ+1J,EACb,KAAIE,EAAeF,EAAe/1J,GAClC,IAASpH,EAAI,EAAG6sH,EAAKwwC,EAAar+J,OAAQgB,EAAI6sH,EAAI7sH,GAAK,EAAG,CACtDg+I,EAASjC,SAASshB,EAAar9J,EAAI,IACnC,IAAK,IAAIrB,EAAI,EAAG2+J,EAAKtB,EAAWh9J,OAAQL,EAAI2+J,IAAM3+J,EAC9Cq/I,EAASwY,aAAawF,EAAWr9J,IACjCq/I,EAASE,aAAamf,EAAar9J,MAKnD,OAAO2lB,EAAQ6uI,aAAa,EAAG,EAAG/mB,EAAO7zB,MAAO6zB,EAAOhrI,QE2Kb86J,CAA4BroI,EAAM8mI,EAAYv7J,KAAKo6J,kBAAmBtjD,EAAM+kC,mBAAoB1vC,EAAQgH,EAAYkD,GAEtJq8B,EFlKL,SAAmBv6B,EAAOzwG,EAAUosJ,GACvC,IAAIiJ,EAAiB,GACrB,GAAIjJ,EAAW,CACX,IAAI3/I,EAAIvV,KAAKO,MAAMP,KAAK4L,MAAM2tG,EAAM,IAAMggD,IACtC/jJ,EAAIxV,KAAKO,MAAMP,KAAK4L,MAAM2tG,EAAM,IAAMggD,IAItC30J,EAEA,IAFS,QAAM2Q,EAAG,EAAG2/I,EAAU36C,MAAQ,IACvC,QAAM/kG,EAAG,EAAG0/I,EAAU9xJ,OAAS,GAAK8xJ,EAAU36C,OAE9Cn3F,EAAI8xI,EAAUrxJ,KAAKe,GACnBwJ,EAAI8mJ,EAAUrxJ,KAAKe,EAAQ,GAE3BlE,EADIw0J,EAAUrxJ,KAAKe,EAAQ,GACnB,KAAOwJ,EAAI,IAAMgV,GACzB25I,EAAc/8J,KAAKO,MAAM,SAAwBuI,EAASnJ,QAC1De,GAAKA,EAAIq8J,IAAgB,GACzBoB,EAAe16J,KAAKqF,EAASpI,EAAIq8J,EAAc,IAGvD,OAAOoB,EE8ISC,CAAU7kD,EAAOn4G,KAAKo6J,kBAAmBp6J,KAAKm6J,0BACxD3qJ,KAAKxP,QAWX65J,EAA0Bv3J,UAAUi0G,2BAA6B,SAAUhiE,EAAYuhE,EAAYU,EAAc3qG,EAAU0rG,GACvH,IAAI99E,EAAQz5B,KACZ,GAAKA,KAAK46J,aAAV,CAGA,IAsCIl9J,EAtCAy1G,EAAa2C,EAAWI,UAAU/C,WAClCkD,EAAWP,EAAWI,UAAUG,SAChCS,EAAQ92G,KAAK20I,WAEbjtI,EAAW,GAOXmsJ,EAAkB,SAAUvtJ,EAASO,EAAUoxG,GAC/C,IAAIzhG,GAAM,QAAOlQ,GACbolB,EAAQhkB,EAAS8O,GACrB,GAAKkV,GAaA,IAAc,IAAVA,GAAkBusF,EAAavsF,EAAMusF,WAAY,CACtD,GAAmB,IAAfA,EAGA,OAFAvwG,EAAS8O,IAAO,EAChB+gG,EAAQ3zG,OAAO2zG,EAAQ3jD,YAAYloC,GAAQ,GACpC7f,EAASvF,EAASwwG,EAAOjwG,GAEpC6kB,EAAM7kB,SAAWA,EACjB6kB,EAAMusF,WAAaA,OApBX,CACR,GAAmB,IAAfA,EAEA,OADAvwG,EAAS8O,IAAO,EACT3K,EAASvF,EAASwwG,EAAOjwG,GAEpC0wG,EAAQl1G,KAAMqF,EAAS8O,GAAO,CAC1BlQ,QAASA,EACTwwG,MAAOA,EACPjwG,SAAUA,EACVoxG,WAAYA,EACZpsG,SAAUA,MAelBoxJ,EAAiB,CAACj9J,KAAK46J,cAS3B,OARI56J,KAAK86J,wBACLmC,EAAe56J,KAAKrC,KAAK86J,wBAE7BmC,EAAe13I,MAAK,SAAU01I,GAC1B,OAAQv9J,EAASu9J,EAAc1kD,2BAA2BhiE,EAAY4+D,EAAYkD,EAAUG,EAAcq9C,EAAiBoH,IAAkBxhI,EAAMqhI,uBAC7IhlD,EAAWwT,cAAc/mH,MAAM2H,KAAI,SAAU3J,GAAQ,OAAOA,EAAKqI,SACjE,SAEHlL,IAKXm8J,EAA0Bv3J,UAAUumH,mBAAqB,WACrD,IAAI/R,EAAQ92G,KAAK20I,WACb79B,EAAM65B,cAAgB3wI,KAAK46J,cAC3B9jD,EAAMvD,WAQdsmD,EAA0Bv3J,UAAU03J,wBAA0B,SAAU14H,GACpEthC,KAAKk9J,2BAOTrD,EAA0Bv3J,UAAUqwI,aAAe,SAAU78B,GACzD,IAAIgkD,EAAc95J,KAAK20I,WACnBumB,EAAepB,EAAYjiD,YAC/B,IAAKqjD,EACD,OAAO,EAEX,IAAIiC,EAAYrnD,EAAWkS,UAAUC,GAAA,aACjCm1C,EAActnD,EAAWkS,UAAUC,GAAA,eACnC8yB,EAAuB+e,EAAYhe,0BACnCd,EAAyB8e,EAAY/d,4BACzC,IAAM/7I,KAAKk6J,SAAWnf,GAAwBoiB,IACxCniB,GAA0BoiB,EAE5B,OADAp9J,KAAKi6J,yBAA0B,GACxB,EAEXj6J,KAAKi6J,yBAA0B,EAC/B,IAAIoD,EAAmBvnD,EAAW3J,OAC9B+J,EAAYJ,EAAWI,UACvBtI,EAAasI,EAAUtI,WACvBuF,EAAa+C,EAAU/C,WACvBC,EAAa0C,EAAW1C,WACxBkqD,EAAsBxD,EAAYxkB,cAClCioB,EAA0BzD,EAAYpe,kBACtC8hB,EAAyB1D,EAAYne,sBACVvuI,IAA3BowJ,IACAA,EAAyB,IAE7B,IAAIlnD,EAASJ,EAAUI,OAAOpzG,QAC1BipG,GAAS,QAAOkxD,EAAkBE,EAA0BpqD,GAC5DsqD,EAAiBtxD,EAAOjpG,QACxBw6J,EAAc,CAACvxD,EAAOjpG,SACtBg0G,EAAmBtJ,EAAW6F,YAClC,GAAIynD,EAAapjD,YACblK,EAAWqJ,cACV,QAAeC,EAAkBpB,EAAW3J,QAAS,CAMtD,IAAIgL,GAAa,QAASD,GACtB0iC,EAASh7I,KAAKM,KAAI,QAASitG,GAAU,EAAGgL,GAC5ChL,EAAO,GAAK+K,EAAiB,GAAK0iC,EAClCztC,EAAO,GAAK+K,EAAiB,GAAK0iC,GAClC,SAAgBtjC,EAAQ1I,GACxB,IAAI+vD,GAAa,QAAYD,EAAY,GAAI9vD,GAEzC+vD,EAAW,GAAKzmD,EAAiB,IACjCymD,EAAW,GAAKzmD,EAAiB,GACjCwmD,EAAYr7J,KAAK,CACbs7J,EAAW,GAAKxmD,EAChBwmD,EAAW,GACXA,EAAW,GAAKxmD,EAChBwmD,EAAW,KAGVA,EAAW,GAAKzmD,EAAiB,IACtCymD,EAAW,GAAKzmD,EAAiB,IACjCwmD,EAAYr7J,KAAK,CACbs7J,EAAW,GAAKxmD,EAChBwmD,EAAW,GACXA,EAAW,GAAKxmD,EAChBwmD,EAAW,KAIvB,IAAK39J,KAAKk6J,QACNl6J,KAAKs6J,qBAAuBnnD,GAC5BnzG,KAAKq6J,mBAAqBiD,GAC1Bt9J,KAAK26J,sBAAwB6C,IAC7B,QAAex9J,KAAKu6J,uBAAwBpuD,GAO5C,OANK,QAAOnsG,KAAKk0I,gBAAiBupB,KAC9Bz9J,KAAKm6J,uBAAyB,KAC9Bn6J,KAAKk0I,gBAAkBupB,GAE3Bz9J,KAAKy6J,gBAAkBnkD,EACvBt2G,KAAK66J,oBAAqB,GACnB,EAEX76J,KAAK46J,aAAe,KACpB56J,KAAKk6J,QAAS,EACd,IACI0D,EADAhF,EAAc,IAAI,EAAmB,GAAmBzlD,EAAYC,GAAajH,EAAQgH,EAAYC,GAErGpzG,KAAK20I,WAAW8G,iBAChBmiB,EAAwB,IAAI,EAAmB,GAAmBzqD,EAAYC,GAAajH,EAAQgH,EAAYC,IAEnH,IACIyqD,EADA97B,GAAiB,WAErB,GAAIA,EAAgB,CAChB,IAAK,IAAIziI,EAAI,EAAGiS,EAAKmsJ,EAAYn/J,OAAQe,EAAIiS,IAAMjS,EAAG,CAClD,IAAIw+J,EAAWJ,EAAYp+J,GACvBy+J,GAAe,SAAaD,EAAUlwD,GAC1CstD,EAAa8C,aAAaD,GAAc,SAAiB5qD,EAAYvF,GAAam0B,GAEtF87B,GAAgB,SAA4B97B,EAAgBn0B,QAG5D,IAAStuG,EAAI,EAAGiS,EAAKmsJ,EAAYn/J,OAAQe,EAAIiS,IAAMjS,EAC/C47J,EAAa8C,aAAaN,EAAYp+J,GAAI6zG,EAAYvF,GAG9D,IAAIsrD,EDnbL,SAA6B/lD,EAAYC,GAC5C,IAAI7hB,EAAYynE,GAAa7lD,EAAYC,GACzC,OAAO7hB,EAAYA,ECibQ,CAA0B4hB,EAAYC,GACzDiH,EAKJ,SAAU/zG,GACN,IAAIw1J,EACAN,EAAgBl1J,EAAQu1I,oBAAsBie,EAAYje,mBAI9D,GAHI2f,IACAM,EAASN,EAAcl1J,EAAS6sG,IAEhC2oD,EAAQ,CACR,IAAImC,EAAQj+J,KAAKi5J,cAAc3yJ,EAAS4yJ,EAAkB4C,EAAQlD,EAAaiF,EAAeD,GAC9F59J,KAAKk6J,OAASl6J,KAAKk6J,QAAU+D,IAEnCzuJ,KAAKxP,MACHk+J,GAAa,SAAa/xD,EAAQyB,GAElClmG,EAAWwzJ,EAAaiD,oBAAoBD,GAC5CV,GACA91J,EAAS5B,KAAK03J,GAElB,IAASl+J,EAAI,EAAGiS,EAAK7J,EAASnJ,OAAQe,EAAIiS,IAAMjS,EAC5C+6G,EAAO3yG,EAASpI,IAEpBU,KAAKo6J,kBAAoB1yJ,EACzB,IAAI02J,EAA0BxF,EAAYnX,SACtCwZ,EAAgB,IAAI,GAAc9uD,EAAQgH,EAAYC,EAAY8nD,EAAamD,cAAeD,EAAyBtE,EAAYpe,mBAcvI,OAbIkiB,IACA59J,KAAK86J,uBAAyB,IAAI,GAAc3uD,EAAQgH,EAAYC,EAAY8nD,EAAamD,cAAeT,EAAsBnc,SAAUqY,EAAYpe,oBAE5J17I,KAAKs6J,oBAAsBnnD,EAC3BnzG,KAAKq6J,kBAAoBiD,EACzBt9J,KAAK26J,qBAAuB6C,EAC5Bx9J,KAAKk0I,gBAAkBupB,EACvBz9J,KAAKu6J,uBAAyBpuD,EAC9BnsG,KAAKy6J,gBAAkBnkD,EACvBt2G,KAAK06J,oBAAsB9sD,EAC3B5tG,KAAK46J,aAAeK,EACpBj7J,KAAKm6J,uBAAyB,KAC9Bn6J,KAAK66J,oBAAqB,GACnB,GAWXhB,EAA0Bv3J,UAAU22J,cAAgB,SAAU3yJ,EAAS4yJ,EAAkB4C,EAAQzD,EAAce,EAAed,GAC1H,IAAKwD,EACD,OAAO,EAEX,IAAI31C,GAAU,EACd,GAAIl/G,MAAMC,QAAQ40J,GACd,IAAK,IAAIx8J,EAAI,EAAGiS,EAAKuqJ,EAAOv9J,OAAQe,EAAIiS,IAAMjS,EAC1C6mH,EACI8yC,GAAcZ,EAAc/xJ,EAASw1J,EAAOx8J,GAAI45J,EAAkBl5J,KAAK+5J,6BAA8BX,EAAed,IAA8BnyC,OAI1JA,EAAU8yC,GAAcZ,EAAc/xJ,EAASw1J,EAAQ5C,EAAkBl5J,KAAK+5J,6BAA8BX,EAAed,GAE/H,OAAOnyC,GAEJ0zC,EAtgBmC,CAugB5C,KC3iBE,GAAwC,WACxC,IAAIpoD,EAAgB,SAAU7+F,EAAGjT,GAI7B,OAHA8xG,EAAgB/oG,OAAOipG,gBAClB,CAAE3pF,UAAW,cAAgB/gB,OAAS,SAAU2L,EAAGjT,GAAKiT,EAAEoV,UAAYroB,IACvE,SAAUiT,EAAGjT,GAAK,IAAK,IAAIqB,KAAKrB,EAAO+I,OAAOpG,UAAUqiB,eAAe/U,KAAKjQ,EAAGqB,KAAI4R,EAAE5R,GAAKrB,EAAEqB,KACzFywG,EAAc7+F,EAAGjT,IAE5B,OAAO,SAAUiT,EAAGjT,GAChB,GAAiB,oBAANA,GAA0B,OAANA,EAC3B,MAAM,IAAI6jB,UAAU,uBAAyB6G,OAAO1qB,GAAK,iCAE7D,SAASiyG,IAAO5xG,KAAKwL,YAAcoH,EADnC6+F,EAAc7+F,EAAGjT,GAEjBiT,EAAEtQ,UAAkB,OAAN3C,EAAa+I,OAAOojC,OAAOnsC,IAAMiyG,EAAGtvG,UAAY3C,EAAE2C,UAAW,IAAIsvG,IAZ3C,GAgD5C,GAjBiC,SAAUG,GAKvC,SAASusD,EAAYlsD,GACjB,OAAOL,EAAOniG,KAAK5P,KAAMoyG,IAAgBpyG,KAS7C,OAdA,GAAUs+J,EAAavsD,GAWvBusD,EAAYh8J,UAAU6hH,eAAiB,WACnC,OAAO,IAAI,GAA0BnkH,OAElCs+J,EAfqB,CAgB9BC,qCCxCF,KACIjnC,YAAa,cACbC,YAAa,cACbC,UAAW,YACXC,YAAa,cACbC,WAAY,aACZC,aAAc,eACdC,aAAc,eACdC,cAAe,yDCXXpmB,WADJC,GACID,EAAgB,SAAU7+F,EAAGjT,GAI7B,OAHA8xG,EAAgB/oG,OAAOipG,gBAClB,CAAE3pF,UAAW,cAAgB/gB,OAAS,SAAU2L,EAAGjT,GAAKiT,EAAEoV,UAAYroB,IACvE,SAAUiT,EAAGjT,GAAK,IAAK,IAAIqB,KAAKrB,EAAO+I,OAAOpG,UAAUqiB,eAAe/U,KAAKjQ,EAAGqB,KAAI4R,EAAE5R,GAAKrB,EAAEqB,KACzFywG,EAAc7+F,EAAGjT,IAErB,SAAUiT,EAAGjT,GAChB,GAAiB,oBAANA,GAA0B,OAANA,EAC3B,MAAM,IAAI6jB,UAAU,uBAAyB6G,OAAO1qB,GAAK,iCAE7D,SAASiyG,IAAO5xG,KAAKwL,YAAcoH,EADnC6+F,EAAc7+F,EAAGjT,GAEjBiT,EAAEtQ,UAAkB,OAAN3C,EAAa+I,OAAOojC,OAAOnsC,IAAMiyG,EAAGtvG,UAAY3C,EAAE2C,UAAW,IAAIsvG,KAInF4sD,EAA6B,SAAUzsD,GASvC,SAASysD,EAAY73J,EAAM83J,EAA2B/jD,EAAgBgkD,GAClE,IAAIjlI,EAAQs4E,EAAOniG,KAAK5P,KAAM2G,IAAS3G,KAqBvC,OAdAy5B,EAAMs9G,sBAAwB0nB,EAM9BhlI,EAAMq8E,WAAa4E,EAOnBjhF,EAAMvU,QAAUw5I,EACTjlI,EAEX,OAhCAi4E,EAAU8sD,EAAazsD,GAgChBysD,EAjCqB,CAkC9B,MACF,wCChDA,KAMIG,UAAW,YAMX7mC,WAAY,aAOZ8mC,WAAY,aAOZC,YAAa,cAQbC,eAAgB,mjBCsCTC,EAAc,kBAKdC,EAAmB,OAKnBC,EAAiB,QAKjBC,EAAkB,GAKlBC,EAAwB,EAKxBC,EAAkB,QAKlBC,EAAoB,GAKpBC,EAAqB,OAKrBC,EAAmB,SAKnBC,EAAsB,SAKtBC,EAAiB,CAAC,EAAG,EAAG,EAAG,GAK3BC,EAAmB,EAInBC,EAAe,IAAI,KASN,IAAI,KACjB71C,QAAU,WACjBM,QAAQC,KAAK,8BAKjB,IAIIu1C,EAmGIC,EAvGJC,EAAiB,KAQVC,EAAc,GAKdC,EAAe,WACtB,IAKIC,EAAUC,EAJVzrI,EAAO,QACP0rI,EAAiB,CAAC,YAAa,SAC/Bx9J,EAAMw9J,EAAe5hK,OACrBioI,EAAO,gCAQX,SAAS45B,EAAYC,EAAWC,EAAYC,GAExC,IADA,IAAIC,GAAY,EACPlhK,EAAI,EAAGA,EAAIqD,IAAOrD,EAAG,CAC1B,IAAImhK,EAAgBN,EAAe7gK,GAEnC,GADA4gK,EAAiBQ,EAAiBL,EAAY,IAAMC,EAAa,IAAM7rI,EAAOgsI,EAAej6B,GACzF+5B,GAAcE,EAAe,CAC7B,IAAItnD,EAAQunD,EAAiBL,EACzB,IACAC,EACA,IACA7rI,EACA8rI,EACA,IACAE,EAAej6B,GAGnBg6B,EAAYA,GAAarnD,GAAS+mD,GAG1C,QAAIM,EAKR,SAASG,IAGL,IAFA,IAAI/sI,GAAO,EACPgtI,EAAQjB,EAAakB,UAChBvhK,EAAI,EAAGiS,EAAKqvJ,EAAMriK,OAAQe,EAAIiS,IAAMjS,EAAG,CAC5C,IAAI4pJ,EAAO0X,EAAMthK,GACbqgK,EAAa/3I,IAAIshI,GAzCf,MA0CEkX,EAAYl8J,MAAMlE,KAAMkpJ,EAAK52H,MAAM,SACnC,QAAMytI,GAEND,EAAiB,KACjBF,OAAcxyJ,EACduyJ,EAAazkJ,IAAIguI,EA/CnB,OAkDEyW,EAAazkJ,IAAIguI,EAAMyW,EAAa/3I,IAAIshI,GAAQ,GAAG,GACnDt1H,GAAO,IAIfA,IACAktI,cAAcb,GACdA,OAAW7yJ,GAGnB,OAAO,SAAUg/H,GACb,IAAI8c,GAAO,OAAkB9c,GAC7B,GAAK8c,EAIL,IADA,IAAI3c,EAAW2c,EAAK3c,SACXjtI,EAAI,EAAGiS,EAAKg7H,EAAShuI,OAAQe,EAAIiS,IAAMjS,EAAG,CAC/C,IAAIktI,EAASD,EAASjtI,GAClBkX,EAAM0yI,EAAKjwC,MAAQ,KAAOiwC,EAAKhjD,OAAS,KAAOsmC,OACrBp/H,IAA1BuyJ,EAAa/3I,IAAIpR,KACjBmpJ,EAAazkJ,IAAI1E,EAtEf,KAsE6B,GAC1B4pJ,EAAYlX,EAAKjwC,MAAOiwC,EAAKhjD,OAAQsmC,KACtCmzB,EAAazkJ,IAAI1E,EAAK,GAAG,QACRpJ,IAAb6yJ,IACAA,EAAWc,YAAYJ,EAAO,SA3E5B,GAsFfK,EAKA,SAAU50B,GACb,IAAIpqI,EAAS+9J,EAAY3zB,GACzB,QAAch/H,GAAVpL,EAAqB,CACrB,GAAI,KAAyB,CACzB,IAAIknJ,GAAO,OAAkB9c,GACzB60B,EAAUC,EAAY90B,EAAU,WAIpCpqI,GAHiByG,MAAM2S,OAAO8tI,EAAK7c,aAC7B,IACAjxH,OAAO8tI,EAAK7c,cAGT40B,EAAQE,wBAA0BF,EAAQG,+BAG9CvB,KACDA,EAAiB9mD,SAASC,cAAc,QACzBwT,UAAY,IAC3BqzC,EAAe5mD,MAAMooD,UAAY,IACjCxB,EAAe5mD,MAAMqoD,UAAY,OACjCzB,EAAe5mD,MAAMj3G,OAAS,OAC9B69J,EAAe5mD,MAAM4jB,QAAU,IAC/BgjC,EAAe5mD,MAAMsoD,OAAS,OAC9B1B,EAAe5mD,MAAMC,SAAW,WAChC2mD,EAAe5mD,MAAMsB,QAAU,QAC/BslD,EAAe5mD,MAAM96G,KAAO,YAEhC0hK,EAAe5mD,MAAMiwC,KAAO9c,EAC5BrzB,SAASgsB,KAAKtiB,YAAYo9C,GAC1B79J,EAAS69J,EAAe31C,aACxBnR,SAASgsB,KAAK/qB,YAAY6lD,GAE9BE,EAAY3zB,GAAYpqI,EAE5B,OAAOA,GAQf,SAASk/J,EAAYhY,EAAM1iB,GAQvB,OAPKs5B,IACDA,GAAiB,QAAsB,EAAG,IAE1C5W,GAAQ0W,IACRE,EAAe5W,KAAOA,EACtB0W,EAAcE,EAAe5W,MAE1B4W,EAAeoB,YAAY16B,GAO/B,SAASk6B,EAAiBxX,EAAM1iB,GACnC,OAAO06B,EAAYhY,EAAM1iB,GAAMrtB,MAS5B,SAAS+yC,EAAyBhD,EAAM1iB,EAAM9sG,GACjD,GAAI8sG,KAAQ9sG,EACR,OAAOA,EAAM8sG,GAEjB,IAAIrtB,EAAQunD,EAAiBxX,EAAM1iB,GAEnC,OADA9sG,EAAM8sG,GAAQrtB,EACPA,EASJ,SAASqoD,EAAkBtY,EAAMn3D,EAAOk8D,GAG3C,IAFA,IAAID,EAAWj8D,EAAMxzF,OACjB46G,EAAQ,EACH75G,EAAI,EAAGA,EAAI0uJ,IAAY1uJ,EAAG,CAC/B,IAAImiK,EAAef,EAAiBxX,EAAMn3D,EAAMzyF,IAChD65G,EAAQv6G,KAAKM,IAAIi6G,EAAOsoD,GACxBxT,EAAO5rJ,KAAKo/J,GAEhB,OAAOtoD,EA4BJ,SAASuoD,EAAiBx8I,EAAS87D,EAAW0rD,EAASi1B,EAAc3S,EAASC,EAAS3nH,EAAGd,EAAGryB,EAAGC,EAAGi+D,GACtGntD,EAAQ6zH,OACQ,IAAZrM,IACAxnH,EAAQ80H,aAAetN,GAEvB1rD,GACA97D,EAAQ6wI,aAAa7xJ,MAAMghB,EAAS87D,GAEnB,EAAemtE,qBAEhCjpI,EAAQiuB,UAAUh/B,EAAGC,GACrB8Q,EAAQmtD,MAAMA,EAAM,GAAIA,EAAM,IAqBtC,SAAkCssB,EAAOz5E,GAErC,IADA,IAAIipI,EAAsBxvD,EAAMwvD,oBACvB7uJ,EAAI,EAAGiS,EAAK48I,EAAoB5vJ,OAAQe,EAAIiS,EAAIjS,GAAK,EACtD2H,MAAMC,QAAQinJ,EAAoB7uJ,EAAI,IACtC4lB,EAAQipI,EAAoB7uJ,IAAI4E,MAAMghB,EAASipI,EAAoB7uJ,EAAI,IAGvE4lB,EAAQipI,EAAoB7uJ,IAAM6uJ,EAAoB7uJ,EAAI,GA3B9DsiK,CAA8C,EAAgB18I,IAEzDmtD,EAAM,GAAK,GAAKA,EAAM,GAAK,GAEhCntD,EAAQiuB,UAAUh/B,EAAGC,GACrB8Q,EAAQmtD,MAAMA,EAAM,GAAIA,EAAM,IAC9BntD,EAAQ+0H,UAC2D,EAAgB+U,EAASC,EAAS3nH,EAAGd,EAAG,EAAG,EAAGc,EAAGd,IAIpHthB,EAAQ+0H,UAC2D,EAAgB+U,EAASC,EAAS3nH,EAAGd,EAAGryB,EAAGC,EAAGkzB,EAAI+qC,EAAM,GAAI7rC,EAAI6rC,EAAM,IAE7IntD,EAAQm0H,mFC/YJ5nC,yDADJC,GACID,EAAgB,SAAU7+F,EAAGjT,GAI7B,OAHA8xG,EAAgB/oG,OAAOipG,gBAClB,CAAE3pF,UAAW,cAAgB/gB,OAAS,SAAU2L,EAAGjT,GAAKiT,EAAEoV,UAAYroB,IACvE,SAAUiT,EAAGjT,GAAK,IAAK,IAAIqB,KAAKrB,EAAO+I,OAAOpG,UAAUqiB,eAAe/U,KAAKjQ,EAAGqB,KAAI4R,EAAE5R,GAAKrB,EAAEqB,KACzFywG,EAAc7+F,EAAGjT,IAErB,SAAUiT,EAAGjT,GAChB,GAAiB,oBAANA,GAA0B,OAANA,EAC3B,MAAM,IAAI6jB,UAAU,uBAAyB6G,OAAO1qB,GAAK,iCAE7D,SAASiyG,IAAO5xG,KAAKwL,YAAcoH,EADnC6+F,EAAc7+F,EAAGjT,GAEjBiT,EAAEtQ,UAAkB,OAAN3C,EAAa+I,OAAOojC,OAAOnsC,IAAMiyG,EAAGtvG,UAAY3C,EAAE2C,UAAW,IAAIsvG,KA6KvF,EA/JmC,SAAUG,GAKzC,SAAS8vD,EAAc/qD,GACnB,IAAIr9E,EAAQs4E,EAAOniG,KAAK5P,OAASA,KAYjC,OAVAy5B,EAAMqoI,wBAA0BroI,EAAMsoI,mBAAmBvyJ,KAAKiqB,GAK9DA,EAAMuoI,OAASlrD,EAIfr9E,EAAMqhI,uBAAyB,KACxBrhI,EA2IX,OA5JAi4E,EAAUmwD,EAAe9vD,GAyBzB8vD,EAAcv/J,UAAUmwI,YAAc,SAAUt6B,GAC5C,OAAO,WAQX0pD,EAAcv/J,UAAUqwI,aAAe,SAAU78B,GAC7C,OAAO,WASX+rD,EAAcv/J,UAAUg2G,YAAc,SAAUxC,EAAYvyF,GACxD,OAAO,WAQXs+I,EAAcv/J,UAAU0yI,mBAAqB,SAAUC,EAAOjf,EAAM9V,GAC3D+0B,EAAMjf,KACPif,EAAMjf,GAAQ,IAElBif,EAAMjf,GAAM9V,EAAKgY,UAAU1gH,YAAc0oG,GAY7C2hD,EAAcv/J,UAAU4zI,uBAAyB,SAAUt/H,EAAQg3F,EAAYqnC,GAC3E,OAOA,SAAUjf,EAAMqC,GACZ,IAAIxsH,EAAW7L,KAAKg1I,mBAAmBxlI,KAAKxP,KAAMi1I,EAAOjf,GACzD,OAAOp/G,EAAOqrJ,kBAAkBr0D,EAAYooB,EAAMqC,EAAWxsH,IAC/D2D,KAAKxP,OAYX6hK,EAAcv/J,UAAUi0G,2BAA6B,SAAUhiE,EAAYuhE,EAAYU,EAAc3qG,EAAU0rG,KAY/GsqD,EAAcv/J,UAAUk4G,eAAiB,SAAUrC,EAAOrC,EAAYU,GAClE,OAAO,MAKXqrD,EAAcv/J,UAAUqyI,SAAW,WAC/B,OAAO30I,KAAKgiK,QAMhBH,EAAcv/J,UAAUumH,mBAAqB,aAM7Cg5C,EAAcv/J,UAAUy/J,mBAAqB,SAAUzgI,GACOA,EAAY,OAC5DuyE,aAAeK,EAAA,UACrBl0G,KAAKk9J,2BAUb2E,EAAcv/J,UAAU4/J,UAAY,SAAUrtD,GAC1C,IAAIwkD,EAAaxkD,EAAMhB,WAQvB,OAPIwlD,GAAcnlD,EAAA,UAAqBmlD,GAAcnlD,EAAA,SACjDW,EAAMyH,iBAAiB9I,EAAA,SAAkBxzG,KAAK8hK,yBAE9CzI,GAAcnlD,EAAA,SACdW,EAAM9xG,OACNs2J,EAAaxkD,EAAMhB,YAEhBwlD,GAAcnlD,EAAA,UAKzB2tD,EAAcv/J,UAAU46J,wBAA0B,WAC9C,IAAIpmD,EAAQ92G,KAAK20I,WACb79B,EAAM65B,cAAgB75B,EAAM45B,kBAAoB,WAChD55B,EAAMvD,WAGPsuD,EA7JuB,CA8JhCM,EAAA,oECxLE,EAAwC,WACxC,IAAI1wD,EAAgB,SAAU7+F,EAAGjT,GAI7B,OAHA8xG,EAAgB/oG,OAAOipG,gBAClB,CAAE3pF,UAAW,cAAgB/gB,OAAS,SAAU2L,EAAGjT,GAAKiT,EAAEoV,UAAYroB,IACvE,SAAUiT,EAAGjT,GAAK,IAAK,IAAIqB,KAAKrB,EAAO+I,OAAOpG,UAAUqiB,eAAe/U,KAAKjQ,EAAGqB,KAAI4R,EAAE5R,GAAKrB,EAAEqB,KACzFywG,EAAc7+F,EAAGjT,IAE5B,OAAO,SAAUiT,EAAGjT,GAChB,GAAiB,oBAANA,GAA0B,OAANA,EAC3B,MAAM,IAAI6jB,UAAU,uBAAyB6G,OAAO1qB,GAAK,iCAE7D,SAASiyG,IAAO5xG,KAAKwL,YAAcoH,EADnC6+F,EAAc7+F,EAAGjT,GAEjBiT,EAAEtQ,UAAkB,OAAN3C,EAAa+I,OAAOojC,OAAOnsC,IAAMiyG,EAAGtvG,UAAY3C,EAAE2C,UAAW,IAAIsvG,IAZ3C,GAyP5C,EA3NyC,SAAUG,GAK/C,SAASqwD,EAAoBtrD,GACzB,IAAIr9E,EAAQs4E,EAAOniG,KAAK5P,KAAM82G,IAAU92G,KAwCxC,OAnCAy5B,EAAM6/E,UAAY,KAKlB7/E,EAAM8/G,mBAON9/G,EAAMu9G,eAAgB,UAOtBv9G,EAAMm9G,gBAAiB,UAOvBn9G,EAAMs9G,uBAAwB,UAI9Bt9G,EAAMvU,QAAU,KAIhBuU,EAAMw9G,iBAAkB,EACjBx9G,EA2KX,OAxNA,EAAU2oI,EAAqBrwD,GAqD/BqwD,EAAoB9/J,UAAUw0I,aAAe,SAAUvzH,EAAQy9D,EAAW0rD,GACtE,IACIpzB,EAAWp0F,EADXm9I,EAAiBriK,KAAK20I,WAAWtE,eAEjC9sH,GACAA,EAAO01F,MAAMyzB,WAAY,EAAAiN,EAAA,IAAWjN,IACpCnpH,EAAO81F,YAAcgpD,KACjBr1B,EAASzpH,EAAOinH,6BACE83B,oBAClBp9I,EAAU8nH,EAAOrtE,WAAW,QAepC,GAZIz6C,GAAWA,EAAQ8nH,OAAO/zB,MAAMj4B,YAAcA,GAE9ChhF,KAAKs5G,UAAY/1F,EACjBvjB,KAAKklB,QAAUA,EACfllB,KAAKi3I,iBAAkB,GAElBj3I,KAAKi3I,kBAEVj3I,KAAKs5G,UAAY,KACjBt5G,KAAKklB,QAAU,KACfllB,KAAKi3I,iBAAkB,IAEtBj3I,KAAKs5G,UAAW,EACjBA,EAAYP,SAASC,cAAc,QACzBK,UAAYgpD,EACtB,IAAIppD,EAAQK,EAAUL,MACtBA,EAAMC,SAAW,WACjBD,EAAME,MAAQ,OACdF,EAAMj3G,OAAS,OAEf,IAAIgrI,GADJ9nH,GAAU,WACW8nH,OACrB1zB,EAAUmJ,YAAYuqB,IACtB/zB,EAAQ+zB,EAAO/zB,OACTC,SAAW,WACjBD,EAAM96G,KAAO,IACb86G,EAAMspD,gBAAkB,WACxBviK,KAAKs5G,UAAYA,EACjBt5G,KAAKklB,QAAUA,IASvBk9I,EAAoB9/J,UAAU60I,cAAgB,SAAUjyH,EAAS4wF,EAAY3J,GACzE,IAAIq2D,GAAU,QAAWr2D,GACrBs2D,GAAW,QAAYt2D,GACvBu2D,GAAc,QAAev2D,GAC7Bw2D,GAAa,QAAcx2D,IAC/B,QAAe2J,EAAWK,2BAA4BqsD,IACtD,QAAe1sD,EAAWK,2BAA4BssD,IACtD,QAAe3sD,EAAWK,2BAA4BusD,IACtD,QAAe5sD,EAAWK,2BAA4BwsD,GACtD,IAAIC,EAAW5iK,KAAK+2I,uBACpB,QAAe6rB,EAAUJ,IACzB,QAAeI,EAAUH,IACzB,QAAeG,EAAUF,IACzB,QAAeE,EAAUD,GACzBz9I,EAAQ6zH,OACR7zH,EAAQ+zH,YACR/zH,EAAQg0H,OAAOt6I,KAAK4L,MAAMg4J,EAAQ,IAAK5jK,KAAK4L,MAAMg4J,EAAQ,KAC1Dt9I,EAAQi0H,OAAOv6I,KAAK4L,MAAMi4J,EAAS,IAAK7jK,KAAK4L,MAAMi4J,EAAS,KAC5Dv9I,EAAQi0H,OAAOv6I,KAAK4L,MAAMk4J,EAAY,IAAK9jK,KAAK4L,MAAMk4J,EAAY,KAClEx9I,EAAQi0H,OAAOv6I,KAAK4L,MAAMm4J,EAAW,IAAK/jK,KAAK4L,MAAMm4J,EAAW,KAChEz9I,EAAQmqF,QAQZ+yD,EAAoB9/J,UAAUugK,qBAAuB,SAAUl8J,EAAMue,EAAS4wF,GAC1E,IAAIgB,EAAQ92G,KAAK20I,WACjB,GAAI79B,EAAM8C,YAAYjzG,GAAO,CACzB,IAAIkzG,EAAU,IAAI,IAAYlzG,EAAM3G,KAAK+2I,sBAAuBjhC,EAAY5wF,GAC5E4xF,EAAMlE,cAAciH,KAQ5BuoD,EAAoB9/J,UAAU+0I,UAAY,SAAUnyH,EAAS4wF,GACzD91G,KAAK6iK,qBAAqB,cAA2B39I,EAAS4wF,IAOlEssD,EAAoB9/J,UAAUo3I,WAAa,SAAUx0H,EAAS4wF,GAC1D91G,KAAK6iK,qBAAqB,eAA4B39I,EAAS4wF,IAcnEssD,EAAoB9/J,UAAU+4J,mBAAqB,SAAU/kD,EAAQnD,EAAYkD,EAAUjD,EAAY+F,EAAOn3G,EAAQ87H,GAClH,IAAIvgC,EAAM4b,EAAQ,EACd3b,EAAMx7F,EAAS,EACf8gK,EAAK1vD,EAAaD,EAClB4vD,GAAMD,EACNrlE,GAAO6Y,EAAO,GAAKwnB,EACnBpgC,GAAO4Y,EAAO,GAClB,OAAO,QAAiBt2G,KAAKg3I,cAAez5C,EAAKC,EAAKslE,EAAIC,GAAK1sD,EAAU5Y,EAAKC,IAUlF0kE,EAAoB9/J,UAAUk4G,eAAiB,SAAUrC,EAAOrC,EAAYU,GACxE,IAWI/zG,EAXAugK,GAAc,QAAehjK,KAAK+2I,sBAAuB5+B,EAAMj1G,SAC/DgiB,EAAUllB,KAAKklB,QAEfywH,EADQ31I,KAAK20I,WACOlhC,YACxB,GAAIkiC,EAAa,CACb,IAAIstB,GAAmB,QAAentD,EAAWM,2BAA4B+B,EAAMj1G,SAEnF,KAAK,QAAmByyI,EAAastB,GACjC,OAAO,KAIf,IACI,IAAI9uJ,EAAIvV,KAAK4L,MAAMw4J,EAAY,IAC3B5uJ,EAAIxV,KAAK4L,MAAMw4J,EAAY,IAC3BE,EAAYnqD,SAASC,cAAc,UACnCs6C,EAAa4P,EAAUvjG,WAAW,MACtCujG,EAAU/pD,MAAQ,EAClB+pD,EAAUlhK,OAAS,EACnBsxJ,EAAWpc,UAAU,EAAG,EAAG,EAAG,GAC9Boc,EAAWrZ,UAAU/0H,EAAQ8nH,OAAQ74H,EAAGC,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,GAC1D3R,EAAO6wJ,EAAWS,aAAa,EAAG,EAAG,EAAG,GAAGtxJ,KAE/C,MAAO0gK,GACH,MAAiB,kBAAbA,EAAI9zJ,KAEG,IAAI8Y,WAER1lB,EAEX,OAAgB,IAAZA,EAAK,GACE,KAEJA,GAEJ2/J,EAzN6B,CA0NtClwB,+JC7OK,SAASkxB,EAAQ/sD,GACpB,YAAiBjpG,IAAbipG,EACO,OAGP,EAOD,SAAS4iB,EAAK5iB,GACjB,YAAiBjpG,IAAbipG,EACOA,OAGP,EAOD,SAASgtD,EAAc5kK,GAC1B,IAAIwxH,EAAS,EAAIrxH,KAAK2J,GAAM9J,EAC5B,OAAO,SAMG43G,EAAUqiB,GAChB,OAAIA,EACOriB,OAEMjpG,IAAbipG,EACAA,EAAWz3G,KAAKO,MAAMk3G,EAAW4Z,EAAQ,IAAOA,OAIhD,GAQL,SAASqzC,EAAiBC,GAC7B,IAAIhyE,EAAYgyE,IAAiB,QAAU,GAC3C,OAAO,SAMGltD,EAAUqiB,GAChB,OAAIA,EACOriB,OAEMjpG,IAAbipG,EACIz3G,KAAKoiB,IAAIq1F,IAAa9kB,EACf,EAGA8kB,OAIX,uCCrDL,SAASmtD,EAAQ/uI,GACpB,OAAOA,EAAK,GAAK,GAAKA,EAAK,GAAK,EAS7B,SAAS49C,EAAM59C,EAAMukG,EAAOkH,GAM/B,YALiB9yH,IAAb8yH,IACAA,EAAW,CAAC,EAAG,IAEnBA,EAAS,GAAMzrG,EAAK,GAAKukG,EAAQ,GAAO,EACxCkH,EAAS,GAAMzrG,EAAK,GAAKukG,EAAQ,GAAO,EACjCkH,EAWJ,SAASujC,EAAOhvI,EAAMyrG,GACzB,OAAIj5H,MAAMC,QAAQutB,GACPA,QAGUrnB,IAAb8yH,EACAA,EAAW,CAACzrG,EAAMA,IAGlByrG,EAAS,GAAKzrG,EACdyrG,EAAS,GAAKzrG,GAEXyrG,6JClEPzuB,uDADJC,GACID,EAAgB,SAAU7+F,EAAGjT,GAI7B,OAHA8xG,EAAgB/oG,OAAOipG,gBAClB,CAAE3pF,UAAW,cAAgB/gB,OAAS,SAAU2L,EAAGjT,GAAKiT,EAAEoV,UAAYroB,IACvE,SAAUiT,EAAGjT,GAAK,IAAK,IAAIqB,KAAKrB,EAAO+I,OAAOpG,UAAUqiB,eAAe/U,KAAKjQ,EAAGqB,KAAI4R,EAAE5R,GAAKrB,EAAEqB,KACzFywG,EAAc7+F,EAAGjT,IAErB,SAAUiT,EAAGjT,GAChB,GAAiB,oBAANA,GAA0B,OAANA,EAC3B,MAAM,IAAI6jB,UAAU,uBAAyB6G,OAAO1qB,GAAK,iCAE7D,SAASiyG,IAAO5xG,KAAKwL,YAAcoH,EADnC6+F,EAAc7+F,EAAGjT,GAEjBiT,EAAEtQ,UAAkB,OAAN3C,EAAa+I,OAAOojC,OAAOnsC,IAAMiyG,EAAGtvG,UAAY3C,EAAE2C,UAAW,IAAIsvG,KA6RvF,EApN0B,SAAUG,GAOhC,SAAS2xD,EAAKxrC,EAAW7kB,EAAOjB,GAC5B,IAAI34E,EAAQs4E,EAAOniG,KAAK5P,OAASA,KAC7ByG,EAAU2rG,GAA4B,GAoC1C,OAhCA34E,EAAMy+F,UAAYA,EAKlBz+F,EAAM45E,MAAQA,EAOd55E,EAAMkqI,YAAc,KAOpBlqI,EAAMjjB,IAAM,GAKZijB,EAAMmqI,iBACqBx2J,IAAvB3G,EAAQqyI,WAA2B,IAAMryI,EAAQqyI,WAMrDr/G,EAAMoqI,kBAAoB,GACnBpqI,EAqKX,OAjNAi4E,EAAUgyD,EAAM3xD,GAiDhB2xD,EAAKphK,UAAUixG,QAAU,WACrBvzG,KAAK4yG,cAAcY,EAAA,WAKvBkwD,EAAKphK,UAAUwhK,QAAU,aAIzBJ,EAAKphK,UAAUs+C,OAAS,WACpB,OAAO5gD,KAAKwW,IAAM,IAAMxW,KAAKk4H,WAQjCwrC,EAAKphK,UAAUyyI,eAAiB,WAC5B,IAAK/0I,KAAK2jK,YAEN,OAAO3jK,KAEX,IAAIkgH,EAAOlgH,KAAK2jK,YAKhB,EAAG,CACC,GAAIzjD,EAAKrM,YAAcsM,EAAA,SAInB,OADAngH,KAAK4jK,YAAc,EACZ1jD,EAEXA,EAAOA,EAAKyjD,kBACPzjD,GAET,OAAOlgH,MAMX0jK,EAAKphK,UAAUyhK,oBAAsB,WACjC,GAAK/jK,KAAK2jK,YAAV,CAGA,IAAIzjD,EAAOlgH,KAAK2jK,YACZlxJ,EAA2B,KAC/B,EAAG,CACC,GAAIytG,EAAKrM,YAAcsM,EAAA,SAAkB,CAIrCD,EAAKyjD,YAAc,KACnB,MAEKzjD,EAAKrM,YAAcsM,EAAA,UAGxB1tG,EAAOytG,EAEFA,EAAKrM,YAAcsM,EAAA,OAGxB1tG,EAAKkxJ,YAAczjD,EAAKyjD,YAGxBlxJ,EAAOytG,EAEXA,EAAOztG,EAAKkxJ,kBACPzjD,KAObwjD,EAAKphK,UAAU0hK,aAAe,WAC1B,OAAOhkK,KAAKk4H,WAKhBwrC,EAAKphK,UAAUuxG,SAAW,WACtB,OAAO7zG,KAAKqzG,OAUhBqwD,EAAKphK,UAAUwyI,SAAW,SAAUzhC,GAChC,GAAIrzG,KAAKqzG,QAAU8M,EAAA,SAAmBngH,KAAKqzG,MAAQA,EAC/C,MAAM,IAAIrsG,MAAM,gCAEpBhH,KAAKqzG,MAAQA,EACbrzG,KAAKuzG,WASTmwD,EAAKphK,UAAUS,KAAO,YAClB,WAQJ2gK,EAAKphK,UAAUg0I,SAAW,SAAU1vI,EAAIksF,GACpC,IAAK9yF,KAAK4jK,YACN,OAAO,EAEX,IAAItlJ,EAAQte,KAAK6jK,kBAAkBj9J,GACnC,GAAK0X,GAIA,IAAe,IAAXA,EACL,OAAO,OAJPA,EAAQw0E,EACR9yF,KAAK6jK,kBAAkBj9J,GAAM0X,EAKjC,IAAIm6E,EAAQ3F,EAAOx0E,EAAQ,IAAO,GAClC,OAAIm6E,GAASz4F,KAAK4jK,YACP,GAEJ,QAAOnrE,EAAQz4F,KAAK4jK,cAS/BF,EAAKphK,UAAU+zI,aAAe,SAAUzvI,GACpC,QAAK5G,KAAK4jK,cAG6B,IAAhC5jK,KAAK6jK,kBAAkBj9J,IAMlC88J,EAAKphK,UAAU43I,cAAgB,SAAUtzI,GACjC5G,KAAK4jK,cACL5jK,KAAK6jK,kBAAkBj9J,IAAO,IAG/B88J,EAlNc,CAmNvB,2BCxSE,EAAwC,WACxC,IAAIjyD,EAAgB,SAAU7+F,EAAGjT,GAI7B,OAHA8xG,EAAgB/oG,OAAOipG,gBAClB,CAAE3pF,UAAW,cAAgB/gB,OAAS,SAAU2L,EAAGjT,GAAKiT,EAAEoV,UAAYroB,IACvE,SAAUiT,EAAGjT,GAAK,IAAK,IAAIqB,KAAKrB,EAAO+I,OAAOpG,UAAUqiB,eAAe/U,KAAKjQ,EAAGqB,KAAI4R,EAAE5R,GAAKrB,EAAEqB,KACzFywG,EAAc7+F,EAAGjT,IAE5B,OAAO,SAAUiT,EAAGjT,GAChB,GAAiB,oBAANA,GAA0B,OAANA,EAC3B,MAAM,IAAI6jB,UAAU,uBAAyB6G,OAAO1qB,GAAK,iCAE7D,SAASiyG,IAAO5xG,KAAKwL,YAAcoH,EADnC6+F,EAAc7+F,EAAGjT,GAEjBiT,EAAEtQ,UAAkB,OAAN3C,EAAa+I,OAAOojC,OAAOnsC,IAAMiyG,EAAGtvG,UAAY3C,EAAE2C,UAAW,IAAIsvG,IAZ3C,GA0J5C,ICjJIqyD,EDiJJ,EApI+B,SAAUlyD,GAUrC,SAASmyD,EAAUhsC,EAAW7kB,EAAOU,EAAKC,EAAamwD,EAAkB/xD,GACrE,IAAI34E,EAAQs4E,EAAOniG,KAAK5P,KAAMk4H,EAAW7kB,EAAOjB,IAAgBpyG,KAgChE,OA3BAy5B,EAAM2qI,aAAepwD,EAOrBv6E,EAAM06E,KAAOJ,EACbt6E,EAAMjjB,IAAMu9F,EAKZt6E,EAAM26E,OAAS,IAAIC,MACC,OAAhBL,IACAv6E,EAAM26E,OAAOJ,YAAcA,GAM/Bv6E,EAAM66E,UAAY,KAKlB76E,EAAM4qI,kBAAoBF,EACnB1qI,EA6EX,OAvHA,EAAUyqI,EAAWnyD,GAiDrBmyD,EAAU5hK,UAAUoxG,SAAW,WAC3B,OAAO1zG,KAAKo0G,QAMhB8vD,EAAU5hK,UAAUsyG,SAAW,SAAUlO,GACrC1mG,KAAKo0G,OAAS1N,EACd1mG,KAAKqzG,MAAQ8M,EAAA,SACbngH,KAAKy0G,iBACLz0G,KAAKuzG,WAOT2wD,EAAU5hK,UAAUkyG,kBAAoB,WA0D5C,IACQ9gF,EA1DA1zB,KAAKqzG,MAAQ8M,EAAA,QACbngH,KAAKy0G,iBACLz0G,KAAKo0G,SAwDL1gF,GAAM,QAAsB,EAAG,IAC/BmrH,UAAY,gBAChBnrH,EAAI2oI,SAAS,EAAG,EAAG,EAAG,GACf3oI,EAAIs5G,QA1DPhtI,KAAKuzG,WAOT2wD,EAAU5hK,UAAUoyG,iBAAmB,WACnC,IAAIG,EAAyC70G,KAAW,OACpD60G,EAAMyvD,cAAgBzvD,EAAM0vD,cAC5BvkK,KAAKqzG,MAAQ8M,EAAA,SAGbngH,KAAKqzG,MAAQ8M,EAAA,QAEjBngH,KAAKy0G,iBACLz0G,KAAKuzG,WAMT2wD,EAAU5hK,UAAUS,KAAO,WACnB/C,KAAKqzG,OAAS8M,EAAA,UACdngH,KAAKqzG,MAAQ8M,EAAA,OACbngH,KAAKo0G,OAAS,IAAIC,MACQ,OAAtBr0G,KAAKokK,eACLpkK,KAAKo0G,OAAOJ,YAAch0G,KAAKokK,eAGnCpkK,KAAKqzG,OAAS8M,EAAA,SACdngH,KAAKqzG,MAAQ8M,EAAA,UACbngH,KAAKuzG,UACLvzG,KAAKqkK,kBAAkBrkK,KAAMA,KAAKm0G,MAClCn0G,KAAKs0G,WAAY,OAAYt0G,KAAKo0G,OAAQp0G,KAAK00G,iBAAiBllG,KAAKxP,MAAOA,KAAKw0G,kBAAkBhlG,KAAKxP,SAQhHkkK,EAAU5hK,UAAUmyG,eAAiB,WAC7Bz0G,KAAKs0G,YACLt0G,KAAKs0G,YACLt0G,KAAKs0G,UAAY,OAGlB4vD,EAxHmB,CAyH5B,oCE6NF,EA1UmC,WAS/B,SAASM,EAAcC,EAAYC,EAAYC,EAAcC,EAAiBC,EAAgBC,GAK1F9kK,KAAK+kK,YAAcN,EAKnBzkK,KAAKglK,YAAcN,EAEnB,IAAIO,EAAoB,GACpBC,GAAe,QAAallK,KAAKglK,YAAahlK,KAAK+kK,aAMvD/kK,KAAKmlK,cAAgB,SAAUxyJ,GAC3B,IAAI6D,EAAM7D,EAAE,GAAK,IAAMA,EAAE,GAIzB,OAHKsyJ,EAAkBzuJ,KACnByuJ,EAAkBzuJ,GAAO0uJ,EAAavyJ,IAEnCsyJ,EAAkBzuJ,IAM7BxW,KAAKolK,iBAAmBR,EAKxB5kK,KAAKqlK,uBAAyBR,EAAiBA,EAK/C7kK,KAAKslK,WAAa,GAMlBtlK,KAAKulK,iBAAkB,EAKvBvlK,KAAKwlK,kBACDxlK,KAAK+kK,YAAY9tD,cACX2tD,KACA5kK,KAAK+kK,YAAYtxD,cACnB,QAASmxD,KAAoB,QAAS5kK,KAAK+kK,YAAYtxD,aAK/DzzG,KAAKylK,kBAAoBzlK,KAAK+kK,YAAYtxD,aACpC,QAASzzG,KAAK+kK,YAAYtxD,aAC1B,KAKNzzG,KAAK0lK,kBAAoB1lK,KAAKglK,YAAYvxD,aACpC,QAASzzG,KAAKglK,YAAYvxD,aAC1B,KACN,IAAIkyD,GAAqB,QAAWhB,GAChCiB,GAAsB,QAAYjB,GAClCkB,GAAyB,QAAelB,GACxCmB,GAAwB,QAAcnB,GACtCoB,EAAgB/lK,KAAKmlK,cAAcQ,GACnCK,EAAiBhmK,KAAKmlK,cAAcS,GACpCK,EAAoBjmK,KAAKmlK,cAAcU,GACvCK,EAAmBlmK,KAAKmlK,cAAcW,GAWtCK,EAhHU,IAiHTrB,EACKlmK,KAAKM,IAAI,EAAGN,KAAKuB,MAAK,SAAK,QAAQwkK,IAChCG,EACGA,EACA,IACA,QACN,GAEV,GADA9kK,KAAKomK,SAAST,EAAoBC,EAAqBC,EAAwBC,EAAuBC,EAAeC,EAAgBC,EAAmBC,EAAkBC,GACtKnmK,KAAKulK,gBAAiB,CACtB,IAAIc,EAAc1oK,EAAAA,EAClBqC,KAAKslK,WAAW55J,SAAQ,SAAU46J,EAAUhnK,EAAGrB,GAC3CooK,EAAcznK,KAAKQ,IAAIinK,EAAaC,EAAS1vJ,OAAO,GAAG,GAAI0vJ,EAAS1vJ,OAAO,GAAG,GAAI0vJ,EAAS1vJ,OAAO,GAAG,OAIzG5W,KAAKslK,WAAW55J,QAAQ,SAAU46J,GAC9B,GAAI1nK,KAAKM,IAAIonK,EAAS1vJ,OAAO,GAAG,GAAI0vJ,EAAS1vJ,OAAO,GAAG,GAAI0vJ,EAAS1vJ,OAAO,GAAG,IAC1EyvJ,EACArmK,KAAKylK,kBAAoB,EAAG,CAC5B,IAAIc,EAAc,CACd,CAACD,EAAS1vJ,OAAO,GAAG,GAAI0vJ,EAAS1vJ,OAAO,GAAG,IAC3C,CAAC0vJ,EAAS1vJ,OAAO,GAAG,GAAI0vJ,EAAS1vJ,OAAO,GAAG,IAC3C,CAAC0vJ,EAAS1vJ,OAAO,GAAG,GAAI0vJ,EAAS1vJ,OAAO,GAAG,KAE3C2vJ,EAAY,GAAG,GAAKF,EAAcrmK,KAAKylK,kBAAoB,IAC3Dc,EAAY,GAAG,IAAMvmK,KAAKylK,mBAE1Bc,EAAY,GAAG,GAAKF,EAAcrmK,KAAKylK,kBAAoB,IAC3Dc,EAAY,GAAG,IAAMvmK,KAAKylK,mBAE1Bc,EAAY,GAAG,GAAKF,EAAcrmK,KAAKylK,kBAAoB,IAC3Dc,EAAY,GAAG,IAAMvmK,KAAKylK,mBAK9B,IAAItkK,EAAOvC,KAAKQ,IAAImnK,EAAY,GAAG,GAAIA,EAAY,GAAG,GAAIA,EAAY,GAAG,IAC9D3nK,KAAKM,IAAIqnK,EAAY,GAAG,GAAIA,EAAY,GAAG,GAAIA,EAAY,GAAG,IAC9DplK,EAAOnB,KAAKylK,kBAAoB,IACvCa,EAAS1vJ,OAAS2vJ,KAG5B/2J,KAAKxP,OAEXilK,EAAoB,GA0LxB,OA9KAT,EAAcliK,UAAUkkK,aAAe,SAAU9mK,EAAGC,EAAGgT,EAAG8zJ,EAAMC,EAAMC,GAClE3mK,KAAKslK,WAAWjjK,KAAK,CACjBuU,OAAQ,CAAC6vJ,EAAMC,EAAMC,GACrBpjJ,OAAQ,CAAC7jB,EAAGC,EAAGgT,MAmBvB6xJ,EAAcliK,UAAU8jK,SAAW,SAAU1mK,EAAGC,EAAGgT,EAAGC,EAAG6zJ,EAAMC,EAAMC,EAAMC,EAAMT,GAC7E,IAAIU,GAAmB,QAAe,CAACJ,EAAMC,EAAMC,EAAMC,IACrDE,EAAkB9mK,KAAKylK,mBACrB,QAASoB,GAAoB7mK,KAAKylK,kBAClC,KACFsB,EAA0C/mK,KAAsB,kBAGhEgnK,EAAShnK,KAAK+kK,YAAY9tD,YAC1B6vD,EAAkB,IAClBA,EAAkB,EAClBG,GAAmB,EACvB,GAAId,EAAiB,EAAG,CACpB,GAAInmK,KAAKglK,YAAYzpC,YAAcv7H,KAAK0lK,kBAAmB,CACvD,IAAIwB,GAAmB,QAAe,CAACxnK,EAAGC,EAAGgT,EAAGC,IAEhDq0J,GADsB,QAASC,GAAoBlnK,KAAK0lK,kBArM/C,KAuMmCuB,GAE3CD,GAAUhnK,KAAK+kK,YAAYxpC,YAAcurC,IAC1CG,EACIH,EA3MK,KA2MmCG,GAGpD,MAAKA,GAAoBjnK,KAAKolK,kBACtB57I,SAASq9I,EAAiB,KAC1Br9I,SAASq9I,EAAiB,KAC1Br9I,SAASq9I,EAAiB,KAC1Br9I,SAASq9I,EAAiB,OACrB,QAAWA,EAAkB7mK,KAAKolK,kBAL/C,CAWA,IAAI+B,EAAc,EAClB,IAAKF,KACIz9I,SAASi9I,EAAK,MACdj9I,SAASi9I,EAAK,MACdj9I,SAASk9I,EAAK,MACdl9I,SAASk9I,EAAK,MACdl9I,SAASm9I,EAAK,MACdn9I,SAASm9I,EAAK,MACdn9I,SAASo9I,EAAK,MACdp9I,SAASo9I,EAAK,KACf,GAAIT,EAAiB,EACjBc,GAAmB,OAUnB,GAAmB,IALnBE,GACM39I,SAASi9I,EAAK,KAAQj9I,SAASi9I,EAAK,IAAU,EAAJ,IACtCj9I,SAASk9I,EAAK,KAAQl9I,SAASk9I,EAAK,IAAU,EAAJ,IAC1Cl9I,SAASm9I,EAAK,KAAQn9I,SAASm9I,EAAK,IAAU,EAAJ,IAC1Cn9I,SAASo9I,EAAK,KAAQp9I,SAASo9I,EAAK,IAAU,EAAJ,KAEjC,GAAfO,GACe,GAAfA,GACe,GAAfA,EACA,OAKhB,GAAIhB,EAAiB,EAAG,CACpB,IAAKc,EAAkB,CACnB,IAAI3wD,EAAS,EAAE52G,EAAE,GAAKiT,EAAE,IAAM,GAAIjT,EAAE,GAAKiT,EAAE,IAAM,GAC7Cy0J,EAAYpnK,KAAKmlK,cAAc7uD,GAC/BriG,OAAK,EACT,GAAI+yJ,EAIA/yJ,IAHuB,QAAOwyJ,EAAK,GAAIM,IACnC,QAAOJ,EAAK,GAAII,IAChB,GACmB,QAAOK,EAAU,GAAIL,QAG5C9yJ,GAAMwyJ,EAAK,GAAKE,EAAK,IAAM,EAAIS,EAAU,GAE7C,IAAIlzJ,GAAMuyJ,EAAK,GAAKE,EAAK,IAAM,EAAIS,EAAU,GAE7CH,EAD4BhzJ,EAAKA,EAAKC,EAAKA,EACAlU,KAAKqlK,uBAEpD,GAAI4B,EAAkB,CAClB,GAAIroK,KAAKoiB,IAAIthB,EAAE,GAAKiT,EAAE,KAAO/T,KAAKoiB,IAAIthB,EAAE,GAAKiT,EAAE,IAAK,CAEhD,IAAI00J,EAAK,EAAE1nK,EAAE,GAAKgT,EAAE,IAAM,GAAIhT,EAAE,GAAKgT,EAAE,IAAM,GACzC20J,EAAQtnK,KAAKmlK,cAAckC,GAC3BE,EAAK,EAAE30J,EAAE,GAAKlT,EAAE,IAAM,GAAIkT,EAAE,GAAKlT,EAAE,IAAM,GACzC8nK,EAAQxnK,KAAKmlK,cAAcoC,GAC/BvnK,KAAKomK,SAAS1mK,EAAGC,EAAG0nK,EAAIE,EAAId,EAAMC,EAAMY,EAAOE,EAAOrB,EAAiB,GACvEnmK,KAAKomK,SAASmB,EAAIF,EAAI10J,EAAGC,EAAG40J,EAAOF,EAAOX,EAAMC,EAAMT,EAAiB,OAEtE,CAED,IAAIlwI,EAAK,EAAEv2B,EAAE,GAAKC,EAAE,IAAM,GAAID,EAAE,GAAKC,EAAE,IAAM,GACzC8nK,EAAQznK,KAAKmlK,cAAclvI,GAC3ByxI,EAAK,EAAE/0J,EAAE,GAAKC,EAAE,IAAM,GAAID,EAAE,GAAKC,EAAE,IAAM,GACzC+0J,EAAQ3nK,KAAKmlK,cAAcuC,GAC/B1nK,KAAKomK,SAAS1mK,EAAGu2B,EAAIyxI,EAAI90J,EAAG6zJ,EAAMgB,EAAOE,EAAOf,EAAMT,EAAiB,GACvEnmK,KAAKomK,SAASnwI,EAAIt2B,EAAGgT,EAAG+0J,EAAID,EAAOf,EAAMC,EAAMgB,EAAOxB,EAAiB,GAE3E,QAGR,GAAIa,EAAQ,CACR,IAAKhnK,KAAKwlK,kBACN,OAEJxlK,KAAKulK,iBAAkB,EAMA,IAAR,GAAd4B,IACDnnK,KAAKwmK,aAAa9mK,EAAGiT,EAAGC,EAAG6zJ,EAAME,EAAMC,GAEhB,IAAR,GAAdO,IACDnnK,KAAKwmK,aAAa9mK,EAAGiT,EAAGhT,EAAG8mK,EAAME,EAAMD,GAEvCS,IAE2B,IAAR,GAAdA,IACDnnK,KAAKwmK,aAAa7mK,EAAGiT,EAAGlT,EAAGgnK,EAAME,EAAMH,GAEhB,IAAR,EAAdU,IACDnnK,KAAKwmK,aAAa7mK,EAAGiT,EAAGD,EAAG+zJ,EAAME,EAAMD,MASnDnC,EAAcliK,UAAUslK,sBAAwB,WAC5C,IAAIz7D,GAAS,UAOb,OANAnsG,KAAKslK,WAAW55J,SAAQ,SAAU46J,EAAUhnK,EAAGrB,GAC3C,IAAI81G,EAAMuyD,EAAS1vJ,QACnB,QAAiBu1F,EAAQ4H,EAAI,KAC7B,QAAiB5H,EAAQ4H,EAAI,KAC7B,QAAiB5H,EAAQ4H,EAAI,OAE1B5H,GAKXq4D,EAAcliK,UAAUulK,aAAe,WACnC,OAAO7nK,KAAKslK,YAETd,EAxUuB,GCtBvBsD,EAA2B,CAClCrM,uBAAuB,EACvBsM,yBAAyB,cFM7B,SAASC,EAAiBt0I,EAAKu0I,EAAIjxI,EAAIkxI,EAAIjxI,GACvCvD,EAAIulH,YACJvlH,EAAIwlH,OAAO,EAAG,GACdxlH,EAAIylH,OAAO8uB,EAAIjxI,GACftD,EAAIylH,OAAO+uB,EAAIjxI,GACfvD,EAAI29H,YACJ39H,EAAIqlH,OACJrlH,EAAI27E,OACJ37E,EAAI2oI,SAAS,EAAG,EAAGz9J,KAAKM,IAAI+oK,EAAIC,GAAM,EAAGtpK,KAAKM,IAAI83B,EAAIC,IACtDvD,EAAI2lH,UAUR,SAAS8uB,EAA8B1lK,EAAMq2F,GAEzC,OAAQl6F,KAAKoiB,IAAIve,EAAc,EAATq2F,GAAc,KAAO,GACvCl6F,KAAKoiB,IAAIve,EAAc,EAATq2F,EAAa,GAAK,QAAc,EAuC/C,SAASsvE,EAA0B3D,EAAYC,EAAYjmC,EAAcE,GAC5E,IAAIH,GAAe,QAAUC,EAAcimC,EAAYD,GAEnD/lC,GAAmB,QAAmBgmC,EAAY/lC,EAAkBF,GACpE4pC,EAAsB3D,EAAW7oC,wBACTzuH,IAAxBi7J,IACA3pC,GAAoB2pC,GAExB,IAAIC,EAAsB7D,EAAW5oC,wBACTzuH,IAAxBk7J,IACA5pC,GAAoB4pC,GAKxB,IAAIC,EAAe9D,EAAWhxD,YAC9B,IAAK80D,IAAgB,QAAmBA,EAAc/pC,GAAe,CACjE,IAAIgqC,GAAqB,QAAmB/D,EAAY/lC,EAAkBF,GACtEE,EACAl1G,SAASg/I,IAAuBA,EAAqB,IACrD9pC,GAAoB8pC,GAG5B,OAAO9pC,EA+CJ,SAASrkB,EAAOlB,EAAOn3G,EAAQoxG,EAAYsrB,EAAkB6pC,EAAc5pC,EAAkBgmC,EAAc8D,EAAeC,EAAS9uB,EAAQ+uB,EAAiBC,GAC/J,IAAI1jJ,GAAU,QAAsBtmB,KAAK4L,MAAM4oG,EAAa+F,GAAQv6G,KAAK4L,MAAM4oG,EAAapxG,IAE5F,IADA,QAAOkjB,EAAS0jJ,GACO,IAAnBF,EAAQnqK,OACR,OAAO2mB,EAAQ8nH,OAGnB,SAAS67B,EAAWjgK,GAChB,OAAOhK,KAAK4L,MAAM5B,EAAQwqG,GAAcA,EAF5CluF,EAAQmtD,MAAM+gC,EAAYA,GAI1BluF,EAAQ4jJ,yBAA2B,UACnC,IAAIC,GAAmB,UACvBL,EAAQh9J,SAAQ,SAAUqoG,EAAKz0G,EAAGrB,IAC9B,QAAO8qK,EAAkBh1D,EAAI5H,WAEjC,IAAI68D,GAAqB,QAASD,GAC9BE,GAAsB,QAAUF,GAChCG,GAAgB,QAAsBtqK,KAAK4L,MAAO4oG,EAAa41D,EAAsBtqC,GAAmB9/H,KAAK4L,MAAO4oG,EAAa61D,EAAuBvqC,KAC5J,QAAOwqC,EAAeN,GACtB,IAAIO,EAAc/1D,EAAasrB,EAC/BgqC,EAAQh9J,SAAQ,SAAUqoG,EAAKz0G,EAAGrB,GAC9B,IAAImrK,EAAOr1D,EAAI5H,OAAO,GAAK48D,EAAiB,GACxCM,IAASt1D,EAAI5H,OAAO,GAAK48D,EAAiB,IAC1CO,GAAW,QAASv1D,EAAI5H,QACxBo9D,GAAY,QAAUx1D,EAAI5H,QAE1B4H,EAAIc,MAAMsE,MAAQ,GAAKpF,EAAIc,MAAM7yG,OAAS,GAC1CknK,EAAcjvB,UAAUlmC,EAAIc,MAAO+kC,EAAQA,EAAQ7lC,EAAIc,MAAMsE,MAAQ,EAAIygC,EAAQ7lC,EAAIc,MAAM7yG,OAAS,EAAI43I,EAAQwvB,EAAOD,EAAaE,EAAOF,EAAaG,EAAWH,EAAaI,EAAYJ,MAGpM,IAAIK,GAAgB,QAAW7E,GA8G/B,OA7GA8D,EAAcZ,eAAen8J,SAAQ,SAAU46J,EAAUhnK,EAAGrB,GAqBxD,IAAI2Y,EAAS0vJ,EAAS1vJ,OAClB2M,EAAS+iJ,EAAS/iJ,OAClBlP,EAAKuC,EAAO,GAAG,GAAItC,EAAKsC,EAAO,GAAG,GAClCrC,EAAKqC,EAAO,GAAG,GAAIpC,EAAKoC,EAAO,GAAG,GAClCnC,EAAKmC,EAAO,GAAG,GAAIlC,EAAKkC,EAAO,GAAG,GAElC6yJ,EAAKZ,GAAYtlJ,EAAO,GAAG,GAAKimJ,EAAc,IAAM7qC,GACpD52B,EAAK8gE,IAAatlJ,EAAO,GAAG,GAAKimJ,EAAc,IAAM7qC,GACrDspC,EAAKY,GAAYtlJ,EAAO,GAAG,GAAKimJ,EAAc,IAAM7qC,GACpD3nG,EAAK6xI,IAAatlJ,EAAO,GAAG,GAAKimJ,EAAc,IAAM7qC,GACrDupC,EAAKW,GAAYtlJ,EAAO,GAAG,GAAKimJ,EAAc,IAAM7qC,GACpD1nG,EAAK4xI,IAAatlJ,EAAO,GAAG,GAAKimJ,EAAc,IAAM7qC,GAIrD+qC,EAAwBr1J,EACxBs1J,EAAwBr1J,EAC5BD,EAAK,EACLC,EAAK,EAKL,IAAIs1J,EAAkB,CAClB,CALJr1J,GAAMm1J,EACNl1J,GAAMm1J,EAIO,EAAG,EAAG1B,EAAKwB,GACpB,CAJJh1J,GAAMi1J,EACNh1J,GAAMi1J,EAGO,EAAG,EAAGzB,EAAKuB,GACpB,CAAC,EAAG,EAAGl1J,EAAIC,EAAIwiB,EAAK+wE,GACpB,CAAC,EAAG,EAAGtzF,EAAIC,EAAIuiB,EAAK8wE,IAEpB8hE,GAAc,QAAkBD,GACpC,GAAKC,EAAL,CAKA,GAFA3kJ,EAAQ6zH,OACR7zH,EAAQ+zH,YAvLhB,WACI,QAAiC7rI,IAA7B62J,EAAwC,CACxC,IAAIvwI,EAAMqlF,SAASC,cAAc,UAAUr5C,WAAW,MACtDjsC,EAAIo1I,yBAA2B,UAC/Bp1I,EAAImrH,UAAY,wBAChBmpB,EAAiBt0I,EAAK,EAAG,EAAG,EAAG,GAC/Bs0I,EAAiBt0I,EAAK,EAAG,EAAG,EAAG,GAC/B,IAAIjxB,EAAOixB,EAAIqgI,aAAa,EAAG,EAAG,EAAG,GAAGtxJ,KACxCwhK,EACIkE,EAA8B1lK,EAAM,IAChC0lK,EAA8B1lK,EAAM,IACpC0lK,EAA8B1lK,EAAM,GAEhD,OAAOwhK,EA2KC6F,IACAlB,IAAuBd,EAA0B,CAEjD5iJ,EAAQg0H,OAAO+uB,EAAIjxI,GAKnB,IAHA,IACI+yI,EAAKN,EAAKxB,EACV+B,EAAKjiE,EAAK/wE,EACLsL,EAAO,EAAGA,EAHP,EAGqBA,IAE7Bpd,EAAQi0H,OAAO8uB,EAAKY,GAAavmI,EAAO,GAAKynI,EALrC,GAKmD/yI,EAAK6xI,EAAYvmI,EAAO0nI,EAAM,IAE7Ev3E,GAARnwD,GACApd,EAAQi0H,OAAO8uB,EAAKY,GAAavmI,EAAO,GAAKynI,EARzC,GAQuD/yI,EAAK6xI,GAAavmI,EAAO,GAAK0nI,EAAM,IAIvG9kJ,EAAQi0H,OAAO+uB,EAAIjxI,QAGnB/R,EAAQg0H,OAAO+uB,EAAIjxI,GACnB9R,EAAQi0H,OAAOswB,EAAI1hE,GACnB7iF,EAAQi0H,OAAO+uB,EAAIjxI,GAEvB/R,EAAQmqF,OACRnqF,EAAQ87D,UAAU6oF,EAAY,GAAIA,EAAY,GAAIA,EAAY,GAAIA,EAAY,GAAIJ,EAAI1hE,GACtF7iF,EAAQiuB,UAAU41H,EAAiB,GAAKW,EAAuBX,EAAiB,GAAKY,GACrFzkJ,EAAQmtD,MAAMqsD,EAAmBtrB,GAAasrB,EAAmBtrB,GACjEluF,EAAQ+0H,UAAUivB,EAAcl8B,OAAQ,EAAG,GAC3C9nH,EAAQm0H,cAERsvB,IACAzjJ,EAAQ6zH,OACR7zH,EAAQ4jJ,yBAA2B,cACnC5jJ,EAAQ45H,YAAc,QACtB55H,EAAQ09H,UAAY,EACpB6lB,EAAcZ,eAAen8J,SAAQ,SAAU46J,EAAUhnK,EAAGrB,GACxD,IAAIslB,EAAS+iJ,EAAS/iJ,OAClBkmJ,GAAMlmJ,EAAO,GAAG,GAAKimJ,EAAc,IAAM7qC,EACzC52B,IAAOxkF,EAAO,GAAG,GAAKimJ,EAAc,IAAM7qC,EAC1CspC,GAAM1kJ,EAAO,GAAG,GAAKimJ,EAAc,IAAM7qC,EACzC3nG,IAAOzT,EAAO,GAAG,GAAKimJ,EAAc,IAAM7qC,EAC1CupC,GAAM3kJ,EAAO,GAAG,GAAKimJ,EAAc,IAAM7qC,EACzC1nG,IAAO1T,EAAO,GAAG,GAAKimJ,EAAc,IAAM7qC,EAC9Cz5G,EAAQ+zH,YACR/zH,EAAQg0H,OAAO+uB,EAAIjxI,GACnB9R,EAAQi0H,OAAOswB,EAAI1hE,GACnB7iF,EAAQi0H,OAAO+uB,EAAIjxI,GACnB/R,EAAQmsI,YACRnsI,EAAQugI,YAEZvgI,EAAQm0H,WAELn0H,EAAQ8nH,sBGnSf,EAAwC,WACxC,IAAIv7B,EAAgB,SAAU7+F,EAAGjT,GAI7B,OAHA8xG,EAAgB/oG,OAAOipG,gBAClB,CAAE3pF,UAAW,cAAgB/gB,OAAS,SAAU2L,EAAGjT,GAAKiT,EAAEoV,UAAYroB,IACvE,SAAUiT,EAAGjT,GAAK,IAAK,IAAIqB,KAAKrB,EAAO+I,OAAOpG,UAAUqiB,eAAe/U,KAAKjQ,EAAGqB,KAAI4R,EAAE5R,GAAKrB,EAAEqB,KACzFywG,EAAc7+F,EAAGjT,IAE5B,OAAO,SAAUiT,EAAGjT,GAChB,GAAiB,oBAANA,GAA0B,OAANA,EAC3B,MAAM,IAAI6jB,UAAU,uBAAyB6G,OAAO1qB,GAAK,iCAE7D,SAASiyG,IAAO5xG,KAAKwL,YAAcoH,EADnC6+F,EAAc7+F,EAAGjT,GAEjBiT,EAAEtQ,UAAkB,OAAN3C,EAAa+I,OAAOojC,OAAOnsC,IAAMiyG,EAAGtvG,UAAY3C,EAAE2C,UAAW,IAAIsvG,IAZ3C,GAoCxCq4D,EAA4B,SAAUl4D,GAiBtC,SAASk4D,EAAWxF,EAAYyF,EAAgBxF,EAAYyF,EAAgBjyC,EAAWkyC,EAAkBh3D,EAAYwmC,EAAQywB,EAAiBC,EAAoB3B,EAAiBC,GAC/K,IAAInvI,EAAQs4E,EAAOniG,KAAK5P,KAAMk4H,EAAW/X,EAAA,SAAmBngH,KAK5Dy5B,EAAM8wI,kBAAmCn9J,IAApBu7J,GAAgCA,EAKrDlvI,EAAM+wI,gBAAkB5B,EAKxBnvI,EAAM65E,YAAcF,EAKpB35E,EAAMgxI,QAAU7wB,EAKhBngH,EAAMixI,QAAU,KAKhBjxI,EAAMkxI,gBAAkBT,EAKxBzwI,EAAMmxI,gBAAkBT,EAKxB1wI,EAAMoxI,kBAAoBT,GAAsClyC,EAKhEz+F,EAAMqxI,aAAe,GAKrBrxI,EAAMsxI,qBAAuB,KAK7BtxI,EAAMuxI,SAAW,EACjB,IAAIrG,EAAewF,EAAe/xB,mBAAmB3+G,EAAMoxI,mBACvDI,EAAkBxxI,EAAMmxI,gBAAgBn3D,YACxCmxD,EAAkBnrI,EAAMkxI,gBAAgBl3D,YACxCy3D,EAAsBD,GACpB,QAAgBtG,EAAcsG,GAC9BtG,EACN,GAAqC,KAAjC,QAAQuG,GAIR,OADAzxI,EAAM45E,MAAQ8M,EAAA,QACP1mF,EAEX,IAAI0xI,EAAmB1G,EAAWhxD,YAC9B03D,IAKIvG,EAJCA,GAIiB,QAAgBA,EAAiBuG,GAHjCA,GAM1B,IAAIxsC,EAAmBwrC,EAAev2D,cAAcn6E,EAAMoxI,kBAAkB,IACxEnsC,EHdL,SAAyC+lC,EAAYC,EAAYC,EAAchmC,GAClF,IAAIF,GAAe,QAAUkmC,GACzBjmC,EAAmB0pC,EAA0B3D,EAAYC,EAAYjmC,EAAcE,GAOvF,QANKn1G,SAASk1G,IAAqBA,GAAoB,KACnD,QAAcimC,GAAc,SAAUyG,GAElC,OADA1sC,EAAmB0pC,EAA0B3D,EAAYC,EAAY0G,EAAQzsC,GACtEn1G,SAASk1G,IAAqBA,EAAmB,KAGzDA,EGKoB2sC,CAAgC5G,EAAYC,EAAYwG,EAAqBvsC,GACpG,IAAKn1G,SAASk1G,IAAqBA,GAAoB,EAInD,OADAjlG,EAAM45E,MAAQ8M,EAAA,QACP1mF,EAEX,IAAI6xI,OAAgDl+J,IAAvBk9J,EAAmCA,ECnI3C,GDyIrB,GADA7wI,EAAM8xI,eAAiB,IAAI,EAAc9G,EAAYC,EAAYwG,EAAqBtG,EAAiBlmC,EAAmB4sC,EAAwB3sC,GAC/F,IAA/CllG,EAAM8xI,eAAe1D,eAAetpK,OAGpC,OADAk7B,EAAM45E,MAAQ8M,EAAA,QACP1mF,EAEXA,EAAMuxI,SAAWd,EAAez0B,kBAAkB/W,GAClD,IAAI6pC,EAAe9uI,EAAM8xI,eAAe3D,wBAUxC,GATIhD,IACIH,EAAWxtD,YACXsxD,EAAa,IAAK,QAAMA,EAAa,GAAI3D,EAAgB,GAAIA,EAAgB,IAC7E2D,EAAa,IAAK,QAAMA,EAAa,GAAI3D,EAAgB,GAAIA,EAAgB,KAG7E2D,GAAe,QAAgBA,EAAc3D,KAGhD,QAAQ2D,GAGR,CAED,IADA,IAAIiD,EAActB,EAAen0B,0BAA0BwyB,EAAc9uI,EAAMuxI,UACtES,EAAOD,EAAYrqK,KAAMsqK,GAAQD,EAAYnqK,KAAMoqK,IACxD,IAAK,IAAIC,EAAOF,EAAYpqK,KAAMsqK,GAAQF,EAAYlqK,KAAMoqK,IAAQ,CAChE,IAAIxrD,EAAOmqD,EAAgB5wI,EAAMuxI,SAAUS,EAAMC,EAAMt4D,GACnD8M,GACAzmF,EAAMqxI,aAAazoK,KAAK69G,GAIF,IAA9BzmF,EAAMqxI,aAAavsK,SACnBk7B,EAAM45E,MAAQ8M,EAAA,cAblB1mF,EAAM45E,MAAQ8M,EAAA,QAgBlB,OAAO1mF,EAwFX,OArOA,EAAUwwI,EAAYl4D,GAmJtBk4D,EAAW3nK,UAAUoxG,SAAW,WAC5B,OAAO1zG,KAAK0qK,SAKhBT,EAAW3nK,UAAUqpK,WAAa,WAC9B,IAAIjD,EAAU,GAUd,GATA1oK,KAAK8qK,aAAap/J,QAAQ,SAAUw0G,EAAM5gH,EAAGrB,GACrCiiH,GAAQA,EAAKrM,YAAcsM,EAAA,UAC3BuoD,EAAQrmK,KAAK,CACT8pG,OAAQnsG,KAAK2qK,gBAAgBvyB,mBAAmBl4B,EAAKgY,WACrDrjB,MAAOqL,EAAKxM,cAGtBlkG,KAAKxP,OACPA,KAAK8qK,aAAavsK,OAAS,EACJ,IAAnBmqK,EAAQnqK,OACRyB,KAAKqzG,MAAQ8M,EAAA,YAEZ,CACD,IAAIxhH,EAAIqB,KAAK6qK,kBAAkB,GAC3Bp2I,EAAOz0B,KAAK4qK,gBAAgBgB,YAAYjtK,GACxCw6G,EAAwB,kBAAT1kF,EAAoBA,EAAOA,EAAK,GAC/CzyB,EAAyB,kBAATyyB,EAAoBA,EAAOA,EAAK,GAChDkqG,EAAmB3+H,KAAK4qK,gBAAgBh3D,cAAcj1G,GACtD+/H,EAAmB1+H,KAAK2qK,gBAAgB/2D,cAAc5zG,KAAKgrK,UAC3DrG,EAAe3kK,KAAK4qK,gBAAgBxyB,mBAAmBp4I,KAAK6qK,mBAChE7qK,KAAK0qK,QAAUrwD,EAAkBlB,EAAOn3G,EAAQhC,KAAKszG,YAAaorB,EAAkB1+H,KAAK2qK,gBAAgBl3D,YAAakrB,EAAkBgmC,EAAc3kK,KAAKurK,eAAgB7C,EAAS1oK,KAAKyqK,QAASzqK,KAAKuqK,aAAcvqK,KAAKwqK,iBAC1NxqK,KAAKqzG,MAAQ8M,EAAA,SAEjBngH,KAAKuzG,WAKT02D,EAAW3nK,UAAUS,KAAO,WACxB,GAAI/C,KAAKqzG,OAAS8M,EAAA,OAAgB,CAC9BngH,KAAKqzG,MAAQ8M,EAAA,UACbngH,KAAKuzG,UACL,IAAIs4D,EAAe,EACnB7rK,KAAK+qK,qBAAuB,GAC5B/qK,KAAK8qK,aAAap/J,QAAQ,SAAUw0G,EAAM5gH,EAAGrB,GACzC,IAAIo1G,EAAQ6M,EAAKrM,WACjB,GAAIR,GAAS8M,EAAA,QAAkB9M,GAAS8M,EAAA,UAAmB,CACvD0rD,IACA,IAAIC,GAAoB,QAAO5rD,EAAM1M,EAAA,UAAkB,SAAUxjG,GAC7D,IAAIqjG,EAAQ6M,EAAKrM,WACbR,GAAS8M,EAAA,UACT9M,GAAS8M,EAAA,SACT9M,GAAS8M,EAAA,WACT,QAAc2rD,GAEO,MADrBD,IAEI7rK,KAAK+rK,mBACL/rK,KAAK2rK,iBAGd3rK,MACHA,KAAK+qK,qBAAqB1oK,KAAKypK,KAErCt8J,KAAKxP,OACc,IAAjB6rK,EACAhvD,WAAW78G,KAAK2rK,WAAWn8J,KAAKxP,MAAO,GAGvCA,KAAK8qK,aAAap/J,SAAQ,SAAUw0G,EAAM5gH,EAAGrB,GAC7BiiH,EAAKrM,YACJsM,EAAA,QACTD,EAAKn9G,YASzBknK,EAAW3nK,UAAUypK,iBAAmB,WACpC/rK,KAAK+qK,qBAAqBr/J,QAAQ,MAClC1L,KAAK+qK,qBAAuB,MAEzBd,EAtOoB,CAuO7B,GACF,eExPI+B,EAA0B,WAI1B,SAASA,EAASC,GAMdjsK,KAAKksK,mBACqB9+J,IAAtB6+J,EAAkCA,EAAoB,KAK1DjsK,KAAKmsK,OAAS,EAKdnsK,KAAKosK,SAAW,GAKhBpsK,KAAKqsK,QAAU,KAKfrsK,KAAKssK,QAAU,KAiMnB,OA5LAN,EAAS1pK,UAAU63I,eAAiB,WAChC,OAAOn6I,KAAKksK,cAAgB,GAAKlsK,KAAK4+G,WAAa5+G,KAAKksK,eAK5DF,EAAS1pK,UAAUjC,MAAQ,WACvBL,KAAKmsK,OAAS,EACdnsK,KAAKosK,SAAW,GAChBpsK,KAAKqsK,QAAU,KACfrsK,KAAKssK,QAAU,MAMnBN,EAAS1pK,UAAUiqK,YAAc,SAAU/1J,GACvC,OAAOxW,KAAKosK,SAASznJ,eAAenO,IAQxCw1J,EAAS1pK,UAAUoJ,QAAU,SAAUyP,GAEnC,IADA,IAAI8zF,EAAQjvG,KAAKqsK,QACVp9D,GACH9zF,EAAE8zF,EAAMu9D,OAAQv9D,EAAMw9D,KAAMzsK,MAC5BivG,EAAQA,EAAMy9D,OAQtBV,EAAS1pK,UAAUslB,IAAM,SAAUpR,EAAK47F,GACpC,IAAInD,EAAQjvG,KAAKosK,SAAS51J,GAE1B,OADA,YAAiBpJ,IAAV6hG,EAAqB,IACxBA,IAAUjvG,KAAKssK,UAGVr9D,IAAUjvG,KAAKqsK,SACpBrsK,KAAKqsK,QAAgCrsK,KAAKqsK,QAAa,MACvDrsK,KAAKqsK,QAAQM,MAAQ,OAGrB19D,EAAMy9D,MAAMC,MAAQ19D,EAAM09D,MAC1B19D,EAAM09D,MAAMD,MAAQz9D,EAAMy9D,OAE9Bz9D,EAAMy9D,MAAQ,KACdz9D,EAAM09D,MAAQ3sK,KAAKssK,QACnBtsK,KAAKssK,QAAQI,MAAQz9D,EACrBjvG,KAAKssK,QAAUr9D,GAbJA,EAAMu9D,QAqBrBR,EAAS1pK,UAAUgB,OAAS,SAAUkT,GAClC,IAAIy4F,EAAQjvG,KAAKosK,SAAS51J,GAoB1B,OAnBA,YAAiBpJ,IAAV6hG,EAAqB,IACxBA,IAAUjvG,KAAKssK,SACftsK,KAAKssK,QAAgCr9D,EAAW,MAC5CjvG,KAAKssK,UACLtsK,KAAKssK,QAAQI,MAAQ,OAGpBz9D,IAAUjvG,KAAKqsK,SACpBrsK,KAAKqsK,QAAgCp9D,EAAW,MAC5CjvG,KAAKqsK,UACLrsK,KAAKqsK,QAAQM,MAAQ,QAIzB19D,EAAMy9D,MAAMC,MAAQ19D,EAAM09D,MAC1B19D,EAAM09D,MAAMD,MAAQz9D,EAAMy9D,cAEvB1sK,KAAKosK,SAAS51J,KACnBxW,KAAKmsK,OACAl9D,EAAMu9D,QAKjBR,EAAS1pK,UAAUs8G,SAAW,WAC1B,OAAO5+G,KAAKmsK,QAKhBH,EAAS1pK,UAAUu+J,QAAU,WACzB,IAEI5xD,EAFA73F,EAAO,IAAInQ,MAAMjH,KAAKmsK,QACtB7sK,EAAI,EAER,IAAK2vG,EAAQjvG,KAAKssK,QAASr9D,EAAOA,EAAQA,EAAM09D,MAC5Cv1J,EAAK9X,KAAO2vG,EAAMw9D,KAEtB,OAAOr1J,GAKX40J,EAAS1pK,UAAUsqK,UAAY,WAC3B,IAEI39D,EAFAh7E,EAAS,IAAIhtB,MAAMjH,KAAKmsK,QACxB7sK,EAAI,EAER,IAAK2vG,EAAQjvG,KAAKssK,QAASr9D,EAAOA,EAAQA,EAAM09D,MAC5C14I,EAAO30B,KAAO2vG,EAAMu9D,OAExB,OAAOv4I,GAKX+3I,EAAS1pK,UAAUuqK,SAAW,WAC1B,OAAO7sK,KAAKqsK,QAAQG,QAKxBR,EAAS1pK,UAAUwqK,YAAc,WAC7B,OAAO9sK,KAAKqsK,QAAQI,MAMxBT,EAAS1pK,UAAUyqK,aAAe,WAC9B,OAAO/sK,KAAKssK,QAAQG,MAKxBT,EAAS1pK,UAAUF,IAAM,WACrB,IAAI6sG,EAAQjvG,KAAKqsK,QAUjB,cATOrsK,KAAKosK,SAASn9D,EAAMw9D,MACvBx9D,EAAMy9D,QACNz9D,EAAMy9D,MAAMC,MAAQ,MAExB3sK,KAAKqsK,QAAgCp9D,EAAW,MAC3CjvG,KAAKqsK,UACNrsK,KAAKssK,QAAU,QAEjBtsK,KAAKmsK,OACAl9D,EAAMu9D,QAMjBR,EAAS1pK,UAAUiiB,QAAU,SAAU/N,EAAK5N,GACxC5I,KAAK4nB,IAAIpR,GACTxW,KAAKosK,SAAS51J,GAAKg2J,OAAS5jK,GAMhCojK,EAAS1pK,UAAU4Y,IAAM,SAAU1E,EAAK5N,IACpC,SAAS4N,KAAOxW,KAAKosK,UAAW,IAChC,IAAIn9D,EAAQ,CACRw9D,KAAMj2J,EACNk2J,MAAO,KACPC,MAAO3sK,KAAKssK,QACZE,OAAQ5jK,GAEP5I,KAAKssK,QAINtsK,KAAKssK,QAAQI,MAAQz9D,EAHrBjvG,KAAKqsK,QAAUp9D,EAKnBjvG,KAAKssK,QAAUr9D,EACfjvG,KAAKosK,SAAS51J,GAAOy4F,IACnBjvG,KAAKmsK,QAOXH,EAAS1pK,UAAUwnH,QAAU,SAAUr1F,GACnCz0B,KAAKksK,cAAgBz3I,GAElBu3I,EAhOkB,GAkO7B,ICtOO,SAAS1zC,EAAe35H,EAAGwV,EAAGC,EAAG44J,GACpC,YAAsB5/J,IAAlB4/J,GACAA,EAAc,GAAKruK,EACnBquK,EAAc,GAAK74J,EACnB64J,EAAc,GAAK54J,EACZ44J,GAGA,CAACruK,EAAGwV,EAAGC,GASf,SAAS64J,EAAUtuK,EAAGwV,EAAGC,GAC5B,OAAOzV,EAAI,IAAMwV,EAAI,IAAMC,EAOxB,SAASwsC,EAAOs3E,GACnB,OAAO+0C,EAAU/0C,EAAU,GAAIA,EAAU,GAAIA,EAAU,IC1C3D,IAAI,EAAwC,WACxC,IAAIzmB,EAAgB,SAAU7+F,EAAGjT,GAI7B,OAHA8xG,EAAgB/oG,OAAOipG,gBAClB,CAAE3pF,UAAW,cAAgB/gB,OAAS,SAAU2L,EAAGjT,GAAKiT,EAAEoV,UAAYroB,IACvE,SAAUiT,EAAGjT,GAAK,IAAK,IAAIqB,KAAKrB,EAAO+I,OAAOpG,UAAUqiB,eAAe/U,KAAKjQ,EAAGqB,KAAI4R,EAAE5R,GAAKrB,EAAEqB,KACzFywG,EAAc7+F,EAAGjT,IAE5B,OAAO,SAAUiT,EAAGjT,GAChB,GAAiB,oBAANA,GAA0B,OAANA,EAC3B,MAAM,IAAI6jB,UAAU,uBAAyB6G,OAAO1qB,GAAK,iCAE7D,SAASiyG,IAAO5xG,KAAKwL,YAAcoH,EADnC6+F,EAAc7+F,EAAGjT,GAEjBiT,EAAEtQ,UAAkB,OAAN3C,EAAa+I,OAAOojC,OAAOnsC,IAAMiyG,EAAGtvG,UAAY3C,EAAE2C,UAAW,IAAIsvG,IAZ3C,GAoBxCs7D,EAA2B,SAAUn7D,GAErC,SAASm7D,IACL,OAAkB,OAAXn7D,GAAmBA,EAAO7tG,MAAMlE,KAAMmQ,YAAcnQ,KAiC/D,OAnCA,EAAUktK,EAAWn7D,GAOrBm7D,EAAU5qK,UAAU+3I,YAAc,SAAU9wB,GACxC,KAAOvpH,KAAKm6I,kBAAkB,CAE1B,GADWn6I,KAAK6sK,WACPjsH,WAAY2oE,EACjB,MAGAvpH,KAAKoC,MAAM0hK,YAOvBoJ,EAAU5qK,UAAU6qK,mBAAqB,WACrC,GAAwB,IAApBntK,KAAK4+G,WAAT,CAGA,IACIsZ,EDcL,SAAiB1hH,GACpB,OAAOA,EAAI8b,MAAM,KAAKpoB,IAAIkR,QCfNgyJ,CADNptK,KAAK+sK,gBAEXpuK,EAAIu5H,EAAU,GAClBl4H,KAAK0L,QAAQ,SAAUw0G,GACfA,EAAKgY,UAAU,KAAOv5H,IACtBqB,KAAKsD,OAAOs9C,EAAOs/D,EAAKgY,YACxBhY,EAAK4jD,YAEXt0J,KAAKxP,SAEJktK,EApCmB,CAqC5B,GACF,ICpDA,EAMmB,gBANnB,EAaiB,cAbjB,EAmBmB,yFCVfG,EAAe,CAAC,EAAG,EAAG,GA2hB1B,EAtf8B,WAI1B,SAASC,EAAS7mK,GAed,IAAIy0H,EACJ,GAXAl7H,KAAKg7H,aAA8B5tH,IAApB3G,EAAQu0H,QAAwBv0H,EAAQu0H,QAAU,EAKjEh7H,KAAK28H,aAAel2H,EAAQ+0H,aAC5B,QAAO,QAASx7H,KAAK28H,cAAc,SAAUj9H,EAAGC,GAC5C,OAAOA,EAAID,KACZ,GAAO,KAGL+G,EAAQ8mK,QACT,IAAK,IAAIjuK,EAAI,EAAGiS,EAAKvR,KAAK28H,aAAap+H,OAAS,EAAGe,EAAIiS,IAAMjS,EACzD,GAAK47H,GAID,GAAIl7H,KAAK28H,aAAar9H,GAAKU,KAAK28H,aAAar9H,EAAI,KAAO47H,EAAY,CAChEA,OAAa9tH,EACb,YALJ8tH,EAAal7H,KAAK28H,aAAar9H,GAAKU,KAAK28H,aAAar9H,EAAI,GActEU,KAAK08H,YAAcxB,EAKnBl7H,KAAKi7H,QAAUj7H,KAAK28H,aAAap+H,OAAS,EAK1CyB,KAAKwtK,aAA6BpgK,IAAnB3G,EAAQ6sF,OAAuB7sF,EAAQ6sF,OAAS,KAK/DtzF,KAAKytK,SAAW,UACQrgK,IAApB3G,EAAQ8mK,UACRvtK,KAAKytK,SAAWhnK,EAAQ8mK,SACxB,OAAOvtK,KAAKytK,SAASlvK,QAAUyB,KAAK28H,aAAap+H,OAAQ,KAE7D,IAAI4tG,EAAS1lG,EAAQ0lG,YACN/+F,IAAX++F,GAAyBnsG,KAAKwtK,SAAYxtK,KAAKytK,WAC/CztK,KAAKwtK,SAAU,QAAWrhE,KAE9B,QAASnsG,KAAKwtK,SAAWxtK,KAAKytK,UAAcztK,KAAKwtK,UAAYxtK,KAAKytK,SAAW,IAK7EztK,KAAK0tK,WAAa,UACQtgK,IAAtB3G,EAAQknK,YACR3tK,KAAK0tK,WAAajnK,EAAQknK,WAC1B,OAAO3tK,KAAK0tK,WAAWnvK,QAAUyB,KAAK28H,aAAap+H,OAAQ,KAM/DyB,KAAK4tK,eACoBxgK,IAArB3G,EAAQonK,SACFpnK,EAAQonK,SACP7tK,KAAK0tK,WAEF,KADA,KAEd,QAAS1tK,KAAK4tK,WAAa5tK,KAAK0tK,YAC3B1tK,KAAK4tK,YAAc5tK,KAAK0tK,WAAa,IAK1C1tK,KAAKw0J,aAAqBpnJ,IAAX++F,EAAuBA,EAAS,KAK/CnsG,KAAK8tK,gBAAkB,KAKvB9tK,KAAK+tK,SAAW,CAAC,EAAG,GAKpB/tK,KAAKguK,WAAa,CAAC,EAAG,EAAG,EAAG,QACN5gK,IAAlB3G,EAAQwnK,MACRjuK,KAAK8tK,gBAAkBrnK,EAAQwnK,MAAM/jK,KAAI,SAAUuqB,EAAM91B,GACrD,IAAI05H,EAAY,IAAIJ,EAAA,EAAUr5H,KAAKQ,IAAI,EAAGq1B,EAAK,IAAK71B,KAAKM,IAAIu1B,EAAK,GAAK,GAAI,GAAI71B,KAAKQ,IAAI,EAAGq1B,EAAK,IAAK71B,KAAKM,IAAIu1B,EAAK,GAAK,GAAI,IAC5H,GAAI03E,EAAQ,CACR,IAAI+hE,EAAsBluK,KAAK+1I,0BAA0B5pC,EAAQxtG,GACjE05H,EAAUl3H,KAAOvC,KAAKM,IAAIgvK,EAAoB/sK,KAAMk3H,EAAUl3H,MAC9Dk3H,EAAUh3H,KAAOzC,KAAKQ,IAAI8uK,EAAoB7sK,KAAMg3H,EAAUh3H,MAC9Dg3H,EAAUj3H,KAAOxC,KAAKM,IAAIgvK,EAAoB9sK,KAAMi3H,EAAUj3H,MAC9Di3H,EAAU/2H,KAAO1C,KAAKQ,IAAI8uK,EAAoB5sK,KAAM+2H,EAAU/2H,MAElE,OAAO+2H,IACRr4H,MAEEmsG,GACLnsG,KAAKmuK,qBAAqBhiE,GA+XlC,OApXAmhE,EAAShrK,UAAU8rK,iBAAmB,SAAUjiE,EAAQ6pB,EAAMnqH,GAE1D,IADA,IAAIwsH,EAAYr4H,KAAK+1I,0BAA0B5pC,EAAQ6pB,GAC9C12H,EAAI+4H,EAAUl3H,KAAMoQ,EAAK8mH,EAAUh3H,KAAM/B,GAAKiS,IAAMjS,EACzD,IAAK,IAAIC,EAAI84H,EAAUj3H,KAAMgrH,EAAKiM,EAAU/2H,KAAM/B,GAAK6sH,IAAM7sH,EACzDsM,EAAS,CAACmqH,EAAM12H,EAAGC,KAW/B+tK,EAAShrK,UAAUo0I,gCAAkC,SAAUxe,EAAWrsH,EAAUwiK,EAAeC,GAC/F,IAAIj2C,EAAWlkH,EAAGC,EACdm6J,EAAkB,KAClB5vK,EAAIu5H,EAAU,GAAK,EAQvB,IAPyB,IAArBl4H,KAAK08H,aACLvoH,EAAI+jH,EAAU,GACd9jH,EAAI8jH,EAAU,IAGdq2C,EAAkBvuK,KAAKo4I,mBAAmBlgB,EAAWo2C,GAElD3vK,GAAKqB,KAAKg7H,SAAS,CAStB,GARyB,IAArBh7H,KAAK08H,aACLvoH,EAAIvV,KAAKO,MAAMgV,EAAI,GACnBC,EAAIxV,KAAKO,MAAMiV,EAAI,GACnBikH,GAAY,OAAwBlkH,EAAGA,EAAGC,EAAGA,EAAGi6J,IAGhDh2C,EAAYr4H,KAAK+1I,0BAA0Bw4B,EAAiB5vK,EAAG0vK,GAE/DxiK,EAASlN,EAAG05H,GACZ,OAAO,IAET15H,EAEN,OAAO,GAOX2uK,EAAShrK,UAAUmxG,UAAY,WAC3B,OAAOzzG,KAAKw0J,SAOhB8Y,EAAShrK,UAAUo+H,WAAa,WAC5B,OAAO1gI,KAAKi7H,SAOhBqyC,EAAShrK,UAAUu+H,WAAa,WAC5B,OAAO7gI,KAAKg7H,SAQhBsyC,EAAShrK,UAAU0iJ,UAAY,SAAUrmJ,GACrC,OAAIqB,KAAKwtK,QACExtK,KAAKwtK,QAGLxtK,KAAKytK,SAAS9uK,IAS7B2uK,EAAShrK,UAAUsxG,cAAgB,SAAUj1G,GACzC,OAAOqB,KAAK28H,aAAah+H,IAO7B2uK,EAAShrK,UAAU2+H,eAAiB,WAChC,OAAOjhI,KAAK28H,cAQhB2wC,EAAShrK,UAAUk0I,2BAA6B,SAAUte,EAAWm2C,EAAeC,GAChF,GAAIp2C,EAAU,GAAKl4H,KAAKi7H,QAAS,CAC7B,GAAyB,IAArBj7H,KAAK08H,YAAmB,CACxB,IAAIv7H,EAAsB,EAAf+2H,EAAU,GACjB92H,EAAsB,EAAf82H,EAAU,GACrB,OAAO,OAAwB/2H,EAAMA,EAAO,EAAGC,EAAMA,EAAO,EAAGitK,GAEnE,IAAIE,EAAkBvuK,KAAKo4I,mBAAmBlgB,EAAWo2C,GAActuK,KAAKguK,YAC5E,OAAOhuK,KAAK+1I,0BAA0Bw4B,EAAiBr2C,EAAU,GAAK,EAAGm2C,GAE7E,OAAO,MAQXf,EAAShrK,UAAUksK,6BAA+B,SAAUt2C,EAAWv5H,EAAG0vK,GACtE,GAAI1vK,EAAIqB,KAAKi7H,SAAWt8H,EAAIqB,KAAKg7H,QAC7B,OAAO,KAEX,IAAIyzC,EAAav2C,EAAU,GACvBw2C,EAAax2C,EAAU,GACvBy2C,EAAaz2C,EAAU,GAC3B,GAAIv5H,IAAM8vK,EACN,OAAO,OAAwBC,EAAYC,EAAYD,EAAYC,EAAYN,GAEnF,GAAIruK,KAAK08H,YAAa,CAClB,IAAIx0H,EAAStJ,KAAKyF,IAAIrE,KAAK08H,YAAa/9H,EAAI8vK,GACxCttK,EAAOvC,KAAKO,MAAMuvK,EAAaxmK,GAC/B9G,EAAOxC,KAAKO,MAAMwvK,EAAazmK,GACnC,GAAIvJ,EAAI8vK,EACJ,OAAO,OAAwBttK,EAAMA,EAAMC,EAAMA,EAAMitK,GAE3D,IAAIhtK,EAAOzC,KAAKO,MAAM+I,GAAUwmK,EAAa,IAAM,EAC/CptK,EAAO1C,KAAKO,MAAM+I,GAAUymK,EAAa,IAAM,EACnD,OAAO,OAAwBxtK,EAAME,EAAMD,EAAME,EAAM+sK,GAE3D,IAAIE,EAAkBvuK,KAAKo4I,mBAAmBlgB,EAAWl4H,KAAKguK,YAC9D,OAAOhuK,KAAK+1I,0BAA0Bw4B,EAAiB5vK,EAAG0vK,IAS9Df,EAAShrK,UAAUssK,mBAAqB,SAAUjwK,EAAG05H,EAAWi2C,GAC5D,IAAIh7E,EAAStzF,KAAKglJ,UAAUrmJ,GACxBw0G,EAAanzG,KAAK4zG,cAAcj1G,GAChCkvK,GAAW,QAAO7tK,KAAK4rK,YAAYjtK,GAAIqB,KAAK+tK,UAC5C5sK,EAAOmyF,EAAO,GAAK+kC,EAAUl3H,KAAO0sK,EAAS,GAAK16D,EAClD9xG,EAAOiyF,EAAO,IAAM+kC,EAAUh3H,KAAO,GAAKwsK,EAAS,GAAK16D,EACxD/xG,EAAOkyF,EAAO,GAAK+kC,EAAUj3H,KAAOysK,EAAS,GAAK16D,EAClD7xG,EAAOgyF,EAAO,IAAM+kC,EAAU/2H,KAAO,GAAKusK,EAAS,GAAK16D,EAC5D,OAAO,QAAehyG,EAAMC,EAAMC,EAAMC,EAAMgtK,IASlDhB,EAAShrK,UAAUyzI,0BAA4B,SAAU5pC,EAAQxtG,EAAG0vK,GAChE,IAAIn2C,EAAYm1C,EAChBrtK,KAAK6uK,uBAAuB1iE,EAAO,GAAIA,EAAO,GAAIxtG,GAAG,EAAOu5H,GAC5D,IAAI/2H,EAAO+2H,EAAU,GACjB92H,EAAO82H,EAAU,GAErB,OADAl4H,KAAK6uK,uBAAuB1iE,EAAO,GAAIA,EAAO,GAAIxtG,GAAG,EAAMu5H,IACpD,OAAwB/2H,EAAM+2H,EAAU,GAAI92H,EAAM82H,EAAU,GAAIm2C,IAM3Ef,EAAShrK,UAAUk4I,mBAAqB,SAAUtiB,GAC9C,IAAI5kC,EAAStzF,KAAKglJ,UAAU9sB,EAAU,IAClC/kB,EAAanzG,KAAK4zG,cAAcskB,EAAU,IAC1C21C,GAAW,QAAO7tK,KAAK4rK,YAAY1zC,EAAU,IAAKl4H,KAAK+tK,UAC3D,MAAO,CACHz6E,EAAO,IAAM4kC,EAAU,GAAK,IAAO21C,EAAS,GAAK16D,EACjD7f,EAAO,IAAM4kC,EAAU,GAAK,IAAO21C,EAAS,GAAK16D,IAWzDm6D,EAAShrK,UAAU81I,mBAAqB,SAAUlgB,EAAWo2C,GACzD,IAAIh7E,EAAStzF,KAAKglJ,UAAU9sB,EAAU,IAClC/kB,EAAanzG,KAAK4zG,cAAcskB,EAAU,IAC1C21C,GAAW,QAAO7tK,KAAK4rK,YAAY1zC,EAAU,IAAKl4H,KAAK+tK,UACvD5sK,EAAOmyF,EAAO,GAAK4kC,EAAU,GAAK21C,EAAS,GAAK16D,EAChD/xG,EAAOkyF,EAAO,IAAM4kC,EAAU,GAAK,GAAK21C,EAAS,GAAK16D,EACtD9xG,EAAOF,EAAO0sK,EAAS,GAAK16D,EAC5B7xG,EAAOF,EAAOysK,EAAS,GAAK16D,EAChC,OAAO,QAAehyG,EAAMC,EAAMC,EAAMC,EAAMgtK,IAalDhB,EAAShrK,UAAUwsK,kCAAoC,SAAUv6H,EAAY4+D,EAAY65D,GACrF,OAAOhtK,KAAK+uK,gCAAgCx6H,EAAW,GAAIA,EAAW,GAAI4+D,GAAY,EAAO65D,IAejGM,EAAShrK,UAAUysK,gCAAkC,SAAU56J,EAAGC,EAAG++F,EAAY67D,EAA2BhC,GACxG,IAAIruK,EAAIqB,KAAKy1I,kBAAkBtiC,GAC3B9gC,EAAQ8gC,EAAanzG,KAAK4zG,cAAcj1G,GACxC20F,EAAStzF,KAAKglJ,UAAUrmJ,GACxBkvK,GAAW,QAAO7tK,KAAK4rK,YAAYjtK,GAAIqB,KAAK+tK,UAC5CkB,EAAUD,EAA4B,GAAM,EAC5CE,EAAUF,EAA4B,GAAM,EAC5CG,EAAcvwK,KAAKO,OAAOgV,EAAIm/E,EAAO,IAAM6f,EAAa87D,GACxDG,EAAcxwK,KAAKO,OAAOm0F,EAAO,GAAKl/E,GAAK++F,EAAa+7D,GACxDR,EAAcr8F,EAAQ88F,EAAetB,EAAS,GAC9Cc,EAAct8F,EAAQ+8F,EAAevB,EAAS,GASlD,OARImB,GACAN,EAAa9vK,KAAKuB,KAAKuuK,GAAc,EACrCC,EAAa/vK,KAAKuB,KAAKwuK,GAAc,IAGrCD,EAAa9vK,KAAKO,MAAMuvK,GACxBC,EAAa/vK,KAAKO,MAAMwvK,IAErBr2C,EAAwB35H,EAAG+vK,EAAYC,EAAY3B,IAiB9DM,EAAShrK,UAAUusK,uBAAyB,SAAU16J,EAAGC,EAAGzV,EAAGqwK,EAA2BhC,GACtF,IAAI15E,EAAStzF,KAAKglJ,UAAUrmJ,GACxBw0G,EAAanzG,KAAK4zG,cAAcj1G,GAChCkvK,GAAW,QAAO7tK,KAAK4rK,YAAYjtK,GAAIqB,KAAK+tK,UAC5CkB,EAAUD,EAA4B,GAAM,EAC5CE,EAAUF,EAA4B,GAAM,EAC5CG,EAAcvwK,KAAKO,OAAOgV,EAAIm/E,EAAO,IAAM6f,EAAa87D,GACxDG,EAAcxwK,KAAKO,OAAOm0F,EAAO,GAAKl/E,GAAK++F,EAAa+7D,GACxDR,EAAaS,EAActB,EAAS,GACpCc,EAAaS,EAAcvB,EAAS,GASxC,OARImB,GACAN,EAAa9vK,KAAKuB,KAAKuuK,GAAc,EACrCC,EAAa/vK,KAAKuB,KAAKwuK,GAAc,IAGrCD,EAAa9vK,KAAKO,MAAMuvK,GACxBC,EAAa/vK,KAAKO,MAAMwvK,IAErBr2C,EAAwB35H,EAAG+vK,EAAYC,EAAY3B,IAU9DM,EAAShrK,UAAU41I,yBAA2B,SAAU3jG,EAAY51C,EAAGquK,GACnE,OAAOhtK,KAAK6uK,uBAAuBt6H,EAAW,GAAIA,EAAW,GAAI51C,GAAG,EAAOquK,IAM/EM,EAAShrK,UAAU+sK,uBAAyB,SAAUn3C,GAClD,OAAOl4H,KAAK28H,aAAazE,EAAU,KAUvCo1C,EAAShrK,UAAUspK,YAAc,SAAUjtK,GACvC,OAAIqB,KAAK4tK,UACE5tK,KAAK4tK,UAGL5tK,KAAK0tK,WAAW/uK,IAO/B2uK,EAAShrK,UAAUgtK,iBAAmB,SAAU3wK,GAC5C,OAAKqB,KAAK8tK,gBAMC9tK,KAAK8tK,gBAAgBnvK,GALrBqB,KAAKw0J,QACNx0J,KAAK+1I,0BAA0B/1I,KAAKw0J,QAAS71J,GAC7C,MAuBd2uK,EAAShrK,UAAUmzI,kBAAoB,SAAUtiC,EAAYkxB,GACzD,IAAI1lI,GAAI,QAAkBqB,KAAK28H,aAAcxpB,EAAYkxB,GAAiB,GAC1E,OAAO,QAAM1lI,EAAGqB,KAAKg7H,QAASh7H,KAAKi7H,UAMvCqyC,EAAShrK,UAAU6rK,qBAAuB,SAAUhiE,GAGhD,IAFA,IAAI5tG,EAASyB,KAAK28H,aAAap+H,OAC3BgxK,EAAiB,IAAItoK,MAAM1I,GACtBI,EAAIqB,KAAKg7H,QAASr8H,EAAIJ,IAAUI,EACrC4wK,EAAe5wK,GAAKqB,KAAK+1I,0BAA0B5pC,EAAQxtG,GAE/DqB,KAAK8tK,gBAAkByB,GAEpBjC,EApfkB,cCrCtB,SAASkC,EAAiB5hE,GAC7B,IAAI2nC,EAAW3nC,EAAW6hE,qBAK1B,OAJKl6B,IACDA,EA0GD,SAA6B3nC,EAAY8hE,EAAaC,EAAcC,GAEvE,OA1EG,SAAyBzjE,EAAQujE,EAAaC,EAAcC,GAC/D,IAAIxE,OAAwBh+J,IAAfwiK,EAA2BA,EAAaC,EAAA,WACjDr0C,EAAcs0C,EAAsB3jE,EAAQujE,EAAaC,GAC7D,OAAO,IAAI,EAAS,CAChBxjE,OAAQA,EACR7Y,QAAQ,QAAU6Y,EAAQi/D,GAC1B5vC,YAAaA,EACbqyC,SAAU8B,IAmEPI,CADMC,GAAqBpiE,GACH8hE,EAAaC,EAAcC,GA5G3CK,CAAoBriE,GAC/BA,EAAWsiE,mBAAmB36B,IAE3BA,EA+EX,SAASu6B,EAAsB3jE,EAAQujE,EAAaC,EAAcQ,GAU9D,IATA,IAAIl1C,OAA0B7tH,IAAhBsiK,EAA4BA,EAAc,IACpD1tK,GAAS,QAAUmqG,GACnBgN,GAAQ,QAAShN,GACjB0hE,GAAW,aAAwBzgK,IAAjBuiK,EAA6BA,EAAe,KAC9Dn2C,EAAgB22C,EAAoB,EAClCA,EACAvxK,KAAKM,IAAIi6G,EAAQ00D,EAAS,GAAI7rK,EAAS6rK,EAAS,IAClDtvK,EAAS08H,EAAU,EACnBO,EAAc,IAAIv0H,MAAM1I,GACnBI,EAAI,EAAGA,EAAIJ,IAAUI,EAC1B68H,EAAY78H,GAAK66H,EAAgB56H,KAAKyF,IAAI,EAAG1F,GAEjD,OAAO68H,EAqBJ,SAASw0C,GAAqBpiE,GAEjC,IAAIzB,GADJyB,GAAa,QAAcA,IACH6F,YACxB,IAAKtH,EAAQ,CACT,IAAIikE,EAAQ,IAAM,KAAgBx0C,EAAA,YAAkBhuB,EAAWiuB,mBAC/D1vB,GAAS,SAAgBikE,GAAOA,EAAMA,EAAMA,GAEhD,OAAOjkE,EC7IX,IAAI,GAAwC,WACxC,IAAIsF,EAAgB,SAAU7+F,EAAGjT,GAI7B,OAHA8xG,EAAgB/oG,OAAOipG,gBAClB,CAAE3pF,UAAW,cAAgB/gB,OAAS,SAAU2L,EAAGjT,GAAKiT,EAAEoV,UAAYroB,IACvE,SAAUiT,EAAGjT,GAAK,IAAK,IAAIqB,KAAKrB,EAAO+I,OAAOpG,UAAUqiB,eAAe/U,KAAKjQ,EAAGqB,KAAI4R,EAAE5R,GAAKrB,EAAEqB,KACzFywG,EAAc7+F,EAAGjT,IAE5B,OAAO,SAAUiT,EAAGjT,GAChB,GAAiB,oBAANA,GAA0B,OAANA,EAC3B,MAAM,IAAI6jB,UAAU,uBAAyB6G,OAAO1qB,GAAK,iCAE7D,SAASiyG,IAAO5xG,KAAKwL,YAAcoH,EADnC6+F,EAAc7+F,EAAGjT,GAEjBiT,EAAEtQ,UAAkB,OAAN3C,EAAa+I,OAAOojC,OAAOnsC,IAAMiyG,EAAGtvG,UAAY3C,EAAE2C,UAAW,IAAIsvG,IAZ3C,GA2DxCy+D,GAA4B,SAAUt+D,GAKtC,SAASs+D,EAAW5pK,GAChB,IAAIgzB,EAAQs4E,EAAOniG,KAAK5P,KAAM,CAC1BksH,aAAczlH,EAAQylH,aACtBokD,wBAAyB7pK,EAAQ6pK,wBACjC1iE,WAAYnnG,EAAQmnG,WACpByF,MAAO5sG,EAAQ4sG,MACfm4B,MAAO/kI,EAAQ+kI,SACbxrI,KAINy5B,EAAMghC,GAINhhC,EAAM44E,KAIN54E,EAAM6hC,GAKN7hC,EAAM82I,aAA6BnjK,IAAnB3G,EAAQ+pK,QAAuB/pK,EAAQ+pK,OAKvD/2I,EAAMg3I,qBACyBrjK,IAA3B3G,EAAQmvI,eAA+BnvI,EAAQmvI,eAAiB,EAKpEn8G,EAAM87G,cAAgCnoI,IAArB3G,EAAQ8uI,SAAyB9uI,EAAQ8uI,SAAW,KACrE,IACIA,EAAW9uI,EAAQ8uI,SAgCvB,OA/BIA,IACA,QAAOA,EAASq2B,YAAYr2B,EAAS1U,cAH1B,CAAC,IAAK,MASrBpnG,EAAMi3I,UAAY,IAAI,EAAUjqK,EAAQw+H,WAAa,GAKrDxrG,EAAMk3I,QAAU,CAAC,EAAG,GAKpBl3I,EAAMgzI,KAAOhmK,EAAQ+P,KAAO,GAK5BijB,EAAMm3I,YAAc,CAAE93B,WAAYryI,EAAQqyI,YAQ1Cr/G,EAAMi8G,WAAajvI,EAAQivI,WAAajvI,EAAQivI,WAAa,EACtDj8G,EAgNX,OAzRA,GAAU42I,EAAYt+D,GA8EtBs+D,EAAW/tK,UAAU63I,eAAiB,WAClC,OAAOn6I,KAAK0wK,UAAUv2B,kBAM1Bk2B,EAAW/tK,UAAU+3I,YAAc,SAAUzsC,EAAY2b,GACrD,IAAImnD,EAAY1wK,KAAK6wK,0BAA0BjjE,GAC3C8iE,GACAA,EAAUr2B,YAAY9wB,IAY9B8mD,EAAW/tK,UAAU2/J,kBAAoB,SAAUr0D,EAAYjvG,EAAG05H,EAAWxsH,GACzE,IAAI6kK,EAAY1wK,KAAK6wK,0BAA0BjjE,GAC/C,IAAK8iE,EACD,OAAO,EAIX,IAFA,IACIxwD,EAAMu4B,EAAcq4B,EADpBr6B,GAAU,EAELtiI,EAAIkkH,EAAUl3H,KAAMgT,GAAKkkH,EAAUh3H,OAAQ8S,EAChD,IAAK,IAAIC,EAAIikH,EAAUj3H,KAAMgT,GAAKikH,EAAU/2H,OAAQ8S,EAChDqkI,EAAew0B,EAAUtuK,EAAGwV,EAAGC,GAC/B08J,GAAS,EACLJ,EAAUnE,YAAY9zB,KAEtBq4B,GADA5wD,EAAqDwwD,EAAU9oJ,IAAI6wH,IACrD5kC,aAAesM,EAAA,YAEzB2wD,GAA4B,IAAnBjlK,EAASq0G,IAGrB4wD,IACDr6B,GAAU,GAItB,OAAOA,GAMX45B,EAAW/tK,UAAUi2I,uBAAyB,SAAU3qC,GACpD,OAAO,GAOXyiE,EAAW/tK,UAAUs+C,OAAS,WAC1B,OAAO5gD,KAAKysK,MAOhB4D,EAAW/tK,UAAUyuK,OAAS,SAAUv6J,GAChCxW,KAAKysK,OAASj2J,IACdxW,KAAKysK,KAAOj2J,EACZxW,KAAKuzG,YAOb88D,EAAW/tK,UAAUo1I,UAAY,SAAU9pC,GACvC,OAAO5tG,KAAKuwK,SAKhBF,EAAW/tK,UAAU2+H,eAAiB,WAClC,OAAOjhI,KAAKu1I,SAAStU,kBAWzBovC,EAAW/tK,UAAUuyI,QAAU,SAAUl2I,EAAGwV,EAAGC,EAAGg/F,EAAYxF,GAC1D,OAAO,WAOXyiE,EAAW/tK,UAAU0uK,YAAc,WAC/B,OAAOhxK,KAAKu1I,UAMhB86B,EAAW/tK,UAAUkzI,yBAA2B,SAAU5nC,GACtD,OAAK5tG,KAAKu1I,SAICv1I,KAAKu1I,SAHL,EAAyB3nC,IAWxCyiE,EAAW/tK,UAAUuuK,0BAA4B,SAAUjjE,GAGvD,OAFA,QAAO,QAAW5tG,KAAK4lH,gBAAiBhY,GAAa,IAE9C5tG,KAAK0wK,WAShBL,EAAW/tK,UAAUuzI,kBAAoB,SAAUziC,GAC/C,OAAOpzG,KAAKywK,iBAQhBJ,EAAW/tK,UAAUu1I,iBAAmB,SAAUl5I,EAAGy0G,EAAYxF,GAC7D,IAAI2nC,EAAWv1I,KAAKw1I,yBAAyB5nC,GACzCgoC,EAAiB51I,KAAK61I,kBAAkBziC,GACxCy6D,GAAW,QAAOt4B,EAASq2B,YAAYjtK,GAAIqB,KAAK2wK,SACpD,OAAsB,GAAlB/6B,EACOi4B,GAGA,QAAUA,EAAUj4B,EAAgB51I,KAAK2wK,UAYxDN,EAAW/tK,UAAU2uK,+BAAiC,SAAU/4C,EAAWg5C,GACvE,IAAItjE,OAAgCxgG,IAAnB8jK,EAA+BA,EAAiBlxK,KAAK4lH,gBAClE2vB,EAAWv1I,KAAKw1I,yBAAyB5nC,GAI7C,OAHI5tG,KAAK83G,YAAclK,EAAW2tB,aAC9BrD,EDrRL,SAAeqd,EAAUrd,EAAWtqB,GACvC,IAAIjvG,EAAIu5H,EAAU,GACd5hB,EAASi/B,EAASiF,mBAAmBtiB,GACrChhB,EAAmB84D,GAAqBpiE,GAC5C,IAAK,QAAmBsJ,EAAkBZ,GAOtC,OAAO4hB,EANP,IAAI/gB,GAAa,QAASD,GACtBu0B,EAAa7sI,KAAKuB,MAAM+2G,EAAiB,GAAKZ,EAAO,IAAMa,GAE/D,OADAb,EAAO,IAAMa,EAAas0B,EACnB8J,EAAS2C,yBAAyB5hC,EAAQ33G,GC6QjC6sI,CAAM+J,EAAUrd,EAAWtqB,ILtO5C,SAA0BsqB,EAAWqd,GACxC,IAAI52I,EAAIu5H,EAAU,GACd/jH,EAAI+jH,EAAU,GACd9jH,EAAI8jH,EAAU,GAClB,GAAIqd,EAAS1U,aAAeliI,GAAKA,EAAI42I,EAAS7U,aAC1C,OAAO,EAEX,IAAIrI,EAAYkd,EAAS+5B,iBAAiB3wK,GAC1C,OAAK05H,GAIMA,EAAUF,WAAWhkH,EAAGC,GK4NxB+8J,CAAiBj5C,EAAWqd,GAAYrd,EAAY,MAM/Dm4C,EAAW/tK,UAAUjC,MAAQ,WACzBL,KAAK0wK,UAAUrwK,SAEnBgwK,EAAW/tK,UAAU8uK,QAAU,WAC3BpxK,KAAKK,QACL0xG,EAAOzvG,UAAU8uK,QAAQxhK,KAAK5P,OAOlCqwK,EAAW/tK,UAAUo4I,gBAAkB,SAAUH,EAAW3sC,GACxD,IAAI8iE,EAAY1wK,KAAK6wK,0BAA0BjjE,GAC3C2sC,EAAYm2B,EAAUxE,gBACtBwE,EAAUxE,cAAgB3xB,IAWlC81B,EAAW/tK,UAAUm4I,QAAU,SAAU97I,EAAGwV,EAAGC,EAAGw5F,KAC3CyiE,EA1RoB,CA2R7BgB,EAAA,GAMEC,GAAiC,SAAUv/D,GAM3C,SAASu/D,EAAgB3qK,EAAMu5G,GAC3B,IAAIzmF,EAAQs4E,EAAOniG,KAAK5P,KAAM2G,IAAS3G,KAOvC,OADAy5B,EAAMymF,KAAOA,EACNzmF,EAEX,OAfA,GAAU63I,EAAiBv/D,GAepBu/D,EAhByB,CAiBlCC,EAAA,IAEF,MCpWO,SAASC,GAAmBjmC,EAAUgK,GACzC,IAAIk8B,EAAS,SACTC,EAAS,SACTC,EAAS,SACTC,EAAa,UACjB,OAAO,SAOG15C,EAAW9kB,EAAYxF,GAC7B,OAAKsqB,EAIMqT,EACFhnH,QAAQktJ,EAAQv5C,EAAU,GAAG1gH,YAC7B+M,QAAQmtJ,EAAQx5C,EAAU,GAAG1gH,YAC7B+M,QAAQotJ,EAAQz5C,EAAU,GAAG1gH,YAC7B+M,QAAQqtJ,GAAY,WACrB,IAAIjzK,EAAIu5H,EAAU,GACdrkG,EAAQ0hH,EAAS+5B,iBAAiB3wK,GAGtC,OAFA,OAAOk1B,EAAO,KACNA,EAAM6e,YAAcwlF,EAAU,GAAK,GAClC1gH,mBAZb,GAsBL,SAASq6J,GAAoBC,EAAWv8B,GAG3C,IAFA,IAAI5yI,EAAMmvK,EAAUvzK,OAChBwzK,EAAmB,IAAI9qK,MAAMtE,GACxBrD,EAAI,EAAGA,EAAIqD,IAAOrD,EACvByyK,EAAiBzyK,GAAKkyK,GAAmBM,EAAUxyK,GAAIi2I,GAE3D,OAMG,SAAoCw8B,GACvC,GAAgC,IAA5BA,EAAiBxzK,OACjB,OAAOwzK,EAAiB,GAE5B,OAAO,SAOG75C,EAAW9kB,EAAYxF,GAC7B,GAAKsqB,EAGA,CACD,IAAI1xF,ENPT,SAAc0xF,GACjB,OAAQA,EAAU,IAAMA,EAAU,IAAMA,EAAU,GMMlC,CAAcA,GAClB10H,GAAQ,QAAOgjC,EAAGurI,EAAiBxzK,QACvC,OAAOwzK,EAAiBvuK,GAAO00H,EAAW9kB,EAAYxF,KAxBvDokE,CAA2BD,GCrDtC,IAAI,GAAwC,WACxC,IAAItgE,EAAgB,SAAU7+F,EAAGjT,GAI7B,OAHA8xG,EAAgB/oG,OAAOipG,gBAClB,CAAE3pF,UAAW,cAAgB/gB,OAAS,SAAU2L,EAAGjT,GAAKiT,EAAEoV,UAAYroB,IACvE,SAAUiT,EAAGjT,GAAK,IAAK,IAAIqB,KAAKrB,EAAO+I,OAAOpG,UAAUqiB,eAAe/U,KAAKjQ,EAAGqB,KAAI4R,EAAE5R,GAAKrB,EAAEqB,KACzFywG,EAAc7+F,EAAGjT,IAE5B,OAAO,SAAUiT,EAAGjT,GAChB,GAAiB,oBAANA,GAA0B,OAANA,EAC3B,MAAM,IAAI6jB,UAAU,uBAAyB6G,OAAO1qB,GAAK,iCAE7D,SAASiyG,IAAO5xG,KAAKwL,YAAcoH,EADnC6+F,EAAc7+F,EAAGjT,GAEjBiT,EAAEtQ,UAAkB,OAAN3C,EAAa+I,OAAOojC,OAAOnsC,IAAMiyG,EAAGtvG,UAAY3C,EAAE2C,UAAW,IAAIsvG,IAZ3C,GAsO5C,GArL6B,SAAUG,GAKnC,SAASkgE,EAAQxrK,GACb,IAAIgzB,EAAQs4E,EAAOniG,KAAK5P,KAAM,CAC1BksH,aAAczlH,EAAQylH,aACtB+Y,UAAWx+H,EAAQw+H,UACnBurC,OAAQ/pK,EAAQ+pK,OAChB5iE,WAAYnnG,EAAQmnG,WACpByF,MAAO5sG,EAAQ4sG,MACfkiC,SAAU9uI,EAAQ8uI,SAClBK,eAAgBnvI,EAAQmvI,eACxBpK,MAAO/kI,EAAQ+kI,MACfsN,WAAYryI,EAAQqyI,WACpBtiI,IAAK/P,EAAQ+P,IACb85J,wBAAyB7pK,EAAQ6pK,wBACjC56B,WAAYjvI,EAAQivI,cAClB11I,KA+BN,OA1BAy5B,EAAMy4I,yBACFz4I,EAAM04I,kBAAoBF,EAAQ3vK,UAAU6vK,gBAKhD14I,EAAM0qI,iBAAmB19J,EAAQ09J,iBAC7B19J,EAAQ0rK,kBACR14I,EAAM04I,gBAAkB1rK,EAAQ0rK,iBAMpC14I,EAAM24I,KAAO,KACT3rK,EAAQ2rK,KACR34I,EAAM44I,QAAQ5rK,EAAQ2rK,MAEjB3rK,EAAQ6rK,KACb74I,EAAM84I,OAAO9rK,EAAQ6rK,KAMzB74I,EAAM+4I,iBAAmB,GAClB/4I,EAiIX,OAlLA,GAAUw4I,EAASlgE,GAwDnBkgE,EAAQ3vK,UAAUmwK,oBAAsB,WACpC,OAAOzyK,KAAKmkK,kBAOhB8N,EAAQ3vK,UAAUowK,mBAAqB,WACnC,OAAOhqK,OAAOqf,eAAe/nB,MAAMmyK,kBAAoBnyK,KAAKmyK,gBACtDnyK,KAAKmyK,gBAAgB3iK,KAAKxP,MAC1BA,KAAKmyK,iBASfF,EAAQ3vK,UAAUqwK,QAAU,WACxB,OAAO3yK,KAAKoyK,MAOhBH,EAAQ3vK,UAAUs9G,iBAAmB,SAAUt+E,GAC3C,IAGI36B,EAHAu5G,EAAoD5+E,EAAY,OAChE80G,GAAM,QAAOl2B,GACb00B,EAAY10B,EAAKrM,WAEjB+gC,GAAaz0B,EAAA,WACbngH,KAAKwyK,iBAAiBp8B,IAAO,EAC7BzvI,EAAOisK,GAEFx8B,KAAOp2I,KAAKwyK,0BACVxyK,KAAKwyK,iBAAiBp8B,GAC7BzvI,EACIiuI,GAAaz0B,EAAA,QACPyyD,EACAh+B,GAAaz0B,EAAA,SACTyyD,OACAxlK,QAENA,GAARzG,GACA3G,KAAK4yG,cAAc,IAAI0+D,GAAgB3qK,EAAMu5G,KAQrD+xD,EAAQ3vK,UAAUuwK,oBAAsB,SAAU1O,GAC9CnkK,KAAK0wK,UAAUrwK,QACfL,KAAKmkK,iBAAmBA,EACxBnkK,KAAKuzG,WAQT0+D,EAAQ3vK,UAAUwwK,mBAAqB,SAAUX,EAAiB37J,GAC9DxW,KAAKmyK,gBAAkBA,EACvBnyK,KAAK0wK,UAAUvD,qBACI,qBAAR32J,EACPxW,KAAK+wK,OAAOv6J,GAGZxW,KAAKuzG,WAQb0+D,EAAQ3vK,UAAUiwK,OAAS,SAAUD,GACjC,IAAIF,ED9FL,SAAmBE,GACtB,IAAIF,EAAO,GACP1mJ,EAAQ,sBAAsBwoB,KAAKo+H,GACvC,GAAI5mJ,EAAO,CAEP,IAAIqnJ,EAAgBrnJ,EAAM,GAAG4mG,WAAW,GACpC0gD,EAAetnJ,EAAM,GAAG4mG,WAAW,GACnCD,OAAW,EACf,IAAKA,EAAW0gD,EAAe1gD,GAAY2gD,IAAgB3gD,EACvD+/C,EAAK/vK,KAAKiwK,EAAI/tJ,QAAQmH,EAAM,GAAIrB,OAAO8iI,aAAa96B,KAExD,OAAO+/C,EAGX,GADA1mJ,EAAQ,kBAAkBwoB,KAAKo+H,GACpB,CAGP,IADA,IAAIl9E,EAASxrE,SAAS8B,EAAM,GAAI,IACvBpsB,EAAIsqB,SAAS8B,EAAM,GAAI,IAAKpsB,GAAK81F,EAAQ91F,IAC9C8yK,EAAK/vK,KAAKiwK,EAAI/tJ,QAAQmH,EAAM,GAAIpsB,EAAEkY,aAEtC,OAAO46J,EAGX,OADAA,EAAK/vK,KAAKiwK,GACHF,ECuEQa,CAAUX,GACrBtyK,KAAKoyK,KAAOA,EACZpyK,KAAKqyK,QAAQD,IAOjBH,EAAQ3vK,UAAU+vK,QAAU,SAAUD,GAClCpyK,KAAKoyK,KAAOA,EACZ,IAAI57J,EAAM47J,EAAK/rK,KAAK,MAChBrG,KAAKkyK,yBACLlyK,KAAK8yK,mBAAmBjB,GAAoBO,EAAMpyK,KAAKu1I,UAAW/+H,GAGlExW,KAAK+wK,OAAOv6J,IASpBy7J,EAAQ3vK,UAAU6vK,gBAAkB,SAAUj6C,EAAW9kB,EAAYxF,KASrEqkE,EAAQ3vK,UAAUm4I,QAAU,SAAU97I,EAAGwV,EAAGC,GACxC,IAAIqkI,EAAew0B,EAAUtuK,EAAGwV,EAAGC,GAC/BpU,KAAK0wK,UAAUnE,YAAY9zB,IAC3Bz4I,KAAK0wK,UAAU9oJ,IAAI6wH,IAGpBw5B,EAnLiB,CAoL1B,ICrOE,GAAwC,WACxC,IAAIxgE,EAAgB,SAAU7+F,EAAGjT,GAI7B,OAHA8xG,EAAgB/oG,OAAOipG,gBAClB,CAAE3pF,UAAW,cAAgB/gB,OAAS,SAAU2L,EAAGjT,GAAKiT,EAAEoV,UAAYroB,IACvE,SAAUiT,EAAGjT,GAAK,IAAK,IAAIqB,KAAKrB,EAAO+I,OAAOpG,UAAUqiB,eAAe/U,KAAKjQ,EAAGqB,KAAI4R,EAAE5R,GAAKrB,EAAEqB,KACzFywG,EAAc7+F,EAAGjT,IAE5B,OAAO,SAAUiT,EAAGjT,GAChB,GAAiB,oBAANA,GAA0B,OAANA,EAC3B,MAAM,IAAI6jB,UAAU,uBAAyB6G,OAAO1qB,GAAK,iCAE7D,SAASiyG,IAAO5xG,KAAKwL,YAAcoH,EADnC6+F,EAAc7+F,EAAGjT,GAEjBiT,EAAEtQ,UAAkB,OAAN3C,EAAa+I,OAAOojC,OAAOnsC,IAAMiyG,EAAGtvG,UAAY3C,EAAE2C,UAAW,IAAIsvG,IAZ3C,GAgFxCshE,GAA2B,SAAUnhE,GAKrC,SAASmhE,EAAUzsK,GACf,IAAIgzB,EAAQs4E,EAAOniG,KAAK5P,KAAM,CAC1BksH,aAAczlH,EAAQylH,aACtB+Y,UAAWx+H,EAAQw+H,UACnBurC,OAAQ/pK,EAAQ+pK,OAChB5iE,WAAYnnG,EAAQmnG,WACpByF,MAAO5sG,EAAQ4sG,MACfkiC,SAAU9uI,EAAQ8uI,SAClB4uB,iBAAkB19J,EAAQ09J,iBACpB19J,EAAQ09J,iBACRgP,GACNv9B,eAAgBnvI,EAAQmvI,eACxBu8B,gBAAiB1rK,EAAQ0rK,gBACzBG,IAAK7rK,EAAQ6rK,IACbF,KAAM3rK,EAAQ2rK,KACd5mC,MAAO/kI,EAAQ+kI,MACfsN,WAAYryI,EAAQqyI,WACpBtiI,IAAK/P,EAAQ+P,IACb85J,wBAAyB7pK,EAAQ6pK,wBACjC56B,WAAYjvI,EAAQivI,cAClB11I,KAuCN,OAlCAy5B,EAAMu6E,iBACsB5mG,IAAxB3G,EAAQutG,YAA4BvtG,EAAQutG,YAAc,KAK9Dv6E,EAAM25I,eACoBhmK,IAAtB3G,EAAQ2sK,UAA0B3sK,EAAQ2sK,UAAY,EAK1D35I,EAAM45I,uBAAyB,GAK/B55I,EAAM65I,sBAAwB,GAK9B75I,EAAM85I,4BAA8B9sK,EAAQ+sK,2BAK5C/5I,EAAM+wI,iBACyB,IAA3B/jK,EAAQgtK,eAA2B3L,OAA2B16J,EAKlEqsB,EAAMi6I,0BAA2B,EAC1Bj6I,EAoRX,OAnVA,GAAUy5I,EAAWnhE,GAoErBmhE,EAAU5wK,UAAU63I,eAAiB,WAIjC,GAAIn6I,KAAK0wK,UAAUv2B,iBACf,OAAO,EAGP,IAAK,IAAI3jI,KAAOxW,KAAKqzK,uBACjB,GAAIrzK,KAAKqzK,uBAAuB78J,GAAK2jI,iBACjC,OAAO,EAInB,OAAO,GAMX+4B,EAAU5wK,UAAU+3I,YAAc,SAAUzsC,EAAY2b,GAKpD,IAAIoqD,EAAgB3zK,KAAK6wK,0BAA0BjjE,GAEnD,IAAK,IAAIhnG,KADT5G,KAAK0wK,UAAUr2B,YAAYr6I,KAAK0wK,WAAaiD,EAAgBpqD,EAAY,IAC1DvpH,KAAKqzK,uBAAwB,CACxC,IAAI3C,EAAY1wK,KAAKqzK,uBAAuBzsK,GAC5C8pK,EAAUr2B,YAAYq2B,GAAaiD,EAAgBpqD,EAAY,MAMvE2pD,EAAU5wK,UAAU80I,kBAAoB,WACpC,OAAOp3I,KAAKwqK,iBAMhB0I,EAAU5wK,UAAUi2I,uBAAyB,SAAU3qC,GACnD,OACI5tG,KAAK4lH,iBACLhY,KACC,QAAW5tG,KAAK4lH,gBAAiBhY,GAC3B,EAGA5tG,KAAK4zK,aAMpBV,EAAU5wK,UAAUsxK,UAAY,WAC5B,OAAO,GAOXV,EAAU5wK,UAAUs+C,OAAS,WACzB,OAAQmxD,EAAOzvG,UAAUs+C,OAAOhxC,KAAK5P,OAChCA,KAAKwqK,gBAAkB,KAAO/gJ,KAAKoqJ,UAAU7zK,KAAKwqK,iBAAmB,KAM9E0I,EAAU5wK,UAAUo1I,UAAY,SAAU9pC,GACtC,QACI5tG,KAAK4lH,iBACLhY,KACC,QAAW5tG,KAAK4lH,gBAAiBhY,KAI3BmE,EAAOzvG,UAAUo1I,UAAU9nI,KAAK5P,KAAM4tG,IAOrDslE,EAAU5wK,UAAUkzI,yBAA2B,SAAU5nC,GAIrD,IAAIkmE,EAAW9zK,KAAK4lH,gBACpB,IAAI5lH,KAAKu1I,UAAcu+B,KAAY,QAAWA,EAAUlmE,GAGnD,CACD,IAAImmE,GAAU,QAAOnmE,GAKrB,OAJMmmE,KAAW/zK,KAAKszK,wBAClBtzK,KAAKszK,sBAAsBS,GACvB,EAAyBnmE,IAE1B5tG,KAAKszK,sBAAsBS,GARlC,OAAO/zK,KAAKu1I,UAepB29B,EAAU5wK,UAAUuuK,0BAA4B,SAAUjjE,GAItD,IAAIkmE,EAAW9zK,KAAK4lH,gBACpB,IAAKkuD,IAAY,QAAWA,EAAUlmE,GAClC,OAAO5tG,KAAK0wK,UAGZ,IAAIqD,GAAU,QAAOnmE,GAIrB,OAHMmmE,KAAW/zK,KAAKqzK,yBAClBrzK,KAAKqzK,uBAAuBU,GAAW,IAAI,EAAU/zK,KAAK0wK,UAAUxE,gBAEjElsK,KAAKqzK,uBAAuBU,IAa3Cb,EAAU5wK,UAAU0xK,YAAc,SAAUr1K,EAAGwV,EAAGC,EAAGg/F,EAAYxF,EAAYp3F,GACzE,IAAI0hH,EAAY,CAACv5H,EAAGwV,EAAGC,GACnB6/J,EAAej0K,KAAKixK,+BAA+B/4C,EAAWtqB,GAC9DsmE,EAAUD,EACRj0K,KAAKmyK,gBAAgB8B,EAAc7gE,EAAYxF,QAC/CxgG,EACF8yG,EAAO,IAAIlgH,KAAKozK,UAAUl7C,OAAuB9qH,IAAZ8mK,EAAwB/zD,EAAA,OAAiBA,EAAA,aAA6B/yG,IAAZ8mK,EAAwBA,EAAU,GAAIl0K,KAAKg0G,YAAah0G,KAAKmkK,iBAAkBnkK,KAAK4wK,aAGvL,OAFA1wD,EAAK1pG,IAAMA,EACX0pG,EAAK5D,iBAAiB9I,EAAA,SAAkBxzG,KAAK4/G,iBAAiBpwG,KAAKxP,OAC5DkgH,GAUXgzD,EAAU5wK,UAAUuyI,QAAU,SAAUl2I,EAAGwV,EAAGC,EAAGg/F,EAAYxF,GACzD,IAAIumE,EAAmBn0K,KAAK4lH,gBAC5B,GACKuuD,GACAvmE,KACD,QAAWumE,EAAkBvmE,GAG5B,CACD,IAAIl0E,EAAQ15B,KAAK6wK,0BAA0BjjE,GACvCsqB,EAAY,CAACv5H,EAAGwV,EAAGC,GACnB8rG,OAAO,EACPu4B,EAAe73F,EAAOs3E,GACtBx+F,EAAM6yI,YAAY9zB,KAClBv4B,EAAOxmF,EAAM9R,IAAI6wH,IAErB,IAAIjiI,EAAMxW,KAAK4gD,SACf,GAAIs/D,GAAQA,EAAK1pG,KAAOA,EACpB,OAAO0pG,EAGP,IAAIgqD,EAAiBlqK,KAAKw1I,yBAAyB2+B,GAC/ChK,EAAiBnqK,KAAKw1I,yBAAyB5nC,GAC/Cw8D,EAAmBpqK,KAAKixK,+BAA+B/4C,EAAWtqB,GAClEwmE,EAAU,IAAI,EAAWD,EAAkBjK,EAAgBt8D,EAAYu8D,EAAgBjyC,EAAWkyC,EAAkBpqK,KAAK61I,kBAAkBziC,GAAapzG,KAAK4zK,YAAa,SAAUj1K,EAAGwV,EAAGC,EAAGg/F,GAC7L,OAAOpzG,KAAKq0K,gBAAgB11K,EAAGwV,EAAGC,EAAGg/F,EAAY+gE,IACnD3kK,KAAKxP,MAAOA,KAAKuzK,4BAA6BvzK,KAAK0zK,yBAA0B1zK,KAAKwqK,iBAUpF,OATA4J,EAAQ59J,IAAMA,EACV0pG,GACAk0D,EAAQzQ,YAAczjD,EACtBk0D,EAAQrQ,sBACRrqI,EAAMnV,QAAQk0H,EAAc27B,IAG5B16I,EAAMxe,IAAIu9H,EAAc27B,GAErBA,EA9BX,OAAOp0K,KAAKq0K,gBAAgB11K,EAAGwV,EAAGC,EAAGg/F,EAAY+gE,GAAoBvmE,IA2C7EslE,EAAU5wK,UAAU+xK,gBAAkB,SAAU11K,EAAGwV,EAAGC,EAAGg/F,EAAYxF,GACjE,IAAIsS,EAAO,KACPu4B,EAAew0B,EAAUtuK,EAAGwV,EAAGC,GAC/BoC,EAAMxW,KAAK4gD,SACf,GAAK5gD,KAAK0wK,UAAUnE,YAAY9zB,IAM5B,IADAv4B,EAAOlgH,KAAK0wK,UAAU9oJ,IAAI6wH,IACjBjiI,KAAOA,EAAK,CAIjB,IAAImtJ,EAAczjD,EAClBA,EAAOlgH,KAAKg0K,YAAYr1K,EAAGwV,EAAGC,EAAGg/F,EAAYxF,EAAYp3F,GAErDmtJ,EAAY9vD,YAAcsM,EAAA,OAE1BD,EAAKyjD,YAAcA,EAAYA,YAG/BzjD,EAAKyjD,YAAcA,EAEvBzjD,EAAK6jD,sBACL/jK,KAAK0wK,UAAUnsJ,QAAQk0H,EAAcv4B,SApBzCA,EAAOlgH,KAAKg0K,YAAYr1K,EAAGwV,EAAGC,EAAGg/F,EAAYxF,EAAYp3F,GACzDxW,KAAK0wK,UAAUx1J,IAAIu9H,EAAcv4B,GAsBrC,OAAOA,GAOXgzD,EAAU5wK,UAAUgyK,2BAA6B,SAAUj6D,GACvD,GACIr6G,KAAK0zK,0BAA4Br5D,EADrC,CAKA,IAAK,IAAIzzG,KADT5G,KAAK0zK,yBAA2Br5D,EACjBr6G,KAAKqzK,uBAChBrzK,KAAKqzK,uBAAuBzsK,GAAIvG,QAEpCL,KAAKuzG,YAcT2/D,EAAU5wK,UAAUiyK,yBAA2B,SAAU3mE,EAAY4mE,GAE7D,IAAIC,GAAO,QAAc7mE,GACzB,GAAI6mE,EAAM,CACN,IAAIV,GAAU,QAAOU,GACfV,KAAW/zK,KAAKszK,wBAClBtzK,KAAKszK,sBAAsBS,GAAWS,KAK/CtB,EApVmB,CAqV5B,IAKF,SAASC,GAAwBuB,EAAW3gE,GACU2gE,EAAUhhE,WAAYK,IACpEA,EAER,UC3aI,GAAwC,WACxC,IAAItC,EAAgB,SAAU7+F,EAAGjT,GAI7B,OAHA8xG,EAAgB/oG,OAAOipG,gBAClB,CAAE3pF,UAAW,cAAgB/gB,OAAS,SAAU2L,EAAGjT,GAAKiT,EAAEoV,UAAYroB,IACvE,SAAUiT,EAAGjT,GAAK,IAAK,IAAIqB,KAAKrB,EAAO+I,OAAOpG,UAAUqiB,eAAe/U,KAAKjQ,EAAGqB,KAAI4R,EAAE5R,GAAKrB,EAAEqB,KACzFywG,EAAc7+F,EAAGjT,IAE5B,OAAO,SAAUiT,EAAGjT,GAChB,GAAiB,oBAANA,GAA0B,OAANA,EAC3B,MAAM,IAAI6jB,UAAU,uBAAyB6G,OAAO1qB,GAAK,iCAE7D,SAASiyG,IAAO5xG,KAAKwL,YAAcoH,EADnC6+F,EAAc7+F,EAAGjT,GAEjBiT,EAAEtQ,UAAkB,OAAN3C,EAAa+I,OAAOojC,OAAOnsC,IAAMiyG,EAAGtvG,UAAY3C,EAAE2C,UAAW,IAAIsvG,IAZ3C,GAsH5C,GAzCyB,SAAUG,GAK/B,SAAS4iE,EAAIviE,GACT,IACI3rG,EAAU2rG,GAAe,GACzBxE,OAAoCxgG,IAAvB3G,EAAQmnG,WAA2BnnG,EAAQmnG,WAAa,YACrE2nC,OAAgCnoI,IAArB3G,EAAQ8uI,SACjB9uI,EAAQ8uI,SLXf,SAAmBnjC,GACtB,IAAIwiE,EAAaxiE,GAAe,GAC5BjG,EAASyoE,EAAWzoE,SAAU,QAAc,aAAasH,YACzDohE,EAAc,CACd1oE,OAAQA,EACR6uB,QAAS45C,EAAW55C,QACpB6yC,SAAU+G,EAAW/G,SACrBryC,YAAas0C,EAAsB3jE,EAAQyoE,EAAW35C,QAAS25C,EAAW/G,SAAU+G,EAAWp7C,gBAEnG,OAAO,IAAI,EAASq7C,GKGVC,CAAU,CACR3oE,OAAQ6jE,GAAqBpiE,GAC7B4rB,cAAe/yH,EAAQ+yH,cACvByB,QAASx0H,EAAQw0H,QACjBD,QAASv0H,EAAQu0H,QACjB6yC,SAAUpnK,EAAQonK,WAqB1B,OAnBQ97D,EAAOniG,KAAK5P,KAAM,CACtBksH,aAAczlH,EAAQylH,aACtB+Y,UAAWx+H,EAAQw+H,UACnBjxB,YAAavtG,EAAQutG,YACrBy/D,eAAgBhtK,EAAQgtK,eACxBjD,OAAQ/pK,EAAQ+pK,OAChB5iE,WAAYA,EACZ4lE,2BAA4B/sK,EAAQ+sK,2BACpCj+B,SAAUA,EACV4uB,iBAAkB19J,EAAQ09J,iBAC1BvuB,eAAgBnvI,EAAQmvI,eACxBu8B,gBAAiB1rK,EAAQ0rK,gBACzBG,IAAK7rK,EAAQ6rK,IACbF,KAAM3rK,EAAQ2rK,KACd5mC,WAAyBp+H,IAAlB3G,EAAQ+kI,OAAsB/kI,EAAQ+kI,MAC7CsN,WAAYryI,EAAQqyI,WACpBw3B,wBAAyB7pK,EAAQ6pK,wBACjC56B,WAAYjvI,EAAQivI,cAClB11I,KAGV,OAtCA,GAAU20K,EAAK5iE,GAsCR4iE,EAvCa,CAwCtB,ICrHE,GAAwC,WACxC,IAAIljE,EAAgB,SAAU7+F,EAAGjT,GAI7B,OAHA8xG,EAAgB/oG,OAAOipG,gBAClB,CAAE3pF,UAAW,cAAgB/gB,OAAS,SAAU2L,EAAGjT,GAAKiT,EAAEoV,UAAYroB,IACvE,SAAUiT,EAAGjT,GAAK,IAAK,IAAIqB,KAAKrB,EAAO+I,OAAOpG,UAAUqiB,eAAe/U,KAAKjQ,EAAGqB,KAAI4R,EAAE5R,GAAKrB,EAAEqB,KACzFywG,EAAc7+F,EAAGjT,IAE5B,OAAO,SAAUiT,EAAGjT,GAChB,GAAiB,oBAANA,GAA0B,OAANA,EAC3B,MAAM,IAAI6jB,UAAU,uBAAyB6G,OAAO1qB,GAAK,iCAE7D,SAASiyG,IAAO5xG,KAAKwL,YAAcoH,EADnC6+F,EAAc7+F,EAAGjT,GAEjBiT,EAAEtQ,UAAkB,OAAN3C,EAAa+I,OAAOojC,OAAOnsC,IAAMiyG,EAAGtvG,UAAY3C,EAAE2C,UAAW,IAAIsvG,IAZ3C,GAgG5C,GAtCyB,SAAUG,GAK/B,SAASgjE,EAAI3iE,GACT,IAEI8Z,EADAzlH,EAAU2rG,GAAe,GAGzB8Z,OADyB9+G,IAAzB3G,EAAQylH,aACOzlH,EAAQylH,aAGR,CAhDF,4GAkDjB,IAAIlY,OAAsC5mG,IAAxB3G,EAAQutG,YAA4BvtG,EAAQutG,YAAc,YACxEs+D,OAAsBllK,IAAhB3G,EAAQ6rK,IACZ7rK,EAAQ6rK,IACR,uDAgBN,OAfQvgE,EAAOniG,KAAK5P,KAAM,CACtBksH,aAAcA,EACdokD,yBAAyB,EACzBrrC,UAAWx+H,EAAQw+H,UACnBjxB,YAAaA,EACby/D,eAAgBhtK,EAAQgtK,eACxBx4C,aAA6B7tH,IAApB3G,EAAQw0H,QAAwBx0H,EAAQw0H,QAAU,GAC3Du1C,YAA2BpjK,IAAnB3G,EAAQ+pK,QAAuB/pK,EAAQ+pK,OAC/CgD,2BAA4B/sK,EAAQ+sK,2BACpCrP,iBAAkB19J,EAAQ09J,iBAC1BrrB,WAAYryI,EAAQqyI,WACpBw5B,IAAKA,EACL9mC,MAAO/kI,EAAQ+kI,MACfkK,WAAYjvI,EAAQivI,cAClB11I,KAGV,OAnCA,GAAU+0K,EAAKhjE,GAmCRgjE,EApCa,CAqCtB,4CCjGMtjE,8CADJC,GACID,EAAgB,SAAU7+F,EAAGjT,GAI7B,OAHA8xG,EAAgB/oG,OAAOipG,gBAClB,CAAE3pF,UAAW,cAAgB/gB,OAAS,SAAU2L,EAAGjT,GAAKiT,EAAEoV,UAAYroB,IACvE,SAAUiT,EAAGjT,GAAK,IAAK,IAAIqB,KAAKrB,EAAO+I,OAAOpG,UAAUqiB,eAAe/U,KAAKjQ,EAAGqB,KAAI4R,EAAE5R,GAAKrB,EAAEqB,KACzFywG,EAAc7+F,EAAGjT,IAErB,SAAUiT,EAAGjT,GAChB,GAAiB,oBAANA,GAA0B,OAANA,EAC3B,MAAM,IAAI6jB,UAAU,uBAAyB6G,OAAO1qB,GAAK,iCAE7D,SAASiyG,IAAO5xG,KAAKwL,YAAcoH,EADnC6+F,EAAc7+F,EAAGjT,GAEjBiT,EAAEtQ,UAAkB,OAAN3C,EAAa+I,OAAOojC,OAAOnsC,IAAMiyG,EAAGtvG,UAAY3C,EAAE2C,UAAW,IAAIsvG,KA4CnFy/D,EAAwB,SAAUt/D,GAKlC,SAASs/D,EAAO5qK,GACZ,IAAIgzB,EAAQs4E,EAAOniG,KAAK5P,OAASA,KAKjCy5B,EAAMm0E,YAAa,QAAcnnG,EAAQmnG,YAKzCn0E,EAAMu7I,cAAgBC,EAAkBxuK,EAAQylH,cAKhDzyF,EAAMy7I,8BACkC9nK,IAApC3G,EAAQ6pK,yBACF7pK,EAAQ6pK,wBAOlB72I,EAAM0sF,SAAU,EAKhB1sF,EAAM22G,YACgBhjI,IAAlB3G,EAAQ4sG,MAAsB5sG,EAAQ4sG,MAAQ,UAKlD55E,EAAM07I,YAA2B/nK,IAAlB3G,EAAQ+kI,OAAsB/kI,EAAQ+kI,MAKrD/xG,EAAM27I,aAAe,KAKrB37I,EAAM47I,aAAe,KACrB,IAAIl5J,EAAOsd,EASX,OAJAA,EAAM67I,aAAe,IAAIzrJ,SAAQ,SAAU6oH,EAAS6iC,GAChDp5J,EAAKi5J,aAAe1iC,EACpBv2H,EAAKk5J,aAAeE,KAEjB97I,EAoFX,OAhJAi4E,EAAU2/D,EAAQt/D,GAmElBs/D,EAAO/uK,UAAU2pH,gBAAkB,WAC/B,OAAOjsH,KAAKg1K,eAMhB3D,EAAO/uK,UAAU6pH,2BAA6B,WAC1C,OAAOnsH,KAAKk1K,0BAOhB7D,EAAO/uK,UAAUsjH,cAAgB,WAC7B,OAAO5lH,KAAK4tG,YAMhByjE,EAAO/uK,UAAU2+H,eAAiB,WAC9B,OAAO,WAKXowC,EAAO/uK,UAAUqjH,QAAU,WACvB,OAAO3lH,KAAKs1K,cAOhBjE,EAAO/uK,UAAUuxG,SAAW,WACxB,OAAO7zG,KAAKowI,QAKhBihC,EAAO/uK,UAAUw1G,SAAW,WACxB,OAAO93G,KAAKm1K,QAKhB9D,EAAO/uK,UAAU80I,kBAAoB,aAOrCi6B,EAAO/uK,UAAU8uK,QAAU,WACvBpxK,KAAKuzG,WAST89D,EAAO/uK,UAAUkzK,gBAAkB,SAAUtpD,GACzClsH,KAAKg1K,cAAgBC,EAAkB/oD,GACvClsH,KAAKuzG,WAMT89D,EAAO/uK,UAAUwyI,SAAW,SAAUzhC,GAClCrzG,KAAKowI,OAAS/8B,EACdrzG,KAAKuzG,WAEF89D,EAjJgB,CAkJzB,KAMF,SAAS4D,EAAkBQ,GACvB,OAAKA,EAGDxuK,MAAMC,QAAQuuK,GACP,SAAU3/D,GACb,OAAO2/D,GAGgB,oBAApBA,EACAA,EAEJ,SAAU3/D,GACb,MAAO,CAAC2/D,IAXD,KAcf,wCCzNA,KACIC,UAAW,YACXjgE,QAAS,UACTkgE,MAAO,QACPhgE,MAAO,sMCAJ,SAAS,EAAIxJ,EAAQgH,GACxB,MAAO,CAAC,EAAEx1G,EAAAA,GAAWA,EAAAA,EAAUA,EAAAA,EAAUA,EAAAA,qFCFzCi4K,GAAkB,EAyGf,SAASC,EAAIvD,EAAKvyK,GAWrB,OAAO,SAAUosG,EAAQgH,EAAYvF,EAAYkoE,EAASC,GACtD,IAAIn/J,EAA0D,MAxE/D,SAAyB07J,EAAKvyK,EAAQosG,EAAQgH,EAAYvF,EAAYkoE,EAASC,GAClF,IAAIF,EAAM,IAAIG,eACdH,EAAII,KAAK,MAAsB,oBAAR3D,EAAqBA,EAAInmE,EAAQgH,EAAYvF,GAAc0kE,GAAK,GACnFvyK,EAAOqoD,WAAa8tH,EAAA,iBACpBL,EAAIM,aAAe,eAEvBN,EAAID,gBAAkBA,EAKtBC,EAAIO,OAAS,SAAU90I,GAEnB,IAAKu0I,EAAIQ,QAAWR,EAAIQ,QAAU,KAAOR,EAAIQ,OAAS,IAAM,CACxD,IAAI1vK,EAAO5G,EAAOqoD,UAEdxxC,OAAS,EACTjQ,GAAQuvK,EAAA,QAAmBvvK,GAAQuvK,EAAA,OACnCt/J,EAASi/J,EAAIS,aAER3vK,GAAQuvK,EAAA,OACbt/J,EAASi/J,EAAIU,eAET3/J,GAAS,IAAI4/J,WAAYC,gBAAgBZ,EAAIS,aAAc,oBAG1D3vK,GAAQuvK,EAAA,iBACbt/J,EAAqCi/J,EAAY,UAEjDj/J,EACAk/J,EAEC/1K,EAAO22K,aAAa9/J,EAAQ,CACzBu1F,OAAQA,EACRwqE,kBAAmB/oE,IAClB7tG,EAAO62K,eAAehgK,IAG3Bm/J,SAIJA,KAMRF,EAAIgB,QAAUd,EACdF,EAAIiB,OAwBAC,CAAgBzE,EAAKvyK,EAAQosG,EAAQgH,EAAYvF,GAMjD,SAAUlmG,EAAUsvK,GAChBpgK,EAAOqgK,YAAYvvK,QACH0F,IAAZ0oK,GACAA,EAAQpuK,KAGSquK,GAAoB,OCzIrD,IACQtkE,EADJC,GACID,EAAgB,SAAU7+F,EAAGjT,GAI7B,OAHA8xG,EAAgB/oG,OAAOipG,gBAClB,CAAE3pF,UAAW,cAAgB/gB,OAAS,SAAU2L,EAAGjT,GAAKiT,EAAEoV,UAAYroB,IACvE,SAAUiT,EAAGjT,GAAK,IAAK,IAAIqB,KAAKrB,EAAO+I,OAAOpG,UAAUqiB,eAAe/U,KAAKjQ,EAAGqB,KAAI4R,EAAE5R,GAAKrB,EAAEqB,KACzFywG,EAAc7+F,EAAGjT,IAErB,SAAUiT,EAAGjT,GAChB,GAAiB,oBAANA,GAA0B,OAANA,EAC3B,MAAM,IAAI6jB,UAAU,uBAAyB6G,OAAO1qB,GAAK,iCAE7D,SAASiyG,IAAO5xG,KAAKwL,YAAcoH,EADnC6+F,EAAc7+F,EAAGjT,GAEjBiT,EAAEtQ,UAAkB,OAAN3C,EAAa+I,OAAOojC,OAAOnsC,IAAMiyG,EAAGtvG,UAAY3C,EAAE2C,UAAW,IAAIsvG,KAmCnFslE,EAAmC,SAAUnlE,GAO7C,SAASmlE,EAAkBvwK,EAAMwwK,EAAaC,GAC1C,IAAI39I,EAAQs4E,EAAOniG,KAAK5P,KAAM2G,IAAS3G,KAavC,OAPAy5B,EAAMnzB,QAAU6wK,EAMhB19I,EAAM/xB,SAAW0vK,EACV39I,EAEX,OAtBAi4E,EAAUwlE,EAAmBnlE,GAsBtBmlE,EAvB2B,CAwBpC3F,EAAA,IA+GE8F,EAA8B,SAAUtlE,GAKxC,SAASslE,EAAajlE,GAClB,IAAI34E,EAAQz5B,KACRyG,EAAU2rG,GAAe,IAC7B34E,EAAQs4E,EAAOniG,KAAK5P,KAAM,CACtBksH,aAAczlH,EAAQylH,aACtBte,gBAAYxgG,EACZimG,MAAO,UACPm4B,WAAyBp+H,IAAlB3G,EAAQ+kI,OAAsB/kI,EAAQ+kI,SAC3CxrI,MAIAy6D,GAINhhC,EAAM44E,KAIN54E,EAAM6hC,GAKN7hC,EAAM69I,QAAU,KAKhB79I,EAAM89I,QAAU9wK,EAAQ1G,OAKxB05B,EAAMg5H,eAAiCrlJ,IAArB3G,EAAQ+mJ,UAAgC/mJ,EAAQ+mJ,SAKlE/zH,EAAM+9I,KAAO/wK,EAAQ6rK,SACEllK,IAAnB3G,EAAQgxK,OACRh+I,EAAM69I,QAAU7wK,EAAQgxK,YAEJrqK,IAAfqsB,EAAM+9I,QACX,OAAO/9I,EAAM89I,QAAS,GAEtB99I,EAAM69I,QAAUzB,EAAIp8I,EAAM+9I,KAC6B/9I,EAAa,UAMxEA,EAAMi+I,eACmBtqK,IAArB3G,EAAQkxK,SAAyBlxK,EAAQkxK,SAAW,EACxD,IA2CI3xD,EAAYt+G,EA3CZkwK,OAA8CxqK,IAA5B3G,EAAQmxK,iBAAgCnxK,EAAQmxK,gBA4DtE,OAvDAn+I,EAAMo+I,eAAiBD,EAAkB,IAAIrnK,EAAA,EAAU,KAKvDkpB,EAAMq+I,oBAAsB,IAAIvnK,EAAA,EAKhCkpB,EAAMs+I,qBAAuB,EAK7Bt+I,EAAMu+I,sBAAwB,GAM9Bv+I,EAAMw+I,SAAW,GAMjBx+I,EAAMy+I,UAAY,GAKlBz+I,EAAM0+I,mBAAqB,GAK3B1+I,EAAM2+I,oBAAsB,KAExBnxK,MAAMC,QAAQT,EAAQiB,UACtBA,EAAWjB,EAAQiB,SAEdjB,EAAQiB,WAEbA,GADAs+G,EAAav/G,EAAQiB,UACC+qG,YAErBmlE,QAAkCxqK,IAAf44G,IACpBA,EAAa,IAAI9T,EAAA,EAAWxqG,SAEf0F,IAAb1F,GACA+xB,EAAM4+I,oBAAoB3wK,QAEX0F,IAAf44G,GACAvsF,EAAM6+I,wBAAwBtyD,GAE3BvsF,EAsrBX,OA9yBAi4E,EAAU2lE,EAActlE,GAsIxBslE,EAAa/0K,UAAUi2K,WAAa,SAAUjyK,GAC1CtG,KAAKw4K,mBAAmBlyK,GACxBtG,KAAKuzG,WAOT8jE,EAAa/0K,UAAUk2K,mBAAqB,SAAUlyK,GAClD,IAAImyK,GAAa,QAAOnyK,GACxB,GAAKtG,KAAK04K,YAAYD,EAAYnyK,GAAlC,CAMAtG,KAAK24K,mBAAmBF,EAAYnyK,GACpC,IAAIO,EAAWP,EAAQimE,cACvB,GAAI1lE,EAAU,CACV,IAAIslG,EAAStlG,EAAS4sG,YAClBzzG,KAAK63K,gBACL73K,KAAK63K,eAAe70K,OAAOmpG,EAAQ7lG,QAIvCtG,KAAKg4K,sBAAsBS,GAAcnyK,EAE7CtG,KAAK4yG,cAAc,IAAIskE,EAAkB0B,EAAA,aAA4BtyK,SAhB7DtG,KAAKo4K,qBACLp4K,KAAKo4K,oBAAoB90K,OAAOgD,IAsB5C+wK,EAAa/0K,UAAUq2K,mBAAqB,SAAUF,EAAYnyK,GAC9DtG,KAAKm4K,mBAAmBM,GAAc,EAClC,QAAOnyK,EAASktG,EAAA,SAAkBxzG,KAAK64K,qBAAsB74K,OAC7D,QAAOsG,EAASsyG,EAAA,iBAAgC54G,KAAK64K,qBAAsB74K,QAUnFq3K,EAAa/0K,UAAUo2K,YAAc,SAAUD,EAAYnyK,GACvD,IAAIwyK,GAAQ,EACRlyK,EAAKN,EAAQs5D,QAajB,YAZWxyD,IAAPxG,IACMA,EAAG4Q,aAAcxX,KAAKi4K,SAIxBa,GAAQ,EAHR94K,KAAKi4K,SAASrxK,EAAG4Q,YAAclR,GAMnCwyK,KACA,SAASL,KAAcz4K,KAAKk4K,WAAY,IACxCl4K,KAAKk4K,UAAUO,GAAcnyK,GAE1BwyK,GAOXzB,EAAa/0K,UAAU20K,YAAc,SAAUvvK,GAC3C1H,KAAKq4K,oBAAoB3wK,GACzB1H,KAAKuzG,WAOT8jE,EAAa/0K,UAAU+1K,oBAAsB,SAAU3wK,GAInD,IAHA,IAAIqxK,EAAU,GACVC,EAAc,GACdC,EAAmB,GACd35K,EAAI,EAAG45K,EAAWxxK,EAASnJ,OAAQe,EAAI45K,EAAU55K,IAAK,CAC3D,IAAIgH,EAAUoB,EAASpI,GACnBm5K,GAAa,QAAOnyK,GACpBtG,KAAK04K,YAAYD,EAAYnyK,IAC7B0yK,EAAY32K,KAAKiE,GAGhBhH,EAAI,EAAb,IAAK,IAAW65K,EAAWH,EAAYz6K,OAAQe,EAAI65K,EAAU75K,IAAK,CAC1DgH,EAAU0yK,EAAY15K,GACtBm5K,GAAa,QAAOnyK,GACxBtG,KAAK24K,mBAAmBF,EAAYnyK,GACpC,IAAIO,EAAWP,EAAQimE,cACvB,GAAI1lE,EAAU,CACV,IAAIslG,EAAStlG,EAAS4sG,YACtBslE,EAAQ12K,KAAK8pG,GACb8sE,EAAiB52K,KAAKiE,QAGtBtG,KAAKg4K,sBAAsBS,GAAcnyK,EAG7CtG,KAAK63K,gBACL73K,KAAK63K,eAAe90K,KAAKg2K,EAASE,GAE7B35K,EAAI,EAAb,IAAK,IAAW85K,EAAWJ,EAAYz6K,OAAQe,EAAI85K,EAAU95K,IACzDU,KAAK4yG,cAAc,IAAIskE,EAAkB0B,EAAA,aAA4BI,EAAY15K,MAOzF+3K,EAAa/0K,UAAUg2K,wBAA0B,SAAUtyD,GACvD,IAAIqzD,GAAsB,EAC1Br5K,KAAKs8G,iBAAiBs8D,EAAA,cAItB,SAAU9/I,GACDugJ,IACDA,GAAsB,EACtBrzD,EAAW3jH,KAAKy2B,EAAIxyB,SACpB+yK,GAAsB,MAG9Br5K,KAAKs8G,iBAAiBs8D,EAAA,iBAItB,SAAU9/I,GACDugJ,IACDA,GAAsB,EACtBrzD,EAAW1iH,OAAOw1B,EAAIxyB,SACtB+yK,GAAsB,MAG9BrzD,EAAW1J,iBAAiBwH,EAAA,MAI5B,SAAUhrF,GACDugJ,IACDA,GAAsB,EACtBr5K,KAAKu4K,WACqDz/I,EAAW,SACrEugJ,GAAsB,IAE5B7pK,KAAKxP,OACPgmH,EAAW1J,iBAAiBwH,EAAA,SAI5B,SAAUhrF,GACDugJ,IACDA,GAAsB,EACtBr5K,KAAKs5K,cACqDxgJ,EAAW,SACrEugJ,GAAsB,IAE5B7pK,KAAKxP,OACPA,KAAKo4K,oBAAsBpyD,GAO/BqxD,EAAa/0K,UAAUjC,MAAQ,SAAUk5K,GACrC,GAAIA,EAAU,CACV,IAAK,IAAIpsK,KAAanN,KAAKm4K,mBAAoB,CAChCn4K,KAAKm4K,mBAAmBhrK,GAC9BzB,QAAQ,MAEZ1L,KAAKo4K,sBACNp4K,KAAKm4K,mBAAqB,GAC1Bn4K,KAAKi4K,SAAW,GAChBj4K,KAAKk4K,UAAY,SAIrB,GAAIl4K,KAAK63K,eAEL,IAAK,IAAIjxK,KADT5G,KAAK63K,eAAensK,QAAQ1L,KAAKw5K,sBAAsBhqK,KAAKxP,OAC7CA,KAAKg4K,sBAChBh4K,KAAKw5K,sBAAsBx5K,KAAKg4K,sBAAsBpxK,IAI9D5G,KAAKo4K,qBACLp4K,KAAKo4K,oBAAoB/3K,QAEzBL,KAAK63K,gBACL73K,KAAK63K,eAAex3K,QAExBL,KAAKg4K,sBAAwB,GAC7B,IAAIyB,EAAa,IAAIvC,EAAkB0B,EAAA,SACvC54K,KAAK4yG,cAAc6mE,GACnBz5K,KAAKuzG,WAcT8jE,EAAa/0K,UAAUo3K,eAAiB,SAAU7tK,GAC9C,GAAI7L,KAAK63K,eACL,OAAO73K,KAAK63K,eAAensK,QAAQG,GAE9B7L,KAAKo4K,qBACVp4K,KAAKo4K,oBAAoB1sK,QAAQG,IAezCwrK,EAAa/0K,UAAUq3K,iCAAmC,SAAUplI,EAAY1oC,GAC5E,IAAIsgG,EAAS,CAAC53D,EAAW,GAAIA,EAAW,GAAIA,EAAW,GAAIA,EAAW,IACtE,OAAOv0C,KAAK45K,uBAAuBztE,GAAQ,SAAU7lG,GAEjD,OADeA,EAAQimE,cACVstG,qBAAqBtlI,GACvB1oC,EAASvF,QAGhB,MAuBZ+wK,EAAa/0K,UAAUs3K,uBAAyB,SAAUztE,EAAQtgG,GAC9D,GAAI7L,KAAK63K,eACL,OAAO73K,KAAK63K,eAAeiC,gBAAgB3tE,EAAQtgG,GAE9C7L,KAAKo4K,qBACVp4K,KAAKo4K,oBAAoB1sK,QAAQG,IAkBzCwrK,EAAa/0K,UAAUy3K,iCAAmC,SAAU5tE,EAAQtgG,GACxE,OAAO7L,KAAK45K,uBAAuBztE,GAKnC,SAAU7lG,GAEN,GADeA,EAAQimE,cACVytG,iBAAiB7tE,GAAS,CACnC,IAAIzuG,EAASmO,EAASvF,GACtB,GAAI5I,EACA,OAAOA,OAYvB25K,EAAa/0K,UAAU23K,sBAAwB,WAC3C,OAAOj6K,KAAKo4K,qBAQhBf,EAAa/0K,UAAUmwI,YAAc,WACjC,IAAI/qI,EAUJ,OATI1H,KAAKo4K,oBACL1wK,EAAW1H,KAAKo4K,oBAAoB3lE,WAAWvvG,MAAM,GAEhDlD,KAAK63K,iBACVnwK,EAAW1H,KAAK63K,eAAeqC,UAC1B,QAAQl6K,KAAKg4K,yBACd,QAAOtwK,GAAU,QAAU1H,KAAKg4K,yBAG+B,GAQ3EX,EAAa/0K,UAAU63K,wBAA0B,SAAU5lI,GACvD,IAAI7sC,EAAW,GAIf,OAHA1H,KAAK25K,iCAAiCplI,GAAY,SAAUjuC,GACxDoB,EAASrF,KAAKiE,MAEXoB,GAcX2vK,EAAa/0K,UAAU67J,oBAAsB,SAAUhyD,GACnD,OAAInsG,KAAK63K,eACE73K,KAAK63K,eAAeuC,YAAYjuE,GAElCnsG,KAAKo4K,oBACHp4K,KAAKo4K,oBAAoB3lE,WAAWvvG,MAAM,GAG1C,IAefm0K,EAAa/0K,UAAU+3K,8BAAgC,SAAU9lI,EAAY+lI,GAQzE,IAAInmK,EAAIogC,EAAW,GACfngC,EAAImgC,EAAW,GACfgmI,EAAiB,KACjBr8G,EAAe,CAAC/wB,IAAKA,KACrBqtI,EAAqB78K,EAAAA,EACrBwuG,EAAS,EAAExuG,EAAAA,GAAWA,EAAAA,EAAUA,EAAAA,EAAUA,EAAAA,GAC1C68C,EAAS8/H,GAA0B,KAwBvC,OAvBAt6K,KAAK63K,eAAeiC,gBAAgB3tE,GAIpC,SAAU7lG,GACN,GAAIk0C,EAAOl0C,GAAU,CACjB,IAAIO,EAAWP,EAAQimE,cACnBkuG,EAA6BD,EAEjC,IADAA,EAAqB3zK,EAAS6zK,eAAevmK,EAAGC,EAAG8pD,EAAcs8G,IACxCC,EAA4B,CACjDF,EAAiBj0K,EAKjB,IAAIq0K,EAAc/7K,KAAKK,KAAKu7K,GAC5BruE,EAAO,GAAKh4F,EAAIwmK,EAChBxuE,EAAO,GAAK/3F,EAAIumK,EAChBxuE,EAAO,GAAKh4F,EAAIwmK,EAChBxuE,EAAO,GAAK/3F,EAAIumK,OAIrBJ,GAYXlD,EAAa/0K,UAAUmxG,UAAY,SAAU66D,GACzC,OAAOtuK,KAAK63K,eAAepkE,UAAU66D,IAWzC+I,EAAa/0K,UAAUs4K,eAAiB,SAAUh0K,GAC9C,IAAIN,EAAUtG,KAAKi4K,SAASrxK,EAAG4Q,YAC/B,YAAmBpK,IAAZ9G,EAAwBA,EAAU,MAQ7C+wK,EAAa/0K,UAAUu4K,gBAAkB,SAAUzkC,GAC/C,IAAI9vI,EAAUtG,KAAKk4K,UAAU9hC,GAC7B,YAAmBhpI,IAAZ9G,EAAwBA,EAAU,MAQ7C+wK,EAAa/0K,UAAUw4K,UAAY,WAC/B,OAAO96K,KAAKu3K,SAKhBF,EAAa/0K,UAAU+7J,YAAc,WACjC,OAAOr+J,KAAKyyJ,WAQhB4kB,EAAa/0K,UAAUy4K,OAAS,WAC5B,OAAO/6K,KAAKw3K,MAMhBH,EAAa/0K,UAAUu2K,qBAAuB,SAAUv3I,GACpD,IAAIh7B,EAAoEg7B,EAAY,OAChFm3I,GAAa,QAAOnyK,GACpBO,EAAWP,EAAQimE,cACvB,GAAK1lE,EAQA,CACD,IAAIslG,EAAStlG,EAAS4sG,YAClBglE,KAAcz4K,KAAKg4K,8BACZh4K,KAAKg4K,sBAAsBS,GAC9Bz4K,KAAK63K,gBACL73K,KAAK63K,eAAe70K,OAAOmpG,EAAQ7lG,IAInCtG,KAAK63K,gBACL73K,KAAK63K,eAAe5iJ,OAAOk3E,EAAQ7lG,QAjBrCmyK,KAAcz4K,KAAKg4K,wBACjBh4K,KAAK63K,gBACL73K,KAAK63K,eAAev0K,OAAOgD,GAE/BtG,KAAKg4K,sBAAsBS,GAAcnyK,GAiBjD,IAAIM,EAAKN,EAAQs5D,QACjB,QAAWxyD,IAAPxG,EAAkB,CAClB,IAAIo0K,EAAMp0K,EAAG4Q,WACTxX,KAAKi4K,SAAS+C,KAAS10K,IACvBtG,KAAKi7K,mBAAmB30K,GACxBtG,KAAKi4K,SAAS+C,GAAO10K,QAIzBtG,KAAKi7K,mBAAmB30K,GACxBtG,KAAKk4K,UAAUO,GAAcnyK,EAEjCtG,KAAKuzG,UACLvzG,KAAK4yG,cAAc,IAAIskE,EAAkB0B,EAAA,gBAA+BtyK,KAQ5E+wK,EAAa/0K,UAAU44K,WAAa,SAAU50K,GAC1C,IAAIM,EAAKN,EAAQs5D,QACjB,YAAWxyD,IAAPxG,EACOA,KAAM5G,KAAKi4K,UAGX,QAAO3xK,KAAYtG,KAAKk4K,WAMvCb,EAAa/0K,UAAU0yB,QAAU,WAC7B,OAAOh1B,KAAK63K,eAAe7iJ,YAAa,QAAQh1B,KAAKg4K,wBAOzDX,EAAa/0K,UAAU07J,aAAe,SAAU7xD,EAAQgH,EAAYvF,GA2BhE,IA1BA,IAAIutE,EAAqBn7K,KAAK83K,oBAC1BsD,EAAgBp7K,KAAK03K,UAAUvrE,EAAQgH,EAAYvF,GACnD1N,EAAU,SAAU5gG,EAAGiS,GACvB,IAAI8pK,EAAeD,EAAc97K,GACb67K,EAAmBrB,gBAAgBuB,GAKvD,SAAUtjK,GACN,OAAO,QAAeA,EAAOo0F,OAAQkvE,UAGnCC,EAAOvD,qBACTuD,EAAO1oE,cAAc,IAAIskE,EAAkB0B,EAAA,sBAC3C0C,EAAOhE,QAAQ1nK,KAAK0rK,EAAQD,EAAcloE,EAAYvF,EAAY,SAAUlmG,KACtE1H,KAAK+3K,qBACP/3K,KAAK4yG,cAAc,IAAIskE,EAAkB0B,EAAA,uBAAiCxrK,EAAW1F,KACvF8H,KAAK8rK,GAAS,aACVt7K,KAAK+3K,qBACP/3K,KAAK4yG,cAAc,IAAIskE,EAAkB0B,EAAA,uBAC3CppK,KAAK8rK,IACPH,EAAmBn4K,OAAOq4K,EAAc,CAAElvE,OAAQkvE,EAAan4K,YAGnEo4K,EAASt7K,KACJV,EAAI,EAAGiS,EAAK6pK,EAAc78K,OAAQe,EAAIiS,IAAMjS,EACjD4gG,EAAQ5gG,GAEZU,KAAKmmH,UACDnmH,KAAKs3K,QAAQ/4K,OAAS,IAAYyB,KAAK+3K,qBAAuB,GAEtEV,EAAa/0K,UAAU8uK,QAAU,WAC7BpxK,KAAKK,OAAM,GACXL,KAAK83K,oBAAoBz3K,QACzB0xG,EAAOzvG,UAAU8uK,QAAQxhK,KAAK5P,OAOlCq3K,EAAa/0K,UAAUi5K,mBAAqB,SAAUpvE,GAClD,IACIx0F,EADAwjK,EAAqBn7K,KAAK83K,oBAE9BqD,EAAmBrB,gBAAgB3tE,GAAQ,SAAUp0F,GACjD,IAAI,QAAOA,EAAOo0F,OAAQA,GAEtB,OADAx0F,EAAMI,GACC,KAGXJ,GACAwjK,EAAmB73K,OAAOqU,IAUlC0/J,EAAa/0K,UAAUg3K,cAAgB,SAAUhzK,GAC7C,IAAImyK,GAAa,QAAOnyK,GACpBmyK,KAAcz4K,KAAKg4K,6BACZh4K,KAAKg4K,sBAAsBS,GAG9Bz4K,KAAK63K,gBACL73K,KAAK63K,eAAev0K,OAAOgD,GAGnCtG,KAAKw5K,sBAAsBlzK,GAC3BtG,KAAKuzG,WAOT8jE,EAAa/0K,UAAUk3K,sBAAwB,SAAUlzK,GACrD,IAAImyK,GAAa,QAAOnyK,GACxBtG,KAAKm4K,mBAAmBM,GAAY/sK,QAAQ,aACrC1L,KAAKm4K,mBAAmBM,GAC/B,IAAI7xK,EAAKN,EAAQs5D,aACNxyD,IAAPxG,UACO5G,KAAKi4K,SAASrxK,EAAG4Q,mBAErBxX,KAAKk4K,UAAUO,GACtBz4K,KAAK4yG,cAAc,IAAIskE,EAAkB0B,EAAA,gBAA+BtyK,KAS5E+wK,EAAa/0K,UAAU24K,mBAAqB,SAAU30K,GAClD,IAAIk1K,GAAU,EACd,IAAK,IAAI50K,KAAM5G,KAAKi4K,SAChB,GAAIj4K,KAAKi4K,SAASrxK,KAAQN,EAAS,QACxBtG,KAAKi4K,SAASrxK,GACrB40K,GAAU,EACV,MAGR,OAAOA,GAQXnE,EAAa/0K,UAAUm5K,UAAY,SAAUhE,GACzCz3K,KAAKs3K,QAAUG,GAOnBJ,EAAa/0K,UAAUiwK,OAAS,SAAUD,IACtC,OAAOtyK,KAAKu3K,QAAS,GACrBv3K,KAAKw3K,KAAOlF,EACZtyK,KAAKy7K,UAAU5F,EAAIvD,EAAKtyK,KAAKu3K,WAE1BF,EA/yBsB,CAgzB/BhG,EAAA,GACF,sCCp+BA,KAMIqK,WAAY,aAMZC,cAAe,gBAMfC,MAAO,QAOPC,cAAe,gBAMfC,kBAAmB,oBAMnBC,gBAAiB,kBAMjBC,kBAAmB,yGC3BnBzrK,EAAuB,WAIvB,SAASA,EAAM0rK,GAIXj8K,KAAKk8K,OAAS,IAAI,EAAOD,GAOzBj8K,KAAKm8K,OAAS,GAiKlB,OA1JA5rK,EAAMjO,UAAUU,OAAS,SAAUmpG,EAAQvjG,GAEvC,IAAIrI,EAAO,CACPY,KAAMgrG,EAAO,GACb/qG,KAAM+qG,EAAO,GACb9qG,KAAM8qG,EAAO,GACb7qG,KAAM6qG,EAAO,GACbvjG,MAAOA,GAEX5I,KAAKk8K,OAAOl5K,OAAOzC,GACnBP,KAAKm8K,QAAO,QAAOvzK,IAAUrI,GAOjCgQ,EAAMjO,UAAUS,KAAO,SAAUg2K,EAAS9kJ,GAEtC,IADA,IAAIzzB,EAAQ,IAAIyG,MAAMgtB,EAAO11B,QACpBe,EAAI,EAAGyM,EAAIkoB,EAAO11B,OAAQe,EAAIyM,EAAGzM,IAAK,CAC3C,IAAI6sG,EAAS4sE,EAAQz5K,GACjBsJ,EAAQqrB,EAAO30B,GAEfiB,EAAO,CACPY,KAAMgrG,EAAO,GACb/qG,KAAM+qG,EAAO,GACb9qG,KAAM8qG,EAAO,GACb7qG,KAAM6qG,EAAO,GACbvjG,MAAOA,GAEXpI,EAAMlB,GAAKiB,EACXP,KAAKm8K,QAAO,QAAOvzK,IAAUrI,EAEjCP,KAAKk8K,OAAOn5K,KAAKvC,IAOrB+P,EAAMjO,UAAUgB,OAAS,SAAUsF,GAC/B,IAAIwtI,GAAM,QAAOxtI,GAGbrI,EAAOP,KAAKm8K,OAAO/lC,GAEvB,cADOp2I,KAAKm8K,OAAO/lC,GACiB,OAA7Bp2I,KAAKk8K,OAAO54K,OAAO/C,IAO9BgQ,EAAMjO,UAAU2yB,OAAS,SAAUk3E,EAAQvjG,GACvC,IAAIrI,EAAOP,KAAKm8K,QAAO,QAAOvzK,IAC1BpL,EAAO,CAAC+C,EAAKY,KAAMZ,EAAKa,KAAMb,EAAKc,KAAMd,EAAKe,OAC7C,QAAO9D,EAAM2uG,KACdnsG,KAAKsD,OAAOsF,GACZ5I,KAAKgD,OAAOmpG,EAAQvjG,KAO5B2H,EAAMjO,UAAU43K,OAAS,WAErB,OADYl6K,KAAKk8K,OAAO35K,MACX2H,KAAI,SAAU3J,GACvB,OAAOA,EAAKqI,UAQpB2H,EAAMjO,UAAU83K,YAAc,SAAUjuE,GAEpC,IAAI3uG,EAAO,CACP2D,KAAMgrG,EAAO,GACb/qG,KAAM+qG,EAAO,GACb9qG,KAAM8qG,EAAO,GACb7qG,KAAM6qG,EAAO,IAGjB,OADYnsG,KAAKk8K,OAAOx5K,OAAOlF,GAClB0M,KAAI,SAAU3J,GACvB,OAAOA,EAAKqI,UAUpB2H,EAAMjO,UAAUoJ,QAAU,SAAUG,GAChC,OAAO7L,KAAKo8K,SAASp8K,KAAKk6K,SAAUruK,IAQxC0E,EAAMjO,UAAUw3K,gBAAkB,SAAU3tE,EAAQtgG,GAChD,OAAO7L,KAAKo8K,SAASp8K,KAAKo6K,YAAYjuE,GAAStgG,IAQnD0E,EAAMjO,UAAU85K,SAAW,SAAUnoJ,EAAQpoB,GAEzC,IADA,IAAInO,EACK4B,EAAI,EAAGyM,EAAIkoB,EAAO11B,OAAQe,EAAIyM,EAAGzM,IAEtC,GADA5B,EAASmO,EAASooB,EAAO30B,IAErB,OAAO5B,EAGf,OAAOA,GAKX6S,EAAMjO,UAAU0yB,QAAU,WACtB,OAAO,QAAQh1B,KAAKm8K,SAKxB5rK,EAAMjO,UAAUjC,MAAQ,WACpBL,KAAKk8K,OAAO77K,QACZL,KAAKm8K,OAAS,IAMlB5rK,EAAMjO,UAAUmxG,UAAY,SAAU66D,GAClC,IAAI7rK,EAAOzC,KAAKk8K,OAAOl4K,SACvB,OAAO,QAAevB,EAAKtB,KAAMsB,EAAKrB,KAAMqB,EAAKpB,KAAMoB,EAAKnB,KAAMgtK,IAKtE/9J,EAAMjO,UAAUkP,OAAS,SAAU3R,GAE/B,IAAK,IAAIP,KADTU,KAAKk8K,OAAOn5K,KAAKlD,EAAMq8K,OAAO35K,OAChB1C,EAAMs8K,OAChBn8K,KAAKm8K,OAAO78K,GAAKO,EAAMs8K,OAAO78K,IAG/BiR,EAhLe,GAkL1B,8CCpMQkhG,aADJC,GACID,EAAgB,SAAU7+F,EAAGjT,GAI7B,OAHA8xG,EAAgB/oG,OAAOipG,gBAClB,CAAE3pF,UAAW,cAAgB/gB,OAAS,SAAU2L,EAAGjT,GAAKiT,EAAEoV,UAAYroB,IACvE,SAAUiT,EAAGjT,GAAK,IAAK,IAAIqB,KAAKrB,EAAO+I,OAAOpG,UAAUqiB,eAAe/U,KAAKjQ,EAAGqB,KAAI4R,EAAE5R,GAAKrB,EAAEqB,KACzFywG,EAAc7+F,EAAGjT,IAErB,SAAUiT,EAAGjT,GAChB,GAAiB,oBAANA,GAA0B,OAANA,EAC3B,MAAM,IAAI6jB,UAAU,uBAAyB6G,OAAO1qB,GAAK,iCAE7D,SAASiyG,IAAO5xG,KAAKwL,YAAcoH,EADnC6+F,EAAc7+F,EAAGjT,GAEjBiT,EAAEtQ,UAAkB,OAAN3C,EAAa+I,OAAOojC,OAAOnsC,IAAMiyG,EAAGtvG,UAAY3C,EAAE2C,UAAW,IAAIsvG,KAsBnFyqE,EAA6B,SAAUtqE,GAKvC,SAASsqE,EAAYjqE,GACjB,IACI3rG,EAAU2rG,GAA4B,GAW1C,OAVQL,EAAOniG,KAAK5P,KAAM,CACtBiK,OAAQtM,EAAAA,EACRmzC,KAAMrqC,EAAQqqC,KACd8kD,OAAQnvF,EAAQmvF,OAChB6vD,OAAQh/I,EAAQg/I,OAChBpzE,WAAyBjlE,IAAlB3G,EAAQ4rE,MAAsB5rE,EAAQ4rE,MAAQ,EACrDgkC,cAA+BjpG,IAArB3G,EAAQ4vG,SAAyB5vG,EAAQ4vG,SAAW,EAC9Di7C,oBAA2ClkJ,IAA3B3G,EAAQ6qJ,gBAA+B7qJ,EAAQ6qJ,eAC/DgrB,kBAAuClvK,IAAzB3G,EAAQ61K,aAA6B71K,EAAQ61K,aAAe,CAAC,EAAG,MAC5Et8K,KAgCV,OAhDA0xG,EAAU2qE,EAAatqE,GAwBvBsqE,EAAY/5K,UAAUyqC,MAAQ,WAC1B,IAAIslC,EAAQryE,KAAKioD,WACbgxD,EAAQ,IAAIojE,EAAY,CACxBvrI,KAAM9wC,KAAKwpJ,UAAYxpJ,KAAKwpJ,UAAUz8G,aAAU3/B,EAChDq4I,OAAQzlJ,KAAK0pJ,YAAc1pJ,KAAK0pJ,YAAY38G,aAAU3/B,EACtDwoF,OAAQ51F,KAAK+qI,YACb14D,MAAOprE,MAAMC,QAAQmrE,GAASA,EAAMnvE,QAAUmvE,EAC9CgkC,SAAUr2G,KAAK0tH,cACf4jC,eAAgBtxJ,KAAKilJ,oBACrBq3B,aAAct8K,KAAKu8K,kBAAkBr5K,UAGzC,OADA+1G,EAAMg4B,WAAWjxI,KAAKywI,cACfx3B,GAQXojE,EAAY/5K,UAAUk6K,UAAY,SAAU5mF,GACxC51F,KAAKy8K,QAAU7mF,EACf51F,KAAKq6G,UAEFgiE,EAjDqB,CAkD9B,KACF,wCC1EA,IAAIK,EAAsB,WAItB,SAASA,EAAKtqE,GACV,IAAI3rG,EAAU2rG,GAAe,GAK7BpyG,KAAK28K,YAA2BvvK,IAAlB3G,EAAQ0kC,MAAsB1kC,EAAQ0kC,MAAQ,KA8BhE,OAvBAuxI,EAAKp6K,UAAUyqC,MAAQ,WACnB,IAAI5B,EAAQnrC,KAAK6hJ,WACjB,OAAO,IAAI66B,EAAK,CACZvxI,MAAOlkC,MAAMC,QAAQikC,GAASA,EAAMjoC,QAAUioC,QAAS/9B,KAQ/DsvK,EAAKp6K,UAAUu/I,SAAW,WACtB,OAAO7hJ,KAAK28K,QAQhBD,EAAKp6K,UAAU05J,SAAW,SAAU7wH,GAChCnrC,KAAK28K,OAASxxI,GAEXuxI,EAxCc,GA0CzB,8ECpDQjrE,wBCGR,EAKiB,cALjB,EAUkB,eAVlB,EAec,WAfd,EAoBe,kGDxBXC,GACID,EAAgB,SAAU7+F,EAAGjT,GAI7B,OAHA8xG,EAAgB/oG,OAAOipG,gBAClB,CAAE3pF,UAAW,cAAgB/gB,OAAS,SAAU2L,EAAGjT,GAAKiT,EAAEoV,UAAYroB,IACvE,SAAUiT,EAAGjT,GAAK,IAAK,IAAIqB,KAAKrB,EAAO+I,OAAOpG,UAAUqiB,eAAe/U,KAAKjQ,EAAGqB,KAAI4R,EAAE5R,GAAKrB,EAAEqB,KACzFywG,EAAc7+F,EAAGjT,IAErB,SAAUiT,EAAGjT,GAChB,GAAiB,oBAANA,GAA0B,OAANA,EAC3B,MAAM,IAAI6jB,UAAU,uBAAyB6G,OAAO1qB,GAAK,iCAE7D,SAASiyG,IAAO5xG,KAAKwL,YAAcoH,EADnC6+F,EAAc7+F,EAAGjT,GAEjBiT,EAAEtQ,UAAkB,OAAN3C,EAAa+I,OAAOojC,OAAOnsC,IAAMiyG,EAAGtvG,UAAY3C,EAAE2C,UAAW,IAAIsvG,KAanFgrE,EAAqB,KACrBC,EAA2B,SAAU9qE,GAUrC,SAAS8qE,EAAUhoE,EAAOd,EAAKt/E,EAAMu/E,EAAaqlD,EAAYluH,GAC1D,IAAI1R,EAAQs4E,EAAOniG,KAAK5P,OAASA,KAgDjC,OA3CAy5B,EAAMsqH,mBAAqB,KAK3BtqH,EAAM26E,OAAUS,GAAQ,IAAIR,MACR,OAAhBL,IACiCv6E,EAAY,OAAEu6E,YAAcA,GAMjEv6E,EAAMixI,QAAU,GAKhBjxI,EAAMkjJ,OAASxxI,EAKf1R,EAAM66E,UAAY,KAKlB76E,EAAMqjJ,YAAczjB,EAKpB5/H,EAAM4R,MAAQ5W,EAKdgF,EAAM06E,KAAOJ,EAIbt6E,EAAMsjJ,SACCtjJ,EA8KX,OAxOAi4E,EAAUmrE,EAAW9qE,GAgErB8qE,EAAUv6K,UAAU06K,WAAa,WAC7B,QAAsB5vK,IAAlBpN,KAAK+8K,UAA0B/8K,KAAK88K,cAAgB5oE,EAAA,SAAmB,CAClE0oE,IACDA,GAAqB,QAAsB,EAAG,IAElDA,EAAmB3iC,UAAUj6I,KAAKo0G,OAAQ,EAAG,GAC7C,IACIwoE,EAAmB7oB,aAAa,EAAG,EAAG,EAAG,GACzC/zJ,KAAK+8K,UAAW,EAEpB,MAAO/sK,GACH4sK,EAAqB,KACrB58K,KAAK+8K,UAAW,GAGxB,OAAyB,IAAlB/8K,KAAK+8K,UAKhBF,EAAUv6K,UAAU26K,qBAAuB,WACvCj9K,KAAK4yG,cAAcY,EAAA,WAKvBqpE,EAAUv6K,UAAUkyG,kBAAoB,WACpCx0G,KAAK88K,YAAc5oE,EAAA,QACnBl0G,KAAKy0G,iBACLz0G,KAAKi9K,wBAKTJ,EAAUv6K,UAAUoyG,iBAAmB,WACnC10G,KAAK88K,YAAc5oE,EAAA,SACfl0G,KAAKqrC,OACLrrC,KAAKo0G,OAAO+E,MAAQn5G,KAAKqrC,MAAM,GAC/BrrC,KAAKo0G,OAAOpyG,OAAShC,KAAKqrC,MAAM,IAGhCrrC,KAAKqrC,MAAQ,CAACrrC,KAAKo0G,OAAO+E,MAAOn5G,KAAKo0G,OAAOpyG,QAEjDhC,KAAKy0G,iBACLz0G,KAAKi9K,wBAMTJ,EAAUv6K,UAAUoxG,SAAW,SAAUN,GAErC,OADApzG,KAAKk9K,cAAc9pE,GACZpzG,KAAK0qK,QAAQt3D,GAAcpzG,KAAK0qK,QAAQt3D,GAAcpzG,KAAKo0G,QAMtEyoE,EAAUv6K,UAAUqxG,cAAgB,SAAUP,GAE1C,OADApzG,KAAKk9K,cAAc9pE,GACZpzG,KAAK0qK,QAAQt3D,GAAcA,EAAa,GAKnDypE,EAAUv6K,UAAUi2J,cAAgB,WAChC,OAAOv4J,KAAK88K,aAKhBD,EAAUv6K,UAAUyiJ,qBAAuB,WACvC,IAAK/kJ,KAAK+jJ,mBACN,GAAI/jJ,KAAKg9K,aAAc,CACnB,IAAI7jE,EAAQn5G,KAAKqrC,MAAM,GACnBrpC,EAAShC,KAAKqrC,MAAM,GACpBnmB,GAAU,QAAsBi0F,EAAOn3G,GAC3CkjB,EAAQm3I,SAAS,EAAG,EAAGljD,EAAOn3G,GAC9BhC,KAAK+jJ,mBAAqB7+H,EAAQ8nH,YAGlChtI,KAAK+jJ,mBAAqB/jJ,KAAKo0G,OAGvC,OAAOp0G,KAAK+jJ,oBAMhB84B,EAAUv6K,UAAUikH,QAAU,WAC1B,OAAOvmH,KAAKqrC,OAKhBwxI,EAAUv6K,UAAU66K,OAAS,WACzB,OAAOn9K,KAAKm0G,MAKhB0oE,EAAUv6K,UAAUS,KAAO,WACvB,GAAI/C,KAAK88K,aAAe5oE,EAAA,OAAiB,CACrCl0G,KAAK88K,YAAc5oE,EAAA,UACnB,IACqCl0G,KAAW,OAAE+zG,IAAM/zG,KAAKm0G,KAE7D,MAAOnkG,GACHhQ,KAAKw0G,oBAETx0G,KAAKs0G,WAAY,OAAYt0G,KAAKo0G,OAAQp0G,KAAK00G,iBAAiBllG,KAAKxP,MAAOA,KAAKw0G,kBAAkBhlG,KAAKxP,SAOhH68K,EAAUv6K,UAAU46K,cAAgB,SAAU9pE,GAC1C,GAAKpzG,KAAK28K,SACN38K,KAAK0qK,QAAQt3D,IACbpzG,KAAK88K,cAAgB5oE,EAAA,SAFzB,CAKA,IAAI84B,EAASj0B,SAASC,cAAc,UACpCh5G,KAAK0qK,QAAQt3D,GAAc45B,EAC3BA,EAAO7zB,MAAQv6G,KAAKuB,KAAKH,KAAKo0G,OAAO+E,MAAQ/F,GAC7C45B,EAAOhrI,OAASpD,KAAKuB,KAAKH,KAAKo0G,OAAOpyG,OAASoxG,GAC/C,IAAI1/E,EAAMs5G,EAAOrtE,WAAW,MAO5B,GANAjsC,EAAI2+C,MAAM+gC,EAAYA,GACtB1/E,EAAIumH,UAAUj6I,KAAKo0G,OAAQ,EAAG,GAC9B1gF,EAAIo1I,yBAA2B,WAIM,aAAjCp1I,EAAIo1I,0BAA2C9oK,KAAKg9K,aACpDtpJ,EAAImrH,WAAY,QAAS7+I,KAAK28K,QAC9BjpJ,EAAI2oI,SAAS,EAAG,EAAGrvB,EAAO7zB,MAAQ/F,EAAY45B,EAAOhrI,OAASoxG,GAC9D1/E,EAAIo1I,yBAA2B,iBAC/Bp1I,EAAIumH,UAAUj6I,KAAKo0G,OAAQ,EAAG,OAE7B,CAOD,IANA,IAAIgpE,EAAU1pJ,EAAIqgI,aAAa,EAAG,EAAG/mB,EAAO7zB,MAAO6zB,EAAOhrI,QACtDS,EAAO26K,EAAQ36K,KACfuf,EAAIhiB,KAAK28K,OAAO,GAAK,IACrB3vK,EAAIhN,KAAK28K,OAAO,GAAK,IACrBh9K,EAAIK,KAAK28K,OAAO,GAAK,IACrBj9K,EAAIM,KAAK28K,OAAO,GACXr9K,EAAI,EAAGiS,EAAK9O,EAAKlE,OAAQe,EAAIiS,EAAIjS,GAAK,EAC3CmD,EAAKnD,IAAM0iB,EACXvf,EAAKnD,EAAI,IAAM0N,EACfvK,EAAKnD,EAAI,IAAMK,EACf8C,EAAKnD,EAAI,IAAMI,EAEnBg0B,EAAI2pJ,aAAaD,EAAS,EAAG,MAQrCP,EAAUv6K,UAAUmyG,eAAiB,WAC7Bz0G,KAAKs0G,YACLt0G,KAAKs0G,YACLt0G,KAAKs0G,UAAY,OAGlBuoE,EAzOmB,CA0O5B,KAkBF,eEzRI,EAAwC,WACxC,IAAIprE,EAAgB,SAAU7+F,EAAGjT,GAI7B,OAHA8xG,EAAgB/oG,OAAOipG,gBAClB,CAAE3pF,UAAW,cAAgB/gB,OAAS,SAAU2L,EAAGjT,GAAKiT,EAAEoV,UAAYroB,IACvE,SAAUiT,EAAGjT,GAAK,IAAK,IAAIqB,KAAKrB,EAAO+I,OAAOpG,UAAUqiB,eAAe/U,KAAKjQ,EAAGqB,KAAI4R,EAAE5R,GAAKrB,EAAEqB,KACzFywG,EAAc7+F,EAAGjT,IAE5B,OAAO,SAAUiT,EAAGjT,GAChB,GAAiB,oBAANA,GAA0B,OAANA,EAC3B,MAAM,IAAI6jB,UAAU,uBAAyB6G,OAAO1qB,GAAK,iCAE7D,SAASiyG,IAAO5xG,KAAKwL,YAAcoH,EADnC6+F,EAAc7+F,EAAGjT,GAEjBiT,EAAEtQ,UAAkB,OAAN3C,EAAa+I,OAAOojC,OAAOnsC,IAAMiyG,EAAGtvG,UAAY3C,EAAE2C,UAAW,IAAIsvG,IAZ3C,GAkExC0qD,EAAsB,SAAUvqD,GAKhC,SAASuqD,EAAKlqD,GACV,IAAI34E,EAAQz5B,KACRyG,EAAU2rG,GAAe,GAIzBs6B,OAA8Bt/H,IAApB3G,EAAQimI,QAAwBjmI,EAAQimI,QAAU,EAI5Dr2B,OAAgCjpG,IAArB3G,EAAQ4vG,SAAyB5vG,EAAQ4vG,SAAW,EAI/DhkC,OAA0BjlE,IAAlB3G,EAAQ4rE,MAAsB5rE,EAAQ4rE,MAAQ,EAItDi/E,OAA4ClkJ,IAA3B3G,EAAQ6qJ,gBAA+B7qJ,EAAQ6qJ,gBACpE73H,EAAQs4E,EAAOniG,KAAK5P,KAAM,CACtB0sI,QAASA,EACTr2B,SAAUA,EACVhkC,MAAOA,EACPiqG,kBAAuClvK,IAAzB3G,EAAQ61K,aAA6B71K,EAAQ61K,aAAe,CAAC,EAAG,GAC9EhrB,eAAgBA,KACdtxJ,MAKAk1H,aAA6B9nH,IAAnB3G,EAAQunH,OAAuBvnH,EAAQunH,OAAS,CAAC,GAAK,IAKtEv0F,EAAM6jJ,kBAAoB,KAK1B7jJ,EAAM8jJ,mBACuBnwK,IAAzB3G,EAAQ+2K,aACF/2K,EAAQ+2K,aACRC,EAKVhkJ,EAAMikJ,mBACuBtwK,IAAzB3G,EAAQ81J,aACF91J,EAAQ81J,aACRC,EAAA,WAKV/iI,EAAMkkJ,mBACuBvwK,IAAzB3G,EAAQg2J,aACFh2J,EAAQg2J,aACRD,EAAA,WAKV/iI,EAAM2qI,kBACsBh3J,IAAxB3G,EAAQutG,YAA4BvtG,EAAQutG,YAAc,KAI9D,IAAIa,OAAwBznG,IAAhB3G,EAAQuuG,IAAoBvuG,EAAQuuG,IAAM,KAIlDknD,OAA8B9uJ,IAApB3G,EAAQy1J,QAAwBz1J,EAAQy1J,QAAU,KAI5DnoD,EAAMttG,EAAQstG,KAClB,cAAiB3mG,IAAR2mG,GAAqBc,GAAQ,IACtC,QAAQA,GAAUA,GAASqnD,EAAU,QACxB9uJ,IAAR2mG,GAAoC,IAAfA,EAAIx1G,SAAiBs2G,IAC3Cd,EAAsC,EAAQA,MAAO,QAAOc,KAEhE,YAAeznG,IAAR2mG,GAAqBA,EAAIx1G,OAAS,EAAG,GAI5C,IAAI86J,OAA6BjsJ,IAAhB3G,EAAQstG,IAAoBG,EAAA,OAAkBA,EAAA,SAmC/D,OA9BAz6E,EAAMkjJ,YAA2BvvK,IAAlB3G,EAAQ0kC,OAAsB,QAAQ1kC,EAAQ0kC,OAAS,KAKtE1R,EAAMmkJ,WFyGP,SAAa/oE,EAAOd,EAAKt/E,EAAMu/E,EAAaqlD,EAAYluH,GAC3D,IAAI0yI,EAAY,QAAmB9pE,EAAKC,EAAa7oE,GAKrD,OAJK0yI,IACDA,EAAY,IAAIhB,EAAUhoE,EAAOd,EAAKt/E,EAAMu/E,EAAaqlD,EAAYluH,GACrE,QAAmB4oE,EAAKC,EAAa7oE,EAAO0yI,IAEzCA,EE/GgBj2J,CAAaitF,EACV,EAAOqnD,EAASziI,EAAM2qI,aAAc/K,EAAY5/H,EAAMkjJ,QAK5EljJ,EAAMqkJ,aAA6B1wK,IAAnB3G,EAAQqyF,OAAuBryF,EAAQqyF,OAAS,CAAC,EAAG,GAKpEr/D,EAAMskJ,mBACuB3wK,IAAzB3G,EAAQu3K,aACFv3K,EAAQu3K,aACRP,EAKVhkJ,EAAM+zI,QAAU,KAKhB/zI,EAAM4R,WAAyBj+B,IAAjB3G,EAAQguB,KAAqBhuB,EAAQguB,KAAO,KACnDgF,EAqMX,OAnUA,EAAU6iI,EAAMvqD,GAqIhBuqD,EAAKh6J,UAAUyqC,MAAQ,WACnB,IAAIslC,EAAQryE,KAAKioD,WACjB,OAAO,IAAIq0G,EAAK,CACZtuC,OAAQhuH,KAAKk1H,QAAQhyH,QACrBs6K,aAAcx9K,KAAKu9K,cACnBhhB,aAAcv8J,KAAK09K,cACnBjhB,aAAcz8J,KAAK29K,cACnB3pE,YAAah0G,KAAKokK,aAClBj5H,MAAOnrC,KAAK28K,QAAU38K,KAAK28K,OAAOz5K,MAC5BlD,KAAK28K,OAAOz5K,QACZlD,KAAK28K,aAAUvvK,EACrB2mG,IAAK/zG,KAAKm9K,SACVrkF,OAAQ94F,KAAK89K,QAAQ56K,QACrB86K,aAAch+K,KAAK+9K,cACnBtpJ,KAAqB,OAAfz0B,KAAKqrC,MAAiBrrC,KAAKqrC,MAAMnoC,aAAUkK,EACjDs/H,QAAS1sI,KAAKywI,aACdp+D,MAAOprE,MAAMC,QAAQmrE,GAASA,EAAMnvE,QAAUmvE,EAC9CgkC,SAAUr2G,KAAK0tH,cACf4jC,eAAgBtxJ,KAAKilJ,uBAS7BqX,EAAKh6J,UAAUuiJ,UAAY,WACvB,GAAI7kJ,KAAKs9K,kBACL,OAAOt9K,KAAKs9K,kBAEhB,IAAItvD,EAAShuH,KAAKk1H,QACdzgG,EAAOz0B,KAAKumH,UAChB,GAAIvmH,KAAK09K,eAAiBlhB,EAAA,YACtBx8J,KAAK29K,eAAiBnhB,EAAA,WAA0B,CAChD,IAAK/nI,EACD,OAAO,KAEXu5F,EAAShuH,KAAKk1H,QAAQhyH,QAClBlD,KAAK09K,eAAiBlhB,EAAA,aACtBxuC,EAAO,IAAMv5F,EAAK,IAElBz0B,KAAK29K,eAAiBnhB,EAAA,aACtBxuC,EAAO,IAAMv5F,EAAK,IAG1B,GAAIz0B,KAAKu9K,eAAiBE,EAAqB,CAC3C,IAAKhpJ,EACD,OAAO,KAEPu5F,IAAWhuH,KAAKk1H,UAChBlH,EAAShuH,KAAKk1H,QAAQhyH,SAEtBlD,KAAKu9K,eAAiBE,GACtBz9K,KAAKu9K,eAAiBE,IACtBzvD,EAAO,IAAMA,EAAO,GAAKv5F,EAAK,IAE9Bz0B,KAAKu9K,eAAiBE,GACtBz9K,KAAKu9K,eAAiBE,IACtBzvD,EAAO,IAAMA,EAAO,GAAKv5F,EAAK,IAGtC,IAAI6nJ,EAAet8K,KAAKu8K,kBAIxB,OAHAvuD,EAAO,IAAMsuD,EAAa,GAC1BtuD,EAAO,IAAMsuD,EAAa,GAC1Bt8K,KAAKs9K,kBAAoBtvD,EAClBhuH,KAAKs9K,mBAShBhhB,EAAKh6J,UAAU27K,UAAY,SAAUjwD,GACjChuH,KAAKk1H,QAAUlH,EACfhuH,KAAKs9K,kBAAoB,MAO7BhhB,EAAKh6J,UAAUu/I,SAAW,WACtB,OAAO7hJ,KAAK28K,QAQhBrgB,EAAKh6J,UAAUoxG,SAAW,SAAUN,GAChC,OAAOpzG,KAAK49K,WAAWlqE,SAASN,IAQpCkpD,EAAKh6J,UAAUqxG,cAAgB,SAAUP,GACrC,OAAOpzG,KAAK49K,WAAWjqE,cAAcP,IAKzCkpD,EAAKh6J,UAAU65J,aAAe,WAC1B,OAAOn8J,KAAK49K,WAAWr3D,WAK3B+1C,EAAKh6J,UAAUi2J,cAAgB,WAC3B,OAAOv4J,KAAK49K,WAAWrlB,iBAK3B+D,EAAKh6J,UAAUyiJ,qBAAuB,WAClC,OAAO/kJ,KAAK49K,WAAW74B,wBAO3BuX,EAAKh6J,UAAU0iJ,UAAY,WACvB,GAAIhlJ,KAAKwtK,QACL,OAAOxtK,KAAKwtK,QAEhB,IAAI10E,EAAS94F,KAAK89K,QAClB,GAAI99K,KAAK+9K,eAAiBN,EAAqB,CAC3C,IAAIhpJ,EAAOz0B,KAAKumH,UACZ23D,EAAgBl+K,KAAK49K,WAAWr3D,UACpC,IAAK9xF,IAASypJ,EACV,OAAO,KAEXplF,EAASA,EAAO51F,QACZlD,KAAK+9K,eAAiBN,GACtBz9K,KAAK+9K,eAAiBN,IACtB3kF,EAAO,GAAKolF,EAAc,GAAKzpJ,EAAK,GAAKqkE,EAAO,IAEhD94F,KAAK+9K,eAAiBN,GACtBz9K,KAAK+9K,eAAiBN,IACtB3kF,EAAO,GAAKolF,EAAc,GAAKzpJ,EAAK,GAAKqkE,EAAO,IAIxD,OADA94F,KAAKwtK,QAAU10E,EACR94F,KAAKwtK,SAOhBlR,EAAKh6J,UAAU66K,OAAS,WACpB,OAAOn9K,KAAK49K,WAAWT,UAO3B7gB,EAAKh6J,UAAUikH,QAAU,WACrB,OAAQvmH,KAAKqrC,MAAoCrrC,KAAKqrC,MAAjCrrC,KAAK49K,WAAWr3D,WAKzC+1C,EAAKh6J,UAAUi3J,kBAAoB,SAAUJ,GACzCn5J,KAAK49K,WAAWthE,iBAAiB9I,EAAA,SAAkB2lD,IASvDmD,EAAKh6J,UAAUS,KAAO,WAClB/C,KAAK49K,WAAW76K,QAKpBu5J,EAAKh6J,UAAUg3J,oBAAsB,SAAUH,GAC3Cn5J,KAAK49K,WAAW//D,oBAAoBrK,EAAA,SAAkB2lD,IAEnDmD,EApUc,CAqUvB,KACF,sCCjYA,KAKI6hB,SAAU,WAKVC,OAAQ,6FCTRC,EAAgC,WAChC,SAASA,IAKLr+K,KAAKs+K,OAAS,GAKdt+K,KAAKu+K,WAAa,EAKlBv+K,KAAKw+K,cAAgB,GA8DzB,OAzDAH,EAAe/7K,UAAUjC,MAAQ,WAC7BL,KAAKs+K,OAAS,GACdt+K,KAAKu+K,WAAa,GAKtBF,EAAe/7K,UAAU63I,eAAiB,WACtC,OAAOn6I,KAAKu+K,WAAav+K,KAAKw+K,eAKlCH,EAAe/7K,UAAUm8K,OAAS,WAC9B,GAAIz+K,KAAKm6I,iBAAkB,CACvB,IAAI76I,EAAI,EACR,IAAK,IAAIkX,KAAOxW,KAAKs+K,OAAQ,CACzB,IAAIT,EAAY79K,KAAKs+K,OAAO9nK,GACV,KAAP,EAANlX,MAAmBu+K,EAAUjkE,uBACvB55G,KAAKs+K,OAAO9nK,KACjBxW,KAAKu+K,eAWvBF,EAAe/7K,UAAUslB,IAAM,SAAUmsF,EAAKC,EAAa7oE,GACvD,IAAI30B,EAAMoqC,EAAOmzD,EAAKC,EAAa7oE,GACnC,OAAO30B,KAAOxW,KAAKs+K,OAASt+K,KAAKs+K,OAAO9nK,GAAO,MAQnD6nK,EAAe/7K,UAAU4Y,IAAM,SAAU64F,EAAKC,EAAa7oE,EAAO0yI,GAC9D,IAAIrnK,EAAMoqC,EAAOmzD,EAAKC,EAAa7oE,GACnCnrC,KAAKs+K,OAAO9nK,GAAOqnK,IACjB79K,KAAKu+K,YASXF,EAAe/7K,UAAUwnH,QAAU,SAAU40D,GACzC1+K,KAAKw+K,cAAgBE,EACrB1+K,KAAKy+K,UAEFJ,EA9EwB,GAsFnC,SAASz9H,EAAOmzD,EAAKC,EAAa7oE,GAE9B,OAAO6oE,EAAc,IAAMD,EAAM,KADf5oE,GAAQ,QAASA,GAAS,QAGhD,IAMWwzI,EAAS,IAAIN,+DCnFpBO,EAA4B,WAI5B,SAASA,EAAWn4K,GAKhBzG,KAAKokJ,SAAW39I,EAAQimI,QAKxB1sI,KAAKukJ,gBAAkB99I,EAAQ6qJ,eAK/BtxJ,KAAKwtH,UAAY/mH,EAAQ4vG,SAKzBr2G,KAAKwkJ,OAAS/9I,EAAQ4rE,MAKtBryE,KAAK6+K,aAAc,QAAOp4K,EAAQ4rE,OAKlCryE,KAAK8+K,cAAgBr4K,EAAQ61K,aAyLjC,OAlLAsC,EAAWt8K,UAAUyqC,MAAQ,WACzB,IAAIslC,EAAQryE,KAAKioD,WACjB,OAAO,IAAI22H,EAAW,CAClBlyC,QAAS1sI,KAAKywI,aACdp+D,MAAOprE,MAAMC,QAAQmrE,GAASA,EAAMnvE,QAAUmvE,EAC9CgkC,SAAUr2G,KAAK0tH,cACf4jC,eAAgBtxJ,KAAKilJ,oBACrBq3B,aAAct8K,KAAKu8K,kBAAkBr5K,WAQ7C07K,EAAWt8K,UAAUmuI,WAAa,WAC9B,OAAOzwI,KAAKokJ,UAOhBw6B,EAAWt8K,UAAU2iJ,kBAAoB,WACrC,OAAOjlJ,KAAKukJ,iBAOhBq6B,EAAWt8K,UAAUorH,YAAc,WAC/B,OAAO1tH,KAAKwtH,WAOhBoxD,EAAWt8K,UAAU2lD,SAAW,WAC5B,OAAOjoD,KAAKwkJ,QAMhBo6B,EAAWt8K,UAAU4iJ,cAAgB,WACjC,OAAOllJ,KAAK6+K,aAOhBD,EAAWt8K,UAAUi6K,gBAAkB,WACnC,OAAOv8K,KAAK8+K,eAQhBF,EAAWt8K,UAAUuiJ,UAAY,WAC7B,OAAO,WAQX+5B,EAAWt8K,UAAUoxG,SAAW,SAAUN,GACtC,OAAO,WAMXwrE,EAAWt8K,UAAUyiJ,qBAAuB,WACxC,OAAO,WAOX65B,EAAWt8K,UAAUqxG,cAAgB,SAAUP,GAC3C,OAAO,GAMXwrE,EAAWt8K,UAAUi2J,cAAgB,WACjC,OAAO,WAMXqmB,EAAWt8K,UAAU65J,aAAe,WAChC,OAAO,WAOXyiB,EAAWt8K,UAAU0iJ,UAAY,WAC7B,OAAO,WAOX45B,EAAWt8K,UAAUikH,QAAU,WAC3B,OAAO,WAQXq4D,EAAWt8K,UAAU2uI,WAAa,SAAUvE,GACxC1sI,KAAKokJ,SAAW1X,GAQpBkyC,EAAWt8K,UAAUy8K,kBAAoB,SAAUztB,GAC/CtxJ,KAAKukJ,gBAAkB+M,GAQ3BstB,EAAWt8K,UAAUsrH,YAAc,SAAUvX,GACzCr2G,KAAKwtH,UAAYnX,GAQrBuoE,EAAWt8K,UAAUwlD,SAAW,SAAUuqB,GACtCryE,KAAKwkJ,OAASnyE,EACdryE,KAAK6+K,aAAc,QAAOxsG,IAM9BusG,EAAWt8K,UAAUi3J,kBAAoB,SAAUJ,IAC/C,WAMJylB,EAAWt8K,UAAUS,KAAO,YACxB,WAMJ67K,EAAWt8K,UAAUg3J,oBAAsB,SAAUH,IACjD,WAEGylB,EA3NoB,GA6N/B,8CC9OQntE,oEADJC,GACID,EAAgB,SAAU7+F,EAAGjT,GAI7B,OAHA8xG,EAAgB/oG,OAAOipG,gBAClB,CAAE3pF,UAAW,cAAgB/gB,OAAS,SAAU2L,EAAGjT,GAAKiT,EAAEoV,UAAYroB,IACvE,SAAUiT,EAAGjT,GAAK,IAAK,IAAIqB,KAAKrB,EAAO+I,OAAOpG,UAAUqiB,eAAe/U,KAAKjQ,EAAGqB,KAAI4R,EAAE5R,GAAKrB,EAAEqB,KACzFywG,EAAc7+F,EAAGjT,IAErB,SAAUiT,EAAGjT,GAChB,GAAiB,oBAANA,GAA0B,OAANA,EAC3B,MAAM,IAAI6jB,UAAU,uBAAyB6G,OAAO1qB,GAAK,iCAE7D,SAASiyG,IAAO5xG,KAAKwL,YAAcoH,EADnC6+F,EAAc7+F,EAAGjT,GAEjBiT,EAAEtQ,UAAkB,OAAN3C,EAAa+I,OAAOojC,OAAOnsC,IAAMiyG,EAAGtvG,UAAY3C,EAAE2C,UAAW,IAAIsvG,KA2CnFotE,EAA8B,SAAUjtE,GAKxC,SAASitE,EAAav4K,GAClB,IAAIgzB,EAAQz5B,KAIRsxJ,OAA4ClkJ,IAA3B3G,EAAQ6qJ,gBAA+B7qJ,EAAQ6qJ,eAsEpE,OArEA73H,EAAQs4E,EAAOniG,KAAK5P,KAAM,CACtB0sI,QAAS,EACT4kB,eAAgBA,EAChBj7C,cAA+BjpG,IAArB3G,EAAQ4vG,SAAyB5vG,EAAQ4vG,SAAW,EAC9DhkC,WAAyBjlE,IAAlB3G,EAAQ4rE,MAAsB5rE,EAAQ4rE,MAAQ,EACrDiqG,kBAAuClvK,IAAzB3G,EAAQ61K,aAA6B71K,EAAQ61K,aAAe,CAAC,EAAG,MAC5Et8K,MAKA0qK,aAAUt9J,EAKhBqsB,EAAMwlJ,oBAAsB,KAK5BxlJ,EAAMg1H,WAAyBrhJ,IAAjB3G,EAAQqqC,KAAqBrqC,EAAQqqC,KAAO,KAK1DrX,EAAM+zI,QAAU,CAAC,EAAG,GAKpB/zI,EAAMo5F,QAAUpsH,EAAQwD,OAKxBwvB,EAAMgjJ,aACiBrvK,IAAnB3G,EAAQmvF,OAAuBnvF,EAAQmvF,OAASnvF,EAAQy4K,QAK5DzlJ,EAAM0lJ,SAAW14K,EAAQ24K,QAKzB3lJ,EAAMq5F,YAA2B1lH,IAAlB3G,EAAQqE,MAAsBrE,EAAQqE,MAAQ,EAK7D2uB,EAAM4lJ,aAA6BjyK,IAAnB3G,EAAQg/I,OAAuBh/I,EAAQg/I,OAAS,KAKhEhsH,EAAMy7F,QAAU,KAKhBz7F,EAAM4R,MAAQ,KAKd5R,EAAM6lJ,eAAiB,KACvB7lJ,EAAM4gF,SACC5gF,EAsZX,OAreAi4E,EAAUstE,EAAcjtE,GAsFxBitE,EAAa18K,UAAUyqC,MAAQ,WAC3B,IAAIslC,EAAQryE,KAAKioD,WACbgxD,EAAQ,IAAI+lE,EAAa,CACzBluI,KAAM9wC,KAAKwpJ,UAAYxpJ,KAAKwpJ,UAAUz8G,aAAU3/B,EAChDnD,OAAQjK,KAAK44E,YACbgd,OAAQ51F,KAAK+qI,YACbq0C,QAASp/K,KAAKu/K,aACdz0K,MAAO9K,KAAKovH,WACZq2B,OAAQzlJ,KAAK0pJ,YAAc1pJ,KAAK0pJ,YAAY38G,aAAU3/B,EACtDipG,SAAUr2G,KAAK0tH,cACf4jC,eAAgBtxJ,KAAKilJ,oBACrB5yE,MAAOprE,MAAMC,QAAQmrE,GAASA,EAAMnvE,QAAUmvE,EAC9CiqG,aAAct8K,KAAKu8K,kBAAkBr5K,UAGzC,OADA+1G,EAAMg4B,WAAWjxI,KAAKywI,cACfx3B,GAQX+lE,EAAa18K,UAAUuiJ,UAAY,WAC/B,OAAO7kJ,KAAKk1H,SAOhB8pD,EAAa18K,UAAU8sH,SAAW,WAC9B,OAAOpvH,KAAK8yH,QAOhBksD,EAAa18K,UAAUknJ,QAAU,WAC7B,OAAOxpJ,KAAKyuJ,OAKhBuwB,EAAa18K,UAAUyiJ,qBAAuB,WAI1C,OAHK/kJ,KAAKi/K,qBACNj/K,KAAKw/K,0BAA0Bx/K,KAAKs/K,gBAEjCt/K,KAAKi/K,qBAQhBD,EAAa18K,UAAUoxG,SAAW,SAAUN,GACxC,IAAIyB,EAAQ70G,KAAK0qK,QAAQt3D,GACzB,IAAKyB,EAAO,CACR,IAAI4qE,EAAgBz/K,KAAKs/K,eACrBp6J,GAAU,QAAsBu6J,EAAchrJ,KAAO2+E,EAAYqsE,EAAchrJ,KAAO2+E,GAC1FpzG,KAAK0/K,MAAMD,EAAev6J,EAASkuF,GACnCyB,EAAQ3vF,EAAQ8nH,OAChBhtI,KAAK0qK,QAAQt3D,GAAcyB,EAE/B,OAAOA,GAOXmqE,EAAa18K,UAAUqxG,cAAgB,SAAUP,GAC7C,OAAOA,GAKX4rE,EAAa18K,UAAU65J,aAAe,WAClC,OAAOn8J,KAAKqrC,OAKhB2zI,EAAa18K,UAAUi2J,cAAgB,WACnC,OAAO,YAOXymB,EAAa18K,UAAU0iJ,UAAY,WAC/B,OAAOhlJ,KAAKwtK,SAOhBwR,EAAa18K,UAAUs2E,UAAY,WAC/B,OAAO54E,KAAK6yH,SAOhBmsD,EAAa18K,UAAUyoI,UAAY,WAC/B,OAAO/qI,KAAKy8K,SAOhBuC,EAAa18K,UAAUi9K,WAAa,WAChC,OAAOv/K,KAAKm/K,UAOhBH,EAAa18K,UAAUikH,QAAU,WAC7B,OAAOvmH,KAAKqrC,OAOhB2zI,EAAa18K,UAAUonJ,UAAY,WAC/B,OAAO1pJ,KAAKq/K,SAKhBL,EAAa18K,UAAUi3J,kBAAoB,SAAUJ,KAIrD6lB,EAAa18K,UAAUS,KAAO,aAI9Bi8K,EAAa18K,UAAUg3J,oBAAsB,SAAUH,KASvD6lB,EAAa18K,UAAUq9K,uBAAyB,SAAUj9B,EAAU4G,EAAavG,GAC7E,GAAoB,IAAhBuG,GACAtpJ,KAAK6yH,UAAYl1H,EAAAA,GACH,UAAb+kJ,GAAqC,UAAbA,EACzB,OAAO4G,EAwBX,IAAIs2B,EAAK5/K,KAAKy8K,QACVoD,OAAuBzyK,IAAlBpN,KAAKm/K,SAAyBS,EAAK5/K,KAAKm/K,SACjD,GAAIS,EAAKC,EAAI,CACT,IAAIpgL,EAAMmgL,EACVA,EAAKC,EACLA,EAAKpgL,EAET,IAAIwK,OAA2BmD,IAAlBpN,KAAKm/K,SAAyBn/K,KAAK6yH,QAAyB,EAAf7yH,KAAK6yH,QAC3DinB,EAAS,EAAIl7I,KAAK2J,GAAM0B,EACxBvK,EAAImgL,EAAKjhL,KAAKgnE,IAAIk0E,GAElBlnI,EAAIgtK,EADAhhL,KAAKK,KAAK4gL,EAAKA,EAAKngL,EAAIA,GAE5BsQ,EAAIpR,KAAKK,KAAKS,EAAIA,EAAIkT,EAAIA,GAC1BktK,EAAa9vK,EAAItQ,EACrB,GAAiB,UAAbgjJ,GAAwBo9B,GAAc/8B,EACtC,OAAO+8B,EAAax2B,EAexB,IAAIprJ,EAAIorJ,EAAc,EAAIw2B,EACtB/zK,EAAKu9I,EAAc,GAAM12I,EAAI5C,GAE7B+vK,EADOnhL,KAAKK,MAAM2gL,EAAK1hL,IAAM0hL,EAAK1hL,GAAK6N,EAAIA,GACzB6zK,EACtB,QAAsBxyK,IAAlBpN,KAAKm/K,UAAuC,UAAbz8B,EAC/B,OAAkB,EAAXq9B,EAIX,IAAIC,EAAKJ,EAAKhhL,KAAKgnE,IAAIk0E,GAEnB0W,EAAKqvB,EADAjhL,KAAKK,KAAK2gL,EAAKA,EAAKI,EAAKA,GAG9BC,EADKrhL,KAAKK,KAAK+gL,EAAKA,EAAKxvB,EAAKA,GACPwvB,EAC3B,GAAIC,GAAmBl9B,EAAY,CAC/B,IAAIm9B,EAAeD,EAAkB32B,EAAe,EAAIu2B,EAAKD,EAC7D,OAAO,EAAIhhL,KAAKM,IAAI6gL,EAAUG,GAElC,OAAkB,EAAXH,GAMXf,EAAa18K,UAAU69K,oBAAsB,WACzC,IAIIrhC,EAJA4D,EAAW,KACXK,EAAa,EACbX,EAAW,KACXG,EAAiB,EAEjB+G,EAAc,EACdtpJ,KAAKq/K,UAEe,QADpBvgC,EAAc9+I,KAAKq/K,QAAQx9B,cAEvB/C,EAAc,MAElBA,GAAc,OAAYA,QAEN1xI,KADpBk8I,EAActpJ,KAAKq/K,QAAQ5sI,cAEvB62G,EAAc,MAElBlH,EAAWpiJ,KAAKq/K,QAAQl9B,cACxBI,EAAiBviJ,KAAKq/K,QAAQ/8B,yBAEbl1I,KADjBs1I,EAAW1iJ,KAAKq/K,QAAQ58B,iBAEpBC,EAAW,WAGIt1I,KADnB21I,EAAa/iJ,KAAKq/K,QAAQv8B,mBAEtBC,EAAa,OAGrB,IAAI3vH,EAAMpzB,KAAK2/K,uBAAuBj9B,EAAU4G,EAAavG,GACzDq9B,EAAYxhL,KAAKM,IAAIc,KAAKy8K,QAASz8K,KAAKm/K,UAAY,GAExD,MAAO,CACHrgC,YAAaA,EACbwK,YAAaA,EACb70H,KAJO71B,KAAKuB,KAAK,EAAIigL,EAAYhtJ,GAKjCgvH,SAAUA,EACVG,eAAgBA,EAChBG,SAAUA,EACVK,WAAYA,IAMpBi8B,EAAa18K,UAAU+3G,OAAS,WAC5Br6G,KAAKs/K,eAAiBt/K,KAAKmgL,sBAC3B,IAAI1rJ,EAAOz0B,KAAKs/K,eAAe7qJ,KAC3B6nJ,EAAet8K,KAAKu8K,kBACxBv8K,KAAK0qK,QAAU,GACf1qK,KAAKk1H,QAAU,CAACzgG,EAAO,EAAI6nJ,EAAa,GAAI7nJ,EAAO,EAAI6nJ,EAAa,IACpEt8K,KAAKqrC,MAAQ,CAAC5W,EAAMA,IAQxBuqJ,EAAa18K,UAAUo9K,MAAQ,SAAUD,EAAev6J,EAASkuF,GAK7D,GAJAluF,EAAQmtD,MAAM+gC,EAAYA,GAE1BluF,EAAQiuB,UAAUssI,EAAchrJ,KAAO,EAAGgrJ,EAAchrJ,KAAO,GAC/Dz0B,KAAKqgL,YAAYn7J,GACbllB,KAAKyuJ,MAAO,CACZ,IAAItjH,EAAQnrC,KAAKyuJ,MAAM5M,WACT,OAAV12G,IACAA,EAAQ,MAEZjmB,EAAQ25H,WAAY,OAAY1zG,GAChCjmB,EAAQ4rB,OAER9wC,KAAKq/K,UACLn6J,EAAQ45H,YAAc2gC,EAAc3gC,YACpC55H,EAAQ09H,UAAY68B,EAAcn2B,YAC9BpkI,EAAQopI,aAAemxB,EAAcr9B,WACrCl9H,EAAQopI,YAAYmxB,EAAcr9B,UAClCl9H,EAAQq9H,eAAiBk9B,EAAcl9B,gBAE3Cr9H,EAAQw9H,SAAW+8B,EAAc/8B,SACjCx9H,EAAQ69H,WAAa08B,EAAc18B,WACnC79H,EAAQugI,WAOhBu5B,EAAa18K,UAAUk9K,0BAA4B,SAAUC,GACzD,GAAIz/K,KAAKyuJ,MAAO,CACZ,IAAItjH,EAAQnrC,KAAKyuJ,MAAM5M,WAEnBnV,EAAU,EAUd,GATqB,kBAAVvhG,IACPA,GAAQ,QAAQA,IAEN,OAAVA,EACAuhG,EAAU,EAELzlI,MAAMC,QAAQikC,KACnBuhG,EAA2B,IAAjBvhG,EAAM5sC,OAAe4sC,EAAM,GAAK,GAE9B,IAAZuhG,EAAe,CAGf,IAAIxnH,GAAU,QAAsBu6J,EAAchrJ,KAAMgrJ,EAAchrJ,MACtEz0B,KAAKi/K,oBAAsB/5J,EAAQ8nH,OACnChtI,KAAKsgL,wBAAwBb,EAAev6J,IAG/CllB,KAAKi/K,sBACNj/K,KAAKi/K,oBAAsBj/K,KAAK0zG,SAAS,KAOjDsrE,EAAa18K,UAAU+9K,YAAc,SAAUn7J,GAC3C,IAAIjb,EAASjK,KAAK6yH,QACdj9B,EAAS51F,KAAKy8K,QAClB,GAAIxyK,IAAWtM,EAAAA,EACXunB,EAAQ+0E,IAAI,EAAG,EAAGrE,EAAQ,EAAG,EAAIh3F,KAAK2J,QAErC,CACD,IAAI62K,OAA4BhyK,IAAlBpN,KAAKm/K,SAAyBvpF,EAAS51F,KAAKm/K,cACpC/xK,IAAlBpN,KAAKm/K,WACLl1K,GAAU,GAId,IAFA,IAAIs2K,EAAavgL,KAAK8yH,OAASl0H,KAAK2J,GAAK,EACrC+5B,EAAQ,EAAI1jC,KAAK2J,GAAM0B,EAClB3K,EAAI,EAAGA,EAAI2K,EAAQ3K,IAAK,CAC7B,IAAIkhL,EAASD,EAAajhL,EAAIgjC,EAC1Bm+I,EAAUnhL,EAAI,IAAM,EAAIs2F,EAASwpF,EACrCl6J,EAAQi0H,OAAOsnC,EAAU7hL,KAAKqkE,IAAIu9G,GAASC,EAAU7hL,KAAKgnE,IAAI46G,IAElEt7J,EAAQmsI,cAQhB2tB,EAAa18K,UAAUg+K,wBAA0B,SAAUb,EAAev6J,GAEtEA,EAAQiuB,UAAUssI,EAAchrJ,KAAO,EAAGgrJ,EAAchrJ,KAAO,GAC/Dz0B,KAAKqgL,YAAYn7J,GACjBA,EAAQ25H,UAAY,KACpB35H,EAAQ4rB,OACJ9wC,KAAKq/K,UACLn6J,EAAQ45H,YAAc2gC,EAAc3gC,YACpC55H,EAAQ09H,UAAY68B,EAAcn2B,YAC9Bm2B,EAAcr9B,WACdl9H,EAAQopI,YAAYmxB,EAAcr9B,UAClCl9H,EAAQq9H,eAAiBk9B,EAAcl9B,gBAE3Cr9H,EAAQw9H,SAAW+8B,EAAc/8B,SACjCx9H,EAAQ69H,WAAa08B,EAAc18B,WACnC79H,EAAQugI,WAGTu5B,EAtesB,CAue/B,KACF,wCCzgBA,IAAI0B,EAAwB,WAIxB,SAASA,EAAOtuE,GACZ,IAAI3rG,EAAU2rG,GAAe,GAK7BpyG,KAAK28K,YAA2BvvK,IAAlB3G,EAAQ0kC,MAAsB1kC,EAAQ0kC,MAAQ,KAK5DnrC,KAAK2gL,SAAWl6K,EAAQw7I,QAKxBjiJ,KAAK4gL,eAAiCxzK,IAArB3G,EAAQ27I,SAAyB37I,EAAQ27I,SAAW,KAKrEpiJ,KAAK6gL,gBAAkBp6K,EAAQ87I,eAK/BviJ,KAAK8gL,UAAYr6K,EAAQi8I,SAKzB1iJ,KAAK+gL,YAAct6K,EAAQs8I,WAK3B/iJ,KAAKykJ,OAASh+I,EAAQ0yG,MAgJ1B,OAzIAunE,EAAOp+K,UAAUyqC,MAAQ,WACrB,IAAI5B,EAAQnrC,KAAK6hJ,WACjB,OAAO,IAAI6+B,EAAO,CACdv1I,MAAOlkC,MAAMC,QAAQikC,GAASA,EAAMjoC,QAAUioC,QAAS/9B,EACvD60I,QAASjiJ,KAAKgiJ,aACdI,SAAUpiJ,KAAKmiJ,cAAgBniJ,KAAKmiJ,cAAcj/I,aAAUkK,EAC5Dm1I,eAAgBviJ,KAAKsiJ,oBACrBI,SAAU1iJ,KAAKyiJ,cACfM,WAAY/iJ,KAAK8iJ,gBACjB3pC,MAAOn5G,KAAKyyC,cAQpBiuI,EAAOp+K,UAAUu/I,SAAW,WACxB,OAAO7hJ,KAAK28K,QAOhB+D,EAAOp+K,UAAU0/I,WAAa,WAC1B,OAAOhiJ,KAAK2gL,UAOhBD,EAAOp+K,UAAU6/I,YAAc,WAC3B,OAAOniJ,KAAK4gL,WAOhBF,EAAOp+K,UAAUggJ,kBAAoB,WACjC,OAAOtiJ,KAAK6gL,iBAOhBH,EAAOp+K,UAAUmgJ,YAAc,WAC3B,OAAOziJ,KAAK8gL,WAOhBJ,EAAOp+K,UAAUwgJ,cAAgB,WAC7B,OAAO9iJ,KAAK+gL,aAOhBL,EAAOp+K,UAAUmwC,SAAW,WACxB,OAAOzyC,KAAKykJ,QAQhBi8B,EAAOp+K,UAAU05J,SAAW,SAAU7wH,GAClCnrC,KAAK28K,OAASxxI,GAQlBu1I,EAAOp+K,UAAU0+K,WAAa,SAAU/+B,GACpCjiJ,KAAK2gL,SAAW1+B,GAcpBy+B,EAAOp+K,UAAUgsJ,YAAc,SAAUlM,GACrCpiJ,KAAK4gL,UAAYx+B,GAQrBs+B,EAAOp+K,UAAU2+K,kBAAoB,SAAU1+B,GAC3CviJ,KAAK6gL,gBAAkBt+B,GAQ3Bm+B,EAAOp+K,UAAU4+K,YAAc,SAAUx+B,GACrC1iJ,KAAK8gL,UAAYp+B,GAQrBg+B,EAAOp+K,UAAU6+K,cAAgB,SAAUp+B,GACvC/iJ,KAAK+gL,YAAch+B,GAQvB29B,EAAOp+K,UAAU8+K,SAAW,SAAUjoE,GAClCn5G,KAAKykJ,OAAStrC,GAEXunE,EAxLgB,GA0L3B,sLCrEIW,EAAuB,WAIvB,SAASA,EAAMjvE,GACX,IAAI3rG,EAAU2rG,GAAe,GAK7BpyG,KAAKowH,UAAY,KAKjBpwH,KAAKshL,kBAAoBC,OACAn0K,IAArB3G,EAAQI,UACR7G,KAAKwhL,YAAY/6K,EAAQI,UAM7B7G,KAAKyuJ,WAAyBrhJ,IAAjB3G,EAAQqqC,KAAqBrqC,EAAQqqC,KAAO,KAKzD9wC,KAAKo0G,YAA2BhnG,IAAlB3G,EAAQouG,MAAsBpuG,EAAQouG,MAAQ,KAK5D70G,KAAKgjH,eAAiC51G,IAArB3G,EAAQ82I,SAAyB92I,EAAQ82I,SAAW,KAKrEv9I,KAAKyhL,2BACgCr0K,IAAjC3G,EAAQ+2I,qBACF/2I,EAAQ+2I,qBACR,KAKVx9I,KAAKq/K,aAA6BjyK,IAAnB3G,EAAQg/I,OAAuBh/I,EAAQg/I,OAAS,KAK/DzlJ,KAAK2mJ,WAAyBv5I,IAAjB3G,EAAQ+/H,KAAqB//H,EAAQ+/H,KAAO,KAKzDxmI,KAAK0hL,QAAUj7K,EAAQ2yG,OAyL3B,OAlLAioE,EAAM/+K,UAAUyqC,MAAQ,WACpB,IAAIlmC,EAAW7G,KAAKusE,cAIpB,OAHI1lE,GAAgC,kBAAbA,IACnBA,EAAgE,EAAWkmC,SAExE,IAAIs0I,EAAM,CACbx6K,SAAUA,EACViqC,KAAM9wC,KAAKwpJ,UAAYxpJ,KAAKwpJ,UAAUz8G,aAAU3/B,EAChDynG,MAAO70G,KAAK0zG,WAAa1zG,KAAK0zG,WAAW3mE,aAAU3/B,EACnDmwI,SAAUv9I,KAAK43G,cACf6tC,OAAQzlJ,KAAK0pJ,YAAc1pJ,KAAK0pJ,YAAY38G,aAAU3/B,EACtDo5H,KAAMxmI,KAAK2qJ,UAAY3qJ,KAAK2qJ,UAAU59G,aAAU3/B,EAChDgsG,OAAQp5G,KAAKwwI,eASrB6wC,EAAM/+K,UAAUs1G,YAAc,WAC1B,OAAO53G,KAAKgjH,WAQhBq+D,EAAM/+K,UAAUq/K,YAAc,SAAUpkC,GACpCv9I,KAAKgjH,UAAYu6B,GAQrB8jC,EAAM/+K,UAAUs/K,wBAA0B,SAAUrkC,GAChDv9I,KAAKyhL,sBAAwBlkC,GAQjC8jC,EAAM/+K,UAAUq3J,wBAA0B,WACtC,OAAO35J,KAAKyhL,uBAShBJ,EAAM/+K,UAAUiqE,YAAc,WAC1B,OAAOvsE,KAAKowH,WAQhBixD,EAAM/+K,UAAUm0J,oBAAsB,WAClC,OAAOz2J,KAAKshL,mBAOhBD,EAAM/+K,UAAUknJ,QAAU,WACtB,OAAOxpJ,KAAKyuJ,OAOhB4yB,EAAM/+K,UAAUu/K,QAAU,SAAU/wI,GAChC9wC,KAAKyuJ,MAAQ39G,GAOjBuwI,EAAM/+K,UAAUoxG,SAAW,WACvB,OAAO1zG,KAAKo0G,QAOhBitE,EAAM/+K,UAAUsyG,SAAW,SAAUC,GACjC70G,KAAKo0G,OAASS,GAOlBwsE,EAAM/+K,UAAUonJ,UAAY,WACxB,OAAO1pJ,KAAKq/K,SAOhBgC,EAAM/+K,UAAUw/K,UAAY,SAAUr8B,GAClCzlJ,KAAKq/K,QAAU55B,GAOnB47B,EAAM/+K,UAAUqoJ,QAAU,WACtB,OAAO3qJ,KAAK2mJ,OAOhB06B,EAAM/+K,UAAU25J,QAAU,SAAUz1B,GAChCxmI,KAAK2mJ,MAAQngB,GAOjB66C,EAAM/+K,UAAUkuI,UAAY,WACxB,OAAOxwI,KAAK0hL,SAUhBL,EAAM/+K,UAAUk/K,YAAc,SAAU36K,GACZ,oBAAbA,EACP7G,KAAKshL,kBAAoBz6K,EAEA,kBAAbA,EACZ7G,KAAKshL,kBAAoB,SAAUh7K,GAC/B,OAA6DA,EAAQshB,IAAI/gB,IAGvEA,OAGYuG,IAAbvG,IACL7G,KAAKshL,kBAAoB,WACrB,OAA4D,IAJhEthL,KAAKshL,kBAAoBC,EAO7BvhL,KAAKowH,UAAYvpH,GAQrBw6K,EAAM/+K,UAAU6uI,UAAY,SAAU/3B,GAClCp5G,KAAK0hL,QAAUtoE,GAEZioE,EAjPe,GA2PnB,SAASU,EAAWpqK,GACvB,IAAI6jJ,EACJ,GAAmB,oBAAR7jJ,EACP6jJ,EAAgB7jJ,MAEf,CAID,IAAIqqK,EACJ,GAAI/6K,MAAMC,QAAQyQ,GACdqqK,EAAWrqK,OAGX,OAAqD,oBAArB,EAAe,UAAkB,IAEjEqqK,EAAW,CADsB,GAGrCxmB,EAAgB,WACZ,OAAOwmB,GAGf,OAAOxmB,EAKX,IAAIymB,EAAgB,KAMb,SAASC,EAAmB57K,EAAS6sG,GAMxC,IAAK8uE,EAAe,CAChB,IAAInxI,EAAO,IAAI,IAAK,CAChB3F,MAAO,0BAEPs6G,EAAS,IAAI,IAAO,CACpBt6G,MAAO,UACPguE,MAAO,OAEX8oE,EAAgB,CACZ,IAAIZ,EAAM,CACNxsE,MAAO,IAAI,IAAY,CACnB/jE,KAAMA,EACN20G,OAAQA,EACR7vD,OAAQ,IAEZ9kD,KAAMA,EACN20G,OAAQA,KAIpB,OAAOw8B,EAMJ,SAASE,IAEZ,IAAIrmB,EAAS,GACTsmB,EAAQ,CAAC,IAAK,IAAK,IAAK,GACxBC,EAAO,CAAC,EAAG,IAAK,IAAK,GA2CzB,OAzCAvmB,EAAO,aAAwB,CAC3B,IAAIulB,EAAM,CACNvwI,KAAM,IAAI,IAAK,CACX3F,MAAO,CAAC,IAAK,IAAK,IAAK,SAInC2wH,EAAO,mBAA8BA,EAAO,aAC5CA,EAAO,iBAA4B,CAC/B,IAAIulB,EAAM,CACN57B,OAAQ,IAAI,IAAO,CACft6G,MAAOi3I,EACPjpE,MAAOA,MAGf,IAAIkoE,EAAM,CACN57B,OAAQ,IAAI,IAAO,CACft6G,MAAOk3I,EACPlpE,MAnBA,OAuBZ2iD,EAAO,uBAAkCA,EAAO,iBAChDA,EAAO,YAAuBA,EAAO,aAAsBtqJ,OAAOsqJ,EAAO,kBACzEA,EAAO,WAAsB,CACzB,IAAIulB,EAAM,CACNxsE,MAAO,IAAI,IAAY,CACnBjf,OAAQujB,EACRroE,KAAM,IAAI,IAAK,CACX3F,MAAOk3I,IAEX58B,OAAQ,IAAI,IAAO,CACft6G,MAAOi3I,EACPjpE,MAAOA,QAGfC,OAAQz7G,EAAAA,KAGhBm+J,EAAO,iBAA4BA,EAAO,WAC1CA,EAAO,yBAAoCA,EAAO,aAAsBtqJ,OAAOsqJ,EAAO,iBAA2BA,EAAO,YACjHA,EAOX,SAASylB,EAAwBj7K,GAC7B,OAAOA,EAAQimE,cAEnB,kGC5fO,IAAI+1G,EAAmB,GAKnBC,EAAoB","sources":["webpack://Chouette/./node_modules/@turf/bbox/dist/js/index.js","webpack://Chouette/./node_modules/@turf/collect/node_modules/quickselect/quickselect.js","webpack://Chouette/./node_modules/@turf/collect/node_modules/rbush/index.js","webpack://Chouette/./node_modules/@turf/helpers/dist/js/index.js","webpack://Chouette/./node_modules/@turf/meta/dist/js/index.js","webpack://Chouette/./node_modules/@turf/unkink-polygon/node_modules/quickselect/quickselect.js","webpack://Chouette/./node_modules/@turf/unkink-polygon/node_modules/rbush/index.js","webpack://Chouette/./node_modules/call-bind/callBound.js","webpack://Chouette/./node_modules/call-bind/index.js","webpack://Chouette/./node_modules/concaveman/index.js","webpack://Chouette/./node_modules/deep-equal/index.js","webpack://Chouette/./node_modules/define-properties/index.js","webpack://Chouette/./node_modules/density-clustering/lib/DBSCAN.js","webpack://Chouette/./node_modules/density-clustering/lib/KMEANS.js","webpack://Chouette/./node_modules/density-clustering/lib/OPTICS.js","webpack://Chouette/./node_modules/density-clustering/lib/PriorityQueue.js","webpack://Chouette/./node_modules/density-clustering/lib/index.js","webpack://Chouette/./node_modules/earcut/src/earcut.js","webpack://Chouette/./node_modules/function-bind/implementation.js","webpack://Chouette/./node_modules/function-bind/index.js","webpack://Chouette/./node_modules/geojson-equality/index.js","webpack://Chouette/./node_modules/geojson-rbush/index.js","webpack://Chouette/./node_modules/get-intrinsic/index.js","webpack://Chouette/./node_modules/has-symbols/index.js","webpack://Chouette/./node_modules/has-symbols/shams.js","webpack://Chouette/./node_modules/has-tostringtag/shams.js","webpack://Chouette/./node_modules/has/src/index.js","webpack://Chouette/./node_modules/is-arguments/index.js","webpack://Chouette/./node_modules/is-date-object/index.js","webpack://Chouette/./node_modules/is-regex/index.js","webpack://Chouette/./node_modules/object-is/implementation.js","webpack://Chouette/./node_modules/object-is/index.js","webpack://Chouette/./node_modules/object-is/polyfill.js","webpack://Chouette/./node_modules/object-is/shim.js","webpack://Chouette/./node_modules/object-keys/implementation.js","webpack://Chouette/./node_modules/object-keys/index.js","webpack://Chouette/./node_modules/object-keys/isArguments.js","webpack://Chouette/./node_modules/point-in-polygon/flat.js","webpack://Chouette/./node_modules/point-in-polygon/index.js","webpack://Chouette/./node_modules/point-in-polygon/nested.js","webpack://Chouette/./node_modules/polygon-clipping/dist/polygon-clipping.umd.js","webpack://Chouette/./node_modules/rbush/rbush.min.js","webpack://Chouette/./node_modules/regexp.prototype.flags/implementation.js","webpack://Chouette/./node_modules/regexp.prototype.flags/index.js","webpack://Chouette/./node_modules/regexp.prototype.flags/polyfill.js","webpack://Chouette/./node_modules/regexp.prototype.flags/shim.js","webpack://Chouette/./node_modules/robust-predicates/umd/orient2d.min.js","webpack://Chouette/./node_modules/skmeans/dist/node/distance.js","webpack://Chouette/./node_modules/skmeans/dist/node/kinit.js","webpack://Chouette/./node_modules/skmeans/dist/node/main.js","webpack://Chouette/./node_modules/tinyqueue/index.js","webpack://Chouette/./node_modules/turf-jsts/jsts.min.js","webpack://Chouette/./node_modules/@turf/helpers/dist/es/index.js","webpack://Chouette/./node_modules/@turf/meta/dist/es/index.js","webpack://Chouette/./node_modules/@turf/bbox/dist/es/index.js","webpack://Chouette/./node_modules/@turf/invariant/dist/es/index.js","webpack://Chouette/./node_modules/@turf/boolean-point-in-polygon/dist/es/index.js","webpack://Chouette/./node_modules/@turf/distance/dist/es/index.js","webpack://Chouette/./node_modules/topojson-server/src/object.js","webpack://Chouette/./node_modules/topojson-server/src/hash/point-hash.js","webpack://Chouette/./node_modules/@turf/clean-coords/dist/es/index.js","webpack://Chouette/./node_modules/@turf/clone/dist/es/index.js","webpack://Chouette/./node_modules/@turf/simplify/dist/es/index.js","webpack://Chouette/./node_modules/@turf/bezier-spline/dist/es/lib/spline.js","webpack://Chouette/./node_modules/@turf/bbox-polygon/dist/es/index.js","webpack://Chouette/./node_modules/@turf/envelope/dist/es/index.js","webpack://Chouette/./node_modules/@turf/destination/dist/es/index.js","webpack://Chouette/./node_modules/@turf/bearing/dist/es/index.js","webpack://Chouette/./node_modules/@turf/line-segment/dist/es/index.js","webpack://Chouette/./node_modules/@turf/line-intersect/dist/es/index.js","webpack://Chouette/./node_modules/@turf/nearest-point-on-line/dist/es/index.js","webpack://Chouette/./node_modules/@turf/rhumb-distance/dist/es/index.js","webpack://Chouette/./node_modules/@turf/point-to-line-distance/dist/es/index.js","webpack://Chouette/./node_modules/@turf/along/dist/es/index.js","webpack://Chouette/./node_modules/@turf/length/dist/es/index.js","webpack://Chouette/./node_modules/@turf/line-slice/dist/es/index.js","webpack://Chouette/./node_modules/@turf/boolean-point-on-line/dist/es/index.js","webpack://Chouette/./node_modules/@turf/unkink-polygon/dist/es/index.js","webpack://Chouette/./node_modules/@turf/great-circle/dist/es/index.js","webpack://Chouette/./node_modules/@turf/polygon-to-line/dist/es/index.js","webpack://Chouette/./node_modules/@turf/isobands/dist/es/index.js","webpack://Chouette/./node_modules/@turf/polygonize/dist/es/lib/util.js","webpack://Chouette/./node_modules/@turf/polygonize/dist/es/lib/Node.js","webpack://Chouette/./node_modules/@turf/polygonize/dist/es/lib/Edge.js","webpack://Chouette/./node_modules/@turf/polygonize/dist/es/lib/EdgeRing.js","webpack://Chouette/./node_modules/@turf/polygonize/dist/es/lib/Graph.js","webpack://Chouette/./node_modules/@turf/boolean-disjoint/dist/es/index.js","webpack://Chouette/./node_modules/@turf/boolean-contains/dist/es/index.js","webpack://Chouette/./node_modules/@turf/boolean-intersects/dist/es/index.js","webpack://Chouette/./node_modules/@turf/shortest-path/dist/es/index.js","webpack://Chouette/./node_modules/d3-voronoi/src/RedBlackTree.js","webpack://Chouette/./node_modules/d3-voronoi/src/Edge.js","webpack://Chouette/./node_modules/d3-voronoi/src/Cell.js","webpack://Chouette/./node_modules/d3-voronoi/src/Circle.js","webpack://Chouette/./node_modules/d3-voronoi/src/Beach.js","webpack://Chouette/./node_modules/d3-voronoi/src/Diagram.js","webpack://Chouette/./node_modules/@turf/projection/dist/es/index.js","webpack://Chouette/./node_modules/d3-geo/src/adder.js","webpack://Chouette/./node_modules/d3-geo/src/math.js","webpack://Chouette/./node_modules/d3-geo/src/noop.js","webpack://Chouette/./node_modules/d3-geo/src/area.js","webpack://Chouette/./node_modules/d3-geo/src/cartesian.js","webpack://Chouette/./node_modules/d3-geo/src/bounds.js","webpack://Chouette/./node_modules/d3-geo/src/rotation.js","webpack://Chouette/./node_modules/d3-geo/src/clip/polygon.js","webpack://Chouette/./node_modules/d3-geo/src/pointEqual.js","webpack://Chouette/./node_modules/d3-array/src/ascending.js","webpack://Chouette/./node_modules/d3-array/src/bisector.js","webpack://Chouette/./node_modules/d3-array/src/bisect.js","webpack://Chouette/./node_modules/d3-array/src/array.js","webpack://Chouette/./node_modules/d3-array/src/ticks.js","webpack://Chouette/./node_modules/d3-geo/src/polygonContains.js","webpack://Chouette/./node_modules/d3-geo/src/length.js","webpack://Chouette/./node_modules/d3-geo/src/path/area.js","webpack://Chouette/./node_modules/d3-geo/src/path/measure.js","webpack://Chouette/./node_modules/d3-geo/src/path/string.js","webpack://Chouette/./node_modules/d3-geo/src/clip/index.js","webpack://Chouette/./node_modules/d3-geo/src/transform.js","webpack://Chouette/./node_modules/d3-geo/src/projection/resample.js","webpack://Chouette/./node_modules/d3-geo/src/projection/index.js","webpack://Chouette/./node_modules/d3-geo/src/projection/azimuthal.js","webpack://Chouette/./node_modules/d3-geo/src/projection/azimuthalEqualArea.js","webpack://Chouette/./node_modules/d3-geo/src/projection/azimuthalEquidistant.js","webpack://Chouette/./node_modules/d3-geo/src/projection/mercator.js","webpack://Chouette/./node_modules/d3-geo/src/projection/equirectangular.js","webpack://Chouette/./node_modules/d3-geo/src/projection/gnomonic.js","webpack://Chouette/./node_modules/d3-geo/src/projection/naturalEarth1.js","webpack://Chouette/./node_modules/d3-geo/src/projection/orthographic.js","webpack://Chouette/./node_modules/d3-geo/src/projection/stereographic.js","webpack://Chouette/./node_modules/d3-geo/src/projection/transverseMercator.js","webpack://Chouette/./node_modules/ol/Collection.js","webpack://Chouette/./node_modules/ol/CollectionEventType.js","webpack://Chouette/./node_modules/ol/ImageBase.js","webpack://Chouette/./node_modules/ol/Image.js","webpack://Chouette/./node_modules/ol/ImageState.js","webpack://Chouette/./node_modules/ol/renderer/Map.js","webpack://Chouette/./node_modules/ol/renderer/Composite.js","webpack://Chouette/./node_modules/ol/MapEvent.js","webpack://Chouette/./node_modules/ol/MapBrowserEvent.js","webpack://Chouette/./node_modules/ol/MapBrowserEventHandler.js","webpack://Chouette/./node_modules/ol/MapProperty.js","webpack://Chouette/./node_modules/ol/structs/PriorityQueue.js","webpack://Chouette/./node_modules/ol/TileQueue.js","webpack://Chouette/./node_modules/ol/PluggableMap.js","webpack://Chouette/./node_modules/ol/control/Attribution.js","webpack://Chouette/./node_modules/ol/control/Rotate.js","webpack://Chouette/./node_modules/ol/interaction/DoubleClickZoom.js","webpack://Chouette/./node_modules/ol/interaction/DragPan.js","webpack://Chouette/./node_modules/ol/interaction/DragRotate.js","webpack://Chouette/./node_modules/ol/render/Box.js","webpack://Chouette/./node_modules/ol/interaction/DragBox.js","webpack://Chouette/./node_modules/ol/interaction/DragZoom.js","webpack://Chouette/./node_modules/ol/events/KeyCode.js","webpack://Chouette/./node_modules/ol/interaction/KeyboardPan.js","webpack://Chouette/./node_modules/ol/interaction/KeyboardZoom.js","webpack://Chouette/./node_modules/ol/Kinetic.js","webpack://Chouette/./node_modules/ol/interaction/MouseWheelZoom.js","webpack://Chouette/./node_modules/ol/interaction/PinchRotate.js","webpack://Chouette/./node_modules/ol/interaction/PinchZoom.js","webpack://Chouette/./node_modules/ol/Map.js","webpack://Chouette/./node_modules/ol/control.js","webpack://Chouette/./node_modules/ol/interaction.js","webpack://Chouette/./node_modules/ol/MapBrowserEventType.js","webpack://Chouette/./node_modules/ol/MapEventType.js","webpack://Chouette/./node_modules/ol/TileRange.js","webpack://Chouette/./node_modules/ol/TileState.js","webpack://Chouette/./node_modules/ol/ViewProperty.js","webpack://Chouette/./node_modules/ol/centerconstraint.js","webpack://Chouette/./node_modules/ol/resolutionconstraint.js","webpack://Chouette/./node_modules/ol/View.js","webpack://Chouette/./node_modules/ol/ViewHint.js","webpack://Chouette/./node_modules/ol/color.js","webpack://Chouette/./node_modules/ol/colorlike.js","webpack://Chouette/./node_modules/ol/control/Control.js","webpack://Chouette/./node_modules/ol/control/ScaleLine.js","webpack://Chouette/./node_modules/ol/control/Zoom.js","webpack://Chouette/./node_modules/ol/control/ZoomSlider.js","webpack://Chouette/./node_modules/ol/coordinate.js","webpack://Chouette/./node_modules/ol/css.js","webpack://Chouette/./node_modules/ol/dom.js","webpack://Chouette/./node_modules/ol/easing.js","webpack://Chouette/./node_modules/ol/events/condition.js","webpack://Chouette/./node_modules/ol/interaction/Interaction.js","webpack://Chouette/./node_modules/ol/interaction/Property.js","webpack://Chouette/./node_modules/ol/interaction/Pointer.js","webpack://Chouette/./node_modules/ol/layer/Base.js","webpack://Chouette/./node_modules/ol/layer/Group.js","webpack://Chouette/./node_modules/ol/layer/Layer.js","webpack://Chouette/./node_modules/ol/layer/Property.js","webpack://Chouette/./node_modules/ol/layer/BaseTile.js","webpack://Chouette/./node_modules/ol/layer/TileProperty.js","webpack://Chouette/./node_modules/ol/renderer/canvas/TileLayer.js","webpack://Chouette/./node_modules/ol/layer/Tile.js","webpack://Chouette/./node_modules/ol/layer/BaseVector.js","webpack://Chouette/./node_modules/ol/render/canvas/Instruction.js","webpack://Chouette/./node_modules/ol/render/VectorContext.js","webpack://Chouette/./node_modules/ol/render/canvas/Builder.js","webpack://Chouette/./node_modules/ol/render/canvas/ImageBuilder.js","webpack://Chouette/./node_modules/ol/render/canvas/LineStringBuilder.js","webpack://Chouette/./node_modules/ol/render/canvas/PolygonBuilder.js","webpack://Chouette/./node_modules/ol/style/TextPlacement.js","webpack://Chouette/./node_modules/ol/geom/flat/straightchunk.js","webpack://Chouette/./node_modules/ol/render/canvas/TextBuilder.js","webpack://Chouette/./node_modules/ol/render/canvas/BuilderGroup.js","webpack://Chouette/./node_modules/ol/render/canvas/BuilderType.js","webpack://Chouette/./node_modules/ol/geom/flat/textpath.js","webpack://Chouette/./node_modules/ol/render/canvas/Executor.js","webpack://Chouette/./node_modules/ol/render/canvas/ExecutorGroup.js","webpack://Chouette/./node_modules/ol/render/canvas/Immediate.js","webpack://Chouette/./node_modules/ol/render/canvas/hitdetect.js","webpack://Chouette/./node_modules/ol/renderer/vector.js","webpack://Chouette/./node_modules/ol/renderer/canvas/VectorLayer.js","webpack://Chouette/./node_modules/ol/layer/Vector.js","webpack://Chouette/./node_modules/ol/pointer/EventType.js","webpack://Chouette/./node_modules/ol/render/Event.js","webpack://Chouette/./node_modules/ol/render/EventType.js","webpack://Chouette/./node_modules/ol/render/canvas.js","webpack://Chouette/./node_modules/ol/renderer/Layer.js","webpack://Chouette/./node_modules/ol/renderer/canvas/Layer.js","webpack://Chouette/./node_modules/ol/rotationconstraint.js","webpack://Chouette/./node_modules/ol/size.js","webpack://Chouette/./node_modules/ol/Tile.js","webpack://Chouette/./node_modules/ol/ImageTile.js","webpack://Chouette/./node_modules/ol/reproj.js","webpack://Chouette/./node_modules/ol/reproj/Triangulation.js","webpack://Chouette/./node_modules/ol/source/common.js","webpack://Chouette/./node_modules/ol/reproj/Tile.js","webpack://Chouette/./node_modules/ol/reproj/common.js","webpack://Chouette/./node_modules/ol/structs/LRUCache.js","webpack://Chouette/./node_modules/ol/tilecoord.js","webpack://Chouette/./node_modules/ol/TileCache.js","webpack://Chouette/./node_modules/ol/source/TileEventType.js","webpack://Chouette/./node_modules/ol/tilegrid/TileGrid.js","webpack://Chouette/./node_modules/ol/tilegrid.js","webpack://Chouette/./node_modules/ol/source/Tile.js","webpack://Chouette/./node_modules/ol/tileurlfunction.js","webpack://Chouette/./node_modules/ol/source/UrlTile.js","webpack://Chouette/./node_modules/ol/source/TileImage.js","webpack://Chouette/./node_modules/ol/source/XYZ.js","webpack://Chouette/./node_modules/ol/source/OSM.js","webpack://Chouette/./node_modules/ol/source/Source.js","webpack://Chouette/./node_modules/ol/source/State.js","webpack://Chouette/./node_modules/ol/loadingstrategy.js","webpack://Chouette/./node_modules/ol/featureloader.js","webpack://Chouette/./node_modules/ol/source/Vector.js","webpack://Chouette/./node_modules/ol/source/VectorEventType.js","webpack://Chouette/./node_modules/ol/structs/RBush.js","webpack://Chouette/./node_modules/ol/style/Circle.js","webpack://Chouette/./node_modules/ol/style/Fill.js","webpack://Chouette/./node_modules/ol/style/IconImage.js","webpack://Chouette/./node_modules/ol/style/IconOrigin.js","webpack://Chouette/./node_modules/ol/style/Icon.js","webpack://Chouette/./node_modules/ol/style/IconAnchorUnits.js","webpack://Chouette/./node_modules/ol/style/IconImageCache.js","webpack://Chouette/./node_modules/ol/style/Image.js","webpack://Chouette/./node_modules/ol/style/RegularShape.js","webpack://Chouette/./node_modules/ol/style/Stroke.js","webpack://Chouette/./node_modules/ol/style/Style.js","webpack://Chouette/./node_modules/ol/tilegrid/common.js"],"sourcesContent":["\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar meta_1 = require(\"@turf/meta\");\n/**\n * Takes a set of features, calculates the bbox of all input features, and returns a bounding box.\n *\n * @name bbox\n * @param {GeoJSON} geojson any GeoJSON object\n * @returns {BBox} bbox extent in [minX, minY, maxX, maxY] order\n * @example\n * var line = turf.lineString([[-74, 40], [-78, 42], [-82, 35]]);\n * var bbox = turf.bbox(line);\n * var bboxPolygon = turf.bboxPolygon(bbox);\n *\n * //addToMap\n * var addToMap = [line, bboxPolygon]\n */\nfunction bbox(geojson) {\n var result = [Infinity, Infinity, -Infinity, -Infinity];\n meta_1.coordEach(geojson, function (coord) {\n if (result[0] > coord[0]) {\n result[0] = coord[0];\n }\n if (result[1] > coord[1]) {\n result[1] = coord[1];\n }\n if (result[2] < coord[0]) {\n result[2] = coord[0];\n }\n if (result[3] < coord[1]) {\n result[3] = coord[1];\n }\n });\n return result;\n}\nbbox[\"default\"] = bbox;\nexports.default = bbox;\n","(function (global, factory) {\n\ttypeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory() :\n\ttypeof define === 'function' && define.amd ? define(factory) :\n\t(global.quickselect = factory());\n}(this, (function () { 'use strict';\n\nfunction quickselect(arr, k, left, right, compare) {\n quickselectStep(arr, k, left || 0, right || (arr.length - 1), compare || defaultCompare);\n}\n\nfunction quickselectStep(arr, k, left, right, compare) {\n\n while (right > left) {\n if (right - left > 600) {\n var n = right - left + 1;\n var m = k - left + 1;\n var z = Math.log(n);\n var s = 0.5 * Math.exp(2 * z / 3);\n var sd = 0.5 * Math.sqrt(z * s * (n - s) / n) * (m - n / 2 < 0 ? -1 : 1);\n var newLeft = Math.max(left, Math.floor(k - m * s / n + sd));\n var newRight = Math.min(right, Math.floor(k + (n - m) * s / n + sd));\n quickselectStep(arr, k, newLeft, newRight, compare);\n }\n\n var t = arr[k];\n var i = left;\n var j = right;\n\n swap(arr, left, k);\n if (compare(arr[right], t) > 0) swap(arr, left, right);\n\n while (i < j) {\n swap(arr, i, j);\n i++;\n j--;\n while (compare(arr[i], t) < 0) i++;\n while (compare(arr[j], t) > 0) j--;\n }\n\n if (compare(arr[left], t) === 0) swap(arr, left, j);\n else {\n j++;\n swap(arr, j, right);\n }\n\n if (j <= k) left = j + 1;\n if (k <= j) right = j - 1;\n }\n}\n\nfunction swap(arr, i, j) {\n var tmp = arr[i];\n arr[i] = arr[j];\n arr[j] = tmp;\n}\n\nfunction defaultCompare(a, b) {\n return a < b ? -1 : a > b ? 1 : 0;\n}\n\nreturn quickselect;\n\n})));\n","'use strict';\n\nmodule.exports = rbush;\nmodule.exports.default = rbush;\n\nvar quickselect = require('quickselect');\n\nfunction rbush(maxEntries, format) {\n if (!(this instanceof rbush)) return new rbush(maxEntries, format);\n\n // max entries in a node is 9 by default; min node fill is 40% for best performance\n this._maxEntries = Math.max(4, maxEntries || 9);\n this._minEntries = Math.max(2, Math.ceil(this._maxEntries * 0.4));\n\n if (format) {\n this._initFormat(format);\n }\n\n this.clear();\n}\n\nrbush.prototype = {\n\n all: function () {\n return this._all(this.data, []);\n },\n\n search: function (bbox) {\n\n var node = this.data,\n result = [],\n toBBox = this.toBBox;\n\n if (!intersects(bbox, node)) return result;\n\n var nodesToSearch = [],\n i, len, child, childBBox;\n\n while (node) {\n for (i = 0, len = node.children.length; i < len; i++) {\n\n child = node.children[i];\n childBBox = node.leaf ? toBBox(child) : child;\n\n if (intersects(bbox, childBBox)) {\n if (node.leaf) result.push(child);\n else if (contains(bbox, childBBox)) this._all(child, result);\n else nodesToSearch.push(child);\n }\n }\n node = nodesToSearch.pop();\n }\n\n return result;\n },\n\n collides: function (bbox) {\n\n var node = this.data,\n toBBox = this.toBBox;\n\n if (!intersects(bbox, node)) return false;\n\n var nodesToSearch = [],\n i, len, child, childBBox;\n\n while (node) {\n for (i = 0, len = node.children.length; i < len; i++) {\n\n child = node.children[i];\n childBBox = node.leaf ? toBBox(child) : child;\n\n if (intersects(bbox, childBBox)) {\n if (node.leaf || contains(bbox, childBBox)) return true;\n nodesToSearch.push(child);\n }\n }\n node = nodesToSearch.pop();\n }\n\n return false;\n },\n\n load: function (data) {\n if (!(data && data.length)) return this;\n\n if (data.length < this._minEntries) {\n for (var i = 0, len = data.length; i < len; i++) {\n this.insert(data[i]);\n }\n return this;\n }\n\n // recursively build the tree with the given data from scratch using OMT algorithm\n var node = this._build(data.slice(), 0, data.length - 1, 0);\n\n if (!this.data.children.length) {\n // save as is if tree is empty\n this.data = node;\n\n } else if (this.data.height === node.height) {\n // split root if trees have the same height\n this._splitRoot(this.data, node);\n\n } else {\n if (this.data.height < node.height) {\n // swap trees if inserted one is bigger\n var tmpNode = this.data;\n this.data = node;\n node = tmpNode;\n }\n\n // insert the small tree into the large tree at appropriate level\n this._insert(node, this.data.height - node.height - 1, true);\n }\n\n return this;\n },\n\n insert: function (item) {\n if (item) this._insert(item, this.data.height - 1);\n return this;\n },\n\n clear: function () {\n this.data = createNode([]);\n return this;\n },\n\n remove: function (item, equalsFn) {\n if (!item) return this;\n\n var node = this.data,\n bbox = this.toBBox(item),\n path = [],\n indexes = [],\n i, parent, index, goingUp;\n\n // depth-first iterative tree traversal\n while (node || path.length) {\n\n if (!node) { // go up\n node = path.pop();\n parent = path[path.length - 1];\n i = indexes.pop();\n goingUp = true;\n }\n\n if (node.leaf) { // check current node\n index = findItem(item, node.children, equalsFn);\n\n if (index !== -1) {\n // item found, remove the item and condense tree upwards\n node.children.splice(index, 1);\n path.push(node);\n this._condense(path);\n return this;\n }\n }\n\n if (!goingUp && !node.leaf && contains(node, bbox)) { // go down\n path.push(node);\n indexes.push(i);\n i = 0;\n parent = node;\n node = node.children[0];\n\n } else if (parent) { // go right\n i++;\n node = parent.children[i];\n goingUp = false;\n\n } else node = null; // nothing found\n }\n\n return this;\n },\n\n toBBox: function (item) { return item; },\n\n compareMinX: compareNodeMinX,\n compareMinY: compareNodeMinY,\n\n toJSON: function () { return this.data; },\n\n fromJSON: function (data) {\n this.data = data;\n return this;\n },\n\n _all: function (node, result) {\n var nodesToSearch = [];\n while (node) {\n if (node.leaf) result.push.apply(result, node.children);\n else nodesToSearch.push.apply(nodesToSearch, node.children);\n\n node = nodesToSearch.pop();\n }\n return result;\n },\n\n _build: function (items, left, right, height) {\n\n var N = right - left + 1,\n M = this._maxEntries,\n node;\n\n if (N <= M) {\n // reached leaf level; return leaf\n node = createNode(items.slice(left, right + 1));\n calcBBox(node, this.toBBox);\n return node;\n }\n\n if (!height) {\n // target height of the bulk-loaded tree\n height = Math.ceil(Math.log(N) / Math.log(M));\n\n // target number of root entries to maximize storage utilization\n M = Math.ceil(N / Math.pow(M, height - 1));\n }\n\n node = createNode([]);\n node.leaf = false;\n node.height = height;\n\n // split the items into M mostly square tiles\n\n var N2 = Math.ceil(N / M),\n N1 = N2 * Math.ceil(Math.sqrt(M)),\n i, j, right2, right3;\n\n multiSelect(items, left, right, N1, this.compareMinX);\n\n for (i = left; i <= right; i += N1) {\n\n right2 = Math.min(i + N1 - 1, right);\n\n multiSelect(items, i, right2, N2, this.compareMinY);\n\n for (j = i; j <= right2; j += N2) {\n\n right3 = Math.min(j + N2 - 1, right2);\n\n // pack each entry recursively\n node.children.push(this._build(items, j, right3, height - 1));\n }\n }\n\n calcBBox(node, this.toBBox);\n\n return node;\n },\n\n _chooseSubtree: function (bbox, node, level, path) {\n\n var i, len, child, targetNode, area, enlargement, minArea, minEnlargement;\n\n while (true) {\n path.push(node);\n\n if (node.leaf || path.length - 1 === level) break;\n\n minArea = minEnlargement = Infinity;\n\n for (i = 0, len = node.children.length; i < len; i++) {\n child = node.children[i];\n area = bboxArea(child);\n enlargement = enlargedArea(bbox, child) - area;\n\n // choose entry with the least area enlargement\n if (enlargement < minEnlargement) {\n minEnlargement = enlargement;\n minArea = area < minArea ? area : minArea;\n targetNode = child;\n\n } else if (enlargement === minEnlargement) {\n // otherwise choose one with the smallest area\n if (area < minArea) {\n minArea = area;\n targetNode = child;\n }\n }\n }\n\n node = targetNode || node.children[0];\n }\n\n return node;\n },\n\n _insert: function (item, level, isNode) {\n\n var toBBox = this.toBBox,\n bbox = isNode ? item : toBBox(item),\n insertPath = [];\n\n // find the best node for accommodating the item, saving all nodes along the path too\n var node = this._chooseSubtree(bbox, this.data, level, insertPath);\n\n // put the item into the node\n node.children.push(item);\n extend(node, bbox);\n\n // split on node overflow; propagate upwards if necessary\n while (level >= 0) {\n if (insertPath[level].children.length > this._maxEntries) {\n this._split(insertPath, level);\n level--;\n } else break;\n }\n\n // adjust bboxes along the insertion path\n this._adjustParentBBoxes(bbox, insertPath, level);\n },\n\n // split overflowed node into two\n _split: function (insertPath, level) {\n\n var node = insertPath[level],\n M = node.children.length,\n m = this._minEntries;\n\n this._chooseSplitAxis(node, m, M);\n\n var splitIndex = this._chooseSplitIndex(node, m, M);\n\n var newNode = createNode(node.children.splice(splitIndex, node.children.length - splitIndex));\n newNode.height = node.height;\n newNode.leaf = node.leaf;\n\n calcBBox(node, this.toBBox);\n calcBBox(newNode, this.toBBox);\n\n if (level) insertPath[level - 1].children.push(newNode);\n else this._splitRoot(node, newNode);\n },\n\n _splitRoot: function (node, newNode) {\n // split root node\n this.data = createNode([node, newNode]);\n this.data.height = node.height + 1;\n this.data.leaf = false;\n calcBBox(this.data, this.toBBox);\n },\n\n _chooseSplitIndex: function (node, m, M) {\n\n var i, bbox1, bbox2, overlap, area, minOverlap, minArea, index;\n\n minOverlap = minArea = Infinity;\n\n for (i = m; i <= M - m; i++) {\n bbox1 = distBBox(node, 0, i, this.toBBox);\n bbox2 = distBBox(node, i, M, this.toBBox);\n\n overlap = intersectionArea(bbox1, bbox2);\n area = bboxArea(bbox1) + bboxArea(bbox2);\n\n // choose distribution with minimum overlap\n if (overlap < minOverlap) {\n minOverlap = overlap;\n index = i;\n\n minArea = area < minArea ? area : minArea;\n\n } else if (overlap === minOverlap) {\n // otherwise choose distribution with minimum area\n if (area < minArea) {\n minArea = area;\n index = i;\n }\n }\n }\n\n return index;\n },\n\n // sorts node children by the best axis for split\n _chooseSplitAxis: function (node, m, M) {\n\n var compareMinX = node.leaf ? this.compareMinX : compareNodeMinX,\n compareMinY = node.leaf ? this.compareMinY : compareNodeMinY,\n xMargin = this._allDistMargin(node, m, M, compareMinX),\n yMargin = this._allDistMargin(node, m, M, compareMinY);\n\n // if total distributions margin value is minimal for x, sort by minX,\n // otherwise it's already sorted by minY\n if (xMargin < yMargin) node.children.sort(compareMinX);\n },\n\n // total margin of all possible split distributions where each node is at least m full\n _allDistMargin: function (node, m, M, compare) {\n\n node.children.sort(compare);\n\n var toBBox = this.toBBox,\n leftBBox = distBBox(node, 0, m, toBBox),\n rightBBox = distBBox(node, M - m, M, toBBox),\n margin = bboxMargin(leftBBox) + bboxMargin(rightBBox),\n i, child;\n\n for (i = m; i < M - m; i++) {\n child = node.children[i];\n extend(leftBBox, node.leaf ? toBBox(child) : child);\n margin += bboxMargin(leftBBox);\n }\n\n for (i = M - m - 1; i >= m; i--) {\n child = node.children[i];\n extend(rightBBox, node.leaf ? toBBox(child) : child);\n margin += bboxMargin(rightBBox);\n }\n\n return margin;\n },\n\n _adjustParentBBoxes: function (bbox, path, level) {\n // adjust bboxes along the given tree path\n for (var i = level; i >= 0; i--) {\n extend(path[i], bbox);\n }\n },\n\n _condense: function (path) {\n // go through the path, removing empty nodes and updating bboxes\n for (var i = path.length - 1, siblings; i >= 0; i--) {\n if (path[i].children.length === 0) {\n if (i > 0) {\n siblings = path[i - 1].children;\n siblings.splice(siblings.indexOf(path[i]), 1);\n\n } else this.clear();\n\n } else calcBBox(path[i], this.toBBox);\n }\n },\n\n _initFormat: function (format) {\n // data format (minX, minY, maxX, maxY accessors)\n\n // uses eval-type function compilation instead of just accepting a toBBox function\n // because the algorithms are very sensitive to sorting functions performance,\n // so they should be dead simple and without inner calls\n\n var compareArr = ['return a', ' - b', ';'];\n\n this.compareMinX = new Function('a', 'b', compareArr.join(format[0]));\n this.compareMinY = new Function('a', 'b', compareArr.join(format[1]));\n\n this.toBBox = new Function('a',\n 'return {minX: a' + format[0] +\n ', minY: a' + format[1] +\n ', maxX: a' + format[2] +\n ', maxY: a' + format[3] + '};');\n }\n};\n\nfunction findItem(item, items, equalsFn) {\n if (!equalsFn) return items.indexOf(item);\n\n for (var i = 0; i < items.length; i++) {\n if (equalsFn(item, items[i])) return i;\n }\n return -1;\n}\n\n// calculate node's bbox from bboxes of its children\nfunction calcBBox(node, toBBox) {\n distBBox(node, 0, node.children.length, toBBox, node);\n}\n\n// min bounding rectangle of node children from k to p-1\nfunction distBBox(node, k, p, toBBox, destNode) {\n if (!destNode) destNode = createNode(null);\n destNode.minX = Infinity;\n destNode.minY = Infinity;\n destNode.maxX = -Infinity;\n destNode.maxY = -Infinity;\n\n for (var i = k, child; i < p; i++) {\n child = node.children[i];\n extend(destNode, node.leaf ? toBBox(child) : child);\n }\n\n return destNode;\n}\n\nfunction extend(a, b) {\n a.minX = Math.min(a.minX, b.minX);\n a.minY = Math.min(a.minY, b.minY);\n a.maxX = Math.max(a.maxX, b.maxX);\n a.maxY = Math.max(a.maxY, b.maxY);\n return a;\n}\n\nfunction compareNodeMinX(a, b) { return a.minX - b.minX; }\nfunction compareNodeMinY(a, b) { return a.minY - b.minY; }\n\nfunction bboxArea(a) { return (a.maxX - a.minX) * (a.maxY - a.minY); }\nfunction bboxMargin(a) { return (a.maxX - a.minX) + (a.maxY - a.minY); }\n\nfunction enlargedArea(a, b) {\n return (Math.max(b.maxX, a.maxX) - Math.min(b.minX, a.minX)) *\n (Math.max(b.maxY, a.maxY) - Math.min(b.minY, a.minY));\n}\n\nfunction intersectionArea(a, b) {\n var minX = Math.max(a.minX, b.minX),\n minY = Math.max(a.minY, b.minY),\n maxX = Math.min(a.maxX, b.maxX),\n maxY = Math.min(a.maxY, b.maxY);\n\n return Math.max(0, maxX - minX) *\n Math.max(0, maxY - minY);\n}\n\nfunction contains(a, b) {\n return a.minX <= b.minX &&\n a.minY <= b.minY &&\n b.maxX <= a.maxX &&\n b.maxY <= a.maxY;\n}\n\nfunction intersects(a, b) {\n return b.minX <= a.maxX &&\n b.minY <= a.maxY &&\n b.maxX >= a.minX &&\n b.maxY >= a.minY;\n}\n\nfunction createNode(children) {\n return {\n children: children,\n height: 1,\n leaf: true,\n minX: Infinity,\n minY: Infinity,\n maxX: -Infinity,\n maxY: -Infinity\n };\n}\n\n// sort an array so that items come in groups of n unsorted items, with groups sorted between each other;\n// combines selection algorithm with binary divide & conquer approach\n\nfunction multiSelect(arr, left, right, n, compare) {\n var stack = [left, right],\n mid;\n\n while (stack.length) {\n right = stack.pop();\n left = stack.pop();\n\n if (right - left <= n) continue;\n\n mid = left + Math.ceil((right - left) / n / 2) * n;\n quickselect(arr, mid, left, right, compare);\n\n stack.push(left, mid, mid, right);\n }\n}\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\n/**\n * @module helpers\n */\n/**\n * Earth Radius used with the Harvesine formula and approximates using a spherical (non-ellipsoid) Earth.\n *\n * @memberof helpers\n * @type {number}\n */\nexports.earthRadius = 6371008.8;\n/**\n * Unit of measurement factors using a spherical (non-ellipsoid) earth radius.\n *\n * @memberof helpers\n * @type {Object}\n */\nexports.factors = {\n centimeters: exports.earthRadius * 100,\n centimetres: exports.earthRadius * 100,\n degrees: exports.earthRadius / 111325,\n feet: exports.earthRadius * 3.28084,\n inches: exports.earthRadius * 39.37,\n kilometers: exports.earthRadius / 1000,\n kilometres: exports.earthRadius / 1000,\n meters: exports.earthRadius,\n metres: exports.earthRadius,\n miles: exports.earthRadius / 1609.344,\n millimeters: exports.earthRadius * 1000,\n millimetres: exports.earthRadius * 1000,\n nauticalmiles: exports.earthRadius / 1852,\n radians: 1,\n yards: exports.earthRadius * 1.0936,\n};\n/**\n * Units of measurement factors based on 1 meter.\n *\n * @memberof helpers\n * @type {Object}\n */\nexports.unitsFactors = {\n centimeters: 100,\n centimetres: 100,\n degrees: 1 / 111325,\n feet: 3.28084,\n inches: 39.37,\n kilometers: 1 / 1000,\n kilometres: 1 / 1000,\n meters: 1,\n metres: 1,\n miles: 1 / 1609.344,\n millimeters: 1000,\n millimetres: 1000,\n nauticalmiles: 1 / 1852,\n radians: 1 / exports.earthRadius,\n yards: 1.0936133,\n};\n/**\n * Area of measurement factors based on 1 square meter.\n *\n * @memberof helpers\n * @type {Object}\n */\nexports.areaFactors = {\n acres: 0.000247105,\n centimeters: 10000,\n centimetres: 10000,\n feet: 10.763910417,\n hectares: 0.0001,\n inches: 1550.003100006,\n kilometers: 0.000001,\n kilometres: 0.000001,\n meters: 1,\n metres: 1,\n miles: 3.86e-7,\n millimeters: 1000000,\n millimetres: 1000000,\n yards: 1.195990046,\n};\n/**\n * Wraps a GeoJSON {@link Geometry} in a GeoJSON {@link Feature}.\n *\n * @name feature\n * @param {Geometry} geometry input geometry\n * @param {Object} [properties={}] an Object of key-value pairs to add as properties\n * @param {Object} [options={}] Optional Parameters\n * @param {Array} [options.bbox] Bounding Box Array [west, south, east, north] associated with the Feature\n * @param {string|number} [options.id] Identifier associated with the Feature\n * @returns {Feature} a GeoJSON Feature\n * @example\n * var geometry = {\n * \"type\": \"Point\",\n * \"coordinates\": [110, 50]\n * };\n *\n * var feature = turf.feature(geometry);\n *\n * //=feature\n */\nfunction feature(geom, properties, options) {\n if (options === void 0) { options = {}; }\n var feat = { type: \"Feature\" };\n if (options.id === 0 || options.id) {\n feat.id = options.id;\n }\n if (options.bbox) {\n feat.bbox = options.bbox;\n }\n feat.properties = properties || {};\n feat.geometry = geom;\n return feat;\n}\nexports.feature = feature;\n/**\n * Creates a GeoJSON {@link Geometry} from a Geometry string type & coordinates.\n * For GeometryCollection type use `helpers.geometryCollection`\n *\n * @name geometry\n * @param {string} type Geometry Type\n * @param {Array} coordinates Coordinates\n * @param {Object} [options={}] Optional Parameters\n * @returns {Geometry} a GeoJSON Geometry\n * @example\n * var type = \"Point\";\n * var coordinates = [110, 50];\n * var geometry = turf.geometry(type, coordinates);\n * // => geometry\n */\nfunction geometry(type, coordinates, _options) {\n if (_options === void 0) { _options = {}; }\n switch (type) {\n case \"Point\":\n return point(coordinates).geometry;\n case \"LineString\":\n return lineString(coordinates).geometry;\n case \"Polygon\":\n return polygon(coordinates).geometry;\n case \"MultiPoint\":\n return multiPoint(coordinates).geometry;\n case \"MultiLineString\":\n return multiLineString(coordinates).geometry;\n case \"MultiPolygon\":\n return multiPolygon(coordinates).geometry;\n default:\n throw new Error(type + \" is invalid\");\n }\n}\nexports.geometry = geometry;\n/**\n * Creates a {@link Point} {@link Feature} from a Position.\n *\n * @name point\n * @param {Array} coordinates longitude, latitude position (each in decimal degrees)\n * @param {Object} [properties={}] an Object of key-value pairs to add as properties\n * @param {Object} [options={}] Optional Parameters\n * @param {Array} [options.bbox] Bounding Box Array [west, south, east, north] associated with the Feature\n * @param {string|number} [options.id] Identifier associated with the Feature\n * @returns {Feature} a Point feature\n * @example\n * var point = turf.point([-75.343, 39.984]);\n *\n * //=point\n */\nfunction point(coordinates, properties, options) {\n if (options === void 0) { options = {}; }\n if (!coordinates) {\n throw new Error(\"coordinates is required\");\n }\n if (!Array.isArray(coordinates)) {\n throw new Error(\"coordinates must be an Array\");\n }\n if (coordinates.length < 2) {\n throw new Error(\"coordinates must be at least 2 numbers long\");\n }\n if (!isNumber(coordinates[0]) || !isNumber(coordinates[1])) {\n throw new Error(\"coordinates must contain numbers\");\n }\n var geom = {\n type: \"Point\",\n coordinates: coordinates,\n };\n return feature(geom, properties, options);\n}\nexports.point = point;\n/**\n * Creates a {@link Point} {@link FeatureCollection} from an Array of Point coordinates.\n *\n * @name points\n * @param {Array>} coordinates an array of Points\n * @param {Object} [properties={}] Translate these properties to each Feature\n * @param {Object} [options={}] Optional Parameters\n * @param {Array} [options.bbox] Bounding Box Array [west, south, east, north]\n * associated with the FeatureCollection\n * @param {string|number} [options.id] Identifier associated with the FeatureCollection\n * @returns {FeatureCollection} Point Feature\n * @example\n * var points = turf.points([\n * [-75, 39],\n * [-80, 45],\n * [-78, 50]\n * ]);\n *\n * //=points\n */\nfunction points(coordinates, properties, options) {\n if (options === void 0) { options = {}; }\n return featureCollection(coordinates.map(function (coords) {\n return point(coords, properties);\n }), options);\n}\nexports.points = points;\n/**\n * Creates a {@link Polygon} {@link Feature} from an Array of LinearRings.\n *\n * @name polygon\n * @param {Array>>} coordinates an array of LinearRings\n * @param {Object} [properties={}] an Object of key-value pairs to add as properties\n * @param {Object} [options={}] Optional Parameters\n * @param {Array} [options.bbox] Bounding Box Array [west, south, east, north] associated with the Feature\n * @param {string|number} [options.id] Identifier associated with the Feature\n * @returns {Feature} Polygon Feature\n * @example\n * var polygon = turf.polygon([[[-5, 52], [-4, 56], [-2, 51], [-7, 54], [-5, 52]]], { name: 'poly1' });\n *\n * //=polygon\n */\nfunction polygon(coordinates, properties, options) {\n if (options === void 0) { options = {}; }\n for (var _i = 0, coordinates_1 = coordinates; _i < coordinates_1.length; _i++) {\n var ring = coordinates_1[_i];\n if (ring.length < 4) {\n throw new Error(\"Each LinearRing of a Polygon must have 4 or more Positions.\");\n }\n for (var j = 0; j < ring[ring.length - 1].length; j++) {\n // Check if first point of Polygon contains two numbers\n if (ring[ring.length - 1][j] !== ring[0][j]) {\n throw new Error(\"First and last Position are not equivalent.\");\n }\n }\n }\n var geom = {\n type: \"Polygon\",\n coordinates: coordinates,\n };\n return feature(geom, properties, options);\n}\nexports.polygon = polygon;\n/**\n * Creates a {@link Polygon} {@link FeatureCollection} from an Array of Polygon coordinates.\n *\n * @name polygons\n * @param {Array>>>} coordinates an array of Polygon coordinates\n * @param {Object} [properties={}] an Object of key-value pairs to add as properties\n * @param {Object} [options={}] Optional Parameters\n * @param {Array} [options.bbox] Bounding Box Array [west, south, east, north] associated with the Feature\n * @param {string|number} [options.id] Identifier associated with the FeatureCollection\n * @returns {FeatureCollection} Polygon FeatureCollection\n * @example\n * var polygons = turf.polygons([\n * [[[-5, 52], [-4, 56], [-2, 51], [-7, 54], [-5, 52]]],\n * [[[-15, 42], [-14, 46], [-12, 41], [-17, 44], [-15, 42]]],\n * ]);\n *\n * //=polygons\n */\nfunction polygons(coordinates, properties, options) {\n if (options === void 0) { options = {}; }\n return featureCollection(coordinates.map(function (coords) {\n return polygon(coords, properties);\n }), options);\n}\nexports.polygons = polygons;\n/**\n * Creates a {@link LineString} {@link Feature} from an Array of Positions.\n *\n * @name lineString\n * @param {Array>} coordinates an array of Positions\n * @param {Object} [properties={}] an Object of key-value pairs to add as properties\n * @param {Object} [options={}] Optional Parameters\n * @param {Array} [options.bbox] Bounding Box Array [west, south, east, north] associated with the Feature\n * @param {string|number} [options.id] Identifier associated with the Feature\n * @returns {Feature} LineString Feature\n * @example\n * var linestring1 = turf.lineString([[-24, 63], [-23, 60], [-25, 65], [-20, 69]], {name: 'line 1'});\n * var linestring2 = turf.lineString([[-14, 43], [-13, 40], [-15, 45], [-10, 49]], {name: 'line 2'});\n *\n * //=linestring1\n * //=linestring2\n */\nfunction lineString(coordinates, properties, options) {\n if (options === void 0) { options = {}; }\n if (coordinates.length < 2) {\n throw new Error(\"coordinates must be an array of two or more positions\");\n }\n var geom = {\n type: \"LineString\",\n coordinates: coordinates,\n };\n return feature(geom, properties, options);\n}\nexports.lineString = lineString;\n/**\n * Creates a {@link LineString} {@link FeatureCollection} from an Array of LineString coordinates.\n *\n * @name lineStrings\n * @param {Array>>} coordinates an array of LinearRings\n * @param {Object} [properties={}] an Object of key-value pairs to add as properties\n * @param {Object} [options={}] Optional Parameters\n * @param {Array} [options.bbox] Bounding Box Array [west, south, east, north]\n * associated with the FeatureCollection\n * @param {string|number} [options.id] Identifier associated with the FeatureCollection\n * @returns {FeatureCollection} LineString FeatureCollection\n * @example\n * var linestrings = turf.lineStrings([\n * [[-24, 63], [-23, 60], [-25, 65], [-20, 69]],\n * [[-14, 43], [-13, 40], [-15, 45], [-10, 49]]\n * ]);\n *\n * //=linestrings\n */\nfunction lineStrings(coordinates, properties, options) {\n if (options === void 0) { options = {}; }\n return featureCollection(coordinates.map(function (coords) {\n return lineString(coords, properties);\n }), options);\n}\nexports.lineStrings = lineStrings;\n/**\n * Takes one or more {@link Feature|Features} and creates a {@link FeatureCollection}.\n *\n * @name featureCollection\n * @param {Feature[]} features input features\n * @param {Object} [options={}] Optional Parameters\n * @param {Array} [options.bbox] Bounding Box Array [west, south, east, north] associated with the Feature\n * @param {string|number} [options.id] Identifier associated with the Feature\n * @returns {FeatureCollection} FeatureCollection of Features\n * @example\n * var locationA = turf.point([-75.343, 39.984], {name: 'Location A'});\n * var locationB = turf.point([-75.833, 39.284], {name: 'Location B'});\n * var locationC = turf.point([-75.534, 39.123], {name: 'Location C'});\n *\n * var collection = turf.featureCollection([\n * locationA,\n * locationB,\n * locationC\n * ]);\n *\n * //=collection\n */\nfunction featureCollection(features, options) {\n if (options === void 0) { options = {}; }\n var fc = { type: \"FeatureCollection\" };\n if (options.id) {\n fc.id = options.id;\n }\n if (options.bbox) {\n fc.bbox = options.bbox;\n }\n fc.features = features;\n return fc;\n}\nexports.featureCollection = featureCollection;\n/**\n * Creates a {@link Feature} based on a\n * coordinate array. Properties can be added optionally.\n *\n * @name multiLineString\n * @param {Array>>} coordinates an array of LineStrings\n * @param {Object} [properties={}] an Object of key-value pairs to add as properties\n * @param {Object} [options={}] Optional Parameters\n * @param {Array} [options.bbox] Bounding Box Array [west, south, east, north] associated with the Feature\n * @param {string|number} [options.id] Identifier associated with the Feature\n * @returns {Feature} a MultiLineString feature\n * @throws {Error} if no coordinates are passed\n * @example\n * var multiLine = turf.multiLineString([[[0,0],[10,10]]]);\n *\n * //=multiLine\n */\nfunction multiLineString(coordinates, properties, options) {\n if (options === void 0) { options = {}; }\n var geom = {\n type: \"MultiLineString\",\n coordinates: coordinates,\n };\n return feature(geom, properties, options);\n}\nexports.multiLineString = multiLineString;\n/**\n * Creates a {@link Feature} based on a\n * coordinate array. Properties can be added optionally.\n *\n * @name multiPoint\n * @param {Array>} coordinates an array of Positions\n * @param {Object} [properties={}] an Object of key-value pairs to add as properties\n * @param {Object} [options={}] Optional Parameters\n * @param {Array} [options.bbox] Bounding Box Array [west, south, east, north] associated with the Feature\n * @param {string|number} [options.id] Identifier associated with the Feature\n * @returns {Feature} a MultiPoint feature\n * @throws {Error} if no coordinates are passed\n * @example\n * var multiPt = turf.multiPoint([[0,0],[10,10]]);\n *\n * //=multiPt\n */\nfunction multiPoint(coordinates, properties, options) {\n if (options === void 0) { options = {}; }\n var geom = {\n type: \"MultiPoint\",\n coordinates: coordinates,\n };\n return feature(geom, properties, options);\n}\nexports.multiPoint = multiPoint;\n/**\n * Creates a {@link Feature} based on a\n * coordinate array. Properties can be added optionally.\n *\n * @name multiPolygon\n * @param {Array>>>} coordinates an array of Polygons\n * @param {Object} [properties={}] an Object of key-value pairs to add as properties\n * @param {Object} [options={}] Optional Parameters\n * @param {Array} [options.bbox] Bounding Box Array [west, south, east, north] associated with the Feature\n * @param {string|number} [options.id] Identifier associated with the Feature\n * @returns {Feature} a multipolygon feature\n * @throws {Error} if no coordinates are passed\n * @example\n * var multiPoly = turf.multiPolygon([[[[0,0],[0,10],[10,10],[10,0],[0,0]]]]);\n *\n * //=multiPoly\n *\n */\nfunction multiPolygon(coordinates, properties, options) {\n if (options === void 0) { options = {}; }\n var geom = {\n type: \"MultiPolygon\",\n coordinates: coordinates,\n };\n return feature(geom, properties, options);\n}\nexports.multiPolygon = multiPolygon;\n/**\n * Creates a {@link Feature} based on a\n * coordinate array. Properties can be added optionally.\n *\n * @name geometryCollection\n * @param {Array} geometries an array of GeoJSON Geometries\n * @param {Object} [properties={}] an Object of key-value pairs to add as properties\n * @param {Object} [options={}] Optional Parameters\n * @param {Array} [options.bbox] Bounding Box Array [west, south, east, north] associated with the Feature\n * @param {string|number} [options.id] Identifier associated with the Feature\n * @returns {Feature} a GeoJSON GeometryCollection Feature\n * @example\n * var pt = turf.geometry(\"Point\", [100, 0]);\n * var line = turf.geometry(\"LineString\", [[101, 0], [102, 1]]);\n * var collection = turf.geometryCollection([pt, line]);\n *\n * // => collection\n */\nfunction geometryCollection(geometries, properties, options) {\n if (options === void 0) { options = {}; }\n var geom = {\n type: \"GeometryCollection\",\n geometries: geometries,\n };\n return feature(geom, properties, options);\n}\nexports.geometryCollection = geometryCollection;\n/**\n * Round number to precision\n *\n * @param {number} num Number\n * @param {number} [precision=0] Precision\n * @returns {number} rounded number\n * @example\n * turf.round(120.4321)\n * //=120\n *\n * turf.round(120.4321, 2)\n * //=120.43\n */\nfunction round(num, precision) {\n if (precision === void 0) { precision = 0; }\n if (precision && !(precision >= 0)) {\n throw new Error(\"precision must be a positive number\");\n }\n var multiplier = Math.pow(10, precision || 0);\n return Math.round(num * multiplier) / multiplier;\n}\nexports.round = round;\n/**\n * Convert a distance measurement (assuming a spherical Earth) from radians to a more friendly unit.\n * Valid units: miles, nauticalmiles, inches, yards, meters, metres, kilometers, centimeters, feet\n *\n * @name radiansToLength\n * @param {number} radians in radians across the sphere\n * @param {string} [units=\"kilometers\"] can be degrees, radians, miles, inches, yards, metres,\n * meters, kilometres, kilometers.\n * @returns {number} distance\n */\nfunction radiansToLength(radians, units) {\n if (units === void 0) { units = \"kilometers\"; }\n var factor = exports.factors[units];\n if (!factor) {\n throw new Error(units + \" units is invalid\");\n }\n return radians * factor;\n}\nexports.radiansToLength = radiansToLength;\n/**\n * Convert a distance measurement (assuming a spherical Earth) from a real-world unit into radians\n * Valid units: miles, nauticalmiles, inches, yards, meters, metres, kilometers, centimeters, feet\n *\n * @name lengthToRadians\n * @param {number} distance in real units\n * @param {string} [units=\"kilometers\"] can be degrees, radians, miles, inches, yards, metres,\n * meters, kilometres, kilometers.\n * @returns {number} radians\n */\nfunction lengthToRadians(distance, units) {\n if (units === void 0) { units = \"kilometers\"; }\n var factor = exports.factors[units];\n if (!factor) {\n throw new Error(units + \" units is invalid\");\n }\n return distance / factor;\n}\nexports.lengthToRadians = lengthToRadians;\n/**\n * Convert a distance measurement (assuming a spherical Earth) from a real-world unit into degrees\n * Valid units: miles, nauticalmiles, inches, yards, meters, metres, centimeters, kilometres, feet\n *\n * @name lengthToDegrees\n * @param {number} distance in real units\n * @param {string} [units=\"kilometers\"] can be degrees, radians, miles, inches, yards, metres,\n * meters, kilometres, kilometers.\n * @returns {number} degrees\n */\nfunction lengthToDegrees(distance, units) {\n return radiansToDegrees(lengthToRadians(distance, units));\n}\nexports.lengthToDegrees = lengthToDegrees;\n/**\n * Converts any bearing angle from the north line direction (positive clockwise)\n * and returns an angle between 0-360 degrees (positive clockwise), 0 being the north line\n *\n * @name bearingToAzimuth\n * @param {number} bearing angle, between -180 and +180 degrees\n * @returns {number} angle between 0 and 360 degrees\n */\nfunction bearingToAzimuth(bearing) {\n var angle = bearing % 360;\n if (angle < 0) {\n angle += 360;\n }\n return angle;\n}\nexports.bearingToAzimuth = bearingToAzimuth;\n/**\n * Converts an angle in radians to degrees\n *\n * @name radiansToDegrees\n * @param {number} radians angle in radians\n * @returns {number} degrees between 0 and 360 degrees\n */\nfunction radiansToDegrees(radians) {\n var degrees = radians % (2 * Math.PI);\n return (degrees * 180) / Math.PI;\n}\nexports.radiansToDegrees = radiansToDegrees;\n/**\n * Converts an angle in degrees to radians\n *\n * @name degreesToRadians\n * @param {number} degrees angle between 0 and 360 degrees\n * @returns {number} angle in radians\n */\nfunction degreesToRadians(degrees) {\n var radians = degrees % 360;\n return (radians * Math.PI) / 180;\n}\nexports.degreesToRadians = degreesToRadians;\n/**\n * Converts a length to the requested unit.\n * Valid units: miles, nauticalmiles, inches, yards, meters, metres, kilometers, centimeters, feet\n *\n * @param {number} length to be converted\n * @param {Units} [originalUnit=\"kilometers\"] of the length\n * @param {Units} [finalUnit=\"kilometers\"] returned unit\n * @returns {number} the converted length\n */\nfunction convertLength(length, originalUnit, finalUnit) {\n if (originalUnit === void 0) { originalUnit = \"kilometers\"; }\n if (finalUnit === void 0) { finalUnit = \"kilometers\"; }\n if (!(length >= 0)) {\n throw new Error(\"length must be a positive number\");\n }\n return radiansToLength(lengthToRadians(length, originalUnit), finalUnit);\n}\nexports.convertLength = convertLength;\n/**\n * Converts a area to the requested unit.\n * Valid units: kilometers, kilometres, meters, metres, centimetres, millimeters, acres, miles, yards, feet, inches, hectares\n * @param {number} area to be converted\n * @param {Units} [originalUnit=\"meters\"] of the distance\n * @param {Units} [finalUnit=\"kilometers\"] returned unit\n * @returns {number} the converted area\n */\nfunction convertArea(area, originalUnit, finalUnit) {\n if (originalUnit === void 0) { originalUnit = \"meters\"; }\n if (finalUnit === void 0) { finalUnit = \"kilometers\"; }\n if (!(area >= 0)) {\n throw new Error(\"area must be a positive number\");\n }\n var startFactor = exports.areaFactors[originalUnit];\n if (!startFactor) {\n throw new Error(\"invalid original units\");\n }\n var finalFactor = exports.areaFactors[finalUnit];\n if (!finalFactor) {\n throw new Error(\"invalid final units\");\n }\n return (area / startFactor) * finalFactor;\n}\nexports.convertArea = convertArea;\n/**\n * isNumber\n *\n * @param {*} num Number to validate\n * @returns {boolean} true/false\n * @example\n * turf.isNumber(123)\n * //=true\n * turf.isNumber('foo')\n * //=false\n */\nfunction isNumber(num) {\n return !isNaN(num) && num !== null && !Array.isArray(num);\n}\nexports.isNumber = isNumber;\n/**\n * isObject\n *\n * @param {*} input variable to validate\n * @returns {boolean} true/false\n * @example\n * turf.isObject({elevation: 10})\n * //=true\n * turf.isObject('foo')\n * //=false\n */\nfunction isObject(input) {\n return !!input && input.constructor === Object;\n}\nexports.isObject = isObject;\n/**\n * Validate BBox\n *\n * @private\n * @param {Array} bbox BBox to validate\n * @returns {void}\n * @throws Error if BBox is not valid\n * @example\n * validateBBox([-180, -40, 110, 50])\n * //=OK\n * validateBBox([-180, -40])\n * //=Error\n * validateBBox('Foo')\n * //=Error\n * validateBBox(5)\n * //=Error\n * validateBBox(null)\n * //=Error\n * validateBBox(undefined)\n * //=Error\n */\nfunction validateBBox(bbox) {\n if (!bbox) {\n throw new Error(\"bbox is required\");\n }\n if (!Array.isArray(bbox)) {\n throw new Error(\"bbox must be an Array\");\n }\n if (bbox.length !== 4 && bbox.length !== 6) {\n throw new Error(\"bbox must be an Array of 4 or 6 numbers\");\n }\n bbox.forEach(function (num) {\n if (!isNumber(num)) {\n throw new Error(\"bbox must only contain numbers\");\n }\n });\n}\nexports.validateBBox = validateBBox;\n/**\n * Validate Id\n *\n * @private\n * @param {string|number} id Id to validate\n * @returns {void}\n * @throws Error if Id is not valid\n * @example\n * validateId([-180, -40, 110, 50])\n * //=Error\n * validateId([-180, -40])\n * //=Error\n * validateId('Foo')\n * //=OK\n * validateId(5)\n * //=OK\n * validateId(null)\n * //=Error\n * validateId(undefined)\n * //=Error\n */\nfunction validateId(id) {\n if (!id) {\n throw new Error(\"id is required\");\n }\n if ([\"string\", \"number\"].indexOf(typeof id) === -1) {\n throw new Error(\"id must be a number or a string\");\n }\n}\nexports.validateId = validateId;\n","'use strict';\n\nObject.defineProperty(exports, '__esModule', { value: true });\n\nvar helpers = require('@turf/helpers');\n\n/**\n * Callback for coordEach\n *\n * @callback coordEachCallback\n * @param {Array} currentCoord The current coordinate being processed.\n * @param {number} coordIndex The current index of the coordinate being processed.\n * @param {number} featureIndex The current index of the Feature being processed.\n * @param {number} multiFeatureIndex The current index of the Multi-Feature being processed.\n * @param {number} geometryIndex The current index of the Geometry being processed.\n */\n\n/**\n * Iterate over coordinates in any GeoJSON object, similar to Array.forEach()\n *\n * @name coordEach\n * @param {FeatureCollection|Feature|Geometry} geojson any GeoJSON object\n * @param {Function} callback a method that takes (currentCoord, coordIndex, featureIndex, multiFeatureIndex)\n * @param {boolean} [excludeWrapCoord=false] whether or not to include the final coordinate of LinearRings that wraps the ring in its iteration.\n * @returns {void}\n * @example\n * var features = turf.featureCollection([\n * turf.point([26, 37], {\"foo\": \"bar\"}),\n * turf.point([36, 53], {\"hello\": \"world\"})\n * ]);\n *\n * turf.coordEach(features, function (currentCoord, coordIndex, featureIndex, multiFeatureIndex, geometryIndex) {\n * //=currentCoord\n * //=coordIndex\n * //=featureIndex\n * //=multiFeatureIndex\n * //=geometryIndex\n * });\n */\nfunction coordEach(geojson, callback, excludeWrapCoord) {\n // Handles null Geometry -- Skips this GeoJSON\n if (geojson === null) return;\n var j,\n k,\n l,\n geometry,\n stopG,\n coords,\n geometryMaybeCollection,\n wrapShrink = 0,\n coordIndex = 0,\n isGeometryCollection,\n type = geojson.type,\n isFeatureCollection = type === \"FeatureCollection\",\n isFeature = type === \"Feature\",\n stop = isFeatureCollection ? geojson.features.length : 1;\n\n // This logic may look a little weird. The reason why it is that way\n // is because it's trying to be fast. GeoJSON supports multiple kinds\n // of objects at its root: FeatureCollection, Features, Geometries.\n // This function has the responsibility of handling all of them, and that\n // means that some of the `for` loops you see below actually just don't apply\n // to certain inputs. For instance, if you give this just a\n // Point geometry, then both loops are short-circuited and all we do\n // is gradually rename the input until it's called 'geometry'.\n //\n // This also aims to allocate as few resources as possible: just a\n // few numbers and booleans, rather than any temporary arrays as would\n // be required with the normalization approach.\n for (var featureIndex = 0; featureIndex < stop; featureIndex++) {\n geometryMaybeCollection = isFeatureCollection\n ? geojson.features[featureIndex].geometry\n : isFeature\n ? geojson.geometry\n : geojson;\n isGeometryCollection = geometryMaybeCollection\n ? geometryMaybeCollection.type === \"GeometryCollection\"\n : false;\n stopG = isGeometryCollection\n ? geometryMaybeCollection.geometries.length\n : 1;\n\n for (var geomIndex = 0; geomIndex < stopG; geomIndex++) {\n var multiFeatureIndex = 0;\n var geometryIndex = 0;\n geometry = isGeometryCollection\n ? geometryMaybeCollection.geometries[geomIndex]\n : geometryMaybeCollection;\n\n // Handles null Geometry -- Skips this geometry\n if (geometry === null) continue;\n coords = geometry.coordinates;\n var geomType = geometry.type;\n\n wrapShrink =\n excludeWrapCoord &&\n (geomType === \"Polygon\" || geomType === \"MultiPolygon\")\n ? 1\n : 0;\n\n switch (geomType) {\n case null:\n break;\n case \"Point\":\n if (\n callback(\n coords,\n coordIndex,\n featureIndex,\n multiFeatureIndex,\n geometryIndex\n ) === false\n )\n return false;\n coordIndex++;\n multiFeatureIndex++;\n break;\n case \"LineString\":\n case \"MultiPoint\":\n for (j = 0; j < coords.length; j++) {\n if (\n callback(\n coords[j],\n coordIndex,\n featureIndex,\n multiFeatureIndex,\n geometryIndex\n ) === false\n )\n return false;\n coordIndex++;\n if (geomType === \"MultiPoint\") multiFeatureIndex++;\n }\n if (geomType === \"LineString\") multiFeatureIndex++;\n break;\n case \"Polygon\":\n case \"MultiLineString\":\n for (j = 0; j < coords.length; j++) {\n for (k = 0; k < coords[j].length - wrapShrink; k++) {\n if (\n callback(\n coords[j][k],\n coordIndex,\n featureIndex,\n multiFeatureIndex,\n geometryIndex\n ) === false\n )\n return false;\n coordIndex++;\n }\n if (geomType === \"MultiLineString\") multiFeatureIndex++;\n if (geomType === \"Polygon\") geometryIndex++;\n }\n if (geomType === \"Polygon\") multiFeatureIndex++;\n break;\n case \"MultiPolygon\":\n for (j = 0; j < coords.length; j++) {\n geometryIndex = 0;\n for (k = 0; k < coords[j].length; k++) {\n for (l = 0; l < coords[j][k].length - wrapShrink; l++) {\n if (\n callback(\n coords[j][k][l],\n coordIndex,\n featureIndex,\n multiFeatureIndex,\n geometryIndex\n ) === false\n )\n return false;\n coordIndex++;\n }\n geometryIndex++;\n }\n multiFeatureIndex++;\n }\n break;\n case \"GeometryCollection\":\n for (j = 0; j < geometry.geometries.length; j++)\n if (\n coordEach(geometry.geometries[j], callback, excludeWrapCoord) ===\n false\n )\n return false;\n break;\n default:\n throw new Error(\"Unknown Geometry Type\");\n }\n }\n }\n}\n\n/**\n * Callback for coordReduce\n *\n * The first time the callback function is called, the values provided as arguments depend\n * on whether the reduce method has an initialValue argument.\n *\n * If an initialValue is provided to the reduce method:\n * - The previousValue argument is initialValue.\n * - The currentValue argument is the value of the first element present in the array.\n *\n * If an initialValue is not provided:\n * - The previousValue argument is the value of the first element present in the array.\n * - The currentValue argument is the value of the second element present in the array.\n *\n * @callback coordReduceCallback\n * @param {*} previousValue The accumulated value previously returned in the last invocation\n * of the callback, or initialValue, if supplied.\n * @param {Array} currentCoord The current coordinate being processed.\n * @param {number} coordIndex The current index of the coordinate being processed.\n * Starts at index 0, if an initialValue is provided, and at index 1 otherwise.\n * @param {number} featureIndex The current index of the Feature being processed.\n * @param {number} multiFeatureIndex The current index of the Multi-Feature being processed.\n * @param {number} geometryIndex The current index of the Geometry being processed.\n */\n\n/**\n * Reduce coordinates in any GeoJSON object, similar to Array.reduce()\n *\n * @name coordReduce\n * @param {FeatureCollection|Geometry|Feature} geojson any GeoJSON object\n * @param {Function} callback a method that takes (previousValue, currentCoord, coordIndex)\n * @param {*} [initialValue] Value to use as the first argument to the first call of the callback.\n * @param {boolean} [excludeWrapCoord=false] whether or not to include the final coordinate of LinearRings that wraps the ring in its iteration.\n * @returns {*} The value that results from the reduction.\n * @example\n * var features = turf.featureCollection([\n * turf.point([26, 37], {\"foo\": \"bar\"}),\n * turf.point([36, 53], {\"hello\": \"world\"})\n * ]);\n *\n * turf.coordReduce(features, function (previousValue, currentCoord, coordIndex, featureIndex, multiFeatureIndex, geometryIndex) {\n * //=previousValue\n * //=currentCoord\n * //=coordIndex\n * //=featureIndex\n * //=multiFeatureIndex\n * //=geometryIndex\n * return currentCoord;\n * });\n */\nfunction coordReduce(geojson, callback, initialValue, excludeWrapCoord) {\n var previousValue = initialValue;\n coordEach(\n geojson,\n function (\n currentCoord,\n coordIndex,\n featureIndex,\n multiFeatureIndex,\n geometryIndex\n ) {\n if (coordIndex === 0 && initialValue === undefined)\n previousValue = currentCoord;\n else\n previousValue = callback(\n previousValue,\n currentCoord,\n coordIndex,\n featureIndex,\n multiFeatureIndex,\n geometryIndex\n );\n },\n excludeWrapCoord\n );\n return previousValue;\n}\n\n/**\n * Callback for propEach\n *\n * @callback propEachCallback\n * @param {Object} currentProperties The current Properties being processed.\n * @param {number} featureIndex The current index of the Feature being processed.\n */\n\n/**\n * Iterate over properties in any GeoJSON object, similar to Array.forEach()\n *\n * @name propEach\n * @param {FeatureCollection|Feature} geojson any GeoJSON object\n * @param {Function} callback a method that takes (currentProperties, featureIndex)\n * @returns {void}\n * @example\n * var features = turf.featureCollection([\n * turf.point([26, 37], {foo: 'bar'}),\n * turf.point([36, 53], {hello: 'world'})\n * ]);\n *\n * turf.propEach(features, function (currentProperties, featureIndex) {\n * //=currentProperties\n * //=featureIndex\n * });\n */\nfunction propEach(geojson, callback) {\n var i;\n switch (geojson.type) {\n case \"FeatureCollection\":\n for (i = 0; i < geojson.features.length; i++) {\n if (callback(geojson.features[i].properties, i) === false) break;\n }\n break;\n case \"Feature\":\n callback(geojson.properties, 0);\n break;\n }\n}\n\n/**\n * Callback for propReduce\n *\n * The first time the callback function is called, the values provided as arguments depend\n * on whether the reduce method has an initialValue argument.\n *\n * If an initialValue is provided to the reduce method:\n * - The previousValue argument is initialValue.\n * - The currentValue argument is the value of the first element present in the array.\n *\n * If an initialValue is not provided:\n * - The previousValue argument is the value of the first element present in the array.\n * - The currentValue argument is the value of the second element present in the array.\n *\n * @callback propReduceCallback\n * @param {*} previousValue The accumulated value previously returned in the last invocation\n * of the callback, or initialValue, if supplied.\n * @param {*} currentProperties The current Properties being processed.\n * @param {number} featureIndex The current index of the Feature being processed.\n */\n\n/**\n * Reduce properties in any GeoJSON object into a single value,\n * similar to how Array.reduce works. However, in this case we lazily run\n * the reduction, so an array of all properties is unnecessary.\n *\n * @name propReduce\n * @param {FeatureCollection|Feature} geojson any GeoJSON object\n * @param {Function} callback a method that takes (previousValue, currentProperties, featureIndex)\n * @param {*} [initialValue] Value to use as the first argument to the first call of the callback.\n * @returns {*} The value that results from the reduction.\n * @example\n * var features = turf.featureCollection([\n * turf.point([26, 37], {foo: 'bar'}),\n * turf.point([36, 53], {hello: 'world'})\n * ]);\n *\n * turf.propReduce(features, function (previousValue, currentProperties, featureIndex) {\n * //=previousValue\n * //=currentProperties\n * //=featureIndex\n * return currentProperties\n * });\n */\nfunction propReduce(geojson, callback, initialValue) {\n var previousValue = initialValue;\n propEach(geojson, function (currentProperties, featureIndex) {\n if (featureIndex === 0 && initialValue === undefined)\n previousValue = currentProperties;\n else\n previousValue = callback(previousValue, currentProperties, featureIndex);\n });\n return previousValue;\n}\n\n/**\n * Callback for featureEach\n *\n * @callback featureEachCallback\n * @param {Feature} currentFeature The current Feature being processed.\n * @param {number} featureIndex The current index of the Feature being processed.\n */\n\n/**\n * Iterate over features in any GeoJSON object, similar to\n * Array.forEach.\n *\n * @name featureEach\n * @param {FeatureCollection|Feature|Geometry} geojson any GeoJSON object\n * @param {Function} callback a method that takes (currentFeature, featureIndex)\n * @returns {void}\n * @example\n * var features = turf.featureCollection([\n * turf.point([26, 37], {foo: 'bar'}),\n * turf.point([36, 53], {hello: 'world'})\n * ]);\n *\n * turf.featureEach(features, function (currentFeature, featureIndex) {\n * //=currentFeature\n * //=featureIndex\n * });\n */\nfunction featureEach(geojson, callback) {\n if (geojson.type === \"Feature\") {\n callback(geojson, 0);\n } else if (geojson.type === \"FeatureCollection\") {\n for (var i = 0; i < geojson.features.length; i++) {\n if (callback(geojson.features[i], i) === false) break;\n }\n }\n}\n\n/**\n * Callback for featureReduce\n *\n * The first time the callback function is called, the values provided as arguments depend\n * on whether the reduce method has an initialValue argument.\n *\n * If an initialValue is provided to the reduce method:\n * - The previousValue argument is initialValue.\n * - The currentValue argument is the value of the first element present in the array.\n *\n * If an initialValue is not provided:\n * - The previousValue argument is the value of the first element present in the array.\n * - The currentValue argument is the value of the second element present in the array.\n *\n * @callback featureReduceCallback\n * @param {*} previousValue The accumulated value previously returned in the last invocation\n * of the callback, or initialValue, if supplied.\n * @param {Feature} currentFeature The current Feature being processed.\n * @param {number} featureIndex The current index of the Feature being processed.\n */\n\n/**\n * Reduce features in any GeoJSON object, similar to Array.reduce().\n *\n * @name featureReduce\n * @param {FeatureCollection|Feature|Geometry} geojson any GeoJSON object\n * @param {Function} callback a method that takes (previousValue, currentFeature, featureIndex)\n * @param {*} [initialValue] Value to use as the first argument to the first call of the callback.\n * @returns {*} The value that results from the reduction.\n * @example\n * var features = turf.featureCollection([\n * turf.point([26, 37], {\"foo\": \"bar\"}),\n * turf.point([36, 53], {\"hello\": \"world\"})\n * ]);\n *\n * turf.featureReduce(features, function (previousValue, currentFeature, featureIndex) {\n * //=previousValue\n * //=currentFeature\n * //=featureIndex\n * return currentFeature\n * });\n */\nfunction featureReduce(geojson, callback, initialValue) {\n var previousValue = initialValue;\n featureEach(geojson, function (currentFeature, featureIndex) {\n if (featureIndex === 0 && initialValue === undefined)\n previousValue = currentFeature;\n else previousValue = callback(previousValue, currentFeature, featureIndex);\n });\n return previousValue;\n}\n\n/**\n * Get all coordinates from any GeoJSON object.\n *\n * @name coordAll\n * @param {FeatureCollection|Feature|Geometry} geojson any GeoJSON object\n * @returns {Array>} coordinate position array\n * @example\n * var features = turf.featureCollection([\n * turf.point([26, 37], {foo: 'bar'}),\n * turf.point([36, 53], {hello: 'world'})\n * ]);\n *\n * var coords = turf.coordAll(features);\n * //= [[26, 37], [36, 53]]\n */\nfunction coordAll(geojson) {\n var coords = [];\n coordEach(geojson, function (coord) {\n coords.push(coord);\n });\n return coords;\n}\n\n/**\n * Callback for geomEach\n *\n * @callback geomEachCallback\n * @param {Geometry} currentGeometry The current Geometry being processed.\n * @param {number} featureIndex The current index of the Feature being processed.\n * @param {Object} featureProperties The current Feature Properties being processed.\n * @param {Array} featureBBox The current Feature BBox being processed.\n * @param {number|string} featureId The current Feature Id being processed.\n */\n\n/**\n * Iterate over each geometry in any GeoJSON object, similar to Array.forEach()\n *\n * @name geomEach\n * @param {FeatureCollection|Feature|Geometry} geojson any GeoJSON object\n * @param {Function} callback a method that takes (currentGeometry, featureIndex, featureProperties, featureBBox, featureId)\n * @returns {void}\n * @example\n * var features = turf.featureCollection([\n * turf.point([26, 37], {foo: 'bar'}),\n * turf.point([36, 53], {hello: 'world'})\n * ]);\n *\n * turf.geomEach(features, function (currentGeometry, featureIndex, featureProperties, featureBBox, featureId) {\n * //=currentGeometry\n * //=featureIndex\n * //=featureProperties\n * //=featureBBox\n * //=featureId\n * });\n */\nfunction geomEach(geojson, callback) {\n var i,\n j,\n g,\n geometry,\n stopG,\n geometryMaybeCollection,\n isGeometryCollection,\n featureProperties,\n featureBBox,\n featureId,\n featureIndex = 0,\n isFeatureCollection = geojson.type === \"FeatureCollection\",\n isFeature = geojson.type === \"Feature\",\n stop = isFeatureCollection ? geojson.features.length : 1;\n\n // This logic may look a little weird. The reason why it is that way\n // is because it's trying to be fast. GeoJSON supports multiple kinds\n // of objects at its root: FeatureCollection, Features, Geometries.\n // This function has the responsibility of handling all of them, and that\n // means that some of the `for` loops you see below actually just don't apply\n // to certain inputs. For instance, if you give this just a\n // Point geometry, then both loops are short-circuited and all we do\n // is gradually rename the input until it's called 'geometry'.\n //\n // This also aims to allocate as few resources as possible: just a\n // few numbers and booleans, rather than any temporary arrays as would\n // be required with the normalization approach.\n for (i = 0; i < stop; i++) {\n geometryMaybeCollection = isFeatureCollection\n ? geojson.features[i].geometry\n : isFeature\n ? geojson.geometry\n : geojson;\n featureProperties = isFeatureCollection\n ? geojson.features[i].properties\n : isFeature\n ? geojson.properties\n : {};\n featureBBox = isFeatureCollection\n ? geojson.features[i].bbox\n : isFeature\n ? geojson.bbox\n : undefined;\n featureId = isFeatureCollection\n ? geojson.features[i].id\n : isFeature\n ? geojson.id\n : undefined;\n isGeometryCollection = geometryMaybeCollection\n ? geometryMaybeCollection.type === \"GeometryCollection\"\n : false;\n stopG = isGeometryCollection\n ? geometryMaybeCollection.geometries.length\n : 1;\n\n for (g = 0; g < stopG; g++) {\n geometry = isGeometryCollection\n ? geometryMaybeCollection.geometries[g]\n : geometryMaybeCollection;\n\n // Handle null Geometry\n if (geometry === null) {\n if (\n callback(\n null,\n featureIndex,\n featureProperties,\n featureBBox,\n featureId\n ) === false\n )\n return false;\n continue;\n }\n switch (geometry.type) {\n case \"Point\":\n case \"LineString\":\n case \"MultiPoint\":\n case \"Polygon\":\n case \"MultiLineString\":\n case \"MultiPolygon\": {\n if (\n callback(\n geometry,\n featureIndex,\n featureProperties,\n featureBBox,\n featureId\n ) === false\n )\n return false;\n break;\n }\n case \"GeometryCollection\": {\n for (j = 0; j < geometry.geometries.length; j++) {\n if (\n callback(\n geometry.geometries[j],\n featureIndex,\n featureProperties,\n featureBBox,\n featureId\n ) === false\n )\n return false;\n }\n break;\n }\n default:\n throw new Error(\"Unknown Geometry Type\");\n }\n }\n // Only increase `featureIndex` per each feature\n featureIndex++;\n }\n}\n\n/**\n * Callback for geomReduce\n *\n * The first time the callback function is called, the values provided as arguments depend\n * on whether the reduce method has an initialValue argument.\n *\n * If an initialValue is provided to the reduce method:\n * - The previousValue argument is initialValue.\n * - The currentValue argument is the value of the first element present in the array.\n *\n * If an initialValue is not provided:\n * - The previousValue argument is the value of the first element present in the array.\n * - The currentValue argument is the value of the second element present in the array.\n *\n * @callback geomReduceCallback\n * @param {*} previousValue The accumulated value previously returned in the last invocation\n * of the callback, or initialValue, if supplied.\n * @param {Geometry} currentGeometry The current Geometry being processed.\n * @param {number} featureIndex The current index of the Feature being processed.\n * @param {Object} featureProperties The current Feature Properties being processed.\n * @param {Array} featureBBox The current Feature BBox being processed.\n * @param {number|string} featureId The current Feature Id being processed.\n */\n\n/**\n * Reduce geometry in any GeoJSON object, similar to Array.reduce().\n *\n * @name geomReduce\n * @param {FeatureCollection|Feature|Geometry} geojson any GeoJSON object\n * @param {Function} callback a method that takes (previousValue, currentGeometry, featureIndex, featureProperties, featureBBox, featureId)\n * @param {*} [initialValue] Value to use as the first argument to the first call of the callback.\n * @returns {*} The value that results from the reduction.\n * @example\n * var features = turf.featureCollection([\n * turf.point([26, 37], {foo: 'bar'}),\n * turf.point([36, 53], {hello: 'world'})\n * ]);\n *\n * turf.geomReduce(features, function (previousValue, currentGeometry, featureIndex, featureProperties, featureBBox, featureId) {\n * //=previousValue\n * //=currentGeometry\n * //=featureIndex\n * //=featureProperties\n * //=featureBBox\n * //=featureId\n * return currentGeometry\n * });\n */\nfunction geomReduce(geojson, callback, initialValue) {\n var previousValue = initialValue;\n geomEach(\n geojson,\n function (\n currentGeometry,\n featureIndex,\n featureProperties,\n featureBBox,\n featureId\n ) {\n if (featureIndex === 0 && initialValue === undefined)\n previousValue = currentGeometry;\n else\n previousValue = callback(\n previousValue,\n currentGeometry,\n featureIndex,\n featureProperties,\n featureBBox,\n featureId\n );\n }\n );\n return previousValue;\n}\n\n/**\n * Callback for flattenEach\n *\n * @callback flattenEachCallback\n * @param {Feature} currentFeature The current flattened feature being processed.\n * @param {number} featureIndex The current index of the Feature being processed.\n * @param {number} multiFeatureIndex The current index of the Multi-Feature being processed.\n */\n\n/**\n * Iterate over flattened features in any GeoJSON object, similar to\n * Array.forEach.\n *\n * @name flattenEach\n * @param {FeatureCollection|Feature|Geometry} geojson any GeoJSON object\n * @param {Function} callback a method that takes (currentFeature, featureIndex, multiFeatureIndex)\n * @example\n * var features = turf.featureCollection([\n * turf.point([26, 37], {foo: 'bar'}),\n * turf.multiPoint([[40, 30], [36, 53]], {hello: 'world'})\n * ]);\n *\n * turf.flattenEach(features, function (currentFeature, featureIndex, multiFeatureIndex) {\n * //=currentFeature\n * //=featureIndex\n * //=multiFeatureIndex\n * });\n */\nfunction flattenEach(geojson, callback) {\n geomEach(geojson, function (geometry, featureIndex, properties, bbox, id) {\n // Callback for single geometry\n var type = geometry === null ? null : geometry.type;\n switch (type) {\n case null:\n case \"Point\":\n case \"LineString\":\n case \"Polygon\":\n if (\n callback(\n helpers.feature(geometry, properties, { bbox: bbox, id: id }),\n featureIndex,\n 0\n ) === false\n )\n return false;\n return;\n }\n\n var geomType;\n\n // Callback for multi-geometry\n switch (type) {\n case \"MultiPoint\":\n geomType = \"Point\";\n break;\n case \"MultiLineString\":\n geomType = \"LineString\";\n break;\n case \"MultiPolygon\":\n geomType = \"Polygon\";\n break;\n }\n\n for (\n var multiFeatureIndex = 0;\n multiFeatureIndex < geometry.coordinates.length;\n multiFeatureIndex++\n ) {\n var coordinate = geometry.coordinates[multiFeatureIndex];\n var geom = {\n type: geomType,\n coordinates: coordinate,\n };\n if (\n callback(helpers.feature(geom, properties), featureIndex, multiFeatureIndex) ===\n false\n )\n return false;\n }\n });\n}\n\n/**\n * Callback for flattenReduce\n *\n * The first time the callback function is called, the values provided as arguments depend\n * on whether the reduce method has an initialValue argument.\n *\n * If an initialValue is provided to the reduce method:\n * - The previousValue argument is initialValue.\n * - The currentValue argument is the value of the first element present in the array.\n *\n * If an initialValue is not provided:\n * - The previousValue argument is the value of the first element present in the array.\n * - The currentValue argument is the value of the second element present in the array.\n *\n * @callback flattenReduceCallback\n * @param {*} previousValue The accumulated value previously returned in the last invocation\n * of the callback, or initialValue, if supplied.\n * @param {Feature} currentFeature The current Feature being processed.\n * @param {number} featureIndex The current index of the Feature being processed.\n * @param {number} multiFeatureIndex The current index of the Multi-Feature being processed.\n */\n\n/**\n * Reduce flattened features in any GeoJSON object, similar to Array.reduce().\n *\n * @name flattenReduce\n * @param {FeatureCollection|Feature|Geometry} geojson any GeoJSON object\n * @param {Function} callback a method that takes (previousValue, currentFeature, featureIndex, multiFeatureIndex)\n * @param {*} [initialValue] Value to use as the first argument to the first call of the callback.\n * @returns {*} The value that results from the reduction.\n * @example\n * var features = turf.featureCollection([\n * turf.point([26, 37], {foo: 'bar'}),\n * turf.multiPoint([[40, 30], [36, 53]], {hello: 'world'})\n * ]);\n *\n * turf.flattenReduce(features, function (previousValue, currentFeature, featureIndex, multiFeatureIndex) {\n * //=previousValue\n * //=currentFeature\n * //=featureIndex\n * //=multiFeatureIndex\n * return currentFeature\n * });\n */\nfunction flattenReduce(geojson, callback, initialValue) {\n var previousValue = initialValue;\n flattenEach(\n geojson,\n function (currentFeature, featureIndex, multiFeatureIndex) {\n if (\n featureIndex === 0 &&\n multiFeatureIndex === 0 &&\n initialValue === undefined\n )\n previousValue = currentFeature;\n else\n previousValue = callback(\n previousValue,\n currentFeature,\n featureIndex,\n multiFeatureIndex\n );\n }\n );\n return previousValue;\n}\n\n/**\n * Callback for segmentEach\n *\n * @callback segmentEachCallback\n * @param {Feature} currentSegment The current Segment being processed.\n * @param {number} featureIndex The current index of the Feature being processed.\n * @param {number} multiFeatureIndex The current index of the Multi-Feature being processed.\n * @param {number} geometryIndex The current index of the Geometry being processed.\n * @param {number} segmentIndex The current index of the Segment being processed.\n * @returns {void}\n */\n\n/**\n * Iterate over 2-vertex line segment in any GeoJSON object, similar to Array.forEach()\n * (Multi)Point geometries do not contain segments therefore they are ignored during this operation.\n *\n * @param {FeatureCollection|Feature|Geometry} geojson any GeoJSON\n * @param {Function} callback a method that takes (currentSegment, featureIndex, multiFeatureIndex, geometryIndex, segmentIndex)\n * @returns {void}\n * @example\n * var polygon = turf.polygon([[[-50, 5], [-40, -10], [-50, -10], [-40, 5], [-50, 5]]]);\n *\n * // Iterate over GeoJSON by 2-vertex segments\n * turf.segmentEach(polygon, function (currentSegment, featureIndex, multiFeatureIndex, geometryIndex, segmentIndex) {\n * //=currentSegment\n * //=featureIndex\n * //=multiFeatureIndex\n * //=geometryIndex\n * //=segmentIndex\n * });\n *\n * // Calculate the total number of segments\n * var total = 0;\n * turf.segmentEach(polygon, function () {\n * total++;\n * });\n */\nfunction segmentEach(geojson, callback) {\n flattenEach(geojson, function (feature, featureIndex, multiFeatureIndex) {\n var segmentIndex = 0;\n\n // Exclude null Geometries\n if (!feature.geometry) return;\n // (Multi)Point geometries do not contain segments therefore they are ignored during this operation.\n var type = feature.geometry.type;\n if (type === \"Point\" || type === \"MultiPoint\") return;\n\n // Generate 2-vertex line segments\n var previousCoords;\n var previousFeatureIndex = 0;\n var previousMultiIndex = 0;\n var prevGeomIndex = 0;\n if (\n coordEach(\n feature,\n function (\n currentCoord,\n coordIndex,\n featureIndexCoord,\n multiPartIndexCoord,\n geometryIndex\n ) {\n // Simulating a meta.coordReduce() since `reduce` operations cannot be stopped by returning `false`\n if (\n previousCoords === undefined ||\n featureIndex > previousFeatureIndex ||\n multiPartIndexCoord > previousMultiIndex ||\n geometryIndex > prevGeomIndex\n ) {\n previousCoords = currentCoord;\n previousFeatureIndex = featureIndex;\n previousMultiIndex = multiPartIndexCoord;\n prevGeomIndex = geometryIndex;\n segmentIndex = 0;\n return;\n }\n var currentSegment = helpers.lineString(\n [previousCoords, currentCoord],\n feature.properties\n );\n if (\n callback(\n currentSegment,\n featureIndex,\n multiFeatureIndex,\n geometryIndex,\n segmentIndex\n ) === false\n )\n return false;\n segmentIndex++;\n previousCoords = currentCoord;\n }\n ) === false\n )\n return false;\n });\n}\n\n/**\n * Callback for segmentReduce\n *\n * The first time the callback function is called, the values provided as arguments depend\n * on whether the reduce method has an initialValue argument.\n *\n * If an initialValue is provided to the reduce method:\n * - The previousValue argument is initialValue.\n * - The currentValue argument is the value of the first element present in the array.\n *\n * If an initialValue is not provided:\n * - The previousValue argument is the value of the first element present in the array.\n * - The currentValue argument is the value of the second element present in the array.\n *\n * @callback segmentReduceCallback\n * @param {*} previousValue The accumulated value previously returned in the last invocation\n * of the callback, or initialValue, if supplied.\n * @param {Feature} currentSegment The current Segment being processed.\n * @param {number} featureIndex The current index of the Feature being processed.\n * @param {number} multiFeatureIndex The current index of the Multi-Feature being processed.\n * @param {number} geometryIndex The current index of the Geometry being processed.\n * @param {number} segmentIndex The current index of the Segment being processed.\n */\n\n/**\n * Reduce 2-vertex line segment in any GeoJSON object, similar to Array.reduce()\n * (Multi)Point geometries do not contain segments therefore they are ignored during this operation.\n *\n * @param {FeatureCollection|Feature|Geometry} geojson any GeoJSON\n * @param {Function} callback a method that takes (previousValue, currentSegment, currentIndex)\n * @param {*} [initialValue] Value to use as the first argument to the first call of the callback.\n * @returns {void}\n * @example\n * var polygon = turf.polygon([[[-50, 5], [-40, -10], [-50, -10], [-40, 5], [-50, 5]]]);\n *\n * // Iterate over GeoJSON by 2-vertex segments\n * turf.segmentReduce(polygon, function (previousSegment, currentSegment, featureIndex, multiFeatureIndex, geometryIndex, segmentIndex) {\n * //= previousSegment\n * //= currentSegment\n * //= featureIndex\n * //= multiFeatureIndex\n * //= geometryIndex\n * //= segmentIndex\n * return currentSegment\n * });\n *\n * // Calculate the total number of segments\n * var initialValue = 0\n * var total = turf.segmentReduce(polygon, function (previousValue) {\n * previousValue++;\n * return previousValue;\n * }, initialValue);\n */\nfunction segmentReduce(geojson, callback, initialValue) {\n var previousValue = initialValue;\n var started = false;\n segmentEach(\n geojson,\n function (\n currentSegment,\n featureIndex,\n multiFeatureIndex,\n geometryIndex,\n segmentIndex\n ) {\n if (started === false && initialValue === undefined)\n previousValue = currentSegment;\n else\n previousValue = callback(\n previousValue,\n currentSegment,\n featureIndex,\n multiFeatureIndex,\n geometryIndex,\n segmentIndex\n );\n started = true;\n }\n );\n return previousValue;\n}\n\n/**\n * Callback for lineEach\n *\n * @callback lineEachCallback\n * @param {Feature} currentLine The current LineString|LinearRing being processed\n * @param {number} featureIndex The current index of the Feature being processed\n * @param {number} multiFeatureIndex The current index of the Multi-Feature being processed\n * @param {number} geometryIndex The current index of the Geometry being processed\n */\n\n/**\n * Iterate over line or ring coordinates in LineString, Polygon, MultiLineString, MultiPolygon Features or Geometries,\n * similar to Array.forEach.\n *\n * @name lineEach\n * @param {Geometry|Feature} geojson object\n * @param {Function} callback a method that takes (currentLine, featureIndex, multiFeatureIndex, geometryIndex)\n * @example\n * var multiLine = turf.multiLineString([\n * [[26, 37], [35, 45]],\n * [[36, 53], [38, 50], [41, 55]]\n * ]);\n *\n * turf.lineEach(multiLine, function (currentLine, featureIndex, multiFeatureIndex, geometryIndex) {\n * //=currentLine\n * //=featureIndex\n * //=multiFeatureIndex\n * //=geometryIndex\n * });\n */\nfunction lineEach(geojson, callback) {\n // validation\n if (!geojson) throw new Error(\"geojson is required\");\n\n flattenEach(geojson, function (feature, featureIndex, multiFeatureIndex) {\n if (feature.geometry === null) return;\n var type = feature.geometry.type;\n var coords = feature.geometry.coordinates;\n switch (type) {\n case \"LineString\":\n if (callback(feature, featureIndex, multiFeatureIndex, 0, 0) === false)\n return false;\n break;\n case \"Polygon\":\n for (\n var geometryIndex = 0;\n geometryIndex < coords.length;\n geometryIndex++\n ) {\n if (\n callback(\n helpers.lineString(coords[geometryIndex], feature.properties),\n featureIndex,\n multiFeatureIndex,\n geometryIndex\n ) === false\n )\n return false;\n }\n break;\n }\n });\n}\n\n/**\n * Callback for lineReduce\n *\n * The first time the callback function is called, the values provided as arguments depend\n * on whether the reduce method has an initialValue argument.\n *\n * If an initialValue is provided to the reduce method:\n * - The previousValue argument is initialValue.\n * - The currentValue argument is the value of the first element present in the array.\n *\n * If an initialValue is not provided:\n * - The previousValue argument is the value of the first element present in the array.\n * - The currentValue argument is the value of the second element present in the array.\n *\n * @callback lineReduceCallback\n * @param {*} previousValue The accumulated value previously returned in the last invocation\n * of the callback, or initialValue, if supplied.\n * @param {Feature} currentLine The current LineString|LinearRing being processed.\n * @param {number} featureIndex The current index of the Feature being processed\n * @param {number} multiFeatureIndex The current index of the Multi-Feature being processed\n * @param {number} geometryIndex The current index of the Geometry being processed\n */\n\n/**\n * Reduce features in any GeoJSON object, similar to Array.reduce().\n *\n * @name lineReduce\n * @param {Geometry|Feature} geojson object\n * @param {Function} callback a method that takes (previousValue, currentLine, featureIndex, multiFeatureIndex, geometryIndex)\n * @param {*} [initialValue] Value to use as the first argument to the first call of the callback.\n * @returns {*} The value that results from the reduction.\n * @example\n * var multiPoly = turf.multiPolygon([\n * turf.polygon([[[12,48],[2,41],[24,38],[12,48]], [[9,44],[13,41],[13,45],[9,44]]]),\n * turf.polygon([[[5, 5], [0, 0], [2, 2], [4, 4], [5, 5]]])\n * ]);\n *\n * turf.lineReduce(multiPoly, function (previousValue, currentLine, featureIndex, multiFeatureIndex, geometryIndex) {\n * //=previousValue\n * //=currentLine\n * //=featureIndex\n * //=multiFeatureIndex\n * //=geometryIndex\n * return currentLine\n * });\n */\nfunction lineReduce(geojson, callback, initialValue) {\n var previousValue = initialValue;\n lineEach(\n geojson,\n function (currentLine, featureIndex, multiFeatureIndex, geometryIndex) {\n if (featureIndex === 0 && initialValue === undefined)\n previousValue = currentLine;\n else\n previousValue = callback(\n previousValue,\n currentLine,\n featureIndex,\n multiFeatureIndex,\n geometryIndex\n );\n }\n );\n return previousValue;\n}\n\n/**\n * Finds a particular 2-vertex LineString Segment from a GeoJSON using `@turf/meta` indexes.\n *\n * Negative indexes are permitted.\n * Point & MultiPoint will always return null.\n *\n * @param {FeatureCollection|Feature|Geometry} geojson Any GeoJSON Feature or Geometry\n * @param {Object} [options={}] Optional parameters\n * @param {number} [options.featureIndex=0] Feature Index\n * @param {number} [options.multiFeatureIndex=0] Multi-Feature Index\n * @param {number} [options.geometryIndex=0] Geometry Index\n * @param {number} [options.segmentIndex=0] Segment Index\n * @param {Object} [options.properties={}] Translate Properties to output LineString\n * @param {BBox} [options.bbox={}] Translate BBox to output LineString\n * @param {number|string} [options.id={}] Translate Id to output LineString\n * @returns {Feature} 2-vertex GeoJSON Feature LineString\n * @example\n * var multiLine = turf.multiLineString([\n * [[10, 10], [50, 30], [30, 40]],\n * [[-10, -10], [-50, -30], [-30, -40]]\n * ]);\n *\n * // First Segment (defaults are 0)\n * turf.findSegment(multiLine);\n * // => Feature>\n *\n * // First Segment of 2nd Multi Feature\n * turf.findSegment(multiLine, {multiFeatureIndex: 1});\n * // => Feature>\n *\n * // Last Segment of Last Multi Feature\n * turf.findSegment(multiLine, {multiFeatureIndex: -1, segmentIndex: -1});\n * // => Feature>\n */\nfunction findSegment(geojson, options) {\n // Optional Parameters\n options = options || {};\n if (!helpers.isObject(options)) throw new Error(\"options is invalid\");\n var featureIndex = options.featureIndex || 0;\n var multiFeatureIndex = options.multiFeatureIndex || 0;\n var geometryIndex = options.geometryIndex || 0;\n var segmentIndex = options.segmentIndex || 0;\n\n // Find FeatureIndex\n var properties = options.properties;\n var geometry;\n\n switch (geojson.type) {\n case \"FeatureCollection\":\n if (featureIndex < 0)\n featureIndex = geojson.features.length + featureIndex;\n properties = properties || geojson.features[featureIndex].properties;\n geometry = geojson.features[featureIndex].geometry;\n break;\n case \"Feature\":\n properties = properties || geojson.properties;\n geometry = geojson.geometry;\n break;\n case \"Point\":\n case \"MultiPoint\":\n return null;\n case \"LineString\":\n case \"Polygon\":\n case \"MultiLineString\":\n case \"MultiPolygon\":\n geometry = geojson;\n break;\n default:\n throw new Error(\"geojson is invalid\");\n }\n\n // Find SegmentIndex\n if (geometry === null) return null;\n var coords = geometry.coordinates;\n switch (geometry.type) {\n case \"Point\":\n case \"MultiPoint\":\n return null;\n case \"LineString\":\n if (segmentIndex < 0) segmentIndex = coords.length + segmentIndex - 1;\n return helpers.lineString(\n [coords[segmentIndex], coords[segmentIndex + 1]],\n properties,\n options\n );\n case \"Polygon\":\n if (geometryIndex < 0) geometryIndex = coords.length + geometryIndex;\n if (segmentIndex < 0)\n segmentIndex = coords[geometryIndex].length + segmentIndex - 1;\n return helpers.lineString(\n [\n coords[geometryIndex][segmentIndex],\n coords[geometryIndex][segmentIndex + 1],\n ],\n properties,\n options\n );\n case \"MultiLineString\":\n if (multiFeatureIndex < 0)\n multiFeatureIndex = coords.length + multiFeatureIndex;\n if (segmentIndex < 0)\n segmentIndex = coords[multiFeatureIndex].length + segmentIndex - 1;\n return helpers.lineString(\n [\n coords[multiFeatureIndex][segmentIndex],\n coords[multiFeatureIndex][segmentIndex + 1],\n ],\n properties,\n options\n );\n case \"MultiPolygon\":\n if (multiFeatureIndex < 0)\n multiFeatureIndex = coords.length + multiFeatureIndex;\n if (geometryIndex < 0)\n geometryIndex = coords[multiFeatureIndex].length + geometryIndex;\n if (segmentIndex < 0)\n segmentIndex =\n coords[multiFeatureIndex][geometryIndex].length - segmentIndex - 1;\n return helpers.lineString(\n [\n coords[multiFeatureIndex][geometryIndex][segmentIndex],\n coords[multiFeatureIndex][geometryIndex][segmentIndex + 1],\n ],\n properties,\n options\n );\n }\n throw new Error(\"geojson is invalid\");\n}\n\n/**\n * Finds a particular Point from a GeoJSON using `@turf/meta` indexes.\n *\n * Negative indexes are permitted.\n *\n * @param {FeatureCollection|Feature|Geometry} geojson Any GeoJSON Feature or Geometry\n * @param {Object} [options={}] Optional parameters\n * @param {number} [options.featureIndex=0] Feature Index\n * @param {number} [options.multiFeatureIndex=0] Multi-Feature Index\n * @param {number} [options.geometryIndex=0] Geometry Index\n * @param {number} [options.coordIndex=0] Coord Index\n * @param {Object} [options.properties={}] Translate Properties to output Point\n * @param {BBox} [options.bbox={}] Translate BBox to output Point\n * @param {number|string} [options.id={}] Translate Id to output Point\n * @returns {Feature} 2-vertex GeoJSON Feature Point\n * @example\n * var multiLine = turf.multiLineString([\n * [[10, 10], [50, 30], [30, 40]],\n * [[-10, -10], [-50, -30], [-30, -40]]\n * ]);\n *\n * // First Segment (defaults are 0)\n * turf.findPoint(multiLine);\n * // => Feature>\n *\n * // First Segment of the 2nd Multi-Feature\n * turf.findPoint(multiLine, {multiFeatureIndex: 1});\n * // => Feature>\n *\n * // Last Segment of last Multi-Feature\n * turf.findPoint(multiLine, {multiFeatureIndex: -1, coordIndex: -1});\n * // => Feature>\n */\nfunction findPoint(geojson, options) {\n // Optional Parameters\n options = options || {};\n if (!helpers.isObject(options)) throw new Error(\"options is invalid\");\n var featureIndex = options.featureIndex || 0;\n var multiFeatureIndex = options.multiFeatureIndex || 0;\n var geometryIndex = options.geometryIndex || 0;\n var coordIndex = options.coordIndex || 0;\n\n // Find FeatureIndex\n var properties = options.properties;\n var geometry;\n\n switch (geojson.type) {\n case \"FeatureCollection\":\n if (featureIndex < 0)\n featureIndex = geojson.features.length + featureIndex;\n properties = properties || geojson.features[featureIndex].properties;\n geometry = geojson.features[featureIndex].geometry;\n break;\n case \"Feature\":\n properties = properties || geojson.properties;\n geometry = geojson.geometry;\n break;\n case \"Point\":\n case \"MultiPoint\":\n return null;\n case \"LineString\":\n case \"Polygon\":\n case \"MultiLineString\":\n case \"MultiPolygon\":\n geometry = geojson;\n break;\n default:\n throw new Error(\"geojson is invalid\");\n }\n\n // Find Coord Index\n if (geometry === null) return null;\n var coords = geometry.coordinates;\n switch (geometry.type) {\n case \"Point\":\n return helpers.point(coords, properties, options);\n case \"MultiPoint\":\n if (multiFeatureIndex < 0)\n multiFeatureIndex = coords.length + multiFeatureIndex;\n return helpers.point(coords[multiFeatureIndex], properties, options);\n case \"LineString\":\n if (coordIndex < 0) coordIndex = coords.length + coordIndex;\n return helpers.point(coords[coordIndex], properties, options);\n case \"Polygon\":\n if (geometryIndex < 0) geometryIndex = coords.length + geometryIndex;\n if (coordIndex < 0)\n coordIndex = coords[geometryIndex].length + coordIndex;\n return helpers.point(coords[geometryIndex][coordIndex], properties, options);\n case \"MultiLineString\":\n if (multiFeatureIndex < 0)\n multiFeatureIndex = coords.length + multiFeatureIndex;\n if (coordIndex < 0)\n coordIndex = coords[multiFeatureIndex].length + coordIndex;\n return helpers.point(coords[multiFeatureIndex][coordIndex], properties, options);\n case \"MultiPolygon\":\n if (multiFeatureIndex < 0)\n multiFeatureIndex = coords.length + multiFeatureIndex;\n if (geometryIndex < 0)\n geometryIndex = coords[multiFeatureIndex].length + geometryIndex;\n if (coordIndex < 0)\n coordIndex =\n coords[multiFeatureIndex][geometryIndex].length - coordIndex;\n return helpers.point(\n coords[multiFeatureIndex][geometryIndex][coordIndex],\n properties,\n options\n );\n }\n throw new Error(\"geojson is invalid\");\n}\n\nexports.coordAll = coordAll;\nexports.coordEach = coordEach;\nexports.coordReduce = coordReduce;\nexports.featureEach = featureEach;\nexports.featureReduce = featureReduce;\nexports.findPoint = findPoint;\nexports.findSegment = findSegment;\nexports.flattenEach = flattenEach;\nexports.flattenReduce = flattenReduce;\nexports.geomEach = geomEach;\nexports.geomReduce = geomReduce;\nexports.lineEach = lineEach;\nexports.lineReduce = lineReduce;\nexports.propEach = propEach;\nexports.propReduce = propReduce;\nexports.segmentEach = segmentEach;\nexports.segmentReduce = segmentReduce;\n","(function (global, factory) {\n\ttypeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory() :\n\ttypeof define === 'function' && define.amd ? define(factory) :\n\t(global.quickselect = factory());\n}(this, (function () { 'use strict';\n\nfunction quickselect(arr, k, left, right, compare) {\n quickselectStep(arr, k, left || 0, right || (arr.length - 1), compare || defaultCompare);\n}\n\nfunction quickselectStep(arr, k, left, right, compare) {\n\n while (right > left) {\n if (right - left > 600) {\n var n = right - left + 1;\n var m = k - left + 1;\n var z = Math.log(n);\n var s = 0.5 * Math.exp(2 * z / 3);\n var sd = 0.5 * Math.sqrt(z * s * (n - s) / n) * (m - n / 2 < 0 ? -1 : 1);\n var newLeft = Math.max(left, Math.floor(k - m * s / n + sd));\n var newRight = Math.min(right, Math.floor(k + (n - m) * s / n + sd));\n quickselectStep(arr, k, newLeft, newRight, compare);\n }\n\n var t = arr[k];\n var i = left;\n var j = right;\n\n swap(arr, left, k);\n if (compare(arr[right], t) > 0) swap(arr, left, right);\n\n while (i < j) {\n swap(arr, i, j);\n i++;\n j--;\n while (compare(arr[i], t) < 0) i++;\n while (compare(arr[j], t) > 0) j--;\n }\n\n if (compare(arr[left], t) === 0) swap(arr, left, j);\n else {\n j++;\n swap(arr, j, right);\n }\n\n if (j <= k) left = j + 1;\n if (k <= j) right = j - 1;\n }\n}\n\nfunction swap(arr, i, j) {\n var tmp = arr[i];\n arr[i] = arr[j];\n arr[j] = tmp;\n}\n\nfunction defaultCompare(a, b) {\n return a < b ? -1 : a > b ? 1 : 0;\n}\n\nreturn quickselect;\n\n})));\n","'use strict';\n\nmodule.exports = rbush;\nmodule.exports.default = rbush;\n\nvar quickselect = require('quickselect');\n\nfunction rbush(maxEntries, format) {\n if (!(this instanceof rbush)) return new rbush(maxEntries, format);\n\n // max entries in a node is 9 by default; min node fill is 40% for best performance\n this._maxEntries = Math.max(4, maxEntries || 9);\n this._minEntries = Math.max(2, Math.ceil(this._maxEntries * 0.4));\n\n if (format) {\n this._initFormat(format);\n }\n\n this.clear();\n}\n\nrbush.prototype = {\n\n all: function () {\n return this._all(this.data, []);\n },\n\n search: function (bbox) {\n\n var node = this.data,\n result = [],\n toBBox = this.toBBox;\n\n if (!intersects(bbox, node)) return result;\n\n var nodesToSearch = [],\n i, len, child, childBBox;\n\n while (node) {\n for (i = 0, len = node.children.length; i < len; i++) {\n\n child = node.children[i];\n childBBox = node.leaf ? toBBox(child) : child;\n\n if (intersects(bbox, childBBox)) {\n if (node.leaf) result.push(child);\n else if (contains(bbox, childBBox)) this._all(child, result);\n else nodesToSearch.push(child);\n }\n }\n node = nodesToSearch.pop();\n }\n\n return result;\n },\n\n collides: function (bbox) {\n\n var node = this.data,\n toBBox = this.toBBox;\n\n if (!intersects(bbox, node)) return false;\n\n var nodesToSearch = [],\n i, len, child, childBBox;\n\n while (node) {\n for (i = 0, len = node.children.length; i < len; i++) {\n\n child = node.children[i];\n childBBox = node.leaf ? toBBox(child) : child;\n\n if (intersects(bbox, childBBox)) {\n if (node.leaf || contains(bbox, childBBox)) return true;\n nodesToSearch.push(child);\n }\n }\n node = nodesToSearch.pop();\n }\n\n return false;\n },\n\n load: function (data) {\n if (!(data && data.length)) return this;\n\n if (data.length < this._minEntries) {\n for (var i = 0, len = data.length; i < len; i++) {\n this.insert(data[i]);\n }\n return this;\n }\n\n // recursively build the tree with the given data from scratch using OMT algorithm\n var node = this._build(data.slice(), 0, data.length - 1, 0);\n\n if (!this.data.children.length) {\n // save as is if tree is empty\n this.data = node;\n\n } else if (this.data.height === node.height) {\n // split root if trees have the same height\n this._splitRoot(this.data, node);\n\n } else {\n if (this.data.height < node.height) {\n // swap trees if inserted one is bigger\n var tmpNode = this.data;\n this.data = node;\n node = tmpNode;\n }\n\n // insert the small tree into the large tree at appropriate level\n this._insert(node, this.data.height - node.height - 1, true);\n }\n\n return this;\n },\n\n insert: function (item) {\n if (item) this._insert(item, this.data.height - 1);\n return this;\n },\n\n clear: function () {\n this.data = createNode([]);\n return this;\n },\n\n remove: function (item, equalsFn) {\n if (!item) return this;\n\n var node = this.data,\n bbox = this.toBBox(item),\n path = [],\n indexes = [],\n i, parent, index, goingUp;\n\n // depth-first iterative tree traversal\n while (node || path.length) {\n\n if (!node) { // go up\n node = path.pop();\n parent = path[path.length - 1];\n i = indexes.pop();\n goingUp = true;\n }\n\n if (node.leaf) { // check current node\n index = findItem(item, node.children, equalsFn);\n\n if (index !== -1) {\n // item found, remove the item and condense tree upwards\n node.children.splice(index, 1);\n path.push(node);\n this._condense(path);\n return this;\n }\n }\n\n if (!goingUp && !node.leaf && contains(node, bbox)) { // go down\n path.push(node);\n indexes.push(i);\n i = 0;\n parent = node;\n node = node.children[0];\n\n } else if (parent) { // go right\n i++;\n node = parent.children[i];\n goingUp = false;\n\n } else node = null; // nothing found\n }\n\n return this;\n },\n\n toBBox: function (item) { return item; },\n\n compareMinX: compareNodeMinX,\n compareMinY: compareNodeMinY,\n\n toJSON: function () { return this.data; },\n\n fromJSON: function (data) {\n this.data = data;\n return this;\n },\n\n _all: function (node, result) {\n var nodesToSearch = [];\n while (node) {\n if (node.leaf) result.push.apply(result, node.children);\n else nodesToSearch.push.apply(nodesToSearch, node.children);\n\n node = nodesToSearch.pop();\n }\n return result;\n },\n\n _build: function (items, left, right, height) {\n\n var N = right - left + 1,\n M = this._maxEntries,\n node;\n\n if (N <= M) {\n // reached leaf level; return leaf\n node = createNode(items.slice(left, right + 1));\n calcBBox(node, this.toBBox);\n return node;\n }\n\n if (!height) {\n // target height of the bulk-loaded tree\n height = Math.ceil(Math.log(N) / Math.log(M));\n\n // target number of root entries to maximize storage utilization\n M = Math.ceil(N / Math.pow(M, height - 1));\n }\n\n node = createNode([]);\n node.leaf = false;\n node.height = height;\n\n // split the items into M mostly square tiles\n\n var N2 = Math.ceil(N / M),\n N1 = N2 * Math.ceil(Math.sqrt(M)),\n i, j, right2, right3;\n\n multiSelect(items, left, right, N1, this.compareMinX);\n\n for (i = left; i <= right; i += N1) {\n\n right2 = Math.min(i + N1 - 1, right);\n\n multiSelect(items, i, right2, N2, this.compareMinY);\n\n for (j = i; j <= right2; j += N2) {\n\n right3 = Math.min(j + N2 - 1, right2);\n\n // pack each entry recursively\n node.children.push(this._build(items, j, right3, height - 1));\n }\n }\n\n calcBBox(node, this.toBBox);\n\n return node;\n },\n\n _chooseSubtree: function (bbox, node, level, path) {\n\n var i, len, child, targetNode, area, enlargement, minArea, minEnlargement;\n\n while (true) {\n path.push(node);\n\n if (node.leaf || path.length - 1 === level) break;\n\n minArea = minEnlargement = Infinity;\n\n for (i = 0, len = node.children.length; i < len; i++) {\n child = node.children[i];\n area = bboxArea(child);\n enlargement = enlargedArea(bbox, child) - area;\n\n // choose entry with the least area enlargement\n if (enlargement < minEnlargement) {\n minEnlargement = enlargement;\n minArea = area < minArea ? area : minArea;\n targetNode = child;\n\n } else if (enlargement === minEnlargement) {\n // otherwise choose one with the smallest area\n if (area < minArea) {\n minArea = area;\n targetNode = child;\n }\n }\n }\n\n node = targetNode || node.children[0];\n }\n\n return node;\n },\n\n _insert: function (item, level, isNode) {\n\n var toBBox = this.toBBox,\n bbox = isNode ? item : toBBox(item),\n insertPath = [];\n\n // find the best node for accommodating the item, saving all nodes along the path too\n var node = this._chooseSubtree(bbox, this.data, level, insertPath);\n\n // put the item into the node\n node.children.push(item);\n extend(node, bbox);\n\n // split on node overflow; propagate upwards if necessary\n while (level >= 0) {\n if (insertPath[level].children.length > this._maxEntries) {\n this._split(insertPath, level);\n level--;\n } else break;\n }\n\n // adjust bboxes along the insertion path\n this._adjustParentBBoxes(bbox, insertPath, level);\n },\n\n // split overflowed node into two\n _split: function (insertPath, level) {\n\n var node = insertPath[level],\n M = node.children.length,\n m = this._minEntries;\n\n this._chooseSplitAxis(node, m, M);\n\n var splitIndex = this._chooseSplitIndex(node, m, M);\n\n var newNode = createNode(node.children.splice(splitIndex, node.children.length - splitIndex));\n newNode.height = node.height;\n newNode.leaf = node.leaf;\n\n calcBBox(node, this.toBBox);\n calcBBox(newNode, this.toBBox);\n\n if (level) insertPath[level - 1].children.push(newNode);\n else this._splitRoot(node, newNode);\n },\n\n _splitRoot: function (node, newNode) {\n // split root node\n this.data = createNode([node, newNode]);\n this.data.height = node.height + 1;\n this.data.leaf = false;\n calcBBox(this.data, this.toBBox);\n },\n\n _chooseSplitIndex: function (node, m, M) {\n\n var i, bbox1, bbox2, overlap, area, minOverlap, minArea, index;\n\n minOverlap = minArea = Infinity;\n\n for (i = m; i <= M - m; i++) {\n bbox1 = distBBox(node, 0, i, this.toBBox);\n bbox2 = distBBox(node, i, M, this.toBBox);\n\n overlap = intersectionArea(bbox1, bbox2);\n area = bboxArea(bbox1) + bboxArea(bbox2);\n\n // choose distribution with minimum overlap\n if (overlap < minOverlap) {\n minOverlap = overlap;\n index = i;\n\n minArea = area < minArea ? area : minArea;\n\n } else if (overlap === minOverlap) {\n // otherwise choose distribution with minimum area\n if (area < minArea) {\n minArea = area;\n index = i;\n }\n }\n }\n\n return index;\n },\n\n // sorts node children by the best axis for split\n _chooseSplitAxis: function (node, m, M) {\n\n var compareMinX = node.leaf ? this.compareMinX : compareNodeMinX,\n compareMinY = node.leaf ? this.compareMinY : compareNodeMinY,\n xMargin = this._allDistMargin(node, m, M, compareMinX),\n yMargin = this._allDistMargin(node, m, M, compareMinY);\n\n // if total distributions margin value is minimal for x, sort by minX,\n // otherwise it's already sorted by minY\n if (xMargin < yMargin) node.children.sort(compareMinX);\n },\n\n // total margin of all possible split distributions where each node is at least m full\n _allDistMargin: function (node, m, M, compare) {\n\n node.children.sort(compare);\n\n var toBBox = this.toBBox,\n leftBBox = distBBox(node, 0, m, toBBox),\n rightBBox = distBBox(node, M - m, M, toBBox),\n margin = bboxMargin(leftBBox) + bboxMargin(rightBBox),\n i, child;\n\n for (i = m; i < M - m; i++) {\n child = node.children[i];\n extend(leftBBox, node.leaf ? toBBox(child) : child);\n margin += bboxMargin(leftBBox);\n }\n\n for (i = M - m - 1; i >= m; i--) {\n child = node.children[i];\n extend(rightBBox, node.leaf ? toBBox(child) : child);\n margin += bboxMargin(rightBBox);\n }\n\n return margin;\n },\n\n _adjustParentBBoxes: function (bbox, path, level) {\n // adjust bboxes along the given tree path\n for (var i = level; i >= 0; i--) {\n extend(path[i], bbox);\n }\n },\n\n _condense: function (path) {\n // go through the path, removing empty nodes and updating bboxes\n for (var i = path.length - 1, siblings; i >= 0; i--) {\n if (path[i].children.length === 0) {\n if (i > 0) {\n siblings = path[i - 1].children;\n siblings.splice(siblings.indexOf(path[i]), 1);\n\n } else this.clear();\n\n } else calcBBox(path[i], this.toBBox);\n }\n },\n\n _initFormat: function (format) {\n // data format (minX, minY, maxX, maxY accessors)\n\n // uses eval-type function compilation instead of just accepting a toBBox function\n // because the algorithms are very sensitive to sorting functions performance,\n // so they should be dead simple and without inner calls\n\n var compareArr = ['return a', ' - b', ';'];\n\n this.compareMinX = new Function('a', 'b', compareArr.join(format[0]));\n this.compareMinY = new Function('a', 'b', compareArr.join(format[1]));\n\n this.toBBox = new Function('a',\n 'return {minX: a' + format[0] +\n ', minY: a' + format[1] +\n ', maxX: a' + format[2] +\n ', maxY: a' + format[3] + '};');\n }\n};\n\nfunction findItem(item, items, equalsFn) {\n if (!equalsFn) return items.indexOf(item);\n\n for (var i = 0; i < items.length; i++) {\n if (equalsFn(item, items[i])) return i;\n }\n return -1;\n}\n\n// calculate node's bbox from bboxes of its children\nfunction calcBBox(node, toBBox) {\n distBBox(node, 0, node.children.length, toBBox, node);\n}\n\n// min bounding rectangle of node children from k to p-1\nfunction distBBox(node, k, p, toBBox, destNode) {\n if (!destNode) destNode = createNode(null);\n destNode.minX = Infinity;\n destNode.minY = Infinity;\n destNode.maxX = -Infinity;\n destNode.maxY = -Infinity;\n\n for (var i = k, child; i < p; i++) {\n child = node.children[i];\n extend(destNode, node.leaf ? toBBox(child) : child);\n }\n\n return destNode;\n}\n\nfunction extend(a, b) {\n a.minX = Math.min(a.minX, b.minX);\n a.minY = Math.min(a.minY, b.minY);\n a.maxX = Math.max(a.maxX, b.maxX);\n a.maxY = Math.max(a.maxY, b.maxY);\n return a;\n}\n\nfunction compareNodeMinX(a, b) { return a.minX - b.minX; }\nfunction compareNodeMinY(a, b) { return a.minY - b.minY; }\n\nfunction bboxArea(a) { return (a.maxX - a.minX) * (a.maxY - a.minY); }\nfunction bboxMargin(a) { return (a.maxX - a.minX) + (a.maxY - a.minY); }\n\nfunction enlargedArea(a, b) {\n return (Math.max(b.maxX, a.maxX) - Math.min(b.minX, a.minX)) *\n (Math.max(b.maxY, a.maxY) - Math.min(b.minY, a.minY));\n}\n\nfunction intersectionArea(a, b) {\n var minX = Math.max(a.minX, b.minX),\n minY = Math.max(a.minY, b.minY),\n maxX = Math.min(a.maxX, b.maxX),\n maxY = Math.min(a.maxY, b.maxY);\n\n return Math.max(0, maxX - minX) *\n Math.max(0, maxY - minY);\n}\n\nfunction contains(a, b) {\n return a.minX <= b.minX &&\n a.minY <= b.minY &&\n b.maxX <= a.maxX &&\n b.maxY <= a.maxY;\n}\n\nfunction intersects(a, b) {\n return b.minX <= a.maxX &&\n b.minY <= a.maxY &&\n b.maxX >= a.minX &&\n b.maxY >= a.minY;\n}\n\nfunction createNode(children) {\n return {\n children: children,\n height: 1,\n leaf: true,\n minX: Infinity,\n minY: Infinity,\n maxX: -Infinity,\n maxY: -Infinity\n };\n}\n\n// sort an array so that items come in groups of n unsorted items, with groups sorted between each other;\n// combines selection algorithm with binary divide & conquer approach\n\nfunction multiSelect(arr, left, right, n, compare) {\n var stack = [left, right],\n mid;\n\n while (stack.length) {\n right = stack.pop();\n left = stack.pop();\n\n if (right - left <= n) continue;\n\n mid = left + Math.ceil((right - left) / n / 2) * n;\n quickselect(arr, mid, left, right, compare);\n\n stack.push(left, mid, mid, right);\n }\n}\n","'use strict';\n\nvar GetIntrinsic = require('get-intrinsic');\n\nvar callBind = require('./');\n\nvar $indexOf = callBind(GetIntrinsic('String.prototype.indexOf'));\n\nmodule.exports = function callBoundIntrinsic(name, allowMissing) {\n\tvar intrinsic = GetIntrinsic(name, !!allowMissing);\n\tif (typeof intrinsic === 'function' && $indexOf(name, '.prototype.') > -1) {\n\t\treturn callBind(intrinsic);\n\t}\n\treturn intrinsic;\n};\n","'use strict';\n\nvar bind = require('function-bind');\nvar GetIntrinsic = require('get-intrinsic');\n\nvar $apply = GetIntrinsic('%Function.prototype.apply%');\nvar $call = GetIntrinsic('%Function.prototype.call%');\nvar $reflectApply = GetIntrinsic('%Reflect.apply%', true) || bind.call($call, $apply);\n\nvar $gOPD = GetIntrinsic('%Object.getOwnPropertyDescriptor%', true);\nvar $defineProperty = GetIntrinsic('%Object.defineProperty%', true);\nvar $max = GetIntrinsic('%Math.max%');\n\nif ($defineProperty) {\n\ttry {\n\t\t$defineProperty({}, 'a', { value: 1 });\n\t} catch (e) {\n\t\t// IE 8 has a broken defineProperty\n\t\t$defineProperty = null;\n\t}\n}\n\nmodule.exports = function callBind(originalFunction) {\n\tvar func = $reflectApply(bind, $call, arguments);\n\tif ($gOPD && $defineProperty) {\n\t\tvar desc = $gOPD(func, 'length');\n\t\tif (desc.configurable) {\n\t\t\t// original length, plus the receiver, minus any additional arguments (after the receiver)\n\t\t\t$defineProperty(\n\t\t\t\tfunc,\n\t\t\t\t'length',\n\t\t\t\t{ value: 1 + $max(0, originalFunction.length - (arguments.length - 1)) }\n\t\t\t);\n\t\t}\n\t}\n\treturn func;\n};\n\nvar applyBind = function applyBind() {\n\treturn $reflectApply(bind, $apply, arguments);\n};\n\nif ($defineProperty) {\n\t$defineProperty(module.exports, 'apply', { value: applyBind });\n} else {\n\tmodule.exports.apply = applyBind;\n}\n","'use strict';\n\nvar RBush = require('rbush');\nvar Queue = require('tinyqueue');\nvar pointInPolygon = require('point-in-polygon');\nvar orient = require('robust-predicates/umd/orient2d.min.js').orient2d;\n\n// Fix for require issue in webpack https://github.com/mapbox/concaveman/issues/18\nif (Queue.default) {\n Queue = Queue.default;\n}\n\nmodule.exports = concaveman;\nmodule.exports.default = concaveman;\n\nfunction concaveman(points, concavity, lengthThreshold) {\n // a relative measure of concavity; higher value means simpler hull\n concavity = Math.max(0, concavity === undefined ? 2 : concavity);\n\n // when a segment goes below this length threshold, it won't be drilled down further\n lengthThreshold = lengthThreshold || 0;\n\n // start with a convex hull of the points\n var hull = fastConvexHull(points);\n\n // index the points with an R-tree\n var tree = new RBush(16);\n tree.toBBox = function (a) {\n return {\n minX: a[0],\n minY: a[1],\n maxX: a[0],\n maxY: a[1]\n };\n };\n tree.compareMinX = function (a, b) { return a[0] - b[0]; };\n tree.compareMinY = function (a, b) { return a[1] - b[1]; };\n\n tree.load(points);\n\n // turn the convex hull into a linked list and populate the initial edge queue with the nodes\n var queue = [];\n for (var i = 0, last; i < hull.length; i++) {\n var p = hull[i];\n tree.remove(p);\n last = insertNode(p, last);\n queue.push(last);\n }\n\n // index the segments with an R-tree (for intersection checks)\n var segTree = new RBush(16);\n for (i = 0; i < queue.length; i++) segTree.insert(updateBBox(queue[i]));\n\n var sqConcavity = concavity * concavity;\n var sqLenThreshold = lengthThreshold * lengthThreshold;\n\n // process edges one by one\n while (queue.length) {\n var node = queue.shift();\n var a = node.p;\n var b = node.next.p;\n\n // skip the edge if it's already short enough\n var sqLen = getSqDist(a, b);\n if (sqLen < sqLenThreshold) continue;\n\n var maxSqLen = sqLen / sqConcavity;\n\n // find the best connection point for the current edge to flex inward to\n p = findCandidate(tree, node.prev.p, a, b, node.next.next.p, maxSqLen, segTree);\n\n // if we found a connection and it satisfies our concavity measure\n if (p && Math.min(getSqDist(p, a), getSqDist(p, b)) <= maxSqLen) {\n // connect the edge endpoints through this point and add 2 new edges to the queue\n queue.push(node);\n queue.push(insertNode(p, node));\n\n // update point and segment indexes\n tree.remove(p);\n segTree.remove(node);\n segTree.insert(updateBBox(node));\n segTree.insert(updateBBox(node.next));\n }\n }\n\n // convert the resulting hull linked list to an array of points\n node = last;\n var concave = [];\n do {\n concave.push(node.p);\n node = node.next;\n } while (node !== last);\n\n concave.push(node.p);\n\n return concave;\n}\n\nfunction findCandidate(tree, a, b, c, d, maxDist, segTree) {\n var queue = new Queue([], compareDist);\n var node = tree.data;\n\n // search through the point R-tree with a depth-first search using a priority queue\n // in the order of distance to the edge (b, c)\n while (node) {\n for (var i = 0; i < node.children.length; i++) {\n var child = node.children[i];\n\n var dist = node.leaf ? sqSegDist(child, b, c) : sqSegBoxDist(b, c, child);\n if (dist > maxDist) continue; // skip the node if it's farther than we ever need\n\n queue.push({\n node: child,\n dist: dist\n });\n }\n\n while (queue.length && !queue.peek().node.children) {\n var item = queue.pop();\n var p = item.node;\n\n // skip all points that are as close to adjacent edges (a,b) and (c,d),\n // and points that would introduce self-intersections when connected\n var d0 = sqSegDist(p, a, b);\n var d1 = sqSegDist(p, c, d);\n if (item.dist < d0 && item.dist < d1 &&\n noIntersections(b, p, segTree) &&\n noIntersections(c, p, segTree)) return p;\n }\n\n node = queue.pop();\n if (node) node = node.node;\n }\n\n return null;\n}\n\nfunction compareDist(a, b) {\n return a.dist - b.dist;\n}\n\n// square distance from a segment bounding box to the given one\nfunction sqSegBoxDist(a, b, bbox) {\n if (inside(a, bbox) || inside(b, bbox)) return 0;\n var d1 = sqSegSegDist(a[0], a[1], b[0], b[1], bbox.minX, bbox.minY, bbox.maxX, bbox.minY);\n if (d1 === 0) return 0;\n var d2 = sqSegSegDist(a[0], a[1], b[0], b[1], bbox.minX, bbox.minY, bbox.minX, bbox.maxY);\n if (d2 === 0) return 0;\n var d3 = sqSegSegDist(a[0], a[1], b[0], b[1], bbox.maxX, bbox.minY, bbox.maxX, bbox.maxY);\n if (d3 === 0) return 0;\n var d4 = sqSegSegDist(a[0], a[1], b[0], b[1], bbox.minX, bbox.maxY, bbox.maxX, bbox.maxY);\n if (d4 === 0) return 0;\n return Math.min(d1, d2, d3, d4);\n}\n\nfunction inside(a, bbox) {\n return a[0] >= bbox.minX &&\n a[0] <= bbox.maxX &&\n a[1] >= bbox.minY &&\n a[1] <= bbox.maxY;\n}\n\n// check if the edge (a,b) doesn't intersect any other edges\nfunction noIntersections(a, b, segTree) {\n var minX = Math.min(a[0], b[0]);\n var minY = Math.min(a[1], b[1]);\n var maxX = Math.max(a[0], b[0]);\n var maxY = Math.max(a[1], b[1]);\n\n var edges = segTree.search({minX: minX, minY: minY, maxX: maxX, maxY: maxY});\n for (var i = 0; i < edges.length; i++) {\n if (intersects(edges[i].p, edges[i].next.p, a, b)) return false;\n }\n return true;\n}\n\nfunction cross(p1, p2, p3) {\n return orient(p1[0], p1[1], p2[0], p2[1], p3[0], p3[1]);\n}\n\n// check if the edges (p1,q1) and (p2,q2) intersect\nfunction intersects(p1, q1, p2, q2) {\n return p1 !== q2 && q1 !== p2 &&\n cross(p1, q1, p2) > 0 !== cross(p1, q1, q2) > 0 &&\n cross(p2, q2, p1) > 0 !== cross(p2, q2, q1) > 0;\n}\n\n// update the bounding box of a node's edge\nfunction updateBBox(node) {\n var p1 = node.p;\n var p2 = node.next.p;\n node.minX = Math.min(p1[0], p2[0]);\n node.minY = Math.min(p1[1], p2[1]);\n node.maxX = Math.max(p1[0], p2[0]);\n node.maxY = Math.max(p1[1], p2[1]);\n return node;\n}\n\n// speed up convex hull by filtering out points inside quadrilateral formed by 4 extreme points\nfunction fastConvexHull(points) {\n var left = points[0];\n var top = points[0];\n var right = points[0];\n var bottom = points[0];\n\n // find the leftmost, rightmost, topmost and bottommost points\n for (var i = 0; i < points.length; i++) {\n var p = points[i];\n if (p[0] < left[0]) left = p;\n if (p[0] > right[0]) right = p;\n if (p[1] < top[1]) top = p;\n if (p[1] > bottom[1]) bottom = p;\n }\n\n // filter out points that are inside the resulting quadrilateral\n var cull = [left, top, right, bottom];\n var filtered = cull.slice();\n for (i = 0; i < points.length; i++) {\n if (!pointInPolygon(points[i], cull)) filtered.push(points[i]);\n }\n\n // get convex hull around the filtered points\n return convexHull(filtered);\n}\n\n// create a new node in a doubly linked list\nfunction insertNode(p, prev) {\n var node = {\n p: p,\n prev: null,\n next: null,\n minX: 0,\n minY: 0,\n maxX: 0,\n maxY: 0\n };\n\n if (!prev) {\n node.prev = node;\n node.next = node;\n\n } else {\n node.next = prev.next;\n node.prev = prev;\n prev.next.prev = node;\n prev.next = node;\n }\n return node;\n}\n\n// square distance between 2 points\nfunction getSqDist(p1, p2) {\n\n var dx = p1[0] - p2[0],\n dy = p1[1] - p2[1];\n\n return dx * dx + dy * dy;\n}\n\n// square distance from a point to a segment\nfunction sqSegDist(p, p1, p2) {\n\n var x = p1[0],\n y = p1[1],\n dx = p2[0] - x,\n dy = p2[1] - y;\n\n if (dx !== 0 || dy !== 0) {\n\n var t = ((p[0] - x) * dx + (p[1] - y) * dy) / (dx * dx + dy * dy);\n\n if (t > 1) {\n x = p2[0];\n y = p2[1];\n\n } else if (t > 0) {\n x += dx * t;\n y += dy * t;\n }\n }\n\n dx = p[0] - x;\n dy = p[1] - y;\n\n return dx * dx + dy * dy;\n}\n\n// segment to segment distance, ported from http://geomalgorithms.com/a07-_distance.html by Dan Sunday\nfunction sqSegSegDist(x0, y0, x1, y1, x2, y2, x3, y3) {\n var ux = x1 - x0;\n var uy = y1 - y0;\n var vx = x3 - x2;\n var vy = y3 - y2;\n var wx = x0 - x2;\n var wy = y0 - y2;\n var a = ux * ux + uy * uy;\n var b = ux * vx + uy * vy;\n var c = vx * vx + vy * vy;\n var d = ux * wx + uy * wy;\n var e = vx * wx + vy * wy;\n var D = a * c - b * b;\n\n var sc, sN, tc, tN;\n var sD = D;\n var tD = D;\n\n if (D === 0) {\n sN = 0;\n sD = 1;\n tN = e;\n tD = c;\n } else {\n sN = b * e - c * d;\n tN = a * e - b * d;\n if (sN < 0) {\n sN = 0;\n tN = e;\n tD = c;\n } else if (sN > sD) {\n sN = sD;\n tN = e + b;\n tD = c;\n }\n }\n\n if (tN < 0.0) {\n tN = 0.0;\n if (-d < 0.0) sN = 0.0;\n else if (-d > a) sN = sD;\n else {\n sN = -d;\n sD = a;\n }\n } else if (tN > tD) {\n tN = tD;\n if ((-d + b) < 0.0) sN = 0;\n else if (-d + b > a) sN = sD;\n else {\n sN = -d + b;\n sD = a;\n }\n }\n\n sc = sN === 0 ? 0 : sN / sD;\n tc = tN === 0 ? 0 : tN / tD;\n\n var cx = (1 - sc) * x0 + sc * x1;\n var cy = (1 - sc) * y0 + sc * y1;\n var cx2 = (1 - tc) * x2 + tc * x3;\n var cy2 = (1 - tc) * y2 + tc * y3;\n var dx = cx2 - cx;\n var dy = cy2 - cy;\n\n return dx * dx + dy * dy;\n}\n\nfunction compareByX(a, b) {\n return a[0] === b[0] ? a[1] - b[1] : a[0] - b[0];\n}\n\nfunction convexHull(points) {\n points.sort(compareByX);\n\n var lower = [];\n for (var i = 0; i < points.length; i++) {\n while (lower.length >= 2 && cross(lower[lower.length - 2], lower[lower.length - 1], points[i]) <= 0) {\n lower.pop();\n }\n lower.push(points[i]);\n }\n\n var upper = [];\n for (var ii = points.length - 1; ii >= 0; ii--) {\n while (upper.length >= 2 && cross(upper[upper.length - 2], upper[upper.length - 1], points[ii]) <= 0) {\n upper.pop();\n }\n upper.push(points[ii]);\n }\n\n upper.pop();\n lower.pop();\n return lower.concat(upper);\n}\n","var objectKeys = require('object-keys');\nvar isArguments = require('is-arguments');\nvar is = require('object-is');\nvar isRegex = require('is-regex');\nvar flags = require('regexp.prototype.flags');\nvar isDate = require('is-date-object');\n\nvar getTime = Date.prototype.getTime;\n\nfunction deepEqual(actual, expected, options) {\n var opts = options || {};\n\n // 7.1. All identical values are equivalent, as determined by ===.\n if (opts.strict ? is(actual, expected) : actual === expected) {\n return true;\n }\n\n // 7.3. Other pairs that do not both pass typeof value == 'object', equivalence is determined by ==.\n if (!actual || !expected || (typeof actual !== 'object' && typeof expected !== 'object')) {\n return opts.strict ? is(actual, expected) : actual == expected;\n }\n\n /*\n * 7.4. For all other Object pairs, including Array objects, equivalence is\n * determined by having the same number of owned properties (as verified\n * with Object.prototype.hasOwnProperty.call), the same set of keys\n * (although not necessarily the same order), equivalent values for every\n * corresponding key, and an identical 'prototype' property. Note: this\n * accounts for both named and indexed properties on Arrays.\n */\n // eslint-disable-next-line no-use-before-define\n return objEquiv(actual, expected, opts);\n}\n\nfunction isUndefinedOrNull(value) {\n return value === null || value === undefined;\n}\n\nfunction isBuffer(x) {\n if (!x || typeof x !== 'object' || typeof x.length !== 'number') {\n return false;\n }\n if (typeof x.copy !== 'function' || typeof x.slice !== 'function') {\n return false;\n }\n if (x.length > 0 && typeof x[0] !== 'number') {\n return false;\n }\n return true;\n}\n\nfunction objEquiv(a, b, opts) {\n /* eslint max-statements: [2, 50] */\n var i, key;\n if (typeof a !== typeof b) { return false; }\n if (isUndefinedOrNull(a) || isUndefinedOrNull(b)) { return false; }\n\n // an identical 'prototype' property.\n if (a.prototype !== b.prototype) { return false; }\n\n if (isArguments(a) !== isArguments(b)) { return false; }\n\n var aIsRegex = isRegex(a);\n var bIsRegex = isRegex(b);\n if (aIsRegex !== bIsRegex) { return false; }\n if (aIsRegex || bIsRegex) {\n return a.source === b.source && flags(a) === flags(b);\n }\n\n if (isDate(a) && isDate(b)) {\n return getTime.call(a) === getTime.call(b);\n }\n\n var aIsBuffer = isBuffer(a);\n var bIsBuffer = isBuffer(b);\n if (aIsBuffer !== bIsBuffer) { return false; }\n if (aIsBuffer || bIsBuffer) { // && would work too, because both are true or both false here\n if (a.length !== b.length) { return false; }\n for (i = 0; i < a.length; i++) {\n if (a[i] !== b[i]) { return false; }\n }\n return true;\n }\n\n if (typeof a !== typeof b) { return false; }\n\n try {\n var ka = objectKeys(a);\n var kb = objectKeys(b);\n } catch (e) { // happens when one is a string literal and the other isn't\n return false;\n }\n // having the same number of owned properties (keys incorporates hasOwnProperty)\n if (ka.length !== kb.length) { return false; }\n\n // the same set of keys (although not necessarily the same order),\n ka.sort();\n kb.sort();\n // ~~~cheap key test\n for (i = ka.length - 1; i >= 0; i--) {\n if (ka[i] != kb[i]) { return false; }\n }\n // equivalent values for every corresponding key, and ~~~possibly expensive deep test\n for (i = ka.length - 1; i >= 0; i--) {\n key = ka[i];\n if (!deepEqual(a[key], b[key], opts)) { return false; }\n }\n\n return true;\n}\n\nmodule.exports = deepEqual;\n","'use strict';\n\nvar keys = require('object-keys');\nvar hasSymbols = typeof Symbol === 'function' && typeof Symbol('foo') === 'symbol';\n\nvar toStr = Object.prototype.toString;\nvar concat = Array.prototype.concat;\nvar origDefineProperty = Object.defineProperty;\n\nvar isFunction = function (fn) {\n\treturn typeof fn === 'function' && toStr.call(fn) === '[object Function]';\n};\n\nvar arePropertyDescriptorsSupported = function () {\n\tvar obj = {};\n\ttry {\n\t\torigDefineProperty(obj, 'x', { enumerable: false, value: obj });\n\t\t// eslint-disable-next-line no-unused-vars, no-restricted-syntax\n\t\tfor (var _ in obj) { // jscs:ignore disallowUnusedVariables\n\t\t\treturn false;\n\t\t}\n\t\treturn obj.x === obj;\n\t} catch (e) { /* this is IE 8. */\n\t\treturn false;\n\t}\n};\nvar supportsDescriptors = origDefineProperty && arePropertyDescriptorsSupported();\n\nvar defineProperty = function (object, name, value, predicate) {\n\tif (name in object && (!isFunction(predicate) || !predicate())) {\n\t\treturn;\n\t}\n\tif (supportsDescriptors) {\n\t\torigDefineProperty(object, name, {\n\t\t\tconfigurable: true,\n\t\t\tenumerable: false,\n\t\t\tvalue: value,\n\t\t\twritable: true\n\t\t});\n\t} else {\n\t\tobject[name] = value;\n\t}\n};\n\nvar defineProperties = function (object, map) {\n\tvar predicates = arguments.length > 2 ? arguments[2] : {};\n\tvar props = keys(map);\n\tif (hasSymbols) {\n\t\tprops = concat.call(props, Object.getOwnPropertySymbols(map));\n\t}\n\tfor (var i = 0; i < props.length; i += 1) {\n\t\tdefineProperty(object, props[i], map[props[i]], predicates[props[i]]);\n\t}\n};\n\ndefineProperties.supportsDescriptors = !!supportsDescriptors;\n\nmodule.exports = defineProperties;\n","/**\r\n * DBSCAN - Density based clustering\r\n *\r\n * @author Lukasz Krawczyk \r\n * @copyright MIT\r\n */\r\n\r\n/**\r\n * DBSCAN class construcotr\r\n * @constructor\r\n *\r\n * @param {Array} dataset\r\n * @param {number} epsilon\r\n * @param {number} minPts\r\n * @param {function} distanceFunction\r\n * @returns {DBSCAN}\r\n */\r\nfunction DBSCAN(dataset, epsilon, minPts, distanceFunction) {\r\n /** @type {Array} */\r\n this.dataset = [];\r\n /** @type {number} */\r\n this.epsilon = 1;\r\n /** @type {number} */\r\n this.minPts = 2;\r\n /** @type {function} */\r\n this.distance = this._euclideanDistance;\r\n /** @type {Array} */\r\n this.clusters = [];\r\n /** @type {Array} */\r\n this.noise = [];\r\n\r\n // temporary variables used during computation\r\n\r\n /** @type {Array} */\r\n this._visited = [];\r\n /** @type {Array} */\r\n this._assigned = [];\r\n /** @type {number} */\r\n this._datasetLength = 0;\r\n\r\n this._init(dataset, epsilon, minPts, distanceFunction);\r\n};\r\n\r\n/******************************************************************************/\r\n// public functions\r\n\r\n/**\r\n * Start clustering\r\n *\r\n * @param {Array} dataset\r\n * @param {number} epsilon\r\n * @param {number} minPts\r\n * @param {function} distanceFunction\r\n * @returns {undefined}\r\n * @access public\r\n */\r\nDBSCAN.prototype.run = function(dataset, epsilon, minPts, distanceFunction) {\r\n this._init(dataset, epsilon, minPts, distanceFunction);\r\n\r\n for (var pointId = 0; pointId < this._datasetLength; pointId++) {\r\n // if point is not visited, check if it forms a cluster\r\n if (this._visited[pointId] !== 1) {\r\n this._visited[pointId] = 1;\r\n\r\n // if closest neighborhood is too small to form a cluster, mark as noise\r\n var neighbors = this._regionQuery(pointId);\r\n\r\n if (neighbors.length < this.minPts) {\r\n this.noise.push(pointId);\r\n } else {\r\n // create new cluster and add point\r\n var clusterId = this.clusters.length;\r\n this.clusters.push([]);\r\n this._addToCluster(pointId, clusterId);\r\n\r\n this._expandCluster(clusterId, neighbors);\r\n }\r\n }\r\n }\r\n\r\n return this.clusters;\r\n};\r\n\r\n/******************************************************************************/\r\n// protected functions\r\n\r\n/**\r\n * Set object properties\r\n *\r\n * @param {Array} dataset\r\n * @param {number} epsilon\r\n * @param {number} minPts\r\n * @param {function} distance\r\n * @returns {undefined}\r\n * @access protected\r\n */\r\nDBSCAN.prototype._init = function(dataset, epsilon, minPts, distance) {\r\n\r\n if (dataset) {\r\n\r\n if (!(dataset instanceof Array)) {\r\n throw Error('Dataset must be of type array, ' +\r\n typeof dataset + ' given');\r\n }\r\n\r\n this.dataset = dataset;\r\n this.clusters = [];\r\n this.noise = [];\r\n\r\n this._datasetLength = dataset.length;\r\n this._visited = new Array(this._datasetLength);\r\n this._assigned = new Array(this._datasetLength);\r\n }\r\n\r\n if (epsilon) {\r\n this.epsilon = epsilon;\r\n }\r\n\r\n if (minPts) {\r\n this.minPts = minPts;\r\n }\r\n\r\n if (distance) {\r\n this.distance = distance;\r\n }\r\n};\r\n\r\n/**\r\n * Expand cluster to closest points of given neighborhood\r\n *\r\n * @param {number} clusterId\r\n * @param {Array} neighbors\r\n * @returns {undefined}\r\n * @access protected\r\n */\r\nDBSCAN.prototype._expandCluster = function(clusterId, neighbors) {\r\n\r\n /**\r\n * It's very important to calculate length of neighbors array each time,\r\n * as the number of elements changes over time\r\n */\r\n for (var i = 0; i < neighbors.length; i++) {\r\n var pointId2 = neighbors[i];\r\n\r\n if (this._visited[pointId2] !== 1) {\r\n this._visited[pointId2] = 1;\r\n var neighbors2 = this._regionQuery(pointId2);\r\n\r\n if (neighbors2.length >= this.minPts) {\r\n neighbors = this._mergeArrays(neighbors, neighbors2);\r\n }\r\n }\r\n\r\n // add to cluster\r\n if (this._assigned[pointId2] !== 1) {\r\n this._addToCluster(pointId2, clusterId);\r\n }\r\n }\r\n};\r\n\r\n/**\r\n * Add new point to cluster\r\n *\r\n * @param {number} pointId\r\n * @param {number} clusterId\r\n */\r\nDBSCAN.prototype._addToCluster = function(pointId, clusterId) {\r\n this.clusters[clusterId].push(pointId);\r\n this._assigned[pointId] = 1;\r\n};\r\n\r\n/**\r\n * Find all neighbors around given point\r\n *\r\n * @param {number} pointId,\r\n * @param {number} epsilon\r\n * @returns {Array}\r\n * @access protected\r\n */\r\nDBSCAN.prototype._regionQuery = function(pointId) {\r\n var neighbors = [];\r\n\r\n for (var id = 0; id < this._datasetLength; id++) {\r\n var dist = this.distance(this.dataset[pointId], this.dataset[id]);\r\n if (dist < this.epsilon) {\r\n neighbors.push(id);\r\n }\r\n }\r\n\r\n return neighbors;\r\n};\r\n\r\n/******************************************************************************/\r\n// helpers\r\n\r\n/**\r\n * @param {Array} a\r\n * @param {Array} b\r\n * @returns {Array}\r\n * @access protected\r\n */\r\nDBSCAN.prototype._mergeArrays = function(a, b) {\r\n var len = b.length;\r\n\r\n for (var i = 0; i < len; i++) {\r\n var P = b[i];\r\n if (a.indexOf(P) < 0) {\r\n a.push(P);\r\n }\r\n }\r\n\r\n return a;\r\n};\r\n\r\n/**\r\n * Calculate euclidean distance in multidimensional space\r\n *\r\n * @param {Array} p\r\n * @param {Array} q\r\n * @returns {number}\r\n * @access protected\r\n */\r\nDBSCAN.prototype._euclideanDistance = function(p, q) {\r\n var sum = 0;\r\n var i = Math.min(p.length, q.length);\r\n\r\n while (i--) {\r\n sum += (p[i] - q[i]) * (p[i] - q[i]);\r\n }\r\n\r\n return Math.sqrt(sum);\r\n};\r\n\r\nif (typeof module !== 'undefined' && module.exports) {\r\n module.exports = DBSCAN;\r\n}\r\n","/**\r\n * KMEANS clustering\r\n *\r\n * @author Lukasz Krawczyk \r\n * @copyright MIT\r\n */\r\n\r\n/**\r\n * KMEANS class constructor\r\n * @constructor\r\n *\r\n * @param {Array} dataset\r\n * @param {number} k - number of clusters\r\n * @param {function} distance - distance function\r\n * @returns {KMEANS}\r\n */\r\n function KMEANS(dataset, k, distance) {\r\n this.k = 3; // number of clusters\r\n this.dataset = []; // set of feature vectors\r\n this.assignments = []; // set of associated clusters for each feature vector\r\n this.centroids = []; // vectors for our clusters\r\n\r\n this.init(dataset, k, distance);\r\n}\r\n\r\n/**\r\n * @returns {undefined}\r\n */\r\nKMEANS.prototype.init = function(dataset, k, distance) {\r\n this.assignments = [];\r\n this.centroids = [];\r\n\r\n if (typeof dataset !== 'undefined') {\r\n this.dataset = dataset;\r\n }\r\n\r\n if (typeof k !== 'undefined') {\r\n this.k = k;\r\n }\r\n\r\n if (typeof distance !== 'undefined') {\r\n this.distance = distance;\r\n }\r\n};\r\n\r\n/**\r\n * @returns {undefined}\r\n */\r\nKMEANS.prototype.run = function(dataset, k) {\r\n this.init(dataset, k);\r\n\r\n var len = this.dataset.length;\r\n\r\n // initialize centroids\r\n for (var i = 0; i < this.k; i++) {\r\n this.centroids[i] = this.randomCentroid();\r\n\t}\r\n\r\n var change = true;\r\n while(change) {\r\n\r\n // assign feature vectors to clusters\r\n change = this.assign();\r\n\r\n // adjust location of centroids\r\n for (var centroidId = 0; centroidId < this.k; centroidId++) {\r\n var mean = new Array(maxDim);\r\n var count = 0;\r\n\r\n // init mean vector\r\n for (var dim = 0; dim < maxDim; dim++) {\r\n mean[dim] = 0;\r\n }\r\n\r\n for (var j = 0; j < len; j++) {\r\n var maxDim = this.dataset[j].length;\r\n\r\n // if current cluster id is assigned to point\r\n if (centroidId === this.assignments[j]) {\r\n for (var dim = 0; dim < maxDim; dim++) {\r\n mean[dim] += this.dataset[j][dim];\r\n }\r\n count++;\r\n }\r\n }\r\n\r\n if (count > 0) {\r\n // if cluster contain points, adjust centroid position\r\n for (var dim = 0; dim < maxDim; dim++) {\r\n mean[dim] /= count;\r\n }\r\n this.centroids[centroidId] = mean;\r\n } else {\r\n // if cluster is empty, generate new random centroid\r\n this.centroids[centroidId] = this.randomCentroid();\r\n change = true;\r\n }\r\n }\r\n }\r\n\r\n return this.getClusters();\r\n};\r\n\r\n/**\r\n * Generate random centroid\r\n *\r\n * @returns {Array}\r\n */\r\nKMEANS.prototype.randomCentroid = function() {\r\n var maxId = this.dataset.length -1;\r\n var centroid;\r\n var id;\r\n\r\n do {\r\n id = Math.round(Math.random() * maxId);\r\n centroid = this.dataset[id];\r\n } while (this.centroids.indexOf(centroid) >= 0);\r\n\r\n return centroid;\r\n}\r\n\r\n/**\r\n * Assign points to clusters\r\n *\r\n * @returns {boolean}\r\n */\r\nKMEANS.prototype.assign = function() {\r\n var change = false;\r\n var len = this.dataset.length;\r\n var closestCentroid;\r\n\r\n for (var i = 0; i < len; i++) {\r\n closestCentroid = this.argmin(this.dataset[i], this.centroids, this.distance);\r\n\r\n if (closestCentroid != this.assignments[i]) {\r\n this.assignments[i] = closestCentroid;\r\n change = true;\r\n }\r\n }\r\n\r\n return change;\r\n}\r\n\r\n/**\r\n * Extract information about clusters\r\n *\r\n * @returns {undefined}\r\n */\r\nKMEANS.prototype.getClusters = function() {\r\n var clusters = new Array(this.k);\r\n var centroidId;\r\n\r\n for (var pointId = 0; pointId < this.assignments.length; pointId++) {\r\n centroidId = this.assignments[pointId];\r\n\r\n // init empty cluster\r\n if (typeof clusters[centroidId] === 'undefined') {\r\n clusters[centroidId] = [];\r\n }\r\n\r\n clusters[centroidId].push(pointId);\r\n }\r\n\r\n return clusters;\r\n};\r\n\r\n// utils\r\n\r\n/**\r\n * @params {Array} point\r\n * @params {Array.} set\r\n * @params {Function} f\r\n * @returns {number}\r\n */\r\nKMEANS.prototype.argmin = function(point, set, f) {\r\n var min = Number.MAX_VALUE;\r\n var arg = 0;\r\n var len = set.length;\r\n var d;\r\n\r\n for (var i = 0; i < len; i++) {\r\n d = f(point, set[i]);\r\n if (d < min) {\r\n min = d;\r\n arg = i;\r\n }\r\n }\r\n\r\n return arg;\r\n};\r\n\r\n/**\r\n * Euclidean distance\r\n *\r\n * @params {number} p\r\n * @params {number} q\r\n * @returns {number}\r\n */\r\nKMEANS.prototype.distance = function(p, q) {\r\n var sum = 0;\r\n var i = Math.min(p.length, q.length);\r\n\r\n while (i--) {\r\n var diff = p[i] - q[i];\r\n sum += diff * diff;\r\n }\r\n\r\n return Math.sqrt(sum);\r\n};\r\n\r\nif (typeof module !== 'undefined' && module.exports) {\r\n module.exports = KMEANS;\r\n}\r\n","\r\n/**\r\n * @requires ./PriorityQueue.js\r\n */\r\n\r\nif (typeof module !== 'undefined' && module.exports) {\r\n var PriorityQueue = require('./PriorityQueue.js');\r\n}\r\n\r\n/**\r\n * OPTICS - Ordering points to identify the clustering structure\r\n *\r\n * @author Lukasz Krawczyk \r\n * @copyright MIT\r\n */\r\n\r\n/**\r\n * OPTICS class constructor\r\n * @constructor\r\n *\r\n * @param {Array} dataset\r\n * @param {number} epsilon\r\n * @param {number} minPts\r\n * @param {function} distanceFunction\r\n * @returns {OPTICS}\r\n */\r\nfunction OPTICS(dataset, epsilon, minPts, distanceFunction) {\r\n /** @type {number} */\r\n this.epsilon = 1;\r\n /** @type {number} */\r\n this.minPts = 1;\r\n /** @type {function} */\r\n this.distance = this._euclideanDistance;\r\n\r\n // temporary variables used during computation\r\n\r\n /** @type {Array} */\r\n this._reachability = [];\r\n /** @type {Array} */\r\n this._processed = [];\r\n /** @type {number} */\r\n this._coreDistance = 0;\r\n /** @type {Array} */\r\n this._orderedList = [];\r\n\r\n this._init(dataset, epsilon, minPts, distanceFunction);\r\n}\r\n\r\n/******************************************************************************/\r\n// pulic functions\r\n\r\n/**\r\n * Start clustering\r\n *\r\n * @param {Array} dataset\r\n * @returns {undefined}\r\n * @access public\r\n */\r\nOPTICS.prototype.run = function(dataset, epsilon, minPts, distanceFunction) {\r\n this._init(dataset, epsilon, minPts, distanceFunction);\r\n\r\n for (var pointId = 0, l = this.dataset.length; pointId < l; pointId++) {\r\n if (this._processed[pointId] !== 1) {\r\n this._processed[pointId] = 1;\r\n this.clusters.push([pointId]);\r\n var clusterId = this.clusters.length - 1;\r\n\r\n this._orderedList.push(pointId);\r\n var priorityQueue = new PriorityQueue(null, null, 'asc');\r\n var neighbors = this._regionQuery(pointId);\r\n\r\n // using priority queue assign elements to new cluster\r\n if (this._distanceToCore(pointId) !== undefined) {\r\n this._updateQueue(pointId, neighbors, priorityQueue);\r\n this._expandCluster(clusterId, priorityQueue);\r\n }\r\n }\r\n }\r\n\r\n return this.clusters;\r\n};\r\n\r\n/**\r\n * Generate reachability plot for all points\r\n *\r\n * @returns {array}\r\n * @access public\r\n */\r\nOPTICS.prototype.getReachabilityPlot = function() {\r\n var reachabilityPlot = [];\r\n\r\n for (var i = 0, l = this._orderedList.length; i < l; i++) {\r\n var pointId = this._orderedList[i];\r\n var distance = this._reachability[pointId];\r\n\r\n reachabilityPlot.push([pointId, distance]);\r\n }\r\n\r\n return reachabilityPlot;\r\n};\r\n\r\n/******************************************************************************/\r\n// protected functions\r\n\r\n/**\r\n * Set object properties\r\n *\r\n * @param {Array} dataset\r\n * @param {number} epsilon\r\n * @param {number} minPts\r\n * @param {function} distance\r\n * @returns {undefined}\r\n * @access protected\r\n */\r\nOPTICS.prototype._init = function(dataset, epsilon, minPts, distance) {\r\n\r\n if (dataset) {\r\n\r\n if (!(dataset instanceof Array)) {\r\n throw Error('Dataset must be of type array, ' +\r\n typeof dataset + ' given');\r\n }\r\n\r\n this.dataset = dataset;\r\n this.clusters = [];\r\n this._reachability = new Array(this.dataset.length);\r\n this._processed = new Array(this.dataset.length);\r\n this._coreDistance = 0;\r\n this._orderedList = [];\r\n }\r\n\r\n if (epsilon) {\r\n this.epsilon = epsilon;\r\n }\r\n\r\n if (minPts) {\r\n this.minPts = minPts;\r\n }\r\n\r\n if (distance) {\r\n this.distance = distance;\r\n }\r\n};\r\n\r\n/**\r\n * Update information in queue\r\n *\r\n * @param {number} pointId\r\n * @param {Array} neighbors\r\n * @param {PriorityQueue} queue\r\n * @returns {undefined}\r\n * @access protected\r\n */\r\nOPTICS.prototype._updateQueue = function(pointId, neighbors, queue) {\r\n var self = this;\r\n\r\n this._coreDistance = this._distanceToCore(pointId);\r\n neighbors.forEach(function(pointId2) {\r\n if (self._processed[pointId2] === undefined) {\r\n var dist = self.distance(self.dataset[pointId], self.dataset[pointId2]);\r\n var newReachableDistance = Math.max(self._coreDistance, dist);\r\n\r\n if (self._reachability[pointId2] === undefined) {\r\n self._reachability[pointId2] = newReachableDistance;\r\n queue.insert(pointId2, newReachableDistance);\r\n } else {\r\n if (newReachableDistance < self._reachability[pointId2]) {\r\n self._reachability[pointId2] = newReachableDistance;\r\n queue.remove(pointId2);\r\n queue.insert(pointId2, newReachableDistance);\r\n }\r\n }\r\n }\r\n });\r\n};\r\n\r\n/**\r\n * Expand cluster\r\n *\r\n * @param {number} clusterId\r\n * @param {PriorityQueue} queue\r\n * @returns {undefined}\r\n * @access protected\r\n */\r\nOPTICS.prototype._expandCluster = function(clusterId, queue) {\r\n var queueElements = queue.getElements();\r\n\r\n for (var p = 0, l = queueElements.length; p < l; p++) {\r\n var pointId = queueElements[p];\r\n if (this._processed[pointId] === undefined) {\r\n var neighbors = this._regionQuery(pointId);\r\n this._processed[pointId] = 1;\r\n\r\n this.clusters[clusterId].push(pointId);\r\n this._orderedList.push(pointId);\r\n\r\n if (this._distanceToCore(pointId) !== undefined) {\r\n this._updateQueue(pointId, neighbors, queue);\r\n this._expandCluster(clusterId, queue);\r\n }\r\n }\r\n }\r\n};\r\n\r\n/**\r\n * Calculating distance to cluster core\r\n *\r\n * @param {number} pointId\r\n * @returns {number}\r\n * @access protected\r\n */\r\nOPTICS.prototype._distanceToCore = function(pointId) {\r\n var l = this.epsilon;\r\n for (var coreDistCand = 0; coreDistCand < l; coreDistCand++) {\r\n var neighbors = this._regionQuery(pointId, coreDistCand);\r\n if (neighbors.length >= this.minPts) {\r\n return coreDistCand;\r\n }\r\n }\r\n\r\n return;\r\n};\r\n\r\n/**\r\n * Find all neighbors around given point\r\n *\r\n * @param {number} pointId\r\n * @param {number} epsilon\r\n * @returns {Array}\r\n * @access protected\r\n */\r\nOPTICS.prototype._regionQuery = function(pointId, epsilon) {\r\n epsilon = epsilon || this.epsilon;\r\n var neighbors = [];\r\n\r\n for (var id = 0, l = this.dataset.length; id < l; id++) {\r\n if (this.distance(this.dataset[pointId], this.dataset[id]) < epsilon) {\r\n neighbors.push(id);\r\n }\r\n }\r\n\r\n return neighbors;\r\n};\r\n\r\n/******************************************************************************/\r\n// helpers\r\n\r\n/**\r\n * Calculate euclidean distance in multidimensional space\r\n *\r\n * @param {Array} p\r\n * @param {Array} q\r\n * @returns {number}\r\n * @access protected\r\n */\r\nOPTICS.prototype._euclideanDistance = function(p, q) {\r\n var sum = 0;\r\n var i = Math.min(p.length, q.length);\r\n\r\n while (i--) {\r\n sum += (p[i] - q[i]) * (p[i] - q[i]);\r\n }\r\n\r\n return Math.sqrt(sum);\r\n};\r\n\r\nif (typeof module !== 'undefined' && module.exports) {\r\n module.exports = OPTICS;\r\n}\r\n","/**\r\n * PriorityQueue\r\n * Elements in this queue are sorted according to their value\r\n *\r\n * @author Lukasz Krawczyk \r\n * @copyright MIT\r\n */\r\n\r\n/**\r\n * PriorityQueue class construcotr\r\n * @constructor\r\n *\r\n * @example\r\n * queue: [1,2,3,4]\r\n * priorities: [4,1,2,3]\r\n * > result = [1,4,2,3]\r\n *\r\n * @param {Array} elements\r\n * @param {Array} priorities\r\n * @param {string} sorting - asc / desc\r\n * @returns {PriorityQueue}\r\n */\r\nfunction PriorityQueue(elements, priorities, sorting) {\r\n /** @type {Array} */\r\n this._queue = [];\r\n /** @type {Array} */\r\n this._priorities = [];\r\n /** @type {string} */\r\n this._sorting = 'desc';\r\n\r\n this._init(elements, priorities, sorting);\r\n};\r\n\r\n/**\r\n * Insert element\r\n *\r\n * @param {Object} ele\r\n * @param {Object} priority\r\n * @returns {undefined}\r\n * @access public\r\n */\r\nPriorityQueue.prototype.insert = function(ele, priority) {\r\n var indexToInsert = this._queue.length;\r\n var index = indexToInsert;\r\n\r\n while (index--) {\r\n var priority2 = this._priorities[index];\r\n if (this._sorting === 'desc') {\r\n if (priority > priority2) {\r\n indexToInsert = index;\r\n }\r\n } else {\r\n if (priority < priority2) {\r\n indexToInsert = index;\r\n }\r\n }\r\n }\r\n\r\n this._insertAt(ele, priority, indexToInsert);\r\n};\r\n\r\n/**\r\n * Remove element\r\n *\r\n * @param {Object} ele\r\n * @returns {undefined}\r\n * @access public\r\n */\r\nPriorityQueue.prototype.remove = function(ele) {\r\n var index = this._queue.length;\r\n\r\n while (index--) {\r\n var ele2 = this._queue[index];\r\n if (ele === ele2) {\r\n this._queue.splice(index, 1);\r\n this._priorities.splice(index, 1);\r\n break;\r\n }\r\n }\r\n};\r\n\r\n/**\r\n * For each loop wrapper\r\n *\r\n * @param {function} func\r\n * @returs {undefined}\r\n * @access public\r\n */\r\nPriorityQueue.prototype.forEach = function(func) {\r\n this._queue.forEach(func);\r\n};\r\n\r\n/**\r\n * @returns {Array}\r\n * @access public\r\n */\r\nPriorityQueue.prototype.getElements = function() {\r\n return this._queue;\r\n};\r\n\r\n/**\r\n * @param {number} index\r\n * @returns {Object}\r\n * @access public\r\n */\r\nPriorityQueue.prototype.getElementPriority = function(index) {\r\n return this._priorities[index];\r\n};\r\n\r\n/**\r\n * @returns {Array}\r\n * @access public\r\n */\r\nPriorityQueue.prototype.getPriorities = function() {\r\n return this._priorities;\r\n};\r\n\r\n/**\r\n * @returns {Array}\r\n * @access public\r\n */\r\nPriorityQueue.prototype.getElementsWithPriorities = function() {\r\n var result = [];\r\n\r\n for (var i = 0, l = this._queue.length; i < l; i++) {\r\n result.push([this._queue[i], this._priorities[i]]);\r\n }\r\n\r\n return result;\r\n};\r\n\r\n/**\r\n * Set object properties\r\n *\r\n * @param {Array} elements\r\n * @param {Array} priorities\r\n * @returns {undefined}\r\n * @access protected\r\n */\r\nPriorityQueue.prototype._init = function(elements, priorities, sorting) {\r\n\r\n if (elements && priorities) {\r\n this._queue = [];\r\n this._priorities = [];\r\n\r\n if (elements.length !== priorities.length) {\r\n throw new Error('Arrays must have the same length');\r\n }\r\n\r\n for (var i = 0; i < elements.length; i++) {\r\n this.insert(elements[i], priorities[i]);\r\n }\r\n }\r\n\r\n if (sorting) {\r\n this._sorting = sorting;\r\n }\r\n};\r\n\r\n/**\r\n * Insert element at given position\r\n *\r\n * @param {Object} ele\r\n * @param {number} index\r\n * @returns {undefined}\r\n * @access protected\r\n */\r\nPriorityQueue.prototype._insertAt = function(ele, priority, index) {\r\n if (this._queue.length === index) {\r\n this._queue.push(ele);\r\n this._priorities.push(priority);\r\n } else {\r\n this._queue.splice(index, 0, ele);\r\n this._priorities.splice(index, 0, priority);\r\n }\r\n};\r\n\r\nif (typeof module !== 'undefined' && module.exports) {\r\n module.exports = PriorityQueue;\r\n}\r\n","\r\nif (typeof module !== 'undefined' && module.exports) {\r\n module.exports = {\r\n DBSCAN: require('./DBSCAN.js'),\r\n KMEANS: require('./KMEANS.js'),\r\n OPTICS: require('./OPTICS.js'),\r\n PriorityQueue: require('./PriorityQueue.js')\r\n };\r\n}\r\n","'use strict';\n\nmodule.exports = earcut;\nmodule.exports.default = earcut;\n\nfunction earcut(data, holeIndices, dim) {\n\n dim = dim || 2;\n\n var hasHoles = holeIndices && holeIndices.length,\n outerLen = hasHoles ? holeIndices[0] * dim : data.length,\n outerNode = linkedList(data, 0, outerLen, dim, true),\n triangles = [];\n\n if (!outerNode || outerNode.next === outerNode.prev) return triangles;\n\n var minX, minY, maxX, maxY, x, y, invSize;\n\n if (hasHoles) outerNode = eliminateHoles(data, holeIndices, outerNode, dim);\n\n // if the shape is not too simple, we'll use z-order curve hash later; calculate polygon bbox\n if (data.length > 80 * dim) {\n minX = maxX = data[0];\n minY = maxY = data[1];\n\n for (var i = dim; i < outerLen; i += dim) {\n x = data[i];\n y = data[i + 1];\n if (x < minX) minX = x;\n if (y < minY) minY = y;\n if (x > maxX) maxX = x;\n if (y > maxY) maxY = y;\n }\n\n // minX, minY and invSize are later used to transform coords into integers for z-order calculation\n invSize = Math.max(maxX - minX, maxY - minY);\n invSize = invSize !== 0 ? 1 / invSize : 0;\n }\n\n earcutLinked(outerNode, triangles, dim, minX, minY, invSize);\n\n return triangles;\n}\n\n// create a circular doubly linked list from polygon points in the specified winding order\nfunction linkedList(data, start, end, dim, clockwise) {\n var i, last;\n\n if (clockwise === (signedArea(data, start, end, dim) > 0)) {\n for (i = start; i < end; i += dim) last = insertNode(i, data[i], data[i + 1], last);\n } else {\n for (i = end - dim; i >= start; i -= dim) last = insertNode(i, data[i], data[i + 1], last);\n }\n\n if (last && equals(last, last.next)) {\n removeNode(last);\n last = last.next;\n }\n\n return last;\n}\n\n// eliminate colinear or duplicate points\nfunction filterPoints(start, end) {\n if (!start) return start;\n if (!end) end = start;\n\n var p = start,\n again;\n do {\n again = false;\n\n if (!p.steiner && (equals(p, p.next) || area(p.prev, p, p.next) === 0)) {\n removeNode(p);\n p = end = p.prev;\n if (p === p.next) break;\n again = true;\n\n } else {\n p = p.next;\n }\n } while (again || p !== end);\n\n return end;\n}\n\n// main ear slicing loop which triangulates a polygon (given as a linked list)\nfunction earcutLinked(ear, triangles, dim, minX, minY, invSize, pass) {\n if (!ear) return;\n\n // interlink polygon nodes in z-order\n if (!pass && invSize) indexCurve(ear, minX, minY, invSize);\n\n var stop = ear,\n prev, next;\n\n // iterate through ears, slicing them one by one\n while (ear.prev !== ear.next) {\n prev = ear.prev;\n next = ear.next;\n\n if (invSize ? isEarHashed(ear, minX, minY, invSize) : isEar(ear)) {\n // cut off the triangle\n triangles.push(prev.i / dim);\n triangles.push(ear.i / dim);\n triangles.push(next.i / dim);\n\n removeNode(ear);\n\n // skipping the next vertex leads to less sliver triangles\n ear = next.next;\n stop = next.next;\n\n continue;\n }\n\n ear = next;\n\n // if we looped through the whole remaining polygon and can't find any more ears\n if (ear === stop) {\n // try filtering points and slicing again\n if (!pass) {\n earcutLinked(filterPoints(ear), triangles, dim, minX, minY, invSize, 1);\n\n // if this didn't work, try curing all small self-intersections locally\n } else if (pass === 1) {\n ear = cureLocalIntersections(filterPoints(ear), triangles, dim);\n earcutLinked(ear, triangles, dim, minX, minY, invSize, 2);\n\n // as a last resort, try splitting the remaining polygon into two\n } else if (pass === 2) {\n splitEarcut(ear, triangles, dim, minX, minY, invSize);\n }\n\n break;\n }\n }\n}\n\n// check whether a polygon node forms a valid ear with adjacent nodes\nfunction isEar(ear) {\n var a = ear.prev,\n b = ear,\n c = ear.next;\n\n if (area(a, b, c) >= 0) return false; // reflex, can't be an ear\n\n // now make sure we don't have other points inside the potential ear\n var p = ear.next.next;\n\n while (p !== ear.prev) {\n if (pointInTriangle(a.x, a.y, b.x, b.y, c.x, c.y, p.x, p.y) &&\n area(p.prev, p, p.next) >= 0) return false;\n p = p.next;\n }\n\n return true;\n}\n\nfunction isEarHashed(ear, minX, minY, invSize) {\n var a = ear.prev,\n b = ear,\n c = ear.next;\n\n if (area(a, b, c) >= 0) return false; // reflex, can't be an ear\n\n // triangle bbox; min & max are calculated like this for speed\n var minTX = a.x < b.x ? (a.x < c.x ? a.x : c.x) : (b.x < c.x ? b.x : c.x),\n minTY = a.y < b.y ? (a.y < c.y ? a.y : c.y) : (b.y < c.y ? b.y : c.y),\n maxTX = a.x > b.x ? (a.x > c.x ? a.x : c.x) : (b.x > c.x ? b.x : c.x),\n maxTY = a.y > b.y ? (a.y > c.y ? a.y : c.y) : (b.y > c.y ? b.y : c.y);\n\n // z-order range for the current triangle bbox;\n var minZ = zOrder(minTX, minTY, minX, minY, invSize),\n maxZ = zOrder(maxTX, maxTY, minX, minY, invSize);\n\n var p = ear.prevZ,\n n = ear.nextZ;\n\n // look for points inside the triangle in both directions\n while (p && p.z >= minZ && n && n.z <= maxZ) {\n if (p !== ear.prev && p !== ear.next &&\n pointInTriangle(a.x, a.y, b.x, b.y, c.x, c.y, p.x, p.y) &&\n area(p.prev, p, p.next) >= 0) return false;\n p = p.prevZ;\n\n if (n !== ear.prev && n !== ear.next &&\n pointInTriangle(a.x, a.y, b.x, b.y, c.x, c.y, n.x, n.y) &&\n area(n.prev, n, n.next) >= 0) return false;\n n = n.nextZ;\n }\n\n // look for remaining points in decreasing z-order\n while (p && p.z >= minZ) {\n if (p !== ear.prev && p !== ear.next &&\n pointInTriangle(a.x, a.y, b.x, b.y, c.x, c.y, p.x, p.y) &&\n area(p.prev, p, p.next) >= 0) return false;\n p = p.prevZ;\n }\n\n // look for remaining points in increasing z-order\n while (n && n.z <= maxZ) {\n if (n !== ear.prev && n !== ear.next &&\n pointInTriangle(a.x, a.y, b.x, b.y, c.x, c.y, n.x, n.y) &&\n area(n.prev, n, n.next) >= 0) return false;\n n = n.nextZ;\n }\n\n return true;\n}\n\n// go through all polygon nodes and cure small local self-intersections\nfunction cureLocalIntersections(start, triangles, dim) {\n var p = start;\n do {\n var a = p.prev,\n b = p.next.next;\n\n if (!equals(a, b) && intersects(a, p, p.next, b) && locallyInside(a, b) && locallyInside(b, a)) {\n\n triangles.push(a.i / dim);\n triangles.push(p.i / dim);\n triangles.push(b.i / dim);\n\n // remove two nodes involved\n removeNode(p);\n removeNode(p.next);\n\n p = start = b;\n }\n p = p.next;\n } while (p !== start);\n\n return filterPoints(p);\n}\n\n// try splitting polygon into two and triangulate them independently\nfunction splitEarcut(start, triangles, dim, minX, minY, invSize) {\n // look for a valid diagonal that divides the polygon into two\n var a = start;\n do {\n var b = a.next.next;\n while (b !== a.prev) {\n if (a.i !== b.i && isValidDiagonal(a, b)) {\n // split the polygon in two by the diagonal\n var c = splitPolygon(a, b);\n\n // filter colinear points around the cuts\n a = filterPoints(a, a.next);\n c = filterPoints(c, c.next);\n\n // run earcut on each half\n earcutLinked(a, triangles, dim, minX, minY, invSize);\n earcutLinked(c, triangles, dim, minX, minY, invSize);\n return;\n }\n b = b.next;\n }\n a = a.next;\n } while (a !== start);\n}\n\n// link every hole into the outer loop, producing a single-ring polygon without holes\nfunction eliminateHoles(data, holeIndices, outerNode, dim) {\n var queue = [],\n i, len, start, end, list;\n\n for (i = 0, len = holeIndices.length; i < len; i++) {\n start = holeIndices[i] * dim;\n end = i < len - 1 ? holeIndices[i + 1] * dim : data.length;\n list = linkedList(data, start, end, dim, false);\n if (list === list.next) list.steiner = true;\n queue.push(getLeftmost(list));\n }\n\n queue.sort(compareX);\n\n // process holes from left to right\n for (i = 0; i < queue.length; i++) {\n outerNode = eliminateHole(queue[i], outerNode);\n outerNode = filterPoints(outerNode, outerNode.next);\n }\n\n return outerNode;\n}\n\nfunction compareX(a, b) {\n return a.x - b.x;\n}\n\n// find a bridge between vertices that connects hole with an outer ring and and link it\nfunction eliminateHole(hole, outerNode) {\n var bridge = findHoleBridge(hole, outerNode);\n if (!bridge) {\n return outerNode;\n }\n\n var bridgeReverse = splitPolygon(bridge, hole);\n\n // filter collinear points around the cuts\n var filteredBridge = filterPoints(bridge, bridge.next);\n filterPoints(bridgeReverse, bridgeReverse.next);\n\n // Check if input node was removed by the filtering\n return outerNode === bridge ? filteredBridge : outerNode;\n}\n\n// David Eberly's algorithm for finding a bridge between hole and outer polygon\nfunction findHoleBridge(hole, outerNode) {\n var p = outerNode,\n hx = hole.x,\n hy = hole.y,\n qx = -Infinity,\n m;\n\n // find a segment intersected by a ray from the hole's leftmost point to the left;\n // segment's endpoint with lesser x will be potential connection point\n do {\n if (hy <= p.y && hy >= p.next.y && p.next.y !== p.y) {\n var x = p.x + (hy - p.y) * (p.next.x - p.x) / (p.next.y - p.y);\n if (x <= hx && x > qx) {\n qx = x;\n if (x === hx) {\n if (hy === p.y) return p;\n if (hy === p.next.y) return p.next;\n }\n m = p.x < p.next.x ? p : p.next;\n }\n }\n p = p.next;\n } while (p !== outerNode);\n\n if (!m) return null;\n\n if (hx === qx) return m; // hole touches outer segment; pick leftmost endpoint\n\n // look for points inside the triangle of hole point, segment intersection and endpoint;\n // if there are no points found, we have a valid connection;\n // otherwise choose the point of the minimum angle with the ray as connection point\n\n var stop = m,\n mx = m.x,\n my = m.y,\n tanMin = Infinity,\n tan;\n\n p = m;\n\n do {\n if (hx >= p.x && p.x >= mx && hx !== p.x &&\n pointInTriangle(hy < my ? hx : qx, hy, mx, my, hy < my ? qx : hx, hy, p.x, p.y)) {\n\n tan = Math.abs(hy - p.y) / (hx - p.x); // tangential\n\n if (locallyInside(p, hole) &&\n (tan < tanMin || (tan === tanMin && (p.x > m.x || (p.x === m.x && sectorContainsSector(m, p)))))) {\n m = p;\n tanMin = tan;\n }\n }\n\n p = p.next;\n } while (p !== stop);\n\n return m;\n}\n\n// whether sector in vertex m contains sector in vertex p in the same coordinates\nfunction sectorContainsSector(m, p) {\n return area(m.prev, m, p.prev) < 0 && area(p.next, m, m.next) < 0;\n}\n\n// interlink polygon nodes in z-order\nfunction indexCurve(start, minX, minY, invSize) {\n var p = start;\n do {\n if (p.z === null) p.z = zOrder(p.x, p.y, minX, minY, invSize);\n p.prevZ = p.prev;\n p.nextZ = p.next;\n p = p.next;\n } while (p !== start);\n\n p.prevZ.nextZ = null;\n p.prevZ = null;\n\n sortLinked(p);\n}\n\n// Simon Tatham's linked list merge sort algorithm\n// http://www.chiark.greenend.org.uk/~sgtatham/algorithms/listsort.html\nfunction sortLinked(list) {\n var i, p, q, e, tail, numMerges, pSize, qSize,\n inSize = 1;\n\n do {\n p = list;\n list = null;\n tail = null;\n numMerges = 0;\n\n while (p) {\n numMerges++;\n q = p;\n pSize = 0;\n for (i = 0; i < inSize; i++) {\n pSize++;\n q = q.nextZ;\n if (!q) break;\n }\n qSize = inSize;\n\n while (pSize > 0 || (qSize > 0 && q)) {\n\n if (pSize !== 0 && (qSize === 0 || !q || p.z <= q.z)) {\n e = p;\n p = p.nextZ;\n pSize--;\n } else {\n e = q;\n q = q.nextZ;\n qSize--;\n }\n\n if (tail) tail.nextZ = e;\n else list = e;\n\n e.prevZ = tail;\n tail = e;\n }\n\n p = q;\n }\n\n tail.nextZ = null;\n inSize *= 2;\n\n } while (numMerges > 1);\n\n return list;\n}\n\n// z-order of a point given coords and inverse of the longer side of data bbox\nfunction zOrder(x, y, minX, minY, invSize) {\n // coords are transformed into non-negative 15-bit integer range\n x = 32767 * (x - minX) * invSize;\n y = 32767 * (y - minY) * invSize;\n\n x = (x | (x << 8)) & 0x00FF00FF;\n x = (x | (x << 4)) & 0x0F0F0F0F;\n x = (x | (x << 2)) & 0x33333333;\n x = (x | (x << 1)) & 0x55555555;\n\n y = (y | (y << 8)) & 0x00FF00FF;\n y = (y | (y << 4)) & 0x0F0F0F0F;\n y = (y | (y << 2)) & 0x33333333;\n y = (y | (y << 1)) & 0x55555555;\n\n return x | (y << 1);\n}\n\n// find the leftmost node of a polygon ring\nfunction getLeftmost(start) {\n var p = start,\n leftmost = start;\n do {\n if (p.x < leftmost.x || (p.x === leftmost.x && p.y < leftmost.y)) leftmost = p;\n p = p.next;\n } while (p !== start);\n\n return leftmost;\n}\n\n// check if a point lies within a convex triangle\nfunction pointInTriangle(ax, ay, bx, by, cx, cy, px, py) {\n return (cx - px) * (ay - py) - (ax - px) * (cy - py) >= 0 &&\n (ax - px) * (by - py) - (bx - px) * (ay - py) >= 0 &&\n (bx - px) * (cy - py) - (cx - px) * (by - py) >= 0;\n}\n\n// check if a diagonal between two polygon nodes is valid (lies in polygon interior)\nfunction isValidDiagonal(a, b) {\n return a.next.i !== b.i && a.prev.i !== b.i && !intersectsPolygon(a, b) && // dones't intersect other edges\n (locallyInside(a, b) && locallyInside(b, a) && middleInside(a, b) && // locally visible\n (area(a.prev, a, b.prev) || area(a, b.prev, b)) || // does not create opposite-facing sectors\n equals(a, b) && area(a.prev, a, a.next) > 0 && area(b.prev, b, b.next) > 0); // special zero-length case\n}\n\n// signed area of a triangle\nfunction area(p, q, r) {\n return (q.y - p.y) * (r.x - q.x) - (q.x - p.x) * (r.y - q.y);\n}\n\n// check if two points are equal\nfunction equals(p1, p2) {\n return p1.x === p2.x && p1.y === p2.y;\n}\n\n// check if two segments intersect\nfunction intersects(p1, q1, p2, q2) {\n var o1 = sign(area(p1, q1, p2));\n var o2 = sign(area(p1, q1, q2));\n var o3 = sign(area(p2, q2, p1));\n var o4 = sign(area(p2, q2, q1));\n\n if (o1 !== o2 && o3 !== o4) return true; // general case\n\n if (o1 === 0 && onSegment(p1, p2, q1)) return true; // p1, q1 and p2 are collinear and p2 lies on p1q1\n if (o2 === 0 && onSegment(p1, q2, q1)) return true; // p1, q1 and q2 are collinear and q2 lies on p1q1\n if (o3 === 0 && onSegment(p2, p1, q2)) return true; // p2, q2 and p1 are collinear and p1 lies on p2q2\n if (o4 === 0 && onSegment(p2, q1, q2)) return true; // p2, q2 and q1 are collinear and q1 lies on p2q2\n\n return false;\n}\n\n// for collinear points p, q, r, check if point q lies on segment pr\nfunction onSegment(p, q, r) {\n return q.x <= Math.max(p.x, r.x) && q.x >= Math.min(p.x, r.x) && q.y <= Math.max(p.y, r.y) && q.y >= Math.min(p.y, r.y);\n}\n\nfunction sign(num) {\n return num > 0 ? 1 : num < 0 ? -1 : 0;\n}\n\n// check if a polygon diagonal intersects any polygon segments\nfunction intersectsPolygon(a, b) {\n var p = a;\n do {\n if (p.i !== a.i && p.next.i !== a.i && p.i !== b.i && p.next.i !== b.i &&\n intersects(p, p.next, a, b)) return true;\n p = p.next;\n } while (p !== a);\n\n return false;\n}\n\n// check if a polygon diagonal is locally inside the polygon\nfunction locallyInside(a, b) {\n return area(a.prev, a, a.next) < 0 ?\n area(a, b, a.next) >= 0 && area(a, a.prev, b) >= 0 :\n area(a, b, a.prev) < 0 || area(a, a.next, b) < 0;\n}\n\n// check if the middle point of a polygon diagonal is inside the polygon\nfunction middleInside(a, b) {\n var p = a,\n inside = false,\n px = (a.x + b.x) / 2,\n py = (a.y + b.y) / 2;\n do {\n if (((p.y > py) !== (p.next.y > py)) && p.next.y !== p.y &&\n (px < (p.next.x - p.x) * (py - p.y) / (p.next.y - p.y) + p.x))\n inside = !inside;\n p = p.next;\n } while (p !== a);\n\n return inside;\n}\n\n// link two polygon vertices with a bridge; if the vertices belong to the same ring, it splits polygon into two;\n// if one belongs to the outer ring and another to a hole, it merges it into a single ring\nfunction splitPolygon(a, b) {\n var a2 = new Node(a.i, a.x, a.y),\n b2 = new Node(b.i, b.x, b.y),\n an = a.next,\n bp = b.prev;\n\n a.next = b;\n b.prev = a;\n\n a2.next = an;\n an.prev = a2;\n\n b2.next = a2;\n a2.prev = b2;\n\n bp.next = b2;\n b2.prev = bp;\n\n return b2;\n}\n\n// create a node and optionally link it with previous one (in a circular doubly linked list)\nfunction insertNode(i, x, y, last) {\n var p = new Node(i, x, y);\n\n if (!last) {\n p.prev = p;\n p.next = p;\n\n } else {\n p.next = last.next;\n p.prev = last;\n last.next.prev = p;\n last.next = p;\n }\n return p;\n}\n\nfunction removeNode(p) {\n p.next.prev = p.prev;\n p.prev.next = p.next;\n\n if (p.prevZ) p.prevZ.nextZ = p.nextZ;\n if (p.nextZ) p.nextZ.prevZ = p.prevZ;\n}\n\nfunction Node(i, x, y) {\n // vertex index in coordinates array\n this.i = i;\n\n // vertex coordinates\n this.x = x;\n this.y = y;\n\n // previous and next vertex nodes in a polygon ring\n this.prev = null;\n this.next = null;\n\n // z-order curve value\n this.z = null;\n\n // previous and next nodes in z-order\n this.prevZ = null;\n this.nextZ = null;\n\n // indicates whether this is a steiner point\n this.steiner = false;\n}\n\n// return a percentage difference between the polygon area and its triangulation area;\n// used to verify correctness of triangulation\nearcut.deviation = function (data, holeIndices, dim, triangles) {\n var hasHoles = holeIndices && holeIndices.length;\n var outerLen = hasHoles ? holeIndices[0] * dim : data.length;\n\n var polygonArea = Math.abs(signedArea(data, 0, outerLen, dim));\n if (hasHoles) {\n for (var i = 0, len = holeIndices.length; i < len; i++) {\n var start = holeIndices[i] * dim;\n var end = i < len - 1 ? holeIndices[i + 1] * dim : data.length;\n polygonArea -= Math.abs(signedArea(data, start, end, dim));\n }\n }\n\n var trianglesArea = 0;\n for (i = 0; i < triangles.length; i += 3) {\n var a = triangles[i] * dim;\n var b = triangles[i + 1] * dim;\n var c = triangles[i + 2] * dim;\n trianglesArea += Math.abs(\n (data[a] - data[c]) * (data[b + 1] - data[a + 1]) -\n (data[a] - data[b]) * (data[c + 1] - data[a + 1]));\n }\n\n return polygonArea === 0 && trianglesArea === 0 ? 0 :\n Math.abs((trianglesArea - polygonArea) / polygonArea);\n};\n\nfunction signedArea(data, start, end, dim) {\n var sum = 0;\n for (var i = start, j = end - dim; i < end; i += dim) {\n sum += (data[j] - data[i]) * (data[i + 1] + data[j + 1]);\n j = i;\n }\n return sum;\n}\n\n// turn a polygon in a multi-dimensional array form (e.g. as in GeoJSON) into a form Earcut accepts\nearcut.flatten = function (data) {\n var dim = data[0][0].length,\n result = {vertices: [], holes: [], dimensions: dim},\n holeIndex = 0;\n\n for (var i = 0; i < data.length; i++) {\n for (var j = 0; j < data[i].length; j++) {\n for (var d = 0; d < dim; d++) result.vertices.push(data[i][j][d]);\n }\n if (i > 0) {\n holeIndex += data[i - 1].length;\n result.holes.push(holeIndex);\n }\n }\n return result;\n};\n","'use strict';\n\n/* eslint no-invalid-this: 1 */\n\nvar ERROR_MESSAGE = 'Function.prototype.bind called on incompatible ';\nvar slice = Array.prototype.slice;\nvar toStr = Object.prototype.toString;\nvar funcType = '[object Function]';\n\nmodule.exports = function bind(that) {\n var target = this;\n if (typeof target !== 'function' || toStr.call(target) !== funcType) {\n throw new TypeError(ERROR_MESSAGE + target);\n }\n var args = slice.call(arguments, 1);\n\n var bound;\n var binder = function () {\n if (this instanceof bound) {\n var result = target.apply(\n this,\n args.concat(slice.call(arguments))\n );\n if (Object(result) === result) {\n return result;\n }\n return this;\n } else {\n return target.apply(\n that,\n args.concat(slice.call(arguments))\n );\n }\n };\n\n var boundLength = Math.max(0, target.length - args.length);\n var boundArgs = [];\n for (var i = 0; i < boundLength; i++) {\n boundArgs.push('$' + i);\n }\n\n bound = Function('binder', 'return function (' + boundArgs.join(',') + '){ return binder.apply(this,arguments); }')(binder);\n\n if (target.prototype) {\n var Empty = function Empty() {};\n Empty.prototype = target.prototype;\n bound.prototype = new Empty();\n Empty.prototype = null;\n }\n\n return bound;\n};\n","'use strict';\n\nvar implementation = require('./implementation');\n\nmodule.exports = Function.prototype.bind || implementation;\n","//index.js\nvar deepEqual = require('deep-equal');\n\nvar Equality = function(opt) {\n this.precision = opt && opt.precision ? opt.precision : 17;\n this.direction = opt && opt.direction ? opt.direction : false;\n this.pseudoNode = opt && opt.pseudoNode ? opt.pseudoNode : false;\n this.objectComparator = opt && opt.objectComparator ? opt.objectComparator : objectComparator;\n};\n\nEquality.prototype.compare = function(g1,g2) {\n if (g1.type !== g2.type || !sameLength(g1,g2)) return false;\n\n switch(g1.type) {\n case 'Point':\n return this.compareCoord(g1.coordinates, g2.coordinates);\n break;\n case 'LineString':\n return this.compareLine(g1.coordinates, g2.coordinates,0,false);\n break;\n case 'Polygon':\n return this.comparePolygon(g1,g2);\n break;\n case 'Feature':\n return this.compareFeature(g1, g2);\n default:\n if (g1.type.indexOf('Multi') === 0) {\n var context = this;\n var g1s = explode(g1);\n var g2s = explode(g2);\n return g1s.every(function(g1part) {\n return this.some(function(g2part) {\n return context.compare(g1part,g2part);\n });\n },g2s);\n }\n }\n return false;\n};\n\nfunction explode(g) {\n return g.coordinates.map(function(part) {\n return {\n type: g.type.replace('Multi', ''),\n coordinates: part}\n });\n}\n//compare length of coordinates/array\nfunction sameLength(g1,g2) {\n return g1.hasOwnProperty('coordinates') ?\n g1.coordinates.length === g2.coordinates.length\n : g1.length === g2.length;\n}\n\n// compare the two coordinates [x,y]\nEquality.prototype.compareCoord = function(c1,c2) {\n if (c1.length !== c2.length) {\n return false;\n }\n\n for (var i=0; i < c1.length; i++) {\n if (c1[i].toFixed(this.precision) !== c2[i].toFixed(this.precision)) {\n return false;\n }\n }\n return true;\n};\n\nEquality.prototype.compareLine = function(path1,path2,ind,isPoly) {\n if (!sameLength(path1,path2)) return false;\n var p1 = this.pseudoNode ? path1 : this.removePseudo(path1);\n var p2 = this.pseudoNode ? path2 : this.removePseudo(path2);\n if (isPoly && !this.compareCoord(p1[0],p2[0])) {\n // fix start index of both to same point\n p2 = this.fixStartIndex(p2,p1);\n if(!p2) return;\n }\n // for linestring ind =0 and for polygon ind =1\n var sameDirection = this.compareCoord(p1[ind],p2[ind]);\n if (this.direction || sameDirection\n ) {\n return this.comparePath(p1, p2);\n } else {\n if (this.compareCoord(p1[ind],p2[p2.length - (1+ind)])\n ) {\n return this.comparePath(p1.slice().reverse(), p2);\n }\n return false;\n }\n};\nEquality.prototype.fixStartIndex = function(sourcePath,targetPath) {\n //make sourcePath first point same as of targetPath\n var correctPath,ind = -1;\n for (var i=0; i< sourcePath.length; i++) {\n if(this.compareCoord(sourcePath[i],targetPath[0])) {\n ind = i;\n break;\n }\n }\n if (ind >= 0) {\n correctPath = [].concat(\n sourcePath.slice(ind,sourcePath.length),\n sourcePath.slice(1,ind+1));\n }\n return correctPath;\n};\nEquality.prototype.comparePath = function (p1,p2) {\n var cont = this;\n return p1.every(function(c,i) {\n return cont.compareCoord(c,this[i]);\n },p2);\n};\n\nEquality.prototype.comparePolygon = function(g1,g2) {\n if (this.compareLine(g1.coordinates[0],g2.coordinates[0],1,true)) {\n var holes1 = g1.coordinates.slice(1,g1.coordinates.length);\n var holes2 = g2.coordinates.slice(1,g2.coordinates.length);\n var cont = this;\n return holes1.every(function(h1) {\n return this.some(function(h2) {\n return cont.compareLine(h1,h2,1,true);\n });\n },holes2);\n } else {\n return false;\n }\n};\n\nEquality.prototype.compareFeature = function(g1,g2) {\n if (\n g1.id !== g2.id ||\n !this.objectComparator(g1.properties, g2.properties) ||\n !this.compareBBox(g1,g2)\n ) {\n return false;\n }\n return this.compare(g1.geometry, g2.geometry);\n};\n\nEquality.prototype.compareBBox = function(g1,g2) {\n if (\n (!g1.bbox && !g2.bbox) || \n (\n g1.bbox && g2.bbox &&\n this.compareCoord(g1.bbox, g2.bbox)\n )\n ) {\n return true;\n }\n return false;\n};\nEquality.prototype.removePseudo = function(path) {\n //TODO to be implement\n return path;\n};\n\nfunction objectComparator(obj1, obj2) {\n return deepEqual(obj1, obj2, {strict: true});\n}\n\nmodule.exports = Equality;\n","var rbush = require('rbush');\nvar helpers = require('@turf/helpers');\nvar meta = require('@turf/meta');\nvar turfBBox = require('@turf/bbox').default;\nvar featureEach = meta.featureEach;\nvar coordEach = meta.coordEach;\nvar polygon = helpers.polygon;\nvar featureCollection = helpers.featureCollection;\n\n/**\n * GeoJSON implementation of [RBush](https://github.com/mourner/rbush#rbush) spatial index.\n *\n * @name rbush\n * @param {number} [maxEntries=9] defines the maximum number of entries in a tree node. 9 (used by default) is a\n * reasonable choice for most applications. Higher value means faster insertion and slower search, and vice versa.\n * @returns {RBush} GeoJSON RBush\n * @example\n * var geojsonRbush = require('geojson-rbush').default;\n * var tree = geojsonRbush();\n */\nfunction geojsonRbush(maxEntries) {\n var tree = new rbush(maxEntries);\n /**\n * [insert](https://github.com/mourner/rbush#data-format)\n *\n * @param {Feature} feature insert single GeoJSON Feature\n * @returns {RBush} GeoJSON RBush\n * @example\n * var poly = turf.polygon([[[-78, 41], [-67, 41], [-67, 48], [-78, 48], [-78, 41]]]);\n * tree.insert(poly)\n */\n tree.insert = function (feature) {\n if (feature.type !== 'Feature') throw new Error('invalid feature');\n feature.bbox = feature.bbox ? feature.bbox : turfBBox(feature);\n return rbush.prototype.insert.call(this, feature);\n };\n\n /**\n * [load](https://github.com/mourner/rbush#bulk-inserting-data)\n *\n * @param {FeatureCollection|Array} features load entire GeoJSON FeatureCollection\n * @returns {RBush} GeoJSON RBush\n * @example\n * var polys = turf.polygons([\n * [[[-78, 41], [-67, 41], [-67, 48], [-78, 48], [-78, 41]]],\n * [[[-93, 32], [-83, 32], [-83, 39], [-93, 39], [-93, 32]]]\n * ]);\n * tree.load(polys);\n */\n tree.load = function (features) {\n var load = [];\n // Load an Array of Features\n if (Array.isArray(features)) {\n features.forEach(function (feature) {\n if (feature.type !== 'Feature') throw new Error('invalid features');\n feature.bbox = feature.bbox ? feature.bbox : turfBBox(feature);\n load.push(feature);\n });\n } else {\n // Load a FeatureCollection\n featureEach(features, function (feature) {\n if (feature.type !== 'Feature') throw new Error('invalid features');\n feature.bbox = feature.bbox ? feature.bbox : turfBBox(feature);\n load.push(feature);\n });\n }\n return rbush.prototype.load.call(this, load);\n };\n\n /**\n * [remove](https://github.com/mourner/rbush#removing-data)\n *\n * @param {Feature} feature remove single GeoJSON Feature\n * @param {Function} equals Pass a custom equals function to compare by value for removal.\n * @returns {RBush} GeoJSON RBush\n * @example\n * var poly = turf.polygon([[[-78, 41], [-67, 41], [-67, 48], [-78, 48], [-78, 41]]]);\n *\n * tree.remove(poly);\n */\n tree.remove = function (feature, equals) {\n if (feature.type !== 'Feature') throw new Error('invalid feature');\n feature.bbox = feature.bbox ? feature.bbox : turfBBox(feature);\n return rbush.prototype.remove.call(this, feature, equals);\n };\n\n /**\n * [clear](https://github.com/mourner/rbush#removing-data)\n *\n * @returns {RBush} GeoJSON Rbush\n * @example\n * tree.clear()\n */\n tree.clear = function () {\n return rbush.prototype.clear.call(this);\n };\n\n /**\n * [search](https://github.com/mourner/rbush#search)\n *\n * @param {BBox|FeatureCollection|Feature} geojson search with GeoJSON\n * @returns {FeatureCollection} all features that intersects with the given GeoJSON.\n * @example\n * var poly = turf.polygon([[[-78, 41], [-67, 41], [-67, 48], [-78, 48], [-78, 41]]]);\n *\n * tree.search(poly);\n */\n tree.search = function (geojson) {\n var features = rbush.prototype.search.call(this, this.toBBox(geojson));\n return featureCollection(features);\n };\n\n /**\n * [collides](https://github.com/mourner/rbush#collisions)\n *\n * @param {BBox|FeatureCollection|Feature} geojson collides with GeoJSON\n * @returns {boolean} true if there are any items intersecting the given GeoJSON, otherwise false.\n * @example\n * var poly = turf.polygon([[[-78, 41], [-67, 41], [-67, 48], [-78, 48], [-78, 41]]]);\n *\n * tree.collides(poly);\n */\n tree.collides = function (geojson) {\n return rbush.prototype.collides.call(this, this.toBBox(geojson));\n };\n\n /**\n * [all](https://github.com/mourner/rbush#search)\n *\n * @returns {FeatureCollection} all the features in RBush\n * @example\n * tree.all()\n */\n tree.all = function () {\n var features = rbush.prototype.all.call(this);\n return featureCollection(features);\n };\n\n /**\n * [toJSON](https://github.com/mourner/rbush#export-and-import)\n *\n * @returns {any} export data as JSON object\n * @example\n * var exported = tree.toJSON()\n */\n tree.toJSON = function () {\n return rbush.prototype.toJSON.call(this);\n };\n\n /**\n * [fromJSON](https://github.com/mourner/rbush#export-and-import)\n *\n * @param {any} json import previously exported data\n * @returns {RBush} GeoJSON RBush\n * @example\n * var exported = {\n * \"children\": [\n * {\n * \"type\": \"Feature\",\n * \"geometry\": {\n * \"type\": \"Point\",\n * \"coordinates\": [110, 50]\n * },\n * \"properties\": {},\n * \"bbox\": [110, 50, 110, 50]\n * }\n * ],\n * \"height\": 1,\n * \"leaf\": true,\n * \"minX\": 110,\n * \"minY\": 50,\n * \"maxX\": 110,\n * \"maxY\": 50\n * }\n * tree.fromJSON(exported)\n */\n tree.fromJSON = function (json) {\n return rbush.prototype.fromJSON.call(this, json);\n };\n\n /**\n * Converts GeoJSON to {minX, minY, maxX, maxY} schema\n *\n * @private\n * @param {BBox|FeatureCollection|Feature} geojson feature(s) to retrieve BBox from\n * @returns {Object} converted to {minX, minY, maxX, maxY}\n */\n tree.toBBox = function (geojson) {\n var bbox;\n if (geojson.bbox) bbox = geojson.bbox;\n else if (Array.isArray(geojson) && geojson.length === 4) bbox = geojson;\n else if (Array.isArray(geojson) && geojson.length === 6) bbox = [geojson[0], geojson[1], geojson[3], geojson[4]];\n else if (geojson.type === 'Feature') bbox = turfBBox(geojson);\n else if (geojson.type === 'FeatureCollection') bbox = turfBBox(geojson);\n else throw new Error('invalid geojson')\n\n return {\n minX: bbox[0],\n minY: bbox[1],\n maxX: bbox[2],\n maxY: bbox[3]\n };\n };\n return tree;\n}\n\nmodule.exports = geojsonRbush;\nmodule.exports.default = geojsonRbush;\n","'use strict';\n\nvar undefined;\n\nvar $SyntaxError = SyntaxError;\nvar $Function = Function;\nvar $TypeError = TypeError;\n\n// eslint-disable-next-line consistent-return\nvar getEvalledConstructor = function (expressionSyntax) {\n\ttry {\n\t\treturn $Function('\"use strict\"; return (' + expressionSyntax + ').constructor;')();\n\t} catch (e) {}\n};\n\nvar $gOPD = Object.getOwnPropertyDescriptor;\nif ($gOPD) {\n\ttry {\n\t\t$gOPD({}, '');\n\t} catch (e) {\n\t\t$gOPD = null; // this is IE 8, which has a broken gOPD\n\t}\n}\n\nvar throwTypeError = function () {\n\tthrow new $TypeError();\n};\nvar ThrowTypeError = $gOPD\n\t? (function () {\n\t\ttry {\n\t\t\t// eslint-disable-next-line no-unused-expressions, no-caller, no-restricted-properties\n\t\t\targuments.callee; // IE 8 does not throw here\n\t\t\treturn throwTypeError;\n\t\t} catch (calleeThrows) {\n\t\t\ttry {\n\t\t\t\t// IE 8 throws on Object.getOwnPropertyDescriptor(arguments, '')\n\t\t\t\treturn $gOPD(arguments, 'callee').get;\n\t\t\t} catch (gOPDthrows) {\n\t\t\t\treturn throwTypeError;\n\t\t\t}\n\t\t}\n\t}())\n\t: throwTypeError;\n\nvar hasSymbols = require('has-symbols')();\n\nvar getProto = Object.getPrototypeOf || function (x) { return x.__proto__; }; // eslint-disable-line no-proto\n\nvar needsEval = {};\n\nvar TypedArray = typeof Uint8Array === 'undefined' ? undefined : getProto(Uint8Array);\n\nvar INTRINSICS = {\n\t'%AggregateError%': typeof AggregateError === 'undefined' ? undefined : AggregateError,\n\t'%Array%': Array,\n\t'%ArrayBuffer%': typeof ArrayBuffer === 'undefined' ? undefined : ArrayBuffer,\n\t'%ArrayIteratorPrototype%': hasSymbols ? getProto([][Symbol.iterator]()) : undefined,\n\t'%AsyncFromSyncIteratorPrototype%': undefined,\n\t'%AsyncFunction%': needsEval,\n\t'%AsyncGenerator%': needsEval,\n\t'%AsyncGeneratorFunction%': needsEval,\n\t'%AsyncIteratorPrototype%': needsEval,\n\t'%Atomics%': typeof Atomics === 'undefined' ? undefined : Atomics,\n\t'%BigInt%': typeof BigInt === 'undefined' ? undefined : BigInt,\n\t'%Boolean%': Boolean,\n\t'%DataView%': typeof DataView === 'undefined' ? undefined : DataView,\n\t'%Date%': Date,\n\t'%decodeURI%': decodeURI,\n\t'%decodeURIComponent%': decodeURIComponent,\n\t'%encodeURI%': encodeURI,\n\t'%encodeURIComponent%': encodeURIComponent,\n\t'%Error%': Error,\n\t'%eval%': eval, // eslint-disable-line no-eval\n\t'%EvalError%': EvalError,\n\t'%Float32Array%': typeof Float32Array === 'undefined' ? undefined : Float32Array,\n\t'%Float64Array%': typeof Float64Array === 'undefined' ? undefined : Float64Array,\n\t'%FinalizationRegistry%': typeof FinalizationRegistry === 'undefined' ? undefined : FinalizationRegistry,\n\t'%Function%': $Function,\n\t'%GeneratorFunction%': needsEval,\n\t'%Int8Array%': typeof Int8Array === 'undefined' ? undefined : Int8Array,\n\t'%Int16Array%': typeof Int16Array === 'undefined' ? undefined : Int16Array,\n\t'%Int32Array%': typeof Int32Array === 'undefined' ? undefined : Int32Array,\n\t'%isFinite%': isFinite,\n\t'%isNaN%': isNaN,\n\t'%IteratorPrototype%': hasSymbols ? getProto(getProto([][Symbol.iterator]())) : undefined,\n\t'%JSON%': typeof JSON === 'object' ? JSON : undefined,\n\t'%Map%': typeof Map === 'undefined' ? undefined : Map,\n\t'%MapIteratorPrototype%': typeof Map === 'undefined' || !hasSymbols ? undefined : getProto(new Map()[Symbol.iterator]()),\n\t'%Math%': Math,\n\t'%Number%': Number,\n\t'%Object%': Object,\n\t'%parseFloat%': parseFloat,\n\t'%parseInt%': parseInt,\n\t'%Promise%': typeof Promise === 'undefined' ? undefined : Promise,\n\t'%Proxy%': typeof Proxy === 'undefined' ? undefined : Proxy,\n\t'%RangeError%': RangeError,\n\t'%ReferenceError%': ReferenceError,\n\t'%Reflect%': typeof Reflect === 'undefined' ? undefined : Reflect,\n\t'%RegExp%': RegExp,\n\t'%Set%': typeof Set === 'undefined' ? undefined : Set,\n\t'%SetIteratorPrototype%': typeof Set === 'undefined' || !hasSymbols ? undefined : getProto(new Set()[Symbol.iterator]()),\n\t'%SharedArrayBuffer%': typeof SharedArrayBuffer === 'undefined' ? undefined : SharedArrayBuffer,\n\t'%String%': String,\n\t'%StringIteratorPrototype%': hasSymbols ? getProto(''[Symbol.iterator]()) : undefined,\n\t'%Symbol%': hasSymbols ? Symbol : undefined,\n\t'%SyntaxError%': $SyntaxError,\n\t'%ThrowTypeError%': ThrowTypeError,\n\t'%TypedArray%': TypedArray,\n\t'%TypeError%': $TypeError,\n\t'%Uint8Array%': typeof Uint8Array === 'undefined' ? undefined : Uint8Array,\n\t'%Uint8ClampedArray%': typeof Uint8ClampedArray === 'undefined' ? undefined : Uint8ClampedArray,\n\t'%Uint16Array%': typeof Uint16Array === 'undefined' ? undefined : Uint16Array,\n\t'%Uint32Array%': typeof Uint32Array === 'undefined' ? undefined : Uint32Array,\n\t'%URIError%': URIError,\n\t'%WeakMap%': typeof WeakMap === 'undefined' ? undefined : WeakMap,\n\t'%WeakRef%': typeof WeakRef === 'undefined' ? undefined : WeakRef,\n\t'%WeakSet%': typeof WeakSet === 'undefined' ? undefined : WeakSet\n};\n\nvar doEval = function doEval(name) {\n\tvar value;\n\tif (name === '%AsyncFunction%') {\n\t\tvalue = getEvalledConstructor('async function () {}');\n\t} else if (name === '%GeneratorFunction%') {\n\t\tvalue = getEvalledConstructor('function* () {}');\n\t} else if (name === '%AsyncGeneratorFunction%') {\n\t\tvalue = getEvalledConstructor('async function* () {}');\n\t} else if (name === '%AsyncGenerator%') {\n\t\tvar fn = doEval('%AsyncGeneratorFunction%');\n\t\tif (fn) {\n\t\t\tvalue = fn.prototype;\n\t\t}\n\t} else if (name === '%AsyncIteratorPrototype%') {\n\t\tvar gen = doEval('%AsyncGenerator%');\n\t\tif (gen) {\n\t\t\tvalue = getProto(gen.prototype);\n\t\t}\n\t}\n\n\tINTRINSICS[name] = value;\n\n\treturn value;\n};\n\nvar LEGACY_ALIASES = {\n\t'%ArrayBufferPrototype%': ['ArrayBuffer', 'prototype'],\n\t'%ArrayPrototype%': ['Array', 'prototype'],\n\t'%ArrayProto_entries%': ['Array', 'prototype', 'entries'],\n\t'%ArrayProto_forEach%': ['Array', 'prototype', 'forEach'],\n\t'%ArrayProto_keys%': ['Array', 'prototype', 'keys'],\n\t'%ArrayProto_values%': ['Array', 'prototype', 'values'],\n\t'%AsyncFunctionPrototype%': ['AsyncFunction', 'prototype'],\n\t'%AsyncGenerator%': ['AsyncGeneratorFunction', 'prototype'],\n\t'%AsyncGeneratorPrototype%': ['AsyncGeneratorFunction', 'prototype', 'prototype'],\n\t'%BooleanPrototype%': ['Boolean', 'prototype'],\n\t'%DataViewPrototype%': ['DataView', 'prototype'],\n\t'%DatePrototype%': ['Date', 'prototype'],\n\t'%ErrorPrototype%': ['Error', 'prototype'],\n\t'%EvalErrorPrototype%': ['EvalError', 'prototype'],\n\t'%Float32ArrayPrototype%': ['Float32Array', 'prototype'],\n\t'%Float64ArrayPrototype%': ['Float64Array', 'prototype'],\n\t'%FunctionPrototype%': ['Function', 'prototype'],\n\t'%Generator%': ['GeneratorFunction', 'prototype'],\n\t'%GeneratorPrototype%': ['GeneratorFunction', 'prototype', 'prototype'],\n\t'%Int8ArrayPrototype%': ['Int8Array', 'prototype'],\n\t'%Int16ArrayPrototype%': ['Int16Array', 'prototype'],\n\t'%Int32ArrayPrototype%': ['Int32Array', 'prototype'],\n\t'%JSONParse%': ['JSON', 'parse'],\n\t'%JSONStringify%': ['JSON', 'stringify'],\n\t'%MapPrototype%': ['Map', 'prototype'],\n\t'%NumberPrototype%': ['Number', 'prototype'],\n\t'%ObjectPrototype%': ['Object', 'prototype'],\n\t'%ObjProto_toString%': ['Object', 'prototype', 'toString'],\n\t'%ObjProto_valueOf%': ['Object', 'prototype', 'valueOf'],\n\t'%PromisePrototype%': ['Promise', 'prototype'],\n\t'%PromiseProto_then%': ['Promise', 'prototype', 'then'],\n\t'%Promise_all%': ['Promise', 'all'],\n\t'%Promise_reject%': ['Promise', 'reject'],\n\t'%Promise_resolve%': ['Promise', 'resolve'],\n\t'%RangeErrorPrototype%': ['RangeError', 'prototype'],\n\t'%ReferenceErrorPrototype%': ['ReferenceError', 'prototype'],\n\t'%RegExpPrototype%': ['RegExp', 'prototype'],\n\t'%SetPrototype%': ['Set', 'prototype'],\n\t'%SharedArrayBufferPrototype%': ['SharedArrayBuffer', 'prototype'],\n\t'%StringPrototype%': ['String', 'prototype'],\n\t'%SymbolPrototype%': ['Symbol', 'prototype'],\n\t'%SyntaxErrorPrototype%': ['SyntaxError', 'prototype'],\n\t'%TypedArrayPrototype%': ['TypedArray', 'prototype'],\n\t'%TypeErrorPrototype%': ['TypeError', 'prototype'],\n\t'%Uint8ArrayPrototype%': ['Uint8Array', 'prototype'],\n\t'%Uint8ClampedArrayPrototype%': ['Uint8ClampedArray', 'prototype'],\n\t'%Uint16ArrayPrototype%': ['Uint16Array', 'prototype'],\n\t'%Uint32ArrayPrototype%': ['Uint32Array', 'prototype'],\n\t'%URIErrorPrototype%': ['URIError', 'prototype'],\n\t'%WeakMapPrototype%': ['WeakMap', 'prototype'],\n\t'%WeakSetPrototype%': ['WeakSet', 'prototype']\n};\n\nvar bind = require('function-bind');\nvar hasOwn = require('has');\nvar $concat = bind.call(Function.call, Array.prototype.concat);\nvar $spliceApply = bind.call(Function.apply, Array.prototype.splice);\nvar $replace = bind.call(Function.call, String.prototype.replace);\nvar $strSlice = bind.call(Function.call, String.prototype.slice);\n\n/* adapted from https://github.com/lodash/lodash/blob/4.17.15/dist/lodash.js#L6735-L6744 */\nvar rePropName = /[^%.[\\]]+|\\[(?:(-?\\d+(?:\\.\\d+)?)|([\"'])((?:(?!\\2)[^\\\\]|\\\\.)*?)\\2)\\]|(?=(?:\\.|\\[\\])(?:\\.|\\[\\]|%$))/g;\nvar reEscapeChar = /\\\\(\\\\)?/g; /** Used to match backslashes in property paths. */\nvar stringToPath = function stringToPath(string) {\n\tvar first = $strSlice(string, 0, 1);\n\tvar last = $strSlice(string, -1);\n\tif (first === '%' && last !== '%') {\n\t\tthrow new $SyntaxError('invalid intrinsic syntax, expected closing `%`');\n\t} else if (last === '%' && first !== '%') {\n\t\tthrow new $SyntaxError('invalid intrinsic syntax, expected opening `%`');\n\t}\n\tvar result = [];\n\t$replace(string, rePropName, function (match, number, quote, subString) {\n\t\tresult[result.length] = quote ? $replace(subString, reEscapeChar, '$1') : number || match;\n\t});\n\treturn result;\n};\n/* end adaptation */\n\nvar getBaseIntrinsic = function getBaseIntrinsic(name, allowMissing) {\n\tvar intrinsicName = name;\n\tvar alias;\n\tif (hasOwn(LEGACY_ALIASES, intrinsicName)) {\n\t\talias = LEGACY_ALIASES[intrinsicName];\n\t\tintrinsicName = '%' + alias[0] + '%';\n\t}\n\n\tif (hasOwn(INTRINSICS, intrinsicName)) {\n\t\tvar value = INTRINSICS[intrinsicName];\n\t\tif (value === needsEval) {\n\t\t\tvalue = doEval(intrinsicName);\n\t\t}\n\t\tif (typeof value === 'undefined' && !allowMissing) {\n\t\t\tthrow new $TypeError('intrinsic ' + name + ' exists, but is not available. Please file an issue!');\n\t\t}\n\n\t\treturn {\n\t\t\talias: alias,\n\t\t\tname: intrinsicName,\n\t\t\tvalue: value\n\t\t};\n\t}\n\n\tthrow new $SyntaxError('intrinsic ' + name + ' does not exist!');\n};\n\nmodule.exports = function GetIntrinsic(name, allowMissing) {\n\tif (typeof name !== 'string' || name.length === 0) {\n\t\tthrow new $TypeError('intrinsic name must be a non-empty string');\n\t}\n\tif (arguments.length > 1 && typeof allowMissing !== 'boolean') {\n\t\tthrow new $TypeError('\"allowMissing\" argument must be a boolean');\n\t}\n\n\tvar parts = stringToPath(name);\n\tvar intrinsicBaseName = parts.length > 0 ? parts[0] : '';\n\n\tvar intrinsic = getBaseIntrinsic('%' + intrinsicBaseName + '%', allowMissing);\n\tvar intrinsicRealName = intrinsic.name;\n\tvar value = intrinsic.value;\n\tvar skipFurtherCaching = false;\n\n\tvar alias = intrinsic.alias;\n\tif (alias) {\n\t\tintrinsicBaseName = alias[0];\n\t\t$spliceApply(parts, $concat([0, 1], alias));\n\t}\n\n\tfor (var i = 1, isOwn = true; i < parts.length; i += 1) {\n\t\tvar part = parts[i];\n\t\tvar first = $strSlice(part, 0, 1);\n\t\tvar last = $strSlice(part, -1);\n\t\tif (\n\t\t\t(\n\t\t\t\t(first === '\"' || first === \"'\" || first === '`')\n\t\t\t\t|| (last === '\"' || last === \"'\" || last === '`')\n\t\t\t)\n\t\t\t&& first !== last\n\t\t) {\n\t\t\tthrow new $SyntaxError('property names with quotes must have matching quotes');\n\t\t}\n\t\tif (part === 'constructor' || !isOwn) {\n\t\t\tskipFurtherCaching = true;\n\t\t}\n\n\t\tintrinsicBaseName += '.' + part;\n\t\tintrinsicRealName = '%' + intrinsicBaseName + '%';\n\n\t\tif (hasOwn(INTRINSICS, intrinsicRealName)) {\n\t\t\tvalue = INTRINSICS[intrinsicRealName];\n\t\t} else if (value != null) {\n\t\t\tif (!(part in value)) {\n\t\t\t\tif (!allowMissing) {\n\t\t\t\t\tthrow new $TypeError('base intrinsic for ' + name + ' exists, but the property is not available.');\n\t\t\t\t}\n\t\t\t\treturn void undefined;\n\t\t\t}\n\t\t\tif ($gOPD && (i + 1) >= parts.length) {\n\t\t\t\tvar desc = $gOPD(value, part);\n\t\t\t\tisOwn = !!desc;\n\n\t\t\t\t// By convention, when a data property is converted to an accessor\n\t\t\t\t// property to emulate a data property that does not suffer from\n\t\t\t\t// the override mistake, that accessor's getter is marked with\n\t\t\t\t// an `originalValue` property. Here, when we detect this, we\n\t\t\t\t// uphold the illusion by pretending to see that original data\n\t\t\t\t// property, i.e., returning the value rather than the getter\n\t\t\t\t// itself.\n\t\t\t\tif (isOwn && 'get' in desc && !('originalValue' in desc.get)) {\n\t\t\t\t\tvalue = desc.get;\n\t\t\t\t} else {\n\t\t\t\t\tvalue = value[part];\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tisOwn = hasOwn(value, part);\n\t\t\t\tvalue = value[part];\n\t\t\t}\n\n\t\t\tif (isOwn && !skipFurtherCaching) {\n\t\t\t\tINTRINSICS[intrinsicRealName] = value;\n\t\t\t}\n\t\t}\n\t}\n\treturn value;\n};\n","'use strict';\n\nvar origSymbol = typeof Symbol !== 'undefined' && Symbol;\nvar hasSymbolSham = require('./shams');\n\nmodule.exports = function hasNativeSymbols() {\n\tif (typeof origSymbol !== 'function') { return false; }\n\tif (typeof Symbol !== 'function') { return false; }\n\tif (typeof origSymbol('foo') !== 'symbol') { return false; }\n\tif (typeof Symbol('bar') !== 'symbol') { return false; }\n\n\treturn hasSymbolSham();\n};\n","'use strict';\n\n/* eslint complexity: [2, 18], max-statements: [2, 33] */\nmodule.exports = function hasSymbols() {\n\tif (typeof Symbol !== 'function' || typeof Object.getOwnPropertySymbols !== 'function') { return false; }\n\tif (typeof Symbol.iterator === 'symbol') { return true; }\n\n\tvar obj = {};\n\tvar sym = Symbol('test');\n\tvar symObj = Object(sym);\n\tif (typeof sym === 'string') { return false; }\n\n\tif (Object.prototype.toString.call(sym) !== '[object Symbol]') { return false; }\n\tif (Object.prototype.toString.call(symObj) !== '[object Symbol]') { return false; }\n\n\t// temp disabled per https://github.com/ljharb/object.assign/issues/17\n\t// if (sym instanceof Symbol) { return false; }\n\t// temp disabled per https://github.com/WebReflection/get-own-property-symbols/issues/4\n\t// if (!(symObj instanceof Symbol)) { return false; }\n\n\t// if (typeof Symbol.prototype.toString !== 'function') { return false; }\n\t// if (String(sym) !== Symbol.prototype.toString.call(sym)) { return false; }\n\n\tvar symVal = 42;\n\tobj[sym] = symVal;\n\tfor (sym in obj) { return false; } // eslint-disable-line no-restricted-syntax, no-unreachable-loop\n\tif (typeof Object.keys === 'function' && Object.keys(obj).length !== 0) { return false; }\n\n\tif (typeof Object.getOwnPropertyNames === 'function' && Object.getOwnPropertyNames(obj).length !== 0) { return false; }\n\n\tvar syms = Object.getOwnPropertySymbols(obj);\n\tif (syms.length !== 1 || syms[0] !== sym) { return false; }\n\n\tif (!Object.prototype.propertyIsEnumerable.call(obj, sym)) { return false; }\n\n\tif (typeof Object.getOwnPropertyDescriptor === 'function') {\n\t\tvar descriptor = Object.getOwnPropertyDescriptor(obj, sym);\n\t\tif (descriptor.value !== symVal || descriptor.enumerable !== true) { return false; }\n\t}\n\n\treturn true;\n};\n","'use strict';\n\nvar hasSymbols = require('has-symbols/shams');\n\nmodule.exports = function hasToStringTagShams() {\n\treturn hasSymbols() && !!Symbol.toStringTag;\n};\n","'use strict';\n\nvar bind = require('function-bind');\n\nmodule.exports = bind.call(Function.call, Object.prototype.hasOwnProperty);\n","'use strict';\n\nvar hasToStringTag = require('has-tostringtag/shams')();\nvar callBound = require('call-bind/callBound');\n\nvar $toString = callBound('Object.prototype.toString');\n\nvar isStandardArguments = function isArguments(value) {\n\tif (hasToStringTag && value && typeof value === 'object' && Symbol.toStringTag in value) {\n\t\treturn false;\n\t}\n\treturn $toString(value) === '[object Arguments]';\n};\n\nvar isLegacyArguments = function isArguments(value) {\n\tif (isStandardArguments(value)) {\n\t\treturn true;\n\t}\n\treturn value !== null &&\n\t\ttypeof value === 'object' &&\n\t\ttypeof value.length === 'number' &&\n\t\tvalue.length >= 0 &&\n\t\t$toString(value) !== '[object Array]' &&\n\t\t$toString(value.callee) === '[object Function]';\n};\n\nvar supportsStandardArguments = (function () {\n\treturn isStandardArguments(arguments);\n}());\n\nisStandardArguments.isLegacyArguments = isLegacyArguments; // for tests\n\nmodule.exports = supportsStandardArguments ? isStandardArguments : isLegacyArguments;\n","'use strict';\n\nvar getDay = Date.prototype.getDay;\nvar tryDateObject = function tryDateGetDayCall(value) {\n\ttry {\n\t\tgetDay.call(value);\n\t\treturn true;\n\t} catch (e) {\n\t\treturn false;\n\t}\n};\n\nvar toStr = Object.prototype.toString;\nvar dateClass = '[object Date]';\nvar hasToStringTag = require('has-tostringtag/shams')();\n\nmodule.exports = function isDateObject(value) {\n\tif (typeof value !== 'object' || value === null) {\n\t\treturn false;\n\t}\n\treturn hasToStringTag ? tryDateObject(value) : toStr.call(value) === dateClass;\n};\n","'use strict';\n\nvar callBound = require('call-bind/callBound');\nvar hasToStringTag = require('has-tostringtag/shams')();\nvar has;\nvar $exec;\nvar isRegexMarker;\nvar badStringifier;\n\nif (hasToStringTag) {\n\thas = callBound('Object.prototype.hasOwnProperty');\n\t$exec = callBound('RegExp.prototype.exec');\n\tisRegexMarker = {};\n\n\tvar throwRegexMarker = function () {\n\t\tthrow isRegexMarker;\n\t};\n\tbadStringifier = {\n\t\ttoString: throwRegexMarker,\n\t\tvalueOf: throwRegexMarker\n\t};\n\n\tif (typeof Symbol.toPrimitive === 'symbol') {\n\t\tbadStringifier[Symbol.toPrimitive] = throwRegexMarker;\n\t}\n}\n\nvar $toString = callBound('Object.prototype.toString');\nvar gOPD = Object.getOwnPropertyDescriptor;\nvar regexClass = '[object RegExp]';\n\nmodule.exports = hasToStringTag\n\t// eslint-disable-next-line consistent-return\n\t? function isRegex(value) {\n\t\tif (!value || typeof value !== 'object') {\n\t\t\treturn false;\n\t\t}\n\n\t\tvar descriptor = gOPD(value, 'lastIndex');\n\t\tvar hasLastIndexDataProperty = descriptor && has(descriptor, 'value');\n\t\tif (!hasLastIndexDataProperty) {\n\t\t\treturn false;\n\t\t}\n\n\t\ttry {\n\t\t\t$exec(value, badStringifier);\n\t\t} catch (e) {\n\t\t\treturn e === isRegexMarker;\n\t\t}\n\t}\n\t: function isRegex(value) {\n\t\t// In older browsers, typeof regex incorrectly returns 'function'\n\t\tif (!value || (typeof value !== 'object' && typeof value !== 'function')) {\n\t\t\treturn false;\n\t\t}\n\n\t\treturn $toString(value) === regexClass;\n\t};\n","'use strict';\n\nvar numberIsNaN = function (value) {\n\treturn value !== value;\n};\n\nmodule.exports = function is(a, b) {\n\tif (a === 0 && b === 0) {\n\t\treturn 1 / a === 1 / b;\n\t}\n\tif (a === b) {\n\t\treturn true;\n\t}\n\tif (numberIsNaN(a) && numberIsNaN(b)) {\n\t\treturn true;\n\t}\n\treturn false;\n};\n\n","'use strict';\n\nvar define = require('define-properties');\nvar callBind = require('call-bind');\n\nvar implementation = require('./implementation');\nvar getPolyfill = require('./polyfill');\nvar shim = require('./shim');\n\nvar polyfill = callBind(getPolyfill(), Object);\n\ndefine(polyfill, {\n\tgetPolyfill: getPolyfill,\n\timplementation: implementation,\n\tshim: shim\n});\n\nmodule.exports = polyfill;\n","'use strict';\n\nvar implementation = require('./implementation');\n\nmodule.exports = function getPolyfill() {\n\treturn typeof Object.is === 'function' ? Object.is : implementation;\n};\n","'use strict';\n\nvar getPolyfill = require('./polyfill');\nvar define = require('define-properties');\n\nmodule.exports = function shimObjectIs() {\n\tvar polyfill = getPolyfill();\n\tdefine(Object, { is: polyfill }, {\n\t\tis: function testObjectIs() {\n\t\t\treturn Object.is !== polyfill;\n\t\t}\n\t});\n\treturn polyfill;\n};\n","'use strict';\n\nvar keysShim;\nif (!Object.keys) {\n\t// modified from https://github.com/es-shims/es5-shim\n\tvar has = Object.prototype.hasOwnProperty;\n\tvar toStr = Object.prototype.toString;\n\tvar isArgs = require('./isArguments'); // eslint-disable-line global-require\n\tvar isEnumerable = Object.prototype.propertyIsEnumerable;\n\tvar hasDontEnumBug = !isEnumerable.call({ toString: null }, 'toString');\n\tvar hasProtoEnumBug = isEnumerable.call(function () {}, 'prototype');\n\tvar dontEnums = [\n\t\t'toString',\n\t\t'toLocaleString',\n\t\t'valueOf',\n\t\t'hasOwnProperty',\n\t\t'isPrototypeOf',\n\t\t'propertyIsEnumerable',\n\t\t'constructor'\n\t];\n\tvar equalsConstructorPrototype = function (o) {\n\t\tvar ctor = o.constructor;\n\t\treturn ctor && ctor.prototype === o;\n\t};\n\tvar excludedKeys = {\n\t\t$applicationCache: true,\n\t\t$console: true,\n\t\t$external: true,\n\t\t$frame: true,\n\t\t$frameElement: true,\n\t\t$frames: true,\n\t\t$innerHeight: true,\n\t\t$innerWidth: true,\n\t\t$onmozfullscreenchange: true,\n\t\t$onmozfullscreenerror: true,\n\t\t$outerHeight: true,\n\t\t$outerWidth: true,\n\t\t$pageXOffset: true,\n\t\t$pageYOffset: true,\n\t\t$parent: true,\n\t\t$scrollLeft: true,\n\t\t$scrollTop: true,\n\t\t$scrollX: true,\n\t\t$scrollY: true,\n\t\t$self: true,\n\t\t$webkitIndexedDB: true,\n\t\t$webkitStorageInfo: true,\n\t\t$window: true\n\t};\n\tvar hasAutomationEqualityBug = (function () {\n\t\t/* global window */\n\t\tif (typeof window === 'undefined') { return false; }\n\t\tfor (var k in window) {\n\t\t\ttry {\n\t\t\t\tif (!excludedKeys['$' + k] && has.call(window, k) && window[k] !== null && typeof window[k] === 'object') {\n\t\t\t\t\ttry {\n\t\t\t\t\t\tequalsConstructorPrototype(window[k]);\n\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\treturn true;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} catch (e) {\n\t\t\t\treturn true;\n\t\t\t}\n\t\t}\n\t\treturn false;\n\t}());\n\tvar equalsConstructorPrototypeIfNotBuggy = function (o) {\n\t\t/* global window */\n\t\tif (typeof window === 'undefined' || !hasAutomationEqualityBug) {\n\t\t\treturn equalsConstructorPrototype(o);\n\t\t}\n\t\ttry {\n\t\t\treturn equalsConstructorPrototype(o);\n\t\t} catch (e) {\n\t\t\treturn false;\n\t\t}\n\t};\n\n\tkeysShim = function keys(object) {\n\t\tvar isObject = object !== null && typeof object === 'object';\n\t\tvar isFunction = toStr.call(object) === '[object Function]';\n\t\tvar isArguments = isArgs(object);\n\t\tvar isString = isObject && toStr.call(object) === '[object String]';\n\t\tvar theKeys = [];\n\n\t\tif (!isObject && !isFunction && !isArguments) {\n\t\t\tthrow new TypeError('Object.keys called on a non-object');\n\t\t}\n\n\t\tvar skipProto = hasProtoEnumBug && isFunction;\n\t\tif (isString && object.length > 0 && !has.call(object, 0)) {\n\t\t\tfor (var i = 0; i < object.length; ++i) {\n\t\t\t\ttheKeys.push(String(i));\n\t\t\t}\n\t\t}\n\n\t\tif (isArguments && object.length > 0) {\n\t\t\tfor (var j = 0; j < object.length; ++j) {\n\t\t\t\ttheKeys.push(String(j));\n\t\t\t}\n\t\t} else {\n\t\t\tfor (var name in object) {\n\t\t\t\tif (!(skipProto && name === 'prototype') && has.call(object, name)) {\n\t\t\t\t\ttheKeys.push(String(name));\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tif (hasDontEnumBug) {\n\t\t\tvar skipConstructor = equalsConstructorPrototypeIfNotBuggy(object);\n\n\t\t\tfor (var k = 0; k < dontEnums.length; ++k) {\n\t\t\t\tif (!(skipConstructor && dontEnums[k] === 'constructor') && has.call(object, dontEnums[k])) {\n\t\t\t\t\ttheKeys.push(dontEnums[k]);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\treturn theKeys;\n\t};\n}\nmodule.exports = keysShim;\n","'use strict';\n\nvar slice = Array.prototype.slice;\nvar isArgs = require('./isArguments');\n\nvar origKeys = Object.keys;\nvar keysShim = origKeys ? function keys(o) { return origKeys(o); } : require('./implementation');\n\nvar originalKeys = Object.keys;\n\nkeysShim.shim = function shimObjectKeys() {\n\tif (Object.keys) {\n\t\tvar keysWorksWithArguments = (function () {\n\t\t\t// Safari 5.0 bug\n\t\t\tvar args = Object.keys(arguments);\n\t\t\treturn args && args.length === arguments.length;\n\t\t}(1, 2));\n\t\tif (!keysWorksWithArguments) {\n\t\t\tObject.keys = function keys(object) { // eslint-disable-line func-name-matching\n\t\t\t\tif (isArgs(object)) {\n\t\t\t\t\treturn originalKeys(slice.call(object));\n\t\t\t\t}\n\t\t\t\treturn originalKeys(object);\n\t\t\t};\n\t\t}\n\t} else {\n\t\tObject.keys = keysShim;\n\t}\n\treturn Object.keys || keysShim;\n};\n\nmodule.exports = keysShim;\n","'use strict';\n\nvar toStr = Object.prototype.toString;\n\nmodule.exports = function isArguments(value) {\n\tvar str = toStr.call(value);\n\tvar isArgs = str === '[object Arguments]';\n\tif (!isArgs) {\n\t\tisArgs = str !== '[object Array]' &&\n\t\t\tvalue !== null &&\n\t\t\ttypeof value === 'object' &&\n\t\t\ttypeof value.length === 'number' &&\n\t\t\tvalue.length >= 0 &&\n\t\t\ttoStr.call(value.callee) === '[object Function]';\n\t}\n\treturn isArgs;\n};\n","module.exports = function pointInPolygonFlat (point, vs, start, end) {\n var x = point[0], y = point[1];\n var inside = false;\n if (start === undefined) start = 0;\n if (end === undefined) end = vs.length;\n var len = (end-start)/2;\n for (var i = 0, j = len - 1; i < len; j = i++) {\n var xi = vs[start+i*2+0], yi = vs[start+i*2+1];\n var xj = vs[start+j*2+0], yj = vs[start+j*2+1];\n var intersect = ((yi > y) !== (yj > y))\n && (x < (xj - xi) * (y - yi) / (yj - yi) + xi);\n if (intersect) inside = !inside;\n }\n return inside;\n};\n","var pointInPolygonFlat = require('./flat.js')\nvar pointInPolygonNested = require('./nested.js')\n\nmodule.exports = function pointInPolygon (point, vs, start, end) {\n if (vs.length > 0 && Array.isArray(vs[0])) {\n return pointInPolygonNested(point, vs, start, end);\n } else {\n return pointInPolygonFlat(point, vs, start, end);\n }\n}\nmodule.exports.nested = pointInPolygonNested\nmodule.exports.flat = pointInPolygonFlat\n","// ray-casting algorithm based on\n// https://wrf.ecse.rpi.edu/Research/Short_Notes/pnpoly.html\n\nmodule.exports = function pointInPolygonNested (point, vs, start, end) {\n var x = point[0], y = point[1];\n var inside = false;\n if (start === undefined) start = 0;\n if (end === undefined) end = vs.length;\n var len = end - start;\n for (var i = 0, j = len - 1; i < len; j = i++) {\n var xi = vs[i+start][0], yi = vs[i+start][1];\n var xj = vs[j+start][0], yj = vs[j+start][1];\n var intersect = ((yi > y) !== (yj > y))\n && (x < (xj - xi) * (y - yi) / (yj - yi) + xi);\n if (intersect) inside = !inside;\n }\n return inside;\n};\n","(function (global, factory) {\n typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory() :\n typeof define === 'function' && define.amd ? define(factory) :\n (global = typeof globalThis !== 'undefined' ? globalThis : global || self, global.polygonClipping = factory());\n}(this, (function () { 'use strict';\n\n function _classCallCheck(instance, Constructor) {\n if (!(instance instanceof Constructor)) {\n throw new TypeError(\"Cannot call a class as a function\");\n }\n }\n\n function _defineProperties(target, props) {\n for (var i = 0; i < props.length; i++) {\n var descriptor = props[i];\n descriptor.enumerable = descriptor.enumerable || false;\n descriptor.configurable = true;\n if (\"value\" in descriptor) descriptor.writable = true;\n Object.defineProperty(target, descriptor.key, descriptor);\n }\n }\n\n function _createClass(Constructor, protoProps, staticProps) {\n if (protoProps) _defineProperties(Constructor.prototype, protoProps);\n if (staticProps) _defineProperties(Constructor, staticProps);\n return Constructor;\n }\n\n /**\n * splaytree v3.1.0\n * Fast Splay tree for Node and browser\n *\n * @author Alexander Milevski \n * @license MIT\n * @preserve\n */\n var Node =\n /** @class */\n function () {\n function Node(key, data) {\n this.next = null;\n this.key = key;\n this.data = data;\n this.left = null;\n this.right = null;\n }\n\n return Node;\n }();\n /* follows \"An implementation of top-down splaying\"\r\n * by D. Sleator March 1992\r\n */\n\n\n function DEFAULT_COMPARE(a, b) {\n return a > b ? 1 : a < b ? -1 : 0;\n }\n /**\r\n * Simple top down splay, not requiring i to be in the tree t.\r\n */\n\n\n function splay(i, t, comparator) {\n var N = new Node(null, null);\n var l = N;\n var r = N;\n\n while (true) {\n var cmp = comparator(i, t.key); //if (i < t.key) {\n\n if (cmp < 0) {\n if (t.left === null) break; //if (i < t.left.key) {\n\n if (comparator(i, t.left.key) < 0) {\n var y = t.left;\n /* rotate right */\n\n t.left = y.right;\n y.right = t;\n t = y;\n if (t.left === null) break;\n }\n\n r.left = t;\n /* link right */\n\n r = t;\n t = t.left; //} else if (i > t.key) {\n } else if (cmp > 0) {\n if (t.right === null) break; //if (i > t.right.key) {\n\n if (comparator(i, t.right.key) > 0) {\n var y = t.right;\n /* rotate left */\n\n t.right = y.left;\n y.left = t;\n t = y;\n if (t.right === null) break;\n }\n\n l.right = t;\n /* link left */\n\n l = t;\n t = t.right;\n } else break;\n }\n /* assemble */\n\n\n l.right = t.left;\n r.left = t.right;\n t.left = N.right;\n t.right = N.left;\n return t;\n }\n\n function insert(i, data, t, comparator) {\n var node = new Node(i, data);\n\n if (t === null) {\n node.left = node.right = null;\n return node;\n }\n\n t = splay(i, t, comparator);\n var cmp = comparator(i, t.key);\n\n if (cmp < 0) {\n node.left = t.left;\n node.right = t;\n t.left = null;\n } else if (cmp >= 0) {\n node.right = t.right;\n node.left = t;\n t.right = null;\n }\n\n return node;\n }\n\n function split(key, v, comparator) {\n var left = null;\n var right = null;\n\n if (v) {\n v = splay(key, v, comparator);\n var cmp = comparator(v.key, key);\n\n if (cmp === 0) {\n left = v.left;\n right = v.right;\n } else if (cmp < 0) {\n right = v.right;\n v.right = null;\n left = v;\n } else {\n left = v.left;\n v.left = null;\n right = v;\n }\n }\n\n return {\n left: left,\n right: right\n };\n }\n\n function merge(left, right, comparator) {\n if (right === null) return left;\n if (left === null) return right;\n right = splay(left.key, right, comparator);\n right.left = left;\n return right;\n }\n /**\r\n * Prints level of the tree\r\n */\n\n\n function printRow(root, prefix, isTail, out, printNode) {\n if (root) {\n out(\"\" + prefix + (isTail ? '└── ' : '├── ') + printNode(root) + \"\\n\");\n var indent = prefix + (isTail ? ' ' : '│ ');\n if (root.left) printRow(root.left, indent, false, out, printNode);\n if (root.right) printRow(root.right, indent, true, out, printNode);\n }\n }\n\n var Tree =\n /** @class */\n function () {\n function Tree(comparator) {\n if (comparator === void 0) {\n comparator = DEFAULT_COMPARE;\n }\n\n this._root = null;\n this._size = 0;\n this._comparator = comparator;\n }\n /**\r\n * Inserts a key, allows duplicates\r\n */\n\n\n Tree.prototype.insert = function (key, data) {\n this._size++;\n return this._root = insert(key, data, this._root, this._comparator);\n };\n /**\r\n * Adds a key, if it is not present in the tree\r\n */\n\n\n Tree.prototype.add = function (key, data) {\n var node = new Node(key, data);\n\n if (this._root === null) {\n node.left = node.right = null;\n this._size++;\n this._root = node;\n }\n\n var comparator = this._comparator;\n var t = splay(key, this._root, comparator);\n var cmp = comparator(key, t.key);\n if (cmp === 0) this._root = t;else {\n if (cmp < 0) {\n node.left = t.left;\n node.right = t;\n t.left = null;\n } else if (cmp > 0) {\n node.right = t.right;\n node.left = t;\n t.right = null;\n }\n\n this._size++;\n this._root = node;\n }\n return this._root;\n };\n /**\r\n * @param {Key} key\r\n * @return {Node|null}\r\n */\n\n\n Tree.prototype.remove = function (key) {\n this._root = this._remove(key, this._root, this._comparator);\n };\n /**\r\n * Deletes i from the tree if it's there\r\n */\n\n\n Tree.prototype._remove = function (i, t, comparator) {\n var x;\n if (t === null) return null;\n t = splay(i, t, comparator);\n var cmp = comparator(i, t.key);\n\n if (cmp === 0) {\n /* found it */\n if (t.left === null) {\n x = t.right;\n } else {\n x = splay(i, t.left, comparator);\n x.right = t.right;\n }\n\n this._size--;\n return x;\n }\n\n return t;\n /* It wasn't there */\n };\n /**\r\n * Removes and returns the node with smallest key\r\n */\n\n\n Tree.prototype.pop = function () {\n var node = this._root;\n\n if (node) {\n while (node.left) {\n node = node.left;\n }\n\n this._root = splay(node.key, this._root, this._comparator);\n this._root = this._remove(node.key, this._root, this._comparator);\n return {\n key: node.key,\n data: node.data\n };\n }\n\n return null;\n };\n /**\r\n * Find without splaying\r\n */\n\n\n Tree.prototype.findStatic = function (key) {\n var current = this._root;\n var compare = this._comparator;\n\n while (current) {\n var cmp = compare(key, current.key);\n if (cmp === 0) return current;else if (cmp < 0) current = current.left;else current = current.right;\n }\n\n return null;\n };\n\n Tree.prototype.find = function (key) {\n if (this._root) {\n this._root = splay(key, this._root, this._comparator);\n if (this._comparator(key, this._root.key) !== 0) return null;\n }\n\n return this._root;\n };\n\n Tree.prototype.contains = function (key) {\n var current = this._root;\n var compare = this._comparator;\n\n while (current) {\n var cmp = compare(key, current.key);\n if (cmp === 0) return true;else if (cmp < 0) current = current.left;else current = current.right;\n }\n\n return false;\n };\n\n Tree.prototype.forEach = function (visitor, ctx) {\n var current = this._root;\n var Q = [];\n /* Initialize stack s */\n\n var done = false;\n\n while (!done) {\n if (current !== null) {\n Q.push(current);\n current = current.left;\n } else {\n if (Q.length !== 0) {\n current = Q.pop();\n visitor.call(ctx, current);\n current = current.right;\n } else done = true;\n }\n }\n\n return this;\n };\n /**\r\n * Walk key range from `low` to `high`. Stops if `fn` returns a value.\r\n */\n\n\n Tree.prototype.range = function (low, high, fn, ctx) {\n var Q = [];\n var compare = this._comparator;\n var node = this._root;\n var cmp;\n\n while (Q.length !== 0 || node) {\n if (node) {\n Q.push(node);\n node = node.left;\n } else {\n node = Q.pop();\n cmp = compare(node.key, high);\n\n if (cmp > 0) {\n break;\n } else if (compare(node.key, low) >= 0) {\n if (fn.call(ctx, node)) return this; // stop if smth is returned\n }\n\n node = node.right;\n }\n }\n\n return this;\n };\n /**\r\n * Returns array of keys\r\n */\n\n\n Tree.prototype.keys = function () {\n var keys = [];\n this.forEach(function (_a) {\n var key = _a.key;\n return keys.push(key);\n });\n return keys;\n };\n /**\r\n * Returns array of all the data in the nodes\r\n */\n\n\n Tree.prototype.values = function () {\n var values = [];\n this.forEach(function (_a) {\n var data = _a.data;\n return values.push(data);\n });\n return values;\n };\n\n Tree.prototype.min = function () {\n if (this._root) return this.minNode(this._root).key;\n return null;\n };\n\n Tree.prototype.max = function () {\n if (this._root) return this.maxNode(this._root).key;\n return null;\n };\n\n Tree.prototype.minNode = function (t) {\n if (t === void 0) {\n t = this._root;\n }\n\n if (t) while (t.left) {\n t = t.left;\n }\n return t;\n };\n\n Tree.prototype.maxNode = function (t) {\n if (t === void 0) {\n t = this._root;\n }\n\n if (t) while (t.right) {\n t = t.right;\n }\n return t;\n };\n /**\r\n * Returns node at given index\r\n */\n\n\n Tree.prototype.at = function (index) {\n var current = this._root;\n var done = false;\n var i = 0;\n var Q = [];\n\n while (!done) {\n if (current) {\n Q.push(current);\n current = current.left;\n } else {\n if (Q.length > 0) {\n current = Q.pop();\n if (i === index) return current;\n i++;\n current = current.right;\n } else done = true;\n }\n }\n\n return null;\n };\n\n Tree.prototype.next = function (d) {\n var root = this._root;\n var successor = null;\n\n if (d.right) {\n successor = d.right;\n\n while (successor.left) {\n successor = successor.left;\n }\n\n return successor;\n }\n\n var comparator = this._comparator;\n\n while (root) {\n var cmp = comparator(d.key, root.key);\n if (cmp === 0) break;else if (cmp < 0) {\n successor = root;\n root = root.left;\n } else root = root.right;\n }\n\n return successor;\n };\n\n Tree.prototype.prev = function (d) {\n var root = this._root;\n var predecessor = null;\n\n if (d.left !== null) {\n predecessor = d.left;\n\n while (predecessor.right) {\n predecessor = predecessor.right;\n }\n\n return predecessor;\n }\n\n var comparator = this._comparator;\n\n while (root) {\n var cmp = comparator(d.key, root.key);\n if (cmp === 0) break;else if (cmp < 0) root = root.left;else {\n predecessor = root;\n root = root.right;\n }\n }\n\n return predecessor;\n };\n\n Tree.prototype.clear = function () {\n this._root = null;\n this._size = 0;\n return this;\n };\n\n Tree.prototype.toList = function () {\n return toList(this._root);\n };\n /**\r\n * Bulk-load items. Both array have to be same size\r\n */\n\n\n Tree.prototype.load = function (keys, values, presort) {\n if (values === void 0) {\n values = [];\n }\n\n if (presort === void 0) {\n presort = false;\n }\n\n var size = keys.length;\n var comparator = this._comparator; // sort if needed\n\n if (presort) sort(keys, values, 0, size - 1, comparator);\n\n if (this._root === null) {\n // empty tree\n this._root = loadRecursive(keys, values, 0, size);\n this._size = size;\n } else {\n // that re-builds the whole tree from two in-order traversals\n var mergedList = mergeLists(this.toList(), createList(keys, values), comparator);\n size = this._size + size;\n this._root = sortedListToBST({\n head: mergedList\n }, 0, size);\n }\n\n return this;\n };\n\n Tree.prototype.isEmpty = function () {\n return this._root === null;\n };\n\n Object.defineProperty(Tree.prototype, \"size\", {\n get: function get() {\n return this._size;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(Tree.prototype, \"root\", {\n get: function get() {\n return this._root;\n },\n enumerable: true,\n configurable: true\n });\n\n Tree.prototype.toString = function (printNode) {\n if (printNode === void 0) {\n printNode = function printNode(n) {\n return String(n.key);\n };\n }\n\n var out = [];\n printRow(this._root, '', true, function (v) {\n return out.push(v);\n }, printNode);\n return out.join('');\n };\n\n Tree.prototype.update = function (key, newKey, newData) {\n var comparator = this._comparator;\n\n var _a = split(key, this._root, comparator),\n left = _a.left,\n right = _a.right;\n\n if (comparator(key, newKey) < 0) {\n right = insert(newKey, newData, right, comparator);\n } else {\n left = insert(newKey, newData, left, comparator);\n }\n\n this._root = merge(left, right, comparator);\n };\n\n Tree.prototype.split = function (key) {\n return split(key, this._root, this._comparator);\n };\n\n return Tree;\n }();\n\n function loadRecursive(keys, values, start, end) {\n var size = end - start;\n\n if (size > 0) {\n var middle = start + Math.floor(size / 2);\n var key = keys[middle];\n var data = values[middle];\n var node = new Node(key, data);\n node.left = loadRecursive(keys, values, start, middle);\n node.right = loadRecursive(keys, values, middle + 1, end);\n return node;\n }\n\n return null;\n }\n\n function createList(keys, values) {\n var head = new Node(null, null);\n var p = head;\n\n for (var i = 0; i < keys.length; i++) {\n p = p.next = new Node(keys[i], values[i]);\n }\n\n p.next = null;\n return head.next;\n }\n\n function toList(root) {\n var current = root;\n var Q = [];\n var done = false;\n var head = new Node(null, null);\n var p = head;\n\n while (!done) {\n if (current) {\n Q.push(current);\n current = current.left;\n } else {\n if (Q.length > 0) {\n current = p = p.next = Q.pop();\n current = current.right;\n } else done = true;\n }\n }\n\n p.next = null; // that'll work even if the tree was empty\n\n return head.next;\n }\n\n function sortedListToBST(list, start, end) {\n var size = end - start;\n\n if (size > 0) {\n var middle = start + Math.floor(size / 2);\n var left = sortedListToBST(list, start, middle);\n var root = list.head;\n root.left = left;\n list.head = list.head.next;\n root.right = sortedListToBST(list, middle + 1, end);\n return root;\n }\n\n return null;\n }\n\n function mergeLists(l1, l2, compare) {\n var head = new Node(null, null); // dummy\n\n var p = head;\n var p1 = l1;\n var p2 = l2;\n\n while (p1 !== null && p2 !== null) {\n if (compare(p1.key, p2.key) < 0) {\n p.next = p1;\n p1 = p1.next;\n } else {\n p.next = p2;\n p2 = p2.next;\n }\n\n p = p.next;\n }\n\n if (p1 !== null) {\n p.next = p1;\n } else if (p2 !== null) {\n p.next = p2;\n }\n\n return head.next;\n }\n\n function sort(keys, values, left, right, compare) {\n if (left >= right) return;\n var pivot = keys[left + right >> 1];\n var i = left - 1;\n var j = right + 1;\n\n while (true) {\n do {\n i++;\n } while (compare(keys[i], pivot) < 0);\n\n do {\n j--;\n } while (compare(keys[j], pivot) > 0);\n\n if (i >= j) break;\n var tmp = keys[i];\n keys[i] = keys[j];\n keys[j] = tmp;\n tmp = values[i];\n values[i] = values[j];\n values[j] = tmp;\n }\n\n sort(keys, values, left, j, compare);\n sort(keys, values, j + 1, right, compare);\n }\n\n /**\n * A bounding box has the format:\n *\n * { ll: { x: xmin, y: ymin }, ur: { x: xmax, y: ymax } }\n *\n */\n var isInBbox = function isInBbox(bbox, point) {\n return bbox.ll.x <= point.x && point.x <= bbox.ur.x && bbox.ll.y <= point.y && point.y <= bbox.ur.y;\n };\n /* Returns either null, or a bbox (aka an ordered pair of points)\n * If there is only one point of overlap, a bbox with identical points\n * will be returned */\n\n var getBboxOverlap = function getBboxOverlap(b1, b2) {\n // check if the bboxes overlap at all\n if (b2.ur.x < b1.ll.x || b1.ur.x < b2.ll.x || b2.ur.y < b1.ll.y || b1.ur.y < b2.ll.y) return null; // find the middle two X values\n\n var lowerX = b1.ll.x < b2.ll.x ? b2.ll.x : b1.ll.x;\n var upperX = b1.ur.x < b2.ur.x ? b1.ur.x : b2.ur.x; // find the middle two Y values\n\n var lowerY = b1.ll.y < b2.ll.y ? b2.ll.y : b1.ll.y;\n var upperY = b1.ur.y < b2.ur.y ? b1.ur.y : b2.ur.y; // put those middle values together to get the overlap\n\n return {\n ll: {\n x: lowerX,\n y: lowerY\n },\n ur: {\n x: upperX,\n y: upperY\n }\n };\n };\n\n /* Javascript doesn't do integer math. Everything is\n * floating point with percision Number.EPSILON.\n *\n * https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Number/EPSILON\n */\n var epsilon = Number.EPSILON; // IE Polyfill\n\n if (epsilon === undefined) epsilon = Math.pow(2, -52);\n var EPSILON_SQ = epsilon * epsilon;\n /* FLP comparator */\n\n var cmp = function cmp(a, b) {\n // check if they're both 0\n if (-epsilon < a && a < epsilon) {\n if (-epsilon < b && b < epsilon) {\n return 0;\n }\n } // check if they're flp equal\n\n\n var ab = a - b;\n\n if (ab * ab < EPSILON_SQ * a * b) {\n return 0;\n } // normal comparison\n\n\n return a < b ? -1 : 1;\n };\n\n /**\n * This class rounds incoming values sufficiently so that\n * floating points problems are, for the most part, avoided.\n *\n * Incoming points are have their x & y values tested against\n * all previously seen x & y values. If either is 'too close'\n * to a previously seen value, it's value is 'snapped' to the\n * previously seen value.\n *\n * All points should be rounded by this class before being\n * stored in any data structures in the rest of this algorithm.\n */\n\n var PtRounder = /*#__PURE__*/function () {\n function PtRounder() {\n _classCallCheck(this, PtRounder);\n\n this.reset();\n }\n\n _createClass(PtRounder, [{\n key: \"reset\",\n value: function reset() {\n this.xRounder = new CoordRounder();\n this.yRounder = new CoordRounder();\n }\n }, {\n key: \"round\",\n value: function round(x, y) {\n return {\n x: this.xRounder.round(x),\n y: this.yRounder.round(y)\n };\n }\n }]);\n\n return PtRounder;\n }();\n\n var CoordRounder = /*#__PURE__*/function () {\n function CoordRounder() {\n _classCallCheck(this, CoordRounder);\n\n this.tree = new Tree(); // preseed with 0 so we don't end up with values < Number.EPSILON\n\n this.round(0);\n } // Note: this can rounds input values backwards or forwards.\n // You might ask, why not restrict this to just rounding\n // forwards? Wouldn't that allow left endpoints to always\n // remain left endpoints during splitting (never change to\n // right). No - it wouldn't, because we snap intersections\n // to endpoints (to establish independence from the segment\n // angle for t-intersections).\n\n\n _createClass(CoordRounder, [{\n key: \"round\",\n value: function round(coord) {\n var node = this.tree.add(coord);\n var prevNode = this.tree.prev(node);\n\n if (prevNode !== null && cmp(node.key, prevNode.key) === 0) {\n this.tree.remove(coord);\n return prevNode.key;\n }\n\n var nextNode = this.tree.next(node);\n\n if (nextNode !== null && cmp(node.key, nextNode.key) === 0) {\n this.tree.remove(coord);\n return nextNode.key;\n }\n\n return coord;\n }\n }]);\n\n return CoordRounder;\n }(); // singleton available by import\n\n\n var rounder = new PtRounder();\n\n /* Cross Product of two vectors with first point at origin */\n\n var crossProduct = function crossProduct(a, b) {\n return a.x * b.y - a.y * b.x;\n };\n /* Dot Product of two vectors with first point at origin */\n\n var dotProduct = function dotProduct(a, b) {\n return a.x * b.x + a.y * b.y;\n };\n /* Comparator for two vectors with same starting point */\n\n var compareVectorAngles = function compareVectorAngles(basePt, endPt1, endPt2) {\n var v1 = {\n x: endPt1.x - basePt.x,\n y: endPt1.y - basePt.y\n };\n var v2 = {\n x: endPt2.x - basePt.x,\n y: endPt2.y - basePt.y\n };\n var kross = crossProduct(v1, v2);\n return cmp(kross, 0);\n };\n var length = function length(v) {\n return Math.sqrt(dotProduct(v, v));\n };\n /* Get the sine of the angle from pShared -> pAngle to pShaed -> pBase */\n\n var sineOfAngle = function sineOfAngle(pShared, pBase, pAngle) {\n var vBase = {\n x: pBase.x - pShared.x,\n y: pBase.y - pShared.y\n };\n var vAngle = {\n x: pAngle.x - pShared.x,\n y: pAngle.y - pShared.y\n };\n return crossProduct(vAngle, vBase) / length(vAngle) / length(vBase);\n };\n /* Get the cosine of the angle from pShared -> pAngle to pShaed -> pBase */\n\n var cosineOfAngle = function cosineOfAngle(pShared, pBase, pAngle) {\n var vBase = {\n x: pBase.x - pShared.x,\n y: pBase.y - pShared.y\n };\n var vAngle = {\n x: pAngle.x - pShared.x,\n y: pAngle.y - pShared.y\n };\n return dotProduct(vAngle, vBase) / length(vAngle) / length(vBase);\n };\n /* Get the x coordinate where the given line (defined by a point and vector)\n * crosses the horizontal line with the given y coordiante.\n * In the case of parrallel lines (including overlapping ones) returns null. */\n\n var horizontalIntersection = function horizontalIntersection(pt, v, y) {\n if (v.y === 0) return null;\n return {\n x: pt.x + v.x / v.y * (y - pt.y),\n y: y\n };\n };\n /* Get the y coordinate where the given line (defined by a point and vector)\n * crosses the vertical line with the given x coordiante.\n * In the case of parrallel lines (including overlapping ones) returns null. */\n\n var verticalIntersection = function verticalIntersection(pt, v, x) {\n if (v.x === 0) return null;\n return {\n x: x,\n y: pt.y + v.y / v.x * (x - pt.x)\n };\n };\n /* Get the intersection of two lines, each defined by a base point and a vector.\n * In the case of parrallel lines (including overlapping ones) returns null. */\n\n var intersection = function intersection(pt1, v1, pt2, v2) {\n // take some shortcuts for vertical and horizontal lines\n // this also ensures we don't calculate an intersection and then discover\n // it's actually outside the bounding box of the line\n if (v1.x === 0) return verticalIntersection(pt2, v2, pt1.x);\n if (v2.x === 0) return verticalIntersection(pt1, v1, pt2.x);\n if (v1.y === 0) return horizontalIntersection(pt2, v2, pt1.y);\n if (v2.y === 0) return horizontalIntersection(pt1, v1, pt2.y); // General case for non-overlapping segments.\n // This algorithm is based on Schneider and Eberly.\n // http://www.cimec.org.ar/~ncalvo/Schneider_Eberly.pdf - pg 244\n\n var kross = crossProduct(v1, v2);\n if (kross == 0) return null;\n var ve = {\n x: pt2.x - pt1.x,\n y: pt2.y - pt1.y\n };\n var d1 = crossProduct(ve, v1) / kross;\n var d2 = crossProduct(ve, v2) / kross; // take the average of the two calculations to minimize rounding error\n\n var x1 = pt1.x + d2 * v1.x,\n x2 = pt2.x + d1 * v2.x;\n var y1 = pt1.y + d2 * v1.y,\n y2 = pt2.y + d1 * v2.y;\n var x = (x1 + x2) / 2;\n var y = (y1 + y2) / 2;\n return {\n x: x,\n y: y\n };\n };\n\n var SweepEvent = /*#__PURE__*/function () {\n _createClass(SweepEvent, null, [{\n key: \"compare\",\n // for ordering sweep events in the sweep event queue\n value: function compare(a, b) {\n // favor event with a point that the sweep line hits first\n var ptCmp = SweepEvent.comparePoints(a.point, b.point);\n if (ptCmp !== 0) return ptCmp; // the points are the same, so link them if needed\n\n if (a.point !== b.point) a.link(b); // favor right events over left\n\n if (a.isLeft !== b.isLeft) return a.isLeft ? 1 : -1; // we have two matching left or right endpoints\n // ordering of this case is the same as for their segments\n\n return Segment.compare(a.segment, b.segment);\n } // for ordering points in sweep line order\n\n }, {\n key: \"comparePoints\",\n value: function comparePoints(aPt, bPt) {\n if (aPt.x < bPt.x) return -1;\n if (aPt.x > bPt.x) return 1;\n if (aPt.y < bPt.y) return -1;\n if (aPt.y > bPt.y) return 1;\n return 0;\n } // Warning: 'point' input will be modified and re-used (for performance)\n\n }]);\n\n function SweepEvent(point, isLeft) {\n _classCallCheck(this, SweepEvent);\n\n if (point.events === undefined) point.events = [this];else point.events.push(this);\n this.point = point;\n this.isLeft = isLeft; // this.segment, this.otherSE set by factory\n }\n\n _createClass(SweepEvent, [{\n key: \"link\",\n value: function link(other) {\n if (other.point === this.point) {\n throw new Error('Tried to link already linked events');\n }\n\n var otherEvents = other.point.events;\n\n for (var i = 0, iMax = otherEvents.length; i < iMax; i++) {\n var evt = otherEvents[i];\n this.point.events.push(evt);\n evt.point = this.point;\n }\n\n this.checkForConsuming();\n }\n /* Do a pass over our linked events and check to see if any pair\n * of segments match, and should be consumed. */\n\n }, {\n key: \"checkForConsuming\",\n value: function checkForConsuming() {\n // FIXME: The loops in this method run O(n^2) => no good.\n // Maintain little ordered sweep event trees?\n // Can we maintaining an ordering that avoids the need\n // for the re-sorting with getLeftmostComparator in geom-out?\n // Compare each pair of events to see if other events also match\n var numEvents = this.point.events.length;\n\n for (var i = 0; i < numEvents; i++) {\n var evt1 = this.point.events[i];\n if (evt1.segment.consumedBy !== undefined) continue;\n\n for (var j = i + 1; j < numEvents; j++) {\n var evt2 = this.point.events[j];\n if (evt2.consumedBy !== undefined) continue;\n if (evt1.otherSE.point.events !== evt2.otherSE.point.events) continue;\n evt1.segment.consume(evt2.segment);\n }\n }\n }\n }, {\n key: \"getAvailableLinkedEvents\",\n value: function getAvailableLinkedEvents() {\n // point.events is always of length 2 or greater\n var events = [];\n\n for (var i = 0, iMax = this.point.events.length; i < iMax; i++) {\n var evt = this.point.events[i];\n\n if (evt !== this && !evt.segment.ringOut && evt.segment.isInResult()) {\n events.push(evt);\n }\n }\n\n return events;\n }\n /**\n * Returns a comparator function for sorting linked events that will\n * favor the event that will give us the smallest left-side angle.\n * All ring construction starts as low as possible heading to the right,\n * so by always turning left as sharp as possible we'll get polygons\n * without uncessary loops & holes.\n *\n * The comparator function has a compute cache such that it avoids\n * re-computing already-computed values.\n */\n\n }, {\n key: \"getLeftmostComparator\",\n value: function getLeftmostComparator(baseEvent) {\n var _this = this;\n\n var cache = new Map();\n\n var fillCache = function fillCache(linkedEvent) {\n var nextEvent = linkedEvent.otherSE;\n cache.set(linkedEvent, {\n sine: sineOfAngle(_this.point, baseEvent.point, nextEvent.point),\n cosine: cosineOfAngle(_this.point, baseEvent.point, nextEvent.point)\n });\n };\n\n return function (a, b) {\n if (!cache.has(a)) fillCache(a);\n if (!cache.has(b)) fillCache(b);\n\n var _cache$get = cache.get(a),\n asine = _cache$get.sine,\n acosine = _cache$get.cosine;\n\n var _cache$get2 = cache.get(b),\n bsine = _cache$get2.sine,\n bcosine = _cache$get2.cosine; // both on or above x-axis\n\n\n if (asine >= 0 && bsine >= 0) {\n if (acosine < bcosine) return 1;\n if (acosine > bcosine) return -1;\n return 0;\n } // both below x-axis\n\n\n if (asine < 0 && bsine < 0) {\n if (acosine < bcosine) return -1;\n if (acosine > bcosine) return 1;\n return 0;\n } // one above x-axis, one below\n\n\n if (bsine < asine) return -1;\n if (bsine > asine) return 1;\n return 0;\n };\n }\n }]);\n\n return SweepEvent;\n }();\n\n // segments and sweep events when all else is identical\n\n var segmentId = 0;\n\n var Segment = /*#__PURE__*/function () {\n _createClass(Segment, null, [{\n key: \"compare\",\n\n /* This compare() function is for ordering segments in the sweep\n * line tree, and does so according to the following criteria:\n *\n * Consider the vertical line that lies an infinestimal step to the\n * right of the right-more of the two left endpoints of the input\n * segments. Imagine slowly moving a point up from negative infinity\n * in the increasing y direction. Which of the two segments will that\n * point intersect first? That segment comes 'before' the other one.\n *\n * If neither segment would be intersected by such a line, (if one\n * or more of the segments are vertical) then the line to be considered\n * is directly on the right-more of the two left inputs.\n */\n value: function compare(a, b) {\n var alx = a.leftSE.point.x;\n var blx = b.leftSE.point.x;\n var arx = a.rightSE.point.x;\n var brx = b.rightSE.point.x; // check if they're even in the same vertical plane\n\n if (brx < alx) return 1;\n if (arx < blx) return -1;\n var aly = a.leftSE.point.y;\n var bly = b.leftSE.point.y;\n var ary = a.rightSE.point.y;\n var bry = b.rightSE.point.y; // is left endpoint of segment B the right-more?\n\n if (alx < blx) {\n // are the two segments in the same horizontal plane?\n if (bly < aly && bly < ary) return 1;\n if (bly > aly && bly > ary) return -1; // is the B left endpoint colinear to segment A?\n\n var aCmpBLeft = a.comparePoint(b.leftSE.point);\n if (aCmpBLeft < 0) return 1;\n if (aCmpBLeft > 0) return -1; // is the A right endpoint colinear to segment B ?\n\n var bCmpARight = b.comparePoint(a.rightSE.point);\n if (bCmpARight !== 0) return bCmpARight; // colinear segments, consider the one with left-more\n // left endpoint to be first (arbitrary?)\n\n return -1;\n } // is left endpoint of segment A the right-more?\n\n\n if (alx > blx) {\n if (aly < bly && aly < bry) return -1;\n if (aly > bly && aly > bry) return 1; // is the A left endpoint colinear to segment B?\n\n var bCmpALeft = b.comparePoint(a.leftSE.point);\n if (bCmpALeft !== 0) return bCmpALeft; // is the B right endpoint colinear to segment A?\n\n var aCmpBRight = a.comparePoint(b.rightSE.point);\n if (aCmpBRight < 0) return 1;\n if (aCmpBRight > 0) return -1; // colinear segments, consider the one with left-more\n // left endpoint to be first (arbitrary?)\n\n return 1;\n } // if we get here, the two left endpoints are in the same\n // vertical plane, ie alx === blx\n // consider the lower left-endpoint to come first\n\n\n if (aly < bly) return -1;\n if (aly > bly) return 1; // left endpoints are identical\n // check for colinearity by using the left-more right endpoint\n // is the A right endpoint more left-more?\n\n if (arx < brx) {\n var _bCmpARight = b.comparePoint(a.rightSE.point);\n\n if (_bCmpARight !== 0) return _bCmpARight;\n } // is the B right endpoint more left-more?\n\n\n if (arx > brx) {\n var _aCmpBRight = a.comparePoint(b.rightSE.point);\n\n if (_aCmpBRight < 0) return 1;\n if (_aCmpBRight > 0) return -1;\n }\n\n if (arx !== brx) {\n // are these two [almost] vertical segments with opposite orientation?\n // if so, the one with the lower right endpoint comes first\n var ay = ary - aly;\n var ax = arx - alx;\n var by = bry - bly;\n var bx = brx - blx;\n if (ay > ax && by < bx) return 1;\n if (ay < ax && by > bx) return -1;\n } // we have colinear segments with matching orientation\n // consider the one with more left-more right endpoint to be first\n\n\n if (arx > brx) return 1;\n if (arx < brx) return -1; // if we get here, two two right endpoints are in the same\n // vertical plane, ie arx === brx\n // consider the lower right-endpoint to come first\n\n if (ary < bry) return -1;\n if (ary > bry) return 1; // right endpoints identical as well, so the segments are idential\n // fall back on creation order as consistent tie-breaker\n\n if (a.id < b.id) return -1;\n if (a.id > b.id) return 1; // identical segment, ie a === b\n\n return 0;\n }\n /* Warning: a reference to ringWindings input will be stored,\n * and possibly will be later modified */\n\n }]);\n\n function Segment(leftSE, rightSE, rings, windings) {\n _classCallCheck(this, Segment);\n\n this.id = ++segmentId;\n this.leftSE = leftSE;\n leftSE.segment = this;\n leftSE.otherSE = rightSE;\n this.rightSE = rightSE;\n rightSE.segment = this;\n rightSE.otherSE = leftSE;\n this.rings = rings;\n this.windings = windings; // left unset for performance, set later in algorithm\n // this.ringOut, this.consumedBy, this.prev\n }\n\n _createClass(Segment, [{\n key: \"replaceRightSE\",\n\n /* When a segment is split, the rightSE is replaced with a new sweep event */\n value: function replaceRightSE(newRightSE) {\n this.rightSE = newRightSE;\n this.rightSE.segment = this;\n this.rightSE.otherSE = this.leftSE;\n this.leftSE.otherSE = this.rightSE;\n }\n }, {\n key: \"bbox\",\n value: function bbox() {\n var y1 = this.leftSE.point.y;\n var y2 = this.rightSE.point.y;\n return {\n ll: {\n x: this.leftSE.point.x,\n y: y1 < y2 ? y1 : y2\n },\n ur: {\n x: this.rightSE.point.x,\n y: y1 > y2 ? y1 : y2\n }\n };\n }\n /* A vector from the left point to the right */\n\n }, {\n key: \"vector\",\n value: function vector() {\n return {\n x: this.rightSE.point.x - this.leftSE.point.x,\n y: this.rightSE.point.y - this.leftSE.point.y\n };\n }\n }, {\n key: \"isAnEndpoint\",\n value: function isAnEndpoint(pt) {\n return pt.x === this.leftSE.point.x && pt.y === this.leftSE.point.y || pt.x === this.rightSE.point.x && pt.y === this.rightSE.point.y;\n }\n /* Compare this segment with a point.\n *\n * A point P is considered to be colinear to a segment if there\n * exists a distance D such that if we travel along the segment\n * from one * endpoint towards the other a distance D, we find\n * ourselves at point P.\n *\n * Return value indicates:\n *\n * 1: point lies above the segment (to the left of vertical)\n * 0: point is colinear to segment\n * -1: point lies below the segment (to the right of vertical)\n */\n\n }, {\n key: \"comparePoint\",\n value: function comparePoint(point) {\n if (this.isAnEndpoint(point)) return 0;\n var lPt = this.leftSE.point;\n var rPt = this.rightSE.point;\n var v = this.vector(); // Exactly vertical segments.\n\n if (lPt.x === rPt.x) {\n if (point.x === lPt.x) return 0;\n return point.x < lPt.x ? 1 : -1;\n } // Nearly vertical segments with an intersection.\n // Check to see where a point on the line with matching Y coordinate is.\n\n\n var yDist = (point.y - lPt.y) / v.y;\n var xFromYDist = lPt.x + yDist * v.x;\n if (point.x === xFromYDist) return 0; // General case.\n // Check to see where a point on the line with matching X coordinate is.\n\n var xDist = (point.x - lPt.x) / v.x;\n var yFromXDist = lPt.y + xDist * v.y;\n if (point.y === yFromXDist) return 0;\n return point.y < yFromXDist ? -1 : 1;\n }\n /**\n * Given another segment, returns the first non-trivial intersection\n * between the two segments (in terms of sweep line ordering), if it exists.\n *\n * A 'non-trivial' intersection is one that will cause one or both of the\n * segments to be split(). As such, 'trivial' vs. 'non-trivial' intersection:\n *\n * * endpoint of segA with endpoint of segB --> trivial\n * * endpoint of segA with point along segB --> non-trivial\n * * endpoint of segB with point along segA --> non-trivial\n * * point along segA with point along segB --> non-trivial\n *\n * If no non-trivial intersection exists, return null\n * Else, return null.\n */\n\n }, {\n key: \"getIntersection\",\n value: function getIntersection(other) {\n // If bboxes don't overlap, there can't be any intersections\n var tBbox = this.bbox();\n var oBbox = other.bbox();\n var bboxOverlap = getBboxOverlap(tBbox, oBbox);\n if (bboxOverlap === null) return null; // We first check to see if the endpoints can be considered intersections.\n // This will 'snap' intersections to endpoints if possible, and will\n // handle cases of colinearity.\n\n var tlp = this.leftSE.point;\n var trp = this.rightSE.point;\n var olp = other.leftSE.point;\n var orp = other.rightSE.point; // does each endpoint touch the other segment?\n // note that we restrict the 'touching' definition to only allow segments\n // to touch endpoints that lie forward from where we are in the sweep line pass\n\n var touchesOtherLSE = isInBbox(tBbox, olp) && this.comparePoint(olp) === 0;\n var touchesThisLSE = isInBbox(oBbox, tlp) && other.comparePoint(tlp) === 0;\n var touchesOtherRSE = isInBbox(tBbox, orp) && this.comparePoint(orp) === 0;\n var touchesThisRSE = isInBbox(oBbox, trp) && other.comparePoint(trp) === 0; // do left endpoints match?\n\n if (touchesThisLSE && touchesOtherLSE) {\n // these two cases are for colinear segments with matching left\n // endpoints, and one segment being longer than the other\n if (touchesThisRSE && !touchesOtherRSE) return trp;\n if (!touchesThisRSE && touchesOtherRSE) return orp; // either the two segments match exactly (two trival intersections)\n // or just on their left endpoint (one trivial intersection\n\n return null;\n } // does this left endpoint matches (other doesn't)\n\n\n if (touchesThisLSE) {\n // check for segments that just intersect on opposing endpoints\n if (touchesOtherRSE) {\n if (tlp.x === orp.x && tlp.y === orp.y) return null;\n } // t-intersection on left endpoint\n\n\n return tlp;\n } // does other left endpoint matches (this doesn't)\n\n\n if (touchesOtherLSE) {\n // check for segments that just intersect on opposing endpoints\n if (touchesThisRSE) {\n if (trp.x === olp.x && trp.y === olp.y) return null;\n } // t-intersection on left endpoint\n\n\n return olp;\n } // trivial intersection on right endpoints\n\n\n if (touchesThisRSE && touchesOtherRSE) return null; // t-intersections on just one right endpoint\n\n if (touchesThisRSE) return trp;\n if (touchesOtherRSE) return orp; // None of our endpoints intersect. Look for a general intersection between\n // infinite lines laid over the segments\n\n var pt = intersection(tlp, this.vector(), olp, other.vector()); // are the segments parrallel? Note that if they were colinear with overlap,\n // they would have an endpoint intersection and that case was already handled above\n\n if (pt === null) return null; // is the intersection found between the lines not on the segments?\n\n if (!isInBbox(bboxOverlap, pt)) return null; // round the the computed point if needed\n\n return rounder.round(pt.x, pt.y);\n }\n /**\n * Split the given segment into multiple segments on the given points.\n * * Each existing segment will retain its leftSE and a new rightSE will be\n * generated for it.\n * * A new segment will be generated which will adopt the original segment's\n * rightSE, and a new leftSE will be generated for it.\n * * If there are more than two points given to split on, new segments\n * in the middle will be generated with new leftSE and rightSE's.\n * * An array of the newly generated SweepEvents will be returned.\n *\n * Warning: input array of points is modified\n */\n\n }, {\n key: \"split\",\n value: function split(point) {\n var newEvents = [];\n var alreadyLinked = point.events !== undefined;\n var newLeftSE = new SweepEvent(point, true);\n var newRightSE = new SweepEvent(point, false);\n var oldRightSE = this.rightSE;\n this.replaceRightSE(newRightSE);\n newEvents.push(newRightSE);\n newEvents.push(newLeftSE);\n var newSeg = new Segment(newLeftSE, oldRightSE, this.rings.slice(), this.windings.slice()); // when splitting a nearly vertical downward-facing segment,\n // sometimes one of the resulting new segments is vertical, in which\n // case its left and right events may need to be swapped\n\n if (SweepEvent.comparePoints(newSeg.leftSE.point, newSeg.rightSE.point) > 0) {\n newSeg.swapEvents();\n }\n\n if (SweepEvent.comparePoints(this.leftSE.point, this.rightSE.point) > 0) {\n this.swapEvents();\n } // in the point we just used to create new sweep events with was already\n // linked to other events, we need to check if either of the affected\n // segments should be consumed\n\n\n if (alreadyLinked) {\n newLeftSE.checkForConsuming();\n newRightSE.checkForConsuming();\n }\n\n return newEvents;\n }\n /* Swap which event is left and right */\n\n }, {\n key: \"swapEvents\",\n value: function swapEvents() {\n var tmpEvt = this.rightSE;\n this.rightSE = this.leftSE;\n this.leftSE = tmpEvt;\n this.leftSE.isLeft = true;\n this.rightSE.isLeft = false;\n\n for (var i = 0, iMax = this.windings.length; i < iMax; i++) {\n this.windings[i] *= -1;\n }\n }\n /* Consume another segment. We take their rings under our wing\n * and mark them as consumed. Use for perfectly overlapping segments */\n\n }, {\n key: \"consume\",\n value: function consume(other) {\n var consumer = this;\n var consumee = other;\n\n while (consumer.consumedBy) {\n consumer = consumer.consumedBy;\n }\n\n while (consumee.consumedBy) {\n consumee = consumee.consumedBy;\n }\n\n var cmp = Segment.compare(consumer, consumee);\n if (cmp === 0) return; // already consumed\n // the winner of the consumption is the earlier segment\n // according to sweep line ordering\n\n if (cmp > 0) {\n var tmp = consumer;\n consumer = consumee;\n consumee = tmp;\n } // make sure a segment doesn't consume it's prev\n\n\n if (consumer.prev === consumee) {\n var _tmp = consumer;\n consumer = consumee;\n consumee = _tmp;\n }\n\n for (var i = 0, iMax = consumee.rings.length; i < iMax; i++) {\n var ring = consumee.rings[i];\n var winding = consumee.windings[i];\n var index = consumer.rings.indexOf(ring);\n\n if (index === -1) {\n consumer.rings.push(ring);\n consumer.windings.push(winding);\n } else consumer.windings[index] += winding;\n }\n\n consumee.rings = null;\n consumee.windings = null;\n consumee.consumedBy = consumer; // mark sweep events consumed as to maintain ordering in sweep event queue\n\n consumee.leftSE.consumedBy = consumer.leftSE;\n consumee.rightSE.consumedBy = consumer.rightSE;\n }\n /* The first segment previous segment chain that is in the result */\n\n }, {\n key: \"prevInResult\",\n value: function prevInResult() {\n if (this._prevInResult !== undefined) return this._prevInResult;\n if (!this.prev) this._prevInResult = null;else if (this.prev.isInResult()) this._prevInResult = this.prev;else this._prevInResult = this.prev.prevInResult();\n return this._prevInResult;\n }\n }, {\n key: \"beforeState\",\n value: function beforeState() {\n if (this._beforeState !== undefined) return this._beforeState;\n if (!this.prev) this._beforeState = {\n rings: [],\n windings: [],\n multiPolys: []\n };else {\n var seg = this.prev.consumedBy || this.prev;\n this._beforeState = seg.afterState();\n }\n return this._beforeState;\n }\n }, {\n key: \"afterState\",\n value: function afterState() {\n if (this._afterState !== undefined) return this._afterState;\n var beforeState = this.beforeState();\n this._afterState = {\n rings: beforeState.rings.slice(0),\n windings: beforeState.windings.slice(0),\n multiPolys: []\n };\n var ringsAfter = this._afterState.rings;\n var windingsAfter = this._afterState.windings;\n var mpsAfter = this._afterState.multiPolys; // calculate ringsAfter, windingsAfter\n\n for (var i = 0, iMax = this.rings.length; i < iMax; i++) {\n var ring = this.rings[i];\n var winding = this.windings[i];\n var index = ringsAfter.indexOf(ring);\n\n if (index === -1) {\n ringsAfter.push(ring);\n windingsAfter.push(winding);\n } else windingsAfter[index] += winding;\n } // calcualte polysAfter\n\n\n var polysAfter = [];\n var polysExclude = [];\n\n for (var _i = 0, _iMax = ringsAfter.length; _i < _iMax; _i++) {\n if (windingsAfter[_i] === 0) continue; // non-zero rule\n\n var _ring = ringsAfter[_i];\n var poly = _ring.poly;\n if (polysExclude.indexOf(poly) !== -1) continue;\n if (_ring.isExterior) polysAfter.push(poly);else {\n if (polysExclude.indexOf(poly) === -1) polysExclude.push(poly);\n\n var _index = polysAfter.indexOf(_ring.poly);\n\n if (_index !== -1) polysAfter.splice(_index, 1);\n }\n } // calculate multiPolysAfter\n\n\n for (var _i2 = 0, _iMax2 = polysAfter.length; _i2 < _iMax2; _i2++) {\n var mp = polysAfter[_i2].multiPoly;\n if (mpsAfter.indexOf(mp) === -1) mpsAfter.push(mp);\n }\n\n return this._afterState;\n }\n /* Is this segment part of the final result? */\n\n }, {\n key: \"isInResult\",\n value: function isInResult() {\n // if we've been consumed, we're not in the result\n if (this.consumedBy) return false;\n if (this._isInResult !== undefined) return this._isInResult;\n var mpsBefore = this.beforeState().multiPolys;\n var mpsAfter = this.afterState().multiPolys;\n\n switch (operation.type) {\n case 'union':\n {\n // UNION - included iff:\n // * On one side of us there is 0 poly interiors AND\n // * On the other side there is 1 or more.\n var noBefores = mpsBefore.length === 0;\n var noAfters = mpsAfter.length === 0;\n this._isInResult = noBefores !== noAfters;\n break;\n }\n\n case 'intersection':\n {\n // INTERSECTION - included iff:\n // * on one side of us all multipolys are rep. with poly interiors AND\n // * on the other side of us, not all multipolys are repsented\n // with poly interiors\n var least;\n var most;\n\n if (mpsBefore.length < mpsAfter.length) {\n least = mpsBefore.length;\n most = mpsAfter.length;\n } else {\n least = mpsAfter.length;\n most = mpsBefore.length;\n }\n\n this._isInResult = most === operation.numMultiPolys && least < most;\n break;\n }\n\n case 'xor':\n {\n // XOR - included iff:\n // * the difference between the number of multipolys represented\n // with poly interiors on our two sides is an odd number\n var diff = Math.abs(mpsBefore.length - mpsAfter.length);\n this._isInResult = diff % 2 === 1;\n break;\n }\n\n case 'difference':\n {\n // DIFFERENCE included iff:\n // * on exactly one side, we have just the subject\n var isJustSubject = function isJustSubject(mps) {\n return mps.length === 1 && mps[0].isSubject;\n };\n\n this._isInResult = isJustSubject(mpsBefore) !== isJustSubject(mpsAfter);\n break;\n }\n\n default:\n throw new Error(\"Unrecognized operation type found \".concat(operation.type));\n }\n\n return this._isInResult;\n }\n }], [{\n key: \"fromRing\",\n value: function fromRing(pt1, pt2, ring) {\n var leftPt, rightPt, winding; // ordering the two points according to sweep line ordering\n\n var cmpPts = SweepEvent.comparePoints(pt1, pt2);\n\n if (cmpPts < 0) {\n leftPt = pt1;\n rightPt = pt2;\n winding = 1;\n } else if (cmpPts > 0) {\n leftPt = pt2;\n rightPt = pt1;\n winding = -1;\n } else throw new Error(\"Tried to create degenerate segment at [\".concat(pt1.x, \", \").concat(pt1.y, \"]\"));\n\n var leftSE = new SweepEvent(leftPt, true);\n var rightSE = new SweepEvent(rightPt, false);\n return new Segment(leftSE, rightSE, [ring], [winding]);\n }\n }]);\n\n return Segment;\n }();\n\n var RingIn = /*#__PURE__*/function () {\n function RingIn(geomRing, poly, isExterior) {\n _classCallCheck(this, RingIn);\n\n if (!Array.isArray(geomRing) || geomRing.length === 0) {\n throw new Error('Input geometry is not a valid Polygon or MultiPolygon');\n }\n\n this.poly = poly;\n this.isExterior = isExterior;\n this.segments = [];\n\n if (typeof geomRing[0][0] !== 'number' || typeof geomRing[0][1] !== 'number') {\n throw new Error('Input geometry is not a valid Polygon or MultiPolygon');\n }\n\n var firstPoint = rounder.round(geomRing[0][0], geomRing[0][1]);\n this.bbox = {\n ll: {\n x: firstPoint.x,\n y: firstPoint.y\n },\n ur: {\n x: firstPoint.x,\n y: firstPoint.y\n }\n };\n var prevPoint = firstPoint;\n\n for (var i = 1, iMax = geomRing.length; i < iMax; i++) {\n if (typeof geomRing[i][0] !== 'number' || typeof geomRing[i][1] !== 'number') {\n throw new Error('Input geometry is not a valid Polygon or MultiPolygon');\n }\n\n var point = rounder.round(geomRing[i][0], geomRing[i][1]); // skip repeated points\n\n if (point.x === prevPoint.x && point.y === prevPoint.y) continue;\n this.segments.push(Segment.fromRing(prevPoint, point, this));\n if (point.x < this.bbox.ll.x) this.bbox.ll.x = point.x;\n if (point.y < this.bbox.ll.y) this.bbox.ll.y = point.y;\n if (point.x > this.bbox.ur.x) this.bbox.ur.x = point.x;\n if (point.y > this.bbox.ur.y) this.bbox.ur.y = point.y;\n prevPoint = point;\n } // add segment from last to first if last is not the same as first\n\n\n if (firstPoint.x !== prevPoint.x || firstPoint.y !== prevPoint.y) {\n this.segments.push(Segment.fromRing(prevPoint, firstPoint, this));\n }\n }\n\n _createClass(RingIn, [{\n key: \"getSweepEvents\",\n value: function getSweepEvents() {\n var sweepEvents = [];\n\n for (var i = 0, iMax = this.segments.length; i < iMax; i++) {\n var segment = this.segments[i];\n sweepEvents.push(segment.leftSE);\n sweepEvents.push(segment.rightSE);\n }\n\n return sweepEvents;\n }\n }]);\n\n return RingIn;\n }();\n var PolyIn = /*#__PURE__*/function () {\n function PolyIn(geomPoly, multiPoly) {\n _classCallCheck(this, PolyIn);\n\n if (!Array.isArray(geomPoly)) {\n throw new Error('Input geometry is not a valid Polygon or MultiPolygon');\n }\n\n this.exteriorRing = new RingIn(geomPoly[0], this, true); // copy by value\n\n this.bbox = {\n ll: {\n x: this.exteriorRing.bbox.ll.x,\n y: this.exteriorRing.bbox.ll.y\n },\n ur: {\n x: this.exteriorRing.bbox.ur.x,\n y: this.exteriorRing.bbox.ur.y\n }\n };\n this.interiorRings = [];\n\n for (var i = 1, iMax = geomPoly.length; i < iMax; i++) {\n var ring = new RingIn(geomPoly[i], this, false);\n if (ring.bbox.ll.x < this.bbox.ll.x) this.bbox.ll.x = ring.bbox.ll.x;\n if (ring.bbox.ll.y < this.bbox.ll.y) this.bbox.ll.y = ring.bbox.ll.y;\n if (ring.bbox.ur.x > this.bbox.ur.x) this.bbox.ur.x = ring.bbox.ur.x;\n if (ring.bbox.ur.y > this.bbox.ur.y) this.bbox.ur.y = ring.bbox.ur.y;\n this.interiorRings.push(ring);\n }\n\n this.multiPoly = multiPoly;\n }\n\n _createClass(PolyIn, [{\n key: \"getSweepEvents\",\n value: function getSweepEvents() {\n var sweepEvents = this.exteriorRing.getSweepEvents();\n\n for (var i = 0, iMax = this.interiorRings.length; i < iMax; i++) {\n var ringSweepEvents = this.interiorRings[i].getSweepEvents();\n\n for (var j = 0, jMax = ringSweepEvents.length; j < jMax; j++) {\n sweepEvents.push(ringSweepEvents[j]);\n }\n }\n\n return sweepEvents;\n }\n }]);\n\n return PolyIn;\n }();\n var MultiPolyIn = /*#__PURE__*/function () {\n function MultiPolyIn(geom, isSubject) {\n _classCallCheck(this, MultiPolyIn);\n\n if (!Array.isArray(geom)) {\n throw new Error('Input geometry is not a valid Polygon or MultiPolygon');\n }\n\n try {\n // if the input looks like a polygon, convert it to a multipolygon\n if (typeof geom[0][0][0] === 'number') geom = [geom];\n } catch (ex) {// The input is either malformed or has empty arrays.\n // In either case, it will be handled later on.\n }\n\n this.polys = [];\n this.bbox = {\n ll: {\n x: Number.POSITIVE_INFINITY,\n y: Number.POSITIVE_INFINITY\n },\n ur: {\n x: Number.NEGATIVE_INFINITY,\n y: Number.NEGATIVE_INFINITY\n }\n };\n\n for (var i = 0, iMax = geom.length; i < iMax; i++) {\n var poly = new PolyIn(geom[i], this);\n if (poly.bbox.ll.x < this.bbox.ll.x) this.bbox.ll.x = poly.bbox.ll.x;\n if (poly.bbox.ll.y < this.bbox.ll.y) this.bbox.ll.y = poly.bbox.ll.y;\n if (poly.bbox.ur.x > this.bbox.ur.x) this.bbox.ur.x = poly.bbox.ur.x;\n if (poly.bbox.ur.y > this.bbox.ur.y) this.bbox.ur.y = poly.bbox.ur.y;\n this.polys.push(poly);\n }\n\n this.isSubject = isSubject;\n }\n\n _createClass(MultiPolyIn, [{\n key: \"getSweepEvents\",\n value: function getSweepEvents() {\n var sweepEvents = [];\n\n for (var i = 0, iMax = this.polys.length; i < iMax; i++) {\n var polySweepEvents = this.polys[i].getSweepEvents();\n\n for (var j = 0, jMax = polySweepEvents.length; j < jMax; j++) {\n sweepEvents.push(polySweepEvents[j]);\n }\n }\n\n return sweepEvents;\n }\n }]);\n\n return MultiPolyIn;\n }();\n\n var RingOut = /*#__PURE__*/function () {\n _createClass(RingOut, null, [{\n key: \"factory\",\n\n /* Given the segments from the sweep line pass, compute & return a series\n * of closed rings from all the segments marked to be part of the result */\n value: function factory(allSegments) {\n var ringsOut = [];\n\n for (var i = 0, iMax = allSegments.length; i < iMax; i++) {\n var segment = allSegments[i];\n if (!segment.isInResult() || segment.ringOut) continue;\n var prevEvent = null;\n var event = segment.leftSE;\n var nextEvent = segment.rightSE;\n var events = [event];\n var startingPoint = event.point;\n var intersectionLEs = [];\n /* Walk the chain of linked events to form a closed ring */\n\n while (true) {\n prevEvent = event;\n event = nextEvent;\n events.push(event);\n /* Is the ring complete? */\n\n if (event.point === startingPoint) break;\n\n while (true) {\n var availableLEs = event.getAvailableLinkedEvents();\n /* Did we hit a dead end? This shouldn't happen. Indicates some earlier\n * part of the algorithm malfunctioned... please file a bug report. */\n\n if (availableLEs.length === 0) {\n var firstPt = events[0].point;\n var lastPt = events[events.length - 1].point;\n throw new Error(\"Unable to complete output ring starting at [\".concat(firstPt.x, \",\") + \" \".concat(firstPt.y, \"]. Last matching segment found ends at\") + \" [\".concat(lastPt.x, \", \").concat(lastPt.y, \"].\"));\n }\n /* Only one way to go, so cotinue on the path */\n\n\n if (availableLEs.length === 1) {\n nextEvent = availableLEs[0].otherSE;\n break;\n }\n /* We must have an intersection. Check for a completed loop */\n\n\n var indexLE = null;\n\n for (var j = 0, jMax = intersectionLEs.length; j < jMax; j++) {\n if (intersectionLEs[j].point === event.point) {\n indexLE = j;\n break;\n }\n }\n /* Found a completed loop. Cut that off and make a ring */\n\n\n if (indexLE !== null) {\n var intersectionLE = intersectionLEs.splice(indexLE)[0];\n var ringEvents = events.splice(intersectionLE.index);\n ringEvents.unshift(ringEvents[0].otherSE);\n ringsOut.push(new RingOut(ringEvents.reverse()));\n continue;\n }\n /* register the intersection */\n\n\n intersectionLEs.push({\n index: events.length,\n point: event.point\n });\n /* Choose the left-most option to continue the walk */\n\n var comparator = event.getLeftmostComparator(prevEvent);\n nextEvent = availableLEs.sort(comparator)[0].otherSE;\n break;\n }\n }\n\n ringsOut.push(new RingOut(events));\n }\n\n return ringsOut;\n }\n }]);\n\n function RingOut(events) {\n _classCallCheck(this, RingOut);\n\n this.events = events;\n\n for (var i = 0, iMax = events.length; i < iMax; i++) {\n events[i].segment.ringOut = this;\n }\n\n this.poly = null;\n }\n\n _createClass(RingOut, [{\n key: \"getGeom\",\n value: function getGeom() {\n // Remove superfluous points (ie extra points along a straight line),\n var prevPt = this.events[0].point;\n var points = [prevPt];\n\n for (var i = 1, iMax = this.events.length - 1; i < iMax; i++) {\n var _pt = this.events[i].point;\n var _nextPt = this.events[i + 1].point;\n if (compareVectorAngles(_pt, prevPt, _nextPt) === 0) continue;\n points.push(_pt);\n prevPt = _pt;\n } // ring was all (within rounding error of angle calc) colinear points\n\n\n if (points.length === 1) return null; // check if the starting point is necessary\n\n var pt = points[0];\n var nextPt = points[1];\n if (compareVectorAngles(pt, prevPt, nextPt) === 0) points.shift();\n points.push(points[0]);\n var step = this.isExteriorRing() ? 1 : -1;\n var iStart = this.isExteriorRing() ? 0 : points.length - 1;\n var iEnd = this.isExteriorRing() ? points.length : -1;\n var orderedPoints = [];\n\n for (var _i = iStart; _i != iEnd; _i += step) {\n orderedPoints.push([points[_i].x, points[_i].y]);\n }\n\n return orderedPoints;\n }\n }, {\n key: \"isExteriorRing\",\n value: function isExteriorRing() {\n if (this._isExteriorRing === undefined) {\n var enclosing = this.enclosingRing();\n this._isExteriorRing = enclosing ? !enclosing.isExteriorRing() : true;\n }\n\n return this._isExteriorRing;\n }\n }, {\n key: \"enclosingRing\",\n value: function enclosingRing() {\n if (this._enclosingRing === undefined) {\n this._enclosingRing = this._calcEnclosingRing();\n }\n\n return this._enclosingRing;\n }\n /* Returns the ring that encloses this one, if any */\n\n }, {\n key: \"_calcEnclosingRing\",\n value: function _calcEnclosingRing() {\n // start with the ealier sweep line event so that the prevSeg\n // chain doesn't lead us inside of a loop of ours\n var leftMostEvt = this.events[0];\n\n for (var i = 1, iMax = this.events.length; i < iMax; i++) {\n var evt = this.events[i];\n if (SweepEvent.compare(leftMostEvt, evt) > 0) leftMostEvt = evt;\n }\n\n var prevSeg = leftMostEvt.segment.prevInResult();\n var prevPrevSeg = prevSeg ? prevSeg.prevInResult() : null;\n\n while (true) {\n // no segment found, thus no ring can enclose us\n if (!prevSeg) return null; // no segments below prev segment found, thus the ring of the prev\n // segment must loop back around and enclose us\n\n if (!prevPrevSeg) return prevSeg.ringOut; // if the two segments are of different rings, the ring of the prev\n // segment must either loop around us or the ring of the prev prev\n // seg, which would make us and the ring of the prev peers\n\n if (prevPrevSeg.ringOut !== prevSeg.ringOut) {\n if (prevPrevSeg.ringOut.enclosingRing() !== prevSeg.ringOut) {\n return prevSeg.ringOut;\n } else return prevSeg.ringOut.enclosingRing();\n } // two segments are from the same ring, so this was a penisula\n // of that ring. iterate downward, keep searching\n\n\n prevSeg = prevPrevSeg.prevInResult();\n prevPrevSeg = prevSeg ? prevSeg.prevInResult() : null;\n }\n }\n }]);\n\n return RingOut;\n }();\n var PolyOut = /*#__PURE__*/function () {\n function PolyOut(exteriorRing) {\n _classCallCheck(this, PolyOut);\n\n this.exteriorRing = exteriorRing;\n exteriorRing.poly = this;\n this.interiorRings = [];\n }\n\n _createClass(PolyOut, [{\n key: \"addInterior\",\n value: function addInterior(ring) {\n this.interiorRings.push(ring);\n ring.poly = this;\n }\n }, {\n key: \"getGeom\",\n value: function getGeom() {\n var geom = [this.exteriorRing.getGeom()]; // exterior ring was all (within rounding error of angle calc) colinear points\n\n if (geom[0] === null) return null;\n\n for (var i = 0, iMax = this.interiorRings.length; i < iMax; i++) {\n var ringGeom = this.interiorRings[i].getGeom(); // interior ring was all (within rounding error of angle calc) colinear points\n\n if (ringGeom === null) continue;\n geom.push(ringGeom);\n }\n\n return geom;\n }\n }]);\n\n return PolyOut;\n }();\n var MultiPolyOut = /*#__PURE__*/function () {\n function MultiPolyOut(rings) {\n _classCallCheck(this, MultiPolyOut);\n\n this.rings = rings;\n this.polys = this._composePolys(rings);\n }\n\n _createClass(MultiPolyOut, [{\n key: \"getGeom\",\n value: function getGeom() {\n var geom = [];\n\n for (var i = 0, iMax = this.polys.length; i < iMax; i++) {\n var polyGeom = this.polys[i].getGeom(); // exterior ring was all (within rounding error of angle calc) colinear points\n\n if (polyGeom === null) continue;\n geom.push(polyGeom);\n }\n\n return geom;\n }\n }, {\n key: \"_composePolys\",\n value: function _composePolys(rings) {\n var polys = [];\n\n for (var i = 0, iMax = rings.length; i < iMax; i++) {\n var ring = rings[i];\n if (ring.poly) continue;\n if (ring.isExteriorRing()) polys.push(new PolyOut(ring));else {\n var enclosingRing = ring.enclosingRing();\n if (!enclosingRing.poly) polys.push(new PolyOut(enclosingRing));\n enclosingRing.poly.addInterior(ring);\n }\n }\n\n return polys;\n }\n }]);\n\n return MultiPolyOut;\n }();\n\n /**\n * NOTE: We must be careful not to change any segments while\n * they are in the SplayTree. AFAIK, there's no way to tell\n * the tree to rebalance itself - thus before splitting\n * a segment that's in the tree, we remove it from the tree,\n * do the split, then re-insert it. (Even though splitting a\n * segment *shouldn't* change its correct position in the\n * sweep line tree, the reality is because of rounding errors,\n * it sometimes does.)\n */\n\n var SweepLine = /*#__PURE__*/function () {\n function SweepLine(queue) {\n var comparator = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : Segment.compare;\n\n _classCallCheck(this, SweepLine);\n\n this.queue = queue;\n this.tree = new Tree(comparator);\n this.segments = [];\n }\n\n _createClass(SweepLine, [{\n key: \"process\",\n value: function process(event) {\n var segment = event.segment;\n var newEvents = []; // if we've already been consumed by another segment,\n // clean up our body parts and get out\n\n if (event.consumedBy) {\n if (event.isLeft) this.queue.remove(event.otherSE);else this.tree.remove(segment);\n return newEvents;\n }\n\n var node = event.isLeft ? this.tree.insert(segment) : this.tree.find(segment);\n if (!node) throw new Error(\"Unable to find segment #\".concat(segment.id, \" \") + \"[\".concat(segment.leftSE.point.x, \", \").concat(segment.leftSE.point.y, \"] -> \") + \"[\".concat(segment.rightSE.point.x, \", \").concat(segment.rightSE.point.y, \"] \") + 'in SweepLine tree. Please submit a bug report.');\n var prevNode = node;\n var nextNode = node;\n var prevSeg = undefined;\n var nextSeg = undefined; // skip consumed segments still in tree\n\n while (prevSeg === undefined) {\n prevNode = this.tree.prev(prevNode);\n if (prevNode === null) prevSeg = null;else if (prevNode.key.consumedBy === undefined) prevSeg = prevNode.key;\n } // skip consumed segments still in tree\n\n\n while (nextSeg === undefined) {\n nextNode = this.tree.next(nextNode);\n if (nextNode === null) nextSeg = null;else if (nextNode.key.consumedBy === undefined) nextSeg = nextNode.key;\n }\n\n if (event.isLeft) {\n // Check for intersections against the previous segment in the sweep line\n var prevMySplitter = null;\n\n if (prevSeg) {\n var prevInter = prevSeg.getIntersection(segment);\n\n if (prevInter !== null) {\n if (!segment.isAnEndpoint(prevInter)) prevMySplitter = prevInter;\n\n if (!prevSeg.isAnEndpoint(prevInter)) {\n var newEventsFromSplit = this._splitSafely(prevSeg, prevInter);\n\n for (var i = 0, iMax = newEventsFromSplit.length; i < iMax; i++) {\n newEvents.push(newEventsFromSplit[i]);\n }\n }\n }\n } // Check for intersections against the next segment in the sweep line\n\n\n var nextMySplitter = null;\n\n if (nextSeg) {\n var nextInter = nextSeg.getIntersection(segment);\n\n if (nextInter !== null) {\n if (!segment.isAnEndpoint(nextInter)) nextMySplitter = nextInter;\n\n if (!nextSeg.isAnEndpoint(nextInter)) {\n var _newEventsFromSplit = this._splitSafely(nextSeg, nextInter);\n\n for (var _i = 0, _iMax = _newEventsFromSplit.length; _i < _iMax; _i++) {\n newEvents.push(_newEventsFromSplit[_i]);\n }\n }\n }\n } // For simplicity, even if we find more than one intersection we only\n // spilt on the 'earliest' (sweep-line style) of the intersections.\n // The other intersection will be handled in a future process().\n\n\n if (prevMySplitter !== null || nextMySplitter !== null) {\n var mySplitter = null;\n if (prevMySplitter === null) mySplitter = nextMySplitter;else if (nextMySplitter === null) mySplitter = prevMySplitter;else {\n var cmpSplitters = SweepEvent.comparePoints(prevMySplitter, nextMySplitter);\n mySplitter = cmpSplitters <= 0 ? prevMySplitter : nextMySplitter;\n } // Rounding errors can cause changes in ordering,\n // so remove afected segments and right sweep events before splitting\n\n this.queue.remove(segment.rightSE);\n newEvents.push(segment.rightSE);\n\n var _newEventsFromSplit2 = segment.split(mySplitter);\n\n for (var _i2 = 0, _iMax2 = _newEventsFromSplit2.length; _i2 < _iMax2; _i2++) {\n newEvents.push(_newEventsFromSplit2[_i2]);\n }\n }\n\n if (newEvents.length > 0) {\n // We found some intersections, so re-do the current event to\n // make sure sweep line ordering is totally consistent for later\n // use with the segment 'prev' pointers\n this.tree.remove(segment);\n newEvents.push(event);\n } else {\n // done with left event\n this.segments.push(segment);\n segment.prev = prevSeg;\n }\n } else {\n // event.isRight\n // since we're about to be removed from the sweep line, check for\n // intersections between our previous and next segments\n if (prevSeg && nextSeg) {\n var inter = prevSeg.getIntersection(nextSeg);\n\n if (inter !== null) {\n if (!prevSeg.isAnEndpoint(inter)) {\n var _newEventsFromSplit3 = this._splitSafely(prevSeg, inter);\n\n for (var _i3 = 0, _iMax3 = _newEventsFromSplit3.length; _i3 < _iMax3; _i3++) {\n newEvents.push(_newEventsFromSplit3[_i3]);\n }\n }\n\n if (!nextSeg.isAnEndpoint(inter)) {\n var _newEventsFromSplit4 = this._splitSafely(nextSeg, inter);\n\n for (var _i4 = 0, _iMax4 = _newEventsFromSplit4.length; _i4 < _iMax4; _i4++) {\n newEvents.push(_newEventsFromSplit4[_i4]);\n }\n }\n }\n }\n\n this.tree.remove(segment);\n }\n\n return newEvents;\n }\n /* Safely split a segment that is currently in the datastructures\n * IE - a segment other than the one that is currently being processed. */\n\n }, {\n key: \"_splitSafely\",\n value: function _splitSafely(seg, pt) {\n // Rounding errors can cause changes in ordering,\n // so remove afected segments and right sweep events before splitting\n // removeNode() doesn't work, so have re-find the seg\n // https://github.com/w8r/splay-tree/pull/5\n this.tree.remove(seg);\n var rightSE = seg.rightSE;\n this.queue.remove(rightSE);\n var newEvents = seg.split(pt);\n newEvents.push(rightSE); // splitting can trigger consumption\n\n if (seg.consumedBy === undefined) this.tree.insert(seg);\n return newEvents;\n }\n }]);\n\n return SweepLine;\n }();\n\n var POLYGON_CLIPPING_MAX_QUEUE_SIZE = typeof process !== 'undefined' && process.env.POLYGON_CLIPPING_MAX_QUEUE_SIZE || 1000000;\n var POLYGON_CLIPPING_MAX_SWEEPLINE_SEGMENTS = typeof process !== 'undefined' && process.env.POLYGON_CLIPPING_MAX_SWEEPLINE_SEGMENTS || 1000000;\n var Operation = /*#__PURE__*/function () {\n function Operation() {\n _classCallCheck(this, Operation);\n }\n\n _createClass(Operation, [{\n key: \"run\",\n value: function run(type, geom, moreGeoms) {\n operation.type = type;\n rounder.reset();\n /* Convert inputs to MultiPoly objects */\n\n var multipolys = [new MultiPolyIn(geom, true)];\n\n for (var i = 0, iMax = moreGeoms.length; i < iMax; i++) {\n multipolys.push(new MultiPolyIn(moreGeoms[i], false));\n }\n\n operation.numMultiPolys = multipolys.length;\n /* BBox optimization for difference operation\n * If the bbox of a multipolygon that's part of the clipping doesn't\n * intersect the bbox of the subject at all, we can just drop that\n * multiploygon. */\n\n if (operation.type === 'difference') {\n // in place removal\n var subject = multipolys[0];\n var _i = 1;\n\n while (_i < multipolys.length) {\n if (getBboxOverlap(multipolys[_i].bbox, subject.bbox) !== null) _i++;else multipolys.splice(_i, 1);\n }\n }\n /* BBox optimization for intersection operation\n * If we can find any pair of multipolygons whose bbox does not overlap,\n * then the result will be empty. */\n\n\n if (operation.type === 'intersection') {\n // TODO: this is O(n^2) in number of polygons. By sorting the bboxes,\n // it could be optimized to O(n * ln(n))\n for (var _i2 = 0, _iMax = multipolys.length; _i2 < _iMax; _i2++) {\n var mpA = multipolys[_i2];\n\n for (var j = _i2 + 1, jMax = multipolys.length; j < jMax; j++) {\n if (getBboxOverlap(mpA.bbox, multipolys[j].bbox) === null) return [];\n }\n }\n }\n /* Put segment endpoints in a priority queue */\n\n\n var queue = new Tree(SweepEvent.compare);\n\n for (var _i3 = 0, _iMax2 = multipolys.length; _i3 < _iMax2; _i3++) {\n var sweepEvents = multipolys[_i3].getSweepEvents();\n\n for (var _j = 0, _jMax = sweepEvents.length; _j < _jMax; _j++) {\n queue.insert(sweepEvents[_j]);\n\n if (queue.size > POLYGON_CLIPPING_MAX_QUEUE_SIZE) {\n // prevents an infinite loop, an otherwise common manifestation of bugs\n throw new Error('Infinite loop when putting segment endpoints in a priority queue ' + '(queue size too big). Please file a bug report.');\n }\n }\n }\n /* Pass the sweep line over those endpoints */\n\n\n var sweepLine = new SweepLine(queue);\n var prevQueueSize = queue.size;\n var node = queue.pop();\n\n while (node) {\n var evt = node.key;\n\n if (queue.size === prevQueueSize) {\n // prevents an infinite loop, an otherwise common manifestation of bugs\n var seg = evt.segment;\n throw new Error(\"Unable to pop() \".concat(evt.isLeft ? 'left' : 'right', \" SweepEvent \") + \"[\".concat(evt.point.x, \", \").concat(evt.point.y, \"] from segment #\").concat(seg.id, \" \") + \"[\".concat(seg.leftSE.point.x, \", \").concat(seg.leftSE.point.y, \"] -> \") + \"[\".concat(seg.rightSE.point.x, \", \").concat(seg.rightSE.point.y, \"] from queue. \") + 'Please file a bug report.');\n }\n\n if (queue.size > POLYGON_CLIPPING_MAX_QUEUE_SIZE) {\n // prevents an infinite loop, an otherwise common manifestation of bugs\n throw new Error('Infinite loop when passing sweep line over endpoints ' + '(queue size too big). Please file a bug report.');\n }\n\n if (sweepLine.segments.length > POLYGON_CLIPPING_MAX_SWEEPLINE_SEGMENTS) {\n // prevents an infinite loop, an otherwise common manifestation of bugs\n throw new Error('Infinite loop when passing sweep line over endpoints ' + '(too many sweep line segments). Please file a bug report.');\n }\n\n var newEvents = sweepLine.process(evt);\n\n for (var _i4 = 0, _iMax3 = newEvents.length; _i4 < _iMax3; _i4++) {\n var _evt = newEvents[_i4];\n if (_evt.consumedBy === undefined) queue.insert(_evt);\n }\n\n prevQueueSize = queue.size;\n node = queue.pop();\n } // free some memory we don't need anymore\n\n\n rounder.reset();\n /* Collect and compile segments we're keeping into a multipolygon */\n\n var ringsOut = RingOut.factory(sweepLine.segments);\n var result = new MultiPolyOut(ringsOut);\n return result.getGeom();\n }\n }]);\n\n return Operation;\n }(); // singleton available by import\n\n var operation = new Operation();\n\n var union = function union(geom) {\n for (var _len = arguments.length, moreGeoms = new Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) {\n moreGeoms[_key - 1] = arguments[_key];\n }\n\n return operation.run('union', geom, moreGeoms);\n };\n\n var intersection$1 = function intersection(geom) {\n for (var _len2 = arguments.length, moreGeoms = new Array(_len2 > 1 ? _len2 - 1 : 0), _key2 = 1; _key2 < _len2; _key2++) {\n moreGeoms[_key2 - 1] = arguments[_key2];\n }\n\n return operation.run('intersection', geom, moreGeoms);\n };\n\n var xor = function xor(geom) {\n for (var _len3 = arguments.length, moreGeoms = new Array(_len3 > 1 ? _len3 - 1 : 0), _key3 = 1; _key3 < _len3; _key3++) {\n moreGeoms[_key3 - 1] = arguments[_key3];\n }\n\n return operation.run('xor', geom, moreGeoms);\n };\n\n var difference = function difference(subjectGeom) {\n for (var _len4 = arguments.length, clippingGeoms = new Array(_len4 > 1 ? _len4 - 1 : 0), _key4 = 1; _key4 < _len4; _key4++) {\n clippingGeoms[_key4 - 1] = arguments[_key4];\n }\n\n return operation.run('difference', subjectGeom, clippingGeoms);\n };\n\n var index = {\n union: union,\n intersection: intersection$1,\n xor: xor,\n difference: difference\n };\n\n return index;\n\n})));\n","!function(t,i){\"object\"==typeof exports&&\"undefined\"!=typeof module?module.exports=i():\"function\"==typeof define&&define.amd?define(i):(t=t||self).RBush=i()}(this,function(){\"use strict\";function t(t,r,e,a,h){!function t(n,r,e,a,h){for(;a>e;){if(a-e>600){var o=a-e+1,s=r-e+1,l=Math.log(o),f=.5*Math.exp(2*l/3),u=.5*Math.sqrt(l*f*(o-f)/o)*(s-o/2<0?-1:1),m=Math.max(e,Math.floor(r-s*f/o+u)),c=Math.min(a,Math.floor(r+(o-s)*f/o+u));t(n,r,m,c,h)}var p=n[r],d=e,x=a;for(i(n,e,r),h(n[a],p)>0&&i(n,e,a);d0;)x--}0===h(n[e],p)?i(n,e,x):i(n,++x,a),x<=r&&(e=x+1),r<=x&&(a=x-1)}}(t,r,e||0,a||t.length-1,h||n)}function i(t,i,n){var r=t[i];t[i]=t[n],t[n]=r}function n(t,i){return ti?1:0}var r=function(t){void 0===t&&(t=9),this._maxEntries=Math.max(4,t),this._minEntries=Math.max(2,Math.ceil(.4*this._maxEntries)),this.clear()};function e(t,i,n){if(!n)return i.indexOf(t);for(var r=0;r=t.minX&&i.maxY>=t.minY}function p(t){return{children:t,height:1,leaf:!0,minX:1/0,minY:1/0,maxX:-1/0,maxY:-1/0}}function d(i,n,r,e,a){for(var h=[n,r];h.length;)if(!((r=h.pop())-(n=h.pop())<=e)){var o=n+Math.ceil((r-n)/e/2)*e;t(i,o,n,r,a),h.push(n,o,o,r)}}return r.prototype.all=function(){return this._all(this.data,[])},r.prototype.search=function(t){var i=this.data,n=[];if(!c(t,i))return n;for(var r=this.toBBox,e=[];i;){for(var a=0;a=0&&e[i].children.length>this._maxEntries;)this._split(e,i),i--;this._adjustParentBBoxes(r,e,i)},r.prototype._split=function(t,i){var n=t[i],r=n.children.length,e=this._minEntries;this._chooseSplitAxis(n,e,r);var h=this._chooseSplitIndex(n,e,r),o=p(n.children.splice(h,n.children.length-h));o.height=n.height,o.leaf=n.leaf,a(n,this.toBBox),a(o,this.toBBox),i?t[i-1].children.push(o):this._splitRoot(n,o)},r.prototype._splitRoot=function(t,i){this.data=p([t,i]),this.data.height=t.height+1,this.data.leaf=!1,a(this.data,this.toBBox)},r.prototype._chooseSplitIndex=function(t,i,n){for(var r,e,a,o,s,l,u,m=1/0,c=1/0,p=i;p<=n-i;p++){var d=h(t,0,p,this.toBBox),x=h(t,p,n,this.toBBox),v=(e=d,a=x,o=void 0,s=void 0,l=void 0,u=void 0,o=Math.max(e.minX,a.minX),s=Math.max(e.minY,a.minY),l=Math.min(e.maxX,a.maxX),u=Math.min(e.maxY,a.maxY),Math.max(0,l-o)*Math.max(0,u-s)),M=f(d)+f(x);v=i;c--){var p=t.children[c];o(s,t.leaf?e(p):p),l+=u(s)}return l},r.prototype._adjustParentBBoxes=function(t,i,n){for(var r=n;r>=0;r--)o(i[r],t)},r.prototype._condense=function(t){for(var i=t.length-1,n=void 0;i>=0;i--)0===t[i].children.length?i>0?(n=t[i-1].children).splice(n.indexOf(t[i]),1):this.clear():a(t[i],this.toBBox)},r});\n","'use strict';\n\nvar $Object = Object;\nvar $TypeError = TypeError;\n\nmodule.exports = function flags() {\n\tif (this != null && this !== $Object(this)) {\n\t\tthrow new $TypeError('RegExp.prototype.flags getter called on non-object');\n\t}\n\tvar result = '';\n\tif (this.global) {\n\t\tresult += 'g';\n\t}\n\tif (this.ignoreCase) {\n\t\tresult += 'i';\n\t}\n\tif (this.multiline) {\n\t\tresult += 'm';\n\t}\n\tif (this.dotAll) {\n\t\tresult += 's';\n\t}\n\tif (this.unicode) {\n\t\tresult += 'u';\n\t}\n\tif (this.sticky) {\n\t\tresult += 'y';\n\t}\n\treturn result;\n};\n","'use strict';\n\nvar define = require('define-properties');\nvar callBind = require('call-bind');\n\nvar implementation = require('./implementation');\nvar getPolyfill = require('./polyfill');\nvar shim = require('./shim');\n\nvar flagsBound = callBind(implementation);\n\ndefine(flagsBound, {\n\tgetPolyfill: getPolyfill,\n\timplementation: implementation,\n\tshim: shim\n});\n\nmodule.exports = flagsBound;\n","'use strict';\n\nvar implementation = require('./implementation');\n\nvar supportsDescriptors = require('define-properties').supportsDescriptors;\nvar $gOPD = Object.getOwnPropertyDescriptor;\nvar $TypeError = TypeError;\n\nmodule.exports = function getPolyfill() {\n\tif (!supportsDescriptors) {\n\t\tthrow new $TypeError('RegExp.prototype.flags requires a true ES5 environment that supports property descriptors');\n\t}\n\tif ((/a/mig).flags === 'gim') {\n\t\tvar descriptor = $gOPD(RegExp.prototype, 'flags');\n\t\tif (descriptor && typeof descriptor.get === 'function' && typeof (/a/).dotAll === 'boolean') {\n\t\t\treturn descriptor.get;\n\t\t}\n\t}\n\treturn implementation;\n};\n","'use strict';\n\nvar supportsDescriptors = require('define-properties').supportsDescriptors;\nvar getPolyfill = require('./polyfill');\nvar gOPD = Object.getOwnPropertyDescriptor;\nvar defineProperty = Object.defineProperty;\nvar TypeErr = TypeError;\nvar getProto = Object.getPrototypeOf;\nvar regex = /a/;\n\nmodule.exports = function shimFlags() {\n\tif (!supportsDescriptors || !getProto) {\n\t\tthrow new TypeErr('RegExp.prototype.flags requires a true ES5 environment that supports property descriptors');\n\t}\n\tvar polyfill = getPolyfill();\n\tvar proto = getProto(regex);\n\tvar descriptor = gOPD(proto, 'flags');\n\tif (!descriptor || descriptor.get !== polyfill) {\n\t\tdefineProperty(proto, 'flags', {\n\t\t\tconfigurable: true,\n\t\t\tenumerable: false,\n\t\t\tget: polyfill\n\t\t});\n\t}\n\treturn polyfill;\n};\n","!function(t,e){\"object\"==typeof exports&&\"undefined\"!=typeof module?e(exports):\"function\"==typeof define&&define.amd?define([\"exports\"],e):e((t=t||self).predicates={})}(this,function(t){\"use strict\";const e=134217729,n=33306690738754706e-32;function r(t,e,n,r,o){let f,i,u,c,s=e[0],a=r[0],d=0,l=0;a>s==a>-s?(f=s,s=e[++d]):(f=a,a=r[++l]);let p=0;if(ds==a>-s?(u=f-((i=s+f)-s),s=e[++d]):(u=f-((i=a+f)-a),a=r[++l]),f=i,0!==u&&(o[p++]=u);ds==a>-s?(u=f-((i=f+s)-(c=i-f))+(s-c),s=e[++d]):(u=f-((i=f+a)-(c=i-f))+(a-c),a=r[++l]),f=i,0!==u&&(o[p++]=u);for(;d0!=x>0)return j;const m=Math.abs(M+x);return Math.abs(j)>=f*m?j:-function(t,o,f,p,b,y,h){let M,x,j,m,_,v,w,A,F,O,P,g,k,q,z,B,C,D;const E=t-b,G=f-b,H=o-y,I=p-y;_=(z=(A=E-(w=(v=e*E)-(v-E)))*(O=I-(F=(v=e*I)-(v-I)))-((q=E*I)-w*F-A*F-w*O))-(P=z-(C=(A=H-(w=(v=e*H)-(v-H)))*(O=G-(F=(v=e*G)-(v-G)))-((B=H*G)-w*F-A*F-w*O))),c[0]=z-(P+_)+(_-C),_=(k=q-((g=q+P)-(_=g-q))+(P-_))-(P=k-B),c[1]=k-(P+_)+(_-B),_=(D=g+P)-g,c[2]=g-(D-_)+(P-_),c[3]=D;let J=function(t,e){let n=e[0];for(let r=1;r=K||-J>=K)return J;if(M=t-(E+(_=t-E))+(_-b),j=f-(G+(_=f-G))+(_-b),x=o-(H+(_=o-H))+(_-y),m=p-(I+(_=p-I))+(_-y),0===M&&0===x&&0===j&&0===m)return J;if(K=u*h+n*Math.abs(J),(J+=E*m+I*M-(H*j+G*x))>=K||-J>=K)return J;_=(z=(A=M-(w=(v=e*M)-(v-M)))*(O=I-(F=(v=e*I)-(v-I)))-((q=M*I)-w*F-A*F-w*O))-(P=z-(C=(A=x-(w=(v=e*x)-(v-x)))*(O=G-(F=(v=e*G)-(v-G)))-((B=x*G)-w*F-A*F-w*O))),l[0]=z-(P+_)+(_-C),_=(k=q-((g=q+P)-(_=g-q))+(P-_))-(P=k-B),l[1]=k-(P+_)+(_-B),_=(D=g+P)-g,l[2]=g-(D-_)+(P-_),l[3]=D;const L=r(4,c,4,l,s);_=(z=(A=E-(w=(v=e*E)-(v-E)))*(O=m-(F=(v=e*m)-(v-m)))-((q=E*m)-w*F-A*F-w*O))-(P=z-(C=(A=H-(w=(v=e*H)-(v-H)))*(O=j-(F=(v=e*j)-(v-j)))-((B=H*j)-w*F-A*F-w*O))),l[0]=z-(P+_)+(_-C),_=(k=q-((g=q+P)-(_=g-q))+(P-_))-(P=k-B),l[1]=k-(P+_)+(_-B),_=(D=g+P)-g,l[2]=g-(D-_)+(P-_),l[3]=D;const N=r(L,s,4,l,a);_=(z=(A=M-(w=(v=e*M)-(v-M)))*(O=m-(F=(v=e*m)-(v-m)))-((q=M*m)-w*F-A*F-w*O))-(P=z-(C=(A=x-(w=(v=e*x)-(v-x)))*(O=j-(F=(v=e*j)-(v-j)))-((B=x*j)-w*F-A*F-w*O))),l[0]=z-(P+_)+(_-C),_=(k=q-((g=q+P)-(_=g-q))+(P-_))-(P=k-B),l[1]=k-(P+_)+(_-B),_=(D=g+P)-g,l[2]=g-(D-_)+(P-_),l[3]=D;const Q=r(N,a,4,l,d);return d[Q-1]}(t,o,p,b,y,h,m)},t.orient2dfast=function(t,e,n,r,o,f){return(e-f)*(n-o)-(t-o)*(r-f)},Object.defineProperty(t,\"__esModule\",{value:!0})});\n","\"use strict\";\n\nmodule.exports = {\n\t/**\n * Euclidean distance\n */\n\teudist: function eudist(v1, v2, sqrt) {\n\t\tvar len = v1.length;\n\t\tvar sum = 0;\n\n\t\tfor (var i = 0; i < len; i++) {\n\t\t\tvar d = (v1[i] || 0) - (v2[i] || 0);\n\t\t\tsum += d * d;\n\t\t}\n\t\t// Square root not really needed\n\t\treturn sqrt ? Math.sqrt(sum) : sum;\n\t},\n\tmandist: function mandist(v1, v2, sqrt) {\n\t\tvar len = v1.length;\n\t\tvar sum = 0;\n\n\t\tfor (var i = 0; i < len; i++) {\n\t\t\tsum += Math.abs((v1[i] || 0) - (v2[i] || 0));\n\t\t}\n\n\t\t// Square root not really needed\n\t\treturn sqrt ? Math.sqrt(sum) : sum;\n\t},\n\n\n\t/**\n * Unidimensional distance\n */\n\tdist: function dist(v1, v2, sqrt) {\n\t\tvar d = Math.abs(v1 - v2);\n\t\treturn sqrt ? d : d * d;\n\t}\n};\n//# sourceMappingURL=distance.js.map\n","\"use strict\";\n\nvar Distance = require(\"./distance.js\"),\n eudist = Distance.eudist,\n dist = Distance.dist;\n\nmodule.exports = {\n\tkmrand: function kmrand(data, k) {\n\t\tvar map = {},\n\t\t ks = [],\n\t\t t = k << 2;\n\t\tvar len = data.length;\n\t\tvar multi = data[0].length > 0;\n\n\t\twhile (ks.length < k && t-- > 0) {\n\t\t\tvar d = data[Math.floor(Math.random() * len)];\n\t\t\tvar key = multi ? d.join(\"_\") : \"\" + d;\n\t\t\tif (!map[key]) {\n\t\t\t\tmap[key] = true;\n\t\t\t\tks.push(d);\n\t\t\t}\n\t\t}\n\n\t\tif (ks.length < k) throw new Error(\"Error initializating clusters\");else return ks;\n\t},\n\n\n\t/**\n * K-means++ initial centroid selection\n */\n\tkmpp: function kmpp(data, k) {\n\t\tvar distance = data[0].length ? eudist : dist;\n\t\tvar ks = [],\n\t\t len = data.length;\n\t\tvar multi = data[0].length > 0;\n\t\tvar map = {};\n\n\t\t// First random centroid\n\t\tvar c = data[Math.floor(Math.random() * len)];\n\t\tvar key = multi ? c.join(\"_\") : \"\" + c;\n\t\tks.push(c);\n\t\tmap[key] = true;\n\n\t\t// Retrieve next centroids\n\t\twhile (ks.length < k) {\n\t\t\t// Min Distances between current centroids and data points\n\t\t\tvar dists = [],\n\t\t\t lk = ks.length;\n\t\t\tvar dsum = 0,\n\t\t\t prs = [];\n\n\t\t\tfor (var i = 0; i < len; i++) {\n\t\t\t\tvar min = Infinity;\n\t\t\t\tfor (var j = 0; j < lk; j++) {\n\t\t\t\t\tvar _dist = distance(data[i], ks[j]);\n\t\t\t\t\tif (_dist <= min) min = _dist;\n\t\t\t\t}\n\t\t\t\tdists[i] = min;\n\t\t\t}\n\n\t\t\t// Sum all min distances\n\t\t\tfor (var _i = 0; _i < len; _i++) {\n\t\t\t\tdsum += dists[_i];\n\t\t\t}\n\n\t\t\t// Probabilities and cummulative prob (cumsum)\n\t\t\tfor (var _i2 = 0; _i2 < len; _i2++) {\n\t\t\t\tprs[_i2] = { i: _i2, v: data[_i2], pr: dists[_i2] / dsum, cs: 0 };\n\t\t\t}\n\n\t\t\t// Sort Probabilities\n\t\t\tprs.sort(function (a, b) {\n\t\t\t\treturn a.pr - b.pr;\n\t\t\t});\n\n\t\t\t// Cummulative Probabilities\n\t\t\tprs[0].cs = prs[0].pr;\n\t\t\tfor (var _i3 = 1; _i3 < len; _i3++) {\n\t\t\t\tprs[_i3].cs = prs[_i3 - 1].cs + prs[_i3].pr;\n\t\t\t}\n\n\t\t\t// Randomize\n\t\t\tvar rnd = Math.random();\n\n\t\t\t// Gets only the items whose cumsum >= rnd\n\t\t\tvar idx = 0;\n\t\t\twhile (idx < len - 1 && prs[idx++].cs < rnd) {}\n\t\t\tks.push(prs[idx - 1].v);\n\t\t\t/*\n let done = false;\n while(!done) {\n \t// this is our new centroid\n \tc = prs[idx-1].v\n \tkey = multi? c.join(\"_\") : `${c}`;\n \tif(!map[key]) {\n \t\tmap[key] = true;\n \t\tks.push(c);\n \t\tdone = true;\n \t}\n \telse {\n \t\tidx++;\n \t}\n }\n */\n\t\t}\n\n\t\treturn ks;\n\t}\n};\n//# sourceMappingURL=kinit.js.map\n","\"use strict\";\n\n/*jshint esversion: 6 */\n\nvar Distance = require(\"./distance.js\"),\n ClusterInit = require(\"./kinit.js\"),\n eudist = Distance.eudist,\n mandist = Distance.mandist,\n dist = Distance.dist,\n kmrand = ClusterInit.kmrand,\n kmpp = ClusterInit.kmpp;\n\nvar MAX = 10000;\n\n/**\n * Inits an array with values\n */\nfunction init(len, val, v) {\n\tv = v || [];\n\tfor (var i = 0; i < len; i++) {\n\t\tv[i] = val;\n\t}return v;\n}\n\nfunction skmeans(data, k, initial, maxit) {\n\tvar ks = [],\n\t old = [],\n\t idxs = [],\n\t dist = [];\n\tvar conv = false,\n\t it = maxit || MAX;\n\tvar len = data.length,\n\t vlen = data[0].length,\n\t multi = vlen > 0;\n\tvar count = [];\n\n\tif (!initial) {\n\t\tvar _idxs = {};\n\t\twhile (ks.length < k) {\n\t\t\tvar idx = Math.floor(Math.random() * len);\n\t\t\tif (!_idxs[idx]) {\n\t\t\t\t_idxs[idx] = true;\n\t\t\t\tks.push(data[idx]);\n\t\t\t}\n\t\t}\n\t} else if (initial == \"kmrand\") {\n\t\tks = kmrand(data, k);\n\t} else if (initial == \"kmpp\") {\n\t\tks = kmpp(data, k);\n\t} else {\n\t\tks = initial;\n\t}\n\n\tdo {\n\t\t// Reset k count\n\t\tinit(k, 0, count);\n\n\t\t// For each value in data, find the nearest centroid\n\t\tfor (var i = 0; i < len; i++) {\n\t\t\tvar min = Infinity,\n\t\t\t _idx = 0;\n\t\t\tfor (var j = 0; j < k; j++) {\n\t\t\t\t// Multidimensional or unidimensional\n\t\t\t\tvar dist = multi ? eudist(data[i], ks[j]) : Math.abs(data[i] - ks[j]);\n\t\t\t\tif (dist <= min) {\n\t\t\t\t\tmin = dist;\n\t\t\t\t\t_idx = j;\n\t\t\t\t}\n\t\t\t}\n\t\t\tidxs[i] = _idx; // Index of the selected centroid for that value\n\t\t\tcount[_idx]++; // Number of values for this centroid\n\t\t}\n\n\t\t// Recalculate centroids\n\t\tvar sum = [],\n\t\t old = [],\n\t\t dif = 0;\n\t\tfor (var _j = 0; _j < k; _j++) {\n\t\t\t// Multidimensional or unidimensional\n\t\t\tsum[_j] = multi ? init(vlen, 0, sum[_j]) : 0;\n\t\t\told[_j] = ks[_j];\n\t\t}\n\n\t\t// If multidimensional\n\t\tif (multi) {\n\t\t\tfor (var _j2 = 0; _j2 < k; _j2++) {\n\t\t\t\tks[_j2] = [];\n\t\t\t} // Sum values and count for each centroid\n\t\t\tfor (var _i = 0; _i < len; _i++) {\n\t\t\t\tvar _idx2 = idxs[_i],\n\t\t\t\t // Centroid for that item\n\t\t\t\tvsum = sum[_idx2],\n\t\t\t\t // Sum values for this centroid\n\t\t\t\tvect = data[_i]; // Current vector\n\n\t\t\t\t// Accumulate value on the centroid for current vector\n\t\t\t\tfor (var h = 0; h < vlen; h++) {\n\t\t\t\t\tvsum[h] += vect[h];\n\t\t\t\t}\n\t\t\t}\n\t\t\t// Calculate the average for each centroid\n\t\t\tconv = true;\n\t\t\tfor (var _j3 = 0; _j3 < k; _j3++) {\n\t\t\t\tvar ksj = ks[_j3],\n\t\t\t\t // Current centroid\n\t\t\t\tsumj = sum[_j3],\n\t\t\t\t // Accumulated centroid values\n\t\t\t\toldj = old[_j3],\n\t\t\t\t // Old centroid value\n\t\t\t\tcj = count[_j3]; // Number of elements for this centroid\n\n\t\t\t\t// New average\n\t\t\t\tfor (var _h = 0; _h < vlen; _h++) {\n\t\t\t\t\tksj[_h] = sumj[_h] / cj || 0; // New centroid\n\t\t\t\t}\n\n\t\t\t\t// Find if centroids have moved\n\t\t\t\tif (conv) {\n\t\t\t\t\tfor (var _h2 = 0; _h2 < vlen; _h2++) {\n\t\t\t\t\t\tif (oldj[_h2] != ksj[_h2]) {\n\t\t\t\t\t\t\tconv = false;\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\t// If unidimensional\n\t\telse {\n\t\t\t\t// Sum values and count for each centroid\n\t\t\t\tfor (var _i2 = 0; _i2 < len; _i2++) {\n\t\t\t\t\tvar _idx3 = idxs[_i2];\n\t\t\t\t\tsum[_idx3] += data[_i2];\n\t\t\t\t}\n\t\t\t\t// Calculate the average for each centroid\n\t\t\t\tfor (var _j4 = 0; _j4 < k; _j4++) {\n\t\t\t\t\tks[_j4] = sum[_j4] / count[_j4] || 0; // New centroid\n\t\t\t\t}\n\t\t\t\t// Find if centroids have moved\n\t\t\t\tconv = true;\n\t\t\t\tfor (var _j5 = 0; _j5 < k; _j5++) {\n\t\t\t\t\tif (old[_j5] != ks[_j5]) {\n\t\t\t\t\t\tconv = false;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\tconv = conv || --it <= 0;\n\t} while (!conv);\n\n\treturn {\n\t\tit: MAX - it,\n\t\tk: k,\n\t\tidxs: idxs,\n\t\tcentroids: ks\n\t};\n}\n\nmodule.exports = skmeans;\n//# sourceMappingURL=main.js.map\n","\nexport default class TinyQueue {\n constructor(data = [], compare = defaultCompare) {\n this.data = data;\n this.length = this.data.length;\n this.compare = compare;\n\n if (this.length > 0) {\n for (let i = (this.length >> 1) - 1; i >= 0; i--) this._down(i);\n }\n }\n\n push(item) {\n this.data.push(item);\n this.length++;\n this._up(this.length - 1);\n }\n\n pop() {\n if (this.length === 0) return undefined;\n\n const top = this.data[0];\n const bottom = this.data.pop();\n this.length--;\n\n if (this.length > 0) {\n this.data[0] = bottom;\n this._down(0);\n }\n\n return top;\n }\n\n peek() {\n return this.data[0];\n }\n\n _up(pos) {\n const {data, compare} = this;\n const item = data[pos];\n\n while (pos > 0) {\n const parent = (pos - 1) >> 1;\n const current = data[parent];\n if (compare(item, current) >= 0) break;\n data[pos] = current;\n pos = parent;\n }\n\n data[pos] = item;\n }\n\n _down(pos) {\n const {data, compare} = this;\n const halfLength = this.length >> 1;\n const item = data[pos];\n\n while (pos < halfLength) {\n let left = (pos << 1) + 1;\n let best = data[left];\n const right = left + 1;\n\n if (right < this.length && compare(data[right], best) < 0) {\n left = right;\n best = data[right];\n }\n if (compare(best, item) >= 0) break;\n\n data[pos] = best;\n pos = left;\n }\n\n data[pos] = item;\n }\n}\n\nfunction defaultCompare(a, b) {\n return a < b ? -1 : a > b ? 1 : 0;\n}\n","!function(t,e){\"object\"==typeof exports&&\"undefined\"!=typeof module?e(exports):\"function\"==typeof define&&define.amd?define([\"exports\"],e):e(t.jsts={})}(this,function(t){\"use strict\";function e(){}function n(t){this.message=t||\"\"}function i(t){this.message=t||\"\"}function r(t){this.message=t||\"\"}function o(){}function s(t){return null===t?Mt:t.color}function a(t){return null===t?null:t.parent}function u(t,e){null!==t&&(t.color=e)}function l(t){return null===t?null:t.left}function c(t){return null===t?null:t.right}function p(){this.root_=null,this.size_=0}function h(){}function f(){this.array_=[],arguments[0]instanceof It&&this.addAll(arguments[0])}function g(){}function d(t){this.message=t||\"\"}function y(){this.array_=[]}\"fill\"in Array.prototype||Object.defineProperty(Array.prototype,\"fill\",{configurable:!0,value:function(t){if(void 0===this||null===this)throw new TypeError(this+\" is not an object\");var e=Object(this),n=Math.max(Math.min(e.length,9007199254740991),0)||0,i=1 in arguments?parseInt(Number(arguments[1]),10)||0:0;i=i<0?Math.max(n+i,0):Math.min(i,n);var r=2 in arguments&&void 0!==arguments[2]?parseInt(Number(arguments[2]),10)||0:n;for(r=r<0?Math.max(n+arguments[2],0):Math.min(r,n);ie.x?1:this.ye.y?1:0},C.prototype.clone=function(){},C.prototype.copy=function(){return new C(this)},C.prototype.toString=function(){return\"(\"+this.x+\", \"+this.y+\", \"+this.z+\")\"},C.prototype.distance3D=function(t){var e=this.x-t.x,n=this.y-t.y,i=this.z-t.z;return Math.sqrt(e*e+n*n+i*i)},C.prototype.distance=function(t){var e=this.x-t.x,n=this.y-t.y;return Math.sqrt(e*e+n*n)},C.prototype.hashCode=function(){var t=17;return t=37*t+C.hashCode(this.x),t=37*t+C.hashCode(this.y)},C.prototype.setCoordinate=function(t){this.x=t.x,this.y=t.y,this.z=t.z},C.prototype.interfaces_=function(){return[E,x,e]},C.prototype.getClass=function(){return C},C.hashCode=function(){if(1===arguments.length){var t=arguments[0],e=v.doubleToLongBits(t);return Math.trunc((e^e)>>>32)}},S.DimensionalComparator.get=function(){return L},S.serialVersionUID.get=function(){return 0x5cbf2c235c7e5800},S.NULL_ORDINATE.get=function(){return v.NaN},S.X.get=function(){return 0},S.Y.get=function(){return 1},S.Z.get=function(){return 2},Object.defineProperties(C,S);var L=function(t){if(this._dimensionsToTest=2,0===arguments.length);else if(1===arguments.length){var e=arguments[0];if(2!==e&&3!==e)throw new m(\"only 2 or 3 dimensions may be specified\");this._dimensionsToTest=e}};L.prototype.compare=function(t,e){var n=t,i=e,r=L.compare(n.x,i.x);if(0!==r)return r;var o=L.compare(n.y,i.y);if(0!==o)return o;if(this._dimensionsToTest<=2)return 0;return L.compare(n.z,i.z)},L.prototype.interfaces_=function(){return[N]},L.prototype.getClass=function(){return L},L.compare=function(t,e){return te?1:v.isNaN(t)?v.isNaN(e)?0:-1:v.isNaN(e)?1:0};var b=function(){};b.prototype.create=function(){},b.prototype.interfaces_=function(){return[]},b.prototype.getClass=function(){return b};var w=function(){},O={INTERIOR:{configurable:!0},BOUNDARY:{configurable:!0},EXTERIOR:{configurable:!0},NONE:{configurable:!0}};w.prototype.interfaces_=function(){return[]},w.prototype.getClass=function(){return w},w.toLocationSymbol=function(t){switch(t){case w.EXTERIOR:return\"e\";case w.BOUNDARY:return\"b\";case w.INTERIOR:return\"i\";case w.NONE:return\"-\"}throw new m(\"Unknown location value: \"+t)},O.INTERIOR.get=function(){return 0},O.BOUNDARY.get=function(){return 1},O.EXTERIOR.get=function(){return 2},O.NONE.get=function(){return-1},Object.defineProperties(w,O);var T=function(t,e){return t.interfaces_&&t.interfaces_().indexOf(e)>-1},R=function(){},P={LOG_10:{configurable:!0}};R.prototype.interfaces_=function(){return[]},R.prototype.getClass=function(){return R},R.log10=function(t){var e=Math.log(t);return v.isInfinite(e)?e:v.isNaN(e)?e:e/R.LOG_10},R.min=function(t,e,n,i){var r=t;return en?n:t}if(Number.isInteger(arguments[2])&&Number.isInteger(arguments[0])&&Number.isInteger(arguments[1])){var i=arguments[0],r=arguments[1],o=arguments[2];return io?o:i}},R.wrap=function(t,e){return t<0?e- -t%e:t%e},R.max=function(){if(3===arguments.length){var t=arguments[0],e=arguments[1],n=arguments[2],i=t;return e>i&&(i=e),n>i&&(i=n),i}if(4===arguments.length){var r=arguments[0],o=arguments[1],s=arguments[2],a=arguments[3],u=r;return o>u&&(u=o),s>u&&(u=s),a>u&&(u=a),u}},R.average=function(t,e){return(t+e)/2},P.LOG_10.get=function(){return Math.log(10)},Object.defineProperties(R,P);var D=function(t){this.str=t};D.prototype.append=function(t){this.str+=t},D.prototype.setCharAt=function(t,e){this.str=this.str.substr(0,t)+e+this.str.substr(t+1)},D.prototype.toString=function(t){return this.str};var M=function(t){this.value=t};M.prototype.intValue=function(){return this.value},M.prototype.compareTo=function(t){return this.valuet?1:0},M.isNaN=function(t){return Number.isNaN(t)};var A=function(){};A.isWhitespace=function(t){return t<=32&&t>=0||127===t},A.toUpperCase=function(t){return t.toUpperCase()};var F=function t(){if(this._hi=0,this._lo=0,0===arguments.length)this.init(0);else if(1===arguments.length){if(\"number\"==typeof arguments[0]){var e=arguments[0];this.init(e)}else if(arguments[0]instanceof t){var n=arguments[0];this.init(n)}else if(\"string\"==typeof arguments[0]){var i=arguments[0];t.call(this,t.parse(i))}}else if(2===arguments.length){var r=arguments[0],o=arguments[1];this.init(r,o)}},G={PI:{configurable:!0},TWO_PI:{configurable:!0},PI_2:{configurable:!0},E:{configurable:!0},NaN:{configurable:!0},EPS:{configurable:!0},SPLIT:{configurable:!0},MAX_PRINT_DIGITS:{configurable:!0},TEN:{configurable:!0},ONE:{configurable:!0},SCI_NOT_EXPONENT_CHAR:{configurable:!0},SCI_NOT_ZERO:{configurable:!0}};F.prototype.le=function(t){return(this._hi9?(c=!0,p=\"9\"):p=\"0\"+l,s.append(p),n=n.subtract(F.valueOf(l)).multiply(F.TEN),c&&n.selfAdd(F.TEN);var h=!0,f=F.magnitude(n._hi);if(f<0&&Math.abs(f)>=a-u&&(h=!1),!h)break}return e[0]=i,s.toString()},F.prototype.sqr=function(){return this.multiply(this)},F.prototype.doubleValue=function(){return this._hi+this._lo},F.prototype.subtract=function(){if(arguments[0]instanceof F){var t=arguments[0];return this.add(t.negate())}if(\"number\"==typeof arguments[0]){var e=arguments[0];return this.add(-e)}},F.prototype.equals=function(){if(1===arguments.length){var t=arguments[0];return this._hi===t._hi&&this._lo===t._lo}},F.prototype.isZero=function(){return 0===this._hi&&0===this._lo},F.prototype.selfSubtract=function(){if(arguments[0]instanceof F){var t=arguments[0];return this.isNaN()?this:this.selfAdd(-t._hi,-t._lo)}if(\"number\"==typeof arguments[0]){var e=arguments[0];return this.isNaN()?this:this.selfAdd(-e,0)}},F.prototype.getSpecialNumberString=function(){return this.isZero()?\"0.0\":this.isNaN()?\"NaN \":null},F.prototype.min=function(t){return this.le(t)?this:t},F.prototype.selfDivide=function(){if(1===arguments.length){if(arguments[0]instanceof F){var t=arguments[0];return this.selfDivide(t._hi,t._lo)}if(\"number\"==typeof arguments[0]){var e=arguments[0];return this.selfDivide(e,0)}}else if(2===arguments.length){var n=arguments[0],i=arguments[1],r=null,o=null,s=null,a=null,u=null,l=null,c=null,p=null;return u=this._hi/n,l=F.SPLIT*u,r=l-u,p=F.SPLIT*n,r=l-r,o=u-r,s=p-n,c=u*n,s=p-s,a=n-s,p=r*s-c+r*a+o*s+o*a,l=(this._hi-c-p+this._lo-u*i)/n,p=u+l,this._hi=p,this._lo=u-p+l,this}},F.prototype.dump=function(){return\"DD<\"+this._hi+\", \"+this._lo+\">\"},F.prototype.divide=function(){if(arguments[0]instanceof F){var t=arguments[0],e=null,n=null,i=null,r=null,o=null,s=null,a=null,u=null;n=(o=this._hi/t._hi)-(e=(s=F.SPLIT*o)-(e=s-o)),u=e*(i=(u=F.SPLIT*t._hi)-(i=u-t._hi))-(a=o*t._hi)+e*(r=t._hi-i)+n*i+n*r,s=(this._hi-a-u+this._lo-o*t._lo)/t._hi;return new F(u=o+s,o-u+s)}if(\"number\"==typeof arguments[0]){var l=arguments[0];return v.isNaN(l)?F.createNaN():F.copy(this).selfDivide(l,0)}},F.prototype.ge=function(t){return(this._hi>t._hi||this._hi===t._hi)&&this._lo>=t._lo},F.prototype.pow=function(t){if(0===t)return F.valueOf(1);var e=new F(this),n=F.valueOf(1),i=Math.abs(t);if(i>1)for(;i>0;)i%2==1&&n.selfMultiply(e),(i/=2)>0&&(e=e.sqr());else n=e;return t<0?n.reciprocal():n},F.prototype.ceil=function(){if(this.isNaN())return F.NaN;var t=Math.ceil(this._hi),e=0;return t===this._hi&&(e=Math.ceil(this._lo)),new F(t,e)},F.prototype.compareTo=function(t){var e=t;return this._hie._hi?1:this._loe._lo?1:0},F.prototype.rint=function(){if(this.isNaN())return this;return this.add(.5).floor()},F.prototype.setValue=function(){if(arguments[0]instanceof F){var t=arguments[0];return this.init(t),this}if(\"number\"==typeof arguments[0]){var e=arguments[0];return this.init(e),this}},F.prototype.max=function(t){return this.ge(t)?this:t},F.prototype.sqrt=function(){if(this.isZero())return F.valueOf(0);if(this.isNegative())return F.NaN;var t=1/Math.sqrt(this._hi),e=this._hi*t,n=F.valueOf(e),i=this.subtract(n.sqr())._hi*(.5*t);return n.add(i)},F.prototype.selfAdd=function(){if(1===arguments.length){if(arguments[0]instanceof F){var t=arguments[0];return this.selfAdd(t._hi,t._lo)}if(\"number\"==typeof arguments[0]){var e=arguments[0],n=null,i=null,r=null,o=null,s=null,a=null;return r=this._hi+e,s=r-this._hi,o=r-s,o=e-s+(this._hi-o),a=o+this._lo,n=r+a,i=a+(r-n),this._hi=n+i,this._lo=i+(n-this._hi),this}}else if(2===arguments.length){var u=arguments[0],l=arguments[1],c=null,p=null,h=null,f=null,g=null,d=null,y=null;f=this._hi+u,p=this._lo+l,g=f-(d=f-this._hi),h=p-(y=p-this._lo);var _=(c=f+(d=(g=u-d+(this._hi-g))+p))+(d=(h=l-y+(this._lo-h))+(d+(f-c))),m=d+(c-_);return this._hi=_,this._lo=m,this}},F.prototype.selfMultiply=function(){if(1===arguments.length){if(arguments[0]instanceof F){var t=arguments[0];return this.selfMultiply(t._hi,t._lo)}if(\"number\"==typeof arguments[0]){var e=arguments[0];return this.selfMultiply(e,0)}}else if(2===arguments.length){var n=arguments[0],i=arguments[1],r=null,o=null,s=null,a=null,u=null,l=null;r=(u=F.SPLIT*this._hi)-this._hi,l=F.SPLIT*n,r=u-r,o=this._hi-r,s=l-n;var c=(u=this._hi*n)+(l=r*(s=l-s)-u+r*(a=n-s)+o*s+o*a+(this._hi*i+this._lo*n)),p=l+(r=u-c);return this._hi=c,this._lo=p,this}},F.prototype.selfSqr=function(){return this.selfMultiply(this)},F.prototype.floor=function(){if(this.isNaN())return F.NaN;var t=Math.floor(this._hi),e=0;return t===this._hi&&(e=Math.floor(this._lo)),new F(t,e)},F.prototype.negate=function(){return this.isNaN()?this:new F(-this._hi,-this._lo)},F.prototype.clone=function(){},F.prototype.multiply=function(){if(arguments[0]instanceof F){var t=arguments[0];return t.isNaN()?F.createNaN():F.copy(this).selfMultiply(t)}if(\"number\"==typeof arguments[0]){var e=arguments[0];return v.isNaN(e)?F.createNaN():F.copy(this).selfMultiply(e,0)}},F.prototype.isNaN=function(){return v.isNaN(this._hi)},F.prototype.intValue=function(){return Math.trunc(this._hi)},F.prototype.toString=function(){var t=F.magnitude(this._hi);return t>=-3&&t<=20?this.toStandardNotation():this.toSciNotation()},F.prototype.toStandardNotation=function(){var t=this.getSpecialNumberString();if(null!==t)return t;var e=new Array(1).fill(null),n=this.extractSignificantDigits(!0,e),i=e[0]+1,r=n;if(\".\"===n.charAt(0))r=\"0\"+n;else if(i<0)r=\"0.\"+F.stringOfChar(\"0\",-i)+n;else if(-1===n.indexOf(\".\")){var o=i-n.length;r=n+F.stringOfChar(\"0\",o)+\".0\"}return this.isNegative()?\"-\"+r:r},F.prototype.reciprocal=function(){var t=null,e=null,n=null,i=null,r=null,o=null,s=null,a=null;e=(r=1/this._hi)-(t=(o=F.SPLIT*r)-(t=o-r)),n=(a=F.SPLIT*this._hi)-this._hi;var u=r+(o=(1-(s=r*this._hi)-(a=t*(n=a-n)-s+t*(i=this._hi-n)+e*n+e*i)-r*this._lo)/this._hi);return new F(u,r-u+o)},F.prototype.toSciNotation=function(){if(this.isZero())return F.SCI_NOT_ZERO;var t=this.getSpecialNumberString();if(null!==t)return t;var e=new Array(1).fill(null),n=this.extractSignificantDigits(!1,e),i=F.SCI_NOT_EXPONENT_CHAR+e[0];if(\"0\"===n.charAt(0))throw new Error(\"Found leading zero: \"+n);var r=\"\";n.length>1&&(r=n.substring(1));var o=n.charAt(0)+\".\"+r;return this.isNegative()?\"-\"+o+i:o+i},F.prototype.abs=function(){return this.isNaN()?F.NaN:this.isNegative()?this.negate():new F(this)},F.prototype.isPositive=function(){return(this._hi>0||0===this._hi)&&this._lo>0},F.prototype.lt=function(t){return(this._hit._hi||this._hi===t._hi)&&this._lo>t._lo},F.prototype.isNegative=function(){return(this._hi<0||0===this._hi)&&this._lo<0},F.prototype.trunc=function(){return this.isNaN()?F.NaN:this.isPositive()?this.floor():this.ceil()},F.prototype.signum=function(){return this._hi>0?1:this._hi<0?-1:this._lo>0?1:this._lo<0?-1:0},F.prototype.interfaces_=function(){return[e,E,x]},F.prototype.getClass=function(){return F},F.sqr=function(t){return F.valueOf(t).selfMultiply(t)},F.valueOf=function(){if(\"string\"==typeof arguments[0]){var t=arguments[0];return F.parse(t)}if(\"number\"==typeof arguments[0]){var e=arguments[0];return new F(e)}},F.sqrt=function(t){return F.valueOf(t).sqrt()},F.parse=function(t){for(var e=0,n=t.length;A.isWhitespace(t.charAt(e));)e++;var i=!1;if(e=n);){var l=t.charAt(e);if(e++,A.isDigit(l)){var c=l-\"0\";o.selfMultiply(F.TEN),o.selfAdd(c),s++}else{if(\".\"!==l){if(\"e\"===l||\"E\"===l){var p=t.substring(e);try{u=M.parseInt(p)}catch(e){throw e instanceof Error?new Error(\"Invalid exponent \"+p+\" in string \"+t):e}break}throw new Error(\"Unexpected character '\"+l+\"' at position \"+e+\" in string \"+t)}a=s}}var h=o,f=s-a-u;if(0===f)h=o;else if(f>0){var g=F.TEN.pow(f);h=o.divide(g)}else if(f<0){var d=F.TEN.pow(-f);h=o.multiply(d)}return i?h.negate():h},F.createNaN=function(){return new F(v.NaN,v.NaN)},F.copy=function(t){return new F(t)},F.magnitude=function(t){var e=Math.abs(t),n=Math.log(e)/Math.log(10),i=Math.trunc(Math.floor(n));return 10*Math.pow(10,i)<=e&&(i+=1),i},F.stringOfChar=function(t,e){for(var n=new D,i=0;i0){if(o<=0)return q.signum(s);i=r+o}else{if(!(r<0))return q.signum(s);if(o>=0)return q.signum(s);i=-r-o}var a=q.DP_SAFE_EPSILON*i;return s>=a||-s>=a?q.signum(s):2},q.signum=function(t){return t>0?1:t<0?-1:0},B.DP_SAFE_EPSILON.get=function(){return 1e-15},Object.defineProperties(q,B);var V=function(){},U={X:{configurable:!0},Y:{configurable:!0},Z:{configurable:!0},M:{configurable:!0}};U.X.get=function(){return 0},U.Y.get=function(){return 1},U.Z.get=function(){return 2},U.M.get=function(){return 3},V.prototype.setOrdinate=function(t,e,n){},V.prototype.size=function(){},V.prototype.getOrdinate=function(t,e){},V.prototype.getCoordinate=function(){},V.prototype.getCoordinateCopy=function(t){},V.prototype.getDimension=function(){},V.prototype.getX=function(t){},V.prototype.clone=function(){},V.prototype.expandEnvelope=function(t){},V.prototype.copy=function(){},V.prototype.getY=function(t){},V.prototype.toCoordinateArray=function(){},V.prototype.interfaces_=function(){return[x]},V.prototype.getClass=function(){return V},Object.defineProperties(V,U);var z=function(){},X=function(t){function e(){t.call(this,\"Projective point not representable on the Cartesian plane.\")}return t&&(e.__proto__=t),e.prototype=Object.create(t&&t.prototype),e.prototype.constructor=e,e.prototype.interfaces_=function(){return[]},e.prototype.getClass=function(){return e},e}(z),Y=function(){};Y.arraycopy=function(t,e,n,i,r){for(var o=0,s=e;st._minx?this._minx:t._minx,n=this._miny>t._miny?this._miny:t._miny,i=this._maxx=this._minx&&e.getMaxX()<=this._maxx&&e.getMinY()>=this._miny&&e.getMaxY()<=this._maxy)}}else if(2===arguments.length){var n=arguments[0],i=arguments[1];return!this.isNull()&&(n>=this._minx&&n<=this._maxx&&i>=this._miny&&i<=this._maxy)}},j.prototype.intersects=function(){if(1===arguments.length){if(arguments[0]instanceof j){var t=arguments[0];return!this.isNull()&&!t.isNull()&&!(t._minx>this._maxx||t._maxxthis._maxy||t._maxythis._maxx||nthis._maxy||ithis._maxx&&(this._maxx=e._maxx),e._minythis._maxy&&(this._maxy=e._maxy))}}else if(2===arguments.length){var n=arguments[0],i=arguments[1];this.isNull()?(this._minx=n,this._maxx=n,this._miny=i,this._maxy=i):(nthis._maxx&&(this._maxx=n),ithis._maxy&&(this._maxy=i))}},j.prototype.minExtent=function(){if(this.isNull())return 0;var t=this.getWidth(),e=this.getHeight();return te._minx?1:this._minye._miny?1:this._maxxe._maxx?1:this._maxye._maxy?1:0},j.prototype.translate=function(t,e){if(this.isNull())return null;this.init(this.getMinX()+t,this.getMaxX()+t,this.getMinY()+e,this.getMaxY()+e)},j.prototype.toString=function(){return\"Env[\"+this._minx+\" : \"+this._maxx+\", \"+this._miny+\" : \"+this._maxy+\"]\"},j.prototype.setToNull=function(){this._minx=0,this._maxx=-1,this._miny=0,this._maxy=-1},j.prototype.getHeight=function(){return this.isNull()?0:this._maxy-this._miny},j.prototype.maxExtent=function(){if(this.isNull())return 0;var t=this.getWidth(),e=this.getHeight();return t>e?t:e},j.prototype.expandBy=function(){if(1===arguments.length){var t=arguments[0];this.expandBy(t,t)}else if(2===arguments.length){var e=arguments[0],n=arguments[1];if(this.isNull())return null;this._minx-=e,this._maxx+=e,this._miny-=n,this._maxy+=n,(this._minx>this._maxx||this._miny>this._maxy)&&this.setToNull()}},j.prototype.contains=function(){if(1===arguments.length){if(arguments[0]instanceof j){var t=arguments[0];return this.covers(t)}if(arguments[0]instanceof C){var e=arguments[0];return this.covers(e)}}else if(2===arguments.length){var n=arguments[0],i=arguments[1];return this.covers(n,i)}},j.prototype.centre=function(){return this.isNull()?null:new C((this.getMinX()+this.getMaxX())/2,(this.getMinY()+this.getMaxY())/2)},j.prototype.init=function(){if(0===arguments.length)this.setToNull();else if(1===arguments.length){if(arguments[0]instanceof C){var t=arguments[0];this.init(t.x,t.x,t.y,t.y)}else if(arguments[0]instanceof j){var e=arguments[0];this._minx=e._minx,this._maxx=e._maxx,this._miny=e._miny,this._maxy=e._maxy}}else if(2===arguments.length){var n=arguments[0],i=arguments[1];this.init(n.x,i.x,n.y,i.y)}else if(4===arguments.length){var r=arguments[0],o=arguments[1],s=arguments[2],a=arguments[3];rt._maxx&&(e=this._minx-t._maxx);var n=0;return this._maxyt._maxy&&(n=this._miny-t._maxy),0===e?n:0===n?e:Math.sqrt(e*e+n*n)},j.prototype.hashCode=function(){var t=17;return t=37*t+C.hashCode(this._minx),t=37*t+C.hashCode(this._maxx),t=37*t+C.hashCode(this._miny),t=37*t+C.hashCode(this._maxy)},j.prototype.interfaces_=function(){return[E,e]},j.prototype.getClass=function(){return j},j.intersects=function(){if(3===arguments.length){var t=arguments[0],e=arguments[1],n=arguments[2];return n.x>=(t.xe.x?t.x:e.x)&&n.y>=(t.ye.y?t.y:e.y)}if(4===arguments.length){var i=arguments[0],r=arguments[1],o=arguments[2],s=arguments[3],a=Math.min(o.x,s.x),u=Math.max(o.x,s.x),l=Math.min(i.x,r.x),c=Math.max(i.x,r.x);return!(l>u)&&(!(cu)&&!(cthis.getEdgeDistance(t,1)?(this._intLineIndex[t][0]=0,this._intLineIndex[t][1]=1):(this._intLineIndex[t][0]=1,this._intLineIndex[t][1]=0)}},nt.prototype.isProper=function(){return this.hasIntersection()&&this._isProper},nt.prototype.setPrecisionModel=function(t){this._precisionModel=t},nt.prototype.isInteriorIntersection=function(){if(0===arguments.length)return!!this.isInteriorIntersection(0)||!!this.isInteriorIntersection(1);if(1===arguments.length){for(var t=arguments[0],e=0;er?i:r;else{var s=Math.abs(t.x-e.x),a=Math.abs(t.y-e.y);0!==(o=i>r?s:a)||t.equals(e)||(o=Math.max(s,a))}return et.isTrue(!(0===o&&!t.equals(e)),\"Bad distance calculation\"),o},nt.nonRobustComputeEdgeDistance=function(t,e,n){var i=t.x-e.x,r=t.y-e.y,o=Math.sqrt(i*i+r*r);return et.isTrue(!(0===o&&!t.equals(e)),\"Invalid distance calculation\"),o},it.DONT_INTERSECT.get=function(){return 0},it.DO_INTERSECT.get=function(){return 1},it.COLLINEAR.get=function(){return 2},it.NO_INTERSECTION.get=function(){return 0},it.POINT_INTERSECTION.get=function(){return 1},it.COLLINEAR_INTERSECTION.get=function(){return 2},Object.defineProperties(nt,it);var rt=function(t){function e(){t.apply(this,arguments)}return t&&(e.__proto__=t),e.prototype=Object.create(t&&t.prototype),e.prototype.constructor=e,e.prototype.isInSegmentEnvelopes=function(t){var e=new j(this._inputLines[0][0],this._inputLines[0][1]),n=new j(this._inputLines[1][0],this._inputLines[1][1]);return e.contains(t)&&n.contains(t)},e.prototype.computeIntersection=function(){if(3!==arguments.length)return t.prototype.computeIntersection.apply(this,arguments);var e=arguments[0],n=arguments[1],i=arguments[2];if(this._isProper=!1,j.intersects(n,i,e)&&0===at.orientationIndex(n,i,e)&&0===at.orientationIndex(i,n,e))return this._isProper=!0,(e.equals(n)||e.equals(i))&&(this._isProper=!1),this._result=t.POINT_INTERSECTION,null;this._result=t.NO_INTERSECTION},e.prototype.normalizeToMinimum=function(t,e,n,i,r){r.x=this.smallestInAbsValue(t.x,e.x,n.x,i.x),r.y=this.smallestInAbsValue(t.y,e.y,n.y,i.y),t.x-=r.x,t.y-=r.y,e.x-=r.x,e.y-=r.y,n.x-=r.x,n.y-=r.y,i.x-=r.x,i.y-=r.y},e.prototype.safeHCoordinateIntersection=function(t,n,i,r){var o=null;try{o=k.intersection(t,n,i,r)}catch(s){if(!(s instanceof X))throw s;o=e.nearestEndpoint(t,n,i,r)}return o},e.prototype.intersection=function(t,n,i,r){var o=this.intersectionWithNormalization(t,n,i,r);return this.isInSegmentEnvelopes(o)||(o=new C(e.nearestEndpoint(t,n,i,r))),null!==this._precisionModel&&this._precisionModel.makePrecise(o),o},e.prototype.smallestInAbsValue=function(t,e,n,i){var r=t,o=Math.abs(r);return Math.abs(e)1e-4&&Y.out.println(\"Distance = \"+r.distance(o))},e.prototype.intersectionWithNormalization=function(t,e,n,i){var r=new C(t),o=new C(e),s=new C(n),a=new C(i),u=new C;this.normalizeToEnvCentre(r,o,s,a,u);var l=this.safeHCoordinateIntersection(r,o,s,a);return l.x+=u.x,l.y+=u.y,l},e.prototype.computeCollinearIntersection=function(e,n,i,r){var o=j.intersects(e,n,i),s=j.intersects(e,n,r),a=j.intersects(i,r,e),u=j.intersects(i,r,n);return o&&s?(this._intPt[0]=i,this._intPt[1]=r,t.COLLINEAR_INTERSECTION):a&&u?(this._intPt[0]=e,this._intPt[1]=n,t.COLLINEAR_INTERSECTION):o&&a?(this._intPt[0]=i,this._intPt[1]=e,!i.equals(e)||s||u?t.COLLINEAR_INTERSECTION:t.POINT_INTERSECTION):o&&u?(this._intPt[0]=i,this._intPt[1]=n,!i.equals(n)||s||a?t.COLLINEAR_INTERSECTION:t.POINT_INTERSECTION):s&&a?(this._intPt[0]=r,this._intPt[1]=e,!r.equals(e)||o||u?t.COLLINEAR_INTERSECTION:t.POINT_INTERSECTION):s&&u?(this._intPt[0]=r,this._intPt[1]=n,!r.equals(n)||o||a?t.COLLINEAR_INTERSECTION:t.POINT_INTERSECTION):t.NO_INTERSECTION},e.prototype.normalizeToEnvCentre=function(t,e,n,i,r){var o=t.xe.x?t.x:e.x,u=t.y>e.y?t.y:e.y,l=n.xi.x?n.x:i.x,h=n.y>i.y?n.y:i.y,f=((o>l?o:l)+(ac?s:c)+(u0&&s>0||o<0&&s<0)return t.NO_INTERSECTION;var a=at.orientationIndex(i,r,e),u=at.orientationIndex(i,r,n);if(a>0&&u>0||a<0&&u<0)return t.NO_INTERSECTION;return 0===o&&0===s&&0===a&&0===u?this.computeCollinearIntersection(e,n,i,r):(0===o||0===s||0===a||0===u?(this._isProper=!1,e.equals2D(i)||e.equals2D(r)?this._intPt[0]=e:n.equals2D(i)||n.equals2D(r)?this._intPt[0]=n:0===o?this._intPt[0]=new C(i):0===s?this._intPt[0]=new C(r):0===a?this._intPt[0]=new C(e):0===u&&(this._intPt[0]=new C(n))):(this._isProper=!0,this._intPt[0]=this.intersection(e,n,i,r)),t.POINT_INTERSECTION)},e.prototype.interfaces_=function(){return[]},e.prototype.getClass=function(){return e},e.nearestEndpoint=function(t,e,n,i){var r=t,o=at.distancePointLine(t,n,i),s=at.distancePointLine(e,n,i);return s0?n>0?-r:r:n>0?r:-r;if(0===e||0===n)return i>0?t>0?r:-r:t>0?-r:r;if(e>0?i>0?e<=i||(r=-r,o=t,t=n,n=o,o=e,e=i,i=o):e<=-i?(r=-r,n=-n,i=-i):(o=t,t=-n,n=o,o=e,e=-i,i=o):i>0?-e<=i?(r=-r,t=-t,e=-e):(o=-t,t=n,n=o,o=-e,e=i,i=o):e>=i?(t=-t,e=-e,n=-n,i=-i):(r=-r,o=-t,t=-n,n=o,o=-e,e=-i,i=o),t>0){if(!(n>0))return r;if(!(t<=n))return r}else{if(n>0)return-r;if(!(t>=n))return-r;r=-r,t=-t,n=-n}for(;;){if(s=Math.floor(n/t),n-=s*t,(i-=s*e)<0)return-r;if(i>e)return r;if(t>n+n){if(ei+i)return-r;n=t-n,i=e-i,r=-r}if(0===i)return 0===n?0:-r;if(0===n)return r;if(s=Math.floor(t/n),t-=s*n,(e-=s*i)<0)return r;if(e>i)return-r;if(n>t+t){if(ie+e)return r;t=n-t,e=i-e,r=-r}if(0===e)return 0===t?0:r;if(0===t)return-r}};var st=function(){this._p=null,this._crossingCount=0,this._isPointOnSegment=!1;var t=arguments[0];this._p=t};st.prototype.countSegment=function(t,e){if(t.xi&&(n=e.x,i=t.x),this._p.x>=n&&this._p.x<=i&&(this._isPointOnSegment=!0),null}if(t.y>this._p.y&&e.y<=this._p.y||e.y>this._p.y&&t.y<=this._p.y){var r=t.x-this._p.x,o=t.y-this._p.y,s=e.x-this._p.x,a=e.y-this._p.y,u=ot.signOfDet2x2(r,o,s,a);if(0===u)return this._isPointOnSegment=!0,null;a0&&this._crossingCount++}},st.prototype.isPointInPolygon=function(){return this.getLocation()!==w.EXTERIOR},st.prototype.getLocation=function(){return this._isPointOnSegment?w.BOUNDARY:this._crossingCount%2==1?w.INTERIOR:w.EXTERIOR},st.prototype.isOnSegment=function(){return this._isPointOnSegment},st.prototype.interfaces_=function(){return[]},st.prototype.getClass=function(){return st},st.locatePointInRing=function(){if(arguments[0]instanceof C&&T(arguments[1],V)){for(var t=arguments[0],e=arguments[1],n=new st(t),i=new C,r=new C,o=1;o1||a<0||a>1)&&(r=!0)}}else r=!0;return r?R.min(at.distancePointLine(t,n,i),at.distancePointLine(e,n,i),at.distancePointLine(n,t,e),at.distancePointLine(i,t,e)):0},at.isPointInRing=function(t,e){return at.locatePointInRing(t,e)!==w.EXTERIOR},at.computeLength=function(t){var e=t.size();if(e<=1)return 0;var n=0,i=new C;t.getCoordinate(0,i);for(var r=i.x,o=i.y,s=1;sn.y&&(n=o,i=r)}var s=i;do{(s-=1)<0&&(s=e)}while(t[s].equals2D(n)&&s!==i);var a=i;do{a=(a+1)%e}while(t[a].equals2D(n)&&a!==i);var u=t[s],l=t[a];if(u.equals2D(n)||l.equals2D(n)||u.equals2D(l))return!1;var c=at.computeOrientation(u,n,l),p=!1;return p=0===c?u.x>l.x:c>0,p},at.locatePointInRing=function(t,e){return st.locatePointInRing(t,e)},at.distancePointLinePerpendicular=function(t,e,n){var i=(n.x-e.x)*(n.x-e.x)+(n.y-e.y)*(n.y-e.y),r=((e.y-t.y)*(n.x-e.x)-(e.x-t.x)*(n.y-e.y))/i;return Math.abs(r)*Math.sqrt(i)},at.computeOrientation=function(t,e,n){return at.orientationIndex(t,e,n)},at.distancePointLine=function(){if(2===arguments.length){var t=arguments[0],e=arguments[1];if(0===e.length)throw new m(\"Line array must contain at least one vertex\");for(var n=t.distance(e[0]),i=0;i=1)return o.distance(a);var c=((s.y-o.y)*(a.x-s.x)-(s.x-o.x)*(a.y-s.y))/u;return Math.abs(c)*Math.sqrt(u)}},at.isOnLine=function(t,e){for(var n=new rt,i=1;i0},_t.prototype.interfaces_=function(){return[gt]},_t.prototype.getClass=function(){return _t};var mt=function(){};mt.prototype.isInBoundary=function(t){return t>1},mt.prototype.interfaces_=function(){return[gt]},mt.prototype.getClass=function(){return mt};var vt=function(){};vt.prototype.isInBoundary=function(t){return 1===t},vt.prototype.interfaces_=function(){return[gt]},vt.prototype.getClass=function(){return vt};var It=function(){};It.prototype.add=function(){},It.prototype.addAll=function(){},It.prototype.isEmpty=function(){},It.prototype.iterator=function(){},It.prototype.size=function(){},It.prototype.toArray=function(){},It.prototype.remove=function(){},(n.prototype=new Error).name=\"IndexOutOfBoundsException\";var Et=function(){};Et.prototype.hasNext=function(){},Et.prototype.next=function(){},Et.prototype.remove=function(){};var xt=function(t){function e(){t.apply(this,arguments)}return t&&(e.__proto__=t),e.prototype=Object.create(t&&t.prototype),e.prototype.constructor=e,e.prototype.get=function(){},e.prototype.set=function(){},e.prototype.isEmpty=function(){},e}(It);(i.prototype=new Error).name=\"NoSuchElementException\";var Nt=function(t){function e(){t.call(this),this.array_=[],arguments[0]instanceof It&&this.addAll(arguments[0])}return t&&(e.__proto__=t),e.prototype=Object.create(t&&t.prototype),e.prototype.constructor=e,e.prototype.ensureCapacity=function(){},e.prototype.interfaces_=function(){return[t,It]},e.prototype.add=function(t){return 1===arguments.length?this.array_.push(t):this.array_.splice(arguments[0],arguments[1]),!0},e.prototype.clear=function(){this.array_=[]},e.prototype.addAll=function(t){for(var e=t.iterator();e.hasNext();)this.add(e.next());return!0},e.prototype.set=function(t,e){var n=this.array_[t];return this.array_[t]=e,n},e.prototype.iterator=function(){return new Ct(this)},e.prototype.get=function(t){if(t<0||t>=this.size())throw new n;return this.array_[t]},e.prototype.isEmpty=function(){return 0===this.array_.length},e.prototype.size=function(){return this.array_.length},e.prototype.toArray=function(){for(var t=[],e=0,n=this.array_.length;e=1){if(this.get(this.size()-1).equals2D(r))return null}t.prototype.add.call(this,r)}else if(arguments[0]instanceof Object&&\"boolean\"==typeof arguments[1]){var o=arguments[0],s=arguments[1];return this.add(o,s),!0}}else if(3===arguments.length){if(\"boolean\"==typeof arguments[2]&&arguments[0]instanceof Array&&\"boolean\"==typeof arguments[1]){var a=arguments[0],u=arguments[1];if(arguments[2])for(var l=0;l=0;c--)this.add(a[c],u);return!0}if(\"boolean\"==typeof arguments[2]&&Number.isInteger(arguments[0])&&arguments[1]instanceof C){var p=arguments[0],h=arguments[1];if(!arguments[2]){var f=this.size();if(f>0){if(p>0){if(this.get(p-1).equals2D(h))return null}if(p_&&(m=-1);for(var v=y;v!==_;v+=m)this.add(g[v],d);return!0}},e.prototype.closeRing=function(){this.size()>0&&this.add(new C(this.get(0)),!1)},e.prototype.interfaces_=function(){return[]},e.prototype.getClass=function(){return e},Object.defineProperties(e,n),e}(Nt),Lt=function(){},bt={ForwardComparator:{configurable:!0},BidirectionalComparator:{configurable:!0},coordArrayType:{configurable:!0}};bt.ForwardComparator.get=function(){return wt},bt.BidirectionalComparator.get=function(){return Ot},bt.coordArrayType.get=function(){return new Array(0).fill(null)},Lt.prototype.interfaces_=function(){return[]},Lt.prototype.getClass=function(){return Lt},Lt.isRing=function(t){return!(t.length<4)&&!!t[0].equals2D(t[t.length-1])},Lt.ptNotInList=function(t,e){for(var n=0;n=t?e:[]},Lt.indexOf=function(t,e){for(var n=0;n0)&&(e=t[n]);return e},Lt.extract=function(t,e,n){e=R.clamp(e,0,t.length);var i=(n=R.clamp(n,-1,t.length))-e+1;n<0&&(i=0),e>=t.length&&(i=0),ni.length)return 1;if(0===n.length)return 0;var r=Lt.compare(n,i);return Lt.isEqualReversed(n,i)?0:r},Ot.prototype.OLDcompare=function(t,e){var n=t,i=e;if(n.lengthi.length)return 1;if(0===n.length)return 0;for(var r=Lt.increasingDirection(n),o=Lt.increasingDirection(i),s=r>0?0:n.length-1,a=o>0?0:n.length-1,u=0;u0))return e.value;e=e.right}}return null},p.prototype.put=function(t,e){if(null===this.root_)return this.root_={key:t,value:e,left:null,right:null,parent:null,color:Mt,getValue:function(){return this.value},getKey:function(){return this.key}},this.size_=1,null;var n,i,r=this.root_;do{if(n=r,(i=t.compareTo(r.key))<0)r=r.left;else{if(!(i>0)){var o=r.value;return r.value=e,o}r=r.right}}while(null!==r);var s={key:t,left:null,right:null,value:e,parent:n,color:Mt,getValue:function(){return this.value},getKey:function(){return this.key}};return i<0?n.left=s:n.right=s,this.fixAfterInsertion(s),this.size_++,null},p.prototype.fixAfterInsertion=function(t){for(t.color=1;null!=t&&t!==this.root_&&1===t.parent.color;)if(a(t)===l(a(a(t)))){var e=c(a(a(t)));1===s(e)?(u(a(t),Mt),u(e,Mt),u(a(a(t)),1),t=a(a(t))):(t===c(a(t))&&(t=a(t),this.rotateLeft(t)),u(a(t),Mt),u(a(a(t)),1),this.rotateRight(a(a(t))))}else{var n=l(a(a(t)));1===s(n)?(u(a(t),Mt),u(n,Mt),u(a(a(t)),1),t=a(a(t))):(t===l(a(t))&&(t=a(t),this.rotateRight(t)),u(a(t),Mt),u(a(a(t)),1),this.rotateLeft(a(a(t))))}this.root_.color=Mt},p.prototype.values=function(){var t=new Nt,e=this.getFirstEntry();if(null!==e)for(t.add(e.value);null!==(e=p.successor(e));)t.add(e.value);return t},p.prototype.entrySet=function(){var t=new Pt,e=this.getFirstEntry();if(null!==e)for(t.add(e);null!==(e=p.successor(e));)t.add(e);return t},p.prototype.rotateLeft=function(t){if(null!=t){var e=t.right;t.right=e.left,null!=e.left&&(e.left.parent=t),e.parent=t.parent,null===t.parent?this.root_=e:t.parent.left===t?t.parent.left=e:t.parent.right=e,e.left=t,t.parent=e}},p.prototype.rotateRight=function(t){if(null!=t){var e=t.left;t.left=e.right,null!=e.right&&(e.right.parent=t),e.parent=t.parent,null===t.parent?this.root_=e:t.parent.right===t?t.parent.right=e:t.parent.left=e,e.right=t,t.parent=e}},p.prototype.getFirstEntry=function(){var t=this.root_;if(null!=t)for(;null!=t.left;)t=t.left;return t},p.successor=function(t){if(null===t)return null;if(null!==t.right){for(var e=t.right;null!==e.left;)e=e.left;return e}for(var n=t.parent,i=t;null!==n&&i===n.right;)i=n,n=n.parent;return n},p.prototype.size=function(){return this.size_};var At=function(){};At.prototype.interfaces_=function(){return[]},At.prototype.getClass=function(){return At},h.prototype=new o,(f.prototype=new h).contains=function(t){for(var e=0,n=this.array_.length;e=0;){var s=r.substring(0,o);i.add(s),o=(r=r.substring(o+n)).indexOf(e)}r.length>0&&i.add(r);for(var a=new Array(i.size()).fill(null),u=0;u0)for(var o=r;o0&&i.append(\" \");for(var o=0;o0&&i.append(\",\"),i.append(jt.toString(t.getOrdinate(r,o)))}return i.append(\")\"),i.toString()}},Wt.ensureValidRing=function(t,e){var n=e.size();if(0===n)return e;if(n<=3)return Wt.createClosedRing(t,e,4);return e.getOrdinate(0,V.X)===e.getOrdinate(n-1,V.X)&&e.getOrdinate(0,V.Y)===e.getOrdinate(n-1,V.Y)?e:Wt.createClosedRing(t,e,n+1)},Wt.createClosedRing=function(t,e,n){var i=t.create(n,e.getDimension()),r=e.size();Wt.copy(e,0,i,0,r);for(var o=r;o0&&Wt.reverse(this._points),null}},e.prototype.getCoordinate=function(){return this.isEmpty()?null:this._points.getCoordinate(0)},e.prototype.getBoundaryDimension=function(){return this.isClosed()?qt.FALSE:0},e.prototype.isClosed=function(){return!this.isEmpty()&&this.getCoordinateN(0).equals2D(this.getCoordinateN(this.getNumPoints()-1))},e.prototype.getEndPoint=function(){return this.isEmpty()?null:this.getPointN(this.getNumPoints()-1)},e.prototype.getDimension=function(){return 1},e.prototype.getLength=function(){return at.computeLength(this._points)},e.prototype.getNumPoints=function(){return this._points.size()},e.prototype.reverse=function(){var t=this._points.copy();Wt.reverse(t);return this.getFactory().createLineString(t)},e.prototype.compareToSameClass=function(){if(1===arguments.length){for(var t=arguments[0],e=0,n=0;e= 2)\");this._points=t},e.prototype.isCoordinate=function(t){for(var e=0;e=1&&this.getCoordinateSequence().size()= 4)\")},e.prototype.getGeometryType=function(){return\"LinearRing\"},e.prototype.copy=function(){return new e(this._points.copy(),this._factory)},e.prototype.interfaces_=function(){return[]},e.prototype.getClass=function(){return e},n.MINIMUM_VALID_SIZE.get=function(){return 4},n.serialVersionUID.get=function(){return-0x3b229e262367a600},Object.defineProperties(e,n),e}(Kt),ne=function(t){function e(){t.apply(this,arguments)}t&&(e.__proto__=t),(e.prototype=Object.create(t&&t.prototype)).constructor=e;var n={serialVersionUID:{configurable:!0}};return e.prototype.getSortIndex=function(){return ct.SORTINDEX_MULTIPOLYGON},e.prototype.equalsExact=function(){if(2===arguments.length){var e=arguments[0],n=arguments[1];return!!this.isEquivalentClass(e)&&t.prototype.equalsExact.call(this,e,n)}return t.prototype.equalsExact.apply(this,arguments)},e.prototype.getBoundaryDimension=function(){return 1},e.prototype.getDimension=function(){return 2},e.prototype.reverse=function(){for(var t=this._geometries.length,e=new Array(t).fill(null),n=0;n0?e.createPoint(n[0]):e.createPoint():t},se.prototype.interfaces_=function(){return[ie.GeometryEditorOperation]},se.prototype.getClass=function(){return se};var ae=function(){};ae.prototype.edit=function(t,e){return t instanceof ee?e.createLinearRing(this.edit(t.getCoordinateSequence(),t)):t instanceof Kt?e.createLineString(this.edit(t.getCoordinateSequence(),t)):t instanceof Qt?e.createPoint(this.edit(t.getCoordinateSequence(),t)):t},ae.prototype.interfaces_=function(){return[ie.GeometryEditorOperation]},ae.prototype.getClass=function(){return ae};var ue=function(){if(this._dimension=3,this._coordinates=null,1===arguments.length){if(arguments[0]instanceof Array)this._coordinates=arguments[0],this._dimension=3;else if(Number.isInteger(arguments[0])){var t=arguments[0];this._coordinates=new Array(t).fill(null);for(var e=0;e0){var t=new D(17*this._coordinates.length);t.append(\"(\"),t.append(this._coordinates[0]);for(var e=1;e3&&(i=3),i<2?new ue(n):new ue(n,i)}},ce.prototype.interfaces_=function(){return[b,e]},ce.prototype.getClass=function(){return ce},ce.instance=function(){return ce.instanceObject},pe.serialVersionUID.get=function(){return-0x38e49fa6cf6f2e00},pe.instanceObject.get=function(){return new ce},Object.defineProperties(ce,pe);var he=function(t){function e(){t.call(this),this.map_=new Map}return t&&(e.__proto__=t),e.prototype=Object.create(t&&t.prototype),e.prototype.constructor=e,e.prototype.get=function(t){return this.map_.get(t)||null},e.prototype.put=function(t,e){return this.map_.set(t,e),e},e.prototype.values=function(){for(var t=new Nt,e=this.map_.values(),n=e.next();!n.done;)t.add(n.value),n=e.next();return t},e.prototype.entrySet=function(){var t=new Pt;return this.map_.entries().forEach(function(e){return t.add(e)}),t},e.prototype.size=function(){return this.map_.size()},e}(Tt),fe=function t(){if(this._modelType=null,this._scale=null,0===arguments.length)this._modelType=t.FLOATING;else if(1===arguments.length)if(arguments[0]instanceof de){var e=arguments[0];this._modelType=e,e===t.FIXED&&this.setScale(1)}else if(\"number\"==typeof arguments[0]){var n=arguments[0];this._modelType=t.FIXED,this.setScale(n)}else if(arguments[0]instanceof t){var i=arguments[0];this._modelType=i._modelType,this._scale=i._scale}},ge={serialVersionUID:{configurable:!0},maximumPreciseValue:{configurable:!0}};fe.prototype.equals=function(t){if(!(t instanceof fe))return!1;var e=t;return this._modelType===e._modelType&&this._scale===e._scale},fe.prototype.compareTo=function(t){var e=t,n=this.getMaximumSignificantDigits(),i=e.getMaximumSignificantDigits();return new M(n).compareTo(new M(i))},fe.prototype.getScale=function(){return this._scale},fe.prototype.isFloating=function(){return this._modelType===fe.FLOATING||this._modelType===fe.FLOATING_SINGLE},fe.prototype.getType=function(){return this._modelType},fe.prototype.toString=function(){var t=\"UNKNOWN\";return this._modelType===fe.FLOATING?t=\"Floating\":this._modelType===fe.FLOATING_SINGLE?t=\"Floating-Single\":this._modelType===fe.FIXED&&(t=\"Fixed (Scale=\"+this.getScale()+\")\"),t},fe.prototype.makePrecise=function(){if(\"number\"==typeof arguments[0]){var t=arguments[0];if(v.isNaN(t))return t;if(this._modelType===fe.FLOATING_SINGLE){return t}return this._modelType===fe.FIXED?Math.round(t*this._scale)/this._scale:t}if(arguments[0]instanceof C){var e=arguments[0];if(this._modelType===fe.FLOATING)return null;e.x=this.makePrecise(e.x),e.y=this.makePrecise(e.y)}},fe.prototype.getMaximumSignificantDigits=function(){var t=16;return this._modelType===fe.FLOATING?t=16:this._modelType===fe.FLOATING_SINGLE?t=6:this._modelType===fe.FIXED&&(t=1+Math.trunc(Math.ceil(Math.log(this.getScale())/Math.log(10)))),t},fe.prototype.setScale=function(t){this._scale=Math.abs(t)},fe.prototype.interfaces_=function(){return[e,E]},fe.prototype.getClass=function(){return fe},fe.mostPrecise=function(t,e){return t.compareTo(e)>=0?t:e},ge.serialVersionUID.get=function(){return 0x6bee6404e9a25c00},ge.maximumPreciseValue.get=function(){return 9007199254740992},Object.defineProperties(fe,ge);var de=function t(e){this._name=e||null,t.nameToTypeMap.put(e,this)},ye={serialVersionUID:{configurable:!0},nameToTypeMap:{configurable:!0}};de.prototype.readResolve=function(){return de.nameToTypeMap.get(this._name)},de.prototype.toString=function(){return this._name},de.prototype.interfaces_=function(){return[e]},de.prototype.getClass=function(){return de},ye.serialVersionUID.get=function(){return-552860263173159e4},ye.nameToTypeMap.get=function(){return new he},Object.defineProperties(de,ye),fe.Type=de,fe.FIXED=new de(\"FIXED\"),fe.FLOATING=new de(\"FLOATING\"),fe.FLOATING_SINGLE=new de(\"FLOATING SINGLE\");var _e=function t(){this._precisionModel=new fe,this._SRID=0,this._coordinateSequenceFactory=t.getDefaultCoordinateSequenceFactory(),0===arguments.length||(1===arguments.length?T(arguments[0],b)?this._coordinateSequenceFactory=arguments[0]:arguments[0]instanceof fe&&(this._precisionModel=arguments[0]):2===arguments.length?(this._precisionModel=arguments[0],this._SRID=arguments[1]):3===arguments.length&&(this._precisionModel=arguments[0],this._SRID=arguments[1],this._coordinateSequenceFactory=arguments[2]))},me={serialVersionUID:{configurable:!0}};_e.prototype.toGeometry=function(t){return t.isNull()?this.createPoint(null):t.getMinX()===t.getMaxX()&&t.getMinY()===t.getMaxY()?this.createPoint(new C(t.getMinX(),t.getMinY())):t.getMinX()===t.getMaxX()||t.getMinY()===t.getMaxY()?this.createLineString([new C(t.getMinX(),t.getMinY()),new C(t.getMaxX(),t.getMaxY())]):this.createPolygon(this.createLinearRing([new C(t.getMinX(),t.getMinY()),new C(t.getMinX(),t.getMaxY()),new C(t.getMaxX(),t.getMaxY()),new C(t.getMaxX(),t.getMinY()),new C(t.getMinX(),t.getMinY())]),null)},_e.prototype.createLineString=function(t){return t?t instanceof Array?new Kt(this.getCoordinateSequenceFactory().create(t),this):T(t,V)?new Kt(t,this):void 0:new Kt(this.getCoordinateSequenceFactory().create([]),this)},_e.prototype.createMultiLineString=function(){if(0===arguments.length)return new Xt(null,this);if(1===arguments.length){var t=arguments[0];return new Xt(t,this)}},_e.prototype.buildGeometry=function(t){for(var e=null,n=!1,i=!1,r=t.iterator();r.hasNext();){var o=r.next(),s=o.getClass();null===e&&(e=s),s!==e&&(n=!0),o.isGeometryCollectionOrDerived()&&(i=!0)}if(null===e)return this.createGeometryCollection();if(n||i)return this.createGeometryCollection(_e.toGeometryArray(t));var a=t.iterator().next();if(t.size()>1){if(a instanceof $t)return this.createMultiPolygon(_e.toPolygonArray(t));if(a instanceof Kt)return this.createMultiLineString(_e.toLineStringArray(t));if(a instanceof Qt)return this.createMultiPoint(_e.toPointArray(t));et.shouldNeverReachHere(\"Unhandled class: \"+a.getClass().getName())}return a},_e.prototype.createMultiPointFromCoords=function(t){return this.createMultiPoint(null!==t?this.getCoordinateSequenceFactory().create(t):null)},_e.prototype.createPoint=function(){if(0===arguments.length)return this.createPoint(this.getCoordinateSequenceFactory().create([]));if(1===arguments.length){if(arguments[0]instanceof C){var t=arguments[0];return this.createPoint(null!==t?this.getCoordinateSequenceFactory().create([t]):null)}if(T(arguments[0],V)){var e=arguments[0];return new Qt(e,this)}}},_e.prototype.getCoordinateSequenceFactory=function(){return this._coordinateSequenceFactory},_e.prototype.createPolygon=function(){if(0===arguments.length)return new $t(null,null,this);if(1===arguments.length){if(T(arguments[0],V)){var t=arguments[0];return this.createPolygon(this.createLinearRing(t))}if(arguments[0]instanceof Array){var e=arguments[0];return this.createPolygon(this.createLinearRing(e))}if(arguments[0]instanceof ee){var n=arguments[0];return this.createPolygon(n,null)}}else if(2===arguments.length){var i=arguments[0],r=arguments[1];return new $t(i,r,this)}},_e.prototype.getSRID=function(){return this._SRID},_e.prototype.createGeometryCollection=function(){if(0===arguments.length)return new zt(null,this);if(1===arguments.length){var t=arguments[0];return new zt(t,this)}},_e.prototype.createGeometry=function(t){return new ie(this).edit(t,{edit:function(){if(2===arguments.length){var t=arguments[0];return this._coordinateSequenceFactory.create(t)}}})},_e.prototype.getPrecisionModel=function(){return this._precisionModel},_e.prototype.createLinearRing=function(){if(0===arguments.length)return this.createLinearRing(this.getCoordinateSequenceFactory().create([]));if(1===arguments.length){if(arguments[0]instanceof Array){var t=arguments[0];return this.createLinearRing(null!==t?this.getCoordinateSequenceFactory().create(t):null)}if(T(arguments[0],V)){var e=arguments[0];return new ee(e,this)}}},_e.prototype.createMultiPolygon=function(){if(0===arguments.length)return new ne(null,this);if(1===arguments.length){var t=arguments[0];return new ne(t,this)}},_e.prototype.createMultiPoint=function(){if(0===arguments.length)return new te(null,this);if(1===arguments.length){if(arguments[0]instanceof Array){var t=arguments[0];return new te(t,this)}if(arguments[0]instanceof Array){var e=arguments[0];return this.createMultiPoint(null!==e?this.getCoordinateSequenceFactory().create(e):null)}if(T(arguments[0],V)){var n=arguments[0];if(null===n)return this.createMultiPoint(new Array(0).fill(null));for(var i=new Array(n.size()).fill(null),r=0;r=this.size())throw new Error;return this.array_[t]},y.prototype.push=function(t){return this.array_.push(t),t},y.prototype.pop=function(t){if(0===this.array_.length)throw new d;return this.array_.pop()},y.prototype.peek=function(){if(0===this.array_.length)throw new d;return this.array_[this.array_.length-1]},y.prototype.empty=function(){return 0===this.array_.length},y.prototype.isEmpty=function(){return this.empty()},y.prototype.search=function(t){return this.array_.indexOf(t)},y.prototype.size=function(){return this.array_.length},y.prototype.toArray=function(){for(var t=[],e=0,n=this.array_.length;e0&&this._minIndexthis._minCoord.y&&n.y>this._minCoord.y&&i===at.CLOCKWISE&&(r=!0),r&&(this._minIndex=this._minIndex-1)},be.prototype.getRightmostSideOfSegment=function(t,e){var n=t.getEdge().getCoordinates();if(e<0||e+1>=n.length)return-1;if(n[e].y===n[e+1].y)return-1;var i=Se.LEFT;return n[e].ythis._minCoord.x)&&(this._minDe=t,this._minIndex=n,this._minCoord=e[n])},be.prototype.findRightmostEdgeAtNode=function(){var t=this._minDe.getNode().getEdges();this._minDe=t.getRightmostEdge(),this._minDe.isForward()||(this._minDe=this._minDe.getSym(),this._minIndex=this._minDe.getEdge().getCoordinates().length-1)},be.prototype.findEdge=function(t){for(var e=t.iterator();e.hasNext();){var n=e.next();n.isForward()&&this.checkForRightmostCoordinate(n)}et.isTrue(0!==this._minIndex||this._minCoord.equals(this._minDe.getCoordinate()),\"inconsistency in rightmost processing\"),0===this._minIndex?this.findRightmostEdgeAtNode():this.findRightmostEdgeAtVertex(),this._orientedDe=this._minDe;this.getRightmostSide(this._minDe,this._minIndex)===Se.LEFT&&(this._orientedDe=this._minDe.getSym())},be.prototype.interfaces_=function(){return[]},be.prototype.getClass=function(){return be};var we=function(t){function e(n,i){t.call(this,e.msgWithCoord(n,i)),this.pt=i?new C(i):null,this.name=\"TopologyException\"}return t&&(e.__proto__=t),e.prototype=Object.create(t&&t.prototype),e.prototype.constructor=e,e.prototype.getCoordinate=function(){return this.pt},e.prototype.interfaces_=function(){return[]},e.prototype.getClass=function(){return e},e.msgWithCoord=function(t,e){return e?t:t+\" [ \"+e+\" ]\"},e}($),Oe=function(){this.array_=[]};Oe.prototype.addLast=function(t){this.array_.push(t)},Oe.prototype.removeFirst=function(){return this.array_.shift()},Oe.prototype.isEmpty=function(){return 0===this.array_.length};var Te=function(){this._finder=null,this._dirEdgeList=new Nt,this._nodes=new Nt,this._rightMostCoord=null,this._env=null,this._finder=new be};Te.prototype.clearVisitedEdges=function(){for(var t=this._dirEdgeList.iterator();t.hasNext();){t.next().setVisited(!1)}},Te.prototype.getRightmostCoordinate=function(){return this._rightMostCoord},Te.prototype.computeNodeDepth=function(t){for(var e=null,n=t.getEdges().iterator();n.hasNext();){var i=n.next();if(i.isVisited()||i.getSym().isVisited()){e=i;break}}if(null===e)throw new we(\"unable to find edge to compute depths at \"+t.getCoordinate());t.getEdges().computeDepths(e);for(var r=t.getEdges().iterator();r.hasNext();){var o=r.next();o.setVisited(!0),this.copySymDepths(o)}},Te.prototype.computeDepth=function(t){this.clearVisitedEdges();var e=this._finder.getEdge();e.setEdgeDepths(Se.RIGHT,t),this.copySymDepths(e),this.computeDepths(e)},Te.prototype.create=function(t){this.addReachable(t),this._finder.findEdge(this._dirEdgeList),this._rightMostCoord=this._finder.getCoordinate()},Te.prototype.findResultEdges=function(){for(var t=this._dirEdgeList.iterator();t.hasNext();){var e=t.next();e.getDepth(Se.RIGHT)>=1&&e.getDepth(Se.LEFT)<=0&&!e.isInteriorAreaEdge()&&e.setInResult(!0)}},Te.prototype.computeDepths=function(t){var e=new Pt,n=new Oe,i=t.getNode();for(n.addLast(i),e.add(i),t.setVisited(!0);!n.isEmpty();){var r=n.removeFirst();e.add(r),this.computeNodeDepth(r);for(var o=r.getEdges().iterator();o.hasNext();){var s=o.next().getSym();if(!s.isVisited()){var a=s.getNode();e.contains(a)||(n.addLast(a),e.add(a))}}}},Te.prototype.compareTo=function(t){var e=t;return this._rightMostCoord.xe._rightMostCoord.x?1:0},Te.prototype.getEnvelope=function(){if(null===this._env){for(var t=new j,e=this._dirEdgeList.iterator();e.hasNext();)for(var n=e.next().getEdge().getCoordinates(),i=0;ithis.location.length){var e=new Array(3).fill(null);e[Se.ON]=this.location[Se.ON],e[Se.LEFT]=w.NONE,e[Se.RIGHT]=w.NONE,this.location=e}for(var n=0;n1&&t.append(w.toLocationSymbol(this.location[Se.LEFT])),t.append(w.toLocationSymbol(this.location[Se.ON])),this.location.length>1&&t.append(w.toLocationSymbol(this.location[Se.RIGHT])),t.toString()},Re.prototype.setLocations=function(t,e,n){this.location[Se.ON]=t,this.location[Se.LEFT]=e,this.location[Se.RIGHT]=n},Re.prototype.get=function(t){return t1},Re.prototype.isAnyNull=function(){for(var t=0;tthis._maxNodeDegree&&(this._maxNodeDegree=e),t=this.getNext(t)}while(t!==this._startDe);this._maxNodeDegree*=2},De.prototype.addPoints=function(t,e,n){var i=t.getCoordinates();if(e){var r=1;n&&(r=0);for(var o=r;o=0;a--)this._pts.add(i[a])}},De.prototype.isHole=function(){return this._isHole},De.prototype.setInResult=function(){var t=this._startDe;do{t.getEdge().setInResult(!0),t=t.getNext()}while(t!==this._startDe)},De.prototype.containsPoint=function(t){var e=this.getLinearRing();if(!e.getEnvelopeInternal().contains(t))return!1;if(!at.isPointInRing(t,e.getCoordinates()))return!1;for(var n=this._holes.iterator();n.hasNext();){if(n.next().containsPoint(t))return!1}return!0},De.prototype.addHole=function(t){this._holes.add(t)},De.prototype.isShell=function(){return null===this._shell},De.prototype.getLabel=function(){return this._label},De.prototype.getEdges=function(){return this._edges},De.prototype.getMaxNodeDegree=function(){return this._maxNodeDegree<0&&this.computeMaxNodeDegree(),this._maxNodeDegree},De.prototype.getShell=function(){return this._shell},De.prototype.mergeLabel=function(){if(1===arguments.length){var t=arguments[0];this.mergeLabel(t,0),this.mergeLabel(t,1)}else if(2===arguments.length){var e=arguments[0],n=arguments[1],i=e.getLocation(n,Se.RIGHT);if(i===w.NONE)return null;if(this._label.getLocation(n)===w.NONE)return this._label.setLocation(n,i),null}},De.prototype.setShell=function(t){this._shell=t,null!==t&&t.addHole(this)},De.prototype.toPolygon=function(t){for(var e=new Array(this._holes.size()).fill(null),n=0;n=2,\"found partial label\"),this.computeIM(t)},Fe.prototype.isInResult=function(){return this._isInResult},Fe.prototype.isVisited=function(){return this._isVisited},Fe.prototype.interfaces_=function(){return[]},Fe.prototype.getClass=function(){return Fe};var Ge=function(t){function e(){t.call(this),this._coord=null,this._edges=null;var e=arguments[0],n=arguments[1];this._coord=e,this._edges=n,this._label=new Pe(0,w.NONE)}return t&&(e.__proto__=t),e.prototype=Object.create(t&&t.prototype),e.prototype.constructor=e,e.prototype.isIncidentEdgeInResult=function(){for(var t=this.getEdges().getEdges().iterator();t.hasNext();){if(t.next().getEdge().isInResult())return!0}return!1},e.prototype.isIsolated=function(){return 1===this._label.getGeometryCount()},e.prototype.getCoordinate=function(){return this._coord},e.prototype.print=function(t){t.println(\"node \"+this._coord+\" lbl: \"+this._label)},e.prototype.computeIM=function(t){},e.prototype.computeMergedLocation=function(t,e){var n=w.NONE;if(n=this._label.getLocation(e),!t.isNull(e)){var i=t.getLocation(e);n!==w.BOUNDARY&&(n=i)}return n},e.prototype.setLabel=function(){if(2!==arguments.length)return t.prototype.setLabel.apply(this,arguments);var e=arguments[0],n=arguments[1];null===this._label?this._label=new Pe(e,n):this._label.setLocation(e,n)},e.prototype.getEdges=function(){return this._edges},e.prototype.mergeLabel=function(){if(arguments[0]instanceof e){var t=arguments[0];this.mergeLabel(t._label)}else if(arguments[0]instanceof Pe)for(var n=arguments[0],i=0;i<2;i++){var r=this.computeMergedLocation(n,i);this._label.getLocation(i)===w.NONE&&this._label.setLocation(i,r)}},e.prototype.add=function(t){this._edges.insert(t),t.setNode(this)},e.prototype.setLabelBoundary=function(t){if(null===this._label)return null;var e=w.NONE;null!==this._label&&(e=this._label.getLocation(t));var n=null;switch(e){case w.BOUNDARY:n=w.INTERIOR;break;case w.INTERIOR:default:n=w.BOUNDARY}this._label.setLocation(t,n)},e.prototype.interfaces_=function(){return[]},e.prototype.getClass=function(){return e},e}(Fe),qe=function(){this.nodeMap=new p,this.nodeFact=null;var t=arguments[0];this.nodeFact=t};qe.prototype.find=function(t){return this.nodeMap.get(t)},qe.prototype.addNode=function(){if(arguments[0]instanceof C){var t=arguments[0],e=this.nodeMap.get(t);return null===e&&(e=this.nodeFact.createNode(t),this.nodeMap.put(t,e)),e}if(arguments[0]instanceof Ge){var n=arguments[0],i=this.nodeMap.get(n.getCoordinate());return null===i?(this.nodeMap.put(n.getCoordinate(),n),n):(i.mergeLabel(n),i)}},qe.prototype.print=function(t){for(var e=this.iterator();e.hasNext();){e.next().print(t)}},qe.prototype.iterator=function(){return this.nodeMap.values().iterator()},qe.prototype.values=function(){return this.nodeMap.values()},qe.prototype.getBoundaryNodes=function(t){for(var e=new Nt,n=this.iterator();n.hasNext();){var i=n.next();i.getLabel().getLocation(t)===w.BOUNDARY&&e.add(i)}return e},qe.prototype.add=function(t){var e=t.getCoordinate();this.addNode(e).add(t)},qe.prototype.interfaces_=function(){return[]},qe.prototype.getClass=function(){return qe};var Be=function(){},Ve={NE:{configurable:!0},NW:{configurable:!0},SW:{configurable:!0},SE:{configurable:!0}};Be.prototype.interfaces_=function(){return[]},Be.prototype.getClass=function(){return Be},Be.isNorthern=function(t){return t===Be.NE||t===Be.NW},Be.isOpposite=function(t,e){if(t===e)return!1;return 2===(t-e+4)%4},Be.commonHalfPlane=function(t,e){if(t===e)return t;if(2===(t-e+4)%4)return-1;var n=te?t:e)?3:n},Be.isInHalfPlane=function(t,e){return e===Be.SE?t===Be.SE||t===Be.SW:t===e||t===e+1},Be.quadrant=function(){if(\"number\"==typeof arguments[0]&&\"number\"==typeof arguments[1]){var t=arguments[0],e=arguments[1];if(0===t&&0===e)throw new m(\"Cannot compute the quadrant for point ( \"+t+\", \"+e+\" )\");return t>=0?e>=0?Be.NE:Be.SE:e>=0?Be.NW:Be.SW}if(arguments[0]instanceof C&&arguments[1]instanceof C){var n=arguments[0],i=arguments[1];if(i.x===n.x&&i.y===n.y)throw new m(\"Cannot compute the quadrant for two identical points \"+n);return i.x>=n.x?i.y>=n.y?Be.NE:Be.SE:i.y>=n.y?Be.NW:Be.SW}},Ve.NE.get=function(){return 0},Ve.NW.get=function(){return 1},Ve.SW.get=function(){return 2},Ve.SE.get=function(){return 3},Object.defineProperties(Be,Ve);var Ue=function(){if(this._edge=null,this._label=null,this._node=null,this._p0=null,this._p1=null,this._dx=null,this._dy=null,this._quadrant=null,1===arguments.length){var t=arguments[0];this._edge=t}else if(3===arguments.length){var e=arguments[0],n=arguments[1],i=arguments[2];this._edge=e,this.init(n,i),this._label=null}else if(4===arguments.length){var r=arguments[0],o=arguments[1],s=arguments[2],a=arguments[3];this._edge=r,this.init(o,s),this._label=a}};Ue.prototype.compareDirection=function(t){return this._dx===t._dx&&this._dy===t._dy?0:this._quadrant>t._quadrant?1:this._quadrant2){o.linkDirectedEdgesForMinimalEdgeRings();var s=o.buildMinimalRings(),a=this.findShell(s);null!==a?(this.placePolygonHoles(a,s),e.add(a)):n.addAll(s)}else i.add(o)}return i},ke.prototype.containsPoint=function(t){for(var e=this._shellList.iterator();e.hasNext();){if(e.next().containsPoint(t))return!0}return!1},ke.prototype.buildMaximalEdgeRings=function(t){for(var e=new Nt,n=t.iterator();n.hasNext();){var i=n.next();if(i.isInResult()&&i.getLabel().isArea()&&null===i.getEdgeRing()){var r=new Ae(i,this._geometryFactory);e.add(r),r.setInResult()}}return e},ke.prototype.placePolygonHoles=function(t,e){for(var n=e.iterator();n.hasNext();){var i=n.next();i.isHole()&&i.setShell(t)}},ke.prototype.getPolygons=function(){return this.computePolygons(this._shellList)},ke.prototype.findEdgeRingContaining=function(t,e){for(var n=t.getLinearRing(),i=n.getEnvelopeInternal(),r=n.getCoordinateN(0),o=null,s=null,a=e.iterator();a.hasNext();){var u=a.next(),l=u.getLinearRing(),c=l.getEnvelopeInternal();null!==o&&(s=o.getLinearRing().getEnvelopeInternal());var p=!1;c.contains(i)&&at.isPointInRing(r,l.getCoordinates())&&(p=!0),p&&(null===o||s.contains(c))&&(o=u)}return o},ke.prototype.findShell=function(t){for(var e=0,n=null,i=t.iterator();i.hasNext();){var r=i.next();r.isHole()||(n=r,e++)}return et.isTrue(e<=1,\"found two shells in MinimalEdgeRing list\"),n},ke.prototype.add=function(){if(1===arguments.length){var t=arguments[0];this.add(t.getEdgeEnds(),t.getNodes())}else if(2===arguments.length){var e=arguments[0],n=arguments[1];Ye.linkResultDirectedEdges(n);var i=this.buildMaximalEdgeRings(e),r=new Nt,o=this.buildMinimalEdgeRings(i,this._shellList,r);this.sortShellsAndHoles(o,this._shellList,r),this.placeFreeHoles(this._shellList,r)}},ke.prototype.interfaces_=function(){return[]},ke.prototype.getClass=function(){return ke};var je=function(){};je.prototype.getBounds=function(){},je.prototype.interfaces_=function(){return[]},je.prototype.getClass=function(){return je};var He=function(){this._bounds=null,this._item=null;var t=arguments[0],e=arguments[1];this._bounds=t,this._item=e};He.prototype.getItem=function(){return this._item},He.prototype.getBounds=function(){return this._bounds},He.prototype.interfaces_=function(){return[je,e]},He.prototype.getClass=function(){return He};var We=function(){this._size=null,this._items=null,this._size=0,this._items=new Nt,this._items.add(null)};We.prototype.poll=function(){if(this.isEmpty())return null;var t=this._items.get(1);return this._items.set(1,this._items.get(this._size)),this._size-=1,this.reorder(1),t},We.prototype.size=function(){return this._size},We.prototype.reorder=function(t){for(var e=null,n=this._items.get(t);2*t<=this._size&&((e=2*t)!==this._size&&this._items.get(e+1).compareTo(this._items.get(e))<0&&e++,this._items.get(e).compareTo(n)<0);t=e)this._items.set(t,this._items.get(e));this._items.set(t,n)},We.prototype.clear=function(){this._size=0,this._items.clear()},We.prototype.isEmpty=function(){return 0===this._size},We.prototype.add=function(t){this._items.add(null),this._size+=1;var e=this._size;for(this._items.set(0,t);t.compareTo(this._items.get(Math.trunc(e/2)))<0;e/=2)this._items.set(e,this._items.get(Math.trunc(e/2)));this._items.set(e,t)},We.prototype.interfaces_=function(){return[]},We.prototype.getClass=function(){return We};var Ke=function(){};Ke.prototype.visitItem=function(t){},Ke.prototype.interfaces_=function(){return[]},Ke.prototype.getClass=function(){return Ke};var Je=function(){};Je.prototype.insert=function(t,e){},Je.prototype.remove=function(t,e){},Je.prototype.query=function(){},Je.prototype.interfaces_=function(){return[]},Je.prototype.getClass=function(){return Je};var Qe=function(){if(this._childBoundables=new Nt,this._bounds=null,this._level=null,0===arguments.length);else if(1===arguments.length){var t=arguments[0];this._level=t}},Ze={serialVersionUID:{configurable:!0}};Qe.prototype.getLevel=function(){return this._level},Qe.prototype.size=function(){return this._childBoundables.size()},Qe.prototype.getChildBoundables=function(){return this._childBoundables},Qe.prototype.addChildBoundable=function(t){et.isTrue(null===this._bounds),this._childBoundables.add(t)},Qe.prototype.isEmpty=function(){return this._childBoundables.isEmpty()},Qe.prototype.getBounds=function(){return null===this._bounds&&(this._bounds=this.computeBounds()),this._bounds},Qe.prototype.interfaces_=function(){return[je,e]},Qe.prototype.getClass=function(){return Qe},Ze.serialVersionUID.get=function(){return 0x5a1e55ec41369800},Object.defineProperties(Qe,Ze);var $e=function(){};$e.reverseOrder=function(){return{compare:function(t,e){return e.compareTo(t)}}},$e.min=function(t){return $e.sort(t),t.get(0)},$e.sort=function(t,e){var n=t.toArray();e?Gt.sort(n,e):Gt.sort(n);for(var i=t.iterator(),r=0,o=n.length;rtn.area(this._boundable2)?(this.expand(this._boundable1,this._boundable2,t,e),null):(this.expand(this._boundable2,this._boundable1,t,e),null);if(n)return this.expand(this._boundable1,this._boundable2,t,e),null;if(i)return this.expand(this._boundable2,this._boundable1,t,e),null;throw new m(\"neither boundable is composite\")},tn.prototype.isLeaves=function(){return!(tn.isComposite(this._boundable1)||tn.isComposite(this._boundable2))},tn.prototype.compareTo=function(t){var e=t;return this._distancee._distance?1:0},tn.prototype.expand=function(t,e,n,i){for(var r=t.getChildBoundables().iterator();r.hasNext();){var o=r.next(),s=new tn(o,e,this._itemDistance);s.getDistance()1,\"Node capacity must be greater than 1\"),this._nodeCapacity=n}},nn={IntersectsOp:{configurable:!0},serialVersionUID:{configurable:!0},DEFAULT_NODE_CAPACITY:{configurable:!0}};en.prototype.getNodeCapacity=function(){return this._nodeCapacity},en.prototype.lastNode=function(t){return t.get(t.size()-1)},en.prototype.size=function(){if(0===arguments.length)return this.isEmpty()?0:(this.build(),this.size(this._root));if(1===arguments.length){for(var t=0,e=arguments[0].getChildBoundables().iterator();e.hasNext();){var n=e.next();n instanceof Qe?t+=this.size(n):n instanceof He&&(t+=1)}return t}},en.prototype.removeItem=function(t,e){for(var n=null,i=t.getChildBoundables().iterator();i.hasNext();){var r=i.next();r instanceof He&&r.getItem()===e&&(n=r)}return null!==n&&(t.getChildBoundables().remove(n),!0)},en.prototype.itemsTree=function(){if(0===arguments.length){this.build();var t=this.itemsTree(this._root);return null===t?new Nt:t}if(1===arguments.length){for(var e=arguments[0],n=new Nt,i=e.getChildBoundables().iterator();i.hasNext();){var r=i.next();if(r instanceof Qe){var o=this.itemsTree(r);null!==o&&n.add(o)}else r instanceof He?n.add(r.getItem()):et.shouldNeverReachHere()}return n.size()<=0?null:n}},en.prototype.insert=function(t,e){et.isTrue(!this._built,\"Cannot insert items into an STR packed R-tree after it has been built.\"),this._itemBoundables.add(new He(t,e))},en.prototype.boundablesAtLevel=function(){if(1===arguments.length){var t=arguments[0],e=new Nt;return this.boundablesAtLevel(t,this._root,e),e}if(3===arguments.length){var n=arguments[0],i=arguments[1],r=arguments[2];if(et.isTrue(n>-2),i.getLevel()===n)return r.add(i),null;for(var o=i.getChildBoundables().iterator();o.hasNext();){var s=o.next();s instanceof Qe?this.boundablesAtLevel(n,s,r):(et.isTrue(s instanceof He),-1===n&&r.add(s))}return null}},en.prototype.query=function(){if(1===arguments.length){var t=arguments[0];this.build();var e=new Nt;return this.isEmpty()?e:(this.getIntersectsOp().intersects(this._root.getBounds(),t)&&this.query(t,this._root,e),e)}if(2===arguments.length){var n=arguments[0],i=arguments[1];if(this.build(),this.isEmpty())return null;this.getIntersectsOp().intersects(this._root.getBounds(),n)&&this.query(n,this._root,i)}else if(3===arguments.length)if(T(arguments[2],Ke)&&arguments[0]instanceof Object&&arguments[1]instanceof Qe)for(var r=arguments[0],o=arguments[1],s=arguments[2],a=o.getChildBoundables(),u=0;ut&&(t=i)}}return t+1}},en.prototype.createParentBoundables=function(t,e){et.isTrue(!t.isEmpty());var n=new Nt;n.add(this.createNode(e));var i=new Nt(t);$e.sort(i,this.getComparator());for(var r=i.iterator();r.hasNext();){var o=r.next();this.lastNode(n).getChildBoundables().size()===this.getNodeCapacity()&&n.add(this.createNode(e)),this.lastNode(n).addChildBoundable(o)}return n},en.prototype.isEmpty=function(){return this._built?this._root.isEmpty():this._itemBoundables.isEmpty()},en.prototype.interfaces_=function(){return[e]},en.prototype.getClass=function(){return en},en.compareDoubles=function(t,e){return t>e?1:t0);for(var n=new Nt,i=0;i0;){var p=c.poll(),h=p.getDistance();if(h>=u)break;p.isLeaves()?(u=h,l=p):p.expandToQueue(c,u)}return[l.getBoundable(0).getItem(),l.getBoundable(1).getItem()]}}else if(3===arguments.length){var f=arguments[0],g=arguments[1],d=arguments[2],y=new He(f,g),_=new tn(this.getRoot(),y,d);return this.nearestNeighbour(_)[0]}},n.prototype.interfaces_=function(){return[Je,e]},n.prototype.getClass=function(){return n},n.centreX=function(t){return n.avg(t.getMinX(),t.getMaxX())},n.avg=function(t,e){return(t+e)/2},n.centreY=function(t){return n.avg(t.getMinY(),t.getMaxY())},i.STRtreeNode.get=function(){return an},i.serialVersionUID.get=function(){return 0x39920f7d5f261e0},i.xComparator.get=function(){return{interfaces_:function(){return[N]},compare:function(e,i){return t.compareDoubles(n.centreX(e.getBounds()),n.centreX(i.getBounds()))}}},i.yComparator.get=function(){return{interfaces_:function(){return[N]},compare:function(e,i){return t.compareDoubles(n.centreY(e.getBounds()),n.centreY(i.getBounds()))}}},i.intersectsOp.get=function(){return{interfaces_:function(){return[t.IntersectsOp]},intersects:function(t,e){return t.intersects(e)}}},i.DEFAULT_NODE_CAPACITY.get=function(){return 10},Object.defineProperties(n,i),n}(en),an=function(t){function e(){var e=arguments[0];t.call(this,e)}return t&&(e.__proto__=t),e.prototype=Object.create(t&&t.prototype),e.prototype.constructor=e,e.prototype.computeBounds=function(){for(var t=null,e=this.getChildBoundables().iterator();e.hasNext();){var n=e.next();null===t?t=new j(n.getBounds()):t.expandToInclude(n.getBounds())}return t},e.prototype.interfaces_=function(){return[]},e.prototype.getClass=function(){return e},e}(Qe),un=function(){};un.prototype.interfaces_=function(){return[]},un.prototype.getClass=function(){return un},un.relativeSign=function(t,e){return te?1:0},un.compare=function(t,e,n){if(e.equals2D(n))return 0;var i=un.relativeSign(e.x,n.x),r=un.relativeSign(e.y,n.y);switch(t){case 0:return un.compareValue(i,r);case 1:return un.compareValue(r,i);case 2:return un.compareValue(r,-i);case 3:return un.compareValue(-i,r);case 4:return un.compareValue(-i,-r);case 5:return un.compareValue(-r,-i);case 6:return un.compareValue(-r,i);case 7:return un.compareValue(i,-r)}return et.shouldNeverReachHere(\"invalid octant value\"),0},un.compareValue=function(t,e){return t<0?-1:t>0?1:e<0?-1:e>0?1:0};var ln=function(){this._segString=null,this.coord=null,this.segmentIndex=null,this._segmentOctant=null,this._isInterior=null;var t=arguments[0],e=arguments[1],n=arguments[2],i=arguments[3];this._segString=t,this.coord=new C(e),this.segmentIndex=n,this._segmentOctant=i,this._isInterior=!e.equals2D(t.getCoordinate(n))};ln.prototype.getCoordinate=function(){return this.coord},ln.prototype.print=function(t){t.print(this.coord),t.print(\" seg # = \"+this.segmentIndex)},ln.prototype.compareTo=function(t){var e=t;return this.segmentIndexe.segmentIndex?1:this.coord.equals2D(e.coord)?0:un.compare(this._segmentOctant,this.coord,e.coord)},ln.prototype.isEndPoint=function(t){return 0===this.segmentIndex&&!this._isInterior||this.segmentIndex===t},ln.prototype.isInterior=function(){return this._isInterior},ln.prototype.interfaces_=function(){return[E]},ln.prototype.getClass=function(){return ln};var cn=function(){this._nodeMap=new p,this._edge=null;var t=arguments[0];this._edge=t};cn.prototype.getSplitCoordinates=function(){var t=new St;this.addEndpoints();for(var e=this.iterator(),n=e.next();e.hasNext();){var i=e.next();this.addEdgeCoordinates(n,i,t),n=i}return t.toCoordinateArray()},cn.prototype.addCollapsedNodes=function(){var t=new Nt;this.findCollapsesFromInsertedNodes(t),this.findCollapsesFromExistingVertices(t);for(var e=t.iterator();e.hasNext();){var n=e.next().intValue();this.add(this._edge.getCoordinate(n),n)}},cn.prototype.print=function(t){t.println(\"Intersections:\");for(var e=this.iterator();e.hasNext();){e.next().print(t)}},cn.prototype.findCollapsesFromExistingVertices=function(t){for(var e=0;e=0?e>=0?n>=i?0:1:n>=i?7:6:e>=0?n>=i?3:2:n>=i?4:5}if(arguments[0]instanceof C&&arguments[1]instanceof C){var r=arguments[0],o=arguments[1],s=o.x-r.x,a=o.y-r.y;if(0===s&&0===a)throw new m(\"Cannot compute the octant for two identical points \"+r);return pn.octant(s,a)}};var hn=function(){};hn.prototype.getCoordinates=function(){},hn.prototype.size=function(){},hn.prototype.getCoordinate=function(t){},hn.prototype.isClosed=function(){},hn.prototype.setData=function(t){},hn.prototype.getData=function(){},hn.prototype.interfaces_=function(){return[]},hn.prototype.getClass=function(){return hn};var fn=function(){};fn.prototype.addIntersection=function(t,e){},fn.prototype.interfaces_=function(){return[hn]},fn.prototype.getClass=function(){return fn};var gn=function(){this._nodeList=new cn(this),this._pts=null,this._data=null;var t=arguments[0],e=arguments[1];this._pts=t,this._data=e};gn.prototype.getCoordinates=function(){return this._pts},gn.prototype.size=function(){return this._pts.length},gn.prototype.getCoordinate=function(t){return this._pts[t]},gn.prototype.isClosed=function(){return this._pts[0].equals(this._pts[this._pts.length-1])},gn.prototype.getSegmentOctant=function(t){return t===this._pts.length-1?-1:this.safeOctant(this.getCoordinate(t),this.getCoordinate(t+1))},gn.prototype.setData=function(t){this._data=t},gn.prototype.safeOctant=function(t,e){return t.equals2D(e)?0:pn.octant(t,e)},gn.prototype.getData=function(){return this._data},gn.prototype.addIntersection=function(){if(2===arguments.length){var t=arguments[0],e=arguments[1];this.addIntersectionNode(t,e)}else if(4===arguments.length){var n=arguments[0],i=arguments[1],r=arguments[3],o=new C(n.getIntersection(r));this.addIntersection(o,i)}},gn.prototype.toString=function(){return Z.toLineString(new ue(this._pts))},gn.prototype.getNodeList=function(){return this._nodeList},gn.prototype.addIntersectionNode=function(t,e){var n=e,i=n+1;if(i=0&&n>=0?Math.max(e,n):e<=0&&n<=0?Math.max(e,n):0}if(arguments[0]instanceof C){var i=arguments[0];return at.orientationIndex(this.p0,this.p1,i)}},dn.prototype.toGeometry=function(t){return t.createLineString([this.p0,this.p1])},dn.prototype.isVertical=function(){return this.p0.x===this.p1.x},dn.prototype.equals=function(t){if(!(t instanceof dn))return!1;var e=t;return this.p0.equals(e.p0)&&this.p1.equals(e.p1)},dn.prototype.intersection=function(t){var e=new rt;return e.computeIntersection(this.p0,this.p1,t.p0,t.p1),e.hasIntersection()?e.getIntersection(0):null},dn.prototype.project=function(){if(arguments[0]instanceof C){var t=arguments[0];if(t.equals(this.p0)||t.equals(this.p1))return new C(t);var e=this.projectionFactor(t),n=new C;return n.x=this.p0.x+e*(this.p1.x-this.p0.x),n.y=this.p0.y+e*(this.p1.y-this.p0.y),n}if(arguments[0]instanceof dn){var i=arguments[0],r=this.projectionFactor(i.p0),o=this.projectionFactor(i.p1);if(r>=1&&o>=1)return null;if(r<=0&&o<=0)return null;var s=this.project(i.p0);r<0&&(s=this.p0),r>1&&(s=this.p1);var a=this.project(i.p1);return o<0&&(a=this.p0),o>1&&(a=this.p1),new dn(s,a)}},dn.prototype.normalize=function(){this.p1.compareTo(this.p0)<0&&this.reverse()},dn.prototype.angle=function(){return Math.atan2(this.p1.y-this.p0.y,this.p1.x-this.p0.x)},dn.prototype.getCoordinate=function(t){return 0===t?this.p0:this.p1},dn.prototype.distancePerpendicular=function(t){return at.distancePointLinePerpendicular(t,this.p0,this.p1)},dn.prototype.minY=function(){return Math.min(this.p0.y,this.p1.y)},dn.prototype.midPoint=function(){return dn.midPoint(this.p0,this.p1)},dn.prototype.projectionFactor=function(t){if(t.equals(this.p0))return 0;if(t.equals(this.p1))return 1;var e=this.p1.x-this.p0.x,n=this.p1.y-this.p0.y,i=e*e+n*n;if(i<=0)return v.NaN;return((t.x-this.p0.x)*e+(t.y-this.p0.y)*n)/i},dn.prototype.closestPoints=function(t){var e=this.intersection(t);if(null!==e)return[e,e];var n=new Array(2).fill(null),i=v.MAX_VALUE,r=null,o=this.closestPoint(t.p0);i=o.distance(t.p0),n[0]=o,n[1]=t.p0;var s=this.closestPoint(t.p1);(r=s.distance(t.p1))0&&e<1)return this.project(t);return this.p0.distance(t)1||v.isNaN(e))&&(e=1),e},dn.prototype.toString=function(){return\"LINESTRING( \"+this.p0.x+\" \"+this.p0.y+\", \"+this.p1.x+\" \"+this.p1.y+\")\"},dn.prototype.isHorizontal=function(){return this.p0.y===this.p1.y},dn.prototype.distance=function(){if(arguments[0]instanceof dn){var t=arguments[0];return at.distanceLineLine(this.p0,this.p1,t.p0,t.p1)}if(arguments[0]instanceof C){var e=arguments[0];return at.distancePointLine(e,this.p0,this.p1)}},dn.prototype.pointAlong=function(t){var e=new C;return e.x=this.p0.x+t*(this.p1.x-this.p0.x),e.y=this.p0.y+t*(this.p1.y-this.p0.y),e},dn.prototype.hashCode=function(){var t=v.doubleToLongBits(this.p0.x);t^=31*v.doubleToLongBits(this.p0.y);var e=Math.trunc(t)^Math.trunc(t>>32),n=v.doubleToLongBits(this.p1.x);n^=31*v.doubleToLongBits(this.p1.y);return e^(Math.trunc(n)^Math.trunc(n>>32))},dn.prototype.interfaces_=function(){return[E,e]},dn.prototype.getClass=function(){return dn},dn.midPoint=function(t,e){return new C((t.x+e.x)/2,(t.y+e.y)/2)},yn.serialVersionUID.get=function(){return 0x2d2172135f411c00},Object.defineProperties(dn,yn);var _n=function(){this.tempEnv1=new j,this.tempEnv2=new j,this._overlapSeg1=new dn,this._overlapSeg2=new dn};_n.prototype.overlap=function(){if(2===arguments.length);else if(4===arguments.length){var t=arguments[0],e=arguments[1],n=arguments[2],i=arguments[3];t.getLineSegment(e,this._overlapSeg1),n.getLineSegment(i,this._overlapSeg2),this.overlap(this._overlapSeg1,this._overlapSeg2)}},_n.prototype.interfaces_=function(){return[]},_n.prototype.getClass=function(){return _n};var mn=function(){this._pts=null,this._start=null,this._end=null,this._env=null,this._context=null,this._id=null;var t=arguments[0],e=arguments[1],n=arguments[2],i=arguments[3];this._pts=t,this._start=e,this._end=n,this._context=i};mn.prototype.getLineSegment=function(t,e){e.p0=this._pts[t],e.p1=this._pts[t+1]},mn.prototype.computeSelect=function(t,e,n,i){var r=this._pts[e],o=this._pts[n];if(i.tempEnv1.init(r,o),n-e==1)return i.select(this,e),null;if(!t.intersects(i.tempEnv1))return null;var s=Math.trunc((e+n)/2);e=t.length-1)return t.length-1;for(var i=Be.quadrant(t[n],t[n+1]),r=e+1;rn.getId()&&(n.computeOverlaps(r,t),this._nOverlaps++),this._segInt.isDone())return null}},e.prototype.interfaces_=function(){return[]},e.prototype.getClass=function(){return e},n.SegmentOverlapAction.get=function(){return Nn},Object.defineProperties(e,n),e}(En),Nn=function(t){function e(){t.call(this),this._si=null;var e=arguments[0];this._si=e}return t&&(e.__proto__=t),e.prototype=Object.create(t&&t.prototype),e.prototype.constructor=e,e.prototype.overlap=function(){if(4!==arguments.length)return t.prototype.overlap.apply(this,arguments);var e=arguments[0],n=arguments[1],i=arguments[2],r=arguments[3],o=e.getContext(),s=i.getContext();this._si.processIntersections(o,n,s,r)},e.prototype.interfaces_=function(){return[]},e.prototype.getClass=function(){return e},e}(_n),Cn=function t(){if(this._quadrantSegments=t.DEFAULT_QUADRANT_SEGMENTS,this._endCapStyle=t.CAP_ROUND,this._joinStyle=t.JOIN_ROUND,this._mitreLimit=t.DEFAULT_MITRE_LIMIT,this._isSingleSided=!1,this._simplifyFactor=t.DEFAULT_SIMPLIFY_FACTOR,0===arguments.length);else if(1===arguments.length){var e=arguments[0];this.setQuadrantSegments(e)}else if(2===arguments.length){var n=arguments[0],i=arguments[1];this.setQuadrantSegments(n),this.setEndCapStyle(i)}else if(4===arguments.length){var r=arguments[0],o=arguments[1],s=arguments[2],a=arguments[3];this.setQuadrantSegments(r),this.setEndCapStyle(o),this.setJoinStyle(s),this.setMitreLimit(a)}},Sn={CAP_ROUND:{configurable:!0},CAP_FLAT:{configurable:!0},CAP_SQUARE:{configurable:!0},JOIN_ROUND:{configurable:!0},JOIN_MITRE:{configurable:!0},JOIN_BEVEL:{configurable:!0},DEFAULT_QUADRANT_SEGMENTS:{configurable:!0},DEFAULT_MITRE_LIMIT:{configurable:!0},DEFAULT_SIMPLIFY_FACTOR:{configurable:!0}};Cn.prototype.getEndCapStyle=function(){return this._endCapStyle},Cn.prototype.isSingleSided=function(){return this._isSingleSided},Cn.prototype.setQuadrantSegments=function(t){this._quadrantSegments=t,0===this._quadrantSegments&&(this._joinStyle=Cn.JOIN_BEVEL),this._quadrantSegments<0&&(this._joinStyle=Cn.JOIN_MITRE,this._mitreLimit=Math.abs(this._quadrantSegments)),t<=0&&(this._quadrantSegments=1),this._joinStyle!==Cn.JOIN_ROUND&&(this._quadrantSegments=Cn.DEFAULT_QUADRANT_SEGMENTS)},Cn.prototype.getJoinStyle=function(){return this._joinStyle},Cn.prototype.setJoinStyle=function(t){this._joinStyle=t},Cn.prototype.setSimplifyFactor=function(t){this._simplifyFactor=t<0?0:t},Cn.prototype.getSimplifyFactor=function(){return this._simplifyFactor},Cn.prototype.getQuadrantSegments=function(){return this._quadrantSegments},Cn.prototype.setEndCapStyle=function(t){this._endCapStyle=t},Cn.prototype.getMitreLimit=function(){return this._mitreLimit},Cn.prototype.setMitreLimit=function(t){this._mitreLimit=t},Cn.prototype.setSingleSided=function(t){this._isSingleSided=t},Cn.prototype.interfaces_=function(){return[]},Cn.prototype.getClass=function(){return Cn},Cn.bufferDistanceError=function(t){var e=Math.PI/2/t;return 1-Math.cos(e/2)},Sn.CAP_ROUND.get=function(){return 1},Sn.CAP_FLAT.get=function(){return 2},Sn.CAP_SQUARE.get=function(){return 3},Sn.JOIN_ROUND.get=function(){return 1},Sn.JOIN_MITRE.get=function(){return 2},Sn.JOIN_BEVEL.get=function(){return 3},Sn.DEFAULT_QUADRANT_SEGMENTS.get=function(){return 8},Sn.DEFAULT_MITRE_LIMIT.get=function(){return 5},Sn.DEFAULT_SIMPLIFY_FACTOR.get=function(){return.01},Object.defineProperties(Cn,Sn);var Ln=function(t){this._distanceTol=null,this._isDeleted=null,this._angleOrientation=at.COUNTERCLOCKWISE,this._inputLine=t||null},bn={INIT:{configurable:!0},DELETE:{configurable:!0},KEEP:{configurable:!0},NUM_PTS_TO_CHECK:{configurable:!0}};Ln.prototype.isDeletable=function(t,e,n,i){var r=this._inputLine[t],o=this._inputLine[e],s=this._inputLine[n];return!!this.isConcave(r,o,s)&&(!!this.isShallow(r,o,s,i)&&this.isShallowSampled(r,o,t,n,i))},Ln.prototype.deleteShallowConcavities=function(){for(var t=1,e=this.findNextNonDeletedIndex(t),n=this.findNextNonDeletedIndex(e),i=!1;n=0;i--)this.addPt(t[i])},wn.prototype.isRedundant=function(t){if(this._ptList.size()<1)return!1;var e=this._ptList.get(this._ptList.size()-1);return t.distance(e)Math.PI;)t-=Tn.PI_TIMES_2;for(;t<=-Math.PI;)t+=Tn.PI_TIMES_2;return t},Tn.angle=function(){if(1===arguments.length){var t=arguments[0];return Math.atan2(t.y,t.x)}if(2===arguments.length){var e=arguments[0],n=arguments[1],i=n.x-e.x,r=n.y-e.y;return Math.atan2(r,i)}},Tn.isAcute=function(t,e,n){var i=t.x-e.x,r=t.y-e.y;return i*(n.x-e.x)+r*(n.y-e.y)>0},Tn.isObtuse=function(t,e,n){var i=t.x-e.x,r=t.y-e.y;return i*(n.x-e.x)+r*(n.y-e.y)<0},Tn.interiorAngle=function(t,e,n){var i=Tn.angle(e,t),r=Tn.angle(e,n);return Math.abs(r-i)},Tn.normalizePositive=function(t){if(t<0){for(;t<0;)t+=Tn.PI_TIMES_2;t>=Tn.PI_TIMES_2&&(t=0)}else{for(;t>=Tn.PI_TIMES_2;)t-=Tn.PI_TIMES_2;t<0&&(t=0)}return t},Tn.angleBetween=function(t,e,n){var i=Tn.angle(e,t),r=Tn.angle(e,n);return Tn.diff(i,r)},Tn.diff=function(t,e){var n=null;return(n=tMath.PI&&(n=2*Math.PI-n),n},Tn.toRadians=function(t){return t*Math.PI/180},Tn.getTurn=function(t,e){var n=Math.sin(e-t);return n>0?Tn.COUNTERCLOCKWISE:n<0?Tn.CLOCKWISE:Tn.NONE},Tn.angleBetweenOriented=function(t,e,n){var i=Tn.angle(e,t),r=Tn.angle(e,n)-i;return r<=-Math.PI?r+Tn.PI_TIMES_2:r>Math.PI?r-Tn.PI_TIMES_2:r},Rn.PI_TIMES_2.get=function(){return 2*Math.PI},Rn.PI_OVER_2.get=function(){return Math.PI/2},Rn.PI_OVER_4.get=function(){return Math.PI/4},Rn.COUNTERCLOCKWISE.get=function(){return at.COUNTERCLOCKWISE},Rn.CLOCKWISE.get=function(){return at.CLOCKWISE},Rn.NONE.get=function(){return at.COLLINEAR},Object.defineProperties(Tn,Rn);var Pn=function t(){this._maxCurveSegmentError=0,this._filletAngleQuantum=null,this._closingSegLengthFactor=1,this._segList=null,this._distance=0,this._precisionModel=null,this._bufParams=null,this._li=null,this._s0=null,this._s1=null,this._s2=null,this._seg0=new dn,this._seg1=new dn,this._offset0=new dn,this._offset1=new dn,this._side=0,this._hasNarrowConcaveAngle=!1;var e=arguments[0],n=arguments[1],i=arguments[2];this._precisionModel=e,this._bufParams=n,this._li=new rt,this._filletAngleQuantum=Math.PI/2/n.getQuadrantSegments(),n.getQuadrantSegments()>=8&&n.getJoinStyle()===Cn.JOIN_ROUND&&(this._closingSegLengthFactor=t.MAX_CLOSING_SEG_LEN_FACTOR),this.init(i)},Dn={OFFSET_SEGMENT_SEPARATION_FACTOR:{configurable:!0},INSIDE_TURN_VERTEX_SNAP_DISTANCE_FACTOR:{configurable:!0},CURVE_VERTEX_SNAP_DISTANCE_FACTOR:{configurable:!0},MAX_CLOSING_SEG_LEN_FACTOR:{configurable:!0}};Pn.prototype.addNextSegment=function(t,e){if(this._s0=this._s1,this._s1=this._s2,this._s2=t,this._seg0.setCoordinates(this._s0,this._s1),this.computeOffsetSegment(this._seg0,this._side,this._distance,this._offset0),this._seg1.setCoordinates(this._s1,this._s2),this.computeOffsetSegment(this._seg1,this._side,this._distance,this._offset1),this._s1.equals(this._s2))return null;var n=at.computeOrientation(this._s0,this._s1,this._s2),i=n===at.CLOCKWISE&&this._side===Se.LEFT||n===at.COUNTERCLOCKWISE&&this._side===Se.RIGHT;0===n?this.addCollinear(e):i?this.addOutsideTurn(n,e):this.addInsideTurn(n,e)},Pn.prototype.addLineEndCap=function(t,e){var n=new dn(t,e),i=new dn;this.computeOffsetSegment(n,Se.LEFT,this._distance,i);var r=new dn;this.computeOffsetSegment(n,Se.RIGHT,this._distance,r);var o=e.x-t.x,s=e.y-t.y,a=Math.atan2(s,o);switch(this._bufParams.getEndCapStyle()){case Cn.CAP_ROUND:this._segList.addPt(i.p1),this.addFilletArc(e,a+Math.PI/2,a-Math.PI/2,at.CLOCKWISE,this._distance),this._segList.addPt(r.p1);break;case Cn.CAP_FLAT:this._segList.addPt(i.p1),this._segList.addPt(r.p1);break;case Cn.CAP_SQUARE:var u=new C;u.x=Math.abs(this._distance)*Math.cos(a),u.y=Math.abs(this._distance)*Math.sin(a);var l=new C(i.p1.x+u.x,i.p1.y+u.y),c=new C(r.p1.x+u.x,r.p1.y+u.y);this._segList.addPt(l),this._segList.addPt(c)}},Pn.prototype.getCoordinates=function(){return this._segList.getCoordinates()},Pn.prototype.addMitreJoin=function(t,e,n,i){var r=!0,o=null;try{o=k.intersection(e.p0,e.p1,n.p0,n.p1);(i<=0?1:o.distance(t)/Math.abs(i))>this._bufParams.getMitreLimit()&&(r=!1)}catch(t){if(!(t instanceof X))throw t;o=new C(0,0),r=!1}r?this._segList.addPt(o):this.addLimitedMitreJoin(e,n,i,this._bufParams.getMitreLimit())},Pn.prototype.addFilletCorner=function(t,e,n,i,r){var o=e.x-t.x,s=e.y-t.y,a=Math.atan2(s,o),u=n.x-t.x,l=n.y-t.y,c=Math.atan2(l,u);i===at.CLOCKWISE?a<=c&&(a+=2*Math.PI):a>=c&&(a-=2*Math.PI),this._segList.addPt(e),this.addFilletArc(t,a,c,i,r),this._segList.addPt(n)},Pn.prototype.addOutsideTurn=function(t,e){if(this._offset0.p1.distance(this._offset1.p0)0){var n=new C((this._closingSegLengthFactor*this._offset0.p1.x+this._s1.x)/(this._closingSegLengthFactor+1),(this._closingSegLengthFactor*this._offset0.p1.y+this._s1.y)/(this._closingSegLengthFactor+1));this._segList.addPt(n);var i=new C((this._closingSegLengthFactor*this._offset1.p0.x+this._s1.x)/(this._closingSegLengthFactor+1),(this._closingSegLengthFactor*this._offset1.p0.y+this._s1.y)/(this._closingSegLengthFactor+1));this._segList.addPt(i)}else this._segList.addPt(this._s1);this._segList.addPt(this._offset1.p0)}},Pn.prototype.createCircle=function(t){var e=new C(t.x+this._distance,t.y);this._segList.addPt(e),this.addFilletArc(t,0,2*Math.PI,-1,this._distance),this._segList.closeRing()},Pn.prototype.addBevelJoin=function(t,e){this._segList.addPt(t.p1),this._segList.addPt(e.p0)},Pn.prototype.init=function(t){this._distance=t,this._maxCurveSegmentError=t*(1-Math.cos(this._filletAngleQuantum/2)),this._segList=new wn,this._segList.setPrecisionModel(this._precisionModel),this._segList.setMinimumVertexDistance(t*Pn.CURVE_VERTEX_SNAP_DISTANCE_FACTOR)},Pn.prototype.addCollinear=function(t){this._li.computeIntersection(this._s0,this._s1,this._s1,this._s2);this._li.getIntersectionNum()>=2&&(this._bufParams.getJoinStyle()===Cn.JOIN_BEVEL||this._bufParams.getJoinStyle()===Cn.JOIN_MITRE?(t&&this._segList.addPt(this._offset0.p1),this._segList.addPt(this._offset1.p0)):this.addFilletCorner(this._s1,this._offset0.p1,this._offset1.p0,at.CLOCKWISE,this._distance))},Pn.prototype.closeRing=function(){this._segList.closeRing()},Pn.prototype.hasNarrowConcaveAngle=function(){return this._hasNarrowConcaveAngle},Pn.prototype.interfaces_=function(){return[]},Pn.prototype.getClass=function(){return Pn},Dn.OFFSET_SEGMENT_SEPARATION_FACTOR.get=function(){return.001},Dn.INSIDE_TURN_VERTEX_SNAP_DISTANCE_FACTOR.get=function(){return.001},Dn.CURVE_VERTEX_SNAP_DISTANCE_FACTOR.get=function(){return 1e-6},Dn.MAX_CLOSING_SEG_LEN_FACTOR.get=function(){return 80},Object.defineProperties(Pn,Dn);var Mn=function(){this._distance=0,this._precisionModel=null,this._bufParams=null;var t=arguments[0],e=arguments[1];this._precisionModel=t,this._bufParams=e};Mn.prototype.getOffsetCurve=function(t,e){if(this._distance=e,0===e)return null;var n=e<0,i=Math.abs(e),r=this.getSegGen(i);t.length<=1?this.computePointCurve(t[0],r):this.computeOffsetCurve(t,n,r);var o=r.getCoordinates();return n&&Lt.reverse(o),o},Mn.prototype.computeSingleSidedBufferCurve=function(t,e,n){var i=this.simplifyTolerance(this._distance);if(e){n.addSegments(t,!0);var r=Ln.simplify(t,-i),o=r.length-1;n.initSideSegments(r[o],r[o-1],Se.LEFT),n.addFirstSegment();for(var s=o-2;s>=0;s--)n.addNextSegment(r[s],!0)}else{n.addSegments(t,!1);var a=Ln.simplify(t,i),u=a.length-1;n.initSideSegments(a[0],a[1],Se.LEFT),n.addFirstSegment();for(var l=2;l<=u;l++)n.addNextSegment(a[l],!0)}n.addLastSegment(),n.closeRing()},Mn.prototype.computeRingBufferCurve=function(t,e,n){var i=this.simplifyTolerance(this._distance);e===Se.RIGHT&&(i=-i);var r=Ln.simplify(t,i),o=r.length-1;n.initSideSegments(r[o-1],r[0],e);for(var s=1;s<=o;s++){var a=1!==s;n.addNextSegment(r[s],a)}n.closeRing()},Mn.prototype.computeLineBufferCurve=function(t,e){var n=this.simplifyTolerance(this._distance),i=Ln.simplify(t,n),r=i.length-1;e.initSideSegments(i[0],i[1],Se.LEFT);for(var o=2;o<=r;o++)e.addNextSegment(i[o],!0);e.addLastSegment(),e.addLineEndCap(i[r-1],i[r]);var s=Ln.simplify(t,-n),a=s.length-1;e.initSideSegments(s[a],s[a-1],Se.LEFT);for(var u=a-2;u>=0;u--)e.addNextSegment(s[u],!0);e.addLastSegment(),e.addLineEndCap(s[1],s[0]),e.closeRing()},Mn.prototype.computePointCurve=function(t,e){switch(this._bufParams.getEndCapStyle()){case Cn.CAP_ROUND:e.createCircle(t);break;case Cn.CAP_SQUARE:e.createSquare(t)}},Mn.prototype.getLineCurve=function(t,e){if(this._distance=e,e<0&&!this._bufParams.isSingleSided())return null;if(0===e)return null;var n=Math.abs(e),i=this.getSegGen(n);if(t.length<=1)this.computePointCurve(t[0],i);else if(this._bufParams.isSingleSided()){var r=e<0;this.computeSingleSidedBufferCurve(t,r,i)}else this.computeLineBufferCurve(t,i);return i.getCoordinates()},Mn.prototype.getBufferParameters=function(){return this._bufParams},Mn.prototype.simplifyTolerance=function(t){return t*this._bufParams.getSimplifyFactor()},Mn.prototype.getRingCurve=function(t,e,n){if(this._distance=n,t.length<=2)return this.getLineCurve(t,n);if(0===n)return Mn.copyCoordinates(t);var i=this.getSegGen(n);return this.computeRingBufferCurve(t,e,i),i.getCoordinates()},Mn.prototype.computeOffsetCurve=function(t,e,n){var i=this.simplifyTolerance(this._distance);if(e){var r=Ln.simplify(t,-i),o=r.length-1;n.initSideSegments(r[o],r[o-1],Se.LEFT),n.addFirstSegment();for(var s=o-2;s>=0;s--)n.addNextSegment(r[s],!0)}else{var a=Ln.simplify(t,i),u=a.length-1;n.initSideSegments(a[0],a[1],Se.LEFT),n.addFirstSegment();for(var l=2;l<=u;l++)n.addNextSegment(a[l],!0)}n.addLastSegment()},Mn.prototype.getSegGen=function(t){return new Pn(this._precisionModel,this._bufParams,t)},Mn.prototype.interfaces_=function(){return[]},Mn.prototype.getClass=function(){return Mn},Mn.copyCoordinates=function(t){for(var e=new Array(t.length).fill(null),n=0;nr.getMaxY()||this.findStabbedSegments(t,i.getDirectedEdges(),e)}return e}if(3===arguments.length)if(T(arguments[2],xt)&&arguments[0]instanceof C&&arguments[1]instanceof ze)for(var o=arguments[0],s=arguments[1],a=arguments[2],u=s.getEdge().getCoordinates(),l=0;lthis._seg.p1.y&&this._seg.reverse();if(!(Math.max(this._seg.p0.x,this._seg.p1.x)this._seg.p1.y||at.computeOrientation(this._seg.p0,this._seg.p1,o)===at.RIGHT)){var c=s.getDepth(Se.LEFT);this._seg.p0.equals(u[l])||(c=s.getDepth(Se.RIGHT));var p=new Gn(this._seg,c);a.add(p)}}else if(T(arguments[2],xt)&&arguments[0]instanceof C&&T(arguments[1],xt))for(var h=arguments[0],f=arguments[1],g=arguments[2],d=f.iterator();d.hasNext();){var y=d.next();y.isForward()&&this.findStabbedSegments(h,y,g)}},An.prototype.getDepth=function(t){var e=this.findStabbedSegments(t);if(0===e.size())return 0;return $e.min(e)._leftDepth},An.prototype.interfaces_=function(){return[]},An.prototype.getClass=function(){return An},Fn.DepthSegment.get=function(){return Gn},Object.defineProperties(An,Fn);var Gn=function(){this._upwardSeg=null,this._leftDepth=null;var t=arguments[0],e=arguments[1];this._upwardSeg=new dn(t),this._leftDepth=e};Gn.prototype.compareTo=function(t){var e=t;if(this._upwardSeg.minX()>=e._upwardSeg.maxX())return 1;if(this._upwardSeg.maxX()<=e._upwardSeg.minX())return-1;var n=this._upwardSeg.orientationIndex(e._upwardSeg);return 0!==n?n:0!=(n=-1*e._upwardSeg.orientationIndex(this._upwardSeg))?n:this._upwardSeg.compareTo(e._upwardSeg)},Gn.prototype.compareX=function(t,e){var n=t.p0.compareTo(e.p0);return 0!==n?n:t.p1.compareTo(e.p1)},Gn.prototype.toString=function(){return this._upwardSeg.toString()},Gn.prototype.interfaces_=function(){return[E]},Gn.prototype.getClass=function(){return Gn};var qn=function(t,e,n){this.p0=t||null,this.p1=e||null,this.p2=n||null};qn.prototype.area=function(){return qn.area(this.p0,this.p1,this.p2)},qn.prototype.signedArea=function(){return qn.signedArea(this.p0,this.p1,this.p2)},qn.prototype.interpolateZ=function(t){if(null===t)throw new m(\"Supplied point is null.\");return qn.interpolateZ(t,this.p0,this.p1,this.p2)},qn.prototype.longestSideLength=function(){return qn.longestSideLength(this.p0,this.p1,this.p2)},qn.prototype.isAcute=function(){return qn.isAcute(this.p0,this.p1,this.p2)},qn.prototype.circumcentre=function(){return qn.circumcentre(this.p0,this.p1,this.p2)},qn.prototype.area3D=function(){return qn.area3D(this.p0,this.p1,this.p2)},qn.prototype.centroid=function(){return qn.centroid(this.p0,this.p1,this.p2)},qn.prototype.inCentre=function(){return qn.inCentre(this.p0,this.p1,this.p2)},qn.prototype.interfaces_=function(){return[]},qn.prototype.getClass=function(){return qn},qn.area=function(t,e,n){return Math.abs(((n.x-t.x)*(e.y-t.y)-(e.x-t.x)*(n.y-t.y))/2)},qn.signedArea=function(t,e,n){return((n.x-t.x)*(e.y-t.y)-(e.x-t.x)*(n.y-t.y))/2},qn.det=function(t,e,n,i){return t*i-e*n},qn.interpolateZ=function(t,e,n,i){var r=e.x,o=e.y,s=n.x-r,a=i.x-r,u=n.y-o,l=i.y-o,c=s*l-a*u,p=t.x-r,h=t.y-o,f=(l*p-a*h)/c,g=(-u*p+s*h)/c;return e.z+f*(n.z-e.z)+g*(i.z-e.z)},qn.longestSideLength=function(t,e,n){var i=t.distance(e),r=e.distance(n),o=n.distance(t),s=i;return r>s&&(s=r),o>s&&(s=o),s},qn.isAcute=function(t,e,n){return!!Tn.isAcute(t,e,n)&&(!!Tn.isAcute(e,n,t)&&!!Tn.isAcute(n,t,e))},qn.circumcentre=function(t,e,n){var i=n.x,r=n.y,o=t.x-i,s=t.y-r,a=e.x-i,u=e.y-r,l=2*qn.det(o,s,a,u),c=qn.det(s,o*o+s*s,u,a*a+u*u),p=qn.det(o,o*o+s*s,a,a*a+u*u);return new C(i-c/l,r+p/l)},qn.perpendicularBisector=function(t,e){var n=e.x-t.x,i=e.y-t.y,r=new k(t.x+n/2,t.y+i/2,1),o=new k(t.x-i+n/2,t.y+n+i/2,1);return new k(r,o)},qn.angleBisector=function(t,e,n){var i=e.distance(t),r=i/(i+e.distance(n)),o=n.x-t.x,s=n.y-t.y;return new C(t.x+r*o,t.y+r*s)},qn.area3D=function(t,e,n){var i=e.x-t.x,r=e.y-t.y,o=e.z-t.z,s=n.x-t.x,a=n.y-t.y,u=n.z-t.z,l=r*u-o*a,c=o*s-i*u,p=i*a-r*s,h=l*l+c*c+p*p,f=Math.sqrt(h)/2;return f},qn.centroid=function(t,e,n){var i=(t.x+e.x+n.x)/3,r=(t.y+e.y+n.y)/3;return new C(i,r)},qn.inCentre=function(t,e,n){var i=e.distance(n),r=t.distance(n),o=t.distance(e),s=i+r+o,a=(i*t.x+r*e.x+o*n.x)/s,u=(i*t.y+r*e.y+o*n.y)/s;return new C(a,u)};var Bn=function(){this._inputGeom=null,this._distance=null,this._curveBuilder=null,this._curveList=new Nt;var t=arguments[0],e=arguments[1],n=arguments[2];this._inputGeom=t,this._distance=e,this._curveBuilder=n};Bn.prototype.addPoint=function(t){if(this._distance<=0)return null;var e=t.getCoordinates(),n=this._curveBuilder.getLineCurve(e,this._distance);this.addCurve(n,w.EXTERIOR,w.INTERIOR)},Bn.prototype.addPolygon=function(t){var e=this._distance,n=Se.LEFT;this._distance<0&&(e=-this._distance,n=Se.RIGHT);var i=t.getExteriorRing(),r=Lt.removeRepeatedPoints(i.getCoordinates());if(this._distance<0&&this.isErodedCompletely(i,this._distance))return null;if(this._distance<=0&&r.length<3)return null;this.addPolygonRing(r,e,n,w.EXTERIOR,w.INTERIOR);for(var o=0;o0&&this.isErodedCompletely(s,-this._distance)||this.addPolygonRing(a,e,Se.opposite(n),w.INTERIOR,w.EXTERIOR)}},Bn.prototype.isTriangleErodedCompletely=function(t,e){var n=new qn(t[0],t[1],t[2]),i=n.inCentre();return at.distancePointLine(i,n.p0,n.p1)=ee.MINIMUM_VALID_SIZE&&at.isCCW(t)&&(o=r,s=i,n=Se.opposite(n));var a=this._curveBuilder.getRingCurve(t,n,e);this.addCurve(a,o,s)},Bn.prototype.add=function(t){if(t.isEmpty())return null;t instanceof $t?this.addPolygon(t):t instanceof Kt?this.addLineString(t):t instanceof Qt?this.addPoint(t):t instanceof te?this.addCollection(t):t instanceof Xt?this.addCollection(t):t instanceof ne?this.addCollection(t):t instanceof zt&&this.addCollection(t)},Bn.prototype.isErodedCompletely=function(t,e){var n=t.getCoordinates();if(n.length<4)return e<0;if(4===n.length)return this.isTriangleErodedCompletely(n,e);var i=t.getEnvelopeInternal(),r=Math.min(i.getHeight(),i.getWidth());return e<0&&2*Math.abs(e)>r},Bn.prototype.addCollection=function(t){for(var e=0;e=this._max)throw new i;var t=this._parent.getGeometryN(this._index++);return t instanceof zt?(this._subcollectionIterator=new Un(t),this._subcollectionIterator.next()):t},Un.prototype.remove=function(){throw new Error(this.getClass().getName())},Un.prototype.hasNext=function(){if(this._atStart)return!0;if(null!==this._subcollectionIterator){if(this._subcollectionIterator.hasNext())return!0;this._subcollectionIterator=null}return!(this._index>=this._max)},Un.prototype.interfaces_=function(){return[Et]},Un.prototype.getClass=function(){return Un},Un.isAtomic=function(t){return!(t instanceof zt)};var zn=function(){this._geom=null;var t=arguments[0];this._geom=t};zn.prototype.locate=function(t){return zn.locate(t,this._geom)},zn.prototype.interfaces_=function(){return[Vn]},zn.prototype.getClass=function(){return zn},zn.isPointInRing=function(t,e){return!!e.getEnvelopeInternal().intersects(t)&&at.isPointInRing(t,e.getCoordinates())},zn.containsPointInPolygon=function(t,e){if(e.isEmpty())return!1;var n=e.getExteriorRing();if(!zn.isPointInRing(t,n))return!1;for(var i=0;i=0;n--){var i=this._edgeList.get(n),r=i.getSym();null===e&&(e=r),null!==t&&r.setNext(t),t=i}e.setNext(t)},e.prototype.computeDepths=function(){if(1===arguments.length){var t=arguments[0],e=this.findIndex(t),n=t.getDepth(Se.LEFT),i=t.getDepth(Se.RIGHT),r=this.computeDepths(e+1,this._edgeList.size(),n);if(this.computeDepths(0,e,r)!==i)throw new we(\"depth mismatch at \"+t.getCoordinate())}else if(3===arguments.length){for(var o=arguments[0],s=arguments[1],a=arguments[2],u=o;u=0;r--){var o=this._resultAreaEdgeList.get(r),s=o.getSym();switch(null===e&&o.getEdgeRing()===t&&(e=o),i){case this._SCANNING_FOR_INCOMING:if(s.getEdgeRing()!==t)continue;n=s,i=this._LINKING_TO_OUTGOING;break;case this._LINKING_TO_OUTGOING:if(o.getEdgeRing()!==t)continue;n.setNextMin(o),i=this._SCANNING_FOR_INCOMING}}i===this._LINKING_TO_OUTGOING&&(et.isTrue(null!==e,\"found null for first outgoing dirEdge\"),et.isTrue(e.getEdgeRing()===t,\"unable to link last incoming dirEdge\"),n.setNextMin(e))},e.prototype.getOutgoingDegree=function(){if(0===arguments.length){for(var t=0,e=this.iterator();e.hasNext();){e.next().isInResult()&&t++}return t}if(1===arguments.length){for(var n=arguments[0],i=0,r=this.iterator();r.hasNext();){r.next().getEdgeRing()===n&&i++}return i}},e.prototype.getLabel=function(){return this._label},e.prototype.findCoveredLineEdges=function(){for(var t=w.NONE,e=this.iterator();e.hasNext();){var n=e.next(),i=n.getSym();if(!n.isLineEdge()){if(n.isInResult()){t=w.INTERIOR;break}if(i.isInResult()){t=w.EXTERIOR;break}}}if(t===w.NONE)return null;for(var r=t,o=this.iterator();o.hasNext();){var s=o.next(),a=s.getSym();s.isLineEdge()?s.getEdge().setCovered(r===w.INTERIOR):(s.isInResult()&&(r=w.EXTERIOR),a.isInResult()&&(r=w.INTERIOR))}},e.prototype.computeLabelling=function(e){t.prototype.computeLabelling.call(this,e),this._label=new Pe(w.NONE);for(var n=this.iterator();n.hasNext();)for(var i=n.next().getEdge().getLabel(),r=0;r<2;r++){var o=i.getLocation(r);o!==w.INTERIOR&&o!==w.BOUNDARY||this._label.setLocation(r,w.INTERIOR)}},e.prototype.interfaces_=function(){return[]},e.prototype.getClass=function(){return e},e}(Xn),kn=function(t){function e(){t.apply(this,arguments)}return t&&(e.__proto__=t),e.prototype=Object.create(t&&t.prototype),e.prototype.constructor=e,e.prototype.createNode=function(t){return new Ge(t,new Yn)},e.prototype.interfaces_=function(){return[]},e.prototype.getClass=function(){return e},e}(Xe),jn=function t(){this._pts=null,this._orientation=null;var e=arguments[0];this._pts=e,this._orientation=t.orientation(e)};jn.prototype.compareTo=function(t){var e=t;return jn.compareOriented(this._pts,this._orientation,e._pts,e._orientation)},jn.prototype.interfaces_=function(){return[E]},jn.prototype.getClass=function(){return jn},jn.orientation=function(t){return 1===Lt.increasingDirection(t)},jn.compareOriented=function(t,e,n,i){for(var r=e?1:-1,o=i?1:-1,s=e?t.length:-1,a=i?n.length:-1,u=e?0:t.length-1,l=i?0:n.length-1;;){var c=t[u].compareTo(n[l]);if(0!==c)return c;var p=(u+=r)===s,h=(l+=o)===a;if(p&&!h)return-1;if(!p&&h)return 1;if(p&&h)return 0}};var Hn=function(){this._edges=new Nt,this._ocaMap=new p};Hn.prototype.print=function(t){t.print(\"MULTILINESTRING ( \");for(var e=0;e0&&t.print(\",\"),t.print(\"(\");for(var i=n.getCoordinates(),r=0;r0&&t.print(\",\"),t.print(i[r].x+\" \"+i[r].y);t.println(\")\")}t.print(\") \")},Hn.prototype.addAll=function(t){for(var e=t.iterator();e.hasNext();)this.add(e.next())},Hn.prototype.findEdgeIndex=function(t){for(var e=0;et?1:this.diste?1:0},Jn.prototype.interfaces_=function(){return[E]},Jn.prototype.getClass=function(){return Jn};var Qn=function(){this._nodeMap=new p,this.edge=null;var t=arguments[0];this.edge=t};Qn.prototype.print=function(t){t.println(\"Intersections:\");for(var e=this.iterator();e.hasNext();){e.next().print(t)}},Qn.prototype.iterator=function(){return this._nodeMap.values().iterator()},Qn.prototype.addSplitEdges=function(t){this.addEndpoints();for(var e=this.iterator(),n=e.next();e.hasNext();){var i=e.next(),r=this.createSplitEdge(n,i);t.add(r),n=i}},Qn.prototype.addEndpoints=function(){var t=this.edge.pts.length-1;this.add(this.edge.pts[0],0,0),this.add(this.edge.pts[t],t,0)},Qn.prototype.createSplitEdge=function(t,e){var n=e.segmentIndex-t.segmentIndex+2,i=this.edge.pts[e.segmentIndex],r=e.dist>0||!e.coord.equals2D(i);r||n--;var o=new Array(n).fill(null),s=0;o[s++]=new C(t.coord);for(var a=t.segmentIndex+1;a<=e.segmentIndex;a++)o[s++]=this.edge.pts[a];return r&&(o[s]=e.coord),new ni(o,new Pe(this.edge._label))},Qn.prototype.add=function(t,e,n){var i=new Jn(t,e,n),r=this._nodeMap.get(i);return null!==r?r:(this._nodeMap.put(i,i),i)},Qn.prototype.isIntersection=function(t){for(var e=this.iterator();e.hasNext();){if(e.next().coord.equals(t))return!0}return!1},Qn.prototype.interfaces_=function(){return[]},Qn.prototype.getClass=function(){return Qn};var Zn=function(){};Zn.prototype.getChainStartIndices=function(t){var e=0,n=new Nt;n.add(new M(e));do{var i=this.findChainEnd(t,e);n.add(new M(i)),e=i}while(en?e:n},$n.prototype.getMinX=function(t){var e=this.pts[this.startIndex[t]].x,n=this.pts[this.startIndex[t+1]].x;return ee&&(i=1),this._depth[t][n]=i}}},ti.prototype.getDelta=function(t){return this._depth[t][Se.RIGHT]-this._depth[t][Se.LEFT]},ti.prototype.getLocation=function(t,e){return this._depth[t][e]<=0?w.EXTERIOR:w.INTERIOR},ti.prototype.toString=function(){return\"A: \"+this._depth[0][1]+\",\"+this._depth[0][2]+\" B: \"+this._depth[1][1]+\",\"+this._depth[1][2]},ti.prototype.add=function(){if(1===arguments.length)for(var t=arguments[0],e=0;e<2;e++)for(var n=1;n<3;n++){var i=t.getLocation(e,n);i!==w.EXTERIOR&&i!==w.INTERIOR||(this.isNull(e,n)?this._depth[e][n]=ti.depthAtLocation(i):this._depth[e][n]+=ti.depthAtLocation(i))}else if(3===arguments.length){var r=arguments[0],o=arguments[1];arguments[2]===w.INTERIOR&&this._depth[r][o]++}},ti.prototype.interfaces_=function(){return[]},ti.prototype.getClass=function(){return ti},ti.depthAtLocation=function(t){return t===w.EXTERIOR?0:t===w.INTERIOR?1:ti.NULL_VALUE},ei.NULL_VALUE.get=function(){return-1},Object.defineProperties(ti,ei);var ni=function(t){function e(){if(t.call(this),this.pts=null,this._env=null,this.eiList=new Qn(this),this._name=null,this._mce=null,this._isIsolated=!0,this._depth=new ti,this._depthDelta=0,1===arguments.length){var n=arguments[0];e.call(this,n,null)}else if(2===arguments.length){var i=arguments[0],r=arguments[1];this.pts=i,this._label=r}}return t&&(e.__proto__=t),e.prototype=Object.create(t&&t.prototype),e.prototype.constructor=e,e.prototype.getDepth=function(){return this._depth},e.prototype.getCollapsedEdge=function(){var t=new Array(2).fill(null);t[0]=this.pts[0],t[1]=this.pts[1];return new e(t,Pe.toLineLabel(this._label))},e.prototype.isIsolated=function(){return this._isIsolated},e.prototype.getCoordinates=function(){return this.pts},e.prototype.setIsolated=function(t){this._isIsolated=t},e.prototype.setName=function(t){this._name=t},e.prototype.equals=function(t){if(!(t instanceof e))return!1;var n=t;if(this.pts.length!==n.pts.length)return!1;for(var i=!0,r=!0,o=this.pts.length,s=0;s0?this.pts[0]:null;if(1===arguments.length){var t=arguments[0];return this.pts[t]}},e.prototype.print=function(t){t.print(\"edge \"+this._name+\": \"),t.print(\"LINESTRING (\");for(var e=0;e0&&t.print(\",\"),t.print(this.pts[e].x+\" \"+this.pts[e].y);t.print(\") \"+this._label+\" \"+this._depthDelta)},e.prototype.computeIM=function(t){e.updateIM(this._label,t)},e.prototype.isCollapsed=function(){return!!this._label.isArea()&&(3===this.pts.length&&!!this.pts[0].equals(this.pts[2]))},e.prototype.isClosed=function(){return this.pts[0].equals(this.pts[this.pts.length-1])},e.prototype.getMaximumSegmentIndex=function(){return this.pts.length-1},e.prototype.getDepthDelta=function(){return this._depthDelta},e.prototype.getNumPoints=function(){return this.pts.length},e.prototype.printReverse=function(t){t.print(\"edge \"+this._name+\": \");for(var e=this.pts.length-1;e>=0;e--)t.print(this.pts[e]+\" \");t.println(\"\")},e.prototype.getMonotoneChainEdge=function(){return null===this._mce&&(this._mce=new $n(this)),this._mce},e.prototype.getEnvelope=function(){if(null===this._env){this._env=new j;for(var t=0;t0&&t.append(\",\"),t.append(this.pts[e].x+\" \"+this.pts[e].y);return t.append(\") \"+this._label+\" \"+this._depthDelta),t.toString()},e.prototype.isPointwiseEqual=function(t){if(this.pts.length!==t.pts.length)return!1;for(var e=0;ei||this._maxyo;if(s)return!1;var a=this.intersectsToleranceSquare(t,e);return et.isTrue(!(s&&a),\"Found bad envelope test\"),a},ai.prototype.initCorners=function(t){this._minx=t.x-.5,this._maxx=t.x+.5,this._miny=t.y-.5,this._maxy=t.y+.5,this._corner[0]=new C(this._maxx,this._maxy),this._corner[1]=new C(this._minx,this._maxy),this._corner[2]=new C(this._minx,this._miny),this._corner[3]=new C(this._maxx,this._miny)},ai.prototype.intersects=function(t,e){return 1===this._scaleFactor?this.intersectsScaled(t,e):(this.copyScaled(t,this._p0Scaled),this.copyScaled(e,this._p1Scaled),this.intersectsScaled(this._p0Scaled,this._p1Scaled))},ai.prototype.scale=function(t){return Math.round(t*this._scaleFactor)},ai.prototype.getCoordinate=function(){return this._originalPt},ai.prototype.copyScaled=function(t,e){e.x=this.scale(t.x),e.y=this.scale(t.y)},ai.prototype.getSafeEnvelope=function(){if(null===this._safeEnv){var t=ai.SAFE_ENV_EXPANSION_FACTOR/this._scaleFactor;this._safeEnv=new j(this._originalPt.x-t,this._originalPt.x+t,this._originalPt.y-t,this._originalPt.y+t)}return this._safeEnv},ai.prototype.intersectsPixelClosure=function(t,e){return this._li.computeIntersection(t,e,this._corner[0],this._corner[1]),!!this._li.hasIntersection()||(this._li.computeIntersection(t,e,this._corner[1],this._corner[2]),!!this._li.hasIntersection()||(this._li.computeIntersection(t,e,this._corner[2],this._corner[3]),!!this._li.hasIntersection()||(this._li.computeIntersection(t,e,this._corner[3],this._corner[0]),!!this._li.hasIntersection())))},ai.prototype.intersectsToleranceSquare=function(t,e){var n=!1,i=!1;return this._li.computeIntersection(t,e,this._corner[0],this._corner[1]),!!this._li.isProper()||(this._li.computeIntersection(t,e,this._corner[1],this._corner[2]),!!this._li.isProper()||(this._li.hasIntersection()&&(n=!0),this._li.computeIntersection(t,e,this._corner[2],this._corner[3]),!!this._li.isProper()||(this._li.hasIntersection()&&(i=!0),this._li.computeIntersection(t,e,this._corner[3],this._corner[0]),!!this._li.isProper()||(!(!n||!i)||(!!t.equals(this._pt)||!!e.equals(this._pt))))))},ai.prototype.addSnappedNode=function(t,e){var n=t.getCoordinate(e),i=t.getCoordinate(e+1);return!!this.intersects(n,i)&&(t.addIntersection(this.getCoordinate(),e),!0)},ai.prototype.interfaces_=function(){return[]},ai.prototype.getClass=function(){return ai},ui.SAFE_ENV_EXPANSION_FACTOR.get=function(){return.75},Object.defineProperties(ai,ui);var li=function(){this.tempEnv1=new j,this.selectedSegment=new dn};li.prototype.select=function(){if(1===arguments.length);else if(2===arguments.length){var t=arguments[0],e=arguments[1];t.getLineSegment(e,this.selectedSegment),this.select(this.selectedSegment)}},li.prototype.interfaces_=function(){return[]},li.prototype.getClass=function(){return li};var ci=function(){this._index=null;var t=arguments[0];this._index=t},pi={HotPixelSnapAction:{configurable:!0}};ci.prototype.snap=function(){if(1===arguments.length){var t=arguments[0];return this.snap(t,null,-1)}if(3===arguments.length){var e=arguments[0],n=arguments[1],i=arguments[2],r=e.getSafeEnvelope(),o=new hi(e,n,i);return this._index.query(r,{interfaces_:function(){return[Ke]},visitItem:function(t){t.select(r,o)}}),o.isNodeAdded()}},ci.prototype.interfaces_=function(){return[]},ci.prototype.getClass=function(){return ci},pi.HotPixelSnapAction.get=function(){return hi},Object.defineProperties(ci,pi);var hi=function(t){function e(){t.call(this),this._hotPixel=null,this._parentEdge=null,this._hotPixelVertexIndex=null,this._isNodeAdded=!1;var e=arguments[0],n=arguments[1],i=arguments[2];this._hotPixel=e,this._parentEdge=n,this._hotPixelVertexIndex=i}return t&&(e.__proto__=t),e.prototype=Object.create(t&&t.prototype),e.prototype.constructor=e,e.prototype.isNodeAdded=function(){return this._isNodeAdded},e.prototype.select=function(){if(2!==arguments.length)return t.prototype.select.apply(this,arguments);var e=arguments[0],n=arguments[1],i=e.getContext();if(null!==this._parentEdge&&i===this._parentEdge&&n===this._hotPixelVertexIndex)return null;this._isNodeAdded=this._hotPixel.addSnappedNode(i,n)},e.prototype.interfaces_=function(){return[]},e.prototype.getClass=function(){return e},e}(li),fi=function(){this._li=null,this._interiorIntersections=null;var t=arguments[0];this._li=t,this._interiorIntersections=new Nt};fi.prototype.processIntersections=function(t,e,n,i){if(t===n&&e===i)return null;var r=t.getCoordinates()[e],o=t.getCoordinates()[e+1],s=n.getCoordinates()[i],a=n.getCoordinates()[i+1];if(this._li.computeIntersection(r,o,s,a),this._li.hasIntersection()&&this._li.isInteriorIntersection()){for(var u=0;u=0;e--){try{t.bufferReducedPrecision(e)}catch(e){if(!(e instanceof we))throw e;t._saveException=e}if(null!==t._resultGeometry)return null}throw this._saveException}if(1===arguments.length){var n=arguments[0],i=di.precisionScaleFactor(this._argGeom,this._distance,n),r=new fe(i);this.bufferFixedPrecision(r)}},di.prototype.computeGeometry=function(){if(this.bufferOriginalPrecision(),null!==this._resultGeometry)return null;var t=this._argGeom.getFactory().getPrecisionModel();t.getType()===fe.FIXED?this.bufferFixedPrecision(t):this.bufferReducedPrecision()},di.prototype.setQuadrantSegments=function(t){this._bufParams.setQuadrantSegments(t)},di.prototype.bufferOriginalPrecision=function(){try{var t=new ii(this._bufParams);this._resultGeometry=t.buffer(this._argGeom,this._distance)}catch(t){if(!(t instanceof $))throw t;this._saveException=t}},di.prototype.getResultGeometry=function(t){return this._distance=t,this.computeGeometry(),this._resultGeometry},di.prototype.setEndCapStyle=function(t){this._bufParams.setEndCapStyle(t)},di.prototype.interfaces_=function(){return[]},di.prototype.getClass=function(){return di},di.bufferOp=function(){if(2===arguments.length){var t=arguments[0],e=arguments[1];return new di(t).getResultGeometry(e)}if(3===arguments.length){if(Number.isInteger(arguments[2])&&arguments[0]instanceof ct&&\"number\"==typeof arguments[1]){var n=arguments[0],i=arguments[1],r=arguments[2],o=new di(n);o.setQuadrantSegments(r);return o.getResultGeometry(i)}if(arguments[2]instanceof Cn&&arguments[0]instanceof ct&&\"number\"==typeof arguments[1]){var s=arguments[0],a=arguments[1],u=arguments[2];return new di(s,u).getResultGeometry(a)}}else if(4===arguments.length){var l=arguments[0],c=arguments[1],p=arguments[2],h=arguments[3],f=new di(l);f.setQuadrantSegments(p),f.setEndCapStyle(h);return f.getResultGeometry(c)}},di.precisionScaleFactor=function(t,e,n){var i=t.getEnvelopeInternal(),r=R.max(Math.abs(i.getMaxX()),Math.abs(i.getMaxY()),Math.abs(i.getMinX()),Math.abs(i.getMinY()))+2*(e>0?e:0),o=n-Math.trunc(Math.log(r)/Math.log(10)+1);return Math.pow(10,o)},yi.CAP_ROUND.get=function(){return Cn.CAP_ROUND},yi.CAP_BUTT.get=function(){return Cn.CAP_FLAT},yi.CAP_FLAT.get=function(){return Cn.CAP_FLAT},yi.CAP_SQUARE.get=function(){return Cn.CAP_SQUARE},yi.MAX_PRECISION_DIGITS.get=function(){return 12},Object.defineProperties(di,yi);var _i=function(){this._pt=[new C,new C],this._distance=v.NaN,this._isNull=!0};_i.prototype.getCoordinates=function(){return this._pt},_i.prototype.getCoordinate=function(t){return this._pt[t]},_i.prototype.setMinimum=function(){if(1===arguments.length){var t=arguments[0];this.setMinimum(t._pt[0],t._pt[1])}else if(2===arguments.length){var e=arguments[0],n=arguments[1];if(this._isNull)return this.initialize(e,n),null;var i=e.distance(n);ithis._distance&&this.initialize(e,n,i)}},_i.prototype.interfaces_=function(){return[]},_i.prototype.getClass=function(){return _i};var mi=function(){};mi.prototype.interfaces_=function(){return[]},mi.prototype.getClass=function(){return mi},mi.computeDistance=function(){if(arguments[2]instanceof _i&&arguments[0]instanceof Kt&&arguments[1]instanceof C)for(var t=arguments[0],e=arguments[1],n=arguments[2],i=t.getCoordinates(),r=new dn,o=0;o0||this._isIn?w.INTERIOR:w.EXTERIOR)},Si.prototype.interfaces_=function(){return[]},Si.prototype.getClass=function(){return Si};var Li=function t(){if(this._component=null,this._segIndex=null,this._pt=null,2===arguments.length){var e=arguments[0],n=arguments[1];t.call(this,e,t.INSIDE_AREA,n)}else if(3===arguments.length){var i=arguments[0],r=arguments[1],o=arguments[2];this._component=i,this._segIndex=r,this._pt=o}},bi={INSIDE_AREA:{configurable:!0}};Li.prototype.isInsideArea=function(){return this._segIndex===Li.INSIDE_AREA},Li.prototype.getCoordinate=function(){return this._pt},Li.prototype.getGeometryComponent=function(){return this._component},Li.prototype.getSegmentIndex=function(){return this._segIndex},Li.prototype.interfaces_=function(){return[]},Li.prototype.getClass=function(){return Li},bi.INSIDE_AREA.get=function(){return-1},Object.defineProperties(Li,bi);var wi=function(t){this._pts=t||null};wi.prototype.filter=function(t){t instanceof Qt&&this._pts.add(t)},wi.prototype.interfaces_=function(){return[Vt]},wi.prototype.getClass=function(){return wi},wi.getPoints=function(){if(1===arguments.length){var t=arguments[0];return t instanceof Qt?$e.singletonList(t):wi.getPoints(t,new Nt)}if(2===arguments.length){var e=arguments[0],n=arguments[1];return e instanceof Qt?n.add(e):e instanceof zt&&e.apply(new wi(n)),n}};var Oi=function(){this._locations=null;var t=arguments[0];this._locations=t};Oi.prototype.filter=function(t){(t instanceof Qt||t instanceof Kt||t instanceof $t)&&this._locations.add(new Li(t,0,t.getCoordinate()))},Oi.prototype.interfaces_=function(){return[Vt]},Oi.prototype.getClass=function(){return Oi},Oi.getLocations=function(t){var e=new Nt;return t.apply(new Oi(e)),e};var Ti=function(){if(this._geom=null,this._terminateDistance=0,this._ptLocator=new Si,this._minDistanceLocation=null,this._minDistance=v.MAX_VALUE,2===arguments.length){var t=arguments[0],e=arguments[1];this._geom=[t,e],this._terminateDistance=0}else if(3===arguments.length){var n=arguments[0],i=arguments[1],r=arguments[2];this._geom=new Array(2).fill(null),this._geom[0]=n,this._geom[1]=i,this._terminateDistance=r}};Ti.prototype.computeContainmentDistance=function(){if(0===arguments.length){var t=new Array(2).fill(null);if(this.computeContainmentDistance(0,t),this._minDistance<=this._terminateDistance)return null;this.computeContainmentDistance(1,t)}else if(2===arguments.length){var e=arguments[0],n=arguments[1],i=1-e,r=Ni.getPolygons(this._geom[e]);if(r.size()>0){var o=Oi.getLocations(this._geom[i]);if(this.computeContainmentDistance(o,r,n),this._minDistance<=this._terminateDistance)return this._minDistanceLocation[i]=n[0],this._minDistanceLocation[e]=n[1],null}}else if(3===arguments.length)if(arguments[2]instanceof Array&&T(arguments[0],xt)&&T(arguments[1],xt)){for(var s=arguments[0],a=arguments[1],u=arguments[2],l=0;lthis._minDistance)return null;for(var i=t.getCoordinates(),r=e.getCoordinate(),o=0;othis._minDistance)return null;for(var p=u.getCoordinates(),h=l.getCoordinates(),f=0;fthis._distance&&this.initialize(e,n,i)}},Ri.prototype.interfaces_=function(){return[]},Ri.prototype.getClass=function(){return Ri};var Pi=function(){};Pi.prototype.interfaces_=function(){return[]},Pi.prototype.getClass=function(){return Pi},Pi.computeDistance=function(){if(arguments[2]instanceof Ri&&arguments[0]instanceof Kt&&arguments[1]instanceof C)for(var t=arguments[0],e=arguments[1],n=arguments[2],i=new dn,r=t.getCoordinates(),o=0;o1||t<=0)throw new m(\"Fraction is not in range (0.0 - 1.0]\");this._densifyFrac=t},Di.prototype.compute=function(t,e){this.computeOrientedDistance(t,e,this._ptDist),this.computeOrientedDistance(e,t,this._ptDist)},Di.prototype.distance=function(){return this.compute(this._g0,this._g1),this._ptDist.getDistance()},Di.prototype.computeOrientedDistance=function(t,e,n){var i=new Ai(e);if(t.apply(i),n.setMaximum(i.getMaxPointDistance()),this._densifyFrac>0){var r=new Fi(e,this._densifyFrac);t.apply(r),n.setMaximum(r.getMaxPointDistance())}},Di.prototype.orientedDistance=function(){return this.computeOrientedDistance(this._g0,this._g1,this._ptDist),this._ptDist.getDistance()},Di.prototype.interfaces_=function(){return[]},Di.prototype.getClass=function(){return Di},Di.distance=function(){if(2===arguments.length){var t=arguments[0],e=arguments[1];return new Di(t,e).distance()}if(3===arguments.length){var n=arguments[0],i=arguments[1],r=arguments[2],o=new Di(n,i);return o.setDensifyFraction(r),o.distance()}},Mi.MaxPointDistanceFilter.get=function(){return Ai},Mi.MaxDensifiedByFractionDistanceFilter.get=function(){return Fi},Object.defineProperties(Di,Mi);var Ai=function(){this._maxPtDist=new Ri,this._minPtDist=new Ri,this._euclideanDist=new Pi,this._geom=null;var t=arguments[0];this._geom=t};Ai.prototype.filter=function(t){this._minPtDist.initialize(),Pi.computeDistance(this._geom,t,this._minPtDist),this._maxPtDist.setMaximum(this._minPtDist)},Ai.prototype.getMaxPointDistance=function(){return this._maxPtDist},Ai.prototype.interfaces_=function(){return[ft]},Ai.prototype.getClass=function(){return Ai};var Fi=function(){this._maxPtDist=new Ri,this._minPtDist=new Ri,this._geom=null,this._numSubSegs=0;var t=arguments[0],e=arguments[1];this._geom=t,this._numSubSegs=Math.trunc(Math.round(1/e))};Fi.prototype.filter=function(t,e){if(0===e)return null;for(var n=t.getCoordinate(e-1),i=t.getCoordinate(e),r=(i.x-n.x)/this._numSubSegs,o=(i.y-n.y)/this._numSubSegs,s=0;sn){this._isValid=!1;var r=i.getCoordinates();this._errorLocation=r[1],this._errorIndicator=t.getFactory().createLineString(r),this._errMsg=\"Distance between buffer curve and input is too large (\"+this._maxDistanceFound+\" at \"+Z.toLineString(r[0],r[1])+\")\"}},Gi.prototype.isValid=function(){var t=Math.abs(this._bufDistance),e=Gi.MAX_DISTANCE_DIFF_FRAC*t;return this._minValidDistance=t-e,this._maxValidDistance=t+e,!(!this._input.isEmpty()&&!this._result.isEmpty())||(this._bufDistance>0?this.checkPositiveValid():this.checkNegativeValid(),Gi.VERBOSE&&Y.out.println(\"Min Dist= \"+this._minDistanceFound+\" err= \"+(1-this._minDistanceFound/this._bufDistance)+\" Max Dist= \"+this._maxDistanceFound+\" err= \"+(this._maxDistanceFound/this._bufDistance-1)),this._isValid)},Gi.prototype.checkNegativeValid=function(){if(!(this._input instanceof $t||this._input instanceof ne||this._input instanceof zt))return null;var t=this.getPolygonLines(this._input);if(this.checkMinimumDistance(t,this._result,this._minValidDistance),!this._isValid)return null;this.checkMaximumDistance(t,this._result,this._maxValidDistance)},Gi.prototype.getErrorIndicator=function(){return this._errorIndicator},Gi.prototype.checkMinimumDistance=function(t,e,n){var i=new Ti(t,e,n);if(this._minDistanceFound=i.distance(),this._minDistanceFound0&&t>e&&(this._isValid=!1,this._errorMsg=\"Area of positive buffer is smaller than input\",this._errorIndicator=this._result),this._distance<0&&t=2?null:this._distance>0?null:(this._result.isEmpty()||(this._isValid=!1,this._errorMsg=\"Result is non-empty\",this._errorIndicator=this._result),void this.report(\"ExpectedEmpty\"))},Bi.prototype.report=function(t){if(!Bi.VERBOSE)return null;Y.out.println(\"Check \"+t+\": \"+(this._isValid?\"passed\":\"FAILED\"))},Bi.prototype.getErrorMessage=function(){return this._errorMsg},Bi.prototype.interfaces_=function(){return[]},Bi.prototype.getClass=function(){return Bi},Bi.isValidMsg=function(t,e,n){var i=new Bi(t,e,n);return i.isValid()?null:i.getErrorMessage()},Bi.isValid=function(t,e,n){return!!new Bi(t,e,n).isValid()},Vi.VERBOSE.get=function(){return!1},Vi.MAX_ENV_DIFF_FRAC.get=function(){return.012},Object.defineProperties(Bi,Vi);var Ui=function(){this._pts=null,this._data=null;var t=arguments[0],e=arguments[1];this._pts=t,this._data=e};Ui.prototype.getCoordinates=function(){return this._pts},Ui.prototype.size=function(){return this._pts.length},Ui.prototype.getCoordinate=function(t){return this._pts[t]},Ui.prototype.isClosed=function(){return this._pts[0].equals(this._pts[this._pts.length-1])},Ui.prototype.getSegmentOctant=function(t){return t===this._pts.length-1?-1:pn.octant(this.getCoordinate(t),this.getCoordinate(t+1))},Ui.prototype.setData=function(t){this._data=t},Ui.prototype.getData=function(){return this._data},Ui.prototype.toString=function(){return Z.toLineString(new ue(this._pts))},Ui.prototype.interfaces_=function(){return[hn]},Ui.prototype.getClass=function(){return Ui};var zi=function(){this._findAllIntersections=!1,this._isCheckEndSegmentsOnly=!1,this._li=null,this._interiorIntersection=null,this._intSegments=null,this._intersections=new Nt,this._intersectionCount=0,this._keepIntersections=!0;var t=arguments[0];this._li=t,this._interiorIntersection=null};zi.prototype.getInteriorIntersection=function(){return this._interiorIntersection},zi.prototype.setCheckEndSegmentsOnly=function(t){this._isCheckEndSegmentsOnly=t},zi.prototype.getIntersectionSegments=function(){return this._intSegments},zi.prototype.count=function(){return this._intersectionCount},zi.prototype.getIntersections=function(){return this._intersections},zi.prototype.setFindAllIntersections=function(t){this._findAllIntersections=t},zi.prototype.setKeepIntersections=function(t){this._keepIntersections=t},zi.prototype.processIntersections=function(t,e,n,i){if(!this._findAllIntersections&&this.hasIntersection())return null;if(t===n&&e===i)return null;if(this._isCheckEndSegmentsOnly){if(!(this.isEndSegment(t,e)||this.isEndSegment(n,i)))return null}var r=t.getCoordinates()[e],o=t.getCoordinates()[e+1],s=n.getCoordinates()[i],a=n.getCoordinates()[i+1];this._li.computeIntersection(r,o,s,a),this._li.hasIntersection()&&this._li.isInteriorIntersection()&&(this._intSegments=new Array(4).fill(null),this._intSegments[0]=r,this._intSegments[1]=o,this._intSegments[2]=s,this._intSegments[3]=a,this._interiorIntersection=this._li.getIntersection(0),this._keepIntersections&&this._intersections.add(this._interiorIntersection),this._intersectionCount++)},zi.prototype.isEndSegment=function(t,e){return 0===e||e>=t.size()-2},zi.prototype.hasIntersection=function(){return null!==this._interiorIntersection},zi.prototype.isDone=function(){return!this._findAllIntersections&&null!==this._interiorIntersection},zi.prototype.interfaces_=function(){return[Wn]},zi.prototype.getClass=function(){return zi},zi.createAllIntersectionsFinder=function(t){var e=new zi(t);return e.setFindAllIntersections(!0),e},zi.createAnyIntersectionFinder=function(t){return new zi(t)},zi.createIntersectionCounter=function(t){var e=new zi(t);return e.setFindAllIntersections(!0),e.setKeepIntersections(!1),e};var Xi=function(){this._li=new rt,this._segStrings=null,this._findAllIntersections=!1,this._segInt=null,this._isValid=!0;var t=arguments[0];this._segStrings=t};Xi.prototype.execute=function(){if(null!==this._segInt)return null;this.checkInteriorIntersections()},Xi.prototype.getIntersections=function(){return this._segInt.getIntersections()},Xi.prototype.isValid=function(){return this.execute(),this._isValid},Xi.prototype.setFindAllIntersections=function(t){this._findAllIntersections=t},Xi.prototype.checkInteriorIntersections=function(){this._isValid=!0,this._segInt=new zi(this._li),this._segInt.setFindAllIntersections(this._findAllIntersections);var t=new xn;if(t.setSegmentIntersector(this._segInt),t.computeNodes(this._segStrings),this._segInt.hasIntersection())return this._isValid=!1,null},Xi.prototype.checkValid=function(){if(this.execute(),!this._isValid)throw new we(this.getErrorMessage(),this._segInt.getInteriorIntersection())},Xi.prototype.getErrorMessage=function(){if(this._isValid)return\"no intersections found\";var t=this._segInt.getIntersectionSegments();return\"found non-noded intersection between \"+Z.toLineString(t[0],t[1])+\" and \"+Z.toLineString(t[2],t[3])},Xi.prototype.interfaces_=function(){return[]},Xi.prototype.getClass=function(){return Xi},Xi.computeIntersections=function(t){var e=new Xi(t);return e.setFindAllIntersections(!0),e.isValid(),e.getIntersections()};var Yi=function t(){this._nv=null;var e=arguments[0];this._nv=new Xi(t.toSegmentStrings(e))};Yi.prototype.checkValid=function(){this._nv.checkValid()},Yi.prototype.interfaces_=function(){return[]},Yi.prototype.getClass=function(){return Yi},Yi.toSegmentStrings=function(t){for(var e=new Nt,n=t.iterator();n.hasNext();){var i=n.next();e.add(new Ui(i.getCoordinates(),i))}return e},Yi.checkValid=function(t){new Yi(t).checkValid()};var ki=function(t){this._mapOp=t};ki.prototype.map=function(t){for(var e=new Nt,n=0;n0&&i<4&&!this._preserveType?this._factory.createLineString(n):this._factory.createLinearRing(n)},Wi.prototype.interfaces_=function(){return[]},Wi.prototype.getClass=function(){return Wi};var Ki=function t(){if(this._snapTolerance=0,this._srcPts=null,this._seg=new dn,this._allowSnappingToSourceVertices=!1,this._isClosed=!1,arguments[0]instanceof Kt&&\"number\"==typeof arguments[1]){var e=arguments[0],n=arguments[1];t.call(this,e.getCoordinates(),n)}else if(arguments[0]instanceof Array&&\"number\"==typeof arguments[1]){var i=arguments[0],r=arguments[1];this._srcPts=i,this._isClosed=t.isClosed(i),this._snapTolerance=r}};Ki.prototype.snapVertices=function(t,e){for(var n=this._isClosed?t.size()-1:t.size(),i=0;i=0&&t.add(o+1,new C(r),!1)}},Ki.prototype.findSegmentIndexToSnap=function(t,e){for(var n=v.MAX_VALUE,i=-1,r=0;re&&(e=i)}return e}if(2===arguments.length){var r=arguments[0],o=arguments[1];return Math.min(Ji.computeOverlaySnapTolerance(r),Ji.computeOverlaySnapTolerance(o))}},Ji.computeSizeBasedSnapTolerance=function(t){var e=t.getEnvelopeInternal();return Math.min(e.getHeight(),e.getWidth())*Ji.SNAP_PRECISION_FACTOR},Ji.snapToSelf=function(t,e,n){return new Ji(t).snapToSelf(e,n)},Qi.SNAP_PRECISION_FACTOR.get=function(){return 1e-9},Object.defineProperties(Ji,Qi);var Zi=function(t){function e(e,n,i){t.call(this),this._snapTolerance=e||null,this._snapPts=n||null,this._isSelfSnap=void 0!==i&&i}return t&&(e.__proto__=t),e.prototype=Object.create(t&&t.prototype),e.prototype.constructor=e,e.prototype.snapLine=function(t,e){var n=new Ki(t,this._snapTolerance);return n.setAllowSnappingToSourceVertices(this._isSelfSnap),n.snapTo(e)},e.prototype.transformCoordinates=function(t,e){var n=t.toCoordinateArray(),i=this.snapLine(n,this._snapPts);return this._factory.getCoordinateSequenceFactory().create(i)},e.prototype.interfaces_=function(){return[]},e.prototype.getClass=function(){return e},e}(Wi),$i=function(){this._isFirst=!0,this._commonMantissaBitsCount=53,this._commonBits=0,this._commonSignExp=null};$i.prototype.getCommon=function(){return v.longBitsToDouble(this._commonBits)},$i.prototype.add=function(t){var e=v.doubleToLongBits(t);if(this._isFirst)return this._commonBits=e,this._commonSignExp=$i.signExpBits(this._commonBits),this._isFirst=!1,null;if($i.signExpBits(e)!==this._commonSignExp)return this._commonBits=0,null;this._commonMantissaBitsCount=$i.numCommonMostSigMantissaBits(this._commonBits,e),this._commonBits=$i.zeroLowerBits(this._commonBits,64-(12+this._commonMantissaBitsCount))},$i.prototype.toString=function(){if(1===arguments.length){var t=arguments[0],e=v.longBitsToDouble(t),n=\"0000000000000000000000000000000000000000000000000000000000000000\"+v.toBinaryString(t),i=n.substring(n.length-64);return i.substring(0,1)+\" \"+i.substring(1,12)+\"(exp) \"+i.substring(12)+\" [ \"+e+\" ]\"}},$i.prototype.interfaces_=function(){return[]},$i.prototype.getClass=function(){return $i},$i.getBit=function(t,e){return 0!=(t&1<>52},$i.zeroLowerBits=function(t,e){return t&~((1<=0;i--){if($i.getBit(t,i)!==$i.getBit(e,i))return n;n++}return 52};var tr=function(){this._commonCoord=null,this._ccFilter=new nr},er={CommonCoordinateFilter:{configurable:!0},Translater:{configurable:!0}};tr.prototype.addCommonBits=function(t){var e=new ir(this._commonCoord);t.apply(e),t.geometryChanged()},tr.prototype.removeCommonBits=function(t){if(0===this._commonCoord.x&&0===this._commonCoord.y)return t;var e=new C(this._commonCoord);e.x=-e.x,e.y=-e.y;var n=new ir(e);return t.apply(n),t.geometryChanged(),t},tr.prototype.getCommonCoordinate=function(){return this._commonCoord},tr.prototype.add=function(t){t.apply(this._ccFilter),this._commonCoord=this._ccFilter.getCommonCoordinate()},tr.prototype.interfaces_=function(){return[]},tr.prototype.getClass=function(){return tr},er.CommonCoordinateFilter.get=function(){return nr},er.Translater.get=function(){return ir},Object.defineProperties(tr,er);var nr=function(){this._commonBitsX=new $i,this._commonBitsY=new $i};nr.prototype.filter=function(t){this._commonBitsX.add(t.x),this._commonBitsY.add(t.y)},nr.prototype.getCommonCoordinate=function(){return new C(this._commonBitsX.getCommon(),this._commonBitsY.getCommon())},nr.prototype.interfaces_=function(){return[ft]},nr.prototype.getClass=function(){return nr};var ir=function(){this.trans=null;var t=arguments[0];this.trans=t};ir.prototype.filter=function(t,e){var n=t.getOrdinate(e,0)+this.trans.x,i=t.getOrdinate(e,1)+this.trans.y;t.setOrdinate(e,0,n),t.setOrdinate(e,1,i)},ir.prototype.isDone=function(){return!1},ir.prototype.isGeometryChanged=function(){return!0},ir.prototype.interfaces_=function(){return[Ut]},ir.prototype.getClass=function(){return ir};var rr=function(t,e){this._geom=new Array(2).fill(null),this._snapTolerance=null,this._cbr=null,this._geom[0]=t,this._geom[1]=e,this.computeSnapTolerance()};rr.prototype.selfSnap=function(t){return new Ji(t).snapTo(t,this._snapTolerance)},rr.prototype.removeCommonBits=function(t){this._cbr=new tr,this._cbr.add(t[0]),this._cbr.add(t[1]);var e=new Array(2).fill(null);return e[0]=this._cbr.removeCommonBits(t[0].copy()),e[1]=this._cbr.removeCommonBits(t[1].copy()),e},rr.prototype.prepareResult=function(t){return this._cbr.addCommonBits(t),t},rr.prototype.getResultGeometry=function(t){var e=this.snap(this._geom),n=Lr.overlayOp(e[0],e[1],t);return this.prepareResult(n)},rr.prototype.checkValid=function(t){t.isValid()||Y.out.println(\"Snapped geometry is invalid\")},rr.prototype.computeSnapTolerance=function(){this._snapTolerance=Ji.computeOverlaySnapTolerance(this._geom[0],this._geom[1])},rr.prototype.snap=function(t){var e=this.removeCommonBits(t);return Ji.snap(e[0],e[1],this._snapTolerance)},rr.prototype.interfaces_=function(){return[]},rr.prototype.getClass=function(){return rr},rr.overlayOp=function(t,e,n){return new rr(t,e).getResultGeometry(n)},rr.union=function(t,e){return rr.overlayOp(t,e,Lr.UNION)},rr.intersection=function(t,e){return rr.overlayOp(t,e,Lr.INTERSECTION)},rr.symDifference=function(t,e){return rr.overlayOp(t,e,Lr.SYMDIFFERENCE)},rr.difference=function(t,e){return rr.overlayOp(t,e,Lr.DIFFERENCE)};var or=function(t,e){this._geom=new Array(2).fill(null),this._geom[0]=t,this._geom[1]=e};or.prototype.getResultGeometry=function(t){var e=null,n=!1,i=null;try{e=Lr.overlayOp(this._geom[0],this._geom[1],t);n=!0}catch(t){if(!(t instanceof $))throw t;i=t}if(!n)try{e=rr.overlayOp(this._geom[0],this._geom[1],t)}catch(t){throw t instanceof $?i:t}return e},or.prototype.interfaces_=function(){return[]},or.prototype.getClass=function(){return or},or.overlayOp=function(t,e,n){return new or(t,e).getResultGeometry(n)},or.union=function(t,e){return or.overlayOp(t,e,Lr.UNION)},or.intersection=function(t,e){return or.overlayOp(t,e,Lr.INTERSECTION)},or.symDifference=function(t,e){return or.overlayOp(t,e,Lr.SYMDIFFERENCE)},or.difference=function(t,e){return or.overlayOp(t,e,Lr.DIFFERENCE)};var sr=function(){this.mce=null,this.chainIndex=null;var t=arguments[0],e=arguments[1];this.mce=t,this.chainIndex=e};sr.prototype.computeIntersections=function(t,e){this.mce.computeIntersectsForChain(this.chainIndex,t.mce,t.chainIndex,e)},sr.prototype.interfaces_=function(){return[]},sr.prototype.getClass=function(){return sr};var ar=function t(){if(this._label=null,this._xValue=null,this._eventType=null,this._insertEvent=null,this._deleteEventIndex=null,this._obj=null,2===arguments.length){var e=arguments[0],n=arguments[1];this._eventType=t.DELETE,this._xValue=e,this._insertEvent=n}else if(3===arguments.length){var i=arguments[0],r=arguments[1],o=arguments[2];this._eventType=t.INSERT,this._label=i,this._xValue=r,this._obj=o}},ur={INSERT:{configurable:!0},DELETE:{configurable:!0}};ar.prototype.isDelete=function(){return this._eventType===ar.DELETE},ar.prototype.setDeleteEventIndex=function(t){this._deleteEventIndex=t},ar.prototype.getObject=function(){return this._obj},ar.prototype.compareTo=function(t){var e=t;return this._xValuee._xValue?1:this._eventTypee._eventType?1:0},ar.prototype.getInsertEvent=function(){return this._insertEvent},ar.prototype.isInsert=function(){return this._eventType===ar.INSERT},ar.prototype.isSameLabel=function(t){return null!==this._label&&this._label===t._label},ar.prototype.getDeleteEventIndex=function(){return this._deleteEventIndex},ar.prototype.interfaces_=function(){return[E]},ar.prototype.getClass=function(){return ar},ur.INSERT.get=function(){return 1},ur.DELETE.get=function(){return 2},Object.defineProperties(ar,ur);var lr=function(){};lr.prototype.interfaces_=function(){return[]},lr.prototype.getClass=function(){return lr};var cr=function(){this._hasIntersection=!1,this._hasProper=!1,this._hasProperInterior=!1,this._properIntersectionPoint=null,this._li=null,this._includeProper=null,this._recordIsolated=null,this._isSelfIntersection=null,this._numIntersections=0,this.numTests=0,this._bdyNodes=null,this._isDone=!1,this._isDoneWhenProperInt=!1;var t=arguments[0],e=arguments[1],n=arguments[2];this._li=t,this._includeProper=e,this._recordIsolated=n};cr.prototype.isTrivialIntersection=function(t,e,n,i){if(t===n&&1===this._li.getIntersectionNum()){if(cr.isAdjacentSegments(e,i))return!0;if(t.isClosed()){var r=t.getNumPoints()-1;if(0===e&&i===r||0===i&&e===r)return!0}}return!1},cr.prototype.getProperIntersectionPoint=function(){return this._properIntersectionPoint},cr.prototype.setIsDoneIfProperInt=function(t){this._isDoneWhenProperInt=t},cr.prototype.hasProperInteriorIntersection=function(){return this._hasProperInterior},cr.prototype.isBoundaryPointInternal=function(t,e){for(var n=e.iterator();n.hasNext();){var i=n.next().getCoordinate();if(t.isIntersection(i))return!0}return!1},cr.prototype.hasProperIntersection=function(){return this._hasProper},cr.prototype.hasIntersection=function(){return this._hasIntersection},cr.prototype.isDone=function(){return this._isDone},cr.prototype.isBoundaryPoint=function(t,e){return null!==e&&(!!this.isBoundaryPointInternal(t,e[0])||!!this.isBoundaryPointInternal(t,e[1]))},cr.prototype.setBoundaryNodes=function(t,e){this._bdyNodes=new Array(2).fill(null),this._bdyNodes[0]=t,this._bdyNodes[1]=e},cr.prototype.addIntersections=function(t,e,n,i){if(t===n&&e===i)return null;this.numTests++;var r=t.getCoordinates()[e],o=t.getCoordinates()[e+1],s=n.getCoordinates()[i],a=n.getCoordinates()[i+1];this._li.computeIntersection(r,o,s,a),this._li.hasIntersection()&&(this._recordIsolated&&(t.setIsolated(!1),n.setIsolated(!1)),this._numIntersections++,this.isTrivialIntersection(t,e,n,i)||(this._hasIntersection=!0,!this._includeProper&&this._li.isProper()||(t.addIntersections(this._li,e,0),n.addIntersections(this._li,i,1)),this._li.isProper()&&(this._properIntersectionPoint=this._li.getIntersection(0).copy(),this._hasProper=!0,this._isDoneWhenProperInt&&(this._isDone=!0),this.isBoundaryPoint(this._li,this._bdyNodes)||(this._hasProperInterior=!0))))},cr.prototype.interfaces_=function(){return[]},cr.prototype.getClass=function(){return cr},cr.isAdjacentSegments=function(t,e){return 1===Math.abs(t-e)};var pr=function(t){function e(){t.call(this),this.events=new Nt,this.nOverlaps=null}return t&&(e.__proto__=t),e.prototype=Object.create(t&&t.prototype),e.prototype.constructor=e,e.prototype.prepareEvents=function(){$e.sort(this.events);for(var t=0;te||this._maxo?1:0},gr.prototype.interfaces_=function(){return[N]},gr.prototype.getClass=function(){return gr};var dr=function(t){function e(){t.call(this),this._item=null;var e=arguments[0],n=arguments[1],i=arguments[2];this._min=e,this._max=n,this._item=i}return t&&(e.__proto__=t),e.prototype=Object.create(t&&t.prototype),e.prototype.constructor=e,e.prototype.query=function(t,e,n){if(!this.intersects(t,e))return null;n.visitItem(this._item)},e.prototype.interfaces_=function(){return[]},e.prototype.getClass=function(){return e},e}(hr),yr=function(t){function e(){t.call(this),this._node1=null,this._node2=null;var e=arguments[0],n=arguments[1];this._node1=e,this._node2=n,this.buildExtent(this._node1,this._node2)}return t&&(e.__proto__=t),e.prototype=Object.create(t&&t.prototype),e.prototype.constructor=e,e.prototype.buildExtent=function(t,e){this._min=Math.min(t._min,e._min),this._max=Math.max(t._max,e._max)},e.prototype.query=function(t,e,n){if(!this.intersects(t,e))return null;null!==this._node1&&this._node1.query(t,e,n),null!==this._node2&&this._node2.query(t,e,n)},e.prototype.interfaces_=function(){return[]},e.prototype.getClass=function(){return e},e}(hr),_r=function(){this._leaves=new Nt,this._root=null,this._level=0};_r.prototype.buildTree=function(){$e.sort(this._leaves,new hr.NodeComparator);for(var t=this._leaves,e=null,n=new Nt;;){if(this.buildLevel(t,n),1===n.size())return n.get(0);e=t,t=n,n=e}},_r.prototype.insert=function(t,e,n){if(null!==this._root)throw new Error(\"Index cannot be added to once it has been queried\");this._leaves.add(new dr(t,e,n))},_r.prototype.query=function(t,e,n){this.init(),this._root.query(t,e,n)},_r.prototype.buildRoot=function(){if(null!==this._root)return null;this._root=this.buildTree()},_r.prototype.printNode=function(t){Y.out.println(Z.toLineString(new C(t._min,this._level),new C(t._max,this._level)))},_r.prototype.init=function(){if(null!==this._root)return null;this.buildRoot()},_r.prototype.buildLevel=function(t,e){this._level++,e.clear();for(var n=0;n=2,\"found LineString with single point\"),this.insertBoundaryPoint(this._argIndex,e[0]),this.insertBoundaryPoint(this._argIndex,e[e.length-1])},e.prototype.getInvalidPoint=function(){return this._invalidPoint},e.prototype.getBoundaryPoints=function(){for(var t=this.getBoundaryNodes(),e=new Array(t.size()).fill(null),n=0,i=t.iterator();i.hasNext();){var r=i.next();e[n++]=r.getCoordinate().copy()}return e},e.prototype.getBoundaryNodes=function(){return null===this._boundaryNodes&&(this._boundaryNodes=this._nodes.getBoundaryNodes(this._argIndex)),this._boundaryNodes},e.prototype.addSelfIntersectionNode=function(t,e,n){if(this.isBoundaryNode(t,e))return null;n===w.BOUNDARY&&this._useBoundaryDeterminationRule?this.insertBoundaryPoint(t,e):this.insertPoint(t,e,n)},e.prototype.addPolygonRing=function(t,e,n){if(t.isEmpty())return null;var i=Lt.removeRepeatedPoints(t.getCoordinates());if(i.length<4)return this._hasTooFewPoints=!0,this._invalidPoint=i[0],null;var r=e,o=n;at.isCCW(i)&&(r=n,o=e);var s=new ni(i,new Pe(this._argIndex,w.BOUNDARY,r,o));this._lineEdgeMap.put(t,s),this.insertEdge(s),this.insertPoint(this._argIndex,i[0],w.BOUNDARY)},e.prototype.insertPoint=function(t,e,n){var i=this._nodes.addNode(e),r=i.getLabel();null===r?i._label=new Pe(t,n):r.setLocation(t,n)},e.prototype.createEdgeSetIntersector=function(){return new pr},e.prototype.addSelfIntersectionNodes=function(t){for(var e=this._edges.iterator();e.hasNext();)for(var n=e.next(),i=n.getLabel().getLocation(t),r=n.eiList.iterator();r.hasNext();){var o=r.next();this.addSelfIntersectionNode(t,o.coord,i)}},e.prototype.add=function(){if(1!==arguments.length)return t.prototype.add.apply(this,arguments);var e=arguments[0];if(e.isEmpty())return null;if(e instanceof ne&&(this._useBoundaryDeterminationRule=!1),e instanceof $t)this.addPolygon(e);else if(e instanceof Kt)this.addLineString(e);else if(e instanceof Qt)this.addPoint(e);else if(e instanceof te)this.addCollection(e);else if(e instanceof Xt)this.addCollection(e);else if(e instanceof ne)this.addCollection(e);else{if(!(e instanceof zt))throw new Error(e.getClass().getName());this.addCollection(e)}},e.prototype.addCollection=function(t){for(var e=0;e50?(null===this._areaPtLocator&&(this._areaPtLocator=new vr(this._parentGeom)),this._areaPtLocator.locate(t)):this._ptLocator.locate(t,this._parentGeom)},e.prototype.findEdge=function(){if(1===arguments.length){var e=arguments[0];return this._lineEdgeMap.get(e)}return t.prototype.findEdge.apply(this,arguments)},e.prototype.interfaces_=function(){return[]},e.prototype.getClass=function(){return e},e.determineBoundary=function(t,e){return t.isInBoundary(e)?w.BOUNDARY:w.INTERIOR},e}(Ye),Cr=function(){if(this._li=new rt,this._resultPrecisionModel=null,this._arg=null,1===arguments.length){var t=arguments[0];this.setComputationPrecision(t.getPrecisionModel()),this._arg=new Array(1).fill(null),this._arg[0]=new Nr(0,t)}else if(2===arguments.length){var e=arguments[0],n=arguments[1],i=gt.OGC_SFS_BOUNDARY_RULE;e.getPrecisionModel().compareTo(n.getPrecisionModel())>=0?this.setComputationPrecision(e.getPrecisionModel()):this.setComputationPrecision(n.getPrecisionModel()),this._arg=new Array(2).fill(null),this._arg[0]=new Nr(0,e,i),this._arg[1]=new Nr(1,n,i)}else if(3===arguments.length){var r=arguments[0],o=arguments[1],s=arguments[2];r.getPrecisionModel().compareTo(o.getPrecisionModel())>=0?this.setComputationPrecision(r.getPrecisionModel()):this.setComputationPrecision(o.getPrecisionModel()),this._arg=new Array(2).fill(null),this._arg[0]=new Nr(0,r,s),this._arg[1]=new Nr(1,o,s)}};Cr.prototype.getArgGeometry=function(t){return this._arg[t].getGeometry()},Cr.prototype.setComputationPrecision=function(t){this._resultPrecisionModel=t,this._li.setPrecisionModel(this._resultPrecisionModel)},Cr.prototype.interfaces_=function(){return[]},Cr.prototype.getClass=function(){return Cr};var Sr=function(){};Sr.prototype.interfaces_=function(){return[]},Sr.prototype.getClass=function(){return Sr},Sr.map=function(){if(arguments[0]instanceof ct&&T(arguments[1],Sr.MapOp)){for(var t=arguments[0],e=arguments[1],n=new Nt,i=0;i=t.size()?null:t.get(e)},Dr.union=function(t){return new Dr(t).union()},Mr.STRTREE_NODE_CAPACITY.get=function(){return 4},Object.defineProperties(Dr,Mr);var Ar=function(){};Ar.prototype.interfaces_=function(){return[]},Ar.prototype.getClass=function(){return Ar},Ar.union=function(t,e){if(t.isEmpty()||e.isEmpty()){if(t.isEmpty()&&e.isEmpty())return Lr.createEmptyResult(Lr.UNION,t,e,t.getFactory());if(t.isEmpty())return e.copy();if(e.isEmpty())return t.copy()}return t.checkNotGeometryCollection(t),t.checkNotGeometryCollection(e),or.overlayOp(t,e,Lr.UNION)},t.GeoJSONReader=Ne,t.GeoJSONWriter=Ce,t.OverlayOp=Lr,t.UnionOp=Ar,t.BufferOp=di,Object.defineProperty(t,\"__esModule\",{value:!0})});\n","/**\n * @module helpers\n */\n/**\n * Earth Radius used with the Harvesine formula and approximates using a spherical (non-ellipsoid) Earth.\n *\n * @memberof helpers\n * @type {number}\n */\nexport var earthRadius = 6371008.8;\n/**\n * Unit of measurement factors using a spherical (non-ellipsoid) earth radius.\n *\n * @memberof helpers\n * @type {Object}\n */\nexport var factors = {\n centimeters: earthRadius * 100,\n centimetres: earthRadius * 100,\n degrees: earthRadius / 111325,\n feet: earthRadius * 3.28084,\n inches: earthRadius * 39.37,\n kilometers: earthRadius / 1000,\n kilometres: earthRadius / 1000,\n meters: earthRadius,\n metres: earthRadius,\n miles: earthRadius / 1609.344,\n millimeters: earthRadius * 1000,\n millimetres: earthRadius * 1000,\n nauticalmiles: earthRadius / 1852,\n radians: 1,\n yards: earthRadius * 1.0936,\n};\n/**\n * Units of measurement factors based on 1 meter.\n *\n * @memberof helpers\n * @type {Object}\n */\nexport var unitsFactors = {\n centimeters: 100,\n centimetres: 100,\n degrees: 1 / 111325,\n feet: 3.28084,\n inches: 39.37,\n kilometers: 1 / 1000,\n kilometres: 1 / 1000,\n meters: 1,\n metres: 1,\n miles: 1 / 1609.344,\n millimeters: 1000,\n millimetres: 1000,\n nauticalmiles: 1 / 1852,\n radians: 1 / earthRadius,\n yards: 1.0936133,\n};\n/**\n * Area of measurement factors based on 1 square meter.\n *\n * @memberof helpers\n * @type {Object}\n */\nexport var areaFactors = {\n acres: 0.000247105,\n centimeters: 10000,\n centimetres: 10000,\n feet: 10.763910417,\n hectares: 0.0001,\n inches: 1550.003100006,\n kilometers: 0.000001,\n kilometres: 0.000001,\n meters: 1,\n metres: 1,\n miles: 3.86e-7,\n millimeters: 1000000,\n millimetres: 1000000,\n yards: 1.195990046,\n};\n/**\n * Wraps a GeoJSON {@link Geometry} in a GeoJSON {@link Feature}.\n *\n * @name feature\n * @param {Geometry} geometry input geometry\n * @param {Object} [properties={}] an Object of key-value pairs to add as properties\n * @param {Object} [options={}] Optional Parameters\n * @param {Array} [options.bbox] Bounding Box Array [west, south, east, north] associated with the Feature\n * @param {string|number} [options.id] Identifier associated with the Feature\n * @returns {Feature} a GeoJSON Feature\n * @example\n * var geometry = {\n * \"type\": \"Point\",\n * \"coordinates\": [110, 50]\n * };\n *\n * var feature = turf.feature(geometry);\n *\n * //=feature\n */\nexport function feature(geom, properties, options) {\n if (options === void 0) { options = {}; }\n var feat = { type: \"Feature\" };\n if (options.id === 0 || options.id) {\n feat.id = options.id;\n }\n if (options.bbox) {\n feat.bbox = options.bbox;\n }\n feat.properties = properties || {};\n feat.geometry = geom;\n return feat;\n}\n/**\n * Creates a GeoJSON {@link Geometry} from a Geometry string type & coordinates.\n * For GeometryCollection type use `helpers.geometryCollection`\n *\n * @name geometry\n * @param {string} type Geometry Type\n * @param {Array} coordinates Coordinates\n * @param {Object} [options={}] Optional Parameters\n * @returns {Geometry} a GeoJSON Geometry\n * @example\n * var type = \"Point\";\n * var coordinates = [110, 50];\n * var geometry = turf.geometry(type, coordinates);\n * // => geometry\n */\nexport function geometry(type, coordinates, _options) {\n if (_options === void 0) { _options = {}; }\n switch (type) {\n case \"Point\":\n return point(coordinates).geometry;\n case \"LineString\":\n return lineString(coordinates).geometry;\n case \"Polygon\":\n return polygon(coordinates).geometry;\n case \"MultiPoint\":\n return multiPoint(coordinates).geometry;\n case \"MultiLineString\":\n return multiLineString(coordinates).geometry;\n case \"MultiPolygon\":\n return multiPolygon(coordinates).geometry;\n default:\n throw new Error(type + \" is invalid\");\n }\n}\n/**\n * Creates a {@link Point} {@link Feature} from a Position.\n *\n * @name point\n * @param {Array} coordinates longitude, latitude position (each in decimal degrees)\n * @param {Object} [properties={}] an Object of key-value pairs to add as properties\n * @param {Object} [options={}] Optional Parameters\n * @param {Array} [options.bbox] Bounding Box Array [west, south, east, north] associated with the Feature\n * @param {string|number} [options.id] Identifier associated with the Feature\n * @returns {Feature} a Point feature\n * @example\n * var point = turf.point([-75.343, 39.984]);\n *\n * //=point\n */\nexport function point(coordinates, properties, options) {\n if (options === void 0) { options = {}; }\n if (!coordinates) {\n throw new Error(\"coordinates is required\");\n }\n if (!Array.isArray(coordinates)) {\n throw new Error(\"coordinates must be an Array\");\n }\n if (coordinates.length < 2) {\n throw new Error(\"coordinates must be at least 2 numbers long\");\n }\n if (!isNumber(coordinates[0]) || !isNumber(coordinates[1])) {\n throw new Error(\"coordinates must contain numbers\");\n }\n var geom = {\n type: \"Point\",\n coordinates: coordinates,\n };\n return feature(geom, properties, options);\n}\n/**\n * Creates a {@link Point} {@link FeatureCollection} from an Array of Point coordinates.\n *\n * @name points\n * @param {Array>} coordinates an array of Points\n * @param {Object} [properties={}] Translate these properties to each Feature\n * @param {Object} [options={}] Optional Parameters\n * @param {Array} [options.bbox] Bounding Box Array [west, south, east, north]\n * associated with the FeatureCollection\n * @param {string|number} [options.id] Identifier associated with the FeatureCollection\n * @returns {FeatureCollection} Point Feature\n * @example\n * var points = turf.points([\n * [-75, 39],\n * [-80, 45],\n * [-78, 50]\n * ]);\n *\n * //=points\n */\nexport function points(coordinates, properties, options) {\n if (options === void 0) { options = {}; }\n return featureCollection(coordinates.map(function (coords) {\n return point(coords, properties);\n }), options);\n}\n/**\n * Creates a {@link Polygon} {@link Feature} from an Array of LinearRings.\n *\n * @name polygon\n * @param {Array>>} coordinates an array of LinearRings\n * @param {Object} [properties={}] an Object of key-value pairs to add as properties\n * @param {Object} [options={}] Optional Parameters\n * @param {Array} [options.bbox] Bounding Box Array [west, south, east, north] associated with the Feature\n * @param {string|number} [options.id] Identifier associated with the Feature\n * @returns {Feature} Polygon Feature\n * @example\n * var polygon = turf.polygon([[[-5, 52], [-4, 56], [-2, 51], [-7, 54], [-5, 52]]], { name: 'poly1' });\n *\n * //=polygon\n */\nexport function polygon(coordinates, properties, options) {\n if (options === void 0) { options = {}; }\n for (var _i = 0, coordinates_1 = coordinates; _i < coordinates_1.length; _i++) {\n var ring = coordinates_1[_i];\n if (ring.length < 4) {\n throw new Error(\"Each LinearRing of a Polygon must have 4 or more Positions.\");\n }\n for (var j = 0; j < ring[ring.length - 1].length; j++) {\n // Check if first point of Polygon contains two numbers\n if (ring[ring.length - 1][j] !== ring[0][j]) {\n throw new Error(\"First and last Position are not equivalent.\");\n }\n }\n }\n var geom = {\n type: \"Polygon\",\n coordinates: coordinates,\n };\n return feature(geom, properties, options);\n}\n/**\n * Creates a {@link Polygon} {@link FeatureCollection} from an Array of Polygon coordinates.\n *\n * @name polygons\n * @param {Array>>>} coordinates an array of Polygon coordinates\n * @param {Object} [properties={}] an Object of key-value pairs to add as properties\n * @param {Object} [options={}] Optional Parameters\n * @param {Array} [options.bbox] Bounding Box Array [west, south, east, north] associated with the Feature\n * @param {string|number} [options.id] Identifier associated with the FeatureCollection\n * @returns {FeatureCollection} Polygon FeatureCollection\n * @example\n * var polygons = turf.polygons([\n * [[[-5, 52], [-4, 56], [-2, 51], [-7, 54], [-5, 52]]],\n * [[[-15, 42], [-14, 46], [-12, 41], [-17, 44], [-15, 42]]],\n * ]);\n *\n * //=polygons\n */\nexport function polygons(coordinates, properties, options) {\n if (options === void 0) { options = {}; }\n return featureCollection(coordinates.map(function (coords) {\n return polygon(coords, properties);\n }), options);\n}\n/**\n * Creates a {@link LineString} {@link Feature} from an Array of Positions.\n *\n * @name lineString\n * @param {Array>} coordinates an array of Positions\n * @param {Object} [properties={}] an Object of key-value pairs to add as properties\n * @param {Object} [options={}] Optional Parameters\n * @param {Array} [options.bbox] Bounding Box Array [west, south, east, north] associated with the Feature\n * @param {string|number} [options.id] Identifier associated with the Feature\n * @returns {Feature} LineString Feature\n * @example\n * var linestring1 = turf.lineString([[-24, 63], [-23, 60], [-25, 65], [-20, 69]], {name: 'line 1'});\n * var linestring2 = turf.lineString([[-14, 43], [-13, 40], [-15, 45], [-10, 49]], {name: 'line 2'});\n *\n * //=linestring1\n * //=linestring2\n */\nexport function lineString(coordinates, properties, options) {\n if (options === void 0) { options = {}; }\n if (coordinates.length < 2) {\n throw new Error(\"coordinates must be an array of two or more positions\");\n }\n var geom = {\n type: \"LineString\",\n coordinates: coordinates,\n };\n return feature(geom, properties, options);\n}\n/**\n * Creates a {@link LineString} {@link FeatureCollection} from an Array of LineString coordinates.\n *\n * @name lineStrings\n * @param {Array>>} coordinates an array of LinearRings\n * @param {Object} [properties={}] an Object of key-value pairs to add as properties\n * @param {Object} [options={}] Optional Parameters\n * @param {Array} [options.bbox] Bounding Box Array [west, south, east, north]\n * associated with the FeatureCollection\n * @param {string|number} [options.id] Identifier associated with the FeatureCollection\n * @returns {FeatureCollection} LineString FeatureCollection\n * @example\n * var linestrings = turf.lineStrings([\n * [[-24, 63], [-23, 60], [-25, 65], [-20, 69]],\n * [[-14, 43], [-13, 40], [-15, 45], [-10, 49]]\n * ]);\n *\n * //=linestrings\n */\nexport function lineStrings(coordinates, properties, options) {\n if (options === void 0) { options = {}; }\n return featureCollection(coordinates.map(function (coords) {\n return lineString(coords, properties);\n }), options);\n}\n/**\n * Takes one or more {@link Feature|Features} and creates a {@link FeatureCollection}.\n *\n * @name featureCollection\n * @param {Feature[]} features input features\n * @param {Object} [options={}] Optional Parameters\n * @param {Array} [options.bbox] Bounding Box Array [west, south, east, north] associated with the Feature\n * @param {string|number} [options.id] Identifier associated with the Feature\n * @returns {FeatureCollection} FeatureCollection of Features\n * @example\n * var locationA = turf.point([-75.343, 39.984], {name: 'Location A'});\n * var locationB = turf.point([-75.833, 39.284], {name: 'Location B'});\n * var locationC = turf.point([-75.534, 39.123], {name: 'Location C'});\n *\n * var collection = turf.featureCollection([\n * locationA,\n * locationB,\n * locationC\n * ]);\n *\n * //=collection\n */\nexport function featureCollection(features, options) {\n if (options === void 0) { options = {}; }\n var fc = { type: \"FeatureCollection\" };\n if (options.id) {\n fc.id = options.id;\n }\n if (options.bbox) {\n fc.bbox = options.bbox;\n }\n fc.features = features;\n return fc;\n}\n/**\n * Creates a {@link Feature} based on a\n * coordinate array. Properties can be added optionally.\n *\n * @name multiLineString\n * @param {Array>>} coordinates an array of LineStrings\n * @param {Object} [properties={}] an Object of key-value pairs to add as properties\n * @param {Object} [options={}] Optional Parameters\n * @param {Array} [options.bbox] Bounding Box Array [west, south, east, north] associated with the Feature\n * @param {string|number} [options.id] Identifier associated with the Feature\n * @returns {Feature} a MultiLineString feature\n * @throws {Error} if no coordinates are passed\n * @example\n * var multiLine = turf.multiLineString([[[0,0],[10,10]]]);\n *\n * //=multiLine\n */\nexport function multiLineString(coordinates, properties, options) {\n if (options === void 0) { options = {}; }\n var geom = {\n type: \"MultiLineString\",\n coordinates: coordinates,\n };\n return feature(geom, properties, options);\n}\n/**\n * Creates a {@link Feature} based on a\n * coordinate array. Properties can be added optionally.\n *\n * @name multiPoint\n * @param {Array>} coordinates an array of Positions\n * @param {Object} [properties={}] an Object of key-value pairs to add as properties\n * @param {Object} [options={}] Optional Parameters\n * @param {Array} [options.bbox] Bounding Box Array [west, south, east, north] associated with the Feature\n * @param {string|number} [options.id] Identifier associated with the Feature\n * @returns {Feature} a MultiPoint feature\n * @throws {Error} if no coordinates are passed\n * @example\n * var multiPt = turf.multiPoint([[0,0],[10,10]]);\n *\n * //=multiPt\n */\nexport function multiPoint(coordinates, properties, options) {\n if (options === void 0) { options = {}; }\n var geom = {\n type: \"MultiPoint\",\n coordinates: coordinates,\n };\n return feature(geom, properties, options);\n}\n/**\n * Creates a {@link Feature} based on a\n * coordinate array. Properties can be added optionally.\n *\n * @name multiPolygon\n * @param {Array>>>} coordinates an array of Polygons\n * @param {Object} [properties={}] an Object of key-value pairs to add as properties\n * @param {Object} [options={}] Optional Parameters\n * @param {Array} [options.bbox] Bounding Box Array [west, south, east, north] associated with the Feature\n * @param {string|number} [options.id] Identifier associated with the Feature\n * @returns {Feature} a multipolygon feature\n * @throws {Error} if no coordinates are passed\n * @example\n * var multiPoly = turf.multiPolygon([[[[0,0],[0,10],[10,10],[10,0],[0,0]]]]);\n *\n * //=multiPoly\n *\n */\nexport function multiPolygon(coordinates, properties, options) {\n if (options === void 0) { options = {}; }\n var geom = {\n type: \"MultiPolygon\",\n coordinates: coordinates,\n };\n return feature(geom, properties, options);\n}\n/**\n * Creates a {@link Feature} based on a\n * coordinate array. Properties can be added optionally.\n *\n * @name geometryCollection\n * @param {Array} geometries an array of GeoJSON Geometries\n * @param {Object} [properties={}] an Object of key-value pairs to add as properties\n * @param {Object} [options={}] Optional Parameters\n * @param {Array} [options.bbox] Bounding Box Array [west, south, east, north] associated with the Feature\n * @param {string|number} [options.id] Identifier associated with the Feature\n * @returns {Feature} a GeoJSON GeometryCollection Feature\n * @example\n * var pt = turf.geometry(\"Point\", [100, 0]);\n * var line = turf.geometry(\"LineString\", [[101, 0], [102, 1]]);\n * var collection = turf.geometryCollection([pt, line]);\n *\n * // => collection\n */\nexport function geometryCollection(geometries, properties, options) {\n if (options === void 0) { options = {}; }\n var geom = {\n type: \"GeometryCollection\",\n geometries: geometries,\n };\n return feature(geom, properties, options);\n}\n/**\n * Round number to precision\n *\n * @param {number} num Number\n * @param {number} [precision=0] Precision\n * @returns {number} rounded number\n * @example\n * turf.round(120.4321)\n * //=120\n *\n * turf.round(120.4321, 2)\n * //=120.43\n */\nexport function round(num, precision) {\n if (precision === void 0) { precision = 0; }\n if (precision && !(precision >= 0)) {\n throw new Error(\"precision must be a positive number\");\n }\n var multiplier = Math.pow(10, precision || 0);\n return Math.round(num * multiplier) / multiplier;\n}\n/**\n * Convert a distance measurement (assuming a spherical Earth) from radians to a more friendly unit.\n * Valid units: miles, nauticalmiles, inches, yards, meters, metres, kilometers, centimeters, feet\n *\n * @name radiansToLength\n * @param {number} radians in radians across the sphere\n * @param {string} [units=\"kilometers\"] can be degrees, radians, miles, inches, yards, metres,\n * meters, kilometres, kilometers.\n * @returns {number} distance\n */\nexport function radiansToLength(radians, units) {\n if (units === void 0) { units = \"kilometers\"; }\n var factor = factors[units];\n if (!factor) {\n throw new Error(units + \" units is invalid\");\n }\n return radians * factor;\n}\n/**\n * Convert a distance measurement (assuming a spherical Earth) from a real-world unit into radians\n * Valid units: miles, nauticalmiles, inches, yards, meters, metres, kilometers, centimeters, feet\n *\n * @name lengthToRadians\n * @param {number} distance in real units\n * @param {string} [units=\"kilometers\"] can be degrees, radians, miles, inches, yards, metres,\n * meters, kilometres, kilometers.\n * @returns {number} radians\n */\nexport function lengthToRadians(distance, units) {\n if (units === void 0) { units = \"kilometers\"; }\n var factor = factors[units];\n if (!factor) {\n throw new Error(units + \" units is invalid\");\n }\n return distance / factor;\n}\n/**\n * Convert a distance measurement (assuming a spherical Earth) from a real-world unit into degrees\n * Valid units: miles, nauticalmiles, inches, yards, meters, metres, centimeters, kilometres, feet\n *\n * @name lengthToDegrees\n * @param {number} distance in real units\n * @param {string} [units=\"kilometers\"] can be degrees, radians, miles, inches, yards, metres,\n * meters, kilometres, kilometers.\n * @returns {number} degrees\n */\nexport function lengthToDegrees(distance, units) {\n return radiansToDegrees(lengthToRadians(distance, units));\n}\n/**\n * Converts any bearing angle from the north line direction (positive clockwise)\n * and returns an angle between 0-360 degrees (positive clockwise), 0 being the north line\n *\n * @name bearingToAzimuth\n * @param {number} bearing angle, between -180 and +180 degrees\n * @returns {number} angle between 0 and 360 degrees\n */\nexport function bearingToAzimuth(bearing) {\n var angle = bearing % 360;\n if (angle < 0) {\n angle += 360;\n }\n return angle;\n}\n/**\n * Converts an angle in radians to degrees\n *\n * @name radiansToDegrees\n * @param {number} radians angle in radians\n * @returns {number} degrees between 0 and 360 degrees\n */\nexport function radiansToDegrees(radians) {\n var degrees = radians % (2 * Math.PI);\n return (degrees * 180) / Math.PI;\n}\n/**\n * Converts an angle in degrees to radians\n *\n * @name degreesToRadians\n * @param {number} degrees angle between 0 and 360 degrees\n * @returns {number} angle in radians\n */\nexport function degreesToRadians(degrees) {\n var radians = degrees % 360;\n return (radians * Math.PI) / 180;\n}\n/**\n * Converts a length to the requested unit.\n * Valid units: miles, nauticalmiles, inches, yards, meters, metres, kilometers, centimeters, feet\n *\n * @param {number} length to be converted\n * @param {Units} [originalUnit=\"kilometers\"] of the length\n * @param {Units} [finalUnit=\"kilometers\"] returned unit\n * @returns {number} the converted length\n */\nexport function convertLength(length, originalUnit, finalUnit) {\n if (originalUnit === void 0) { originalUnit = \"kilometers\"; }\n if (finalUnit === void 0) { finalUnit = \"kilometers\"; }\n if (!(length >= 0)) {\n throw new Error(\"length must be a positive number\");\n }\n return radiansToLength(lengthToRadians(length, originalUnit), finalUnit);\n}\n/**\n * Converts a area to the requested unit.\n * Valid units: kilometers, kilometres, meters, metres, centimetres, millimeters, acres, miles, yards, feet, inches, hectares\n * @param {number} area to be converted\n * @param {Units} [originalUnit=\"meters\"] of the distance\n * @param {Units} [finalUnit=\"kilometers\"] returned unit\n * @returns {number} the converted area\n */\nexport function convertArea(area, originalUnit, finalUnit) {\n if (originalUnit === void 0) { originalUnit = \"meters\"; }\n if (finalUnit === void 0) { finalUnit = \"kilometers\"; }\n if (!(area >= 0)) {\n throw new Error(\"area must be a positive number\");\n }\n var startFactor = areaFactors[originalUnit];\n if (!startFactor) {\n throw new Error(\"invalid original units\");\n }\n var finalFactor = areaFactors[finalUnit];\n if (!finalFactor) {\n throw new Error(\"invalid final units\");\n }\n return (area / startFactor) * finalFactor;\n}\n/**\n * isNumber\n *\n * @param {*} num Number to validate\n * @returns {boolean} true/false\n * @example\n * turf.isNumber(123)\n * //=true\n * turf.isNumber('foo')\n * //=false\n */\nexport function isNumber(num) {\n return !isNaN(num) && num !== null && !Array.isArray(num);\n}\n/**\n * isObject\n *\n * @param {*} input variable to validate\n * @returns {boolean} true/false\n * @example\n * turf.isObject({elevation: 10})\n * //=true\n * turf.isObject('foo')\n * //=false\n */\nexport function isObject(input) {\n return !!input && input.constructor === Object;\n}\n/**\n * Validate BBox\n *\n * @private\n * @param {Array} bbox BBox to validate\n * @returns {void}\n * @throws Error if BBox is not valid\n * @example\n * validateBBox([-180, -40, 110, 50])\n * //=OK\n * validateBBox([-180, -40])\n * //=Error\n * validateBBox('Foo')\n * //=Error\n * validateBBox(5)\n * //=Error\n * validateBBox(null)\n * //=Error\n * validateBBox(undefined)\n * //=Error\n */\nexport function validateBBox(bbox) {\n if (!bbox) {\n throw new Error(\"bbox is required\");\n }\n if (!Array.isArray(bbox)) {\n throw new Error(\"bbox must be an Array\");\n }\n if (bbox.length !== 4 && bbox.length !== 6) {\n throw new Error(\"bbox must be an Array of 4 or 6 numbers\");\n }\n bbox.forEach(function (num) {\n if (!isNumber(num)) {\n throw new Error(\"bbox must only contain numbers\");\n }\n });\n}\n/**\n * Validate Id\n *\n * @private\n * @param {string|number} id Id to validate\n * @returns {void}\n * @throws Error if Id is not valid\n * @example\n * validateId([-180, -40, 110, 50])\n * //=Error\n * validateId([-180, -40])\n * //=Error\n * validateId('Foo')\n * //=OK\n * validateId(5)\n * //=OK\n * validateId(null)\n * //=Error\n * validateId(undefined)\n * //=Error\n */\nexport function validateId(id) {\n if (!id) {\n throw new Error(\"id is required\");\n }\n if ([\"string\", \"number\"].indexOf(typeof id) === -1) {\n throw new Error(\"id must be a number or a string\");\n }\n}\n","import { feature, lineString, isObject, point } from '@turf/helpers';\n\n/**\n * Callback for coordEach\n *\n * @callback coordEachCallback\n * @param {Array} currentCoord The current coordinate being processed.\n * @param {number} coordIndex The current index of the coordinate being processed.\n * @param {number} featureIndex The current index of the Feature being processed.\n * @param {number} multiFeatureIndex The current index of the Multi-Feature being processed.\n * @param {number} geometryIndex The current index of the Geometry being processed.\n */\n\n/**\n * Iterate over coordinates in any GeoJSON object, similar to Array.forEach()\n *\n * @name coordEach\n * @param {FeatureCollection|Feature|Geometry} geojson any GeoJSON object\n * @param {Function} callback a method that takes (currentCoord, coordIndex, featureIndex, multiFeatureIndex)\n * @param {boolean} [excludeWrapCoord=false] whether or not to include the final coordinate of LinearRings that wraps the ring in its iteration.\n * @returns {void}\n * @example\n * var features = turf.featureCollection([\n * turf.point([26, 37], {\"foo\": \"bar\"}),\n * turf.point([36, 53], {\"hello\": \"world\"})\n * ]);\n *\n * turf.coordEach(features, function (currentCoord, coordIndex, featureIndex, multiFeatureIndex, geometryIndex) {\n * //=currentCoord\n * //=coordIndex\n * //=featureIndex\n * //=multiFeatureIndex\n * //=geometryIndex\n * });\n */\nfunction coordEach(geojson, callback, excludeWrapCoord) {\n // Handles null Geometry -- Skips this GeoJSON\n if (geojson === null) return;\n var j,\n k,\n l,\n geometry,\n stopG,\n coords,\n geometryMaybeCollection,\n wrapShrink = 0,\n coordIndex = 0,\n isGeometryCollection,\n type = geojson.type,\n isFeatureCollection = type === \"FeatureCollection\",\n isFeature = type === \"Feature\",\n stop = isFeatureCollection ? geojson.features.length : 1;\n\n // This logic may look a little weird. The reason why it is that way\n // is because it's trying to be fast. GeoJSON supports multiple kinds\n // of objects at its root: FeatureCollection, Features, Geometries.\n // This function has the responsibility of handling all of them, and that\n // means that some of the `for` loops you see below actually just don't apply\n // to certain inputs. For instance, if you give this just a\n // Point geometry, then both loops are short-circuited and all we do\n // is gradually rename the input until it's called 'geometry'.\n //\n // This also aims to allocate as few resources as possible: just a\n // few numbers and booleans, rather than any temporary arrays as would\n // be required with the normalization approach.\n for (var featureIndex = 0; featureIndex < stop; featureIndex++) {\n geometryMaybeCollection = isFeatureCollection\n ? geojson.features[featureIndex].geometry\n : isFeature\n ? geojson.geometry\n : geojson;\n isGeometryCollection = geometryMaybeCollection\n ? geometryMaybeCollection.type === \"GeometryCollection\"\n : false;\n stopG = isGeometryCollection\n ? geometryMaybeCollection.geometries.length\n : 1;\n\n for (var geomIndex = 0; geomIndex < stopG; geomIndex++) {\n var multiFeatureIndex = 0;\n var geometryIndex = 0;\n geometry = isGeometryCollection\n ? geometryMaybeCollection.geometries[geomIndex]\n : geometryMaybeCollection;\n\n // Handles null Geometry -- Skips this geometry\n if (geometry === null) continue;\n coords = geometry.coordinates;\n var geomType = geometry.type;\n\n wrapShrink =\n excludeWrapCoord &&\n (geomType === \"Polygon\" || geomType === \"MultiPolygon\")\n ? 1\n : 0;\n\n switch (geomType) {\n case null:\n break;\n case \"Point\":\n if (\n callback(\n coords,\n coordIndex,\n featureIndex,\n multiFeatureIndex,\n geometryIndex\n ) === false\n )\n return false;\n coordIndex++;\n multiFeatureIndex++;\n break;\n case \"LineString\":\n case \"MultiPoint\":\n for (j = 0; j < coords.length; j++) {\n if (\n callback(\n coords[j],\n coordIndex,\n featureIndex,\n multiFeatureIndex,\n geometryIndex\n ) === false\n )\n return false;\n coordIndex++;\n if (geomType === \"MultiPoint\") multiFeatureIndex++;\n }\n if (geomType === \"LineString\") multiFeatureIndex++;\n break;\n case \"Polygon\":\n case \"MultiLineString\":\n for (j = 0; j < coords.length; j++) {\n for (k = 0; k < coords[j].length - wrapShrink; k++) {\n if (\n callback(\n coords[j][k],\n coordIndex,\n featureIndex,\n multiFeatureIndex,\n geometryIndex\n ) === false\n )\n return false;\n coordIndex++;\n }\n if (geomType === \"MultiLineString\") multiFeatureIndex++;\n if (geomType === \"Polygon\") geometryIndex++;\n }\n if (geomType === \"Polygon\") multiFeatureIndex++;\n break;\n case \"MultiPolygon\":\n for (j = 0; j < coords.length; j++) {\n geometryIndex = 0;\n for (k = 0; k < coords[j].length; k++) {\n for (l = 0; l < coords[j][k].length - wrapShrink; l++) {\n if (\n callback(\n coords[j][k][l],\n coordIndex,\n featureIndex,\n multiFeatureIndex,\n geometryIndex\n ) === false\n )\n return false;\n coordIndex++;\n }\n geometryIndex++;\n }\n multiFeatureIndex++;\n }\n break;\n case \"GeometryCollection\":\n for (j = 0; j < geometry.geometries.length; j++)\n if (\n coordEach(geometry.geometries[j], callback, excludeWrapCoord) ===\n false\n )\n return false;\n break;\n default:\n throw new Error(\"Unknown Geometry Type\");\n }\n }\n }\n}\n\n/**\n * Callback for coordReduce\n *\n * The first time the callback function is called, the values provided as arguments depend\n * on whether the reduce method has an initialValue argument.\n *\n * If an initialValue is provided to the reduce method:\n * - The previousValue argument is initialValue.\n * - The currentValue argument is the value of the first element present in the array.\n *\n * If an initialValue is not provided:\n * - The previousValue argument is the value of the first element present in the array.\n * - The currentValue argument is the value of the second element present in the array.\n *\n * @callback coordReduceCallback\n * @param {*} previousValue The accumulated value previously returned in the last invocation\n * of the callback, or initialValue, if supplied.\n * @param {Array} currentCoord The current coordinate being processed.\n * @param {number} coordIndex The current index of the coordinate being processed.\n * Starts at index 0, if an initialValue is provided, and at index 1 otherwise.\n * @param {number} featureIndex The current index of the Feature being processed.\n * @param {number} multiFeatureIndex The current index of the Multi-Feature being processed.\n * @param {number} geometryIndex The current index of the Geometry being processed.\n */\n\n/**\n * Reduce coordinates in any GeoJSON object, similar to Array.reduce()\n *\n * @name coordReduce\n * @param {FeatureCollection|Geometry|Feature} geojson any GeoJSON object\n * @param {Function} callback a method that takes (previousValue, currentCoord, coordIndex)\n * @param {*} [initialValue] Value to use as the first argument to the first call of the callback.\n * @param {boolean} [excludeWrapCoord=false] whether or not to include the final coordinate of LinearRings that wraps the ring in its iteration.\n * @returns {*} The value that results from the reduction.\n * @example\n * var features = turf.featureCollection([\n * turf.point([26, 37], {\"foo\": \"bar\"}),\n * turf.point([36, 53], {\"hello\": \"world\"})\n * ]);\n *\n * turf.coordReduce(features, function (previousValue, currentCoord, coordIndex, featureIndex, multiFeatureIndex, geometryIndex) {\n * //=previousValue\n * //=currentCoord\n * //=coordIndex\n * //=featureIndex\n * //=multiFeatureIndex\n * //=geometryIndex\n * return currentCoord;\n * });\n */\nfunction coordReduce(geojson, callback, initialValue, excludeWrapCoord) {\n var previousValue = initialValue;\n coordEach(\n geojson,\n function (\n currentCoord,\n coordIndex,\n featureIndex,\n multiFeatureIndex,\n geometryIndex\n ) {\n if (coordIndex === 0 && initialValue === undefined)\n previousValue = currentCoord;\n else\n previousValue = callback(\n previousValue,\n currentCoord,\n coordIndex,\n featureIndex,\n multiFeatureIndex,\n geometryIndex\n );\n },\n excludeWrapCoord\n );\n return previousValue;\n}\n\n/**\n * Callback for propEach\n *\n * @callback propEachCallback\n * @param {Object} currentProperties The current Properties being processed.\n * @param {number} featureIndex The current index of the Feature being processed.\n */\n\n/**\n * Iterate over properties in any GeoJSON object, similar to Array.forEach()\n *\n * @name propEach\n * @param {FeatureCollection|Feature} geojson any GeoJSON object\n * @param {Function} callback a method that takes (currentProperties, featureIndex)\n * @returns {void}\n * @example\n * var features = turf.featureCollection([\n * turf.point([26, 37], {foo: 'bar'}),\n * turf.point([36, 53], {hello: 'world'})\n * ]);\n *\n * turf.propEach(features, function (currentProperties, featureIndex) {\n * //=currentProperties\n * //=featureIndex\n * });\n */\nfunction propEach(geojson, callback) {\n var i;\n switch (geojson.type) {\n case \"FeatureCollection\":\n for (i = 0; i < geojson.features.length; i++) {\n if (callback(geojson.features[i].properties, i) === false) break;\n }\n break;\n case \"Feature\":\n callback(geojson.properties, 0);\n break;\n }\n}\n\n/**\n * Callback for propReduce\n *\n * The first time the callback function is called, the values provided as arguments depend\n * on whether the reduce method has an initialValue argument.\n *\n * If an initialValue is provided to the reduce method:\n * - The previousValue argument is initialValue.\n * - The currentValue argument is the value of the first element present in the array.\n *\n * If an initialValue is not provided:\n * - The previousValue argument is the value of the first element present in the array.\n * - The currentValue argument is the value of the second element present in the array.\n *\n * @callback propReduceCallback\n * @param {*} previousValue The accumulated value previously returned in the last invocation\n * of the callback, or initialValue, if supplied.\n * @param {*} currentProperties The current Properties being processed.\n * @param {number} featureIndex The current index of the Feature being processed.\n */\n\n/**\n * Reduce properties in any GeoJSON object into a single value,\n * similar to how Array.reduce works. However, in this case we lazily run\n * the reduction, so an array of all properties is unnecessary.\n *\n * @name propReduce\n * @param {FeatureCollection|Feature} geojson any GeoJSON object\n * @param {Function} callback a method that takes (previousValue, currentProperties, featureIndex)\n * @param {*} [initialValue] Value to use as the first argument to the first call of the callback.\n * @returns {*} The value that results from the reduction.\n * @example\n * var features = turf.featureCollection([\n * turf.point([26, 37], {foo: 'bar'}),\n * turf.point([36, 53], {hello: 'world'})\n * ]);\n *\n * turf.propReduce(features, function (previousValue, currentProperties, featureIndex) {\n * //=previousValue\n * //=currentProperties\n * //=featureIndex\n * return currentProperties\n * });\n */\nfunction propReduce(geojson, callback, initialValue) {\n var previousValue = initialValue;\n propEach(geojson, function (currentProperties, featureIndex) {\n if (featureIndex === 0 && initialValue === undefined)\n previousValue = currentProperties;\n else\n previousValue = callback(previousValue, currentProperties, featureIndex);\n });\n return previousValue;\n}\n\n/**\n * Callback for featureEach\n *\n * @callback featureEachCallback\n * @param {Feature} currentFeature The current Feature being processed.\n * @param {number} featureIndex The current index of the Feature being processed.\n */\n\n/**\n * Iterate over features in any GeoJSON object, similar to\n * Array.forEach.\n *\n * @name featureEach\n * @param {FeatureCollection|Feature|Geometry} geojson any GeoJSON object\n * @param {Function} callback a method that takes (currentFeature, featureIndex)\n * @returns {void}\n * @example\n * var features = turf.featureCollection([\n * turf.point([26, 37], {foo: 'bar'}),\n * turf.point([36, 53], {hello: 'world'})\n * ]);\n *\n * turf.featureEach(features, function (currentFeature, featureIndex) {\n * //=currentFeature\n * //=featureIndex\n * });\n */\nfunction featureEach(geojson, callback) {\n if (geojson.type === \"Feature\") {\n callback(geojson, 0);\n } else if (geojson.type === \"FeatureCollection\") {\n for (var i = 0; i < geojson.features.length; i++) {\n if (callback(geojson.features[i], i) === false) break;\n }\n }\n}\n\n/**\n * Callback for featureReduce\n *\n * The first time the callback function is called, the values provided as arguments depend\n * on whether the reduce method has an initialValue argument.\n *\n * If an initialValue is provided to the reduce method:\n * - The previousValue argument is initialValue.\n * - The currentValue argument is the value of the first element present in the array.\n *\n * If an initialValue is not provided:\n * - The previousValue argument is the value of the first element present in the array.\n * - The currentValue argument is the value of the second element present in the array.\n *\n * @callback featureReduceCallback\n * @param {*} previousValue The accumulated value previously returned in the last invocation\n * of the callback, or initialValue, if supplied.\n * @param {Feature} currentFeature The current Feature being processed.\n * @param {number} featureIndex The current index of the Feature being processed.\n */\n\n/**\n * Reduce features in any GeoJSON object, similar to Array.reduce().\n *\n * @name featureReduce\n * @param {FeatureCollection|Feature|Geometry} geojson any GeoJSON object\n * @param {Function} callback a method that takes (previousValue, currentFeature, featureIndex)\n * @param {*} [initialValue] Value to use as the first argument to the first call of the callback.\n * @returns {*} The value that results from the reduction.\n * @example\n * var features = turf.featureCollection([\n * turf.point([26, 37], {\"foo\": \"bar\"}),\n * turf.point([36, 53], {\"hello\": \"world\"})\n * ]);\n *\n * turf.featureReduce(features, function (previousValue, currentFeature, featureIndex) {\n * //=previousValue\n * //=currentFeature\n * //=featureIndex\n * return currentFeature\n * });\n */\nfunction featureReduce(geojson, callback, initialValue) {\n var previousValue = initialValue;\n featureEach(geojson, function (currentFeature, featureIndex) {\n if (featureIndex === 0 && initialValue === undefined)\n previousValue = currentFeature;\n else previousValue = callback(previousValue, currentFeature, featureIndex);\n });\n return previousValue;\n}\n\n/**\n * Get all coordinates from any GeoJSON object.\n *\n * @name coordAll\n * @param {FeatureCollection|Feature|Geometry} geojson any GeoJSON object\n * @returns {Array>} coordinate position array\n * @example\n * var features = turf.featureCollection([\n * turf.point([26, 37], {foo: 'bar'}),\n * turf.point([36, 53], {hello: 'world'})\n * ]);\n *\n * var coords = turf.coordAll(features);\n * //= [[26, 37], [36, 53]]\n */\nfunction coordAll(geojson) {\n var coords = [];\n coordEach(geojson, function (coord) {\n coords.push(coord);\n });\n return coords;\n}\n\n/**\n * Callback for geomEach\n *\n * @callback geomEachCallback\n * @param {Geometry} currentGeometry The current Geometry being processed.\n * @param {number} featureIndex The current index of the Feature being processed.\n * @param {Object} featureProperties The current Feature Properties being processed.\n * @param {Array} featureBBox The current Feature BBox being processed.\n * @param {number|string} featureId The current Feature Id being processed.\n */\n\n/**\n * Iterate over each geometry in any GeoJSON object, similar to Array.forEach()\n *\n * @name geomEach\n * @param {FeatureCollection|Feature|Geometry} geojson any GeoJSON object\n * @param {Function} callback a method that takes (currentGeometry, featureIndex, featureProperties, featureBBox, featureId)\n * @returns {void}\n * @example\n * var features = turf.featureCollection([\n * turf.point([26, 37], {foo: 'bar'}),\n * turf.point([36, 53], {hello: 'world'})\n * ]);\n *\n * turf.geomEach(features, function (currentGeometry, featureIndex, featureProperties, featureBBox, featureId) {\n * //=currentGeometry\n * //=featureIndex\n * //=featureProperties\n * //=featureBBox\n * //=featureId\n * });\n */\nfunction geomEach(geojson, callback) {\n var i,\n j,\n g,\n geometry,\n stopG,\n geometryMaybeCollection,\n isGeometryCollection,\n featureProperties,\n featureBBox,\n featureId,\n featureIndex = 0,\n isFeatureCollection = geojson.type === \"FeatureCollection\",\n isFeature = geojson.type === \"Feature\",\n stop = isFeatureCollection ? geojson.features.length : 1;\n\n // This logic may look a little weird. The reason why it is that way\n // is because it's trying to be fast. GeoJSON supports multiple kinds\n // of objects at its root: FeatureCollection, Features, Geometries.\n // This function has the responsibility of handling all of them, and that\n // means that some of the `for` loops you see below actually just don't apply\n // to certain inputs. For instance, if you give this just a\n // Point geometry, then both loops are short-circuited and all we do\n // is gradually rename the input until it's called 'geometry'.\n //\n // This also aims to allocate as few resources as possible: just a\n // few numbers and booleans, rather than any temporary arrays as would\n // be required with the normalization approach.\n for (i = 0; i < stop; i++) {\n geometryMaybeCollection = isFeatureCollection\n ? geojson.features[i].geometry\n : isFeature\n ? geojson.geometry\n : geojson;\n featureProperties = isFeatureCollection\n ? geojson.features[i].properties\n : isFeature\n ? geojson.properties\n : {};\n featureBBox = isFeatureCollection\n ? geojson.features[i].bbox\n : isFeature\n ? geojson.bbox\n : undefined;\n featureId = isFeatureCollection\n ? geojson.features[i].id\n : isFeature\n ? geojson.id\n : undefined;\n isGeometryCollection = geometryMaybeCollection\n ? geometryMaybeCollection.type === \"GeometryCollection\"\n : false;\n stopG = isGeometryCollection\n ? geometryMaybeCollection.geometries.length\n : 1;\n\n for (g = 0; g < stopG; g++) {\n geometry = isGeometryCollection\n ? geometryMaybeCollection.geometries[g]\n : geometryMaybeCollection;\n\n // Handle null Geometry\n if (geometry === null) {\n if (\n callback(\n null,\n featureIndex,\n featureProperties,\n featureBBox,\n featureId\n ) === false\n )\n return false;\n continue;\n }\n switch (geometry.type) {\n case \"Point\":\n case \"LineString\":\n case \"MultiPoint\":\n case \"Polygon\":\n case \"MultiLineString\":\n case \"MultiPolygon\": {\n if (\n callback(\n geometry,\n featureIndex,\n featureProperties,\n featureBBox,\n featureId\n ) === false\n )\n return false;\n break;\n }\n case \"GeometryCollection\": {\n for (j = 0; j < geometry.geometries.length; j++) {\n if (\n callback(\n geometry.geometries[j],\n featureIndex,\n featureProperties,\n featureBBox,\n featureId\n ) === false\n )\n return false;\n }\n break;\n }\n default:\n throw new Error(\"Unknown Geometry Type\");\n }\n }\n // Only increase `featureIndex` per each feature\n featureIndex++;\n }\n}\n\n/**\n * Callback for geomReduce\n *\n * The first time the callback function is called, the values provided as arguments depend\n * on whether the reduce method has an initialValue argument.\n *\n * If an initialValue is provided to the reduce method:\n * - The previousValue argument is initialValue.\n * - The currentValue argument is the value of the first element present in the array.\n *\n * If an initialValue is not provided:\n * - The previousValue argument is the value of the first element present in the array.\n * - The currentValue argument is the value of the second element present in the array.\n *\n * @callback geomReduceCallback\n * @param {*} previousValue The accumulated value previously returned in the last invocation\n * of the callback, or initialValue, if supplied.\n * @param {Geometry} currentGeometry The current Geometry being processed.\n * @param {number} featureIndex The current index of the Feature being processed.\n * @param {Object} featureProperties The current Feature Properties being processed.\n * @param {Array} featureBBox The current Feature BBox being processed.\n * @param {number|string} featureId The current Feature Id being processed.\n */\n\n/**\n * Reduce geometry in any GeoJSON object, similar to Array.reduce().\n *\n * @name geomReduce\n * @param {FeatureCollection|Feature|Geometry} geojson any GeoJSON object\n * @param {Function} callback a method that takes (previousValue, currentGeometry, featureIndex, featureProperties, featureBBox, featureId)\n * @param {*} [initialValue] Value to use as the first argument to the first call of the callback.\n * @returns {*} The value that results from the reduction.\n * @example\n * var features = turf.featureCollection([\n * turf.point([26, 37], {foo: 'bar'}),\n * turf.point([36, 53], {hello: 'world'})\n * ]);\n *\n * turf.geomReduce(features, function (previousValue, currentGeometry, featureIndex, featureProperties, featureBBox, featureId) {\n * //=previousValue\n * //=currentGeometry\n * //=featureIndex\n * //=featureProperties\n * //=featureBBox\n * //=featureId\n * return currentGeometry\n * });\n */\nfunction geomReduce(geojson, callback, initialValue) {\n var previousValue = initialValue;\n geomEach(\n geojson,\n function (\n currentGeometry,\n featureIndex,\n featureProperties,\n featureBBox,\n featureId\n ) {\n if (featureIndex === 0 && initialValue === undefined)\n previousValue = currentGeometry;\n else\n previousValue = callback(\n previousValue,\n currentGeometry,\n featureIndex,\n featureProperties,\n featureBBox,\n featureId\n );\n }\n );\n return previousValue;\n}\n\n/**\n * Callback for flattenEach\n *\n * @callback flattenEachCallback\n * @param {Feature} currentFeature The current flattened feature being processed.\n * @param {number} featureIndex The current index of the Feature being processed.\n * @param {number} multiFeatureIndex The current index of the Multi-Feature being processed.\n */\n\n/**\n * Iterate over flattened features in any GeoJSON object, similar to\n * Array.forEach.\n *\n * @name flattenEach\n * @param {FeatureCollection|Feature|Geometry} geojson any GeoJSON object\n * @param {Function} callback a method that takes (currentFeature, featureIndex, multiFeatureIndex)\n * @example\n * var features = turf.featureCollection([\n * turf.point([26, 37], {foo: 'bar'}),\n * turf.multiPoint([[40, 30], [36, 53]], {hello: 'world'})\n * ]);\n *\n * turf.flattenEach(features, function (currentFeature, featureIndex, multiFeatureIndex) {\n * //=currentFeature\n * //=featureIndex\n * //=multiFeatureIndex\n * });\n */\nfunction flattenEach(geojson, callback) {\n geomEach(geojson, function (geometry, featureIndex, properties, bbox, id) {\n // Callback for single geometry\n var type = geometry === null ? null : geometry.type;\n switch (type) {\n case null:\n case \"Point\":\n case \"LineString\":\n case \"Polygon\":\n if (\n callback(\n feature(geometry, properties, { bbox: bbox, id: id }),\n featureIndex,\n 0\n ) === false\n )\n return false;\n return;\n }\n\n var geomType;\n\n // Callback for multi-geometry\n switch (type) {\n case \"MultiPoint\":\n geomType = \"Point\";\n break;\n case \"MultiLineString\":\n geomType = \"LineString\";\n break;\n case \"MultiPolygon\":\n geomType = \"Polygon\";\n break;\n }\n\n for (\n var multiFeatureIndex = 0;\n multiFeatureIndex < geometry.coordinates.length;\n multiFeatureIndex++\n ) {\n var coordinate = geometry.coordinates[multiFeatureIndex];\n var geom = {\n type: geomType,\n coordinates: coordinate,\n };\n if (\n callback(feature(geom, properties), featureIndex, multiFeatureIndex) ===\n false\n )\n return false;\n }\n });\n}\n\n/**\n * Callback for flattenReduce\n *\n * The first time the callback function is called, the values provided as arguments depend\n * on whether the reduce method has an initialValue argument.\n *\n * If an initialValue is provided to the reduce method:\n * - The previousValue argument is initialValue.\n * - The currentValue argument is the value of the first element present in the array.\n *\n * If an initialValue is not provided:\n * - The previousValue argument is the value of the first element present in the array.\n * - The currentValue argument is the value of the second element present in the array.\n *\n * @callback flattenReduceCallback\n * @param {*} previousValue The accumulated value previously returned in the last invocation\n * of the callback, or initialValue, if supplied.\n * @param {Feature} currentFeature The current Feature being processed.\n * @param {number} featureIndex The current index of the Feature being processed.\n * @param {number} multiFeatureIndex The current index of the Multi-Feature being processed.\n */\n\n/**\n * Reduce flattened features in any GeoJSON object, similar to Array.reduce().\n *\n * @name flattenReduce\n * @param {FeatureCollection|Feature|Geometry} geojson any GeoJSON object\n * @param {Function} callback a method that takes (previousValue, currentFeature, featureIndex, multiFeatureIndex)\n * @param {*} [initialValue] Value to use as the first argument to the first call of the callback.\n * @returns {*} The value that results from the reduction.\n * @example\n * var features = turf.featureCollection([\n * turf.point([26, 37], {foo: 'bar'}),\n * turf.multiPoint([[40, 30], [36, 53]], {hello: 'world'})\n * ]);\n *\n * turf.flattenReduce(features, function (previousValue, currentFeature, featureIndex, multiFeatureIndex) {\n * //=previousValue\n * //=currentFeature\n * //=featureIndex\n * //=multiFeatureIndex\n * return currentFeature\n * });\n */\nfunction flattenReduce(geojson, callback, initialValue) {\n var previousValue = initialValue;\n flattenEach(\n geojson,\n function (currentFeature, featureIndex, multiFeatureIndex) {\n if (\n featureIndex === 0 &&\n multiFeatureIndex === 0 &&\n initialValue === undefined\n )\n previousValue = currentFeature;\n else\n previousValue = callback(\n previousValue,\n currentFeature,\n featureIndex,\n multiFeatureIndex\n );\n }\n );\n return previousValue;\n}\n\n/**\n * Callback for segmentEach\n *\n * @callback segmentEachCallback\n * @param {Feature} currentSegment The current Segment being processed.\n * @param {number} featureIndex The current index of the Feature being processed.\n * @param {number} multiFeatureIndex The current index of the Multi-Feature being processed.\n * @param {number} geometryIndex The current index of the Geometry being processed.\n * @param {number} segmentIndex The current index of the Segment being processed.\n * @returns {void}\n */\n\n/**\n * Iterate over 2-vertex line segment in any GeoJSON object, similar to Array.forEach()\n * (Multi)Point geometries do not contain segments therefore they are ignored during this operation.\n *\n * @param {FeatureCollection|Feature|Geometry} geojson any GeoJSON\n * @param {Function} callback a method that takes (currentSegment, featureIndex, multiFeatureIndex, geometryIndex, segmentIndex)\n * @returns {void}\n * @example\n * var polygon = turf.polygon([[[-50, 5], [-40, -10], [-50, -10], [-40, 5], [-50, 5]]]);\n *\n * // Iterate over GeoJSON by 2-vertex segments\n * turf.segmentEach(polygon, function (currentSegment, featureIndex, multiFeatureIndex, geometryIndex, segmentIndex) {\n * //=currentSegment\n * //=featureIndex\n * //=multiFeatureIndex\n * //=geometryIndex\n * //=segmentIndex\n * });\n *\n * // Calculate the total number of segments\n * var total = 0;\n * turf.segmentEach(polygon, function () {\n * total++;\n * });\n */\nfunction segmentEach(geojson, callback) {\n flattenEach(geojson, function (feature, featureIndex, multiFeatureIndex) {\n var segmentIndex = 0;\n\n // Exclude null Geometries\n if (!feature.geometry) return;\n // (Multi)Point geometries do not contain segments therefore they are ignored during this operation.\n var type = feature.geometry.type;\n if (type === \"Point\" || type === \"MultiPoint\") return;\n\n // Generate 2-vertex line segments\n var previousCoords;\n var previousFeatureIndex = 0;\n var previousMultiIndex = 0;\n var prevGeomIndex = 0;\n if (\n coordEach(\n feature,\n function (\n currentCoord,\n coordIndex,\n featureIndexCoord,\n multiPartIndexCoord,\n geometryIndex\n ) {\n // Simulating a meta.coordReduce() since `reduce` operations cannot be stopped by returning `false`\n if (\n previousCoords === undefined ||\n featureIndex > previousFeatureIndex ||\n multiPartIndexCoord > previousMultiIndex ||\n geometryIndex > prevGeomIndex\n ) {\n previousCoords = currentCoord;\n previousFeatureIndex = featureIndex;\n previousMultiIndex = multiPartIndexCoord;\n prevGeomIndex = geometryIndex;\n segmentIndex = 0;\n return;\n }\n var currentSegment = lineString(\n [previousCoords, currentCoord],\n feature.properties\n );\n if (\n callback(\n currentSegment,\n featureIndex,\n multiFeatureIndex,\n geometryIndex,\n segmentIndex\n ) === false\n )\n return false;\n segmentIndex++;\n previousCoords = currentCoord;\n }\n ) === false\n )\n return false;\n });\n}\n\n/**\n * Callback for segmentReduce\n *\n * The first time the callback function is called, the values provided as arguments depend\n * on whether the reduce method has an initialValue argument.\n *\n * If an initialValue is provided to the reduce method:\n * - The previousValue argument is initialValue.\n * - The currentValue argument is the value of the first element present in the array.\n *\n * If an initialValue is not provided:\n * - The previousValue argument is the value of the first element present in the array.\n * - The currentValue argument is the value of the second element present in the array.\n *\n * @callback segmentReduceCallback\n * @param {*} previousValue The accumulated value previously returned in the last invocation\n * of the callback, or initialValue, if supplied.\n * @param {Feature} currentSegment The current Segment being processed.\n * @param {number} featureIndex The current index of the Feature being processed.\n * @param {number} multiFeatureIndex The current index of the Multi-Feature being processed.\n * @param {number} geometryIndex The current index of the Geometry being processed.\n * @param {number} segmentIndex The current index of the Segment being processed.\n */\n\n/**\n * Reduce 2-vertex line segment in any GeoJSON object, similar to Array.reduce()\n * (Multi)Point geometries do not contain segments therefore they are ignored during this operation.\n *\n * @param {FeatureCollection|Feature|Geometry} geojson any GeoJSON\n * @param {Function} callback a method that takes (previousValue, currentSegment, currentIndex)\n * @param {*} [initialValue] Value to use as the first argument to the first call of the callback.\n * @returns {void}\n * @example\n * var polygon = turf.polygon([[[-50, 5], [-40, -10], [-50, -10], [-40, 5], [-50, 5]]]);\n *\n * // Iterate over GeoJSON by 2-vertex segments\n * turf.segmentReduce(polygon, function (previousSegment, currentSegment, featureIndex, multiFeatureIndex, geometryIndex, segmentIndex) {\n * //= previousSegment\n * //= currentSegment\n * //= featureIndex\n * //= multiFeatureIndex\n * //= geometryIndex\n * //= segmentIndex\n * return currentSegment\n * });\n *\n * // Calculate the total number of segments\n * var initialValue = 0\n * var total = turf.segmentReduce(polygon, function (previousValue) {\n * previousValue++;\n * return previousValue;\n * }, initialValue);\n */\nfunction segmentReduce(geojson, callback, initialValue) {\n var previousValue = initialValue;\n var started = false;\n segmentEach(\n geojson,\n function (\n currentSegment,\n featureIndex,\n multiFeatureIndex,\n geometryIndex,\n segmentIndex\n ) {\n if (started === false && initialValue === undefined)\n previousValue = currentSegment;\n else\n previousValue = callback(\n previousValue,\n currentSegment,\n featureIndex,\n multiFeatureIndex,\n geometryIndex,\n segmentIndex\n );\n started = true;\n }\n );\n return previousValue;\n}\n\n/**\n * Callback for lineEach\n *\n * @callback lineEachCallback\n * @param {Feature} currentLine The current LineString|LinearRing being processed\n * @param {number} featureIndex The current index of the Feature being processed\n * @param {number} multiFeatureIndex The current index of the Multi-Feature being processed\n * @param {number} geometryIndex The current index of the Geometry being processed\n */\n\n/**\n * Iterate over line or ring coordinates in LineString, Polygon, MultiLineString, MultiPolygon Features or Geometries,\n * similar to Array.forEach.\n *\n * @name lineEach\n * @param {Geometry|Feature} geojson object\n * @param {Function} callback a method that takes (currentLine, featureIndex, multiFeatureIndex, geometryIndex)\n * @example\n * var multiLine = turf.multiLineString([\n * [[26, 37], [35, 45]],\n * [[36, 53], [38, 50], [41, 55]]\n * ]);\n *\n * turf.lineEach(multiLine, function (currentLine, featureIndex, multiFeatureIndex, geometryIndex) {\n * //=currentLine\n * //=featureIndex\n * //=multiFeatureIndex\n * //=geometryIndex\n * });\n */\nfunction lineEach(geojson, callback) {\n // validation\n if (!geojson) throw new Error(\"geojson is required\");\n\n flattenEach(geojson, function (feature, featureIndex, multiFeatureIndex) {\n if (feature.geometry === null) return;\n var type = feature.geometry.type;\n var coords = feature.geometry.coordinates;\n switch (type) {\n case \"LineString\":\n if (callback(feature, featureIndex, multiFeatureIndex, 0, 0) === false)\n return false;\n break;\n case \"Polygon\":\n for (\n var geometryIndex = 0;\n geometryIndex < coords.length;\n geometryIndex++\n ) {\n if (\n callback(\n lineString(coords[geometryIndex], feature.properties),\n featureIndex,\n multiFeatureIndex,\n geometryIndex\n ) === false\n )\n return false;\n }\n break;\n }\n });\n}\n\n/**\n * Callback for lineReduce\n *\n * The first time the callback function is called, the values provided as arguments depend\n * on whether the reduce method has an initialValue argument.\n *\n * If an initialValue is provided to the reduce method:\n * - The previousValue argument is initialValue.\n * - The currentValue argument is the value of the first element present in the array.\n *\n * If an initialValue is not provided:\n * - The previousValue argument is the value of the first element present in the array.\n * - The currentValue argument is the value of the second element present in the array.\n *\n * @callback lineReduceCallback\n * @param {*} previousValue The accumulated value previously returned in the last invocation\n * of the callback, or initialValue, if supplied.\n * @param {Feature} currentLine The current LineString|LinearRing being processed.\n * @param {number} featureIndex The current index of the Feature being processed\n * @param {number} multiFeatureIndex The current index of the Multi-Feature being processed\n * @param {number} geometryIndex The current index of the Geometry being processed\n */\n\n/**\n * Reduce features in any GeoJSON object, similar to Array.reduce().\n *\n * @name lineReduce\n * @param {Geometry|Feature} geojson object\n * @param {Function} callback a method that takes (previousValue, currentLine, featureIndex, multiFeatureIndex, geometryIndex)\n * @param {*} [initialValue] Value to use as the first argument to the first call of the callback.\n * @returns {*} The value that results from the reduction.\n * @example\n * var multiPoly = turf.multiPolygon([\n * turf.polygon([[[12,48],[2,41],[24,38],[12,48]], [[9,44],[13,41],[13,45],[9,44]]]),\n * turf.polygon([[[5, 5], [0, 0], [2, 2], [4, 4], [5, 5]]])\n * ]);\n *\n * turf.lineReduce(multiPoly, function (previousValue, currentLine, featureIndex, multiFeatureIndex, geometryIndex) {\n * //=previousValue\n * //=currentLine\n * //=featureIndex\n * //=multiFeatureIndex\n * //=geometryIndex\n * return currentLine\n * });\n */\nfunction lineReduce(geojson, callback, initialValue) {\n var previousValue = initialValue;\n lineEach(\n geojson,\n function (currentLine, featureIndex, multiFeatureIndex, geometryIndex) {\n if (featureIndex === 0 && initialValue === undefined)\n previousValue = currentLine;\n else\n previousValue = callback(\n previousValue,\n currentLine,\n featureIndex,\n multiFeatureIndex,\n geometryIndex\n );\n }\n );\n return previousValue;\n}\n\n/**\n * Finds a particular 2-vertex LineString Segment from a GeoJSON using `@turf/meta` indexes.\n *\n * Negative indexes are permitted.\n * Point & MultiPoint will always return null.\n *\n * @param {FeatureCollection|Feature|Geometry} geojson Any GeoJSON Feature or Geometry\n * @param {Object} [options={}] Optional parameters\n * @param {number} [options.featureIndex=0] Feature Index\n * @param {number} [options.multiFeatureIndex=0] Multi-Feature Index\n * @param {number} [options.geometryIndex=0] Geometry Index\n * @param {number} [options.segmentIndex=0] Segment Index\n * @param {Object} [options.properties={}] Translate Properties to output LineString\n * @param {BBox} [options.bbox={}] Translate BBox to output LineString\n * @param {number|string} [options.id={}] Translate Id to output LineString\n * @returns {Feature} 2-vertex GeoJSON Feature LineString\n * @example\n * var multiLine = turf.multiLineString([\n * [[10, 10], [50, 30], [30, 40]],\n * [[-10, -10], [-50, -30], [-30, -40]]\n * ]);\n *\n * // First Segment (defaults are 0)\n * turf.findSegment(multiLine);\n * // => Feature>\n *\n * // First Segment of 2nd Multi Feature\n * turf.findSegment(multiLine, {multiFeatureIndex: 1});\n * // => Feature>\n *\n * // Last Segment of Last Multi Feature\n * turf.findSegment(multiLine, {multiFeatureIndex: -1, segmentIndex: -1});\n * // => Feature>\n */\nfunction findSegment(geojson, options) {\n // Optional Parameters\n options = options || {};\n if (!isObject(options)) throw new Error(\"options is invalid\");\n var featureIndex = options.featureIndex || 0;\n var multiFeatureIndex = options.multiFeatureIndex || 0;\n var geometryIndex = options.geometryIndex || 0;\n var segmentIndex = options.segmentIndex || 0;\n\n // Find FeatureIndex\n var properties = options.properties;\n var geometry;\n\n switch (geojson.type) {\n case \"FeatureCollection\":\n if (featureIndex < 0)\n featureIndex = geojson.features.length + featureIndex;\n properties = properties || geojson.features[featureIndex].properties;\n geometry = geojson.features[featureIndex].geometry;\n break;\n case \"Feature\":\n properties = properties || geojson.properties;\n geometry = geojson.geometry;\n break;\n case \"Point\":\n case \"MultiPoint\":\n return null;\n case \"LineString\":\n case \"Polygon\":\n case \"MultiLineString\":\n case \"MultiPolygon\":\n geometry = geojson;\n break;\n default:\n throw new Error(\"geojson is invalid\");\n }\n\n // Find SegmentIndex\n if (geometry === null) return null;\n var coords = geometry.coordinates;\n switch (geometry.type) {\n case \"Point\":\n case \"MultiPoint\":\n return null;\n case \"LineString\":\n if (segmentIndex < 0) segmentIndex = coords.length + segmentIndex - 1;\n return lineString(\n [coords[segmentIndex], coords[segmentIndex + 1]],\n properties,\n options\n );\n case \"Polygon\":\n if (geometryIndex < 0) geometryIndex = coords.length + geometryIndex;\n if (segmentIndex < 0)\n segmentIndex = coords[geometryIndex].length + segmentIndex - 1;\n return lineString(\n [\n coords[geometryIndex][segmentIndex],\n coords[geometryIndex][segmentIndex + 1],\n ],\n properties,\n options\n );\n case \"MultiLineString\":\n if (multiFeatureIndex < 0)\n multiFeatureIndex = coords.length + multiFeatureIndex;\n if (segmentIndex < 0)\n segmentIndex = coords[multiFeatureIndex].length + segmentIndex - 1;\n return lineString(\n [\n coords[multiFeatureIndex][segmentIndex],\n coords[multiFeatureIndex][segmentIndex + 1],\n ],\n properties,\n options\n );\n case \"MultiPolygon\":\n if (multiFeatureIndex < 0)\n multiFeatureIndex = coords.length + multiFeatureIndex;\n if (geometryIndex < 0)\n geometryIndex = coords[multiFeatureIndex].length + geometryIndex;\n if (segmentIndex < 0)\n segmentIndex =\n coords[multiFeatureIndex][geometryIndex].length - segmentIndex - 1;\n return lineString(\n [\n coords[multiFeatureIndex][geometryIndex][segmentIndex],\n coords[multiFeatureIndex][geometryIndex][segmentIndex + 1],\n ],\n properties,\n options\n );\n }\n throw new Error(\"geojson is invalid\");\n}\n\n/**\n * Finds a particular Point from a GeoJSON using `@turf/meta` indexes.\n *\n * Negative indexes are permitted.\n *\n * @param {FeatureCollection|Feature|Geometry} geojson Any GeoJSON Feature or Geometry\n * @param {Object} [options={}] Optional parameters\n * @param {number} [options.featureIndex=0] Feature Index\n * @param {number} [options.multiFeatureIndex=0] Multi-Feature Index\n * @param {number} [options.geometryIndex=0] Geometry Index\n * @param {number} [options.coordIndex=0] Coord Index\n * @param {Object} [options.properties={}] Translate Properties to output Point\n * @param {BBox} [options.bbox={}] Translate BBox to output Point\n * @param {number|string} [options.id={}] Translate Id to output Point\n * @returns {Feature} 2-vertex GeoJSON Feature Point\n * @example\n * var multiLine = turf.multiLineString([\n * [[10, 10], [50, 30], [30, 40]],\n * [[-10, -10], [-50, -30], [-30, -40]]\n * ]);\n *\n * // First Segment (defaults are 0)\n * turf.findPoint(multiLine);\n * // => Feature>\n *\n * // First Segment of the 2nd Multi-Feature\n * turf.findPoint(multiLine, {multiFeatureIndex: 1});\n * // => Feature>\n *\n * // Last Segment of last Multi-Feature\n * turf.findPoint(multiLine, {multiFeatureIndex: -1, coordIndex: -1});\n * // => Feature>\n */\nfunction findPoint(geojson, options) {\n // Optional Parameters\n options = options || {};\n if (!isObject(options)) throw new Error(\"options is invalid\");\n var featureIndex = options.featureIndex || 0;\n var multiFeatureIndex = options.multiFeatureIndex || 0;\n var geometryIndex = options.geometryIndex || 0;\n var coordIndex = options.coordIndex || 0;\n\n // Find FeatureIndex\n var properties = options.properties;\n var geometry;\n\n switch (geojson.type) {\n case \"FeatureCollection\":\n if (featureIndex < 0)\n featureIndex = geojson.features.length + featureIndex;\n properties = properties || geojson.features[featureIndex].properties;\n geometry = geojson.features[featureIndex].geometry;\n break;\n case \"Feature\":\n properties = properties || geojson.properties;\n geometry = geojson.geometry;\n break;\n case \"Point\":\n case \"MultiPoint\":\n return null;\n case \"LineString\":\n case \"Polygon\":\n case \"MultiLineString\":\n case \"MultiPolygon\":\n geometry = geojson;\n break;\n default:\n throw new Error(\"geojson is invalid\");\n }\n\n // Find Coord Index\n if (geometry === null) return null;\n var coords = geometry.coordinates;\n switch (geometry.type) {\n case \"Point\":\n return point(coords, properties, options);\n case \"MultiPoint\":\n if (multiFeatureIndex < 0)\n multiFeatureIndex = coords.length + multiFeatureIndex;\n return point(coords[multiFeatureIndex], properties, options);\n case \"LineString\":\n if (coordIndex < 0) coordIndex = coords.length + coordIndex;\n return point(coords[coordIndex], properties, options);\n case \"Polygon\":\n if (geometryIndex < 0) geometryIndex = coords.length + geometryIndex;\n if (coordIndex < 0)\n coordIndex = coords[geometryIndex].length + coordIndex;\n return point(coords[geometryIndex][coordIndex], properties, options);\n case \"MultiLineString\":\n if (multiFeatureIndex < 0)\n multiFeatureIndex = coords.length + multiFeatureIndex;\n if (coordIndex < 0)\n coordIndex = coords[multiFeatureIndex].length + coordIndex;\n return point(coords[multiFeatureIndex][coordIndex], properties, options);\n case \"MultiPolygon\":\n if (multiFeatureIndex < 0)\n multiFeatureIndex = coords.length + multiFeatureIndex;\n if (geometryIndex < 0)\n geometryIndex = coords[multiFeatureIndex].length + geometryIndex;\n if (coordIndex < 0)\n coordIndex =\n coords[multiFeatureIndex][geometryIndex].length - coordIndex;\n return point(\n coords[multiFeatureIndex][geometryIndex][coordIndex],\n properties,\n options\n );\n }\n throw new Error(\"geojson is invalid\");\n}\n\nexport { coordAll, coordEach, coordReduce, featureEach, featureReduce, findPoint, findSegment, flattenEach, flattenReduce, geomEach, geomReduce, lineEach, lineReduce, propEach, propReduce, segmentEach, segmentReduce };\n","import { coordEach } from \"@turf/meta\";\n/**\n * Takes a set of features, calculates the bbox of all input features, and returns a bounding box.\n *\n * @name bbox\n * @param {GeoJSON} geojson any GeoJSON object\n * @returns {BBox} bbox extent in [minX, minY, maxX, maxY] order\n * @example\n * var line = turf.lineString([[-74, 40], [-78, 42], [-82, 35]]);\n * var bbox = turf.bbox(line);\n * var bboxPolygon = turf.bboxPolygon(bbox);\n *\n * //addToMap\n * var addToMap = [line, bboxPolygon]\n */\nfunction bbox(geojson) {\n var result = [Infinity, Infinity, -Infinity, -Infinity];\n coordEach(geojson, function (coord) {\n if (result[0] > coord[0]) {\n result[0] = coord[0];\n }\n if (result[1] > coord[1]) {\n result[1] = coord[1];\n }\n if (result[2] < coord[0]) {\n result[2] = coord[0];\n }\n if (result[3] < coord[1]) {\n result[3] = coord[1];\n }\n });\n return result;\n}\nbbox[\"default\"] = bbox;\nexport default bbox;\n","import { isNumber, } from \"@turf/helpers\";\n/**\n * Unwrap a coordinate from a Point Feature, Geometry or a single coordinate.\n *\n * @name getCoord\n * @param {Array|Geometry|Feature} coord GeoJSON Point or an Array of numbers\n * @returns {Array} coordinates\n * @example\n * var pt = turf.point([10, 10]);\n *\n * var coord = turf.getCoord(pt);\n * //= [10, 10]\n */\nexport function getCoord(coord) {\n if (!coord) {\n throw new Error(\"coord is required\");\n }\n if (!Array.isArray(coord)) {\n if (coord.type === \"Feature\" &&\n coord.geometry !== null &&\n coord.geometry.type === \"Point\") {\n return coord.geometry.coordinates;\n }\n if (coord.type === \"Point\") {\n return coord.coordinates;\n }\n }\n if (Array.isArray(coord) &&\n coord.length >= 2 &&\n !Array.isArray(coord[0]) &&\n !Array.isArray(coord[1])) {\n return coord;\n }\n throw new Error(\"coord must be GeoJSON Point or an Array of numbers\");\n}\n/**\n * Unwrap coordinates from a Feature, Geometry Object or an Array\n *\n * @name getCoords\n * @param {Array|Geometry|Feature} coords Feature, Geometry Object or an Array\n * @returns {Array} coordinates\n * @example\n * var poly = turf.polygon([[[119.32, -8.7], [119.55, -8.69], [119.51, -8.54], [119.32, -8.7]]]);\n *\n * var coords = turf.getCoords(poly);\n * //= [[[119.32, -8.7], [119.55, -8.69], [119.51, -8.54], [119.32, -8.7]]]\n */\nexport function getCoords(coords) {\n if (Array.isArray(coords)) {\n return coords;\n }\n // Feature\n if (coords.type === \"Feature\") {\n if (coords.geometry !== null) {\n return coords.geometry.coordinates;\n }\n }\n else {\n // Geometry\n if (coords.coordinates) {\n return coords.coordinates;\n }\n }\n throw new Error(\"coords must be GeoJSON Feature, Geometry Object or an Array\");\n}\n/**\n * Checks if coordinates contains a number\n *\n * @name containsNumber\n * @param {Array} coordinates GeoJSON Coordinates\n * @returns {boolean} true if Array contains a number\n */\nexport function containsNumber(coordinates) {\n if (coordinates.length > 1 &&\n isNumber(coordinates[0]) &&\n isNumber(coordinates[1])) {\n return true;\n }\n if (Array.isArray(coordinates[0]) && coordinates[0].length) {\n return containsNumber(coordinates[0]);\n }\n throw new Error(\"coordinates must only contain numbers\");\n}\n/**\n * Enforce expectations about types of GeoJSON objects for Turf.\n *\n * @name geojsonType\n * @param {GeoJSON} value any GeoJSON object\n * @param {string} type expected GeoJSON type\n * @param {string} name name of calling function\n * @throws {Error} if value is not the expected type.\n */\nexport function geojsonType(value, type, name) {\n if (!type || !name) {\n throw new Error(\"type and name required\");\n }\n if (!value || value.type !== type) {\n throw new Error(\"Invalid input to \" +\n name +\n \": must be a \" +\n type +\n \", given \" +\n value.type);\n }\n}\n/**\n * Enforce expectations about types of {@link Feature} inputs for Turf.\n * Internally this uses {@link geojsonType} to judge geometry types.\n *\n * @name featureOf\n * @param {Feature} feature a feature with an expected geometry type\n * @param {string} type expected GeoJSON type\n * @param {string} name name of calling function\n * @throws {Error} error if value is not the expected type.\n */\nexport function featureOf(feature, type, name) {\n if (!feature) {\n throw new Error(\"No feature passed\");\n }\n if (!name) {\n throw new Error(\".featureOf() requires a name\");\n }\n if (!feature || feature.type !== \"Feature\" || !feature.geometry) {\n throw new Error(\"Invalid input to \" + name + \", Feature with geometry required\");\n }\n if (!feature.geometry || feature.geometry.type !== type) {\n throw new Error(\"Invalid input to \" +\n name +\n \": must be a \" +\n type +\n \", given \" +\n feature.geometry.type);\n }\n}\n/**\n * Enforce expectations about types of {@link FeatureCollection} inputs for Turf.\n * Internally this uses {@link geojsonType} to judge geometry types.\n *\n * @name collectionOf\n * @param {FeatureCollection} featureCollection a FeatureCollection for which features will be judged\n * @param {string} type expected GeoJSON type\n * @param {string} name name of calling function\n * @throws {Error} if value is not the expected type.\n */\nexport function collectionOf(featureCollection, type, name) {\n if (!featureCollection) {\n throw new Error(\"No featureCollection passed\");\n }\n if (!name) {\n throw new Error(\".collectionOf() requires a name\");\n }\n if (!featureCollection || featureCollection.type !== \"FeatureCollection\") {\n throw new Error(\"Invalid input to \" + name + \", FeatureCollection required\");\n }\n for (var _i = 0, _a = featureCollection.features; _i < _a.length; _i++) {\n var feature = _a[_i];\n if (!feature || feature.type !== \"Feature\" || !feature.geometry) {\n throw new Error(\"Invalid input to \" + name + \", Feature with geometry required\");\n }\n if (!feature.geometry || feature.geometry.type !== type) {\n throw new Error(\"Invalid input to \" +\n name +\n \": must be a \" +\n type +\n \", given \" +\n feature.geometry.type);\n }\n }\n}\n/**\n * Get Geometry from Feature or Geometry Object\n *\n * @param {Feature|Geometry} geojson GeoJSON Feature or Geometry Object\n * @returns {Geometry|null} GeoJSON Geometry Object\n * @throws {Error} if geojson is not a Feature or Geometry Object\n * @example\n * var point = {\n * \"type\": \"Feature\",\n * \"properties\": {},\n * \"geometry\": {\n * \"type\": \"Point\",\n * \"coordinates\": [110, 40]\n * }\n * }\n * var geom = turf.getGeom(point)\n * //={\"type\": \"Point\", \"coordinates\": [110, 40]}\n */\nexport function getGeom(geojson) {\n if (geojson.type === \"Feature\") {\n return geojson.geometry;\n }\n return geojson;\n}\n/**\n * Get GeoJSON object's type, Geometry type is prioritize.\n *\n * @param {GeoJSON} geojson GeoJSON object\n * @param {string} [name=\"geojson\"] name of the variable to display in error message (unused)\n * @returns {string} GeoJSON type\n * @example\n * var point = {\n * \"type\": \"Feature\",\n * \"properties\": {},\n * \"geometry\": {\n * \"type\": \"Point\",\n * \"coordinates\": [110, 40]\n * }\n * }\n * var geom = turf.getType(point)\n * //=\"Point\"\n */\nexport function getType(geojson, _name) {\n if (geojson.type === \"FeatureCollection\") {\n return \"FeatureCollection\";\n }\n if (geojson.type === \"GeometryCollection\") {\n return \"GeometryCollection\";\n }\n if (geojson.type === \"Feature\" && geojson.geometry !== null) {\n return geojson.geometry.type;\n }\n return geojson.type;\n}\n","import { getCoord, getGeom } from \"@turf/invariant\";\n// http://en.wikipedia.org/wiki/Even%E2%80%93odd_rule\n// modified from: https://github.com/substack/point-in-polygon/blob/master/index.js\n// which was modified from http://www.ecse.rpi.edu/Homepages/wrf/Research/Short_Notes/pnpoly.html\n/**\n * Takes a {@link Point} and a {@link Polygon} or {@link MultiPolygon} and determines if the point\n * resides inside the polygon. The polygon can be convex or concave. The function accounts for holes.\n *\n * @name booleanPointInPolygon\n * @param {Coord} point input point\n * @param {Feature} polygon input polygon or multipolygon\n * @param {Object} [options={}] Optional parameters\n * @param {boolean} [options.ignoreBoundary=false] True if polygon boundary should be ignored when determining if\n * the point is inside the polygon otherwise false.\n * @returns {boolean} `true` if the Point is inside the Polygon; `false` if the Point is not inside the Polygon\n * @example\n * var pt = turf.point([-77, 44]);\n * var poly = turf.polygon([[\n * [-81, 41],\n * [-81, 47],\n * [-72, 47],\n * [-72, 41],\n * [-81, 41]\n * ]]);\n *\n * turf.booleanPointInPolygon(pt, poly);\n * //= true\n */\nexport default function booleanPointInPolygon(point, polygon, options) {\n if (options === void 0) { options = {}; }\n // validation\n if (!point) {\n throw new Error(\"point is required\");\n }\n if (!polygon) {\n throw new Error(\"polygon is required\");\n }\n var pt = getCoord(point);\n var geom = getGeom(polygon);\n var type = geom.type;\n var bbox = polygon.bbox;\n var polys = geom.coordinates;\n // Quick elimination if point is not inside bbox\n if (bbox && inBBox(pt, bbox) === false) {\n return false;\n }\n // normalize to multipolygon\n if (type === \"Polygon\") {\n polys = [polys];\n }\n var insidePoly = false;\n for (var i = 0; i < polys.length && !insidePoly; i++) {\n // check if it is in the outer ring first\n if (inRing(pt, polys[i][0], options.ignoreBoundary)) {\n var inHole = false;\n var k = 1;\n // check for the point in any of the holes\n while (k < polys[i].length && !inHole) {\n if (inRing(pt, polys[i][k], !options.ignoreBoundary)) {\n inHole = true;\n }\n k++;\n }\n if (!inHole) {\n insidePoly = true;\n }\n }\n }\n return insidePoly;\n}\n/**\n * inRing\n *\n * @private\n * @param {Array} pt [x,y]\n * @param {Array>} ring [[x,y], [x,y],..]\n * @param {boolean} ignoreBoundary ignoreBoundary\n * @returns {boolean} inRing\n */\nfunction inRing(pt, ring, ignoreBoundary) {\n var isInside = false;\n if (ring[0][0] === ring[ring.length - 1][0] &&\n ring[0][1] === ring[ring.length - 1][1]) {\n ring = ring.slice(0, ring.length - 1);\n }\n for (var i = 0, j = ring.length - 1; i < ring.length; j = i++) {\n var xi = ring[i][0];\n var yi = ring[i][1];\n var xj = ring[j][0];\n var yj = ring[j][1];\n var onBoundary = pt[1] * (xi - xj) + yi * (xj - pt[0]) + yj * (pt[0] - xi) === 0 &&\n (xi - pt[0]) * (xj - pt[0]) <= 0 &&\n (yi - pt[1]) * (yj - pt[1]) <= 0;\n if (onBoundary) {\n return !ignoreBoundary;\n }\n var intersect = yi > pt[1] !== yj > pt[1] &&\n pt[0] < ((xj - xi) * (pt[1] - yi)) / (yj - yi) + xi;\n if (intersect) {\n isInside = !isInside;\n }\n }\n return isInside;\n}\n/**\n * inBBox\n *\n * @private\n * @param {Position} pt point [x,y]\n * @param {BBox} bbox BBox [west, south, east, north]\n * @returns {boolean} true/false if point is inside BBox\n */\nfunction inBBox(pt, bbox) {\n return (bbox[0] <= pt[0] && bbox[1] <= pt[1] && bbox[2] >= pt[0] && bbox[3] >= pt[1]);\n}\n","import { getCoord } from \"@turf/invariant\";\nimport { radiansToLength, degreesToRadians, } from \"@turf/helpers\";\n//http://en.wikipedia.org/wiki/Haversine_formula\n//http://www.movable-type.co.uk/scripts/latlong.html\n/**\n * Calculates the distance between two {@link Point|points} in degrees, radians, miles, or kilometers.\n * This uses the [Haversine formula](http://en.wikipedia.org/wiki/Haversine_formula) to account for global curvature.\n *\n * @name distance\n * @param {Coord | Point} from origin point or coordinate\n * @param {Coord | Point} to destination point or coordinate\n * @param {Object} [options={}] Optional parameters\n * @param {string} [options.units='kilometers'] can be degrees, radians, miles, or kilometers\n * @returns {number} distance between the two points\n * @example\n * var from = turf.point([-75.343, 39.984]);\n * var to = turf.point([-75.534, 39.123]);\n * var options = {units: 'miles'};\n *\n * var distance = turf.distance(from, to, options);\n *\n * //addToMap\n * var addToMap = [from, to];\n * from.properties.distance = distance;\n * to.properties.distance = distance;\n */\nfunction distance(from, to, options) {\n if (options === void 0) { options = {}; }\n var coordinates1 = getCoord(from);\n var coordinates2 = getCoord(to);\n var dLat = degreesToRadians(coordinates2[1] - coordinates1[1]);\n var dLon = degreesToRadians(coordinates2[0] - coordinates1[0]);\n var lat1 = degreesToRadians(coordinates1[1]);\n var lat2 = degreesToRadians(coordinates2[1]);\n var a = Math.pow(Math.sin(dLat / 2), 2) +\n Math.pow(Math.sin(dLon / 2), 2) * Math.cos(lat1) * Math.cos(lat2);\n return radiansToLength(2 * Math.atan2(Math.sqrt(a), Math.sqrt(1 - a)), options.units);\n}\nexport default distance;\n","export var hasOwnProperty = Object.prototype.hasOwnProperty;\n","// TODO if quantized, use simpler Int32 hashing?\n\nvar buffer = new ArrayBuffer(16),\n floats = new Float64Array(buffer),\n uints = new Uint32Array(buffer);\n\nexport default function(point) {\n floats[0] = point[0];\n floats[1] = point[1];\n var hash = uints[0] ^ uints[1];\n hash = hash << 5 ^ hash >> 7 ^ uints[2] ^ uints[3];\n return hash & 0x7fffffff;\n}\n","import { feature } from \"@turf/helpers\";\nimport { getCoords, getType } from \"@turf/invariant\";\n// To-Do => Improve Typescript GeoJSON handling\n/**\n * Removes redundant coordinates from any GeoJSON Geometry.\n *\n * @name cleanCoords\n * @param {Geometry|Feature} geojson Feature or Geometry\n * @param {Object} [options={}] Optional parameters\n * @param {boolean} [options.mutate=false] allows GeoJSON input to be mutated\n * @returns {Geometry|Feature} the cleaned input Feature/Geometry\n * @example\n * var line = turf.lineString([[0, 0], [0, 2], [0, 5], [0, 8], [0, 8], [0, 10]]);\n * var multiPoint = turf.multiPoint([[0, 0], [0, 0], [2, 2]]);\n *\n * turf.cleanCoords(line).geometry.coordinates;\n * //= [[0, 0], [0, 10]]\n *\n * turf.cleanCoords(multiPoint).geometry.coordinates;\n * //= [[0, 0], [2, 2]]\n */\nfunction cleanCoords(geojson, options) {\n if (options === void 0) { options = {}; }\n // Backwards compatible with v4.0\n var mutate = typeof options === \"object\" ? options.mutate : options;\n if (!geojson)\n throw new Error(\"geojson is required\");\n var type = getType(geojson);\n // Store new \"clean\" points in this Array\n var newCoords = [];\n switch (type) {\n case \"LineString\":\n newCoords = cleanLine(geojson);\n break;\n case \"MultiLineString\":\n case \"Polygon\":\n getCoords(geojson).forEach(function (line) {\n newCoords.push(cleanLine(line));\n });\n break;\n case \"MultiPolygon\":\n getCoords(geojson).forEach(function (polygons) {\n var polyPoints = [];\n polygons.forEach(function (ring) {\n polyPoints.push(cleanLine(ring));\n });\n newCoords.push(polyPoints);\n });\n break;\n case \"Point\":\n return geojson;\n case \"MultiPoint\":\n var existing = {};\n getCoords(geojson).forEach(function (coord) {\n var key = coord.join(\"-\");\n if (!Object.prototype.hasOwnProperty.call(existing, key)) {\n newCoords.push(coord);\n existing[key] = true;\n }\n });\n break;\n default:\n throw new Error(type + \" geometry not supported\");\n }\n // Support input mutation\n if (geojson.coordinates) {\n if (mutate === true) {\n geojson.coordinates = newCoords;\n return geojson;\n }\n return { type: type, coordinates: newCoords };\n }\n else {\n if (mutate === true) {\n geojson.geometry.coordinates = newCoords;\n return geojson;\n }\n return feature({ type: type, coordinates: newCoords }, geojson.properties, {\n bbox: geojson.bbox,\n id: geojson.id,\n });\n }\n}\n/**\n * Clean Coords\n *\n * @private\n * @param {Array|LineString} line Line\n * @returns {Array} Cleaned coordinates\n */\nfunction cleanLine(line) {\n var points = getCoords(line);\n // handle \"clean\" segment\n if (points.length === 2 && !equals(points[0], points[1]))\n return points;\n var newPoints = [];\n var secondToLast = points.length - 1;\n var newPointsLength = newPoints.length;\n newPoints.push(points[0]);\n for (var i = 1; i < secondToLast; i++) {\n var prevAddedPoint = newPoints[newPoints.length - 1];\n if (points[i][0] === prevAddedPoint[0] &&\n points[i][1] === prevAddedPoint[1])\n continue;\n else {\n newPoints.push(points[i]);\n newPointsLength = newPoints.length;\n if (newPointsLength > 2) {\n if (isPointOnLineSegment(newPoints[newPointsLength - 3], newPoints[newPointsLength - 1], newPoints[newPointsLength - 2]))\n newPoints.splice(newPoints.length - 2, 1);\n }\n }\n }\n newPoints.push(points[points.length - 1]);\n newPointsLength = newPoints.length;\n if (equals(points[0], points[points.length - 1]) && newPointsLength < 4)\n throw new Error(\"invalid polygon\");\n if (isPointOnLineSegment(newPoints[newPointsLength - 3], newPoints[newPointsLength - 1], newPoints[newPointsLength - 2]))\n newPoints.splice(newPoints.length - 2, 1);\n return newPoints;\n}\n/**\n * Compares two points and returns if they are equals\n *\n * @private\n * @param {Position} pt1 point\n * @param {Position} pt2 point\n * @returns {boolean} true if they are equals\n */\nfunction equals(pt1, pt2) {\n return pt1[0] === pt2[0] && pt1[1] === pt2[1];\n}\n/**\n * Returns if `point` is on the segment between `start` and `end`.\n * Borrowed from `@turf/boolean-point-on-line` to speed up the evaluation (instead of using the module as dependency)\n *\n * @private\n * @param {Position} start coord pair of start of line\n * @param {Position} end coord pair of end of line\n * @param {Position} point coord pair of point to check\n * @returns {boolean} true/false\n */\nfunction isPointOnLineSegment(start, end, point) {\n var x = point[0], y = point[1];\n var startX = start[0], startY = start[1];\n var endX = end[0], endY = end[1];\n var dxc = x - startX;\n var dyc = y - startY;\n var dxl = endX - startX;\n var dyl = endY - startY;\n var cross = dxc * dyl - dyc * dxl;\n if (cross !== 0)\n return false;\n else if (Math.abs(dxl) >= Math.abs(dyl))\n return dxl > 0 ? startX <= x && x <= endX : endX <= x && x <= startX;\n else\n return dyl > 0 ? startY <= y && y <= endY : endY <= y && y <= startY;\n}\nexport default cleanCoords;\n","/**\n * Returns a cloned copy of the passed GeoJSON Object, including possible 'Foreign Members'.\n * ~3-5x faster than the common JSON.parse + JSON.stringify combo method.\n *\n * @name clone\n * @param {GeoJSON} geojson GeoJSON Object\n * @returns {GeoJSON} cloned GeoJSON Object\n * @example\n * var line = turf.lineString([[-74, 40], [-78, 42], [-82, 35]], {color: 'red'});\n *\n * var lineCloned = turf.clone(line);\n */\nfunction clone(geojson) {\n if (!geojson) {\n throw new Error(\"geojson is required\");\n }\n switch (geojson.type) {\n case \"Feature\":\n return cloneFeature(geojson);\n case \"FeatureCollection\":\n return cloneFeatureCollection(geojson);\n case \"Point\":\n case \"LineString\":\n case \"Polygon\":\n case \"MultiPoint\":\n case \"MultiLineString\":\n case \"MultiPolygon\":\n case \"GeometryCollection\":\n return cloneGeometry(geojson);\n default:\n throw new Error(\"unknown GeoJSON type\");\n }\n}\n/**\n * Clone Feature\n *\n * @private\n * @param {Feature} geojson GeoJSON Feature\n * @returns {Feature} cloned Feature\n */\nfunction cloneFeature(geojson) {\n var cloned = { type: \"Feature\" };\n // Preserve Foreign Members\n Object.keys(geojson).forEach(function (key) {\n switch (key) {\n case \"type\":\n case \"properties\":\n case \"geometry\":\n return;\n default:\n cloned[key] = geojson[key];\n }\n });\n // Add properties & geometry last\n cloned.properties = cloneProperties(geojson.properties);\n cloned.geometry = cloneGeometry(geojson.geometry);\n return cloned;\n}\n/**\n * Clone Properties\n *\n * @private\n * @param {Object} properties GeoJSON Properties\n * @returns {Object} cloned Properties\n */\nfunction cloneProperties(properties) {\n var cloned = {};\n if (!properties) {\n return cloned;\n }\n Object.keys(properties).forEach(function (key) {\n var value = properties[key];\n if (typeof value === \"object\") {\n if (value === null) {\n // handle null\n cloned[key] = null;\n }\n else if (Array.isArray(value)) {\n // handle Array\n cloned[key] = value.map(function (item) {\n return item;\n });\n }\n else {\n // handle generic Object\n cloned[key] = cloneProperties(value);\n }\n }\n else {\n cloned[key] = value;\n }\n });\n return cloned;\n}\n/**\n * Clone Feature Collection\n *\n * @private\n * @param {FeatureCollection} geojson GeoJSON Feature Collection\n * @returns {FeatureCollection} cloned Feature Collection\n */\nfunction cloneFeatureCollection(geojson) {\n var cloned = { type: \"FeatureCollection\" };\n // Preserve Foreign Members\n Object.keys(geojson).forEach(function (key) {\n switch (key) {\n case \"type\":\n case \"features\":\n return;\n default:\n cloned[key] = geojson[key];\n }\n });\n // Add features\n cloned.features = geojson.features.map(function (feature) {\n return cloneFeature(feature);\n });\n return cloned;\n}\n/**\n * Clone Geometry\n *\n * @private\n * @param {Geometry} geometry GeoJSON Geometry\n * @returns {Geometry} cloned Geometry\n */\nfunction cloneGeometry(geometry) {\n var geom = { type: geometry.type };\n if (geometry.bbox) {\n geom.bbox = geometry.bbox;\n }\n if (geometry.type === \"GeometryCollection\") {\n geom.geometries = geometry.geometries.map(function (g) {\n return cloneGeometry(g);\n });\n return geom;\n }\n geom.coordinates = deepSlice(geometry.coordinates);\n return geom;\n}\n/**\n * Deep Slice coordinates\n *\n * @private\n * @param {Coordinates} coords Coordinates\n * @returns {Coordinates} all coordinates sliced\n */\nfunction deepSlice(coords) {\n var cloned = coords;\n if (typeof cloned[0] !== \"object\") {\n return cloned.slice();\n }\n return cloned.map(function (coord) {\n return deepSlice(coord);\n });\n}\nexport default clone;\n","import cleanCoords from '@turf/clean-coords';\nimport clone from '@turf/clone';\nimport { geomEach } from '@turf/meta';\nimport { isObject } from '@turf/helpers';\n\n/*\n (c) 2013, Vladimir Agafonkin\n Simplify.js, a high-performance JS polyline simplification library\n mourner.github.io/simplify-js\n*/\n\n// to suit your point format, run search/replace for '.x' and '.y';\n// for 3D version, see 3d branch (configurability would draw significant performance overhead)\n\n// square distance between 2 points\nfunction getSqDist(p1, p2) {\n var dx = p1.x - p2.x,\n dy = p1.y - p2.y;\n\n return dx * dx + dy * dy;\n}\n\n// square distance from a point to a segment\nfunction getSqSegDist(p, p1, p2) {\n var x = p1.x,\n y = p1.y,\n dx = p2.x - x,\n dy = p2.y - y;\n\n if (dx !== 0 || dy !== 0) {\n var t = ((p.x - x) * dx + (p.y - y) * dy) / (dx * dx + dy * dy);\n\n if (t > 1) {\n x = p2.x;\n y = p2.y;\n } else if (t > 0) {\n x += dx * t;\n y += dy * t;\n }\n }\n\n dx = p.x - x;\n dy = p.y - y;\n\n return dx * dx + dy * dy;\n}\n// rest of the code doesn't care about point format\n\n// basic distance-based simplification\nfunction simplifyRadialDist(points, sqTolerance) {\n var prevPoint = points[0],\n newPoints = [prevPoint],\n point;\n\n for (var i = 1, len = points.length; i < len; i++) {\n point = points[i];\n\n if (getSqDist(point, prevPoint) > sqTolerance) {\n newPoints.push(point);\n prevPoint = point;\n }\n }\n\n if (prevPoint !== point) newPoints.push(point);\n\n return newPoints;\n}\n\nfunction simplifyDPStep(points, first, last, sqTolerance, simplified) {\n var maxSqDist = sqTolerance,\n index;\n\n for (var i = first + 1; i < last; i++) {\n var sqDist = getSqSegDist(points[i], points[first], points[last]);\n\n if (sqDist > maxSqDist) {\n index = i;\n maxSqDist = sqDist;\n }\n }\n\n if (maxSqDist > sqTolerance) {\n if (index - first > 1)\n simplifyDPStep(points, first, index, sqTolerance, simplified);\n simplified.push(points[index]);\n if (last - index > 1)\n simplifyDPStep(points, index, last, sqTolerance, simplified);\n }\n}\n\n// simplification using Ramer-Douglas-Peucker algorithm\nfunction simplifyDouglasPeucker(points, sqTolerance) {\n var last = points.length - 1;\n\n var simplified = [points[0]];\n simplifyDPStep(points, 0, last, sqTolerance, simplified);\n simplified.push(points[last]);\n\n return simplified;\n}\n\n// both algorithms combined for awesome performance\nfunction simplify(points, tolerance, highestQuality) {\n if (points.length <= 2) return points;\n\n var sqTolerance = tolerance !== undefined ? tolerance * tolerance : 1;\n\n points = highestQuality ? points : simplifyRadialDist(points, sqTolerance);\n points = simplifyDouglasPeucker(points, sqTolerance);\n\n return points;\n}\n\n/**\n * Takes a {@link GeoJSON} object and returns a simplified version. Internally uses\n * [simplify-js](http://mourner.github.io/simplify-js/) to perform simplification using the Ramer-Douglas-Peucker algorithm.\n *\n * @name simplify\n * @param {GeoJSON} geojson object to be simplified\n * @param {Object} [options={}] Optional parameters\n * @param {number} [options.tolerance=1] simplification tolerance\n * @param {boolean} [options.highQuality=false] whether or not to spend more time to create a higher-quality simplification with a different algorithm\n * @param {boolean} [options.mutate=false] allows GeoJSON input to be mutated (significant performance increase if true)\n * @returns {GeoJSON} a simplified GeoJSON\n * @example\n * var geojson = turf.polygon([[\n * [-70.603637, -33.399918],\n * [-70.614624, -33.395332],\n * [-70.639343, -33.392466],\n * [-70.659942, -33.394759],\n * [-70.683975, -33.404504],\n * [-70.697021, -33.419406],\n * [-70.701141, -33.434306],\n * [-70.700454, -33.446339],\n * [-70.694274, -33.458369],\n * [-70.682601, -33.465816],\n * [-70.668869, -33.472117],\n * [-70.646209, -33.473835],\n * [-70.624923, -33.472117],\n * [-70.609817, -33.468107],\n * [-70.595397, -33.458369],\n * [-70.587158, -33.442901],\n * [-70.587158, -33.426283],\n * [-70.590591, -33.414248],\n * [-70.594711, -33.406224],\n * [-70.603637, -33.399918]\n * ]]);\n * var options = {tolerance: 0.01, highQuality: false};\n * var simplified = turf.simplify(geojson, options);\n *\n * //addToMap\n * var addToMap = [geojson, simplified]\n */\nfunction simplify$1(geojson, options) {\n // Optional parameters\n options = options || {};\n if (!isObject(options)) throw new Error(\"options is invalid\");\n var tolerance = options.tolerance !== undefined ? options.tolerance : 1;\n var highQuality = options.highQuality || false;\n var mutate = options.mutate || false;\n\n if (!geojson) throw new Error(\"geojson is required\");\n if (tolerance && tolerance < 0) throw new Error(\"invalid tolerance\");\n\n // Clone geojson to avoid side effects\n if (mutate !== true) geojson = clone(geojson);\n\n geomEach(geojson, function (geom) {\n simplifyGeom(geom, tolerance, highQuality);\n });\n return geojson;\n}\n\n/**\n * Simplifies a feature's coordinates\n *\n * @private\n * @param {Geometry} geometry to be simplified\n * @param {number} [tolerance=1] simplification tolerance\n * @param {boolean} [highQuality=false] whether or not to spend more time to create a higher-quality simplification with a different algorithm\n * @returns {Geometry} output\n */\nfunction simplifyGeom(geometry, tolerance, highQuality) {\n var type = geometry.type;\n\n // \"unsimplyfiable\" geometry types\n if (type === \"Point\" || type === \"MultiPoint\") return geometry;\n\n // Remove any extra coordinates\n cleanCoords(geometry, true);\n\n var coordinates = geometry.coordinates;\n switch (type) {\n case \"LineString\":\n geometry[\"coordinates\"] = simplifyLine(\n coordinates,\n tolerance,\n highQuality\n );\n break;\n case \"MultiLineString\":\n geometry[\"coordinates\"] = coordinates.map(function (lines) {\n return simplifyLine(lines, tolerance, highQuality);\n });\n break;\n case \"Polygon\":\n geometry[\"coordinates\"] = simplifyPolygon(\n coordinates,\n tolerance,\n highQuality\n );\n break;\n case \"MultiPolygon\":\n geometry[\"coordinates\"] = coordinates.map(function (rings) {\n return simplifyPolygon(rings, tolerance, highQuality);\n });\n }\n return geometry;\n}\n\n/**\n * Simplifies the coordinates of a LineString with simplify-js\n *\n * @private\n * @param {Array} coordinates to be processed\n * @param {number} tolerance simplification tolerance\n * @param {boolean} highQuality whether or not to spend more time to create a higher-quality\n * @returns {Array>} simplified coords\n */\nfunction simplifyLine(coordinates, tolerance, highQuality) {\n return simplify(\n coordinates.map(function (coord) {\n return { x: coord[0], y: coord[1], z: coord[2] };\n }),\n tolerance,\n highQuality\n ).map(function (coords) {\n return coords.z ? [coords.x, coords.y, coords.z] : [coords.x, coords.y];\n });\n}\n\n/**\n * Simplifies the coordinates of a Polygon with simplify-js\n *\n * @private\n * @param {Array} coordinates to be processed\n * @param {number} tolerance simplification tolerance\n * @param {boolean} highQuality whether or not to spend more time to create a higher-quality\n * @returns {Array>>} simplified coords\n */\nfunction simplifyPolygon(coordinates, tolerance, highQuality) {\n return coordinates.map(function (ring) {\n var pts = ring.map(function (coord) {\n return { x: coord[0], y: coord[1] };\n });\n if (pts.length < 4) {\n throw new Error(\"invalid polygon\");\n }\n var simpleRing = simplify(pts, tolerance, highQuality).map(function (\n coords\n ) {\n return [coords.x, coords.y];\n });\n //remove 1 percent of tolerance until enough points to make a triangle\n while (!checkValidity(simpleRing)) {\n tolerance -= tolerance * 0.01;\n simpleRing = simplify(pts, tolerance, highQuality).map(function (\n coords\n ) {\n return [coords.x, coords.y];\n });\n }\n if (\n simpleRing[simpleRing.length - 1][0] !== simpleRing[0][0] ||\n simpleRing[simpleRing.length - 1][1] !== simpleRing[0][1]\n ) {\n simpleRing.push(simpleRing[0]);\n }\n return simpleRing;\n });\n}\n\n/**\n * Returns true if ring has at least 3 coordinates and its first coordinate is the same as its last\n *\n * @private\n * @param {Array} ring coordinates to be checked\n * @returns {boolean} true if valid\n */\nfunction checkValidity(ring) {\n if (ring.length < 3) return false;\n //if the last point is the same as the first, it's not a triangle\n return !(\n ring.length === 3 &&\n ring[2][0] === ring[0][0] &&\n ring[2][1] === ring[0][1]\n );\n}\n\nexport default simplify$1;\n","/**\n * BezierSpline\n * https://github.com/leszekr/bezier-spline-js\n *\n * @private\n * @copyright\n * Copyright (c) 2013 Leszek Rybicki\n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to deal\n * in the Software without restriction, including without limitation the rights\n * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n * copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in all\n * copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\n * SOFTWARE.\n */\nvar Spline = /** @class */ (function () {\n function Spline(options) {\n this.points = options.points || [];\n this.duration = options.duration || 10000;\n this.sharpness = options.sharpness || 0.85;\n this.centers = [];\n this.controls = [];\n this.stepLength = options.stepLength || 60;\n this.length = this.points.length;\n this.delay = 0;\n // this is to ensure compatibility with the 2d version\n for (var i = 0; i < this.length; i++) {\n this.points[i].z = this.points[i].z || 0;\n }\n for (var i = 0; i < this.length - 1; i++) {\n var p1 = this.points[i];\n var p2 = this.points[i + 1];\n this.centers.push({\n x: (p1.x + p2.x) / 2,\n y: (p1.y + p2.y) / 2,\n z: (p1.z + p2.z) / 2,\n });\n }\n this.controls.push([this.points[0], this.points[0]]);\n for (var i = 0; i < this.centers.length - 1; i++) {\n var dx = this.points[i + 1].x - (this.centers[i].x + this.centers[i + 1].x) / 2;\n var dy = this.points[i + 1].y - (this.centers[i].y + this.centers[i + 1].y) / 2;\n var dz = this.points[i + 1].z - (this.centers[i].y + this.centers[i + 1].z) / 2;\n this.controls.push([\n {\n x: (1.0 - this.sharpness) * this.points[i + 1].x +\n this.sharpness * (this.centers[i].x + dx),\n y: (1.0 - this.sharpness) * this.points[i + 1].y +\n this.sharpness * (this.centers[i].y + dy),\n z: (1.0 - this.sharpness) * this.points[i + 1].z +\n this.sharpness * (this.centers[i].z + dz),\n },\n {\n x: (1.0 - this.sharpness) * this.points[i + 1].x +\n this.sharpness * (this.centers[i + 1].x + dx),\n y: (1.0 - this.sharpness) * this.points[i + 1].y +\n this.sharpness * (this.centers[i + 1].y + dy),\n z: (1.0 - this.sharpness) * this.points[i + 1].z +\n this.sharpness * (this.centers[i + 1].z + dz),\n },\n ]);\n }\n this.controls.push([\n this.points[this.length - 1],\n this.points[this.length - 1],\n ]);\n this.steps = this.cacheSteps(this.stepLength);\n return this;\n }\n /**\n * Caches an array of equidistant (more or less) points on the curve.\n */\n Spline.prototype.cacheSteps = function (mindist) {\n var steps = [];\n var laststep = this.pos(0);\n steps.push(0);\n for (var t = 0; t < this.duration; t += 10) {\n var step = this.pos(t);\n var dist = Math.sqrt((step.x - laststep.x) * (step.x - laststep.x) +\n (step.y - laststep.y) * (step.y - laststep.y) +\n (step.z - laststep.z) * (step.z - laststep.z));\n if (dist > mindist) {\n steps.push(t);\n laststep = step;\n }\n }\n return steps;\n };\n /**\n * returns angle and speed in the given point in the curve\n */\n Spline.prototype.vector = function (t) {\n var p1 = this.pos(t + 10);\n var p2 = this.pos(t - 10);\n return {\n angle: (180 * Math.atan2(p1.y - p2.y, p1.x - p2.x)) / 3.14,\n speed: Math.sqrt((p2.x - p1.x) * (p2.x - p1.x) +\n (p2.y - p1.y) * (p2.y - p1.y) +\n (p2.z - p1.z) * (p2.z - p1.z)),\n };\n };\n /**\n * Gets the position of the point, given time.\n *\n * WARNING: The speed is not constant. The time it takes between control points is constant.\n *\n * For constant speed, use Spline.steps[i];\n */\n Spline.prototype.pos = function (time) {\n var t = time - this.delay;\n if (t < 0) {\n t = 0;\n }\n if (t > this.duration) {\n t = this.duration - 1;\n }\n // t = t-this.delay;\n var t2 = t / this.duration;\n if (t2 >= 1) {\n return this.points[this.length - 1];\n }\n var n = Math.floor((this.points.length - 1) * t2);\n var t1 = (this.length - 1) * t2 - n;\n return bezier(t1, this.points[n], this.controls[n][1], this.controls[n + 1][0], this.points[n + 1]);\n };\n return Spline;\n}());\nexport default Spline;\nfunction bezier(t, p1, c1, c2, p2) {\n var b = B(t);\n var pos = {\n x: p2.x * b[0] + c2.x * b[1] + c1.x * b[2] + p1.x * b[3],\n y: p2.y * b[0] + c2.y * b[1] + c1.y * b[2] + p1.y * b[3],\n z: p2.z * b[0] + c2.z * b[1] + c1.z * b[2] + p1.z * b[3],\n };\n return pos;\n}\nfunction B(t) {\n var t2 = t * t;\n var t3 = t2 * t;\n return [\n t3,\n 3 * t2 * (1 - t),\n 3 * t * (1 - t) * (1 - t),\n (1 - t) * (1 - t) * (1 - t),\n ];\n}\n","import { polygon } from \"@turf/helpers\";\n/**\n * Takes a bbox and returns an equivalent {@link Polygon|polygon}.\n *\n * @name bboxPolygon\n * @param {BBox} bbox extent in [minX, minY, maxX, maxY] order\n * @param {Object} [options={}] Optional parameters\n * @param {Properties} [options.properties={}] Translate properties to Polygon\n * @param {string|number} [options.id={}] Translate Id to Polygon\n * @returns {Feature} a Polygon representation of the bounding box\n * @example\n * var bbox = [0, 0, 10, 10];\n *\n * var poly = turf.bboxPolygon(bbox);\n *\n * //addToMap\n * var addToMap = [poly]\n */\nexport default function bboxPolygon(bbox, options) {\n if (options === void 0) { options = {}; }\n // Convert BBox positions to Numbers\n // No performance loss for including Number()\n // https://github.com/Turfjs/turf/issues/1119\n var west = Number(bbox[0]);\n var south = Number(bbox[1]);\n var east = Number(bbox[2]);\n var north = Number(bbox[3]);\n if (bbox.length === 6) {\n throw new Error(\"@turf/bbox-polygon does not support BBox with 6 positions\");\n }\n var lowLeft = [west, south];\n var topLeft = [west, north];\n var topRight = [east, north];\n var lowRight = [east, south];\n return polygon([[lowLeft, lowRight, topRight, topLeft, lowLeft]], options.properties, { bbox: bbox, id: options.id });\n}\n","import bbox from '@turf/bbox';\nimport bboxPolygon from '@turf/bbox-polygon';\n\n/**\n * Takes any number of features and returns a rectangular {@link Polygon} that encompasses all vertices.\n *\n * @name envelope\n * @param {GeoJSON} geojson input features\n * @returns {Feature} a rectangular Polygon feature that encompasses all vertices\n * @example\n * var features = turf.featureCollection([\n * turf.point([-75.343, 39.984], {\"name\": \"Location A\"}),\n * turf.point([-75.833, 39.284], {\"name\": \"Location B\"}),\n * turf.point([-75.534, 39.123], {\"name\": \"Location C\"})\n * ]);\n *\n * var enveloped = turf.envelope(features);\n *\n * //addToMap\n * var addToMap = [features, enveloped];\n */\nfunction envelope(geojson) {\n return bboxPolygon(bbox(geojson));\n}\n\nexport default envelope;\n","// http://en.wikipedia.org/wiki/Haversine_formula\n// http://www.movable-type.co.uk/scripts/latlong.html\nimport { degreesToRadians, lengthToRadians, point, radiansToDegrees, } from \"@turf/helpers\";\nimport { getCoord } from \"@turf/invariant\";\n/**\n * Takes a {@link Point} and calculates the location of a destination point given a distance in\n * degrees, radians, miles, or kilometers; and bearing in degrees.\n * This uses the [Haversine formula](http://en.wikipedia.org/wiki/Haversine_formula) to account for global curvature.\n *\n * @name destination\n * @param {Coord} origin starting point\n * @param {number} distance distance from the origin point\n * @param {number} bearing ranging from -180 to 180\n * @param {Object} [options={}] Optional parameters\n * @param {string} [options.units='kilometers'] miles, kilometers, degrees, or radians\n * @param {Object} [options.properties={}] Translate properties to Point\n * @returns {Feature} destination point\n * @example\n * var point = turf.point([-75.343, 39.984]);\n * var distance = 50;\n * var bearing = 90;\n * var options = {units: 'miles'};\n *\n * var destination = turf.destination(point, distance, bearing, options);\n *\n * //addToMap\n * var addToMap = [point, destination]\n * destination.properties['marker-color'] = '#f00';\n * point.properties['marker-color'] = '#0f0';\n */\nexport default function destination(origin, distance, bearing, options) {\n if (options === void 0) { options = {}; }\n // Handle input\n var coordinates1 = getCoord(origin);\n var longitude1 = degreesToRadians(coordinates1[0]);\n var latitude1 = degreesToRadians(coordinates1[1]);\n var bearingRad = degreesToRadians(bearing);\n var radians = lengthToRadians(distance, options.units);\n // Main\n var latitude2 = Math.asin(Math.sin(latitude1) * Math.cos(radians) +\n Math.cos(latitude1) * Math.sin(radians) * Math.cos(bearingRad));\n var longitude2 = longitude1 +\n Math.atan2(Math.sin(bearingRad) * Math.sin(radians) * Math.cos(latitude1), Math.cos(radians) - Math.sin(latitude1) * Math.sin(latitude2));\n var lng = radiansToDegrees(longitude2);\n var lat = radiansToDegrees(latitude2);\n return point([lng, lat], options.properties);\n}\n","import { degreesToRadians, radiansToDegrees } from \"@turf/helpers\";\nimport { getCoord } from \"@turf/invariant\";\n// http://en.wikipedia.org/wiki/Haversine_formula\n// http://www.movable-type.co.uk/scripts/latlong.html\n/**\n * Takes two {@link Point|points} and finds the geographic bearing between them,\n * i.e. the angle measured in degrees from the north line (0 degrees)\n *\n * @name bearing\n * @param {Coord} start starting Point\n * @param {Coord} end ending Point\n * @param {Object} [options={}] Optional parameters\n * @param {boolean} [options.final=false] calculates the final bearing if true\n * @returns {number} bearing in decimal degrees, between -180 and 180 degrees (positive clockwise)\n * @example\n * var point1 = turf.point([-75.343, 39.984]);\n * var point2 = turf.point([-75.534, 39.123]);\n *\n * var bearing = turf.bearing(point1, point2);\n *\n * //addToMap\n * var addToMap = [point1, point2]\n * point1.properties['marker-color'] = '#f00'\n * point2.properties['marker-color'] = '#0f0'\n * point1.properties.bearing = bearing\n */\nexport default function bearing(start, end, options) {\n if (options === void 0) { options = {}; }\n // Reverse calculation\n if (options.final === true) {\n return calculateFinalBearing(start, end);\n }\n var coordinates1 = getCoord(start);\n var coordinates2 = getCoord(end);\n var lon1 = degreesToRadians(coordinates1[0]);\n var lon2 = degreesToRadians(coordinates2[0]);\n var lat1 = degreesToRadians(coordinates1[1]);\n var lat2 = degreesToRadians(coordinates2[1]);\n var a = Math.sin(lon2 - lon1) * Math.cos(lat2);\n var b = Math.cos(lat1) * Math.sin(lat2) -\n Math.sin(lat1) * Math.cos(lat2) * Math.cos(lon2 - lon1);\n return radiansToDegrees(Math.atan2(a, b));\n}\n/**\n * Calculates Final Bearing\n *\n * @private\n * @param {Coord} start starting Point\n * @param {Coord} end ending Point\n * @returns {number} bearing\n */\nfunction calculateFinalBearing(start, end) {\n // Swap start & end\n var bear = bearing(end, start);\n bear = (bear + 180) % 360;\n return bear;\n}\n","import { featureCollection, lineString, } from \"@turf/helpers\";\nimport { getCoords } from \"@turf/invariant\";\nimport { flattenEach } from \"@turf/meta\";\n/**\n * Creates a {@link FeatureCollection} of 2-vertex {@link LineString} segments from a\n * {@link LineString|(Multi)LineString} or {@link Polygon|(Multi)Polygon}.\n *\n * @name lineSegment\n * @param {GeoJSON} geojson GeoJSON Polygon or LineString\n * @returns {FeatureCollection} 2-vertex line segments\n * @example\n * var polygon = turf.polygon([[[-50, 5], [-40, -10], [-50, -10], [-40, 5], [-50, 5]]]);\n * var segments = turf.lineSegment(polygon);\n *\n * //addToMap\n * var addToMap = [polygon, segments]\n */\nfunction lineSegment(geojson) {\n if (!geojson) {\n throw new Error(\"geojson is required\");\n }\n var results = [];\n flattenEach(geojson, function (feature) {\n lineSegmentFeature(feature, results);\n });\n return featureCollection(results);\n}\n/**\n * Line Segment\n *\n * @private\n * @param {Feature} geojson Line or polygon feature\n * @param {Array} results push to results\n * @returns {void}\n */\nfunction lineSegmentFeature(geojson, results) {\n var coords = [];\n var geometry = geojson.geometry;\n if (geometry !== null) {\n switch (geometry.type) {\n case \"Polygon\":\n coords = getCoords(geometry);\n break;\n case \"LineString\":\n coords = [getCoords(geometry)];\n }\n coords.forEach(function (coord) {\n var segments = createSegments(coord, geojson.properties);\n segments.forEach(function (segment) {\n segment.id = results.length;\n results.push(segment);\n });\n });\n }\n}\n/**\n * Create Segments from LineString coordinates\n *\n * @private\n * @param {Array>} coords LineString coordinates\n * @param {*} properties GeoJSON properties\n * @returns {Array>} line segments\n */\nfunction createSegments(coords, properties) {\n var segments = [];\n coords.reduce(function (previousCoords, currentCoords) {\n var segment = lineString([previousCoords, currentCoords], properties);\n segment.bbox = bbox(previousCoords, currentCoords);\n segments.push(segment);\n return currentCoords;\n });\n return segments;\n}\n/**\n * Create BBox between two coordinates (faster than @turf/bbox)\n *\n * @private\n * @param {Array} coords1 Point coordinate\n * @param {Array} coords2 Point coordinate\n * @returns {BBox} [west, south, east, north]\n */\nfunction bbox(coords1, coords2) {\n var x1 = coords1[0];\n var y1 = coords1[1];\n var x2 = coords2[0];\n var y2 = coords2[1];\n var west = x1 < x2 ? x1 : x2;\n var south = y1 < y2 ? y1 : y2;\n var east = x1 > x2 ? x1 : x2;\n var north = y1 > y2 ? y1 : y2;\n return [west, south, east, north];\n}\nexport default lineSegment;\n","import { feature, featureCollection, point, } from \"@turf/helpers\";\nimport { getCoords } from \"@turf/invariant\";\nimport lineSegment from \"@turf/line-segment\";\nimport { featureEach } from \"@turf/meta\";\nimport rbush from \"geojson-rbush\";\n/**\n * Takes any LineString or Polygon GeoJSON and returns the intersecting point(s).\n *\n * @name lineIntersect\n * @param {GeoJSON} line1 any LineString or Polygon\n * @param {GeoJSON} line2 any LineString or Polygon\n * @returns {FeatureCollection} point(s) that intersect both\n * @example\n * var line1 = turf.lineString([[126, -11], [129, -21]]);\n * var line2 = turf.lineString([[123, -18], [131, -14]]);\n * var intersects = turf.lineIntersect(line1, line2);\n *\n * //addToMap\n * var addToMap = [line1, line2, intersects]\n */\nfunction lineIntersect(line1, line2) {\n var unique = {};\n var results = [];\n // First, normalize geometries to features\n // Then, handle simple 2-vertex segments\n if (line1.type === \"LineString\") {\n line1 = feature(line1);\n }\n if (line2.type === \"LineString\") {\n line2 = feature(line2);\n }\n if (line1.type === \"Feature\" &&\n line2.type === \"Feature\" &&\n line1.geometry !== null &&\n line2.geometry !== null &&\n line1.geometry.type === \"LineString\" &&\n line2.geometry.type === \"LineString\" &&\n line1.geometry.coordinates.length === 2 &&\n line2.geometry.coordinates.length === 2) {\n var intersect = intersects(line1, line2);\n if (intersect) {\n results.push(intersect);\n }\n return featureCollection(results);\n }\n // Handles complex GeoJSON Geometries\n var tree = rbush();\n tree.load(lineSegment(line2));\n featureEach(lineSegment(line1), function (segment) {\n featureEach(tree.search(segment), function (match) {\n var intersect = intersects(segment, match);\n if (intersect) {\n // prevent duplicate points https://github.com/Turfjs/turf/issues/688\n var key = getCoords(intersect).join(\",\");\n if (!unique[key]) {\n unique[key] = true;\n results.push(intersect);\n }\n }\n });\n });\n return featureCollection(results);\n}\n/**\n * Find a point that intersects LineStrings with two coordinates each\n *\n * @private\n * @param {Feature} line1 GeoJSON LineString (Must only contain 2 coordinates)\n * @param {Feature} line2 GeoJSON LineString (Must only contain 2 coordinates)\n * @returns {Feature} intersecting GeoJSON Point\n */\nfunction intersects(line1, line2) {\n var coords1 = getCoords(line1);\n var coords2 = getCoords(line2);\n if (coords1.length !== 2) {\n throw new Error(\" line1 must only contain 2 coordinates\");\n }\n if (coords2.length !== 2) {\n throw new Error(\" line2 must only contain 2 coordinates\");\n }\n var x1 = coords1[0][0];\n var y1 = coords1[0][1];\n var x2 = coords1[1][0];\n var y2 = coords1[1][1];\n var x3 = coords2[0][0];\n var y3 = coords2[0][1];\n var x4 = coords2[1][0];\n var y4 = coords2[1][1];\n var denom = (y4 - y3) * (x2 - x1) - (x4 - x3) * (y2 - y1);\n var numeA = (x4 - x3) * (y1 - y3) - (y4 - y3) * (x1 - x3);\n var numeB = (x2 - x1) * (y1 - y3) - (y2 - y1) * (x1 - x3);\n if (denom === 0) {\n if (numeA === 0 && numeB === 0) {\n return null;\n }\n return null;\n }\n var uA = numeA / denom;\n var uB = numeB / denom;\n if (uA >= 0 && uA <= 1 && uB >= 0 && uB <= 1) {\n var x = x1 + uA * (x2 - x1);\n var y = y1 + uA * (y2 - y1);\n return point([x, y]);\n }\n return null;\n}\nexport default lineIntersect;\n","import bearing from \"@turf/bearing\";\nimport distance from \"@turf/distance\";\nimport destination from \"@turf/destination\";\nimport lineIntersects from \"@turf/line-intersect\";\nimport { flattenEach } from \"@turf/meta\";\nimport { point, lineString, } from \"@turf/helpers\";\nimport { getCoords } from \"@turf/invariant\";\n/**\n * Takes a {@link Point} and a {@link LineString} and calculates the closest Point on the (Multi)LineString.\n *\n * @name nearestPointOnLine\n * @param {Geometry|Feature} lines lines to snap to\n * @param {Geometry|Feature|number[]} pt point to snap from\n * @param {Object} [options={}] Optional parameters\n * @param {string} [options.units='kilometers'] can be degrees, radians, miles, or kilometers\n * @returns {Feature} closest point on the `line` to `point`. The properties object will contain three values: `index`: closest point was found on nth line part, `dist`: distance between pt and the closest point, `location`: distance along the line between start and the closest point.\n * @example\n * var line = turf.lineString([\n * [-77.031669, 38.878605],\n * [-77.029609, 38.881946],\n * [-77.020339, 38.884084],\n * [-77.025661, 38.885821],\n * [-77.021884, 38.889563],\n * [-77.019824, 38.892368]\n * ]);\n * var pt = turf.point([-77.037076, 38.884017]);\n *\n * var snapped = turf.nearestPointOnLine(line, pt, {units: 'miles'});\n *\n * //addToMap\n * var addToMap = [line, pt, snapped];\n * snapped.properties['marker-color'] = '#00f';\n */\nfunction nearestPointOnLine(lines, pt, options) {\n if (options === void 0) { options = {}; }\n var closestPt = point([Infinity, Infinity], {\n dist: Infinity,\n });\n var length = 0.0;\n flattenEach(lines, function (line) {\n var coords = getCoords(line);\n for (var i = 0; i < coords.length - 1; i++) {\n //start\n var start = point(coords[i]);\n start.properties.dist = distance(pt, start, options);\n //stop\n var stop_1 = point(coords[i + 1]);\n stop_1.properties.dist = distance(pt, stop_1, options);\n // sectionLength\n var sectionLength = distance(start, stop_1, options);\n //perpendicular\n var heightDistance = Math.max(start.properties.dist, stop_1.properties.dist);\n var direction = bearing(start, stop_1);\n var perpendicularPt1 = destination(pt, heightDistance, direction + 90, options);\n var perpendicularPt2 = destination(pt, heightDistance, direction - 90, options);\n var intersect = lineIntersects(lineString([\n perpendicularPt1.geometry.coordinates,\n perpendicularPt2.geometry.coordinates,\n ]), lineString([start.geometry.coordinates, stop_1.geometry.coordinates]));\n var intersectPt = null;\n if (intersect.features.length > 0) {\n intersectPt = intersect.features[0];\n intersectPt.properties.dist = distance(pt, intersectPt, options);\n intersectPt.properties.location =\n length + distance(start, intersectPt, options);\n }\n if (start.properties.dist < closestPt.properties.dist) {\n closestPt = start;\n closestPt.properties.index = i;\n closestPt.properties.location = length;\n }\n if (stop_1.properties.dist < closestPt.properties.dist) {\n closestPt = stop_1;\n closestPt.properties.index = i + 1;\n closestPt.properties.location = length + sectionLength;\n }\n if (intersectPt &&\n intersectPt.properties.dist < closestPt.properties.dist) {\n closestPt = intersectPt;\n closestPt.properties.index = i;\n }\n // update length\n length += sectionLength;\n }\n });\n return closestPt;\n}\nexport default nearestPointOnLine;\n","// https://en.wikipedia.org/wiki/Rhumb_line\nimport { convertLength, earthRadius } from \"@turf/helpers\";\nimport { getCoord } from \"@turf/invariant\";\n/**\n * Calculates the distance along a rhumb line between two {@link Point|points} in degrees, radians,\n * miles, or kilometers.\n *\n * @name rhumbDistance\n * @param {Coord} from origin point\n * @param {Coord} to destination point\n * @param {Object} [options] Optional parameters\n * @param {string} [options.units=\"kilometers\"] can be degrees, radians, miles, or kilometers\n * @returns {number} distance between the two points\n * @example\n * var from = turf.point([-75.343, 39.984]);\n * var to = turf.point([-75.534, 39.123]);\n * var options = {units: 'miles'};\n *\n * var distance = turf.rhumbDistance(from, to, options);\n *\n * //addToMap\n * var addToMap = [from, to];\n * from.properties.distance = distance;\n * to.properties.distance = distance;\n */\nfunction rhumbDistance(from, to, options) {\n if (options === void 0) { options = {}; }\n var origin = getCoord(from);\n var destination = getCoord(to);\n // compensate the crossing of the 180th meridian (https://macwright.org/2016/09/26/the-180th-meridian.html)\n // solution from https://github.com/mapbox/mapbox-gl-js/issues/3250#issuecomment-294887678\n destination[0] +=\n destination[0] - origin[0] > 180\n ? -360\n : origin[0] - destination[0] > 180\n ? 360\n : 0;\n var distanceInMeters = calculateRhumbDistance(origin, destination);\n var distance = convertLength(distanceInMeters, \"meters\", options.units);\n return distance;\n}\n/**\n * Returns the distance travelling from ‘this’ point to destination point along a rhumb line.\n * Adapted from Geodesy: https://github.com/chrisveness/geodesy/blob/master/latlon-spherical.js\n *\n * @private\n * @param {Array} origin point.\n * @param {Array} destination point.\n * @param {number} [radius=6371e3] - (Mean) radius of earth (defaults to radius in metres).\n * @returns {number} Distance in km between this point and destination point (same units as radius).\n *\n * @example\n * var p1 = new LatLon(51.127, 1.338);\n * var p2 = new LatLon(50.964, 1.853);\n * var d = p1.distanceTo(p2); // 40.31 km\n */\nfunction calculateRhumbDistance(origin, destination, radius) {\n // φ => phi\n // λ => lambda\n // ψ => psi\n // Δ => Delta\n // δ => delta\n // θ => theta\n radius = radius === undefined ? earthRadius : Number(radius);\n // see www.edwilliams.org/avform.htm#Rhumb\n var R = radius;\n var phi1 = (origin[1] * Math.PI) / 180;\n var phi2 = (destination[1] * Math.PI) / 180;\n var DeltaPhi = phi2 - phi1;\n var DeltaLambda = (Math.abs(destination[0] - origin[0]) * Math.PI) / 180;\n // if dLon over 180° take shorter rhumb line across the anti-meridian:\n if (DeltaLambda > Math.PI) {\n DeltaLambda -= 2 * Math.PI;\n }\n // on Mercator projection, longitude distances shrink by latitude; q is the 'stretch factor'\n // q becomes ill-conditioned along E-W line (0/0); use empirical tolerance to avoid it\n var DeltaPsi = Math.log(Math.tan(phi2 / 2 + Math.PI / 4) / Math.tan(phi1 / 2 + Math.PI / 4));\n var q = Math.abs(DeltaPsi) > 10e-12 ? DeltaPhi / DeltaPsi : Math.cos(phi1);\n // distance is pythagoras on 'stretched' Mercator projection\n var delta = Math.sqrt(DeltaPhi * DeltaPhi + q * q * DeltaLambda * DeltaLambda); // angular distance in radians\n var dist = delta * R;\n return dist;\n}\nexport default rhumbDistance;\n","// Taken from http://geomalgorithms.com/a02-_lines.html\nimport getDistance from \"@turf/distance\";\nimport { convertLength, feature, lineString, point, } from \"@turf/helpers\";\nimport { featureOf } from \"@turf/invariant\";\nimport { segmentEach } from \"@turf/meta\";\nimport getPlanarDistance from \"@turf/rhumb-distance\";\n/**\n * Returns the minimum distance between a {@link Point} and a {@link LineString}, being the distance from a line the\n * minimum distance between the point and any segment of the `LineString`.\n *\n * @name pointToLineDistance\n * @param {Feature|Array} pt Feature or Geometry\n * @param {Feature} line GeoJSON Feature or Geometry\n * @param {Object} [options={}] Optional parameters\n * @param {string} [options.units=\"kilometers\"] can be anything supported by turf/convertLength\n * (ex: degrees, radians, miles, or kilometers)\n * @param {string} [options.method=\"geodesic\"] wether to calculate the distance based on geodesic (spheroid) or\n * planar (flat) method. Valid options are 'geodesic' or 'planar'.\n * @returns {number} distance between point and line\n * @example\n * var pt = turf.point([0, 0]);\n * var line = turf.lineString([[1, 1],[-1, 1]]);\n *\n * var distance = turf.pointToLineDistance(pt, line, {units: 'miles'});\n * //=69.11854715938406\n */\nfunction pointToLineDistance(pt, line, options) {\n if (options === void 0) { options = {}; }\n // Optional parameters\n if (!options.method) {\n options.method = \"geodesic\";\n }\n if (!options.units) {\n options.units = \"kilometers\";\n }\n // validation\n if (!pt) {\n throw new Error(\"pt is required\");\n }\n if (Array.isArray(pt)) {\n pt = point(pt);\n }\n else if (pt.type === \"Point\") {\n pt = feature(pt);\n }\n else {\n featureOf(pt, \"Point\", \"point\");\n }\n if (!line) {\n throw new Error(\"line is required\");\n }\n if (Array.isArray(line)) {\n line = lineString(line);\n }\n else if (line.type === \"LineString\") {\n line = feature(line);\n }\n else {\n featureOf(line, \"LineString\", \"line\");\n }\n var distance = Infinity;\n var p = pt.geometry.coordinates;\n segmentEach(line, function (segment) {\n var a = segment.geometry.coordinates[0];\n var b = segment.geometry.coordinates[1];\n var d = distanceToSegment(p, a, b, options);\n if (d < distance) {\n distance = d;\n }\n });\n return convertLength(distance, \"degrees\", options.units);\n}\n/**\n * Returns the distance between a point P on a segment AB.\n *\n * @private\n * @param {Array} p external point\n * @param {Array} a first segment point\n * @param {Array} b second segment point\n * @param {Object} [options={}] Optional parameters\n * @returns {number} distance\n */\nfunction distanceToSegment(p, a, b, options) {\n var v = [b[0] - a[0], b[1] - a[1]];\n var w = [p[0] - a[0], p[1] - a[1]];\n var c1 = dot(w, v);\n if (c1 <= 0) {\n return calcDistance(p, a, { method: options.method, units: \"degrees\" });\n }\n var c2 = dot(v, v);\n if (c2 <= c1) {\n return calcDistance(p, b, { method: options.method, units: \"degrees\" });\n }\n var b2 = c1 / c2;\n var Pb = [a[0] + b2 * v[0], a[1] + b2 * v[1]];\n return calcDistance(p, Pb, { method: options.method, units: \"degrees\" });\n}\nfunction dot(u, v) {\n return u[0] * v[0] + u[1] * v[1];\n}\nfunction calcDistance(a, b, options) {\n return options.method === \"planar\"\n ? getPlanarDistance(a, b, options)\n : getDistance(a, b, options);\n}\nexport default pointToLineDistance;\n","import bearing from \"@turf/bearing\";\nimport destination from \"@turf/destination\";\nimport measureDistance from \"@turf/distance\";\nimport { point } from \"@turf/helpers\";\nimport { getGeom } from \"@turf/invariant\";\n/**\n * Takes a {@link LineString} and returns a {@link Point} at a specified distance along the line.\n *\n * @name along\n * @param {Feature} line input line\n * @param {number} distance distance along the line\n * @param {Object} [options] Optional parameters\n * @param {string} [options.units=\"kilometers\"] can be degrees, radians, miles, or kilometers\n * @returns {Feature} Point `distance` `units` along the line\n * @example\n * var line = turf.lineString([[-83, 30], [-84, 36], [-78, 41]]);\n * var options = {units: 'miles'};\n *\n * var along = turf.along(line, 200, options);\n *\n * //addToMap\n * var addToMap = [along, line]\n */\nexport default function along(line, distance, options) {\n if (options === void 0) { options = {}; }\n // Get Coords\n var geom = getGeom(line);\n var coords = geom.coordinates;\n var travelled = 0;\n for (var i = 0; i < coords.length; i++) {\n if (distance >= travelled && i === coords.length - 1) {\n break;\n }\n else if (travelled >= distance) {\n var overshot = distance - travelled;\n if (!overshot) {\n return point(coords[i]);\n }\n else {\n var direction = bearing(coords[i], coords[i - 1]) - 180;\n var interpolated = destination(coords[i], overshot, direction, options);\n return interpolated;\n }\n }\n else {\n travelled += measureDistance(coords[i], coords[i + 1], options);\n }\n }\n return point(coords[coords.length - 1]);\n}\n","import distance from \"@turf/distance\";\nimport { segmentReduce } from \"@turf/meta\";\n/**\n * Takes a {@link GeoJSON} and measures its length in the specified units, {@link (Multi)Point}'s distance are ignored.\n *\n * @name length\n * @param {Feature} geojson GeoJSON to measure\n * @param {Object} [options={}] Optional parameters\n * @param {string} [options.units=kilometers] can be degrees, radians, miles, or kilometers\n * @returns {number} length of GeoJSON\n * @example\n * var line = turf.lineString([[115, -32], [131, -22], [143, -25], [150, -34]]);\n * var length = turf.length(line, {units: 'miles'});\n *\n * //addToMap\n * var addToMap = [line];\n * line.properties.distance = length;\n */\nexport default function length(geojson, options) {\n if (options === void 0) { options = {}; }\n // Calculate distance from 2-vertex line segments\n return segmentReduce(geojson, function (previousValue, segment) {\n var coords = segment.geometry.coordinates;\n return previousValue + distance(coords[0], coords[1], options);\n }, 0);\n}\n","import { getCoords, getType } from '@turf/invariant';\nimport { lineString } from '@turf/helpers';\nimport nearestPointOnLine from '@turf/nearest-point-on-line';\n\n/**\n * Takes a {@link LineString|line}, a start {@link Point}, and a stop point\n * and returns a subsection of the line in-between those points.\n * The start & stop points don't need to fall exactly on the line.\n *\n * This can be useful for extracting only the part of a route between waypoints.\n *\n * @name lineSlice\n * @param {Coord} startPt starting point\n * @param {Coord} stopPt stopping point\n * @param {Feature|LineString} line line to slice\n * @returns {Feature} sliced line\n * @example\n * var line = turf.lineString([\n * [-77.031669, 38.878605],\n * [-77.029609, 38.881946],\n * [-77.020339, 38.884084],\n * [-77.025661, 38.885821],\n * [-77.021884, 38.889563],\n * [-77.019824, 38.892368]\n * ]);\n * var start = turf.point([-77.029609, 38.881946]);\n * var stop = turf.point([-77.021884, 38.889563]);\n *\n * var sliced = turf.lineSlice(start, stop, line);\n *\n * //addToMap\n * var addToMap = [start, stop, line]\n */\nfunction lineSlice(startPt, stopPt, line) {\n // Validation\n var coords = getCoords(line);\n if (getType(line) !== \"LineString\")\n throw new Error(\"line must be a LineString\");\n\n var startVertex = nearestPointOnLine(line, startPt);\n var stopVertex = nearestPointOnLine(line, stopPt);\n var ends;\n if (startVertex.properties.index <= stopVertex.properties.index) {\n ends = [startVertex, stopVertex];\n } else {\n ends = [stopVertex, startVertex];\n }\n var clipCoords = [ends[0].geometry.coordinates];\n for (\n var i = ends[0].properties.index + 1;\n i < ends[1].properties.index + 1;\n i++\n ) {\n clipCoords.push(coords[i]);\n }\n clipCoords.push(ends[1].geometry.coordinates);\n return lineString(clipCoords, line.properties);\n}\n\nexport default lineSlice;\n","import { getCoord, getCoords } from \"@turf/invariant\";\n/**\n * Returns true if a point is on a line. Accepts a optional parameter to ignore the\n * start and end vertices of the linestring.\n *\n * @name booleanPointOnLine\n * @param {Coord} pt GeoJSON Point\n * @param {Feature} line GeoJSON LineString\n * @param {Object} [options={}] Optional parameters\n * @param {boolean} [options.ignoreEndVertices=false] whether to ignore the start and end vertices.\n * @param {number} [options.epsilon] Fractional number to compare with the cross product result. Useful for dealing with floating points such as lng/lat points\n * @returns {boolean} true/false\n * @example\n * var pt = turf.point([0, 0]);\n * var line = turf.lineString([[-1, -1],[1, 1],[1.5, 2.2]]);\n * var isPointOnLine = turf.booleanPointOnLine(pt, line);\n * //=true\n */\nfunction booleanPointOnLine(pt, line, options) {\n if (options === void 0) { options = {}; }\n // Normalize inputs\n var ptCoords = getCoord(pt);\n var lineCoords = getCoords(line);\n // Main\n for (var i = 0; i < lineCoords.length - 1; i++) {\n var ignoreBoundary = false;\n if (options.ignoreEndVertices) {\n if (i === 0) {\n ignoreBoundary = \"start\";\n }\n if (i === lineCoords.length - 2) {\n ignoreBoundary = \"end\";\n }\n if (i === 0 && i + 1 === lineCoords.length - 1) {\n ignoreBoundary = \"both\";\n }\n }\n if (isPointOnLineSegment(lineCoords[i], lineCoords[i + 1], ptCoords, ignoreBoundary, typeof options.epsilon === \"undefined\" ? null : options.epsilon)) {\n return true;\n }\n }\n return false;\n}\n// See http://stackoverflow.com/a/4833823/1979085\n// See https://stackoverflow.com/a/328122/1048847\n/**\n * @private\n * @param {Position} lineSegmentStart coord pair of start of line\n * @param {Position} lineSegmentEnd coord pair of end of line\n * @param {Position} pt coord pair of point to check\n * @param {boolean|string} excludeBoundary whether the point is allowed to fall on the line ends.\n * @param {number} epsilon Fractional number to compare with the cross product result. Useful for dealing with floating points such as lng/lat points\n * If true which end to ignore.\n * @returns {boolean} true/false\n */\nfunction isPointOnLineSegment(lineSegmentStart, lineSegmentEnd, pt, excludeBoundary, epsilon) {\n var x = pt[0];\n var y = pt[1];\n var x1 = lineSegmentStart[0];\n var y1 = lineSegmentStart[1];\n var x2 = lineSegmentEnd[0];\n var y2 = lineSegmentEnd[1];\n var dxc = pt[0] - x1;\n var dyc = pt[1] - y1;\n var dxl = x2 - x1;\n var dyl = y2 - y1;\n var cross = dxc * dyl - dyc * dxl;\n if (epsilon !== null) {\n if (Math.abs(cross) > epsilon) {\n return false;\n }\n }\n else if (cross !== 0) {\n return false;\n }\n if (!excludeBoundary) {\n if (Math.abs(dxl) >= Math.abs(dyl)) {\n return dxl > 0 ? x1 <= x && x <= x2 : x2 <= x && x <= x1;\n }\n return dyl > 0 ? y1 <= y && y <= y2 : y2 <= y && y <= y1;\n }\n else if (excludeBoundary === \"start\") {\n if (Math.abs(dxl) >= Math.abs(dyl)) {\n return dxl > 0 ? x1 < x && x <= x2 : x2 <= x && x < x1;\n }\n return dyl > 0 ? y1 < y && y <= y2 : y2 <= y && y < y1;\n }\n else if (excludeBoundary === \"end\") {\n if (Math.abs(dxl) >= Math.abs(dyl)) {\n return dxl > 0 ? x1 <= x && x < x2 : x2 < x && x <= x1;\n }\n return dyl > 0 ? y1 <= y && y < y2 : y2 < y && y <= y1;\n }\n else if (excludeBoundary === \"both\") {\n if (Math.abs(dxl) >= Math.abs(dyl)) {\n return dxl > 0 ? x1 < x && x < x2 : x2 < x && x < x1;\n }\n return dyl > 0 ? y1 < y && y < y2 : y2 < y && y < y1;\n }\n return false;\n}\nexport default booleanPointOnLine;\n","import { flattenEach, featureEach } from '@turf/meta';\nimport { polygon, featureCollection } from '@turf/helpers';\nimport rbush from 'rbush';\nimport area from '@turf/area';\nimport booleanPointInPolygon from '@turf/boolean-point-in-polygon';\n\n// Find self-intersections in geojson polygon (possibly with interior rings)\n\nfunction isects (feature, filterFn, useSpatialIndex) {\n if (feature.geometry.type !== \"Polygon\")\n throw new Error(\"The input feature must be a Polygon\");\n if (useSpatialIndex === undefined) useSpatialIndex = 1;\n\n var coord = feature.geometry.coordinates;\n\n var output = [];\n var seen = {};\n\n if (useSpatialIndex) {\n var allEdgesAsRbushTreeItems = [];\n for (var ring0 = 0; ring0 < coord.length; ring0++) {\n for (var edge0 = 0; edge0 < coord[ring0].length - 1; edge0++) {\n allEdgesAsRbushTreeItems.push(rbushTreeItem(ring0, edge0));\n }\n }\n var tree = rbush();\n tree.load(allEdgesAsRbushTreeItems);\n }\n\n for (var ringA = 0; ringA < coord.length; ringA++) {\n for (var edgeA = 0; edgeA < coord[ringA].length - 1; edgeA++) {\n if (useSpatialIndex) {\n var bboxOverlaps = tree.search(rbushTreeItem(ringA, edgeA));\n bboxOverlaps.forEach(function (bboxIsect) {\n var ring1 = bboxIsect.ring;\n var edge1 = bboxIsect.edge;\n ifIsectAddToOutput(ringA, edgeA, ring1, edge1);\n });\n } else {\n for (var ring1 = 0; ring1 < coord.length; ring1++) {\n for (var edge1 = 0; edge1 < coord[ring1].length - 1; edge1++) {\n // TODO: speedup possible if only interested in unique: start last two loops at ringA and edgeA+1\n ifIsectAddToOutput(ringA, edgeA, ring1, edge1);\n }\n }\n }\n }\n }\n\n if (!filterFn)\n output = {\n type: \"Feature\",\n geometry: { type: \"MultiPoint\", coordinates: output },\n };\n return output;\n\n // Function to check if two edges intersect and add the intersection to the output\n function ifIsectAddToOutput(ring0, edge0, ring1, edge1) {\n var start0 = coord[ring0][edge0];\n var end0 = coord[ring0][edge0 + 1];\n var start1 = coord[ring1][edge1];\n var end1 = coord[ring1][edge1 + 1];\n\n var isect = intersect(start0, end0, start1, end1);\n\n if (isect === null) return; // discard parallels and coincidence\n var frac0;\n var frac1;\n if (end0[0] !== start0[0]) {\n frac0 = (isect[0] - start0[0]) / (end0[0] - start0[0]);\n } else {\n frac0 = (isect[1] - start0[1]) / (end0[1] - start0[1]);\n }\n if (end1[0] !== start1[0]) {\n frac1 = (isect[0] - start1[0]) / (end1[0] - start1[0]);\n } else {\n frac1 = (isect[1] - start1[1]) / (end1[1] - start1[1]);\n }\n if (frac0 >= 1 || frac0 <= 0 || frac1 >= 1 || frac1 <= 0) return; // require segment intersection\n\n var key = isect;\n var unique = !seen[key];\n if (unique) {\n seen[key] = true;\n }\n\n if (filterFn) {\n output.push(\n filterFn(\n isect,\n ring0,\n edge0,\n start0,\n end0,\n frac0,\n ring1,\n edge1,\n start1,\n end1,\n frac1,\n unique\n )\n );\n } else {\n output.push(isect);\n }\n }\n\n // Function to return a rbush tree item given an ring and edge number\n function rbushTreeItem(ring, edge) {\n var start = coord[ring][edge];\n var end = coord[ring][edge + 1];\n var minX;\n var maxX;\n var minY;\n var maxY;\n if (start[0] < end[0]) {\n minX = start[0];\n maxX = end[0];\n } else {\n minX = end[0];\n maxX = start[0];\n }\n if (start[1] < end[1]) {\n minY = start[1];\n maxY = end[1];\n } else {\n minY = end[1];\n maxY = start[1];\n }\n return {\n minX: minX,\n minY: minY,\n maxX: maxX,\n maxY: maxY,\n ring: ring,\n edge: edge,\n };\n }\n}\n\n// Function to compute where two lines (not segments) intersect. From https://en.wikipedia.org/wiki/Line%E2%80%93line_intersection\nfunction intersect(start0, end0, start1, end1) {\n if (\n equalArrays(start0, start1) ||\n equalArrays(start0, end1) ||\n equalArrays(end0, start1) ||\n equalArrays(end1, start1)\n )\n return null;\n var x0 = start0[0],\n y0 = start0[1],\n x1 = end0[0],\n y1 = end0[1],\n x2 = start1[0],\n y2 = start1[1],\n x3 = end1[0],\n y3 = end1[1];\n var denom = (x0 - x1) * (y2 - y3) - (y0 - y1) * (x2 - x3);\n if (denom === 0) return null;\n var x4 =\n ((x0 * y1 - y0 * x1) * (x2 - x3) - (x0 - x1) * (x2 * y3 - y2 * x3)) / denom;\n var y4 =\n ((x0 * y1 - y0 * x1) * (y2 - y3) - (y0 - y1) * (x2 * y3 - y2 * x3)) / denom;\n return [x4, y4];\n}\n\n// Function to compare Arrays of numbers. From http://stackoverflow.com/questions/7837456/how-to-compare-arrays-in-javascript\nfunction equalArrays(array1, array2) {\n // if the other array is a falsy value, return\n if (!array1 || !array2) return false;\n\n // compare lengths - can save a lot of time\n if (array1.length !== array2.length) return false;\n\n for (var i = 0, l = array1.length; i < l; i++) {\n // Check if we have nested arrays\n if (array1[i] instanceof Array && array2[i] instanceof Array) {\n // recurse into the nested arrays\n if (!equalArrays(array1[i], array2[i])) return false;\n } else if (array1[i] !== array2[i]) {\n // Warning - two different object instances will never be equal: {x:20} !== {x:20}\n return false;\n }\n }\n return true;\n}\n\n/**\n * Takes a complex (i.e. self-intersecting) geojson polygon, and breaks it down into its composite simple, non-self-intersecting one-ring polygons.\n *\n * @module simplepolygon\n * @param {Feature} feature Input polygon. This polygon may be unconform the {@link https://en.wikipedia.org/wiki/Simple_Features|Simple Features standard} in the sense that it's inner and outer rings may cross-intersect or self-intersect, that the outer ring must not contain the optional inner rings and that the winding number must not be positive for the outer and negative for the inner rings.\n * @return {FeatureCollection} Feature collection containing the simple, non-self-intersecting one-ring polygon features that the complex polygon is composed of. These simple polygons have properties such as their parent polygon, winding number and net winding number.\n *\n * @example\n * var poly = {\n * \"type\": \"Feature\",\n * \"geometry\": {\n * \"type\": \"Polygon\",\n * \"coordinates\": [[[0,0],[2,0],[0,2],[2,2],[0,0]]]\n * }\n * };\n *\n * var result = simplepolygon(poly);\n *\n * // =result\n * // which will be a featureCollection of two polygons, one with coordinates [[[0,0],[2,0],[1,1],[0,0]]], parent -1, winding 1 and net winding 1, and one with coordinates [[[1,1],[0,2],[2,2],[1,1]]], parent -1, winding -1 and net winding -1\n */\nfunction simplepolygon (feature) {\n // Check input\n if (feature.type != \"Feature\")\n throw new Error(\"The input must a geojson object of type Feature\");\n if (feature.geometry === undefined || feature.geometry == null)\n throw new Error(\n \"The input must a geojson object with a non-empty geometry\"\n );\n if (feature.geometry.type != \"Polygon\")\n throw new Error(\"The input must be a geojson Polygon\");\n\n // Process input\n var numRings = feature.geometry.coordinates.length;\n var vertices = [];\n for (var i = 0; i < numRings; i++) {\n var ring = feature.geometry.coordinates[i];\n if (!equalArrays$1(ring[0], ring[ring.length - 1])) {\n ring.push(ring[0]); // Close input ring if it is not\n }\n vertices.push.apply(vertices, ring.slice(0, ring.length - 1));\n }\n if (!isUnique(vertices))\n throw new Error(\n \"The input polygon may not have duplicate vertices (except for the first and last vertex of each ring)\"\n );\n var numvertices = vertices.length; // number of input ring vertices, with the last closing vertices not counted\n\n // Compute self-intersections\n var selfIsectsData = isects(\n feature,\n function filterFn(\n isect,\n ring0,\n edge0,\n start0,\n end0,\n frac0,\n ring1,\n edge1,\n start1,\n end1,\n frac1,\n unique\n ) {\n return [\n isect,\n ring0,\n edge0,\n start0,\n end0,\n frac0,\n ring1,\n edge1,\n start1,\n end1,\n frac1,\n unique,\n ];\n }\n );\n var numSelfIsect = selfIsectsData.length;\n\n // If no self-intersections are found, the input rings are the output rings. Hence, we must only compute their winding numbers, net winding numbers and (since ohers rings could lie outside the first ring) parents.\n if (numSelfIsect == 0) {\n var outputFeatureArray = [];\n for (var i = 0; i < numRings; i++) {\n outputFeatureArray.push(\n polygon([feature.geometry.coordinates[i]], {\n parent: -1,\n winding: windingOfRing(feature.geometry.coordinates[i]),\n })\n );\n }\n var output = featureCollection(outputFeatureArray);\n determineParents();\n setNetWinding();\n\n return output;\n }\n\n // If self-intersections are found, we will compute the output rings with the help of two intermediate variables\n // First, we build the pseudo vertex list and intersection list\n // The Pseudo vertex list is an array with for each ring an array with for each edge an array containing the pseudo-vertices (as made by their constructor) that have this ring and edge as ringAndEdgeIn, sorted for each edge by their fractional distance on this edge. It's length hence equals numRings.\n var pseudoVtxListByRingAndEdge = [];\n // The intersection list is an array containing intersections (as made by their constructor). First all numvertices ring-vertex-intersections, then all self-intersections (intra- and inter-ring). The order of the latter is not important but is permanent once given.\n var isectList = [];\n // Adding ring-pseudo-vertices to pseudoVtxListByRingAndEdge and ring-vertex-intersections to isectList\n for (var i = 0; i < numRings; i++) {\n pseudoVtxListByRingAndEdge.push([]);\n for (var j = 0; j < feature.geometry.coordinates[i].length - 1; j++) {\n // Each edge will feature one ring-pseudo-vertex in its array, on the last position. i.e. edge j features the ring-pseudo-vertex of the ring vertex j+1, which has ringAndEdgeIn = [i,j], on the last position.\n pseudoVtxListByRingAndEdge[i].push([\n new PseudoVtx(\n feature.geometry.coordinates[i][\n modulo(j + 1, feature.geometry.coordinates[i].length - 1)\n ],\n 1,\n [i, j],\n [i, modulo(j + 1, feature.geometry.coordinates[i].length - 1)],\n undefined\n ),\n ]);\n // The first numvertices elements in isectList correspond to the ring-vertex-intersections\n isectList.push(\n new Isect(\n feature.geometry.coordinates[i][j],\n [i, modulo(j - 1, feature.geometry.coordinates[i].length - 1)],\n [i, j],\n undefined,\n undefined,\n false,\n true\n )\n );\n }\n }\n // Adding intersection-pseudo-vertices to pseudoVtxListByRingAndEdge and self-intersections to isectList\n for (var i = 0; i < numSelfIsect; i++) {\n // Adding intersection-pseudo-vertices made using selfIsectsData to pseudoVtxListByRingAndEdge's array corresponding to the incomming ring and edge\n pseudoVtxListByRingAndEdge[selfIsectsData[i][1]][selfIsectsData[i][2]].push(\n new PseudoVtx(\n selfIsectsData[i][0],\n selfIsectsData[i][5],\n [selfIsectsData[i][1], selfIsectsData[i][2]],\n [selfIsectsData[i][6], selfIsectsData[i][7]],\n undefined\n )\n );\n // selfIsectsData contains double mentions of each intersection, but we only want to add them once to isectList\n if (selfIsectsData[i][11])\n isectList.push(\n new Isect(\n selfIsectsData[i][0],\n [selfIsectsData[i][1], selfIsectsData[i][2]],\n [selfIsectsData[i][6], selfIsectsData[i][7]],\n undefined,\n undefined,\n true,\n true\n )\n );\n }\n var numIsect = isectList.length;\n // Sort edge arrays of pseudoVtxListByRingAndEdge by the fractional distance 'param'\n for (var i = 0; i < pseudoVtxListByRingAndEdge.length; i++) {\n for (var j = 0; j < pseudoVtxListByRingAndEdge[i].length; j++) {\n pseudoVtxListByRingAndEdge[i][j].sort(function (a, b) {\n return a.param < b.param ? -1 : 1;\n });\n }\n }\n\n // Make a spatial index of intersections, in preperation for the following two steps\n var allIsectsAsIsectRbushTreeItem = [];\n for (var i = 0; i < numIsect; i++) {\n allIsectsAsIsectRbushTreeItem.push({\n minX: isectList[i].coord[0],\n minY: isectList[i].coord[1],\n maxX: isectList[i].coord[0],\n maxY: isectList[i].coord[1],\n index: i,\n }); // could pass isect: isectList[i], but not necessary\n }\n var isectRbushTree = rbush();\n isectRbushTree.load(allIsectsAsIsectRbushTreeItem);\n\n // Now we will teach each intersection in isectList which is the next intersection along both it's [ring, edge]'s, in two steps.\n // First, we find the next intersection for each pseudo-vertex in pseudoVtxListByRingAndEdge:\n // For each pseudovertex in pseudoVtxListByRingAndEdge (3 loops) look at the next pseudovertex on that edge and find the corresponding intersection by comparing coordinates\n for (var i = 0; i < pseudoVtxListByRingAndEdge.length; i++) {\n for (var j = 0; j < pseudoVtxListByRingAndEdge[i].length; j++) {\n for (var k = 0; k < pseudoVtxListByRingAndEdge[i][j].length; k++) {\n var coordToFind;\n if (k == pseudoVtxListByRingAndEdge[i][j].length - 1) {\n // If it's the last pseudoVertex on that edge, then the next pseudoVertex is the first one on the next edge of that ring.\n coordToFind =\n pseudoVtxListByRingAndEdge[i][\n modulo(j + 1, feature.geometry.coordinates[i].length - 1)\n ][0].coord;\n } else {\n coordToFind = pseudoVtxListByRingAndEdge[i][j][k + 1].coord;\n }\n var IsectRbushTreeItemFound = isectRbushTree.search({\n minX: coordToFind[0],\n minY: coordToFind[1],\n maxX: coordToFind[0],\n maxY: coordToFind[1],\n })[0]; // We can take [0] of the result, because there is only one isect correponding to a pseudo-vertex\n pseudoVtxListByRingAndEdge[i][j][k].nxtIsectAlongEdgeIn =\n IsectRbushTreeItemFound.index;\n }\n }\n }\n\n // Second, we port this knowledge of the next intersection over to the intersections in isectList, by finding the intersection corresponding to each pseudo-vertex and copying the pseudo-vertex' knownledge of the next-intersection over to the intersection\n for (var i = 0; i < pseudoVtxListByRingAndEdge.length; i++) {\n for (var j = 0; j < pseudoVtxListByRingAndEdge[i].length; j++) {\n for (var k = 0; k < pseudoVtxListByRingAndEdge[i][j].length; k++) {\n var coordToFind = pseudoVtxListByRingAndEdge[i][j][k].coord;\n var IsectRbushTreeItemFound = isectRbushTree.search({\n minX: coordToFind[0],\n minY: coordToFind[1],\n maxX: coordToFind[0],\n maxY: coordToFind[1],\n })[0]; // We can take [0] of the result, because there is only one isect correponding to a pseudo-vertex\n var l = IsectRbushTreeItemFound.index;\n if (l < numvertices) {\n // Special treatment at ring-vertices: we correct the misnaming that happened in the previous block, since ringAndEdgeOut = ringAndEdge2 for ring vertices.\n isectList[l].nxtIsectAlongRingAndEdge2 =\n pseudoVtxListByRingAndEdge[i][j][k].nxtIsectAlongEdgeIn;\n } else {\n // Port the knowledge of the next intersection from the pseudo-vertices to the intersections, depending on how the edges are labeled in the pseudo-vertex and intersection.\n if (\n equalArrays$1(\n isectList[l].ringAndEdge1,\n pseudoVtxListByRingAndEdge[i][j][k].ringAndEdgeIn\n )\n ) {\n isectList[l].nxtIsectAlongRingAndEdge1 =\n pseudoVtxListByRingAndEdge[i][j][k].nxtIsectAlongEdgeIn;\n } else {\n isectList[l].nxtIsectAlongRingAndEdge2 =\n pseudoVtxListByRingAndEdge[i][j][k].nxtIsectAlongEdgeIn;\n }\n }\n }\n }\n }\n // This explains why, eventhough when we will walk away from an intersection, we will walk way from the corresponding pseudo-vertex along edgeOut, pseudo-vertices have the property 'nxtIsectAlongEdgeIn' in stead of some propery 'nxtPseudoVtxAlongEdgeOut'. This is because this property (which is easy to find out) is used in the above for nxtIsectAlongRingAndEdge1 and nxtIsectAlongRingAndEdge2!\n\n // Before we start walking over the intersections to build the output rings, we prepare a queue that stores information on intersections we still have to deal with, and put at least one intersection in it.\n // This queue will contain information on intersections where we can start walking from once the current walk is finished, and its parent output ring (the smallest output ring it lies within, -1 if no parent or parent unknown yet) and its winding number (which we can already determine).\n var queue = [];\n // For each output ring, add the ring-vertex-intersection with the smalles x-value (i.e. the left-most) as a start intersection. By choosing such an extremal intersections, we are sure to start at an intersection that is a convex vertex of its output ring. By adding them all to the queue, we are sure that no rings will be forgotten. If due to ring-intersections such an intersection will be encountered while walking, it will be removed from the queue.\n var i = 0;\n for (var j = 0; j < numRings; j++) {\n var leftIsect = i;\n for (var k = 0; k < feature.geometry.coordinates[j].length - 1; k++) {\n if (isectList[i].coord[0] < isectList[leftIsect].coord[0]) {\n leftIsect = i;\n }\n i++;\n }\n // Compute winding at this left-most ring-vertex-intersection. We thus this by using our knowledge that this extremal vertex must be a convex vertex.\n // We first find the intersection before and after it, and then use them to determine the winding number of the corresponding output ring, since we know that an extremal vertex of a simple, non-self-intersecting ring is always convex, so the only reason it would not be is because the winding number we use to compute it is wrong\n var isectAfterLeftIsect = isectList[leftIsect].nxtIsectAlongRingAndEdge2;\n for (var k = 0; k < isectList.length; k++) {\n if (\n isectList[k].nxtIsectAlongRingAndEdge1 == leftIsect ||\n isectList[k].nxtIsectAlongRingAndEdge2 == leftIsect\n ) {\n var isectBeforeLeftIsect = k;\n break;\n }\n }\n var windingAtIsect = isConvex(\n [\n isectList[isectBeforeLeftIsect].coord,\n isectList[leftIsect].coord,\n isectList[isectAfterLeftIsect].coord,\n ],\n true\n )\n ? 1\n : -1;\n\n queue.push({ isect: leftIsect, parent: -1, winding: windingAtIsect });\n }\n // Sort the queue by the same criterion used to find the leftIsect: the left-most leftIsect must be last in the queue, such that it will be popped first, such that we will work from out to in regarding input rings. This assumtion is used when predicting the winding number and parent of a new queue member.\n queue.sort(function (a, b) {\n return isectList[a.isect].coord > isectList[b.isect].coord ? -1 : 1;\n });\n\n // Initialise output\n var outputFeatureArray = [];\n\n // While the queue is not empty, take the last object (i.e. its intersection) out and start making an output ring by walking in the direction that has not been walked away over yet.\n while (queue.length > 0) {\n // Get the last object out of the queue\n var popped = queue.pop();\n var startIsect = popped.isect;\n var currentOutputRingParent = popped.parent;\n var currentOutputRingWinding = popped.winding;\n // Make new output ring and add vertex from starting intersection\n var currentOutputRing = outputFeatureArray.length;\n var currentOutputRingCoords = [isectList[startIsect].coord];\n // Set up the variables used while walking over intersections: 'currentIsect', 'nxtIsect' and 'walkingRingAndEdge'\n var currentIsect = startIsect;\n if (isectList[startIsect].ringAndEdge1Walkable) {\n var walkingRingAndEdge = isectList[startIsect].ringAndEdge1;\n var nxtIsect = isectList[startIsect].nxtIsectAlongRingAndEdge1;\n } else {\n var walkingRingAndEdge = isectList[startIsect].ringAndEdge2;\n var nxtIsect = isectList[startIsect].nxtIsectAlongRingAndEdge2;\n }\n // While we have not arrived back at the same intersection, keep walking\n while (\n !equalArrays$1(isectList[startIsect].coord, isectList[nxtIsect].coord)\n ) {\n currentOutputRingCoords.push(isectList[nxtIsect].coord);\n // If the next intersection is queued, we can remove it, because we will go there now.\n var nxtIsectInQueue = undefined;\n for (var i = 0; i < queue.length; i++) {\n if (queue[i].isect == nxtIsect) {\n nxtIsectInQueue = i;\n break;\n }\n }\n if (nxtIsectInQueue != undefined) {\n queue.splice(nxtIsectInQueue, 1);\n }\n // Arriving at this new intersection, we know which will be our next walking ring and edge (if we came from 1 we will walk away from 2 and vice versa),\n // So we can set it as our new walking ring and intersection and remember that we (will) have walked over it\n // If we have never walked away from this new intersection along the other ring and edge then we will soon do, add the intersection (and the parent wand winding number) to the queue\n // (We can predict the winding number and parent as follows: if the edge is convex, the other output ring started from there will have the alternate winding and lie outside of the current one, and thus have the same parent ring as the current ring. Otherwise, it will have the same winding number and lie inside of the current ring. We are, however, only sure of this of an output ring started from there does not enclose the current ring. This is why the initial queue's intersections must be sorted such that outer ones come out first.)\n // We then update the other two walking variables.\n if (equalArrays$1(walkingRingAndEdge, isectList[nxtIsect].ringAndEdge1)) {\n walkingRingAndEdge = isectList[nxtIsect].ringAndEdge2;\n isectList[nxtIsect].ringAndEdge2Walkable = false;\n if (isectList[nxtIsect].ringAndEdge1Walkable) {\n var pushing = { isect: nxtIsect };\n if (\n isConvex(\n [\n isectList[currentIsect].coord,\n isectList[nxtIsect].coord,\n isectList[isectList[nxtIsect].nxtIsectAlongRingAndEdge2].coord,\n ],\n currentOutputRingWinding == 1\n )\n ) {\n pushing.parent = currentOutputRingParent;\n pushing.winding = -currentOutputRingWinding;\n } else {\n pushing.parent = currentOutputRing;\n pushing.winding = currentOutputRingWinding;\n }\n queue.push(pushing);\n }\n currentIsect = nxtIsect;\n nxtIsect = isectList[nxtIsect].nxtIsectAlongRingAndEdge2;\n } else {\n walkingRingAndEdge = isectList[nxtIsect].ringAndEdge1;\n isectList[nxtIsect].ringAndEdge1Walkable = false;\n if (isectList[nxtIsect].ringAndEdge2Walkable) {\n var pushing = { isect: nxtIsect };\n if (\n isConvex(\n [\n isectList[currentIsect].coord,\n isectList[nxtIsect].coord,\n isectList[isectList[nxtIsect].nxtIsectAlongRingAndEdge1].coord,\n ],\n currentOutputRingWinding == 1\n )\n ) {\n pushing.parent = currentOutputRingParent;\n pushing.winding = -currentOutputRingWinding;\n } else {\n pushing.parent = currentOutputRing;\n pushing.winding = currentOutputRingWinding;\n }\n queue.push(pushing);\n }\n currentIsect = nxtIsect;\n nxtIsect = isectList[nxtIsect].nxtIsectAlongRingAndEdge1;\n }\n }\n // Close output ring\n currentOutputRingCoords.push(isectList[nxtIsect].coord);\n // Push output ring to output\n outputFeatureArray.push(\n polygon([currentOutputRingCoords], {\n index: currentOutputRing,\n parent: currentOutputRingParent,\n winding: currentOutputRingWinding,\n netWinding: undefined,\n })\n );\n }\n\n var output = featureCollection(outputFeatureArray);\n\n determineParents();\n\n setNetWinding();\n\n // These functions are also used if no intersections are found\n function determineParents() {\n var featuresWithoutParent = [];\n for (var i = 0; i < output.features.length; i++) {\n if (output.features[i].properties.parent == -1)\n featuresWithoutParent.push(i);\n }\n if (featuresWithoutParent.length > 1) {\n for (var i = 0; i < featuresWithoutParent.length; i++) {\n var parent = -1;\n var parentArea = Infinity;\n for (var j = 0; j < output.features.length; j++) {\n if (featuresWithoutParent[i] == j) continue;\n if (\n booleanPointInPolygon(\n output.features[featuresWithoutParent[i]].geometry\n .coordinates[0][0],\n output.features[j],\n { ignoreBoundary: true }\n )\n ) {\n if (area(output.features[j]) < parentArea) {\n parent = j;\n }\n }\n }\n output.features[featuresWithoutParent[i]].properties.parent = parent;\n }\n }\n }\n\n function setNetWinding() {\n for (var i = 0; i < output.features.length; i++) {\n if (output.features[i].properties.parent == -1) {\n var netWinding = output.features[i].properties.winding;\n output.features[i].properties.netWinding = netWinding;\n setNetWindingOfChildren(i, netWinding);\n }\n }\n }\n\n function setNetWindingOfChildren(parent, ParentNetWinding) {\n for (var i = 0; i < output.features.length; i++) {\n if (output.features[i].properties.parent == parent) {\n var netWinding =\n ParentNetWinding + output.features[i].properties.winding;\n output.features[i].properties.netWinding = netWinding;\n setNetWindingOfChildren(i, netWinding);\n }\n }\n }\n\n return output;\n}\n\n// Constructor for (ring- or intersection-) pseudo-vertices.\nvar PseudoVtx = function (\n coord,\n param,\n ringAndEdgeIn,\n ringAndEdgeOut,\n nxtIsectAlongEdgeIn\n) {\n this.coord = coord; // [x,y] of this pseudo-vertex\n this.param = param; // fractional distance of this intersection on incomming edge\n this.ringAndEdgeIn = ringAndEdgeIn; // [ring index, edge index] of incomming edge\n this.ringAndEdgeOut = ringAndEdgeOut; // [ring index, edge index] of outgoing edge\n this.nxtIsectAlongEdgeIn = nxtIsectAlongEdgeIn; // The next intersection when following the incomming edge (so not when following ringAndEdgeOut!)\n};\n\n// Constructor for an intersection. There are two intersection-pseudo-vertices per self-intersection and one ring-pseudo-vertex per ring-vertex-intersection. Their labels 1 and 2 are not assigned a particular meaning but are permanent once given.\nvar Isect = function (\n coord,\n ringAndEdge1,\n ringAndEdge2,\n nxtIsectAlongRingAndEdge1,\n nxtIsectAlongRingAndEdge2,\n ringAndEdge1Walkable,\n ringAndEdge2Walkable\n) {\n this.coord = coord; // [x,y] of this intersection\n this.ringAndEdge1 = ringAndEdge1; // first edge of this intersection\n this.ringAndEdge2 = ringAndEdge2; // second edge of this intersection\n this.nxtIsectAlongRingAndEdge1 = nxtIsectAlongRingAndEdge1; // the next intersection when following ringAndEdge1\n this.nxtIsectAlongRingAndEdge2 = nxtIsectAlongRingAndEdge2; // the next intersection when following ringAndEdge2\n this.ringAndEdge1Walkable = ringAndEdge1Walkable; // May we (still) walk away from this intersection over ringAndEdge1?\n this.ringAndEdge2Walkable = ringAndEdge2Walkable; // May we (still) walk away from this intersection over ringAndEdge2?\n};\n\n// Function to determine if three consecutive points of a simple, non-self-intersecting ring make up a convex vertex, assuming the ring is right- or lefthanded\nfunction isConvex(pts, righthanded) {\n // 'pts' is an [x,y] pair\n // 'righthanded' is a boolean\n if (typeof righthanded === \"undefined\") righthanded = true;\n if (pts.length != 3)\n throw new Error(\"This function requires an array of three points [x,y]\");\n var d =\n (pts[1][0] - pts[0][0]) * (pts[2][1] - pts[0][1]) -\n (pts[1][1] - pts[0][1]) * (pts[2][0] - pts[0][0]);\n return d >= 0 == righthanded;\n}\n\n// Function to compute winding of simple, non-self-intersecting ring\nfunction windingOfRing(ring) {\n // 'ring' is an array of [x,y] pairs with the last equal to the first\n // Compute the winding number based on the vertex with the smallest x-value, it precessor and successor. An extremal vertex of a simple, non-self-intersecting ring is always convex, so the only reason it is not is because the winding number we use to compute it is wrong\n var leftVtx = 0;\n for (var i = 0; i < ring.length - 1; i++) {\n if (ring[i][0] < ring[leftVtx][0]) leftVtx = i;\n }\n if (\n isConvex(\n [\n ring[modulo(leftVtx - 1, ring.length - 1)],\n ring[leftVtx],\n ring[modulo(leftVtx + 1, ring.length - 1)],\n ],\n true\n )\n ) {\n var winding = 1;\n } else {\n var winding = -1;\n }\n return winding;\n}\n\n// Function to compare Arrays of numbers. From http://stackoverflow.com/questions/7837456/how-to-compare-arrays-in-javascript\nfunction equalArrays$1(array1, array2) {\n // if the other array is a falsy value, return\n if (!array1 || !array2) return false;\n\n // compare lengths - can save a lot of time\n if (array1.length != array2.length) return false;\n\n for (var i = 0, l = array1.length; i < l; i++) {\n // Check if we have nested arrays\n if (array1[i] instanceof Array && array2[i] instanceof Array) {\n // recurse into the nested arrays\n if (!equalArrays$1(array1[i], array2[i])) return false;\n } else if (array1[i] != array2[i]) {\n // Warning - two different object instances will never be equal: {x:20} != {x:20}\n return false;\n }\n }\n return true;\n}\n\n// Fix Javascript modulo for negative number. From http://stackoverflow.com/questions/4467539/javascript-modulo-not-behaving\nfunction modulo(n, m) {\n return ((n % m) + m) % m;\n}\n\n// Function to check if array is unique (i.e. all unique elements, i.e. no duplicate elements)\nfunction isUnique(array) {\n var u = {};\n var isUnique = 1;\n for (var i = 0, l = array.length; i < l; ++i) {\n if (Object.prototype.hasOwnProperty.call(u, array[i])) {\n isUnique = 0;\n break;\n }\n u[array[i]] = 1;\n }\n return isUnique;\n}\n\n/**\n * Takes a kinked polygon and returns a feature collection of polygons that have no kinks.\n * Uses [simplepolygon](https://github.com/mclaeysb/simplepolygon) internally.\n *\n * @name unkinkPolygon\n * @param {FeatureCollection|Feature} geojson GeoJSON Polygon or MultiPolygon\n * @returns {FeatureCollection} Unkinked polygons\n * @example\n * var poly = turf.polygon([[[0, 0], [2, 0], [0, 2], [2, 2], [0, 0]]]);\n *\n * var result = turf.unkinkPolygon(poly);\n *\n * //addToMap\n * var addToMap = [poly, result]\n */\nfunction unkinkPolygon(geojson) {\n var features = [];\n flattenEach(geojson, function (feature) {\n if (feature.geometry.type !== \"Polygon\") return;\n featureEach(simplepolygon(feature), function (poly) {\n features.push(polygon(poly.geometry.coordinates, feature.properties));\n });\n });\n return featureCollection(features);\n}\n\nexport default unkinkPolygon;\n","import { getCoord } from '@turf/invariant';\n\nvar D2R = Math.PI / 180;\nvar R2D = 180 / Math.PI;\n\nvar Coord = function (lon, lat) {\n this.lon = lon;\n this.lat = lat;\n this.x = D2R * lon;\n this.y = D2R * lat;\n};\n\nCoord.prototype.view = function () {\n return String(this.lon).slice(0, 4) + \",\" + String(this.lat).slice(0, 4);\n};\n\nCoord.prototype.antipode = function () {\n var anti_lat = -1 * this.lat;\n var anti_lon = this.lon < 0 ? 180 + this.lon : (180 - this.lon) * -1;\n return new Coord(anti_lon, anti_lat);\n};\n\nvar LineString = function () {\n this.coords = [];\n this.length = 0;\n};\n\nLineString.prototype.move_to = function (coord) {\n this.length++;\n this.coords.push(coord);\n};\n\nvar Arc = function (properties) {\n this.properties = properties || {};\n this.geometries = [];\n};\n\nArc.prototype.json = function () {\n if (this.geometries.length <= 0) {\n return {\n geometry: { type: \"LineString\", coordinates: null },\n type: \"Feature\",\n properties: this.properties,\n };\n } else if (this.geometries.length === 1) {\n return {\n geometry: { type: \"LineString\", coordinates: this.geometries[0].coords },\n type: \"Feature\",\n properties: this.properties,\n };\n } else {\n var multiline = [];\n for (var i = 0; i < this.geometries.length; i++) {\n multiline.push(this.geometries[i].coords);\n }\n return {\n geometry: { type: \"MultiLineString\", coordinates: multiline },\n type: \"Feature\",\n properties: this.properties,\n };\n }\n};\n\n// TODO - output proper multilinestring\nArc.prototype.wkt = function () {\n var wkt_string = \"\";\n var wkt = \"LINESTRING(\";\n var collect = function (c) {\n wkt += c[0] + \" \" + c[1] + \",\";\n };\n for (var i = 0; i < this.geometries.length; i++) {\n if (this.geometries[i].coords.length === 0) {\n return \"LINESTRING(empty)\";\n } else {\n var coords = this.geometries[i].coords;\n coords.forEach(collect);\n wkt_string += wkt.substring(0, wkt.length - 1) + \")\";\n }\n }\n return wkt_string;\n};\n\n/*\n * http://en.wikipedia.org/wiki/Great-circle_distance\n *\n */\nvar GreatCircle = function (start, end, properties) {\n if (!start || start.x === undefined || start.y === undefined) {\n throw new Error(\n \"GreatCircle constructor expects two args: start and end objects with x and y properties\"\n );\n }\n if (!end || end.x === undefined || end.y === undefined) {\n throw new Error(\n \"GreatCircle constructor expects two args: start and end objects with x and y properties\"\n );\n }\n this.start = new Coord(start.x, start.y);\n this.end = new Coord(end.x, end.y);\n this.properties = properties || {};\n\n var w = this.start.x - this.end.x;\n var h = this.start.y - this.end.y;\n var z =\n Math.pow(Math.sin(h / 2.0), 2) +\n Math.cos(this.start.y) *\n Math.cos(this.end.y) *\n Math.pow(Math.sin(w / 2.0), 2);\n this.g = 2.0 * Math.asin(Math.sqrt(z));\n\n if (this.g === Math.PI) {\n throw new Error(\n \"it appears \" +\n start.view() +\n \" and \" +\n end.view() +\n \" are 'antipodal', e.g diametrically opposite, thus there is no single route but rather infinite\"\n );\n } else if (isNaN(this.g)) {\n throw new Error(\n \"could not calculate great circle between \" + start + \" and \" + end\n );\n }\n};\n\n/*\n * http://williams.best.vwh.net/avform.htm#Intermediate\n */\nGreatCircle.prototype.interpolate = function (f) {\n var A = Math.sin((1 - f) * this.g) / Math.sin(this.g);\n var B = Math.sin(f * this.g) / Math.sin(this.g);\n var x =\n A * Math.cos(this.start.y) * Math.cos(this.start.x) +\n B * Math.cos(this.end.y) * Math.cos(this.end.x);\n var y =\n A * Math.cos(this.start.y) * Math.sin(this.start.x) +\n B * Math.cos(this.end.y) * Math.sin(this.end.x);\n var z = A * Math.sin(this.start.y) + B * Math.sin(this.end.y);\n var lat = R2D * Math.atan2(z, Math.sqrt(Math.pow(x, 2) + Math.pow(y, 2)));\n var lon = R2D * Math.atan2(y, x);\n return [lon, lat];\n};\n\n/*\n * Generate points along the great circle\n */\nGreatCircle.prototype.Arc = function (npoints, options) {\n var first_pass = [];\n if (!npoints || npoints <= 2) {\n first_pass.push([this.start.lon, this.start.lat]);\n first_pass.push([this.end.lon, this.end.lat]);\n } else {\n var delta = 1.0 / (npoints - 1);\n for (var i = 0; i < npoints; ++i) {\n var step = delta * i;\n var pair = this.interpolate(step);\n first_pass.push(pair);\n }\n }\n /* partial port of dateline handling from:\n gdal/ogr/ogrgeometryfactory.cpp\n\n TODO - does not handle all wrapping scenarios yet\n */\n var bHasBigDiff = false;\n var dfMaxSmallDiffLong = 0;\n // from http://www.gdal.org/ogr2ogr.html\n // -datelineoffset:\n // (starting with GDAL 1.10) offset from dateline in degrees (default long. = +/- 10deg, geometries within 170deg to -170deg will be splited)\n var dfDateLineOffset = options && options.offset ? options.offset : 10;\n var dfLeftBorderX = 180 - dfDateLineOffset;\n var dfRightBorderX = -180 + dfDateLineOffset;\n var dfDiffSpace = 360 - dfDateLineOffset;\n\n // https://github.com/OSGeo/gdal/blob/7bfb9c452a59aac958bff0c8386b891edf8154ca/gdal/ogr/ogrgeometryfactory.cpp#L2342\n for (var j = 1; j < first_pass.length; ++j) {\n var dfPrevX = first_pass[j - 1][0];\n var dfX = first_pass[j][0];\n var dfDiffLong = Math.abs(dfX - dfPrevX);\n if (\n dfDiffLong > dfDiffSpace &&\n ((dfX > dfLeftBorderX && dfPrevX < dfRightBorderX) ||\n (dfPrevX > dfLeftBorderX && dfX < dfRightBorderX))\n ) {\n bHasBigDiff = true;\n } else if (dfDiffLong > dfMaxSmallDiffLong) {\n dfMaxSmallDiffLong = dfDiffLong;\n }\n }\n\n var poMulti = [];\n if (bHasBigDiff && dfMaxSmallDiffLong < dfDateLineOffset) {\n var poNewLS = [];\n poMulti.push(poNewLS);\n for (var k = 0; k < first_pass.length; ++k) {\n var dfX0 = parseFloat(first_pass[k][0]);\n if (k > 0 && Math.abs(dfX0 - first_pass[k - 1][0]) > dfDiffSpace) {\n var dfX1 = parseFloat(first_pass[k - 1][0]);\n var dfY1 = parseFloat(first_pass[k - 1][1]);\n var dfX2 = parseFloat(first_pass[k][0]);\n var dfY2 = parseFloat(first_pass[k][1]);\n if (\n dfX1 > -180 &&\n dfX1 < dfRightBorderX &&\n dfX2 === 180 &&\n k + 1 < first_pass.length &&\n first_pass[k - 1][0] > -180 &&\n first_pass[k - 1][0] < dfRightBorderX\n ) {\n poNewLS.push([-180, first_pass[k][1]]);\n k++;\n poNewLS.push([first_pass[k][0], first_pass[k][1]]);\n continue;\n } else if (\n dfX1 > dfLeftBorderX &&\n dfX1 < 180 &&\n dfX2 === -180 &&\n k + 1 < first_pass.length &&\n first_pass[k - 1][0] > dfLeftBorderX &&\n first_pass[k - 1][0] < 180\n ) {\n poNewLS.push([180, first_pass[k][1]]);\n k++;\n poNewLS.push([first_pass[k][0], first_pass[k][1]]);\n continue;\n }\n\n if (dfX1 < dfRightBorderX && dfX2 > dfLeftBorderX) {\n // swap dfX1, dfX2\n var tmpX = dfX1;\n dfX1 = dfX2;\n dfX2 = tmpX;\n // swap dfY1, dfY2\n var tmpY = dfY1;\n dfY1 = dfY2;\n dfY2 = tmpY;\n }\n if (dfX1 > dfLeftBorderX && dfX2 < dfRightBorderX) {\n dfX2 += 360;\n }\n\n if (dfX1 <= 180 && dfX2 >= 180 && dfX1 < dfX2) {\n var dfRatio = (180 - dfX1) / (dfX2 - dfX1);\n var dfY = dfRatio * dfY2 + (1 - dfRatio) * dfY1;\n poNewLS.push([\n first_pass[k - 1][0] > dfLeftBorderX ? 180 : -180,\n dfY,\n ]);\n poNewLS = [];\n poNewLS.push([\n first_pass[k - 1][0] > dfLeftBorderX ? -180 : 180,\n dfY,\n ]);\n poMulti.push(poNewLS);\n } else {\n poNewLS = [];\n poMulti.push(poNewLS);\n }\n poNewLS.push([dfX0, first_pass[k][1]]);\n } else {\n poNewLS.push([first_pass[k][0], first_pass[k][1]]);\n }\n }\n } else {\n // add normally\n var poNewLS0 = [];\n poMulti.push(poNewLS0);\n for (var l = 0; l < first_pass.length; ++l) {\n poNewLS0.push([first_pass[l][0], first_pass[l][1]]);\n }\n }\n\n var arc = new Arc(this.properties);\n for (var m = 0; m < poMulti.length; ++m) {\n var line = new LineString();\n arc.geometries.push(line);\n var points = poMulti[m];\n for (var j0 = 0; j0 < points.length; ++j0) {\n line.move_to(points[j0]);\n }\n }\n return arc;\n};\n\n/**\n * Calculate great circles routes as {@link LineString} or {@link MultiLineString}.\n * If the `start` and `end` points span the antimeridian, the resulting feature will\n * be split into a `MultiLineString`.\n *\n * @name greatCircle\n * @param {Coord} start source point feature\n * @param {Coord} end destination point feature\n * @param {Object} [options={}] Optional parameters\n * @param {Object} [options.properties={}] line feature properties\n * @param {number} [options.npoints=100] number of points\n * @param {number} [options.offset=10] offset controls the likelyhood that lines will\n * be split which cross the dateline. The higher the number the more likely.\n * @returns {Feature} great circle line feature\n * @example\n * var start = turf.point([-122, 48]);\n * var end = turf.point([-77, 39]);\n *\n * var greatCircle = turf.greatCircle(start, end, {properties: {name: 'Seattle to DC'}});\n *\n * //addToMap\n * var addToMap = [start, end, greatCircle]\n */\nfunction greatCircle(start, end, options) {\n // Optional parameters\n options = options || {};\n if (typeof options !== \"object\") throw new Error(\"options is invalid\");\n var properties = options.properties;\n var npoints = options.npoints;\n var offset = options.offset;\n\n start = getCoord(start);\n end = getCoord(end);\n properties = properties || {};\n npoints = npoints || 100;\n offset = offset || 10;\n\n var generator = new GreatCircle(\n { x: start[0], y: start[1] },\n { x: end[0], y: end[1] },\n properties\n );\n\n var line = generator.Arc(npoints, { offset: offset });\n\n return line.json();\n}\n\nexport default greatCircle;\n","import { featureCollection, lineString, multiLineString } from \"@turf/helpers\";\nimport { getGeom } from \"@turf/invariant\";\n/**\n * Converts a {@link Polygon} to {@link LineString|(Multi)LineString} or {@link MultiPolygon} to a\n * {@link FeatureCollection} of {@link LineString|(Multi)LineString}.\n *\n * @name polygonToLine\n * @param {Feature} poly Feature to convert\n * @param {Object} [options={}] Optional parameters\n * @param {Object} [options.properties={}] translates GeoJSON properties to Feature\n * @returns {FeatureCollection|Feature} converted (Multi)Polygon to (Multi)LineString\n * @example\n * var poly = turf.polygon([[[125, -30], [145, -30], [145, -20], [125, -20], [125, -30]]]);\n *\n * var line = turf.polygonToLine(poly);\n *\n * //addToMap\n * var addToMap = [line];\n */\nexport default function (poly, options) {\n if (options === void 0) { options = {}; }\n var geom = getGeom(poly);\n if (!options.properties && poly.type === \"Feature\") {\n options.properties = poly.properties;\n }\n switch (geom.type) {\n case \"Polygon\":\n return polygonToLine(geom, options);\n case \"MultiPolygon\":\n return multiPolygonToLine(geom, options);\n default:\n throw new Error(\"invalid poly\");\n }\n}\n/**\n * @private\n */\nexport function polygonToLine(poly, options) {\n if (options === void 0) { options = {}; }\n var geom = getGeom(poly);\n var coords = geom.coordinates;\n var properties = options.properties\n ? options.properties\n : poly.type === \"Feature\"\n ? poly.properties\n : {};\n return coordsToLine(coords, properties);\n}\n/**\n * @private\n */\nexport function multiPolygonToLine(multiPoly, options) {\n if (options === void 0) { options = {}; }\n var geom = getGeom(multiPoly);\n var coords = geom.coordinates;\n var properties = options.properties\n ? options.properties\n : multiPoly.type === \"Feature\"\n ? multiPoly.properties\n : {};\n var lines = [];\n coords.forEach(function (coord) {\n lines.push(coordsToLine(coord, properties));\n });\n return featureCollection(lines);\n}\n/**\n * @private\n */\nexport function coordsToLine(coords, properties) {\n if (coords.length > 1) {\n return multiLineString(coords, properties);\n }\n return lineString(coords[0], properties);\n}\n","import bbox from '@turf/bbox';\nimport area from '@turf/area';\nimport booleanPointInPolygon from '@turf/boolean-point-in-polygon';\nimport explode from '@turf/explode';\nimport { collectionOf, getCoords } from '@turf/invariant';\nimport { isObject, multiPolygon, featureCollection, polygon } from '@turf/helpers';\nimport objectAssign from 'object-assign';\nimport { featureEach } from '@turf/meta';\n\n/**\n * Takes a {@link Point} grid and returns a correspondent matrix {Array>}\n * of the 'property' values\n *\n * @name gridToMatrix\n * @param {FeatureCollection} grid of points\n * @param {Object} [options={}] Optional parameters\n * @param {string} [options.zProperty='elevation'] the property name in `points` from which z-values will be pulled\n * @param {boolean} [options.flip=false] returns the matrix upside-down\n * @param {boolean} [options.flags=false] flags, adding a `matrixPosition` array field ([row, column]) to its properties,\n * the grid points with coordinates on the matrix\n * @returns {Array>} matrix of property values\n * @example\n * var extent = [-70.823364, -33.553984, -70.473175, -33.302986];\n * var cellSize = 3;\n * var grid = turf.pointGrid(extent, cellSize);\n * // add a random property to each point between 0 and 60\n * for (var i = 0; i < grid.features.length; i++) {\n * grid.features[i].properties.elevation = (Math.random() * 60);\n * }\n * gridToMatrix(grid);\n * //= [\n * [ 1, 13, 10, 9, 10, 13, 18],\n * [34, 8, 5, 4, 5, 8, 13],\n * [10, 5, 2, 1, 2, 5, 4],\n * [ 0, 4, 56, 19, 1, 4, 9],\n * [10, 5, 2, 1, 2, 5, 10],\n * [57, 8, 5, 4, 5, 0, 57],\n * [ 3, 13, 10, 9, 5, 13, 18],\n * [18, 13, 10, 9, 78, 13, 18]\n * ]\n */\nfunction gridToMatrix(grid, options) {\n // Optional parameters\n options = options || {};\n if (!isObject(options)) throw new Error(\"options is invalid\");\n var zProperty = options.zProperty || \"elevation\";\n var flip = options.flip;\n var flags = options.flags;\n\n // validation\n collectionOf(grid, \"Point\", \"input must contain Points\");\n\n var pointsMatrix = sortPointsByLatLng(grid, flip);\n\n var matrix = [];\n // create property matrix from sorted points\n // looping order matters here\n for (var r = 0; r < pointsMatrix.length; r++) {\n var pointRow = pointsMatrix[r];\n var row = [];\n for (var c = 0; c < pointRow.length; c++) {\n var point = pointRow[c];\n // Check if zProperty exist\n if (point.properties[zProperty]) row.push(point.properties[zProperty]);\n else row.push(0);\n // add flags\n if (flags === true) point.properties.matrixPosition = [r, c];\n }\n matrix.push(row);\n }\n\n return matrix;\n}\n\n/**\n * Sorts points by latitude and longitude, creating a 2-dimensional array of points\n *\n * @private\n * @param {FeatureCollection} points GeoJSON Point features\n * @param {boolean} [flip=false] returns the matrix upside-down\n * @returns {Array>} points ordered by latitude and longitude\n */\nfunction sortPointsByLatLng(points, flip) {\n var pointsByLatitude = {};\n\n // divide points by rows with the same latitude\n featureEach(points, function (point) {\n var lat = getCoords(point)[1];\n if (!pointsByLatitude[lat]) pointsByLatitude[lat] = [];\n pointsByLatitude[lat].push(point);\n });\n\n // sort points (with the same latitude) by longitude\n var orderedRowsByLatitude = Object.keys(pointsByLatitude).map(function (lat) {\n var row = pointsByLatitude[lat];\n var rowOrderedByLongitude = row.sort(function (a, b) {\n return getCoords(a)[0] - getCoords(b)[0];\n });\n return rowOrderedByLongitude;\n });\n\n // sort rows (of points with the same latitude) by latitude\n var pointMatrix = orderedRowsByLatitude.sort(function (a, b) {\n if (flip) return getCoords(a[0])[1] - getCoords(b[0])[1];\n else return getCoords(b[0])[1] - getCoords(a[0])[1];\n });\n\n return pointMatrix;\n}\n\n/*!\n * @license GNU Affero General Public License.\n * Copyright (c) 2015, 2015 Ronny Lorenz \n * v. 1.2.0\n * https://github.com/RaumZeit/MarchingSquares.js\n *\n * MarchingSquaresJS is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as published by\n * the Free Software Foundation, either version 3 of the License, or\n * (at your option) any later version.\n *\n * MarchingSquaresJS is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * As additional permission under GNU Affero General Public License version 3\n * section 7, third-party projects (personal or commercial) may distribute,\n * include, or link against UNMODIFIED VERSIONS of MarchingSquaresJS without the\n * requirement that said third-party project for that reason alone becomes\n * subject to any requirement of the GNU Affero General Public License version 3.\n * Any modifications to MarchingSquaresJS, however, must be shared with the public\n * and made available.\n *\n * In summary this:\n * - allows you to use MarchingSquaresJS at no cost\n * - allows you to use MarchingSquaresJS for both personal and commercial purposes\n * - allows you to distribute UNMODIFIED VERSIONS of MarchingSquaresJS under any\n * license as long as this license notice is included\n * - enables you to keep the source code of your program that uses MarchingSquaresJS\n * undisclosed\n * - forces you to share any modifications you have made to MarchingSquaresJS,\n * e.g. bug-fixes\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with MarchingSquaresJS. If not, see .\n */\nvar defaultSettings = {\n successCallback: null,\n verbose: false,\n polygons: false,\n};\n\nvar settings = {};\n\n/*\n Compute isobands(s) of a scalar 2D field given a certain\n threshold and a bandwidth by applying the Marching Squares\n Algorithm. The function returns a list of path coordinates\n either for individual polygons within each grid cell, or the\n outline of connected polygons.\n*/\nfunction isoBands(data, minV, bandwidth, options) {\n /* process options */\n options = options ? options : {};\n\n var optionKeys = Object.keys(defaultSettings);\n\n for (var i = 0; i < optionKeys.length; i++) {\n var key = optionKeys[i];\n var val = options[key];\n val =\n typeof val !== \"undefined\" && val !== null ? val : defaultSettings[key];\n\n settings[key] = val;\n }\n\n if (settings.verbose)\n console.log(\n \"MarchingSquaresJS-isoBands: computing isobands for [\" +\n minV +\n \":\" +\n (minV + bandwidth) +\n \"]\"\n );\n\n var grid = computeBandGrid(data, minV, bandwidth);\n\n var ret;\n if (settings.polygons) {\n if (settings.verbose)\n console.log(\n \"MarchingSquaresJS-isoBands: returning single polygons for each grid cell\"\n );\n ret = BandGrid2Areas(grid);\n } else {\n if (settings.verbose)\n console.log(\n \"MarchingSquaresJS-isoBands: returning polygon paths for entire data grid\"\n );\n ret = BandGrid2AreaPaths(grid);\n }\n\n if (typeof settings.successCallback === \"function\")\n settings.successCallback(ret);\n\n return ret;\n}\n\n/*\n Thats all for the public interface, below follows the actual\n implementation\n*/\n\n/* Some private variables */\nvar Node0 = 64,\n Node1 = 16,\n Node2 = 4,\n Node3 = 1;\n\n/*\n The look-up tables for tracing back the contour path\n of isoBands\n*/\n\nvar isoBandNextXTL = [];\nvar isoBandNextYTL = [];\nvar isoBandNextOTL = [];\n\nvar isoBandNextXTR = [];\nvar isoBandNextYTR = [];\nvar isoBandNextOTR = [];\n\nvar isoBandNextXRT = [];\nvar isoBandNextYRT = [];\nvar isoBandNextORT = [];\n\nvar isoBandNextXRB = [];\nvar isoBandNextYRB = [];\nvar isoBandNextORB = [];\n\nvar isoBandNextXBL = [];\nvar isoBandNextYBL = [];\nvar isoBandNextOBL = [];\n\nvar isoBandNextXBR = [];\nvar isoBandNextYBR = [];\nvar isoBandNextOBR = [];\n\nvar isoBandNextXLT = [];\nvar isoBandNextYLT = [];\nvar isoBandNextOLT = [];\n\nvar isoBandNextXLB = [];\nvar isoBandNextYLB = [];\nvar isoBandNextOLB = [];\n\nisoBandNextXRT[85] = isoBandNextXRB[85] = -1;\nisoBandNextYRT[85] = isoBandNextYRB[85] = 0;\nisoBandNextORT[85] = isoBandNextORB[85] = 1;\nisoBandNextXLT[85] = isoBandNextXLB[85] = 1;\nisoBandNextYLT[85] = isoBandNextYLB[85] = 0;\nisoBandNextOLT[85] = isoBandNextOLB[85] = 1;\n\nisoBandNextXTL[85] = isoBandNextXTR[85] = 0;\nisoBandNextYTL[85] = isoBandNextYTR[85] = -1;\nisoBandNextOTL[85] = isoBandNextOBL[85] = 0;\nisoBandNextXBR[85] = isoBandNextXBL[85] = 0;\nisoBandNextYBR[85] = isoBandNextYBL[85] = 1;\nisoBandNextOTR[85] = isoBandNextOBR[85] = 1;\n\n/* triangle cases */\nisoBandNextXLB[1] = isoBandNextXLB[169] = 0;\nisoBandNextYLB[1] = isoBandNextYLB[169] = -1;\nisoBandNextOLB[1] = isoBandNextOLB[169] = 0;\nisoBandNextXBL[1] = isoBandNextXBL[169] = -1;\nisoBandNextYBL[1] = isoBandNextYBL[169] = 0;\nisoBandNextOBL[1] = isoBandNextOBL[169] = 0;\n\nisoBandNextXRB[4] = isoBandNextXRB[166] = 0;\nisoBandNextYRB[4] = isoBandNextYRB[166] = -1;\nisoBandNextORB[4] = isoBandNextORB[166] = 1;\nisoBandNextXBR[4] = isoBandNextXBR[166] = 1;\nisoBandNextYBR[4] = isoBandNextYBR[166] = 0;\nisoBandNextOBR[4] = isoBandNextOBR[166] = 0;\n\nisoBandNextXRT[16] = isoBandNextXRT[154] = 0;\nisoBandNextYRT[16] = isoBandNextYRT[154] = 1;\nisoBandNextORT[16] = isoBandNextORT[154] = 1;\nisoBandNextXTR[16] = isoBandNextXTR[154] = 1;\nisoBandNextYTR[16] = isoBandNextYTR[154] = 0;\nisoBandNextOTR[16] = isoBandNextOTR[154] = 1;\n\nisoBandNextXLT[64] = isoBandNextXLT[106] = 0;\nisoBandNextYLT[64] = isoBandNextYLT[106] = 1;\nisoBandNextOLT[64] = isoBandNextOLT[106] = 0;\nisoBandNextXTL[64] = isoBandNextXTL[106] = -1;\nisoBandNextYTL[64] = isoBandNextYTL[106] = 0;\nisoBandNextOTL[64] = isoBandNextOTL[106] = 1;\n\n/* single trapezoid cases */\nisoBandNextXLT[2] = isoBandNextXLT[168] = 0;\nisoBandNextYLT[2] = isoBandNextYLT[168] = -1;\nisoBandNextOLT[2] = isoBandNextOLT[168] = 1;\nisoBandNextXLB[2] = isoBandNextXLB[168] = 0;\nisoBandNextYLB[2] = isoBandNextYLB[168] = -1;\nisoBandNextOLB[2] = isoBandNextOLB[168] = 0;\nisoBandNextXBL[2] = isoBandNextXBL[168] = -1;\nisoBandNextYBL[2] = isoBandNextYBL[168] = 0;\nisoBandNextOBL[2] = isoBandNextOBL[168] = 0;\nisoBandNextXBR[2] = isoBandNextXBR[168] = -1;\nisoBandNextYBR[2] = isoBandNextYBR[168] = 0;\nisoBandNextOBR[2] = isoBandNextOBR[168] = 1;\n\nisoBandNextXRT[8] = isoBandNextXRT[162] = 0;\nisoBandNextYRT[8] = isoBandNextYRT[162] = -1;\nisoBandNextORT[8] = isoBandNextORT[162] = 0;\nisoBandNextXRB[8] = isoBandNextXRB[162] = 0;\nisoBandNextYRB[8] = isoBandNextYRB[162] = -1;\nisoBandNextORB[8] = isoBandNextORB[162] = 1;\nisoBandNextXBL[8] = isoBandNextXBL[162] = 1;\nisoBandNextYBL[8] = isoBandNextYBL[162] = 0;\nisoBandNextOBL[8] = isoBandNextOBL[162] = 1;\nisoBandNextXBR[8] = isoBandNextXBR[162] = 1;\nisoBandNextYBR[8] = isoBandNextYBR[162] = 0;\nisoBandNextOBR[8] = isoBandNextOBR[162] = 0;\n\nisoBandNextXRT[32] = isoBandNextXRT[138] = 0;\nisoBandNextYRT[32] = isoBandNextYRT[138] = 1;\nisoBandNextORT[32] = isoBandNextORT[138] = 1;\nisoBandNextXRB[32] = isoBandNextXRB[138] = 0;\nisoBandNextYRB[32] = isoBandNextYRB[138] = 1;\nisoBandNextORB[32] = isoBandNextORB[138] = 0;\nisoBandNextXTL[32] = isoBandNextXTL[138] = 1;\nisoBandNextYTL[32] = isoBandNextYTL[138] = 0;\nisoBandNextOTL[32] = isoBandNextOTL[138] = 0;\nisoBandNextXTR[32] = isoBandNextXTR[138] = 1;\nisoBandNextYTR[32] = isoBandNextYTR[138] = 0;\nisoBandNextOTR[32] = isoBandNextOTR[138] = 1;\n\nisoBandNextXLB[128] = isoBandNextXLB[42] = 0;\nisoBandNextYLB[128] = isoBandNextYLB[42] = 1;\nisoBandNextOLB[128] = isoBandNextOLB[42] = 1;\nisoBandNextXLT[128] = isoBandNextXLT[42] = 0;\nisoBandNextYLT[128] = isoBandNextYLT[42] = 1;\nisoBandNextOLT[128] = isoBandNextOLT[42] = 0;\nisoBandNextXTL[128] = isoBandNextXTL[42] = -1;\nisoBandNextYTL[128] = isoBandNextYTL[42] = 0;\nisoBandNextOTL[128] = isoBandNextOTL[42] = 1;\nisoBandNextXTR[128] = isoBandNextXTR[42] = -1;\nisoBandNextYTR[128] = isoBandNextYTR[42] = 0;\nisoBandNextOTR[128] = isoBandNextOTR[42] = 0;\n\n/* single rectangle cases */\nisoBandNextXRB[5] = isoBandNextXRB[165] = -1;\nisoBandNextYRB[5] = isoBandNextYRB[165] = 0;\nisoBandNextORB[5] = isoBandNextORB[165] = 0;\nisoBandNextXLB[5] = isoBandNextXLB[165] = 1;\nisoBandNextYLB[5] = isoBandNextYLB[165] = 0;\nisoBandNextOLB[5] = isoBandNextOLB[165] = 0;\n\nisoBandNextXBR[20] = isoBandNextXBR[150] = 0;\nisoBandNextYBR[20] = isoBandNextYBR[150] = 1;\nisoBandNextOBR[20] = isoBandNextOBR[150] = 1;\nisoBandNextXTR[20] = isoBandNextXTR[150] = 0;\nisoBandNextYTR[20] = isoBandNextYTR[150] = -1;\nisoBandNextOTR[20] = isoBandNextOTR[150] = 1;\n\nisoBandNextXRT[80] = isoBandNextXRT[90] = -1;\nisoBandNextYRT[80] = isoBandNextYRT[90] = 0;\nisoBandNextORT[80] = isoBandNextORT[90] = 1;\nisoBandNextXLT[80] = isoBandNextXLT[90] = 1;\nisoBandNextYLT[80] = isoBandNextYLT[90] = 0;\nisoBandNextOLT[80] = isoBandNextOLT[90] = 1;\n\nisoBandNextXBL[65] = isoBandNextXBL[105] = 0;\nisoBandNextYBL[65] = isoBandNextYBL[105] = 1;\nisoBandNextOBL[65] = isoBandNextOBL[105] = 0;\nisoBandNextXTL[65] = isoBandNextXTL[105] = 0;\nisoBandNextYTL[65] = isoBandNextYTL[105] = -1;\nisoBandNextOTL[65] = isoBandNextOTL[105] = 0;\n\nisoBandNextXRT[160] = isoBandNextXRT[10] = -1;\nisoBandNextYRT[160] = isoBandNextYRT[10] = 0;\nisoBandNextORT[160] = isoBandNextORT[10] = 1;\nisoBandNextXRB[160] = isoBandNextXRB[10] = -1;\nisoBandNextYRB[160] = isoBandNextYRB[10] = 0;\nisoBandNextORB[160] = isoBandNextORB[10] = 0;\nisoBandNextXLB[160] = isoBandNextXLB[10] = 1;\nisoBandNextYLB[160] = isoBandNextYLB[10] = 0;\nisoBandNextOLB[160] = isoBandNextOLB[10] = 0;\nisoBandNextXLT[160] = isoBandNextXLT[10] = 1;\nisoBandNextYLT[160] = isoBandNextYLT[10] = 0;\nisoBandNextOLT[160] = isoBandNextOLT[10] = 1;\n\nisoBandNextXBR[130] = isoBandNextXBR[40] = 0;\nisoBandNextYBR[130] = isoBandNextYBR[40] = 1;\nisoBandNextOBR[130] = isoBandNextOBR[40] = 1;\nisoBandNextXBL[130] = isoBandNextXBL[40] = 0;\nisoBandNextYBL[130] = isoBandNextYBL[40] = 1;\nisoBandNextOBL[130] = isoBandNextOBL[40] = 0;\nisoBandNextXTL[130] = isoBandNextXTL[40] = 0;\nisoBandNextYTL[130] = isoBandNextYTL[40] = -1;\nisoBandNextOTL[130] = isoBandNextOTL[40] = 0;\nisoBandNextXTR[130] = isoBandNextXTR[40] = 0;\nisoBandNextYTR[130] = isoBandNextYTR[40] = -1;\nisoBandNextOTR[130] = isoBandNextOTR[40] = 1;\n\n/* single hexagon cases */\nisoBandNextXRB[37] = isoBandNextXRB[133] = 0;\nisoBandNextYRB[37] = isoBandNextYRB[133] = 1;\nisoBandNextORB[37] = isoBandNextORB[133] = 1;\nisoBandNextXLB[37] = isoBandNextXLB[133] = 0;\nisoBandNextYLB[37] = isoBandNextYLB[133] = 1;\nisoBandNextOLB[37] = isoBandNextOLB[133] = 0;\nisoBandNextXTL[37] = isoBandNextXTL[133] = -1;\nisoBandNextYTL[37] = isoBandNextYTL[133] = 0;\nisoBandNextOTL[37] = isoBandNextOTL[133] = 0;\nisoBandNextXTR[37] = isoBandNextXTR[133] = 1;\nisoBandNextYTR[37] = isoBandNextYTR[133] = 0;\nisoBandNextOTR[37] = isoBandNextOTR[133] = 0;\n\nisoBandNextXBR[148] = isoBandNextXBR[22] = -1;\nisoBandNextYBR[148] = isoBandNextYBR[22] = 0;\nisoBandNextOBR[148] = isoBandNextOBR[22] = 0;\nisoBandNextXLB[148] = isoBandNextXLB[22] = 0;\nisoBandNextYLB[148] = isoBandNextYLB[22] = -1;\nisoBandNextOLB[148] = isoBandNextOLB[22] = 1;\nisoBandNextXLT[148] = isoBandNextXLT[22] = 0;\nisoBandNextYLT[148] = isoBandNextYLT[22] = 1;\nisoBandNextOLT[148] = isoBandNextOLT[22] = 1;\nisoBandNextXTR[148] = isoBandNextXTR[22] = -1;\nisoBandNextYTR[148] = isoBandNextYTR[22] = 0;\nisoBandNextOTR[148] = isoBandNextOTR[22] = 1;\n\nisoBandNextXRT[82] = isoBandNextXRT[88] = 0;\nisoBandNextYRT[82] = isoBandNextYRT[88] = -1;\nisoBandNextORT[82] = isoBandNextORT[88] = 1;\nisoBandNextXBR[82] = isoBandNextXBR[88] = 1;\nisoBandNextYBR[82] = isoBandNextYBR[88] = 0;\nisoBandNextOBR[82] = isoBandNextOBR[88] = 1;\nisoBandNextXBL[82] = isoBandNextXBL[88] = -1;\nisoBandNextYBL[82] = isoBandNextYBL[88] = 0;\nisoBandNextOBL[82] = isoBandNextOBL[88] = 1;\nisoBandNextXLT[82] = isoBandNextXLT[88] = 0;\nisoBandNextYLT[82] = isoBandNextYLT[88] = -1;\nisoBandNextOLT[82] = isoBandNextOLT[88] = 0;\n\nisoBandNextXRT[73] = isoBandNextXRT[97] = 0;\nisoBandNextYRT[73] = isoBandNextYRT[97] = 1;\nisoBandNextORT[73] = isoBandNextORT[97] = 0;\nisoBandNextXRB[73] = isoBandNextXRB[97] = 0;\nisoBandNextYRB[73] = isoBandNextYRB[97] = -1;\nisoBandNextORB[73] = isoBandNextORB[97] = 0;\nisoBandNextXBL[73] = isoBandNextXBL[97] = 1;\nisoBandNextYBL[73] = isoBandNextYBL[97] = 0;\nisoBandNextOBL[73] = isoBandNextOBL[97] = 0;\nisoBandNextXTL[73] = isoBandNextXTL[97] = 1;\nisoBandNextYTL[73] = isoBandNextYTL[97] = 0;\nisoBandNextOTL[73] = isoBandNextOTL[97] = 1;\n\nisoBandNextXRT[145] = isoBandNextXRT[25] = 0;\nisoBandNextYRT[145] = isoBandNextYRT[25] = -1;\nisoBandNextORT[145] = isoBandNextORT[25] = 0;\nisoBandNextXBL[145] = isoBandNextXBL[25] = 1;\nisoBandNextYBL[145] = isoBandNextYBL[25] = 0;\nisoBandNextOBL[145] = isoBandNextOBL[25] = 1;\nisoBandNextXLB[145] = isoBandNextXLB[25] = 0;\nisoBandNextYLB[145] = isoBandNextYLB[25] = 1;\nisoBandNextOLB[145] = isoBandNextOLB[25] = 1;\nisoBandNextXTR[145] = isoBandNextXTR[25] = -1;\nisoBandNextYTR[145] = isoBandNextYTR[25] = 0;\nisoBandNextOTR[145] = isoBandNextOTR[25] = 0;\n\nisoBandNextXRB[70] = isoBandNextXRB[100] = 0;\nisoBandNextYRB[70] = isoBandNextYRB[100] = 1;\nisoBandNextORB[70] = isoBandNextORB[100] = 0;\nisoBandNextXBR[70] = isoBandNextXBR[100] = -1;\nisoBandNextYBR[70] = isoBandNextYBR[100] = 0;\nisoBandNextOBR[70] = isoBandNextOBR[100] = 1;\nisoBandNextXLT[70] = isoBandNextXLT[100] = 0;\nisoBandNextYLT[70] = isoBandNextYLT[100] = -1;\nisoBandNextOLT[70] = isoBandNextOLT[100] = 1;\nisoBandNextXTL[70] = isoBandNextXTL[100] = 1;\nisoBandNextYTL[70] = isoBandNextYTL[100] = 0;\nisoBandNextOTL[70] = isoBandNextOTL[100] = 0;\n\n/* single pentagon cases */\nisoBandNextXRB[101] = isoBandNextXRB[69] = 0;\nisoBandNextYRB[101] = isoBandNextYRB[69] = 1;\nisoBandNextORB[101] = isoBandNextORB[69] = 0;\nisoBandNextXTL[101] = isoBandNextXTL[69] = 1;\nisoBandNextYTL[101] = isoBandNextYTL[69] = 0;\nisoBandNextOTL[101] = isoBandNextOTL[69] = 0;\n\nisoBandNextXLB[149] = isoBandNextXLB[21] = 0;\nisoBandNextYLB[149] = isoBandNextYLB[21] = 1;\nisoBandNextOLB[149] = isoBandNextOLB[21] = 1;\nisoBandNextXTR[149] = isoBandNextXTR[21] = -1;\nisoBandNextYTR[149] = isoBandNextYTR[21] = 0;\nisoBandNextOTR[149] = isoBandNextOTR[21] = 0;\n\nisoBandNextXBR[86] = isoBandNextXBR[84] = -1;\nisoBandNextYBR[86] = isoBandNextYBR[84] = 0;\nisoBandNextOBR[86] = isoBandNextOBR[84] = 1;\nisoBandNextXLT[86] = isoBandNextXLT[84] = 0;\nisoBandNextYLT[86] = isoBandNextYLT[84] = -1;\nisoBandNextOLT[86] = isoBandNextOLT[84] = 1;\n\nisoBandNextXRT[89] = isoBandNextXRT[81] = 0;\nisoBandNextYRT[89] = isoBandNextYRT[81] = -1;\nisoBandNextORT[89] = isoBandNextORT[81] = 0;\nisoBandNextXBL[89] = isoBandNextXBL[81] = 1;\nisoBandNextYBL[89] = isoBandNextYBL[81] = 0;\nisoBandNextOBL[89] = isoBandNextOBL[81] = 1;\n\nisoBandNextXRT[96] = isoBandNextXRT[74] = 0;\nisoBandNextYRT[96] = isoBandNextYRT[74] = 1;\nisoBandNextORT[96] = isoBandNextORT[74] = 0;\nisoBandNextXRB[96] = isoBandNextXRB[74] = -1;\nisoBandNextYRB[96] = isoBandNextYRB[74] = 0;\nisoBandNextORB[96] = isoBandNextORB[74] = 1;\nisoBandNextXLT[96] = isoBandNextXLT[74] = 1;\nisoBandNextYLT[96] = isoBandNextYLT[74] = 0;\nisoBandNextOLT[96] = isoBandNextOLT[74] = 0;\nisoBandNextXTL[96] = isoBandNextXTL[74] = 1;\nisoBandNextYTL[96] = isoBandNextYTL[74] = 0;\nisoBandNextOTL[96] = isoBandNextOTL[74] = 1;\n\nisoBandNextXRT[24] = isoBandNextXRT[146] = 0;\nisoBandNextYRT[24] = isoBandNextYRT[146] = -1;\nisoBandNextORT[24] = isoBandNextORT[146] = 1;\nisoBandNextXBR[24] = isoBandNextXBR[146] = 1;\nisoBandNextYBR[24] = isoBandNextYBR[146] = 0;\nisoBandNextOBR[24] = isoBandNextOBR[146] = 1;\nisoBandNextXBL[24] = isoBandNextXBL[146] = 0;\nisoBandNextYBL[24] = isoBandNextYBL[146] = 1;\nisoBandNextOBL[24] = isoBandNextOBL[146] = 1;\nisoBandNextXTR[24] = isoBandNextXTR[146] = 0;\nisoBandNextYTR[24] = isoBandNextYTR[146] = -1;\nisoBandNextOTR[24] = isoBandNextOTR[146] = 0;\n\nisoBandNextXRB[6] = isoBandNextXRB[164] = -1;\nisoBandNextYRB[6] = isoBandNextYRB[164] = 0;\nisoBandNextORB[6] = isoBandNextORB[164] = 1;\nisoBandNextXBR[6] = isoBandNextXBR[164] = -1;\nisoBandNextYBR[6] = isoBandNextYBR[164] = 0;\nisoBandNextOBR[6] = isoBandNextOBR[164] = 0;\nisoBandNextXLB[6] = isoBandNextXLB[164] = 0;\nisoBandNextYLB[6] = isoBandNextYLB[164] = -1;\nisoBandNextOLB[6] = isoBandNextOLB[164] = 1;\nisoBandNextXLT[6] = isoBandNextXLT[164] = 1;\nisoBandNextYLT[6] = isoBandNextYLT[164] = 0;\nisoBandNextOLT[6] = isoBandNextOLT[164] = 0;\n\nisoBandNextXBL[129] = isoBandNextXBL[41] = 0;\nisoBandNextYBL[129] = isoBandNextYBL[41] = 1;\nisoBandNextOBL[129] = isoBandNextOBL[41] = 1;\nisoBandNextXLB[129] = isoBandNextXLB[41] = 0;\nisoBandNextYLB[129] = isoBandNextYLB[41] = 1;\nisoBandNextOLB[129] = isoBandNextOLB[41] = 0;\nisoBandNextXTL[129] = isoBandNextXTL[41] = -1;\nisoBandNextYTL[129] = isoBandNextYTL[41] = 0;\nisoBandNextOTL[129] = isoBandNextOTL[41] = 0;\nisoBandNextXTR[129] = isoBandNextXTR[41] = 0;\nisoBandNextYTR[129] = isoBandNextYTR[41] = -1;\nisoBandNextOTR[129] = isoBandNextOTR[41] = 0;\n\nisoBandNextXBR[66] = isoBandNextXBR[104] = 0;\nisoBandNextYBR[66] = isoBandNextYBR[104] = 1;\nisoBandNextOBR[66] = isoBandNextOBR[104] = 0;\nisoBandNextXBL[66] = isoBandNextXBL[104] = -1;\nisoBandNextYBL[66] = isoBandNextYBL[104] = 0;\nisoBandNextOBL[66] = isoBandNextOBL[104] = 1;\nisoBandNextXLT[66] = isoBandNextXLT[104] = 0;\nisoBandNextYLT[66] = isoBandNextYLT[104] = -1;\nisoBandNextOLT[66] = isoBandNextOLT[104] = 0;\nisoBandNextXTL[66] = isoBandNextXTL[104] = 0;\nisoBandNextYTL[66] = isoBandNextYTL[104] = -1;\nisoBandNextOTL[66] = isoBandNextOTL[104] = 1;\n\nisoBandNextXRT[144] = isoBandNextXRT[26] = -1;\nisoBandNextYRT[144] = isoBandNextYRT[26] = 0;\nisoBandNextORT[144] = isoBandNextORT[26] = 0;\nisoBandNextXLB[144] = isoBandNextXLB[26] = 1;\nisoBandNextYLB[144] = isoBandNextYLB[26] = 0;\nisoBandNextOLB[144] = isoBandNextOLB[26] = 1;\nisoBandNextXLT[144] = isoBandNextXLT[26] = 0;\nisoBandNextYLT[144] = isoBandNextYLT[26] = 1;\nisoBandNextOLT[144] = isoBandNextOLT[26] = 1;\nisoBandNextXTR[144] = isoBandNextXTR[26] = -1;\nisoBandNextYTR[144] = isoBandNextYTR[26] = 0;\nisoBandNextOTR[144] = isoBandNextOTR[26] = 1;\n\nisoBandNextXRB[36] = isoBandNextXRB[134] = 0;\nisoBandNextYRB[36] = isoBandNextYRB[134] = 1;\nisoBandNextORB[36] = isoBandNextORB[134] = 1;\nisoBandNextXBR[36] = isoBandNextXBR[134] = 0;\nisoBandNextYBR[36] = isoBandNextYBR[134] = 1;\nisoBandNextOBR[36] = isoBandNextOBR[134] = 0;\nisoBandNextXTL[36] = isoBandNextXTL[134] = 0;\nisoBandNextYTL[36] = isoBandNextYTL[134] = -1;\nisoBandNextOTL[36] = isoBandNextOTL[134] = 1;\nisoBandNextXTR[36] = isoBandNextXTR[134] = 1;\nisoBandNextYTR[36] = isoBandNextYTR[134] = 0;\nisoBandNextOTR[36] = isoBandNextOTR[134] = 0;\n\nisoBandNextXRT[9] = isoBandNextXRT[161] = -1;\nisoBandNextYRT[9] = isoBandNextYRT[161] = 0;\nisoBandNextORT[9] = isoBandNextORT[161] = 0;\nisoBandNextXRB[9] = isoBandNextXRB[161] = 0;\nisoBandNextYRB[9] = isoBandNextYRB[161] = -1;\nisoBandNextORB[9] = isoBandNextORB[161] = 0;\nisoBandNextXBL[9] = isoBandNextXBL[161] = 1;\nisoBandNextYBL[9] = isoBandNextYBL[161] = 0;\nisoBandNextOBL[9] = isoBandNextOBL[161] = 0;\nisoBandNextXLB[9] = isoBandNextXLB[161] = 1;\nisoBandNextYLB[9] = isoBandNextYLB[161] = 0;\nisoBandNextOLB[9] = isoBandNextOLB[161] = 1;\n\n/* 8-sided cases */\nisoBandNextXRT[136] = 0;\nisoBandNextYRT[136] = 1;\nisoBandNextORT[136] = 1;\nisoBandNextXRB[136] = 0;\nisoBandNextYRB[136] = 1;\nisoBandNextORB[136] = 0;\nisoBandNextXBR[136] = -1;\nisoBandNextYBR[136] = 0;\nisoBandNextOBR[136] = 1;\nisoBandNextXBL[136] = -1;\nisoBandNextYBL[136] = 0;\nisoBandNextOBL[136] = 0;\nisoBandNextXLB[136] = 0;\nisoBandNextYLB[136] = -1;\nisoBandNextOLB[136] = 0;\nisoBandNextXLT[136] = 0;\nisoBandNextYLT[136] = -1;\nisoBandNextOLT[136] = 1;\nisoBandNextXTL[136] = 1;\nisoBandNextYTL[136] = 0;\nisoBandNextOTL[136] = 0;\nisoBandNextXTR[136] = 1;\nisoBandNextYTR[136] = 0;\nisoBandNextOTR[136] = 1;\n\nisoBandNextXRT[34] = 0;\nisoBandNextYRT[34] = -1;\nisoBandNextORT[34] = 0;\nisoBandNextXRB[34] = 0;\nisoBandNextYRB[34] = -1;\nisoBandNextORB[34] = 1;\nisoBandNextXBR[34] = 1;\nisoBandNextYBR[34] = 0;\nisoBandNextOBR[34] = 0;\nisoBandNextXBL[34] = 1;\nisoBandNextYBL[34] = 0;\nisoBandNextOBL[34] = 1;\nisoBandNextXLB[34] = 0;\nisoBandNextYLB[34] = 1;\nisoBandNextOLB[34] = 1;\nisoBandNextXLT[34] = 0;\nisoBandNextYLT[34] = 1;\nisoBandNextOLT[34] = 0;\nisoBandNextXTL[34] = -1;\nisoBandNextYTL[34] = 0;\nisoBandNextOTL[34] = 1;\nisoBandNextXTR[34] = -1;\nisoBandNextYTR[34] = 0;\nisoBandNextOTR[34] = 0;\n\nisoBandNextXRT[35] = 0;\nisoBandNextYRT[35] = 1;\nisoBandNextORT[35] = 1;\nisoBandNextXRB[35] = 0;\nisoBandNextYRB[35] = -1;\nisoBandNextORB[35] = 1;\nisoBandNextXBR[35] = 1;\nisoBandNextYBR[35] = 0;\nisoBandNextOBR[35] = 0;\nisoBandNextXBL[35] = -1;\nisoBandNextYBL[35] = 0;\nisoBandNextOBL[35] = 0;\nisoBandNextXLB[35] = 0;\nisoBandNextYLB[35] = -1;\nisoBandNextOLB[35] = 0;\nisoBandNextXLT[35] = 0;\nisoBandNextYLT[35] = 1;\nisoBandNextOLT[35] = 0;\nisoBandNextXTL[35] = -1;\nisoBandNextYTL[35] = 0;\nisoBandNextOTL[35] = 1;\nisoBandNextXTR[35] = 1;\nisoBandNextYTR[35] = 0;\nisoBandNextOTR[35] = 1;\n\n/* 6-sided cases */\nisoBandNextXRT[153] = 0;\nisoBandNextYRT[153] = 1;\nisoBandNextORT[153] = 1;\nisoBandNextXBL[153] = -1;\nisoBandNextYBL[153] = 0;\nisoBandNextOBL[153] = 0;\nisoBandNextXLB[153] = 0;\nisoBandNextYLB[153] = -1;\nisoBandNextOLB[153] = 0;\nisoBandNextXTR[153] = 1;\nisoBandNextYTR[153] = 0;\nisoBandNextOTR[153] = 1;\n\nisoBandNextXRB[102] = 0;\nisoBandNextYRB[102] = -1;\nisoBandNextORB[102] = 1;\nisoBandNextXBR[102] = 1;\nisoBandNextYBR[102] = 0;\nisoBandNextOBR[102] = 0;\nisoBandNextXLT[102] = 0;\nisoBandNextYLT[102] = 1;\nisoBandNextOLT[102] = 0;\nisoBandNextXTL[102] = -1;\nisoBandNextYTL[102] = 0;\nisoBandNextOTL[102] = 1;\n\nisoBandNextXRT[155] = 0;\nisoBandNextYRT[155] = -1;\nisoBandNextORT[155] = 0;\nisoBandNextXBL[155] = 1;\nisoBandNextYBL[155] = 0;\nisoBandNextOBL[155] = 1;\nisoBandNextXLB[155] = 0;\nisoBandNextYLB[155] = 1;\nisoBandNextOLB[155] = 1;\nisoBandNextXTR[155] = -1;\nisoBandNextYTR[155] = 0;\nisoBandNextOTR[155] = 0;\n\nisoBandNextXRB[103] = 0;\nisoBandNextYRB[103] = 1;\nisoBandNextORB[103] = 0;\nisoBandNextXBR[103] = -1;\nisoBandNextYBR[103] = 0;\nisoBandNextOBR[103] = 1;\nisoBandNextXLT[103] = 0;\nisoBandNextYLT[103] = -1;\nisoBandNextOLT[103] = 1;\nisoBandNextXTL[103] = 1;\nisoBandNextYTL[103] = 0;\nisoBandNextOTL[103] = 0;\n\n/* 7-sided cases */\nisoBandNextXRT[152] = 0;\nisoBandNextYRT[152] = 1;\nisoBandNextORT[152] = 1;\nisoBandNextXBR[152] = -1;\nisoBandNextYBR[152] = 0;\nisoBandNextOBR[152] = 1;\nisoBandNextXBL[152] = -1;\nisoBandNextYBL[152] = 0;\nisoBandNextOBL[152] = 0;\nisoBandNextXLB[152] = 0;\nisoBandNextYLB[152] = -1;\nisoBandNextOLB[152] = 0;\nisoBandNextXLT[152] = 0;\nisoBandNextYLT[152] = -1;\nisoBandNextOLT[152] = 1;\nisoBandNextXTR[152] = 1;\nisoBandNextYTR[152] = 0;\nisoBandNextOTR[152] = 1;\n\nisoBandNextXRT[156] = 0;\nisoBandNextYRT[156] = -1;\nisoBandNextORT[156] = 1;\nisoBandNextXBR[156] = 1;\nisoBandNextYBR[156] = 0;\nisoBandNextOBR[156] = 1;\nisoBandNextXBL[156] = -1;\nisoBandNextYBL[156] = 0;\nisoBandNextOBL[156] = 0;\nisoBandNextXLB[156] = 0;\nisoBandNextYLB[156] = -1;\nisoBandNextOLB[156] = 0;\nisoBandNextXLT[156] = 0;\nisoBandNextYLT[156] = 1;\nisoBandNextOLT[156] = 1;\nisoBandNextXTR[156] = -1;\nisoBandNextYTR[156] = 0;\nisoBandNextOTR[156] = 1;\n\nisoBandNextXRT[137] = 0;\nisoBandNextYRT[137] = 1;\nisoBandNextORT[137] = 1;\nisoBandNextXRB[137] = 0;\nisoBandNextYRB[137] = 1;\nisoBandNextORB[137] = 0;\nisoBandNextXBL[137] = -1;\nisoBandNextYBL[137] = 0;\nisoBandNextOBL[137] = 0;\nisoBandNextXLB[137] = 0;\nisoBandNextYLB[137] = -1;\nisoBandNextOLB[137] = 0;\nisoBandNextXTL[137] = 1;\nisoBandNextYTL[137] = 0;\nisoBandNextOTL[137] = 0;\nisoBandNextXTR[137] = 1;\nisoBandNextYTR[137] = 0;\nisoBandNextOTR[137] = 1;\n\nisoBandNextXRT[139] = 0;\nisoBandNextYRT[139] = 1;\nisoBandNextORT[139] = 1;\nisoBandNextXRB[139] = 0;\nisoBandNextYRB[139] = -1;\nisoBandNextORB[139] = 0;\nisoBandNextXBL[139] = 1;\nisoBandNextYBL[139] = 0;\nisoBandNextOBL[139] = 0;\nisoBandNextXLB[139] = 0;\nisoBandNextYLB[139] = 1;\nisoBandNextOLB[139] = 0;\nisoBandNextXTL[139] = -1;\nisoBandNextYTL[139] = 0;\nisoBandNextOTL[139] = 0;\nisoBandNextXTR[139] = 1;\nisoBandNextYTR[139] = 0;\nisoBandNextOTR[139] = 1;\n\nisoBandNextXRT[98] = 0;\nisoBandNextYRT[98] = -1;\nisoBandNextORT[98] = 0;\nisoBandNextXRB[98] = 0;\nisoBandNextYRB[98] = -1;\nisoBandNextORB[98] = 1;\nisoBandNextXBR[98] = 1;\nisoBandNextYBR[98] = 0;\nisoBandNextOBR[98] = 0;\nisoBandNextXBL[98] = 1;\nisoBandNextYBL[98] = 0;\nisoBandNextOBL[98] = 1;\nisoBandNextXLT[98] = 0;\nisoBandNextYLT[98] = 1;\nisoBandNextOLT[98] = 0;\nisoBandNextXTL[98] = -1;\nisoBandNextYTL[98] = 0;\nisoBandNextOTL[98] = 1;\n\nisoBandNextXRT[99] = 0;\nisoBandNextYRT[99] = 1;\nisoBandNextORT[99] = 0;\nisoBandNextXRB[99] = 0;\nisoBandNextYRB[99] = -1;\nisoBandNextORB[99] = 1;\nisoBandNextXBR[99] = 1;\nisoBandNextYBR[99] = 0;\nisoBandNextOBR[99] = 0;\nisoBandNextXBL[99] = -1;\nisoBandNextYBL[99] = 0;\nisoBandNextOBL[99] = 1;\nisoBandNextXLT[99] = 0;\nisoBandNextYLT[99] = -1;\nisoBandNextOLT[99] = 0;\nisoBandNextXTL[99] = 1;\nisoBandNextYTL[99] = 0;\nisoBandNextOTL[99] = 1;\n\nisoBandNextXRB[38] = 0;\nisoBandNextYRB[38] = -1;\nisoBandNextORB[38] = 1;\nisoBandNextXBR[38] = 1;\nisoBandNextYBR[38] = 0;\nisoBandNextOBR[38] = 0;\nisoBandNextXLB[38] = 0;\nisoBandNextYLB[38] = 1;\nisoBandNextOLB[38] = 1;\nisoBandNextXLT[38] = 0;\nisoBandNextYLT[38] = 1;\nisoBandNextOLT[38] = 0;\nisoBandNextXTL[38] = -1;\nisoBandNextYTL[38] = 0;\nisoBandNextOTL[38] = 1;\nisoBandNextXTR[38] = -1;\nisoBandNextYTR[38] = 0;\nisoBandNextOTR[38] = 0;\n\nisoBandNextXRB[39] = 0;\nisoBandNextYRB[39] = 1;\nisoBandNextORB[39] = 1;\nisoBandNextXBR[39] = -1;\nisoBandNextYBR[39] = 0;\nisoBandNextOBR[39] = 0;\nisoBandNextXLB[39] = 0;\nisoBandNextYLB[39] = -1;\nisoBandNextOLB[39] = 1;\nisoBandNextXLT[39] = 0;\nisoBandNextYLT[39] = 1;\nisoBandNextOLT[39] = 0;\nisoBandNextXTL[39] = -1;\nisoBandNextYTL[39] = 0;\nisoBandNextOTL[39] = 1;\nisoBandNextXTR[39] = 1;\nisoBandNextYTR[39] = 0;\nisoBandNextOTR[39] = 0;\n\n/*\n Define helper functions for the polygon_table\n */\n\n/* triangle cases */\nvar p00 = function (cell) {\n return [\n [cell.bottomleft, 0],\n [0, 0],\n [0, cell.leftbottom],\n ];\n};\nvar p01 = function (cell) {\n return [\n [1, cell.rightbottom],\n [1, 0],\n [cell.bottomright, 0],\n ];\n};\nvar p02 = function (cell) {\n return [\n [cell.topright, 1],\n [1, 1],\n [1, cell.righttop],\n ];\n};\nvar p03 = function (cell) {\n return [\n [0, cell.lefttop],\n [0, 1],\n [cell.topleft, 1],\n ];\n};\n/* trapezoid cases */\nvar p04 = function (cell) {\n return [\n [cell.bottomright, 0],\n [cell.bottomleft, 0],\n [0, cell.leftbottom],\n [0, cell.lefttop],\n ];\n};\nvar p05 = function (cell) {\n return [\n [cell.bottomright, 0],\n [cell.bottomleft, 0],\n [1, cell.righttop],\n [1, cell.rightbottom],\n ];\n};\nvar p06 = function (cell) {\n return [\n [1, cell.righttop],\n [1, cell.rightbottom],\n [cell.topleft, 1],\n [cell.topright, 1],\n ];\n};\nvar p07 = function (cell) {\n return [\n [0, cell.leftbottom],\n [0, cell.lefttop],\n [cell.topleft, 1],\n [cell.topright, 1],\n ];\n};\n/* rectangle cases */\nvar p08 = function (cell) {\n return [\n [0, 0],\n [0, cell.leftbottom],\n [1, cell.rightbottom],\n [1, 0],\n ];\n};\nvar p09 = function (cell) {\n return [\n [1, 0],\n [cell.bottomright, 0],\n [cell.topright, 1],\n [1, 1],\n ];\n};\nvar p10 = function (cell) {\n return [\n [1, 1],\n [1, cell.righttop],\n [0, cell.lefttop],\n [0, 1],\n ];\n};\nvar p11 = function (cell) {\n return [\n [cell.bottomleft, 0],\n [0, 0],\n [0, 1],\n [cell.topleft, 1],\n ];\n};\nvar p12 = function (cell) {\n return [\n [1, cell.righttop],\n [1, cell.rightbottom],\n [0, cell.leftbottom],\n [0, cell.lefttop],\n ];\n};\nvar p13 = function (cell) {\n return [\n [cell.topleft, 1],\n [cell.topright, 1],\n [cell.bottomright, 0],\n [cell.bottomleft, 0],\n ];\n};\n/* square case */\nvar p14 = function () {\n return [\n [0, 0],\n [0, 1],\n [1, 1],\n [1, 0],\n ];\n};\n/* pentagon cases */\nvar p15 = function (cell) {\n return [\n [1, cell.rightbottom],\n [1, 0],\n [0, 0],\n [0, 1],\n [cell.topleft, 1],\n ];\n};\n/* 1211 || 1011 */\nvar p16 = function (cell) {\n return [\n [cell.topright, 1],\n [1, 1],\n [1, 0],\n [0, 0],\n [0, cell.leftbottom],\n ];\n};\n/* 2111 || 0111 */\nvar p17 = function (cell) {\n return [\n [1, 0],\n [cell.bottomright, 0],\n [0, cell.lefttop],\n [0, 1],\n [1, 1],\n ];\n};\n/* 1112 || 1110 */\nvar p18 = function (cell) {\n return [\n [1, 1],\n [1, cell.righttop],\n [cell.bottomleft, 0],\n [0, 0],\n [0, 1],\n ];\n};\n/* 1121 || 1101 */\nvar p19 = function (cell) {\n return [\n [1, cell.righttop],\n [1, cell.rightbottom],\n [0, cell.lefttop],\n [0, 1],\n [cell.topleft, 1],\n ];\n};\n/* 1200 || 1022 */\nvar p20 = function (cell) {\n return [\n [1, 1],\n [1, cell.righttop],\n [cell.bottomright, 0],\n [cell.bottomleft, 0],\n [cell.topright, 1],\n ];\n};\n/* 0120 || 2102 */\nvar p21 = function (cell) {\n return [\n [1, cell.rightbottom],\n [1, 0],\n [cell.bottomright, 0],\n [0, cell.leftbottom],\n [0, cell.lefttop],\n ];\n};\n/* 0012 || 2210 */\nvar p22 = function (cell) {\n return [\n [cell.topright, 1],\n [cell.bottomleft, 0],\n [0, 0],\n [0, cell.leftbottom],\n [cell.topleft, 1],\n ];\n};\n/* 2001 || 0221 */\nvar p23 = function (cell) {\n return [\n [cell.bottomright, 0],\n [cell.bottomleft, 0],\n [0, cell.lefttop],\n [0, 1],\n [cell.topleft, 1],\n ];\n};\n/* 1002 || 1220 */\nvar p24 = function (cell) {\n return [\n [1, 1],\n [1, cell.righttop],\n [0, cell.leftbottom],\n [0, cell.lefttop],\n [cell.topright, 1],\n ];\n};\n/* 2100 || 0122 */\nvar p25 = function (cell) {\n return [\n [1, cell.rightbottom],\n [1, 0],\n [cell.bottomright, 0],\n [cell.topleft, 1],\n [cell.topright, 1],\n ];\n};\n/* 0210 || 2012 */\nvar p26 = function (cell) {\n return [\n [1, cell.righttop],\n [1, cell.rightbottom],\n [cell.bottomleft, 0],\n [0, 0],\n [0, cell.leftbottom],\n ];\n};\n/* 0021 || 2201 */\n/*hexagon cases */\nvar p27 = function (cell) {\n return [\n [1, cell.rightbottom],\n [1, 0],\n [0, 0],\n [0, cell.leftbottom],\n [cell.topleft, 1],\n [cell.topright, 1],\n ];\n};\n/* 0211 || 2011 */\nvar p28 = function (cell) {\n return [\n [1, 1],\n [1, 0],\n [cell.bottomright, 0],\n [0, cell.leftbottom],\n [0, cell.lefttop],\n [cell.topright, 1],\n ];\n};\n/* 2110 || 0112 */\nvar p29 = function (cell) {\n return [\n [1, 1],\n [1, cell.righttop],\n [cell.bottomright, 0],\n [cell.bottomleft, 0],\n [0, cell.lefttop],\n [0, 1],\n ];\n};\n/* 1102 || 1120 */\nvar p30 = function (cell) {\n return [\n [1, cell.righttop],\n [1, cell.rightbottom],\n [cell.bottomleft, 0],\n [0, 0],\n [0, 1],\n [cell.topleft, 1],\n ];\n};\n/* 1021 || 1201 */\nvar p31 = function (cell) {\n return [\n [1, 1],\n [1, cell.righttop],\n [cell.bottomleft, 0],\n [0, 0],\n [0, cell.leftbottom],\n [cell.topright, 1],\n ];\n};\n/* 2101 || 0121 */\nvar p32 = function (cell) {\n return [\n [1, cell.rightbottom],\n [1, 0],\n [cell.bottomright, 0],\n [0, cell.lefttop],\n [0, 1],\n [cell.topleft, 1],\n ];\n};\n/* 1012 || 1210 */\n/* 8-sided cases */\nvar p33 = function (cell) {\n return [\n [1, cell.righttop],\n [1, cell.rightbottom],\n [cell.bottomright, 0],\n [cell.bottomleft, 0],\n [0, cell.leftbottom],\n [0, cell.lefttop],\n [cell.topleft, 1],\n [cell.topright, 1],\n ];\n};\n/* flipped == 1 state for 0202 and 2020 */\n/* 6-sided cases */\nvar p34 = function (cell) {\n return [\n [1, 1],\n [1, cell.righttop],\n [cell.bottomleft, 0],\n [0, 0],\n [0, cell.leftbottom],\n [cell.topright, 1],\n ];\n};\n/* 0101 with flipped == 1 || 2121 with flipped == 1 */\nvar p35 = function (cell) {\n return [\n [1, cell.rightbottom],\n [1, 0],\n [cell.bottomright, 0],\n [0, cell.lefttop],\n [0, 1],\n [cell.topleft, 1],\n ];\n};\n/* 1010 with flipped == 1 || 1212 with flipped == 1 */\n/* 7-sided cases */\nvar p36 = function (cell) {\n return [\n [1, 1],\n [1, cell.righttop],\n [cell.bottomright, 0],\n [cell.bottomleft, 0],\n [0, cell.leftbottom],\n [0, cell.lefttop],\n [cell.topright, 1],\n ];\n};\n/* 2120 with flipped == 1 || 0102 with flipped == 1 */\nvar p37 = function (cell) {\n return [\n [1, cell.righttop],\n [1, cell.rightbottom],\n [cell.bottomleft, 0],\n [0, 0],\n [0, cell.leftbottom],\n [cell.topleft, 1],\n [cell.topright, 1],\n ];\n};\n/* 2021 with flipped == 1 || 0201 with flipped == 1 */\nvar p38 = function (cell) {\n return [\n [1, cell.righttop],\n [1, cell.rightbottom],\n [cell.bottomright, 0],\n [cell.bottomleft, 0],\n [0, cell.lefttop],\n [0, 1],\n [cell.topleft, 1],\n ];\n};\n/* 1202 with flipped == 1 || 1020 with flipped == 1 */\nvar p39 = function (cell) {\n return [\n [1, cell.rightbottom],\n [1, 0],\n [cell.bottomright, 0],\n [0, cell.leftbottom],\n [0, cell.lefttop],\n [cell.topleft, 1],\n [cell.topright, 1],\n ];\n};\n/* 0212 with flipped == 1 || 2010 with flipped == 1 */\n\n/*\n The lookup tables for edge number given the polygon\n is entered at a specific location\n*/\n\nvar isoBandEdgeRT = [];\nvar isoBandEdgeRB = [];\nvar isoBandEdgeBR = [];\nvar isoBandEdgeBL = [];\nvar isoBandEdgeLB = [];\nvar isoBandEdgeLT = [];\nvar isoBandEdgeTL = [];\nvar isoBandEdgeTR = [];\n\n/* triangle cases */\nisoBandEdgeBL[1] = isoBandEdgeLB[1] = 18;\nisoBandEdgeBL[169] = isoBandEdgeLB[169] = 18;\nisoBandEdgeBR[4] = isoBandEdgeRB[4] = 12;\nisoBandEdgeBR[166] = isoBandEdgeRB[166] = 12;\nisoBandEdgeRT[16] = isoBandEdgeTR[16] = 4;\nisoBandEdgeRT[154] = isoBandEdgeTR[154] = 4;\nisoBandEdgeLT[64] = isoBandEdgeTL[64] = 22;\nisoBandEdgeLT[106] = isoBandEdgeTL[106] = 22;\n\n/* trapezoid cases */\nisoBandEdgeBR[2] = isoBandEdgeLT[2] = 17;\nisoBandEdgeBL[2] = isoBandEdgeLB[2] = 18;\nisoBandEdgeBR[168] = isoBandEdgeLT[168] = 17;\nisoBandEdgeBL[168] = isoBandEdgeLB[168] = 18;\nisoBandEdgeRT[8] = isoBandEdgeBL[8] = 9;\nisoBandEdgeRB[8] = isoBandEdgeBR[8] = 12;\nisoBandEdgeRT[162] = isoBandEdgeBL[162] = 9;\nisoBandEdgeRB[162] = isoBandEdgeBR[162] = 12;\nisoBandEdgeRT[32] = isoBandEdgeTR[32] = 4;\nisoBandEdgeRB[32] = isoBandEdgeTL[32] = 1;\nisoBandEdgeRT[138] = isoBandEdgeTR[138] = 4;\nisoBandEdgeRB[138] = isoBandEdgeTL[138] = 1;\nisoBandEdgeLB[128] = isoBandEdgeTR[128] = 21;\nisoBandEdgeLT[128] = isoBandEdgeTL[128] = 22;\nisoBandEdgeLB[42] = isoBandEdgeTR[42] = 21;\nisoBandEdgeLT[42] = isoBandEdgeTL[42] = 22;\n\n/* rectangle cases */\nisoBandEdgeRB[5] = isoBandEdgeLB[5] = 14;\nisoBandEdgeRB[165] = isoBandEdgeLB[165] = 14;\nisoBandEdgeBR[20] = isoBandEdgeTR[20] = 6;\nisoBandEdgeBR[150] = isoBandEdgeTR[150] = 6;\nisoBandEdgeRT[80] = isoBandEdgeLT[80] = 11;\nisoBandEdgeRT[90] = isoBandEdgeLT[90] = 11;\nisoBandEdgeBL[65] = isoBandEdgeTL[65] = 3;\nisoBandEdgeBL[105] = isoBandEdgeTL[105] = 3;\nisoBandEdgeRT[160] = isoBandEdgeLT[160] = 11;\nisoBandEdgeRB[160] = isoBandEdgeLB[160] = 14;\nisoBandEdgeRT[10] = isoBandEdgeLT[10] = 11;\nisoBandEdgeRB[10] = isoBandEdgeLB[10] = 14;\nisoBandEdgeBR[130] = isoBandEdgeTR[130] = 6;\nisoBandEdgeBL[130] = isoBandEdgeTL[130] = 3;\nisoBandEdgeBR[40] = isoBandEdgeTR[40] = 6;\nisoBandEdgeBL[40] = isoBandEdgeTL[40] = 3;\n\n/* pentagon cases */\nisoBandEdgeRB[101] = isoBandEdgeTL[101] = 1;\nisoBandEdgeRB[69] = isoBandEdgeTL[69] = 1;\nisoBandEdgeLB[149] = isoBandEdgeTR[149] = 21;\nisoBandEdgeLB[21] = isoBandEdgeTR[21] = 21;\nisoBandEdgeBR[86] = isoBandEdgeLT[86] = 17;\nisoBandEdgeBR[84] = isoBandEdgeLT[84] = 17;\nisoBandEdgeRT[89] = isoBandEdgeBL[89] = 9;\nisoBandEdgeRT[81] = isoBandEdgeBL[81] = 9;\nisoBandEdgeRT[96] = isoBandEdgeTL[96] = 0;\nisoBandEdgeRB[96] = isoBandEdgeLT[96] = 15;\nisoBandEdgeRT[74] = isoBandEdgeTL[74] = 0;\nisoBandEdgeRB[74] = isoBandEdgeLT[74] = 15;\nisoBandEdgeRT[24] = isoBandEdgeBR[24] = 8;\nisoBandEdgeBL[24] = isoBandEdgeTR[24] = 7;\nisoBandEdgeRT[146] = isoBandEdgeBR[146] = 8;\nisoBandEdgeBL[146] = isoBandEdgeTR[146] = 7;\nisoBandEdgeRB[6] = isoBandEdgeLT[6] = 15;\nisoBandEdgeBR[6] = isoBandEdgeLB[6] = 16;\nisoBandEdgeRB[164] = isoBandEdgeLT[164] = 15;\nisoBandEdgeBR[164] = isoBandEdgeLB[164] = 16;\nisoBandEdgeBL[129] = isoBandEdgeTR[129] = 7;\nisoBandEdgeLB[129] = isoBandEdgeTL[129] = 20;\nisoBandEdgeBL[41] = isoBandEdgeTR[41] = 7;\nisoBandEdgeLB[41] = isoBandEdgeTL[41] = 20;\nisoBandEdgeBR[66] = isoBandEdgeTL[66] = 2;\nisoBandEdgeBL[66] = isoBandEdgeLT[66] = 19;\nisoBandEdgeBR[104] = isoBandEdgeTL[104] = 2;\nisoBandEdgeBL[104] = isoBandEdgeLT[104] = 19;\nisoBandEdgeRT[144] = isoBandEdgeLB[144] = 10;\nisoBandEdgeLT[144] = isoBandEdgeTR[144] = 23;\nisoBandEdgeRT[26] = isoBandEdgeLB[26] = 10;\nisoBandEdgeLT[26] = isoBandEdgeTR[26] = 23;\nisoBandEdgeRB[36] = isoBandEdgeTR[36] = 5;\nisoBandEdgeBR[36] = isoBandEdgeTL[36] = 2;\nisoBandEdgeRB[134] = isoBandEdgeTR[134] = 5;\nisoBandEdgeBR[134] = isoBandEdgeTL[134] = 2;\nisoBandEdgeRT[9] = isoBandEdgeLB[9] = 10;\nisoBandEdgeRB[9] = isoBandEdgeBL[9] = 13;\nisoBandEdgeRT[161] = isoBandEdgeLB[161] = 10;\nisoBandEdgeRB[161] = isoBandEdgeBL[161] = 13;\n\n/* hexagon cases */\nisoBandEdgeRB[37] = isoBandEdgeTR[37] = 5;\nisoBandEdgeLB[37] = isoBandEdgeTL[37] = 20;\nisoBandEdgeRB[133] = isoBandEdgeTR[133] = 5;\nisoBandEdgeLB[133] = isoBandEdgeTL[133] = 20;\nisoBandEdgeBR[148] = isoBandEdgeLB[148] = 16;\nisoBandEdgeLT[148] = isoBandEdgeTR[148] = 23;\nisoBandEdgeBR[22] = isoBandEdgeLB[22] = 16;\nisoBandEdgeLT[22] = isoBandEdgeTR[22] = 23;\nisoBandEdgeRT[82] = isoBandEdgeBR[82] = 8;\nisoBandEdgeBL[82] = isoBandEdgeLT[82] = 19;\nisoBandEdgeRT[88] = isoBandEdgeBR[88] = 8;\nisoBandEdgeBL[88] = isoBandEdgeLT[88] = 19;\nisoBandEdgeRT[73] = isoBandEdgeTL[73] = 0;\nisoBandEdgeRB[73] = isoBandEdgeBL[73] = 13;\nisoBandEdgeRT[97] = isoBandEdgeTL[97] = 0;\nisoBandEdgeRB[97] = isoBandEdgeBL[97] = 13;\nisoBandEdgeRT[145] = isoBandEdgeBL[145] = 9;\nisoBandEdgeLB[145] = isoBandEdgeTR[145] = 21;\nisoBandEdgeRT[25] = isoBandEdgeBL[25] = 9;\nisoBandEdgeLB[25] = isoBandEdgeTR[25] = 21;\nisoBandEdgeRB[70] = isoBandEdgeTL[70] = 1;\nisoBandEdgeBR[70] = isoBandEdgeLT[70] = 17;\nisoBandEdgeRB[100] = isoBandEdgeTL[100] = 1;\nisoBandEdgeBR[100] = isoBandEdgeLT[100] = 17;\n\n/* 8-sided cases */\nisoBandEdgeRT[34] = isoBandEdgeBL[34] = 9;\nisoBandEdgeRB[34] = isoBandEdgeBR[34] = 12;\nisoBandEdgeLB[34] = isoBandEdgeTR[34] = 21;\nisoBandEdgeLT[34] = isoBandEdgeTL[34] = 22;\nisoBandEdgeRT[136] = isoBandEdgeTR[136] = 4;\nisoBandEdgeRB[136] = isoBandEdgeTL[136] = 1;\nisoBandEdgeBR[136] = isoBandEdgeLT[136] = 17;\nisoBandEdgeBL[136] = isoBandEdgeLB[136] = 18;\nisoBandEdgeRT[35] = isoBandEdgeTR[35] = 4;\nisoBandEdgeRB[35] = isoBandEdgeBR[35] = 12;\nisoBandEdgeBL[35] = isoBandEdgeLB[35] = 18;\nisoBandEdgeLT[35] = isoBandEdgeTL[35] = 22;\n\n/* 6-sided cases */\nisoBandEdgeRT[153] = isoBandEdgeTR[153] = 4;\nisoBandEdgeBL[153] = isoBandEdgeLB[153] = 18;\nisoBandEdgeRB[102] = isoBandEdgeBR[102] = 12;\nisoBandEdgeLT[102] = isoBandEdgeTL[102] = 22;\nisoBandEdgeRT[155] = isoBandEdgeBL[155] = 9;\nisoBandEdgeLB[155] = isoBandEdgeTR[155] = 23;\nisoBandEdgeRB[103] = isoBandEdgeTL[103] = 1;\nisoBandEdgeBR[103] = isoBandEdgeLT[103] = 17;\n\n/* 7-sided cases */\nisoBandEdgeRT[152] = isoBandEdgeTR[152] = 4;\nisoBandEdgeBR[152] = isoBandEdgeLT[152] = 17;\nisoBandEdgeBL[152] = isoBandEdgeLB[152] = 18;\nisoBandEdgeRT[156] = isoBandEdgeBR[156] = 8;\nisoBandEdgeBL[156] = isoBandEdgeLB[156] = 18;\nisoBandEdgeLT[156] = isoBandEdgeTR[156] = 23;\nisoBandEdgeRT[137] = isoBandEdgeTR[137] = 4;\nisoBandEdgeRB[137] = isoBandEdgeTL[137] = 1;\nisoBandEdgeBL[137] = isoBandEdgeLB[137] = 18;\nisoBandEdgeRT[139] = isoBandEdgeTR[139] = 4;\nisoBandEdgeRB[139] = isoBandEdgeBL[139] = 13;\nisoBandEdgeLB[139] = isoBandEdgeTL[139] = 20;\nisoBandEdgeRT[98] = isoBandEdgeBL[98] = 9;\nisoBandEdgeRB[98] = isoBandEdgeBR[98] = 12;\nisoBandEdgeLT[98] = isoBandEdgeTL[98] = 22;\nisoBandEdgeRT[99] = isoBandEdgeTL[99] = 0;\nisoBandEdgeRB[99] = isoBandEdgeBR[99] = 12;\nisoBandEdgeBL[99] = isoBandEdgeLT[99] = 19;\nisoBandEdgeRB[38] = isoBandEdgeBR[38] = 12;\nisoBandEdgeLB[38] = isoBandEdgeTR[38] = 21;\nisoBandEdgeLT[38] = isoBandEdgeTL[38] = 22;\nisoBandEdgeRB[39] = isoBandEdgeTR[39] = 5;\nisoBandEdgeBR[39] = isoBandEdgeLB[39] = 16;\nisoBandEdgeLT[39] = isoBandEdgeTL[39] = 22;\n\n/*\n The lookup tables for all different polygons that\n may appear within a grid cell\n*/\n\nvar polygon_table = [];\n\n/* triangle cases */\npolygon_table[1] = polygon_table[169] = p00; /* 2221 || 0001 */\npolygon_table[4] = polygon_table[166] = p01; /* 2212 || 0010 */\npolygon_table[16] = polygon_table[154] = p02; /* 2122 || 0100 */\npolygon_table[64] = polygon_table[106] = p03; /* 1222 || 1000 */\n\n/* trapezoid cases */\npolygon_table[168] = polygon_table[2] = p04; /* 2220 || 0002 */\npolygon_table[162] = polygon_table[8] = p05; /* 2202 || 0020 */\npolygon_table[138] = polygon_table[32] = p06; /* 2022 || 0200 */\npolygon_table[42] = polygon_table[128] = p07; /* 0222 || 2000 */\n\n/* rectangle cases */\npolygon_table[5] = polygon_table[165] = p08; /* 0011 || 2211 */\npolygon_table[20] = polygon_table[150] = p09; /* 0110 || 2112 */\npolygon_table[80] = polygon_table[90] = p10; /* 1100 || 1122 */\npolygon_table[65] = polygon_table[105] = p11; /* 1001 || 1221 */\npolygon_table[160] = polygon_table[10] = p12; /* 2200 || 0022 */\npolygon_table[130] = polygon_table[40] = p13; /* 2002 || 0220 */\n\n/* square case */\npolygon_table[85] = p14; /* 1111 */\n\n/* pentagon cases */\npolygon_table[101] = polygon_table[69] = p15; /* 1211 || 1011 */\npolygon_table[149] = polygon_table[21] = p16; /* 2111 || 0111 */\npolygon_table[86] = polygon_table[84] = p17; /* 1112 || 1110 */\npolygon_table[89] = polygon_table[81] = p18; /* 1121 || 1101 */\npolygon_table[96] = polygon_table[74] = p19; /* 1200 || 1022 */\npolygon_table[24] = polygon_table[146] = p20; /* 0120 || 2102 */\npolygon_table[6] = polygon_table[164] = p21; /* 0012 || 2210 */\npolygon_table[129] = polygon_table[41] = p22; /* 2001 || 0221 */\npolygon_table[66] = polygon_table[104] = p23; /* 1002 || 1220 */\npolygon_table[144] = polygon_table[26] = p24; /* 2100 || 0122 */\npolygon_table[36] = polygon_table[134] = p25; /* 0210 || 2012 */\npolygon_table[9] = polygon_table[161] = p26; /* 0021 || 2201 */\n\n/* hexagon cases */\npolygon_table[37] = polygon_table[133] = p27; /* 0211 || 2011 */\npolygon_table[148] = polygon_table[22] = p28; /* 2110 || 0112 */\npolygon_table[82] = polygon_table[88] = p29; /* 1102 || 1120 */\npolygon_table[73] = polygon_table[97] = p30; /* 1021 || 1201 */\npolygon_table[145] = polygon_table[25] = p31; /* 2101 || 0121 */\npolygon_table[70] = polygon_table[100] = p32; /* 1012 || 1210 */\n\n/* 8-sided cases */\npolygon_table[34] = function (c) {\n return [p07(c), p05(c)];\n}; /* 0202 || 2020 with flipped == 0 */\npolygon_table[35] = p33; /* flipped == 1 state for 0202 and 2020 */\npolygon_table[136] = function (c) {\n return [p06(c), p04(c)];\n}; /* 2020 || 0202 with flipped == 0 */\n\n/* 6-sided cases */\npolygon_table[153] = function (c) {\n return [p02(c), p00(c)];\n}; /* 0101 with flipped == 0 || 2121 with flipped == 2 */\npolygon_table[102] = function (c) {\n return [p01(c), p03(c)];\n}; /* 1010 with flipped == 0 || 1212 with flipped == 2 */\npolygon_table[155] = p34; /* 0101 with flipped == 1 || 2121 with flipped == 1 */\npolygon_table[103] = p35; /* 1010 with flipped == 1 || 1212 with flipped == 1 */\n\n/* 7-sided cases */\npolygon_table[152] = function (c) {\n return [p02(c), p04(c)];\n}; /* 2120 with flipped == 2 || 0102 with flipped == 0 */\npolygon_table[156] = p36; /* 2120 with flipped == 1 || 0102 with flipped == 1 */\npolygon_table[137] = function (c) {\n return [p06(c), p00(c)];\n}; /* 2021 with flipped == 2 || 0201 with flipped == 0 */\npolygon_table[139] = p37; /* 2021 with flipped == 1 || 0201 with flipped == 1 */\npolygon_table[98] = function (c) {\n return [p05(c), p03(c)];\n}; /* 1202 with flipped == 2 || 1020 with flipped == 0 */\npolygon_table[99] = p38; /* 1202 with flipped == 1 || 1020 with flipped == 1 */\npolygon_table[38] = function (c) {\n return [p01(c), p07(c)];\n}; /* 0212 with flipped == 2 || 2010 with flipped == 0 */\npolygon_table[39] = p39; /* 0212 with flipped == 1 || 2010 with flipped == 1 */\n\n/*\n####################################\nSome small helper functions\n####################################\n*/\n\n/* assume that x1 == 1 && x0 == 0 */\nfunction interpolateX(y, y0, y1) {\n return (y - y0) / (y1 - y0);\n}\n\nfunction isArray(myArray) {\n return myArray.constructor.toString().indexOf(\"Array\") > -1;\n}\n\n/*\n####################################\nBelow is the actual Marching Squares implementation\n####################################\n*/\n\nfunction computeBandGrid(data, minV, bandwidth) {\n var rows = data.length - 1;\n var cols = data[0].length - 1;\n var BandGrid = { rows: rows, cols: cols, cells: [] };\n\n var maxV = minV + Math.abs(bandwidth);\n\n for (var j = 0; j < rows; ++j) {\n BandGrid.cells[j] = [];\n for (var i = 0; i < cols; ++i) {\n /* compose the 4-trit corner representation */\n var cval = 0;\n\n var tl = data[j + 1][i];\n var tr = data[j + 1][i + 1];\n var br = data[j][i + 1];\n var bl = data[j][i];\n\n if (isNaN(tl) || isNaN(tr) || isNaN(br) || isNaN(bl)) {\n continue;\n }\n\n cval |= tl < minV ? 0 : tl > maxV ? 128 : 64;\n cval |= tr < minV ? 0 : tr > maxV ? 32 : 16;\n cval |= br < minV ? 0 : br > maxV ? 8 : 4;\n cval |= bl < minV ? 0 : bl > maxV ? 2 : 1;\n\n var cval_real = +cval;\n\n /* resolve ambiguity via averaging */\n var flipped = 0;\n if (\n cval === 17 /* 0101 */ ||\n cval === 18 /* 0102 */ ||\n cval === 33 /* 0201 */ ||\n cval === 34 /* 0202 */ ||\n cval === 38 /* 0212 */ ||\n cval === 68 /* 1010 */ ||\n cval === 72 /* 1020 */ ||\n cval === 98 /* 1202 */ ||\n cval === 102 /* 1212 */ ||\n cval === 132 /* 2010 */ ||\n cval === 136 /* 2020 */ ||\n cval === 137 /* 2021 */ ||\n cval === 152 /* 2120 */ ||\n cval === 153 /* 2121 */\n ) {\n var average = (tl + tr + br + bl) / 4;\n /* set flipped state */\n flipped = average > maxV ? 2 : average < minV ? 0 : 1;\n\n /* adjust cval for flipped cases */\n\n /* 8-sided cases */\n if (cval === 34) {\n if (flipped === 1) {\n cval = 35;\n } else if (flipped === 0) {\n cval = 136;\n }\n } else if (cval === 136) {\n if (flipped === 1) {\n cval = 35;\n flipped = 4;\n } else if (flipped === 0) {\n cval = 34;\n }\n } else if (cval === 17) {\n /* 6-sided polygon cases */\n if (flipped === 1) {\n cval = 155;\n flipped = 4;\n } else if (flipped === 0) {\n cval = 153;\n }\n } else if (cval === 68) {\n if (flipped === 1) {\n cval = 103;\n flipped = 4;\n } else if (flipped === 0) {\n cval = 102;\n }\n } else if (cval === 153) {\n if (flipped === 1) cval = 155;\n } else if (cval === 102) {\n if (flipped === 1) cval = 103;\n } else if (cval === 152) {\n /* 7-sided polygon cases */\n if (flipped < 2) {\n cval = 156;\n flipped = 1;\n }\n } else if (cval === 137) {\n if (flipped < 2) {\n cval = 139;\n flipped = 1;\n }\n } else if (cval === 98) {\n if (flipped < 2) {\n cval = 99;\n flipped = 1;\n }\n } else if (cval === 38) {\n if (flipped < 2) {\n cval = 39;\n flipped = 1;\n }\n } else if (cval === 18) {\n if (flipped > 0) {\n cval = 156;\n flipped = 4;\n } else {\n cval = 152;\n }\n } else if (cval === 33) {\n if (flipped > 0) {\n cval = 139;\n flipped = 4;\n } else {\n cval = 137;\n }\n } else if (cval === 72) {\n if (flipped > 0) {\n cval = 99;\n flipped = 4;\n } else {\n cval = 98;\n }\n } else if (cval === 132) {\n if (flipped > 0) {\n cval = 39;\n flipped = 4;\n } else {\n cval = 38;\n }\n }\n }\n\n /* add cell to BandGrid if it contains at least one polygon-side */\n if (cval != 0 && cval != 170) {\n var topleft,\n topright,\n bottomleft,\n bottomright,\n righttop,\n rightbottom,\n lefttop,\n leftbottom;\n\n topleft = topright = bottomleft = bottomright = righttop = rightbottom = lefttop = leftbottom = 0.5;\n\n var edges = [];\n\n /* do interpolation here */\n /* 1st Triangles */\n if (cval === 1) {\n /* 0001 */\n bottomleft = 1 - interpolateX(minV, br, bl);\n leftbottom = 1 - interpolateX(minV, tl, bl);\n edges.push(isoBandEdgeBL[cval]);\n } else if (cval === 169) {\n /* 2221 */\n bottomleft = interpolateX(maxV, bl, br);\n leftbottom = interpolateX(maxV, bl, tl);\n edges.push(isoBandEdgeBL[cval]);\n } else if (cval === 4) {\n /* 0010 */\n rightbottom = 1 - interpolateX(minV, tr, br);\n bottomright = interpolateX(minV, bl, br);\n edges.push(isoBandEdgeRB[cval]);\n } else if (cval === 166) {\n /* 2212 */\n rightbottom = interpolateX(maxV, br, tr);\n bottomright = 1 - interpolateX(maxV, br, bl);\n edges.push(isoBandEdgeRB[cval]);\n } else if (cval === 16) {\n /* 0100 */\n righttop = interpolateX(minV, br, tr);\n topright = interpolateX(minV, tl, tr);\n edges.push(isoBandEdgeRT[cval]);\n } else if (cval === 154) {\n /* 2122 */\n righttop = 1 - interpolateX(maxV, tr, br);\n topright = 1 - interpolateX(maxV, tr, tl);\n edges.push(isoBandEdgeRT[cval]);\n } else if (cval === 64) {\n /* 1000 */\n lefttop = interpolateX(minV, bl, tl);\n topleft = 1 - interpolateX(minV, tr, tl);\n edges.push(isoBandEdgeLT[cval]);\n } else if (cval === 106) {\n /* 1222 */\n lefttop = 1 - interpolateX(maxV, tl, bl);\n topleft = interpolateX(maxV, tl, tr);\n edges.push(isoBandEdgeLT[cval]);\n } else if (cval === 168) {\n /* 2nd Trapezoids */\n /* 2220 */\n bottomright = interpolateX(maxV, bl, br);\n bottomleft = interpolateX(minV, bl, br);\n leftbottom = interpolateX(minV, bl, tl);\n lefttop = interpolateX(maxV, bl, tl);\n edges.push(isoBandEdgeBR[cval]);\n edges.push(isoBandEdgeBL[cval]);\n } else if (cval === 2) {\n /* 0002 */\n bottomright = 1 - interpolateX(minV, br, bl);\n bottomleft = 1 - interpolateX(maxV, br, bl);\n leftbottom = 1 - interpolateX(maxV, tl, bl);\n lefttop = 1 - interpolateX(minV, tl, bl);\n edges.push(isoBandEdgeBR[cval]);\n edges.push(isoBandEdgeBL[cval]);\n } else if (cval === 162) {\n /* 2202 */\n righttop = interpolateX(maxV, br, tr);\n rightbottom = interpolateX(minV, br, tr);\n bottomright = 1 - interpolateX(minV, br, bl);\n bottomleft = 1 - interpolateX(maxV, br, bl);\n edges.push(isoBandEdgeBR[cval]);\n edges.push(isoBandEdgeBL[cval]);\n } else if (cval === 8) {\n /* 0020 */\n righttop = 1 - interpolateX(minV, tr, br);\n rightbottom = 1 - interpolateX(maxV, tr, br);\n bottomright = interpolateX(maxV, bl, br);\n bottomleft = interpolateX(minV, bl, br);\n edges.push(isoBandEdgeRT[cval]);\n edges.push(isoBandEdgeRB[cval]);\n } else if (cval === 138) {\n /* 2022 */\n righttop = 1 - interpolateX(minV, tr, br);\n rightbottom = 1 - interpolateX(maxV, tr, br);\n topleft = 1 - interpolateX(maxV, tr, tl);\n topright = 1 - interpolateX(minV, tr, tl);\n edges.push(isoBandEdgeRT[cval]);\n edges.push(isoBandEdgeRB[cval]);\n } else if (cval === 32) {\n /* 0200 */\n righttop = interpolateX(maxV, br, tr);\n rightbottom = interpolateX(minV, br, tr);\n topleft = interpolateX(minV, tl, tr);\n topright = interpolateX(maxV, tl, tr);\n edges.push(isoBandEdgeRT[cval]);\n edges.push(isoBandEdgeRB[cval]);\n } else if (cval === 42) {\n /* 0222 */\n leftbottom = 1 - interpolateX(maxV, tl, bl);\n lefttop = 1 - interpolateX(minV, tl, bl);\n topleft = interpolateX(minV, tl, tr);\n topright = interpolateX(maxV, tl, tr);\n edges.push(isoBandEdgeLB[cval]);\n edges.push(isoBandEdgeLT[cval]);\n } else if (cval === 128) {\n /* 2000 */\n leftbottom = interpolateX(minV, bl, tl);\n lefttop = interpolateX(maxV, bl, tl);\n topleft = 1 - interpolateX(maxV, tr, tl);\n topright = 1 - interpolateX(minV, tr, tl);\n edges.push(isoBandEdgeLB[cval]);\n edges.push(isoBandEdgeLT[cval]);\n }\n\n /* 3rd rectangle cases */\n if (cval === 5) {\n /* 0011 */\n rightbottom = 1 - interpolateX(minV, tr, br);\n leftbottom = 1 - interpolateX(minV, tl, bl);\n edges.push(isoBandEdgeRB[cval]);\n } else if (cval === 165) {\n /* 2211 */\n rightbottom = interpolateX(maxV, br, tr);\n leftbottom = interpolateX(maxV, bl, tl);\n edges.push(isoBandEdgeRB[cval]);\n } else if (cval === 20) {\n /* 0110 */\n bottomright = interpolateX(minV, bl, br);\n topright = interpolateX(minV, tl, tr);\n edges.push(isoBandEdgeBR[cval]);\n } else if (cval === 150) {\n /* 2112 */\n bottomright = 1 - interpolateX(maxV, br, bl);\n topright = 1 - interpolateX(maxV, tr, tl);\n edges.push(isoBandEdgeBR[cval]);\n } else if (cval === 80) {\n /* 1100 */\n righttop = interpolateX(minV, br, tr);\n lefttop = interpolateX(minV, bl, tl);\n edges.push(isoBandEdgeRT[cval]);\n } else if (cval === 90) {\n /* 1122 */\n righttop = 1 - interpolateX(maxV, tr, br);\n lefttop = 1 - interpolateX(maxV, tl, bl);\n edges.push(isoBandEdgeRT[cval]);\n } else if (cval === 65) {\n /* 1001 */\n bottomleft = 1 - interpolateX(minV, br, bl);\n topleft = 1 - interpolateX(minV, tr, tl);\n edges.push(isoBandEdgeBL[cval]);\n } else if (cval === 105) {\n /* 1221 */\n bottomleft = interpolateX(maxV, bl, br);\n topleft = interpolateX(maxV, tl, tr);\n edges.push(isoBandEdgeBL[cval]);\n } else if (cval === 160) {\n /* 2200 */\n righttop = interpolateX(maxV, br, tr);\n rightbottom = interpolateX(minV, br, tr);\n leftbottom = interpolateX(minV, bl, tl);\n lefttop = interpolateX(maxV, bl, tl);\n edges.push(isoBandEdgeRT[cval]);\n edges.push(isoBandEdgeRB[cval]);\n } else if (cval === 10) {\n /* 0022 */\n righttop = 1 - interpolateX(minV, tr, br);\n rightbottom = 1 - interpolateX(maxV, tr, br);\n leftbottom = 1 - interpolateX(maxV, tl, bl);\n lefttop = 1 - interpolateX(minV, tl, bl);\n edges.push(isoBandEdgeRT[cval]);\n edges.push(isoBandEdgeRB[cval]);\n } else if (cval === 130) {\n /* 2002 */\n bottomright = 1 - interpolateX(minV, br, bl);\n bottomleft = 1 - interpolateX(maxV, br, bl);\n topleft = 1 - interpolateX(maxV, tr, tl);\n topright = 1 - interpolateX(minV, tr, tl);\n edges.push(isoBandEdgeBR[cval]);\n edges.push(isoBandEdgeBL[cval]);\n } else if (cval === 40) {\n /* 0220 */\n bottomright = interpolateX(maxV, bl, br);\n bottomleft = interpolateX(minV, bl, br);\n topleft = interpolateX(minV, tl, tr);\n topright = interpolateX(maxV, tl, tr);\n edges.push(isoBandEdgeBR[cval]);\n edges.push(isoBandEdgeBL[cval]);\n } else if (cval === 101) {\n /* 4th single pentagon cases */\n /* 1211 */\n rightbottom = interpolateX(maxV, br, tr);\n topleft = interpolateX(maxV, tl, tr);\n edges.push(isoBandEdgeRB[cval]);\n } else if (cval === 69) {\n /* 1011 */\n rightbottom = 1 - interpolateX(minV, tr, br);\n topleft = 1 - interpolateX(minV, tr, tl);\n edges.push(isoBandEdgeRB[cval]);\n } else if (cval === 149) {\n /* 2111 */\n leftbottom = interpolateX(maxV, bl, tl);\n topright = 1 - interpolateX(maxV, tr, tl);\n edges.push(isoBandEdgeLB[cval]);\n } else if (cval === 21) {\n /* 0111 */\n leftbottom = 1 - interpolateX(minV, tl, bl);\n topright = interpolateX(minV, tl, tr);\n edges.push(isoBandEdgeLB[cval]);\n } else if (cval === 86) {\n /* 1112 */\n bottomright = 1 - interpolateX(maxV, br, bl);\n lefttop = 1 - interpolateX(maxV, tl, bl);\n edges.push(isoBandEdgeBR[cval]);\n } else if (cval === 84) {\n /* 1110 */\n bottomright = interpolateX(minV, bl, br);\n lefttop = interpolateX(minV, bl, tl);\n edges.push(isoBandEdgeBR[cval]);\n } else if (cval === 89) {\n /* 1121 */\n righttop = 1 - interpolateX(maxV, tr, br);\n bottomleft = interpolateX(maxV, bl, br);\n edges.push(isoBandEdgeBL[cval]);\n } else if (cval === 81) {\n /* 1101 */\n righttop = interpolateX(minV, br, tr);\n bottomleft = 1 - interpolateX(minV, br, bl);\n edges.push(isoBandEdgeBL[cval]);\n } else if (cval === 96) {\n /* 1200 */\n righttop = interpolateX(maxV, br, tr);\n rightbottom = interpolateX(minV, br, tr);\n lefttop = interpolateX(minV, bl, tl);\n topleft = interpolateX(maxV, tl, tr);\n edges.push(isoBandEdgeRT[cval]);\n edges.push(isoBandEdgeRB[cval]);\n } else if (cval === 74) {\n /* 1022 */\n righttop = 1 - interpolateX(minV, tr, br);\n rightbottom = 1 - interpolateX(maxV, tr, br);\n lefttop = 1 - interpolateX(maxV, tl, bl);\n topleft = 1 - interpolateX(minV, tr, tl);\n edges.push(isoBandEdgeRT[cval]);\n edges.push(isoBandEdgeRB[cval]);\n } else if (cval === 24) {\n /* 0120 */\n righttop = 1 - interpolateX(maxV, tr, br);\n bottomright = interpolateX(maxV, bl, br);\n bottomleft = interpolateX(minV, bl, br);\n topright = interpolateX(minV, tl, tr);\n edges.push(isoBandEdgeRT[cval]);\n edges.push(isoBandEdgeBL[cval]);\n } else if (cval === 146) {\n /* 2102 */\n righttop = interpolateX(minV, br, tr);\n bottomright = 1 - interpolateX(minV, br, bl);\n bottomleft = 1 - interpolateX(maxV, br, bl);\n topright = 1 - interpolateX(maxV, tr, tl);\n edges.push(isoBandEdgeRT[cval]);\n edges.push(isoBandEdgeBL[cval]);\n } else if (cval === 6) {\n /* 0012 */\n rightbottom = 1 - interpolateX(minV, tr, br);\n bottomright = 1 - interpolateX(maxV, br, bl);\n leftbottom = 1 - interpolateX(maxV, tl, bl);\n lefttop = 1 - interpolateX(minV, tl, bl);\n edges.push(isoBandEdgeRB[cval]);\n edges.push(isoBandEdgeBR[cval]);\n } else if (cval === 164) {\n /* 2210 */\n rightbottom = interpolateX(maxV, br, tr);\n bottomright = interpolateX(minV, bl, br);\n leftbottom = interpolateX(minV, bl, tl);\n lefttop = interpolateX(maxV, bl, tl);\n edges.push(isoBandEdgeRB[cval]);\n edges.push(isoBandEdgeBR[cval]);\n } else if (cval === 129) {\n /* 2001 */\n bottomleft = 1 - interpolateX(minV, br, bl);\n leftbottom = interpolateX(maxV, bl, tl);\n topleft = 1 - interpolateX(maxV, tr, tl);\n topright = 1 - interpolateX(minV, tr, tl);\n edges.push(isoBandEdgeBL[cval]);\n edges.push(isoBandEdgeLB[cval]);\n } else if (cval === 41) {\n /* 0221 */\n bottomleft = interpolateX(maxV, bl, br);\n leftbottom = 1 - interpolateX(minV, tl, bl);\n topleft = interpolateX(minV, tl, tr);\n topright = interpolateX(maxV, tl, tr);\n edges.push(isoBandEdgeBL[cval]);\n edges.push(isoBandEdgeLB[cval]);\n } else if (cval === 66) {\n /* 1002 */\n bottomright = 1 - interpolateX(minV, br, bl);\n bottomleft = 1 - interpolateX(maxV, br, bl);\n lefttop = 1 - interpolateX(maxV, tl, bl);\n topleft = 1 - interpolateX(minV, tr, tl);\n edges.push(isoBandEdgeBR[cval]);\n edges.push(isoBandEdgeBL[cval]);\n } else if (cval === 104) {\n /* 1220 */\n bottomright = interpolateX(maxV, bl, br);\n bottomleft = interpolateX(minV, bl, br);\n lefttop = interpolateX(minV, bl, tl);\n topleft = interpolateX(maxV, tl, tr);\n edges.push(isoBandEdgeBL[cval]);\n edges.push(isoBandEdgeTL[cval]);\n } else if (cval === 144) {\n /* 2100 */\n righttop = interpolateX(minV, br, tr);\n leftbottom = interpolateX(minV, bl, tl);\n lefttop = interpolateX(maxV, bl, tl);\n topright = 1 - interpolateX(maxV, tr, tl);\n edges.push(isoBandEdgeRT[cval]);\n edges.push(isoBandEdgeLT[cval]);\n } else if (cval === 26) {\n /* 0122 */\n righttop = 1 - interpolateX(maxV, tr, br);\n leftbottom = 1 - interpolateX(maxV, tl, bl);\n lefttop = 1 - interpolateX(minV, tl, bl);\n topright = interpolateX(minV, tl, tr);\n edges.push(isoBandEdgeRT[cval]);\n edges.push(isoBandEdgeLT[cval]);\n } else if (cval === 36) {\n /* 0210 */\n rightbottom = interpolateX(maxV, br, tr);\n bottomright = interpolateX(minV, bl, br);\n topleft = interpolateX(minV, tl, tr);\n topright = interpolateX(maxV, tl, tr);\n edges.push(isoBandEdgeRB[cval]);\n edges.push(isoBandEdgeBR[cval]);\n } else if (cval === 134) {\n /* 2012 */\n rightbottom = 1 - interpolateX(minV, tr, br);\n bottomright = 1 - interpolateX(maxV, br, bl);\n topleft = 1 - interpolateX(maxV, tr, tl);\n topright = 1 - interpolateX(minV, tr, tl);\n edges.push(isoBandEdgeRB[cval]);\n edges.push(isoBandEdgeBR[cval]);\n } else if (cval === 9) {\n /* 0021 */\n righttop = 1 - interpolateX(minV, tr, br);\n rightbottom = 1 - interpolateX(maxV, tr, br);\n bottomleft = interpolateX(maxV, bl, br);\n leftbottom = 1 - interpolateX(minV, tl, bl);\n edges.push(isoBandEdgeRT[cval]);\n edges.push(isoBandEdgeRB[cval]);\n } else if (cval === 161) {\n /* 2201 */\n righttop = interpolateX(maxV, br, tr);\n rightbottom = interpolateX(minV, br, tr);\n bottomleft = 1 - interpolateX(minV, br, bl);\n leftbottom = interpolateX(maxV, bl, tl);\n edges.push(isoBandEdgeRT[cval]);\n edges.push(isoBandEdgeRB[cval]);\n } else if (cval === 37) {\n /* 5th single hexagon cases */\n /* 0211 */\n rightbottom = interpolateX(maxV, br, tr);\n leftbottom = 1 - interpolateX(minV, tl, bl);\n topleft = interpolateX(minV, tl, tr);\n topright = interpolateX(maxV, tl, tr);\n edges.push(isoBandEdgeRB[cval]);\n edges.push(isoBandEdgeLB[cval]);\n } else if (cval === 133) {\n /* 2011 */\n rightbottom = 1 - interpolateX(minV, tr, br);\n leftbottom = interpolateX(maxV, bl, tl);\n topleft = 1 - interpolateX(maxV, tr, tl);\n topright = 1 - interpolateX(minV, tr, tl);\n edges.push(isoBandEdgeRB[cval]);\n edges.push(isoBandEdgeLB[cval]);\n } else if (cval === 148) {\n /* 2110 */\n bottomright = interpolateX(minV, bl, br);\n leftbottom = interpolateX(minV, bl, tl);\n lefttop = interpolateX(maxV, bl, tl);\n topright = 1 - interpolateX(maxV, tr, tl);\n edges.push(isoBandEdgeBR[cval]);\n edges.push(isoBandEdgeLT[cval]);\n } else if (cval === 22) {\n /* 0112 */\n bottomright = 1 - interpolateX(maxV, br, bl);\n leftbottom = 1 - interpolateX(maxV, tl, bl);\n lefttop = 1 - interpolateX(minV, tl, bl);\n topright = interpolateX(minV, tl, tr);\n edges.push(isoBandEdgeBR[cval]);\n edges.push(isoBandEdgeLT[cval]);\n } else if (cval === 82) {\n /* 1102 */\n righttop = interpolateX(minV, br, tr);\n bottomright = 1 - interpolateX(minV, br, bl);\n bottomleft = 1 - interpolateX(maxV, br, bl);\n lefttop = 1 - interpolateX(maxV, tl, bl);\n edges.push(isoBandEdgeRT[cval]);\n edges.push(isoBandEdgeBL[cval]);\n } else if (cval === 88) {\n /* 1120 */\n righttop = 1 - interpolateX(maxV, tr, br);\n bottomright = interpolateX(maxV, bl, br);\n bottomleft = interpolateX(minV, bl, br);\n lefttop = interpolateX(minV, bl, tl);\n edges.push(isoBandEdgeRT[cval]);\n edges.push(isoBandEdgeBL[cval]);\n } else if (cval === 73) {\n /* 1021 */\n righttop = 1 - interpolateX(minV, tr, br);\n rightbottom = 1 - interpolateX(maxV, tr, br);\n bottomleft = interpolateX(maxV, bl, br);\n topleft = 1 - interpolateX(minV, tr, tl);\n edges.push(isoBandEdgeRT[cval]);\n edges.push(isoBandEdgeRB[cval]);\n } else if (cval === 97) {\n /* 1201 */\n righttop = interpolateX(maxV, br, tr);\n rightbottom = interpolateX(minV, br, tr);\n bottomleft = 1 - interpolateX(minV, br, bl);\n topleft = interpolateX(maxV, tl, tr);\n edges.push(isoBandEdgeRT[cval]);\n edges.push(isoBandEdgeRB[cval]);\n } else if (cval === 145) {\n /* 2101 */\n righttop = interpolateX(minV, br, tr);\n bottomleft = 1 - interpolateX(minV, br, bl);\n leftbottom = interpolateX(maxV, bl, tl);\n topright = 1 - interpolateX(maxV, tr, tl);\n edges.push(isoBandEdgeRT[cval]);\n edges.push(isoBandEdgeLB[cval]);\n } else if (cval === 25) {\n /* 0121 */\n righttop = 1 - interpolateX(maxV, tr, br);\n bottomleft = interpolateX(maxV, bl, br);\n leftbottom = 1 - interpolateX(minV, tl, bl);\n topright = interpolateX(minV, tl, tr);\n edges.push(isoBandEdgeRT[cval]);\n edges.push(isoBandEdgeLB[cval]);\n } else if (cval === 70) {\n /* 1012 */\n rightbottom = 1 - interpolateX(minV, tr, br);\n bottomright = 1 - interpolateX(maxV, br, bl);\n lefttop = 1 - interpolateX(maxV, tl, bl);\n topleft = 1 - interpolateX(minV, tr, tl);\n edges.push(isoBandEdgeRB[cval]);\n edges.push(isoBandEdgeBR[cval]);\n } else if (cval === 100) {\n /* 1210 */\n rightbottom = interpolateX(maxV, br, tr);\n bottomright = interpolateX(minV, bl, br);\n lefttop = interpolateX(minV, bl, tl);\n topleft = interpolateX(maxV, tl, tr);\n edges.push(isoBandEdgeRB[cval]);\n edges.push(isoBandEdgeBR[cval]);\n } else if (cval === 34) {\n /* 8-sided cases */\n /* 0202 || 2020 with flipped == 0 */\n if (flipped === 0) {\n righttop = 1 - interpolateX(minV, tr, br);\n rightbottom = 1 - interpolateX(maxV, tr, br);\n bottomright = interpolateX(maxV, bl, br);\n bottomleft = interpolateX(minV, bl, br);\n leftbottom = interpolateX(minV, bl, tl);\n lefttop = interpolateX(maxV, bl, tl);\n topleft = 1 - interpolateX(maxV, tr, tl);\n topright = 1 - interpolateX(minV, tr, tl);\n } else {\n righttop = interpolateX(maxV, br, tr);\n rightbottom = interpolateX(minV, br, tr);\n bottomright = 1 - interpolateX(minV, br, bl);\n bottomleft = 1 - interpolateX(maxV, br, bl);\n leftbottom = 1 - interpolateX(maxV, tl, bl);\n lefttop = 1 - interpolateX(minV, tl, bl);\n topleft = interpolateX(minV, tl, tr);\n topright = interpolateX(maxV, tl, tr);\n }\n edges.push(isoBandEdgeRT[cval]);\n edges.push(isoBandEdgeRB[cval]);\n edges.push(isoBandEdgeLB[cval]);\n edges.push(isoBandEdgeLT[cval]);\n } else if (cval === 35) {\n /* flipped == 1 state for 0202, and 2020 with flipped == 4*/\n if (flipped === 4) {\n righttop = 1 - interpolateX(minV, tr, br);\n rightbottom = 1 - interpolateX(maxV, tr, br);\n bottomright = interpolateX(maxV, bl, br);\n bottomleft = interpolateX(minV, bl, br);\n leftbottom = interpolateX(minV, bl, tl);\n lefttop = interpolateX(maxV, bl, tl);\n topleft = 1 - interpolateX(maxV, tr, tl);\n topright = 1 - interpolateX(minV, tr, tl);\n } else {\n righttop = interpolateX(maxV, br, tr);\n rightbottom = interpolateX(minV, br, tr);\n bottomright = 1 - interpolateX(minV, br, bl);\n bottomleft = 1 - interpolateX(maxV, br, bl);\n leftbottom = 1 - interpolateX(maxV, tl, bl);\n lefttop = 1 - interpolateX(minV, tl, bl);\n topleft = interpolateX(minV, tl, tr);\n topright = interpolateX(maxV, tl, tr);\n }\n edges.push(isoBandEdgeRT[cval]);\n edges.push(isoBandEdgeRB[cval]);\n edges.push(isoBandEdgeBL[cval]);\n edges.push(isoBandEdgeLT[cval]);\n } else if (cval === 136) {\n /* 2020 || 0202 with flipped == 0 */\n if (flipped === 0) {\n righttop = interpolateX(maxV, br, tr);\n rightbottom = interpolateX(minV, br, tr);\n bottomright = 1 - interpolateX(minV, br, bl);\n bottomleft = 1 - interpolateX(maxV, br, bl);\n leftbottom = 1 - interpolateX(maxV, tl, bl);\n lefttop = 1 - interpolateX(minV, tl, bl);\n topleft = interpolateX(minV, tl, tr);\n topright = interpolateX(maxV, tl, tr);\n } else {\n righttop = 1 - interpolateX(minV, tr, br);\n rightbottom = 1 - interpolateX(maxV, tr, br);\n bottomright = interpolateX(maxV, bl, br);\n bottomleft = interpolateX(minV, bl, br);\n leftbottom = interpolateX(minV, bl, tl);\n lefttop = interpolateX(maxV, bl, tl);\n topleft = 1 - interpolateX(maxV, tr, tl);\n topright = 1 - interpolateX(minV, tr, tl);\n }\n edges.push(isoBandEdgeRT[cval]);\n edges.push(isoBandEdgeRB[cval]);\n edges.push(isoBandEdgeLB[cval]);\n edges.push(isoBandEdgeLT[cval]);\n } else if (cval === 153) {\n /* 6-sided polygon cases */\n /* 0101 with flipped == 0 || 2121 with flipped == 2 */\n if (flipped === 0) {\n righttop = interpolateX(minV, br, tr);\n bottomleft = 1 - interpolateX(minV, br, bl);\n leftbottom = 1 - interpolateX(minV, tl, bl);\n topright = interpolateX(minV, tl, tr);\n } else {\n righttop = 1 - interpolateX(maxV, tr, br);\n bottomleft = interpolateX(maxV, bl, br);\n leftbottom = interpolateX(maxV, bl, tl);\n topright = 1 - interpolateX(maxV, tr, tl);\n }\n edges.push(isoBandEdgeRT[cval]);\n edges.push(isoBandEdgeBL[cval]);\n } else if (cval === 102) {\n /* 1010 with flipped == 0 || 1212 with flipped == 2 */\n if (flipped === 0) {\n rightbottom = 1 - interpolateX(minV, tr, br);\n bottomright = interpolateX(minV, bl, br);\n lefttop = interpolateX(minV, bl, tl);\n topleft = 1 - interpolateX(minV, tr, tl);\n } else {\n rightbottom = interpolateX(maxV, br, tr);\n bottomright = 1 - interpolateX(maxV, br, bl);\n lefttop = 1 - interpolateX(maxV, tl, bl);\n topleft = interpolateX(maxV, tl, tr);\n }\n edges.push(isoBandEdgeRB[cval]);\n edges.push(isoBandEdgeLT[cval]);\n } else if (cval === 155) {\n /* 0101 with flipped == 4 || 2121 with flipped == 1 */\n if (flipped === 4) {\n righttop = interpolateX(minV, br, tr);\n bottomleft = 1 - interpolateX(minV, br, bl);\n leftbottom = 1 - interpolateX(minV, tl, bl);\n topright = interpolateX(minV, tl, tr);\n } else {\n righttop = 1 - interpolateX(maxV, tr, br);\n bottomleft = interpolateX(maxV, bl, br);\n leftbottom = interpolateX(maxV, bl, tl);\n topright = 1 - interpolateX(maxV, tr, tl);\n }\n edges.push(isoBandEdgeRT[cval]);\n edges.push(isoBandEdgeLB[cval]);\n } else if (cval === 103) {\n /* 1010 with flipped == 4 || 1212 with flipped == 1 */\n if (flipped === 4) {\n rightbottom = 1 - interpolateX(minV, tr, br);\n bottomright = interpolateX(minV, bl, br);\n lefttop = interpolateX(minV, bl, tl);\n topleft = 1 - interpolateX(minV, tr, tl);\n } else {\n rightbottom = interpolateX(maxV, br, tr);\n bottomright = 1 - interpolateX(maxV, br, bl);\n lefttop = 1 - interpolateX(maxV, tl, bl);\n topleft = interpolateX(maxV, tl, tr);\n }\n edges.push(isoBandEdgeRB[cval]);\n edges.push(isoBandEdgeBR[cval]);\n } else if (cval === 152) {\n /* 7-sided polygon cases */\n /* 2120 with flipped == 2 || 0102 with flipped == 0 */\n if (flipped === 0) {\n righttop = interpolateX(minV, br, tr);\n bottomright = 1 - interpolateX(minV, br, bl);\n bottomleft = 1 - interpolateX(maxV, br, bl);\n leftbottom = 1 - interpolateX(maxV, tl, bl);\n lefttop = 1 - interpolateX(minV, tl, bl);\n topright = interpolateX(minV, tl, tr);\n } else {\n righttop = 1 - interpolateX(maxV, tr, br);\n bottomright = interpolateX(maxV, bl, br);\n bottomleft = interpolateX(minV, bl, br);\n leftbottom = interpolateX(minV, bl, tl);\n lefttop = interpolateX(maxV, bl, tl);\n topright = 1 - interpolateX(maxV, tr, tl);\n }\n edges.push(isoBandEdgeRT[cval]);\n edges.push(isoBandEdgeBR[cval]);\n edges.push(isoBandEdgeBL[cval]);\n } else if (cval === 156) {\n /* 2120 with flipped == 1 || 0102 with flipped == 4 */\n if (flipped === 4) {\n righttop = interpolateX(minV, br, tr);\n bottomright = 1 - interpolateX(minV, br, bl);\n bottomleft = 1 - interpolateX(maxV, br, bl);\n leftbottom = 1 - interpolateX(maxV, tl, bl);\n lefttop = 1 - interpolateX(minV, tl, bl);\n topright = interpolateX(minV, tl, tr);\n } else {\n righttop = 1 - interpolateX(maxV, tr, br);\n bottomright = interpolateX(maxV, bl, br);\n bottomleft = interpolateX(minV, bl, br);\n leftbottom = interpolateX(minV, bl, tl);\n lefttop = interpolateX(maxV, bl, tl);\n topright = 1 - interpolateX(maxV, tr, tl);\n }\n edges.push(isoBandEdgeRT[cval]);\n edges.push(isoBandEdgeBL[cval]);\n edges.push(isoBandEdgeLT[cval]);\n } else if (cval === 137) {\n /* 2021 with flipped == 2 || 0201 with flipped == 0 */\n if (flipped === 0) {\n righttop = interpolateX(maxV, br, tr);\n rightbottom = interpolateX(minV, br, tr);\n bottomleft = 1 - interpolateX(minV, br, bl);\n leftbottom = 1 - interpolateX(minV, tl, bl);\n topleft = interpolateX(minV, tl, tr);\n topright = interpolateX(maxV, tl, tr);\n } else {\n righttop = 1 - interpolateX(minV, tr, br);\n rightbottom = 1 - interpolateX(maxV, tr, br);\n bottomleft = interpolateX(maxV, bl, br);\n leftbottom = interpolateX(maxV, bl, tl);\n topleft = 1 - interpolateX(maxV, tr, tl);\n topright = 1 - interpolateX(minV, tr, tl);\n }\n edges.push(isoBandEdgeRT[cval]);\n edges.push(isoBandEdgeRB[cval]);\n edges.push(isoBandEdgeBL[cval]);\n } else if (cval === 139) {\n /* 2021 with flipped == 1 || 0201 with flipped == 4 */\n if (flipped === 4) {\n righttop = interpolateX(maxV, br, tr);\n rightbottom = interpolateX(minV, br, tr);\n bottomleft = 1 - interpolateX(minV, br, bl);\n leftbottom = 1 - interpolateX(minV, tl, bl);\n topleft = interpolateX(minV, tl, tr);\n topright = interpolateX(maxV, tl, tr);\n } else {\n righttop = 1 - interpolateX(minV, tr, br);\n rightbottom = 1 - interpolateX(maxV, tr, br);\n bottomleft = interpolateX(maxV, bl, br);\n leftbottom = interpolateX(maxV, bl, tl);\n topleft = 1 - interpolateX(maxV, tr, tl);\n topright = 1 - interpolateX(minV, tr, tl);\n }\n edges.push(isoBandEdgeRT[cval]);\n edges.push(isoBandEdgeRB[cval]);\n edges.push(isoBandEdgeLB[cval]);\n } else if (cval === 98) {\n /* 1202 with flipped == 2 || 1020 with flipped == 0 */\n if (flipped === 0) {\n righttop = 1 - interpolateX(minV, tr, br);\n rightbottom = 1 - interpolateX(maxV, tr, br);\n bottomright = interpolateX(maxV, bl, br);\n bottomleft = interpolateX(minV, bl, br);\n lefttop = interpolateX(minV, bl, tl);\n topleft = 1 - interpolateX(minV, tr, tl);\n } else {\n righttop = interpolateX(maxV, br, tr);\n rightbottom = interpolateX(minV, br, tr);\n bottomright = 1 - interpolateX(minV, br, bl);\n bottomleft = 1 - interpolateX(maxV, br, bl);\n lefttop = 1 - interpolateX(maxV, tl, bl);\n topleft = interpolateX(maxV, tl, tr);\n }\n edges.push(isoBandEdgeRT[cval]);\n edges.push(isoBandEdgeRB[cval]);\n edges.push(isoBandEdgeLT[cval]);\n } else if (cval === 99) {\n /* 1202 with flipped == 1 || 1020 with flipped == 4 */\n if (flipped === 4) {\n righttop = 1 - interpolateX(minV, tr, br);\n rightbottom = 1 - interpolateX(maxV, tr, br);\n bottomright = interpolateX(maxV, bl, br);\n bottomleft = interpolateX(minV, bl, br);\n lefttop = interpolateX(minV, bl, tl);\n topleft = 1 - interpolateX(minV, tr, tl);\n } else {\n righttop = interpolateX(maxV, br, tr);\n rightbottom = interpolateX(minV, br, tr);\n bottomright = 1 - interpolateX(minV, br, bl);\n bottomleft = 1 - interpolateX(maxV, br, bl);\n lefttop = 1 - interpolateX(maxV, tl, bl);\n topleft = interpolateX(maxV, tl, tr);\n }\n edges.push(isoBandEdgeRT[cval]);\n edges.push(isoBandEdgeRB[cval]);\n edges.push(isoBandEdgeBL[cval]);\n } else if (cval === 38) {\n /* 0212 with flipped == 2 || 2010 with flipped == 0 */\n if (flipped === 0) {\n rightbottom = 1 - interpolateX(minV, tr, br);\n bottomright = interpolateX(minV, bl, br);\n leftbottom = interpolateX(minV, bl, tl);\n lefttop = interpolateX(maxV, bl, tl);\n topleft = 1 - interpolateX(maxV, tr, tl);\n topright = 1 - interpolateX(minV, tr, tl);\n } else {\n rightbottom = interpolateX(maxV, br, tr);\n bottomright = 1 - interpolateX(maxV, br, bl);\n leftbottom = 1 - interpolateX(maxV, tl, bl);\n lefttop = 1 - interpolateX(minV, tl, bl);\n topleft = interpolateX(minV, tl, tr);\n topright = interpolateX(maxV, tl, tr);\n }\n edges.push(isoBandEdgeRB[cval]);\n edges.push(isoBandEdgeLB[cval]);\n edges.push(isoBandEdgeLT[cval]);\n } else if (cval === 39) {\n /* 0212 with flipped == 1 || 2010 with flipped == 4 */\n if (flipped === 4) {\n rightbottom = 1 - interpolateX(minV, tr, br);\n bottomright = interpolateX(minV, bl, br);\n leftbottom = interpolateX(minV, bl, tl);\n lefttop = interpolateX(maxV, bl, tl);\n topleft = 1 - interpolateX(maxV, tr, tl);\n topright = 1 - interpolateX(minV, tr, tl);\n } else {\n rightbottom = interpolateX(maxV, br, tr);\n bottomright = 1 - interpolateX(maxV, br, bl);\n leftbottom = 1 - interpolateX(maxV, tl, bl);\n lefttop = 1 - interpolateX(minV, tl, bl);\n topleft = interpolateX(minV, tl, tr);\n topright = interpolateX(maxV, tl, tr);\n }\n edges.push(isoBandEdgeRB[cval]);\n edges.push(isoBandEdgeBR[cval]);\n edges.push(isoBandEdgeLT[cval]);\n } else if (cval === 85) {\n righttop = 1;\n rightbottom = 0;\n bottomright = 1;\n bottomleft = 0;\n leftbottom = 0;\n lefttop = 1;\n topleft = 0;\n topright = 1;\n }\n\n if (\n topleft < 0 ||\n topleft > 1 ||\n topright < 0 ||\n topright > 1 ||\n righttop < 0 ||\n righttop > 1 ||\n bottomright < 0 ||\n bottomright > 1 ||\n leftbottom < 0 ||\n leftbottom > 1 ||\n lefttop < 0 ||\n lefttop > 1\n ) {\n console.log(\n \"MarchingSquaresJS-isoBands: \" +\n cval +\n \" \" +\n cval_real +\n \" \" +\n tl +\n \",\" +\n tr +\n \",\" +\n br +\n \",\" +\n bl +\n \" \" +\n flipped +\n \" \" +\n topleft +\n \" \" +\n topright +\n \" \" +\n righttop +\n \" \" +\n rightbottom +\n \" \" +\n bottomright +\n \" \" +\n bottomleft +\n \" \" +\n leftbottom +\n \" \" +\n lefttop\n );\n }\n\n BandGrid.cells[j][i] = {\n cval: cval,\n cval_real: cval_real,\n flipped: flipped,\n topleft: topleft,\n topright: topright,\n righttop: righttop,\n rightbottom: rightbottom,\n bottomright: bottomright,\n bottomleft: bottomleft,\n leftbottom: leftbottom,\n lefttop: lefttop,\n edges: edges,\n };\n }\n }\n }\n\n return BandGrid;\n}\n\nfunction BandGrid2AreaPaths(grid) {\n var areas = [];\n var rows = grid.rows;\n var cols = grid.cols;\n var currentPolygon = [];\n\n for (var j = 0; j < rows; j++) {\n for (var i = 0; i < cols; i++) {\n if (\n typeof grid.cells[j][i] !== \"undefined\" &&\n grid.cells[j][i].edges.length > 0\n ) {\n /* trace back polygon path starting from this cell */\n\n var cell = grid.cells[j][i];\n\n /* get start coordinates */\n\n var prev = getStartXY(cell),\n next = null,\n p = i,\n q = j;\n\n if (prev !== null) {\n currentPolygon.push([prev.p[0] + p, prev.p[1] + q]);\n //console.log(cell);\n //console.log(\"coords: \" + (prev.p[0] + p) + \" \" + (prev.p[1] + q));\n }\n\n do {\n //console.log(p + \",\" + q);\n //console.log(grid.cells[q][p]);\n //console.log(grid.cells[q][p].edges);\n //console.log(\"from : \" + prev.x + \" \" + prev.y + \" \" + prev.o);\n\n next = getExitXY(grid.cells[q][p], prev.x, prev.y, prev.o);\n if (next !== null) {\n //console.log(\"coords: \" + (next.p[0] + p) + \" \" + (next.p[1] + q));\n currentPolygon.push([next.p[0] + p, next.p[1] + q]);\n p += next.x;\n q += next.y;\n prev = next;\n } else {\n //console.log(\"getExitXY() returned null!\");\n break;\n }\n //console.log(\"to : \" + next.x + \" \" + next.y + \" \" + next.o);\n /* special case, where we've reached the grid boundaries */\n if (\n q < 0 ||\n q >= rows ||\n p < 0 ||\n p >= cols ||\n typeof grid.cells[q][p] === \"undefined\"\n ) {\n /* to create a closed path, we need to trace our way\n arround the missing data, until we find an entry\n point again\n */\n\n /* set back coordinates of current cell */\n p -= next.x;\n q -= next.y;\n\n //console.log(\"reached boundary at \" + p + \" \" + q);\n\n var missing = traceOutOfGridPath(\n grid,\n p,\n q,\n next.x,\n next.y,\n next.o\n );\n if (missing !== null) {\n missing.path.forEach(function (pp) {\n //console.log(\"coords: \" + (pp[0]) + \" \" + (pp[1]));\n currentPolygon.push(pp);\n });\n p = missing.i;\n q = missing.j;\n prev = missing;\n } else {\n break;\n }\n //console.log(grid.cells[q][p]);\n }\n } while (\n typeof grid.cells[q][p] !== \"undefined\" &&\n grid.cells[q][p].edges.length > 0\n );\n\n areas.push(currentPolygon);\n //console.log(\"next polygon\");\n //console.log(currentPolygon);\n currentPolygon = [];\n if (grid.cells[j][i].edges.length > 0) i--;\n }\n }\n }\n return areas;\n}\n\nfunction traceOutOfGridPath(grid, i, j, d_x, d_y, d_o) {\n var cell = grid.cells[j][i];\n var cval = cell.cval_real;\n var p = i + d_x,\n q = j + d_y;\n var path = [];\n var closed = false;\n\n while (!closed) {\n //console.log(\"processing cell \" + p + \",\" + q + \" \" + d_x + \" \" + d_y + \" \" + d_o);\n if (\n typeof grid.cells[q] === \"undefined\" ||\n typeof grid.cells[q][p] === \"undefined\"\n ) {\n //console.log(\"which is undefined\");\n /* we can't move on, so we have to change direction to proceed further */\n\n /* go back to previous cell */\n q -= d_y;\n p -= d_x;\n cell = grid.cells[q][p];\n cval = cell.cval_real;\n\n /* check where we've left defined cells of the grid... */\n if (d_y === -1) {\n /* we came from top */\n if (d_o === 0) {\n /* exit left */\n if (cval & Node3) {\n /* lower left node is within range, so we move left */\n path.push([p, q]);\n d_x = -1;\n d_y = 0;\n d_o = 0;\n } else if (cval & Node2) {\n /* lower right node is within range, so we move right */\n path.push([p + 1, q]);\n d_x = 1;\n d_y = 0;\n d_o = 0;\n } else {\n /* close the path */\n path.push([p + cell.bottomright, q]);\n d_x = 0;\n d_y = 1;\n d_o = 1;\n closed = true;\n break;\n }\n } else if (cval & Node3) {\n path.push([p, q]);\n d_x = -1;\n d_y = 0;\n d_o = 0;\n } else if (cval & Node2) {\n path.push([p + cell.bottomright, q]);\n d_x = 0;\n d_y = 1;\n d_o = 1;\n closed = true;\n break;\n } else {\n path.push([p + cell.bottomleft, q]);\n d_x = 0;\n d_y = 1;\n d_o = 0;\n closed = true;\n break;\n }\n } else if (d_y === 1) {\n /* we came from bottom */\n //console.log(\"we came from bottom and hit a non-existing cell \" + (p + d_x) + \",\" + (q + d_y) + \"!\");\n if (d_o === 0) {\n /* exit left */\n if (cval & Node1) {\n /* top right node is within range, so we move right */\n path.push([p + 1, q + 1]);\n d_x = 1;\n d_y = 0;\n d_o = 1;\n } else if (!(cval & Node0)) {\n /* found entry within same cell */\n path.push([p + cell.topright, q + 1]);\n d_x = 0;\n d_y = -1;\n d_o = 1;\n closed = true;\n //console.log(\"found entry from bottom at \" + p + \",\" + q);\n break;\n } else {\n path.push([p + cell.topleft, q + 1]);\n d_x = 0;\n d_y = -1;\n d_o = 0;\n closed = true;\n break;\n }\n } else if (cval & Node1) {\n path.push([p + 1, q + 1]);\n d_x = 1;\n d_y = 0;\n d_o = 1;\n } else {\n /* move right */\n path.push([p + 1, q + 1]);\n d_x = 1;\n d_y = 0;\n d_o = 1;\n //console.log(\"wtf\");\n //break;\n }\n } else if (d_x === -1) {\n /* we came from right */\n //console.log(\"we came from right and hit a non-existing cell at \" + (p + d_x) + \",\" + (q + d_y) + \"!\");\n if (d_o === 0) {\n //console.log(\"continue at bottom\");\n if (cval & Node0) {\n path.push([p, q + 1]);\n d_x = 0;\n d_y = 1;\n d_o = 0;\n //console.log(\"moving upwards to \" + (p + d_x) + \",\" + (q + d_y) + \"!\");\n } else if (!(cval & Node3)) {\n /* there has to be an entry into the regular grid again! */\n //console.log(\"exiting top\");\n path.push([p, q + cell.lefttop]);\n d_x = 1;\n d_y = 0;\n d_o = 1;\n closed = true;\n break;\n } else {\n //console.log(\"exiting bottom\");\n path.push([p, q + cell.leftbottom]);\n d_x = 1;\n d_y = 0;\n d_o = 0;\n closed = true;\n break;\n }\n } else {\n //console.log(\"continue at top\");\n if (cval & Node0) {\n path.push([p, q + 1]);\n d_x = 0;\n d_y = 1;\n d_o = 0;\n //console.log(\"moving upwards to \" + (p + d_x) + \",\" + (q + d_y) + \"!\");\n } else {\n /* */\n console.log(\"MarchingSquaresJS-isoBands: wtf\");\n break;\n }\n }\n } else if (d_x === 1) {\n /* we came from left */\n //console.log(\"we came from left and hit a non-existing cell \" + (p + d_x) + \",\" + (q + d_y) + \"!\");\n if (d_o === 0) {\n /* exit bottom */\n if (cval & Node2) {\n path.push([p + 1, q]);\n d_x = 0;\n d_y = -1;\n d_o = 1;\n } else {\n path.push([p + 1, q + cell.rightbottom]);\n d_x = -1;\n d_y = 0;\n d_o = 0;\n closed = true;\n break;\n }\n } else {\n /* exit top */\n if (cval & Node2) {\n path.push([p + 1, q]);\n d_x = 0;\n d_y = -1;\n d_o = 1;\n } else if (!(cval & Node1)) {\n path.push([p + 1, q + cell.rightbottom]);\n d_x = -1;\n d_y = 0;\n d_o = 0;\n closed = true;\n break;\n } else {\n path.push([p + 1, q + cell.righttop]);\n d_x = -1;\n d_y = 0;\n d_o = 1;\n break;\n }\n }\n } else {\n /* we came from the same cell */\n console.log(\"MarchingSquaresJS-isoBands: we came from nowhere!\");\n break;\n }\n } else {\n /* try to find an entry into the regular grid again! */\n cell = grid.cells[q][p];\n cval = cell.cval_real;\n //console.log(\"which is defined\");\n\n if (d_x === -1) {\n if (d_o === 0) {\n /* try to go downwards */\n if (\n typeof grid.cells[q - 1] !== \"undefined\" &&\n typeof grid.cells[q - 1][p] !== \"undefined\"\n ) {\n d_x = 0;\n d_y = -1;\n d_o = 1;\n } else if (cval & Node3) {\n /* proceed searching in x-direction */\n //console.log(\"proceeding in x-direction!\");\n path.push([p, q]);\n } else {\n /* we must have found an entry into the regular grid */\n path.push([p + cell.bottomright, q]);\n d_x = 0;\n d_y = 1;\n d_o = 1;\n closed = true;\n //console.log(\"found entry from bottom at \" + p + \",\" + q);\n break;\n }\n } else if (cval & Node0) {\n /* proceed searchin in x-direction */\n console.log(\"MarchingSquaresJS-isoBands: proceeding in x-direction!\");\n } else {\n /* we must have found an entry into the regular grid */\n console.log(\n \"MarchingSquaresJS-isoBands: found entry from top at \" + p + \",\" + q\n );\n break;\n }\n } else if (d_x === 1) {\n if (d_o === 0) {\n console.log(\"MarchingSquaresJS-isoBands: wtf\");\n break;\n } else {\n /* try to go upwards */\n if (\n typeof grid.cells[q + 1] !== \"undefined\" &&\n typeof grid.cells[q + 1][p] !== \"undefined\"\n ) {\n d_x = 0;\n d_y = 1;\n d_o = 0;\n } else if (cval & Node1) {\n path.push([p + 1, q + 1]);\n d_x = 1;\n d_y = 0;\n d_o = 1;\n } else {\n /* found an entry point into regular grid! */\n path.push([p + cell.topleft, q + 1]);\n d_x = 0;\n d_y = -1;\n d_o = 0;\n closed = true;\n //console.log(\"found entry from bottom at \" + p + \",\" + q);\n break;\n }\n }\n } else if (d_y === -1) {\n if (d_o === 1) {\n /* try to go right */\n if (typeof grid.cells[q][p + 1] !== \"undefined\") {\n d_x = 1;\n d_y = 0;\n d_o = 1;\n } else if (cval & Node2) {\n path.push([p + 1, q]);\n d_x = 0;\n d_y = -1;\n d_o = 1;\n } else {\n /* found entry into regular grid! */\n path.push([p + 1, q + cell.righttop]);\n d_x = -1;\n d_y = 0;\n d_o = 1;\n closed = true;\n //console.log(\"found entry from top at \" + p + \",\" + q);\n break;\n }\n } else {\n console.log(\"MarchingSquaresJS-isoBands: wtf\");\n break;\n }\n } else if (d_y === 1) {\n if (d_o === 0) {\n //console.log(\"we came from bottom left and proceed to the left\");\n /* try to go left */\n if (typeof grid.cells[q][p - 1] !== \"undefined\") {\n d_x = -1;\n d_y = 0;\n d_o = 0;\n } else if (cval & Node0) {\n path.push([p, q + 1]);\n d_x = 0;\n d_y = 1;\n d_o = 0;\n } else {\n /* found an entry point into regular grid! */\n path.push([p, q + cell.leftbottom]);\n d_x = 1;\n d_y = 0;\n d_o = 0;\n closed = true;\n //console.log(\"found entry from bottom at \" + p + \",\" + q);\n break;\n }\n } else {\n //console.log(\"we came from bottom right and proceed to the right\");\n console.log(\"MarchingSquaresJS-isoBands: wtf\");\n break;\n }\n } else {\n console.log(\"MarchingSquaresJS-isoBands: where did we came from???\");\n break;\n }\n }\n\n p += d_x;\n q += d_y;\n //console.log(\"going on to \" + p + \",\" + q + \" via \" + d_x + \" \" + d_y + \" \" + d_o);\n\n if (p === i && q === j) {\n /* bail out, once we've closed a circle path */\n break;\n }\n }\n\n //console.log(\"exit with \" + p + \",\" + q + \" \" + d_x + \" \" + d_y + \" \" + d_o);\n return { path: path, i: p, j: q, x: d_x, y: d_y, o: d_o };\n}\n\nfunction deleteEdge(cell, edgeIdx) {\n delete cell.edges[edgeIdx];\n for (var k = edgeIdx + 1; k < cell.edges.length; k++) {\n cell.edges[k - 1] = cell.edges[k];\n }\n cell.edges.pop();\n}\n\nfunction getStartXY(cell) {\n if (cell.edges.length > 0) {\n var e = cell.edges[cell.edges.length - 1];\n //console.log(\"starting with edge \" + e);\n var cval = cell.cval_real;\n switch (e) {\n case 0:\n if (cval & Node1) {\n /* node 1 within range */\n return { p: [1, cell.righttop], x: -1, y: 0, o: 1 };\n } else {\n /* node 1 below or above threshold */\n return { p: [cell.topleft, 1], x: 0, y: -1, o: 0 };\n }\n case 1:\n if (cval & Node2) {\n return { p: [cell.topleft, 1], x: 0, y: -1, o: 0 };\n } else {\n return { p: [1, cell.rightbottom], x: -1, y: 0, o: 0 };\n }\n case 2:\n if (cval & Node2) {\n return { p: [cell.bottomright, 0], x: 0, y: 1, o: 1 };\n } else {\n return { p: [cell.topleft, 1], x: 0, y: -1, o: 0 };\n }\n case 3:\n if (cval & Node3) {\n return { p: [cell.topleft, 1], x: 0, y: -1, o: 0 };\n } else {\n return { p: [cell.bottomleft, 0], x: 0, y: 1, o: 0 };\n }\n case 4:\n if (cval & Node1) {\n return { p: [1, cell.righttop], x: -1, y: 0, o: 1 };\n } else {\n return { p: [cell.topright, 1], x: 0, y: -1, o: 1 };\n }\n case 5:\n if (cval & Node2) {\n return { p: [cell.topright, 1], x: 0, y: -1, o: 1 };\n } else {\n return { p: [1, cell.rightbottom], x: -1, y: 0, o: 0 };\n }\n case 6:\n if (cval & Node2) {\n return { p: [cell.bottomright, 0], x: 0, y: 1, o: 1 };\n } else {\n return { p: [cell.topright, 1], x: 0, y: -1, o: 1 };\n }\n case 7:\n if (cval & Node3) {\n return { p: [cell.topright, 1], x: 0, y: -1, o: 1 };\n } else {\n return { p: [cell.bottomleft, 0], x: 0, y: 1, o: 0 };\n }\n case 8:\n if (cval & Node2) {\n return { p: [cell.bottomright, 0], x: 0, y: 1, o: 1 };\n } else {\n return { p: [1, cell.righttop], x: -1, y: 0, o: 1 };\n }\n case 9:\n if (cval & Node3) {\n return { p: [1, cell.righttop], x: -1, y: 0, o: 1 };\n } else {\n return { p: [cell.bottomleft, 0], x: 0, y: 1, o: 0 };\n }\n case 10:\n if (cval & Node3) {\n return { p: [0, cell.leftbottom], x: 1, y: 0, o: 0 };\n } else {\n return { p: [1, cell.righttop], x: -1, y: 0, o: 1 };\n }\n case 11:\n if (cval & Node0) {\n return { p: [1, cell.righttop], x: -1, y: 0, o: 1 };\n } else {\n return { p: [0, cell.lefttop], x: 1, y: 0, o: 1 };\n }\n case 12:\n if (cval & Node2) {\n return { p: [cell.bottomright, 0], x: 0, y: 1, o: 1 };\n } else {\n return { p: [1, cell.rightbottom], x: -1, y: 0, o: 0 };\n }\n case 13:\n if (cval & Node3) {\n return { p: [1, cell.rightbottom], x: -1, y: 0, o: 0 };\n } else {\n return { p: [cell.bottomleft, 0], x: 0, y: 1, o: 0 };\n }\n case 14:\n if (cval & Node3) {\n return { p: [0, cell.leftbottom], x: 1, y: 0, o: 0 };\n } else {\n return { p: [1, cell.rightbottom], x: -1, y: 0, o: 0 };\n }\n case 15:\n if (cval & Node0) {\n return { p: [1, cell.rightbottom], x: -1, y: 0, o: 0 };\n } else {\n return { p: [0, cell.lefttop], x: 1, y: 0, o: 1 };\n }\n case 16:\n if (cval & Node2) {\n return { p: [cell.bottomright, 0], x: 0, y: 1, o: 1 };\n } else {\n return { p: [0, cell.leftbottom], x: 1, y: 0, o: 0 };\n }\n case 17:\n if (cval & Node0) {\n return { p: [cell.bottomright, 0], x: 0, y: 1, o: 1 };\n } else {\n return { p: [0, cell.lefttop], x: 1, y: 0, o: 1 };\n }\n case 18:\n if (cval & Node3) {\n return { p: [0, cell.leftbottom], x: 1, y: 0, o: 0 };\n } else {\n return { p: [cell.bottomleft, 0], x: 0, y: 1, o: 0 };\n }\n case 19:\n if (cval & Node0) {\n return { p: [cell.bottomleft, 0], x: 0, y: 1, o: 0 };\n } else {\n return { p: [0, cell.lefttop], x: 1, y: 0, o: 1 };\n }\n case 20:\n if (cval & Node0) {\n return { p: [cell.topleft, 1], x: 0, y: -1, o: 0 };\n } else {\n return { p: [0, cell.leftbottom], x: 1, y: 0, o: 0 };\n }\n case 21:\n if (cval & Node1) {\n return { p: [0, cell.leftbottom], x: 1, y: 0, o: 0 };\n } else {\n return { p: [cell.topright, 1], x: 0, y: -1, o: 1 };\n }\n case 22:\n if (cval & Node0) {\n return { p: [cell.topleft, 1], x: 0, y: -1, o: 0 };\n } else {\n return { p: [0, cell.lefttop], x: 1, y: 0, o: 1 };\n }\n case 23:\n if (cval & Node1) {\n return { p: [0, cell.lefttop], x: 1, y: 0, o: 1 };\n } else {\n return { p: [cell.topright, 1], x: 0, y: -1, o: 1 };\n }\n default:\n console.log(\"MarchingSquaresJS-isoBands: edge index out of range!\");\n console.log(cell);\n break;\n }\n }\n\n return null;\n}\n\nfunction getExitXY(cell, x, y, o) {\n var e,\n id_x,\n d_x,\n d_y,\n cval = cell.cval;\n var d_o;\n\n switch (x) {\n case -1:\n switch (o) {\n case 0:\n e = isoBandEdgeRB[cval];\n d_x = isoBandNextXRB[cval];\n d_y = isoBandNextYRB[cval];\n d_o = isoBandNextORB[cval];\n break;\n default:\n e = isoBandEdgeRT[cval];\n d_x = isoBandNextXRT[cval];\n d_y = isoBandNextYRT[cval];\n d_o = isoBandNextORT[cval];\n break;\n }\n break;\n case 1:\n switch (o) {\n case 0:\n e = isoBandEdgeLB[cval];\n d_x = isoBandNextXLB[cval];\n d_y = isoBandNextYLB[cval];\n d_o = isoBandNextOLB[cval];\n break;\n default:\n e = isoBandEdgeLT[cval];\n d_x = isoBandNextXLT[cval];\n d_y = isoBandNextYLT[cval];\n d_o = isoBandNextOLT[cval];\n break;\n }\n break;\n default:\n switch (y) {\n case -1:\n switch (o) {\n case 0:\n e = isoBandEdgeTL[cval];\n d_x = isoBandNextXTL[cval];\n d_y = isoBandNextYTL[cval];\n d_o = isoBandNextOTL[cval];\n break;\n default:\n e = isoBandEdgeTR[cval];\n d_x = isoBandNextXTR[cval];\n d_y = isoBandNextYTR[cval];\n d_o = isoBandNextOTR[cval];\n break;\n }\n break;\n case 1:\n switch (o) {\n case 0:\n e = isoBandEdgeBL[cval];\n d_x = isoBandNextXBL[cval];\n d_y = isoBandNextYBL[cval];\n d_o = isoBandNextOBL[cval];\n break;\n default:\n e = isoBandEdgeBR[cval];\n d_x = isoBandNextXBR[cval];\n d_y = isoBandNextYBR[cval];\n d_o = isoBandNextOBR[cval];\n break;\n }\n break;\n }\n break;\n }\n\n id_x = cell.edges.indexOf(e);\n if (typeof cell.edges[id_x] !== \"undefined\") {\n deleteEdge(cell, id_x);\n } else {\n //console.log(\"wrong edges...\");\n //console.log(x + \" \" + y + \" \" + o);\n //console.log(cell);\n return null;\n }\n\n cval = cell.cval_real;\n\n switch (e) {\n case 0:\n if (cval & Node1) {\n /* node 1 within range */\n x = cell.topleft;\n y = 1;\n } else {\n /* node 1 below or above threshold */\n x = 1;\n y = cell.righttop;\n }\n break;\n case 1:\n if (cval & Node2) {\n x = 1;\n y = cell.rightbottom;\n } else {\n x = cell.topleft;\n y = 1;\n }\n break;\n case 2:\n if (cval & Node2) {\n x = cell.topleft;\n y = 1;\n } else {\n x = cell.bottomright;\n y = 0;\n }\n break;\n case 3:\n if (cval & Node3) {\n x = cell.bottomleft;\n y = 0;\n } else {\n x = cell.topleft;\n y = 1;\n }\n break;\n case 4:\n if (cval & Node1) {\n x = cell.topright;\n y = 1;\n } else {\n x = 1;\n y = cell.righttop;\n }\n break;\n case 5:\n if (cval & Node2) {\n x = 1;\n y = cell.rightbottom;\n } else {\n x = cell.topright;\n y = 1;\n }\n break;\n case 6:\n if (cval & Node2) {\n x = cell.topright;\n y = 1;\n } else {\n x = cell.bottomright;\n y = 0;\n }\n break;\n case 7:\n if (cval & Node3) {\n x = cell.bottomleft;\n y = 0;\n } else {\n x = cell.topright;\n y = 1;\n }\n break;\n case 8:\n if (cval & Node2) {\n x = 1;\n y = cell.righttop;\n } else {\n x = cell.bottomright;\n y = 0;\n }\n break;\n case 9:\n if (cval & Node3) {\n x = cell.bottomleft;\n y = 0;\n } else {\n x = 1;\n y = cell.righttop;\n }\n break;\n case 10:\n if (cval & Node3) {\n x = 1;\n y = cell.righttop;\n } else {\n x = 0;\n y = cell.leftbottom;\n }\n break;\n case 11:\n if (cval & Node0) {\n x = 0;\n y = cell.lefttop;\n } else {\n x = 1;\n y = cell.righttop;\n }\n break;\n case 12:\n if (cval & Node2) {\n x = 1;\n y = cell.rightbottom;\n } else {\n x = cell.bottomright;\n y = 0;\n }\n break;\n case 13:\n if (cval & Node3) {\n x = cell.bottomleft;\n y = 0;\n } else {\n x = 1;\n y = cell.rightbottom;\n }\n break;\n case 14:\n if (cval & Node3) {\n x = 1;\n y = cell.rightbottom;\n } else {\n x = 0;\n y = cell.leftbottom;\n }\n break;\n case 15:\n if (cval & Node0) {\n x = 0;\n y = cell.lefttop;\n } else {\n x = 1;\n y = cell.rightbottom;\n }\n break;\n case 16:\n if (cval & Node2) {\n x = 0;\n y = cell.leftbottom;\n } else {\n x = cell.bottomright;\n y = 0;\n }\n break;\n case 17:\n if (cval & Node0) {\n x = 0;\n y = cell.lefttop;\n } else {\n x = cell.bottomright;\n y = 0;\n }\n break;\n case 18:\n if (cval & Node3) {\n x = cell.bottomleft;\n y = 0;\n } else {\n x = 0;\n y = cell.leftbottom;\n }\n break;\n case 19:\n if (cval & Node0) {\n x = 0;\n y = cell.lefttop;\n } else {\n x = cell.bottomleft;\n y = 0;\n }\n break;\n case 20:\n if (cval & Node0) {\n x = 0;\n y = cell.leftbottom;\n } else {\n x = cell.topleft;\n y = 1;\n }\n break;\n case 21:\n if (cval & Node1) {\n x = cell.topright;\n y = 1;\n } else {\n x = 0;\n y = cell.leftbottom;\n }\n break;\n case 22:\n if (cval & Node0) {\n x = 0;\n y = cell.lefttop;\n } else {\n x = cell.topleft;\n y = 1;\n }\n break;\n case 23:\n if (cval & Node1) {\n x = cell.topright;\n y = 1;\n } else {\n x = 0;\n y = cell.lefttop;\n }\n break;\n default:\n console.log(\"MarchingSquaresJS-isoBands: edge index out of range!\");\n console.log(cell);\n return null;\n }\n\n if (\n typeof x === \"undefined\" ||\n typeof y === \"undefined\" ||\n typeof d_x === \"undefined\" ||\n typeof d_y === \"undefined\" ||\n typeof d_o === \"undefined\"\n ) {\n console.log(\"MarchingSquaresJS-isoBands: undefined value!\");\n console.log(cell);\n console.log(x + \" \" + y + \" \" + d_x + \" \" + d_y + \" \" + d_o);\n }\n return { p: [x, y], x: d_x, y: d_y, o: d_o };\n}\n\nfunction BandGrid2Areas(grid) {\n var areas = [];\n var area_idx = 0;\n\n grid.cells.forEach(function (g, j) {\n g.forEach(function (gg, i) {\n if (typeof gg !== \"undefined\") {\n var a = polygon_table[gg.cval](gg);\n if (typeof a === \"object\" && isArray(a)) {\n if (typeof a[0] === \"object\" && isArray(a[0])) {\n if (typeof a[0][0] === \"object\" && isArray(a[0][0])) {\n a.forEach(function (aa) {\n aa.forEach(function (aaa) {\n aaa[0] += i;\n aaa[1] += j;\n });\n areas[area_idx++] = aa;\n });\n } else {\n a.forEach(function (aa) {\n aa[0] += i;\n aa[1] += j;\n });\n areas[area_idx++] = a;\n }\n } else {\n console.log(\n \"MarchingSquaresJS-isoBands: bandcell polygon with malformed coordinates\"\n );\n }\n } else {\n console.log(\n \"MarchingSquaresJS-isoBands: bandcell polygon with null coordinates\"\n );\n }\n }\n });\n });\n\n return areas;\n}\n\n/**\n * Takes a square or rectangular grid {@link FeatureCollection} of {@link Point} features with z-values and an array of\n * value breaks and generates filled contour isobands.\n *\n * @name isobands\n * @param {FeatureCollection} pointGrid input points - must be square or rectangular\n * @param {Array} breaks where to draw contours\n * @param {Object} [options={}] options on output\n * @param {string} [options.zProperty='elevation'] the property name in `points` from which z-values will be pulled\n * @param {Object} [options.commonProperties={}] GeoJSON properties passed to ALL isobands\n * @param {Array} [options.breaksProperties=[]] GeoJSON properties passed, in order, to the correspondent isoband (order defined by breaks)\n * @returns {FeatureCollection} a FeatureCollection of {@link MultiPolygon} features representing isobands\n */\nfunction isobands(pointGrid, breaks, options) {\n // Optional parameters\n options = options || {};\n if (!isObject(options)) throw new Error(\"options is invalid\");\n var zProperty = options.zProperty || \"elevation\";\n var commonProperties = options.commonProperties || {};\n var breaksProperties = options.breaksProperties || [];\n\n // Validation\n collectionOf(pointGrid, \"Point\", \"Input must contain Points\");\n if (!breaks) throw new Error(\"breaks is required\");\n if (!Array.isArray(breaks)) throw new Error(\"breaks is not an Array\");\n if (!isObject(commonProperties))\n throw new Error(\"commonProperties is not an Object\");\n if (!Array.isArray(breaksProperties))\n throw new Error(\"breaksProperties is not an Array\");\n\n // Isoband methods\n var matrix = gridToMatrix(pointGrid, { zProperty: zProperty, flip: true });\n var contours = createContourLines(matrix, breaks, zProperty);\n contours = rescaleContours(contours, matrix, pointGrid);\n\n var multipolygons = contours.map(function (contour, index) {\n if (breaksProperties[index] && !isObject(breaksProperties[index])) {\n throw new Error(\"Each mappedProperty is required to be an Object\");\n }\n // collect all properties\n var contourProperties = objectAssign(\n {},\n commonProperties,\n breaksProperties[index]\n );\n contourProperties[zProperty] = contour[zProperty];\n var multiP = multiPolygon(contour.groupedRings, contourProperties);\n return multiP;\n });\n\n return featureCollection(multipolygons);\n}\n\n/**\n * Creates the contours lines (featuresCollection of polygon features) from the 2D data grid\n *\n * Marchingsquares process the grid data as a 3D representation of a function on a 2D plane, therefore it\n * assumes the points (x-y coordinates) are one 'unit' distance. The result of the IsoBands function needs to be\n * rescaled, with turfjs, to the original area and proportions on the map\n *\n * @private\n * @param {Array>} matrix Grid Data\n * @param {Array} breaks Breaks\n * @param {string} [property='elevation'] Property\n * @returns {Array} contours\n */\nfunction createContourLines(matrix, breaks, property) {\n var contours = [];\n for (var i = 1; i < breaks.length; i++) {\n var lowerBand = +breaks[i - 1]; // make sure the breaks value is a number\n var upperBand = +breaks[i];\n\n var isobandsCoords = isoBands(matrix, lowerBand, upperBand - lowerBand);\n // as per GeoJson rules for creating a Polygon, make sure the first element\n // in the array of LinearRings represents the exterior ring (i.e. biggest area),\n // and any subsequent elements represent interior rings (i.e. smaller area);\n // this avoids rendering issues of the MultiPolygons on the map\n var nestedRings = orderByArea(isobandsCoords);\n var groupedRings = groupNestedRings(nestedRings);\n var obj = {};\n obj[\"groupedRings\"] = groupedRings;\n obj[property] = lowerBand + \"-\" + upperBand;\n contours.push(obj);\n }\n return contours;\n}\n\n/**\n * Transform isobands of 2D grid to polygons for the map\n *\n * @private\n * @param {Array} contours Contours\n * @param {Array>} matrix Grid Data\n * @param {Object} points Points by Latitude\n * @returns {Array} contours\n */\nfunction rescaleContours(contours, matrix, points) {\n // get dimensions (on the map) of the original grid\n var gridBbox = bbox(points); // [ minX, minY, maxX, maxY ]\n var originalWidth = gridBbox[2] - gridBbox[0];\n var originalHeigth = gridBbox[3] - gridBbox[1];\n\n // get origin, which is the first point of the last row on the rectangular data on the map\n var x0 = gridBbox[0];\n var y0 = gridBbox[1];\n // get number of cells per side\n var matrixWidth = matrix[0].length - 1;\n var matrixHeight = matrix.length - 1;\n // calculate the scaling factor between matrix and rectangular grid on the map\n var scaleX = originalWidth / matrixWidth;\n var scaleY = originalHeigth / matrixHeight;\n\n var resize = function (point) {\n point[0] = point[0] * scaleX + x0;\n point[1] = point[1] * scaleY + y0;\n };\n\n // resize and shift each point/line of the isobands\n contours.forEach(function (contour) {\n contour.groupedRings.forEach(function (lineRingSet) {\n lineRingSet.forEach(function (lineRing) {\n lineRing.forEach(resize);\n });\n });\n });\n return contours;\n}\n\n/* utility functions */\n\n/**\n * Returns an array of coordinates (of LinearRings) in descending order by area\n *\n * @private\n * @param {Array} ringsCoords array of closed LineString\n * @returns {Array} array of the input LineString ordered by area\n */\nfunction orderByArea(ringsCoords) {\n var ringsWithArea = [];\n var areas = [];\n ringsCoords.forEach(function (coords) {\n // var poly = polygon([points]);\n var ringArea = area(polygon([coords]));\n // create an array of areas value\n areas.push(ringArea);\n // associate each lineRing with its area\n ringsWithArea.push({ ring: coords, area: ringArea });\n });\n areas.sort(function (a, b) {\n // bigger --> smaller\n return b - a;\n });\n // create a new array of linearRings coordinates ordered by their area\n var orderedByArea = [];\n areas.forEach(function (area) {\n for (var lr = 0; lr < ringsWithArea.length; lr++) {\n if (ringsWithArea[lr].area === area) {\n orderedByArea.push(ringsWithArea[lr].ring);\n ringsWithArea.splice(lr, 1);\n break;\n }\n }\n });\n return orderedByArea;\n}\n\n/**\n * Returns an array of arrays of coordinates, each representing\n * a set of (coordinates of) nested LinearRings,\n * i.e. the first ring contains all the others\n *\n * @private\n * @param {Array} orderedLinearRings array of coordinates (of LinearRings) in descending order by area\n * @returns {Array} Array of coordinates of nested LinearRings\n */\nfunction groupNestedRings(orderedLinearRings) {\n // create a list of the (coordinates of) LinearRings\n var lrList = orderedLinearRings.map(function (lr) {\n return { lrCoordinates: lr, grouped: false };\n });\n var groupedLinearRingsCoords = [];\n while (!allGrouped(lrList)) {\n for (var i = 0; i < lrList.length; i++) {\n if (!lrList[i].grouped) {\n // create new group starting with the larger not already grouped ring\n var group = [];\n group.push(lrList[i].lrCoordinates);\n lrList[i].grouped = true;\n var outerMostPoly = polygon([lrList[i].lrCoordinates]);\n // group all the rings contained by the outermost ring\n for (var j = i + 1; j < lrList.length; j++) {\n if (!lrList[j].grouped) {\n var lrPoly = polygon([lrList[j].lrCoordinates]);\n if (isInside(lrPoly, outerMostPoly)) {\n group.push(lrList[j].lrCoordinates);\n lrList[j].grouped = true;\n }\n }\n }\n // insert the new group\n groupedLinearRingsCoords.push(group);\n }\n }\n }\n return groupedLinearRingsCoords;\n}\n\n/**\n * @private\n * @param {Polygon} testPolygon polygon of interest\n * @param {Polygon} targetPolygon polygon you want to compare with\n * @returns {boolean} true if test-Polygon is inside target-Polygon\n */\nfunction isInside(testPolygon, targetPolygon) {\n var points = explode(testPolygon);\n for (var i = 0; i < points.features.length; i++) {\n if (!booleanPointInPolygon(points.features[i], targetPolygon)) {\n return false;\n }\n }\n return true;\n}\n\n/**\n * @private\n * @param {Array} list list of objects which might contain the 'group' attribute\n * @returns {boolean} true if all the objects in the list are marked as grouped\n */\nfunction allGrouped(list) {\n for (var i = 0; i < list.length; i++) {\n if (list[i].grouped === false) {\n return false;\n }\n }\n return true;\n}\n\nexport default isobands;\n","import booleanPointInPolygon from \"@turf/boolean-point-in-polygon\";\nimport { point } from \"@turf/helpers\";\n// https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Math/sign#Polyfill\nfunction mathSign(x) {\n return ((x > 0) - (x < 0) || +x);\n}\n/**\n * Returns the direction of the point q relative to the vector p1 -> p2.\n *\n * Implementation of geos::algorithm::CGAlgorithm::orientationIndex()\n * (same as geos::algorithm::CGAlgorithm::computeOrientation())\n *\n * @param {number[]} p1 - the origin point of the vector\n * @param {number[]} p2 - the final point of the vector\n * @param {number[]} q - the point to compute the direction to\n *\n * @returns {number} - 1 if q is ccw (left) from p1->p2,\n * -1 if q is cw (right) from p1->p2,\n * 0 if q is colinear with p1->p2\n */\nexport function orientationIndex(p1, p2, q) {\n var dx1 = p2[0] - p1[0], dy1 = p2[1] - p1[1], dx2 = q[0] - p2[0], dy2 = q[1] - p2[1];\n return mathSign(dx1 * dy2 - dx2 * dy1);\n}\n/**\n * Checks if two envelopes are equal.\n *\n * The function assumes that the arguments are envelopes, i.e.: Rectangular polygon\n *\n * @param {Feature} env1 - Envelope\n * @param {Feature} env2 - Envelope\n * @returns {boolean} - True if the envelopes are equal\n */\nexport function envelopeIsEqual(env1, env2) {\n var envX1 = env1.geometry.coordinates[0].map(function (c) { return c[0]; }), envY1 = env1.geometry.coordinates[0].map(function (c) { return c[1]; }), envX2 = env2.geometry.coordinates[0].map(function (c) { return c[0]; }), envY2 = env2.geometry.coordinates[0].map(function (c) { return c[1]; });\n return (Math.max.apply(null, envX1) === Math.max.apply(null, envX2) &&\n Math.max.apply(null, envY1) === Math.max.apply(null, envY2) &&\n Math.min.apply(null, envX1) === Math.min.apply(null, envX2) &&\n Math.min.apply(null, envY1) === Math.min.apply(null, envY2));\n}\n/**\n * Check if a envelope is contained in other one.\n *\n * The function assumes that the arguments are envelopes, i.e.: Convex polygon\n * XXX: Envelopes are rectangular, checking if a point is inside a rectangule is something easy,\n * this could be further improved.\n *\n * @param {Feature} self - Envelope\n * @param {Feature} env - Envelope\n * @returns {boolean} - True if env is contained in self\n */\nexport function envelopeContains(self, env) {\n return env.geometry.coordinates[0].every(function (c) {\n return booleanPointInPolygon(point(c), self);\n });\n}\n/**\n * Checks if two coordinates are equal.\n *\n * @param {number[]} coord1 - First coordinate\n * @param {number[]} coord2 - Second coordinate\n * @returns {boolean} - True if coordinates are equal\n */\nexport function coordinatesEqual(coord1, coord2) {\n return coord1[0] === coord2[0] && coord1[1] === coord2[1];\n}\n","import { orientationIndex } from \"./util.js\";\n/**\n * Node\n */\nvar Node = /** @class */ (function () {\n function Node(coordinates) {\n this.id = Node.buildId(coordinates);\n this.coordinates = coordinates; //< {Number[]}\n this.innerEdges = []; //< {Edge[]}\n // We wil store to (out) edges in an CCW order as geos::planargraph::DirectedEdgeStar does\n this.outerEdges = []; //< {Edge[]}\n this.outerEdgesSorted = false; //< {Boolean} flag that stores if the outer Edges had been sorted\n }\n Node.buildId = function (coordinates) {\n return coordinates.join(\",\");\n };\n Node.prototype.removeInnerEdge = function (edge) {\n this.innerEdges = this.innerEdges.filter(function (e) { return e.from.id !== edge.from.id; });\n };\n Node.prototype.removeOuterEdge = function (edge) {\n this.outerEdges = this.outerEdges.filter(function (e) { return e.to.id !== edge.to.id; });\n };\n /**\n * Outer edges are stored CCW order.\n *\n * @memberof Node\n * @param {Edge} edge - Edge to add as an outerEdge.\n */\n Node.prototype.addOuterEdge = function (edge) {\n this.outerEdges.push(edge);\n this.outerEdgesSorted = false;\n };\n /**\n * Sorts outer edges in CCW way.\n *\n * @memberof Node\n * @private\n */\n Node.prototype.sortOuterEdges = function () {\n var _this = this;\n if (!this.outerEdgesSorted) {\n //this.outerEdges.sort((a, b) => a.compareTo(b));\n // Using this comparator in order to be deterministic\n this.outerEdges.sort(function (a, b) {\n var aNode = a.to, bNode = b.to;\n if (aNode.coordinates[0] - _this.coordinates[0] >= 0 &&\n bNode.coordinates[0] - _this.coordinates[0] < 0)\n return 1;\n if (aNode.coordinates[0] - _this.coordinates[0] < 0 &&\n bNode.coordinates[0] - _this.coordinates[0] >= 0)\n return -1;\n if (aNode.coordinates[0] - _this.coordinates[0] === 0 &&\n bNode.coordinates[0] - _this.coordinates[0] === 0) {\n if (aNode.coordinates[1] - _this.coordinates[1] >= 0 ||\n bNode.coordinates[1] - _this.coordinates[1] >= 0)\n return aNode.coordinates[1] - bNode.coordinates[1];\n return bNode.coordinates[1] - aNode.coordinates[1];\n }\n var det = orientationIndex(_this.coordinates, aNode.coordinates, bNode.coordinates);\n if (det < 0)\n return 1;\n if (det > 0)\n return -1;\n var d1 = Math.pow(aNode.coordinates[0] - _this.coordinates[0], 2) +\n Math.pow(aNode.coordinates[1] - _this.coordinates[1], 2), d2 = Math.pow(bNode.coordinates[0] - _this.coordinates[0], 2) +\n Math.pow(bNode.coordinates[1] - _this.coordinates[1], 2);\n return d1 - d2;\n });\n this.outerEdgesSorted = true;\n }\n };\n /**\n * Retrieves outer edges.\n *\n * They are sorted if they aren't in the CCW order.\n *\n * @memberof Node\n * @returns {Edge[]} - List of outer edges sorted in a CCW order.\n */\n Node.prototype.getOuterEdges = function () {\n this.sortOuterEdges();\n return this.outerEdges;\n };\n Node.prototype.getOuterEdge = function (i) {\n this.sortOuterEdges();\n return this.outerEdges[i];\n };\n Node.prototype.addInnerEdge = function (edge) {\n this.innerEdges.push(edge);\n };\n return Node;\n}());\nexport default Node;\n","import { lineString } from \"@turf/helpers\";\nimport { orientationIndex } from \"./util.js\";\n/**\n * This class is inspired by GEOS's geos::operation::polygonize::PolygonizeDirectedEdge\n */\nvar Edge = /** @class */ (function () {\n /**\n * @param {Node} from - start node of the Edge\n * @param {Node} to - end node of the edge\n */\n function Edge(from, to) {\n this.from = from; //< start\n this.to = to; //< End\n this.next = undefined; //< The edge to be computed after\n this.label = undefined; //< Used in order to detect Cut Edges (Bridges)\n this.symetric = undefined; //< The symetric edge of this\n this.ring = undefined; //< EdgeRing in which the Edge is\n this.from.addOuterEdge(this);\n this.to.addInnerEdge(this);\n }\n /**\n * Creates or get the symetric Edge.\n *\n * @returns {Edge} - Symetric Edge.\n */\n Edge.prototype.getSymetric = function () {\n if (!this.symetric) {\n this.symetric = new Edge(this.to, this.from);\n this.symetric.symetric = this;\n }\n return this.symetric;\n };\n /**\n * Removes edge from from and to nodes.\n */\n Edge.prototype.deleteEdge = function () {\n this.from.removeOuterEdge(this);\n this.to.removeInnerEdge(this);\n };\n /**\n * Compares Edge equallity.\n *\n * An edge is equal to another, if the from and to nodes are the same.\n *\n * @param {Edge} edge - Another Edge\n * @returns {boolean} - True if Edges are equal, False otherwise\n */\n Edge.prototype.isEqual = function (edge) {\n return this.from.id === edge.from.id && this.to.id === edge.to.id;\n };\n Edge.prototype.toString = function () {\n return \"Edge { \" + this.from.id + \" -> \" + this.to.id + \" }\";\n };\n /**\n * Returns a LineString representation of the Edge\n *\n * @returns {Feature} - LineString representation of the Edge\n */\n Edge.prototype.toLineString = function () {\n return lineString([this.from.coordinates, this.to.coordinates]);\n };\n /**\n * Comparator of two edges.\n *\n * Implementation of geos::planargraph::DirectedEdge::compareTo.\n *\n * @param {Edge} edge - Another edge to compare with this one\n * @returns {number} -1 if this Edge has a greater angle with the positive x-axis than b,\n * 0 if the Edges are colinear,\n * 1 otherwise\n */\n Edge.prototype.compareTo = function (edge) {\n return orientationIndex(edge.from.coordinates, edge.to.coordinates, this.to.coordinates);\n };\n return Edge;\n}());\nexport default Edge;\n","import { orientationIndex, envelopeIsEqual, envelopeContains, coordinatesEqual, } from \"./util.js\";\nimport { multiPoint, polygon, point, } from \"@turf/helpers\";\nimport envelope from \"@turf/envelope\";\nimport booleanPointInPolygon from \"@turf/boolean-point-in-polygon\";\n/**\n * Ring of edges which form a polygon.\n *\n * The ring may be either an outer shell or a hole.\n *\n * This class is inspired in GEOS's geos::operation::polygonize::EdgeRing\n */\nvar EdgeRing = /** @class */ (function () {\n function EdgeRing() {\n this.edges = [];\n this.polygon = undefined; //< Caches Polygon representation\n this.envelope = undefined; //< Caches Envelope representation\n }\n /**\n * Add an edge to the ring, inserting it in the last position.\n *\n * @memberof EdgeRing\n * @param {Edge} edge - Edge to be inserted\n */\n EdgeRing.prototype.push = function (edge) {\n this.edges.push(edge);\n this.polygon = this.envelope = undefined;\n };\n /**\n * Get Edge.\n *\n * @memberof EdgeRing\n * @param {number} i - Index\n * @returns {Edge} - Edge in the i position\n */\n EdgeRing.prototype.get = function (i) {\n return this.edges[i];\n };\n Object.defineProperty(EdgeRing.prototype, \"length\", {\n /**\n * Getter of length property.\n *\n * @memberof EdgeRing\n * @returns {number} - Length of the edge ring.\n */\n get: function () {\n return this.edges.length;\n },\n enumerable: true,\n configurable: true\n });\n /**\n * Similar to Array.prototype.forEach for the list of Edges in the EdgeRing.\n *\n * @memberof EdgeRing\n * @param {Function} f - The same function to be passed to Array.prototype.forEach\n */\n EdgeRing.prototype.forEach = function (f) {\n this.edges.forEach(f);\n };\n /**\n * Similar to Array.prototype.map for the list of Edges in the EdgeRing.\n *\n * @memberof EdgeRing\n * @param {Function} f - The same function to be passed to Array.prototype.map\n * @returns {Array} - The mapped values in the function\n */\n EdgeRing.prototype.map = function (f) {\n return this.edges.map(f);\n };\n /**\n * Similar to Array.prototype.some for the list of Edges in the EdgeRing.\n *\n * @memberof EdgeRing\n * @param {Function} f - The same function to be passed to Array.prototype.some\n * @returns {boolean} - True if an Edge check the condition\n */\n EdgeRing.prototype.some = function (f) {\n return this.edges.some(f);\n };\n /**\n * Check if the ring is valid in geomtry terms.\n *\n * A ring must have either 0 or 4 or more points. The first and the last must be\n * equal (in 2D)\n * geos::geom::LinearRing::validateConstruction\n *\n * @memberof EdgeRing\n * @returns {boolean} - Validity of the EdgeRing\n */\n EdgeRing.prototype.isValid = function () {\n // TODO: stub\n return true;\n };\n /**\n * Tests whether this ring is a hole.\n *\n * A ring is a hole if it is oriented counter-clockwise.\n * Similar implementation of geos::algorithm::CGAlgorithms::isCCW\n *\n * @memberof EdgeRing\n * @returns {boolean} - true: if it is a hole\n */\n EdgeRing.prototype.isHole = function () {\n var _this = this;\n // XXX: Assuming Ring is valid\n // Find highest point\n var hiIndex = this.edges.reduce(function (high, edge, i) {\n if (edge.from.coordinates[1] > _this.edges[high].from.coordinates[1])\n high = i;\n return high;\n }, 0), iPrev = (hiIndex === 0 ? this.length : hiIndex) - 1, iNext = (hiIndex + 1) % this.length, disc = orientationIndex(this.edges[iPrev].from.coordinates, this.edges[hiIndex].from.coordinates, this.edges[iNext].from.coordinates);\n if (disc === 0)\n return (this.edges[iPrev].from.coordinates[0] >\n this.edges[iNext].from.coordinates[0]);\n return disc > 0;\n };\n /**\n * Creates a MultiPoint representing the EdgeRing (discarts edges directions).\n *\n * @memberof EdgeRing\n * @returns {Feature} - Multipoint representation of the EdgeRing\n */\n EdgeRing.prototype.toMultiPoint = function () {\n return multiPoint(this.edges.map(function (edge) { return edge.from.coordinates; }));\n };\n /**\n * Creates a Polygon representing the EdgeRing.\n *\n * @memberof EdgeRing\n * @returns {Feature} - Polygon representation of the Edge Ring\n */\n EdgeRing.prototype.toPolygon = function () {\n if (this.polygon)\n return this.polygon;\n var coordinates = this.edges.map(function (edge) { return edge.from.coordinates; });\n coordinates.push(this.edges[0].from.coordinates);\n return (this.polygon = polygon([coordinates]));\n };\n /**\n * Calculates the envelope of the EdgeRing.\n *\n * @memberof EdgeRing\n * @returns {Feature} - envelope\n */\n EdgeRing.prototype.getEnvelope = function () {\n if (this.envelope)\n return this.envelope;\n return (this.envelope = envelope(this.toPolygon()));\n };\n /**\n * `geos::operation::polygonize::EdgeRing::findEdgeRingContaining`\n *\n * @param {EdgeRing} testEdgeRing - EdgeRing to look in the list\n * @param {EdgeRing[]} shellList - List of EdgeRing in which to search\n *\n * @returns {EdgeRing} - EdgeRing which contains the testEdgeRing\n */\n EdgeRing.findEdgeRingContaining = function (testEdgeRing, shellList) {\n var testEnvelope = testEdgeRing.getEnvelope();\n var minEnvelope, minShell;\n shellList.forEach(function (shell) {\n var tryEnvelope = shell.getEnvelope();\n if (minShell)\n minEnvelope = minShell.getEnvelope();\n // the hole envelope cannot equal the shell envelope\n if (envelopeIsEqual(tryEnvelope, testEnvelope))\n return;\n if (envelopeContains(tryEnvelope, testEnvelope)) {\n var testEdgeRingCoordinates = testEdgeRing.map(function (edge) { return edge.from.coordinates; });\n var testPoint = void 0;\n var _loop_1 = function (pt) {\n if (!shell.some(function (edge) { return coordinatesEqual(pt, edge.from.coordinates); })) {\n testPoint = pt;\n }\n };\n for (var _i = 0, testEdgeRingCoordinates_1 = testEdgeRingCoordinates; _i < testEdgeRingCoordinates_1.length; _i++) {\n var pt = testEdgeRingCoordinates_1[_i];\n _loop_1(pt);\n }\n if (testPoint && shell.inside(point(testPoint))) {\n if (!minShell || envelopeContains(minEnvelope, tryEnvelope))\n minShell = shell;\n }\n }\n });\n return minShell;\n };\n /**\n * Checks if the point is inside the edgeRing\n *\n * @param {Feature} pt - Point to check if it is inside the edgeRing\n * @returns {boolean} - True if it is inside, False otherwise\n */\n EdgeRing.prototype.inside = function (pt) {\n return booleanPointInPolygon(pt, this.toPolygon());\n };\n return EdgeRing;\n}());\nexport default EdgeRing;\n","import Node from \"./Node.js\";\nimport Edge from \"./Edge.js\";\nimport EdgeRing from \"./EdgeRing.js\";\nimport { flattenEach, coordReduce } from \"@turf/meta\";\nimport { featureOf } from \"@turf/invariant\";\n/**\n * Validates the geoJson.\n *\n * @param {GeoJSON} geoJson - input geoJson.\n * @throws {Error} if geoJson is invalid.\n */\nfunction validateGeoJson(geoJson) {\n if (!geoJson)\n throw new Error(\"No geojson passed\");\n if (geoJson.type !== \"FeatureCollection\" &&\n geoJson.type !== \"GeometryCollection\" &&\n geoJson.type !== \"MultiLineString\" &&\n geoJson.type !== \"LineString\" &&\n geoJson.type !== \"Feature\")\n throw new Error(\"Invalid input type '\" + geoJson.type + \"'. Geojson must be FeatureCollection, GeometryCollection, LineString, MultiLineString or Feature\");\n}\n/**\n * Represents a planar graph of edges and nodes that can be used to compute a polygonization.\n *\n * Although, this class is inspired by GEOS's `geos::operation::polygonize::PolygonizeGraph`,\n * it isn't a rewrite. As regards algorithm, this class implements the same logic, but it\n * isn't a javascript transcription of the C++ source.\n *\n * This graph is directed (both directions are created)\n */\nvar Graph = /** @class */ (function () {\n function Graph() {\n this.edges = []; //< {Edge[]} dirEdges\n // The key is the `id` of the Node (ie: coordinates.join(','))\n this.nodes = {};\n }\n /**\n * Creates a graph from a GeoJSON.\n *\n * @param {FeatureCollection} geoJson - it must comply with the restrictions detailed in the index\n * @returns {Graph} - The newly created graph\n * @throws {Error} if geoJson is invalid.\n */\n Graph.fromGeoJson = function (geoJson) {\n validateGeoJson(geoJson);\n var graph = new Graph();\n flattenEach(geoJson, function (feature) {\n featureOf(feature, \"LineString\", \"Graph::fromGeoJson\");\n // When a LineString if formed by many segments, split them\n coordReduce(feature, function (prev, cur) {\n if (prev) {\n var start = graph.getNode(prev), end = graph.getNode(cur);\n graph.addEdge(start, end);\n }\n return cur;\n });\n });\n return graph;\n };\n /**\n * Creates or get a Node.\n *\n * @param {number[]} coordinates - Coordinates of the node\n * @returns {Node} - The created or stored node\n */\n Graph.prototype.getNode = function (coordinates) {\n var id = Node.buildId(coordinates);\n var node = this.nodes[id];\n if (!node)\n node = this.nodes[id] = new Node(coordinates);\n return node;\n };\n /**\n * Adds an Edge and its symetricall.\n *\n * Edges are added symetrically, i.e.: we also add its symetric\n *\n * @param {Node} from - Node which starts the Edge\n * @param {Node} to - Node which ends the Edge\n */\n Graph.prototype.addEdge = function (from, to) {\n var edge = new Edge(from, to), symetricEdge = edge.getSymetric();\n this.edges.push(edge);\n this.edges.push(symetricEdge);\n };\n /**\n * Removes Dangle Nodes (nodes with grade 1).\n */\n Graph.prototype.deleteDangles = function () {\n var _this = this;\n Object.keys(this.nodes)\n .map(function (id) { return _this.nodes[id]; })\n .forEach(function (node) { return _this._removeIfDangle(node); });\n };\n /**\n * Check if node is dangle, if so, remove it.\n *\n * It calls itself recursively, removing a dangling node might cause another dangling node\n *\n * @param {Node} node - Node to check if it's a dangle\n */\n Graph.prototype._removeIfDangle = function (node) {\n var _this = this;\n // As edges are directed and symetrical, we count only innerEdges\n if (node.innerEdges.length <= 1) {\n var outerNodes = node.getOuterEdges().map(function (e) { return e.to; });\n this.removeNode(node);\n outerNodes.forEach(function (n) { return _this._removeIfDangle(n); });\n }\n };\n /**\n * Delete cut-edges (bridge edges).\n *\n * The graph will be traversed, all the edges will be labeled according the ring\n * in which they are. (The label is a number incremented by 1). Edges with the same\n * label are cut-edges.\n */\n Graph.prototype.deleteCutEdges = function () {\n var _this = this;\n this._computeNextCWEdges();\n this._findLabeledEdgeRings();\n // Cut-edges (bridges) are edges where both edges have the same label\n this.edges.forEach(function (edge) {\n if (edge.label === edge.symetric.label) {\n _this.removeEdge(edge.symetric);\n _this.removeEdge(edge);\n }\n });\n };\n /**\n * Set the `next` property of each Edge.\n *\n * The graph will be transversed in a CW form, so, we set the next of the symetrical edge as the previous one.\n * OuterEdges are sorted CCW.\n *\n * @param {Node} [node] - If no node is passed, the function calls itself for every node in the Graph\n */\n Graph.prototype._computeNextCWEdges = function (node) {\n var _this = this;\n if (typeof node === \"undefined\") {\n Object.keys(this.nodes).forEach(function (id) {\n return _this._computeNextCWEdges(_this.nodes[id]);\n });\n }\n else {\n node.getOuterEdges().forEach(function (edge, i) {\n node.getOuterEdge((i === 0 ? node.getOuterEdges().length : i) - 1).symetric.next = edge;\n });\n }\n };\n /**\n * Computes the next edge pointers going CCW around the given node, for the given edgering label.\n *\n * This algorithm has the effect of converting maximal edgerings into minimal edgerings\n *\n * XXX: method literally transcribed from `geos::operation::polygonize::PolygonizeGraph::computeNextCCWEdges`,\n * could be written in a more javascript way.\n *\n * @param {Node} node - Node\n * @param {number} label - Ring's label\n */\n Graph.prototype._computeNextCCWEdges = function (node, label) {\n var edges = node.getOuterEdges();\n var firstOutDE, prevInDE;\n for (var i = edges.length - 1; i >= 0; --i) {\n var de = edges[i], sym = de.symetric, outDE = void 0, inDE = void 0;\n if (de.label === label)\n outDE = de;\n if (sym.label === label)\n inDE = sym;\n if (!outDE || !inDE)\n // This edge is not in edgering\n continue;\n if (inDE)\n prevInDE = inDE;\n if (outDE) {\n if (prevInDE) {\n prevInDE.next = outDE;\n prevInDE = undefined;\n }\n if (!firstOutDE)\n firstOutDE = outDE;\n }\n }\n if (prevInDE)\n prevInDE.next = firstOutDE;\n };\n /**\n * Finds rings and labels edges according to which rings are.\n *\n * The label is a number which is increased for each ring.\n *\n * @returns {Edge[]} edges that start rings\n */\n Graph.prototype._findLabeledEdgeRings = function () {\n var edgeRingStarts = [];\n var label = 0;\n this.edges.forEach(function (edge) {\n if (edge.label >= 0)\n return;\n edgeRingStarts.push(edge);\n var e = edge;\n do {\n e.label = label;\n e = e.next;\n } while (!edge.isEqual(e));\n label++;\n });\n return edgeRingStarts;\n };\n /**\n * Computes the EdgeRings formed by the edges in this graph.\n *\n * @returns {EdgeRing[]} - A list of all the EdgeRings in the graph.\n */\n Graph.prototype.getEdgeRings = function () {\n var _this = this;\n this._computeNextCWEdges();\n // Clear labels\n this.edges.forEach(function (edge) {\n edge.label = undefined;\n });\n this._findLabeledEdgeRings().forEach(function (edge) {\n // convertMaximalToMinimalEdgeRings\n _this._findIntersectionNodes(edge).forEach(function (node) {\n _this._computeNextCCWEdges(node, edge.label);\n });\n });\n var edgeRingList = [];\n // find all edgerings\n this.edges.forEach(function (edge) {\n if (edge.ring)\n return;\n edgeRingList.push(_this._findEdgeRing(edge));\n });\n return edgeRingList;\n };\n /**\n * Find all nodes in a Maxima EdgeRing which are self-intersection nodes.\n *\n * @param {Node} startEdge - Start Edge of the Ring\n * @returns {Node[]} - intersection nodes\n */\n Graph.prototype._findIntersectionNodes = function (startEdge) {\n var intersectionNodes = [];\n var edge = startEdge;\n var _loop_1 = function () {\n // getDegree\n var degree = 0;\n edge.from.getOuterEdges().forEach(function (e) {\n if (e.label === startEdge.label)\n ++degree;\n });\n if (degree > 1)\n intersectionNodes.push(edge.from);\n edge = edge.next;\n };\n do {\n _loop_1();\n } while (!startEdge.isEqual(edge));\n return intersectionNodes;\n };\n /**\n * Get the edge-ring which starts from the provided Edge.\n *\n * @param {Edge} startEdge - starting edge of the edge ring\n * @returns {EdgeRing} - EdgeRing which start Edge is the provided one.\n */\n Graph.prototype._findEdgeRing = function (startEdge) {\n var edge = startEdge;\n var edgeRing = new EdgeRing();\n do {\n edgeRing.push(edge);\n edge.ring = edgeRing;\n edge = edge.next;\n } while (!startEdge.isEqual(edge));\n return edgeRing;\n };\n /**\n * Removes a node from the Graph.\n *\n * It also removes edges asociated to that node\n * @param {Node} node - Node to be removed\n */\n Graph.prototype.removeNode = function (node) {\n var _this = this;\n node.getOuterEdges().forEach(function (edge) { return _this.removeEdge(edge); });\n node.innerEdges.forEach(function (edge) { return _this.removeEdge(edge); });\n delete this.nodes[node.id];\n };\n /**\n * Remove edge from the graph and deletes the edge.\n *\n * @param {Edge} edge - Edge to be removed\n */\n Graph.prototype.removeEdge = function (edge) {\n this.edges = this.edges.filter(function (e) { return !e.isEqual(edge); });\n edge.deleteEdge();\n };\n return Graph;\n}());\nexport default Graph;\n","import booleanPointInPolygon from \"@turf/boolean-point-in-polygon\";\nimport lineIntersect from \"@turf/line-intersect\";\nimport { flattenEach } from \"@turf/meta\";\nimport polygonToLine from \"@turf/polygon-to-line\";\n/**\n * Boolean-disjoint returns (TRUE) if the intersection of the two geometries is an empty set.\n *\n * @name booleanDisjoint\n * @param {Geometry|Feature} feature1 GeoJSON Feature or Geometry\n * @param {Geometry|Feature} feature2 GeoJSON Feature or Geometry\n * @returns {boolean} true/false\n * @example\n * var point = turf.point([2, 2]);\n * var line = turf.lineString([[1, 1], [1, 2], [1, 3], [1, 4]]);\n *\n * turf.booleanDisjoint(line, point);\n * //=true\n */\nfunction booleanDisjoint(feature1, feature2) {\n var bool = true;\n flattenEach(feature1, function (flatten1) {\n flattenEach(feature2, function (flatten2) {\n if (bool === false) {\n return false;\n }\n bool = disjoint(flatten1.geometry, flatten2.geometry);\n });\n });\n return bool;\n}\n/**\n * Disjoint operation for simple Geometries (Point/LineString/Polygon)\n *\n * @private\n * @param {Geometry} geom1 GeoJSON Geometry\n * @param {Geometry} geom2 GeoJSON Geometry\n * @returns {boolean} true/false\n */\nfunction disjoint(geom1, geom2) {\n switch (geom1.type) {\n case \"Point\":\n switch (geom2.type) {\n case \"Point\":\n return !compareCoords(geom1.coordinates, geom2.coordinates);\n case \"LineString\":\n return !isPointOnLine(geom2, geom1);\n case \"Polygon\":\n return !booleanPointInPolygon(geom1, geom2);\n }\n /* istanbul ignore next */\n break;\n case \"LineString\":\n switch (geom2.type) {\n case \"Point\":\n return !isPointOnLine(geom1, geom2);\n case \"LineString\":\n return !isLineOnLine(geom1, geom2);\n case \"Polygon\":\n return !isLineInPoly(geom2, geom1);\n }\n /* istanbul ignore next */\n break;\n case \"Polygon\":\n switch (geom2.type) {\n case \"Point\":\n return !booleanPointInPolygon(geom2, geom1);\n case \"LineString\":\n return !isLineInPoly(geom1, geom2);\n case \"Polygon\":\n return !isPolyInPoly(geom2, geom1);\n }\n }\n return false;\n}\n// http://stackoverflow.com/a/11908158/1979085\nfunction isPointOnLine(lineString, pt) {\n for (var i = 0; i < lineString.coordinates.length - 1; i++) {\n if (isPointOnLineSegment(lineString.coordinates[i], lineString.coordinates[i + 1], pt.coordinates)) {\n return true;\n }\n }\n return false;\n}\nfunction isLineOnLine(lineString1, lineString2) {\n var doLinesIntersect = lineIntersect(lineString1, lineString2);\n if (doLinesIntersect.features.length > 0) {\n return true;\n }\n return false;\n}\nfunction isLineInPoly(polygon, lineString) {\n for (var _i = 0, _a = lineString.coordinates; _i < _a.length; _i++) {\n var coord = _a[_i];\n if (booleanPointInPolygon(coord, polygon)) {\n return true;\n }\n }\n var doLinesIntersect = lineIntersect(lineString, polygonToLine(polygon));\n if (doLinesIntersect.features.length > 0) {\n return true;\n }\n return false;\n}\n/**\n * Is Polygon (geom1) in Polygon (geom2)\n * Only takes into account outer rings\n * See http://stackoverflow.com/a/4833823/1979085\n *\n * @private\n * @param {Geometry|Feature} feature1 Polygon1\n * @param {Geometry|Feature} feature2 Polygon2\n * @returns {boolean} true/false\n */\nfunction isPolyInPoly(feature1, feature2) {\n for (var _i = 0, _a = feature1.coordinates[0]; _i < _a.length; _i++) {\n var coord1 = _a[_i];\n if (booleanPointInPolygon(coord1, feature2)) {\n return true;\n }\n }\n for (var _b = 0, _c = feature2.coordinates[0]; _b < _c.length; _b++) {\n var coord2 = _c[_b];\n if (booleanPointInPolygon(coord2, feature1)) {\n return true;\n }\n }\n var doLinesIntersect = lineIntersect(polygonToLine(feature1), polygonToLine(feature2));\n if (doLinesIntersect.features.length > 0) {\n return true;\n }\n return false;\n}\nfunction isPointOnLineSegment(lineSegmentStart, lineSegmentEnd, pt) {\n var dxc = pt[0] - lineSegmentStart[0];\n var dyc = pt[1] - lineSegmentStart[1];\n var dxl = lineSegmentEnd[0] - lineSegmentStart[0];\n var dyl = lineSegmentEnd[1] - lineSegmentStart[1];\n var cross = dxc * dyl - dyc * dxl;\n if (cross !== 0) {\n return false;\n }\n if (Math.abs(dxl) >= Math.abs(dyl)) {\n if (dxl > 0) {\n return lineSegmentStart[0] <= pt[0] && pt[0] <= lineSegmentEnd[0];\n }\n else {\n return lineSegmentEnd[0] <= pt[0] && pt[0] <= lineSegmentStart[0];\n }\n }\n else if (dyl > 0) {\n return lineSegmentStart[1] <= pt[1] && pt[1] <= lineSegmentEnd[1];\n }\n else {\n return lineSegmentEnd[1] <= pt[1] && pt[1] <= lineSegmentStart[1];\n }\n}\n/**\n * compareCoords\n *\n * @private\n * @param {Position} pair1 point [x,y]\n * @param {Position} pair2 point [x,y]\n * @returns {boolean} true/false if coord pairs match\n */\nfunction compareCoords(pair1, pair2) {\n return pair1[0] === pair2[0] && pair1[1] === pair2[1];\n}\nexport default booleanDisjoint;\n","import calcBbox from \"@turf/bbox\";\nimport booleanPointInPolygon from \"@turf/boolean-point-in-polygon\";\nimport isPointOnLine from \"@turf/boolean-point-on-line\";\nimport { getGeom } from \"@turf/invariant\";\n/**\n * Boolean-contains returns True if the second geometry is completely contained by the first geometry.\n * The interiors of both geometries must intersect and, the interior and boundary of the secondary (geometry b)\n * must not intersect the exterior of the primary (geometry a).\n * Boolean-contains returns the exact opposite result of the `@turf/boolean-within`.\n *\n * @name booleanContains\n * @param {Geometry|Feature} feature1 GeoJSON Feature or Geometry\n * @param {Geometry|Feature} feature2 GeoJSON Feature or Geometry\n * @returns {boolean} true/false\n * @example\n * var line = turf.lineString([[1, 1], [1, 2], [1, 3], [1, 4]]);\n * var point = turf.point([1, 2]);\n *\n * turf.booleanContains(line, point);\n * //=true\n */\nexport default function booleanContains(feature1, feature2) {\n var geom1 = getGeom(feature1);\n var geom2 = getGeom(feature2);\n var type1 = geom1.type;\n var type2 = geom2.type;\n var coords1 = geom1.coordinates;\n var coords2 = geom2.coordinates;\n switch (type1) {\n case \"Point\":\n switch (type2) {\n case \"Point\":\n return compareCoords(coords1, coords2);\n default:\n throw new Error(\"feature2 \" + type2 + \" geometry not supported\");\n }\n case \"MultiPoint\":\n switch (type2) {\n case \"Point\":\n return isPointInMultiPoint(geom1, geom2);\n case \"MultiPoint\":\n return isMultiPointInMultiPoint(geom1, geom2);\n default:\n throw new Error(\"feature2 \" + type2 + \" geometry not supported\");\n }\n case \"LineString\":\n switch (type2) {\n case \"Point\":\n return isPointOnLine(geom2, geom1, { ignoreEndVertices: true });\n case \"LineString\":\n return isLineOnLine(geom1, geom2);\n case \"MultiPoint\":\n return isMultiPointOnLine(geom1, geom2);\n default:\n throw new Error(\"feature2 \" + type2 + \" geometry not supported\");\n }\n case \"Polygon\":\n switch (type2) {\n case \"Point\":\n return booleanPointInPolygon(geom2, geom1, { ignoreBoundary: true });\n case \"LineString\":\n return isLineInPoly(geom1, geom2);\n case \"Polygon\":\n return isPolyInPoly(geom1, geom2);\n case \"MultiPoint\":\n return isMultiPointInPoly(geom1, geom2);\n default:\n throw new Error(\"feature2 \" + type2 + \" geometry not supported\");\n }\n default:\n throw new Error(\"feature1 \" + type1 + \" geometry not supported\");\n }\n}\nexport function isPointInMultiPoint(multiPoint, pt) {\n var i;\n var output = false;\n for (i = 0; i < multiPoint.coordinates.length; i++) {\n if (compareCoords(multiPoint.coordinates[i], pt.coordinates)) {\n output = true;\n break;\n }\n }\n return output;\n}\nexport function isMultiPointInMultiPoint(multiPoint1, multiPoint2) {\n for (var _i = 0, _a = multiPoint2.coordinates; _i < _a.length; _i++) {\n var coord2 = _a[_i];\n var matchFound = false;\n for (var _b = 0, _c = multiPoint1.coordinates; _b < _c.length; _b++) {\n var coord1 = _c[_b];\n if (compareCoords(coord2, coord1)) {\n matchFound = true;\n break;\n }\n }\n if (!matchFound) {\n return false;\n }\n }\n return true;\n}\nexport function isMultiPointOnLine(lineString, multiPoint) {\n var haveFoundInteriorPoint = false;\n for (var _i = 0, _a = multiPoint.coordinates; _i < _a.length; _i++) {\n var coord = _a[_i];\n if (isPointOnLine(coord, lineString, { ignoreEndVertices: true })) {\n haveFoundInteriorPoint = true;\n }\n if (!isPointOnLine(coord, lineString)) {\n return false;\n }\n }\n if (haveFoundInteriorPoint) {\n return true;\n }\n return false;\n}\nexport function isMultiPointInPoly(polygon, multiPoint) {\n for (var _i = 0, _a = multiPoint.coordinates; _i < _a.length; _i++) {\n var coord = _a[_i];\n if (!booleanPointInPolygon(coord, polygon, { ignoreBoundary: true })) {\n return false;\n }\n }\n return true;\n}\nexport function isLineOnLine(lineString1, lineString2) {\n var haveFoundInteriorPoint = false;\n for (var _i = 0, _a = lineString2.coordinates; _i < _a.length; _i++) {\n var coords = _a[_i];\n if (isPointOnLine({ type: \"Point\", coordinates: coords }, lineString1, {\n ignoreEndVertices: true,\n })) {\n haveFoundInteriorPoint = true;\n }\n if (!isPointOnLine({ type: \"Point\", coordinates: coords }, lineString1, {\n ignoreEndVertices: false,\n })) {\n return false;\n }\n }\n return haveFoundInteriorPoint;\n}\nexport function isLineInPoly(polygon, linestring) {\n var output = false;\n var i = 0;\n var polyBbox = calcBbox(polygon);\n var lineBbox = calcBbox(linestring);\n if (!doBBoxOverlap(polyBbox, lineBbox)) {\n return false;\n }\n for (i; i < linestring.coordinates.length - 1; i++) {\n var midPoint = getMidpoint(linestring.coordinates[i], linestring.coordinates[i + 1]);\n if (booleanPointInPolygon({ type: \"Point\", coordinates: midPoint }, polygon, {\n ignoreBoundary: true,\n })) {\n output = true;\n break;\n }\n }\n return output;\n}\n/**\n * Is Polygon2 in Polygon1\n * Only takes into account outer rings\n *\n * @private\n * @param {Geometry|Feature} feature1 Polygon1\n * @param {Geometry|Feature} feature2 Polygon2\n * @returns {boolean} true/false\n */\nexport function isPolyInPoly(feature1, feature2) {\n // Handle Nulls\n if (feature1.type === \"Feature\" && feature1.geometry === null) {\n return false;\n }\n if (feature2.type === \"Feature\" && feature2.geometry === null) {\n return false;\n }\n var poly1Bbox = calcBbox(feature1);\n var poly2Bbox = calcBbox(feature2);\n if (!doBBoxOverlap(poly1Bbox, poly2Bbox)) {\n return false;\n }\n var coords = getGeom(feature2).coordinates;\n for (var _i = 0, coords_1 = coords; _i < coords_1.length; _i++) {\n var ring = coords_1[_i];\n for (var _a = 0, ring_1 = ring; _a < ring_1.length; _a++) {\n var coord = ring_1[_a];\n if (!booleanPointInPolygon(coord, feature1)) {\n return false;\n }\n }\n }\n return true;\n}\nexport function doBBoxOverlap(bbox1, bbox2) {\n if (bbox1[0] > bbox2[0]) {\n return false;\n }\n if (bbox1[2] < bbox2[2]) {\n return false;\n }\n if (bbox1[1] > bbox2[1]) {\n return false;\n }\n if (bbox1[3] < bbox2[3]) {\n return false;\n }\n return true;\n}\n/**\n * compareCoords\n *\n * @private\n * @param {Position} pair1 point [x,y]\n * @param {Position} pair2 point [x,y]\n * @returns {boolean} true/false if coord pairs match\n */\nexport function compareCoords(pair1, pair2) {\n return pair1[0] === pair2[0] && pair1[1] === pair2[1];\n}\nexport function getMidpoint(pair1, pair2) {\n return [(pair1[0] + pair2[0]) / 2, (pair1[1] + pair2[1]) / 2];\n}\n","import booleanDisjoint from \"@turf/boolean-disjoint\";\nimport { flattenEach } from \"@turf/meta\";\n/**\n * Boolean-intersects returns (TRUE) two geometries intersect.\n *\n * @name booleanIntersects\n * @param {Geometry|Feature} feature1 GeoJSON Feature or Geometry\n * @param {Geometry|Feature} feature2 GeoJSON Feature or Geometry\n * @returns {boolean} true/false\n * @example\n * var point = turf.point([2, 2]);\n * var line = turf.lineString([[1, 1], [1, 2], [1, 3], [1, 4]]);\n *\n * turf.booleanIntersects(line, point);\n * //=true\n */\nexport default function booleanIntersects(feature1, feature2) {\n var bool = false;\n flattenEach(feature1, function (flatten1) {\n flattenEach(feature2, function (flatten2) {\n if (bool === true) {\n return true;\n }\n bool = !booleanDisjoint(flatten1.geometry, flatten2.geometry);\n });\n });\n return bool;\n}\n","import bbox from '@turf/bbox';\nimport booleanPointInPolygon from '@turf/boolean-point-in-polygon';\nimport distance from '@turf/distance';\nimport scale from '@turf/transform-scale';\nimport cleanCoords from '@turf/clean-coords';\nimport bboxPolygon from '@turf/bbox-polygon';\nimport { getCoord, getType, getGeom } from '@turf/invariant';\nimport { isObject, featureCollection, isNumber, point, feature, lineString } from '@turf/helpers';\n\n// javascript-astar 0.4.1\n// http://github.com/bgrins/javascript-astar\n// Freely distributable under the MIT License.\n// Implements the astar search algorithm in javascript using a Binary Heap.\n// Includes Binary Heap (with modifications) from Marijn Haverbeke.\n// http://eloquentjavascript.net/appendix2.html\n\nfunction pathTo(node) {\n var curr = node,\n path = [];\n while (curr.parent) {\n path.unshift(curr);\n curr = curr.parent;\n }\n return path;\n}\n\nfunction getHeap() {\n return new BinaryHeap(function (node) {\n return node.f;\n });\n}\n\n/**\n * Astar\n * @private\n */\nvar astar = {\n /**\n * Perform an A* Search on a graph given a start and end node.\n *\n * @private\n * @memberof astar\n * @param {Graph} graph Graph\n * @param {GridNode} start Start\n * @param {GridNode} end End\n * @param {Object} [options] Options\n * @param {bool} [options.closest] Specifies whether to return the path to the closest node if the target is unreachable.\n * @param {Function} [options.heuristic] Heuristic function (see astar.heuristics).\n * @returns {Object} Search\n */\n search: function (graph, start, end, options) {\n graph.cleanDirty();\n options = options || {};\n var heuristic = options.heuristic || astar.heuristics.manhattan,\n closest = options.closest || false;\n\n var openHeap = getHeap(),\n closestNode = start; // set the start node to be the closest if required\n\n start.h = heuristic(start, end);\n\n openHeap.push(start);\n\n while (openHeap.size() > 0) {\n // Grab the lowest f(x) to process next. Heap keeps this sorted for us.\n var currentNode = openHeap.pop();\n\n // End case -- result has been found, return the traced path.\n if (currentNode === end) {\n return pathTo(currentNode);\n }\n\n // Normal case -- move currentNode from open to closed, process each of its neighbors.\n currentNode.closed = true;\n\n // Find all neighbors for the current node.\n var neighbors = graph.neighbors(currentNode);\n\n for (var i = 0, il = neighbors.length; i < il; ++i) {\n var neighbor = neighbors[i];\n\n if (neighbor.closed || neighbor.isWall()) {\n // Not a valid node to process, skip to next neighbor.\n continue;\n }\n\n // The g score is the shortest distance from start to current node.\n // We need to check if the path we have arrived at this neighbor is the shortest one we have seen yet.\n var gScore = currentNode.g + neighbor.getCost(currentNode),\n beenVisited = neighbor.visited;\n\n if (!beenVisited || gScore < neighbor.g) {\n // Found an optimal (so far) path to this node. Take score for node to see how good it is.\n neighbor.visited = true;\n neighbor.parent = currentNode;\n neighbor.h = neighbor.h || heuristic(neighbor, end);\n neighbor.g = gScore;\n neighbor.f = neighbor.g + neighbor.h;\n graph.markDirty(neighbor);\n if (closest) {\n // If the neighbour is closer than the current closestNode or if it's equally close but has\n // a cheaper path than the current closest node then it becomes the closest node\n if (\n neighbor.h < closestNode.h ||\n (neighbor.h === closestNode.h && neighbor.g < closestNode.g)\n ) {\n closestNode = neighbor;\n }\n }\n\n if (!beenVisited) {\n // Pushing to heap will put it in proper place based on the 'f' value.\n openHeap.push(neighbor);\n } else {\n // Already seen the node, but since it has been rescored we need to reorder it in the heap\n openHeap.rescoreElement(neighbor);\n }\n }\n }\n }\n\n if (closest) {\n return pathTo(closestNode);\n }\n\n // No result was found - empty array signifies failure to find path.\n return [];\n },\n // See list of heuristics: http://theory.stanford.edu/~amitp/GameProgramming/Heuristics.html\n heuristics: {\n manhattan: function (pos0, pos1) {\n var d1 = Math.abs(pos1.x - pos0.x);\n var d2 = Math.abs(pos1.y - pos0.y);\n return d1 + d2;\n },\n diagonal: function (pos0, pos1) {\n var D = 1;\n var D2 = Math.sqrt(2);\n var d1 = Math.abs(pos1.x - pos0.x);\n var d2 = Math.abs(pos1.y - pos0.y);\n return D * (d1 + d2) + (D2 - 2 * D) * Math.min(d1, d2);\n },\n },\n cleanNode: function (node) {\n node.f = 0;\n node.g = 0;\n node.h = 0;\n node.visited = false;\n node.closed = false;\n node.parent = null;\n },\n};\n\n/**\n * A graph memory structure\n *\n * @private\n * @param {Array} gridIn 2D array of input weights\n * @param {Object} [options] Options\n * @param {boolean} [options.diagonal] Specifies whether diagonal moves are allowed\n * @returns {void} Graph\n */\nfunction Graph(gridIn, options) {\n options = options || {};\n this.nodes = [];\n this.diagonal = !!options.diagonal;\n this.grid = [];\n for (var x = 0; x < gridIn.length; x++) {\n this.grid[x] = [];\n\n for (var y = 0, row = gridIn[x]; y < row.length; y++) {\n var node = new GridNode(x, y, row[y]);\n this.grid[x][y] = node;\n this.nodes.push(node);\n }\n }\n this.init();\n}\n\nGraph.prototype.init = function () {\n this.dirtyNodes = [];\n for (var i = 0; i < this.nodes.length; i++) {\n astar.cleanNode(this.nodes[i]);\n }\n};\n\nGraph.prototype.cleanDirty = function () {\n for (var i = 0; i < this.dirtyNodes.length; i++) {\n astar.cleanNode(this.dirtyNodes[i]);\n }\n this.dirtyNodes = [];\n};\n\nGraph.prototype.markDirty = function (node) {\n this.dirtyNodes.push(node);\n};\n\nGraph.prototype.neighbors = function (node) {\n var ret = [],\n x = node.x,\n y = node.y,\n grid = this.grid;\n\n // West\n if (grid[x - 1] && grid[x - 1][y]) {\n ret.push(grid[x - 1][y]);\n }\n\n // East\n if (grid[x + 1] && grid[x + 1][y]) {\n ret.push(grid[x + 1][y]);\n }\n\n // South\n if (grid[x] && grid[x][y - 1]) {\n ret.push(grid[x][y - 1]);\n }\n\n // North\n if (grid[x] && grid[x][y + 1]) {\n ret.push(grid[x][y + 1]);\n }\n\n if (this.diagonal) {\n // Southwest\n if (grid[x - 1] && grid[x - 1][y - 1]) {\n ret.push(grid[x - 1][y - 1]);\n }\n\n // Southeast\n if (grid[x + 1] && grid[x + 1][y - 1]) {\n ret.push(grid[x + 1][y - 1]);\n }\n\n // Northwest\n if (grid[x - 1] && grid[x - 1][y + 1]) {\n ret.push(grid[x - 1][y + 1]);\n }\n\n // Northeast\n if (grid[x + 1] && grid[x + 1][y + 1]) {\n ret.push(grid[x + 1][y + 1]);\n }\n }\n\n return ret;\n};\n\nGraph.prototype.toString = function () {\n var graphString = [],\n nodes = this.grid, // when using grid\n rowDebug,\n row,\n y,\n l;\n for (var x = 0, len = nodes.length; x < len; x++) {\n rowDebug = [];\n row = nodes[x];\n for (y = 0, l = row.length; y < l; y++) {\n rowDebug.push(row[y].weight);\n }\n graphString.push(rowDebug.join(\" \"));\n }\n return graphString.join(\"\\n\");\n};\n\nfunction GridNode(x, y, weight) {\n this.x = x;\n this.y = y;\n this.weight = weight;\n}\n\nGridNode.prototype.toString = function () {\n return \"[\" + this.x + \" \" + this.y + \"]\";\n};\n\nGridNode.prototype.getCost = function (fromNeighbor) {\n // Take diagonal weight into consideration.\n if (fromNeighbor && fromNeighbor.x !== this.x && fromNeighbor.y !== this.y) {\n return this.weight * 1.41421;\n }\n return this.weight;\n};\n\nGridNode.prototype.isWall = function () {\n return this.weight === 0;\n};\n\nfunction BinaryHeap(scoreFunction) {\n this.content = [];\n this.scoreFunction = scoreFunction;\n}\n\nBinaryHeap.prototype = {\n push: function (element) {\n // Add the new element to the end of the array.\n this.content.push(element);\n\n // Allow it to sink down.\n this.sinkDown(this.content.length - 1);\n },\n pop: function () {\n // Store the first element so we can return it later.\n var result = this.content[0];\n // Get the element at the end of the array.\n var end = this.content.pop();\n // If there are any elements left, put the end element at the\n // start, and let it bubble up.\n if (this.content.length > 0) {\n this.content[0] = end;\n this.bubbleUp(0);\n }\n return result;\n },\n remove: function (node) {\n var i = this.content.indexOf(node);\n\n // When it is found, the process seen in 'pop' is repeated\n // to fill up the hole.\n var end = this.content.pop();\n\n if (i !== this.content.length - 1) {\n this.content[i] = end;\n\n if (this.scoreFunction(end) < this.scoreFunction(node)) {\n this.sinkDown(i);\n } else {\n this.bubbleUp(i);\n }\n }\n },\n size: function () {\n return this.content.length;\n },\n rescoreElement: function (node) {\n this.sinkDown(this.content.indexOf(node));\n },\n sinkDown: function (n) {\n // Fetch the element that has to be sunk.\n var element = this.content[n];\n\n // When at 0, an element can not sink any further.\n while (n > 0) {\n // Compute the parent element's index, and fetch it.\n var parentN = ((n + 1) >> 1) - 1,\n parent = this.content[parentN];\n // Swap the elements if the parent is greater.\n if (this.scoreFunction(element) < this.scoreFunction(parent)) {\n this.content[parentN] = element;\n this.content[n] = parent;\n // Update 'n' to continue at the new position.\n n = parentN;\n // Found a parent that is less, no need to sink any further.\n } else {\n break;\n }\n }\n },\n bubbleUp: function (n) {\n // Look up the target element and its score.\n var length = this.content.length,\n element = this.content[n],\n elemScore = this.scoreFunction(element);\n\n while (true) {\n // Compute the indices of the child elements.\n var child2N = (n + 1) << 1,\n child1N = child2N - 1;\n // This is used to store the new position of the element, if any.\n var swap = null,\n child1Score;\n // If the first child exists (is inside the array)...\n if (child1N < length) {\n // Look it up and compute its score.\n var child1 = this.content[child1N];\n child1Score = this.scoreFunction(child1);\n\n // If the score is less than our element's, we need to swap.\n if (child1Score < elemScore) {\n swap = child1N;\n }\n }\n\n // Do the same checks for the other child.\n if (child2N < length) {\n var child2 = this.content[child2N],\n child2Score = this.scoreFunction(child2);\n if (child2Score < (swap === null ? elemScore : child1Score)) {\n swap = child2N;\n }\n }\n\n // If the element needs to be moved, swap it, and continue.\n if (swap !== null) {\n this.content[n] = this.content[swap];\n this.content[swap] = element;\n n = swap;\n // Otherwise, we are done.\n } else {\n break;\n }\n }\n },\n};\n\n/**\n * Returns the shortest {@link LineString|path} from {@link Point|start} to {@link Point|end} without colliding with\n * any {@link Feature} in {@link FeatureCollection| obstacles}\n *\n * @name shortestPath\n * @param {Coord} start point\n * @param {Coord} end point\n * @param {Object} [options={}] optional parameters\n * @param {Geometry|Feature|FeatureCollection} [options.obstacles] areas which path cannot travel\n * @param {number} [options.minDistance] minimum distance between shortest path and obstacles\n * @param {string} [options.units='kilometers'] unit in which resolution & minimum distance will be expressed in; it can be degrees, radians, miles, kilometers, ...\n * @param {number} [options.resolution=100] distance between matrix points on which the path will be calculated\n * @returns {Feature} shortest path between start and end\n * @example\n * var start = [-5, -6];\n * var end = [9, -6];\n * var options = {\n * obstacles: turf.polygon([[[0, -7], [5, -7], [5, -3], [0, -3], [0, -7]]])\n * };\n *\n * var path = turf.shortestPath(start, end, options);\n *\n * //addToMap\n * var addToMap = [start, end, options.obstacles, path];\n */\nfunction shortestPath(start, end, options) {\n // Optional parameters\n options = options || {};\n if (!isObject(options)) throw new Error(\"options is invalid\");\n var resolution = options.resolution;\n var minDistance = options.minDistance;\n var obstacles = options.obstacles || featureCollection([]);\n\n // validation\n if (!start) throw new Error(\"start is required\");\n if (!end) throw new Error(\"end is required\");\n if ((resolution && !isNumber(resolution)) || resolution <= 0)\n throw new Error(\"options.resolution must be a number, greater than 0\");\n if (minDistance)\n throw new Error(\"options.minDistance is not yet implemented\");\n\n // Normalize Inputs\n var startCoord = getCoord(start);\n var endCoord = getCoord(end);\n start = point(startCoord);\n end = point(endCoord);\n\n // Handle obstacles\n switch (getType(obstacles)) {\n case \"FeatureCollection\":\n if (obstacles.features.length === 0)\n return lineString([startCoord, endCoord]);\n break;\n case \"Polygon\":\n obstacles = featureCollection([feature(getGeom(obstacles))]);\n break;\n default:\n throw new Error(\"invalid obstacles\");\n }\n\n // define path grid area\n var collection = obstacles;\n collection.features.push(start);\n collection.features.push(end);\n var box = bbox(scale(bboxPolygon(bbox(collection)), 1.15)); // extend 15%\n if (!resolution) {\n var width = distance([box[0], box[1]], [box[2], box[1]], options);\n resolution = width / 100;\n }\n collection.features.pop();\n collection.features.pop();\n\n var west = box[0];\n var south = box[1];\n var east = box[2];\n var north = box[3];\n\n var xFraction = resolution / distance([west, south], [east, south], options);\n var cellWidth = xFraction * (east - west);\n var yFraction = resolution / distance([west, south], [west, north], options);\n var cellHeight = yFraction * (north - south);\n\n var bboxHorizontalSide = east - west;\n var bboxVerticalSide = north - south;\n var columns = Math.floor(bboxHorizontalSide / cellWidth);\n var rows = Math.floor(bboxVerticalSide / cellHeight);\n // adjust origin of the grid\n var deltaX = (bboxHorizontalSide - columns * cellWidth) / 2;\n var deltaY = (bboxVerticalSide - rows * cellHeight) / 2;\n\n // loop through points only once to speed up process\n // define matrix grid for A-star algorithm\n var pointMatrix = [];\n var matrix = [];\n\n var closestToStart = [];\n var closestToEnd = [];\n var minDistStart = Infinity;\n var minDistEnd = Infinity;\n var currentY = north - deltaY;\n var r = 0;\n while (currentY >= south) {\n // var currentY = south + deltaY;\n var matrixRow = [];\n var pointMatrixRow = [];\n var currentX = west + deltaX;\n var c = 0;\n while (currentX <= east) {\n var pt = point([currentX, currentY]);\n var isInsideObstacle = isInside(pt, obstacles);\n // feed obstacles matrix\n matrixRow.push(isInsideObstacle ? 0 : 1); // with javascript-astar\n // matrixRow.push(isInsideObstacle ? 1 : 0); // with astar-andrea\n // map point's coords\n pointMatrixRow.push(currentX + \"|\" + currentY);\n // set closest points\n var distStart = distance(pt, start);\n // if (distStart < minDistStart) {\n if (!isInsideObstacle && distStart < minDistStart) {\n minDistStart = distStart;\n closestToStart = { x: c, y: r };\n }\n var distEnd = distance(pt, end);\n // if (distEnd < minDistEnd) {\n if (!isInsideObstacle && distEnd < minDistEnd) {\n minDistEnd = distEnd;\n closestToEnd = { x: c, y: r };\n }\n currentX += cellWidth;\n c++;\n }\n matrix.push(matrixRow);\n pointMatrix.push(pointMatrixRow);\n currentY -= cellHeight;\n r++;\n }\n\n // find path on matrix grid\n\n // javascript-astar ----------------------\n var graph = new Graph(matrix, { diagonal: true });\n var startOnMatrix = graph.grid[closestToStart.y][closestToStart.x];\n var endOnMatrix = graph.grid[closestToEnd.y][closestToEnd.x];\n var result = astar.search(graph, startOnMatrix, endOnMatrix);\n\n var path = [startCoord];\n result.forEach(function (coord) {\n var coords = pointMatrix[coord.x][coord.y].split(\"|\");\n path.push([+coords[0], +coords[1]]); // make sure coords are numbers\n });\n path.push(endCoord);\n // ---------------------------------------\n\n // astar-andrea ------------------------\n // var result = aStar(matrix, [closestToStart.x, closestToStart.y], [closestToEnd.x, closestToEnd.y], 'DiagonalFree');\n // var path = [start.geometry.coordinates];\n // result.forEach(function (coord) {\n // var coords = pointMatrix[coord[1]][coord[0]].split('|');\n // path.push([+coords[0], +coords[1]]); // make sure coords are numbers\n // });\n // path.push(end.geometry.coordinates);\n // ---------------------------------------\n\n return cleanCoords(lineString(path));\n}\n\n/**\n * Checks if Point is inside any of the Polygons\n *\n * @private\n * @param {Feature} pt to check\n * @param {FeatureCollection} polygons features\n * @returns {boolean} if inside or not\n */\nfunction isInside(pt, polygons) {\n for (var i = 0; i < polygons.features.length; i++) {\n if (booleanPointInPolygon(pt, polygons.features[i])) {\n return true;\n }\n }\n return false;\n}\n\nexport default shortestPath;\n","function RedBlackTree() {\n this._ = null; // root node\n}\n\nexport function RedBlackNode(node) {\n node.U = // parent node\n node.C = // color - true for red, false for black\n node.L = // left node\n node.R = // right node\n node.P = // previous node\n node.N = null; // next node\n}\n\nRedBlackTree.prototype = {\n constructor: RedBlackTree,\n\n insert: function(after, node) {\n var parent, grandpa, uncle;\n\n if (after) {\n node.P = after;\n node.N = after.N;\n if (after.N) after.N.P = node;\n after.N = node;\n if (after.R) {\n after = after.R;\n while (after.L) after = after.L;\n after.L = node;\n } else {\n after.R = node;\n }\n parent = after;\n } else if (this._) {\n after = RedBlackFirst(this._);\n node.P = null;\n node.N = after;\n after.P = after.L = node;\n parent = after;\n } else {\n node.P = node.N = null;\n this._ = node;\n parent = null;\n }\n node.L = node.R = null;\n node.U = parent;\n node.C = true;\n\n after = node;\n while (parent && parent.C) {\n grandpa = parent.U;\n if (parent === grandpa.L) {\n uncle = grandpa.R;\n if (uncle && uncle.C) {\n parent.C = uncle.C = false;\n grandpa.C = true;\n after = grandpa;\n } else {\n if (after === parent.R) {\n RedBlackRotateLeft(this, parent);\n after = parent;\n parent = after.U;\n }\n parent.C = false;\n grandpa.C = true;\n RedBlackRotateRight(this, grandpa);\n }\n } else {\n uncle = grandpa.L;\n if (uncle && uncle.C) {\n parent.C = uncle.C = false;\n grandpa.C = true;\n after = grandpa;\n } else {\n if (after === parent.L) {\n RedBlackRotateRight(this, parent);\n after = parent;\n parent = after.U;\n }\n parent.C = false;\n grandpa.C = true;\n RedBlackRotateLeft(this, grandpa);\n }\n }\n parent = after.U;\n }\n this._.C = false;\n },\n\n remove: function(node) {\n if (node.N) node.N.P = node.P;\n if (node.P) node.P.N = node.N;\n node.N = node.P = null;\n\n var parent = node.U,\n sibling,\n left = node.L,\n right = node.R,\n next,\n red;\n\n if (!left) next = right;\n else if (!right) next = left;\n else next = RedBlackFirst(right);\n\n if (parent) {\n if (parent.L === node) parent.L = next;\n else parent.R = next;\n } else {\n this._ = next;\n }\n\n if (left && right) {\n red = next.C;\n next.C = node.C;\n next.L = left;\n left.U = next;\n if (next !== right) {\n parent = next.U;\n next.U = node.U;\n node = next.R;\n parent.L = node;\n next.R = right;\n right.U = next;\n } else {\n next.U = parent;\n parent = next;\n node = next.R;\n }\n } else {\n red = node.C;\n node = next;\n }\n\n if (node) node.U = parent;\n if (red) return;\n if (node && node.C) { node.C = false; return; }\n\n do {\n if (node === this._) break;\n if (node === parent.L) {\n sibling = parent.R;\n if (sibling.C) {\n sibling.C = false;\n parent.C = true;\n RedBlackRotateLeft(this, parent);\n sibling = parent.R;\n }\n if ((sibling.L && sibling.L.C)\n || (sibling.R && sibling.R.C)) {\n if (!sibling.R || !sibling.R.C) {\n sibling.L.C = false;\n sibling.C = true;\n RedBlackRotateRight(this, sibling);\n sibling = parent.R;\n }\n sibling.C = parent.C;\n parent.C = sibling.R.C = false;\n RedBlackRotateLeft(this, parent);\n node = this._;\n break;\n }\n } else {\n sibling = parent.L;\n if (sibling.C) {\n sibling.C = false;\n parent.C = true;\n RedBlackRotateRight(this, parent);\n sibling = parent.L;\n }\n if ((sibling.L && sibling.L.C)\n || (sibling.R && sibling.R.C)) {\n if (!sibling.L || !sibling.L.C) {\n sibling.R.C = false;\n sibling.C = true;\n RedBlackRotateLeft(this, sibling);\n sibling = parent.L;\n }\n sibling.C = parent.C;\n parent.C = sibling.L.C = false;\n RedBlackRotateRight(this, parent);\n node = this._;\n break;\n }\n }\n sibling.C = true;\n node = parent;\n parent = parent.U;\n } while (!node.C);\n\n if (node) node.C = false;\n }\n};\n\nfunction RedBlackRotateLeft(tree, node) {\n var p = node,\n q = node.R,\n parent = p.U;\n\n if (parent) {\n if (parent.L === p) parent.L = q;\n else parent.R = q;\n } else {\n tree._ = q;\n }\n\n q.U = parent;\n p.U = q;\n p.R = q.L;\n if (p.R) p.R.U = p;\n q.L = p;\n}\n\nfunction RedBlackRotateRight(tree, node) {\n var p = node,\n q = node.L,\n parent = p.U;\n\n if (parent) {\n if (parent.L === p) parent.L = q;\n else parent.R = q;\n } else {\n tree._ = q;\n }\n\n q.U = parent;\n p.U = q;\n p.L = q.R;\n if (p.L) p.L.U = p;\n q.R = p;\n}\n\nfunction RedBlackFirst(node) {\n while (node.L) node = node.L;\n return node;\n}\n\nexport default RedBlackTree;\n","import {cells, edges, epsilon} from \"./Diagram\";\n\nexport function createEdge(left, right, v0, v1) {\n var edge = [null, null],\n index = edges.push(edge) - 1;\n edge.left = left;\n edge.right = right;\n if (v0) setEdgeEnd(edge, left, right, v0);\n if (v1) setEdgeEnd(edge, right, left, v1);\n cells[left.index].halfedges.push(index);\n cells[right.index].halfedges.push(index);\n return edge;\n}\n\nexport function createBorderEdge(left, v0, v1) {\n var edge = [v0, v1];\n edge.left = left;\n return edge;\n}\n\nexport function setEdgeEnd(edge, left, right, vertex) {\n if (!edge[0] && !edge[1]) {\n edge[0] = vertex;\n edge.left = left;\n edge.right = right;\n } else if (edge.left === right) {\n edge[1] = vertex;\n } else {\n edge[0] = vertex;\n }\n}\n\n// Liang–Barsky line clipping.\nfunction clipEdge(edge, x0, y0, x1, y1) {\n var a = edge[0],\n b = edge[1],\n ax = a[0],\n ay = a[1],\n bx = b[0],\n by = b[1],\n t0 = 0,\n t1 = 1,\n dx = bx - ax,\n dy = by - ay,\n r;\n\n r = x0 - ax;\n if (!dx && r > 0) return;\n r /= dx;\n if (dx < 0) {\n if (r < t0) return;\n if (r < t1) t1 = r;\n } else if (dx > 0) {\n if (r > t1) return;\n if (r > t0) t0 = r;\n }\n\n r = x1 - ax;\n if (!dx && r < 0) return;\n r /= dx;\n if (dx < 0) {\n if (r > t1) return;\n if (r > t0) t0 = r;\n } else if (dx > 0) {\n if (r < t0) return;\n if (r < t1) t1 = r;\n }\n\n r = y0 - ay;\n if (!dy && r > 0) return;\n r /= dy;\n if (dy < 0) {\n if (r < t0) return;\n if (r < t1) t1 = r;\n } else if (dy > 0) {\n if (r > t1) return;\n if (r > t0) t0 = r;\n }\n\n r = y1 - ay;\n if (!dy && r < 0) return;\n r /= dy;\n if (dy < 0) {\n if (r > t1) return;\n if (r > t0) t0 = r;\n } else if (dy > 0) {\n if (r < t0) return;\n if (r < t1) t1 = r;\n }\n\n if (!(t0 > 0) && !(t1 < 1)) return true; // TODO Better check?\n\n if (t0 > 0) edge[0] = [ax + t0 * dx, ay + t0 * dy];\n if (t1 < 1) edge[1] = [ax + t1 * dx, ay + t1 * dy];\n return true;\n}\n\nfunction connectEdge(edge, x0, y0, x1, y1) {\n var v1 = edge[1];\n if (v1) return true;\n\n var v0 = edge[0],\n left = edge.left,\n right = edge.right,\n lx = left[0],\n ly = left[1],\n rx = right[0],\n ry = right[1],\n fx = (lx + rx) / 2,\n fy = (ly + ry) / 2,\n fm,\n fb;\n\n if (ry === ly) {\n if (fx < x0 || fx >= x1) return;\n if (lx > rx) {\n if (!v0) v0 = [fx, y0];\n else if (v0[1] >= y1) return;\n v1 = [fx, y1];\n } else {\n if (!v0) v0 = [fx, y1];\n else if (v0[1] < y0) return;\n v1 = [fx, y0];\n }\n } else {\n fm = (lx - rx) / (ry - ly);\n fb = fy - fm * fx;\n if (fm < -1 || fm > 1) {\n if (lx > rx) {\n if (!v0) v0 = [(y0 - fb) / fm, y0];\n else if (v0[1] >= y1) return;\n v1 = [(y1 - fb) / fm, y1];\n } else {\n if (!v0) v0 = [(y1 - fb) / fm, y1];\n else if (v0[1] < y0) return;\n v1 = [(y0 - fb) / fm, y0];\n }\n } else {\n if (ly < ry) {\n if (!v0) v0 = [x0, fm * x0 + fb];\n else if (v0[0] >= x1) return;\n v1 = [x1, fm * x1 + fb];\n } else {\n if (!v0) v0 = [x1, fm * x1 + fb];\n else if (v0[0] < x0) return;\n v1 = [x0, fm * x0 + fb];\n }\n }\n }\n\n edge[0] = v0;\n edge[1] = v1;\n return true;\n}\n\nexport function clipEdges(x0, y0, x1, y1) {\n var i = edges.length,\n edge;\n\n while (i--) {\n if (!connectEdge(edge = edges[i], x0, y0, x1, y1)\n || !clipEdge(edge, x0, y0, x1, y1)\n || !(Math.abs(edge[0][0] - edge[1][0]) > epsilon\n || Math.abs(edge[0][1] - edge[1][1]) > epsilon)) {\n delete edges[i];\n }\n }\n}\n","import {createBorderEdge} from \"./Edge\";\nimport {cells, edges, epsilon} from \"./Diagram\";\n\nexport function createCell(site) {\n return cells[site.index] = {\n site: site,\n halfedges: []\n };\n}\n\nfunction cellHalfedgeAngle(cell, edge) {\n var site = cell.site,\n va = edge.left,\n vb = edge.right;\n if (site === vb) vb = va, va = site;\n if (vb) return Math.atan2(vb[1] - va[1], vb[0] - va[0]);\n if (site === va) va = edge[1], vb = edge[0];\n else va = edge[0], vb = edge[1];\n return Math.atan2(va[0] - vb[0], vb[1] - va[1]);\n}\n\nexport function cellHalfedgeStart(cell, edge) {\n return edge[+(edge.left !== cell.site)];\n}\n\nexport function cellHalfedgeEnd(cell, edge) {\n return edge[+(edge.left === cell.site)];\n}\n\nexport function sortCellHalfedges() {\n for (var i = 0, n = cells.length, cell, halfedges, j, m; i < n; ++i) {\n if ((cell = cells[i]) && (m = (halfedges = cell.halfedges).length)) {\n var index = new Array(m),\n array = new Array(m);\n for (j = 0; j < m; ++j) index[j] = j, array[j] = cellHalfedgeAngle(cell, edges[halfedges[j]]);\n index.sort(function(i, j) { return array[j] - array[i]; });\n for (j = 0; j < m; ++j) array[j] = halfedges[index[j]];\n for (j = 0; j < m; ++j) halfedges[j] = array[j];\n }\n }\n}\n\nexport function clipCells(x0, y0, x1, y1) {\n var nCells = cells.length,\n iCell,\n cell,\n site,\n iHalfedge,\n halfedges,\n nHalfedges,\n start,\n startX,\n startY,\n end,\n endX,\n endY,\n cover = true;\n\n for (iCell = 0; iCell < nCells; ++iCell) {\n if (cell = cells[iCell]) {\n site = cell.site;\n halfedges = cell.halfedges;\n iHalfedge = halfedges.length;\n\n // Remove any dangling clipped edges.\n while (iHalfedge--) {\n if (!edges[halfedges[iHalfedge]]) {\n halfedges.splice(iHalfedge, 1);\n }\n }\n\n // Insert any border edges as necessary.\n iHalfedge = 0, nHalfedges = halfedges.length;\n while (iHalfedge < nHalfedges) {\n end = cellHalfedgeEnd(cell, edges[halfedges[iHalfedge]]), endX = end[0], endY = end[1];\n start = cellHalfedgeStart(cell, edges[halfedges[++iHalfedge % nHalfedges]]), startX = start[0], startY = start[1];\n if (Math.abs(endX - startX) > epsilon || Math.abs(endY - startY) > epsilon) {\n halfedges.splice(iHalfedge, 0, edges.push(createBorderEdge(site, end,\n Math.abs(endX - x0) < epsilon && y1 - endY > epsilon ? [x0, Math.abs(startX - x0) < epsilon ? startY : y1]\n : Math.abs(endY - y1) < epsilon && x1 - endX > epsilon ? [Math.abs(startY - y1) < epsilon ? startX : x1, y1]\n : Math.abs(endX - x1) < epsilon && endY - y0 > epsilon ? [x1, Math.abs(startX - x1) < epsilon ? startY : y0]\n : Math.abs(endY - y0) < epsilon && endX - x0 > epsilon ? [Math.abs(startY - y0) < epsilon ? startX : x0, y0]\n : null)) - 1);\n ++nHalfedges;\n }\n }\n\n if (nHalfedges) cover = false;\n }\n }\n\n // If there weren’t any edges, have the closest site cover the extent.\n // It doesn’t matter which corner of the extent we measure!\n if (cover) {\n var dx, dy, d2, dc = Infinity;\n\n for (iCell = 0, cover = null; iCell < nCells; ++iCell) {\n if (cell = cells[iCell]) {\n site = cell.site;\n dx = site[0] - x0;\n dy = site[1] - y0;\n d2 = dx * dx + dy * dy;\n if (d2 < dc) dc = d2, cover = cell;\n }\n }\n\n if (cover) {\n var v00 = [x0, y0], v01 = [x0, y1], v11 = [x1, y1], v10 = [x1, y0];\n cover.halfedges.push(\n edges.push(createBorderEdge(site = cover.site, v00, v01)) - 1,\n edges.push(createBorderEdge(site, v01, v11)) - 1,\n edges.push(createBorderEdge(site, v11, v10)) - 1,\n edges.push(createBorderEdge(site, v10, v00)) - 1\n );\n }\n }\n\n // Lastly delete any cells with no edges; these were entirely clipped.\n for (iCell = 0; iCell < nCells; ++iCell) {\n if (cell = cells[iCell]) {\n if (!cell.halfedges.length) {\n delete cells[iCell];\n }\n }\n }\n}\n","import {RedBlackNode} from \"./RedBlackTree\";\nimport {circles, epsilon2} from \"./Diagram\";\n\nvar circlePool = [];\n\nexport var firstCircle;\n\nfunction Circle() {\n RedBlackNode(this);\n this.x =\n this.y =\n this.arc =\n this.site =\n this.cy = null;\n}\n\nexport function attachCircle(arc) {\n var lArc = arc.P,\n rArc = arc.N;\n\n if (!lArc || !rArc) return;\n\n var lSite = lArc.site,\n cSite = arc.site,\n rSite = rArc.site;\n\n if (lSite === rSite) return;\n\n var bx = cSite[0],\n by = cSite[1],\n ax = lSite[0] - bx,\n ay = lSite[1] - by,\n cx = rSite[0] - bx,\n cy = rSite[1] - by;\n\n var d = 2 * (ax * cy - ay * cx);\n if (d >= -epsilon2) return;\n\n var ha = ax * ax + ay * ay,\n hc = cx * cx + cy * cy,\n x = (cy * ha - ay * hc) / d,\n y = (ax * hc - cx * ha) / d;\n\n var circle = circlePool.pop() || new Circle;\n circle.arc = arc;\n circle.site = cSite;\n circle.x = x + bx;\n circle.y = (circle.cy = y + by) + Math.sqrt(x * x + y * y); // y bottom\n\n arc.circle = circle;\n\n var before = null,\n node = circles._;\n\n while (node) {\n if (circle.y < node.y || (circle.y === node.y && circle.x <= node.x)) {\n if (node.L) node = node.L;\n else { before = node.P; break; }\n } else {\n if (node.R) node = node.R;\n else { before = node; break; }\n }\n }\n\n circles.insert(before, circle);\n if (!before) firstCircle = circle;\n}\n\nexport function detachCircle(arc) {\n var circle = arc.circle;\n if (circle) {\n if (!circle.P) firstCircle = circle.N;\n circles.remove(circle);\n circlePool.push(circle);\n RedBlackNode(circle);\n arc.circle = null;\n }\n}\n","import {RedBlackNode} from \"./RedBlackTree\";\nimport {createCell} from \"./Cell\";\nimport {attachCircle, detachCircle} from \"./Circle\";\nimport {createEdge, setEdgeEnd} from \"./Edge\";\nimport {beaches, epsilon} from \"./Diagram\";\n\nvar beachPool = [];\n\nfunction Beach() {\n RedBlackNode(this);\n this.edge =\n this.site =\n this.circle = null;\n}\n\nfunction createBeach(site) {\n var beach = beachPool.pop() || new Beach;\n beach.site = site;\n return beach;\n}\n\nfunction detachBeach(beach) {\n detachCircle(beach);\n beaches.remove(beach);\n beachPool.push(beach);\n RedBlackNode(beach);\n}\n\nexport function removeBeach(beach) {\n var circle = beach.circle,\n x = circle.x,\n y = circle.cy,\n vertex = [x, y],\n previous = beach.P,\n next = beach.N,\n disappearing = [beach];\n\n detachBeach(beach);\n\n var lArc = previous;\n while (lArc.circle\n && Math.abs(x - lArc.circle.x) < epsilon\n && Math.abs(y - lArc.circle.cy) < epsilon) {\n previous = lArc.P;\n disappearing.unshift(lArc);\n detachBeach(lArc);\n lArc = previous;\n }\n\n disappearing.unshift(lArc);\n detachCircle(lArc);\n\n var rArc = next;\n while (rArc.circle\n && Math.abs(x - rArc.circle.x) < epsilon\n && Math.abs(y - rArc.circle.cy) < epsilon) {\n next = rArc.N;\n disappearing.push(rArc);\n detachBeach(rArc);\n rArc = next;\n }\n\n disappearing.push(rArc);\n detachCircle(rArc);\n\n var nArcs = disappearing.length,\n iArc;\n for (iArc = 1; iArc < nArcs; ++iArc) {\n rArc = disappearing[iArc];\n lArc = disappearing[iArc - 1];\n setEdgeEnd(rArc.edge, lArc.site, rArc.site, vertex);\n }\n\n lArc = disappearing[0];\n rArc = disappearing[nArcs - 1];\n rArc.edge = createEdge(lArc.site, rArc.site, null, vertex);\n\n attachCircle(lArc);\n attachCircle(rArc);\n}\n\nexport function addBeach(site) {\n var x = site[0],\n directrix = site[1],\n lArc,\n rArc,\n dxl,\n dxr,\n node = beaches._;\n\n while (node) {\n dxl = leftBreakPoint(node, directrix) - x;\n if (dxl > epsilon) node = node.L; else {\n dxr = x - rightBreakPoint(node, directrix);\n if (dxr > epsilon) {\n if (!node.R) {\n lArc = node;\n break;\n }\n node = node.R;\n } else {\n if (dxl > -epsilon) {\n lArc = node.P;\n rArc = node;\n } else if (dxr > -epsilon) {\n lArc = node;\n rArc = node.N;\n } else {\n lArc = rArc = node;\n }\n break;\n }\n }\n }\n\n createCell(site);\n var newArc = createBeach(site);\n beaches.insert(lArc, newArc);\n\n if (!lArc && !rArc) return;\n\n if (lArc === rArc) {\n detachCircle(lArc);\n rArc = createBeach(lArc.site);\n beaches.insert(newArc, rArc);\n newArc.edge = rArc.edge = createEdge(lArc.site, newArc.site);\n attachCircle(lArc);\n attachCircle(rArc);\n return;\n }\n\n if (!rArc) { // && lArc\n newArc.edge = createEdge(lArc.site, newArc.site);\n return;\n }\n\n // else lArc !== rArc\n detachCircle(lArc);\n detachCircle(rArc);\n\n var lSite = lArc.site,\n ax = lSite[0],\n ay = lSite[1],\n bx = site[0] - ax,\n by = site[1] - ay,\n rSite = rArc.site,\n cx = rSite[0] - ax,\n cy = rSite[1] - ay,\n d = 2 * (bx * cy - by * cx),\n hb = bx * bx + by * by,\n hc = cx * cx + cy * cy,\n vertex = [(cy * hb - by * hc) / d + ax, (bx * hc - cx * hb) / d + ay];\n\n setEdgeEnd(rArc.edge, lSite, rSite, vertex);\n newArc.edge = createEdge(lSite, site, null, vertex);\n rArc.edge = createEdge(site, rSite, null, vertex);\n attachCircle(lArc);\n attachCircle(rArc);\n}\n\nfunction leftBreakPoint(arc, directrix) {\n var site = arc.site,\n rfocx = site[0],\n rfocy = site[1],\n pby2 = rfocy - directrix;\n\n if (!pby2) return rfocx;\n\n var lArc = arc.P;\n if (!lArc) return -Infinity;\n\n site = lArc.site;\n var lfocx = site[0],\n lfocy = site[1],\n plby2 = lfocy - directrix;\n\n if (!plby2) return lfocx;\n\n var hl = lfocx - rfocx,\n aby2 = 1 / pby2 - 1 / plby2,\n b = hl / plby2;\n\n if (aby2) return (-b + Math.sqrt(b * b - 2 * aby2 * (hl * hl / (-2 * plby2) - lfocy + plby2 / 2 + rfocy - pby2 / 2))) / aby2 + rfocx;\n\n return (rfocx + lfocx) / 2;\n}\n\nfunction rightBreakPoint(arc, directrix) {\n var rArc = arc.N;\n if (rArc) return leftBreakPoint(rArc, directrix);\n var site = arc.site;\n return site[1] === directrix ? site[0] : Infinity;\n}\n","import {addBeach, removeBeach} from \"./Beach\";\nimport {sortCellHalfedges, cellHalfedgeStart, clipCells} from \"./Cell\";\nimport {firstCircle} from \"./Circle\";\nimport {clipEdges} from \"./Edge\";\nimport RedBlackTree from \"./RedBlackTree\";\n\nexport var epsilon = 1e-6;\nexport var epsilon2 = 1e-12;\nexport var beaches;\nexport var cells;\nexport var circles;\nexport var edges;\n\nfunction triangleArea(a, b, c) {\n return (a[0] - c[0]) * (b[1] - a[1]) - (a[0] - b[0]) * (c[1] - a[1]);\n}\n\nfunction lexicographic(a, b) {\n return b[1] - a[1]\n || b[0] - a[0];\n}\n\nexport default function Diagram(sites, extent) {\n var site = sites.sort(lexicographic).pop(),\n x,\n y,\n circle;\n\n edges = [];\n cells = new Array(sites.length);\n beaches = new RedBlackTree;\n circles = new RedBlackTree;\n\n while (true) {\n circle = firstCircle;\n if (site && (!circle || site[1] < circle.y || (site[1] === circle.y && site[0] < circle.x))) {\n if (site[0] !== x || site[1] !== y) {\n addBeach(site);\n x = site[0], y = site[1];\n }\n site = sites.pop();\n } else if (circle) {\n removeBeach(circle.arc);\n } else {\n break;\n }\n }\n\n sortCellHalfedges();\n\n if (extent) {\n var x0 = +extent[0][0],\n y0 = +extent[0][1],\n x1 = +extent[1][0],\n y1 = +extent[1][1];\n clipEdges(x0, y0, x1, y1);\n clipCells(x0, y0, x1, y1);\n }\n\n this.edges = edges;\n this.cells = cells;\n\n beaches =\n circles =\n edges =\n cells = null;\n}\n\nDiagram.prototype = {\n constructor: Diagram,\n\n polygons: function() {\n var edges = this.edges;\n\n return this.cells.map(function(cell) {\n var polygon = cell.halfedges.map(function(i) { return cellHalfedgeStart(cell, edges[i]); });\n polygon.data = cell.site.data;\n return polygon;\n });\n },\n\n triangles: function() {\n var triangles = [],\n edges = this.edges;\n\n this.cells.forEach(function(cell, i) {\n if (!(m = (halfedges = cell.halfedges).length)) return;\n var site = cell.site,\n halfedges,\n j = -1,\n m,\n s0,\n e1 = edges[halfedges[m - 1]],\n s1 = e1.left === site ? e1.right : e1.left;\n\n while (++j < m) {\n s0 = s1;\n e1 = edges[halfedges[j]];\n s1 = e1.left === site ? e1.right : e1.left;\n if (s0 && s1 && i < s0.index && i < s1.index && triangleArea(site, s0, s1) < 0) {\n triangles.push([site.data, s0.data, s1.data]);\n }\n }\n });\n\n return triangles;\n },\n\n links: function() {\n return this.edges.filter(function(edge) {\n return edge.right;\n }).map(function(edge) {\n return {\n source: edge.left.data,\n target: edge.right.data\n };\n });\n },\n\n find: function(x, y, radius) {\n var that = this, i0, i1 = that._found || 0, n = that.cells.length, cell;\n\n // Use the previously-found cell, or start with an arbitrary one.\n while (!(cell = that.cells[i1])) if (++i1 >= n) return null;\n var dx = x - cell.site[0], dy = y - cell.site[1], d2 = dx * dx + dy * dy;\n\n // Traverse the half-edges to find a closer cell, if any.\n do {\n cell = that.cells[i0 = i1], i1 = null;\n cell.halfedges.forEach(function(e) {\n var edge = that.edges[e], v = edge.left;\n if ((v === cell.site || !v) && !(v = edge.right)) return;\n var vx = x - v[0], vy = y - v[1], v2 = vx * vx + vy * vy;\n if (v2 < d2) d2 = v2, i1 = v.index;\n });\n } while (i1 !== null);\n\n that._found = i0;\n\n return radius == null || d2 <= radius * radius ? cell.site : null;\n }\n}\n","import { coordEach } from \"@turf/meta\";\nimport { isNumber } from \"@turf/helpers\";\nimport clone from \"@turf/clone\";\n/**\n * Converts a WGS84 GeoJSON object into Mercator (EPSG:900913) projection\n *\n * @name toMercator\n * @param {GeoJSON|Position} geojson WGS84 GeoJSON object\n * @param {Object} [options] Optional parameters\n * @param {boolean} [options.mutate=false] allows GeoJSON input to be mutated (significant performance increase if true)\n * @returns {GeoJSON} Projected GeoJSON\n * @example\n * var pt = turf.point([-71,41]);\n * var converted = turf.toMercator(pt);\n *\n * //addToMap\n * var addToMap = [pt, converted];\n */\nexport function toMercator(geojson, options) {\n if (options === void 0) { options = {}; }\n return convert(geojson, \"mercator\", options);\n}\n/**\n * Converts a Mercator (EPSG:900913) GeoJSON object into WGS84 projection\n *\n * @name toWgs84\n * @param {GeoJSON|Position} geojson Mercator GeoJSON object\n * @param {Object} [options] Optional parameters\n * @param {boolean} [options.mutate=false] allows GeoJSON input to be mutated (significant performance increase if true)\n * @returns {GeoJSON} Projected GeoJSON\n * @example\n * var pt = turf.point([-7903683.846322424, 5012341.663847514]);\n * var converted = turf.toWgs84(pt);\n *\n * //addToMap\n * var addToMap = [pt, converted];\n */\nexport function toWgs84(geojson, options) {\n if (options === void 0) { options = {}; }\n return convert(geojson, \"wgs84\", options);\n}\n/**\n * Converts a GeoJSON coordinates to the defined `projection`\n *\n * @private\n * @param {GeoJSON} geojson GeoJSON Feature or Geometry\n * @param {string} projection defines the projection system to convert the coordinates to\n * @param {Object} [options] Optional parameters\n * @param {boolean} [options.mutate=false] allows GeoJSON input to be mutated (significant performance increase if true)\n * @returns {GeoJSON} Converted GeoJSON\n */\nfunction convert(geojson, projection, options) {\n if (options === void 0) { options = {}; }\n // Optional parameters\n options = options || {};\n var mutate = options.mutate;\n // Validation\n if (!geojson)\n throw new Error(\"geojson is required\");\n // Handle Position\n if (Array.isArray(geojson) && isNumber(geojson[0]))\n geojson =\n projection === \"mercator\"\n ? convertToMercator(geojson)\n : convertToWgs84(geojson);\n // Handle GeoJSON\n else {\n // Handle possible data mutation\n if (mutate !== true)\n geojson = clone(geojson);\n coordEach(geojson, function (coord) {\n var newCoord = projection === \"mercator\"\n ? convertToMercator(coord)\n : convertToWgs84(coord);\n coord[0] = newCoord[0];\n coord[1] = newCoord[1];\n });\n }\n return geojson;\n}\n/**\n * Convert lon/lat values to 900913 x/y.\n * (from https://github.com/mapbox/sphericalmercator)\n *\n * @private\n * @param {Array} lonLat WGS84 point\n * @returns {Array} Mercator [x, y] point\n */\nfunction convertToMercator(lonLat) {\n var D2R = Math.PI / 180, \n // 900913 properties\n A = 6378137.0, MAXEXTENT = 20037508.342789244;\n // compensate longitudes passing the 180th meridian\n // from https://github.com/proj4js/proj4js/blob/master/lib/common/adjust_lon.js\n var adjusted = Math.abs(lonLat[0]) <= 180 ? lonLat[0] : lonLat[0] - sign(lonLat[0]) * 360;\n var xy = [\n A * adjusted * D2R,\n A * Math.log(Math.tan(Math.PI * 0.25 + 0.5 * lonLat[1] * D2R)),\n ];\n // if xy value is beyond maxextent (e.g. poles), return maxextent\n if (xy[0] > MAXEXTENT)\n xy[0] = MAXEXTENT;\n if (xy[0] < -MAXEXTENT)\n xy[0] = -MAXEXTENT;\n if (xy[1] > MAXEXTENT)\n xy[1] = MAXEXTENT;\n if (xy[1] < -MAXEXTENT)\n xy[1] = -MAXEXTENT;\n return xy;\n}\n/**\n * Convert 900913 x/y values to lon/lat.\n * (from https://github.com/mapbox/sphericalmercator)\n *\n * @private\n * @param {Array} xy Mercator [x, y] point\n * @returns {Array} WGS84 [lon, lat] point\n */\nfunction convertToWgs84(xy) {\n // 900913 properties.\n var R2D = 180 / Math.PI;\n var A = 6378137.0;\n return [\n (xy[0] * R2D) / A,\n (Math.PI * 0.5 - 2.0 * Math.atan(Math.exp(-xy[1] / A))) * R2D,\n ];\n}\n/**\n * Returns the sign of the input, or zero\n *\n * @private\n * @param {number} x input\n * @returns {number} -1|0|1 output\n */\nfunction sign(x) {\n return x < 0 ? -1 : x > 0 ? 1 : 0;\n}\n","// Adds floating point numbers with twice the normal precision.\n// Reference: J. R. Shewchuk, Adaptive Precision Floating-Point Arithmetic and\n// Fast Robust Geometric Predicates, Discrete & Computational Geometry 18(3)\n// 305–363 (1997).\n// Code adapted from GeographicLib by Charles F. F. Karney,\n// http://geographiclib.sourceforge.net/\n\nexport default function() {\n return new Adder;\n}\n\nfunction Adder() {\n this.reset();\n}\n\nAdder.prototype = {\n constructor: Adder,\n reset: function() {\n this.s = // rounded value\n this.t = 0; // exact error\n },\n add: function(y) {\n add(temp, y, this.t);\n add(this, temp.s, this.s);\n if (this.s) this.t += temp.t;\n else this.s = temp.t;\n },\n valueOf: function() {\n return this.s;\n }\n};\n\nvar temp = new Adder;\n\nfunction add(adder, a, b) {\n var x = adder.s = a + b,\n bv = x - a,\n av = x - bv;\n adder.t = (a - av) + (b - bv);\n}\n","export var epsilon = 1e-6;\nexport var epsilon2 = 1e-12;\nexport var pi = Math.PI;\nexport var halfPi = pi / 2;\nexport var quarterPi = pi / 4;\nexport var tau = pi * 2;\n\nexport var degrees = 180 / pi;\nexport var radians = pi / 180;\n\nexport var abs = Math.abs;\nexport var atan = Math.atan;\nexport var atan2 = Math.atan2;\nexport var cos = Math.cos;\nexport var ceil = Math.ceil;\nexport var exp = Math.exp;\nexport var floor = Math.floor;\nexport var log = Math.log;\nexport var pow = Math.pow;\nexport var sin = Math.sin;\nexport var sign = Math.sign || function(x) { return x > 0 ? 1 : x < 0 ? -1 : 0; };\nexport var sqrt = Math.sqrt;\nexport var tan = Math.tan;\n\nexport function acos(x) {\n return x > 1 ? 0 : x < -1 ? pi : Math.acos(x);\n}\n\nexport function asin(x) {\n return x > 1 ? halfPi : x < -1 ? -halfPi : Math.asin(x);\n}\n\nexport function haversin(x) {\n return (x = sin(x / 2)) * x;\n}\n","export default function noop() {}\n","import adder from \"./adder\";\nimport {atan2, cos, quarterPi, radians, sin, tau} from \"./math\";\nimport noop from \"./noop\";\nimport stream from \"./stream\";\n\nexport var areaRingSum = adder();\n\nvar areaSum = adder(),\n lambda00,\n phi00,\n lambda0,\n cosPhi0,\n sinPhi0;\n\nexport var areaStream = {\n point: noop,\n lineStart: noop,\n lineEnd: noop,\n polygonStart: function() {\n areaRingSum.reset();\n areaStream.lineStart = areaRingStart;\n areaStream.lineEnd = areaRingEnd;\n },\n polygonEnd: function() {\n var areaRing = +areaRingSum;\n areaSum.add(areaRing < 0 ? tau + areaRing : areaRing);\n this.lineStart = this.lineEnd = this.point = noop;\n },\n sphere: function() {\n areaSum.add(tau);\n }\n};\n\nfunction areaRingStart() {\n areaStream.point = areaPointFirst;\n}\n\nfunction areaRingEnd() {\n areaPoint(lambda00, phi00);\n}\n\nfunction areaPointFirst(lambda, phi) {\n areaStream.point = areaPoint;\n lambda00 = lambda, phi00 = phi;\n lambda *= radians, phi *= radians;\n lambda0 = lambda, cosPhi0 = cos(phi = phi / 2 + quarterPi), sinPhi0 = sin(phi);\n}\n\nfunction areaPoint(lambda, phi) {\n lambda *= radians, phi *= radians;\n phi = phi / 2 + quarterPi; // half the angular distance from south pole\n\n // Spherical excess E for a spherical triangle with vertices: south pole,\n // previous point, current point. Uses a formula derived from Cagnoli’s\n // theorem. See Todhunter, Spherical Trig. (1871), Sec. 103, Eq. (2).\n var dLambda = lambda - lambda0,\n sdLambda = dLambda >= 0 ? 1 : -1,\n adLambda = sdLambda * dLambda,\n cosPhi = cos(phi),\n sinPhi = sin(phi),\n k = sinPhi0 * sinPhi,\n u = cosPhi0 * cosPhi + k * cos(adLambda),\n v = k * sdLambda * sin(adLambda);\n areaRingSum.add(atan2(v, u));\n\n // Advance the previous points.\n lambda0 = lambda, cosPhi0 = cosPhi, sinPhi0 = sinPhi;\n}\n\nexport default function(object) {\n areaSum.reset();\n stream(object, areaStream);\n return areaSum * 2;\n}\n","import {asin, atan2, cos, sin, sqrt} from \"./math\";\n\nexport function spherical(cartesian) {\n return [atan2(cartesian[1], cartesian[0]), asin(cartesian[2])];\n}\n\nexport function cartesian(spherical) {\n var lambda = spherical[0], phi = spherical[1], cosPhi = cos(phi);\n return [cosPhi * cos(lambda), cosPhi * sin(lambda), sin(phi)];\n}\n\nexport function cartesianDot(a, b) {\n return a[0] * b[0] + a[1] * b[1] + a[2] * b[2];\n}\n\nexport function cartesianCross(a, b) {\n return [a[1] * b[2] - a[2] * b[1], a[2] * b[0] - a[0] * b[2], a[0] * b[1] - a[1] * b[0]];\n}\n\n// TODO return a\nexport function cartesianAddInPlace(a, b) {\n a[0] += b[0], a[1] += b[1], a[2] += b[2];\n}\n\nexport function cartesianScale(vector, k) {\n return [vector[0] * k, vector[1] * k, vector[2] * k];\n}\n\n// TODO return d\nexport function cartesianNormalizeInPlace(d) {\n var l = sqrt(d[0] * d[0] + d[1] * d[1] + d[2] * d[2]);\n d[0] /= l, d[1] /= l, d[2] /= l;\n}\n","import adder from \"./adder\";\nimport {areaStream, areaRingSum} from \"./area\";\nimport {cartesian, cartesianCross, cartesianNormalizeInPlace, spherical} from \"./cartesian\";\nimport {abs, degrees, epsilon, radians} from \"./math\";\nimport stream from \"./stream\";\n\nvar lambda0, phi0, lambda1, phi1, // bounds\n lambda2, // previous lambda-coordinate\n lambda00, phi00, // first point\n p0, // previous 3D point\n deltaSum = adder(),\n ranges,\n range;\n\nvar boundsStream = {\n point: boundsPoint,\n lineStart: boundsLineStart,\n lineEnd: boundsLineEnd,\n polygonStart: function() {\n boundsStream.point = boundsRingPoint;\n boundsStream.lineStart = boundsRingStart;\n boundsStream.lineEnd = boundsRingEnd;\n deltaSum.reset();\n areaStream.polygonStart();\n },\n polygonEnd: function() {\n areaStream.polygonEnd();\n boundsStream.point = boundsPoint;\n boundsStream.lineStart = boundsLineStart;\n boundsStream.lineEnd = boundsLineEnd;\n if (areaRingSum < 0) lambda0 = -(lambda1 = 180), phi0 = -(phi1 = 90);\n else if (deltaSum > epsilon) phi1 = 90;\n else if (deltaSum < -epsilon) phi0 = -90;\n range[0] = lambda0, range[1] = lambda1;\n }\n};\n\nfunction boundsPoint(lambda, phi) {\n ranges.push(range = [lambda0 = lambda, lambda1 = lambda]);\n if (phi < phi0) phi0 = phi;\n if (phi > phi1) phi1 = phi;\n}\n\nfunction linePoint(lambda, phi) {\n var p = cartesian([lambda * radians, phi * radians]);\n if (p0) {\n var normal = cartesianCross(p0, p),\n equatorial = [normal[1], -normal[0], 0],\n inflection = cartesianCross(equatorial, normal);\n cartesianNormalizeInPlace(inflection);\n inflection = spherical(inflection);\n var delta = lambda - lambda2,\n sign = delta > 0 ? 1 : -1,\n lambdai = inflection[0] * degrees * sign,\n phii,\n antimeridian = abs(delta) > 180;\n if (antimeridian ^ (sign * lambda2 < lambdai && lambdai < sign * lambda)) {\n phii = inflection[1] * degrees;\n if (phii > phi1) phi1 = phii;\n } else if (lambdai = (lambdai + 360) % 360 - 180, antimeridian ^ (sign * lambda2 < lambdai && lambdai < sign * lambda)) {\n phii = -inflection[1] * degrees;\n if (phii < phi0) phi0 = phii;\n } else {\n if (phi < phi0) phi0 = phi;\n if (phi > phi1) phi1 = phi;\n }\n if (antimeridian) {\n if (lambda < lambda2) {\n if (angle(lambda0, lambda) > angle(lambda0, lambda1)) lambda1 = lambda;\n } else {\n if (angle(lambda, lambda1) > angle(lambda0, lambda1)) lambda0 = lambda;\n }\n } else {\n if (lambda1 >= lambda0) {\n if (lambda < lambda0) lambda0 = lambda;\n if (lambda > lambda1) lambda1 = lambda;\n } else {\n if (lambda > lambda2) {\n if (angle(lambda0, lambda) > angle(lambda0, lambda1)) lambda1 = lambda;\n } else {\n if (angle(lambda, lambda1) > angle(lambda0, lambda1)) lambda0 = lambda;\n }\n }\n }\n } else {\n ranges.push(range = [lambda0 = lambda, lambda1 = lambda]);\n }\n if (phi < phi0) phi0 = phi;\n if (phi > phi1) phi1 = phi;\n p0 = p, lambda2 = lambda;\n}\n\nfunction boundsLineStart() {\n boundsStream.point = linePoint;\n}\n\nfunction boundsLineEnd() {\n range[0] = lambda0, range[1] = lambda1;\n boundsStream.point = boundsPoint;\n p0 = null;\n}\n\nfunction boundsRingPoint(lambda, phi) {\n if (p0) {\n var delta = lambda - lambda2;\n deltaSum.add(abs(delta) > 180 ? delta + (delta > 0 ? 360 : -360) : delta);\n } else {\n lambda00 = lambda, phi00 = phi;\n }\n areaStream.point(lambda, phi);\n linePoint(lambda, phi);\n}\n\nfunction boundsRingStart() {\n areaStream.lineStart();\n}\n\nfunction boundsRingEnd() {\n boundsRingPoint(lambda00, phi00);\n areaStream.lineEnd();\n if (abs(deltaSum) > epsilon) lambda0 = -(lambda1 = 180);\n range[0] = lambda0, range[1] = lambda1;\n p0 = null;\n}\n\n// Finds the left-right distance between two longitudes.\n// This is almost the same as (lambda1 - lambda0 + 360°) % 360°, except that we want\n// the distance between ±180° to be 360°.\nfunction angle(lambda0, lambda1) {\n return (lambda1 -= lambda0) < 0 ? lambda1 + 360 : lambda1;\n}\n\nfunction rangeCompare(a, b) {\n return a[0] - b[0];\n}\n\nfunction rangeContains(range, x) {\n return range[0] <= range[1] ? range[0] <= x && x <= range[1] : x < range[0] || range[1] < x;\n}\n\nexport default function(feature) {\n var i, n, a, b, merged, deltaMax, delta;\n\n phi1 = lambda1 = -(lambda0 = phi0 = Infinity);\n ranges = [];\n stream(feature, boundsStream);\n\n // First, sort ranges by their minimum longitudes.\n if (n = ranges.length) {\n ranges.sort(rangeCompare);\n\n // Then, merge any ranges that overlap.\n for (i = 1, a = ranges[0], merged = [a]; i < n; ++i) {\n b = ranges[i];\n if (rangeContains(a, b[0]) || rangeContains(a, b[1])) {\n if (angle(a[0], b[1]) > angle(a[0], a[1])) a[1] = b[1];\n if (angle(b[0], a[1]) > angle(a[0], a[1])) a[0] = b[0];\n } else {\n merged.push(a = b);\n }\n }\n\n // Finally, find the largest gap between the merged ranges.\n // The final bounding box will be the inverse of this gap.\n for (deltaMax = -Infinity, n = merged.length - 1, i = 0, a = merged[n]; i <= n; a = b, ++i) {\n b = merged[i];\n if ((delta = angle(a[1], b[0])) > deltaMax) deltaMax = delta, lambda0 = b[0], lambda1 = a[1];\n }\n }\n\n ranges = range = null;\n\n return lambda0 === Infinity || phi0 === Infinity\n ? [[NaN, NaN], [NaN, NaN]]\n : [[lambda0, phi0], [lambda1, phi1]];\n}\n","import compose from \"./compose\";\nimport {asin, atan2, cos, degrees, pi, radians, sin, tau} from \"./math\";\n\nfunction rotationIdentity(lambda, phi) {\n return [lambda > pi ? lambda - tau : lambda < -pi ? lambda + tau : lambda, phi];\n}\n\nrotationIdentity.invert = rotationIdentity;\n\nexport function rotateRadians(deltaLambda, deltaPhi, deltaGamma) {\n return (deltaLambda %= tau) ? (deltaPhi || deltaGamma ? compose(rotationLambda(deltaLambda), rotationPhiGamma(deltaPhi, deltaGamma))\n : rotationLambda(deltaLambda))\n : (deltaPhi || deltaGamma ? rotationPhiGamma(deltaPhi, deltaGamma)\n : rotationIdentity);\n}\n\nfunction forwardRotationLambda(deltaLambda) {\n return function(lambda, phi) {\n return lambda += deltaLambda, [lambda > pi ? lambda - tau : lambda < -pi ? lambda + tau : lambda, phi];\n };\n}\n\nfunction rotationLambda(deltaLambda) {\n var rotation = forwardRotationLambda(deltaLambda);\n rotation.invert = forwardRotationLambda(-deltaLambda);\n return rotation;\n}\n\nfunction rotationPhiGamma(deltaPhi, deltaGamma) {\n var cosDeltaPhi = cos(deltaPhi),\n sinDeltaPhi = sin(deltaPhi),\n cosDeltaGamma = cos(deltaGamma),\n sinDeltaGamma = sin(deltaGamma);\n\n function rotation(lambda, phi) {\n var cosPhi = cos(phi),\n x = cos(lambda) * cosPhi,\n y = sin(lambda) * cosPhi,\n z = sin(phi),\n k = z * cosDeltaPhi + x * sinDeltaPhi;\n return [\n atan2(y * cosDeltaGamma - k * sinDeltaGamma, x * cosDeltaPhi - z * sinDeltaPhi),\n asin(k * cosDeltaGamma + y * sinDeltaGamma)\n ];\n }\n\n rotation.invert = function(lambda, phi) {\n var cosPhi = cos(phi),\n x = cos(lambda) * cosPhi,\n y = sin(lambda) * cosPhi,\n z = sin(phi),\n k = z * cosDeltaGamma - y * sinDeltaGamma;\n return [\n atan2(y * cosDeltaGamma + z * sinDeltaGamma, x * cosDeltaPhi + k * sinDeltaPhi),\n asin(k * cosDeltaPhi - x * sinDeltaPhi)\n ];\n };\n\n return rotation;\n}\n\nexport default function(rotate) {\n rotate = rotateRadians(rotate[0] * radians, rotate[1] * radians, rotate.length > 2 ? rotate[2] * radians : 0);\n\n function forward(coordinates) {\n coordinates = rotate(coordinates[0] * radians, coordinates[1] * radians);\n return coordinates[0] *= degrees, coordinates[1] *= degrees, coordinates;\n }\n\n forward.invert = function(coordinates) {\n coordinates = rotate.invert(coordinates[0] * radians, coordinates[1] * radians);\n return coordinates[0] *= degrees, coordinates[1] *= degrees, coordinates;\n };\n\n return forward;\n}\n","import pointEqual from \"../pointEqual\";\n\nfunction Intersection(point, points, other, entry) {\n this.x = point;\n this.z = points;\n this.o = other; // another intersection\n this.e = entry; // is an entry?\n this.v = false; // visited\n this.n = this.p = null; // next & previous\n}\n\n// A generalized polygon clipping algorithm: given a polygon that has been cut\n// into its visible line segments, and rejoins the segments by interpolating\n// along the clip edge.\nexport default function(segments, compareIntersection, startInside, interpolate, stream) {\n var subject = [],\n clip = [],\n i,\n n;\n\n segments.forEach(function(segment) {\n if ((n = segment.length - 1) <= 0) return;\n var n, p0 = segment[0], p1 = segment[n], x;\n\n // If the first and last points of a segment are coincident, then treat as a\n // closed ring. TODO if all rings are closed, then the winding order of the\n // exterior ring should be checked.\n if (pointEqual(p0, p1)) {\n stream.lineStart();\n for (i = 0; i < n; ++i) stream.point((p0 = segment[i])[0], p0[1]);\n stream.lineEnd();\n return;\n }\n\n subject.push(x = new Intersection(p0, segment, null, true));\n clip.push(x.o = new Intersection(p0, null, x, false));\n subject.push(x = new Intersection(p1, segment, null, false));\n clip.push(x.o = new Intersection(p1, null, x, true));\n });\n\n if (!subject.length) return;\n\n clip.sort(compareIntersection);\n link(subject);\n link(clip);\n\n for (i = 0, n = clip.length; i < n; ++i) {\n clip[i].e = startInside = !startInside;\n }\n\n var start = subject[0],\n points,\n point;\n\n while (1) {\n // Find first unvisited intersection.\n var current = start,\n isSubject = true;\n while (current.v) if ((current = current.n) === start) return;\n points = current.z;\n stream.lineStart();\n do {\n current.v = current.o.v = true;\n if (current.e) {\n if (isSubject) {\n for (i = 0, n = points.length; i < n; ++i) stream.point((point = points[i])[0], point[1]);\n } else {\n interpolate(current.x, current.n.x, 1, stream);\n }\n current = current.n;\n } else {\n if (isSubject) {\n points = current.p.z;\n for (i = points.length - 1; i >= 0; --i) stream.point((point = points[i])[0], point[1]);\n } else {\n interpolate(current.x, current.p.x, -1, stream);\n }\n current = current.p;\n }\n current = current.o;\n points = current.z;\n isSubject = !isSubject;\n } while (!current.v);\n stream.lineEnd();\n }\n}\n\nfunction link(array) {\n if (!(n = array.length)) return;\n var n,\n i = 0,\n a = array[0],\n b;\n while (++i < n) {\n a.n = b = array[i];\n b.p = a;\n a = b;\n }\n a.n = b = array[0];\n b.p = a;\n}\n","import {abs, epsilon} from \"./math\";\n\nexport default function(a, b) {\n return abs(a[0] - b[0]) < epsilon && abs(a[1] - b[1]) < epsilon;\n}\n","export default function(a, b) {\n return a < b ? -1 : a > b ? 1 : a >= b ? 0 : NaN;\n}\n","import ascending from \"./ascending\";\n\nexport default function(compare) {\n if (compare.length === 1) compare = ascendingComparator(compare);\n return {\n left: function(a, x, lo, hi) {\n if (lo == null) lo = 0;\n if (hi == null) hi = a.length;\n while (lo < hi) {\n var mid = lo + hi >>> 1;\n if (compare(a[mid], x) < 0) lo = mid + 1;\n else hi = mid;\n }\n return lo;\n },\n right: function(a, x, lo, hi) {\n if (lo == null) lo = 0;\n if (hi == null) hi = a.length;\n while (lo < hi) {\n var mid = lo + hi >>> 1;\n if (compare(a[mid], x) > 0) hi = mid;\n else lo = mid + 1;\n }\n return lo;\n }\n };\n}\n\nfunction ascendingComparator(f) {\n return function(d, x) {\n return ascending(f(d), x);\n };\n}\n","import ascending from \"./ascending\";\nimport bisector from \"./bisector\";\n\nvar ascendingBisect = bisector(ascending);\nexport var bisectRight = ascendingBisect.right;\nexport var bisectLeft = ascendingBisect.left;\nexport default bisectRight;\n","var array = Array.prototype;\n\nexport var slice = array.slice;\nexport var map = array.map;\n","var e10 = Math.sqrt(50),\n e5 = Math.sqrt(10),\n e2 = Math.sqrt(2);\n\nexport default function(start, stop, count) {\n var reverse,\n i = -1,\n n,\n ticks,\n step;\n\n stop = +stop, start = +start, count = +count;\n if (start === stop && count > 0) return [start];\n if (reverse = stop < start) n = start, start = stop, stop = n;\n if ((step = tickIncrement(start, stop, count)) === 0 || !isFinite(step)) return [];\n\n if (step > 0) {\n start = Math.ceil(start / step);\n stop = Math.floor(stop / step);\n ticks = new Array(n = Math.ceil(stop - start + 1));\n while (++i < n) ticks[i] = (start + i) * step;\n } else {\n start = Math.floor(start * step);\n stop = Math.ceil(stop * step);\n ticks = new Array(n = Math.ceil(start - stop + 1));\n while (++i < n) ticks[i] = (start - i) / step;\n }\n\n if (reverse) ticks.reverse();\n\n return ticks;\n}\n\nexport function tickIncrement(start, stop, count) {\n var step = (stop - start) / Math.max(0, count),\n power = Math.floor(Math.log(step) / Math.LN10),\n error = step / Math.pow(10, power);\n return power >= 0\n ? (error >= e10 ? 10 : error >= e5 ? 5 : error >= e2 ? 2 : 1) * Math.pow(10, power)\n : -Math.pow(10, -power) / (error >= e10 ? 10 : error >= e5 ? 5 : error >= e2 ? 2 : 1);\n}\n\nexport function tickStep(start, stop, count) {\n var step0 = Math.abs(stop - start) / Math.max(0, count),\n step1 = Math.pow(10, Math.floor(Math.log(step0) / Math.LN10)),\n error = step0 / step1;\n if (error >= e10) step1 *= 10;\n else if (error >= e5) step1 *= 5;\n else if (error >= e2) step1 *= 2;\n return stop < start ? -step1 : step1;\n}\n","import adder from \"./adder\";\nimport {cartesian, cartesianCross, cartesianNormalizeInPlace} from \"./cartesian\";\nimport {asin, atan2, cos, epsilon, pi, quarterPi, sin, tau} from \"./math\";\n\nvar sum = adder();\n\nexport default function(polygon, point) {\n var lambda = point[0],\n phi = point[1],\n normal = [sin(lambda), -cos(lambda), 0],\n angle = 0,\n winding = 0;\n\n sum.reset();\n\n for (var i = 0, n = polygon.length; i < n; ++i) {\n if (!(m = (ring = polygon[i]).length)) continue;\n var ring,\n m,\n point0 = ring[m - 1],\n lambda0 = point0[0],\n phi0 = point0[1] / 2 + quarterPi,\n sinPhi0 = sin(phi0),\n cosPhi0 = cos(phi0);\n\n for (var j = 0; j < m; ++j, lambda0 = lambda1, sinPhi0 = sinPhi1, cosPhi0 = cosPhi1, point0 = point1) {\n var point1 = ring[j],\n lambda1 = point1[0],\n phi1 = point1[1] / 2 + quarterPi,\n sinPhi1 = sin(phi1),\n cosPhi1 = cos(phi1),\n delta = lambda1 - lambda0,\n sign = delta >= 0 ? 1 : -1,\n absDelta = sign * delta,\n antimeridian = absDelta > pi,\n k = sinPhi0 * sinPhi1;\n\n sum.add(atan2(k * sign * sin(absDelta), cosPhi0 * cosPhi1 + k * cos(absDelta)));\n angle += antimeridian ? delta + sign * tau : delta;\n\n // Are the longitudes either side of the point’s meridian (lambda),\n // and are the latitudes smaller than the parallel (phi)?\n if (antimeridian ^ lambda0 >= lambda ^ lambda1 >= lambda) {\n var arc = cartesianCross(cartesian(point0), cartesian(point1));\n cartesianNormalizeInPlace(arc);\n var intersection = cartesianCross(normal, arc);\n cartesianNormalizeInPlace(intersection);\n var phiArc = (antimeridian ^ delta >= 0 ? -1 : 1) * asin(intersection[2]);\n if (phi > phiArc || phi === phiArc && (arc[0] || arc[1])) {\n winding += antimeridian ^ delta >= 0 ? 1 : -1;\n }\n }\n }\n }\n\n // First, determine whether the South pole is inside or outside:\n //\n // It is inside if:\n // * the polygon winds around it in a clockwise direction.\n // * the polygon does not (cumulatively) wind around it, but has a negative\n // (counter-clockwise) area.\n //\n // Second, count the (signed) number of times a segment crosses a lambda\n // from the point to the South pole. If it is zero, then the point is the\n // same side as the South pole.\n\n return (angle < -epsilon || angle < epsilon && sum < -epsilon) ^ (winding & 1);\n}\n","import adder from \"./adder\";\nimport {abs, atan2, cos, radians, sin, sqrt} from \"./math\";\nimport noop from \"./noop\";\nimport stream from \"./stream\";\n\nvar lengthSum = adder(),\n lambda0,\n sinPhi0,\n cosPhi0;\n\nvar lengthStream = {\n sphere: noop,\n point: noop,\n lineStart: lengthLineStart,\n lineEnd: noop,\n polygonStart: noop,\n polygonEnd: noop\n};\n\nfunction lengthLineStart() {\n lengthStream.point = lengthPointFirst;\n lengthStream.lineEnd = lengthLineEnd;\n}\n\nfunction lengthLineEnd() {\n lengthStream.point = lengthStream.lineEnd = noop;\n}\n\nfunction lengthPointFirst(lambda, phi) {\n lambda *= radians, phi *= radians;\n lambda0 = lambda, sinPhi0 = sin(phi), cosPhi0 = cos(phi);\n lengthStream.point = lengthPoint;\n}\n\nfunction lengthPoint(lambda, phi) {\n lambda *= radians, phi *= radians;\n var sinPhi = sin(phi),\n cosPhi = cos(phi),\n delta = abs(lambda - lambda0),\n cosDelta = cos(delta),\n sinDelta = sin(delta),\n x = cosPhi * sinDelta,\n y = cosPhi0 * sinPhi - sinPhi0 * cosPhi * cosDelta,\n z = sinPhi0 * sinPhi + cosPhi0 * cosPhi * cosDelta;\n lengthSum.add(atan2(sqrt(x * x + y * y), z));\n lambda0 = lambda, sinPhi0 = sinPhi, cosPhi0 = cosPhi;\n}\n\nexport default function(object) {\n lengthSum.reset();\n stream(object, lengthStream);\n return +lengthSum;\n}\n","import adder from \"../adder\";\nimport {abs} from \"../math\";\nimport noop from \"../noop\";\n\nvar areaSum = adder(),\n areaRingSum = adder(),\n x00,\n y00,\n x0,\n y0;\n\nvar areaStream = {\n point: noop,\n lineStart: noop,\n lineEnd: noop,\n polygonStart: function() {\n areaStream.lineStart = areaRingStart;\n areaStream.lineEnd = areaRingEnd;\n },\n polygonEnd: function() {\n areaStream.lineStart = areaStream.lineEnd = areaStream.point = noop;\n areaSum.add(abs(areaRingSum));\n areaRingSum.reset();\n },\n result: function() {\n var area = areaSum / 2;\n areaSum.reset();\n return area;\n }\n};\n\nfunction areaRingStart() {\n areaStream.point = areaPointFirst;\n}\n\nfunction areaPointFirst(x, y) {\n areaStream.point = areaPoint;\n x00 = x0 = x, y00 = y0 = y;\n}\n\nfunction areaPoint(x, y) {\n areaRingSum.add(y0 * x - x0 * y);\n x0 = x, y0 = y;\n}\n\nfunction areaRingEnd() {\n areaPoint(x00, y00);\n}\n\nexport default areaStream;\n","import adder from \"../adder\";\nimport {sqrt} from \"../math\";\nimport noop from \"../noop\";\n\nvar lengthSum = adder(),\n lengthRing,\n x00,\n y00,\n x0,\n y0;\n\nvar lengthStream = {\n point: noop,\n lineStart: function() {\n lengthStream.point = lengthPointFirst;\n },\n lineEnd: function() {\n if (lengthRing) lengthPoint(x00, y00);\n lengthStream.point = noop;\n },\n polygonStart: function() {\n lengthRing = true;\n },\n polygonEnd: function() {\n lengthRing = null;\n },\n result: function() {\n var length = +lengthSum;\n lengthSum.reset();\n return length;\n }\n};\n\nfunction lengthPointFirst(x, y) {\n lengthStream.point = lengthPoint;\n x00 = x0 = x, y00 = y0 = y;\n}\n\nfunction lengthPoint(x, y) {\n x0 -= x, y0 -= y;\n lengthSum.add(sqrt(x0 * x0 + y0 * y0));\n x0 = x, y0 = y;\n}\n\nexport default lengthStream;\n","export default function PathString() {\n this._string = [];\n}\n\nPathString.prototype = {\n _radius: 4.5,\n _circle: circle(4.5),\n pointRadius: function(_) {\n if ((_ = +_) !== this._radius) this._radius = _, this._circle = null;\n return this;\n },\n polygonStart: function() {\n this._line = 0;\n },\n polygonEnd: function() {\n this._line = NaN;\n },\n lineStart: function() {\n this._point = 0;\n },\n lineEnd: function() {\n if (this._line === 0) this._string.push(\"Z\");\n this._point = NaN;\n },\n point: function(x, y) {\n switch (this._point) {\n case 0: {\n this._string.push(\"M\", x, \",\", y);\n this._point = 1;\n break;\n }\n case 1: {\n this._string.push(\"L\", x, \",\", y);\n break;\n }\n default: {\n if (this._circle == null) this._circle = circle(this._radius);\n this._string.push(\"M\", x, \",\", y, this._circle);\n break;\n }\n }\n },\n result: function() {\n if (this._string.length) {\n var result = this._string.join(\"\");\n this._string = [];\n return result;\n } else {\n return null;\n }\n }\n};\n\nfunction circle(radius) {\n return \"m0,\" + radius\n + \"a\" + radius + \",\" + radius + \" 0 1,1 0,\" + -2 * radius\n + \"a\" + radius + \",\" + radius + \" 0 1,1 0,\" + 2 * radius\n + \"z\";\n}\n","import clipBuffer from \"./buffer\";\nimport clipPolygon from \"./polygon\";\nimport {epsilon, halfPi} from \"../math\";\nimport polygonContains from \"../polygonContains\";\nimport {merge} from \"d3-array\";\n\nexport default function(pointVisible, clipLine, interpolate, start) {\n return function(rotate, sink) {\n var line = clipLine(sink),\n rotatedStart = rotate.invert(start[0], start[1]),\n ringBuffer = clipBuffer(),\n ringSink = clipLine(ringBuffer),\n polygonStarted = false,\n polygon,\n segments,\n ring;\n\n var clip = {\n point: point,\n lineStart: lineStart,\n lineEnd: lineEnd,\n polygonStart: function() {\n clip.point = pointRing;\n clip.lineStart = ringStart;\n clip.lineEnd = ringEnd;\n segments = [];\n polygon = [];\n },\n polygonEnd: function() {\n clip.point = point;\n clip.lineStart = lineStart;\n clip.lineEnd = lineEnd;\n segments = merge(segments);\n var startInside = polygonContains(polygon, rotatedStart);\n if (segments.length) {\n if (!polygonStarted) sink.polygonStart(), polygonStarted = true;\n clipPolygon(segments, compareIntersection, startInside, interpolate, sink);\n } else if (startInside) {\n if (!polygonStarted) sink.polygonStart(), polygonStarted = true;\n sink.lineStart();\n interpolate(null, null, 1, sink);\n sink.lineEnd();\n }\n if (polygonStarted) sink.polygonEnd(), polygonStarted = false;\n segments = polygon = null;\n },\n sphere: function() {\n sink.polygonStart();\n sink.lineStart();\n interpolate(null, null, 1, sink);\n sink.lineEnd();\n sink.polygonEnd();\n }\n };\n\n function point(lambda, phi) {\n var point = rotate(lambda, phi);\n if (pointVisible(lambda = point[0], phi = point[1])) sink.point(lambda, phi);\n }\n\n function pointLine(lambda, phi) {\n var point = rotate(lambda, phi);\n line.point(point[0], point[1]);\n }\n\n function lineStart() {\n clip.point = pointLine;\n line.lineStart();\n }\n\n function lineEnd() {\n clip.point = point;\n line.lineEnd();\n }\n\n function pointRing(lambda, phi) {\n ring.push([lambda, phi]);\n var point = rotate(lambda, phi);\n ringSink.point(point[0], point[1]);\n }\n\n function ringStart() {\n ringSink.lineStart();\n ring = [];\n }\n\n function ringEnd() {\n pointRing(ring[0][0], ring[0][1]);\n ringSink.lineEnd();\n\n var clean = ringSink.clean(),\n ringSegments = ringBuffer.result(),\n i, n = ringSegments.length, m,\n segment,\n point;\n\n ring.pop();\n polygon.push(ring);\n ring = null;\n\n if (!n) return;\n\n // No intersections.\n if (clean & 1) {\n segment = ringSegments[0];\n if ((m = segment.length - 1) > 0) {\n if (!polygonStarted) sink.polygonStart(), polygonStarted = true;\n sink.lineStart();\n for (i = 0; i < m; ++i) sink.point((point = segment[i])[0], point[1]);\n sink.lineEnd();\n }\n return;\n }\n\n // Rejoin connected segments.\n // TODO reuse ringBuffer.rejoin()?\n if (n > 1 && clean & 2) ringSegments.push(ringSegments.pop().concat(ringSegments.shift()));\n\n segments.push(ringSegments.filter(validSegment));\n }\n\n return clip;\n };\n}\n\nfunction validSegment(segment) {\n return segment.length > 1;\n}\n\n// Intersections are sorted along the clip edge. For both antimeridian cutting\n// and circle clipping, the same comparison is used.\nfunction compareIntersection(a, b) {\n return ((a = a.x)[0] < 0 ? a[1] - halfPi - epsilon : halfPi - a[1])\n - ((b = b.x)[0] < 0 ? b[1] - halfPi - epsilon : halfPi - b[1]);\n}\n","export default function(methods) {\n return {\n stream: transformer(methods)\n };\n}\n\nexport function transformer(methods) {\n return function(stream) {\n var s = new TransformStream;\n for (var key in methods) s[key] = methods[key];\n s.stream = stream;\n return s;\n };\n}\n\nfunction TransformStream() {}\n\nTransformStream.prototype = {\n constructor: TransformStream,\n point: function(x, y) { this.stream.point(x, y); },\n sphere: function() { this.stream.sphere(); },\n lineStart: function() { this.stream.lineStart(); },\n lineEnd: function() { this.stream.lineEnd(); },\n polygonStart: function() { this.stream.polygonStart(); },\n polygonEnd: function() { this.stream.polygonEnd(); }\n};\n","import {cartesian} from \"../cartesian\";\nimport {abs, asin, atan2, cos, epsilon, radians, sqrt} from \"../math\";\nimport {transformer} from \"../transform\";\n\nvar maxDepth = 16, // maximum depth of subdivision\n cosMinDistance = cos(30 * radians); // cos(minimum angular distance)\n\nexport default function(project, delta2) {\n return +delta2 ? resample(project, delta2) : resampleNone(project);\n}\n\nfunction resampleNone(project) {\n return transformer({\n point: function(x, y) {\n x = project(x, y);\n this.stream.point(x[0], x[1]);\n }\n });\n}\n\nfunction resample(project, delta2) {\n\n function resampleLineTo(x0, y0, lambda0, a0, b0, c0, x1, y1, lambda1, a1, b1, c1, depth, stream) {\n var dx = x1 - x0,\n dy = y1 - y0,\n d2 = dx * dx + dy * dy;\n if (d2 > 4 * delta2 && depth--) {\n var a = a0 + a1,\n b = b0 + b1,\n c = c0 + c1,\n m = sqrt(a * a + b * b + c * c),\n phi2 = asin(c /= m),\n lambda2 = abs(abs(c) - 1) < epsilon || abs(lambda0 - lambda1) < epsilon ? (lambda0 + lambda1) / 2 : atan2(b, a),\n p = project(lambda2, phi2),\n x2 = p[0],\n y2 = p[1],\n dx2 = x2 - x0,\n dy2 = y2 - y0,\n dz = dy * dx2 - dx * dy2;\n if (dz * dz / d2 > delta2 // perpendicular projected distance\n || abs((dx * dx2 + dy * dy2) / d2 - 0.5) > 0.3 // midpoint close to an end\n || a0 * a1 + b0 * b1 + c0 * c1 < cosMinDistance) { // angular distance\n resampleLineTo(x0, y0, lambda0, a0, b0, c0, x2, y2, lambda2, a /= m, b /= m, c, depth, stream);\n stream.point(x2, y2);\n resampleLineTo(x2, y2, lambda2, a, b, c, x1, y1, lambda1, a1, b1, c1, depth, stream);\n }\n }\n }\n return function(stream) {\n var lambda00, x00, y00, a00, b00, c00, // first point\n lambda0, x0, y0, a0, b0, c0; // previous point\n\n var resampleStream = {\n point: point,\n lineStart: lineStart,\n lineEnd: lineEnd,\n polygonStart: function() { stream.polygonStart(); resampleStream.lineStart = ringStart; },\n polygonEnd: function() { stream.polygonEnd(); resampleStream.lineStart = lineStart; }\n };\n\n function point(x, y) {\n x = project(x, y);\n stream.point(x[0], x[1]);\n }\n\n function lineStart() {\n x0 = NaN;\n resampleStream.point = linePoint;\n stream.lineStart();\n }\n\n function linePoint(lambda, phi) {\n var c = cartesian([lambda, phi]), p = project(lambda, phi);\n resampleLineTo(x0, y0, lambda0, a0, b0, c0, x0 = p[0], y0 = p[1], lambda0 = lambda, a0 = c[0], b0 = c[1], c0 = c[2], maxDepth, stream);\n stream.point(x0, y0);\n }\n\n function lineEnd() {\n resampleStream.point = point;\n stream.lineEnd();\n }\n\n function ringStart() {\n lineStart();\n resampleStream.point = ringPoint;\n resampleStream.lineEnd = ringEnd;\n }\n\n function ringPoint(lambda, phi) {\n linePoint(lambda00 = lambda, phi), x00 = x0, y00 = y0, a00 = a0, b00 = b0, c00 = c0;\n resampleStream.point = linePoint;\n }\n\n function ringEnd() {\n resampleLineTo(x0, y0, lambda0, a0, b0, c0, x00, y00, lambda00, a00, b00, c00, maxDepth, stream);\n resampleStream.lineEnd = lineEnd;\n lineEnd();\n }\n\n return resampleStream;\n };\n}\n","import clipAntimeridian from \"../clip/antimeridian\";\nimport clipCircle from \"../clip/circle\";\nimport {clipExtent} from \"../clip/extent\";\nimport compose from \"../compose\";\nimport identity from \"../identity\";\nimport {degrees, radians, sqrt} from \"../math\";\nimport {rotateRadians} from \"../rotation\";\nimport {transformer} from \"../transform\";\nimport {fitExtent, fitSize} from \"./fit\";\nimport resample from \"./resample\";\n\nvar transformRadians = transformer({\n point: function(x, y) {\n this.stream.point(x * radians, y * radians);\n }\n});\n\nexport default function projection(project) {\n return projectionMutator(function() { return project; })();\n}\n\nexport function projectionMutator(projectAt) {\n var project,\n k = 150, // scale\n x = 480, y = 250, // translate\n dx, dy, lambda = 0, phi = 0, // center\n deltaLambda = 0, deltaPhi = 0, deltaGamma = 0, rotate, projectRotate, // rotate\n theta = null, preclip = clipAntimeridian, // clip angle\n x0 = null, y0, x1, y1, postclip = identity, // clip extent\n delta2 = 0.5, projectResample = resample(projectTransform, delta2), // precision\n cache,\n cacheStream;\n\n function projection(point) {\n point = projectRotate(point[0] * radians, point[1] * radians);\n return [point[0] * k + dx, dy - point[1] * k];\n }\n\n function invert(point) {\n point = projectRotate.invert((point[0] - dx) / k, (dy - point[1]) / k);\n return point && [point[0] * degrees, point[1] * degrees];\n }\n\n function projectTransform(x, y) {\n return x = project(x, y), [x[0] * k + dx, dy - x[1] * k];\n }\n\n projection.stream = function(stream) {\n return cache && cacheStream === stream ? cache : cache = transformRadians(preclip(rotate, projectResample(postclip(cacheStream = stream))));\n };\n\n projection.clipAngle = function(_) {\n return arguments.length ? (preclip = +_ ? clipCircle(theta = _ * radians, 6 * radians) : (theta = null, clipAntimeridian), reset()) : theta * degrees;\n };\n\n projection.clipExtent = function(_) {\n return arguments.length ? (postclip = _ == null ? (x0 = y0 = x1 = y1 = null, identity) : clipExtent(x0 = +_[0][0], y0 = +_[0][1], x1 = +_[1][0], y1 = +_[1][1]), reset()) : x0 == null ? null : [[x0, y0], [x1, y1]];\n };\n\n projection.scale = function(_) {\n return arguments.length ? (k = +_, recenter()) : k;\n };\n\n projection.translate = function(_) {\n return arguments.length ? (x = +_[0], y = +_[1], recenter()) : [x, y];\n };\n\n projection.center = function(_) {\n return arguments.length ? (lambda = _[0] % 360 * radians, phi = _[1] % 360 * radians, recenter()) : [lambda * degrees, phi * degrees];\n };\n\n projection.rotate = function(_) {\n return arguments.length ? (deltaLambda = _[0] % 360 * radians, deltaPhi = _[1] % 360 * radians, deltaGamma = _.length > 2 ? _[2] % 360 * radians : 0, recenter()) : [deltaLambda * degrees, deltaPhi * degrees, deltaGamma * degrees];\n };\n\n projection.precision = function(_) {\n return arguments.length ? (projectResample = resample(projectTransform, delta2 = _ * _), reset()) : sqrt(delta2);\n };\n\n projection.fitExtent = function(extent, object) {\n return fitExtent(projection, extent, object);\n };\n\n projection.fitSize = function(size, object) {\n return fitSize(projection, size, object);\n };\n\n function recenter() {\n projectRotate = compose(rotate = rotateRadians(deltaLambda, deltaPhi, deltaGamma), project);\n var center = project(lambda, phi);\n dx = x - center[0] * k;\n dy = y + center[1] * k;\n return reset();\n }\n\n function reset() {\n cache = cacheStream = null;\n return projection;\n }\n\n return function() {\n project = projectAt.apply(this, arguments);\n projection.invert = project.invert && invert;\n return recenter();\n };\n}\n","import {asin, atan2, cos, sin, sqrt} from \"../math\";\n\nexport function azimuthalRaw(scale) {\n return function(x, y) {\n var cx = cos(x),\n cy = cos(y),\n k = scale(cx * cy);\n return [\n k * cy * sin(x),\n k * sin(y)\n ];\n }\n}\n\nexport function azimuthalInvert(angle) {\n return function(x, y) {\n var z = sqrt(x * x + y * y),\n c = angle(z),\n sc = sin(c),\n cc = cos(c);\n return [\n atan2(x * sc, z * cc),\n asin(z && y * sc / z)\n ];\n }\n}\n","import {asin, sqrt} from \"../math\";\nimport {azimuthalRaw, azimuthalInvert} from \"./azimuthal\";\nimport projection from \"./index\";\n\nexport var azimuthalEqualAreaRaw = azimuthalRaw(function(cxcy) {\n return sqrt(2 / (1 + cxcy));\n});\n\nazimuthalEqualAreaRaw.invert = azimuthalInvert(function(z) {\n return 2 * asin(z / 2);\n});\n\nexport default function() {\n return projection(azimuthalEqualAreaRaw)\n .scale(124.75)\n .clipAngle(180 - 1e-3);\n}\n","import {acos, sin} from \"../math\";\nimport {azimuthalRaw, azimuthalInvert} from \"./azimuthal\";\nimport projection from \"./index\";\n\nexport var azimuthalEquidistantRaw = azimuthalRaw(function(c) {\n return (c = acos(c)) && c / sin(c);\n});\n\nazimuthalEquidistantRaw.invert = azimuthalInvert(function(z) {\n return z;\n});\n\nexport default function() {\n return projection(azimuthalEquidistantRaw)\n .scale(79.4188)\n .clipAngle(180 - 1e-3);\n}\n","import {atan, exp, halfPi, log, pi, tan, tau} from \"../math\";\nimport rotation from \"../rotation\";\nimport projection from \"./index\";\n\nexport function mercatorRaw(lambda, phi) {\n return [lambda, log(tan((halfPi + phi) / 2))];\n}\n\nmercatorRaw.invert = function(x, y) {\n return [x, 2 * atan(exp(y)) - halfPi];\n};\n\nexport default function() {\n return mercatorProjection(mercatorRaw)\n .scale(961 / tau);\n}\n\nexport function mercatorProjection(project) {\n var m = projection(project),\n center = m.center,\n scale = m.scale,\n translate = m.translate,\n clipExtent = m.clipExtent,\n x0 = null, y0, x1, y1; // clip extent\n\n m.scale = function(_) {\n return arguments.length ? (scale(_), reclip()) : scale();\n };\n\n m.translate = function(_) {\n return arguments.length ? (translate(_), reclip()) : translate();\n };\n\n m.center = function(_) {\n return arguments.length ? (center(_), reclip()) : center();\n };\n\n m.clipExtent = function(_) {\n return arguments.length ? ((_ == null ? x0 = y0 = x1 = y1 = null : (x0 = +_[0][0], y0 = +_[0][1], x1 = +_[1][0], y1 = +_[1][1])), reclip()) : x0 == null ? null : [[x0, y0], [x1, y1]];\n };\n\n function reclip() {\n var k = pi * scale(),\n t = m(rotation(m.rotate()).invert([0, 0]));\n return clipExtent(x0 == null\n ? [[t[0] - k, t[1] - k], [t[0] + k, t[1] + k]] : project === mercatorRaw\n ? [[Math.max(t[0] - k, x0), y0], [Math.min(t[0] + k, x1), y1]]\n : [[x0, Math.max(t[1] - k, y0)], [x1, Math.min(t[1] + k, y1)]]);\n }\n\n return reclip();\n}\n","import projection from \"./index\";\n\nexport function equirectangularRaw(lambda, phi) {\n return [lambda, phi];\n}\n\nequirectangularRaw.invert = equirectangularRaw;\n\nexport default function() {\n return projection(equirectangularRaw)\n .scale(152.63);\n}\n","import {atan, cos, sin} from \"../math\";\nimport {azimuthalInvert} from \"./azimuthal\";\nimport projection from \"./index\";\n\nexport function gnomonicRaw(x, y) {\n var cy = cos(y), k = cos(x) * cy;\n return [cy * sin(x) / k, sin(y) / k];\n}\n\ngnomonicRaw.invert = azimuthalInvert(atan);\n\nexport default function() {\n return projection(gnomonicRaw)\n .scale(144.049)\n .clipAngle(60);\n}\n","import projection from \"./index\";\nimport {abs, epsilon} from \"../math\";\n\nexport function naturalEarth1Raw(lambda, phi) {\n var phi2 = phi * phi, phi4 = phi2 * phi2;\n return [\n lambda * (0.8707 - 0.131979 * phi2 + phi4 * (-0.013791 + phi4 * (0.003971 * phi2 - 0.001529 * phi4))),\n phi * (1.007226 + phi2 * (0.015085 + phi4 * (-0.044475 + 0.028874 * phi2 - 0.005916 * phi4)))\n ];\n}\n\nnaturalEarth1Raw.invert = function(x, y) {\n var phi = y, i = 25, delta;\n do {\n var phi2 = phi * phi, phi4 = phi2 * phi2;\n phi -= delta = (phi * (1.007226 + phi2 * (0.015085 + phi4 * (-0.044475 + 0.028874 * phi2 - 0.005916 * phi4))) - y) /\n (1.007226 + phi2 * (0.015085 * 3 + phi4 * (-0.044475 * 7 + 0.028874 * 9 * phi2 - 0.005916 * 11 * phi4)));\n } while (abs(delta) > epsilon && --i > 0);\n return [\n x / (0.8707 + (phi2 = phi * phi) * (-0.131979 + phi2 * (-0.013791 + phi2 * phi2 * phi2 * (0.003971 - 0.001529 * phi2)))),\n phi\n ];\n};\n\nexport default function() {\n return projection(naturalEarth1Raw)\n .scale(175.295);\n}\n","import {asin, cos, epsilon, sin} from \"../math\";\nimport {azimuthalInvert} from \"./azimuthal\";\nimport projection from \"./index\";\n\nexport function orthographicRaw(x, y) {\n return [cos(y) * sin(x), sin(y)];\n}\n\northographicRaw.invert = azimuthalInvert(asin);\n\nexport default function() {\n return projection(orthographicRaw)\n .scale(249.5)\n .clipAngle(90 + epsilon);\n}\n","import {atan, cos, sin} from \"../math\";\nimport {azimuthalInvert} from \"./azimuthal\";\nimport projection from \"./index\";\n\nexport function stereographicRaw(x, y) {\n var cy = cos(y), k = 1 + cos(x) * cy;\n return [cy * sin(x) / k, sin(y) / k];\n}\n\nstereographicRaw.invert = azimuthalInvert(function(z) {\n return 2 * atan(z);\n});\n\nexport default function() {\n return projection(stereographicRaw)\n .scale(250)\n .clipAngle(142);\n}\n","import {atan, exp, halfPi, log, tan} from \"../math\";\nimport {mercatorProjection} from \"./mercator\";\n\nexport function transverseMercatorRaw(lambda, phi) {\n return [log(tan((halfPi + phi) / 2)), -lambda];\n}\n\ntransverseMercatorRaw.invert = function(x, y) {\n return [-y, 2 * atan(exp(x)) - halfPi];\n};\n\nexport default function() {\n var m = mercatorProjection(transverseMercatorRaw),\n center = m.center,\n rotate = m.rotate;\n\n m.center = function(_) {\n return arguments.length ? center([-_[1], _[0]]) : (_ = center(), [_[1], -_[0]]);\n };\n\n m.rotate = function(_) {\n return arguments.length ? rotate([_[0], _[1], _.length > 2 ? _[2] + 90 : 90]) : (_ = rotate(), [_[0], _[1], _[2] - 90]);\n };\n\n return rotate([0, 0, 90])\n .scale(159.155);\n}\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n if (typeof b !== \"function\" && b !== null)\n throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\n/**\n * @module ol/Collection\n */\nimport AssertionError from './AssertionError.js';\nimport BaseObject from './Object.js';\nimport CollectionEventType from './CollectionEventType.js';\nimport Event from './events/Event.js';\n/**\n * @enum {string}\n * @private\n */\nvar Property = {\n LENGTH: 'length',\n};\n/**\n * @classdesc\n * Events emitted by {@link module:ol/Collection~Collection} instances are instances of this\n * type.\n */\nvar CollectionEvent = /** @class */ (function (_super) {\n __extends(CollectionEvent, _super);\n /**\n * @param {import(\"./CollectionEventType.js\").default} type Type.\n * @param {*} [opt_element] Element.\n * @param {number} [opt_index] The index of the added or removed element.\n */\n function CollectionEvent(type, opt_element, opt_index) {\n var _this = _super.call(this, type) || this;\n /**\n * The element that is added to or removed from the collection.\n * @type {*}\n * @api\n */\n _this.element = opt_element;\n /**\n * The index of the added or removed element.\n * @type {number}\n * @api\n */\n _this.index = opt_index;\n return _this;\n }\n return CollectionEvent;\n}(Event));\nexport { CollectionEvent };\n/***\n * @template Return\n * @typedef {import(\"./Observable\").OnSignature &\n * import(\"./Observable\").OnSignature &\n * import(\"./Observable\").OnSignature<'add'|'remove', CollectionEvent, Return> &\n * import(\"./Observable\").CombinedOnSignature} CollectionOnSignature\n */\n/**\n * @typedef {Object} Options\n * @property {boolean} [unique=false] Disallow the same item from being added to\n * the collection twice.\n */\n/**\n * @classdesc\n * An expanded version of standard JS Array, adding convenience methods for\n * manipulation. Add and remove changes to the Collection trigger a Collection\n * event. Note that this does not cover changes to the objects _within_ the\n * Collection; they trigger events on the appropriate object, not on the\n * Collection as a whole.\n *\n * @fires CollectionEvent\n *\n * @template T\n * @api\n */\nvar Collection = /** @class */ (function (_super) {\n __extends(Collection, _super);\n /**\n * @param {Array} [opt_array] Array.\n * @param {Options} [opt_options] Collection options.\n */\n function Collection(opt_array, opt_options) {\n var _this = _super.call(this) || this;\n /***\n * @type {CollectionOnSignature}\n */\n _this.on;\n /***\n * @type {CollectionOnSignature}\n */\n _this.once;\n /***\n * @type {CollectionOnSignature}\n */\n _this.un;\n var options = opt_options || {};\n /**\n * @private\n * @type {boolean}\n */\n _this.unique_ = !!options.unique;\n /**\n * @private\n * @type {!Array}\n */\n _this.array_ = opt_array ? opt_array : [];\n if (_this.unique_) {\n for (var i = 0, ii = _this.array_.length; i < ii; ++i) {\n _this.assertUnique_(_this.array_[i], i);\n }\n }\n _this.updateLength_();\n return _this;\n }\n /**\n * Remove all elements from the collection.\n * @api\n */\n Collection.prototype.clear = function () {\n while (this.getLength() > 0) {\n this.pop();\n }\n };\n /**\n * Add elements to the collection. This pushes each item in the provided array\n * to the end of the collection.\n * @param {!Array} arr Array.\n * @return {Collection} This collection.\n * @api\n */\n Collection.prototype.extend = function (arr) {\n for (var i = 0, ii = arr.length; i < ii; ++i) {\n this.push(arr[i]);\n }\n return this;\n };\n /**\n * Iterate over each element, calling the provided callback.\n * @param {function(T, number, Array): *} f The function to call\n * for every element. This function takes 3 arguments (the element, the\n * index and the array). The return value is ignored.\n * @api\n */\n Collection.prototype.forEach = function (f) {\n var array = this.array_;\n for (var i = 0, ii = array.length; i < ii; ++i) {\n f(array[i], i, array);\n }\n };\n /**\n * Get a reference to the underlying Array object. Warning: if the array\n * is mutated, no events will be dispatched by the collection, and the\n * collection's \"length\" property won't be in sync with the actual length\n * of the array.\n * @return {!Array} Array.\n * @api\n */\n Collection.prototype.getArray = function () {\n return this.array_;\n };\n /**\n * Get the element at the provided index.\n * @param {number} index Index.\n * @return {T} Element.\n * @api\n */\n Collection.prototype.item = function (index) {\n return this.array_[index];\n };\n /**\n * Get the length of this collection.\n * @return {number} The length of the array.\n * @observable\n * @api\n */\n Collection.prototype.getLength = function () {\n return this.get(Property.LENGTH);\n };\n /**\n * Insert an element at the provided index.\n * @param {number} index Index.\n * @param {T} elem Element.\n * @api\n */\n Collection.prototype.insertAt = function (index, elem) {\n if (this.unique_) {\n this.assertUnique_(elem);\n }\n this.array_.splice(index, 0, elem);\n this.updateLength_();\n this.dispatchEvent(new CollectionEvent(CollectionEventType.ADD, elem, index));\n };\n /**\n * Remove the last element of the collection and return it.\n * Return `undefined` if the collection is empty.\n * @return {T|undefined} Element.\n * @api\n */\n Collection.prototype.pop = function () {\n return this.removeAt(this.getLength() - 1);\n };\n /**\n * Insert the provided element at the end of the collection.\n * @param {T} elem Element.\n * @return {number} New length of the collection.\n * @api\n */\n Collection.prototype.push = function (elem) {\n if (this.unique_) {\n this.assertUnique_(elem);\n }\n var n = this.getLength();\n this.insertAt(n, elem);\n return this.getLength();\n };\n /**\n * Remove the first occurrence of an element from the collection.\n * @param {T} elem Element.\n * @return {T|undefined} The removed element or undefined if none found.\n * @api\n */\n Collection.prototype.remove = function (elem) {\n var arr = this.array_;\n for (var i = 0, ii = arr.length; i < ii; ++i) {\n if (arr[i] === elem) {\n return this.removeAt(i);\n }\n }\n return undefined;\n };\n /**\n * Remove the element at the provided index and return it.\n * Return `undefined` if the collection does not contain this index.\n * @param {number} index Index.\n * @return {T|undefined} Value.\n * @api\n */\n Collection.prototype.removeAt = function (index) {\n var prev = this.array_[index];\n this.array_.splice(index, 1);\n this.updateLength_();\n this.dispatchEvent(new CollectionEvent(CollectionEventType.REMOVE, prev, index));\n return prev;\n };\n /**\n * Set the element at the provided index.\n * @param {number} index Index.\n * @param {T} elem Element.\n * @api\n */\n Collection.prototype.setAt = function (index, elem) {\n var n = this.getLength();\n if (index < n) {\n if (this.unique_) {\n this.assertUnique_(elem, index);\n }\n var prev = this.array_[index];\n this.array_[index] = elem;\n this.dispatchEvent(new CollectionEvent(CollectionEventType.REMOVE, prev, index));\n this.dispatchEvent(new CollectionEvent(CollectionEventType.ADD, elem, index));\n }\n else {\n for (var j = n; j < index; ++j) {\n this.insertAt(j, undefined);\n }\n this.insertAt(index, elem);\n }\n };\n /**\n * @private\n */\n Collection.prototype.updateLength_ = function () {\n this.set(Property.LENGTH, this.array_.length);\n };\n /**\n * @private\n * @param {T} elem Element.\n * @param {number} [opt_except] Optional index to ignore.\n */\n Collection.prototype.assertUnique_ = function (elem, opt_except) {\n for (var i = 0, ii = this.array_.length; i < ii; ++i) {\n if (this.array_[i] === elem && i !== opt_except) {\n throw new AssertionError(58);\n }\n }\n };\n return Collection;\n}(BaseObject));\nexport default Collection;\n//# sourceMappingURL=Collection.js.map","/**\n * @module ol/CollectionEventType\n */\n/**\n * @enum {string}\n */\nexport default {\n /**\n * Triggered when an item is added to the collection.\n * @event module:ol/Collection.CollectionEvent#add\n * @api\n */\n ADD: 'add',\n /**\n * Triggered when an item is removed from the collection.\n * @event module:ol/Collection.CollectionEvent#remove\n * @api\n */\n REMOVE: 'remove',\n};\n//# sourceMappingURL=CollectionEventType.js.map","var __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n if (typeof b !== \"function\" && b !== null)\n throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\n/**\n * @module ol/ImageBase\n */\nimport EventTarget from './events/Target.js';\nimport EventType from './events/EventType.js';\nimport { abstract } from './util.js';\n/**\n * @abstract\n */\nvar ImageBase = /** @class */ (function (_super) {\n __extends(ImageBase, _super);\n /**\n * @param {import(\"./extent.js\").Extent} extent Extent.\n * @param {number|undefined} resolution Resolution.\n * @param {number} pixelRatio Pixel ratio.\n * @param {import(\"./ImageState.js\").default} state State.\n */\n function ImageBase(extent, resolution, pixelRatio, state) {\n var _this = _super.call(this) || this;\n /**\n * @protected\n * @type {import(\"./extent.js\").Extent}\n */\n _this.extent = extent;\n /**\n * @private\n * @type {number}\n */\n _this.pixelRatio_ = pixelRatio;\n /**\n * @protected\n * @type {number|undefined}\n */\n _this.resolution = resolution;\n /**\n * @protected\n * @type {import(\"./ImageState.js\").default}\n */\n _this.state = state;\n return _this;\n }\n /**\n * @protected\n */\n ImageBase.prototype.changed = function () {\n this.dispatchEvent(EventType.CHANGE);\n };\n /**\n * @return {import(\"./extent.js\").Extent} Extent.\n */\n ImageBase.prototype.getExtent = function () {\n return this.extent;\n };\n /**\n * @abstract\n * @return {HTMLCanvasElement|HTMLImageElement|HTMLVideoElement} Image.\n */\n ImageBase.prototype.getImage = function () {\n return abstract();\n };\n /**\n * @return {number} PixelRatio.\n */\n ImageBase.prototype.getPixelRatio = function () {\n return this.pixelRatio_;\n };\n /**\n * @return {number} Resolution.\n */\n ImageBase.prototype.getResolution = function () {\n return /** @type {number} */ (this.resolution);\n };\n /**\n * @return {import(\"./ImageState.js\").default} State.\n */\n ImageBase.prototype.getState = function () {\n return this.state;\n };\n /**\n * Load not yet loaded URI.\n * @abstract\n */\n ImageBase.prototype.load = function () {\n abstract();\n };\n return ImageBase;\n}(EventTarget));\nexport default ImageBase;\n//# sourceMappingURL=ImageBase.js.map","var __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n if (typeof b !== \"function\" && b !== null)\n throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\n/**\n * @module ol/Image\n */\nimport EventType from './events/EventType.js';\nimport ImageBase from './ImageBase.js';\nimport ImageState from './ImageState.js';\nimport { IMAGE_DECODE } from './has.js';\nimport { getHeight } from './extent.js';\nimport { listenOnce, unlistenByKey } from './events.js';\n/**\n * A function that takes an {@link module:ol/Image~Image} for the image and a\n * `{string}` for the src as arguments. It is supposed to make it so the\n * underlying image {@link module:ol/Image~Image#getImage} is assigned the\n * content specified by the src. If not specified, the default is\n *\n * function(image, src) {\n * image.getImage().src = src;\n * }\n *\n * Providing a custom `imageLoadFunction` can be useful to load images with\n * post requests or - in general - through XHR requests, where the src of the\n * image element would be set to a data URI when the content is loaded.\n *\n * @typedef {function(ImageWrapper, string): void} LoadFunction\n * @api\n */\nvar ImageWrapper = /** @class */ (function (_super) {\n __extends(ImageWrapper, _super);\n /**\n * @param {import(\"./extent.js\").Extent} extent Extent.\n * @param {number|undefined} resolution Resolution.\n * @param {number} pixelRatio Pixel ratio.\n * @param {string} src Image source URI.\n * @param {?string} crossOrigin Cross origin.\n * @param {LoadFunction} imageLoadFunction Image load function.\n */\n function ImageWrapper(extent, resolution, pixelRatio, src, crossOrigin, imageLoadFunction) {\n var _this = _super.call(this, extent, resolution, pixelRatio, ImageState.IDLE) || this;\n /**\n * @private\n * @type {string}\n */\n _this.src_ = src;\n /**\n * @private\n * @type {HTMLCanvasElement|HTMLImageElement|HTMLVideoElement}\n */\n _this.image_ = new Image();\n if (crossOrigin !== null) {\n _this.image_.crossOrigin = crossOrigin;\n }\n /**\n * @private\n * @type {?function():void}\n */\n _this.unlisten_ = null;\n /**\n * @protected\n * @type {import(\"./ImageState.js\").default}\n */\n _this.state = ImageState.IDLE;\n /**\n * @private\n * @type {LoadFunction}\n */\n _this.imageLoadFunction_ = imageLoadFunction;\n return _this;\n }\n /**\n * @return {HTMLCanvasElement|HTMLImageElement|HTMLVideoElement} Image.\n * @api\n */\n ImageWrapper.prototype.getImage = function () {\n return this.image_;\n };\n /**\n * Tracks loading or read errors.\n *\n * @private\n */\n ImageWrapper.prototype.handleImageError_ = function () {\n this.state = ImageState.ERROR;\n this.unlistenImage_();\n this.changed();\n };\n /**\n * Tracks successful image load.\n *\n * @private\n */\n ImageWrapper.prototype.handleImageLoad_ = function () {\n if (this.resolution === undefined) {\n this.resolution = getHeight(this.extent) / this.image_.height;\n }\n this.state = ImageState.LOADED;\n this.unlistenImage_();\n this.changed();\n };\n /**\n * Load the image or retry if loading previously failed.\n * Loading is taken care of by the tile queue, and calling this method is\n * only needed for preloading or for reloading in case of an error.\n * @api\n */\n ImageWrapper.prototype.load = function () {\n if (this.state == ImageState.IDLE || this.state == ImageState.ERROR) {\n this.state = ImageState.LOADING;\n this.changed();\n this.imageLoadFunction_(this, this.src_);\n this.unlisten_ = listenImage(this.image_, this.handleImageLoad_.bind(this), this.handleImageError_.bind(this));\n }\n };\n /**\n * @param {HTMLCanvasElement|HTMLImageElement|HTMLVideoElement} image Image.\n */\n ImageWrapper.prototype.setImage = function (image) {\n this.image_ = image;\n this.resolution = getHeight(this.extent) / this.image_.height;\n };\n /**\n * Discards event handlers which listen for load completion or errors.\n *\n * @private\n */\n ImageWrapper.prototype.unlistenImage_ = function () {\n if (this.unlisten_) {\n this.unlisten_();\n this.unlisten_ = null;\n }\n };\n return ImageWrapper;\n}(ImageBase));\n/**\n * @param {HTMLCanvasElement|HTMLImageElement|HTMLVideoElement} image Image element.\n * @param {function():any} loadHandler Load callback function.\n * @param {function():any} errorHandler Error callback function.\n * @return {function():void} Callback to stop listening.\n */\nexport function listenImage(image, loadHandler, errorHandler) {\n var img = /** @type {HTMLImageElement} */ (image);\n if (img.src && IMAGE_DECODE) {\n var promise = img.decode();\n var listening_1 = true;\n var unlisten = function () {\n listening_1 = false;\n };\n promise\n .then(function () {\n if (listening_1) {\n loadHandler();\n }\n })\n .catch(function (error) {\n if (listening_1) {\n // FIXME: Unconditionally call errorHandler() when this bug is fixed upstream:\n // https://bugs.webkit.org/show_bug.cgi?id=198527\n if (error.name === 'EncodingError' &&\n error.message === 'Invalid image type.') {\n loadHandler();\n }\n else {\n errorHandler();\n }\n }\n });\n return unlisten;\n }\n var listenerKeys = [\n listenOnce(img, EventType.LOAD, loadHandler),\n listenOnce(img, EventType.ERROR, errorHandler),\n ];\n return function unlisten() {\n listenerKeys.forEach(unlistenByKey);\n };\n}\nexport default ImageWrapper;\n//# sourceMappingURL=Image.js.map","/**\n * @module ol/ImageState\n */\n/**\n * @enum {number}\n */\nexport default {\n IDLE: 0,\n LOADING: 1,\n LOADED: 2,\n ERROR: 3,\n EMPTY: 4,\n};\n//# sourceMappingURL=ImageState.js.map","var __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n if (typeof b !== \"function\" && b !== null)\n throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\n/**\n * @module ol/renderer/Map\n */\nimport Disposable from '../Disposable.js';\nimport { TRUE } from '../functions.js';\nimport { abstract } from '../util.js';\nimport { compose as composeTransform, makeInverse } from '../transform.js';\nimport { getWidth } from '../extent.js';\nimport { shared as iconImageCache } from '../style/IconImageCache.js';\nimport { inView } from '../layer/Layer.js';\nimport { wrapX } from '../coordinate.js';\n/**\n * @typedef HitMatch\n * @property {import(\"../Feature.js\").FeatureLike} feature Feature.\n * @property {import(\"../layer/Layer.js\").default} layer Layer.\n * @property {import(\"../geom/SimpleGeometry.js\").default} geometry Geometry.\n * @property {number} distanceSq Squared distance.\n * @property {import(\"./vector.js\").FeatureCallback} callback Callback.\n * @template T\n */\n/**\n * @abstract\n */\nvar MapRenderer = /** @class */ (function (_super) {\n __extends(MapRenderer, _super);\n /**\n * @param {import(\"../PluggableMap.js\").default} map Map.\n */\n function MapRenderer(map) {\n var _this = _super.call(this) || this;\n /**\n * @private\n * @type {import(\"../PluggableMap.js\").default}\n */\n _this.map_ = map;\n return _this;\n }\n /**\n * @abstract\n * @param {import(\"../render/EventType.js\").default} type Event type.\n * @param {import(\"../PluggableMap.js\").FrameState} frameState Frame state.\n */\n MapRenderer.prototype.dispatchRenderEvent = function (type, frameState) {\n abstract();\n };\n /**\n * @param {import(\"../PluggableMap.js\").FrameState} frameState FrameState.\n * @protected\n */\n MapRenderer.prototype.calculateMatrices2D = function (frameState) {\n var viewState = frameState.viewState;\n var coordinateToPixelTransform = frameState.coordinateToPixelTransform;\n var pixelToCoordinateTransform = frameState.pixelToCoordinateTransform;\n composeTransform(coordinateToPixelTransform, frameState.size[0] / 2, frameState.size[1] / 2, 1 / viewState.resolution, -1 / viewState.resolution, -viewState.rotation, -viewState.center[0], -viewState.center[1]);\n makeInverse(pixelToCoordinateTransform, coordinateToPixelTransform);\n };\n /**\n * @param {import(\"../coordinate.js\").Coordinate} coordinate Coordinate.\n * @param {import(\"../PluggableMap.js\").FrameState} frameState FrameState.\n * @param {number} hitTolerance Hit tolerance in pixels.\n * @param {boolean} checkWrapped Check for wrapped geometries.\n * @param {import(\"./vector.js\").FeatureCallback} callback Feature callback.\n * @param {S} thisArg Value to use as `this` when executing `callback`.\n * @param {function(this: U, import(\"../layer/Layer.js\").default): boolean} layerFilter Layer filter\n * function, only layers which are visible and for which this function\n * returns `true` will be tested for features. By default, all visible\n * layers will be tested.\n * @param {U} thisArg2 Value to use as `this` when executing `layerFilter`.\n * @return {T|undefined} Callback result.\n * @template S,T,U\n */\n MapRenderer.prototype.forEachFeatureAtCoordinate = function (coordinate, frameState, hitTolerance, checkWrapped, callback, thisArg, layerFilter, thisArg2) {\n var result;\n var viewState = frameState.viewState;\n /**\n * @param {boolean} managed Managed layer.\n * @param {import(\"../Feature.js\").FeatureLike} feature Feature.\n * @param {import(\"../layer/Layer.js\").default} layer Layer.\n * @param {import(\"../geom/Geometry.js\").default} geometry Geometry.\n * @return {T|undefined} Callback result.\n */\n function forEachFeatureAtCoordinate(managed, feature, layer, geometry) {\n return callback.call(thisArg, feature, managed ? layer : null, geometry);\n }\n var projection = viewState.projection;\n var translatedCoordinate = wrapX(coordinate.slice(), projection);\n var offsets = [[0, 0]];\n if (projection.canWrapX() && checkWrapped) {\n var projectionExtent = projection.getExtent();\n var worldWidth = getWidth(projectionExtent);\n offsets.push([-worldWidth, 0], [worldWidth, 0]);\n }\n var layerStates = frameState.layerStatesArray;\n var numLayers = layerStates.length;\n var matches = /** @type {Array>} */ ([]);\n var tmpCoord = [];\n for (var i = 0; i < offsets.length; i++) {\n for (var j = numLayers - 1; j >= 0; --j) {\n var layerState = layerStates[j];\n var layer = layerState.layer;\n if (layer.hasRenderer() &&\n inView(layerState, viewState) &&\n layerFilter.call(thisArg2, layer)) {\n var layerRenderer = layer.getRenderer();\n var source = layer.getSource();\n if (layerRenderer && source) {\n var coordinates = source.getWrapX()\n ? translatedCoordinate\n : coordinate;\n var callback_1 = forEachFeatureAtCoordinate.bind(null, layerState.managed);\n tmpCoord[0] = coordinates[0] + offsets[i][0];\n tmpCoord[1] = coordinates[1] + offsets[i][1];\n result = layerRenderer.forEachFeatureAtCoordinate(tmpCoord, frameState, hitTolerance, callback_1, matches);\n }\n if (result) {\n return result;\n }\n }\n }\n }\n if (matches.length === 0) {\n return undefined;\n }\n var order = 1 / matches.length;\n matches.forEach(function (m, i) { return (m.distanceSq += i * order); });\n matches.sort(function (a, b) { return a.distanceSq - b.distanceSq; });\n matches.some(function (m) {\n return (result = m.callback(m.feature, m.layer, m.geometry));\n });\n return result;\n };\n /**\n * @abstract\n * @param {import(\"../pixel.js\").Pixel} pixel Pixel.\n * @param {import(\"../PluggableMap.js\").FrameState} frameState FrameState.\n * @param {number} hitTolerance Hit tolerance in pixels.\n * @param {function(import(\"../layer/Layer.js\").default, (Uint8ClampedArray|Uint8Array)): T} callback Layer\n * callback.\n * @param {function(import(\"../layer/Layer.js\").default): boolean} layerFilter Layer filter\n * function, only layers which are visible and for which this function\n * returns `true` will be tested for features. By default, all visible\n * layers will be tested.\n * @return {T|undefined} Callback result.\n * @template T\n */\n MapRenderer.prototype.forEachLayerAtPixel = function (pixel, frameState, hitTolerance, callback, layerFilter) {\n return abstract();\n };\n /**\n * @param {import(\"../coordinate.js\").Coordinate} coordinate Coordinate.\n * @param {import(\"../PluggableMap.js\").FrameState} frameState FrameState.\n * @param {number} hitTolerance Hit tolerance in pixels.\n * @param {boolean} checkWrapped Check for wrapped geometries.\n * @param {function(this: U, import(\"../layer/Layer.js\").default): boolean} layerFilter Layer filter\n * function, only layers which are visible and for which this function\n * returns `true` will be tested for features. By default, all visible\n * layers will be tested.\n * @param {U} thisArg Value to use as `this` when executing `layerFilter`.\n * @return {boolean} Is there a feature at the given coordinate?\n * @template U\n */\n MapRenderer.prototype.hasFeatureAtCoordinate = function (coordinate, frameState, hitTolerance, checkWrapped, layerFilter, thisArg) {\n var hasFeature = this.forEachFeatureAtCoordinate(coordinate, frameState, hitTolerance, checkWrapped, TRUE, this, layerFilter, thisArg);\n return hasFeature !== undefined;\n };\n /**\n * @return {import(\"../PluggableMap.js\").default} Map.\n */\n MapRenderer.prototype.getMap = function () {\n return this.map_;\n };\n /**\n * Render.\n * @abstract\n * @param {?import(\"../PluggableMap.js\").FrameState} frameState Frame state.\n */\n MapRenderer.prototype.renderFrame = function (frameState) {\n abstract();\n };\n /**\n * @param {import(\"../PluggableMap.js\").FrameState} frameState Frame state.\n * @protected\n */\n MapRenderer.prototype.scheduleExpireIconCache = function (frameState) {\n if (iconImageCache.canExpireCache()) {\n frameState.postRenderFunctions.push(expireIconCache);\n }\n };\n return MapRenderer;\n}(Disposable));\n/**\n * @param {import(\"../PluggableMap.js\").default} map Map.\n * @param {import(\"../PluggableMap.js\").FrameState} frameState Frame state.\n */\nfunction expireIconCache(map, frameState) {\n iconImageCache.expire();\n}\nexport default MapRenderer;\n//# sourceMappingURL=Map.js.map","var __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n if (typeof b !== \"function\" && b !== null)\n throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\n/**\n * @module ol/renderer/Composite\n */\nimport MapRenderer from './Map.js';\nimport ObjectEventType from '../ObjectEventType.js';\nimport RenderEvent from '../render/Event.js';\nimport RenderEventType from '../render/EventType.js';\nimport SourceState from '../source/State.js';\nimport { CLASS_UNSELECTABLE } from '../css.js';\nimport { checkedFonts } from '../render/canvas.js';\nimport { inView } from '../layer/Layer.js';\nimport { listen, unlistenByKey } from '../events.js';\nimport { replaceChildren } from '../dom.js';\n/**\n * @classdesc\n * Canvas map renderer.\n * @api\n */\nvar CompositeMapRenderer = /** @class */ (function (_super) {\n __extends(CompositeMapRenderer, _super);\n /**\n * @param {import(\"../PluggableMap.js\").default} map Map.\n */\n function CompositeMapRenderer(map) {\n var _this = _super.call(this, map) || this;\n /**\n * @type {import(\"../events.js\").EventsKey}\n */\n _this.fontChangeListenerKey_ = listen(checkedFonts, ObjectEventType.PROPERTYCHANGE, map.redrawText.bind(map));\n /**\n * @private\n * @type {HTMLDivElement}\n */\n _this.element_ = document.createElement('div');\n var style = _this.element_.style;\n style.position = 'absolute';\n style.width = '100%';\n style.height = '100%';\n style.zIndex = '0';\n _this.element_.className = CLASS_UNSELECTABLE + ' ol-layers';\n var container = map.getViewport();\n container.insertBefore(_this.element_, container.firstChild || null);\n /**\n * @private\n * @type {Array}\n */\n _this.children_ = [];\n /**\n * @private\n * @type {boolean}\n */\n _this.renderedVisible_ = true;\n return _this;\n }\n /**\n * @param {import(\"../render/EventType.js\").default} type Event type.\n * @param {import(\"../PluggableMap.js\").FrameState} frameState Frame state.\n */\n CompositeMapRenderer.prototype.dispatchRenderEvent = function (type, frameState) {\n var map = this.getMap();\n if (map.hasListener(type)) {\n var event_1 = new RenderEvent(type, undefined, frameState);\n map.dispatchEvent(event_1);\n }\n };\n CompositeMapRenderer.prototype.disposeInternal = function () {\n unlistenByKey(this.fontChangeListenerKey_);\n this.element_.parentNode.removeChild(this.element_);\n _super.prototype.disposeInternal.call(this);\n };\n /**\n * Render.\n * @param {?import(\"../PluggableMap.js\").FrameState} frameState Frame state.\n */\n CompositeMapRenderer.prototype.renderFrame = function (frameState) {\n if (!frameState) {\n if (this.renderedVisible_) {\n this.element_.style.display = 'none';\n this.renderedVisible_ = false;\n }\n return;\n }\n this.calculateMatrices2D(frameState);\n this.dispatchRenderEvent(RenderEventType.PRECOMPOSE, frameState);\n var layerStatesArray = frameState.layerStatesArray.sort(function (a, b) {\n return a.zIndex - b.zIndex;\n });\n var viewState = frameState.viewState;\n this.children_.length = 0;\n /**\n * @type {Array}\n */\n var declutterLayers = [];\n var previousElement = null;\n for (var i = 0, ii = layerStatesArray.length; i < ii; ++i) {\n var layerState = layerStatesArray[i];\n frameState.layerIndex = i;\n if (!inView(layerState, viewState) ||\n (layerState.sourceState != SourceState.READY &&\n layerState.sourceState != SourceState.UNDEFINED)) {\n continue;\n }\n var layer = layerState.layer;\n var element = layer.render(frameState, previousElement);\n if (!element) {\n continue;\n }\n if (element !== previousElement) {\n this.children_.push(element);\n previousElement = element;\n }\n if ('getDeclutter' in layer) {\n declutterLayers.push(\n /** @type {import(\"../layer/BaseVector.js\").default} */ (layer));\n }\n }\n for (var i = declutterLayers.length - 1; i >= 0; --i) {\n declutterLayers[i].renderDeclutter(frameState);\n }\n replaceChildren(this.element_, this.children_);\n this.dispatchRenderEvent(RenderEventType.POSTCOMPOSE, frameState);\n if (!this.renderedVisible_) {\n this.element_.style.display = '';\n this.renderedVisible_ = true;\n }\n this.scheduleExpireIconCache(frameState);\n };\n /**\n * @param {import(\"../pixel.js\").Pixel} pixel Pixel.\n * @param {import(\"../PluggableMap.js\").FrameState} frameState FrameState.\n * @param {number} hitTolerance Hit tolerance in pixels.\n * @param {function(import(\"../layer/Layer.js\").default, (Uint8ClampedArray|Uint8Array)): T} callback Layer\n * callback.\n * @param {function(import(\"../layer/Layer.js\").default): boolean} layerFilter Layer filter\n * function, only layers which are visible and for which this function\n * returns `true` will be tested for features. By default, all visible\n * layers will be tested.\n * @return {T|undefined} Callback result.\n * @template T\n */\n CompositeMapRenderer.prototype.forEachLayerAtPixel = function (pixel, frameState, hitTolerance, callback, layerFilter) {\n var viewState = frameState.viewState;\n var layerStates = frameState.layerStatesArray;\n var numLayers = layerStates.length;\n for (var i = numLayers - 1; i >= 0; --i) {\n var layerState = layerStates[i];\n var layer = layerState.layer;\n if (layer.hasRenderer() &&\n inView(layerState, viewState) &&\n layerFilter(layer)) {\n var layerRenderer = layer.getRenderer();\n var data = layerRenderer.getDataAtPixel(pixel, frameState, hitTolerance);\n if (data) {\n var result = callback(layer, data);\n if (result) {\n return result;\n }\n }\n }\n }\n return undefined;\n };\n return CompositeMapRenderer;\n}(MapRenderer));\nexport default CompositeMapRenderer;\n//# sourceMappingURL=Composite.js.map","var __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n if (typeof b !== \"function\" && b !== null)\n throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\n/**\n * @module ol/MapEvent\n */\nimport Event from './events/Event.js';\n/**\n * @classdesc\n * Events emitted as map events are instances of this type.\n * See {@link module:ol/PluggableMap~PluggableMap} for which events trigger a map event.\n */\nvar MapEvent = /** @class */ (function (_super) {\n __extends(MapEvent, _super);\n /**\n * @param {string} type Event type.\n * @param {import(\"./PluggableMap.js\").default} map Map.\n * @param {?import(\"./PluggableMap.js\").FrameState} [opt_frameState] Frame state.\n */\n function MapEvent(type, map, opt_frameState) {\n var _this = _super.call(this, type) || this;\n /**\n * The map where the event occurred.\n * @type {import(\"./PluggableMap.js\").default}\n * @api\n */\n _this.map = map;\n /**\n * The frame state at the time of the event.\n * @type {?import(\"./PluggableMap.js\").FrameState}\n * @api\n */\n _this.frameState = opt_frameState !== undefined ? opt_frameState : null;\n return _this;\n }\n return MapEvent;\n}(Event));\nexport default MapEvent;\n//# sourceMappingURL=MapEvent.js.map","var __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n if (typeof b !== \"function\" && b !== null)\n throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\n/**\n * @module ol/MapBrowserEvent\n */\nimport MapEvent from './MapEvent.js';\n/**\n * @classdesc\n * Events emitted as map browser events are instances of this type.\n * See {@link module:ol/PluggableMap~PluggableMap} for which events trigger a map browser event.\n * @template {UIEvent} EVENT\n */\nvar MapBrowserEvent = /** @class */ (function (_super) {\n __extends(MapBrowserEvent, _super);\n /**\n * @param {string} type Event type.\n * @param {import(\"./PluggableMap.js\").default} map Map.\n * @param {EVENT} originalEvent Original event.\n * @param {boolean} [opt_dragging] Is the map currently being dragged?\n * @param {?import(\"./PluggableMap.js\").FrameState} [opt_frameState] Frame state.\n */\n function MapBrowserEvent(type, map, originalEvent, opt_dragging, opt_frameState) {\n var _this = _super.call(this, type, map, opt_frameState) || this;\n /**\n * The original browser event.\n * @const\n * @type {EVENT}\n * @api\n */\n _this.originalEvent = originalEvent;\n /**\n * The map pixel relative to the viewport corresponding to the original browser event.\n * @type {?import(\"./pixel.js\").Pixel}\n */\n _this.pixel_ = null;\n /**\n * The coordinate in the user projection corresponding to the original browser event.\n * @type {?import(\"./coordinate.js\").Coordinate}\n */\n _this.coordinate_ = null;\n /**\n * Indicates if the map is currently being dragged. Only set for\n * `POINTERDRAG` and `POINTERMOVE` events. Default is `false`.\n *\n * @type {boolean}\n * @api\n */\n _this.dragging = opt_dragging !== undefined ? opt_dragging : false;\n return _this;\n }\n Object.defineProperty(MapBrowserEvent.prototype, \"pixel\", {\n /**\n * The map pixel relative to the viewport corresponding to the original event.\n * @type {import(\"./pixel.js\").Pixel}\n * @api\n */\n get: function () {\n if (!this.pixel_) {\n this.pixel_ = this.map.getEventPixel(this.originalEvent);\n }\n return this.pixel_;\n },\n set: function (pixel) {\n this.pixel_ = pixel;\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(MapBrowserEvent.prototype, \"coordinate\", {\n /**\n * The coordinate corresponding to the original browser event. This will be in the user\n * projection if one is set. Otherwise it will be in the view projection.\n * @type {import(\"./coordinate.js\").Coordinate}\n * @api\n */\n get: function () {\n if (!this.coordinate_) {\n this.coordinate_ = this.map.getCoordinateFromPixel(this.pixel);\n }\n return this.coordinate_;\n },\n set: function (coordinate) {\n this.coordinate_ = coordinate;\n },\n enumerable: false,\n configurable: true\n });\n /**\n * Prevents the default browser action.\n * See https://developer.mozilla.org/en-US/docs/Web/API/event.preventDefault.\n * @api\n */\n MapBrowserEvent.prototype.preventDefault = function () {\n _super.prototype.preventDefault.call(this);\n if ('preventDefault' in this.originalEvent) {\n /** @type {UIEvent} */ (this.originalEvent).preventDefault();\n }\n };\n /**\n * Prevents further propagation of the current event.\n * See https://developer.mozilla.org/en-US/docs/Web/API/event.stopPropagation.\n * @api\n */\n MapBrowserEvent.prototype.stopPropagation = function () {\n _super.prototype.stopPropagation.call(this);\n if ('stopPropagation' in this.originalEvent) {\n /** @type {UIEvent} */ (this.originalEvent).stopPropagation();\n }\n };\n return MapBrowserEvent;\n}(MapEvent));\nexport default MapBrowserEvent;\n//# sourceMappingURL=MapBrowserEvent.js.map","/**\n * @module ol/MapBrowserEventHandler\n */\nvar __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n if (typeof b !== \"function\" && b !== null)\n throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nimport EventType from './events/EventType.js';\nimport MapBrowserEvent from './MapBrowserEvent.js';\nimport MapBrowserEventType from './MapBrowserEventType.js';\nimport PointerEventType from './pointer/EventType.js';\nimport Target from './events/Target.js';\nimport { PASSIVE_EVENT_LISTENERS } from './has.js';\nimport { VOID } from './functions.js';\nimport { listen, unlistenByKey } from './events.js';\nvar MapBrowserEventHandler = /** @class */ (function (_super) {\n __extends(MapBrowserEventHandler, _super);\n /**\n * @param {import(\"./PluggableMap.js\").default} map The map with the viewport to listen to events on.\n * @param {number} [moveTolerance] The minimal distance the pointer must travel to trigger a move.\n */\n function MapBrowserEventHandler(map, moveTolerance) {\n var _this = _super.call(this, map) || this;\n /**\n * This is the element that we will listen to the real events on.\n * @type {import(\"./PluggableMap.js\").default}\n * @private\n */\n _this.map_ = map;\n /**\n * @type {any}\n * @private\n */\n _this.clickTimeoutId_;\n /**\n * Emulate dblclick and singleclick. Will be true when only one pointer is active.\n * @type {boolean}\n */\n _this.emulateClicks_ = false;\n /**\n * @type {boolean}\n * @private\n */\n _this.dragging_ = false;\n /**\n * @type {!Array}\n * @private\n */\n _this.dragListenerKeys_ = [];\n /**\n * @type {number}\n * @private\n */\n _this.moveTolerance_ = moveTolerance === undefined ? 1 : moveTolerance;\n /**\n * The most recent \"down\" type event (or null if none have occurred).\n * Set on pointerdown.\n * @type {PointerEvent}\n * @private\n */\n _this.down_ = null;\n var element = _this.map_.getViewport();\n /**\n * @type {number}\n * @private\n */\n _this.activePointers_ = 0;\n /**\n * @type {!Object}\n * @private\n */\n _this.trackedTouches_ = {};\n _this.element_ = element;\n /**\n * @type {?import(\"./events.js\").EventsKey}\n * @private\n */\n _this.pointerdownListenerKey_ = listen(element, PointerEventType.POINTERDOWN, _this.handlePointerDown_, _this);\n /**\n * @type {PointerEvent}\n * @private\n */\n _this.originalPointerMoveEvent_;\n /**\n * @type {?import(\"./events.js\").EventsKey}\n * @private\n */\n _this.relayedListenerKey_ = listen(element, PointerEventType.POINTERMOVE, _this.relayEvent_, _this);\n /**\n * @private\n */\n _this.boundHandleTouchMove_ = _this.handleTouchMove_.bind(_this);\n _this.element_.addEventListener(EventType.TOUCHMOVE, _this.boundHandleTouchMove_, PASSIVE_EVENT_LISTENERS ? { passive: false } : false);\n return _this;\n }\n /**\n * @param {PointerEvent} pointerEvent Pointer\n * event.\n * @private\n */\n MapBrowserEventHandler.prototype.emulateClick_ = function (pointerEvent) {\n var newEvent = new MapBrowserEvent(MapBrowserEventType.CLICK, this.map_, pointerEvent);\n this.dispatchEvent(newEvent);\n if (this.clickTimeoutId_ !== undefined) {\n // double-click\n clearTimeout(this.clickTimeoutId_);\n this.clickTimeoutId_ = undefined;\n newEvent = new MapBrowserEvent(MapBrowserEventType.DBLCLICK, this.map_, pointerEvent);\n this.dispatchEvent(newEvent);\n }\n else {\n // click\n this.clickTimeoutId_ = setTimeout(\n /** @this {MapBrowserEventHandler} */\n function () {\n this.clickTimeoutId_ = undefined;\n var newEvent = new MapBrowserEvent(MapBrowserEventType.SINGLECLICK, this.map_, pointerEvent);\n this.dispatchEvent(newEvent);\n }.bind(this), 250);\n }\n };\n /**\n * Keeps track on how many pointers are currently active.\n *\n * @param {PointerEvent} pointerEvent Pointer\n * event.\n * @private\n */\n MapBrowserEventHandler.prototype.updateActivePointers_ = function (pointerEvent) {\n var event = pointerEvent;\n if (event.type == MapBrowserEventType.POINTERUP ||\n event.type == MapBrowserEventType.POINTERCANCEL) {\n delete this.trackedTouches_[event.pointerId];\n }\n else if (event.type == MapBrowserEventType.POINTERDOWN) {\n this.trackedTouches_[event.pointerId] = true;\n }\n this.activePointers_ = Object.keys(this.trackedTouches_).length;\n };\n /**\n * @param {PointerEvent} pointerEvent Pointer\n * event.\n * @private\n */\n MapBrowserEventHandler.prototype.handlePointerUp_ = function (pointerEvent) {\n this.updateActivePointers_(pointerEvent);\n var newEvent = new MapBrowserEvent(MapBrowserEventType.POINTERUP, this.map_, pointerEvent);\n this.dispatchEvent(newEvent);\n // We emulate click events on left mouse button click, touch contact, and pen\n // contact. isMouseActionButton returns true in these cases (evt.button is set\n // to 0).\n // See http://www.w3.org/TR/pointerevents/#button-states\n // We only fire click, singleclick, and doubleclick if nobody has called\n // event.preventDefault().\n if (this.emulateClicks_ &&\n !newEvent.defaultPrevented &&\n !this.dragging_ &&\n this.isMouseActionButton_(pointerEvent)) {\n this.emulateClick_(this.down_);\n }\n if (this.activePointers_ === 0) {\n this.dragListenerKeys_.forEach(unlistenByKey);\n this.dragListenerKeys_.length = 0;\n this.dragging_ = false;\n this.down_ = null;\n }\n };\n /**\n * @param {PointerEvent} pointerEvent Pointer\n * event.\n * @return {boolean} If the left mouse button was pressed.\n * @private\n */\n MapBrowserEventHandler.prototype.isMouseActionButton_ = function (pointerEvent) {\n return pointerEvent.button === 0;\n };\n /**\n * @param {PointerEvent} pointerEvent Pointer\n * event.\n * @private\n */\n MapBrowserEventHandler.prototype.handlePointerDown_ = function (pointerEvent) {\n this.emulateClicks_ = this.activePointers_ === 0;\n this.updateActivePointers_(pointerEvent);\n var newEvent = new MapBrowserEvent(MapBrowserEventType.POINTERDOWN, this.map_, pointerEvent);\n this.dispatchEvent(newEvent);\n // Store a copy of the down event\n this.down_ = /** @type {PointerEvent} */ ({});\n for (var property in pointerEvent) {\n var value = pointerEvent[property];\n this.down_[property] = typeof value === 'function' ? VOID : value;\n }\n if (this.dragListenerKeys_.length === 0) {\n var doc = this.map_.getOwnerDocument();\n this.dragListenerKeys_.push(listen(doc, MapBrowserEventType.POINTERMOVE, this.handlePointerMove_, this), listen(doc, MapBrowserEventType.POINTERUP, this.handlePointerUp_, this), \n /* Note that the listener for `pointercancel is set up on\n * `pointerEventHandler_` and not `documentPointerEventHandler_` like\n * the `pointerup` and `pointermove` listeners.\n *\n * The reason for this is the following: `TouchSource.vacuumTouches_()`\n * issues `pointercancel` events, when there was no `touchend` for a\n * `touchstart`. Now, let's say a first `touchstart` is registered on\n * `pointerEventHandler_`. The `documentPointerEventHandler_` is set up.\n * But `documentPointerEventHandler_` doesn't know about the first\n * `touchstart`. If there is no `touchend` for the `touchstart`, we can\n * only receive a `touchcancel` from `pointerEventHandler_`, because it is\n * only registered there.\n */\n listen(this.element_, MapBrowserEventType.POINTERCANCEL, this.handlePointerUp_, this));\n if (this.element_.getRootNode && this.element_.getRootNode() !== doc) {\n this.dragListenerKeys_.push(listen(this.element_.getRootNode(), MapBrowserEventType.POINTERUP, this.handlePointerUp_, this));\n }\n }\n };\n /**\n * @param {PointerEvent} pointerEvent Pointer\n * event.\n * @private\n */\n MapBrowserEventHandler.prototype.handlePointerMove_ = function (pointerEvent) {\n // Between pointerdown and pointerup, pointermove events are triggered.\n // To avoid a 'false' touchmove event to be dispatched, we test if the pointer\n // moved a significant distance.\n if (this.isMoving_(pointerEvent)) {\n this.dragging_ = true;\n var newEvent = new MapBrowserEvent(MapBrowserEventType.POINTERDRAG, this.map_, pointerEvent, this.dragging_);\n this.dispatchEvent(newEvent);\n }\n };\n /**\n * Wrap and relay a pointer event. Note that this requires that the type\n * string for the MapBrowserEvent matches the PointerEvent type.\n * @param {PointerEvent} pointerEvent Pointer\n * event.\n * @private\n */\n MapBrowserEventHandler.prototype.relayEvent_ = function (pointerEvent) {\n this.originalPointerMoveEvent_ = pointerEvent;\n var dragging = !!(this.down_ && this.isMoving_(pointerEvent));\n this.dispatchEvent(new MapBrowserEvent(pointerEvent.type, this.map_, pointerEvent, dragging));\n };\n /**\n * Flexible handling of a `touch-action: none` css equivalent: because calling\n * `preventDefault()` on a `pointermove` event does not stop native page scrolling\n * and zooming, we also listen for `touchmove` and call `preventDefault()` on it\n * when an interaction (currently `DragPan` handles the event.\n * @param {TouchEvent} event Event.\n * @private\n */\n MapBrowserEventHandler.prototype.handleTouchMove_ = function (event) {\n // Due to https://github.com/mpizenberg/elm-pep/issues/2, `this.originalPointerMoveEvent_`\n // may not be initialized yet when we get here on a platform without native pointer events.\n var originalEvent = this.originalPointerMoveEvent_;\n if ((!originalEvent || originalEvent.defaultPrevented) &&\n (typeof event.cancelable !== 'boolean' || event.cancelable === true)) {\n event.preventDefault();\n }\n };\n /**\n * @param {PointerEvent} pointerEvent Pointer\n * event.\n * @return {boolean} Is moving.\n * @private\n */\n MapBrowserEventHandler.prototype.isMoving_ = function (pointerEvent) {\n return (this.dragging_ ||\n Math.abs(pointerEvent.clientX - this.down_.clientX) >\n this.moveTolerance_ ||\n Math.abs(pointerEvent.clientY - this.down_.clientY) > this.moveTolerance_);\n };\n /**\n * Clean up.\n */\n MapBrowserEventHandler.prototype.disposeInternal = function () {\n if (this.relayedListenerKey_) {\n unlistenByKey(this.relayedListenerKey_);\n this.relayedListenerKey_ = null;\n }\n this.element_.removeEventListener(EventType.TOUCHMOVE, this.boundHandleTouchMove_);\n if (this.pointerdownListenerKey_) {\n unlistenByKey(this.pointerdownListenerKey_);\n this.pointerdownListenerKey_ = null;\n }\n this.dragListenerKeys_.forEach(unlistenByKey);\n this.dragListenerKeys_.length = 0;\n this.element_ = null;\n _super.prototype.disposeInternal.call(this);\n };\n return MapBrowserEventHandler;\n}(Target));\nexport default MapBrowserEventHandler;\n//# sourceMappingURL=MapBrowserEventHandler.js.map","/**\n * @module ol/MapProperty\n */\n/**\n * @enum {string}\n */\nexport default {\n LAYERGROUP: 'layergroup',\n SIZE: 'size',\n TARGET: 'target',\n VIEW: 'view',\n};\n//# sourceMappingURL=MapProperty.js.map","/**\n * @module ol/structs/PriorityQueue\n */\nimport { assert } from '../asserts.js';\nimport { clear } from '../obj.js';\n/**\n * @type {number}\n */\nexport var DROP = Infinity;\n/**\n * @classdesc\n * Priority queue.\n *\n * The implementation is inspired from the Closure Library's Heap class and\n * Python's heapq module.\n *\n * See https://github.com/google/closure-library/blob/master/closure/goog/structs/heap.js\n * and https://hg.python.org/cpython/file/2.7/Lib/heapq.py.\n *\n * @template T\n */\nvar PriorityQueue = /** @class */ (function () {\n /**\n * @param {function(T): number} priorityFunction Priority function.\n * @param {function(T): string} keyFunction Key function.\n */\n function PriorityQueue(priorityFunction, keyFunction) {\n /**\n * @type {function(T): number}\n * @private\n */\n this.priorityFunction_ = priorityFunction;\n /**\n * @type {function(T): string}\n * @private\n */\n this.keyFunction_ = keyFunction;\n /**\n * @type {Array}\n * @private\n */\n this.elements_ = [];\n /**\n * @type {Array}\n * @private\n */\n this.priorities_ = [];\n /**\n * @type {!Object}\n * @private\n */\n this.queuedElements_ = {};\n }\n /**\n * FIXME empty description for jsdoc\n */\n PriorityQueue.prototype.clear = function () {\n this.elements_.length = 0;\n this.priorities_.length = 0;\n clear(this.queuedElements_);\n };\n /**\n * Remove and return the highest-priority element. O(log N).\n * @return {T} Element.\n */\n PriorityQueue.prototype.dequeue = function () {\n var elements = this.elements_;\n var priorities = this.priorities_;\n var element = elements[0];\n if (elements.length == 1) {\n elements.length = 0;\n priorities.length = 0;\n }\n else {\n elements[0] = elements.pop();\n priorities[0] = priorities.pop();\n this.siftUp_(0);\n }\n var elementKey = this.keyFunction_(element);\n delete this.queuedElements_[elementKey];\n return element;\n };\n /**\n * Enqueue an element. O(log N).\n * @param {T} element Element.\n * @return {boolean} The element was added to the queue.\n */\n PriorityQueue.prototype.enqueue = function (element) {\n assert(!(this.keyFunction_(element) in this.queuedElements_), 31); // Tried to enqueue an `element` that was already added to the queue\n var priority = this.priorityFunction_(element);\n if (priority != DROP) {\n this.elements_.push(element);\n this.priorities_.push(priority);\n this.queuedElements_[this.keyFunction_(element)] = true;\n this.siftDown_(0, this.elements_.length - 1);\n return true;\n }\n return false;\n };\n /**\n * @return {number} Count.\n */\n PriorityQueue.prototype.getCount = function () {\n return this.elements_.length;\n };\n /**\n * Gets the index of the left child of the node at the given index.\n * @param {number} index The index of the node to get the left child for.\n * @return {number} The index of the left child.\n * @private\n */\n PriorityQueue.prototype.getLeftChildIndex_ = function (index) {\n return index * 2 + 1;\n };\n /**\n * Gets the index of the right child of the node at the given index.\n * @param {number} index The index of the node to get the right child for.\n * @return {number} The index of the right child.\n * @private\n */\n PriorityQueue.prototype.getRightChildIndex_ = function (index) {\n return index * 2 + 2;\n };\n /**\n * Gets the index of the parent of the node at the given index.\n * @param {number} index The index of the node to get the parent for.\n * @return {number} The index of the parent.\n * @private\n */\n PriorityQueue.prototype.getParentIndex_ = function (index) {\n return (index - 1) >> 1;\n };\n /**\n * Make this a heap. O(N).\n * @private\n */\n PriorityQueue.prototype.heapify_ = function () {\n var i;\n for (i = (this.elements_.length >> 1) - 1; i >= 0; i--) {\n this.siftUp_(i);\n }\n };\n /**\n * @return {boolean} Is empty.\n */\n PriorityQueue.prototype.isEmpty = function () {\n return this.elements_.length === 0;\n };\n /**\n * @param {string} key Key.\n * @return {boolean} Is key queued.\n */\n PriorityQueue.prototype.isKeyQueued = function (key) {\n return key in this.queuedElements_;\n };\n /**\n * @param {T} element Element.\n * @return {boolean} Is queued.\n */\n PriorityQueue.prototype.isQueued = function (element) {\n return this.isKeyQueued(this.keyFunction_(element));\n };\n /**\n * @param {number} index The index of the node to move down.\n * @private\n */\n PriorityQueue.prototype.siftUp_ = function (index) {\n var elements = this.elements_;\n var priorities = this.priorities_;\n var count = elements.length;\n var element = elements[index];\n var priority = priorities[index];\n var startIndex = index;\n while (index < count >> 1) {\n var lIndex = this.getLeftChildIndex_(index);\n var rIndex = this.getRightChildIndex_(index);\n var smallerChildIndex = rIndex < count && priorities[rIndex] < priorities[lIndex]\n ? rIndex\n : lIndex;\n elements[index] = elements[smallerChildIndex];\n priorities[index] = priorities[smallerChildIndex];\n index = smallerChildIndex;\n }\n elements[index] = element;\n priorities[index] = priority;\n this.siftDown_(startIndex, index);\n };\n /**\n * @param {number} startIndex The index of the root.\n * @param {number} index The index of the node to move up.\n * @private\n */\n PriorityQueue.prototype.siftDown_ = function (startIndex, index) {\n var elements = this.elements_;\n var priorities = this.priorities_;\n var element = elements[index];\n var priority = priorities[index];\n while (index > startIndex) {\n var parentIndex = this.getParentIndex_(index);\n if (priorities[parentIndex] > priority) {\n elements[index] = elements[parentIndex];\n priorities[index] = priorities[parentIndex];\n index = parentIndex;\n }\n else {\n break;\n }\n }\n elements[index] = element;\n priorities[index] = priority;\n };\n /**\n * FIXME empty description for jsdoc\n */\n PriorityQueue.prototype.reprioritize = function () {\n var priorityFunction = this.priorityFunction_;\n var elements = this.elements_;\n var priorities = this.priorities_;\n var index = 0;\n var n = elements.length;\n var element, i, priority;\n for (i = 0; i < n; ++i) {\n element = elements[i];\n priority = priorityFunction(element);\n if (priority == DROP) {\n delete this.queuedElements_[this.keyFunction_(element)];\n }\n else {\n priorities[index] = priority;\n elements[index++] = element;\n }\n }\n elements.length = index;\n priorities.length = index;\n this.heapify_();\n };\n return PriorityQueue;\n}());\nexport default PriorityQueue;\n//# sourceMappingURL=PriorityQueue.js.map","var __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n if (typeof b !== \"function\" && b !== null)\n throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\n/**\n * @module ol/TileQueue\n */\nimport EventType from './events/EventType.js';\nimport PriorityQueue, { DROP } from './structs/PriorityQueue.js';\nimport TileState from './TileState.js';\n/**\n * @typedef {function(import(\"./Tile.js\").default, string, import(\"./coordinate.js\").Coordinate, number): number} PriorityFunction\n */\nvar TileQueue = /** @class */ (function (_super) {\n __extends(TileQueue, _super);\n /**\n * @param {PriorityFunction} tilePriorityFunction Tile priority function.\n * @param {function(): ?} tileChangeCallback Function called on each tile change event.\n */\n function TileQueue(tilePriorityFunction, tileChangeCallback) {\n var _this = _super.call(this, \n /**\n * @param {Array} element Element.\n * @return {number} Priority.\n */\n function (element) {\n return tilePriorityFunction.apply(null, element);\n }, \n /**\n * @param {Array} element Element.\n * @return {string} Key.\n */\n function (element) {\n return /** @type {import(\"./Tile.js\").default} */ (element[0]).getKey();\n }) || this;\n /** @private */\n _this.boundHandleTileChange_ = _this.handleTileChange.bind(_this);\n /**\n * @private\n * @type {function(): ?}\n */\n _this.tileChangeCallback_ = tileChangeCallback;\n /**\n * @private\n * @type {number}\n */\n _this.tilesLoading_ = 0;\n /**\n * @private\n * @type {!Object}\n */\n _this.tilesLoadingKeys_ = {};\n return _this;\n }\n /**\n * @param {Array} element Element.\n * @return {boolean} The element was added to the queue.\n */\n TileQueue.prototype.enqueue = function (element) {\n var added = _super.prototype.enqueue.call(this, element);\n if (added) {\n var tile = element[0];\n tile.addEventListener(EventType.CHANGE, this.boundHandleTileChange_);\n }\n return added;\n };\n /**\n * @return {number} Number of tiles loading.\n */\n TileQueue.prototype.getTilesLoading = function () {\n return this.tilesLoading_;\n };\n /**\n * @param {import(\"./events/Event.js\").default} event Event.\n * @protected\n */\n TileQueue.prototype.handleTileChange = function (event) {\n var tile = /** @type {import(\"./Tile.js\").default} */ (event.target);\n var state = tile.getState();\n if (state === TileState.LOADED ||\n state === TileState.ERROR ||\n state === TileState.EMPTY) {\n tile.removeEventListener(EventType.CHANGE, this.boundHandleTileChange_);\n var tileKey = tile.getKey();\n if (tileKey in this.tilesLoadingKeys_) {\n delete this.tilesLoadingKeys_[tileKey];\n --this.tilesLoading_;\n }\n this.tileChangeCallback_();\n }\n };\n /**\n * @param {number} maxTotalLoading Maximum number tiles to load simultaneously.\n * @param {number} maxNewLoads Maximum number of new tiles to load.\n */\n TileQueue.prototype.loadMoreTiles = function (maxTotalLoading, maxNewLoads) {\n var newLoads = 0;\n var state, tile, tileKey;\n while (this.tilesLoading_ < maxTotalLoading &&\n newLoads < maxNewLoads &&\n this.getCount() > 0) {\n tile = /** @type {import(\"./Tile.js\").default} */ (this.dequeue()[0]);\n tileKey = tile.getKey();\n state = tile.getState();\n if (state === TileState.IDLE && !(tileKey in this.tilesLoadingKeys_)) {\n this.tilesLoadingKeys_[tileKey] = true;\n ++this.tilesLoading_;\n ++newLoads;\n tile.load();\n }\n }\n };\n return TileQueue;\n}(PriorityQueue));\nexport default TileQueue;\n/**\n * @param {import('./PluggableMap.js').FrameState} frameState Frame state.\n * @param {import(\"./Tile.js\").default} tile Tile.\n * @param {string} tileSourceKey Tile source key.\n * @param {import(\"./coordinate.js\").Coordinate} tileCenter Tile center.\n * @param {number} tileResolution Tile resolution.\n * @return {number} Tile priority.\n */\nexport function getTilePriority(frameState, tile, tileSourceKey, tileCenter, tileResolution) {\n // Filter out tiles at higher zoom levels than the current zoom level, or that\n // are outside the visible extent.\n if (!frameState || !(tileSourceKey in frameState.wantedTiles)) {\n return DROP;\n }\n if (!frameState.wantedTiles[tileSourceKey][tile.getKey()]) {\n return DROP;\n }\n // Prioritize the highest zoom level tiles closest to the focus.\n // Tiles at higher zoom levels are prioritized using Math.log(tileResolution).\n // Within a zoom level, tiles are prioritized by the distance in pixels between\n // the center of the tile and the center of the viewport. The factor of 65536\n // means that the prioritization should behave as desired for tiles up to\n // 65536 * Math.log(2) = 45426 pixels from the focus.\n var center = frameState.viewState.center;\n var deltaX = tileCenter[0] - center[0];\n var deltaY = tileCenter[1] - center[1];\n return (65536 * Math.log(tileResolution) +\n Math.sqrt(deltaX * deltaX + deltaY * deltaY) / tileResolution);\n}\n//# sourceMappingURL=TileQueue.js.map","var __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n if (typeof b !== \"function\" && b !== null)\n throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\n/**\n * @module ol/PluggableMap\n */\nimport BaseObject from './Object.js';\nimport Collection from './Collection.js';\nimport CollectionEventType from './CollectionEventType.js';\nimport EventType from './events/EventType.js';\nimport LayerGroup from './layer/Group.js';\nimport MapBrowserEvent from './MapBrowserEvent.js';\nimport MapBrowserEventHandler from './MapBrowserEventHandler.js';\nimport MapBrowserEventType from './MapBrowserEventType.js';\nimport MapEvent from './MapEvent.js';\nimport MapEventType from './MapEventType.js';\nimport MapProperty from './MapProperty.js';\nimport ObjectEventType from './ObjectEventType.js';\nimport PointerEventType from './pointer/EventType.js';\nimport RenderEventType from './render/EventType.js';\nimport TileQueue, { getTilePriority } from './TileQueue.js';\nimport View from './View.js';\nimport ViewHint from './ViewHint.js';\nimport { DEVICE_PIXEL_RATIO, PASSIVE_EVENT_LISTENERS } from './has.js';\nimport { TRUE } from './functions.js';\nimport { apply as applyTransform, create as createTransform, } from './transform.js';\nimport { assert } from './asserts.js';\nimport { clone, createOrUpdateEmpty, equals, getForViewAndSize, isEmpty, } from './extent.js';\nimport { fromUserCoordinate, toUserCoordinate } from './proj.js';\nimport { hasArea } from './size.js';\nimport { listen, unlistenByKey } from './events.js';\nimport { removeNode } from './dom.js';\n/**\n * State of the current frame. Only `pixelRatio`, `time` and `viewState` should\n * be used in applications.\n * @typedef {Object} FrameState\n * @property {number} pixelRatio The pixel ratio of the frame.\n * @property {number} time The time when rendering of the frame was requested.\n * @property {import(\"./View.js\").State} viewState The state of the current view.\n * @property {boolean} animate Animate.\n * @property {import(\"./transform.js\").Transform} coordinateToPixelTransform CoordinateToPixelTransform.\n * @property {import(\"rbush\").default} declutterTree DeclutterTree.\n * @property {null|import(\"./extent.js\").Extent} extent Extent.\n * @property {import(\"./extent.js\").Extent} [nextExtent] Next extent during an animation series.\n * @property {number} index Index.\n * @property {Array} layerStatesArray LayerStatesArray.\n * @property {number} layerIndex LayerIndex.\n * @property {import(\"./transform.js\").Transform} pixelToCoordinateTransform PixelToCoordinateTransform.\n * @property {Array} postRenderFunctions PostRenderFunctions.\n * @property {import(\"./size.js\").Size} size Size.\n * @property {TileQueue} tileQueue TileQueue.\n * @property {!Object>} usedTiles UsedTiles.\n * @property {Array} viewHints ViewHints.\n * @property {!Object>} wantedTiles WantedTiles.\n */\n/**\n * @typedef {function(PluggableMap, ?FrameState): any} PostRenderFunction\n */\n/**\n * @typedef {Object} AtPixelOptions\n * @property {undefined|function(import(\"./layer/Layer.js\").default): boolean} [layerFilter] Layer filter\n * function. The filter function will receive one argument, the\n * {@link module:ol/layer/Layer layer-candidate} and it should return a boolean value.\n * Only layers which are visible and for which this function returns `true`\n * will be tested for features. By default, all visible layers will be tested.\n * @property {number} [hitTolerance=0] Hit-detection tolerance in css pixels. Pixels\n * inside the radius around the given position will be checked for features.\n * @property {boolean} [checkWrapped=true] Check-Wrapped Will check for for wrapped geometries inside the range of\n * +/- 1 world width. Works only if a projection is used that can be wrapped.\n */\n/**\n * @typedef {Object} MapOptionsInternal\n * @property {Collection} [controls] Controls.\n * @property {Collection} [interactions] Interactions.\n * @property {HTMLElement|Document} keyboardEventTarget KeyboardEventTarget.\n * @property {Collection} overlays Overlays.\n * @property {Object} values Values.\n */\n/**\n * @typedef {import(\"./ObjectEventType\").Types|'change:layergroup'|'change:size'|'change:target'|'change:view'} MapObjectEventTypes\n */\n/***\n * @template Return\n * @typedef {import(\"./Observable\").OnSignature &\n * import(\"./Observable\").OnSignature &\n * import(\"./Observable\").OnSignature &\n * import(\"./Observable\").OnSignature &\n * import(\"./Observable\").OnSignature &\n * import(\"./Observable\").CombinedOnSignature} PluggableMapOnSignature\n */\n/**\n * Object literal with config options for the map.\n * @typedef {Object} MapOptions\n * @property {Collection|Array} [controls]\n * Controls initially added to the map. If not specified,\n * {@link module:ol/control.defaults} is used.\n * @property {number} [pixelRatio=window.devicePixelRatio] The ratio between\n * physical pixels and device-independent pixels (dips) on the device.\n * @property {Collection|Array} [interactions]\n * Interactions that are initially added to the map. If not specified,\n * {@link module:ol/interaction.defaults} is used.\n * @property {HTMLElement|Document|string} [keyboardEventTarget] The element to\n * listen to keyboard events on. This determines when the `KeyboardPan` and\n * `KeyboardZoom` interactions trigger. For example, if this option is set to\n * `document` the keyboard interactions will always trigger. If this option is\n * not specified, the element the library listens to keyboard events on is the\n * map target (i.e. the user-provided div for the map). If this is not\n * `document`, the target element needs to be focused for key events to be\n * emitted, requiring that the target element has a `tabindex` attribute.\n * @property {Array|Collection|LayerGroup} [layers]\n * Layers. If this is not defined, a map with no layers will be rendered. Note\n * that layers are rendered in the order supplied, so if you want, for example,\n * a vector layer to appear on top of a tile layer, it must come after the tile\n * layer.\n * @property {number} [maxTilesLoading=16] Maximum number tiles to load\n * simultaneously.\n * @property {number} [moveTolerance=1] The minimum distance in pixels the\n * cursor must move to be detected as a map move event instead of a click.\n * Increasing this value can make it easier to click on the map.\n * @property {Collection|Array} [overlays]\n * Overlays initially added to the map. By default, no overlays are added.\n * @property {HTMLElement|string} [target] The container for the map, either the\n * element itself or the `id` of the element. If not specified at construction\n * time, {@link module:ol/Map~Map#setTarget} must be called for the map to be\n * rendered. If passed by element, the container can be in a secondary document.\n * @property {View|Promise} [view] The map's view. No layer sources will be\n * fetched unless this is specified at construction time or through\n * {@link module:ol/Map~Map#setView}.\n */\n/**\n * @fires import(\"./MapBrowserEvent.js\").MapBrowserEvent\n * @fires import(\"./MapEvent.js\").MapEvent\n * @fires import(\"./render/Event.js\").default#precompose\n * @fires import(\"./render/Event.js\").default#postcompose\n * @fires import(\"./render/Event.js\").default#rendercomplete\n * @api\n */\nvar PluggableMap = /** @class */ (function (_super) {\n __extends(PluggableMap, _super);\n /**\n * @param {MapOptions} options Map options.\n */\n function PluggableMap(options) {\n var _this = _super.call(this) || this;\n /***\n * @type {PluggableMapOnSignature}\n */\n _this.on;\n /***\n * @type {PluggableMapOnSignature}\n */\n _this.once;\n /***\n * @type {PluggableMapOnSignature}\n */\n _this.un;\n var optionsInternal = createOptionsInternal(options);\n /** @private */\n _this.boundHandleBrowserEvent_ = _this.handleBrowserEvent.bind(_this);\n /**\n * @type {number}\n * @private\n */\n _this.maxTilesLoading_ =\n options.maxTilesLoading !== undefined ? options.maxTilesLoading : 16;\n /**\n * @private\n * @type {number}\n */\n _this.pixelRatio_ =\n options.pixelRatio !== undefined\n ? options.pixelRatio\n : DEVICE_PIXEL_RATIO;\n /**\n * @private\n * @type {*}\n */\n _this.postRenderTimeoutHandle_;\n /**\n * @private\n * @type {number|undefined}\n */\n _this.animationDelayKey_;\n /**\n * @private\n */\n _this.animationDelay_ = /** @this {PluggableMap} */ function () {\n this.animationDelayKey_ = undefined;\n this.renderFrame_(Date.now());\n }.bind(_this);\n /**\n * @private\n * @type {import(\"./transform.js\").Transform}\n */\n _this.coordinateToPixelTransform_ = createTransform();\n /**\n * @private\n * @type {import(\"./transform.js\").Transform}\n */\n _this.pixelToCoordinateTransform_ = createTransform();\n /**\n * @private\n * @type {number}\n */\n _this.frameIndex_ = 0;\n /**\n * @private\n * @type {?FrameState}\n */\n _this.frameState_ = null;\n /**\n * The extent at the previous 'moveend' event.\n * @private\n * @type {import(\"./extent.js\").Extent}\n */\n _this.previousExtent_ = null;\n /**\n * @private\n * @type {?import(\"./events.js\").EventsKey}\n */\n _this.viewPropertyListenerKey_ = null;\n /**\n * @private\n * @type {?import(\"./events.js\").EventsKey}\n */\n _this.viewChangeListenerKey_ = null;\n /**\n * @private\n * @type {?Array}\n */\n _this.layerGroupPropertyListenerKeys_ = null;\n /**\n * @private\n * @type {!HTMLElement}\n */\n _this.viewport_ = document.createElement('div');\n _this.viewport_.className =\n 'ol-viewport' + ('ontouchstart' in window ? ' ol-touch' : '');\n _this.viewport_.style.position = 'relative';\n _this.viewport_.style.overflow = 'hidden';\n _this.viewport_.style.width = '100%';\n _this.viewport_.style.height = '100%';\n /**\n * @private\n * @type {!HTMLElement}\n */\n _this.overlayContainer_ = document.createElement('div');\n _this.overlayContainer_.style.position = 'absolute';\n _this.overlayContainer_.style.zIndex = '0';\n _this.overlayContainer_.style.width = '100%';\n _this.overlayContainer_.style.height = '100%';\n _this.overlayContainer_.style.pointerEvents = 'none';\n _this.overlayContainer_.className = 'ol-overlaycontainer';\n _this.viewport_.appendChild(_this.overlayContainer_);\n /**\n * @private\n * @type {!HTMLElement}\n */\n _this.overlayContainerStopEvent_ = document.createElement('div');\n _this.overlayContainerStopEvent_.style.position = 'absolute';\n _this.overlayContainerStopEvent_.style.zIndex = '0';\n _this.overlayContainerStopEvent_.style.width = '100%';\n _this.overlayContainerStopEvent_.style.height = '100%';\n _this.overlayContainerStopEvent_.style.pointerEvents = 'none';\n _this.overlayContainerStopEvent_.className = 'ol-overlaycontainer-stopevent';\n _this.viewport_.appendChild(_this.overlayContainerStopEvent_);\n /**\n * @private\n * @type {MapBrowserEventHandler}\n */\n _this.mapBrowserEventHandler_ = null;\n /**\n * @private\n * @type {number}\n */\n _this.moveTolerance_ = options.moveTolerance;\n /**\n * @private\n * @type {HTMLElement|Document}\n */\n _this.keyboardEventTarget_ = optionsInternal.keyboardEventTarget;\n /**\n * @private\n * @type {?Array}\n */\n _this.keyHandlerKeys_ = null;\n /**\n * @type {Collection}\n * @protected\n */\n _this.controls = optionsInternal.controls || new Collection();\n /**\n * @type {Collection}\n * @protected\n */\n _this.interactions = optionsInternal.interactions || new Collection();\n /**\n * @type {Collection}\n * @private\n */\n _this.overlays_ = optionsInternal.overlays;\n /**\n * A lookup of overlays by id.\n * @private\n * @type {Object}\n */\n _this.overlayIdIndex_ = {};\n /**\n * @type {import(\"./renderer/Map.js\").default}\n * @private\n */\n _this.renderer_ = null;\n /**\n * @type {undefined|function(Event): void}\n * @private\n */\n _this.handleResize_;\n /**\n * @private\n * @type {!Array}\n */\n _this.postRenderFunctions_ = [];\n /**\n * @private\n * @type {TileQueue}\n */\n _this.tileQueue_ = new TileQueue(_this.getTilePriority.bind(_this), _this.handleTileChange_.bind(_this));\n _this.addChangeListener(MapProperty.LAYERGROUP, _this.handleLayerGroupChanged_);\n _this.addChangeListener(MapProperty.VIEW, _this.handleViewChanged_);\n _this.addChangeListener(MapProperty.SIZE, _this.handleSizeChanged_);\n _this.addChangeListener(MapProperty.TARGET, _this.handleTargetChanged_);\n // setProperties will trigger the rendering of the map if the map\n // is \"defined\" already.\n _this.setProperties(optionsInternal.values);\n var map = _this;\n if (options.view && !(options.view instanceof View)) {\n options.view.then(function (viewOptions) {\n map.setView(new View(viewOptions));\n });\n }\n _this.controls.addEventListener(CollectionEventType.ADD, \n /**\n * @param {import(\"./Collection.js\").CollectionEvent} event CollectionEvent.\n */\n function (event) {\n event.element.setMap(this);\n }.bind(_this));\n _this.controls.addEventListener(CollectionEventType.REMOVE, \n /**\n * @param {import(\"./Collection.js\").CollectionEvent} event CollectionEvent.\n */\n function (event) {\n event.element.setMap(null);\n }.bind(_this));\n _this.interactions.addEventListener(CollectionEventType.ADD, \n /**\n * @param {import(\"./Collection.js\").CollectionEvent} event CollectionEvent.\n */\n function (event) {\n event.element.setMap(this);\n }.bind(_this));\n _this.interactions.addEventListener(CollectionEventType.REMOVE, \n /**\n * @param {import(\"./Collection.js\").CollectionEvent} event CollectionEvent.\n */\n function (event) {\n event.element.setMap(null);\n }.bind(_this));\n _this.overlays_.addEventListener(CollectionEventType.ADD, \n /**\n * @param {import(\"./Collection.js\").CollectionEvent} event CollectionEvent.\n */\n function (event) {\n this.addOverlayInternal_(\n /** @type {import(\"./Overlay.js\").default} */ (event.element));\n }.bind(_this));\n _this.overlays_.addEventListener(CollectionEventType.REMOVE, \n /**\n * @param {import(\"./Collection.js\").CollectionEvent} event CollectionEvent.\n */\n function (event) {\n var overlay = /** @type {import(\"./Overlay.js\").default} */ (event.element);\n var id = overlay.getId();\n if (id !== undefined) {\n delete this.overlayIdIndex_[id.toString()];\n }\n event.element.setMap(null);\n }.bind(_this));\n _this.controls.forEach(\n /**\n * @param {import(\"./control/Control.js\").default} control Control.\n * @this {PluggableMap}\n */\n function (control) {\n control.setMap(this);\n }.bind(_this));\n _this.interactions.forEach(\n /**\n * @param {import(\"./interaction/Interaction.js\").default} interaction Interaction.\n * @this {PluggableMap}\n */\n function (interaction) {\n interaction.setMap(this);\n }.bind(_this));\n _this.overlays_.forEach(_this.addOverlayInternal_.bind(_this));\n return _this;\n }\n /**\n * @abstract\n * @return {import(\"./renderer/Map.js\").default} The map renderer\n */\n PluggableMap.prototype.createRenderer = function () {\n throw new Error('Use a map type that has a createRenderer method');\n };\n /**\n * Add the given control to the map.\n * @param {import(\"./control/Control.js\").default} control Control.\n * @api\n */\n PluggableMap.prototype.addControl = function (control) {\n this.getControls().push(control);\n };\n /**\n * Add the given interaction to the map. If you want to add an interaction\n * at another point of the collection use `getInteraction()` and the methods\n * available on {@link module:ol/Collection~Collection}. This can be used to\n * stop the event propagation from the handleEvent function. The interactions\n * get to handle the events in the reverse order of this collection.\n * @param {import(\"./interaction/Interaction.js\").default} interaction Interaction to add.\n * @api\n */\n PluggableMap.prototype.addInteraction = function (interaction) {\n this.getInteractions().push(interaction);\n };\n /**\n * Adds the given layer to the top of this map. If you want to add a layer\n * elsewhere in the stack, use `getLayers()` and the methods available on\n * {@link module:ol/Collection~Collection}.\n * @param {import(\"./layer/Base.js\").default} layer Layer.\n * @api\n */\n PluggableMap.prototype.addLayer = function (layer) {\n var layers = this.getLayerGroup().getLayers();\n layers.push(layer);\n };\n /**\n * Add the given overlay to the map.\n * @param {import(\"./Overlay.js\").default} overlay Overlay.\n * @api\n */\n PluggableMap.prototype.addOverlay = function (overlay) {\n this.getOverlays().push(overlay);\n };\n /**\n * This deals with map's overlay collection changes.\n * @param {import(\"./Overlay.js\").default} overlay Overlay.\n * @private\n */\n PluggableMap.prototype.addOverlayInternal_ = function (overlay) {\n var id = overlay.getId();\n if (id !== undefined) {\n this.overlayIdIndex_[id.toString()] = overlay;\n }\n overlay.setMap(this);\n };\n /**\n *\n * Clean up.\n */\n PluggableMap.prototype.disposeInternal = function () {\n this.setTarget(null);\n _super.prototype.disposeInternal.call(this);\n };\n /**\n * Detect features that intersect a pixel on the viewport, and execute a\n * callback with each intersecting feature. Layers included in the detection can\n * be configured through the `layerFilter` option in `opt_options`.\n * @param {import(\"./pixel.js\").Pixel} pixel Pixel.\n * @param {function(import(\"./Feature.js\").FeatureLike, import(\"./layer/Layer.js\").default, import(\"./geom/SimpleGeometry.js\").default): T} callback Feature callback. The callback will be\n * called with two arguments. The first argument is one\n * {@link module:ol/Feature feature} or\n * {@link module:ol/render/Feature render feature} at the pixel, the second is\n * the {@link module:ol/layer/Layer layer} of the feature and will be null for\n * unmanaged layers. To stop detection, callback functions can return a\n * truthy value.\n * @param {AtPixelOptions} [opt_options] Optional options.\n * @return {T|undefined} Callback result, i.e. the return value of last\n * callback execution, or the first truthy callback return value.\n * @template T\n * @api\n */\n PluggableMap.prototype.forEachFeatureAtPixel = function (pixel, callback, opt_options) {\n if (!this.frameState_) {\n return;\n }\n var coordinate = this.getCoordinateFromPixelInternal(pixel);\n opt_options = opt_options !== undefined ? opt_options : {};\n var hitTolerance = opt_options.hitTolerance !== undefined ? opt_options.hitTolerance : 0;\n var layerFilter = opt_options.layerFilter !== undefined ? opt_options.layerFilter : TRUE;\n var checkWrapped = opt_options.checkWrapped !== false;\n return this.renderer_.forEachFeatureAtCoordinate(coordinate, this.frameState_, hitTolerance, checkWrapped, callback, null, layerFilter, null);\n };\n /**\n * Get all features that intersect a pixel on the viewport.\n * @param {import(\"./pixel.js\").Pixel} pixel Pixel.\n * @param {AtPixelOptions} [opt_options] Optional options.\n * @return {Array} The detected features or\n * an empty array if none were found.\n * @api\n */\n PluggableMap.prototype.getFeaturesAtPixel = function (pixel, opt_options) {\n var features = [];\n this.forEachFeatureAtPixel(pixel, function (feature) {\n features.push(feature);\n }, opt_options);\n return features;\n };\n /**\n * Detect layers that have a color value at a pixel on the viewport, and\n * execute a callback with each matching layer. Layers included in the\n * detection can be configured through `opt_layerFilter`.\n *\n * Note: this may give false positives unless the map layers have had different `className`\n * properties assigned to them.\n *\n * @param {import(\"./pixel.js\").Pixel} pixel Pixel.\n * @param {function(this: S, import(\"./layer/Layer.js\").default, (Uint8ClampedArray|Uint8Array)): T} callback\n * Layer callback. This callback will receive two arguments: first is the\n * {@link module:ol/layer/Layer layer}, second argument is an array representing\n * [R, G, B, A] pixel values (0 - 255) and will be `null` for layer types\n * that do not currently support this argument. To stop detection, callback\n * functions can return a truthy value.\n * @param {AtPixelOptions} [opt_options] Configuration options.\n * @return {T|undefined} Callback result, i.e. the return value of last\n * callback execution, or the first truthy callback return value.\n * @template S,T\n * @api\n */\n PluggableMap.prototype.forEachLayerAtPixel = function (pixel, callback, opt_options) {\n if (!this.frameState_) {\n return;\n }\n var options = opt_options || {};\n var hitTolerance = options.hitTolerance !== undefined ? options.hitTolerance : 0;\n var layerFilter = options.layerFilter || TRUE;\n return this.renderer_.forEachLayerAtPixel(pixel, this.frameState_, hitTolerance, callback, layerFilter);\n };\n /**\n * Detect if features intersect a pixel on the viewport. Layers included in the\n * detection can be configured through `opt_layerFilter`.\n * @param {import(\"./pixel.js\").Pixel} pixel Pixel.\n * @param {AtPixelOptions} [opt_options] Optional options.\n * @return {boolean} Is there a feature at the given pixel?\n * @api\n */\n PluggableMap.prototype.hasFeatureAtPixel = function (pixel, opt_options) {\n if (!this.frameState_) {\n return false;\n }\n var coordinate = this.getCoordinateFromPixelInternal(pixel);\n opt_options = opt_options !== undefined ? opt_options : {};\n var layerFilter = opt_options.layerFilter !== undefined ? opt_options.layerFilter : TRUE;\n var hitTolerance = opt_options.hitTolerance !== undefined ? opt_options.hitTolerance : 0;\n var checkWrapped = opt_options.checkWrapped !== false;\n return this.renderer_.hasFeatureAtCoordinate(coordinate, this.frameState_, hitTolerance, checkWrapped, layerFilter, null);\n };\n /**\n * Returns the coordinate in user projection for a browser event.\n * @param {MouseEvent} event Event.\n * @return {import(\"./coordinate.js\").Coordinate} Coordinate.\n * @api\n */\n PluggableMap.prototype.getEventCoordinate = function (event) {\n return this.getCoordinateFromPixel(this.getEventPixel(event));\n };\n /**\n * Returns the coordinate in view projection for a browser event.\n * @param {MouseEvent} event Event.\n * @return {import(\"./coordinate.js\").Coordinate} Coordinate.\n */\n PluggableMap.prototype.getEventCoordinateInternal = function (event) {\n return this.getCoordinateFromPixelInternal(this.getEventPixel(event));\n };\n /**\n * Returns the map pixel position for a browser event relative to the viewport.\n * @param {UIEvent} event Event.\n * @return {import(\"./pixel.js\").Pixel} Pixel.\n * @api\n */\n PluggableMap.prototype.getEventPixel = function (event) {\n var viewportPosition = this.viewport_.getBoundingClientRect();\n var eventPosition = \n //FIXME Are we really calling this with a TouchEvent anywhere?\n 'changedTouches' in event\n ? /** @type {TouchEvent} */ (event).changedTouches[0]\n : /** @type {MouseEvent} */ (event);\n return [\n eventPosition.clientX - viewportPosition.left,\n eventPosition.clientY - viewportPosition.top,\n ];\n };\n /**\n * Get the target in which this map is rendered.\n * Note that this returns what is entered as an option or in setTarget:\n * if that was an element, it returns an element; if a string, it returns that.\n * @return {HTMLElement|string|undefined} The Element or id of the Element that the\n * map is rendered in.\n * @observable\n * @api\n */\n PluggableMap.prototype.getTarget = function () {\n return /** @type {HTMLElement|string|undefined} */ (this.get(MapProperty.TARGET));\n };\n /**\n * Get the DOM element into which this map is rendered. In contrast to\n * `getTarget` this method always return an `Element`, or `null` if the\n * map has no target.\n * @return {HTMLElement} The element that the map is rendered in.\n * @api\n */\n PluggableMap.prototype.getTargetElement = function () {\n var target = this.getTarget();\n if (target !== undefined) {\n return typeof target === 'string'\n ? document.getElementById(target)\n : target;\n }\n else {\n return null;\n }\n };\n /**\n * Get the coordinate for a given pixel. This returns a coordinate in the\n * user projection.\n * @param {import(\"./pixel.js\").Pixel} pixel Pixel position in the map viewport.\n * @return {import(\"./coordinate.js\").Coordinate} The coordinate for the pixel position.\n * @api\n */\n PluggableMap.prototype.getCoordinateFromPixel = function (pixel) {\n return toUserCoordinate(this.getCoordinateFromPixelInternal(pixel), this.getView().getProjection());\n };\n /**\n * Get the coordinate for a given pixel. This returns a coordinate in the\n * map view projection.\n * @param {import(\"./pixel.js\").Pixel} pixel Pixel position in the map viewport.\n * @return {import(\"./coordinate.js\").Coordinate} The coordinate for the pixel position.\n */\n PluggableMap.prototype.getCoordinateFromPixelInternal = function (pixel) {\n var frameState = this.frameState_;\n if (!frameState) {\n return null;\n }\n else {\n return applyTransform(frameState.pixelToCoordinateTransform, pixel.slice());\n }\n };\n /**\n * Get the map controls. Modifying this collection changes the controls\n * associated with the map.\n * @return {Collection} Controls.\n * @api\n */\n PluggableMap.prototype.getControls = function () {\n return this.controls;\n };\n /**\n * Get the map overlays. Modifying this collection changes the overlays\n * associated with the map.\n * @return {Collection} Overlays.\n * @api\n */\n PluggableMap.prototype.getOverlays = function () {\n return this.overlays_;\n };\n /**\n * Get an overlay by its identifier (the value returned by overlay.getId()).\n * Note that the index treats string and numeric identifiers as the same. So\n * `map.getOverlayById(2)` will return an overlay with id `'2'` or `2`.\n * @param {string|number} id Overlay identifier.\n * @return {import(\"./Overlay.js\").default} Overlay.\n * @api\n */\n PluggableMap.prototype.getOverlayById = function (id) {\n var overlay = this.overlayIdIndex_[id.toString()];\n return overlay !== undefined ? overlay : null;\n };\n /**\n * Get the map interactions. Modifying this collection changes the interactions\n * associated with the map.\n *\n * Interactions are used for e.g. pan, zoom and rotate.\n * @return {Collection} Interactions.\n * @api\n */\n PluggableMap.prototype.getInteractions = function () {\n return this.interactions;\n };\n /**\n * Get the layergroup associated with this map.\n * @return {LayerGroup} A layer group containing the layers in this map.\n * @observable\n * @api\n */\n PluggableMap.prototype.getLayerGroup = function () {\n return /** @type {LayerGroup} */ (this.get(MapProperty.LAYERGROUP));\n };\n /**\n * Clear any existing layers and add layers to the map.\n * @param {Array|Collection} layers The layers to be added to the map.\n * @api\n */\n PluggableMap.prototype.setLayers = function (layers) {\n var group = this.getLayerGroup();\n if (layers instanceof Collection) {\n group.setLayers(layers);\n return;\n }\n var collection = group.getLayers();\n collection.clear();\n collection.extend(layers);\n };\n /**\n * Get the collection of layers associated with this map.\n * @return {!Collection} Layers.\n * @api\n */\n PluggableMap.prototype.getLayers = function () {\n var layers = this.getLayerGroup().getLayers();\n return layers;\n };\n /**\n * @return {boolean} Layers have sources that are still loading.\n */\n PluggableMap.prototype.getLoading = function () {\n var layerStatesArray = this.getLayerGroup().getLayerStatesArray();\n for (var i = 0, ii = layerStatesArray.length; i < ii; ++i) {\n var layer = layerStatesArray[i].layer;\n var source = /** @type {import(\"./layer/Layer.js\").default} */ (layer).getSource();\n if (source && source.loading) {\n return true;\n }\n }\n return false;\n };\n /**\n * Get the pixel for a coordinate. This takes a coordinate in the user\n * projection and returns the corresponding pixel.\n * @param {import(\"./coordinate.js\").Coordinate} coordinate A map coordinate.\n * @return {import(\"./pixel.js\").Pixel} A pixel position in the map viewport.\n * @api\n */\n PluggableMap.prototype.getPixelFromCoordinate = function (coordinate) {\n var viewCoordinate = fromUserCoordinate(coordinate, this.getView().getProjection());\n return this.getPixelFromCoordinateInternal(viewCoordinate);\n };\n /**\n * Get the pixel for a coordinate. This takes a coordinate in the map view\n * projection and returns the corresponding pixel.\n * @param {import(\"./coordinate.js\").Coordinate} coordinate A map coordinate.\n * @return {import(\"./pixel.js\").Pixel} A pixel position in the map viewport.\n */\n PluggableMap.prototype.getPixelFromCoordinateInternal = function (coordinate) {\n var frameState = this.frameState_;\n if (!frameState) {\n return null;\n }\n else {\n return applyTransform(frameState.coordinateToPixelTransform, coordinate.slice(0, 2));\n }\n };\n /**\n * Get the map renderer.\n * @return {import(\"./renderer/Map.js\").default} Renderer\n */\n PluggableMap.prototype.getRenderer = function () {\n return this.renderer_;\n };\n /**\n * Get the size of this map.\n * @return {import(\"./size.js\").Size|undefined} The size in pixels of the map in the DOM.\n * @observable\n * @api\n */\n PluggableMap.prototype.getSize = function () {\n return /** @type {import(\"./size.js\").Size|undefined} */ (this.get(MapProperty.SIZE));\n };\n /**\n * Get the view associated with this map. A view manages properties such as\n * center and resolution.\n * @return {View} The view that controls this map.\n * @observable\n * @api\n */\n PluggableMap.prototype.getView = function () {\n return /** @type {View} */ (this.get(MapProperty.VIEW));\n };\n /**\n * Get the element that serves as the map viewport.\n * @return {HTMLElement} Viewport.\n * @api\n */\n PluggableMap.prototype.getViewport = function () {\n return this.viewport_;\n };\n /**\n * Get the element that serves as the container for overlays. Elements added to\n * this container will let mousedown and touchstart events through to the map,\n * so clicks and gestures on an overlay will trigger {@link module:ol/MapBrowserEvent~MapBrowserEvent}\n * events.\n * @return {!HTMLElement} The map's overlay container.\n */\n PluggableMap.prototype.getOverlayContainer = function () {\n return this.overlayContainer_;\n };\n /**\n * Get the element that serves as a container for overlays that don't allow\n * event propagation. Elements added to this container won't let mousedown and\n * touchstart events through to the map, so clicks and gestures on an overlay\n * don't trigger any {@link module:ol/MapBrowserEvent~MapBrowserEvent}.\n * @return {!HTMLElement} The map's overlay container that stops events.\n */\n PluggableMap.prototype.getOverlayContainerStopEvent = function () {\n return this.overlayContainerStopEvent_;\n };\n /**\n * @return {!Document} The document where the map is displayed.\n */\n PluggableMap.prototype.getOwnerDocument = function () {\n var targetElement = this.getTargetElement();\n return targetElement ? targetElement.ownerDocument : document;\n };\n /**\n * @param {import(\"./Tile.js\").default} tile Tile.\n * @param {string} tileSourceKey Tile source key.\n * @param {import(\"./coordinate.js\").Coordinate} tileCenter Tile center.\n * @param {number} tileResolution Tile resolution.\n * @return {number} Tile priority.\n */\n PluggableMap.prototype.getTilePriority = function (tile, tileSourceKey, tileCenter, tileResolution) {\n return getTilePriority(this.frameState_, tile, tileSourceKey, tileCenter, tileResolution);\n };\n /**\n * @param {UIEvent} browserEvent Browser event.\n * @param {string} [opt_type] Type.\n */\n PluggableMap.prototype.handleBrowserEvent = function (browserEvent, opt_type) {\n var type = opt_type || browserEvent.type;\n var mapBrowserEvent = new MapBrowserEvent(type, this, browserEvent);\n this.handleMapBrowserEvent(mapBrowserEvent);\n };\n /**\n * @param {MapBrowserEvent} mapBrowserEvent The event to handle.\n */\n PluggableMap.prototype.handleMapBrowserEvent = function (mapBrowserEvent) {\n if (!this.frameState_) {\n // With no view defined, we cannot translate pixels into geographical\n // coordinates so interactions cannot be used.\n return;\n }\n var originalEvent = /** @type {PointerEvent} */ (mapBrowserEvent.originalEvent);\n var eventType = originalEvent.type;\n if (eventType === PointerEventType.POINTERDOWN ||\n eventType === EventType.WHEEL ||\n eventType === EventType.KEYDOWN) {\n var doc = this.getOwnerDocument();\n var rootNode = this.viewport_.getRootNode\n ? this.viewport_.getRootNode()\n : doc;\n var target = /** @type {Node} */ (originalEvent.target);\n if (\n // Abort if the target is a child of the container for elements whose events are not meant\n // to be handled by map interactions.\n this.overlayContainerStopEvent_.contains(target) ||\n // Abort if the event target is a child of the container that is no longer in the page.\n // It's possible for the target to no longer be in the page if it has been removed in an\n // event listener, this might happen in a Control that recreates it's content based on\n // user interaction either manually or via a render in something like https://reactjs.org/\n !(rootNode === doc ? doc.documentElement : rootNode).contains(target)) {\n return;\n }\n }\n mapBrowserEvent.frameState = this.frameState_;\n if (this.dispatchEvent(mapBrowserEvent) !== false) {\n var interactionsArray = this.getInteractions().getArray().slice();\n for (var i = interactionsArray.length - 1; i >= 0; i--) {\n var interaction = interactionsArray[i];\n if (interaction.getMap() !== this ||\n !interaction.getActive() ||\n !this.getTargetElement()) {\n continue;\n }\n var cont = interaction.handleEvent(mapBrowserEvent);\n if (!cont || mapBrowserEvent.propagationStopped) {\n break;\n }\n }\n }\n };\n /**\n * @protected\n */\n PluggableMap.prototype.handlePostRender = function () {\n var frameState = this.frameState_;\n // Manage the tile queue\n // Image loads are expensive and a limited resource, so try to use them\n // efficiently:\n // * When the view is static we allow a large number of parallel tile loads\n // to complete the frame as quickly as possible.\n // * When animating or interacting, image loads can cause janks, so we reduce\n // the maximum number of loads per frame and limit the number of parallel\n // tile loads to remain reactive to view changes and to reduce the chance of\n // loading tiles that will quickly disappear from view.\n var tileQueue = this.tileQueue_;\n if (!tileQueue.isEmpty()) {\n var maxTotalLoading = this.maxTilesLoading_;\n var maxNewLoads = maxTotalLoading;\n if (frameState) {\n var hints = frameState.viewHints;\n if (hints[ViewHint.ANIMATING] || hints[ViewHint.INTERACTING]) {\n var lowOnFrameBudget = Date.now() - frameState.time > 8;\n maxTotalLoading = lowOnFrameBudget ? 0 : 8;\n maxNewLoads = lowOnFrameBudget ? 0 : 2;\n }\n }\n if (tileQueue.getTilesLoading() < maxTotalLoading) {\n tileQueue.reprioritize(); // FIXME only call if view has changed\n tileQueue.loadMoreTiles(maxTotalLoading, maxNewLoads);\n }\n }\n if (frameState &&\n this.hasListener(RenderEventType.RENDERCOMPLETE) &&\n !frameState.animate &&\n !this.tileQueue_.getTilesLoading() &&\n !this.getLoading()) {\n this.renderer_.dispatchRenderEvent(RenderEventType.RENDERCOMPLETE, frameState);\n }\n var postRenderFunctions = this.postRenderFunctions_;\n for (var i = 0, ii = postRenderFunctions.length; i < ii; ++i) {\n postRenderFunctions[i](this, frameState);\n }\n postRenderFunctions.length = 0;\n };\n /**\n * @private\n */\n PluggableMap.prototype.handleSizeChanged_ = function () {\n if (this.getView() && !this.getView().getAnimating()) {\n this.getView().resolveConstraints(0);\n }\n this.render();\n };\n /**\n * @private\n */\n PluggableMap.prototype.handleTargetChanged_ = function () {\n // target may be undefined, null, a string or an Element.\n // If it's a string we convert it to an Element before proceeding.\n // If it's not now an Element we remove the viewport from the DOM.\n // If it's an Element we append the viewport element to it.\n var targetElement;\n if (this.getTarget()) {\n targetElement = this.getTargetElement();\n }\n if (this.mapBrowserEventHandler_) {\n for (var i = 0, ii = this.keyHandlerKeys_.length; i < ii; ++i) {\n unlistenByKey(this.keyHandlerKeys_[i]);\n }\n this.keyHandlerKeys_ = null;\n this.viewport_.removeEventListener(EventType.CONTEXTMENU, this.boundHandleBrowserEvent_);\n this.viewport_.removeEventListener(EventType.WHEEL, this.boundHandleBrowserEvent_);\n if (this.handleResize_ !== undefined) {\n removeEventListener(EventType.RESIZE, this.handleResize_, false);\n this.handleResize_ = undefined;\n }\n this.mapBrowserEventHandler_.dispose();\n this.mapBrowserEventHandler_ = null;\n removeNode(this.viewport_);\n }\n if (!targetElement) {\n if (this.renderer_) {\n clearTimeout(this.postRenderTimeoutHandle_);\n this.postRenderTimeoutHandle_ = undefined;\n this.postRenderFunctions_.length = 0;\n this.renderer_.dispose();\n this.renderer_ = null;\n }\n if (this.animationDelayKey_) {\n cancelAnimationFrame(this.animationDelayKey_);\n this.animationDelayKey_ = undefined;\n }\n }\n else {\n targetElement.appendChild(this.viewport_);\n if (!this.renderer_) {\n this.renderer_ = this.createRenderer();\n }\n this.mapBrowserEventHandler_ = new MapBrowserEventHandler(this, this.moveTolerance_);\n for (var key in MapBrowserEventType) {\n this.mapBrowserEventHandler_.addEventListener(MapBrowserEventType[key], this.handleMapBrowserEvent.bind(this));\n }\n this.viewport_.addEventListener(EventType.CONTEXTMENU, this.boundHandleBrowserEvent_, false);\n this.viewport_.addEventListener(EventType.WHEEL, this.boundHandleBrowserEvent_, PASSIVE_EVENT_LISTENERS ? { passive: false } : false);\n var keyboardEventTarget = !this.keyboardEventTarget_\n ? targetElement\n : this.keyboardEventTarget_;\n this.keyHandlerKeys_ = [\n listen(keyboardEventTarget, EventType.KEYDOWN, this.handleBrowserEvent, this),\n listen(keyboardEventTarget, EventType.KEYPRESS, this.handleBrowserEvent, this),\n ];\n if (!this.handleResize_) {\n this.handleResize_ = this.updateSize.bind(this);\n window.addEventListener(EventType.RESIZE, this.handleResize_, false);\n }\n }\n this.updateSize();\n // updateSize calls setSize, so no need to call this.render\n // ourselves here.\n };\n /**\n * @private\n */\n PluggableMap.prototype.handleTileChange_ = function () {\n this.render();\n };\n /**\n * @private\n */\n PluggableMap.prototype.handleViewPropertyChanged_ = function () {\n this.render();\n };\n /**\n * @private\n */\n PluggableMap.prototype.handleViewChanged_ = function () {\n if (this.viewPropertyListenerKey_) {\n unlistenByKey(this.viewPropertyListenerKey_);\n this.viewPropertyListenerKey_ = null;\n }\n if (this.viewChangeListenerKey_) {\n unlistenByKey(this.viewChangeListenerKey_);\n this.viewChangeListenerKey_ = null;\n }\n var view = this.getView();\n if (view) {\n this.updateViewportSize_();\n this.viewPropertyListenerKey_ = listen(view, ObjectEventType.PROPERTYCHANGE, this.handleViewPropertyChanged_, this);\n this.viewChangeListenerKey_ = listen(view, EventType.CHANGE, this.handleViewPropertyChanged_, this);\n view.resolveConstraints(0);\n }\n this.render();\n };\n /**\n * @private\n */\n PluggableMap.prototype.handleLayerGroupChanged_ = function () {\n if (this.layerGroupPropertyListenerKeys_) {\n this.layerGroupPropertyListenerKeys_.forEach(unlistenByKey);\n this.layerGroupPropertyListenerKeys_ = null;\n }\n var layerGroup = this.getLayerGroup();\n if (layerGroup) {\n this.layerGroupPropertyListenerKeys_ = [\n listen(layerGroup, ObjectEventType.PROPERTYCHANGE, this.render, this),\n listen(layerGroup, EventType.CHANGE, this.render, this),\n ];\n }\n this.render();\n };\n /**\n * @return {boolean} Is rendered.\n */\n PluggableMap.prototype.isRendered = function () {\n return !!this.frameState_;\n };\n /**\n * Requests an immediate render in a synchronous manner.\n * @api\n */\n PluggableMap.prototype.renderSync = function () {\n if (this.animationDelayKey_) {\n cancelAnimationFrame(this.animationDelayKey_);\n }\n this.animationDelay_();\n };\n /**\n * Redraws all text after new fonts have loaded\n */\n PluggableMap.prototype.redrawText = function () {\n var layerStates = this.getLayerGroup().getLayerStatesArray();\n for (var i = 0, ii = layerStates.length; i < ii; ++i) {\n var layer = layerStates[i].layer;\n if (layer.hasRenderer()) {\n layer.getRenderer().handleFontsChanged();\n }\n }\n };\n /**\n * Request a map rendering (at the next animation frame).\n * @api\n */\n PluggableMap.prototype.render = function () {\n if (this.renderer_ && this.animationDelayKey_ === undefined) {\n this.animationDelayKey_ = requestAnimationFrame(this.animationDelay_);\n }\n };\n /**\n * Remove the given control from the map.\n * @param {import(\"./control/Control.js\").default} control Control.\n * @return {import(\"./control/Control.js\").default|undefined} The removed control (or undefined\n * if the control was not found).\n * @api\n */\n PluggableMap.prototype.removeControl = function (control) {\n return this.getControls().remove(control);\n };\n /**\n * Remove the given interaction from the map.\n * @param {import(\"./interaction/Interaction.js\").default} interaction Interaction to remove.\n * @return {import(\"./interaction/Interaction.js\").default|undefined} The removed interaction (or\n * undefined if the interaction was not found).\n * @api\n */\n PluggableMap.prototype.removeInteraction = function (interaction) {\n return this.getInteractions().remove(interaction);\n };\n /**\n * Removes the given layer from the map.\n * @param {import(\"./layer/Base.js\").default} layer Layer.\n * @return {import(\"./layer/Base.js\").default|undefined} The removed layer (or undefined if the\n * layer was not found).\n * @api\n */\n PluggableMap.prototype.removeLayer = function (layer) {\n var layers = this.getLayerGroup().getLayers();\n return layers.remove(layer);\n };\n /**\n * Remove the given overlay from the map.\n * @param {import(\"./Overlay.js\").default} overlay Overlay.\n * @return {import(\"./Overlay.js\").default|undefined} The removed overlay (or undefined\n * if the overlay was not found).\n * @api\n */\n PluggableMap.prototype.removeOverlay = function (overlay) {\n return this.getOverlays().remove(overlay);\n };\n /**\n * @param {number} time Time.\n * @private\n */\n PluggableMap.prototype.renderFrame_ = function (time) {\n var _this = this;\n var size = this.getSize();\n var view = this.getView();\n var previousFrameState = this.frameState_;\n /** @type {?FrameState} */\n var frameState = null;\n if (size !== undefined && hasArea(size) && view && view.isDef()) {\n var viewHints = view.getHints(this.frameState_ ? this.frameState_.viewHints : undefined);\n var viewState = view.getState();\n frameState = {\n animate: false,\n coordinateToPixelTransform: this.coordinateToPixelTransform_,\n declutterTree: null,\n extent: getForViewAndSize(viewState.center, viewState.resolution, viewState.rotation, size),\n index: this.frameIndex_++,\n layerIndex: 0,\n layerStatesArray: this.getLayerGroup().getLayerStatesArray(),\n pixelRatio: this.pixelRatio_,\n pixelToCoordinateTransform: this.pixelToCoordinateTransform_,\n postRenderFunctions: [],\n size: size,\n tileQueue: this.tileQueue_,\n time: time,\n usedTiles: {},\n viewState: viewState,\n viewHints: viewHints,\n wantedTiles: {},\n };\n if (viewState.nextCenter && viewState.nextResolution) {\n var rotation = isNaN(viewState.nextRotation)\n ? viewState.rotation\n : viewState.nextRotation;\n frameState.nextExtent = getForViewAndSize(viewState.nextCenter, viewState.nextResolution, rotation, size);\n }\n }\n this.frameState_ = frameState;\n this.renderer_.renderFrame(frameState);\n if (frameState) {\n if (frameState.animate) {\n this.render();\n }\n Array.prototype.push.apply(this.postRenderFunctions_, frameState.postRenderFunctions);\n if (previousFrameState) {\n var moveStart = !this.previousExtent_ ||\n (!isEmpty(this.previousExtent_) &&\n !equals(frameState.extent, this.previousExtent_));\n if (moveStart) {\n this.dispatchEvent(new MapEvent(MapEventType.MOVESTART, this, previousFrameState));\n this.previousExtent_ = createOrUpdateEmpty(this.previousExtent_);\n }\n }\n var idle = this.previousExtent_ &&\n !frameState.viewHints[ViewHint.ANIMATING] &&\n !frameState.viewHints[ViewHint.INTERACTING] &&\n !equals(frameState.extent, this.previousExtent_);\n if (idle) {\n this.dispatchEvent(new MapEvent(MapEventType.MOVEEND, this, frameState));\n clone(frameState.extent, this.previousExtent_);\n }\n }\n this.dispatchEvent(new MapEvent(MapEventType.POSTRENDER, this, frameState));\n if (!this.postRenderTimeoutHandle_) {\n this.postRenderTimeoutHandle_ = setTimeout(function () {\n _this.postRenderTimeoutHandle_ = undefined;\n _this.handlePostRender();\n }, 0);\n }\n };\n /**\n * Sets the layergroup of this map.\n * @param {LayerGroup} layerGroup A layer group containing the layers in this map.\n * @observable\n * @api\n */\n PluggableMap.prototype.setLayerGroup = function (layerGroup) {\n this.set(MapProperty.LAYERGROUP, layerGroup);\n };\n /**\n * Set the size of this map.\n * @param {import(\"./size.js\").Size|undefined} size The size in pixels of the map in the DOM.\n * @observable\n * @api\n */\n PluggableMap.prototype.setSize = function (size) {\n this.set(MapProperty.SIZE, size);\n };\n /**\n * Set the target element to render this map into.\n * @param {HTMLElement|string} [target] The Element or id of the Element\n * that the map is rendered in.\n * @observable\n * @api\n */\n PluggableMap.prototype.setTarget = function (target) {\n this.set(MapProperty.TARGET, target);\n };\n /**\n * Set the view for this map.\n * @param {View|Promise} view The view that controls this map.\n * It is also possible to pass a promise that resolves to options for constructing a view. This\n * alternative allows view properties to be resolved by sources or other components that load\n * view-related metadata.\n * @observable\n * @api\n */\n PluggableMap.prototype.setView = function (view) {\n if (!view || view instanceof View) {\n this.set(MapProperty.VIEW, view);\n return;\n }\n this.set(MapProperty.VIEW, new View());\n var map = this;\n view.then(function (viewOptions) {\n map.setView(new View(viewOptions));\n });\n };\n /**\n * Force a recalculation of the map viewport size. This should be called when\n * third-party code changes the size of the map viewport.\n * @api\n */\n PluggableMap.prototype.updateSize = function () {\n var targetElement = this.getTargetElement();\n var size = undefined;\n if (targetElement) {\n var computedStyle = getComputedStyle(targetElement);\n var width = targetElement.offsetWidth -\n parseFloat(computedStyle['borderLeftWidth']) -\n parseFloat(computedStyle['paddingLeft']) -\n parseFloat(computedStyle['paddingRight']) -\n parseFloat(computedStyle['borderRightWidth']);\n var height = targetElement.offsetHeight -\n parseFloat(computedStyle['borderTopWidth']) -\n parseFloat(computedStyle['paddingTop']) -\n parseFloat(computedStyle['paddingBottom']) -\n parseFloat(computedStyle['borderBottomWidth']);\n if (!isNaN(width) && !isNaN(height)) {\n size = [width, height];\n if (!hasArea(size) &&\n !!(targetElement.offsetWidth ||\n targetElement.offsetHeight ||\n targetElement.getClientRects().length)) {\n // eslint-disable-next-line\n console.warn(\"No map visible because the map container's width or height are 0.\");\n }\n }\n }\n this.setSize(size);\n this.updateViewportSize_();\n };\n /**\n * Recomputes the viewport size and save it on the view object (if any)\n * @private\n */\n PluggableMap.prototype.updateViewportSize_ = function () {\n var view = this.getView();\n if (view) {\n var size = undefined;\n var computedStyle = getComputedStyle(this.viewport_);\n if (computedStyle.width && computedStyle.height) {\n size = [\n parseInt(computedStyle.width, 10),\n parseInt(computedStyle.height, 10),\n ];\n }\n view.setViewportSize(size);\n }\n };\n return PluggableMap;\n}(BaseObject));\n/**\n * @param {MapOptions} options Map options.\n * @return {MapOptionsInternal} Internal map options.\n */\nfunction createOptionsInternal(options) {\n /**\n * @type {HTMLElement|Document}\n */\n var keyboardEventTarget = null;\n if (options.keyboardEventTarget !== undefined) {\n keyboardEventTarget =\n typeof options.keyboardEventTarget === 'string'\n ? document.getElementById(options.keyboardEventTarget)\n : options.keyboardEventTarget;\n }\n /**\n * @type {Object}\n */\n var values = {};\n var layerGroup = options.layers &&\n typeof ( /** @type {?} */(options.layers).getLayers) === 'function'\n ? /** @type {LayerGroup} */ (options.layers)\n : new LayerGroup({ layers: /** @type {Collection} */ (options.layers) });\n values[MapProperty.LAYERGROUP] = layerGroup;\n values[MapProperty.TARGET] = options.target;\n values[MapProperty.VIEW] =\n options.view instanceof View ? options.view : new View();\n var controls;\n if (options.controls !== undefined) {\n if (Array.isArray(options.controls)) {\n controls = new Collection(options.controls.slice());\n }\n else {\n assert(typeof ( /** @type {?} */(options.controls).getArray) === 'function', 47); // Expected `controls` to be an array or an `import(\"./Collection.js\").Collection`\n controls = /** @type {Collection} */ (options.controls);\n }\n }\n var interactions;\n if (options.interactions !== undefined) {\n if (Array.isArray(options.interactions)) {\n interactions = new Collection(options.interactions.slice());\n }\n else {\n assert(typeof ( /** @type {?} */(options.interactions).getArray) ===\n 'function', 48); // Expected `interactions` to be an array or an `import(\"./Collection.js\").Collection`\n interactions = /** @type {Collection} */ (options.interactions);\n }\n }\n var overlays;\n if (options.overlays !== undefined) {\n if (Array.isArray(options.overlays)) {\n overlays = new Collection(options.overlays.slice());\n }\n else {\n assert(typeof ( /** @type {?} */(options.overlays).getArray) === 'function', 49); // Expected `overlays` to be an array or an `import(\"./Collection.js\").Collection`\n overlays = options.overlays;\n }\n }\n else {\n overlays = new Collection();\n }\n return {\n controls: controls,\n interactions: interactions,\n keyboardEventTarget: keyboardEventTarget,\n overlays: overlays,\n values: values,\n };\n}\nexport default PluggableMap;\n//# sourceMappingURL=PluggableMap.js.map","var __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n if (typeof b !== \"function\" && b !== null)\n throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\n/**\n * @module ol/control/Attribution\n */\nimport Control from './Control.js';\nimport EventType from '../events/EventType.js';\nimport { CLASS_COLLAPSED, CLASS_CONTROL, CLASS_UNSELECTABLE } from '../css.js';\nimport { equals } from '../array.js';\nimport { inView } from '../layer/Layer.js';\nimport { removeChildren, replaceNode } from '../dom.js';\n/**\n * @typedef {Object} Options\n * @property {string} [className='ol-attribution'] CSS class name.\n * @property {HTMLElement|string} [target] Specify a target if you\n * want the control to be rendered outside of the map's\n * viewport.\n * @property {boolean} [collapsible] Specify if attributions can\n * be collapsed. If not specified, sources control this behavior with their\n * `attributionsCollapsible` setting.\n * @property {boolean} [collapsed=true] Specify if attributions should\n * be collapsed at startup.\n * @property {string} [tipLabel='Attributions'] Text label to use for the button tip.\n * @property {string|HTMLElement} [label='i'] Text label to use for the\n * collapsed attributions button.\n * Instead of text, also an element (e.g. a `span` element) can be used.\n * @property {string} [expandClassName=className + '-expand'] CSS class name for the\n * collapsed attributions button.\n * @property {string|HTMLElement} [collapseLabel='›'] Text label to use\n * for the expanded attributions button.\n * Instead of text, also an element (e.g. a `span` element) can be used.\n * @property {string} [collapseClassName=className + '-collapse'] CSS class name for the\n * expanded attributions button.\n * @property {function(import(\"../MapEvent.js\").default):void} [render] Function called when\n * the control should be re-rendered. This is called in a `requestAnimationFrame`\n * callback.\n */\n/**\n * @classdesc\n * Control to show all the attributions associated with the layer sources\n * in the map. This control is one of the default controls included in maps.\n * By default it will show in the bottom right portion of the map, but this can\n * be changed by using a css selector for `.ol-attribution`.\n *\n * @api\n */\nvar Attribution = /** @class */ (function (_super) {\n __extends(Attribution, _super);\n /**\n * @param {Options} [opt_options] Attribution options.\n */\n function Attribution(opt_options) {\n var _this = this;\n var options = opt_options ? opt_options : {};\n _this = _super.call(this, {\n element: document.createElement('div'),\n render: options.render,\n target: options.target,\n }) || this;\n /**\n * @private\n * @type {HTMLElement}\n */\n _this.ulElement_ = document.createElement('ul');\n /**\n * @private\n * @type {boolean}\n */\n _this.collapsed_ =\n options.collapsed !== undefined ? options.collapsed : true;\n /**\n * @private\n * @type {boolean}\n */\n _this.userCollapsed_ = _this.collapsed_;\n /**\n * @private\n * @type {boolean}\n */\n _this.overrideCollapsible_ = options.collapsible !== undefined;\n /**\n * @private\n * @type {boolean}\n */\n _this.collapsible_ =\n options.collapsible !== undefined ? options.collapsible : true;\n if (!_this.collapsible_) {\n _this.collapsed_ = false;\n }\n var className = options.className !== undefined ? options.className : 'ol-attribution';\n var tipLabel = options.tipLabel !== undefined ? options.tipLabel : 'Attributions';\n var expandClassName = options.expandClassName !== undefined\n ? options.expandClassName\n : className + '-expand';\n var collapseLabel = options.collapseLabel !== undefined ? options.collapseLabel : '\\u203A';\n var collapseClassName = options.collapseClassName !== undefined\n ? options.collapseClassName\n : className + '-collpase';\n if (typeof collapseLabel === 'string') {\n /**\n * @private\n * @type {HTMLElement}\n */\n _this.collapseLabel_ = document.createElement('span');\n _this.collapseLabel_.textContent = collapseLabel;\n _this.collapseLabel_.className = collapseClassName;\n }\n else {\n _this.collapseLabel_ = collapseLabel;\n }\n var label = options.label !== undefined ? options.label : 'i';\n if (typeof label === 'string') {\n /**\n * @private\n * @type {HTMLElement}\n */\n _this.label_ = document.createElement('span');\n _this.label_.textContent = label;\n _this.label_.className = expandClassName;\n }\n else {\n _this.label_ = label;\n }\n var activeLabel = _this.collapsible_ && !_this.collapsed_ ? _this.collapseLabel_ : _this.label_;\n /**\n * @private\n * @type {HTMLElement}\n */\n _this.toggleButton_ = document.createElement('button');\n _this.toggleButton_.setAttribute('type', 'button');\n _this.toggleButton_.setAttribute('aria-expanded', String(!_this.collapsed_));\n _this.toggleButton_.title = tipLabel;\n _this.toggleButton_.appendChild(activeLabel);\n _this.toggleButton_.addEventListener(EventType.CLICK, _this.handleClick_.bind(_this), false);\n var cssClasses = className +\n ' ' +\n CLASS_UNSELECTABLE +\n ' ' +\n CLASS_CONTROL +\n (_this.collapsed_ && _this.collapsible_ ? ' ' + CLASS_COLLAPSED : '') +\n (_this.collapsible_ ? '' : ' ol-uncollapsible');\n var element = _this.element;\n element.className = cssClasses;\n element.appendChild(_this.toggleButton_);\n element.appendChild(_this.ulElement_);\n /**\n * A list of currently rendered resolutions.\n * @type {Array}\n * @private\n */\n _this.renderedAttributions_ = [];\n /**\n * @private\n * @type {boolean}\n */\n _this.renderedVisible_ = true;\n return _this;\n }\n /**\n * Collect a list of visible attributions and set the collapsible state.\n * @param {import(\"../PluggableMap.js\").FrameState} frameState Frame state.\n * @return {Array} Attributions.\n * @private\n */\n Attribution.prototype.collectSourceAttributions_ = function (frameState) {\n /**\n * Used to determine if an attribution already exists.\n * @type {!Object}\n */\n var lookup = {};\n /**\n * A list of visible attributions.\n * @type {Array}\n */\n var visibleAttributions = [];\n var collapsible = true;\n var layerStatesArray = frameState.layerStatesArray;\n for (var i = 0, ii = layerStatesArray.length; i < ii; ++i) {\n var layerState = layerStatesArray[i];\n if (!inView(layerState, frameState.viewState)) {\n continue;\n }\n var source = /** @type {import(\"../layer/Layer.js\").default} */ (layerState.layer).getSource();\n if (!source) {\n continue;\n }\n var attributionGetter = source.getAttributions();\n if (!attributionGetter) {\n continue;\n }\n var attributions = attributionGetter(frameState);\n if (!attributions) {\n continue;\n }\n collapsible =\n collapsible && source.getAttributionsCollapsible() !== false;\n if (Array.isArray(attributions)) {\n for (var j = 0, jj = attributions.length; j < jj; ++j) {\n if (!(attributions[j] in lookup)) {\n visibleAttributions.push(attributions[j]);\n lookup[attributions[j]] = true;\n }\n }\n }\n else {\n if (!(attributions in lookup)) {\n visibleAttributions.push(attributions);\n lookup[attributions] = true;\n }\n }\n }\n if (!this.overrideCollapsible_) {\n this.setCollapsible(collapsible);\n }\n return visibleAttributions;\n };\n /**\n * @private\n * @param {?import(\"../PluggableMap.js\").FrameState} frameState Frame state.\n */\n Attribution.prototype.updateElement_ = function (frameState) {\n if (!frameState) {\n if (this.renderedVisible_) {\n this.element.style.display = 'none';\n this.renderedVisible_ = false;\n }\n return;\n }\n var attributions = this.collectSourceAttributions_(frameState);\n var visible = attributions.length > 0;\n if (this.renderedVisible_ != visible) {\n this.element.style.display = visible ? '' : 'none';\n this.renderedVisible_ = visible;\n }\n if (equals(attributions, this.renderedAttributions_)) {\n return;\n }\n removeChildren(this.ulElement_);\n // append the attributions\n for (var i = 0, ii = attributions.length; i < ii; ++i) {\n var element = document.createElement('li');\n element.innerHTML = attributions[i];\n this.ulElement_.appendChild(element);\n }\n this.renderedAttributions_ = attributions;\n };\n /**\n * @param {MouseEvent} event The event to handle\n * @private\n */\n Attribution.prototype.handleClick_ = function (event) {\n event.preventDefault();\n this.handleToggle_();\n this.userCollapsed_ = this.collapsed_;\n };\n /**\n * @private\n */\n Attribution.prototype.handleToggle_ = function () {\n this.element.classList.toggle(CLASS_COLLAPSED);\n if (this.collapsed_) {\n replaceNode(this.collapseLabel_, this.label_);\n }\n else {\n replaceNode(this.label_, this.collapseLabel_);\n }\n this.collapsed_ = !this.collapsed_;\n this.toggleButton_.setAttribute('aria-expanded', String(!this.collapsed_));\n };\n /**\n * Return `true` if the attribution is collapsible, `false` otherwise.\n * @return {boolean} True if the widget is collapsible.\n * @api\n */\n Attribution.prototype.getCollapsible = function () {\n return this.collapsible_;\n };\n /**\n * Set whether the attribution should be collapsible.\n * @param {boolean} collapsible True if the widget is collapsible.\n * @api\n */\n Attribution.prototype.setCollapsible = function (collapsible) {\n if (this.collapsible_ === collapsible) {\n return;\n }\n this.collapsible_ = collapsible;\n this.element.classList.toggle('ol-uncollapsible');\n if (this.userCollapsed_) {\n this.handleToggle_();\n }\n };\n /**\n * Collapse or expand the attribution according to the passed parameter. Will\n * not do anything if the attribution isn't collapsible or if the current\n * collapsed state is already the one requested.\n * @param {boolean} collapsed True if the widget is collapsed.\n * @api\n */\n Attribution.prototype.setCollapsed = function (collapsed) {\n this.userCollapsed_ = collapsed;\n if (!this.collapsible_ || this.collapsed_ === collapsed) {\n return;\n }\n this.handleToggle_();\n };\n /**\n * Return `true` when the attribution is currently collapsed or `false`\n * otherwise.\n * @return {boolean} True if the widget is collapsed.\n * @api\n */\n Attribution.prototype.getCollapsed = function () {\n return this.collapsed_;\n };\n /**\n * Update the attribution element.\n * @param {import(\"../MapEvent.js\").default} mapEvent Map event.\n * @override\n */\n Attribution.prototype.render = function (mapEvent) {\n this.updateElement_(mapEvent.frameState);\n };\n return Attribution;\n}(Control));\nexport default Attribution;\n//# sourceMappingURL=Attribution.js.map","var __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n if (typeof b !== \"function\" && b !== null)\n throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\n/**\n * @module ol/control/Rotate\n */\nimport Control from './Control.js';\nimport EventType from '../events/EventType.js';\nimport { CLASS_CONTROL, CLASS_HIDDEN, CLASS_UNSELECTABLE } from '../css.js';\nimport { easeOut } from '../easing.js';\n/**\n * @typedef {Object} Options\n * @property {string} [className='ol-rotate'] CSS class name.\n * @property {string|HTMLElement} [label='⇧'] Text label to use for the rotate button.\n * Instead of text, also an element (e.g. a `span` element) can be used.\n * @property {string} [tipLabel='Reset rotation'] Text label to use for the rotate tip.\n * @property {string} [compassClassName='ol-compass'] CSS class name for the compass.\n * @property {number} [duration=250] Animation duration in milliseconds.\n * @property {boolean} [autoHide=true] Hide the control when rotation is 0.\n * @property {function(import(\"../MapEvent.js\").default):void} [render] Function called when the control should\n * be re-rendered. This is called in a `requestAnimationFrame` callback.\n * @property {function():void} [resetNorth] Function called when the control is clicked.\n * This will override the default `resetNorth`.\n * @property {HTMLElement|string} [target] Specify a target if you want the control to be\n * rendered outside of the map's viewport.\n */\n/**\n * @classdesc\n * A button control to reset rotation to 0.\n * To style this control use css selector `.ol-rotate`. A `.ol-hidden` css\n * selector is added to the button when the rotation is 0.\n *\n * @api\n */\nvar Rotate = /** @class */ (function (_super) {\n __extends(Rotate, _super);\n /**\n * @param {Options} [opt_options] Rotate options.\n */\n function Rotate(opt_options) {\n var _this = this;\n var options = opt_options ? opt_options : {};\n _this = _super.call(this, {\n element: document.createElement('div'),\n render: options.render,\n target: options.target,\n }) || this;\n var className = options.className !== undefined ? options.className : 'ol-rotate';\n var label = options.label !== undefined ? options.label : '\\u21E7';\n var compassClassName = options.compassClassName !== undefined\n ? options.compassClassName\n : 'ol-compass';\n /**\n * @type {HTMLElement}\n * @private\n */\n _this.label_ = null;\n if (typeof label === 'string') {\n _this.label_ = document.createElement('span');\n _this.label_.className = compassClassName;\n _this.label_.textContent = label;\n }\n else {\n _this.label_ = label;\n _this.label_.classList.add(compassClassName);\n }\n var tipLabel = options.tipLabel ? options.tipLabel : 'Reset rotation';\n var button = document.createElement('button');\n button.className = className + '-reset';\n button.setAttribute('type', 'button');\n button.title = tipLabel;\n button.appendChild(_this.label_);\n button.addEventListener(EventType.CLICK, _this.handleClick_.bind(_this), false);\n var cssClasses = className + ' ' + CLASS_UNSELECTABLE + ' ' + CLASS_CONTROL;\n var element = _this.element;\n element.className = cssClasses;\n element.appendChild(button);\n _this.callResetNorth_ = options.resetNorth ? options.resetNorth : undefined;\n /**\n * @type {number}\n * @private\n */\n _this.duration_ = options.duration !== undefined ? options.duration : 250;\n /**\n * @type {boolean}\n * @private\n */\n _this.autoHide_ = options.autoHide !== undefined ? options.autoHide : true;\n /**\n * @private\n * @type {number|undefined}\n */\n _this.rotation_ = undefined;\n if (_this.autoHide_) {\n _this.element.classList.add(CLASS_HIDDEN);\n }\n return _this;\n }\n /**\n * @param {MouseEvent} event The event to handle\n * @private\n */\n Rotate.prototype.handleClick_ = function (event) {\n event.preventDefault();\n if (this.callResetNorth_ !== undefined) {\n this.callResetNorth_();\n }\n else {\n this.resetNorth_();\n }\n };\n /**\n * @private\n */\n Rotate.prototype.resetNorth_ = function () {\n var map = this.getMap();\n var view = map.getView();\n if (!view) {\n // the map does not have a view, so we can't act\n // upon it\n return;\n }\n var rotation = view.getRotation();\n if (rotation !== undefined) {\n if (this.duration_ > 0 && rotation % (2 * Math.PI) !== 0) {\n view.animate({\n rotation: 0,\n duration: this.duration_,\n easing: easeOut,\n });\n }\n else {\n view.setRotation(0);\n }\n }\n };\n /**\n * Update the rotate control element.\n * @param {import(\"../MapEvent.js\").default} mapEvent Map event.\n * @override\n */\n Rotate.prototype.render = function (mapEvent) {\n var frameState = mapEvent.frameState;\n if (!frameState) {\n return;\n }\n var rotation = frameState.viewState.rotation;\n if (rotation != this.rotation_) {\n var transform = 'rotate(' + rotation + 'rad)';\n if (this.autoHide_) {\n var contains = this.element.classList.contains(CLASS_HIDDEN);\n if (!contains && rotation === 0) {\n this.element.classList.add(CLASS_HIDDEN);\n }\n else if (contains && rotation !== 0) {\n this.element.classList.remove(CLASS_HIDDEN);\n }\n }\n this.label_.style.transform = transform;\n }\n this.rotation_ = rotation;\n };\n return Rotate;\n}(Control));\nexport default Rotate;\n//# sourceMappingURL=Rotate.js.map","var __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n if (typeof b !== \"function\" && b !== null)\n throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\n/**\n * @module ol/interaction/DoubleClickZoom\n */\nimport Interaction, { zoomByDelta } from './Interaction.js';\nimport MapBrowserEventType from '../MapBrowserEventType.js';\n/**\n * @typedef {Object} Options\n * @property {number} [duration=250] Animation duration in milliseconds.\n * @property {number} [delta=1] The zoom delta applied on each double click.\n */\n/**\n * @classdesc\n * Allows the user to zoom by double-clicking on the map.\n * @api\n */\nvar DoubleClickZoom = /** @class */ (function (_super) {\n __extends(DoubleClickZoom, _super);\n /**\n * @param {Options} [opt_options] Options.\n */\n function DoubleClickZoom(opt_options) {\n var _this = _super.call(this) || this;\n var options = opt_options ? opt_options : {};\n /**\n * @private\n * @type {number}\n */\n _this.delta_ = options.delta ? options.delta : 1;\n /**\n * @private\n * @type {number}\n */\n _this.duration_ = options.duration !== undefined ? options.duration : 250;\n return _this;\n }\n /**\n * Handles the {@link module:ol/MapBrowserEvent map browser event} (if it was a\n * doubleclick) and eventually zooms the map.\n * @param {import(\"../MapBrowserEvent.js\").default} mapBrowserEvent Map browser event.\n * @return {boolean} `false` to stop event propagation.\n */\n DoubleClickZoom.prototype.handleEvent = function (mapBrowserEvent) {\n var stopEvent = false;\n if (mapBrowserEvent.type == MapBrowserEventType.DBLCLICK) {\n var browserEvent = /** @type {MouseEvent} */ (mapBrowserEvent.originalEvent);\n var map = mapBrowserEvent.map;\n var anchor = mapBrowserEvent.coordinate;\n var delta = browserEvent.shiftKey ? -this.delta_ : this.delta_;\n var view = map.getView();\n zoomByDelta(view, delta, anchor, this.duration_);\n browserEvent.preventDefault();\n stopEvent = true;\n }\n return !stopEvent;\n };\n return DoubleClickZoom;\n}(Interaction));\nexport default DoubleClickZoom;\n//# sourceMappingURL=DoubleClickZoom.js.map","var __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n if (typeof b !== \"function\" && b !== null)\n throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\n/**\n * @module ol/interaction/DragPan\n */\nimport PointerInteraction, { centroid as centroidFromPointers, } from './Pointer.js';\nimport { FALSE } from '../functions.js';\nimport { all, focusWithTabindex, noModifierKeys, primaryAction, } from '../events/condition.js';\nimport { easeOut } from '../easing.js';\nimport { rotate as rotateCoordinate, scale as scaleCoordinate, } from '../coordinate.js';\n/**\n * @typedef {Object} Options\n * @property {import(\"../events/condition.js\").Condition} [condition] A function that takes an {@link module:ol/MapBrowserEvent~MapBrowserEvent} and returns a boolean\n * to indicate whether that event should be handled.\n * Default is {@link module:ol/events/condition.noModifierKeys} and {@link module:ol/events/condition.primaryAction}.\n * @property {boolean} [onFocusOnly=false] When the map's target has a `tabindex` attribute set,\n * the interaction will only handle events when the map has the focus.\n * @property {import(\"../Kinetic.js\").default} [kinetic] Kinetic inertia to apply to the pan.\n */\n/**\n * @classdesc\n * Allows the user to pan the map by dragging the map.\n * @api\n */\nvar DragPan = /** @class */ (function (_super) {\n __extends(DragPan, _super);\n /**\n * @param {Options} [opt_options] Options.\n */\n function DragPan(opt_options) {\n var _this = _super.call(this, {\n stopDown: FALSE,\n }) || this;\n var options = opt_options ? opt_options : {};\n /**\n * @private\n * @type {import(\"../Kinetic.js\").default|undefined}\n */\n _this.kinetic_ = options.kinetic;\n /**\n * @type {import(\"../pixel.js\").Pixel}\n */\n _this.lastCentroid = null;\n /**\n * @type {number}\n */\n _this.lastPointersCount_;\n /**\n * @type {boolean}\n */\n _this.panning_ = false;\n var condition = options.condition\n ? options.condition\n : all(noModifierKeys, primaryAction);\n /**\n * @private\n * @type {import(\"../events/condition.js\").Condition}\n */\n _this.condition_ = options.onFocusOnly\n ? all(focusWithTabindex, condition)\n : condition;\n /**\n * @private\n * @type {boolean}\n */\n _this.noKinetic_ = false;\n return _this;\n }\n /**\n * Handle pointer drag events.\n * @param {import(\"../MapBrowserEvent.js\").default} mapBrowserEvent Event.\n */\n DragPan.prototype.handleDragEvent = function (mapBrowserEvent) {\n if (!this.panning_) {\n this.panning_ = true;\n this.getMap().getView().beginInteraction();\n }\n var targetPointers = this.targetPointers;\n var centroid = centroidFromPointers(targetPointers);\n if (targetPointers.length == this.lastPointersCount_) {\n if (this.kinetic_) {\n this.kinetic_.update(centroid[0], centroid[1]);\n }\n if (this.lastCentroid) {\n var delta = [\n this.lastCentroid[0] - centroid[0],\n centroid[1] - this.lastCentroid[1],\n ];\n var map = mapBrowserEvent.map;\n var view = map.getView();\n scaleCoordinate(delta, view.getResolution());\n rotateCoordinate(delta, view.getRotation());\n view.adjustCenterInternal(delta);\n }\n }\n else if (this.kinetic_) {\n // reset so we don't overestimate the kinetic energy after\n // after one finger down, tiny drag, second finger down\n this.kinetic_.begin();\n }\n this.lastCentroid = centroid;\n this.lastPointersCount_ = targetPointers.length;\n mapBrowserEvent.originalEvent.preventDefault();\n };\n /**\n * Handle pointer up events.\n * @param {import(\"../MapBrowserEvent.js\").default} mapBrowserEvent Event.\n * @return {boolean} If the event was consumed.\n */\n DragPan.prototype.handleUpEvent = function (mapBrowserEvent) {\n var map = mapBrowserEvent.map;\n var view = map.getView();\n if (this.targetPointers.length === 0) {\n if (!this.noKinetic_ && this.kinetic_ && this.kinetic_.end()) {\n var distance = this.kinetic_.getDistance();\n var angle = this.kinetic_.getAngle();\n var center = view.getCenterInternal();\n var centerpx = map.getPixelFromCoordinateInternal(center);\n var dest = map.getCoordinateFromPixelInternal([\n centerpx[0] - distance * Math.cos(angle),\n centerpx[1] - distance * Math.sin(angle),\n ]);\n view.animateInternal({\n center: view.getConstrainedCenter(dest),\n duration: 500,\n easing: easeOut,\n });\n }\n if (this.panning_) {\n this.panning_ = false;\n view.endInteraction();\n }\n return false;\n }\n else {\n if (this.kinetic_) {\n // reset so we don't overestimate the kinetic energy after\n // after one finger up, tiny drag, second finger up\n this.kinetic_.begin();\n }\n this.lastCentroid = null;\n return true;\n }\n };\n /**\n * Handle pointer down events.\n * @param {import(\"../MapBrowserEvent.js\").default} mapBrowserEvent Event.\n * @return {boolean} If the event was consumed.\n */\n DragPan.prototype.handleDownEvent = function (mapBrowserEvent) {\n if (this.targetPointers.length > 0 && this.condition_(mapBrowserEvent)) {\n var map = mapBrowserEvent.map;\n var view = map.getView();\n this.lastCentroid = null;\n // stop any current animation\n if (view.getAnimating()) {\n view.cancelAnimations();\n }\n if (this.kinetic_) {\n this.kinetic_.begin();\n }\n // No kinetic as soon as more than one pointer on the screen is\n // detected. This is to prevent nasty pans after pinch.\n this.noKinetic_ = this.targetPointers.length > 1;\n return true;\n }\n else {\n return false;\n }\n };\n return DragPan;\n}(PointerInteraction));\nexport default DragPan;\n//# sourceMappingURL=DragPan.js.map","var __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n if (typeof b !== \"function\" && b !== null)\n throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\n/**\n * @module ol/interaction/DragRotate\n */\nimport PointerInteraction from './Pointer.js';\nimport { FALSE } from '../functions.js';\nimport { altShiftKeysOnly, mouseActionButton, mouseOnly, } from '../events/condition.js';\nimport { disable } from '../rotationconstraint.js';\n/**\n * @typedef {Object} Options\n * @property {import(\"../events/condition.js\").Condition} [condition] A function that takes an\n * {@link module:ol/MapBrowserEvent~MapBrowserEvent} and returns a boolean\n * to indicate whether that event should be handled.\n * Default is {@link module:ol/events/condition.altShiftKeysOnly}.\n * @property {number} [duration=250] Animation duration in milliseconds.\n */\n/**\n * @classdesc\n * Allows the user to rotate the map by clicking and dragging on the map,\n * normally combined with an {@link module:ol/events/condition} that limits\n * it to when the alt and shift keys are held down.\n *\n * This interaction is only supported for mouse devices.\n * @api\n */\nvar DragRotate = /** @class */ (function (_super) {\n __extends(DragRotate, _super);\n /**\n * @param {Options} [opt_options] Options.\n */\n function DragRotate(opt_options) {\n var _this = this;\n var options = opt_options ? opt_options : {};\n _this = _super.call(this, {\n stopDown: FALSE,\n }) || this;\n /**\n * @private\n * @type {import(\"../events/condition.js\").Condition}\n */\n _this.condition_ = options.condition ? options.condition : altShiftKeysOnly;\n /**\n * @private\n * @type {number|undefined}\n */\n _this.lastAngle_ = undefined;\n /**\n * @private\n * @type {number}\n */\n _this.duration_ = options.duration !== undefined ? options.duration : 250;\n return _this;\n }\n /**\n * Handle pointer drag events.\n * @param {import(\"../MapBrowserEvent.js\").default} mapBrowserEvent Event.\n */\n DragRotate.prototype.handleDragEvent = function (mapBrowserEvent) {\n if (!mouseOnly(mapBrowserEvent)) {\n return;\n }\n var map = mapBrowserEvent.map;\n var view = map.getView();\n if (view.getConstraints().rotation === disable) {\n return;\n }\n var size = map.getSize();\n var offset = mapBrowserEvent.pixel;\n var theta = Math.atan2(size[1] / 2 - offset[1], offset[0] - size[0] / 2);\n if (this.lastAngle_ !== undefined) {\n var delta = theta - this.lastAngle_;\n view.adjustRotationInternal(-delta);\n }\n this.lastAngle_ = theta;\n };\n /**\n * Handle pointer up events.\n * @param {import(\"../MapBrowserEvent.js\").default} mapBrowserEvent Event.\n * @return {boolean} If the event was consumed.\n */\n DragRotate.prototype.handleUpEvent = function (mapBrowserEvent) {\n if (!mouseOnly(mapBrowserEvent)) {\n return true;\n }\n var map = mapBrowserEvent.map;\n var view = map.getView();\n view.endInteraction(this.duration_);\n return false;\n };\n /**\n * Handle pointer down events.\n * @param {import(\"../MapBrowserEvent.js\").default} mapBrowserEvent Event.\n * @return {boolean} If the event was consumed.\n */\n DragRotate.prototype.handleDownEvent = function (mapBrowserEvent) {\n if (!mouseOnly(mapBrowserEvent)) {\n return false;\n }\n if (mouseActionButton(mapBrowserEvent) &&\n this.condition_(mapBrowserEvent)) {\n var map = mapBrowserEvent.map;\n map.getView().beginInteraction();\n this.lastAngle_ = undefined;\n return true;\n }\n else {\n return false;\n }\n };\n return DragRotate;\n}(PointerInteraction));\nexport default DragRotate;\n//# sourceMappingURL=DragRotate.js.map","/**\n * @module ol/render/Box\n */\nvar __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n if (typeof b !== \"function\" && b !== null)\n throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nimport Disposable from '../Disposable.js';\nimport Polygon from '../geom/Polygon.js';\nvar RenderBox = /** @class */ (function (_super) {\n __extends(RenderBox, _super);\n /**\n * @param {string} className CSS class name.\n */\n function RenderBox(className) {\n var _this = _super.call(this) || this;\n /**\n * @type {import(\"../geom/Polygon.js\").default}\n * @private\n */\n _this.geometry_ = null;\n /**\n * @type {HTMLDivElement}\n * @private\n */\n _this.element_ = document.createElement('div');\n _this.element_.style.position = 'absolute';\n _this.element_.style.pointerEvents = 'auto';\n _this.element_.className = 'ol-box ' + className;\n /**\n * @private\n * @type {import(\"../PluggableMap.js\").default}\n */\n _this.map_ = null;\n /**\n * @private\n * @type {import(\"../pixel.js\").Pixel}\n */\n _this.startPixel_ = null;\n /**\n * @private\n * @type {import(\"../pixel.js\").Pixel}\n */\n _this.endPixel_ = null;\n return _this;\n }\n /**\n * Clean up.\n */\n RenderBox.prototype.disposeInternal = function () {\n this.setMap(null);\n };\n /**\n * @private\n */\n RenderBox.prototype.render_ = function () {\n var startPixel = this.startPixel_;\n var endPixel = this.endPixel_;\n var px = 'px';\n var style = this.element_.style;\n style.left = Math.min(startPixel[0], endPixel[0]) + px;\n style.top = Math.min(startPixel[1], endPixel[1]) + px;\n style.width = Math.abs(endPixel[0] - startPixel[0]) + px;\n style.height = Math.abs(endPixel[1] - startPixel[1]) + px;\n };\n /**\n * @param {import(\"../PluggableMap.js\").default} map Map.\n */\n RenderBox.prototype.setMap = function (map) {\n if (this.map_) {\n this.map_.getOverlayContainer().removeChild(this.element_);\n var style = this.element_.style;\n style.left = 'inherit';\n style.top = 'inherit';\n style.width = 'inherit';\n style.height = 'inherit';\n }\n this.map_ = map;\n if (this.map_) {\n this.map_.getOverlayContainer().appendChild(this.element_);\n }\n };\n /**\n * @param {import(\"../pixel.js\").Pixel} startPixel Start pixel.\n * @param {import(\"../pixel.js\").Pixel} endPixel End pixel.\n */\n RenderBox.prototype.setPixels = function (startPixel, endPixel) {\n this.startPixel_ = startPixel;\n this.endPixel_ = endPixel;\n this.createOrUpdateGeometry();\n this.render_();\n };\n /**\n * Creates or updates the cached geometry.\n */\n RenderBox.prototype.createOrUpdateGeometry = function () {\n var startPixel = this.startPixel_;\n var endPixel = this.endPixel_;\n var pixels = [\n startPixel,\n [startPixel[0], endPixel[1]],\n endPixel,\n [endPixel[0], startPixel[1]],\n ];\n var coordinates = pixels.map(this.map_.getCoordinateFromPixelInternal, this.map_);\n // close the polygon\n coordinates[4] = coordinates[0].slice();\n if (!this.geometry_) {\n this.geometry_ = new Polygon([coordinates]);\n }\n else {\n this.geometry_.setCoordinates([coordinates]);\n }\n };\n /**\n * @return {import(\"../geom/Polygon.js\").default} Geometry.\n */\n RenderBox.prototype.getGeometry = function () {\n return this.geometry_;\n };\n return RenderBox;\n}(Disposable));\nexport default RenderBox;\n//# sourceMappingURL=Box.js.map","var __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n if (typeof b !== \"function\" && b !== null)\n throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\n/**\n * @module ol/interaction/DragBox\n */\n// FIXME draw drag box\nimport Event from '../events/Event.js';\nimport PointerInteraction from './Pointer.js';\nimport RenderBox from '../render/Box.js';\nimport { mouseActionButton } from '../events/condition.js';\n/**\n * A function that takes a {@link module:ol/MapBrowserEvent} and two\n * {@link module:ol/pixel~Pixel}s and returns a `{boolean}`. If the condition is met,\n * true should be returned.\n * @typedef {function(this: ?, import(\"../MapBrowserEvent.js\").default, import(\"../pixel.js\").Pixel, import(\"../pixel.js\").Pixel):boolean} EndCondition\n */\n/**\n * @typedef {Object} Options\n * @property {string} [className='ol-dragbox'] CSS class name for styling the box.\n * @property {import(\"../events/condition.js\").Condition} [condition] A function that takes an {@link module:ol/MapBrowserEvent~MapBrowserEvent} and returns a boolean\n * to indicate whether that event should be handled.\n * Default is {@link ol/events/condition~mouseActionButton}.\n * @property {number} [minArea=64] The minimum area of the box in pixel, this value is used by the default\n * `boxEndCondition` function.\n * @property {EndCondition} [boxEndCondition] A function that takes a {@link module:ol/MapBrowserEvent~MapBrowserEvent} and two\n * {@link module:ol/pixel~Pixel}s to indicate whether a `boxend` event should be fired.\n * Default is `true` if the area of the box is bigger than the `minArea` option.\n * @property {function(this:DragBox, import(\"../MapBrowserEvent.js\").default):void} [onBoxEnd] Code to execute just\n * before `boxend` is fired.\n */\n/**\n * @enum {string}\n */\nvar DragBoxEventType = {\n /**\n * Triggered upon drag box start.\n * @event DragBoxEvent#boxstart\n * @api\n */\n BOXSTART: 'boxstart',\n /**\n * Triggered on drag when box is active.\n * @event DragBoxEvent#boxdrag\n * @api\n */\n BOXDRAG: 'boxdrag',\n /**\n * Triggered upon drag box end.\n * @event DragBoxEvent#boxend\n * @api\n */\n BOXEND: 'boxend',\n /**\n * Triggered upon drag box canceled.\n * @event DragBoxEvent#boxcancel\n * @api\n */\n BOXCANCEL: 'boxcancel',\n};\n/**\n * @classdesc\n * Events emitted by {@link module:ol/interaction/DragBox~DragBox} instances are instances of\n * this type.\n */\nvar DragBoxEvent = /** @class */ (function (_super) {\n __extends(DragBoxEvent, _super);\n /**\n * @param {string} type The event type.\n * @param {import(\"../coordinate.js\").Coordinate} coordinate The event coordinate.\n * @param {import(\"../MapBrowserEvent.js\").default} mapBrowserEvent Originating event.\n */\n function DragBoxEvent(type, coordinate, mapBrowserEvent) {\n var _this = _super.call(this, type) || this;\n /**\n * The coordinate of the drag event.\n * @const\n * @type {import(\"../coordinate.js\").Coordinate}\n * @api\n */\n _this.coordinate = coordinate;\n /**\n * @const\n * @type {import(\"../MapBrowserEvent.js\").default}\n * @api\n */\n _this.mapBrowserEvent = mapBrowserEvent;\n return _this;\n }\n return DragBoxEvent;\n}(Event));\nexport { DragBoxEvent };\n/***\n * @template Return\n * @typedef {import(\"../Observable\").OnSignature &\n * import(\"../Observable\").OnSignature &\n * import(\"../Observable\").OnSignature<'boxcancel'|'boxdrag'|'boxend'|'boxstart', DragBoxEvent, Return> &\n * import(\"../Observable\").CombinedOnSignature} DragBoxOnSignature\n */\n/**\n * @classdesc\n * Allows the user to draw a vector box by clicking and dragging on the map,\n * normally combined with an {@link module:ol/events/condition} that limits\n * it to when the shift or other key is held down. This is used, for example,\n * for zooming to a specific area of the map\n * (see {@link module:ol/interaction/DragZoom~DragZoom} and\n * {@link module:ol/interaction/DragRotateAndZoom}).\n *\n * @fires DragBoxEvent\n * @api\n */\nvar DragBox = /** @class */ (function (_super) {\n __extends(DragBox, _super);\n /**\n * @param {Options} [opt_options] Options.\n */\n function DragBox(opt_options) {\n var _this = _super.call(this) || this;\n /***\n * @type {DragBoxOnSignature}\n */\n _this.on;\n /***\n * @type {DragBoxOnSignature}\n */\n _this.once;\n /***\n * @type {DragBoxOnSignature}\n */\n _this.un;\n var options = opt_options ? opt_options : {};\n /**\n * @type {import(\"../render/Box.js\").default}\n * @private\n */\n _this.box_ = new RenderBox(options.className || 'ol-dragbox');\n /**\n * @type {number}\n * @private\n */\n _this.minArea_ = options.minArea !== undefined ? options.minArea : 64;\n if (options.onBoxEnd) {\n _this.onBoxEnd = options.onBoxEnd;\n }\n /**\n * @type {import(\"../pixel.js\").Pixel}\n * @private\n */\n _this.startPixel_ = null;\n /**\n * @private\n * @type {import(\"../events/condition.js\").Condition}\n */\n _this.condition_ = options.condition ? options.condition : mouseActionButton;\n /**\n * @private\n * @type {EndCondition}\n */\n _this.boxEndCondition_ = options.boxEndCondition\n ? options.boxEndCondition\n : _this.defaultBoxEndCondition;\n return _this;\n }\n /**\n * The default condition for determining whether the boxend event\n * should fire.\n * @param {import(\"../MapBrowserEvent.js\").default} mapBrowserEvent The originating MapBrowserEvent\n * leading to the box end.\n * @param {import(\"../pixel.js\").Pixel} startPixel The starting pixel of the box.\n * @param {import(\"../pixel.js\").Pixel} endPixel The end pixel of the box.\n * @return {boolean} Whether or not the boxend condition should be fired.\n */\n DragBox.prototype.defaultBoxEndCondition = function (mapBrowserEvent, startPixel, endPixel) {\n var width = endPixel[0] - startPixel[0];\n var height = endPixel[1] - startPixel[1];\n return width * width + height * height >= this.minArea_;\n };\n /**\n * Returns geometry of last drawn box.\n * @return {import(\"../geom/Polygon.js\").default} Geometry.\n * @api\n */\n DragBox.prototype.getGeometry = function () {\n return this.box_.getGeometry();\n };\n /**\n * Handle pointer drag events.\n * @param {import(\"../MapBrowserEvent.js\").default} mapBrowserEvent Event.\n */\n DragBox.prototype.handleDragEvent = function (mapBrowserEvent) {\n this.box_.setPixels(this.startPixel_, mapBrowserEvent.pixel);\n this.dispatchEvent(new DragBoxEvent(DragBoxEventType.BOXDRAG, mapBrowserEvent.coordinate, mapBrowserEvent));\n };\n /**\n * Handle pointer up events.\n * @param {import(\"../MapBrowserEvent.js\").default} mapBrowserEvent Event.\n * @return {boolean} If the event was consumed.\n */\n DragBox.prototype.handleUpEvent = function (mapBrowserEvent) {\n this.box_.setMap(null);\n var completeBox = this.boxEndCondition_(mapBrowserEvent, this.startPixel_, mapBrowserEvent.pixel);\n if (completeBox) {\n this.onBoxEnd(mapBrowserEvent);\n }\n this.dispatchEvent(new DragBoxEvent(completeBox ? DragBoxEventType.BOXEND : DragBoxEventType.BOXCANCEL, mapBrowserEvent.coordinate, mapBrowserEvent));\n return false;\n };\n /**\n * Handle pointer down events.\n * @param {import(\"../MapBrowserEvent.js\").default} mapBrowserEvent Event.\n * @return {boolean} If the event was consumed.\n */\n DragBox.prototype.handleDownEvent = function (mapBrowserEvent) {\n if (this.condition_(mapBrowserEvent)) {\n this.startPixel_ = mapBrowserEvent.pixel;\n this.box_.setMap(mapBrowserEvent.map);\n this.box_.setPixels(this.startPixel_, this.startPixel_);\n this.dispatchEvent(new DragBoxEvent(DragBoxEventType.BOXSTART, mapBrowserEvent.coordinate, mapBrowserEvent));\n return true;\n }\n else {\n return false;\n }\n };\n /**\n * Function to execute just before `onboxend` is fired\n * @param {import(\"../MapBrowserEvent.js\").default} event Event.\n */\n DragBox.prototype.onBoxEnd = function (event) { };\n return DragBox;\n}(PointerInteraction));\nexport default DragBox;\n//# sourceMappingURL=DragBox.js.map","var __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n if (typeof b !== \"function\" && b !== null)\n throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\n/**\n * @module ol/interaction/DragZoom\n */\nimport DragBox from './DragBox.js';\nimport { easeOut } from '../easing.js';\nimport { shiftKeyOnly } from '../events/condition.js';\n/**\n * @typedef {Object} Options\n * @property {string} [className='ol-dragzoom'] CSS class name for styling the\n * box.\n * @property {import(\"../events/condition.js\").Condition} [condition] A function that\n * takes an {@link module:ol/MapBrowserEvent~MapBrowserEvent} and returns a\n * boolean to indicate whether that event should be handled.\n * Default is {@link module:ol/events/condition.shiftKeyOnly}.\n * @property {number} [duration=200] Animation duration in milliseconds.\n * @property {boolean} [out=false] Use interaction for zooming out.\n * @property {number} [minArea=64] The minimum area of the box in pixel, this value is used by the parent default\n * `boxEndCondition` function.\n */\n/**\n * @classdesc\n * Allows the user to zoom the map by clicking and dragging on the map,\n * normally combined with an {@link module:ol/events/condition} that limits\n * it to when a key, shift by default, is held down.\n *\n * To change the style of the box, use CSS and the `.ol-dragzoom` selector, or\n * your custom one configured with `className`.\n * @api\n */\nvar DragZoom = /** @class */ (function (_super) {\n __extends(DragZoom, _super);\n /**\n * @param {Options} [opt_options] Options.\n */\n function DragZoom(opt_options) {\n var _this = this;\n var options = opt_options ? opt_options : {};\n var condition = options.condition ? options.condition : shiftKeyOnly;\n _this = _super.call(this, {\n condition: condition,\n className: options.className || 'ol-dragzoom',\n minArea: options.minArea,\n }) || this;\n /**\n * @private\n * @type {number}\n */\n _this.duration_ = options.duration !== undefined ? options.duration : 200;\n /**\n * @private\n * @type {boolean}\n */\n _this.out_ = options.out !== undefined ? options.out : false;\n return _this;\n }\n /**\n * Function to execute just before `onboxend` is fired\n * @param {import(\"../MapBrowserEvent.js\").default} event Event.\n */\n DragZoom.prototype.onBoxEnd = function (event) {\n var map = this.getMap();\n var view = /** @type {!import(\"../View.js\").default} */ (map.getView());\n var geometry = this.getGeometry();\n if (this.out_) {\n var rotatedExtent = view.rotatedExtentForGeometry(geometry);\n var resolution = view.getResolutionForExtentInternal(rotatedExtent);\n var factor = view.getResolution() / resolution;\n geometry = geometry.clone();\n geometry.scale(factor * factor);\n }\n view.fitInternal(geometry, {\n duration: this.duration_,\n easing: easeOut,\n });\n };\n return DragZoom;\n}(DragBox));\nexport default DragZoom;\n//# sourceMappingURL=DragZoom.js.map","/**\n * @module ol/events/KeyCode\n */\n/**\n * @enum {number}\n * @const\n */\nexport default {\n LEFT: 37,\n UP: 38,\n RIGHT: 39,\n DOWN: 40,\n};\n//# sourceMappingURL=KeyCode.js.map","var __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n if (typeof b !== \"function\" && b !== null)\n throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\n/**\n * @module ol/interaction/KeyboardPan\n */\nimport EventType from '../events/EventType.js';\nimport Interaction, { pan } from './Interaction.js';\nimport KeyCode from '../events/KeyCode.js';\nimport { noModifierKeys, targetNotEditable } from '../events/condition.js';\nimport { rotate as rotateCoordinate } from '../coordinate.js';\n/**\n * @typedef {Object} Options\n * @property {import(\"../events/condition.js\").Condition} [condition] A function that\n * takes an {@link module:ol/MapBrowserEvent~MapBrowserEvent} and returns a\n * boolean to indicate whether that event should be handled. Default is\n * {@link module:ol/events/condition.noModifierKeys} and\n * {@link module:ol/events/condition.targetNotEditable}.\n * @property {number} [duration=100] Animation duration in milliseconds.\n * @property {number} [pixelDelta=128] The amount of pixels to pan on each key\n * press.\n */\n/**\n * @classdesc\n * Allows the user to pan the map using keyboard arrows.\n * Note that, although this interaction is by default included in maps,\n * the keys can only be used when browser focus is on the element to which\n * the keyboard events are attached. By default, this is the map div,\n * though you can change this with the `keyboardEventTarget` in\n * {@link module:ol/Map~Map}. `document` never loses focus but, for any other\n * element, focus will have to be on, and returned to, this element if the keys\n * are to function.\n * See also {@link module:ol/interaction/KeyboardZoom~KeyboardZoom}.\n * @api\n */\nvar KeyboardPan = /** @class */ (function (_super) {\n __extends(KeyboardPan, _super);\n /**\n * @param {Options} [opt_options] Options.\n */\n function KeyboardPan(opt_options) {\n var _this = _super.call(this) || this;\n var options = opt_options || {};\n /**\n * @private\n * @param {import(\"../MapBrowserEvent.js\").default} mapBrowserEvent Browser event.\n * @return {boolean} Combined condition result.\n */\n _this.defaultCondition_ = function (mapBrowserEvent) {\n return (noModifierKeys(mapBrowserEvent) && targetNotEditable(mapBrowserEvent));\n };\n /**\n * @private\n * @type {import(\"../events/condition.js\").Condition}\n */\n _this.condition_ =\n options.condition !== undefined\n ? options.condition\n : _this.defaultCondition_;\n /**\n * @private\n * @type {number}\n */\n _this.duration_ = options.duration !== undefined ? options.duration : 100;\n /**\n * @private\n * @type {number}\n */\n _this.pixelDelta_ =\n options.pixelDelta !== undefined ? options.pixelDelta : 128;\n return _this;\n }\n /**\n * Handles the {@link module:ol/MapBrowserEvent map browser event} if it was a\n * `KeyEvent`, and decides the direction to pan to (if an arrow key was\n * pressed).\n * @param {import(\"../MapBrowserEvent.js\").default} mapBrowserEvent Map browser event.\n * @return {boolean} `false` to stop event propagation.\n * @this {KeyboardPan}\n */\n KeyboardPan.prototype.handleEvent = function (mapBrowserEvent) {\n var stopEvent = false;\n if (mapBrowserEvent.type == EventType.KEYDOWN) {\n var keyEvent = /** @type {KeyboardEvent} */ (mapBrowserEvent.originalEvent);\n var keyCode = keyEvent.keyCode;\n if (this.condition_(mapBrowserEvent) &&\n (keyCode == KeyCode.DOWN ||\n keyCode == KeyCode.LEFT ||\n keyCode == KeyCode.RIGHT ||\n keyCode == KeyCode.UP)) {\n var map = mapBrowserEvent.map;\n var view = map.getView();\n var mapUnitsDelta = view.getResolution() * this.pixelDelta_;\n var deltaX = 0, deltaY = 0;\n if (keyCode == KeyCode.DOWN) {\n deltaY = -mapUnitsDelta;\n }\n else if (keyCode == KeyCode.LEFT) {\n deltaX = -mapUnitsDelta;\n }\n else if (keyCode == KeyCode.RIGHT) {\n deltaX = mapUnitsDelta;\n }\n else {\n deltaY = mapUnitsDelta;\n }\n var delta = [deltaX, deltaY];\n rotateCoordinate(delta, view.getRotation());\n pan(view, delta, this.duration_);\n keyEvent.preventDefault();\n stopEvent = true;\n }\n }\n return !stopEvent;\n };\n return KeyboardPan;\n}(Interaction));\nexport default KeyboardPan;\n//# sourceMappingURL=KeyboardPan.js.map","var __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n if (typeof b !== \"function\" && b !== null)\n throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\n/**\n * @module ol/interaction/KeyboardZoom\n */\nimport EventType from '../events/EventType.js';\nimport Interaction, { zoomByDelta } from './Interaction.js';\nimport { targetNotEditable } from '../events/condition.js';\n/**\n * @typedef {Object} Options\n * @property {number} [duration=100] Animation duration in milliseconds.\n * @property {import(\"../events/condition.js\").Condition} [condition] A function that\n * takes an {@link module:ol/MapBrowserEvent~MapBrowserEvent} and returns a\n * boolean to indicate whether that event should be handled. Default is\n * {@link module:ol/events/condition.targetNotEditable}.\n * @property {number} [delta=1] The zoom level delta on each key press.\n */\n/**\n * @classdesc\n * Allows the user to zoom the map using keyboard + and -.\n * Note that, although this interaction is by default included in maps,\n * the keys can only be used when browser focus is on the element to which\n * the keyboard events are attached. By default, this is the map div,\n * though you can change this with the `keyboardEventTarget` in\n * {@link module:ol/Map~Map}. `document` never loses focus but, for any other\n * element, focus will have to be on, and returned to, this element if the keys\n * are to function.\n * See also {@link module:ol/interaction/KeyboardPan~KeyboardPan}.\n * @api\n */\nvar KeyboardZoom = /** @class */ (function (_super) {\n __extends(KeyboardZoom, _super);\n /**\n * @param {Options} [opt_options] Options.\n */\n function KeyboardZoom(opt_options) {\n var _this = _super.call(this) || this;\n var options = opt_options ? opt_options : {};\n /**\n * @private\n * @type {import(\"../events/condition.js\").Condition}\n */\n _this.condition_ = options.condition ? options.condition : targetNotEditable;\n /**\n * @private\n * @type {number}\n */\n _this.delta_ = options.delta ? options.delta : 1;\n /**\n * @private\n * @type {number}\n */\n _this.duration_ = options.duration !== undefined ? options.duration : 100;\n return _this;\n }\n /**\n * Handles the {@link module:ol/MapBrowserEvent map browser event} if it was a\n * `KeyEvent`, and decides whether to zoom in or out (depending on whether the\n * key pressed was '+' or '-').\n * @param {import(\"../MapBrowserEvent.js\").default} mapBrowserEvent Map browser event.\n * @return {boolean} `false` to stop event propagation.\n * @this {KeyboardZoom}\n */\n KeyboardZoom.prototype.handleEvent = function (mapBrowserEvent) {\n var stopEvent = false;\n if (mapBrowserEvent.type == EventType.KEYDOWN ||\n mapBrowserEvent.type == EventType.KEYPRESS) {\n var keyEvent = /** @type {KeyboardEvent} */ (mapBrowserEvent.originalEvent);\n var charCode = keyEvent.charCode;\n if (this.condition_(mapBrowserEvent) &&\n (charCode == '+'.charCodeAt(0) || charCode == '-'.charCodeAt(0))) {\n var map = mapBrowserEvent.map;\n var delta = charCode == '+'.charCodeAt(0) ? this.delta_ : -this.delta_;\n var view = map.getView();\n zoomByDelta(view, delta, undefined, this.duration_);\n keyEvent.preventDefault();\n stopEvent = true;\n }\n }\n return !stopEvent;\n };\n return KeyboardZoom;\n}(Interaction));\nexport default KeyboardZoom;\n//# sourceMappingURL=KeyboardZoom.js.map","/**\n * @module ol/Kinetic\n */\n/**\n * @classdesc\n * Implementation of inertial deceleration for map movement.\n *\n * @api\n */\nvar Kinetic = /** @class */ (function () {\n /**\n * @param {number} decay Rate of decay (must be negative).\n * @param {number} minVelocity Minimum velocity (pixels/millisecond).\n * @param {number} delay Delay to consider to calculate the kinetic\n * initial values (milliseconds).\n */\n function Kinetic(decay, minVelocity, delay) {\n /**\n * @private\n * @type {number}\n */\n this.decay_ = decay;\n /**\n * @private\n * @type {number}\n */\n this.minVelocity_ = minVelocity;\n /**\n * @private\n * @type {number}\n */\n this.delay_ = delay;\n /**\n * @private\n * @type {Array}\n */\n this.points_ = [];\n /**\n * @private\n * @type {number}\n */\n this.angle_ = 0;\n /**\n * @private\n * @type {number}\n */\n this.initialVelocity_ = 0;\n }\n /**\n * FIXME empty description for jsdoc\n */\n Kinetic.prototype.begin = function () {\n this.points_.length = 0;\n this.angle_ = 0;\n this.initialVelocity_ = 0;\n };\n /**\n * @param {number} x X.\n * @param {number} y Y.\n */\n Kinetic.prototype.update = function (x, y) {\n this.points_.push(x, y, Date.now());\n };\n /**\n * @return {boolean} Whether we should do kinetic animation.\n */\n Kinetic.prototype.end = function () {\n if (this.points_.length < 6) {\n // at least 2 points are required (i.e. there must be at least 6 elements\n // in the array)\n return false;\n }\n var delay = Date.now() - this.delay_;\n var lastIndex = this.points_.length - 3;\n if (this.points_[lastIndex + 2] < delay) {\n // the last tracked point is too old, which means that the user stopped\n // panning before releasing the map\n return false;\n }\n // get the first point which still falls into the delay time\n var firstIndex = lastIndex - 3;\n while (firstIndex > 0 && this.points_[firstIndex + 2] > delay) {\n firstIndex -= 3;\n }\n var duration = this.points_[lastIndex + 2] - this.points_[firstIndex + 2];\n // we don't want a duration of 0 (divide by zero)\n // we also make sure the user panned for a duration of at least one frame\n // (1/60s) to compute sane displacement values\n if (duration < 1000 / 60) {\n return false;\n }\n var dx = this.points_[lastIndex] - this.points_[firstIndex];\n var dy = this.points_[lastIndex + 1] - this.points_[firstIndex + 1];\n this.angle_ = Math.atan2(dy, dx);\n this.initialVelocity_ = Math.sqrt(dx * dx + dy * dy) / duration;\n return this.initialVelocity_ > this.minVelocity_;\n };\n /**\n * @return {number} Total distance travelled (pixels).\n */\n Kinetic.prototype.getDistance = function () {\n return (this.minVelocity_ - this.initialVelocity_) / this.decay_;\n };\n /**\n * @return {number} Angle of the kinetic panning animation (radians).\n */\n Kinetic.prototype.getAngle = function () {\n return this.angle_;\n };\n return Kinetic;\n}());\nexport default Kinetic;\n//# sourceMappingURL=Kinetic.js.map","var __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n if (typeof b !== \"function\" && b !== null)\n throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\n/**\n * @module ol/interaction/MouseWheelZoom\n */\nimport EventType from '../events/EventType.js';\nimport Interaction, { zoomByDelta } from './Interaction.js';\nimport { DEVICE_PIXEL_RATIO, FIREFOX } from '../has.js';\nimport { all, always, focusWithTabindex } from '../events/condition.js';\nimport { clamp } from '../math.js';\n/**\n * @enum {string}\n */\nexport var Mode = {\n TRACKPAD: 'trackpad',\n WHEEL: 'wheel',\n};\n/**\n * @typedef {Object} Options\n * @property {import(\"../events/condition.js\").Condition} [condition] A function that\n * takes an {@link module:ol/MapBrowserEvent~MapBrowserEvent} and returns a\n * boolean to indicate whether that event should be handled. Default is\n * {@link module:ol/events/condition.always}.\n * @property {boolean} [onFocusOnly=false] When the map's target has a `tabindex` attribute set,\n * the interaction will only handle events when the map has the focus.\n * @property {number} [maxDelta=1] Maximum mouse wheel delta.\n * @property {number} [duration=250] Animation duration in milliseconds.\n * @property {number} [timeout=80] Mouse wheel timeout duration in milliseconds.\n * @property {boolean} [useAnchor=true] Enable zooming using the mouse's\n * location as the anchor. When set to `false`, zooming in and out will zoom to\n * the center of the screen instead of zooming on the mouse's location.\n * @property {boolean} [constrainResolution=false] If true, the mouse wheel zoom\n * event will always animate to the closest zoom level after an interaction;\n * false means intermediary zoom levels are allowed.\n */\n/**\n * @classdesc\n * Allows the user to zoom the map by scrolling the mouse wheel.\n * @api\n */\nvar MouseWheelZoom = /** @class */ (function (_super) {\n __extends(MouseWheelZoom, _super);\n /**\n * @param {Options} [opt_options] Options.\n */\n function MouseWheelZoom(opt_options) {\n var _this = this;\n var options = opt_options ? opt_options : {};\n _this = _super.call(this, \n /** @type {import(\"./Interaction.js\").InteractionOptions} */ (options)) || this;\n /**\n * @private\n * @type {number}\n */\n _this.totalDelta_ = 0;\n /**\n * @private\n * @type {number}\n */\n _this.lastDelta_ = 0;\n /**\n * @private\n * @type {number}\n */\n _this.maxDelta_ = options.maxDelta !== undefined ? options.maxDelta : 1;\n /**\n * @private\n * @type {number}\n */\n _this.duration_ = options.duration !== undefined ? options.duration : 250;\n /**\n * @private\n * @type {number}\n */\n _this.timeout_ = options.timeout !== undefined ? options.timeout : 80;\n /**\n * @private\n * @type {boolean}\n */\n _this.useAnchor_ =\n options.useAnchor !== undefined ? options.useAnchor : true;\n /**\n * @private\n * @type {boolean}\n */\n _this.constrainResolution_ =\n options.constrainResolution !== undefined\n ? options.constrainResolution\n : false;\n var condition = options.condition ? options.condition : always;\n /**\n * @private\n * @type {import(\"../events/condition.js\").Condition}\n */\n _this.condition_ = options.onFocusOnly\n ? all(focusWithTabindex, condition)\n : condition;\n /**\n * @private\n * @type {?import(\"../coordinate.js\").Coordinate}\n */\n _this.lastAnchor_ = null;\n /**\n * @private\n * @type {number|undefined}\n */\n _this.startTime_ = undefined;\n /**\n * @private\n * @type {?}\n */\n _this.timeoutId_;\n /**\n * @private\n * @type {Mode|undefined}\n */\n _this.mode_ = undefined;\n /**\n * Trackpad events separated by this delay will be considered separate\n * interactions.\n * @type {number}\n */\n _this.trackpadEventGap_ = 400;\n /**\n * @type {?}\n */\n _this.trackpadTimeoutId_;\n /**\n * The number of delta values per zoom level\n * @private\n * @type {number}\n */\n _this.deltaPerZoom_ = 300;\n return _this;\n }\n /**\n * @private\n */\n MouseWheelZoom.prototype.endInteraction_ = function () {\n this.trackpadTimeoutId_ = undefined;\n var view = this.getMap().getView();\n view.endInteraction(undefined, this.lastDelta_ ? (this.lastDelta_ > 0 ? 1 : -1) : 0, this.lastAnchor_);\n };\n /**\n * Handles the {@link module:ol/MapBrowserEvent map browser event} (if it was a mousewheel-event) and eventually\n * zooms the map.\n * @param {import(\"../MapBrowserEvent.js\").default} mapBrowserEvent Map browser event.\n * @return {boolean} `false` to stop event propagation.\n */\n MouseWheelZoom.prototype.handleEvent = function (mapBrowserEvent) {\n if (!this.condition_(mapBrowserEvent)) {\n return true;\n }\n var type = mapBrowserEvent.type;\n if (type !== EventType.WHEEL) {\n return true;\n }\n var map = mapBrowserEvent.map;\n var wheelEvent = /** @type {WheelEvent} */ (mapBrowserEvent.originalEvent);\n wheelEvent.preventDefault();\n if (this.useAnchor_) {\n this.lastAnchor_ = mapBrowserEvent.coordinate;\n }\n // Delta normalisation inspired by\n // https://github.com/mapbox/mapbox-gl-js/blob/001c7b9/js/ui/handler/scroll_zoom.js\n var delta;\n if (mapBrowserEvent.type == EventType.WHEEL) {\n delta = wheelEvent.deltaY;\n if (FIREFOX && wheelEvent.deltaMode === WheelEvent.DOM_DELTA_PIXEL) {\n delta /= DEVICE_PIXEL_RATIO;\n }\n if (wheelEvent.deltaMode === WheelEvent.DOM_DELTA_LINE) {\n delta *= 40;\n }\n }\n if (delta === 0) {\n return false;\n }\n else {\n this.lastDelta_ = delta;\n }\n var now = Date.now();\n if (this.startTime_ === undefined) {\n this.startTime_ = now;\n }\n if (!this.mode_ || now - this.startTime_ > this.trackpadEventGap_) {\n this.mode_ = Math.abs(delta) < 4 ? Mode.TRACKPAD : Mode.WHEEL;\n }\n var view = map.getView();\n if (this.mode_ === Mode.TRACKPAD &&\n !(view.getConstrainResolution() || this.constrainResolution_)) {\n if (this.trackpadTimeoutId_) {\n clearTimeout(this.trackpadTimeoutId_);\n }\n else {\n if (view.getAnimating()) {\n view.cancelAnimations();\n }\n view.beginInteraction();\n }\n this.trackpadTimeoutId_ = setTimeout(this.endInteraction_.bind(this), this.timeout_);\n view.adjustZoom(-delta / this.deltaPerZoom_, this.lastAnchor_);\n this.startTime_ = now;\n return false;\n }\n this.totalDelta_ += delta;\n var timeLeft = Math.max(this.timeout_ - (now - this.startTime_), 0);\n clearTimeout(this.timeoutId_);\n this.timeoutId_ = setTimeout(this.handleWheelZoom_.bind(this, map), timeLeft);\n return false;\n };\n /**\n * @private\n * @param {import(\"../PluggableMap.js\").default} map Map.\n */\n MouseWheelZoom.prototype.handleWheelZoom_ = function (map) {\n var view = map.getView();\n if (view.getAnimating()) {\n view.cancelAnimations();\n }\n var delta = -clamp(this.totalDelta_, -this.maxDelta_ * this.deltaPerZoom_, this.maxDelta_ * this.deltaPerZoom_) / this.deltaPerZoom_;\n if (view.getConstrainResolution() || this.constrainResolution_) {\n // view has a zoom constraint, zoom by 1\n delta = delta ? (delta > 0 ? 1 : -1) : 0;\n }\n zoomByDelta(view, delta, this.lastAnchor_, this.duration_);\n this.mode_ = undefined;\n this.totalDelta_ = 0;\n this.lastAnchor_ = null;\n this.startTime_ = undefined;\n this.timeoutId_ = undefined;\n };\n /**\n * Enable or disable using the mouse's location as an anchor when zooming\n * @param {boolean} useAnchor true to zoom to the mouse's location, false\n * to zoom to the center of the map\n * @api\n */\n MouseWheelZoom.prototype.setMouseAnchor = function (useAnchor) {\n this.useAnchor_ = useAnchor;\n if (!useAnchor) {\n this.lastAnchor_ = null;\n }\n };\n return MouseWheelZoom;\n}(Interaction));\nexport default MouseWheelZoom;\n//# sourceMappingURL=MouseWheelZoom.js.map","var __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n if (typeof b !== \"function\" && b !== null)\n throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\n/**\n * @module ol/interaction/PinchRotate\n */\nimport PointerInteraction, { centroid as centroidFromPointers, } from './Pointer.js';\nimport { FALSE } from '../functions.js';\nimport { disable } from '../rotationconstraint.js';\n/**\n * @typedef {Object} Options\n * @property {number} [duration=250] The duration of the animation in\n * milliseconds.\n * @property {number} [threshold=0.3] Minimal angle in radians to start a rotation.\n */\n/**\n * @classdesc\n * Allows the user to rotate the map by twisting with two fingers\n * on a touch screen.\n * @api\n */\nvar PinchRotate = /** @class */ (function (_super) {\n __extends(PinchRotate, _super);\n /**\n * @param {Options} [opt_options] Options.\n */\n function PinchRotate(opt_options) {\n var _this = this;\n var options = opt_options ? opt_options : {};\n var pointerOptions = /** @type {import(\"./Pointer.js\").Options} */ (options);\n if (!pointerOptions.stopDown) {\n pointerOptions.stopDown = FALSE;\n }\n _this = _super.call(this, pointerOptions) || this;\n /**\n * @private\n * @type {import(\"../coordinate.js\").Coordinate}\n */\n _this.anchor_ = null;\n /**\n * @private\n * @type {number|undefined}\n */\n _this.lastAngle_ = undefined;\n /**\n * @private\n * @type {boolean}\n */\n _this.rotating_ = false;\n /**\n * @private\n * @type {number}\n */\n _this.rotationDelta_ = 0.0;\n /**\n * @private\n * @type {number}\n */\n _this.threshold_ = options.threshold !== undefined ? options.threshold : 0.3;\n /**\n * @private\n * @type {number}\n */\n _this.duration_ = options.duration !== undefined ? options.duration : 250;\n return _this;\n }\n /**\n * Handle pointer drag events.\n * @param {import(\"../MapBrowserEvent.js\").default} mapBrowserEvent Event.\n */\n PinchRotate.prototype.handleDragEvent = function (mapBrowserEvent) {\n var rotationDelta = 0.0;\n var touch0 = this.targetPointers[0];\n var touch1 = this.targetPointers[1];\n // angle between touches\n var angle = Math.atan2(touch1.clientY - touch0.clientY, touch1.clientX - touch0.clientX);\n if (this.lastAngle_ !== undefined) {\n var delta = angle - this.lastAngle_;\n this.rotationDelta_ += delta;\n if (!this.rotating_ && Math.abs(this.rotationDelta_) > this.threshold_) {\n this.rotating_ = true;\n }\n rotationDelta = delta;\n }\n this.lastAngle_ = angle;\n var map = mapBrowserEvent.map;\n var view = map.getView();\n if (view.getConstraints().rotation === disable) {\n return;\n }\n // rotate anchor point.\n // FIXME: should be the intersection point between the lines:\n // touch0,touch1 and previousTouch0,previousTouch1\n var viewportPosition = map.getViewport().getBoundingClientRect();\n var centroid = centroidFromPointers(this.targetPointers);\n centroid[0] -= viewportPosition.left;\n centroid[1] -= viewportPosition.top;\n this.anchor_ = map.getCoordinateFromPixelInternal(centroid);\n // rotate\n if (this.rotating_) {\n map.render();\n view.adjustRotationInternal(rotationDelta, this.anchor_);\n }\n };\n /**\n * Handle pointer up events.\n * @param {import(\"../MapBrowserEvent.js\").default} mapBrowserEvent Event.\n * @return {boolean} If the event was consumed.\n */\n PinchRotate.prototype.handleUpEvent = function (mapBrowserEvent) {\n if (this.targetPointers.length < 2) {\n var map = mapBrowserEvent.map;\n var view = map.getView();\n view.endInteraction(this.duration_);\n return false;\n }\n else {\n return true;\n }\n };\n /**\n * Handle pointer down events.\n * @param {import(\"../MapBrowserEvent.js\").default} mapBrowserEvent Event.\n * @return {boolean} If the event was consumed.\n */\n PinchRotate.prototype.handleDownEvent = function (mapBrowserEvent) {\n if (this.targetPointers.length >= 2) {\n var map = mapBrowserEvent.map;\n this.anchor_ = null;\n this.lastAngle_ = undefined;\n this.rotating_ = false;\n this.rotationDelta_ = 0.0;\n if (!this.handlingDownUpSequence) {\n map.getView().beginInteraction();\n }\n return true;\n }\n else {\n return false;\n }\n };\n return PinchRotate;\n}(PointerInteraction));\nexport default PinchRotate;\n//# sourceMappingURL=PinchRotate.js.map","var __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n if (typeof b !== \"function\" && b !== null)\n throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\n/**\n * @module ol/interaction/PinchZoom\n */\nimport PointerInteraction, { centroid as centroidFromPointers, } from './Pointer.js';\nimport { FALSE } from '../functions.js';\n/**\n * @typedef {Object} Options\n * @property {number} [duration=400] Animation duration in milliseconds.\n */\n/**\n * @classdesc\n * Allows the user to zoom the map by pinching with two fingers\n * on a touch screen.\n * @api\n */\nvar PinchZoom = /** @class */ (function (_super) {\n __extends(PinchZoom, _super);\n /**\n * @param {Options} [opt_options] Options.\n */\n function PinchZoom(opt_options) {\n var _this = this;\n var options = opt_options ? opt_options : {};\n var pointerOptions = /** @type {import(\"./Pointer.js\").Options} */ (options);\n if (!pointerOptions.stopDown) {\n pointerOptions.stopDown = FALSE;\n }\n _this = _super.call(this, pointerOptions) || this;\n /**\n * @private\n * @type {import(\"../coordinate.js\").Coordinate}\n */\n _this.anchor_ = null;\n /**\n * @private\n * @type {number}\n */\n _this.duration_ = options.duration !== undefined ? options.duration : 400;\n /**\n * @private\n * @type {number|undefined}\n */\n _this.lastDistance_ = undefined;\n /**\n * @private\n * @type {number}\n */\n _this.lastScaleDelta_ = 1;\n return _this;\n }\n /**\n * Handle pointer drag events.\n * @param {import(\"../MapBrowserEvent.js\").default} mapBrowserEvent Event.\n */\n PinchZoom.prototype.handleDragEvent = function (mapBrowserEvent) {\n var scaleDelta = 1.0;\n var touch0 = this.targetPointers[0];\n var touch1 = this.targetPointers[1];\n var dx = touch0.clientX - touch1.clientX;\n var dy = touch0.clientY - touch1.clientY;\n // distance between touches\n var distance = Math.sqrt(dx * dx + dy * dy);\n if (this.lastDistance_ !== undefined) {\n scaleDelta = this.lastDistance_ / distance;\n }\n this.lastDistance_ = distance;\n var map = mapBrowserEvent.map;\n var view = map.getView();\n if (scaleDelta != 1.0) {\n this.lastScaleDelta_ = scaleDelta;\n }\n // scale anchor point.\n var viewportPosition = map.getViewport().getBoundingClientRect();\n var centroid = centroidFromPointers(this.targetPointers);\n centroid[0] -= viewportPosition.left;\n centroid[1] -= viewportPosition.top;\n this.anchor_ = map.getCoordinateFromPixelInternal(centroid);\n // scale, bypass the resolution constraint\n map.render();\n view.adjustResolutionInternal(scaleDelta, this.anchor_);\n };\n /**\n * Handle pointer up events.\n * @param {import(\"../MapBrowserEvent.js\").default} mapBrowserEvent Event.\n * @return {boolean} If the event was consumed.\n */\n PinchZoom.prototype.handleUpEvent = function (mapBrowserEvent) {\n if (this.targetPointers.length < 2) {\n var map = mapBrowserEvent.map;\n var view = map.getView();\n var direction = this.lastScaleDelta_ > 1 ? 1 : -1;\n view.endInteraction(this.duration_, direction);\n return false;\n }\n else {\n return true;\n }\n };\n /**\n * Handle pointer down events.\n * @param {import(\"../MapBrowserEvent.js\").default} mapBrowserEvent Event.\n * @return {boolean} If the event was consumed.\n */\n PinchZoom.prototype.handleDownEvent = function (mapBrowserEvent) {\n if (this.targetPointers.length >= 2) {\n var map = mapBrowserEvent.map;\n this.anchor_ = null;\n this.lastDistance_ = undefined;\n this.lastScaleDelta_ = 1;\n if (!this.handlingDownUpSequence) {\n map.getView().beginInteraction();\n }\n return true;\n }\n else {\n return false;\n }\n };\n return PinchZoom;\n}(PointerInteraction));\nexport default PinchZoom;\n//# sourceMappingURL=PinchZoom.js.map","var __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n if (typeof b !== \"function\" && b !== null)\n throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\n/**\n * @module ol/Map\n */\nimport CompositeMapRenderer from './renderer/Composite.js';\nimport PluggableMap from './PluggableMap.js';\nimport { assign } from './obj.js';\nimport { defaults as defaultControls } from './control.js';\nimport { defaults as defaultInteractions } from './interaction.js';\n/**\n * @classdesc\n * The map is the core component of OpenLayers. For a map to render, a view,\n * one or more layers, and a target container are needed:\n *\n * import Map from 'ol/Map';\n * import View from 'ol/View';\n * import TileLayer from 'ol/layer/Tile';\n * import OSM from 'ol/source/OSM';\n *\n * var map = new Map({\n * view: new View({\n * center: [0, 0],\n * zoom: 1\n * }),\n * layers: [\n * new TileLayer({\n * source: new OSM()\n * })\n * ],\n * target: 'map'\n * });\n *\n * The above snippet creates a map using a {@link module:ol/layer/Tile} to\n * display {@link module:ol/source/OSM~OSM} OSM data and render it to a DOM\n * element with the id `map`.\n *\n * The constructor places a viewport container (with CSS class name\n * `ol-viewport`) in the target element (see `getViewport()`), and then two\n * further elements within the viewport: one with CSS class name\n * `ol-overlaycontainer-stopevent` for controls and some overlays, and one with\n * CSS class name `ol-overlaycontainer` for other overlays (see the `stopEvent`\n * option of {@link module:ol/Overlay~Overlay} for the difference). The map\n * itself is placed in a further element within the viewport.\n *\n * Layers are stored as a {@link module:ol/Collection~Collection} in\n * layerGroups. A top-level group is provided by the library. This is what is\n * accessed by `getLayerGroup` and `setLayerGroup`. Layers entered in the\n * options are added to this group, and `addLayer` and `removeLayer` change the\n * layer collection in the group. `getLayers` is a convenience function for\n * `getLayerGroup().getLayers()`. Note that {@link module:ol/layer/Group~Group}\n * is a subclass of {@link module:ol/layer/Base}, so layers entered in the\n * options or added with `addLayer` can be groups, which can contain further\n * groups, and so on.\n *\n * @api\n */\nvar Map = /** @class */ (function (_super) {\n __extends(Map, _super);\n /**\n * @param {import(\"./PluggableMap.js\").MapOptions} options Map options.\n */\n function Map(options) {\n var _this = this;\n options = assign({}, options);\n if (!options.controls) {\n options.controls = defaultControls();\n }\n if (!options.interactions) {\n options.interactions = defaultInteractions({\n onFocusOnly: true,\n });\n }\n _this = _super.call(this, options) || this;\n return _this;\n }\n Map.prototype.createRenderer = function () {\n return new CompositeMapRenderer(this);\n };\n return Map;\n}(PluggableMap));\nexport default Map;\n//# sourceMappingURL=Map.js.map","/**\n * @module ol/control\n */\nimport Attribution from './control/Attribution.js';\nimport Collection from './Collection.js';\nimport Rotate from './control/Rotate.js';\nimport Zoom from './control/Zoom.js';\nexport { default as Attribution } from './control/Attribution.js';\nexport { default as Control } from './control/Control.js';\nexport { default as FullScreen } from './control/FullScreen.js';\nexport { default as MousePosition } from './control/MousePosition.js';\nexport { default as OverviewMap } from './control/OverviewMap.js';\nexport { default as Rotate } from './control/Rotate.js';\nexport { default as ScaleLine } from './control/ScaleLine.js';\nexport { default as Zoom } from './control/Zoom.js';\nexport { default as ZoomSlider } from './control/ZoomSlider.js';\nexport { default as ZoomToExtent } from './control/ZoomToExtent.js';\n/**\n * @typedef {Object} DefaultsOptions\n * @property {boolean} [attribution=true] Include\n * {@link module:ol/control/Attribution~Attribution}.\n * @property {import(\"./control/Attribution.js\").Options} [attributionOptions]\n * Options for {@link module:ol/control/Attribution~Attribution}.\n * @property {boolean} [rotate=true] Include\n * {@link module:ol/control/Rotate~Rotate}.\n * @property {import(\"./control/Rotate.js\").Options} [rotateOptions] Options\n * for {@link module:ol/control/Rotate~Rotate}.\n * @property {boolean} [zoom] Include {@link module:ol/control/Zoom~Zoom}.\n * @property {import(\"./control/Zoom.js\").Options} [zoomOptions] Options for\n * {@link module:ol/control/Zoom~Zoom}.\n * @api\n */\n/**\n * Set of controls included in maps by default. Unless configured otherwise,\n * this returns a collection containing an instance of each of the following\n * controls:\n * * {@link module:ol/control/Zoom~Zoom}\n * * {@link module:ol/control/Rotate~Rotate}\n * * {@link module:ol/control/Attribution~Attribution}\n *\n * @param {DefaultsOptions} [opt_options]\n * Defaults options.\n * @return {Collection}\n * Controls.\n * @api\n */\nexport function defaults(opt_options) {\n var options = opt_options ? opt_options : {};\n var controls = new Collection();\n var zoomControl = options.zoom !== undefined ? options.zoom : true;\n if (zoomControl) {\n controls.push(new Zoom(options.zoomOptions));\n }\n var rotateControl = options.rotate !== undefined ? options.rotate : true;\n if (rotateControl) {\n controls.push(new Rotate(options.rotateOptions));\n }\n var attributionControl = options.attribution !== undefined ? options.attribution : true;\n if (attributionControl) {\n controls.push(new Attribution(options.attributionOptions));\n }\n return controls;\n}\n//# sourceMappingURL=control.js.map","/**\n * @module ol/interaction\n */\nimport Collection from './Collection.js';\nimport DoubleClickZoom from './interaction/DoubleClickZoom.js';\nimport DragPan from './interaction/DragPan.js';\nimport DragRotate from './interaction/DragRotate.js';\nimport DragZoom from './interaction/DragZoom.js';\nimport KeyboardPan from './interaction/KeyboardPan.js';\nimport KeyboardZoom from './interaction/KeyboardZoom.js';\nimport Kinetic from './Kinetic.js';\nimport MouseWheelZoom from './interaction/MouseWheelZoom.js';\nimport PinchRotate from './interaction/PinchRotate.js';\nimport PinchZoom from './interaction/PinchZoom.js';\nexport { default as DoubleClickZoom } from './interaction/DoubleClickZoom.js';\nexport { default as DragAndDrop } from './interaction/DragAndDrop.js';\nexport { default as DragBox } from './interaction/DragBox.js';\nexport { default as DragPan } from './interaction/DragPan.js';\nexport { default as DragRotate } from './interaction/DragRotate.js';\nexport { default as DragRotateAndZoom } from './interaction/DragRotateAndZoom.js';\nexport { default as DragZoom } from './interaction/DragZoom.js';\nexport { default as Draw } from './interaction/Draw.js';\nexport { default as Extent } from './interaction/Extent.js';\nexport { default as Interaction } from './interaction/Interaction.js';\nexport { default as KeyboardPan } from './interaction/KeyboardPan.js';\nexport { default as KeyboardZoom } from './interaction/KeyboardZoom.js';\nexport { default as Modify } from './interaction/Modify.js';\nexport { default as MouseWheelZoom } from './interaction/MouseWheelZoom.js';\nexport { default as PinchRotate } from './interaction/PinchRotate.js';\nexport { default as PinchZoom } from './interaction/PinchZoom.js';\nexport { default as Pointer } from './interaction/Pointer.js';\nexport { default as Select } from './interaction/Select.js';\nexport { default as Snap } from './interaction/Snap.js';\nexport { default as Translate } from './interaction/Translate.js';\n/**\n * @typedef {Object} DefaultsOptions\n * @property {boolean} [altShiftDragRotate=true] Whether Alt-Shift-drag rotate is\n * desired.\n * @property {boolean} [onFocusOnly=false] Interact only when the map has the\n * focus. This affects the `MouseWheelZoom` and `DragPan` interactions and is\n * useful when page scroll is desired for maps that do not have the browser's\n * focus.\n * @property {boolean} [doubleClickZoom=true] Whether double click zoom is\n * desired.\n * @property {boolean} [keyboard=true] Whether keyboard interaction is desired.\n * @property {boolean} [mouseWheelZoom=true] Whether mousewheel zoom is desired.\n * @property {boolean} [shiftDragZoom=true] Whether Shift-drag zoom is desired.\n * @property {boolean} [dragPan=true] Whether drag pan is desired.\n * @property {boolean} [pinchRotate=true] Whether pinch rotate is desired.\n * @property {boolean} [pinchZoom=true] Whether pinch zoom is desired.\n * @property {number} [zoomDelta] Zoom level delta when using keyboard or double click zoom.\n * @property {number} [zoomDuration] Duration of the zoom animation in\n * milliseconds.\n */\n/**\n * Set of interactions included in maps by default. Specific interactions can be\n * excluded by setting the appropriate option to false in the constructor\n * options, but the order of the interactions is fixed. If you want to specify\n * a different order for interactions, you will need to create your own\n * {@link module:ol/interaction/Interaction} instances and insert\n * them into a {@link module:ol/Collection} in the order you want\n * before creating your {@link module:ol/Map~Map} instance. Changing the order can\n * be of interest if the event propagation needs to be stopped at a point.\n * The default set of interactions, in sequence, is:\n * * {@link module:ol/interaction/DragRotate~DragRotate}\n * * {@link module:ol/interaction/DoubleClickZoom~DoubleClickZoom}\n * * {@link module:ol/interaction/DragPan~DragPan}\n * * {@link module:ol/interaction/PinchRotate~PinchRotate}\n * * {@link module:ol/interaction/PinchZoom~PinchZoom}\n * * {@link module:ol/interaction/KeyboardPan~KeyboardPan}\n * * {@link module:ol/interaction/KeyboardZoom~KeyboardZoom}\n * * {@link module:ol/interaction/MouseWheelZoom~MouseWheelZoom}\n * * {@link module:ol/interaction/DragZoom~DragZoom}\n *\n * @param {DefaultsOptions} [opt_options] Defaults options.\n * @return {import(\"./Collection.js\").default}\n * A collection of interactions to be used with the {@link module:ol/Map~Map}\n * constructor's `interactions` option.\n * @api\n */\nexport function defaults(opt_options) {\n var options = opt_options ? opt_options : {};\n var interactions = new Collection();\n var kinetic = new Kinetic(-0.005, 0.05, 100);\n var altShiftDragRotate = options.altShiftDragRotate !== undefined\n ? options.altShiftDragRotate\n : true;\n if (altShiftDragRotate) {\n interactions.push(new DragRotate());\n }\n var doubleClickZoom = options.doubleClickZoom !== undefined ? options.doubleClickZoom : true;\n if (doubleClickZoom) {\n interactions.push(new DoubleClickZoom({\n delta: options.zoomDelta,\n duration: options.zoomDuration,\n }));\n }\n var dragPan = options.dragPan !== undefined ? options.dragPan : true;\n if (dragPan) {\n interactions.push(new DragPan({\n onFocusOnly: options.onFocusOnly,\n kinetic: kinetic,\n }));\n }\n var pinchRotate = options.pinchRotate !== undefined ? options.pinchRotate : true;\n if (pinchRotate) {\n interactions.push(new PinchRotate());\n }\n var pinchZoom = options.pinchZoom !== undefined ? options.pinchZoom : true;\n if (pinchZoom) {\n interactions.push(new PinchZoom({\n duration: options.zoomDuration,\n }));\n }\n var keyboard = options.keyboard !== undefined ? options.keyboard : true;\n if (keyboard) {\n interactions.push(new KeyboardPan());\n interactions.push(new KeyboardZoom({\n delta: options.zoomDelta,\n duration: options.zoomDuration,\n }));\n }\n var mouseWheelZoom = options.mouseWheelZoom !== undefined ? options.mouseWheelZoom : true;\n if (mouseWheelZoom) {\n interactions.push(new MouseWheelZoom({\n onFocusOnly: options.onFocusOnly,\n duration: options.zoomDuration,\n }));\n }\n var shiftDragZoom = options.shiftDragZoom !== undefined ? options.shiftDragZoom : true;\n if (shiftDragZoom) {\n interactions.push(new DragZoom({\n duration: options.zoomDuration,\n }));\n }\n return interactions;\n}\n//# sourceMappingURL=interaction.js.map","/**\n * @module ol/MapBrowserEventType\n */\nimport EventType from './events/EventType.js';\n/**\n * Constants for event names.\n * @enum {string}\n */\nexport default {\n /**\n * A true single click with no dragging and no double click. Note that this\n * event is delayed by 250 ms to ensure that it is not a double click.\n * @event module:ol/MapBrowserEvent~MapBrowserEvent#singleclick\n * @api\n */\n SINGLECLICK: 'singleclick',\n /**\n * A click with no dragging. A double click will fire two of this.\n * @event module:ol/MapBrowserEvent~MapBrowserEvent#click\n * @api\n */\n CLICK: EventType.CLICK,\n /**\n * A true double click, with no dragging.\n * @event module:ol/MapBrowserEvent~MapBrowserEvent#dblclick\n * @api\n */\n DBLCLICK: EventType.DBLCLICK,\n /**\n * Triggered when a pointer is dragged.\n * @event module:ol/MapBrowserEvent~MapBrowserEvent#pointerdrag\n * @api\n */\n POINTERDRAG: 'pointerdrag',\n /**\n * Triggered when a pointer is moved. Note that on touch devices this is\n * triggered when the map is panned, so is not the same as mousemove.\n * @event module:ol/MapBrowserEvent~MapBrowserEvent#pointermove\n * @api\n */\n POINTERMOVE: 'pointermove',\n POINTERDOWN: 'pointerdown',\n POINTERUP: 'pointerup',\n POINTEROVER: 'pointerover',\n POINTEROUT: 'pointerout',\n POINTERENTER: 'pointerenter',\n POINTERLEAVE: 'pointerleave',\n POINTERCANCEL: 'pointercancel',\n};\n/***\n * @typedef {'singleclick'|'click'|'dblclick'|'pointerdrag'|'pointermove'} Types\n */\n//# sourceMappingURL=MapBrowserEventType.js.map","/**\n * @module ol/MapEventType\n */\n/**\n * @enum {string}\n */\nexport default {\n /**\n * Triggered after a map frame is rendered.\n * @event module:ol/MapEvent~MapEvent#postrender\n * @api\n */\n POSTRENDER: 'postrender',\n /**\n * Triggered when the map starts moving.\n * @event module:ol/MapEvent~MapEvent#movestart\n * @api\n */\n MOVESTART: 'movestart',\n /**\n * Triggered after the map is moved.\n * @event module:ol/MapEvent~MapEvent#moveend\n * @api\n */\n MOVEEND: 'moveend',\n};\n/***\n * @typedef {'postrender'|'movestart'|'moveend'} Types\n */\n//# sourceMappingURL=MapEventType.js.map","/**\n * @module ol/TileRange\n */\n/**\n * A representation of a contiguous block of tiles. A tile range is specified\n * by its min/max tile coordinates and is inclusive of coordinates.\n */\nvar TileRange = /** @class */ (function () {\n /**\n * @param {number} minX Minimum X.\n * @param {number} maxX Maximum X.\n * @param {number} minY Minimum Y.\n * @param {number} maxY Maximum Y.\n */\n function TileRange(minX, maxX, minY, maxY) {\n /**\n * @type {number}\n */\n this.minX = minX;\n /**\n * @type {number}\n */\n this.maxX = maxX;\n /**\n * @type {number}\n */\n this.minY = minY;\n /**\n * @type {number}\n */\n this.maxY = maxY;\n }\n /**\n * @param {import(\"./tilecoord.js\").TileCoord} tileCoord Tile coordinate.\n * @return {boolean} Contains tile coordinate.\n */\n TileRange.prototype.contains = function (tileCoord) {\n return this.containsXY(tileCoord[1], tileCoord[2]);\n };\n /**\n * @param {TileRange} tileRange Tile range.\n * @return {boolean} Contains.\n */\n TileRange.prototype.containsTileRange = function (tileRange) {\n return (this.minX <= tileRange.minX &&\n tileRange.maxX <= this.maxX &&\n this.minY <= tileRange.minY &&\n tileRange.maxY <= this.maxY);\n };\n /**\n * @param {number} x Tile coordinate x.\n * @param {number} y Tile coordinate y.\n * @return {boolean} Contains coordinate.\n */\n TileRange.prototype.containsXY = function (x, y) {\n return this.minX <= x && x <= this.maxX && this.minY <= y && y <= this.maxY;\n };\n /**\n * @param {TileRange} tileRange Tile range.\n * @return {boolean} Equals.\n */\n TileRange.prototype.equals = function (tileRange) {\n return (this.minX == tileRange.minX &&\n this.minY == tileRange.minY &&\n this.maxX == tileRange.maxX &&\n this.maxY == tileRange.maxY);\n };\n /**\n * @param {TileRange} tileRange Tile range.\n */\n TileRange.prototype.extend = function (tileRange) {\n if (tileRange.minX < this.minX) {\n this.minX = tileRange.minX;\n }\n if (tileRange.maxX > this.maxX) {\n this.maxX = tileRange.maxX;\n }\n if (tileRange.minY < this.minY) {\n this.minY = tileRange.minY;\n }\n if (tileRange.maxY > this.maxY) {\n this.maxY = tileRange.maxY;\n }\n };\n /**\n * @return {number} Height.\n */\n TileRange.prototype.getHeight = function () {\n return this.maxY - this.minY + 1;\n };\n /**\n * @return {import(\"./size.js\").Size} Size.\n */\n TileRange.prototype.getSize = function () {\n return [this.getWidth(), this.getHeight()];\n };\n /**\n * @return {number} Width.\n */\n TileRange.prototype.getWidth = function () {\n return this.maxX - this.minX + 1;\n };\n /**\n * @param {TileRange} tileRange Tile range.\n * @return {boolean} Intersects.\n */\n TileRange.prototype.intersects = function (tileRange) {\n return (this.minX <= tileRange.maxX &&\n this.maxX >= tileRange.minX &&\n this.minY <= tileRange.maxY &&\n this.maxY >= tileRange.minY);\n };\n return TileRange;\n}());\n/**\n * @param {number} minX Minimum X.\n * @param {number} maxX Maximum X.\n * @param {number} minY Minimum Y.\n * @param {number} maxY Maximum Y.\n * @param {TileRange} [tileRange] TileRange.\n * @return {TileRange} Tile range.\n */\nexport function createOrUpdate(minX, maxX, minY, maxY, tileRange) {\n if (tileRange !== undefined) {\n tileRange.minX = minX;\n tileRange.maxX = maxX;\n tileRange.minY = minY;\n tileRange.maxY = maxY;\n return tileRange;\n }\n else {\n return new TileRange(minX, maxX, minY, maxY);\n }\n}\nexport default TileRange;\n//# sourceMappingURL=TileRange.js.map","/**\n * @module ol/TileState\n */\n/**\n * @enum {number}\n */\nexport default {\n IDLE: 0,\n LOADING: 1,\n LOADED: 2,\n /**\n * Indicates that tile loading failed\n * @type {number}\n */\n ERROR: 3,\n EMPTY: 4,\n};\n//# sourceMappingURL=TileState.js.map","/**\n * @module ol/ViewProperty\n */\n/**\n * @enum {string}\n */\nexport default {\n CENTER: 'center',\n RESOLUTION: 'resolution',\n ROTATION: 'rotation',\n};\n//# sourceMappingURL=ViewProperty.js.map","/**\n * @module ol/centerconstraint\n */\nimport { clamp } from './math.js';\n/**\n * @typedef {function((import(\"./coordinate.js\").Coordinate|undefined), number, import(\"./size.js\").Size, boolean=, Array=): (import(\"./coordinate.js\").Coordinate|undefined)} Type\n */\n/**\n * @param {import(\"./extent.js\").Extent} extent Extent.\n * @param {boolean} onlyCenter If true, the constraint will only apply to the view center.\n * @param {boolean} smooth If true, the view will be able to go slightly out of the given extent\n * (only during interaction and animation).\n * @return {Type} The constraint.\n */\nexport function createExtent(extent, onlyCenter, smooth) {\n return (\n /**\n * @param {import(\"./coordinate.js\").Coordinate|undefined} center Center.\n * @param {number} resolution Resolution.\n * @param {import(\"./size.js\").Size} size Viewport size; unused if `onlyCenter` was specified.\n * @param {boolean} [opt_isMoving] True if an interaction or animation is in progress.\n * @param {Array} [opt_centerShift] Shift between map center and viewport center.\n * @return {import(\"./coordinate.js\").Coordinate|undefined} Center.\n */\n function (center, resolution, size, opt_isMoving, opt_centerShift) {\n if (center) {\n var viewWidth = onlyCenter ? 0 : size[0] * resolution;\n var viewHeight = onlyCenter ? 0 : size[1] * resolution;\n var shiftX = opt_centerShift ? opt_centerShift[0] : 0;\n var shiftY = opt_centerShift ? opt_centerShift[1] : 0;\n var minX = extent[0] + viewWidth / 2 + shiftX;\n var maxX = extent[2] - viewWidth / 2 + shiftX;\n var minY = extent[1] + viewHeight / 2 + shiftY;\n var maxY = extent[3] - viewHeight / 2 + shiftY;\n // note: when zooming out of bounds, min and max values for x and y may\n // end up inverted (min > max); this has to be accounted for\n if (minX > maxX) {\n minX = (maxX + minX) / 2;\n maxX = minX;\n }\n if (minY > maxY) {\n minY = (maxY + minY) / 2;\n maxY = minY;\n }\n var x = clamp(center[0], minX, maxX);\n var y = clamp(center[1], minY, maxY);\n var ratio = 30 * resolution;\n // during an interaction, allow some overscroll\n if (opt_isMoving && smooth) {\n x +=\n -ratio * Math.log(1 + Math.max(0, minX - center[0]) / ratio) +\n ratio * Math.log(1 + Math.max(0, center[0] - maxX) / ratio);\n y +=\n -ratio * Math.log(1 + Math.max(0, minY - center[1]) / ratio) +\n ratio * Math.log(1 + Math.max(0, center[1] - maxY) / ratio);\n }\n return [x, y];\n }\n else {\n return undefined;\n }\n });\n}\n/**\n * @param {import(\"./coordinate.js\").Coordinate} [center] Center.\n * @return {import(\"./coordinate.js\").Coordinate|undefined} Center.\n */\nexport function none(center) {\n return center;\n}\n//# sourceMappingURL=centerconstraint.js.map","/**\n * @module ol/resolutionconstraint\n */\nimport { clamp } from './math.js';\nimport { getHeight, getWidth } from './extent.js';\nimport { linearFindNearest } from './array.js';\n/**\n * @typedef {function((number|undefined), number, import(\"./size.js\").Size, boolean=): (number|undefined)} Type\n */\n/**\n * Returns a modified resolution taking into account the viewport size and maximum\n * allowed extent.\n * @param {number} resolution Resolution\n * @param {import(\"./extent.js\").Extent} maxExtent Maximum allowed extent.\n * @param {import(\"./size.js\").Size} viewportSize Viewport size.\n * @param {boolean} showFullExtent Whether to show the full extent.\n * @return {number} Capped resolution.\n */\nfunction getViewportClampedResolution(resolution, maxExtent, viewportSize, showFullExtent) {\n var xResolution = getWidth(maxExtent) / viewportSize[0];\n var yResolution = getHeight(maxExtent) / viewportSize[1];\n if (showFullExtent) {\n return Math.min(resolution, Math.max(xResolution, yResolution));\n }\n return Math.min(resolution, Math.min(xResolution, yResolution));\n}\n/**\n * Returns a modified resolution to be between maxResolution and minResolution while\n * still allowing the value to be slightly out of bounds.\n * Note: the computation is based on the logarithm function (ln):\n * - at 1, ln(x) is 0\n * - above 1, ln(x) keeps increasing but at a much slower pace than x\n * The final result is clamped to prevent getting too far away from bounds.\n * @param {number} resolution Resolution.\n * @param {number} maxResolution Max resolution.\n * @param {number} minResolution Min resolution.\n * @return {number} Smoothed resolution.\n */\nfunction getSmoothClampedResolution(resolution, maxResolution, minResolution) {\n var result = Math.min(resolution, maxResolution);\n var ratio = 50;\n result *=\n Math.log(1 + ratio * Math.max(0, resolution / maxResolution - 1)) / ratio +\n 1;\n if (minResolution) {\n result = Math.max(result, minResolution);\n result /=\n Math.log(1 + ratio * Math.max(0, minResolution / resolution - 1)) /\n ratio +\n 1;\n }\n return clamp(result, minResolution / 2, maxResolution * 2);\n}\n/**\n * @param {Array} resolutions Resolutions.\n * @param {boolean} [opt_smooth] If true, the view will be able to slightly exceed resolution limits. Default: true.\n * @param {import(\"./extent.js\").Extent} [opt_maxExtent] Maximum allowed extent.\n * @param {boolean} [opt_showFullExtent] If true, allows us to show the full extent. Default: false.\n * @return {Type} Zoom function.\n */\nexport function createSnapToResolutions(resolutions, opt_smooth, opt_maxExtent, opt_showFullExtent) {\n return (\n /**\n * @param {number|undefined} resolution Resolution.\n * @param {number} direction Direction.\n * @param {import(\"./size.js\").Size} size Viewport size.\n * @param {boolean} [opt_isMoving] True if an interaction or animation is in progress.\n * @return {number|undefined} Resolution.\n */\n function (resolution, direction, size, opt_isMoving) {\n if (resolution !== undefined) {\n var maxResolution = resolutions[0];\n var minResolution = resolutions[resolutions.length - 1];\n var cappedMaxRes = opt_maxExtent\n ? getViewportClampedResolution(maxResolution, opt_maxExtent, size, opt_showFullExtent)\n : maxResolution;\n // during interacting or animating, allow intermediary values\n if (opt_isMoving) {\n var smooth = opt_smooth !== undefined ? opt_smooth : true;\n if (!smooth) {\n return clamp(resolution, minResolution, cappedMaxRes);\n }\n return getSmoothClampedResolution(resolution, cappedMaxRes, minResolution);\n }\n var capped = Math.min(cappedMaxRes, resolution);\n var z = Math.floor(linearFindNearest(resolutions, capped, direction));\n if (resolutions[z] > cappedMaxRes && z < resolutions.length - 1) {\n return resolutions[z + 1];\n }\n return resolutions[z];\n }\n else {\n return undefined;\n }\n });\n}\n/**\n * @param {number} power Power.\n * @param {number} maxResolution Maximum resolution.\n * @param {number} [opt_minResolution] Minimum resolution.\n * @param {boolean} [opt_smooth] If true, the view will be able to slightly exceed resolution limits. Default: true.\n * @param {import(\"./extent.js\").Extent} [opt_maxExtent] Maximum allowed extent.\n * @param {boolean} [opt_showFullExtent] If true, allows us to show the full extent. Default: false.\n * @return {Type} Zoom function.\n */\nexport function createSnapToPower(power, maxResolution, opt_minResolution, opt_smooth, opt_maxExtent, opt_showFullExtent) {\n return (\n /**\n * @param {number|undefined} resolution Resolution.\n * @param {number} direction Direction.\n * @param {import(\"./size.js\").Size} size Viewport size.\n * @param {boolean} [opt_isMoving] True if an interaction or animation is in progress.\n * @return {number|undefined} Resolution.\n */\n function (resolution, direction, size, opt_isMoving) {\n if (resolution !== undefined) {\n var cappedMaxRes = opt_maxExtent\n ? getViewportClampedResolution(maxResolution, opt_maxExtent, size, opt_showFullExtent)\n : maxResolution;\n var minResolution = opt_minResolution !== undefined ? opt_minResolution : 0;\n // during interacting or animating, allow intermediary values\n if (opt_isMoving) {\n var smooth = opt_smooth !== undefined ? opt_smooth : true;\n if (!smooth) {\n return clamp(resolution, minResolution, cappedMaxRes);\n }\n return getSmoothClampedResolution(resolution, cappedMaxRes, minResolution);\n }\n var tolerance = 1e-9;\n var minZoomLevel = Math.ceil(Math.log(maxResolution / cappedMaxRes) / Math.log(power) - tolerance);\n var offset = -direction * (0.5 - tolerance) + 0.5;\n var capped = Math.min(cappedMaxRes, resolution);\n var cappedZoomLevel = Math.floor(Math.log(maxResolution / capped) / Math.log(power) + offset);\n var zoomLevel = Math.max(minZoomLevel, cappedZoomLevel);\n var newResolution = maxResolution / Math.pow(power, zoomLevel);\n return clamp(newResolution, minResolution, cappedMaxRes);\n }\n else {\n return undefined;\n }\n });\n}\n/**\n * @param {number} maxResolution Max resolution.\n * @param {number} minResolution Min resolution.\n * @param {boolean} [opt_smooth] If true, the view will be able to slightly exceed resolution limits. Default: true.\n * @param {import(\"./extent.js\").Extent} [opt_maxExtent] Maximum allowed extent.\n * @param {boolean} [opt_showFullExtent] If true, allows us to show the full extent. Default: false.\n * @return {Type} Zoom function.\n */\nexport function createMinMaxResolution(maxResolution, minResolution, opt_smooth, opt_maxExtent, opt_showFullExtent) {\n return (\n /**\n * @param {number|undefined} resolution Resolution.\n * @param {number} direction Direction.\n * @param {import(\"./size.js\").Size} size Viewport size.\n * @param {boolean} [opt_isMoving] True if an interaction or animation is in progress.\n * @return {number|undefined} Resolution.\n */\n function (resolution, direction, size, opt_isMoving) {\n if (resolution !== undefined) {\n var cappedMaxRes = opt_maxExtent\n ? getViewportClampedResolution(maxResolution, opt_maxExtent, size, opt_showFullExtent)\n : maxResolution;\n var smooth = opt_smooth !== undefined ? opt_smooth : true;\n if (!smooth || !opt_isMoving) {\n return clamp(resolution, minResolution, cappedMaxRes);\n }\n return getSmoothClampedResolution(resolution, cappedMaxRes, minResolution);\n }\n else {\n return undefined;\n }\n });\n}\n//# sourceMappingURL=resolutionconstraint.js.map","var __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n if (typeof b !== \"function\" && b !== null)\n throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\n/**\n * @module ol/View\n */\nimport BaseObject from './Object.js';\nimport GeometryType from './geom/GeometryType.js';\nimport Units from './proj/Units.js';\nimport ViewHint from './ViewHint.js';\nimport ViewProperty from './ViewProperty.js';\nimport { DEFAULT_TILE_SIZE } from './tilegrid/common.js';\nimport { METERS_PER_UNIT, createProjection, fromUserCoordinate, fromUserExtent, getUserProjection, toUserCoordinate, toUserExtent, } from './proj.js';\nimport { VOID } from './functions.js';\nimport { add as addCoordinate, equals as coordinatesEqual, rotate as rotateCoordinate, } from './coordinate.js';\nimport { assert } from './asserts.js';\nimport { assign } from './obj.js';\nimport { none as centerNone, createExtent } from './centerconstraint.js';\nimport { clamp, modulo } from './math.js';\nimport { createMinMaxResolution } from './resolutionconstraint.js';\nimport { createSnapToN, createSnapToZero, disable, none as rotationNone, } from './rotationconstraint.js';\nimport { createSnapToPower, createSnapToResolutions, } from './resolutionconstraint.js';\nimport { easeOut } from './easing.js';\nimport { equals } from './coordinate.js';\nimport { getCenter, getForViewAndSize, getHeight, getWidth, isEmpty, } from './extent.js';\nimport { inAndOut } from './easing.js';\nimport { linearFindNearest } from './array.js';\nimport { fromExtent as polygonFromExtent } from './geom/Polygon.js';\n/**\n * An animation configuration\n *\n * @typedef {Object} Animation\n * @property {import(\"./coordinate.js\").Coordinate} [sourceCenter] Source center.\n * @property {import(\"./coordinate.js\").Coordinate} [targetCenter] Target center.\n * @property {number} [sourceResolution] Source resolution.\n * @property {number} [targetResolution] Target resolution.\n * @property {number} [sourceRotation] Source rotation.\n * @property {number} [targetRotation] Target rotation.\n * @property {import(\"./coordinate.js\").Coordinate} [anchor] Anchor.\n * @property {number} start Start.\n * @property {number} duration Duration.\n * @property {boolean} complete Complete.\n * @property {function(number):number} easing Easing.\n * @property {function(boolean):void} callback Callback.\n */\n/**\n * @typedef {Object} Constraints\n * @property {import(\"./centerconstraint.js\").Type} center Center.\n * @property {import(\"./resolutionconstraint.js\").Type} resolution Resolution.\n * @property {import(\"./rotationconstraint.js\").Type} rotation Rotation.\n */\n/**\n * @typedef {Object} FitOptions\n * @property {import(\"./size.js\").Size} [size] The size in pixels of the box to fit\n * the extent into. Default is the current size of the first map in the DOM that\n * uses this view, or `[100, 100]` if no such map is found.\n * @property {!Array} [padding=[0, 0, 0, 0]] Padding (in pixels) to be\n * cleared inside the view. Values in the array are top, right, bottom and left\n * padding.\n * @property {boolean} [nearest=false] If the view `constrainResolution` option is `true`,\n * get the nearest extent instead of the closest that actually fits the view.\n * @property {number} [minResolution=0] Minimum resolution that we zoom to.\n * @property {number} [maxZoom] Maximum zoom level that we zoom to. If\n * `minResolution` is given, this property is ignored.\n * @property {number} [duration] The duration of the animation in milliseconds.\n * By default, there is no animation to the target extent.\n * @property {function(number):number} [easing] The easing function used during\n * the animation (defaults to {@link module:ol/easing.inAndOut}).\n * The function will be called for each frame with a number representing a\n * fraction of the animation's duration. The function should return a number\n * between 0 and 1 representing the progress toward the destination state.\n * @property {function(boolean):void} [callback] Function called when the view is in\n * its final position. The callback will be called with `true` if the animation\n * series completed on its own or `false` if it was cancelled.\n */\n/**\n * @typedef {Object} ViewOptions\n * @property {import(\"./coordinate.js\").Coordinate} [center] The initial center for\n * the view. If a user projection is not set, the coordinate system for the center is\n * specified with the `projection` option. Layer sources will not be fetched if this\n * is not set, but the center can be set later with {@link #setCenter}.\n * @property {boolean|number} [constrainRotation=true] Rotation constraint.\n * `false` means no constraint. `true` means no constraint, but snap to zero\n * near zero. A number constrains the rotation to that number of values. For\n * example, `4` will constrain the rotation to 0, 90, 180, and 270 degrees.\n * @property {boolean} [enableRotation=true] Enable rotation.\n * If `false`, a rotation constraint that always sets the rotation to zero is\n * used. The `constrainRotation` option has no effect if `enableRotation` is\n * `false`.\n * @property {import(\"./extent.js\").Extent} [extent] The extent that constrains the\n * view, in other words, nothing outside of this extent can be visible on the map.\n * @property {boolean} [constrainOnlyCenter=false] If true, the extent\n * constraint will only apply to the view center and not the whole extent.\n * @property {boolean} [smoothExtentConstraint=true] If true, the extent\n * constraint will be applied smoothly, i.e. allow the view to go slightly outside\n * of the given `extent`.\n * @property {number} [maxResolution] The maximum resolution used to determine\n * the resolution constraint. It is used together with `minResolution` (or\n * `maxZoom`) and `zoomFactor`. If unspecified it is calculated in such a way\n * that the projection's validity extent fits in a 256x256 px tile. If the\n * projection is Spherical Mercator (the default) then `maxResolution` defaults\n * to `40075016.68557849 / 256 = 156543.03392804097`.\n * @property {number} [minResolution] The minimum resolution used to determine\n * the resolution constraint. It is used together with `maxResolution` (or\n * `minZoom`) and `zoomFactor`. If unspecified it is calculated assuming 29\n * zoom levels (with a factor of 2). If the projection is Spherical Mercator\n * (the default) then `minResolution` defaults to\n * `40075016.68557849 / 256 / Math.pow(2, 28) = 0.0005831682455839253`.\n * @property {number} [maxZoom=28] The maximum zoom level used to determine the\n * resolution constraint. It is used together with `minZoom` (or\n * `maxResolution`) and `zoomFactor`. Note that if `minResolution` is also\n * provided, it is given precedence over `maxZoom`.\n * @property {number} [minZoom=0] The minimum zoom level used to determine the\n * resolution constraint. It is used together with `maxZoom` (or\n * `minResolution`) and `zoomFactor`. Note that if `maxResolution` is also\n * provided, it is given precedence over `minZoom`.\n * @property {boolean} [multiWorld=false] If `false` the view is constrained so\n * only one world is visible, and you cannot pan off the edge. If `true` the map\n * may show multiple worlds at low zoom levels. Only used if the `projection` is\n * global. Note that if `extent` is also provided it is given precedence.\n * @property {boolean} [constrainResolution=false] If true, the view will always\n * animate to the closest zoom level after an interaction; false means\n * intermediary zoom levels are allowed.\n * @property {boolean} [smoothResolutionConstraint=true] If true, the resolution\n * min/max values will be applied smoothly, i. e. allow the view to exceed slightly\n * the given resolution or zoom bounds.\n * @property {boolean} [showFullExtent=false] Allow the view to be zoomed out to\n * show the full configured extent. By default, when a view is configured with an\n * extent, users will not be able to zoom out so the viewport exceeds the extent in\n * either dimension. This means the full extent may not be visible if the viewport\n * is taller or wider than the aspect ratio of the configured extent. If\n * showFullExtent is true, the user will be able to zoom out so that the viewport\n * exceeds the height or width of the configured extent, but not both, allowing the\n * full extent to be shown.\n * @property {import(\"./proj.js\").ProjectionLike} [projection='EPSG:3857'] The\n * projection. The default is Spherical Mercator.\n * @property {number} [resolution] The initial resolution for the view. The\n * units are `projection` units per pixel (e.g. meters per pixel). An\n * alternative to setting this is to set `zoom`. Layer sources will not be\n * fetched if neither this nor `zoom` are defined, but they can be set later\n * with {@link #setZoom} or {@link #setResolution}.\n * @property {Array} [resolutions] Resolutions that determine the\n * zoom levels if specified. The index in the array corresponds to the zoom level,\n * therefore the resolution values have to be in descending order. It also constrains\n * the resolution by the minimum and maximum value. If set the `maxResolution`,\n * `minResolution`, `minZoom`, `maxZoom`, and `zoomFactor` options are ignored.\n * @property {number} [rotation=0] The initial rotation for the view in radians\n * (positive rotation clockwise, 0 means North).\n * @property {number} [zoom] Only used if `resolution` is not defined. Zoom\n * level used to calculate the initial resolution for the view.\n * @property {number} [zoomFactor=2] The zoom factor used to compute the\n * corresponding resolution.\n * @property {!Array} [padding=[0, 0, 0, 0]] Padding (in css pixels).\n * If the map viewport is partially covered with other content (overlays) along\n * its edges, this setting allows to shift the center of the viewport away from\n * that content. The order of the values is top, right, bottom, left.\n */\n/**\n * @typedef {Object} AnimationOptions\n * @property {import(\"./coordinate.js\").Coordinate} [center] The center of the view at the end of\n * the animation.\n * @property {number} [zoom] The zoom level of the view at the end of the\n * animation. This takes precedence over `resolution`.\n * @property {number} [resolution] The resolution of the view at the end\n * of the animation. If `zoom` is also provided, this option will be ignored.\n * @property {number} [rotation] The rotation of the view at the end of\n * the animation.\n * @property {import(\"./coordinate.js\").Coordinate} [anchor] Optional anchor to remain fixed\n * during a rotation or resolution animation.\n * @property {number} [duration=1000] The duration of the animation in milliseconds.\n * @property {function(number):number} [easing] The easing function used\n * during the animation (defaults to {@link module:ol/easing.inAndOut}).\n * The function will be called for each frame with a number representing a\n * fraction of the animation's duration. The function should return a number\n * between 0 and 1 representing the progress toward the destination state.\n */\n/**\n * @typedef {Object} State\n * @property {import(\"./coordinate.js\").Coordinate} center Center.\n * @property {import(\"./proj/Projection.js\").default} projection Projection.\n * @property {number} resolution Resolution.\n * @property {import(\"./coordinate.js\").Coordinate} [nextCenter] The next center during an animation series.\n * @property {number} [nextResolution] The next resolution during an animation series.\n * @property {number} [nextRotation] The next rotation during an animation series.\n * @property {number} rotation Rotation.\n * @property {number} zoom Zoom.\n */\n/**\n * Default min zoom level for the map view.\n * @type {number}\n */\nvar DEFAULT_MIN_ZOOM = 0;\n/**\n * @typedef {import(\"./ObjectEventType\").Types|'change:center'|'change:resolution'|'change:rotation'} ViewObjectEventTypes\n */\n/***\n * @template Return\n * @typedef {import(\"./Observable\").OnSignature &\n * import(\"./Observable\").OnSignature &\n * import(\"./Observable\").CombinedOnSignature} ViewOnSignature\n */\n/**\n * @classdesc\n * A View object represents a simple 2D view of the map.\n *\n * This is the object to act upon to change the center, resolution,\n * and rotation of the map.\n *\n * A View has a `projection`. The projection determines the\n * coordinate system of the center, and its units determine the units of the\n * resolution (projection units per pixel). The default projection is\n * Spherical Mercator (EPSG:3857).\n *\n * ### The view states\n *\n * A View is determined by three states: `center`, `resolution`,\n * and `rotation`. Each state has a corresponding getter and setter, e.g.\n * `getCenter` and `setCenter` for the `center` state.\n *\n * The `zoom` state is actually not saved on the view: all computations\n * internally use the `resolution` state. Still, the `setZoom` and `getZoom`\n * methods are available, as well as `getResolutionForZoom` and\n * `getZoomForResolution` to switch from one system to the other.\n *\n * ### The constraints\n *\n * `setCenter`, `setResolution` and `setRotation` can be used to change the\n * states of the view, but any constraint defined in the constructor will\n * be applied along the way.\n *\n * A View object can have a *resolution constraint*, a *rotation constraint*\n * and a *center constraint*.\n *\n * The *resolution constraint* typically restricts min/max values and\n * snaps to specific resolutions. It is determined by the following\n * options: `resolutions`, `maxResolution`, `maxZoom` and `zoomFactor`.\n * If `resolutions` is set, the other three options are ignored. See\n * documentation for each option for more information. By default, the view\n * only has a min/max restriction and allow intermediary zoom levels when\n * pinch-zooming for example.\n *\n * The *rotation constraint* snaps to specific angles. It is determined\n * by the following options: `enableRotation` and `constrainRotation`.\n * By default rotation is allowed and its value is snapped to zero when approaching the\n * horizontal.\n *\n * The *center constraint* is determined by the `extent` option. By\n * default the view center is not constrained at all.\n *\n * ### Changing the view state\n *\n * It is important to note that `setZoom`, `setResolution`, `setCenter` and\n * `setRotation` are subject to the above mentioned constraints. As such, it\n * may sometimes not be possible to know in advance the resulting state of the\n * View. For example, calling `setResolution(10)` does not guarantee that\n * `getResolution()` will return `10`.\n *\n * A consequence of this is that, when applying a delta on the view state, one\n * should use `adjustCenter`, `adjustRotation`, `adjustZoom` and `adjustResolution`\n * rather than the corresponding setters. This will let view do its internal\n * computations. Besides, the `adjust*` methods also take an `opt_anchor`\n * argument which allows specifying an origin for the transformation.\n *\n * ### Interacting with the view\n *\n * View constraints are usually only applied when the view is *at rest*, meaning that\n * no interaction or animation is ongoing. As such, if the user puts the view in a\n * state that is not equivalent to a constrained one (e.g. rotating the view when\n * the snap angle is 0), an animation will be triggered at the interaction end to\n * put back the view to a stable state;\n *\n * @api\n */\nvar View = /** @class */ (function (_super) {\n __extends(View, _super);\n /**\n * @param {ViewOptions} [opt_options] View options.\n */\n function View(opt_options) {\n var _this = _super.call(this) || this;\n /***\n * @type {ViewOnSignature}\n */\n _this.on;\n /***\n * @type {ViewOnSignature}\n */\n _this.once;\n /***\n * @type {ViewOnSignature}\n */\n _this.un;\n var options = assign({}, opt_options);\n /**\n * @private\n * @type {Array}\n */\n _this.hints_ = [0, 0];\n /**\n * @private\n * @type {Array>}\n */\n _this.animations_ = [];\n /**\n * @private\n * @type {number|undefined}\n */\n _this.updateAnimationKey_;\n /**\n * @private\n * @const\n * @type {import(\"./proj/Projection.js\").default}\n */\n _this.projection_ = createProjection(options.projection, 'EPSG:3857');\n /**\n * @private\n * @type {import(\"./size.js\").Size}\n */\n _this.viewportSize_ = [100, 100];\n /**\n * @private\n * @type {import(\"./coordinate.js\").Coordinate|undefined}\n */\n _this.targetCenter_ = null;\n /**\n * @private\n * @type {number|undefined}\n */\n _this.targetResolution_;\n /**\n * @private\n * @type {number|undefined}\n */\n _this.targetRotation_;\n /**\n * @private\n * @type {import(\"./coordinate.js\").Coordinate}\n */\n _this.nextCenter_ = null;\n /**\n * @private\n * @type {number}\n */\n _this.nextResolution_;\n /**\n * @private\n * @type {number}\n */\n _this.nextRotation_;\n /**\n * @private\n * @type {import(\"./coordinate.js\").Coordinate|undefined}\n */\n _this.cancelAnchor_ = undefined;\n if (options.center) {\n options.center = fromUserCoordinate(options.center, _this.projection_);\n }\n if (options.extent) {\n options.extent = fromUserExtent(options.extent, _this.projection_);\n }\n _this.applyOptions_(options);\n return _this;\n }\n /**\n * Set up the view with the given options.\n * @param {ViewOptions} options View options.\n */\n View.prototype.applyOptions_ = function (options) {\n /**\n * @type {Object}\n */\n var properties = {};\n var resolutionConstraintInfo = createResolutionConstraint(options);\n /**\n * @private\n * @type {number}\n */\n this.maxResolution_ = resolutionConstraintInfo.maxResolution;\n /**\n * @private\n * @type {number}\n */\n this.minResolution_ = resolutionConstraintInfo.minResolution;\n /**\n * @private\n * @type {number}\n */\n this.zoomFactor_ = resolutionConstraintInfo.zoomFactor;\n /**\n * @private\n * @type {Array|undefined}\n */\n this.resolutions_ = options.resolutions;\n /**\n * @type {Array|undefined}\n * @private\n */\n this.padding_ = options.padding;\n /**\n * @private\n * @type {number}\n */\n this.minZoom_ = resolutionConstraintInfo.minZoom;\n var centerConstraint = createCenterConstraint(options);\n var resolutionConstraint = resolutionConstraintInfo.constraint;\n var rotationConstraint = createRotationConstraint(options);\n /**\n * @private\n * @type {Constraints}\n */\n this.constraints_ = {\n center: centerConstraint,\n resolution: resolutionConstraint,\n rotation: rotationConstraint,\n };\n this.setRotation(options.rotation !== undefined ? options.rotation : 0);\n this.setCenterInternal(options.center !== undefined ? options.center : null);\n if (options.resolution !== undefined) {\n this.setResolution(options.resolution);\n }\n else if (options.zoom !== undefined) {\n this.setZoom(options.zoom);\n }\n this.setProperties(properties);\n /**\n * @private\n * @type {ViewOptions}\n */\n this.options_ = options;\n };\n Object.defineProperty(View.prototype, \"padding\", {\n /**\n * Padding (in css pixels).\n * If the map viewport is partially covered with other content (overlays) along\n * its edges, this setting allows to shift the center of the viewport away from that\n * content. The order of the values in the array is top, right, bottom, left.\n * The default is no padding, which is equivalent to `[0, 0, 0, 0]`.\n * @type {Array|undefined}\n * @api\n */\n get: function () {\n return this.padding_;\n },\n set: function (padding) {\n var oldPadding = this.padding_;\n this.padding_ = padding;\n var center = this.getCenter();\n if (center) {\n var newPadding = padding || [0, 0, 0, 0];\n oldPadding = oldPadding || [0, 0, 0, 0];\n var resolution = this.getResolution();\n var offsetX = (resolution / 2) *\n (newPadding[3] - oldPadding[3] + oldPadding[1] - newPadding[1]);\n var offsetY = (resolution / 2) *\n (newPadding[0] - oldPadding[0] + oldPadding[2] - newPadding[2]);\n this.setCenterInternal([center[0] + offsetX, center[1] - offsetY]);\n }\n },\n enumerable: false,\n configurable: true\n });\n /**\n * Get an updated version of the view options used to construct the view. The\n * current resolution (or zoom), center, and rotation are applied to any stored\n * options. The provided options can be used to apply new min/max zoom or\n * resolution limits.\n * @param {ViewOptions} newOptions New options to be applied.\n * @return {ViewOptions} New options updated with the current view state.\n */\n View.prototype.getUpdatedOptions_ = function (newOptions) {\n var options = assign({}, this.options_);\n // preserve resolution (or zoom)\n if (options.resolution !== undefined) {\n options.resolution = this.getResolution();\n }\n else {\n options.zoom = this.getZoom();\n }\n // preserve center\n options.center = this.getCenterInternal();\n // preserve rotation\n options.rotation = this.getRotation();\n return assign({}, options, newOptions);\n };\n /**\n * Animate the view. The view's center, zoom (or resolution), and rotation\n * can be animated for smooth transitions between view states. For example,\n * to animate the view to a new zoom level:\n *\n * view.animate({zoom: view.getZoom() + 1});\n *\n * By default, the animation lasts one second and uses in-and-out easing. You\n * can customize this behavior by including `duration` (in milliseconds) and\n * `easing` options (see {@link module:ol/easing}).\n *\n * To chain together multiple animations, call the method with multiple\n * animation objects. For example, to first zoom and then pan:\n *\n * view.animate({zoom: 10}, {center: [0, 0]});\n *\n * If you provide a function as the last argument to the animate method, it\n * will get called at the end of an animation series. The callback will be\n * called with `true` if the animation series completed on its own or `false`\n * if it was cancelled.\n *\n * Animations are cancelled by user interactions (e.g. dragging the map) or by\n * calling `view.setCenter()`, `view.setResolution()`, or `view.setRotation()`\n * (or another method that calls one of these).\n *\n * @param {...(AnimationOptions|function(boolean): void)} var_args Animation\n * options. Multiple animations can be run in series by passing multiple\n * options objects. To run multiple animations in parallel, call the method\n * multiple times. An optional callback can be provided as a final\n * argument. The callback will be called with a boolean indicating whether\n * the animation completed without being cancelled.\n * @api\n */\n View.prototype.animate = function (var_args) {\n if (this.isDef() && !this.getAnimating()) {\n this.resolveConstraints(0);\n }\n var args = new Array(arguments.length);\n for (var i = 0; i < args.length; ++i) {\n var options = arguments[i];\n if (options.center) {\n options = assign({}, options);\n options.center = fromUserCoordinate(options.center, this.getProjection());\n }\n if (options.anchor) {\n options = assign({}, options);\n options.anchor = fromUserCoordinate(options.anchor, this.getProjection());\n }\n args[i] = options;\n }\n this.animateInternal.apply(this, args);\n };\n /**\n * @param {...(AnimationOptions|function(boolean): void)} var_args Animation options.\n */\n View.prototype.animateInternal = function (var_args) {\n var animationCount = arguments.length;\n var callback;\n if (animationCount > 1 &&\n typeof arguments[animationCount - 1] === 'function') {\n callback = arguments[animationCount - 1];\n --animationCount;\n }\n var i = 0;\n for (; i < animationCount && !this.isDef(); ++i) {\n // if view properties are not yet set, shortcut to the final state\n var state = arguments[i];\n if (state.center) {\n this.setCenterInternal(state.center);\n }\n if (state.zoom !== undefined) {\n this.setZoom(state.zoom);\n }\n else if (state.resolution) {\n this.setResolution(state.resolution);\n }\n if (state.rotation !== undefined) {\n this.setRotation(state.rotation);\n }\n }\n if (i === animationCount) {\n if (callback) {\n animationCallback(callback, true);\n }\n return;\n }\n var start = Date.now();\n var center = this.targetCenter_.slice();\n var resolution = this.targetResolution_;\n var rotation = this.targetRotation_;\n var series = [];\n for (; i < animationCount; ++i) {\n var options = /** @type {AnimationOptions} */ (arguments[i]);\n var animation = {\n start: start,\n complete: false,\n anchor: options.anchor,\n duration: options.duration !== undefined ? options.duration : 1000,\n easing: options.easing || inAndOut,\n callback: callback,\n };\n if (options.center) {\n animation.sourceCenter = center;\n animation.targetCenter = options.center.slice();\n center = animation.targetCenter;\n }\n if (options.zoom !== undefined) {\n animation.sourceResolution = resolution;\n animation.targetResolution = this.getResolutionForZoom(options.zoom);\n resolution = animation.targetResolution;\n }\n else if (options.resolution) {\n animation.sourceResolution = resolution;\n animation.targetResolution = options.resolution;\n resolution = animation.targetResolution;\n }\n if (options.rotation !== undefined) {\n animation.sourceRotation = rotation;\n var delta = modulo(options.rotation - rotation + Math.PI, 2 * Math.PI) - Math.PI;\n animation.targetRotation = rotation + delta;\n rotation = animation.targetRotation;\n }\n // check if animation is a no-op\n if (isNoopAnimation(animation)) {\n animation.complete = true;\n // we still push it onto the series for callback handling\n }\n else {\n start += animation.duration;\n }\n series.push(animation);\n }\n this.animations_.push(series);\n this.setHint(ViewHint.ANIMATING, 1);\n this.updateAnimations_();\n };\n /**\n * Determine if the view is being animated.\n * @return {boolean} The view is being animated.\n * @api\n */\n View.prototype.getAnimating = function () {\n return this.hints_[ViewHint.ANIMATING] > 0;\n };\n /**\n * Determine if the user is interacting with the view, such as panning or zooming.\n * @return {boolean} The view is being interacted with.\n * @api\n */\n View.prototype.getInteracting = function () {\n return this.hints_[ViewHint.INTERACTING] > 0;\n };\n /**\n * Cancel any ongoing animations.\n * @api\n */\n View.prototype.cancelAnimations = function () {\n this.setHint(ViewHint.ANIMATING, -this.hints_[ViewHint.ANIMATING]);\n var anchor;\n for (var i = 0, ii = this.animations_.length; i < ii; ++i) {\n var series = this.animations_[i];\n if (series[0].callback) {\n animationCallback(series[0].callback, false);\n }\n if (!anchor) {\n for (var j = 0, jj = series.length; j < jj; ++j) {\n var animation = series[j];\n if (!animation.complete) {\n anchor = animation.anchor;\n break;\n }\n }\n }\n }\n this.animations_.length = 0;\n this.cancelAnchor_ = anchor;\n this.nextCenter_ = null;\n this.nextResolution_ = NaN;\n this.nextRotation_ = NaN;\n };\n /**\n * Update all animations.\n */\n View.prototype.updateAnimations_ = function () {\n if (this.updateAnimationKey_ !== undefined) {\n cancelAnimationFrame(this.updateAnimationKey_);\n this.updateAnimationKey_ = undefined;\n }\n if (!this.getAnimating()) {\n return;\n }\n var now = Date.now();\n var more = false;\n for (var i = this.animations_.length - 1; i >= 0; --i) {\n var series = this.animations_[i];\n var seriesComplete = true;\n for (var j = 0, jj = series.length; j < jj; ++j) {\n var animation = series[j];\n if (animation.complete) {\n continue;\n }\n var elapsed = now - animation.start;\n var fraction = animation.duration > 0 ? elapsed / animation.duration : 1;\n if (fraction >= 1) {\n animation.complete = true;\n fraction = 1;\n }\n else {\n seriesComplete = false;\n }\n var progress = animation.easing(fraction);\n if (animation.sourceCenter) {\n var x0 = animation.sourceCenter[0];\n var y0 = animation.sourceCenter[1];\n var x1 = animation.targetCenter[0];\n var y1 = animation.targetCenter[1];\n this.nextCenter_ = animation.targetCenter;\n var x = x0 + progress * (x1 - x0);\n var y = y0 + progress * (y1 - y0);\n this.targetCenter_ = [x, y];\n }\n if (animation.sourceResolution && animation.targetResolution) {\n var resolution = progress === 1\n ? animation.targetResolution\n : animation.sourceResolution +\n progress *\n (animation.targetResolution - animation.sourceResolution);\n if (animation.anchor) {\n var size = this.getViewportSize_(this.getRotation());\n var constrainedResolution = this.constraints_.resolution(resolution, 0, size, true);\n this.targetCenter_ = this.calculateCenterZoom(constrainedResolution, animation.anchor);\n }\n this.nextResolution_ = animation.targetResolution;\n this.targetResolution_ = resolution;\n this.applyTargetState_(true);\n }\n if (animation.sourceRotation !== undefined &&\n animation.targetRotation !== undefined) {\n var rotation = progress === 1\n ? modulo(animation.targetRotation + Math.PI, 2 * Math.PI) -\n Math.PI\n : animation.sourceRotation +\n progress *\n (animation.targetRotation - animation.sourceRotation);\n if (animation.anchor) {\n var constrainedRotation = this.constraints_.rotation(rotation, true);\n this.targetCenter_ = this.calculateCenterRotate(constrainedRotation, animation.anchor);\n }\n this.nextRotation_ = animation.targetRotation;\n this.targetRotation_ = rotation;\n }\n this.applyTargetState_(true);\n more = true;\n if (!animation.complete) {\n break;\n }\n }\n if (seriesComplete) {\n this.animations_[i] = null;\n this.setHint(ViewHint.ANIMATING, -1);\n this.nextCenter_ = null;\n this.nextResolution_ = NaN;\n this.nextRotation_ = NaN;\n var callback = series[0].callback;\n if (callback) {\n animationCallback(callback, true);\n }\n }\n }\n // prune completed series\n this.animations_ = this.animations_.filter(Boolean);\n if (more && this.updateAnimationKey_ === undefined) {\n this.updateAnimationKey_ = requestAnimationFrame(this.updateAnimations_.bind(this));\n }\n };\n /**\n * @param {number} rotation Target rotation.\n * @param {import(\"./coordinate.js\").Coordinate} anchor Rotation anchor.\n * @return {import(\"./coordinate.js\").Coordinate|undefined} Center for rotation and anchor.\n */\n View.prototype.calculateCenterRotate = function (rotation, anchor) {\n var center;\n var currentCenter = this.getCenterInternal();\n if (currentCenter !== undefined) {\n center = [currentCenter[0] - anchor[0], currentCenter[1] - anchor[1]];\n rotateCoordinate(center, rotation - this.getRotation());\n addCoordinate(center, anchor);\n }\n return center;\n };\n /**\n * @param {number} resolution Target resolution.\n * @param {import(\"./coordinate.js\").Coordinate} anchor Zoom anchor.\n * @return {import(\"./coordinate.js\").Coordinate|undefined} Center for resolution and anchor.\n */\n View.prototype.calculateCenterZoom = function (resolution, anchor) {\n var center;\n var currentCenter = this.getCenterInternal();\n var currentResolution = this.getResolution();\n if (currentCenter !== undefined && currentResolution !== undefined) {\n var x = anchor[0] -\n (resolution * (anchor[0] - currentCenter[0])) / currentResolution;\n var y = anchor[1] -\n (resolution * (anchor[1] - currentCenter[1])) / currentResolution;\n center = [x, y];\n }\n return center;\n };\n /**\n * Returns the current viewport size.\n * @private\n * @param {number} [opt_rotation] Take into account the rotation of the viewport when giving the size\n * @return {import(\"./size.js\").Size} Viewport size or `[100, 100]` when no viewport is found.\n */\n View.prototype.getViewportSize_ = function (opt_rotation) {\n var size = this.viewportSize_;\n if (opt_rotation) {\n var w = size[0];\n var h = size[1];\n return [\n Math.abs(w * Math.cos(opt_rotation)) +\n Math.abs(h * Math.sin(opt_rotation)),\n Math.abs(w * Math.sin(opt_rotation)) +\n Math.abs(h * Math.cos(opt_rotation)),\n ];\n }\n else {\n return size;\n }\n };\n /**\n * Stores the viewport size on the view. The viewport size is not read every time from the DOM\n * to avoid performance hit and layout reflow.\n * This should be done on map size change.\n * Note: the constraints are not resolved during an animation to avoid stopping it\n * @param {import(\"./size.js\").Size} [opt_size] Viewport size; if undefined, [100, 100] is assumed\n */\n View.prototype.setViewportSize = function (opt_size) {\n this.viewportSize_ = Array.isArray(opt_size)\n ? opt_size.slice()\n : [100, 100];\n if (!this.getAnimating()) {\n this.resolveConstraints(0);\n }\n };\n /**\n * Get the view center.\n * @return {import(\"./coordinate.js\").Coordinate|undefined} The center of the view.\n * @observable\n * @api\n */\n View.prototype.getCenter = function () {\n var center = this.getCenterInternal();\n if (!center) {\n return center;\n }\n return toUserCoordinate(center, this.getProjection());\n };\n /**\n * Get the view center without transforming to user projection.\n * @return {import(\"./coordinate.js\").Coordinate|undefined} The center of the view.\n */\n View.prototype.getCenterInternal = function () {\n return /** @type {import(\"./coordinate.js\").Coordinate|undefined} */ (this.get(ViewProperty.CENTER));\n };\n /**\n * @return {Constraints} Constraints.\n */\n View.prototype.getConstraints = function () {\n return this.constraints_;\n };\n /**\n * @return {boolean} Resolution constraint is set\n */\n View.prototype.getConstrainResolution = function () {\n return this.options_.constrainResolution;\n };\n /**\n * @param {Array} [opt_hints] Destination array.\n * @return {Array} Hint.\n */\n View.prototype.getHints = function (opt_hints) {\n if (opt_hints !== undefined) {\n opt_hints[0] = this.hints_[0];\n opt_hints[1] = this.hints_[1];\n return opt_hints;\n }\n else {\n return this.hints_.slice();\n }\n };\n /**\n * Calculate the extent for the current view state and the passed size.\n * The size is the pixel dimensions of the box into which the calculated extent\n * should fit. In most cases you want to get the extent of the entire map,\n * that is `map.getSize()`.\n * @param {import(\"./size.js\").Size} [opt_size] Box pixel size. If not provided, the size\n * of the map that uses this view will be used.\n * @return {import(\"./extent.js\").Extent} Extent.\n * @api\n */\n View.prototype.calculateExtent = function (opt_size) {\n var extent = this.calculateExtentInternal(opt_size);\n return toUserExtent(extent, this.getProjection());\n };\n /**\n * @param {import(\"./size.js\").Size} [opt_size] Box pixel size. If not provided,\n * the map's last known viewport size will be used.\n * @return {import(\"./extent.js\").Extent} Extent.\n */\n View.prototype.calculateExtentInternal = function (opt_size) {\n var size = opt_size || this.getViewportSizeMinusPadding_();\n var center = /** @type {!import(\"./coordinate.js\").Coordinate} */ (this.getCenterInternal());\n assert(center, 1); // The view center is not defined\n var resolution = /** @type {!number} */ (this.getResolution());\n assert(resolution !== undefined, 2); // The view resolution is not defined\n var rotation = /** @type {!number} */ (this.getRotation());\n assert(rotation !== undefined, 3); // The view rotation is not defined\n return getForViewAndSize(center, resolution, rotation, size);\n };\n /**\n * Get the maximum resolution of the view.\n * @return {number} The maximum resolution of the view.\n * @api\n */\n View.prototype.getMaxResolution = function () {\n return this.maxResolution_;\n };\n /**\n * Get the minimum resolution of the view.\n * @return {number} The minimum resolution of the view.\n * @api\n */\n View.prototype.getMinResolution = function () {\n return this.minResolution_;\n };\n /**\n * Get the maximum zoom level for the view.\n * @return {number} The maximum zoom level.\n * @api\n */\n View.prototype.getMaxZoom = function () {\n return /** @type {number} */ (this.getZoomForResolution(this.minResolution_));\n };\n /**\n * Set a new maximum zoom level for the view.\n * @param {number} zoom The maximum zoom level.\n * @api\n */\n View.prototype.setMaxZoom = function (zoom) {\n this.applyOptions_(this.getUpdatedOptions_({ maxZoom: zoom }));\n };\n /**\n * Get the minimum zoom level for the view.\n * @return {number} The minimum zoom level.\n * @api\n */\n View.prototype.getMinZoom = function () {\n return /** @type {number} */ (this.getZoomForResolution(this.maxResolution_));\n };\n /**\n * Set a new minimum zoom level for the view.\n * @param {number} zoom The minimum zoom level.\n * @api\n */\n View.prototype.setMinZoom = function (zoom) {\n this.applyOptions_(this.getUpdatedOptions_({ minZoom: zoom }));\n };\n /**\n * Set whether the view should allow intermediary zoom levels.\n * @param {boolean} enabled Whether the resolution is constrained.\n * @api\n */\n View.prototype.setConstrainResolution = function (enabled) {\n this.applyOptions_(this.getUpdatedOptions_({ constrainResolution: enabled }));\n };\n /**\n * Get the view projection.\n * @return {import(\"./proj/Projection.js\").default} The projection of the view.\n * @api\n */\n View.prototype.getProjection = function () {\n return this.projection_;\n };\n /**\n * Get the view resolution.\n * @return {number|undefined} The resolution of the view.\n * @observable\n * @api\n */\n View.prototype.getResolution = function () {\n return /** @type {number|undefined} */ (this.get(ViewProperty.RESOLUTION));\n };\n /**\n * Get the resolutions for the view. This returns the array of resolutions\n * passed to the constructor of the View, or undefined if none were given.\n * @return {Array|undefined} The resolutions of the view.\n * @api\n */\n View.prototype.getResolutions = function () {\n return this.resolutions_;\n };\n /**\n * Get the resolution for a provided extent (in map units) and size (in pixels).\n * @param {import(\"./extent.js\").Extent} extent Extent.\n * @param {import(\"./size.js\").Size} [opt_size] Box pixel size.\n * @return {number} The resolution at which the provided extent will render at\n * the given size.\n * @api\n */\n View.prototype.getResolutionForExtent = function (extent, opt_size) {\n return this.getResolutionForExtentInternal(fromUserExtent(extent, this.getProjection()), opt_size);\n };\n /**\n * Get the resolution for a provided extent (in map units) and size (in pixels).\n * @param {import(\"./extent.js\").Extent} extent Extent.\n * @param {import(\"./size.js\").Size} [opt_size] Box pixel size.\n * @return {number} The resolution at which the provided extent will render at\n * the given size.\n */\n View.prototype.getResolutionForExtentInternal = function (extent, opt_size) {\n var size = opt_size || this.getViewportSizeMinusPadding_();\n var xResolution = getWidth(extent) / size[0];\n var yResolution = getHeight(extent) / size[1];\n return Math.max(xResolution, yResolution);\n };\n /**\n * Return a function that returns a value between 0 and 1 for a\n * resolution. Exponential scaling is assumed.\n * @param {number} [opt_power] Power.\n * @return {function(number): number} Resolution for value function.\n */\n View.prototype.getResolutionForValueFunction = function (opt_power) {\n var power = opt_power || 2;\n var maxResolution = this.getConstrainedResolution(this.maxResolution_);\n var minResolution = this.minResolution_;\n var max = Math.log(maxResolution / minResolution) / Math.log(power);\n return (\n /**\n * @param {number} value Value.\n * @return {number} Resolution.\n */\n function (value) {\n var resolution = maxResolution / Math.pow(power, value * max);\n return resolution;\n });\n };\n /**\n * Get the view rotation.\n * @return {number} The rotation of the view in radians.\n * @observable\n * @api\n */\n View.prototype.getRotation = function () {\n return /** @type {number} */ (this.get(ViewProperty.ROTATION));\n };\n /**\n * Return a function that returns a resolution for a value between\n * 0 and 1. Exponential scaling is assumed.\n * @param {number} [opt_power] Power.\n * @return {function(number): number} Value for resolution function.\n */\n View.prototype.getValueForResolutionFunction = function (opt_power) {\n var logPower = Math.log(opt_power || 2);\n var maxResolution = this.getConstrainedResolution(this.maxResolution_);\n var minResolution = this.minResolution_;\n var max = Math.log(maxResolution / minResolution) / logPower;\n return (\n /**\n * @param {number} resolution Resolution.\n * @return {number} Value.\n */\n function (resolution) {\n var value = Math.log(maxResolution / resolution) / logPower / max;\n return value;\n });\n };\n /**\n * Returns the size of the viewport minus padding.\n * @private\n * @param {number} [opt_rotation] Take into account the rotation of the viewport when giving the size\n * @return {import(\"./size.js\").Size} Viewport size reduced by the padding.\n */\n View.prototype.getViewportSizeMinusPadding_ = function (opt_rotation) {\n var size = this.getViewportSize_(opt_rotation);\n var padding = this.padding_;\n if (padding) {\n size = [\n size[0] - padding[1] - padding[3],\n size[1] - padding[0] - padding[2],\n ];\n }\n return size;\n };\n /**\n * @return {State} View state.\n */\n View.prototype.getState = function () {\n var projection = this.getProjection();\n var resolution = this.getResolution();\n var rotation = this.getRotation();\n var center = /** @type {import(\"./coordinate.js\").Coordinate} */ (this.getCenterInternal());\n var padding = this.padding_;\n if (padding) {\n var reducedSize = this.getViewportSizeMinusPadding_();\n center = calculateCenterOn(center, this.getViewportSize_(), [reducedSize[0] / 2 + padding[3], reducedSize[1] / 2 + padding[0]], resolution, rotation);\n }\n return {\n center: center.slice(0),\n projection: projection !== undefined ? projection : null,\n resolution: resolution,\n nextCenter: this.nextCenter_,\n nextResolution: this.nextResolution_,\n nextRotation: this.nextRotation_,\n rotation: rotation,\n zoom: this.getZoom(),\n };\n };\n /**\n * Get the current zoom level. This method may return non-integer zoom levels\n * if the view does not constrain the resolution, or if an interaction or\n * animation is underway.\n * @return {number|undefined} Zoom.\n * @api\n */\n View.prototype.getZoom = function () {\n var zoom;\n var resolution = this.getResolution();\n if (resolution !== undefined) {\n zoom = this.getZoomForResolution(resolution);\n }\n return zoom;\n };\n /**\n * Get the zoom level for a resolution.\n * @param {number} resolution The resolution.\n * @return {number|undefined} The zoom level for the provided resolution.\n * @api\n */\n View.prototype.getZoomForResolution = function (resolution) {\n var offset = this.minZoom_ || 0;\n var max, zoomFactor;\n if (this.resolutions_) {\n var nearest = linearFindNearest(this.resolutions_, resolution, 1);\n offset = nearest;\n max = this.resolutions_[nearest];\n if (nearest == this.resolutions_.length - 1) {\n zoomFactor = 2;\n }\n else {\n zoomFactor = max / this.resolutions_[nearest + 1];\n }\n }\n else {\n max = this.maxResolution_;\n zoomFactor = this.zoomFactor_;\n }\n return offset + Math.log(max / resolution) / Math.log(zoomFactor);\n };\n /**\n * Get the resolution for a zoom level.\n * @param {number} zoom Zoom level.\n * @return {number} The view resolution for the provided zoom level.\n * @api\n */\n View.prototype.getResolutionForZoom = function (zoom) {\n if (this.resolutions_) {\n if (this.resolutions_.length <= 1) {\n return 0;\n }\n var baseLevel = clamp(Math.floor(zoom), 0, this.resolutions_.length - 2);\n var zoomFactor = this.resolutions_[baseLevel] / this.resolutions_[baseLevel + 1];\n return (this.resolutions_[baseLevel] /\n Math.pow(zoomFactor, clamp(zoom - baseLevel, 0, 1)));\n }\n else {\n return (this.maxResolution_ / Math.pow(this.zoomFactor_, zoom - this.minZoom_));\n }\n };\n /**\n * Fit the given geometry or extent based on the given map size and border.\n * The size is pixel dimensions of the box to fit the extent into.\n * In most cases you will want to use the map size, that is `map.getSize()`.\n * Takes care of the map angle.\n * @param {import(\"./geom/SimpleGeometry.js\").default|import(\"./extent.js\").Extent} geometryOrExtent The geometry or\n * extent to fit the view to.\n * @param {FitOptions} [opt_options] Options.\n * @api\n */\n View.prototype.fit = function (geometryOrExtent, opt_options) {\n /** @type {import(\"./geom/SimpleGeometry.js\").default} */\n var geometry;\n assert(Array.isArray(geometryOrExtent) ||\n typeof ( /** @type {?} */(geometryOrExtent).getSimplifiedGeometry) ===\n 'function', 24); // Invalid extent or geometry provided as `geometry`\n if (Array.isArray(geometryOrExtent)) {\n assert(!isEmpty(geometryOrExtent), 25); // Cannot fit empty extent provided as `geometry`\n var extent = fromUserExtent(geometryOrExtent, this.getProjection());\n geometry = polygonFromExtent(extent);\n }\n else if (geometryOrExtent.getType() === GeometryType.CIRCLE) {\n var extent = fromUserExtent(geometryOrExtent.getExtent(), this.getProjection());\n geometry = polygonFromExtent(extent);\n geometry.rotate(this.getRotation(), getCenter(extent));\n }\n else {\n var userProjection = getUserProjection();\n if (userProjection) {\n geometry = /** @type {import(\"./geom/SimpleGeometry.js\").default} */ (geometryOrExtent\n .clone()\n .transform(userProjection, this.getProjection()));\n }\n else {\n geometry = geometryOrExtent;\n }\n }\n this.fitInternal(geometry, opt_options);\n };\n /**\n * Calculate rotated extent\n * @param {import(\"./geom/SimpleGeometry.js\").default} geometry The geometry.\n * @return {import(\"./extent\").Extent} The rotated extent for the geometry.\n */\n View.prototype.rotatedExtentForGeometry = function (geometry) {\n var rotation = this.getRotation();\n var cosAngle = Math.cos(rotation);\n var sinAngle = Math.sin(-rotation);\n var coords = geometry.getFlatCoordinates();\n var stride = geometry.getStride();\n var minRotX = +Infinity;\n var minRotY = +Infinity;\n var maxRotX = -Infinity;\n var maxRotY = -Infinity;\n for (var i = 0, ii = coords.length; i < ii; i += stride) {\n var rotX = coords[i] * cosAngle - coords[i + 1] * sinAngle;\n var rotY = coords[i] * sinAngle + coords[i + 1] * cosAngle;\n minRotX = Math.min(minRotX, rotX);\n minRotY = Math.min(minRotY, rotY);\n maxRotX = Math.max(maxRotX, rotX);\n maxRotY = Math.max(maxRotY, rotY);\n }\n return [minRotX, minRotY, maxRotX, maxRotY];\n };\n /**\n * @param {import(\"./geom/SimpleGeometry.js\").default} geometry The geometry.\n * @param {FitOptions} [opt_options] Options.\n */\n View.prototype.fitInternal = function (geometry, opt_options) {\n var options = opt_options || {};\n var size = options.size;\n if (!size) {\n size = this.getViewportSizeMinusPadding_();\n }\n var padding = options.padding !== undefined ? options.padding : [0, 0, 0, 0];\n var nearest = options.nearest !== undefined ? options.nearest : false;\n var minResolution;\n if (options.minResolution !== undefined) {\n minResolution = options.minResolution;\n }\n else if (options.maxZoom !== undefined) {\n minResolution = this.getResolutionForZoom(options.maxZoom);\n }\n else {\n minResolution = 0;\n }\n var rotatedExtent = this.rotatedExtentForGeometry(geometry);\n // calculate resolution\n var resolution = this.getResolutionForExtentInternal(rotatedExtent, [\n size[0] - padding[1] - padding[3],\n size[1] - padding[0] - padding[2],\n ]);\n resolution = isNaN(resolution)\n ? minResolution\n : Math.max(resolution, minResolution);\n resolution = this.getConstrainedResolution(resolution, nearest ? 0 : 1);\n // calculate center\n var rotation = this.getRotation();\n var sinAngle = Math.sin(rotation);\n var cosAngle = Math.cos(rotation);\n var centerRot = getCenter(rotatedExtent);\n centerRot[0] += ((padding[1] - padding[3]) / 2) * resolution;\n centerRot[1] += ((padding[0] - padding[2]) / 2) * resolution;\n var centerX = centerRot[0] * cosAngle - centerRot[1] * sinAngle;\n var centerY = centerRot[1] * cosAngle + centerRot[0] * sinAngle;\n var center = this.getConstrainedCenter([centerX, centerY], resolution);\n var callback = options.callback ? options.callback : VOID;\n if (options.duration !== undefined) {\n this.animateInternal({\n resolution: resolution,\n center: center,\n duration: options.duration,\n easing: options.easing,\n }, callback);\n }\n else {\n this.targetResolution_ = resolution;\n this.targetCenter_ = center;\n this.applyTargetState_(false, true);\n animationCallback(callback, true);\n }\n };\n /**\n * Center on coordinate and view position.\n * @param {import(\"./coordinate.js\").Coordinate} coordinate Coordinate.\n * @param {import(\"./size.js\").Size} size Box pixel size.\n * @param {import(\"./pixel.js\").Pixel} position Position on the view to center on.\n * @api\n */\n View.prototype.centerOn = function (coordinate, size, position) {\n this.centerOnInternal(fromUserCoordinate(coordinate, this.getProjection()), size, position);\n };\n /**\n * @param {import(\"./coordinate.js\").Coordinate} coordinate Coordinate.\n * @param {import(\"./size.js\").Size} size Box pixel size.\n * @param {import(\"./pixel.js\").Pixel} position Position on the view to center on.\n */\n View.prototype.centerOnInternal = function (coordinate, size, position) {\n this.setCenterInternal(calculateCenterOn(coordinate, size, position, this.getResolution(), this.getRotation()));\n };\n /**\n * Calculates the shift between map and viewport center.\n * @param {import(\"./coordinate.js\").Coordinate} center Center.\n * @param {number} resolution Resolution.\n * @param {number} rotation Rotation.\n * @param {import(\"./size.js\").Size} size Size.\n * @return {Array|undefined} Center shift.\n */\n View.prototype.calculateCenterShift = function (center, resolution, rotation, size) {\n var centerShift;\n var padding = this.padding_;\n if (padding && center) {\n var reducedSize = this.getViewportSizeMinusPadding_(-rotation);\n var shiftedCenter = calculateCenterOn(center, size, [reducedSize[0] / 2 + padding[3], reducedSize[1] / 2 + padding[0]], resolution, rotation);\n centerShift = [\n center[0] - shiftedCenter[0],\n center[1] - shiftedCenter[1],\n ];\n }\n return centerShift;\n };\n /**\n * @return {boolean} Is defined.\n */\n View.prototype.isDef = function () {\n return !!this.getCenterInternal() && this.getResolution() !== undefined;\n };\n /**\n * Adds relative coordinates to the center of the view. Any extent constraint will apply.\n * @param {import(\"./coordinate.js\").Coordinate} deltaCoordinates Relative value to add.\n * @api\n */\n View.prototype.adjustCenter = function (deltaCoordinates) {\n var center = toUserCoordinate(this.targetCenter_, this.getProjection());\n this.setCenter([\n center[0] + deltaCoordinates[0],\n center[1] + deltaCoordinates[1],\n ]);\n };\n /**\n * Adds relative coordinates to the center of the view. Any extent constraint will apply.\n * @param {import(\"./coordinate.js\").Coordinate} deltaCoordinates Relative value to add.\n */\n View.prototype.adjustCenterInternal = function (deltaCoordinates) {\n var center = this.targetCenter_;\n this.setCenterInternal([\n center[0] + deltaCoordinates[0],\n center[1] + deltaCoordinates[1],\n ]);\n };\n /**\n * Multiply the view resolution by a ratio, optionally using an anchor. Any resolution\n * constraint will apply.\n * @param {number} ratio The ratio to apply on the view resolution.\n * @param {import(\"./coordinate.js\").Coordinate} [opt_anchor] The origin of the transformation.\n * @api\n */\n View.prototype.adjustResolution = function (ratio, opt_anchor) {\n var anchor = opt_anchor && fromUserCoordinate(opt_anchor, this.getProjection());\n this.adjustResolutionInternal(ratio, anchor);\n };\n /**\n * Multiply the view resolution by a ratio, optionally using an anchor. Any resolution\n * constraint will apply.\n * @param {number} ratio The ratio to apply on the view resolution.\n * @param {import(\"./coordinate.js\").Coordinate} [opt_anchor] The origin of the transformation.\n */\n View.prototype.adjustResolutionInternal = function (ratio, opt_anchor) {\n var isMoving = this.getAnimating() || this.getInteracting();\n var size = this.getViewportSize_(this.getRotation());\n var newResolution = this.constraints_.resolution(this.targetResolution_ * ratio, 0, size, isMoving);\n if (opt_anchor) {\n this.targetCenter_ = this.calculateCenterZoom(newResolution, opt_anchor);\n }\n this.targetResolution_ *= ratio;\n this.applyTargetState_();\n };\n /**\n * Adds a value to the view zoom level, optionally using an anchor. Any resolution\n * constraint will apply.\n * @param {number} delta Relative value to add to the zoom level.\n * @param {import(\"./coordinate.js\").Coordinate} [opt_anchor] The origin of the transformation.\n * @api\n */\n View.prototype.adjustZoom = function (delta, opt_anchor) {\n this.adjustResolution(Math.pow(this.zoomFactor_, -delta), opt_anchor);\n };\n /**\n * Adds a value to the view rotation, optionally using an anchor. Any rotation\n * constraint will apply.\n * @param {number} delta Relative value to add to the zoom rotation, in radians.\n * @param {import(\"./coordinate.js\").Coordinate} [opt_anchor] The rotation center.\n * @api\n */\n View.prototype.adjustRotation = function (delta, opt_anchor) {\n if (opt_anchor) {\n opt_anchor = fromUserCoordinate(opt_anchor, this.getProjection());\n }\n this.adjustRotationInternal(delta, opt_anchor);\n };\n /**\n * @param {number} delta Relative value to add to the zoom rotation, in radians.\n * @param {import(\"./coordinate.js\").Coordinate} [opt_anchor] The rotation center.\n */\n View.prototype.adjustRotationInternal = function (delta, opt_anchor) {\n var isMoving = this.getAnimating() || this.getInteracting();\n var newRotation = this.constraints_.rotation(this.targetRotation_ + delta, isMoving);\n if (opt_anchor) {\n this.targetCenter_ = this.calculateCenterRotate(newRotation, opt_anchor);\n }\n this.targetRotation_ += delta;\n this.applyTargetState_();\n };\n /**\n * Set the center of the current view. Any extent constraint will apply.\n * @param {import(\"./coordinate.js\").Coordinate|undefined} center The center of the view.\n * @observable\n * @api\n */\n View.prototype.setCenter = function (center) {\n this.setCenterInternal(fromUserCoordinate(center, this.getProjection()));\n };\n /**\n * Set the center using the view projection (not the user projection).\n * @param {import(\"./coordinate.js\").Coordinate|undefined} center The center of the view.\n */\n View.prototype.setCenterInternal = function (center) {\n this.targetCenter_ = center;\n this.applyTargetState_();\n };\n /**\n * @param {import(\"./ViewHint.js\").default} hint Hint.\n * @param {number} delta Delta.\n * @return {number} New value.\n */\n View.prototype.setHint = function (hint, delta) {\n this.hints_[hint] += delta;\n this.changed();\n return this.hints_[hint];\n };\n /**\n * Set the resolution for this view. Any resolution constraint will apply.\n * @param {number|undefined} resolution The resolution of the view.\n * @observable\n * @api\n */\n View.prototype.setResolution = function (resolution) {\n this.targetResolution_ = resolution;\n this.applyTargetState_();\n };\n /**\n * Set the rotation for this view. Any rotation constraint will apply.\n * @param {number} rotation The rotation of the view in radians.\n * @observable\n * @api\n */\n View.prototype.setRotation = function (rotation) {\n this.targetRotation_ = rotation;\n this.applyTargetState_();\n };\n /**\n * Zoom to a specific zoom level. Any resolution constrain will apply.\n * @param {number} zoom Zoom level.\n * @api\n */\n View.prototype.setZoom = function (zoom) {\n this.setResolution(this.getResolutionForZoom(zoom));\n };\n /**\n * Recompute rotation/resolution/center based on target values.\n * Note: we have to compute rotation first, then resolution and center considering that\n * parameters can influence one another in case a view extent constraint is present.\n * @param {boolean} [opt_doNotCancelAnims] Do not cancel animations.\n * @param {boolean} [opt_forceMoving] Apply constraints as if the view is moving.\n * @private\n */\n View.prototype.applyTargetState_ = function (opt_doNotCancelAnims, opt_forceMoving) {\n var isMoving = this.getAnimating() || this.getInteracting() || opt_forceMoving;\n // compute rotation\n var newRotation = this.constraints_.rotation(this.targetRotation_, isMoving);\n var size = this.getViewportSize_(newRotation);\n var newResolution = this.constraints_.resolution(this.targetResolution_, 0, size, isMoving);\n var newCenter = this.constraints_.center(this.targetCenter_, newResolution, size, isMoving, this.calculateCenterShift(this.targetCenter_, newResolution, newRotation, size));\n if (this.get(ViewProperty.ROTATION) !== newRotation) {\n this.set(ViewProperty.ROTATION, newRotation);\n }\n if (this.get(ViewProperty.RESOLUTION) !== newResolution) {\n this.set(ViewProperty.RESOLUTION, newResolution);\n }\n if (!this.get(ViewProperty.CENTER) ||\n !equals(this.get(ViewProperty.CENTER), newCenter)) {\n this.set(ViewProperty.CENTER, newCenter);\n }\n if (this.getAnimating() && !opt_doNotCancelAnims) {\n this.cancelAnimations();\n }\n this.cancelAnchor_ = undefined;\n };\n /**\n * If any constraints need to be applied, an animation will be triggered.\n * This is typically done on interaction end.\n * Note: calling this with a duration of 0 will apply the constrained values straight away,\n * without animation.\n * @param {number} [opt_duration] The animation duration in ms.\n * @param {number} [opt_resolutionDirection] Which direction to zoom.\n * @param {import(\"./coordinate.js\").Coordinate} [opt_anchor] The origin of the transformation.\n */\n View.prototype.resolveConstraints = function (opt_duration, opt_resolutionDirection, opt_anchor) {\n var duration = opt_duration !== undefined ? opt_duration : 200;\n var direction = opt_resolutionDirection || 0;\n var newRotation = this.constraints_.rotation(this.targetRotation_);\n var size = this.getViewportSize_(newRotation);\n var newResolution = this.constraints_.resolution(this.targetResolution_, direction, size);\n var newCenter = this.constraints_.center(this.targetCenter_, newResolution, size, false, this.calculateCenterShift(this.targetCenter_, newResolution, newRotation, size));\n if (duration === 0 && !this.cancelAnchor_) {\n this.targetResolution_ = newResolution;\n this.targetRotation_ = newRotation;\n this.targetCenter_ = newCenter;\n this.applyTargetState_();\n return;\n }\n var anchor = opt_anchor || (duration === 0 ? this.cancelAnchor_ : undefined);\n this.cancelAnchor_ = undefined;\n if (this.getResolution() !== newResolution ||\n this.getRotation() !== newRotation ||\n !this.getCenterInternal() ||\n !equals(this.getCenterInternal(), newCenter)) {\n if (this.getAnimating()) {\n this.cancelAnimations();\n }\n this.animateInternal({\n rotation: newRotation,\n center: newCenter,\n resolution: newResolution,\n duration: duration,\n easing: easeOut,\n anchor: anchor,\n });\n }\n };\n /**\n * Notify the View that an interaction has started.\n * The view state will be resolved to a stable one if needed\n * (depending on its constraints).\n * @api\n */\n View.prototype.beginInteraction = function () {\n this.resolveConstraints(0);\n this.setHint(ViewHint.INTERACTING, 1);\n };\n /**\n * Notify the View that an interaction has ended. The view state will be resolved\n * to a stable one if needed (depending on its constraints).\n * @param {number} [opt_duration] Animation duration in ms.\n * @param {number} [opt_resolutionDirection] Which direction to zoom.\n * @param {import(\"./coordinate.js\").Coordinate} [opt_anchor] The origin of the transformation.\n * @api\n */\n View.prototype.endInteraction = function (opt_duration, opt_resolutionDirection, opt_anchor) {\n var anchor = opt_anchor && fromUserCoordinate(opt_anchor, this.getProjection());\n this.endInteractionInternal(opt_duration, opt_resolutionDirection, anchor);\n };\n /**\n * Notify the View that an interaction has ended. The view state will be resolved\n * to a stable one if needed (depending on its constraints).\n * @param {number} [opt_duration] Animation duration in ms.\n * @param {number} [opt_resolutionDirection] Which direction to zoom.\n * @param {import(\"./coordinate.js\").Coordinate} [opt_anchor] The origin of the transformation.\n */\n View.prototype.endInteractionInternal = function (opt_duration, opt_resolutionDirection, opt_anchor) {\n this.setHint(ViewHint.INTERACTING, -1);\n this.resolveConstraints(opt_duration, opt_resolutionDirection, opt_anchor);\n };\n /**\n * Get a valid position for the view center according to the current constraints.\n * @param {import(\"./coordinate.js\").Coordinate|undefined} targetCenter Target center position.\n * @param {number} [opt_targetResolution] Target resolution. If not supplied, the current one will be used.\n * This is useful to guess a valid center position at a different zoom level.\n * @return {import(\"./coordinate.js\").Coordinate|undefined} Valid center position.\n */\n View.prototype.getConstrainedCenter = function (targetCenter, opt_targetResolution) {\n var size = this.getViewportSize_(this.getRotation());\n return this.constraints_.center(targetCenter, opt_targetResolution || this.getResolution(), size);\n };\n /**\n * Get a valid zoom level according to the current view constraints.\n * @param {number|undefined} targetZoom Target zoom.\n * @param {number} [opt_direction=0] Indicate which resolution should be used\n * by a renderer if the view resolution does not match any resolution of the tile source.\n * If 0, the nearest resolution will be used. If 1, the nearest lower resolution\n * will be used. If -1, the nearest higher resolution will be used.\n * @return {number|undefined} Valid zoom level.\n */\n View.prototype.getConstrainedZoom = function (targetZoom, opt_direction) {\n var targetRes = this.getResolutionForZoom(targetZoom);\n return this.getZoomForResolution(this.getConstrainedResolution(targetRes, opt_direction));\n };\n /**\n * Get a valid resolution according to the current view constraints.\n * @param {number|undefined} targetResolution Target resolution.\n * @param {number} [opt_direction=0] Indicate which resolution should be used\n * by a renderer if the view resolution does not match any resolution of the tile source.\n * If 0, the nearest resolution will be used. If 1, the nearest lower resolution\n * will be used. If -1, the nearest higher resolution will be used.\n * @return {number|undefined} Valid resolution.\n */\n View.prototype.getConstrainedResolution = function (targetResolution, opt_direction) {\n var direction = opt_direction || 0;\n var size = this.getViewportSize_(this.getRotation());\n return this.constraints_.resolution(targetResolution, direction, size);\n };\n return View;\n}(BaseObject));\n/**\n * @param {Function} callback Callback.\n * @param {*} returnValue Return value.\n */\nfunction animationCallback(callback, returnValue) {\n setTimeout(function () {\n callback(returnValue);\n }, 0);\n}\n/**\n * @param {ViewOptions} options View options.\n * @return {import(\"./centerconstraint.js\").Type} The constraint.\n */\nexport function createCenterConstraint(options) {\n if (options.extent !== undefined) {\n var smooth = options.smoothExtentConstraint !== undefined\n ? options.smoothExtentConstraint\n : true;\n return createExtent(options.extent, options.constrainOnlyCenter, smooth);\n }\n var projection = createProjection(options.projection, 'EPSG:3857');\n if (options.multiWorld !== true && projection.isGlobal()) {\n var extent = projection.getExtent().slice();\n extent[0] = -Infinity;\n extent[2] = Infinity;\n return createExtent(extent, false, false);\n }\n return centerNone;\n}\n/**\n * @param {ViewOptions} options View options.\n * @return {{constraint: import(\"./resolutionconstraint.js\").Type, maxResolution: number,\n * minResolution: number, minZoom: number, zoomFactor: number}} The constraint.\n */\nexport function createResolutionConstraint(options) {\n var resolutionConstraint;\n var maxResolution;\n var minResolution;\n // TODO: move these to be ol constants\n // see https://github.com/openlayers/openlayers/issues/2076\n var defaultMaxZoom = 28;\n var defaultZoomFactor = 2;\n var minZoom = options.minZoom !== undefined ? options.minZoom : DEFAULT_MIN_ZOOM;\n var maxZoom = options.maxZoom !== undefined ? options.maxZoom : defaultMaxZoom;\n var zoomFactor = options.zoomFactor !== undefined ? options.zoomFactor : defaultZoomFactor;\n var multiWorld = options.multiWorld !== undefined ? options.multiWorld : false;\n var smooth = options.smoothResolutionConstraint !== undefined\n ? options.smoothResolutionConstraint\n : true;\n var showFullExtent = options.showFullExtent !== undefined ? options.showFullExtent : false;\n var projection = createProjection(options.projection, 'EPSG:3857');\n var projExtent = projection.getExtent();\n var constrainOnlyCenter = options.constrainOnlyCenter;\n var extent = options.extent;\n if (!multiWorld && !extent && projection.isGlobal()) {\n constrainOnlyCenter = false;\n extent = projExtent;\n }\n if (options.resolutions !== undefined) {\n var resolutions = options.resolutions;\n maxResolution = resolutions[minZoom];\n minResolution =\n resolutions[maxZoom] !== undefined\n ? resolutions[maxZoom]\n : resolutions[resolutions.length - 1];\n if (options.constrainResolution) {\n resolutionConstraint = createSnapToResolutions(resolutions, smooth, !constrainOnlyCenter && extent, showFullExtent);\n }\n else {\n resolutionConstraint = createMinMaxResolution(maxResolution, minResolution, smooth, !constrainOnlyCenter && extent, showFullExtent);\n }\n }\n else {\n // calculate the default min and max resolution\n var size = !projExtent\n ? // use an extent that can fit the whole world if need be\n (360 * METERS_PER_UNIT[Units.DEGREES]) / projection.getMetersPerUnit()\n : Math.max(getWidth(projExtent), getHeight(projExtent));\n var defaultMaxResolution = size / DEFAULT_TILE_SIZE / Math.pow(defaultZoomFactor, DEFAULT_MIN_ZOOM);\n var defaultMinResolution = defaultMaxResolution /\n Math.pow(defaultZoomFactor, defaultMaxZoom - DEFAULT_MIN_ZOOM);\n // user provided maxResolution takes precedence\n maxResolution = options.maxResolution;\n if (maxResolution !== undefined) {\n minZoom = 0;\n }\n else {\n maxResolution = defaultMaxResolution / Math.pow(zoomFactor, minZoom);\n }\n // user provided minResolution takes precedence\n minResolution = options.minResolution;\n if (minResolution === undefined) {\n if (options.maxZoom !== undefined) {\n if (options.maxResolution !== undefined) {\n minResolution = maxResolution / Math.pow(zoomFactor, maxZoom);\n }\n else {\n minResolution = defaultMaxResolution / Math.pow(zoomFactor, maxZoom);\n }\n }\n else {\n minResolution = defaultMinResolution;\n }\n }\n // given discrete zoom levels, minResolution may be different than provided\n maxZoom =\n minZoom +\n Math.floor(Math.log(maxResolution / minResolution) / Math.log(zoomFactor));\n minResolution = maxResolution / Math.pow(zoomFactor, maxZoom - minZoom);\n if (options.constrainResolution) {\n resolutionConstraint = createSnapToPower(zoomFactor, maxResolution, minResolution, smooth, !constrainOnlyCenter && extent, showFullExtent);\n }\n else {\n resolutionConstraint = createMinMaxResolution(maxResolution, minResolution, smooth, !constrainOnlyCenter && extent, showFullExtent);\n }\n }\n return {\n constraint: resolutionConstraint,\n maxResolution: maxResolution,\n minResolution: minResolution,\n minZoom: minZoom,\n zoomFactor: zoomFactor,\n };\n}\n/**\n * @param {ViewOptions} options View options.\n * @return {import(\"./rotationconstraint.js\").Type} Rotation constraint.\n */\nexport function createRotationConstraint(options) {\n var enableRotation = options.enableRotation !== undefined ? options.enableRotation : true;\n if (enableRotation) {\n var constrainRotation = options.constrainRotation;\n if (constrainRotation === undefined || constrainRotation === true) {\n return createSnapToZero();\n }\n else if (constrainRotation === false) {\n return rotationNone;\n }\n else if (typeof constrainRotation === 'number') {\n return createSnapToN(constrainRotation);\n }\n else {\n return rotationNone;\n }\n }\n else {\n return disable;\n }\n}\n/**\n * Determine if an animation involves no view change.\n * @param {Animation} animation The animation.\n * @return {boolean} The animation involves no view change.\n */\nexport function isNoopAnimation(animation) {\n if (animation.sourceCenter && animation.targetCenter) {\n if (!coordinatesEqual(animation.sourceCenter, animation.targetCenter)) {\n return false;\n }\n }\n if (animation.sourceResolution !== animation.targetResolution) {\n return false;\n }\n if (animation.sourceRotation !== animation.targetRotation) {\n return false;\n }\n return true;\n}\n/**\n * @param {import(\"./coordinate.js\").Coordinate} coordinate Coordinate.\n * @param {import(\"./size.js\").Size} size Box pixel size.\n * @param {import(\"./pixel.js\").Pixel} position Position on the view to center on.\n * @param {number} resolution Resolution.\n * @param {number} rotation Rotation.\n * @return {import(\"./coordinate.js\").Coordinate} Shifted center.\n */\nfunction calculateCenterOn(coordinate, size, position, resolution, rotation) {\n // calculate rotated position\n var cosAngle = Math.cos(-rotation);\n var sinAngle = Math.sin(-rotation);\n var rotX = coordinate[0] * cosAngle - coordinate[1] * sinAngle;\n var rotY = coordinate[1] * cosAngle + coordinate[0] * sinAngle;\n rotX += (size[0] / 2 - position[0]) * resolution;\n rotY += (position[1] - size[1] / 2) * resolution;\n // go back to original angle\n sinAngle = -sinAngle; // go back to original rotation\n var centerX = rotX * cosAngle - rotY * sinAngle;\n var centerY = rotY * cosAngle + rotX * sinAngle;\n return [centerX, centerY];\n}\nexport default View;\n//# sourceMappingURL=View.js.map","/**\n * @module ol/ViewHint\n */\n/**\n * @enum {number}\n */\nexport default {\n ANIMATING: 0,\n INTERACTING: 1,\n};\n//# sourceMappingURL=ViewHint.js.map","/**\n * @module ol/color\n */\nimport { assert } from './asserts.js';\nimport { clamp } from './math.js';\n/**\n * A color represented as a short array [red, green, blue, alpha].\n * red, green, and blue should be integers in the range 0..255 inclusive.\n * alpha should be a float in the range 0..1 inclusive. If no alpha value is\n * given then `1` will be used.\n * @typedef {Array} Color\n * @api\n */\n/**\n * This RegExp matches # followed by 3, 4, 6, or 8 hex digits.\n * @const\n * @type {RegExp}\n * @private\n */\nvar HEX_COLOR_RE_ = /^#([a-f0-9]{3}|[a-f0-9]{4}(?:[a-f0-9]{2}){0,2})$/i;\n/**\n * Regular expression for matching potential named color style strings.\n * @const\n * @type {RegExp}\n * @private\n */\nvar NAMED_COLOR_RE_ = /^([a-z]*)$|^hsla?\\(.*\\)$/i;\n/**\n * Return the color as an rgba string.\n * @param {Color|string} color Color.\n * @return {string} Rgba string.\n * @api\n */\nexport function asString(color) {\n if (typeof color === 'string') {\n return color;\n }\n else {\n return toString(color);\n }\n}\n/**\n * Return named color as an rgba string.\n * @param {string} color Named color.\n * @return {string} Rgb string.\n */\nfunction fromNamed(color) {\n var el = document.createElement('div');\n el.style.color = color;\n if (el.style.color !== '') {\n document.body.appendChild(el);\n var rgb = getComputedStyle(el).color;\n document.body.removeChild(el);\n return rgb;\n }\n else {\n return '';\n }\n}\n/**\n * @param {string} s String.\n * @return {Color} Color.\n */\nexport var fromString = (function () {\n // We maintain a small cache of parsed strings. To provide cheap LRU-like\n // semantics, whenever the cache grows too large we simply delete an\n // arbitrary 25% of the entries.\n /**\n * @const\n * @type {number}\n */\n var MAX_CACHE_SIZE = 1024;\n /**\n * @type {Object}\n */\n var cache = {};\n /**\n * @type {number}\n */\n var cacheSize = 0;\n return (\n /**\n * @param {string} s String.\n * @return {Color} Color.\n */\n function (s) {\n var color;\n if (cache.hasOwnProperty(s)) {\n color = cache[s];\n }\n else {\n if (cacheSize >= MAX_CACHE_SIZE) {\n var i = 0;\n for (var key in cache) {\n if ((i++ & 3) === 0) {\n delete cache[key];\n --cacheSize;\n }\n }\n }\n color = fromStringInternal_(s);\n cache[s] = color;\n ++cacheSize;\n }\n return color;\n });\n})();\n/**\n * Return the color as an array. This function maintains a cache of calculated\n * arrays which means the result should not be modified.\n * @param {Color|string} color Color.\n * @return {Color} Color.\n * @api\n */\nexport function asArray(color) {\n if (Array.isArray(color)) {\n return color;\n }\n else {\n return fromString(color);\n }\n}\n/**\n * @param {string} s String.\n * @private\n * @return {Color} Color.\n */\nfunction fromStringInternal_(s) {\n var r, g, b, a, color;\n if (NAMED_COLOR_RE_.exec(s)) {\n s = fromNamed(s);\n }\n if (HEX_COLOR_RE_.exec(s)) {\n // hex\n var n = s.length - 1; // number of hex digits\n var d = // number of digits per channel\n void 0; // number of digits per channel\n if (n <= 4) {\n d = 1;\n }\n else {\n d = 2;\n }\n var hasAlpha = n === 4 || n === 8;\n r = parseInt(s.substr(1 + 0 * d, d), 16);\n g = parseInt(s.substr(1 + 1 * d, d), 16);\n b = parseInt(s.substr(1 + 2 * d, d), 16);\n if (hasAlpha) {\n a = parseInt(s.substr(1 + 3 * d, d), 16);\n }\n else {\n a = 255;\n }\n if (d == 1) {\n r = (r << 4) + r;\n g = (g << 4) + g;\n b = (b << 4) + b;\n if (hasAlpha) {\n a = (a << 4) + a;\n }\n }\n color = [r, g, b, a / 255];\n }\n else if (s.indexOf('rgba(') == 0) {\n // rgba()\n color = s.slice(5, -1).split(',').map(Number);\n normalize(color);\n }\n else if (s.indexOf('rgb(') == 0) {\n // rgb()\n color = s.slice(4, -1).split(',').map(Number);\n color.push(1);\n normalize(color);\n }\n else {\n assert(false, 14); // Invalid color\n }\n return color;\n}\n/**\n * TODO this function is only used in the test, we probably shouldn't export it\n * @param {Color} color Color.\n * @return {Color} Clamped color.\n */\nexport function normalize(color) {\n color[0] = clamp((color[0] + 0.5) | 0, 0, 255);\n color[1] = clamp((color[1] + 0.5) | 0, 0, 255);\n color[2] = clamp((color[2] + 0.5) | 0, 0, 255);\n color[3] = clamp(color[3], 0, 1);\n return color;\n}\n/**\n * @param {Color} color Color.\n * @return {string} String.\n */\nexport function toString(color) {\n var r = color[0];\n if (r != (r | 0)) {\n r = (r + 0.5) | 0;\n }\n var g = color[1];\n if (g != (g | 0)) {\n g = (g + 0.5) | 0;\n }\n var b = color[2];\n if (b != (b | 0)) {\n b = (b + 0.5) | 0;\n }\n var a = color[3] === undefined ? 1 : color[3];\n return 'rgba(' + r + ',' + g + ',' + b + ',' + a + ')';\n}\n/**\n * @param {string} s String.\n * @return {boolean} Whether the string is actually a valid color\n */\nexport function isStringColor(s) {\n if (NAMED_COLOR_RE_.test(s)) {\n s = fromNamed(s);\n }\n return (HEX_COLOR_RE_.test(s) || s.indexOf('rgba(') === 0 || s.indexOf('rgb(') === 0);\n}\n//# sourceMappingURL=color.js.map","/**\n * @module ol/colorlike\n */\nimport { toString } from './color.js';\n/**\n * A type accepted by CanvasRenderingContext2D.fillStyle\n * or CanvasRenderingContext2D.strokeStyle.\n * Represents a color, pattern, or gradient. The origin for patterns and\n * gradients as fill style is an increment of 512 css pixels from map coordinate\n * `[0, 0]`. For seamless repeat patterns, width and height of the pattern image\n * must be a factor of two (2, 4, 8, ..., 512).\n *\n * @typedef {string|CanvasPattern|CanvasGradient} ColorLike\n * @api\n */\n/**\n * @param {import(\"./color.js\").Color|ColorLike} color Color.\n * @return {ColorLike} The color as an {@link ol/colorlike~ColorLike}.\n * @api\n */\nexport function asColorLike(color) {\n if (Array.isArray(color)) {\n return toString(color);\n }\n else {\n return color;\n }\n}\n//# sourceMappingURL=colorlike.js.map","var __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n if (typeof b !== \"function\" && b !== null)\n throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\n/**\n * @module ol/control/Control\n */\nimport BaseObject from '../Object.js';\nimport MapEventType from '../MapEventType.js';\nimport { VOID } from '../functions.js';\nimport { listen, unlistenByKey } from '../events.js';\nimport { removeNode } from '../dom.js';\n/**\n * @typedef {Object} Options\n * @property {HTMLElement} [element] The element is the control's\n * container element. This only needs to be specified if you're developing\n * a custom control.\n * @property {function(import(\"../MapEvent.js\").default):void} [render] Function called when\n * the control should be re-rendered. This is called in a `requestAnimationFrame`\n * callback.\n * @property {HTMLElement|string} [target] Specify a target if you want\n * the control to be rendered outside of the map's viewport.\n */\n/**\n * @classdesc\n * A control is a visible widget with a DOM element in a fixed position on the\n * screen. They can involve user input (buttons), or be informational only;\n * the position is determined using CSS. By default these are placed in the\n * container with CSS class name `ol-overlaycontainer-stopevent`, but can use\n * any outside DOM element.\n *\n * This is the base class for controls. You can use it for simple custom\n * controls by creating the element with listeners, creating an instance:\n * ```js\n * var myControl = new Control({element: myElement});\n * ```\n * and then adding this to the map.\n *\n * The main advantage of having this as a control rather than a simple separate\n * DOM element is that preventing propagation is handled for you. Controls\n * will also be objects in a {@link module:ol/Collection~Collection}, so you can use their methods.\n *\n * You can also extend this base for your own control class. See\n * examples/custom-controls for an example of how to do this.\n *\n * @api\n */\nvar Control = /** @class */ (function (_super) {\n __extends(Control, _super);\n /**\n * @param {Options} options Control options.\n */\n function Control(options) {\n var _this = _super.call(this) || this;\n var element = options.element;\n if (element && !options.target && !element.style.pointerEvents) {\n element.style.pointerEvents = 'auto';\n }\n /**\n * @protected\n * @type {HTMLElement}\n */\n _this.element = element ? element : null;\n /**\n * @private\n * @type {HTMLElement}\n */\n _this.target_ = null;\n /**\n * @private\n * @type {import(\"../PluggableMap.js\").default}\n */\n _this.map_ = null;\n /**\n * @protected\n * @type {!Array}\n */\n _this.listenerKeys = [];\n if (options.render) {\n _this.render = options.render;\n }\n if (options.target) {\n _this.setTarget(options.target);\n }\n return _this;\n }\n /**\n * Clean up.\n */\n Control.prototype.disposeInternal = function () {\n removeNode(this.element);\n _super.prototype.disposeInternal.call(this);\n };\n /**\n * Get the map associated with this control.\n * @return {import(\"../PluggableMap.js\").default|undefined} Map.\n * @api\n */\n Control.prototype.getMap = function () {\n return this.map_;\n };\n /**\n * Remove the control from its current map and attach it to the new map.\n * Subclasses may set up event handlers to get notified about changes to\n * the map here.\n * @param {import(\"../PluggableMap.js\").default} [map] Map.\n * @api\n */\n Control.prototype.setMap = function (map) {\n if (this.map_) {\n removeNode(this.element);\n }\n for (var i = 0, ii = this.listenerKeys.length; i < ii; ++i) {\n unlistenByKey(this.listenerKeys[i]);\n }\n this.listenerKeys.length = 0;\n this.map_ = map;\n if (this.map_) {\n var target = this.target_\n ? this.target_\n : map.getOverlayContainerStopEvent();\n target.appendChild(this.element);\n if (this.render !== VOID) {\n this.listenerKeys.push(listen(map, MapEventType.POSTRENDER, this.render, this));\n }\n map.render();\n }\n };\n /**\n * Renders the control.\n * @param {import(\"../MapEvent.js\").default} mapEvent Map event.\n * @api\n */\n Control.prototype.render = function (mapEvent) { };\n /**\n * This function is used to set a target element for the control. It has no\n * effect if it is called after the control has been added to the map (i.e.\n * after `setMap` is called on the control). If no `target` is set in the\n * options passed to the control constructor and if `setTarget` is not called\n * then the control is added to the map's overlay container.\n * @param {HTMLElement|string} target Target.\n * @api\n */\n Control.prototype.setTarget = function (target) {\n this.target_ =\n typeof target === 'string' ? document.getElementById(target) : target;\n };\n return Control;\n}(BaseObject));\nexport default Control;\n//# sourceMappingURL=Control.js.map","var __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n if (typeof b !== \"function\" && b !== null)\n throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\n/**\n * @module ol/control/ScaleLine\n */\nimport Control from './Control.js';\nimport ProjUnits from '../proj/Units.js';\nimport { CLASS_UNSELECTABLE } from '../css.js';\nimport { METERS_PER_UNIT, getPointResolution } from '../proj.js';\nimport { assert } from '../asserts.js';\n/**\n * @type {string}\n */\nvar UNITS_PROP = 'units';\n/**\n * Units for the scale line. Supported values are `'degrees'`, `'imperial'`,\n * `'nautical'`, `'metric'`, `'us'`.\n * @enum {string}\n */\nexport var Units = {\n DEGREES: 'degrees',\n IMPERIAL: 'imperial',\n NAUTICAL: 'nautical',\n METRIC: 'metric',\n US: 'us',\n};\n/**\n * @const\n * @type {Array}\n */\nvar LEADING_DIGITS = [1, 2, 5];\n/**\n * @const\n * @type {number}\n */\nvar DEFAULT_DPI = 25.4 / 0.28;\n/***\n * @template Return\n * @typedef {import(\"../Observable\").OnSignature &\n * import(\"../Observable\").OnSignature &\n * import(\"../Observable\").CombinedOnSignature} ScaleLineOnSignature\n */\n/**\n * @typedef {Object} Options\n * @property {string} [className='ol-scale-line'] CSS Class name.\n * @property {number} [minWidth=64] Minimum width in pixels at the OGC default dpi. The width will be\n * adjusted to match the dpi used.\n * @property {function(import(\"../MapEvent.js\").default):void} [render] Function called when the control\n * should be re-rendered. This is called in a `requestAnimationFrame` callback.\n * @property {HTMLElement|string} [target] Specify a target if you want the control\n * to be rendered outside of the map's viewport.\n * @property {import(\"./ScaleLine.js\").Units|string} [units='metric'] Units.\n * @property {boolean} [bar=false] Render scalebars instead of a line.\n * @property {number} [steps=4] Number of steps the scalebar should use. Use even numbers\n * for best results. Only applies when `bar` is `true`.\n * @property {boolean} [text=false] Render the text scale above of the scalebar. Only applies\n * when `bar` is `true`.\n * @property {number|undefined} [dpi=undefined] dpi of output device such as printer. Only applies\n * when `bar` is `true`. If undefined the OGC default screen pixel size of 0.28mm will be assumed.\n */\n/**\n * @classdesc\n * A control displaying rough y-axis distances, calculated for the center of the\n * viewport. For conformal projections (e.g. EPSG:3857, the default view\n * projection in OpenLayers), the scale is valid for all directions.\n * No scale line will be shown when the y-axis distance of a pixel at the\n * viewport center cannot be calculated in the view projection.\n * By default the scale line will show in the bottom left portion of the map,\n * but this can be changed by using the css selector `.ol-scale-line`.\n * When specifying `bar` as `true`, a scalebar will be rendered instead\n * of a scaleline.\n *\n * @api\n */\nvar ScaleLine = /** @class */ (function (_super) {\n __extends(ScaleLine, _super);\n /**\n * @param {Options} [opt_options] Scale line options.\n */\n function ScaleLine(opt_options) {\n var _this = this;\n var options = opt_options ? opt_options : {};\n var className = options.className !== undefined\n ? options.className\n : options.bar\n ? 'ol-scale-bar'\n : 'ol-scale-line';\n _this = _super.call(this, {\n element: document.createElement('div'),\n render: options.render,\n target: options.target,\n }) || this;\n /***\n * @type {ScaleLineOnSignature}\n */\n _this.on;\n /***\n * @type {ScaleLineOnSignature}\n */\n _this.once;\n /***\n * @type {ScaleLineOnSignature}\n */\n _this.un;\n /**\n * @private\n * @type {HTMLElement}\n */\n _this.innerElement_ = document.createElement('div');\n _this.innerElement_.className = className + '-inner';\n _this.element.className = className + ' ' + CLASS_UNSELECTABLE;\n _this.element.appendChild(_this.innerElement_);\n /**\n * @private\n * @type {?import(\"../View.js\").State}\n */\n _this.viewState_ = null;\n /**\n * @private\n * @type {number}\n */\n _this.minWidth_ = options.minWidth !== undefined ? options.minWidth : 64;\n /**\n * @private\n * @type {boolean}\n */\n _this.renderedVisible_ = false;\n /**\n * @private\n * @type {number|undefined}\n */\n _this.renderedWidth_ = undefined;\n /**\n * @private\n * @type {string}\n */\n _this.renderedHTML_ = '';\n _this.addChangeListener(UNITS_PROP, _this.handleUnitsChanged_);\n _this.setUnits(options.units || Units.METRIC);\n /**\n * @private\n * @type {boolean}\n */\n _this.scaleBar_ = options.bar || false;\n /**\n * @private\n * @type {number}\n */\n _this.scaleBarSteps_ = options.steps || 4;\n /**\n * @private\n * @type {boolean}\n */\n _this.scaleBarText_ = options.text || false;\n /**\n * @private\n * @type {number|undefined}\n */\n _this.dpi_ = options.dpi || undefined;\n return _this;\n }\n /**\n * Return the units to use in the scale line.\n * @return {import(\"./ScaleLine.js\").Units} The units\n * to use in the scale line.\n * @observable\n * @api\n */\n ScaleLine.prototype.getUnits = function () {\n return this.get(UNITS_PROP);\n };\n /**\n * @private\n */\n ScaleLine.prototype.handleUnitsChanged_ = function () {\n this.updateElement_();\n };\n /**\n * Set the units to use in the scale line.\n * @param {import(\"./ScaleLine.js\").Units} units The units to use in the scale line.\n * @observable\n * @api\n */\n ScaleLine.prototype.setUnits = function (units) {\n this.set(UNITS_PROP, units);\n };\n /**\n * Specify the dpi of output device such as printer.\n * @param {number|undefined} dpi The dpi of output device.\n * @api\n */\n ScaleLine.prototype.setDpi = function (dpi) {\n this.dpi_ = dpi;\n };\n /**\n * @private\n */\n ScaleLine.prototype.updateElement_ = function () {\n var viewState = this.viewState_;\n if (!viewState) {\n if (this.renderedVisible_) {\n this.element.style.display = 'none';\n this.renderedVisible_ = false;\n }\n return;\n }\n var center = viewState.center;\n var projection = viewState.projection;\n var units = this.getUnits();\n var pointResolutionUnits = units == Units.DEGREES ? ProjUnits.DEGREES : ProjUnits.METERS;\n var pointResolution = getPointResolution(projection, viewState.resolution, center, pointResolutionUnits);\n var minWidth = (this.minWidth_ * (this.dpi_ || DEFAULT_DPI)) / DEFAULT_DPI;\n var nominalCount = minWidth * pointResolution;\n var suffix = '';\n if (units == Units.DEGREES) {\n var metersPerDegree = METERS_PER_UNIT[ProjUnits.DEGREES];\n nominalCount *= metersPerDegree;\n if (nominalCount < metersPerDegree / 60) {\n suffix = '\\u2033'; // seconds\n pointResolution *= 3600;\n }\n else if (nominalCount < metersPerDegree) {\n suffix = '\\u2032'; // minutes\n pointResolution *= 60;\n }\n else {\n suffix = '\\u00b0'; // degrees\n }\n }\n else if (units == Units.IMPERIAL) {\n if (nominalCount < 0.9144) {\n suffix = 'in';\n pointResolution /= 0.0254;\n }\n else if (nominalCount < 1609.344) {\n suffix = 'ft';\n pointResolution /= 0.3048;\n }\n else {\n suffix = 'mi';\n pointResolution /= 1609.344;\n }\n }\n else if (units == Units.NAUTICAL) {\n pointResolution /= 1852;\n suffix = 'nm';\n }\n else if (units == Units.METRIC) {\n if (nominalCount < 0.001) {\n suffix = 'μm';\n pointResolution *= 1000000;\n }\n else if (nominalCount < 1) {\n suffix = 'mm';\n pointResolution *= 1000;\n }\n else if (nominalCount < 1000) {\n suffix = 'm';\n }\n else {\n suffix = 'km';\n pointResolution /= 1000;\n }\n }\n else if (units == Units.US) {\n if (nominalCount < 0.9144) {\n suffix = 'in';\n pointResolution *= 39.37;\n }\n else if (nominalCount < 1609.344) {\n suffix = 'ft';\n pointResolution /= 0.30480061;\n }\n else {\n suffix = 'mi';\n pointResolution /= 1609.3472;\n }\n }\n else {\n assert(false, 33); // Invalid units\n }\n var i = 3 * Math.floor(Math.log(minWidth * pointResolution) / Math.log(10));\n var count, width, decimalCount;\n while (true) {\n decimalCount = Math.floor(i / 3);\n var decimal = Math.pow(10, decimalCount);\n count = LEADING_DIGITS[((i % 3) + 3) % 3] * decimal;\n width = Math.round(count / pointResolution);\n if (isNaN(width)) {\n this.element.style.display = 'none';\n this.renderedVisible_ = false;\n return;\n }\n else if (width >= minWidth) {\n break;\n }\n ++i;\n }\n var html;\n if (this.scaleBar_) {\n html = this.createScaleBar(width, count, suffix);\n }\n else {\n html = count.toFixed(decimalCount < 0 ? -decimalCount : 0) + ' ' + suffix;\n }\n if (this.renderedHTML_ != html) {\n this.innerElement_.innerHTML = html;\n this.renderedHTML_ = html;\n }\n if (this.renderedWidth_ != width) {\n this.innerElement_.style.width = width + 'px';\n this.renderedWidth_ = width;\n }\n if (!this.renderedVisible_) {\n this.element.style.display = '';\n this.renderedVisible_ = true;\n }\n };\n /**\n * @private\n * @param {number} width The current width of the scalebar.\n * @param {number} scale The current scale.\n * @param {string} suffix The suffix to append to the scale text.\n * @return {string} The stringified HTML of the scalebar.\n */\n ScaleLine.prototype.createScaleBar = function (width, scale, suffix) {\n var mapScale = '1 : ' + Math.round(this.getScaleForResolution()).toLocaleString();\n var scaleSteps = [];\n var stepWidth = width / this.scaleBarSteps_;\n var backgroundColor = '#ffffff';\n for (var i = 0; i < this.scaleBarSteps_; i++) {\n if (i === 0) {\n // create the first marker at position 0\n scaleSteps.push(this.createMarker('absolute', i));\n }\n scaleSteps.push('
' +\n '
' +\n '
' +\n this.createMarker('relative', i) +\n /*render text every second step, except when only 2 steps */\n (i % 2 === 0 || this.scaleBarSteps_ === 2\n ? this.createStepText(i, width, false, scale, suffix)\n : '') +\n '
');\n if (i === this.scaleBarSteps_ - 1) {\n {\n /*render text at the end */\n }\n scaleSteps.push(this.createStepText(i + 1, width, true, scale, suffix));\n }\n // switch colors of steps between black and white\n if (backgroundColor === '#ffffff') {\n backgroundColor = '#000000';\n }\n else {\n backgroundColor = '#ffffff';\n }\n }\n var scaleBarText;\n if (this.scaleBarText_) {\n scaleBarText =\n '
' +\n mapScale +\n '
';\n }\n else {\n scaleBarText = '';\n }\n var container = '
' +\n scaleBarText +\n scaleSteps.join('') +\n '
';\n return container;\n };\n /**\n * Creates a marker at given position\n * @param {string} position The position, absolute or relative\n * @param {number} i The iterator\n * @return {string} The stringified div containing the marker\n */\n ScaleLine.prototype.createMarker = function (position, i) {\n var top = position === 'absolute' ? 3 : -10;\n return ('
');\n };\n /**\n * Creates the label for a marker marker at given position\n * @param {number} i The iterator\n * @param {number} width The width the scalebar will currently use\n * @param {boolean} isLast Flag indicating if we add the last step text\n * @param {number} scale The current scale for the whole scalebar\n * @param {string} suffix The suffix for the scale\n * @return {string} The stringified div containing the step text\n */\n ScaleLine.prototype.createStepText = function (i, width, isLast, scale, suffix) {\n var length = i === 0 ? 0 : Math.round((scale / this.scaleBarSteps_) * i * 100) / 100;\n var lengthString = length + (i === 0 ? '' : ' ' + suffix);\n var margin = i === 0 ? -3 : (width / this.scaleBarSteps_) * -1;\n var minWidth = i === 0 ? 0 : (width / this.scaleBarSteps_) * 2;\n return ('
' +\n lengthString +\n '
');\n };\n /**\n * Returns the appropriate scale for the given resolution and units.\n * @return {number} The appropriate scale.\n */\n ScaleLine.prototype.getScaleForResolution = function () {\n var resolution = getPointResolution(this.viewState_.projection, this.viewState_.resolution, this.viewState_.center);\n var dpi = this.dpi_ || DEFAULT_DPI;\n var mpu = this.viewState_.projection.getMetersPerUnit();\n var inchesPerMeter = 1000 / 25.4;\n return parseFloat(resolution.toString()) * mpu * inchesPerMeter * dpi;\n };\n /**\n * Update the scale line element.\n * @param {import(\"../MapEvent.js\").default} mapEvent Map event.\n * @override\n */\n ScaleLine.prototype.render = function (mapEvent) {\n var frameState = mapEvent.frameState;\n if (!frameState) {\n this.viewState_ = null;\n }\n else {\n this.viewState_ = frameState.viewState;\n }\n this.updateElement_();\n };\n return ScaleLine;\n}(Control));\nexport default ScaleLine;\n//# sourceMappingURL=ScaleLine.js.map","var __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n if (typeof b !== \"function\" && b !== null)\n throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\n/**\n * @module ol/control/Zoom\n */\nimport Control from './Control.js';\nimport EventType from '../events/EventType.js';\nimport { CLASS_CONTROL, CLASS_UNSELECTABLE } from '../css.js';\nimport { easeOut } from '../easing.js';\n/**\n * @typedef {Object} Options\n * @property {number} [duration=250] Animation duration in milliseconds.\n * @property {string} [className='ol-zoom'] CSS class name.\n * @property {string} [zoomInClassName=className + '-in'] CSS class name for the zoom-in button.\n * @property {string} [zoomOutClassName=className + '-out'] CSS class name for the zoom-out button.\n * @property {string|HTMLElement} [zoomInLabel='+'] Text label to use for the zoom-in\n * button. Instead of text, also an element (e.g. a `span` element) can be used.\n * @property {string|HTMLElement} [zoomOutLabel='–'] Text label to use for the zoom-out button.\n * Instead of text, also an element (e.g. a `span` element) can be used.\n * @property {string} [zoomInTipLabel='Zoom in'] Text label to use for the button tip.\n * @property {string} [zoomOutTipLabel='Zoom out'] Text label to use for the button tip.\n * @property {number} [delta=1] The zoom delta applied on each click.\n * @property {HTMLElement|string} [target] Specify a target if you want the control to be\n * rendered outside of the map's viewport.\n */\n/**\n * @classdesc\n * A control with 2 buttons, one for zoom in and one for zoom out.\n * This control is one of the default controls of a map. To style this control\n * use css selectors `.ol-zoom-in` and `.ol-zoom-out`.\n *\n * @api\n */\nvar Zoom = /** @class */ (function (_super) {\n __extends(Zoom, _super);\n /**\n * @param {Options} [opt_options] Zoom options.\n */\n function Zoom(opt_options) {\n var _this = this;\n var options = opt_options ? opt_options : {};\n _this = _super.call(this, {\n element: document.createElement('div'),\n target: options.target,\n }) || this;\n var className = options.className !== undefined ? options.className : 'ol-zoom';\n var delta = options.delta !== undefined ? options.delta : 1;\n var zoomInClassName = options.zoomInClassName !== undefined\n ? options.zoomInClassName\n : className + '-in';\n var zoomOutClassName = options.zoomOutClassName !== undefined\n ? options.zoomOutClassName\n : className + '-out';\n var zoomInLabel = options.zoomInLabel !== undefined ? options.zoomInLabel : '+';\n var zoomOutLabel = options.zoomOutLabel !== undefined ? options.zoomOutLabel : '\\u2013';\n var zoomInTipLabel = options.zoomInTipLabel !== undefined ? options.zoomInTipLabel : 'Zoom in';\n var zoomOutTipLabel = options.zoomOutTipLabel !== undefined\n ? options.zoomOutTipLabel\n : 'Zoom out';\n var inElement = document.createElement('button');\n inElement.className = zoomInClassName;\n inElement.setAttribute('type', 'button');\n inElement.title = zoomInTipLabel;\n inElement.appendChild(typeof zoomInLabel === 'string'\n ? document.createTextNode(zoomInLabel)\n : zoomInLabel);\n inElement.addEventListener(EventType.CLICK, _this.handleClick_.bind(_this, delta), false);\n var outElement = document.createElement('button');\n outElement.className = zoomOutClassName;\n outElement.setAttribute('type', 'button');\n outElement.title = zoomOutTipLabel;\n outElement.appendChild(typeof zoomOutLabel === 'string'\n ? document.createTextNode(zoomOutLabel)\n : zoomOutLabel);\n outElement.addEventListener(EventType.CLICK, _this.handleClick_.bind(_this, -delta), false);\n var cssClasses = className + ' ' + CLASS_UNSELECTABLE + ' ' + CLASS_CONTROL;\n var element = _this.element;\n element.className = cssClasses;\n element.appendChild(inElement);\n element.appendChild(outElement);\n /**\n * @type {number}\n * @private\n */\n _this.duration_ = options.duration !== undefined ? options.duration : 250;\n return _this;\n }\n /**\n * @param {number} delta Zoom delta.\n * @param {MouseEvent} event The event to handle\n * @private\n */\n Zoom.prototype.handleClick_ = function (delta, event) {\n event.preventDefault();\n this.zoomByDelta_(delta);\n };\n /**\n * @param {number} delta Zoom delta.\n * @private\n */\n Zoom.prototype.zoomByDelta_ = function (delta) {\n var map = this.getMap();\n var view = map.getView();\n if (!view) {\n // the map does not have a view, so we can't act\n // upon it\n return;\n }\n var currentZoom = view.getZoom();\n if (currentZoom !== undefined) {\n var newZoom = view.getConstrainedZoom(currentZoom + delta);\n if (this.duration_ > 0) {\n if (view.getAnimating()) {\n view.cancelAnimations();\n }\n view.animate({\n zoom: newZoom,\n duration: this.duration_,\n easing: easeOut,\n });\n }\n else {\n view.setZoom(newZoom);\n }\n }\n };\n return Zoom;\n}(Control));\nexport default Zoom;\n//# sourceMappingURL=Zoom.js.map","/**\n * @module ol/control/ZoomSlider\n */\nvar __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n if (typeof b !== \"function\" && b !== null)\n throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nimport Control from './Control.js';\nimport EventType from '../events/EventType.js';\nimport PointerEventType from '../pointer/EventType.js';\nimport { CLASS_CONTROL, CLASS_UNSELECTABLE } from '../css.js';\nimport { clamp } from '../math.js';\nimport { easeOut } from '../easing.js';\nimport { listen, unlistenByKey } from '../events.js';\nimport { stopPropagation } from '../events/Event.js';\n/**\n * The enum for available directions.\n *\n * @enum {number}\n */\nvar Direction = {\n VERTICAL: 0,\n HORIZONTAL: 1,\n};\n/**\n * @typedef {Object} Options\n * @property {string} [className='ol-zoomslider'] CSS class name.\n * @property {number} [duration=200] Animation duration in milliseconds.\n * @property {function(import(\"../MapEvent.js\").default):void} [render] Function called when the control\n * should be re-rendered. This is called in a `requestAnimationFrame` callback.\n */\n/**\n * @classdesc\n * A slider type of control for zooming.\n *\n * Example:\n *\n * map.addControl(new ZoomSlider());\n *\n * @api\n */\nvar ZoomSlider = /** @class */ (function (_super) {\n __extends(ZoomSlider, _super);\n /**\n * @param {Options} [opt_options] Zoom slider options.\n */\n function ZoomSlider(opt_options) {\n var _this = this;\n var options = opt_options ? opt_options : {};\n _this = _super.call(this, {\n element: document.createElement('div'),\n render: options.render,\n }) || this;\n /**\n * @type {!Array}\n * @private\n */\n _this.dragListenerKeys_ = [];\n /**\n * Will hold the current resolution of the view.\n *\n * @type {number|undefined}\n * @private\n */\n _this.currentResolution_ = undefined;\n /**\n * The direction of the slider. Will be determined from actual display of the\n * container and defaults to Direction.VERTICAL.\n *\n * @type {Direction}\n * @private\n */\n _this.direction_ = Direction.VERTICAL;\n /**\n * @type {boolean}\n * @private\n */\n _this.dragging_;\n /**\n * @type {number}\n * @private\n */\n _this.heightLimit_ = 0;\n /**\n * @type {number}\n * @private\n */\n _this.widthLimit_ = 0;\n /**\n * @type {number|undefined}\n * @private\n */\n _this.startX_;\n /**\n * @type {number|undefined}\n * @private\n */\n _this.startY_;\n /**\n * The calculated thumb size (border box plus margins). Set when initSlider_\n * is called.\n * @type {import(\"../size.js\").Size}\n * @private\n */\n _this.thumbSize_ = null;\n /**\n * Whether the slider is initialized.\n * @type {boolean}\n * @private\n */\n _this.sliderInitialized_ = false;\n /**\n * @type {number}\n * @private\n */\n _this.duration_ = options.duration !== undefined ? options.duration : 200;\n var className = options.className !== undefined ? options.className : 'ol-zoomslider';\n var thumbElement = document.createElement('button');\n thumbElement.setAttribute('type', 'button');\n thumbElement.className = className + '-thumb ' + CLASS_UNSELECTABLE;\n var containerElement = _this.element;\n containerElement.className =\n className + ' ' + CLASS_UNSELECTABLE + ' ' + CLASS_CONTROL;\n containerElement.appendChild(thumbElement);\n containerElement.addEventListener(PointerEventType.POINTERDOWN, _this.handleDraggerStart_.bind(_this), false);\n containerElement.addEventListener(PointerEventType.POINTERMOVE, _this.handleDraggerDrag_.bind(_this), false);\n containerElement.addEventListener(PointerEventType.POINTERUP, _this.handleDraggerEnd_.bind(_this), false);\n containerElement.addEventListener(EventType.CLICK, _this.handleContainerClick_.bind(_this), false);\n thumbElement.addEventListener(EventType.CLICK, stopPropagation, false);\n return _this;\n }\n /**\n * Remove the control from its current map and attach it to the new map.\n * Subclasses may set up event handlers to get notified about changes to\n * the map here.\n * @param {import(\"../PluggableMap.js\").default} map Map.\n * @api\n */\n ZoomSlider.prototype.setMap = function (map) {\n _super.prototype.setMap.call(this, map);\n if (map) {\n map.render();\n }\n };\n /**\n * Initializes the slider element. This will determine and set this controls\n * direction_ and also constrain the dragging of the thumb to always be within\n * the bounds of the container.\n *\n * @return {boolean} Initialization successful\n * @private\n */\n ZoomSlider.prototype.initSlider_ = function () {\n var container = this.element;\n var containerWidth = container.offsetWidth;\n var containerHeight = container.offsetHeight;\n if (containerWidth === 0 && containerHeight === 0) {\n return (this.sliderInitialized_ = false);\n }\n var containerStyle = getComputedStyle(container);\n containerWidth -=\n parseFloat(containerStyle['paddingRight']) +\n parseFloat(containerStyle['paddingLeft']);\n containerHeight -=\n parseFloat(containerStyle['paddingTop']) +\n parseFloat(containerStyle['paddingBottom']);\n var thumb = /** @type {HTMLElement} */ (container.firstElementChild);\n var thumbStyle = getComputedStyle(thumb);\n var thumbWidth = thumb.offsetWidth +\n parseFloat(thumbStyle['marginRight']) +\n parseFloat(thumbStyle['marginLeft']);\n var thumbHeight = thumb.offsetHeight +\n parseFloat(thumbStyle['marginTop']) +\n parseFloat(thumbStyle['marginBottom']);\n this.thumbSize_ = [thumbWidth, thumbHeight];\n if (containerWidth > containerHeight) {\n this.direction_ = Direction.HORIZONTAL;\n this.widthLimit_ = containerWidth - thumbWidth;\n }\n else {\n this.direction_ = Direction.VERTICAL;\n this.heightLimit_ = containerHeight - thumbHeight;\n }\n return (this.sliderInitialized_ = true);\n };\n /**\n * @param {PointerEvent} event The browser event to handle.\n * @private\n */\n ZoomSlider.prototype.handleContainerClick_ = function (event) {\n var view = this.getMap().getView();\n var relativePosition = this.getRelativePosition_(event.offsetX - this.thumbSize_[0] / 2, event.offsetY - this.thumbSize_[1] / 2);\n var resolution = this.getResolutionForPosition_(relativePosition);\n var zoom = view.getConstrainedZoom(view.getZoomForResolution(resolution));\n view.animateInternal({\n zoom: zoom,\n duration: this.duration_,\n easing: easeOut,\n });\n };\n /**\n * Handle dragger start events.\n * @param {PointerEvent} event The drag event.\n * @private\n */\n ZoomSlider.prototype.handleDraggerStart_ = function (event) {\n if (!this.dragging_ && event.target === this.element.firstElementChild) {\n var element = /** @type {HTMLElement} */ (this.element.firstElementChild);\n this.getMap().getView().beginInteraction();\n this.startX_ = event.clientX - parseFloat(element.style.left);\n this.startY_ = event.clientY - parseFloat(element.style.top);\n this.dragging_ = true;\n if (this.dragListenerKeys_.length === 0) {\n var drag = this.handleDraggerDrag_;\n var end = this.handleDraggerEnd_;\n var doc = this.getMap().getOwnerDocument();\n this.dragListenerKeys_.push(listen(doc, PointerEventType.POINTERMOVE, drag, this), listen(doc, PointerEventType.POINTERUP, end, this));\n }\n }\n };\n /**\n * Handle dragger drag events.\n *\n * @param {PointerEvent} event The drag event.\n * @private\n */\n ZoomSlider.prototype.handleDraggerDrag_ = function (event) {\n if (this.dragging_) {\n var deltaX = event.clientX - this.startX_;\n var deltaY = event.clientY - this.startY_;\n var relativePosition = this.getRelativePosition_(deltaX, deltaY);\n this.currentResolution_ =\n this.getResolutionForPosition_(relativePosition);\n this.getMap().getView().setResolution(this.currentResolution_);\n }\n };\n /**\n * Handle dragger end events.\n * @param {PointerEvent} event The drag event.\n * @private\n */\n ZoomSlider.prototype.handleDraggerEnd_ = function (event) {\n if (this.dragging_) {\n var view = this.getMap().getView();\n view.endInteraction();\n this.dragging_ = false;\n this.startX_ = undefined;\n this.startY_ = undefined;\n this.dragListenerKeys_.forEach(unlistenByKey);\n this.dragListenerKeys_.length = 0;\n }\n };\n /**\n * Positions the thumb inside its container according to the given resolution.\n *\n * @param {number} res The res.\n * @private\n */\n ZoomSlider.prototype.setThumbPosition_ = function (res) {\n var position = this.getPositionForResolution_(res);\n var thumb = /** @type {HTMLElement} */ (this.element.firstElementChild);\n if (this.direction_ == Direction.HORIZONTAL) {\n thumb.style.left = this.widthLimit_ * position + 'px';\n }\n else {\n thumb.style.top = this.heightLimit_ * position + 'px';\n }\n };\n /**\n * Calculates the relative position of the thumb given x and y offsets. The\n * relative position scales from 0 to 1. The x and y offsets are assumed to be\n * in pixel units within the dragger limits.\n *\n * @param {number} x Pixel position relative to the left of the slider.\n * @param {number} y Pixel position relative to the top of the slider.\n * @return {number} The relative position of the thumb.\n * @private\n */\n ZoomSlider.prototype.getRelativePosition_ = function (x, y) {\n var amount;\n if (this.direction_ === Direction.HORIZONTAL) {\n amount = x / this.widthLimit_;\n }\n else {\n amount = y / this.heightLimit_;\n }\n return clamp(amount, 0, 1);\n };\n /**\n * Calculates the corresponding resolution of the thumb given its relative\n * position (where 0 is the minimum and 1 is the maximum).\n *\n * @param {number} position The relative position of the thumb.\n * @return {number} The corresponding resolution.\n * @private\n */\n ZoomSlider.prototype.getResolutionForPosition_ = function (position) {\n var fn = this.getMap().getView().getResolutionForValueFunction();\n return fn(1 - position);\n };\n /**\n * Determines the relative position of the slider for the given resolution. A\n * relative position of 0 corresponds to the minimum view resolution. A\n * relative position of 1 corresponds to the maximum view resolution.\n *\n * @param {number} res The resolution.\n * @return {number} The relative position value (between 0 and 1).\n * @private\n */\n ZoomSlider.prototype.getPositionForResolution_ = function (res) {\n var fn = this.getMap().getView().getValueForResolutionFunction();\n return clamp(1 - fn(res), 0, 1);\n };\n /**\n * Update the zoomslider element.\n * @param {import(\"../MapEvent.js\").default} mapEvent Map event.\n * @override\n */\n ZoomSlider.prototype.render = function (mapEvent) {\n if (!mapEvent.frameState) {\n return;\n }\n if (!this.sliderInitialized_ && !this.initSlider_()) {\n return;\n }\n var res = mapEvent.frameState.viewState.resolution;\n this.currentResolution_ = res;\n this.setThumbPosition_(res);\n };\n return ZoomSlider;\n}(Control));\nexport default ZoomSlider;\n//# sourceMappingURL=ZoomSlider.js.map","/**\n * @module ol/coordinate\n */\nimport { getWidth } from './extent.js';\nimport { modulo } from './math.js';\nimport { padNumber } from './string.js';\n/**\n * An array of numbers representing an xy coordinate. Example: `[16, 48]`.\n * @typedef {Array} Coordinate\n * @api\n */\n/**\n * A function that takes a {@link module:ol/coordinate~Coordinate} and\n * transforms it into a `{string}`.\n *\n * @typedef {function((Coordinate|undefined)): string} CoordinateFormat\n * @api\n */\n/**\n * Add `delta` to `coordinate`. `coordinate` is modified in place and returned\n * by the function.\n *\n * Example:\n *\n * import {add} from 'ol/coordinate';\n *\n * var coord = [7.85, 47.983333];\n * add(coord, [-2, 4]);\n * // coord is now [5.85, 51.983333]\n *\n * @param {Coordinate} coordinate Coordinate.\n * @param {Coordinate} delta Delta.\n * @return {Coordinate} The input coordinate adjusted by\n * the given delta.\n * @api\n */\nexport function add(coordinate, delta) {\n coordinate[0] += +delta[0];\n coordinate[1] += +delta[1];\n return coordinate;\n}\n/**\n * Calculates the point closest to the passed coordinate on the passed circle.\n *\n * @param {Coordinate} coordinate The coordinate.\n * @param {import(\"./geom/Circle.js\").default} circle The circle.\n * @return {Coordinate} Closest point on the circumference.\n */\nexport function closestOnCircle(coordinate, circle) {\n var r = circle.getRadius();\n var center = circle.getCenter();\n var x0 = center[0];\n var y0 = center[1];\n var x1 = coordinate[0];\n var y1 = coordinate[1];\n var dx = x1 - x0;\n var dy = y1 - y0;\n if (dx === 0 && dy === 0) {\n dx = 1;\n }\n var d = Math.sqrt(dx * dx + dy * dy);\n var x = x0 + (r * dx) / d;\n var y = y0 + (r * dy) / d;\n return [x, y];\n}\n/**\n * Calculates the point closest to the passed coordinate on the passed segment.\n * This is the foot of the perpendicular of the coordinate to the segment when\n * the foot is on the segment, or the closest segment coordinate when the foot\n * is outside the segment.\n *\n * @param {Coordinate} coordinate The coordinate.\n * @param {Array} segment The two coordinates\n * of the segment.\n * @return {Coordinate} The foot of the perpendicular of\n * the coordinate to the segment.\n */\nexport function closestOnSegment(coordinate, segment) {\n var x0 = coordinate[0];\n var y0 = coordinate[1];\n var start = segment[0];\n var end = segment[1];\n var x1 = start[0];\n var y1 = start[1];\n var x2 = end[0];\n var y2 = end[1];\n var dx = x2 - x1;\n var dy = y2 - y1;\n var along = dx === 0 && dy === 0\n ? 0\n : (dx * (x0 - x1) + dy * (y0 - y1)) / (dx * dx + dy * dy || 0);\n var x, y;\n if (along <= 0) {\n x = x1;\n y = y1;\n }\n else if (along >= 1) {\n x = x2;\n y = y2;\n }\n else {\n x = x1 + along * dx;\n y = y1 + along * dy;\n }\n return [x, y];\n}\n/**\n * Returns a {@link module:ol/coordinate~CoordinateFormat} function that can be\n * used to format\n * a {Coordinate} to a string.\n *\n * Example without specifying the fractional digits:\n *\n * import {createStringXY} from 'ol/coordinate';\n *\n * var coord = [7.85, 47.983333];\n * var stringifyFunc = createStringXY();\n * var out = stringifyFunc(coord);\n * // out is now '8, 48'\n *\n * Example with explicitly specifying 2 fractional digits:\n *\n * import {createStringXY} from 'ol/coordinate';\n *\n * var coord = [7.85, 47.983333];\n * var stringifyFunc = createStringXY(2);\n * var out = stringifyFunc(coord);\n * // out is now '7.85, 47.98'\n *\n * @param {number} [opt_fractionDigits] The number of digits to include\n * after the decimal point. Default is `0`.\n * @return {CoordinateFormat} Coordinate format.\n * @api\n */\nexport function createStringXY(opt_fractionDigits) {\n return (\n /**\n * @param {Coordinate} coordinate Coordinate.\n * @return {string} String XY.\n */\n function (coordinate) {\n return toStringXY(coordinate, opt_fractionDigits);\n });\n}\n/**\n * @param {string} hemispheres Hemispheres.\n * @param {number} degrees Degrees.\n * @param {number} [opt_fractionDigits] The number of digits to include\n * after the decimal point. Default is `0`.\n * @return {string} String.\n */\nexport function degreesToStringHDMS(hemispheres, degrees, opt_fractionDigits) {\n var normalizedDegrees = modulo(degrees + 180, 360) - 180;\n var x = Math.abs(3600 * normalizedDegrees);\n var dflPrecision = opt_fractionDigits || 0;\n var precision = Math.pow(10, dflPrecision);\n var deg = Math.floor(x / 3600);\n var min = Math.floor((x - deg * 3600) / 60);\n var sec = x - deg * 3600 - min * 60;\n sec = Math.ceil(sec * precision) / precision;\n if (sec >= 60) {\n sec = 0;\n min += 1;\n }\n if (min >= 60) {\n min = 0;\n deg += 1;\n }\n return (deg +\n '\\u00b0 ' +\n padNumber(min, 2) +\n '\\u2032 ' +\n padNumber(sec, 2, dflPrecision) +\n '\\u2033' +\n (normalizedDegrees == 0\n ? ''\n : ' ' + hemispheres.charAt(normalizedDegrees < 0 ? 1 : 0)));\n}\n/**\n * Transforms the given {@link module:ol/coordinate~Coordinate} to a string\n * using the given string template. The strings `{x}` and `{y}` in the template\n * will be replaced with the first and second coordinate values respectively.\n *\n * Example without specifying the fractional digits:\n *\n * import {format} from 'ol/coordinate';\n *\n * var coord = [7.85, 47.983333];\n * var template = 'Coordinate is ({x}|{y}).';\n * var out = format(coord, template);\n * // out is now 'Coordinate is (8|48).'\n *\n * Example explicitly specifying the fractional digits:\n *\n * import {format} from 'ol/coordinate';\n *\n * var coord = [7.85, 47.983333];\n * var template = 'Coordinate is ({x}|{y}).';\n * var out = format(coord, template, 2);\n * // out is now 'Coordinate is (7.85|47.98).'\n *\n * @param {Coordinate} coordinate Coordinate.\n * @param {string} template A template string with `{x}` and `{y}` placeholders\n * that will be replaced by first and second coordinate values.\n * @param {number} [opt_fractionDigits] The number of digits to include\n * after the decimal point. Default is `0`.\n * @return {string} Formatted coordinate.\n * @api\n */\nexport function format(coordinate, template, opt_fractionDigits) {\n if (coordinate) {\n return template\n .replace('{x}', coordinate[0].toFixed(opt_fractionDigits))\n .replace('{y}', coordinate[1].toFixed(opt_fractionDigits));\n }\n else {\n return '';\n }\n}\n/**\n * @param {Coordinate} coordinate1 First coordinate.\n * @param {Coordinate} coordinate2 Second coordinate.\n * @return {boolean} The two coordinates are equal.\n */\nexport function equals(coordinate1, coordinate2) {\n var equals = true;\n for (var i = coordinate1.length - 1; i >= 0; --i) {\n if (coordinate1[i] != coordinate2[i]) {\n equals = false;\n break;\n }\n }\n return equals;\n}\n/**\n * Rotate `coordinate` by `angle`. `coordinate` is modified in place and\n * returned by the function.\n *\n * Example:\n *\n * import {rotate} from 'ol/coordinate';\n *\n * var coord = [7.85, 47.983333];\n * var rotateRadians = Math.PI / 2; // 90 degrees\n * rotate(coord, rotateRadians);\n * // coord is now [-47.983333, 7.85]\n *\n * @param {Coordinate} coordinate Coordinate.\n * @param {number} angle Angle in radian.\n * @return {Coordinate} Coordinate.\n * @api\n */\nexport function rotate(coordinate, angle) {\n var cosAngle = Math.cos(angle);\n var sinAngle = Math.sin(angle);\n var x = coordinate[0] * cosAngle - coordinate[1] * sinAngle;\n var y = coordinate[1] * cosAngle + coordinate[0] * sinAngle;\n coordinate[0] = x;\n coordinate[1] = y;\n return coordinate;\n}\n/**\n * Scale `coordinate` by `scale`. `coordinate` is modified in place and returned\n * by the function.\n *\n * Example:\n *\n * import {scale as scaleCoordinate} from 'ol/coordinate';\n *\n * var coord = [7.85, 47.983333];\n * var scale = 1.2;\n * scaleCoordinate(coord, scale);\n * // coord is now [9.42, 57.5799996]\n *\n * @param {Coordinate} coordinate Coordinate.\n * @param {number} scale Scale factor.\n * @return {Coordinate} Coordinate.\n */\nexport function scale(coordinate, scale) {\n coordinate[0] *= scale;\n coordinate[1] *= scale;\n return coordinate;\n}\n/**\n * @param {Coordinate} coord1 First coordinate.\n * @param {Coordinate} coord2 Second coordinate.\n * @return {number} Squared distance between coord1 and coord2.\n */\nexport function squaredDistance(coord1, coord2) {\n var dx = coord1[0] - coord2[0];\n var dy = coord1[1] - coord2[1];\n return dx * dx + dy * dy;\n}\n/**\n * @param {Coordinate} coord1 First coordinate.\n * @param {Coordinate} coord2 Second coordinate.\n * @return {number} Distance between coord1 and coord2.\n */\nexport function distance(coord1, coord2) {\n return Math.sqrt(squaredDistance(coord1, coord2));\n}\n/**\n * Calculate the squared distance from a coordinate to a line segment.\n *\n * @param {Coordinate} coordinate Coordinate of the point.\n * @param {Array} segment Line segment (2\n * coordinates).\n * @return {number} Squared distance from the point to the line segment.\n */\nexport function squaredDistanceToSegment(coordinate, segment) {\n return squaredDistance(coordinate, closestOnSegment(coordinate, segment));\n}\n/**\n * Format a geographic coordinate with the hemisphere, degrees, minutes, and\n * seconds.\n *\n * Example without specifying fractional digits:\n *\n * import {toStringHDMS} from 'ol/coordinate';\n *\n * var coord = [7.85, 47.983333];\n * var out = toStringHDMS(coord);\n * // out is now '47° 58′ 60″ N 7° 50′ 60″ E'\n *\n * Example explicitly specifying 1 fractional digit:\n *\n * import {toStringHDMS} from 'ol/coordinate';\n *\n * var coord = [7.85, 47.983333];\n * var out = toStringHDMS(coord, 1);\n * // out is now '47° 58′ 60.0″ N 7° 50′ 60.0″ E'\n *\n * @param {Coordinate} coordinate Coordinate.\n * @param {number} [opt_fractionDigits] The number of digits to include\n * after the decimal point. Default is `0`.\n * @return {string} Hemisphere, degrees, minutes and seconds.\n * @api\n */\nexport function toStringHDMS(coordinate, opt_fractionDigits) {\n if (coordinate) {\n return (degreesToStringHDMS('NS', coordinate[1], opt_fractionDigits) +\n ' ' +\n degreesToStringHDMS('EW', coordinate[0], opt_fractionDigits));\n }\n else {\n return '';\n }\n}\n/**\n * Format a coordinate as a comma delimited string.\n *\n * Example without specifying fractional digits:\n *\n * import {toStringXY} from 'ol/coordinate';\n *\n * var coord = [7.85, 47.983333];\n * var out = toStringXY(coord);\n * // out is now '8, 48'\n *\n * Example explicitly specifying 1 fractional digit:\n *\n * import {toStringXY} from 'ol/coordinate';\n *\n * var coord = [7.85, 47.983333];\n * var out = toStringXY(coord, 1);\n * // out is now '7.8, 48.0'\n *\n * @param {Coordinate} coordinate Coordinate.\n * @param {number} [opt_fractionDigits] The number of digits to include\n * after the decimal point. Default is `0`.\n * @return {string} XY.\n * @api\n */\nexport function toStringXY(coordinate, opt_fractionDigits) {\n return format(coordinate, '{x}, {y}', opt_fractionDigits);\n}\n/**\n * Modifies the provided coordinate in-place to be within the real world\n * extent. The lower projection extent boundary is inclusive, the upper one\n * exclusive.\n *\n * @param {Coordinate} coordinate Coordinate.\n * @param {import(\"./proj/Projection.js\").default} projection Projection.\n * @return {Coordinate} The coordinate within the real world extent.\n */\nexport function wrapX(coordinate, projection) {\n if (projection.canWrapX()) {\n var worldWidth = getWidth(projection.getExtent());\n var worldsAway = getWorldsAway(coordinate, projection, worldWidth);\n if (worldsAway) {\n coordinate[0] -= worldsAway * worldWidth;\n }\n }\n return coordinate;\n}\n/**\n * @param {Coordinate} coordinate Coordinate.\n * @param {import(\"./proj/Projection.js\").default} projection Projection.\n * @param {number} [opt_sourceExtentWidth] Width of the source extent.\n * @return {number} Offset in world widths.\n */\nexport function getWorldsAway(coordinate, projection, opt_sourceExtentWidth) {\n var projectionExtent = projection.getExtent();\n var worldsAway = 0;\n if (projection.canWrapX() &&\n (coordinate[0] < projectionExtent[0] || coordinate[0] > projectionExtent[2])) {\n var sourceExtentWidth = opt_sourceExtentWidth || getWidth(projectionExtent);\n worldsAway = Math.floor((coordinate[0] - projectionExtent[0]) / sourceExtentWidth);\n }\n return worldsAway;\n}\n//# sourceMappingURL=coordinate.js.map","/**\n * @module ol/css\n */\n/**\n * @typedef {Object} FontParameters\n * @property {string} style Style.\n * @property {string} variant Variant.\n * @property {string} weight Weight.\n * @property {string} size Size.\n * @property {string} lineHeight LineHeight.\n * @property {string} family Family.\n * @property {Array} families Families.\n */\n/**\n * The CSS class for hidden feature.\n *\n * @const\n * @type {string}\n */\nexport var CLASS_HIDDEN = 'ol-hidden';\n/**\n * The CSS class that we'll give the DOM elements to have them selectable.\n *\n * @const\n * @type {string}\n */\nexport var CLASS_SELECTABLE = 'ol-selectable';\n/**\n * The CSS class that we'll give the DOM elements to have them unselectable.\n *\n * @const\n * @type {string}\n */\nexport var CLASS_UNSELECTABLE = 'ol-unselectable';\n/**\n * The CSS class for unsupported feature.\n *\n * @const\n * @type {string}\n */\nexport var CLASS_UNSUPPORTED = 'ol-unsupported';\n/**\n * The CSS class for controls.\n *\n * @const\n * @type {string}\n */\nexport var CLASS_CONTROL = 'ol-control';\n/**\n * The CSS class that we'll give the DOM elements that are collapsed, i.e.\n * to those elements which usually can be expanded.\n *\n * @const\n * @type {string}\n */\nexport var CLASS_COLLAPSED = 'ol-collapsed';\n/**\n * From https://stackoverflow.com/questions/10135697/regex-to-parse-any-css-font\n * @type {RegExp}\n */\nvar fontRegEx = new RegExp([\n '^\\\\s*(?=(?:(?:[-a-z]+\\\\s*){0,2}(italic|oblique))?)',\n '(?=(?:(?:[-a-z]+\\\\s*){0,2}(small-caps))?)',\n '(?=(?:(?:[-a-z]+\\\\s*){0,2}(bold(?:er)?|lighter|[1-9]00 ))?)',\n '(?:(?:normal|\\\\1|\\\\2|\\\\3)\\\\s*){0,3}((?:xx?-)?',\n '(?:small|large)|medium|smaller|larger|[\\\\.\\\\d]+(?:\\\\%|in|[cem]m|ex|p[ctx]))',\n '(?:\\\\s*\\\\/\\\\s*(normal|[\\\\.\\\\d]+(?:\\\\%|in|[cem]m|ex|p[ctx])?))',\n '?\\\\s*([-,\\\\\"\\\\\\'\\\\sa-z]+?)\\\\s*$',\n].join(''), 'i');\nvar fontRegExMatchIndex = [\n 'style',\n 'variant',\n 'weight',\n 'size',\n 'lineHeight',\n 'family',\n];\n/**\n * Get the list of font families from a font spec. Note that this doesn't work\n * for font families that have commas in them.\n * @param {string} fontSpec The CSS font property.\n * @return {FontParameters} The font parameters (or null if the input spec is invalid).\n */\nexport var getFontParameters = function (fontSpec) {\n var match = fontSpec.match(fontRegEx);\n if (!match) {\n return null;\n }\n var style = /** @type {FontParameters} */ ({\n lineHeight: 'normal',\n size: '1.2em',\n style: 'normal',\n weight: 'normal',\n variant: 'normal',\n });\n for (var i = 0, ii = fontRegExMatchIndex.length; i < ii; ++i) {\n var value = match[i + 1];\n if (value !== undefined) {\n style[fontRegExMatchIndex[i]] = value;\n }\n }\n style.families = style.family.split(/,\\s?/);\n return style;\n};\n/**\n * @param {number} opacity Opacity (0..1).\n * @return {string} CSS opacity.\n */\nexport function cssOpacity(opacity) {\n return opacity === 1 ? '' : String(Math.round(opacity * 100) / 100);\n}\n//# sourceMappingURL=css.js.map","import { WORKER_OFFSCREEN_CANVAS } from './has.js';\n/**\n * @module ol/dom\n */\n//FIXME Move this function to the canvas module\n/**\n * Create an html canvas element and returns its 2d context.\n * @param {number} [opt_width] Canvas width.\n * @param {number} [opt_height] Canvas height.\n * @param {Array} [opt_canvasPool] Canvas pool to take existing canvas from.\n * @param {CanvasRenderingContext2DSettings} [opt_Context2DSettings] CanvasRenderingContext2DSettings\n * @return {CanvasRenderingContext2D} The context.\n */\nexport function createCanvasContext2D(opt_width, opt_height, opt_canvasPool, opt_Context2DSettings) {\n /** @type {HTMLCanvasElement|OffscreenCanvas} */\n var canvas;\n if (opt_canvasPool && opt_canvasPool.length) {\n canvas = opt_canvasPool.shift();\n }\n else if (WORKER_OFFSCREEN_CANVAS) {\n canvas = new OffscreenCanvas(opt_width || 300, opt_height || 300);\n }\n else {\n canvas = document.createElement('canvas');\n canvas.style.all = 'unset';\n }\n if (opt_width) {\n canvas.width = opt_width;\n }\n if (opt_height) {\n canvas.height = opt_height;\n }\n //FIXME Allow OffscreenCanvasRenderingContext2D as return type\n return /** @type {CanvasRenderingContext2D} */ (canvas.getContext('2d', opt_Context2DSettings));\n}\n/**\n * Get the current computed width for the given element including margin,\n * padding and border.\n * Equivalent to jQuery's `$(el).outerWidth(true)`.\n * @param {!HTMLElement} element Element.\n * @return {number} The width.\n */\nexport function outerWidth(element) {\n var width = element.offsetWidth;\n var style = getComputedStyle(element);\n width += parseInt(style.marginLeft, 10) + parseInt(style.marginRight, 10);\n return width;\n}\n/**\n * Get the current computed height for the given element including margin,\n * padding and border.\n * Equivalent to jQuery's `$(el).outerHeight(true)`.\n * @param {!HTMLElement} element Element.\n * @return {number} The height.\n */\nexport function outerHeight(element) {\n var height = element.offsetHeight;\n var style = getComputedStyle(element);\n height += parseInt(style.marginTop, 10) + parseInt(style.marginBottom, 10);\n return height;\n}\n/**\n * @param {Node} newNode Node to replace old node\n * @param {Node} oldNode The node to be replaced\n */\nexport function replaceNode(newNode, oldNode) {\n var parent = oldNode.parentNode;\n if (parent) {\n parent.replaceChild(newNode, oldNode);\n }\n}\n/**\n * @param {Node} node The node to remove.\n * @return {Node} The node that was removed or null.\n */\nexport function removeNode(node) {\n return node && node.parentNode ? node.parentNode.removeChild(node) : null;\n}\n/**\n * @param {Node} node The node to remove the children from.\n */\nexport function removeChildren(node) {\n while (node.lastChild) {\n node.removeChild(node.lastChild);\n }\n}\n/**\n * Transform the children of a parent node so they match the\n * provided list of children. This function aims to efficiently\n * remove, add, and reorder child nodes while maintaining a simple\n * implementation (it is not guaranteed to minimize DOM operations).\n * @param {Node} node The parent node whose children need reworking.\n * @param {Array} children The desired children.\n */\nexport function replaceChildren(node, children) {\n var oldChildren = node.childNodes;\n for (var i = 0; true; ++i) {\n var oldChild = oldChildren[i];\n var newChild = children[i];\n // check if our work is done\n if (!oldChild && !newChild) {\n break;\n }\n // check if children match\n if (oldChild === newChild) {\n continue;\n }\n // check if a new child needs to be added\n if (!oldChild) {\n node.appendChild(newChild);\n continue;\n }\n // check if an old child needs to be removed\n if (!newChild) {\n node.removeChild(oldChild);\n --i;\n continue;\n }\n // reorder\n node.insertBefore(newChild, oldChild);\n }\n}\n//# sourceMappingURL=dom.js.map","/**\n * @module ol/easing\n */\n/**\n * Start slow and speed up.\n * @param {number} t Input between 0 and 1.\n * @return {number} Output between 0 and 1.\n * @api\n */\nexport function easeIn(t) {\n return Math.pow(t, 3);\n}\n/**\n * Start fast and slow down.\n * @param {number} t Input between 0 and 1.\n * @return {number} Output between 0 and 1.\n * @api\n */\nexport function easeOut(t) {\n return 1 - easeIn(1 - t);\n}\n/**\n * Start slow, speed up, and then slow down again.\n * @param {number} t Input between 0 and 1.\n * @return {number} Output between 0 and 1.\n * @api\n */\nexport function inAndOut(t) {\n return 3 * t * t - 2 * t * t * t;\n}\n/**\n * Maintain a constant speed over time.\n * @param {number} t Input between 0 and 1.\n * @return {number} Output between 0 and 1.\n * @api\n */\nexport function linear(t) {\n return t;\n}\n/**\n * Start slow, speed up, and at the very end slow down again. This has the\n * same general behavior as {@link module:ol/easing.inAndOut}, but the final\n * slowdown is delayed.\n * @param {number} t Input between 0 and 1.\n * @return {number} Output between 0 and 1.\n * @api\n */\nexport function upAndDown(t) {\n if (t < 0.5) {\n return inAndOut(2 * t);\n }\n else {\n return 1 - inAndOut(2 * (t - 0.5));\n }\n}\n//# sourceMappingURL=easing.js.map","/**\n * @module ol/events/condition\n */\nimport MapBrowserEventType from '../MapBrowserEventType.js';\nimport { FALSE, TRUE } from '../functions.js';\nimport { MAC, WEBKIT } from '../has.js';\nimport { assert } from '../asserts.js';\n/**\n * A function that takes an {@link module:ol/MapBrowserEvent} and returns a\n * `{boolean}`. If the condition is met, true should be returned.\n *\n * @typedef {function(this: ?, import(\"../MapBrowserEvent.js\").default): boolean} Condition\n */\n/**\n * Creates a condition function that passes when all provided conditions pass.\n * @param {...Condition} var_args Conditions to check.\n * @return {Condition} Condition function.\n */\nexport function all(var_args) {\n var conditions = arguments;\n /**\n * @param {import(\"../MapBrowserEvent.js\").default} event Event.\n * @return {boolean} All conditions passed.\n */\n return function (event) {\n var pass = true;\n for (var i = 0, ii = conditions.length; i < ii; ++i) {\n pass = pass && conditions[i](event);\n if (!pass) {\n break;\n }\n }\n return pass;\n };\n}\n/**\n * Return `true` if only the alt-key is pressed, `false` otherwise (e.g. when\n * additionally the shift-key is pressed).\n *\n * @param {import(\"../MapBrowserEvent.js\").default} mapBrowserEvent Map browser event.\n * @return {boolean} True if only the alt key is pressed.\n * @api\n */\nexport var altKeyOnly = function (mapBrowserEvent) {\n var originalEvent = /** @type {KeyboardEvent|MouseEvent|TouchEvent} */ (mapBrowserEvent.originalEvent);\n return (originalEvent.altKey &&\n !(originalEvent.metaKey || originalEvent.ctrlKey) &&\n !originalEvent.shiftKey);\n};\n/**\n * Return `true` if only the alt-key and shift-key is pressed, `false` otherwise\n * (e.g. when additionally the platform-modifier-key is pressed).\n *\n * @param {import(\"../MapBrowserEvent.js\").default} mapBrowserEvent Map browser event.\n * @return {boolean} True if only the alt and shift keys are pressed.\n * @api\n */\nexport var altShiftKeysOnly = function (mapBrowserEvent) {\n var originalEvent = /** @type {KeyboardEvent|MouseEvent|TouchEvent} */ (mapBrowserEvent.originalEvent);\n return (originalEvent.altKey &&\n !(originalEvent.metaKey || originalEvent.ctrlKey) &&\n originalEvent.shiftKey);\n};\n/**\n * Return `true` if the map has the focus. This condition requires a map target\n * element with a `tabindex` attribute, e.g. `
`.\n *\n * @param {import(\"../MapBrowserEvent.js\").default} event Map browser event.\n * @return {boolean} The map has the focus.\n * @api\n */\nexport var focus = function (event) {\n return event.target.getTargetElement().contains(document.activeElement);\n};\n/**\n * Return `true` if the map has the focus or no 'tabindex' attribute set.\n *\n * @param {import(\"../MapBrowserEvent.js\").default} event Map browser event.\n * @return {boolean} The map container has the focus or no 'tabindex' attribute.\n */\nexport var focusWithTabindex = function (event) {\n return event.map.getTargetElement().hasAttribute('tabindex')\n ? focus(event)\n : true;\n};\n/**\n * Return always true.\n *\n * @param {import(\"../MapBrowserEvent.js\").default} mapBrowserEvent Map browser event.\n * @return {boolean} True.\n * @api\n */\nexport var always = TRUE;\n/**\n * Return `true` if the event is a `click` event, `false` otherwise.\n *\n * @param {import(\"../MapBrowserEvent.js\").default} mapBrowserEvent Map browser event.\n * @return {boolean} True if the event is a map `click` event.\n * @api\n */\nexport var click = function (mapBrowserEvent) {\n return mapBrowserEvent.type == MapBrowserEventType.CLICK;\n};\n/**\n * Return `true` if the event has an \"action\"-producing mouse button.\n *\n * By definition, this includes left-click on windows/linux, and left-click\n * without the ctrl key on Macs.\n *\n * @param {import(\"../MapBrowserEvent.js\").default} mapBrowserEvent Map browser event.\n * @return {boolean} The result.\n */\nexport var mouseActionButton = function (mapBrowserEvent) {\n var originalEvent = /** @type {MouseEvent} */ (mapBrowserEvent.originalEvent);\n return originalEvent.button == 0 && !(WEBKIT && MAC && originalEvent.ctrlKey);\n};\n/**\n * Return always false.\n *\n * @param {import(\"../MapBrowserEvent.js\").default} mapBrowserEvent Map browser event.\n * @return {boolean} False.\n * @api\n */\nexport var never = FALSE;\n/**\n * Return `true` if the browser event is a `pointermove` event, `false`\n * otherwise.\n *\n * @param {import(\"../MapBrowserEvent.js\").default} mapBrowserEvent Map browser event.\n * @return {boolean} True if the browser event is a `pointermove` event.\n * @api\n */\nexport var pointerMove = function (mapBrowserEvent) {\n return mapBrowserEvent.type == 'pointermove';\n};\n/**\n * Return `true` if the event is a map `singleclick` event, `false` otherwise.\n *\n * @param {import(\"../MapBrowserEvent.js\").default} mapBrowserEvent Map browser event.\n * @return {boolean} True if the event is a map `singleclick` event.\n * @api\n */\nexport var singleClick = function (mapBrowserEvent) {\n return mapBrowserEvent.type == MapBrowserEventType.SINGLECLICK;\n};\n/**\n * Return `true` if the event is a map `dblclick` event, `false` otherwise.\n *\n * @param {import(\"../MapBrowserEvent.js\").default} mapBrowserEvent Map browser event.\n * @return {boolean} True if the event is a map `dblclick` event.\n * @api\n */\nexport var doubleClick = function (mapBrowserEvent) {\n return mapBrowserEvent.type == MapBrowserEventType.DBLCLICK;\n};\n/**\n * Return `true` if no modifier key (alt-, shift- or platform-modifier-key) is\n * pressed.\n *\n * @param {import(\"../MapBrowserEvent.js\").default} mapBrowserEvent Map browser event.\n * @return {boolean} True only if there no modifier keys are pressed.\n * @api\n */\nexport var noModifierKeys = function (mapBrowserEvent) {\n var originalEvent = /** @type {KeyboardEvent|MouseEvent|TouchEvent} */ (mapBrowserEvent.originalEvent);\n return (!originalEvent.altKey &&\n !(originalEvent.metaKey || originalEvent.ctrlKey) &&\n !originalEvent.shiftKey);\n};\n/**\n * Return `true` if only the platform-modifier-key (the meta-key on Mac,\n * ctrl-key otherwise) is pressed, `false` otherwise (e.g. when additionally\n * the shift-key is pressed).\n *\n * @param {import(\"../MapBrowserEvent.js\").default} mapBrowserEvent Map browser event.\n * @return {boolean} True if only the platform modifier key is pressed.\n * @api\n */\nexport var platformModifierKeyOnly = function (mapBrowserEvent) {\n var originalEvent = /** @type {KeyboardEvent|MouseEvent|TouchEvent} */ (mapBrowserEvent.originalEvent);\n return (!originalEvent.altKey &&\n (MAC ? originalEvent.metaKey : originalEvent.ctrlKey) &&\n !originalEvent.shiftKey);\n};\n/**\n * Return `true` if only the shift-key is pressed, `false` otherwise (e.g. when\n * additionally the alt-key is pressed).\n *\n * @param {import(\"../MapBrowserEvent.js\").default} mapBrowserEvent Map browser event.\n * @return {boolean} True if only the shift key is pressed.\n * @api\n */\nexport var shiftKeyOnly = function (mapBrowserEvent) {\n var originalEvent = /** @type {KeyboardEvent|MouseEvent|TouchEvent} */ (mapBrowserEvent.originalEvent);\n return (!originalEvent.altKey &&\n !(originalEvent.metaKey || originalEvent.ctrlKey) &&\n originalEvent.shiftKey);\n};\n/**\n * Return `true` if the target element is not editable, i.e. not a ``-,\n * `