{"version":3,"file":"static/js/main.5a8c30f5.js","mappings":";wCAEA,IAAIA,EAASC,EAAQ,KA2DrBC,EAAOC,QAzDmB,SAA6BC,EAAUC,GAK/D,YAJ2B,IAAvBA,IACFA,GAAqB,GAGhB,SAAUC,EAAKC,EAAUC,GAE9B,GAAIF,EACFF,EAASE,QAKX,GAAIC,EAASE,YAAc,KAAOF,EAASE,YAAc,IAAzD,CACE,IAAIC,EAAQF,EAEZ,GAAIH,EACF,GAAIL,EAAOW,YAAa,CACtB,IAAIC,EAqBd,SAAoBC,QACQ,IAAtBA,IACFA,EAAoB,IAGtB,OAAOA,EAAkBC,cAAcC,MAAM,KAAKC,QAAO,SAAUJ,EAASK,GAC1E,IAAIC,EAAqBD,EAAYF,MAAM,KACvCI,EAAOD,EAAmB,GAC1BE,EAAQF,EAAmB,GAE/B,MAAoB,YAAhBC,EAAKE,OACAD,EAAMC,OAGRT,CACT,GAAG,QACL,CArCwBU,CAAWf,EAASgB,SAAWhB,EAASgB,QAAQ,iBAE9D,IACEb,EAAQ,IAAIC,YAAYC,GAASY,OAAOhB,EAC1C,CAAE,MAAOiB,GAAI,CACf,MACEf,EAAQgB,OAAOC,aAAaC,MAAM,KAAM,IAAIC,WAAWrB,IAI3DJ,EAAS,CACPM,MAAOA,GAGX,MAGAN,EAAS,KAAMI,EACjB,CACF,8BCvCA,IAAIR,EAASC,EAAQ,KAEjB6B,EAAW7B,EAAQ,KAEnB8B,EAAa9B,EAAQ,KAErB+B,EAAsB/B,EAAQ,GAE9BgC,EAAehC,EAAQ,KAE3BiC,EAAUC,YAAclC,EAAQ,KAChCiC,EAAUE,2BAA6B,IAAIJ,EAC3CE,EAAUG,4BAA8B,IAAIL,EAC5CE,EAAUI,aAAe,IAAIL,EAS7B,IAAIM,EAAe,SAAsBhB,GACvC,IAAIiB,EAAS,CAAC,EAEd,OAAKjB,GAILA,EAAQF,OAAON,MAAM,MAAM0B,SAAQ,SAAUC,GAC3C,IAAIC,EAAQD,EAAIE,QAAQ,KACpBC,EAAMH,EAAII,MAAM,EAAGH,GAAOtB,OAAOP,cACjCM,EAAQsB,EAAII,MAAMH,EAAQ,GAAGtB,OAEN,qBAAhBmB,EAAOK,GAChBL,EAAOK,GAAOzB,EACL2B,MAAMC,QAAQR,EAAOK,IAC9BL,EAAOK,GAAKI,KAAK7B,GAEjBoB,EAAOK,GAAO,CAACL,EAAOK,GAAMzB,EAEhC,IACOoB,GAhBEA,CAiBX,EA6BA,SAASU,EAAWC,EAAKC,EAAShD,GAChC,IAAIiD,EAASF,EAiBb,OAfIpB,EAAWqB,IACbhD,EAAWgD,EAEQ,kBAARD,IACTE,EAAS,CACPF,IAAKA,KAITE,EAASvB,EAAS,CAAC,EAAGsB,EAAS,CAC7BD,IAAKA,IAITE,EAAOjD,SAAWA,EACXiD,CACT,CAEA,SAASnB,EAAUiB,EAAKC,EAAShD,GAE/B,OAAOkD,EADPF,EAAUF,EAAWC,EAAKC,EAAShD,GAErC,CAEA,SAASkD,EAAWF,GAClB,GAAgC,qBAArBA,EAAQhD,SACjB,MAAM,IAAImD,MAAM,6BAIlB,GAAIH,EAAQI,aAAetB,EAAUE,2BAA2BqB,eAAgB,CAC9E,IAAIC,EAA4B,CAC9BP,IAAKC,EAAQD,KAAOC,EAAQO,IAC5BpC,QAAS6B,EAAQ7B,SAAW,CAAC,EAC7BqC,KAAMR,EAAQQ,KACdC,SAAUT,EAAQS,UAAY,CAAC,EAC/BC,MAAOV,EAAQU,MACfC,QAASX,EAAQW,SAEfC,EAAiB9B,EAAUE,2BAA2B6B,QAAQb,EAAQI,YAAaE,GACvFN,EAAQD,IAAMa,EAAeb,IAC7BC,EAAQ7B,QAAUyC,EAAezC,QACjC6B,EAAQQ,KAAOI,EAAeJ,KAC9BR,EAAQS,SAAWG,EAAeH,SAClCT,EAAQU,MAAQE,EAAeF,MAC/BV,EAAQW,QAAUC,EAAeD,OACnC,CAEA,IAAIG,GAAS,EAET9D,EAAW,SAAgBE,EAAKC,EAAUqD,GACvCM,IACHA,GAAS,EACTd,EAAQhD,SAASE,EAAKC,EAAUqD,GAEpC,EAUA,SAASO,IAEP,IAAIP,OAAOQ,EAQX,GALER,EADES,EAAI9D,SACC8D,EAAI9D,SAEJ8D,EAAIC,cA0MjB,SAAgBD,GAGd,IACE,GAAyB,aAArBA,EAAIE,aACN,OAAOF,EAAIG,YAGb,IAAIC,EAAwBJ,EAAIG,aAA4D,gBAA7CH,EAAIG,YAAYE,gBAAgBC,SAE/E,GAAyB,KAArBN,EAAIE,eAAwBE,EAC9B,OAAOJ,EAAIG,WAEf,CAAE,MAAO/C,GAAI,CAEb,OAAO,IACT,CA1NiCmD,CAAOP,GAGhCQ,EACF,IACEjB,EAAOkB,KAAKC,MAAMnB,EACpB,CAAE,MAAOnC,GAAI,CAGf,OAAOmC,CACT,CAEA,SAASoB,EAAUC,GAUjB,GATAC,aAAaC,GACbD,aAAa9B,EAAQgC,cAEfH,aAAe1B,QACnB0B,EAAM,IAAI1B,MAAM,IAAM0B,GAAO,kCAG/BA,EAAIxE,WAAa,EAEZ4E,IAAWnD,EAAUI,aAAamB,iBAAkBL,EAAQU,QAASV,EAAQU,MAAMwB,cAAxF,CAYA,GAAIlC,EAAQI,aAAetB,EAAUG,4BAA4BoB,eAAgB,CAC/E,IAAI8B,EAA6B,CAC/BhE,QAASiE,EAAgBjE,SAAW,CAAC,EACrCqC,KAAM4B,EAAgB5B,KACtB6B,YAAapB,EAAIqB,YACjBnB,aAAcF,EAAIE,cAGhBoB,EAAkBzD,EAAUG,4BAA4B4B,QAAQb,EAAQI,YAAa+B,GAEzFC,EAAgB5B,KAAO+B,EAAgB/B,KACvC4B,EAAgBjE,QAAUoE,EAAgBpE,OAC5C,CAEA,OAAOnB,EAAS6E,EAAKO,EAjBrB,CAREpC,EAAQgC,aAAeQ,YAAW,WAChCxC,EAAQU,MAAM+B,oBAEdzC,EAAQiB,IAAMA,EAEdf,EAAWF,EACb,GAAGA,EAAQU,MAAMgC,wBAoBrB,CAGA,SAASC,IACP,IAAIV,EAAJ,CACA,IAAIW,EACJd,aAAaC,GACbD,aAAa9B,EAAQgC,cAInBY,EAFE5C,EAAQ6C,aAAyB7B,IAAfC,EAAI2B,OAEf,IAEe,OAAf3B,EAAI2B,OAAkB,IAAM3B,EAAI2B,OAG3C,IAAIzF,EAAWiF,EACXlF,EAAM,KAqBV,GAnBe,IAAX0F,GACFzF,EAAW,CACTqD,KAAMO,IACN1D,WAAYuF,EACZE,OAAQA,EACR3E,QAAS,CAAC,EACVoC,IAAKR,EACLgD,WAAY9B,GAGVA,EAAI+B,wBAEN7F,EAASgB,QAAUgB,EAAa8B,EAAI+B,2BAGtC9F,EAAM,IAAIiD,MAAM,iCAIdH,EAAQI,aAAetB,EAAUG,4BAA4BoB,eAAgB,CAC/E,IAAI8B,EAA6B,CAC/BhE,QAAShB,EAASgB,SAAW,CAAC,EAC9BqC,KAAMrD,EAASqD,KACf6B,YAAapB,EAAIqB,YACjBnB,aAAcF,EAAIE,cAGhB8B,EAAmBnE,EAAUG,4BAA4B4B,QAAQb,EAAQI,YAAa+B,GAE1FhF,EAASqD,KAAOyC,EAAiBzC,KACjCrD,EAASgB,QAAU8E,EAAiB9E,OACtC,CAEA,OAAOnB,EAASE,EAAKC,EAAUA,EAASqD,KAhDrB,CAiDrB,CAEA,IAUIf,EACAwC,EAXAhB,EAAMjB,EAAQiB,KAAO,KAEpBA,IAEDA,EADEjB,EAAQkD,MAAQlD,EAAQ6C,OACpB,IAAI/D,EAAUqE,eAEd,IAAIrE,EAAUsE,gBAMxB,IAMIrB,EANAhC,EAAMkB,EAAIV,IAAMP,EAAQD,KAAOC,EAAQO,IACvCuC,EAAS7B,EAAI6B,OAAS9C,EAAQ8C,QAAU,MACxCtC,EAAOR,EAAQQ,MAAQR,EAAQqD,KAC/BlF,EAAU8C,EAAI9C,QAAU6B,EAAQ7B,SAAW,CAAC,EAC5CmF,IAAStD,EAAQsD,KACjB7B,GAAS,EAETW,EAAkB,CACpB5B,UAAMQ,EACN7C,QAAS,CAAC,EACVd,WAAY,EACZyF,OAAQA,EACRvC,IAAKR,EACLgD,WAAY9B,GAgDd,GA7CI,SAAUjB,IAA4B,IAAjBA,EAAQuD,OAC/B9B,GAAS,EACTtD,EAAgB,QAAKA,EAAgB,SAAMA,EAAgB,OAAI,oBAEhD,QAAX2E,GAA+B,SAAXA,IACtB3E,EAAQ,iBAAmBA,EAAQ,kBAAoBA,EAAQ,gBAAkB,oBAEjFqC,EAAOkB,KAAK8B,WAA2B,IAAjBxD,EAAQuD,KAAgB/C,EAAOR,EAAQuD,QAIjEtC,EAAIwC,mBA9JJ,WAGyB,IAAnBxC,EAAIyC,YAAqB5E,EAAUG,4BAA4BoB,gBACjEmC,WAAWG,EAAU,EAEzB,EAyJA1B,EAAI0C,OAAShB,EACb1B,EAAI2C,QAAUhC,EAEdX,EAAI4C,WAAa,WAAa,EAG9B5C,EAAI6C,QAAU,WACZ7B,GAAU,EACVH,aAAa9B,EAAQgC,aACvB,EAEAf,EAAI8C,UAAYnC,EAChBX,EAAI+C,KAAKlB,EAAQ/C,GAAMuD,EAAMtD,EAAQiE,SAAUjE,EAAQkE,UAElDZ,IACHrC,EAAIkD,kBAAoBnE,EAAQmE,kBAM7Bb,GAAQtD,EAAQW,QAAU,IAC7BoB,EAAeS,YAAW,WACxB,IAAIP,EAAJ,CACAA,GAAU,EAEVhB,EAAImD,MAAM,WACV,IAAI/F,EAAI,IAAI8B,MAAM,0BAClB9B,EAAEgG,KAAO,YACTzC,EAAUvD,EANS,CAOrB,GAAG2B,EAAQW,UAGTM,EAAIqD,iBACN,IAAK7E,KAAOtB,EACNA,EAAQoG,eAAe9E,IACzBwB,EAAIqD,iBAAiB7E,EAAKtB,EAAQsB,SAGjC,GAAIO,EAAQ7B,UAzQrB,SAAiBqG,GACf,IAAK,IAAIC,KAAKD,EACZ,GAAIA,EAAID,eAAeE,GAAI,OAAO,EAGpC,OAAO,CACT,CAmQiCC,CAAQ1E,EAAQ7B,SAC7C,MAAM,IAAIgC,MAAM,qDAelB,MAZI,iBAAkBH,IACpBiB,EAAIE,aAAenB,EAAQmB,cAGzB,eAAgBnB,GAAyC,oBAAvBA,EAAQ2E,YAC5C3E,EAAQ2E,WAAW1D,GAMrBA,EAAI2D,KAAKpE,GAAQ,MACVS,CACT,CA7SAnE,EAAOC,QAAU+B,EAEjBhC,EAAOC,QAAPD,QAAyBgC,EACzBA,EAAUsE,eAAiBxG,EAAOwG,gBA8TlC,WAAiB,EA7TjBtE,EAAUqE,eAAiB,oBAAqB,IAAIrE,EAAUsE,eAAmBtE,EAAUsE,eAAiBxG,EAAOuG,eASnH,SAAsB0B,EAAOC,GAC3B,IAAK,IAAIL,EAAI,EAAGA,EAAII,EAAME,OAAQN,IAChCK,EAASD,EAAMJ,GAEnB,CAZAO,CAAa,CAAC,MAAO,MAAO,OAAQ,QAAS,OAAQ,WAAW,SAAUlC,GACxEhE,EAAqB,WAAXgE,EAAsB,MAAQA,GAAU,SAAU/C,EAAKC,EAAShD,GAGxE,OAFAgD,EAAUF,EAAWC,EAAKC,EAAShD,IAC3B8F,OAASA,EAAOmC,cACjB/E,EAAWF,EACpB,CACF,wBCxDA,SAASkF,EAAgCC,EAAGC,GAAkB,IAAIC,EAAuB,qBAAXC,QAA0BH,EAAEG,OAAOR,WAAaK,EAAE,cAAe,GAAIE,EAAI,OAAQA,EAAKA,EAAGE,KAAKJ,IAAIK,KAAKC,KAAKJ,GAAK,GAAI1F,MAAMC,QAAQuF,KAAOE,EAExN,SAAqCF,EAAGO,GAAU,IAAKP,EAAG,OAAQ,GAAiB,kBAANA,EAAgB,OAAOQ,EAAkBR,EAAGO,GAAS,IAAIE,EAAIC,OAAOC,UAAUC,SAASR,KAAKJ,GAAGzF,MAAM,GAAI,GAAc,WAANkG,GAAkBT,EAAEa,cAAaJ,EAAIT,EAAEa,YAAYC,MAAM,GAAU,QAANL,GAAqB,QAANA,EAAa,OAAOjG,MAAMuG,KAAKf,GAAI,GAAU,cAANS,GAAqB,2CAA2CO,KAAKP,GAAI,OAAOD,EAAkBR,EAAGO,EAAS,CAFlMU,CAA4BjB,KAAOC,GAAkBD,GAAyB,kBAAbA,EAAEJ,OAAqB,CAAMM,IAAIF,EAAIE,GAAI,IAAIZ,EAAI,EAAG,OAAO,WAAc,OAAIA,GAAKU,EAAEJ,OAAe,CAAEsB,MAAM,GAAe,CAAEA,MAAM,EAAOrI,MAAOmH,EAAEV,KAAQ,CAAG,CAAE,MAAM,IAAI6B,UAAU,wIAA0I,CAI3lB,SAASX,EAAkBY,EAAKC,IAAkB,MAAPA,GAAeA,EAAMD,EAAIxB,UAAQyB,EAAMD,EAAIxB,QAAQ,IAAK,IAAIN,EAAI,EAAGgC,EAAO,IAAI9G,MAAM6G,GAAM/B,EAAI+B,EAAK/B,IAAOgC,EAAKhC,GAAK8B,EAAI9B,GAAM,OAAOgC,CAAM,CAEtL,IAAI7H,EAAmC,WACrC,SAASA,IACP8H,KAAKC,uBAAyB,IAAIC,IAClCF,KAAKG,UAAW,CAClB,CAEA,IAAIC,EAASlI,EAAoBkH,UAsFjC,OApFAgB,EAAOzG,aAAe,WACpB,OAAOqG,KAAKG,QACd,EAEAC,EAAOC,OAAS,WACdL,KAAKG,UAAW,CAClB,EAEAC,EAAOE,QAAU,WACfN,KAAKG,UAAW,CAClB,EAEAC,EAAOG,MAAQ,WACbP,KAAKC,uBAAyB,IAAIC,IAClCF,KAAKG,UAAW,CAClB,EAEAC,EAAOI,eAAiB,SAAwBnJ,EAAMoJ,GAC/CT,KAAKC,uBAAuBS,IAAIrJ,IACnC2I,KAAKC,uBAAuBU,IAAItJ,EAAM,IAAIuJ,KAG5C,IAAIC,EAAkBb,KAAKC,uBAAuBa,IAAIzJ,GAEtD,OAAIwJ,EAAgBH,IAAID,KAKxBI,EAAgBE,IAAIN,IACb,EACT,EAEAL,EAAOY,kBAAoB,SAA2B3J,EAAMoJ,GAC1D,IAAII,EAAkBb,KAAKC,uBAAuBa,IAAIzJ,GAEtD,SAAIwJ,IAAmBA,EAAgBH,IAAID,MACzCI,EAAgBI,OAAOR,IAChB,EAIX,EAEAL,EAAOc,wBAA0B,SAAiC7J,GAGhE,QAFsB2I,KAAKC,uBAAuBa,IAAIzJ,KAMtD2I,KAAKC,uBAAuBgB,OAAO5J,GACnC2I,KAAKC,uBAAuBU,IAAItJ,EAAM,IAAIuJ,MACnC,EACT,EAEAR,EAAOe,MAAQ,WACb,QAAKnB,KAAKC,uBAAuBmB,OAIjCpB,KAAKC,uBAAyB,IAAIC,KAC3B,EACT,EAEAE,EAAOiB,WAAa,SAAoBhK,GACtC,OAAO2I,KAAKC,uBAAuBa,IAAIzJ,IAAS,IAAIuJ,GACtD,EAEAR,EAAOjG,QAAU,SAAiB9C,EAAMiK,GAGtC,IAFA,IAEoEC,EAA3DC,EAAYhD,EAFFwB,KAAKqB,WAAWhK,MAE0CkK,EAAQC,KAAa7B,MAAO,CACvG,IAAIc,EAAcc,EAAMjK,MAExB,IACEgK,EAAUb,EAAYa,EACxB,CAAE,MAAO3J,GAAI,CAEf,CAEA,OAAO2J,CACT,EAEOpJ,CACT,CA7FuC,GA+FvC9B,EAAOC,QAAU6B,wBCrGjB,IAAIC,EAA4B,WAC9B,SAASA,IACP6H,KAAKyB,aAAe,EACpBzB,KAAK0B,aAAe,GACpB1B,KAAK2B,YAAc,GACnB3B,KAAK4B,cAAgB,IACrB5B,KAAKG,UAAW,CAClB,CAEA,IAAIC,EAASjI,EAAaiH,UAqE1B,OAnEAgB,EAAOzG,aAAe,WACpB,OAAOqG,KAAKG,QACd,EAEAC,EAAOC,OAAS,WACdL,KAAKG,UAAW,CAClB,EAEAC,EAAOE,QAAU,WACfN,KAAKG,UAAW,CAClB,EAEAC,EAAOG,MAAQ,WACbP,KAAKyB,aAAe,EACpBzB,KAAK0B,aAAe,GACpB1B,KAAK2B,YAAc,GACnB3B,KAAK4B,cAAgB,IACrB5B,KAAKG,UAAW,CAClB,EAEAC,EAAOyB,eAAiB,WACtB,OAAO7B,KAAKyB,YACd,EAEArB,EAAO0B,eAAiB,SAAwBC,GAC9C/B,KAAKyB,aAAeM,CACtB,EAEA3B,EAAO4B,eAAiB,WACtB,OAAOhC,KAAK0B,YACd,EAEAtB,EAAO6B,eAAiB,SAAwBC,GAC9ClC,KAAK0B,aAAeQ,CACtB,EAEA9B,EAAO+B,cAAgB,WACrB,OAAOnC,KAAK2B,WACd,EAEAvB,EAAOgC,cAAgB,SAAuBC,GAC5CrC,KAAK2B,YAAcU,CACrB,EAEAjC,EAAOkC,gBAAkB,WACvB,OAAOtC,KAAK4B,aACd,EAEAxB,EAAOmC,gBAAkB,SAAyBC,GAChDxC,KAAK4B,cAAgBY,CACvB,EAEApC,EAAOqC,YAAc,SAAqBC,GACxC,IAAIC,OAAiB,IAAVD,EAAmB,CAAC,EAAIA,EAC/BX,EAAcY,EAAKZ,YACnBG,EAAcS,EAAKT,YACnBG,EAAaM,EAAKN,WAClBG,EAAeG,EAAKH,aAExB,OAAO,IAAII,EAAM,CACfb,YAAaA,GAAe/B,KAAKyB,aACjCS,YAAaA,GAAelC,KAAK0B,aACjCW,WAAYA,GAAcrC,KAAK2B,YAC/Ba,aAAcA,GAAgBxC,KAAK4B,eAEvC,EAEOzJ,CACT,CA/EgC,GAiF5ByK,EAAqB,WACvB,SAASA,EAAMtJ,GACb0G,KAAKyB,aAAenI,EAAQyI,YAC5B/B,KAAK0B,aAAepI,EAAQ4I,YAC5BlC,KAAK2B,YAAcrI,EAAQ+I,WAC3BrC,KAAK6C,cAAgBvJ,EAAQkJ,aAC7BxC,KAAK8C,gBAAkB,CACzB,CAEA,IAAIC,EAAUH,EAAMxD,UAqCpB,OAnCA2D,EAAQhH,kBAAoB,WAC1BiE,KAAK8C,kBACL,IAAIE,EAAahD,KAAK6C,cAAgB7C,KAAK0B,aAC3C1B,KAAK6C,cAAgB7C,KAAK6C,cAAgBG,CAC5C,EAEAD,EAAQvH,YAAc,WACpB,OAAOwE,KAAK8C,gBAAkB9C,KAAKyB,YACrC,EAEAsB,EAAQE,gBAAkB,WACxB,OAAOjD,KAAK6C,aACd,EAEAE,EAAQG,2BAA6B,WACnC,OAAQ,EAAIlD,KAAK2B,aAAe3B,KAAK6C,aACvC,EAEAE,EAAQI,2BAA6B,WACnC,OAAQ,EAAInD,KAAK2B,aAAe3B,KAAK6C,aACvC,EASAE,EAAQ/G,sBAAwB,WAC9B,IAAIoH,EAAWpD,KAAKkD,6BAChBG,EAAYrD,KAAKmD,6BACrB,OAAOC,EAAWE,KAAKC,UAAYF,EAAYD,EACjD,EAEOR,CACT,CA/CyB,GAiDzBxM,EAAOC,QAAU8B,4BCnFjB,SAASqL,EAAOC,EAAQC,GAIvB,YAHWpJ,IAAPoJ,IACHA,EAAKvE,QAECuE,GAA2B,oBAAdA,EAAGF,OAAwBE,EAAGF,OAAOC,GAAUA,CACpE,CAkCA,IAAIE,EAAYH,EAAO,CAUtBI,KAAM,YAYNC,OAAQ,SAAUvM,GACjB,OAAOA,IAAUqM,EAAUC,IAC5B,EASAE,gBAAiB,kBASjBC,SAAU,WAUVC,sBAAuB,wBASvBC,cAAe,kBAQZC,EAAYV,EAAO,CAMtBI,KAAM,+BASNC,OAAQ,SAAUxK,GACjB,OAAOA,IAAQ6K,EAAUN,IAC1B,EAOAO,IAAK,6BAOLC,IAAK,uCAOLC,MAAO,kCAGRhO,EAAQiO,OAjIR,SAAgBC,EAAQC,GACvB,GAAe,OAAXD,GAAqC,kBAAXA,EAC7B,MAAM,IAAI3E,UAAU,2BAErB,IAAK,IAAI7G,KAAOyL,EACXrF,OAAOC,UAAUvB,eAAegB,KAAK2F,EAAQzL,KAChDwL,EAAOxL,GAAOyL,EAAOzL,IAGvB,OAAOwL,CACR,EAwHAlO,EAAQoO,KAtLR,SAAcC,EAAMC,EAAWC,GAI9B,QAHWtK,IAAPsK,IACHA,EAAK3L,MAAMmG,WAERsF,GAA2B,oBAAZE,EAAGH,KACrB,OAAOG,EAAGH,KAAK5F,KAAK6F,EAAMC,GAE3B,IAAK,IAAI5G,EAAI,EAAGA,EAAI2G,EAAKrG,OAAQN,IAChC,GAAIoB,OAAOC,UAAUvB,eAAegB,KAAK6F,EAAM3G,GAAI,CAClD,IAAI8G,EAAOH,EAAK3G,GAChB,GAAI4G,EAAU9F,UAAKvE,EAAWuK,EAAM9G,EAAG2G,GACtC,OAAOG,CAET,CAEF,EAwKAxO,EAAQmN,OAASA,EACjBnN,EAAQsN,UAAYA,EACpBtN,EAAQ6N,UAAYA,qBC1MhBY,EAAc3O,EAAQ,KACtB4O,EAAM5O,EAAQ,KACd6O,EAAW7O,EAAQ,KACnB8O,EAAM9O,EAAQ,IAEd+O,EAAoBH,EAAIG,kBAExBhB,EAAYY,EAAYZ,UAExBiB,EAAaF,EAAIE,WACjBC,EAAYH,EAAIG,UAuBpB,SAASC,EAAqBC,GAC7B,OAAOA,EACLC,QAAQ,gBAAiB,MACzBA,QAAQ,oBAAqB,KAChC,CAiCA,SAASC,EAAUlM,GAClB0G,KAAK1G,QAAUA,GAAU,CAACmM,QAAQ,CAAC,EACpC,CAoEA,SAASC,IACL1F,KAAK2F,OAAQ,CACjB,CACA,SAASC,EAASH,EAAQI,GACzBA,EAAKC,WAAaL,EAAQK,WAC1BD,EAAKE,aAAeN,EAAQM,YAC7B,CAiHA,SAASC,EAASC,GACjB,GAAGA,EACF,MAAO,OAAOA,EAAEC,UAAW,IAAI,UAAUD,EAAEH,WAAW,QAAQG,EAAEF,aAAa,GAE/E,CACA,SAASI,EAAUC,EAAMC,EAAMhI,GAC9B,MAAmB,iBAAT+H,EACFA,EAAME,OAAOD,EAAMhI,GAEvB+H,EAAM/H,QAAUgI,EAAMhI,GAAUgI,EAC3B,IAAIE,KAAKC,KAAK5O,OAAOwO,EAAMC,EAAMhI,GAAQ,GAE1C+H,CAET,CAsCA,SAASK,EAAeC,EAAOb,GACtBa,EAAOC,eAGRD,EAAOC,eAAeC,YAAYf,GAFlCa,EAAOG,IAAID,YAAYf,EAI/B,CAnPAL,EAAUpG,UAAU0H,gBAAkB,SAAStC,EAAOuC,GACrD,IAAIzN,EAAU0G,KAAK1G,QACf2L,EAAO,IAAIG,EACX4B,EAAa1N,EAAQ0N,YAAc,IAAItB,EACvCuB,EAAe3N,EAAQ2N,aACvBxB,EAAUnM,EAAQmM,QAClByB,EAAe5N,EAAQ6N,OAAO,CAAC,EAC/BtD,EAAS,aAAapE,KAAKsH,GACzBK,EAAYvD,EAASmB,EAASqC,cAAgBrC,EAASsC,aAC1D7B,GACFuB,EAAWO,mBAAmB9B,GAG/BR,EAAIgC,aAkBL,SAA2BO,EAAUR,EAAWvB,GAC/C,IAAI+B,EAAU,CACb,GAAGR,aAAsBtB,EACxB,OAAOsB,EAERQ,EAAYR,CACb,CACA,IAAIC,EAAe,CAAC,EAChBQ,EAAaD,aAAqBE,SAEtC,SAASC,EAAM5O,GACd,IAAI6O,EAAKJ,EAAUzO,IACf6O,GAAMH,IACTG,EAAyB,GAApBJ,EAAUnJ,OAAY,SAASwJ,GAAKL,EAAUzO,EAAI8O,EAAI,EAAEL,GAE9DP,EAAalO,GAAO6O,GAAM,SAASC,GAClCD,EAAG,WAAW7O,EAAI,MAAM8O,EAAI7B,EAASP,GACtC,GAAG,WAAW,CACf,CAIA,OAbAA,EAAUA,GAAS,CAAC,EAUpBkC,EAAM,WACNA,EAAM,SACNA,EAAM,cACCV,CACR,CAzCoBa,CAAkBb,EAAaD,EAAWvB,GAC7DR,EAAI+B,WAAa1N,EAAQ0N,YAAcA,EACpCnD,IACFqD,EAAa,IAAMhD,EAAUN,MAE9BsD,EAAaa,IAAMb,EAAaa,KAAO7D,EAAUE,IACjD,IAAI4D,EAAY1O,EAAQ+L,sBAAwBA,EAUhD,OATIb,GAA4B,kBAAXA,EACpBS,EAAIhK,MACH+M,EAAUxD,GACV0C,EACAE,GAGDnC,EAAIgC,aAAagB,MAAM,sBAEjBjB,EAAWH,GACnB,EA+CAnB,EAAWtG,UAAY,CACtB8I,cAAgB,WACZlI,KAAK6G,KAAM,IAAI3B,GAAoBiD,eAAe,KAAM,KAAM,MAC1DnI,KAAKyF,UACLzF,KAAK6G,IAAIuB,YAAcpI,KAAKyF,QAAQS,SAE5C,EACAmC,aAAa,SAASC,EAAcC,EAAWC,EAAOC,GACrD,IAAI5B,EAAM7G,KAAK6G,IACR6B,EAAK7B,EAAI8B,gBAAgBL,EAAcE,GAAOD,GAC9CzI,EAAM2I,EAAMpK,OAChBoI,EAAczG,KAAM0I,GACpB1I,KAAK2G,eAAiB+B,EAEzB1I,KAAKyF,SAAWG,EAAS5F,KAAKyF,QAAQiD,GACnC,IAAK,IAAI3K,EAAI,EAAIA,EAAI+B,EAAK/B,IAAK,CACvBuK,EAAeG,EAAMG,OAAO7K,GAAhC,IACIzG,EAAQmR,EAAMI,SAAS9K,GAE7B+K,GADMN,EAAQC,EAAMM,SAAShL,GACtB8I,EAAImC,kBAAkBV,EAAcE,IAC/CxI,KAAKyF,SAAUG,EAAS6C,EAAMQ,WAAWlL,GAAG+K,GAC5CA,EAAKxR,MAAQwR,EAAKI,UAAY5R,EAC9BoR,EAAGS,iBAAiBL,EAClB,CACJ,EACAM,WAAW,SAASd,EAAcC,EAAWC,GAC5C,IAAIa,EAAUrJ,KAAK2G,eACL0C,EAAQC,QACtBtJ,KAAK2G,eAAiB0C,EAAQE,UAC/B,EACAC,mBAAmB,SAASC,EAAQpQ,GACpC,EACAqQ,iBAAiB,SAASD,GAC1B,EACAE,sBAAsB,SAASpF,EAAQ5H,GACnC,IAAIiN,EAAM5J,KAAK6G,IAAIgD,4BAA4BtF,EAAQ5H,GACvDqD,KAAKyF,SAAWG,EAAS5F,KAAKyF,QAAQmE,GACtCnD,EAAczG,KAAM4J,EACxB,EACAE,oBAAoB,SAASC,EAAI1D,EAAOhI,GACxC,EACA2L,WAAW,SAAS5D,EAAOC,EAAOhI,GAGjC,GAFA+H,EAAQD,EAAUrO,MAAMkI,KAAKiK,WAEpB,CACR,GAAIjK,KAAK2F,MACR,IAAIuE,EAAWlK,KAAK6G,IAAIsD,mBAAmB/D,QAEvC8D,EAAWlK,KAAK6G,IAAIuD,eAAehE,GAErCpG,KAAK2G,eACP3G,KAAK2G,eAAeC,YAAYsD,GACxB,QAAQzK,KAAK2G,IACrBpG,KAAK6G,IAAID,YAAYsD,GAGtBlK,KAAKyF,SAAWG,EAAS5F,KAAKyF,QAAQyE,EACvC,CACD,EACAG,cAAc,SAAS9K,GACvB,EACA+K,YAAY,WACXtK,KAAK6G,IAAImB,WACV,EACAT,mBAAmB,SAAU9B,IACtBzF,KAAKyF,QAAUA,KACjBA,EAAQK,WAAa,EAE1B,EAEAyE,QAAQ,SAASnE,EAAOC,EAAOhI,GAC9B+H,EAAQD,EAAUrO,MAAMkI,KAAKiK,WAC1B,IAAIO,EAAOxK,KAAK6G,IAAI4D,cAAcrE,GAClCpG,KAAKyF,SAAWG,EAAS5F,KAAKyF,QAAQ+E,GACtC/D,EAAczG,KAAMwK,EACxB,EAEAE,WAAW,WAEP1K,KAAK2F,OAAQ,CACjB,EACAgF,SAAS,WACL3K,KAAK2F,OAAQ,CACjB,EAEAiF,SAAS,SAASrL,EAAMsL,EAAU3E,GACjC,IAAI4E,EAAO9K,KAAK6G,IAAIkE,eACjB,GAAID,GAAQA,EAAKE,mBAAoB,CACjC,IAAIC,EAAKH,EAAKE,mBAAmBzL,EAAMsL,EAAU3E,GACjDlG,KAAKyF,SAAWG,EAAS5F,KAAKyF,QAAQwF,GACtCxE,EAAczG,KAAMiL,GACxBjL,KAAK6G,IAAIqE,QAAUD,CACnB,CACJ,EAKAE,QAAQ,SAASlD,GAChBmD,QAAQC,KAAK,qBAAqBpD,EAAMjC,EAAShG,KAAKyF,SACvD,EACAwC,MAAM,SAASA,GACdmD,QAAQnD,MAAM,mBAAmBA,EAAMjC,EAAShG,KAAKyF,SACtD,EACA6F,WAAW,SAASrD,GACnB,MAAM,IAAI9C,EAAW8C,EAAOjI,KAAKyF,QAClC,GAiDD,+JAA+JF,QAAQ,QAAO,SAASxM,GACtL2M,EAAWtG,UAAUrG,GAAO,WAAW,OAAO,IAAI,CACnD,IAaA1C,EAAQmP,UAAYA,iBCjUpB,IAAIV,EAAc3O,EAAQ,KAEtBsO,EAAOK,EAAYL,KACnBP,EAAYY,EAAYZ,UAO5B,SAASqH,EAAgBjG,GACxB,MAAiB,KAAVA,CACR,CAoBA,SAASkG,EAAmBnC,EAASoC,GAIpC,OAHKpC,EAAQxL,eAAe4N,KAC3BpC,EAAQoC,IAAW,GAEbpC,CACR,CAOA,SAASqC,EAAapG,GACrB,IAAKA,EAAO,MAAO,GACnB,IAAIZ,EA1BL,SAAgCY,GAE/B,OAAOA,EAAQA,EAAMrO,MAAM,gBAAgB0U,OAAOJ,GAAkB,EACrE,CAuBYK,CAAuBtG,GAClC,OAAOnG,OAAO0M,KAAKnH,EAAKxN,OAAOsU,EAAmB,CAAC,GACpD,CAeA,SAASM,EAAKC,EAAIC,GACjB,IAAI,IAAIC,KAAKF,EACR5M,OAAOC,UAAUvB,eAAegB,KAAKkN,EAAKE,KAC7CD,EAAKC,GAAKF,EAAIE,GAGjB,CAMA,SAASjU,EAASkU,EAAMC,GACvB,IAAIC,EAAKF,EAAM9M,UACf,KAAKgN,aAAcD,GAAO,CACzB,SAASE,IAAI,CACbA,EAAEjN,UAAY+M,EAAM/M,UAEpB0M,EAAKM,EADLC,EAAI,IAAIA,GAERH,EAAM9M,UAAYgN,EAAKC,CACxB,CACGD,EAAG9M,aAAe4M,IACD,mBAATA,GACTd,QAAQnD,MAAM,iBAAiBiE,GAEhCE,EAAG9M,YAAc4M,EAEnB,CAGA,IAAII,EAAW,CAAC,EACZC,EAA8BD,EAASC,aAA8B,EACrEC,EAA8BF,EAASE,eAA8B,EACrEC,EAA8BH,EAASG,UAA8B,EACrEC,EAA8BJ,EAASI,mBAA8B,EACrEC,EAA8BL,EAASK,sBAA8B,EACrEC,EAA8BN,EAASM,YAA8B,EACrEC,EAA8BP,EAASO,4BAA8B,EACrEC,EAA8BR,EAASQ,aAA8B,EACrEC,EAA8BT,EAASS,cAA8B,EACrEC,EAA8BV,EAASU,mBAA8B,GACrEC,EAA8BX,EAASW,uBAA8B,GACrEC,EAA8BZ,EAASY,cAA8B,GAGrEC,EAAgB,CAAC,EACjBC,EAAmB,CAAC,EAGpBC,GAF8BF,EAAcG,gBAAgCF,EAAiB,GAAG,mBAAoB,GACtFD,EAAcI,oBAAgCH,EAAiB,GAAG,uBAAwB,GAC1FD,EAAcE,uBAAgCD,EAAiB,GAAG,0BAA2B,IAK3HI,GAJ8BL,EAAcM,oBAAgCL,EAAiB,GAAG,iBAAkB,GACpFD,EAAcO,uBAAgCN,EAAiB,GAAG,oBAAqB,GACvFD,EAAcQ,qBAAgCP,EAAiB,GAAG,kBAAmB,GACrFD,EAAcS,6BAAgCR,EAAiB,GAAG,0BAA2B,GAC7FD,EAAcK,eAAgCJ,EAAiB,GAAG,YAAa,IAE7GS,GAD8BV,EAAcW,mBAAgCV,EAAiB,GAAG,gBAAiB,GACnFD,EAAcU,qBAAgCT,EAAiB,IAAI,mBAAoB,KAEzFD,EAAcY,mBAA8BX,EAAiB,IAAI,gBAAiB,IAClFD,EAAca,YAA8BZ,EAAiB,IAAI,eAAgB,IACjFD,EAAcc,0BAA8Bb,EAAiB,IAAI,uBAAwB,IACzFD,EAAce,eAA6Bd,EAAiB,IAAI,oBAAqB,IACrFD,EAAcgB,oBAA6Bf,EAAiB,IAAI,iBAAkB,IAQlH,SAASgB,EAAazQ,EAAM0Q,GAC3B,GAAGA,aAAmB5U,MACrB,IAAIwO,EAAQoG,OAEZpG,EAAQjI,KACRvG,MAAMoF,KAAKmB,KAAMoN,EAAiBzP,IAClCqC,KAAKqO,QAAUjB,EAAiBzP,GAC7BlE,MAAM6U,mBAAmB7U,MAAM6U,kBAAkBtO,KAAMoO,GAI3D,OAFAnG,EAAMtK,KAAOA,EACV0Q,IAASrO,KAAKqO,QAAUrO,KAAKqO,QAAU,KAAOA,GAC1CpG,CACR,CASA,SAASsG,IACT,CA0CA,SAASC,EAAa3I,EAAK4I,GAC1BzO,KAAK0O,MAAQ7I,EACb7F,KAAK2O,SAAWF,EAChBG,EAAgB5O,KACjB,CACA,SAAS4O,EAAgBlK,GACxB,IAAImK,EAAMnK,EAAKgK,MAAMI,MAAQpK,EAAKgK,MAAMK,cAAcD,KACtD,GAAIpK,EAAKoK,OAASD,EAAK,CACtB,IAAIG,EAAKtK,EAAKiK,SAASjK,EAAKgK,OAE5B,GADAO,GAAQvK,EAAK,SAASsK,EAAG3Q,SACpBqG,EAAKwK,UAAYF,EAAG3Q,OAASqG,EAAKwK,SACtC,IAAK,IAAInR,EAAIiR,EAAG3Q,OAAQN,KAAK2G,EAAM3G,IAC9BoB,OAAOC,UAAUvB,eAAegB,KAAK6F,EAAM3G,WACvC2G,EAAK3G,GAIf+N,EAAKkD,EAAGtK,GACRA,EAAKoK,KAAOD,CACb,CACD,CAmBA,SAASM,IACT,CAEA,SAASC,EAAe1K,EAAKmB,GAE5B,IADA,IAAI9H,EAAI2G,EAAKrG,OACPN,KACL,GAAG2G,EAAK3G,KAAO8H,EAAM,OAAO9H,CAE9B,CAEA,SAASsR,EAAc3G,EAAGhE,EAAK4K,EAAQC,GAMtC,GALGA,EACF7K,EAAK0K,EAAe1K,EAAK6K,IAAYD,EAErC5K,EAAKA,EAAKrG,UAAYiR,EAEpB5G,EAAG,CACL4G,EAAQE,aAAe9G,EACvB,IAAI7B,EAAM6B,EAAGqG,cACVlI,IACF0I,GAAWE,EAAmB5I,EAAI6B,EAAG6G,GAyVxC,SAAyB1I,EAAI6B,EAAG4G,GAC/BzI,GAAOA,EAAIiI,OACX,IAAIY,EAAKJ,EAAQhH,aACdoH,IAAOxL,EAAUG,QAEnBqE,EAAGiH,OAAOL,EAAQ7F,OAAO6F,EAAQ/G,UAAU,IAAM+G,EAAQhY,MAE3D,CA/VGsY,CAAgB/I,EAAI6B,EAAG4G,GAEzB,CACD,CACA,SAASO,EAAiBnH,EAAGhE,EAAKoE,GAEjC,IAAI/K,EAAIqR,EAAe1K,EAAKoE,GAC5B,KAAG/K,GAAG,GAcL,MAAM,IAAIqQ,EAAaZ,EAAc,IAAI/T,MAAMiP,EAAGY,QAAQ,IAAIR,IAZ9D,IADA,IAAIgH,EAAYpL,EAAKrG,OAAO,EACtBN,EAAE+R,GACPpL,EAAK3G,GAAK2G,IAAO3G,GAGlB,GADA2G,EAAKrG,OAASyR,EACXpH,EAAG,CACL,IAAI7B,EAAM6B,EAAGqG,cACVlI,IACF4I,EAAmB5I,EAAI6B,EAAGI,GAC1BA,EAAK0G,aAAe,KAEtB,CAIF,CAgFA,SAAStK,IACT,CA8FA,SAAS6K,IACT,CAgHA,SAASC,EAAYC,GACpB,OAAY,KAALA,EAAY,OACN,KAALA,GAAY,SACP,KAALA,GAAY,SACP,KAALA,GAAY,UACZ,KAAKA,EAAEC,aAAa,GAC7B,CAUA,SAASC,EAAWtK,EAAKvP,GACxB,GAAGA,EAASuP,GACX,OAAO,EAER,GAAGA,EAAOA,EAAKuK,WACd,GACC,GAAGD,EAAWtK,EAAKvP,GAAW,OAAO,QACzBuP,EAAKA,EAAKwK,YAEzB,CAIA,SAASC,IACRtQ,KAAK+O,cAAgB/O,IACtB,CAWA,SAASyP,EAAmB5I,EAAI6B,EAAG4G,EAAQiB,GAC1C1J,GAAOA,EAAIiI,OACFQ,EAAQhH,eACPpE,EAAUG,cAEZqE,EAAGiH,OAAOL,EAAQ7F,OAAO6F,EAAQ/G,UAAU,GAEpD,CAcA,SAASiI,EAAgB3J,EAAK6B,EAAI+H,GACjC,GAAG5J,GAAOA,EAAIiI,KAAK,CAClBjI,EAAIiI,OAEJ,IAAI4B,EAAKhI,EAAGiI,WACZ,GAAIF,EACHC,EAAGA,EAAGrS,UAAYoS,MACZ,CAGN,IAFA,IAAIG,EAAQlI,EAAG0H,WACXrS,EAAI,EACD6S,GACNF,EAAG3S,KAAO6S,EACVA,EAAQA,EAAMP,YAEfK,EAAGrS,OAASN,SACL2S,EAAGA,EAAGrS,OACd,CACD,CACD,CAcA,SAASwS,EAActH,EAAYqH,GAClC,IAAIE,EAAWF,EAAMG,gBACjBjS,EAAO8R,EAAMP,YAejB,OAdIS,EACHA,EAAST,YAAcvR,EAEvByK,EAAW6G,WAAatR,EAErBA,EACHA,EAAKiS,gBAAkBD,EAEvBvH,EAAWyH,UAAYF,EAExBF,EAAMrH,WAAa,KACnBqH,EAAMG,gBAAkB,KACxBH,EAAMP,YAAc,KACpBG,EAAejH,EAAWwF,cAAexF,GAClCqH,CACR,CAoCA,SAASK,EAAcpL,GACtB,OAAOA,GAAQA,EAAKqL,WAAanB,EAAK/C,kBACvC,CAOA,SAASmE,EAActL,GACtB,OAAOA,GAAQA,EAAKqL,WAAanB,EAAKxD,YACvC,CAMA,SAAS6E,EAAWvL,GACnB,OAAOA,GAAQA,EAAKqL,WAAanB,EAAKtD,SACvC,CAYA,SAAS4E,EAA2BxK,EAAK+J,GACxC,IAAIU,EAAmBzK,EAAI8J,YAAc,GACzC,GAAIlM,EAAK6M,EAAkBH,IAAkBF,EAAcL,GAC1D,OAAO,EAER,IAAIW,EAAc9M,EAAK6M,EAAkBL,GACzC,QAASL,GAASW,GAAeD,EAAiBxY,QAAQyY,GAAeD,EAAiBxY,QAAQ8X,GACnG,CAYA,SAASY,EAA6B3K,EAAK+J,GAC1C,IAAIU,EAAmBzK,EAAI8J,YAAc,GAMzC,GAAIlM,EAAK6M,GAJT,SAAuCzL,GACtC,OAAOsL,EAActL,IAASA,IAAS+K,CACxC,IAGC,OAAO,EAER,IAAIW,EAAc9M,EAAK6M,EAAkBL,GACzC,QAASL,GAASW,GAAeD,EAAiBxY,QAAQyY,GAAeD,EAAiBxY,QAAQ8X,GACnG,CAeA,SAASa,EAA+BC,EAAQ7L,EAAM+K,GAErD,IA5GD,SAAgC/K,GAC/B,OACCA,IACCA,EAAKqL,WAAanB,EAAKhD,eAAiBlH,EAAKqL,WAAanB,EAAK9C,wBAA0BpH,EAAKqL,WAAanB,EAAKxD,aAEnH,CAuGMoF,CAAuBD,GAC3B,MAAM,IAAItD,EAAaf,EAAuB,+BAAiCqE,EAAOR,UAKvF,GAAIN,GAASA,EAAMrH,aAAemI,EACjC,MAAM,IAAItD,EAAaZ,EAAe,uBAEvC,IAzGD,SAA+B3H,GAC9B,OACCA,IACCsL,EAActL,IACduL,EAAWvL,IACXoL,EAAcpL,IACdA,EAAKqL,WAAanB,EAAK9C,wBACvBpH,EAAKqL,WAAanB,EAAKjD,cACvBjH,EAAKqL,WAAanB,EAAKlD,4BAE1B,CAiGG+E,CAAsB/L,IAKtBoL,EAAcpL,IAAS6L,EAAOR,WAAanB,EAAKhD,cAEjD,MAAM,IAAIqB,EACTf,EACA,wBAA0BxH,EAAKqL,SAAW,yBAA2BQ,EAAOR,SAG/E,CAeA,SAASW,EAAqCH,EAAQ7L,EAAM+K,GAC3D,IAAIU,EAAmBI,EAAOf,YAAc,GACxCmB,EAAiBjM,EAAK8K,YAAc,GAGxC,GAAI9K,EAAKqL,WAAanB,EAAK9C,uBAAwB,CAClD,IAAI8E,EAAoBD,EAAenG,OAAOwF,GAE9C,GAAIY,EAAkB1T,OAAS,GAAKoG,EAAKqN,EAAgBV,GACxD,MAAM,IAAIhD,EAAaf,EAAuB,6CAI/C,GAAiC,IAA7B0E,EAAkB1T,SAAiBgT,EAA2BK,EAAQd,GACzE,MAAM,IAAIxC,EAAaf,EAAuB,yDAEhD,CAEA,GAAI8D,EAActL,KAGZwL,EAA2BK,EAAQd,GACvC,MAAM,IAAIxC,EAAaf,EAAuB,wDAIhD,GAAI4D,EAAcpL,GAAO,CAExB,GAAIpB,EAAK6M,EAAkBL,GAC1B,MAAM,IAAI7C,EAAaf,EAAuB,+BAE/C,IAAI2E,EAAqBvN,EAAK6M,EAAkBH,GAEhD,GAAIP,GAASU,EAAiBxY,QAAQkZ,GAAsBV,EAAiBxY,QAAQ8X,GACpF,MAAM,IAAIxC,EAAaf,EAAuB,kDAG/C,IAAKuD,GAASoB,EACb,MAAM,IAAI5D,EAAaf,EAAuB,uDAEhD,CACD,CAeA,SAAS4E,EAAuCP,EAAQ7L,EAAM+K,GAC7D,IAAIU,EAAmBI,EAAOf,YAAc,GACxCmB,EAAiBjM,EAAK8K,YAAc,GAGxC,GAAI9K,EAAKqL,WAAanB,EAAK9C,uBAAwB,CAClD,IAAI8E,EAAoBD,EAAenG,OAAOwF,GAE9C,GAAIY,EAAkB1T,OAAS,GAAKoG,EAAKqN,EAAgBV,GACxD,MAAM,IAAIhD,EAAaf,EAAuB,6CAG/C,GAAiC,IAA7B0E,EAAkB1T,SAAiBmT,EAA6BE,EAAQd,GAC3E,MAAM,IAAIxC,EAAaf,EAAuB,yDAEhD,CAEA,GAAI8D,EAActL,KAEZ2L,EAA6BE,EAAQd,GACzC,MAAM,IAAIxC,EAAaf,EAAuB,wDAIhD,GAAI4D,EAAcpL,GAAO,CAMxB,GAAIpB,EAAK6M,GALT,SAAuCzL,GACtC,OAAOoL,EAAcpL,IAASA,IAAS+K,CACxC,IAIC,MAAM,IAAIxC,EAAaf,EAAuB,+BAE/C,IAAI2E,EAAqBvN,EAAK6M,EAAkBH,GAEhD,GAAIP,GAASU,EAAiBxY,QAAQkZ,GAAsBV,EAAiBxY,QAAQ8X,GACpF,MAAM,IAAIxC,EAAaf,EAAuB,iDAEhD,CACD,CAYA,SAAS6E,EAAcR,EAAQ7L,EAAM+K,EAAOuB,GAE3CV,EAA+BC,EAAQ7L,EAAM+K,GAIzCc,EAAOR,WAAanB,EAAKhD,gBAC3BoF,GAAwBN,GAAsCH,EAAQ7L,EAAM+K,GAG9E,IAAIwB,EAAKvM,EAAK0D,WAId,GAHG6I,GACFA,EAAGC,YAAYxM,GAEbA,EAAKqL,WAAajE,EAAuB,CAC3C,IAAIqF,EAAWzM,EAAKuK,WACpB,GAAgB,MAAZkC,EACH,OAAOzM,EAER,IAAI0M,EAAU1M,EAAKmL,SACpB,MACCsB,EAAWC,EAAU1M,EAEtB,IAAI2M,EAAM5B,EAAQA,EAAMG,gBAAkBW,EAAOV,UAEjDsB,EAASvB,gBAAkByB,EAC3BD,EAAQlC,YAAcO,EAGnB4B,EACFA,EAAInC,YAAciC,EAElBZ,EAAOtB,WAAakC,EAET,MAAT1B,EACFc,EAAOV,UAAYuB,EAEnB3B,EAAMG,gBAAkBwB,EAEzB,GACCD,EAAS/I,WAAamI,QAChBY,IAAaC,IAAYD,EAAUA,EAASjC,cAMnD,OALAG,EAAekB,EAAO3C,eAAe2C,EAAQA,GAEzC7L,EAAKqL,UAAYjE,IACpBpH,EAAKuK,WAAavK,EAAKmL,UAAY,MAE7BnL,CACR,CAiPA,SAAS4M,KACRzS,KAAK2P,OAAS,CAAC,CAChB,CA4FA,SAAS+C,KACT,CAKA,SAASC,KACT,CA8BA,SAASC,KACT,CAkBA,SAASC,KACT,CAOA,SAASC,KACT,CAQA,SAASC,KACT,CAIA,SAASC,KACT,CAIA,SAASC,KACT,CAIA,SAASC,KACT,CAIA,SAASC,KACT,CAMA,SAASC,KACT,CAGA,SAASC,KAAgB,CAKzB,SAASC,GAAsBC,EAAOC,GACrC,IAAIC,EAAM,GACNC,EAA2B,GAAjB1T,KAAKkR,UAAiBlR,KAAKpF,iBAAmBoF,KACxDyJ,EAASiK,EAAQjK,OACjBpQ,EAAMqa,EAAQpL,aAElB,GAAGjP,GAAiB,MAAVoQ,GAGI,OADTA,EAASiK,EAAQC,aAAata,IAGjC,IAAIua,EAAkB,CACtB,CAACC,UAAUxa,EAAIoQ,OAAO,OAOxB,OAFAqK,GAAkB9T,KAAKyT,EAAIF,EAAOC,EAAWI,GAEtCH,EAAIM,KAAK,GACjB,CAEA,SAASC,GAAoBnO,EAAMhC,EAAQ+P,GAC1C,IAAInK,EAAS5D,EAAK4D,QAAU,GACxBpQ,EAAMwM,EAAKyC,aAQf,IAAKjP,EACJ,OAAO,EAER,GAAe,QAAXoQ,GAAoBpQ,IAAQ6K,EAAUE,KAAO/K,IAAQ6K,EAAUG,MAClE,OAAO,EAIR,IADA,IAAItG,EAAI6V,EAAkBvV,OACnBN,KAAK,CACX,IAAI2R,EAAKkE,EAAkB7V,GAE3B,GAAI2R,EAAGjG,SAAWA,EACjB,OAAOiG,EAAGmE,YAAcxa,CAE1B,CACA,OAAO,CACR,CAcA,SAAS4a,GAAuBR,EAAKS,EAAe5c,GACnDmc,EAAIta,KAAK,IAAK+a,EAAe,KAAM5c,EAAMiO,QAAQ,gBAAiByK,GAAc,IACjF,CAEA,SAAS8D,GAAkBjO,EAAK4N,EAAI5P,EAAO2P,EAAWI,GAKrD,GAJKA,IACJA,EAAoB,IAGlBJ,EAAW,CAEb,KADA3N,EAAO2N,EAAW3N,IAOjB,OALA,GAAkB,iBAARA,EAET,YADA4N,EAAIta,KAAK0M,EAOZ,CAEA,OAAOA,EAAKqL,UACZ,KAAK3E,EACJ,IAAI9D,EAAQ5C,EAAKsO,WACbrU,EAAM2I,EAAMpK,OACZuS,EAAQ/K,EAAKuK,WACbvV,EAAWgL,EAAKyD,QAIhB8K,EAAmBvZ,EACvB,KAHAgJ,EAASK,EAAUL,OAAOgC,EAAKyC,eAAiBzE,KAGhCgC,EAAK4D,QAAU5D,EAAKyC,aAAc,CAGjD,IAFA,IAAI+L,EAEKC,EAAK,EAAGA,EAAK7L,EAAMpK,OAAQiW,IACnC,GAA4B,UAAxB7L,EAAM5D,KAAKyP,GAAI/U,KAAkB,CACpC8U,EAAY5L,EAAM5D,KAAKyP,GAAIhd,MAC3B,KACD,CAED,IAAK+c,EAEJ,IAAK,IAAIE,EAAMX,EAAkBvV,OAAS,EAAGkW,GAAO,EAAGA,IAAO,CAE7D,GAAyB,MADrBV,EAAYD,EAAkBW,IACpB9K,QAAiBoK,EAAUA,YAAchO,EAAKyC,aAAc,CACzE+L,EAAYR,EAAUA,UACtB,KACD,CACD,CAED,GAAIQ,IAAcxO,EAAKyC,aACtB,IAASiM,EAAMX,EAAkBvV,OAAS,EAAGkW,GAAO,EAAGA,IAAO,CAC7D,IAAIV,EACJ,IADIA,EAAYD,EAAkBW,IACpBV,YAAchO,EAAKyC,aAAc,CAC1CuL,EAAUpK,SACb2K,EAAmBP,EAAUpK,OAAS,IAAM5O,GAE7C,KACD,CACD,CAEF,CAEA4Y,EAAIta,KAAK,IAAKib,GAEd,IAAI,IAAIrW,EAAE,EAAEA,EAAE+B,EAAI/B,IAAI,CAGF,UADf+K,EAAOL,EAAM5D,KAAK9G,IACb0L,OACRmK,EAAkBza,KAAK,CAAEsQ,OAAQX,EAAKP,UAAWsL,UAAW/K,EAAKxR,QACxC,SAAjBwR,EAAKjO,UACb+Y,EAAkBza,KAAK,CAAEsQ,OAAQ,GAAIoK,UAAW/K,EAAKxR,OAEvD,CAEA,IAAQyG,EAAE,EAAEA,EAAE+B,EAAI/B,IAAI,CACrB,IAAI+K,EAECW,EACApQ,EAFL,GAAI2a,GADAlL,EAAOL,EAAM5D,KAAK9G,GACO8F,EAAQ+P,GAGpCK,GAAuBR,GAFnBhK,EAASX,EAAKW,QAAQ,IAEW,SAAWA,EAAS,QADrDpQ,EAAMyP,EAAKR,cAEfsL,EAAkBza,KAAK,CAAEsQ,OAAQA,EAAQoK,UAAUxa,IAEpDya,GAAkBhL,EAAK2K,EAAI5P,EAAO2P,EAAWI,EAC9C,CAGA,GAAI/Y,IAAauZ,GAAoBJ,GAAoBnO,EAAMhC,EAAQ+P,GAGtEK,GAAuBR,GAFnBhK,EAAS5D,EAAK4D,QAAQ,IAEW,SAAWA,EAAS,QADrDpQ,EAAMwM,EAAKyC,cAEfsL,EAAkBza,KAAK,CAAEsQ,OAAQA,EAAQoK,UAAUxa,IAGpD,GAAGuX,GAAS/M,IAAW,mCAAmCpE,KAAK5E,GAAU,CAGxE,GAFA4Y,EAAIta,KAAK,KAEN0K,GAAU,YAAYpE,KAAK5E,GAC7B,KAAM+V,GACFA,EAAMjU,KACR8W,EAAIta,KAAKyX,EAAMjU,MAEfmX,GAAkBlD,EAAO6C,EAAK5P,EAAQ2P,EAAYI,EAAkB5a,SAErE4X,EAAQA,EAAMP,iBAIf,KAAMO,GACLkD,GAAkBlD,EAAO6C,EAAK5P,EAAQ2P,EAAYI,EAAkB5a,SACpE4X,EAAQA,EAAMP,YAGhBoD,EAAIta,KAAK,KAAKib,EAAiB,IAChC,MACCX,EAAIta,KAAK,MAIV,OACD,KAAK4T,EACL,KAAKE,EAEJ,IADI2D,EAAQ/K,EAAKuK,WACXQ,GACLkD,GAAkBlD,EAAO6C,EAAK5P,EAAQ2P,EAAYI,EAAkB5a,SACpE4X,EAAQA,EAAMP,YAEf,OACD,KAAK7D,EACJ,OAAOyH,GAAuBR,EAAK5N,EAAKtG,KAAMsG,EAAKvO,OACpD,KAAKmV,EAiBJ,OAAOgH,EAAIta,KAAK0M,EAAKlJ,KACnB4I,QAAQ,SAASyK,IAEpB,KAAKtD,EACJ,OAAO+G,EAAIta,KAAM,YAAY0M,EAAKlJ,KAAK,OACxC,KAAKmQ,EACJ,OAAO2G,EAAIta,KAAM,UAAO0M,EAAKlJ,KAAK,UACnC,KAAKqQ,EACJ,IAAIwH,EAAQ3O,EAAKgF,SACb4J,EAAQ5O,EAAKK,SAEjB,GADAuN,EAAIta,KAAK,aAAa0M,EAAKtG,MACxBiV,EACFf,EAAIta,KAAK,WAAYqb,GACjBC,GAAgB,KAAPA,GACZhB,EAAIta,KAAK,IAAKsb,GAEfhB,EAAIta,KAAK,UACJ,GAAGsb,GAAgB,KAAPA,EACjBhB,EAAIta,KAAK,WAAYsb,EAAO,SACxB,CACJ,IAAIC,EAAM7O,EAAK8O,eACZD,GACFjB,EAAIta,KAAK,KAAKub,EAAI,KAEnBjB,EAAIta,KAAK,IACV,CACA,OACD,KAAK0T,EACJ,OAAO4G,EAAIta,KAAM,KAAK0M,EAAKtB,OAAO,IAAIsB,EAAKlJ,KAAK,MACjD,KAAKgQ,EACJ,OAAO8G,EAAIta,KAAM,IAAI0M,EAAKhL,SAAS,KAGpC,QACC4Y,EAAIta,KAAK,KAAK0M,EAAKhL,UAErB,CACA,SAAS+Z,GAAW/N,EAAIhB,EAAKgP,GAC5B,IAAIC,EACJ,OAAQjP,EAAKqL,UACb,KAAK3E,GACJuI,EAAQjP,EAAKkP,WAAU,IACjBhG,cAAgBlI,EAMvB,KAAKoG,EACJ,MACD,KAAKT,EACJqI,GAAO,EAsBR,GALIC,IACHA,EAAQjP,EAAKkP,WAAU,IAExBD,EAAM/F,cAAgBlI,EACtBiO,EAAMvL,WAAa,KAChBsL,EAEF,IADA,IAAIjE,EAAQ/K,EAAKuK,WACXQ,GACLkE,EAAMlO,YAAYgO,GAAW/N,EAAI+J,EAAMiE,IACvCjE,EAAQA,EAAMP,YAGhB,OAAOyE,CACR,CAIA,SAASC,GAAUlO,EAAIhB,EAAKgP,GAC3B,IAAIC,EAAQ,IAAIjP,EAAKvG,YACrB,IAAK,IAAIJ,KAAK2G,EACb,GAAI1G,OAAOC,UAAUvB,eAAegB,KAAKgH,EAAM3G,GAAI,CAClD,IAAI8V,EAAInP,EAAK3G,GACG,iBAAL8V,GACNA,GAAKF,EAAM5V,KACd4V,EAAM5V,GAAK8V,EAGd,CAMD,OAJGnP,EAAK8K,aACPmE,EAAMnE,WAAa,IAAIpC,GAExBuG,EAAM/F,cAAgBlI,EACdiO,EAAM5D,UACd,KAAK3E,EACJ,IAAI9D,EAAQ5C,EAAKsO,WACbc,EAASH,EAAMX,WAAa,IAAIhF,EAChCrP,EAAM2I,EAAMpK,OAChB4W,EAAOC,cAAgBJ,EACvB,IAAI,IAAI/W,EAAE,EAAEA,EAAE+B,EAAI/B,IACjB+W,EAAM3L,iBAAiB4L,GAAUlO,EAAI4B,EAAM5D,KAAK9G,IAAG,IAEpD,MACD,KAAKyO,EACJqI,GAAO,EAER,GAAGA,EAEF,IADA,IAAIjE,EAAQ/K,EAAKuK,WACXQ,GACLkE,EAAMlO,YAAYmO,GAAUlO,EAAI+J,EAAMiE,IACtCjE,EAAQA,EAAMP,YAGhB,OAAOyE,CACR,CAEA,SAAS7F,GAAQxL,EAAO1K,EAAIzB,GAC3BmM,EAAO1K,GAAOzB,CACf,CAvlDA8W,EAAahP,UAAY3F,MAAM2F,UAC/B0M,EAAKqB,EAAciB,GASnBG,EAASnP,UAAY,CAKpBf,OAAO,EASPwG,KAAM,SAAShM,GACd,OAAOA,GAAS,GAAKA,EAAQmH,KAAK3B,OAAS2B,KAAKnH,GAAS,IAC1D,EACAwG,SAAS,SAASwE,EAAO2P,GACxB,IAAI,IAAIC,EAAM,GAAI1V,EAAI,EAAEA,EAAEiC,KAAK3B,OAAON,IACrC+V,GAAkB9T,KAAKjC,GAAG0V,EAAI5P,EAAO2P,GAEtC,OAAOC,EAAIM,KAAK,GACjB,EAMApI,OAAQ,SAAUhH,GACjB,OAAO1L,MAAMmG,UAAUuM,OAAO9M,KAAKmB,KAAM2E,EAC1C,EAMA7L,QAAS,SAAU+L,GAClB,OAAO5L,MAAMmG,UAAUtG,QAAQ+F,KAAKmB,KAAM6E,EAC3C,GAwBD2J,EAAapP,UAAUyF,KAAO,SAAS9G,GAEtC,OADA6Q,EAAgB5O,MACTA,KAAKjC,IAAM,IACnB,EAEA/F,EAASwW,EAAaD,GA0DtBY,EAAa/P,UAAY,CACxBf,OAAO,EACPwG,KAAK0J,EAASnP,UAAUyF,KACxBsQ,aAAc,SAASpc,GAMtB,IADA,IAAIgF,EAAIiC,KAAK3B,OACPN,KAAI,CACT,IAAI+K,EAAO9I,KAAKjC,GAEhB,GAAG+K,EAAKjO,UAAY9B,EACnB,OAAO+P,CAET,CACD,EACAsM,aAAc,SAAStM,GACtB,IAAIJ,EAAKI,EAAK0G,aACd,GAAG9G,GAAMA,GAAI1I,KAAKkV,cACjB,MAAM,IAAI9G,EAAaP,GAExB,IAAI0B,EAAUvP,KAAKmV,aAAarM,EAAKjO,UAErC,OADAwU,EAAcrP,KAAKkV,cAAclV,KAAK8I,EAAKyG,GACpCA,CACR,EAEA8F,eAAgB,SAASvM,GACxB,IAA4ByG,EAAxB7G,EAAKI,EAAK0G,aACd,GAAG9G,GAAMA,GAAI1I,KAAKkV,cACjB,MAAM,IAAI9G,EAAaP,GAIxB,OAFA0B,EAAUvP,KAAKsV,eAAexM,EAAKR,aAAaQ,EAAKP,WACrD8G,EAAcrP,KAAKkV,cAAclV,KAAK8I,EAAKyG,GACpCA,CACR,EAGAgG,gBAAiB,SAASxc,GACzB,IAAI+P,EAAO9I,KAAKmV,aAAapc,GAE7B,OADA8W,EAAiB7P,KAAKkV,cAAclV,KAAK8I,GAClCA,CAGR,EAGA0M,kBAAkB,SAASlN,EAAaC,GACvC,IAAIO,EAAO9I,KAAKsV,eAAehN,EAAaC,GAE5C,OADAsH,EAAiB7P,KAAKkV,cAAclV,KAAK8I,GAClCA,CACR,EACAwM,eAAgB,SAAShN,EAAcC,GAEtC,IADA,IAAIxK,EAAIiC,KAAK3B,OACPN,KAAI,CACT,IAAI8H,EAAO7F,KAAKjC,GAChB,GAAG8H,EAAK0C,WAAaA,GAAa1C,EAAKyC,cAAgBA,EACtD,OAAOzC,CAET,CACA,OAAO,IACR,GAqBDX,EAAkB9F,UAAY,CAgB7BqW,WAAY,SAASC,EAASC,GAC5B,OAAO,CACT,EAuBAxN,eAAgB,SAASG,EAAe4L,EAAehJ,GACtD,IAAIrE,EAAM,IAAIyJ,EAOd,GANAzJ,EAAIkE,eAAiB/K,KACrB6G,EAAI8J,WAAa,IAAIpC,EACrB1H,EAAIqE,QAAUA,GAAW,KACrBA,GACHrE,EAAID,YAAYsE,GAEbgJ,EAAc,CACjB,IAAI0B,EAAO/O,EAAI8B,gBAAgBL,EAAc4L,GAC7CrN,EAAID,YAAYgP,EACjB,CACA,OAAO/O,CACR,EAsBAmE,mBAAoB,SAASkJ,EAAerJ,EAAU3E,GACrD,IAAIL,EAAO,IAAIkN,GAMf,OALAlN,EAAKtG,KAAO2U,EACZrO,EAAKhL,SAAWqZ,EAChBrO,EAAKgF,SAAWA,GAAY,GAC5BhF,EAAKK,SAAWA,GAAY,GAErBL,CACR,GAWDkK,EAAK3Q,UAAY,CAChBgR,WAAa,KACbY,UAAY,KACZD,gBAAkB,KAClBV,YAAc,KACd8D,WAAa,KACb5K,WAAa,KACboH,WAAa,KACb5B,cAAgB,KAChB7F,UAAY,KACZZ,aAAe,KACfmB,OAAS,KACTlB,UAAY,KAEZsN,aAAa,SAASpF,EAAUqF,GAC/B,OAAO5D,EAAclS,KAAKyQ,EAASqF,EACpC,EACAC,aAAa,SAAStF,EAAUuF,GAC/B9D,EAAclS,KAAMyQ,EAASuF,EAAU/D,GACpC+D,GACFhW,KAAKqS,YAAY2D,EAEnB,EACA3D,YAAY,SAAS2D,GACpB,OAAOnF,EAAa7Q,KAAKgW,EAC1B,EACApP,YAAY,SAAS6J,GACpB,OAAOzQ,KAAK6V,aAAapF,EAAS,KACnC,EACAwF,cAAc,WACb,OAA0B,MAAnBjW,KAAKoQ,UACb,EACA2E,UAAU,SAASF,GAClB,OAAOE,GAAU/U,KAAK+O,eAAe/O,KAAKA,KAAK6U,EAChD,EAEA7M,UAAU,WAET,IADA,IAAI4I,EAAQ5Q,KAAKoQ,WACXQ,GAAM,CACX,IAAI9R,EAAO8R,EAAMP,YACdvR,GAAQA,EAAKoS,UAAYzE,GAAamE,EAAMM,UAAYzE,GAC1DzM,KAAKqS,YAAYvT,GACjB8R,EAAMsF,WAAWpX,EAAKnC,QAEtBiU,EAAM5I,YACN4I,EAAQ9R,EAEV,CACD,EAEAqX,YAAY,SAAST,EAASC,GAC7B,OAAO3V,KAAK+O,cAAchE,eAAe0K,WAAWC,EAAQC,EAC7D,EAEGS,cAAc,WACb,OAAOpW,KAAKmU,WAAW9V,OAAO,CAC/B,EAeAsV,aAAa,SAASrL,GAErB,IADA,IAAII,EAAK1I,KACH0I,GAAG,CACR,IAAI2N,EAAM3N,EAAGiH,OAEb,GAAG0G,EACF,IAAI,IAAInX,KAAKmX,EACd,GAAIlX,OAAOC,UAAUvB,eAAegB,KAAKwX,EAAKnX,IAAMmX,EAAInX,KAAOoJ,EAC9D,OAAOpJ,EAIRwJ,EAAKA,EAAGwI,UAAY1E,EAAe9D,EAAGqG,cAAgBrG,EAAGa,UAC1D,CACA,OAAO,IACR,EAEA+M,mBAAmB,SAAS7M,GAE3B,IADA,IAAIf,EAAK1I,KACH0I,GAAG,CACR,IAAI2N,EAAM3N,EAAGiH,OAEb,GAAG0G,GACClX,OAAOC,UAAUvB,eAAegB,KAAKwX,EAAK5M,GAC5C,OAAO4M,EAAI5M,GAGbf,EAAKA,EAAGwI,UAAY1E,EAAe9D,EAAGqG,cAAgBrG,EAAGa,UAC1D,CACA,OAAO,IACR,EAEAgN,mBAAmB,SAASjO,GAE3B,OAAiB,MADJtI,KAAK2T,aAAarL,EAEhC,GAaJwD,EAAKQ,EAASyD,GACdjE,EAAKQ,EAASyD,EAAK3Q,WAybnBkR,EAASlR,UAAY,CAEpBvE,SAAY,YACZqW,SAAYnE,EAOZ7B,QAAW,KACXtQ,gBAAmB,KACnBkU,KAAO,EAEP+G,aAAgB,SAASpF,EAAUqF,GAClC,GAAGrF,EAASS,UAAYjE,EAAuB,CAE9C,IADA,IAAI2D,EAAQH,EAASL,WACfQ,GAAM,CACX,IAAI9R,EAAO8R,EAAMP,YACjBrQ,KAAK6V,aAAajF,EAAMkF,GACxBlF,EAAQ9R,CACT,CACA,OAAO2R,CACR,CAOA,OANAyB,EAAclS,KAAMyQ,EAAUqF,GAC9BrF,EAAS1B,cAAgB/O,KACI,OAAzBA,KAAKpF,iBAA4B6V,EAASS,WAAa3E,IAC1DvM,KAAKpF,gBAAkB6V,GAGjBA,CACR,EACA4B,YAAe,SAAS2D,GAIvB,OAHGhW,KAAKpF,iBAAmBob,IAC1BhW,KAAKpF,gBAAkB,MAEjBiW,EAAa7Q,KAAKgW,EAC1B,EACAD,aAAc,SAAUtF,EAAUuF,GAEjC9D,EAAclS,KAAMyQ,EAAUuF,EAAU/D,GACxCxB,EAAS1B,cAAgB/O,KACrBgW,GACHhW,KAAKqS,YAAY2D,GAEd7E,EAAcV,KACjBzQ,KAAKpF,gBAAkB6V,EAEzB,EAEAmE,WAAa,SAAS4B,EAAa3B,GAClC,OAAOD,GAAW5U,KAAKwW,EAAa3B,EACrC,EAEA4B,eAAiB,SAASC,GACzB,IAAIC,EAAM,KASV,OARAxG,EAAWnQ,KAAKpF,iBAAgB,SAASiL,GACxC,GAAGA,EAAKqL,UAAY3E,GAChB1G,EAAK+Q,aAAa,OAASF,EAE7B,OADAC,EAAM9Q,GACC,CAGV,IACO8Q,CACR,EAmBAE,uBAAwB,SAASC,GAChC,IAAIC,EAAgBrL,EAAaoL,GACjC,OAAO,IAAItI,EAAaxO,MAAM,SAASgX,GACtC,IAAIhI,EAAK,GAoBT,OAnBI+H,EAAc1Y,OAAS,GAC1B8R,EAAW6G,EAAKpc,iBAAiB,SAASiL,GACzC,GAAGA,IAASmR,GAAQnR,EAAKqL,WAAa3E,EAAc,CACnD,IAAI0K,EAAiBpR,EAAK+Q,aAAa,SAEvC,GAAIK,EAAgB,CAEnB,IAAIC,EAAUJ,IAAeG,EAC7B,IAAKC,EAAS,CACb,IAAIC,EAAoBzL,EAAauL,GACrCC,EAAUH,EAAcK,OApiCR1S,EAoiC4ByS,EAniC5C,SAAS1L,GACf,OAAO/G,IAAmC,IAA3BA,EAAK5L,QAAQ2S,EAC7B,GAkiCM,CACGyL,GACFlI,EAAG7V,KAAK0M,EAEV,CACD,CA1iCL,IAAwBnB,CA2iCpB,IAEMsK,CACR,GACD,EAGAqI,cAAgB,SAAS/N,GACxB,IAAIzD,EAAO,IAAI4M,GAQf,OAPA5M,EAAKkJ,cAAgB/O,KACrB6F,EAAKhL,SAAWyO,EAChBzD,EAAKyD,QAAUA,EACfzD,EAAK0C,UAAYe,EACjBzD,EAAK8K,WAAa,IAAIpC,GACV1I,EAAKsO,WAAa,IAAIhF,GAC5B+F,cAAgBrP,EACfA,CACR,EACAyR,uBAAyB,WACxB,IAAIzR,EAAO,IAAIsN,GAGf,OAFAtN,EAAKkJ,cAAgB/O,KACrB6F,EAAK8K,WAAa,IAAIpC,EACf1I,CACR,EACAuE,eAAiB,SAASzN,GACzB,IAAIkJ,EAAO,IAAI+M,GAGf,OAFA/M,EAAKkJ,cAAgB/O,KACrB6F,EAAKqQ,WAAWvZ,GACTkJ,CACR,EACA4E,cAAgB,SAAS9N,GACxB,IAAIkJ,EAAO,IAAIgN,GAGf,OAFAhN,EAAKkJ,cAAgB/O,KACrB6F,EAAKqQ,WAAWvZ,GACTkJ,CACR,EACAsE,mBAAqB,SAASxN,GAC7B,IAAIkJ,EAAO,IAAIiN,GAGf,OAFAjN,EAAKkJ,cAAgB/O,KACrB6F,EAAKqQ,WAAWvZ,GACTkJ,CACR,EACAgE,4BAA8B,SAAStF,EAAO5H,GAC7C,IAAIkJ,EAAO,IAAIuN,GAIf,OAHAvN,EAAKkJ,cAAgB/O,KACrB6F,EAAKyD,QAAUzD,EAAKhL,SAAWgL,EAAKtB,OAASA,EAC7CsB,EAAKqD,UAAYrD,EAAKlJ,KAAOA,EACtBkJ,CACR,EACA0R,gBAAkB,SAAShY,GAC1B,IAAIsG,EAAO,IAAI6M,GAMf,OALA7M,EAAKkJ,cAAgB/O,KACrB6F,EAAKtG,KAAOA,EACZsG,EAAKhL,SAAW0E,EAChBsG,EAAK0C,UAAYhJ,EACjBsG,EAAK2R,WAAY,EACV3R,CACR,EACA4R,sBAAwB,SAASlY,GAChC,IAAIsG,EAAO,IAAIqN,GAGf,OAFArN,EAAKkJ,cAAgB/O,KACrB6F,EAAKhL,SAAW0E,EACTsG,CACR,EAEA8C,gBAAkB,SAASL,EAAa4L,GACvC,IAAIrO,EAAO,IAAI4M,GACXiF,EAAKxD,EAAcjd,MAAM,KACzBwR,EAAQ5C,EAAKsO,WAAa,IAAIhF,EAclC,OAbAtJ,EAAK8K,WAAa,IAAIpC,EACtB1I,EAAKkJ,cAAgB/O,KACrB6F,EAAKhL,SAAWqZ,EAChBrO,EAAKyD,QAAU4K,EACfrO,EAAKyC,aAAeA,EACJ,GAAboP,EAAGrZ,QACLwH,EAAK4D,OAASiO,EAAG,GACjB7R,EAAK0C,UAAYmP,EAAG,IAGpB7R,EAAK0C,UAAY2L,EAElBzL,EAAMyM,cAAgBrP,EACfA,CACR,EAEAmD,kBAAoB,SAASV,EAAa4L,GACzC,IAAIrO,EAAO,IAAI6M,GACXgF,EAAKxD,EAAcjd,MAAM,KAa7B,OAZA4O,EAAKkJ,cAAgB/O,KACrB6F,EAAKhL,SAAWqZ,EAChBrO,EAAKtG,KAAO2U,EACZrO,EAAKyC,aAAeA,EACpBzC,EAAK2R,WAAY,EACD,GAAbE,EAAGrZ,QACLwH,EAAK4D,OAASiO,EAAG,GACjB7R,EAAK0C,UAAYmP,EAAG,IAGpB7R,EAAK0C,UAAY2L,EAEXrO,CACR,GAED7N,EAASsY,EAASP,GAMlB0C,GAAQrT,UAAY,CACnB8R,SAAW3E,EACXoL,aAAe,SAASpY,GACvB,OAAoC,MAA7BS,KAAK4X,iBAAiBrY,EAC9B,EACAqX,aAAe,SAASrX,GACvB,IAAIuJ,EAAO9I,KAAK4X,iBAAiBrY,GACjC,OAAOuJ,GAAQA,EAAKxR,OAAS,EAC9B,EACAsgB,iBAAmB,SAASrY,GAC3B,OAAOS,KAAKmU,WAAWgB,aAAa5V,EACrC,EACAsY,aAAe,SAAStY,EAAMjI,GAC7B,IAAIwR,EAAO9I,KAAK+O,cAAcwI,gBAAgBhY,GAC9CuJ,EAAKxR,MAAQwR,EAAKI,UAAY,GAAK5R,EACnC0I,KAAKmJ,iBAAiBL,EACvB,EACAgP,gBAAkB,SAASvY,GAC1B,IAAIuJ,EAAO9I,KAAK4X,iBAAiBrY,GACjCuJ,GAAQ9I,KAAK+X,oBAAoBjP,EAClC,EAGAlC,YAAY,SAAS6J,GACpB,OAAGA,EAASS,WAAajE,EACjBjN,KAAK6V,aAAapF,EAAS,MAhQrC,SAA6BlH,EAAYkH,GAcxC,OAbIA,EAASlH,YACZkH,EAASlH,WAAW8I,YAAY5B,GAEjCA,EAASlH,WAAaA,EACtBkH,EAASM,gBAAkBxH,EAAWyH,UACtCP,EAASJ,YAAc,KACnBI,EAASM,gBACZN,EAASM,gBAAgBV,YAAcI,EAEvClH,EAAW6G,WAAaK,EAEzBlH,EAAWyH,UAAYP,EACvBD,EAAejH,EAAWwF,cAAexF,EAAYkH,GAC9CA,CACR,CAmPUuH,CAAmBhY,KAAKyQ,EAEjC,EACAtH,iBAAmB,SAASmG,GAC3B,OAAOtP,KAAKmU,WAAWiB,aAAa9F,EACrC,EACA2I,mBAAqB,SAAS3I,GAC7B,OAAOtP,KAAKmU,WAAWkB,eAAe/F,EACvC,EACAyI,oBAAsB,SAASxI,GAE9B,OAAOvP,KAAKmU,WAAWoB,gBAAgBhG,EAAQ1U,SAChD,EAEAqd,kBAAoB,SAAS5P,EAAcC,GAC1C,IAAI4P,EAAMnY,KAAKoY,mBAAmB9P,EAAcC,GAChD4P,GAAOnY,KAAK+X,oBAAoBI,EACjC,EAEAE,eAAiB,SAAS/P,EAAcC,GACvC,OAAyD,MAAlDvI,KAAKoY,mBAAmB9P,EAAcC,EAC9C,EACA+P,eAAiB,SAAShQ,EAAcC,GACvC,IAAIO,EAAO9I,KAAKoY,mBAAmB9P,EAAcC,GACjD,OAAOO,GAAQA,EAAKxR,OAAS,EAC9B,EACAihB,eAAiB,SAASjQ,EAAc4L,EAAe5c,GACtD,IAAIwR,EAAO9I,KAAK+O,cAAc/F,kBAAkBV,EAAc4L,GAC9DpL,EAAKxR,MAAQwR,EAAKI,UAAY,GAAK5R,EACnC0I,KAAKmJ,iBAAiBL,EACvB,EACAsP,mBAAqB,SAAS9P,EAAcC,GAC3C,OAAOvI,KAAKmU,WAAWmB,eAAehN,EAAcC,EACrD,EAEAiQ,qBAAuB,SAASlP,GAC/B,OAAO,IAAIkF,EAAaxO,MAAK,SAASgX,GACrC,IAAIhI,EAAK,GAMT,OALAmB,EAAW6G,GAAK,SAASnR,GACrBA,IAASmR,GAAQnR,EAAKqL,UAAY3E,GAA6B,MAAZjD,GAAmBzD,EAAKyD,SAAWA,GACxF0F,EAAG7V,KAAK0M,EAEV,IACOmJ,CACR,GACD,EACAyJ,uBAAyB,SAASnQ,EAAcC,GAC/C,OAAO,IAAIiG,EAAaxO,MAAK,SAASgX,GACrC,IAAIhI,EAAK,GAMT,OALAmB,EAAW6G,GAAK,SAASnR,GACrBA,IAASmR,GAAQnR,EAAKqL,WAAa3E,GAAkC,MAAjBjE,GAAwBzC,EAAKyC,eAAiBA,GAAgC,MAAdC,GAAqB1C,EAAK0C,WAAaA,GAC7JyG,EAAG7V,KAAK0M,EAEV,IACOmJ,CAER,GACD,GAEDsB,EAASlR,UAAUoZ,qBAAuB/F,GAAQrT,UAAUoZ,qBAC5DlI,EAASlR,UAAUqZ,uBAAyBhG,GAAQrT,UAAUqZ,uBAG9DzgB,EAASya,GAAQ1C,GAGjB2C,GAAKtT,UAAU8R,SAAW1E,EAC1BxU,EAAS0a,GAAK3C,GAKd4C,GAAcvT,UAAY,CACzBzC,KAAO,GACP+b,cAAgB,SAASC,EAAQC,GAChC,OAAO5Y,KAAKrD,KAAKkc,UAAUF,EAAQA,EAAOC,EAC3C,EACA1C,WAAY,SAAS4C,GACpBA,EAAO9Y,KAAKrD,KAAKmc,EACjB9Y,KAAKkJ,UAAYlJ,KAAKrD,KAAOmc,EAC7B9Y,KAAK3B,OAASya,EAAKza,MACpB,EACA0a,WAAY,SAASJ,EAAOG,GAC3B9Y,KAAKgZ,YAAYL,EAAO,EAAEG,EAE3B,EACAlS,YAAY,SAAS6J,GACpB,MAAM,IAAIhX,MAAM2T,EAAiBC,GAClC,EACA4L,WAAY,SAASN,EAAQC,GAC5B5Y,KAAKgZ,YAAYL,EAAOC,EAAM,GAC/B,EACAI,YAAa,SAASL,EAAQC,EAAOE,GAGpCA,EAFY9Y,KAAKrD,KAAKkc,UAAU,EAAEF,GAEnBG,EADL9Y,KAAKrD,KAAKkc,UAAUF,EAAOC,GAErC5Y,KAAKkJ,UAAYlJ,KAAKrD,KAAOmc,EAC7B9Y,KAAK3B,OAASya,EAAKza,MACpB,GAEDrG,EAAS2a,GAAc5C,GAGvB6C,GAAKxT,UAAY,CAChBvE,SAAW,QACXqW,SAAWzE,EACXyM,UAAY,SAASP,GACpB,IAAIG,EAAO9Y,KAAKrD,KACZwc,EAAUL,EAAKD,UAAUF,GAC7BG,EAAOA,EAAKD,UAAU,EAAGF,GACzB3Y,KAAKrD,KAAOqD,KAAKkJ,UAAY4P,EAC7B9Y,KAAK3B,OAASya,EAAKza,OACnB,IAAI+a,EAAUpZ,KAAK+O,cAAc3E,eAAe+O,GAIhD,OAHGnZ,KAAKuJ,YACPvJ,KAAKuJ,WAAWsM,aAAauD,EAASpZ,KAAKqQ,aAErC+I,CACR,GAEDphB,EAAS4a,GAAKD,IAGdE,GAAQzT,UAAY,CACnBvE,SAAW,WACXqW,SAAWpE,GAEZ9U,EAAS6a,GAAQF,IAIjBG,GAAa1T,UAAY,CACxBvE,SAAW,iBACXqW,SAAWxE,GAEZ1U,EAAS8a,GAAaH,IAKtBI,GAAa3T,UAAU8R,SAAWlE,EAClChV,EAAS+a,GAAahD,GAItBiD,GAAS5T,UAAU8R,SAAWhE,EAC9BlV,EAASgb,GAASjD,GAIlBkD,GAAO7T,UAAU8R,SAAWtE,EAC5B5U,EAASib,GAAOlD,GAIhBmD,GAAgB9T,UAAU8R,SAAWvE,EACrC3U,EAASkb,GAAgBnD,GAIzBoD,GAAiB/T,UAAUvE,SAAW,qBACtCsY,GAAiB/T,UAAU8R,SAAWjE,EACtCjV,EAASmb,GAAiBpD,GAK1BqD,GAAsBhU,UAAU8R,SAAWrE,EAC3C7U,EAASob,GAAsBrD,GAE/BsD,GAAcjU,UAAU0U,kBAAoB,SAASjO,EAAK0N,EAAOC,GAChE,OAAOF,GAAsBzU,KAAKgH,EAAK0N,EAAOC,EAC/C,EACAzD,EAAK3Q,UAAUC,SAAWiU,GAmV1B,IACC,GAAGnU,OAAOka,eAAe,CAiCxB,SAASC,GAAezT,GACvB,OAAOA,EAAKqL,UACZ,KAAK3E,EACL,KAAKU,EACJ,IAAIwG,EAAM,GAEV,IADA5N,EAAOA,EAAKuK,WACNvK,GACc,IAAhBA,EAAKqL,UAAiC,IAAjBrL,EAAKqL,UAC5BuC,EAAIta,KAAKmgB,GAAezT,IAEzBA,EAAOA,EAAKwK,YAEb,OAAOoD,EAAIM,KAAK,IACjB,QACC,OAAOlO,EAAKqD,UAEd,CAhDA/J,OAAOka,eAAe7K,EAAapP,UAAU,SAAS,CACrD0B,IAAI,WAEH,OADA8N,EAAgB5O,MACTA,KAAKkP,QACb,IAGD/P,OAAOka,eAAetJ,EAAK3Q,UAAU,cAAc,CAClD0B,IAAI,WACH,OAAOwY,GAAetZ,KACvB,EAEAW,IAAI,SAAShE,GACZ,OAAOqD,KAAKkR,UACZ,KAAK3E,EACL,KAAKU,EACJ,KAAMjN,KAAKoQ,YACVpQ,KAAKqS,YAAYrS,KAAKoQ,aAEpBzT,GAAQ/E,OAAO+E,KACjBqD,KAAK4G,YAAY5G,KAAK+O,cAAc3E,eAAezN,IAEpD,MAED,QACCqD,KAAKrD,KAAOA,EACZqD,KAAK1I,MAAQqF,EACbqD,KAAKkJ,UAAYvM,EAEnB,IAqBDsS,GAAU,SAASxL,EAAO1K,EAAIzB,GAE7BmM,EAAO,KAAK1K,GAAOzB,CACpB,CACD,CACD,CAAC,MAAMK,IAAG,CAITtB,EAAQ0c,aAAeA,GACvB1c,EAAQ+X,aAAeA,EACvB/X,EAAQ6O,kBAAoBA,EAC5B7O,EAAQoc,QAAUA,GAClBpc,EAAQ0Z,KAAOA,EACf1Z,EAAQkY,SAAWA,EACnBlY,EAAQgd,cAAgBA,+BC5yDzB,IAAI7P,EAASrN,EAAAA,KAAAA,OASbE,EAAQiR,aAAe9D,EAAO,CAC7B+V,IAAK,IACLC,KAAM,IACNC,GAAI,IACJC,GAAI,IACJC,KAAM,MAiBPtjB,EAAQgR,cAAgB7D,EAAO,CAC9BoW,OAAQ,OACRC,OAAQ,OACRC,OAAQ,SACRC,OAAQ,SACRnV,GAAI,SACJoV,IAAK,SACLC,IAAK,eACLC,MAAO,OACPC,MAAO,OACPC,MAAO,OACPC,IAAK,SACLC,IAAK,SACLC,MAAO,OACPC,MAAO,OACPC,GAAI,SACJC,IAAK,eACLC,IAAK,eACLC,OAAQ,OACRC,OAAQ,OACRC,QAAS,SACTC,MAAO,SACPC,MAAO,SACPC,MAAO,SACPC,MAAO,SACPC,MAAO,SACPC,MAAO,SACPC,IAAK,IACL9B,IAAK,IACL+B,IAAK,SACLC,IAAK,SACLC,OAAQ,SACRC,KAAM,SACNC,SAAU,SACVC,KAAM,SACNC,IAAK,SACLC,KAAM,SACNC,MAAO,SACPC,OAAQ,SACRC,SAAU,SACVC,SAAU,SACVC,SAAU,SACVC,SAAU,SACVC,SAAU,SACVC,SAAU,SACVC,SAAU,SACVC,SAAU,SACVC,MAAO,SACPC,QAAS,SACTC,SAAU,SACVC,OAAQ,SACRC,MAAO,OACPC,QAAS,SACTC,MAAO,SACPC,MAAO,SACPC,KAAM,eACNC,KAAM,eACNC,GAAI,SACJC,OAAQ,SACRC,IAAK,SACLC,IAAK,SACLC,KAAM,SACN9D,KAAM,IACN+D,cAAe,SACfC,OAAQ,SACRC,SAAU,SACVC,MAAO,OACPC,MAAO,OACPC,KAAM,eACNC,KAAM,eACNC,OAAQ,SACRC,IAAK,IACLC,MAAO,SACPC,QAAS,SACTC,OAAQ,OACRC,OAAQ,OACRC,KAAM,OACNC,KAAM,OACNC,SAAU,SACVC,MAAO,SACPC,SAAU,SACVC,YAAa,SACbC,UAAW,SACXC,QAAS,SACTC,UAAW,SACXC,UAAW,SACXC,KAAM,SACNC,OAAQ,SACRC,OAAQ,SACRC,OAAQ,SACRC,SAAU,SACVC,KAAM,SACNC,SAAU,SACVC,MAAO,SACPC,IAAK,SACLC,IAAK,SACLC,MAAO,SACPC,OAAQ,SACRC,QAAS,SACTC,QAAS,SACTC,QAAS,SACTC,MAAO,SACPC,OAAQ,SACRC,WAAY,SACZC,KAAM,SACNC,KAAM,SACNC,KAAM,SACNC,QAAS,SACTC,IAAK,eACLC,IAAK,eACLC,OAAQ,SACRC,QAAS,SACTC,OAAQ,SACRC,QAAS,SACTC,SAAU,SACVC,UAAW,SACXC,SAAU,SACVC,QAAS,SACTC,gBAAiB,SACjBC,cAAe,SACfC,SAAU,SACVC,OAAQ,SACRC,SAAU,SACVC,OAAQ,SACRC,aAAc,SACdC,YAAa,SACbC,cAAe,SACfC,kBAAmB,SACnBC,kBAAmB,SACnBC,mBAAoB,SACpBC,MAAO,SACPC,MAAO,SACPC,MAAO,SACPC,MAAO,SACPC,MAAO,SACPC,IAAK,UACLC,QAAS,eACTC,KAAM,SACNC,KAAM,SACNC,KAAM,eACNC,KAAM,eACNC,IAAK,SACLC,OAAQ,SACRC,OAAQ,SACRC,OAAQ,SACRC,MAAO,SACPC,MAAO,SACPC,MAAO,SACPC,MAAO,SACPC,MAAO,SACPC,MAAO,SACPC,MAAO,SACPC,MAAO,SACPC,KAAM,SACNC,KAAM,SACNC,MAAO,SACPC,MAAO,SACPC,MAAO,SACPC,MAAO,SACPC,MAAO,SACPC,MAAO,SACPC,MAAO,SACPC,MAAO,SACPC,SAAU,SACVC,QAAS,SACTC,SAAU,SACVC,MAAO,SACPC,MAAO,SACPC,MAAO,SACPC,MAAO,SACPC,MAAO,SACPC,MAAO,SACPC,MAAO,SACPC,MAAO,SACPC,KAAM,SACNC,KAAM,SACNC,MAAO,SACPC,MAAO,SACPC,MAAO,SACPC,MAAO,SACPC,MAAO,SACPC,MAAO,SACPC,MAAO,SACPC,MAAO,SACPC,MAAO,SACPC,MAAO,SACPC,MAAO,SACPC,MAAO,SACPC,OAAQ,SACRC,MAAO,SACPC,MAAO,SACPC,OAAQ,OACRC,KAAM,SACNC,KAAM,eACNC,MAAO,SACPC,KAAM,SACNC,MAAO,SACPC,KAAM,KACNC,MAAO,SACPC,SAAU,SACVC,KAAM,SACNC,OAAQ,SACRC,KAAM,SACNC,MAAO,SACPC,MAAO,SACPC,OAAQ,SACRC,OAAQ,SACRC,OAAQ,SACRC,OAAQ,SACRC,IAAK,SACLC,IAAK,SACLC,OAAQ,SACRC,SAAU,SACVC,OAAQ,SACRC,OAAQ,SACRC,OAAQ,SACRC,qBAAsB,SACtBC,KAAM,eACNC,MAAO,SACPC,MAAO,SACPC,QAAS,SACTC,MAAO,SACPC,OAAQ,SACRC,OAAQ,SACRC,OAAQ,OACRC,OAAQ,OACRC,MAAO,SACPC,MAAO,SACPC,QAAS,SACTC,MAAO,SACPC,QAAS,SACTC,KAAM,SACNC,KAAM,SACNC,MAAO,OACPC,QAAS,OACTC,QAAS,SACTC,KAAM,OACNC,UAAW,OACXC,UAAW,OACXC,IAAK,SACLC,IAAK,eACLC,KAAM,SACNC,KAAM,SACNC,MAAO,SACPC,UAAW,SACXC,IAAK,SACLC,IAAK,SACLC,IAAK,SACLC,KAAM,SACNC,OAAQ,SACRC,gBAAiB,SACjBC,iBAAkB,SAClBC,WAAY,SACZC,YAAa,SACbC,YAAa,SACbC,UAAW,SACXC,SAAU,OACVC,SAAU,SACVC,YAAa,SACbC,WAAY,SACZC,YAAa,SACbC,KAAM,SACNC,KAAM,SACNC,SAAU,SACVC,OAAQ,SACRC,QAAS,SACTC,yBAA0B,SAC1BC,sBAAuB,SACvBC,gBAAiB,SACjBC,MAAO,SACPC,SAAU,SACVC,MAAO,SACPC,MAAO,IACPC,OAAQ,SACRC,OAAQ,SACRC,QAAS,SACTC,MAAO,IACPC,OAAQ,IACRC,KAAM,SACNC,OAAQ,SACRC,WAAY,SACZC,UAAW,SACXC,KAAM,SACNC,QAAS,SACTC,UAAW,SACXC,OAAQ,SACRC,OAAQ,SACRC,gBAAiB,SACjBC,KAAM,SACNC,KAAM,eACNC,OAAQ,SACRC,UAAW,SACXC,KAAM,OACN9f,KAAM,OACN+f,OAAQ,SACRC,gCAAiC,SACjCC,MAAO,SACPC,MAAO,SACPC,MAAO,SACPC,KAAM,eACNC,KAAM,eACNC,KAAM,SACNC,MAAO,SACPC,KAAM,SACNC,MAAO,SACPC,MAAO,SACPC,QAAS,SACTC,QAAS,SACTC,MAAO,SACPC,MAAO,SACPC,OAAQ,SACRC,QAAS,SACTC,IAAK,SACLC,IAAK,SACLC,SAAU,SACVC,OAAQ,SACRC,OAAQ,SACRC,OAAQ,SACRC,OAAQ,SACRC,MAAO,SACPC,KAAM,eACNC,OAAQ,SACRC,QAAS,SACTC,YAAa,SACbC,YAAa,SACbC,SAAU,SACVC,WAAY,SACZC,OAAQ,OACRC,eAAgB,SAChBC,gBAAiB,SACjBC,MAAO,SACPC,MAAO,SACPC,SAAU,SACVC,MAAO,SACPC,OAAQ,SACRC,OAAQ,SACRC,OAAQ,SACRC,OAAQ,SACRC,KAAM,SACNC,KAAM,SACNC,KAAM,SACNC,KAAM,SACNC,MAAO,SACPC,MAAO,SACPC,QAAS,SACTC,MAAO,SACPC,OAAQ,SACRC,OAAQ,SACRC,IAAK,SACLC,IAAK,SACLC,GAAI,SACJC,GAAI,SACJC,QAAS,SACTC,MAAO,SACPC,SAAU,SACVC,QAAS,SACTC,IAAK,OACLC,IAAK,SACLC,MAAO,SACPC,MAAO,SACPC,QAAS,SACTC,OAAQ,SACRC,IAAK,eACLC,IAAK,eACLC,KAAM,SACNC,MAAO,SACPC,MAAO,SACPC,iBAAkB,OAClBC,eAAgB,SAChBC,uBAAwB,SACxBC,iBAAkB,IAClBC,iBAAkB,SAClBC,KAAM,SACNC,QAAS,SACTC,QAAS,SACTC,YAAa,SACbC,MAAO,SACPC,IAAK,OACLC,cAAe,SACfC,QAAS,SACTC,MAAO,SACPC,IAAK,OACLC,OAAQ,OACRC,cAAe,SACfC,OAAQ,SACRC,KAAM,SACNC,KAAM,SACNC,OAAQ,SACRC,OAAQ,SACRC,OAAQ,IACRC,KAAM,eACNC,KAAM,eACNC,IAAK,OACLC,IAAK,SACLC,OAAQ,SACRC,MAAO,SACPC,SAAU,SACVC,SAAU,SACVC,SAAU,SACVC,QAAS,SACTC,UAAW,SACXC,eAAgB,SAChBC,sBAAuB,SACvBC,UAAW,OACXC,gBAAiB,SACjBC,gBAAiB,SACjBC,qBAAsB,SACtBC,cAAe,SACfC,oBAAqB,SACrBC,yBAA0B,SAC1BC,qBAAsB,SACtBC,iBAAkB,SAClBC,eAAgB,SAChBC,cAAe,SACfC,kBAAmB,SACnBC,kBAAmB,SACnBC,UAAW,SACXC,UAAW,SACXC,UAAW,SACXC,aAAc,SACdC,iBAAkB,SAClBC,UAAW,SACXC,eAAgB,SAChBC,gBAAiB,SACjBC,iBAAkB,SAClBC,oBAAqB,SACrBC,kBAAmB,SACnBC,eAAgB,SAChBC,kBAAmB,SACnBC,mBAAoB,SACpBC,gBAAiB,SACjBC,mBAAoB,SACpBC,QAAS,SACTC,aAAc,SACdC,SAAU,SACVC,OAAQ,SACRC,OAAQ,SACRC,KAAM,eACNC,KAAM,eACNC,KAAM,SACNC,KAAM,SACNC,KAAM,SACNC,OAAQ,SACRC,OAAQ,SACRC,MAAO,SACPC,KAAM,SACNC,MAAO,SACPC,MAAO,SACPC,MAAO,SACPC,QAAS,SACTC,KAAM,SACNC,KAAM,SACNC,SAAU,SACVC,OAAQ,OACRC,OAAQ,OACRC,OAAQ,SACRC,OAAQ,SACRC,OAAQ,SACRC,KAAM,SACNC,MAAO,OACPC,MAAO,OACPC,OAAQ,SACRC,IAAK,SACLC,IAAK,SACLC,MAAO,SACPC,KAAM,SACNC,KAAM,SACNC,KAAM,SACNC,GAAI,SACJC,MAAO,SACPC,IAAK,eACLC,IAAK,eACLC,GAAI,SACJC,OAAQ,OACRC,OAAQ,OACRC,IAAK,SACLC,OAAQ,SACRzuB,GAAI,SACJ+J,QAAS,SACT2kB,SAAU,SACVC,IAAK,SACLC,IAAK,SACLC,OAAQ,SACRC,MAAO,SACPC,MAAO,SACPC,MAAO,SACPC,SAAU,SACVC,iBAAkB,SAClBC,OAAQ,SACRC,qBAAsB,SACtBC,KAAM,SACNC,OAAQ,SACRC,OAAQ,SACRC,IAAK,SACLC,IAAK,SACLC,KAAM,SACNC,MAAO,SACPC,MAAO,SACPC,KAAM,eACNC,KAAM,eACNC,KAAM,SACNC,OAAQ,SACRC,MAAO,SACPC,KAAM,SACNC,QAAS,SACTC,QAAS,SACTC,MAAO,SACPC,OAAQ,SACRC,QAAS,SACTC,MAAO,SACPC,WAAY,SACZC,YAAa,SACbC,MAAO,SACPC,OAAQ,IACRC,WAAY,SACZC,OAAQ,SACRC,YAAa,SACbC,MAAO,SACPC,QAAS,SACTC,SAAU,SACVC,MAAO,SACPC,MAAO,SACPC,KAAM,SACNC,KAAM,SACNC,MAAO,SACPC,KAAM,SACNC,KAAM,SACNC,IAAK,SACLC,IAAK,SACLC,IAAK,OACLC,IAAK,OACLC,KAAM,OACNC,KAAM,OACNC,KAAM,SACNC,KAAM,IACNC,MAAO,SACPC,OAAQ,SACRC,YAAa,SACbC,aAAc,SACdC,aAAc,SACdC,cAAe,SACfC,IAAK,SACLC,IAAK,SACLC,OAAQ,SACRC,OAAQ,SACRC,MAAO,SACPC,OAAQ,SACRC,IAAK,eACLC,IAAK,eACLC,MAAO,SACPC,kBAAmB,SACnBC,sBAAuB,SACvBC,MAAO,KACPC,KAAM,SACNC,MAAO,SACPC,MAAO,SACPC,KAAM,SACNC,KAAM,eACNC,KAAM,eACNC,OAAQ,SACRC,OAAQ,SACRC,KAAM,SACNC,MAAO,SACPC,WAAY,SACZC,SAAU,SACVC,OAAQ,OACRC,OAAQ,SACRC,OAAQ,OACRC,OAAQ,SACRC,OAAQ,SACRC,OAAQ,SACRC,OAAQ,SACRC,OAAQ,SACRC,OAAQ,OACRC,OAAQ,SACRC,OAAQ,SACRC,OAAQ,SACRC,OAAQ,SACRC,OAAQ,SACRC,OAAQ,SACRC,MAAO,SACPC,MAAO,SACPC,KAAM,SACNC,KAAM,eACNC,OAAQ,SACRC,MAAO,SACPC,MAAO,SACPC,OAAQ,SACRC,OAAQ,SACRC,IAAK,SACLC,OAAQ,SACRC,OAAQ,SACRC,OAAQ,SACRC,MAAO,SACPC,MAAO,SACPC,IAAK,SACLC,IAAK,SACLC,KAAM,SACNC,KAAM,SACNC,GAAI,SACJC,GAAI,SACJC,IAAK,SACLC,IAAK,SACLC,IAAK,SACLC,KAAM,SACNC,SAAU,SACVC,IAAK,SACLC,MAAO,SACPC,OAAQ,SACRC,QAAS,SACTC,SAAU,SACVC,KAAM,eACNC,OAAQ,SACRC,IAAK,eACLC,IAAK,eACLC,GAAI,SACJC,GAAI,SACJC,IAAK,SACLC,MAAO,SACPC,KAAM,SACNC,KAAM,SACNC,GAAI,SACJC,IAAK,SACLC,IAAK,SACLC,IAAK,SACLC,KAAM,SACNC,SAAU,SACVC,IAAK,SACLC,IAAK,SACLC,KAAM,SACNC,MAAO,SACPC,MAAO,SACPC,KAAM,eACNC,KAAM,eACNC,MAAO,IACPC,aAAc,SACdC,iBAAkB,SAClBC,iBAAkB,SAClBC,eAAgB,SAChBC,YAAa,SACbC,kBAAmB,SACnBC,aAAc,SACdC,KAAM,eACNC,KAAM,SACNC,KAAM,SACNC,MAAO,SACPC,MAAO,SACPC,GAAI,SACJC,GAAI,IACJpoB,GAAI,IACJqoB,KAAM,SACNC,MAAO,SACPC,MAAO,SACPC,OAAQ,SACRC,QAAS,SACTC,UAAW,SACXC,OAAQ,SACRC,OAAQ,SACRC,UAAW,SACXC,WAAY,SACZC,QAAS,SACTC,OAAQ,SACRC,UAAW,eACXC,KAAM,eACNC,MAAO,SACPC,OAAQ,SACRC,KAAM,OACNC,OAAQ,SACRC,OAAQ,SACRC,OAAQ,SACRC,KAAM,SACNC,KAAM,SACNC,QAAS,SACTC,MAAO,SACPC,IAAK,IACLC,KAAM,SACNC,MAAO,SACPC,MAAO,SACPC,OAAQ,SACRC,UAAW,SACXC,OAAQ,SACRC,OAAQ,SACRC,IAAK,SACLC,IAAK,eACLC,aAAc,SACdC,SAAU,SACVC,SAAU,SACVC,MAAO,SACPC,OAAQ,SACRC,cAAe,SACfC,eAAgB,SAChBC,KAAM,SACNC,KAAM,eACNC,OAAQ,SACRC,eAAgB,SAChBC,KAAM,SACNC,KAAM,eACNC,OAAQ,SACRC,OAAQ,SACRC,OAAQ,SACRC,aAAc,SACdC,UAAW,SACXC,OAAQ,SACRC,OAAQ,SACRC,OAAQ,OACRC,OAAQ,OACRC,GAAI,SACJC,MAAO,OACPC,MAAO,OACPC,IAAK,SACLC,IAAK,SACLC,KAAM,SACNC,KAAM,SACNC,KAAM,SACNC,MAAO,OACPC,IAAK,SACLC,IAAK,SACLC,IAAK,eACLC,OAAQ,OACRC,OAAQ,OACRC,GAAI,SACJC,OAAQ,SACRC,MAAO,SACPC,OAAQ,SACRC,MAAO,SACPC,MAAO,SACPC,MAAO,SACPC,GAAI,SACJC,MAAO,SACPC,MAAO,SACPC,MAAO,SACPC,WAAY,SACZC,SAAU,SACVC,SAAU,SACVC,MAAO,SACPC,KAAM,SACNC,MAAO,SACPC,QAAS,SACTC,GAAI,SACJC,OAAQ,SACRC,MAAO,SACPC,SAAU,SACVC,OAAQ,SACRC,IAAK,SACLC,IAAK,SACLC,OAAQ,SACRC,SAAU,SACVC,SAAU,SACVC,SAAU,SACVC,aAAc,SACdC,SAAU,SACVC,QAAS,SACTC,eAAgB,SAChBC,eAAgB,SAChBC,KAAM,SACNC,KAAM,SACNC,MAAO,SACPC,MAAO,SACPC,KAAM,eACNC,KAAM,eACNC,KAAM,SACNC,KAAM,SACNC,MAAO,SACPC,OAAQ,OACRC,KAAM,SACNC,KAAM,eACNC,KAAM,SACNC,QAAS,SACTC,MAAO,SACPC,MAAO,SACPC,OAAQ,SACRC,MAAO,SACP5qC,GAAI,SACJ6qC,OAAQ,SACRC,OAAQ,SACRC,MAAO,SACPC,MAAO,SACPC,KAAM,OACNC,KAAM,OACNC,MAAO,SACPC,MAAO,SACPC,IAAK,SACLC,IAAK,SACLC,IAAK,eACLC,IAAK,eACLC,MAAO,SACPC,KAAM,eACNC,KAAM,eACNC,KAAM,eACNC,KAAM,eACNC,OAAQ,SACRC,OAAQ,SACRC,MAAO,SACPC,MAAO,SACPC,MAAO,SACPC,MAAO,SACPC,OAAQ,SACRC,OAAQ,SACRC,OAAQ,SACRC,IAAK,SACLC,IAAK,SACLC,IAAK,eACLC,IAAK,eACLC,OAAQ,SACRC,KAAM,SACNC,KAAM,SACNC,KAAM,SACNC,KAAM,SACNC,KAAM,eACNC,KAAM,eACNC,KAAM,eACNC,KAAM,eACNC,MAAO,SACPC,OAAQ,SACRC,OAAQ,SACRC,SAAU,SACVC,OAAQ,SACRC,OAAQ,SACRC,OAAQ,SACRC,KAAM,SACN9lC,KAAM,SACN+lC,MAAO,SACPC,OAAQ,SACRC,IAAK,SACLC,WAAY,SACZC,MAAO,OACPC,KAAM,SACNC,KAAM,SACNC,KAAM,SACNC,MAAO,SACPC,QAAS,SACTC,OAAQ,SACRC,OAAQ,SACRC,OAAQ,SACRC,OAAQ,SACRC,QAAS,SACTC,OAAQ,SACRC,IAAK,SACLC,OAAQ,SACRC,OAAQ,SACRC,KAAM,SACNC,MAAO,eACPC,MAAO,SACPC,MAAO,SACPC,MAAO,SACPC,OAAQ,IACRC,OAAQ,IACRC,MAAO,SACPC,QAAS,SACTC,QAAS,SACTC,OAAQ,SACRC,OAAQ,SACRC,OAAQ,SACRC,OAAQ,SACRC,MAAO,SACPC,KAAM,IACNC,IAAK,SACLC,IAAK,SACLC,KAAM,SACNC,MAAO,SACPC,OAAQ,SACRC,QAAS,SACTC,SAAU,SACVC,KAAM,SACNC,GAAI,SACJC,GAAI,SACJC,iBAAkB,SAClBC,UAAW,SACXC,UAAW,SACXC,UAAW,SACXC,aAAc,SACdC,oBAAqB,SACrBC,cAAe,SACfC,YAAa,SACbC,kBAAmB,SACnBC,kBAAmB,SACnBC,eAAgB,SAChBC,kBAAmB,SACnBC,UAAW,SACXC,gBAAiB,SACjBC,cAAe,SACfC,eAAgB,SAChBC,eAAgB,SAChBC,eAAgB,SAChBC,eAAgB,SAChBC,gBAAiB,SACjBC,kBAAmB,SACnBC,oBAAqB,SACrBC,gBAAiB,SACjBC,QAAS,SACTC,aAAc,SACdC,cAAe,SACfC,eAAgB,SAChBC,aAAc,SACdC,gBAAiB,SACjBC,kBAAmB,SACnBC,iBAAkB,SAClBC,gBAAiB,SACjBC,aAAc,SACdC,gBAAiB,SACjBC,WAAY,SACZC,cAAe,SACfC,IAAK,SACLC,IAAK,SACLC,IAAK,SACLC,KAAM,SACNC,SAAU,SACVC,IAAK,SACLC,MAAO,SACPC,OAAQ,SACRC,QAAS,SACTC,SAAU,SACVC,KAAM,eACNC,OAAQ,SACRC,WAAY,SACZC,QAAS,SACTC,UAAW,SACXC,WAAY,SACZC,iBAAkB,SAClBC,cAAe,SACfC,YAAa,SACbC,QAAS,SACTC,SAAU,SACVC,QAAS,SACTC,eAAgB,SAChBC,UAAW,SACXC,OAAQ,SACRC,OAAQ,SACRC,IAAK,eACLC,IAAK,eACLC,GAAI,SACJC,IAAK,SACLC,KAAM,SACNC,MAAO,SACPC,MAAO,SACPC,OAAQ,SACRC,MAAO,SACPC,KAAM,SACNC,KAAM,SACNC,GAAI,SACJC,GAAI,SACJC,MAAO,SACPC,SAAU,SACVC,WAAY,SACZC,OAAQ,SACRC,MAAO,SACPC,OAAQ,SACRC,OAAQ,SACRC,OAAQ,SACRC,WAAY,SACZC,KAAM,SACNC,SAAU,SACVC,IAAK,SACLC,IAAK,SACLC,KAAM,SACNC,MAAO,SACPC,MAAO,SACPC,MAAO,SACPC,MAAO,SACPC,MAAO,SACPC,cAAe,SACfC,cAAe,SACfC,cAAe,SACfC,mBAAoB,SACpBC,mBAAoB,SACpBC,mBAAoB,SACpBC,WAAY,SACZC,eAAgB,SAChBC,eAAgB,SAChBC,eAAgB,SAChBC,cAAe,SACfC,eAAgB,SAChBC,MAAO,SACPC,KAAM,eACNC,KAAM,eACNC,OAAQ,SACRC,QAAS,SACTC,OAAQ,SACRC,OAAQ,IACRC,eAAgB,SAChBC,gBAAiB,SACjBC,IAAK,SACLC,QAAS,SACTC,KAAM,SACNC,KAAM,IACNC,OAAQ,SACRC,MAAO,SACPC,SAAU,SACVC,MAAO,SACPC,OAAQ,SACRC,IAAK,SACLC,MAAO,SACPC,OAAQ,SACRC,KAAM,SACNC,KAAM,eACNC,IAAK,SACLC,IAAK,SACLC,KAAM,SACNC,MAAO,SACPC,MAAO,SACPC,KAAM,IACNC,MAAO,SACPC,OAAQ,SACRC,OAAQ,SACRC,OAAQ,SACRC,GAAI,SACJC,GAAI,IACJt+B,GAAI,IACJu+B,KAAM,SACNC,MAAO,SACPC,MAAO,SACPC,OAAQ,SACRC,OAAQ,SACRC,OAAQ,SACRC,QAAS,SACTC,KAAM,SACNC,MAAO,SACPC,MAAO,SACPC,OAAQ,SACRC,SAAU,SACVC,QAAS,SACTC,UAAW,eACXC,KAAM,eACNC,KAAM,OACNC,KAAM,SACNC,KAAM,SACNC,QAAS,SACTj5C,IAAK,SACLmW,IAAK,SACL+iC,OAAQ,SACRC,WAAY,SACZC,WAAY,SACZC,SAAU,SACVC,OAAQ,SACRC,OAAQ,SACRC,IAAK,SACLC,IAAK,SACLC,MAAO,SACPC,MAAO,SACPC,cAAe,SACfC,YAAa,SACbC,UAAW,SACXC,IAAK,eACLC,IAAK,eACLC,IAAK,SACLC,MAAO,OACPC,IAAK,SACLC,OAAQ,IACRC,OAAQ,SACRC,OAAQ,OACRC,MAAO,SACPC,OAAQ,SACRC,OAAQ,SACRC,QAAS,SACTC,UAAW,SACXC,KAAM,SACNC,KAAM,SACNC,OAAQ,SACRC,OAAQ,SACRC,KAAM,eACNC,KAAM,eACNC,GAAI,SACJC,KAAM,SACNC,KAAM,eACNC,OAAQ,SACRC,GAAI,SACJC,GAAI,SACJC,SAAU,SACVC,MAAO,SACPC,MAAO,SACPC,OAAQ,SACRC,OAAQ,SACRC,KAAM,eACNC,IAAK,SACLC,KAAM,eACNC,MAAO,eACPC,MAAO,SACPC,QAAS,SACTC,MAAO,SACPC,QAAS,SACTC,SAAU,SACVC,KAAM,OACNC,MAAO,eACPC,OAAQ,eACRC,KAAM,SACNC,OAAQ,SACRC,OAAQ,SACRC,OAAQ,SACRC,OAAQ,SACRC,MAAO,SACPC,SAAU,eACVC,KAAM,SACNC,IAAK,SACLC,IAAK,SACLC,MAAO,SACPC,GAAI,SACJC,OAAQ,SACRC,MAAO,SACPC,MAAO,SACPC,QAAS,SACTC,MAAO,eACPC,oBAAqB,SACrBC,mBAAoB,SACpBC,kBAAmB,SACnBC,sBAAuB,SACvBC,OAAQ,SACRC,OAAQ,SACRC,MAAO,eACPC,qBAAsB,SACtBC,eAAgB,SAChBC,QAAS,KACTC,OAAQ,SACRC,QAAS,SACTC,IAAK,eACLC,IAAK,eACLC,IAAK,eACLC,IAAK,SACLC,KAAM,SACNC,MAAO,eACPC,UAAW,eACXC,KAAM,eACNC,IAAK,eACLC,MAAO,SACPC,IAAK,eACLC,IAAK,SACLC,KAAM,SACNC,KAAM,eACNC,MAAO,SACPC,MAAO,SACPC,MAAO,SACPC,GAAI,SACJC,IAAK,SACLC,KAAM,SACNC,IAAK,SACLC,KAAM,SACNC,KAAM,SACNC,MAAO,SACPC,MAAO,SACPC,KAAM,SACNC,IAAK,eACLC,IAAK,SACLC,WAAY,SACZC,WAAY,SACZC,gBAAiB,SACjBC,gBAAiB,SACjBC,KAAM,SACNC,MAAO,eACPC,UAAW,eACXC,KAAM,eACNC,MAAO,SACPC,IAAK,eACLC,MAAO,SACPC,IAAK,eACLC,IAAK,SACLC,MAAO,SACPC,OAAQ,SACRC,KAAM,eACNC,KAAM,SACNC,QAAS,SACTC,iBAAkB,OAClBC,KAAM,SACNC,KAAM,eACNC,IAAK,SACLC,IAAK,OACLC,aAAc,SACdC,UAAW,SACXC,qBAAsB,SACtBC,WAAY,SACZC,SAAU,SACVC,cAAe,eACfC,UAAW,SACXC,WAAY,SACZC,gBAAiB,SACjBC,oBAAqB,eACrBC,kBAAmB,eACnBC,eAAgB,SAChBC,qBAAsB,eACtBC,gBAAiB,SACjBC,gBAAiB,eACjBC,aAAc,eACdC,MAAO,SACPC,SAAU,eACVC,OAAQ,eACRC,QAAS,SACTC,QAAS,SACTC,QAAS,SACTC,gBAAiB,SACjBC,mBAAoB,eACpBC,qBAAsB,SACtBC,QAAS,SACTC,aAAc,SACdC,eAAgB,SAChBC,YAAa,eACbC,kBAAmB,eACnBC,aAAc,SACdC,wBAAyB,eACzBC,kBAAmB,eACnBC,MAAO,SACPC,QAAS,SACTC,QAAS,SACTC,QAAS,SACTC,YAAa,SACbC,iBAAkB,eAClBC,sBAAuB,SACvBC,kBAAmB,SACnBC,iBAAkB,SAClBC,oBAAqB,eACrBC,sBAAuB,SACvBC,gBAAiB,eACjBC,qBAAsB,SACtBC,kBAAmB,eACnBC,uBAAwB,SACxBC,UAAW,eACXC,eAAgB,SAChBC,YAAa,SACbC,iBAAkB,eAClBC,sBAAuB,SACvBC,iBAAkB,eAClBC,YAAa,eACbC,iBAAkB,SAClBC,SAAU,SACVC,cAAe,SACfC,kBAAmB,SACnBC,cAAe,SACfC,eAAgB,SAChBC,KAAM,SACNC,UAAW,SACXC,OAAQ,eACRC,MAAO,eACPC,QAAS,SACTC,IAAK,SACLC,OAAQ,SACRC,KAAM,eACNC,MAAO,SACPC,QAAS,eACTC,MAAO,SACPC,MAAO,SACPC,OAAQ,eACRC,OAAQ,eACRC,YAAa,SACbC,YAAa,SACbC,MAAO,SACPC,OAAQ,SACRC,IAAK,SACLC,OAAQ,SACRC,KAAM,eACNC,KAAM,eACNC,KAAM,eACNC,UAAW,SACXC,eAAgB,SAChBC,KAAM,SACNC,MAAO,SACPC,OAAQ,SACRC,MAAO,SACPC,MAAO,SACPC,QAAS,SACTC,QAAS,SACTC,KAAM,SACNC,MAAO,eACPC,MAAO,SACPC,QAAS,eACTC,UAAW,SACXC,WAAY,eACZC,MAAO,SACPC,QAAS,eACTC,KAAM,SACNC,MAAO,eACPC,MAAO,SACPC,QAAS,eACTC,UAAW,SACXC,WAAY,eACZC,KAAM,SACNC,OAAQ,OACRC,OAAQ,OACRC,KAAM,SACNC,cAAe,SACfC,gBAAiB,SACjBC,eAAgB,SAChBC,iBAAkB,SAClBC,GAAI,SACJC,GAAI,SACJC,IAAK,IACLC,OAAQ,SACRC,MAAO,SACPC,KAAM,eACNC,OAAQ,SACRC,OAAQ,SACRC,OAAQ,SACRC,OAAQ,SACRC,KAAM,eACNC,KAAM,UACNC,OAAQ,SACRC,QAAS,SACTC,OAAQ,SACRC,KAAM,eACNC,KAAM,UACNC,QAAS,eACTC,OAAQ,SACRC,QAAS,eACTC,MAAO,eACPC,OAAQ,SACRC,MAAO,SACPC,MAAO,SACPC,QAAS,SACTC,OAAQ,SACRC,OAAQ,OACRC,OAAQ,OACRC,KAAM,SACNC,KAAM,SACNC,MAAO,OACPC,MAAO,OACPC,IAAK,SACLC,IAAK,SACLC,MAAO,SACPC,OAAQ,SACRC,OAAQ,SACRC,KAAM,SACNC,KAAM,SACNC,OAAQ,SACRC,MAAO,SACPC,MAAO,SACPC,MAAO,SACPC,IAAK,eACLC,IAAK,eACLC,KAAM,SACNC,OAAQ,OACRC,OAAQ,OACRC,IAAK,SACLC,MAAO,SACPC,IAAK,SACLC,KAAM,SACNC,MAAO,SACPC,MAAO,SACPC,QAAS,SACTC,MAAO,SACPC,IAAK,SACLC,MAAO,SACPC,MAAO,SACPC,MAAO,SACPC,MAAO,SACPC,QAAS,SACTC,QAAS,SACTC,KAAM,SACNC,OAAQ,SACRC,KAAM,eACNC,KAAM,eACNC,KAAM,SACNC,qBAAsB,SACtBC,eAAgB,SAChBC,MAAO,SACPC,MAAO,SACPC,GAAI,SACJC,GAAI,SACJC,MAAO,SACPC,IAAK,SACLC,MAAO,SACPC,QAAS,SACTC,KAAM,OACNC,KAAM,OACNC,OAAQ,SACRC,KAAM,SACNC,QAAS,SACTC,IAAK,SACLC,GAAI,SACJC,KAAM,eACNC,KAAM,SACNC,OAAQ,OACRC,OAAQ,OACRC,KAAM,SACNC,OAAQ,OACRC,OAAQ,OACRC,OAAQ,SACRC,OAAQ,SACRC,SAAU,SACVC,KAAM,OACNC,KAAM,OACNC,MAAO,SACPC,QAAS,SACTC,UAAW,SACXC,YAAa,SACbC,gBAAiB,SACjBC,IAAK,SACLC,KAAM,OACNC,SAAU,SACVC,OAAQ,SACRC,MAAO,SACPC,KAAM,SACNC,SAAU,SACVC,IAAK,SACLC,IAAK,SACLC,OAAQ,IACRC,OAAQ,IACRC,OAAQ,SACRC,KAAM,SACNC,QAAS,SACTC,IAAK,eACLC,IAAK,eACLC,IAAK,SACLC,IAAK,SACLC,KAAM,SACNC,OAAQ,SACRC,MAAO,SACPC,GAAI,SACJC,GAAI,SACJC,UAAW,SACXC,IAAK,SACLC,OAAQ,SACRC,QAAS,SACTC,OAAQ,SACRC,KAAM,IACNC,SAAU,SACVC,MAAO,SACPC,QAAS,SACTC,OAAQ,SACRC,OAAQ,SACRC,MAAO,SACPC,UAAW,OACXC,OAAQ,OACRC,QAAS,SACTC,QAAS,SACTC,GAAI,OACJC,cAAe,SACfC,SAAU,SACVC,KAAM,SACNC,KAAM,eACNC,MAAO,OACPC,GAAI,SACJC,GAAI,SACJC,KAAM,SACNC,MAAO,SACPC,IAAK,SACL7/C,IAAK,SACL8/C,KAAM,SACNC,WAAY,SACZC,YAAa,SACbC,SAAU,SACVC,cAAe,SACfC,mBAAoB,SACpBC,cAAe,SACfC,OAAQ,SACRC,YAAa,SACbC,SAAU,SACVC,SAAU,SACVC,QAAS,SACTC,MAAO,SACPC,MAAO,SACPC,OAAQ,SACRC,MAAO,SACPC,KAAM,SACNC,OAAQ,SACRC,KAAM,SACNC,QAAS,SACTC,SAAU,SACVC,SAAU,SACVC,SAAU,SACVC,KAAM,SACNC,WAAY,SACZC,aAAc,SACdC,OAAQ,SACRC,MAAO,SACPC,OAAQ,SACRC,KAAM,eACNC,KAAM,eACNC,IAAK,SACLC,IAAK,SACLC,OAAQ,SACRC,IAAK,eACLC,IAAK,eACLC,KAAM,SACNC,KAAM,SACNC,KAAM,eACNC,OAAQ,SACRC,KAAM,eACNC,KAAM,eACNC,YAAa,SACbC,QAAS,SACTC,MAAO,IACPC,QAAS,SACTC,KAAM,IACNz7C,KAAM,IACN07C,MAAO,SACPC,KAAM,eACNC,OAAQ,SACRC,OAAQ,SACRC,MAAO,SACPC,SAAU,SACVC,KAAM,SACNC,KAAM,SACNC,MAAO,SACPC,MAAO,SACPC,OAAQ,SACRC,MAAO,OACPC,KAAM,SACNC,KAAM,SACNC,KAAM,SACNC,OAAQ,SACRC,MAAO,SACPC,QAAS,SACTC,MAAO,SACPC,OAAQ,SACRC,OAAQ,SACRC,OAAQ,SACRC,OAAQ,SACRC,QAAS,SACTC,OAAQ,SACRC,OAAQ,SACRC,MAAO,SACPC,OAAQ,SACRC,OAAQ,SACRC,MAAO,SACPC,UAAW,SACXC,MAAO,SACPC,MAAO,SACPC,MAAO,SACPC,MAAO,SACPC,OAAQ,IACRC,OAAQ,IACRC,MAAO,SACPC,QAAS,SACTC,QAAS,SACTC,OAAQ,SACRC,OAAQ,SACRC,OAAQ,SACRC,OAAQ,SACRC,MAAO,SACPC,KAAM,IACNC,IAAK,SACLC,IAAK,SACLC,KAAM,SACNC,QAAS,SACTC,MAAO,SACPC,OAAQ,SACRC,KAAM,SACNC,GAAI,SACJC,KAAM,SACNC,QAAS,SACTC,SAAU,SACVC,MAAO,SACPC,KAAM,SACNC,IAAK,OACLC,IAAK,OACLC,eAAgB,SAChBC,mBAAoB,SACpBC,qBAAsB,SACtBC,OAAQ,SACRC,OAAQ,SACRC,IAAK,SACLC,IAAK,eACLC,KAAM,SACNC,MAAO,SACPC,MAAO,SACPC,OAAQ,SACRC,IAAK,SACLC,IAAK,SACLC,KAAM,SACNC,kBAAmB,SACnBC,WAAY,SACZC,WAAY,SACZC,WAAY,SACZC,cAAe,SACfC,oBAAqB,SACrBC,eAAgB,SAChBC,aAAc,SACdC,mBAAoB,SACpBC,mBAAoB,SACpBC,gBAAiB,SACjBC,mBAAoB,SACpBC,WAAY,SACZC,iBAAkB,SAClBC,eAAgB,SAChBC,gBAAiB,SACjBC,kBAAmB,SACnBC,iBAAkB,SAClBC,gBAAiB,SACjBC,SAAU,SACVC,cAAe,SACfC,eAAgB,SAChBC,gBAAiB,SACjBC,cAAe,SACfC,iBAAkB,SAClBC,mBAAoB,SACpBC,kBAAmB,SACnBC,iBAAkB,SAClBC,cAAe,SACfC,iBAAkB,SAClBC,YAAa,SACbC,eAAgB,SAChBC,KAAM,SACNC,aAAc,SACdC,MAAO,SACPC,MAAO,SACPC,IAAK,SACLC,OAAQ,SACRC,WAAY,SACZC,MAAO,SACPC,MAAO,SACPC,MAAO,SACPC,MAAO,SACPC,MAAO,SACPC,KAAM,SACNC,KAAM,eACNC,OAAQ,SACRC,QAAS,SACTC,aAAc,SACdC,KAAM,IACNC,OAAQ,SACRC,SAAU,SACVC,MAAO,SACPC,YAAa,SACbC,OAAQ,SACRC,KAAM,SACNC,KAAM,eACNC,IAAK,SACLC,IAAK,SACLC,KAAM,IACNC,MAAO,SACPC,OAAQ,SACRC,OAAQ,SACRC,OAAQ,SACRC,KAAM,SACNC,MAAO,SACPC,MAAO,SACPC,SAAU,SACVC,YAAa,SACbC,QAAS,SACTC,GAAI,SACJC,OAAQ,SACRC,OAAQ,SACRC,MAAO,SACPC,GAAI,SACJC,GAAI,SACJC,KAAM,SACNC,OAAQ,SACRC,OAAQ,SACRC,MAAO,SACPC,IAAK,SACLC,IAAK,SACLC,OAAQ,SACRC,OAAQ,SACRC,MAAO,SACPC,MAAO,SACPC,MAAO,SACPC,KAAM,SACNC,OAAQ,SACRC,SAAU,SACVC,MAAO,SACPC,IAAK,SACLC,IAAK,SACLC,KAAM,SACNC,MAAO,SACPC,MAAO,SACPC,OAAQ,SACRC,MAAO,SACPC,MAAO,SACPC,QAAS,SACTC,KAAM,OACNC,KAAM,IACNC,OAAQ,SACRC,SAAU,SACVC,MAAO,SACPC,KAAM,SACNC,IAAK,eACLC,IAAK,eACLC,OAAQ,SACRC,MAAO,SACPC,OAAQ,SACRC,OAAQ,SACRC,KAAM,SACNC,KAAM,SACNC,eAAgB,SAChBC,eAAgB,SAChBC,SAAU,SACVC,cAAe,SACfC,gBAAiB,SACjBC,aAAc,SACdC,IAAK,OACLC,MAAO,SACPC,MAAO,SACPC,OAAQ,SACRC,OAAQ,SACRC,IAAK,SACLC,OAAQ,SACRC,KAAM,SACNC,MAAO,SACPC,KAAM,SACNC,MAAO,SACPC,KAAM,SACNC,MAAO,SACPC,MAAO,SACPC,QAAS,SACTC,QAAS,SACTC,MAAO,SACPC,YAAa,SACbC,cAAe,SACfC,OAAQ,SACRC,SAAU,SACVC,KAAM,SACNC,MAAO,SACPC,IAAK,SACLC,KAAM,SACNC,MAAO,eACPC,OAAQ,SACRC,OAAQ,SACRC,IAAK,IACLC,KAAM,SACNC,OAAQ,SACRC,KAAM,eACNC,KAAM,eACNC,OAAQ,SACRC,UAAW,SACXC,KAAM,SACNC,MAAO,SACPC,OAAQ,eACRC,MAAO,SACPC,OAAQ,eACRC,KAAM,SACNC,MAAO,SACPC,OAAQ,SACRC,SAAU,SACVC,WAAY,SACZC,MAAO,SACPC,OAAQ,SACRC,SAAU,SACVC,WAAY,SACZC,IAAK,SACLC,OAAQ,SACRC,OAAQ,SACRC,mBAAoB,SACpBC,aAAc,SACdC,kBAAmB,SACnBC,eAAgB,SAChBC,oBAAqB,SACrBC,YAAa,SACbC,OAAQ,SACRC,KAAM,SACNC,MAAO,SACPC,KAAM,eACNC,KAAM,eACNC,OAAQ,SACRC,OAAQ,SACRC,OAAQ,SACRC,KAAM,SACNC,KAAM,SACNC,MAAO,SACPC,gBAAiB,SACjBC,YAAa,SACbC,MAAO,OACPC,IAAK,SACLtxD,IAAK,SACLuxD,OAAQ,SACRC,KAAM,SACNC,KAAM,SACNC,QAAS,SACTC,QAAS,SACTC,MAAO,SACPC,MAAO,SACPC,QAAS,SACTC,QAAS,SACTC,OAAQ,SACRC,OAAQ,SACRC,SAAU,SACVC,UAAW,SACXC,YAAa,SACbC,UAAW,SACXC,WAAY,SACZC,OAAQ,SACRC,OAAQ,SACRC,OAAQ,SACRC,KAAM,SACNC,WAAY,SACZC,YAAa,SACbC,SAAU,SACVC,cAAe,SACfC,mBAAoB,SACpBC,cAAe,SACfC,OAAQ,SACRC,YAAa,SACbC,SAAU,SACVC,SAAU,SACVC,QAAS,SACTC,SAAU,SACVC,IAAK,SACLC,IAAK,SACLC,KAAM,SACNC,IAAK,SACLC,IAAK,SACLC,KAAM,OACNC,KAAM,OACNC,KAAM,OACNC,OAAQ,SACRC,QAAS,SACTC,KAAM,SACNC,KAAM,SACNC,QAAS,SACTC,SAAU,SACVC,cAAe,SACfC,QAAS,SACTC,QAAS,SACTC,QAAS,SACTC,QAAS,SACTC,MAAO,SACPC,MAAO,SACPC,QAAS,SACTC,OAAQ,SACRC,OAAQ,SACRC,SAAU,SACVC,UAAW,SACXC,UAAW,SACXC,WAAY,SACZC,OAAQ,SACRC,OAAQ,SACRC,OAAQ,SACRC,OAAQ,SACRC,MAAO,SACPC,MAAO,SACPC,QAAS,SACTC,OAAQ,SACRC,MAAO,OACPC,IAAK,KACL/lE,OAAQ,SACRgmE,IAAK,SACLC,IAAK,SACLC,KAAM,SACNC,OAAQ,SACRC,OAAQ,SACRC,OAAQ,SACRC,OAAQ,SACRC,IAAK,SACLC,IAAK,SACLC,KAAM,SACNC,OAAQ,SACRC,IAAK,eACLC,IAAK,eACLC,OAAQ,SACRC,UAAW,SACXC,UAAW,SACXC,MAAO,SACPC,MAAO,SACPC,SAAU,SACVC,OAAQ,SACRC,YAAa,SACbC,SAAU,SACVC,WAAY,eACZC,OAAQ,SACRC,UAAW,SACXC,MAAO,SACPC,OAAQ,SACRC,MAAO,OACPC,MAAO,OACPC,MAAO,SACPC,MAAO,SACPC,WAAY,SACZC,eAAgB,SAChBC,WAAY,SACZC,MAAO,OACPC,OAAQ,SACRC,SAAU,SACVC,OAAQ,SACRC,KAAM,SACNC,KAAM,SACNC,IAAK,SACLC,OAAQ,SACRC,OAAQ,SACRC,KAAM,eACNC,KAAM,eACNC,QAAS,SACTC,KAAM,SACNC,OAAQ,SACRC,MAAO,SACPC,MAAO,SACPC,SAAU,SACVC,aAAc,SACdC,aAAc,SACdC,eAAgB,SAChBC,UAAW,SACXC,cAAe,SACfC,gBAAiB,SACjBC,OAAQ,SACRC,KAAM,SACNC,SAAU,SACVC,UAAW,SACXC,QAAS,SACTC,MAAO,SACPC,QAAS,SACTC,SAAU,SACVC,KAAM,eACNC,KAAM,eACNC,KAAM,SACNC,KAAM,SACNC,MAAO,SACPC,MAAO,SACPC,OAAQ,SACRC,OAAQ,SACRC,MAAO,SACPC,iBAAkB,SAClBC,kBAAmB,SACnBC,OAAQ,OACRC,OAAQ,OACRC,KAAM,SACNC,KAAM,SACNC,KAAM,SACNC,SAAU,SACVC,MAAO,SACPC,MAAO,SACPC,OAAQ,SACRC,OAAQ,SACRC,MAAO,OACPC,MAAO,OACPC,IAAK,SACLC,IAAK,SACLC,MAAO,SACPC,OAAQ,SACRC,OAAQ,SACRC,MAAO,SACPC,OAAQ,SACRC,IAAK,eACLC,IAAK,eACLC,OAAQ,OACRC,OAAQ,OACRC,KAAM,SACNC,MAAO,SACPC,MAAO,SACPC,MAAO,SACPC,OAAQ,SACRC,SAAU,SACVC,OAAQ,SACRC,MAAO,SACPC,MAAO,SACPC,MAAO,SACPC,IAAK,OACLC,SAAU,IACVC,WAAY,SACZC,aAAc,SACdC,iBAAkB,SAClBC,MAAO,SACPC,UAAW,SACXC,MAAO,SACPC,MAAO,SACPC,KAAM,eACNC,KAAM,eACNC,QAAS,SACTC,QAAS,SACTC,QAAS,SACTC,WAAY,SACZC,iBAAkB,SAClBC,YAAa,SACbC,YAAa,SACbC,YAAa,SACbC,cAAe,SACfC,cAAe,SACfC,eAAgB,SAChBC,MAAO,SACPC,eAAgB,SAChBC,gBAAiB,SACjBC,KAAM,SACNC,KAAM,SACNC,MAAO,SACPC,QAAS,SACTC,QAAS,SACTC,MAAO,SACPC,WAAY,SACZC,WAAY,SACZC,OAAQ,SACRC,SAAU,SACVC,OAAQ,SACRC,MAAO,SACPC,MAAO,SACPC,MAAO,SACPC,KAAM,eACNC,KAAM,eACNC,MAAO,SACPC,OAAQ,SACRC,OAAQ,SACRC,KAAM,SACNC,MAAO,SACPC,MAAO,SACPC,KAAM,OACNC,KAAM,OACNC,QAAS,SACTC,OAAQ,SACRC,WAAY,SACZC,SAAU,SACVC,WAAY,SACZC,OAAQ,SACRC,MAAO,SACPC,UAAW,SACXC,KAAM,SACNC,KAAM,SACNC,OAAQ,SACRC,SAAU,SACVC,aAAc,eACdC,cAAe,eACfC,aAAc,eACdC,cAAe,eACfC,SAAU,SACVC,gBAAiB,SACjBC,iBAAkB,SAClBC,KAAM,SACNC,KAAM,SACNC,MAAO,SACPC,IAAK,SACLC,IAAK,SACLC,MAAO,SACPC,MAAO,SACPC,MAAO,SACPC,MAAO,SACPC,OAAQ,SACRC,IAAK,SACLC,IAAK,SACLC,OAAQ,SACRC,MAAO,SACPC,OAAQ,SACRC,OAAQ,SACRC,OAAQ,IACRC,KAAM,SACNC,KAAM,IACNC,YAAa,SACbC,aAAc,IACdC,kBAAmB,SACnBC,cAAe,SACfC,cAAe,SACfC,IAAK,eACLC,IAAK,eACLC,MAAO,SACPC,MAAO,eACPC,MAAO,eACPC,KAAM,eACNC,KAAM,eACNC,MAAO,SACPC,MAAO,SACPC,KAAM,eACNC,KAAM,eACNC,OAAQ,eACRC,OAAQ,eACRC,OAAQ,eACRC,OAAQ,eACRC,OAAQ,SACRC,QAAS,SACTC,MAAO,SACPC,MAAO,SACPC,OAAQ,SACRC,MAAO,SACPC,MAAO,SACPC,OAAQ,SACRC,OAAQ,SACRC,IAAK,eACLC,IAAK,eACLC,KAAM,eACNC,KAAM,eACNC,GAAI,SACJC,GAAI,SACJC,OAAQ,SACRC,KAAM,eACNC,KAAM,eACNC,KAAM,SACNC,MAAO,SACPC,KAAM,SACNC,MAAO,SACPC,IAAK,eACLC,IAAK,eACLC,MAAO,SACPC,MAAO,SACPC,GAAI,SACJC,GAAI,SACJC,MAAO,SACPC,MAAO,SACPC,KAAM,SACNC,KAAM,SACNC,MAAO,SACPC,KAAM,eACNC,KAAM,eACNC,OAAQ,SACRC,OAAQ,SACRC,MAAO,SACPC,MAAO,SACPC,KAAM,eACNC,KAAM,eACNC,OAAQ,SACRC,OAAQ,SACRC,MAAO,SACPC,KAAM,SACNC,OAAQ,SACRC,OAAQ,OACRC,OAAQ,OACRC,KAAM,SACNC,KAAM,SACNC,MAAO,SACPC,MAAO,SACPC,IAAK,SACLC,IAAK,SACLC,IAAK,OACLC,IAAK,eACLC,IAAK,eACLC,KAAM,SACNC,KAAM,SACNC,KAAM,eACNC,KAAM,eACNC,KAAM,eACNC,KAAM,eACNC,KAAM,SACNC,KAAM,SACNC,KAAM,SACNC,KAAM,OACNC,OAAQ,SACRC,OAAQ,SACRC,OAAQ,SACRC,OAAQ,SACRC,IAAK,SACLC,IAAK,SACLC,KAAM,SACNC,KAAM,SACNC,OAAQ,SACRC,eAAgB,SAChBC,KAAM,SACNC,KAAM,SACNC,IAAK,SACLC,IAAK,eACLC,KAAM,SACNC,KAAM,SACNC,QAAS,SACTC,KAAM,SACNC,KAAM,eACNC,KAAM,eACNC,KAAM,eACNC,IAAK,SACLC,KAAM,WAOPnnF,EAAQ+Q,UAAY/Q,EAAQgR,iCCrnExBtC,EAAM5O,EAAQ,KACU4O,EAAIG,kBACRH,EAAIsO,cAC5Bhd,EAAQmP,UAAY,EAApBnP,KAAAA,wBCHA,IAAI6N,EAAY/N,EAAAA,KAAAA,UAKZsnF,EAAgB,mJAChBC,EAAW,IAAIC,OAAO,aAAaF,EAAcj5E,OAAOxL,MAAM,GAAG,GAAG,0CACpE4kF,EAAiB,IAAID,OAAO,IAAIF,EAAcj5E,OAAOk5E,EAASl5E,OAAO,QAASi5E,EAAcj5E,OAAOk5E,EAASl5E,OAAO,QAsBvH,SAASW,EAAWkJ,EAAS5I,GAC5BzF,KAAKqO,QAAUA,EACfrO,KAAKyF,QAAUA,EACZhM,MAAM6U,mBAAmB7U,MAAM6U,kBAAkBtO,KAAMmF,EAC3D,CAIA,SAASC,IAET,CAiLA,SAASy4E,EAAYC,EAAEzxE,GAGtB,OAFAA,EAAEvG,WAAag4E,EAAEh4E,WACjBuG,EAAEtG,aAAe+3E,EAAE/3E,aACZsG,CACR,CAMA,SAAS0xE,EAAsBv5E,EAAO6B,EAAMqC,EAAGs1E,EAAaC,EAAeh3E,GAO1E,SAASi3E,EAAaC,EAAO7mF,EAAO8mF,GAC/B11E,EAAG21E,eAAexgF,eAAesgF,IACpCl3E,EAAaqE,WAAW,aAAe6yE,EAAQ,cAEhDz1E,EAAG41E,SACFH,EAKA7mF,EAAMiO,QAAQ,YAAa,KAAKA,QAAQ,WAAY04E,GACpDG,EAEF,CAKA,IAJA,IAAIG,EAEAtyE,IAAM5F,EACNm4E,EA7OO,IA8OA,CACV,IAAIvuE,EAAIzL,EAAOi6E,OAAOxyE,GACtB,OAAOgE,GACP,IAAK,IACJ,GAjPU,IAiPPuuE,EACFD,EAAW/5E,EAAOxL,MAAMqN,EAAM4F,GAC9BuyE,EAjPO,MAkPF,IAnPQ,IAmPLA,EAIR,MAAM,IAAI/kF,MAAM,uCAHhB+kF,EAnPO,CAuPR,CACA,MACD,IAAK,IACL,IAAK,IACJ,GA3PQ,IA2PLA,GA7PO,IA6POA,EACf,CAOD,GArQS,IA+PNA,IACFv3E,EAAakE,QAAQ,kCACrBozE,EAAW/5E,EAAOxL,MAAMqN,EAAM4F,IAE/B5F,EAAQ4F,EAAE,KACVA,EAAIzH,EAAO1L,QAAQmX,EAAE5J,IAChB,GAMJ,MAAM,IAAI5M,MAAM,2BAA4BwW,EAAE,WAJ9CiuE,EAAaK,EADbjnF,EAAQkN,EAAOxL,MAAMqN,EAAO4F,GACE5F,EAAM,GACpCm4E,EApQY,CAyQd,KAAM,IA1QiB,GA0QdA,EAQR,MAAM,IAAI/kF,MAAM,kCANhBykF,EAAaK,EADbjnF,EAAQkN,EAAOxL,MAAMqN,EAAO4F,GACE5F,GAC9BY,EAAakE,QAAQ,cAAcozE,EAAS,uBAAuBtuE,EAAE,OACrE5J,EAAQ4F,EAAE,EACVuyE,EA9Qa,CAkRd,CACA,MACD,IAAK,IACJ,OAAOA,GACP,KA3RS,EA4RR91E,EAAGg2E,WAAWl6E,EAAOxL,MAAMqN,EAAM4F,IAClC,KAxRc,EAyRd,KAxRe,EAyRf,KAxRe,EAyRduyE,EAzRc,EA0Rd91E,EAAGi2E,QAAS,EACb,KA9RuB,EA+RvB,KAlSU,EAmST,MACA,KAnSa,EAoSZj2E,EAAGi2E,QAAS,EACb,MAED,QACC,MAAM,IAAIllF,MAAM,qCAEjB,MACD,IAAK,GAKJ,OAJAwN,EAAagB,MAAM,2BA9SV,GA+SNu2E,GACF91E,EAAGg2E,WAAWl6E,EAAOxL,MAAMqN,EAAM4F,IAE3BA,EACR,IAAK,IACJ,OAAOuyE,GACP,KArTS,EAsTR91E,EAAGg2E,WAAWl6E,EAAOxL,MAAMqN,EAAM4F,IAClC,KAlTc,EAmTd,KAlTe,EAmTf,KAlTe,EAmTd,MACD,KAvTuB,EAwTvB,KA3TU,EA6Tc,OADvB3U,EAAQkN,EAAOxL,MAAMqN,EAAM4F,IAClBjT,OAAO,KACf0P,EAAGi2E,QAAU,EACbrnF,EAAQA,EAAM0B,MAAM,GAAG,IAEzB,KAhUc,MAiUVwlF,IACFlnF,EAAQinF,GAhUa,GAkUnBC,GACFv3E,EAAakE,QAAQ,cAAc7T,EAAM,qBACzC4mF,EAAaK,EAAUjnF,EAAO+O,KAE1BnC,EAAUL,OAAOm6E,EAAa,MAAS1mF,EAAMsnF,MAAM,qCACtD33E,EAAakE,QAAQ,cAAc7T,EAAM,qBAAqBA,EAAM,eAErE4mF,EAAa5mF,EAAOA,EAAO+O,IAE5B,MACD,KA7UQ,EA8UP,MAAM,IAAI5M,MAAM,4BAGjB,OAAOwS,EAER,IAAK,OACJgE,EAAI,IACL,QACC,GAAGA,GAAI,IACN,OAAOuuE,GACP,KA3VQ,EA4VP91E,EAAGg2E,WAAWl6E,EAAOxL,MAAMqN,EAAM4F,IACjCuyE,EAvVa,EAwVb,MACD,KA9VS,EA+VRD,EAAW/5E,EAAOxL,MAAMqN,EAAM4F,GAC9BuyE,EA/VY,EAgWZ,MACD,KA/VsB,EAgWrB,IAAIlnF,EAAQkN,EAAOxL,MAAMqN,EAAO4F,GAChChF,EAAakE,QAAQ,cAAc7T,EAAM,sBACzC4mF,EAAaK,EAAUjnF,EAAO+O,GAC/B,KAlWa,EAmWZm4E,EAlWa,OA8Wd,OAAOA,GAIP,KAtXa,EAuXG91E,EAAGY,QACbpF,EAAUL,OAAOm6E,EAAa,MAASO,EAASK,MAAM,qCAC1D33E,EAAakE,QAAQ,cAAcozE,EAAS,qBAAqBA,EAAS,gBAE3EL,EAAaK,EAAUA,EAAUl4E,GACjCA,EAAQ4F,EACRuyE,EA9XQ,EA+XR,MACD,KA5Xa,EA6XZv3E,EAAakE,QAAQ,+BAA+BozE,EAAS,OAC9D,KA7Xc,EA8XbC,EAnYQ,EAoYRn4E,EAAQ4F,EACR,MACD,KApYO,EAqYNuyE,EApYqB,EAqYrBn4E,EAAQ4F,EACR,MACD,KApYc,EAqYb,MAAM,IAAIxS,MAAM,+DAKnBwS,GACD,CACD,CAIA,SAASxF,EAAciC,EAAG1B,EAAWg3E,GAKpC,IAJA,IAAI10E,EAAUZ,EAAGY,QACbu1E,EAAa,KAEb9gF,EAAI2K,EAAGrK,OACLN,KAAI,CACT,IAAI+gF,EAAIp2E,EAAG3K,GACPyK,EAAQs2E,EAAEt2E,MACVlR,EAAQwnF,EAAExnF,MAEd,IADIynF,EAAMv2E,EAAM1P,QAAQ,MACjB,EACN,IAAI2Q,EAASq1E,EAAEr1E,OAASjB,EAAMxP,MAAM,EAAE+lF,GAClCx2E,EAAYC,EAAMxP,MAAM+lF,EAAI,GAC5BC,EAAsB,UAAXv1E,GAAsBlB,OAErCA,EAAYC,EACZiB,EAAS,KACTu1E,EAAqB,UAAVx2E,GAAqB,GAGjCs2E,EAAEv2E,UAAYA,GAEE,IAAby2E,IACe,MAAdH,IACFA,EAAa,CAAC,EAEdI,EAAMjB,EAAaA,EAAa,CAAC,IAGlCA,EAAagB,GAAYH,EAAWG,GAAY1nF,EAChDwnF,EAAEzlF,IAAM6K,EAAUG,MAClB2C,EAAWwC,mBAAmBw1E,EAAU1nF,GAE1C,CAEA,IADIyG,EAAI2K,EAAGrK,OACLN,KAAI,EAEL0L,GADJq1E,EAAIp2E,EAAG3K,IACQ0L,UAEA,QAAXA,IACFq1E,EAAEzlF,IAAM6K,EAAUE,KACJ,UAAXqF,IACHq1E,EAAEzlF,IAAM2kF,EAAav0E,GAAU,KAKlC,CACA,IAAIs1E,KAAMz1E,EAAQxQ,QAAQ,MACnB,GACN2Q,EAASf,EAAGe,OAASH,EAAQtQ,MAAM,EAAE+lF,GACrCx2E,EAAYG,EAAGH,UAAYe,EAAQtQ,MAAM+lF,EAAI,KAE7Ct1E,EAAS,KACTlB,EAAYG,EAAGH,UAAYe,GAG5B,IAAIoG,EAAKhH,EAAGrP,IAAM2kF,EAAav0E,GAAU,IAIzC,GAHAzC,EAAWqB,aAAaqH,EAAGnH,EAAUe,EAAQZ,IAG1CA,EAAGi2E,OAaL,OAHAj2E,EAAGs1E,aAAeA,EAClBt1E,EAAGm2E,WAAaA,GAET,EAXP,GADA73E,EAAWoC,WAAWsG,EAAGnH,EAAUe,GAChCu1E,EACF,IAAKp1E,KAAUo1E,EACV1/E,OAAOC,UAAUvB,eAAegB,KAAKggF,EAAYp1E,IACpDzC,EAAW0C,iBAAiBD,EAUjC,CACA,SAASy1E,EAAwB16E,EAAO26E,EAAW71E,EAAQ20E,EAAej3E,GACzE,GAAG,yBAAyBvH,KAAK6J,GAAS,CACzC,IAAI81E,EAAc56E,EAAO1L,QAAQ,KAAKwQ,EAAQ,IAAI61E,GAC9CrmE,EAAOtU,EAAOqU,UAAUsmE,EAAW,EAAEC,GACzC,GAAG,OAAO3/E,KAAKqZ,GACd,MAAG,YAAYrZ,KAAK6J,IAGlBtC,EAAWgD,WAAW8O,EAAK,EAAEA,EAAKza,QAE3B+gF,IAGRtmE,EAAOA,EAAKvT,QAAQ,WAAW04E,GAC/Bj3E,EAAWgD,WAAW8O,EAAK,EAAEA,EAAKza,QAC3B+gF,EAIV,CACA,OAAOD,EAAW,CACnB,CACA,SAASE,EAAc76E,EAAO26E,EAAW71E,EAAQg2E,GAEhD,IAAIC,EAAMD,EAASh2E,GASnB,OARU,MAAPi2E,KAEFA,EAAO/6E,EAAOg7E,YAAY,KAAKl2E,EAAQ,MAChC61E,IACNI,EAAM/6E,EAAOg7E,YAAY,KAAKl2E,IAE/Bg2E,EAASh2E,GAAUi2E,GAEbA,EAAIJ,CAEZ,CAEA,SAASF,EAAOz6E,EAAQD,GACvB,IAAK,IAAIrF,KAAKsF,EACTrF,OAAOC,UAAUvB,eAAegB,KAAK2F,EAAQtF,KAChDqF,EAAOrF,GAAKsF,EAAOtF,GAGtB,CAEA,SAASugF,EAASj7E,EAAO6B,EAAMW,EAAWC,GAEzC,GACK,MAFKzC,EAAOi6E,OAAOp4E,EAAM,GAG7B,MAAgC,MAA7B7B,EAAOi6E,OAAOp4E,EAAQ,IACpBq5E,EAAMl7E,EAAO1L,QAAQ,SAAMuN,EAAM,IAE9BA,GACNW,EAAWuD,QAAQ/F,EAAO6B,EAAM,EAAEq5E,EAAIr5E,EAAM,GACrCq5E,EAAI,IAEXz4E,EAAagB,MAAM,qBACX,IAID,EAGT,GAA+B,UAA5BzD,EAAO8B,OAAOD,EAAM,EAAE,GAAe,CACvC,IAAIq5E,EAAMl7E,EAAO1L,QAAQ,MAAMuN,EAAM,GAIrC,OAHAW,EAAW0D,aACX1D,EAAWgD,WAAWxF,EAAO6B,EAAM,EAAEq5E,EAAIr5E,EAAM,GAC/CW,EAAW2D,WACJ+0E,EAAI,CACZ,CAGA,IAAIC,EA8EN,SAAen7E,EAAO6B,GACrB,IAAIu4E,EACAnrE,EAAM,GACNwlD,EAAM,6CACVA,EAAInpD,UAAYzJ,EAChB4yD,EAAI2mB,KAAKp7E,GACT,KAAMo6E,EAAQ3lB,EAAI2mB,KAAKp7E,IAEtB,GADAiP,EAAIta,KAAKylF,GACNA,EAAM,GAAG,OAAOnrE,CAErB,CAxFexc,CAAMuN,EAAO6B,GACtBvG,EAAM6/E,EAAOthF,OACjB,GAAGyB,EAAI,GAAK,YAAYL,KAAKkgF,EAAO,GAAG,IAAI,CAC1C,IAAIpgF,EAAOogF,EAAO,GAAG,GACjBnrE,GAAQ,EACRC,GAAQ,EACT3U,EAAI,IACH,YAAYL,KAAKkgF,EAAO,GAAG,KAC7BnrE,EAAQmrE,EAAO,GAAG,GAClBlrE,EAAQ3U,EAAI,GAAK6/E,EAAO,GAAG,IACnB,YAAYlgF,KAAKkgF,EAAO,GAAG,MACnClrE,EAAQkrE,EAAO,GAAG,KAGpB,IAAIE,EAAYF,EAAO7/E,EAAI,GAI3B,OAHAkH,EAAW4D,SAASrL,EAAMiV,EAAOC,GACjCzN,EAAW84E,SAEJD,EAAUhnF,MAAMgnF,EAAU,GAAGxhF,MACrC,CAED,OAAQ,CACT,CAIA,SAAS0hF,EAAiBv7E,EAAO6B,EAAMW,GACtC,IAAI04E,EAAMl7E,EAAO1L,QAAQ,KAAKuN,GAC9B,GAAGq5E,EAAI,CACN,IAAId,EAAQp6E,EAAOqU,UAAUxS,EAAMq5E,GAAKd,MAAM,8BAC9C,GAAGA,EAAM,CACEA,EAAM,GAAGvgF,OAEnB,OADA2I,EAAW2C,sBAAsBi1E,EAAM,GAAIA,EAAM,IAC1Cc,EAAI,CACZ,CACC,OAAQ,CAEV,CACA,OAAQ,CACT,CAEA,SAASM,IACRhgF,KAAKq+E,eAAiB,CAAC,CACxB,CAnkBAl5E,EAAW/F,UAAY,IAAI3F,MAC3B0L,EAAW/F,UAAUG,KAAO4F,EAAW5F,KAMvC6F,EAAUhG,UAAY,CACrBnE,MAAM,SAASuJ,EAAO0C,EAAaE,GAClC,IAAIJ,EAAahH,KAAKgH,WACtBA,EAAWkB,gBACX+2E,EAAM/3E,EAAcA,EAAe,CAAC,GAMtC,SAAe1C,EAAOy7E,EAAiB74E,EAAUJ,EAAWC,GAC3D,SAASi5E,EAAkBviF,GAG1B,GAAIA,EAAO,MAAQ,CAElB,IAAIwiF,EAAa,QADjBxiF,GAAQ,QAC2B,IAChCyiF,EAAa,OAAiB,KAAPziF,GAE1B,OAAO/F,OAAOC,aAAasoF,EAAYC,EACxC,CACC,OAAOxoF,OAAOC,aAAa8F,EAE7B,CACA,SAASsgF,EAAea,GACvB,IAAIuB,EAAIvB,EAAE9lF,MAAM,GAAG,GACnB,OAAImG,OAAOtB,eAAegB,KAAKuI,EAAWi5E,GAClCj5E,EAAUi5E,GACO,MAAhBA,EAAE5B,OAAO,GACVyB,EAAkBI,SAASD,EAAE/5E,OAAO,GAAGf,QAAQ,IAAI,SAE1D0B,EAAagB,MAAM,oBAAoB62E,GAChCA,EAET,CACA,SAASyB,EAAWb,GACnB,GAAGA,EAAIr5E,EAAM,CACZ,IAAIm6E,EAAKh8E,EAAOqU,UAAUxS,EAAMq5E,GAAKn6E,QAAQ,WAAW04E,GACxDx4E,GAASG,EAASS,GAClBW,EAAWgD,WAAWw2E,EAAG,EAAEd,EAAIr5E,GAC/BA,EAAQq5E,CACT,CACD,CACA,SAAS95E,EAASqG,EAAEw0E,GACnB,KAAMx0E,GAAGy0E,IAAYD,EAAIE,EAAYf,KAAKp7E,KACzCo8E,EAAYH,EAAE5nF,MACd6nF,EAAUE,EAAYH,EAAE,GAAGpiF,OAC3BoH,EAAQK,aAGTL,EAAQM,aAAekG,EAAE20E,EAAU,CACpC,CACA,IAAIA,EAAY,EACZF,EAAU,EACVC,EAAc,sBACdl7E,EAAUuB,EAAWvB,QAErBo7E,EAAa,CAAC,CAAC7C,aAAaiC,IAC5BX,EAAW,CAAC,EACZj5E,EAAQ,EACZ,OAAW,CACV,IACC,IAAIy6E,EAAWt8E,EAAO1L,QAAQ,IAAIuN,GAClC,GAAGy6E,EAAS,EAAE,CACb,IAAIt8E,EAAO8B,OAAOD,GAAOu4E,MAAM,SAAS,CACvC,IAAI/3E,EAAMG,EAAWH,IACdiS,EAAOjS,EAAIuD,eAAe5F,EAAO8B,OAAOD,IAC5CQ,EAAID,YAAYkS,GAChB9R,EAAWL,eAAiBmS,CAChC,CACA,MACD,CAIA,OAHGgoE,EAASz6E,GACXk6E,EAAWO,GAELt8E,EAAOi6E,OAAOqC,EAAS,IAC9B,IAAK,IACJ,IAAIpB,EAAMl7E,EAAO1L,QAAQ,IAAIgoF,EAAS,GAClCx3E,EAAU9E,EAAOqU,UAAUioE,EAAW,EAAGpB,GAAKn6E,QAAQ,eAAgB,IACtEw7E,EAASF,EAAWG,MACrBtB,EAAI,GAEAp2E,EAAU9E,EAAOqU,UAAUioE,EAAS,GAAGv7E,QAAQ,UAAU,IACzD0B,EAAagB,MAAM,iBAAiBqB,EAAQ,oBAAoBy3E,EAAOz3E,SACvEo2E,EAAMoB,EAAS,EAAEx3E,EAAQjL,QACjBiL,EAAQs1E,MAAM,SACtBt1E,EAAUA,EAAQ/D,QAAQ,UAAU,IACpC0B,EAAagB,MAAM,iBAAiBqB,EAAQ,uBAC5Co2E,EAAMoB,EAAS,EAAEx3E,EAAQjL,QAEhC,IAAIwgF,EAAakC,EAAOlC,WACpBoC,EAAWF,EAAOz3E,SAAWA,EAE3B,GADkB23E,GAAYF,EAAOz3E,SAASy3E,EAAOz3E,QAAQtS,eAAiBsS,EAAQtS,cACjE,CAE1B,GADMgQ,EAAWoC,WAAW23E,EAAO1nF,IAAI0nF,EAAOx4E,UAAUe,GACrDu1E,EACF,IAAK,IAAIp1E,KAAUo1E,EACd1/E,OAAOC,UAAUvB,eAAegB,KAAKggF,EAAYp1E,IACpDzC,EAAW0C,iBAAiBD,GAI3Bw3E,GACMh6E,EAAaqE,WAAW,iBAAiBhC,EAAQ,2CAA2Cy3E,EAAOz3E,QAExG,MACCu3E,EAAW1nF,KAAK4nF,GAGvBrB,IACA,MAED,IAAK,IACJj6E,GAASG,EAASk7E,GAClBpB,EAAMK,EAAiBv7E,EAAOs8E,EAAS95E,GACvC,MACD,IAAK,IACJvB,GAASG,EAASk7E,GAClBpB,EAAMD,EAASj7E,EAAOs8E,EAAS95E,EAAWC,GAC1C,MACD,QACCxB,GAASG,EAASk7E,GAClB,IAAIp4E,EAAK,IAAIs3E,EACThC,EAAe6C,EAAWA,EAAWxiF,OAAO,GAAG2/E,aAG/Cl+E,GADA4/E,EAAM3B,EAAsBv5E,EAAOs8E,EAASp4E,EAAGs1E,EAAaC,EAAeh3E,GACrEyB,EAAGrK,QASb,IANIqK,EAAGi2E,QAAUU,EAAc76E,EAAOk7E,EAAIh3E,EAAGY,QAAQg2E,KACpD52E,EAAGi2E,QAAS,EACRv3E,EAAUo1C,MACbv1C,EAAakE,QAAQ,2BAGpB1F,GAAW3F,EAAI,CAGjB,IAFA,IAAIohF,EAAWrD,EAAYp4E,EAAQ,CAAC,GAE5B1H,EAAI,EAAEA,EAAE+B,EAAI/B,IAAI,CACvB,IAAI+gF,EAAIp2E,EAAG3K,GACX6H,EAASk5E,EAAEnmE,QACXmmE,EAAEr5E,QAAUo4E,EAAYp4E,EAAQ,CAAC,EAClC,CACAuB,EAAWvB,QAAUy7E,EAClBz6E,EAAciC,EAAG1B,EAAWg3E,IAC9B6C,EAAW1nF,KAAKuP,GAEjB1B,EAAWvB,QAAUA,CACtB,MACIgB,EAAciC,EAAG1B,EAAWg3E,IAC9B6C,EAAW1nF,KAAKuP,GAIdxE,EAAUL,OAAO6E,EAAGrP,OAASqP,EAAGi2E,OACnCe,EAAMR,EAAwB16E,EAAOk7E,EAAIh3E,EAAGY,QAAQ20E,EAAej3E,GAEnE04E,IAGH,CAAC,MAAM/nF,GACN,GAAIA,aAAawN,EAChB,MAAMxN,EAEPsP,EAAagB,MAAM,wBAAwBtQ,GAC3C+nF,GAAO,CACR,CACGA,EAAIr5E,EACNA,EAAQq5E,EAGRa,EAAWj9E,KAAK69E,IAAIL,EAASz6E,GAAO,EAEtC,CACD,CAzKEpL,CAAMuJ,EAAO0C,EAAaE,EACxBJ,EAAWhH,KAAKiH,cAClBD,EAAWsD,aACZ,GAqjBD01E,EAAkB5gF,UAAY,CAC7Bs/E,WAAW,SAASp1E,GACnB,IAAIs0E,EAAen+E,KAAK6J,GACvB,MAAM,IAAI7P,MAAM,mBAAmB6P,GAEpCtJ,KAAKsJ,QAAUA,CAChB,EACAg1E,SAAS,SAAS91E,EAAOlR,EAAOqhB,GAC/B,IAAIilE,EAAen+E,KAAK+I,GACvB,MAAM,IAAI/O,MAAM,qBAAqB+O,GAEtCxI,KAAKq+E,eAAe71E,GAASxI,KAAK3B,OAClC2B,KAAKA,KAAK3B,UAAY,CAACmK,MAAMA,EAAMlR,MAAMA,EAAMqhB,OAAOA,EACvD,EACAta,OAAO,EACP+iF,aAAa,SAASrjF,GAAG,OAAOiC,KAAKjC,GAAGwK,SAAS,EACjDU,WAAW,SAASlL,GAAG,OAAOiC,KAAKjC,GAAG0H,OAAO,EAC7CsD,SAAS,SAAShL,GAAG,OAAOiC,KAAKjC,GAAGyK,KAAK,EACzCI,OAAO,SAAS7K,GAAG,OAAOiC,KAAKjC,GAAG1E,GAAG,EACrCwP,SAAS,SAAS9K,GAAG,OAAOiC,KAAKjC,GAAGzG,KAAK,GA2B1CjB,EAAQ+O,UAAYA,EACpB/O,EAAQ8O,WAAaA,gBCrpBrB,IAIIk8E,EAJAC,EAA6B,qBAAXC,EAAAA,EAAyBA,EAAAA,EACzB,qBAAXrrF,OAAyBA,OAAS,CAAC,EAC1CsrF,EAASrrF,EAAQ,KAIG,qBAAbsrF,SACPJ,EAAQI,UAERJ,EAAQC,EAAS,gCAGbD,EAAQC,EAAS,6BAA+BE,GAIxDprF,EAAOC,QAAUgrF,iBChBjB,IAAIK,EAGAA,EADkB,qBAAXxrF,OACDA,OACmB,qBAAXqrF,EAAAA,EACRA,EAAAA,EACiB,qBAATI,KACRA,KAEA,CAAC,EAGXvrF,EAAOC,QAAUqrF,WCZjBtrF,EAAOC,QAIP,SAAqBuR,GACnB,IAAKA,EACH,OAAO,EAET,IAAIg6E,EAASviF,EAASR,KAAK+I,GAC3B,MAAkB,sBAAXg6E,GACU,oBAAPh6E,GAAgC,oBAAXg6E,GACV,qBAAX1rF,SAEN0R,IAAO1R,OAAO4F,YACd8L,IAAO1R,OAAO2rF,OACdj6E,IAAO1R,OAAO4rF,SACdl6E,IAAO1R,OAAO6rF,OACpB,EAfA,IAAI1iF,EAAWF,OAAOC,UAAUC,wBCFhC,IAAI2iF,EAAY7rF,EAAAA,KAAAA,UA6ChBC,EAAOC,QA3CS,SAASsG,GACvB,IAAIslF,EAAO,IAAIC,SAASvlF,EAAKwlF,OAAQxlF,EAAKylF,WAAYzlF,EAAK0lF,YACvD3pF,EAAS,CACPid,QAAShZ,EAAK,GACd2lF,MAAO,IAAIvqF,WAAW4E,EAAK4lF,SAAS,EAAG,IACvCC,WAAY,GACZC,YAAaR,EAAKS,UAAU,GAC5BC,UAAWV,EAAKS,UAAU,IAE9B3kF,EAAI,GAEiB,IAAnBrF,EAAOid,SACTjd,EAAOkqF,yBAA2BX,EAAKS,UAAU3kF,GACjDrF,EAAOmqF,YAAcZ,EAAKS,UAAU3kF,EAAI,GACxCA,GAAK,IAGLrF,EAAOkqF,yBAA2BZ,EAAUrlF,EAAK4lF,SAASxkF,IAC1DrF,EAAOmqF,YAAcb,EAAUrlF,EAAK4lF,SAASxkF,EAAI,IACjDA,GAAK,IAGPA,GAAK,EAEL,IAAI+kF,EAAiBb,EAAKc,UAAUhlF,GAIpC,IAFAA,GAAK,EAEE+kF,EAAiB,EAAG/kF,GAAK,GAAI+kF,IAClCpqF,EAAO8pF,WAAWrpF,KAAK,CACrB6pF,eAA0B,IAAVrmF,EAAKoB,MAAe,EACpCklF,eAAoC,WAApBhB,EAAKS,UAAU3kF,GAC/BmlF,mBAAoBjB,EAAKS,UAAU3kF,EAAI,GACvColF,iBAAgC,IAAdxmF,EAAKoB,EAAI,IAC3BqlF,SAAwB,IAAdzmF,EAAKoB,EAAI,MAAe,EAClCslF,aAAsC,UAAxBpB,EAAKS,UAAU3kF,EAAI,KAIrC,OAAOrF,CACT,WCpCA,IAEE4qF,EACAC,EACAC,EACAC,EACAC,EACAC,EACAC,EAPAC,EAAmB,IASrBP,EAAmB,SAASQ,GAC1B,OAAOA,EAAUD,CACnB,EAEAN,EAAmB,SAASO,EAASC,GACnC,OAAOD,EAAUC,CACnB,EAEAP,EAAmB,SAASQ,GAC1B,OAAOA,EAAYH,CACrB,EAEAJ,EAAmB,SAASO,EAAWD,GACrC,OAAOC,EAAYD,CACrB,EAEAL,EAAmB,SAASM,EAAWD,GACrC,OAAOT,EAAiBG,EAAiBO,EAAWD,GACtD,EAEAJ,EAAmB,SAASK,EAAWD,GACrC,OAAOR,EAAiBC,EAAiBQ,GAAYD,EACvD,EAMAH,EAAsB,SAASI,EAAWC,EAAkBC,GAC1D,OAAOV,EAAiBU,EAAyBF,EAAYA,EAAYC,EAC3E,EAEA7tF,EAAOC,QAAU,CACfwtF,iBAAkBA,EAClBP,iBAAkBA,EAClBC,iBAAkBA,EAClBC,iBAAkBA,EAClBC,iBAAkBA,EAClBC,iBAAkBA,EAClBC,iBAAkBA,EAClBC,oBAAqBA,YCxDvB,IAAIO,EAAa7gF,KAAK8gF,IAAI,EAAG,IAmB7BhuF,EAAOC,QAAU,CACf2rF,UAlBc,SAASqC,GACvB,IACI/sF,EADAgtF,EAAK,IAAIpC,SAASmC,EAAMlC,OAAQkC,EAAMjC,WAAYiC,EAAMhC,YAG5D,OAAIiC,EAAGC,cACLjtF,EAAQgtF,EAAGC,aAAa,IAEZC,OAAOC,iBACVD,OAAOltF,GAGTA,EAGDgtF,EAAG5B,UAAU,GAAKyB,EAAcG,EAAG5B,UAAU,EACvD,EAIEyB,WAAYA,+BCZd,IAAIO,EAAuBvuF,EAAQ,KAEnC,SAASwuF,IAAiB,CAC1B,SAASC,IAA0B,CACnCA,EAAuBC,kBAAoBF,EAE3CvuF,EAAOC,QAAU,WACf,SAASyuF,EAAKC,EAAOC,EAAUC,EAAeC,EAAUC,EAAcC,GACpE,GAAIA,IAAWV,EAAf,CAIA,IAAIluF,EAAM,IAAIiD,MACZ,mLAKF,MADAjD,EAAI+I,KAAO,sBACL/I,CAPN,CAQF,CAEA,SAAS6uF,IACP,OAAOP,CACT,CAHAA,EAAKQ,WAAaR,EAMlB,IAAIS,EAAiB,CACnBpnF,MAAO2mF,EACPU,OAAQV,EACRW,KAAMX,EACNY,KAAMZ,EACNa,OAAQb,EACRrhF,OAAQqhF,EACRlD,OAAQkD,EACRc,OAAQd,EAERe,IAAKf,EACLgB,QAAST,EACT55E,QAASq5E,EACTiB,YAAajB,EACbkB,WAAYX,EACZx/E,KAAMi/E,EACNmB,SAAUZ,EACVa,MAAOb,EACPc,UAAWd,EACXe,MAAOf,EACPgB,MAAOhB,EAEPiB,eAAgB1B,EAChBC,kBAAmBF,GAKrB,OAFAY,EAAegB,UAAYhB,EAEpBA,CACT,iBC/CEnvF,EAAOC,QAAUF,EAAQ,IAARA,yBCNnBC,EAAOC,QAFoB,2ECGd,IAAImwF,EAAGrwF,EAAQ,IAASswF,EAAGtwF,EAAQ,KAAa,SAAS8V,EAAE6yE,GAAG,IAAI,IAAI4H,EAAE,yDAAyD5H,EAAE7uE,EAAE,EAAEA,EAAEhG,UAAU5L,OAAO4R,IAAIy2E,GAAG,WAAWC,mBAAmB18E,UAAUgG,IAAI,MAAM,yBAAyB6uE,EAAE,WAAW4H,EAAE,gHAAgH,CAAC,IAAIE,EAAG,IAAIhmF,IAAIimF,EAAG,CAAC,EAAE,SAASC,EAAGhI,EAAE4H,GAAGK,EAAGjI,EAAE4H,GAAGK,EAAGjI,EAAE,UAAU4H,EAAE,CACxb,SAASK,EAAGjI,EAAE4H,GAAW,IAARG,EAAG/H,GAAG4H,EAAM5H,EAAE,EAAEA,EAAE4H,EAAEroF,OAAOygF,IAAI8H,EAAG7lF,IAAI2lF,EAAE5H,GAAG,CAC5D,IAAIkI,IAAK,qBAAqB9wF,QAAQ,qBAAqBA,OAAOurF,UAAU,qBAAqBvrF,OAAOurF,SAASpqE,eAAe4vE,EAAG9nF,OAAOC,UAAUvB,eAAeqpF,EAAG,8VAA8VC,EACpgB,CAAC,EAAEC,EAAG,CAAC,EACiN,SAASpyE,EAAE8pE,EAAE4H,EAAEz2E,EAAEo3E,EAAE1vF,EAAEmmF,EAAEwJ,GAAGtnF,KAAKunF,gBAAgB,IAAIb,GAAG,IAAIA,GAAG,IAAIA,EAAE1mF,KAAKwnF,cAAcH,EAAErnF,KAAKynF,mBAAmB9vF,EAAEqI,KAAK0nF,gBAAgBz3E,EAAEjQ,KAAK2nF,aAAa7I,EAAE9+E,KAAK3I,KAAKqvF,EAAE1mF,KAAK4nF,YAAY9J,EAAE99E,KAAK6nF,kBAAkBP,CAAC,CAAC,IAAIQ,EAAE,CAAC,EACpb,uIAAuI7wF,MAAM,KAAK0B,SAAQ,SAASmmF,GAAGgJ,EAAEhJ,GAAG,IAAI9pE,EAAE8pE,EAAE,GAAE,EAAGA,EAAE,MAAK,GAAG,EAAG,IAAG,CAAC,CAAC,gBAAgB,kBAAkB,CAAC,YAAY,SAAS,CAAC,UAAU,OAAO,CAAC,YAAY,eAAenmF,SAAQ,SAASmmF,GAAG,IAAI4H,EAAE5H,EAAE,GAAGgJ,EAAEpB,GAAG,IAAI1xE,EAAE0xE,EAAE,GAAE,EAAG5H,EAAE,GAAG,MAAK,GAAG,EAAG,IAAG,CAAC,kBAAkB,YAAY,aAAa,SAASnmF,SAAQ,SAASmmF,GAAGgJ,EAAEhJ,GAAG,IAAI9pE,EAAE8pE,EAAE,GAAE,EAAGA,EAAE9nF,cAAc,MAAK,GAAG,EAAG,IAC1e,CAAC,cAAc,4BAA4B,YAAY,iBAAiB2B,SAAQ,SAASmmF,GAAGgJ,EAAEhJ,GAAG,IAAI9pE,EAAE8pE,EAAE,GAAE,EAAGA,EAAE,MAAK,GAAG,EAAG,IAAG,8OAA8O7nF,MAAM,KAAK0B,SAAQ,SAASmmF,GAAGgJ,EAAEhJ,GAAG,IAAI9pE,EAAE8pE,EAAE,GAAE,EAAGA,EAAE9nF,cAAc,MAAK,GAAG,EAAG,IACxb,CAAC,UAAU,WAAW,QAAQ,YAAY2B,SAAQ,SAASmmF,GAAGgJ,EAAEhJ,GAAG,IAAI9pE,EAAE8pE,EAAE,GAAE,EAAGA,EAAE,MAAK,GAAG,EAAG,IAAG,CAAC,UAAU,YAAYnmF,SAAQ,SAASmmF,GAAGgJ,EAAEhJ,GAAG,IAAI9pE,EAAE8pE,EAAE,GAAE,EAAGA,EAAE,MAAK,GAAG,EAAG,IAAG,CAAC,OAAO,OAAO,OAAO,QAAQnmF,SAAQ,SAASmmF,GAAGgJ,EAAEhJ,GAAG,IAAI9pE,EAAE8pE,EAAE,GAAE,EAAGA,EAAE,MAAK,GAAG,EAAG,IAAG,CAAC,UAAU,SAASnmF,SAAQ,SAASmmF,GAAGgJ,EAAEhJ,GAAG,IAAI9pE,EAAE8pE,EAAE,GAAE,EAAGA,EAAE9nF,cAAc,MAAK,GAAG,EAAG,IAAG,IAAI+wF,EAAG,gBAAgB,SAASC,EAAGlJ,GAAG,OAAOA,EAAE,GAAGvgF,aAAa,CAIxZ,SAAS0pF,EAAGnJ,EAAE4H,EAAEz2E,EAAEo3E,GAAG,IAAI1vF,EAAEmwF,EAAEjqF,eAAe6oF,GAAGoB,EAAEpB,GAAG,MAAQ,OAAO/uF,EAAE,IAAIA,EAAEN,KAAKgwF,KAAK,EAAEX,EAAEroF,SAAS,MAAMqoF,EAAE,IAAI,MAAMA,EAAE,IAAI,MAAMA,EAAE,IAAI,MAAMA,EAAE,MAP9I,SAAY5H,EAAE4H,EAAEz2E,EAAEo3E,GAAG,GAAG,OAAOX,GAAG,qBAAqBA,GADqE,SAAY5H,EAAE4H,EAAEz2E,EAAEo3E,GAAG,GAAG,OAAOp3E,GAAG,IAAIA,EAAE5Y,KAAK,OAAM,EAAG,cAAcqvF,GAAG,IAAK,WAAW,IAAK,SAAS,OAAM,EAAG,IAAK,UAAU,OAAGW,IAAc,OAAOp3E,GAASA,EAAEs3E,gBAAmD,WAAnCzI,EAAEA,EAAE9nF,cAAcgC,MAAM,EAAE,KAAsB,UAAU8lF,GAAE,QAAQ,OAAM,EAAG,CAC/ToJ,CAAGpJ,EAAE4H,EAAEz2E,EAAEo3E,GAAG,OAAM,EAAG,GAAGA,EAAE,OAAM,EAAG,GAAG,OAAOp3E,EAAE,OAAOA,EAAE5Y,MAAM,KAAK,EAAE,OAAOqvF,EAAE,KAAK,EAAE,OAAM,IAAKA,EAAE,KAAK,EAAE,OAAOyB,MAAMzB,GAAG,KAAK,EAAE,OAAOyB,MAAMzB,IAAI,EAAEA,EAAE,OAAM,CAAE,CAOtE0B,CAAG1B,EAAEz2E,EAAEtY,EAAE0vF,KAAKp3E,EAAE,MAAMo3E,GAAG,OAAO1vF,EARxK,SAAYmnF,GAAG,QAAGmI,EAAGpoF,KAAKuoF,EAAGtI,KAAemI,EAAGpoF,KAAKsoF,EAAGrI,KAAeoI,EAAGznF,KAAKq/E,GAAUsI,EAAGtI,IAAG,GAAGqI,EAAGrI,IAAG,GAAS,GAAE,CAQwDuJ,CAAG3B,KAAK,OAAOz2E,EAAE6uE,EAAEhnE,gBAAgB4uE,GAAG5H,EAAEjnE,aAAa6uE,EAAE,GAAGz2E,IAAItY,EAAE+vF,gBAAgB5I,EAAEnnF,EAAEgwF,cAAc,OAAO13E,EAAE,IAAItY,EAAEN,MAAQ,GAAG4Y,GAAGy2E,EAAE/uF,EAAE6vF,cAAcH,EAAE1vF,EAAE8vF,mBAAmB,OAAOx3E,EAAE6uE,EAAEhnE,gBAAgB4uE,IAAaz2E,EAAE,KAAXtY,EAAEA,EAAEN,OAAc,IAAIM,IAAG,IAAKsY,EAAE,GAAG,GAAGA,EAAEo3E,EAAEvI,EAAEvmE,eAAe8uE,EAAEX,EAAEz2E,GAAG6uE,EAAEjnE,aAAa6uE,EAAEz2E,KAAI,CAHjd,0jCAA0jChZ,MAAM,KAAK0B,SAAQ,SAASmmF,GAAG,IAAI4H,EAAE5H,EAAEv5E,QAAQwiF,EACzmCC,GAAIF,EAAEpB,GAAG,IAAI1xE,EAAE0xE,EAAE,GAAE,EAAG5H,EAAE,MAAK,GAAG,EAAG,IAAG,2EAA2E7nF,MAAM,KAAK0B,SAAQ,SAASmmF,GAAG,IAAI4H,EAAE5H,EAAEv5E,QAAQwiF,EAAGC,GAAIF,EAAEpB,GAAG,IAAI1xE,EAAE0xE,EAAE,GAAE,EAAG5H,EAAE,gCAA+B,GAAG,EAAG,IAAG,CAAC,WAAW,WAAW,aAAanmF,SAAQ,SAASmmF,GAAG,IAAI4H,EAAE5H,EAAEv5E,QAAQwiF,EAAGC,GAAIF,EAAEpB,GAAG,IAAI1xE,EAAE0xE,EAAE,GAAE,EAAG5H,EAAE,wCAAuC,GAAG,EAAG,IAAG,CAAC,WAAW,eAAenmF,SAAQ,SAASmmF,GAAGgJ,EAAEhJ,GAAG,IAAI9pE,EAAE8pE,EAAE,GAAE,EAAGA,EAAE9nF,cAAc,MAAK,GAAG,EAAG,IACld8wF,EAAEQ,UAAU,IAAItzE,EAAE,YAAY,GAAE,EAAG,aAAa,gCAA+B,GAAG,GAAI,CAAC,MAAM,OAAO,SAAS,cAAcrc,SAAQ,SAASmmF,GAAGgJ,EAAEhJ,GAAG,IAAI9pE,EAAE8pE,EAAE,GAAE,EAAGA,EAAE9nF,cAAc,MAAK,GAAG,EAAG,IAE5L,IAAIuxF,EAAG/B,EAAGgC,mDAAmDC,EAAG7pF,OAAO8pF,IAAI,iBAAiBC,EAAG/pF,OAAO8pF,IAAI,gBAAgBE,EAAGhqF,OAAO8pF,IAAI,kBAAkBG,EAAGjqF,OAAO8pF,IAAI,qBAAqBI,EAAGlqF,OAAO8pF,IAAI,kBAAkBK,EAAGnqF,OAAO8pF,IAAI,kBAAkBM,EAAGpqF,OAAO8pF,IAAI,iBAAiBO,EAAGrqF,OAAO8pF,IAAI,qBAAqBQ,EAAGtqF,OAAO8pF,IAAI,kBAAkBS,EAAGvqF,OAAO8pF,IAAI,uBAAuBU,EAAGxqF,OAAO8pF,IAAI,cAAcW,EAAGzqF,OAAO8pF,IAAI,cAAc9pF,OAAO8pF,IAAI,eAAe9pF,OAAO8pF,IAAI,0BACje,IAAIY,EAAG1qF,OAAO8pF,IAAI,mBAAmB9pF,OAAO8pF,IAAI,uBAAuB9pF,OAAO8pF,IAAI,eAAe9pF,OAAO8pF,IAAI,wBAAwB,IAAIa,EAAG3qF,OAAOR,SAAS,SAASorF,EAAG1K,GAAG,OAAG,OAAOA,GAAG,kBAAkBA,EAAS,KAAwC,oBAAnCA,EAAEyK,GAAIzK,EAAEyK,IAAKzK,EAAE,eAA0CA,EAAE,IAAI,CAAC,IAAoB2K,EAAhBC,EAAEvqF,OAAOmF,OAAU,SAASqlF,EAAG7K,GAAG,QAAG,IAAS2K,EAAG,IAAI,MAAMhwF,OAAQ,CAAC,MAAMwW,GAAG,IAAIy2E,EAAEz2E,EAAE25E,MAAMryF,OAAOqnF,MAAM,gBAAgB6K,EAAG/C,GAAGA,EAAE,IAAI,EAAE,CAAC,MAAM,KAAK+C,EAAG3K,CAAC,CAAC,IAAI+K,GAAG,EACzb,SAASC,EAAGhL,EAAE4H,GAAG,IAAI5H,GAAG+K,EAAG,MAAM,GAAGA,GAAG,EAAG,IAAI55E,EAAExW,MAAMswF,kBAAkBtwF,MAAMswF,uBAAkB,EAAO,IAAI,GAAGrD,EAAE,GAAGA,EAAE,WAAW,MAAMjtF,OAAQ,EAAE0F,OAAOka,eAAeqtE,EAAEtnF,UAAU,QAAQ,CAACuB,IAAI,WAAW,MAAMlH,OAAQ,IAAI,kBAAkBuwF,SAASA,QAAQC,UAAU,CAAC,IAAID,QAAQC,UAAUvD,EAAE,GAAG,CAAC,MAAMzgF,GAAG,IAAIohF,EAAEphF,CAAC,CAAC+jF,QAAQC,UAAUnL,EAAE,GAAG4H,EAAE,KAAK,CAAC,IAAIA,EAAE7nF,MAAM,CAAC,MAAMoH,GAAGohF,EAAEphF,CAAC,CAAC64E,EAAEjgF,KAAK6nF,EAAEtnF,UAAU,KAAK,CAAC,IAAI,MAAM3F,OAAQ,CAAC,MAAMwM,GAAGohF,EAAEphF,CAAC,CAAC64E,GAAG,CAAC,CAAC,MAAM74E,GAAG,GAAGA,GAAGohF,GAAG,kBAAkBphF,EAAE2jF,MAAM,CAAC,IAAI,IAAIjyF,EAAEsO,EAAE2jF,MAAM3yF,MAAM,MACnf6mF,EAAEuJ,EAAEuC,MAAM3yF,MAAM,MAAMqwF,EAAE3vF,EAAE0G,OAAO,EAAE6rF,EAAEpM,EAAEz/E,OAAO,EAAE,GAAGipF,GAAG,GAAG4C,GAAGvyF,EAAE2vF,KAAKxJ,EAAEoM,IAAIA,IAAI,KAAK,GAAG5C,GAAG,GAAG4C,EAAE5C,IAAI4C,IAAI,GAAGvyF,EAAE2vF,KAAKxJ,EAAEoM,GAAG,CAAC,GAAG,IAAI5C,GAAG,IAAI4C,EAAG,MAAM5C,IAAQ,IAAJ4C,GAASvyF,EAAE2vF,KAAKxJ,EAAEoM,GAAG,CAAC,IAAI7J,EAAE,KAAK1oF,EAAE2vF,GAAG/hF,QAAQ,WAAW,QAA6F,OAArFu5E,EAAEqL,aAAa9J,EAAE+J,SAAS,iBAAiB/J,EAAEA,EAAE96E,QAAQ,cAAcu5E,EAAEqL,cAAqB9J,CAAC,QAAO,GAAGiH,GAAG,GAAG4C,GAAG,KAAK,CAAC,CAAC,CAAC,QAAQL,GAAG,EAAGpwF,MAAMswF,kBAAkB95E,CAAC,CAAC,OAAO6uE,EAAEA,EAAEA,EAAEqL,aAAarL,EAAEv/E,KAAK,IAAIoqF,EAAG7K,GAAG,EAAE,CAC9Z,SAASuL,EAAGvL,GAAG,OAAOA,EAAEwL,KAAK,KAAK,EAAE,OAAOX,EAAG7K,EAAEznF,MAAM,KAAK,GAAG,OAAOsyF,EAAG,QAAQ,KAAK,GAAG,OAAOA,EAAG,YAAY,KAAK,GAAG,OAAOA,EAAG,gBAAgB,KAAK,EAAE,KAAK,EAAE,KAAK,GAAG,OAAO7K,EAAEgL,EAAGhL,EAAEznF,MAAK,GAAM,KAAK,GAAG,OAAOynF,EAAEgL,EAAGhL,EAAEznF,KAAKkzF,QAAO,GAAM,KAAK,EAAE,OAAOzL,EAAEgL,EAAGhL,EAAEznF,MAAK,GAAM,QAAQ,MAAM,GAAG,CACxR,SAASmzF,EAAG1L,GAAG,GAAG,MAAMA,EAAE,OAAO,KAAK,GAAG,oBAAoBA,EAAE,OAAOA,EAAEqL,aAAarL,EAAEv/E,MAAM,KAAK,GAAG,kBAAkBu/E,EAAE,OAAOA,EAAE,OAAOA,GAAG,KAAK8J,EAAG,MAAM,WAAW,KAAKD,EAAG,MAAM,SAAS,KAAKG,EAAG,MAAM,WAAW,KAAKD,EAAG,MAAM,aAAa,KAAKK,EAAG,MAAM,WAAW,KAAKC,EAAG,MAAM,eAAe,GAAG,kBAAkBrK,EAAE,OAAOA,EAAE2L,UAAU,KAAKzB,EAAG,OAAOlK,EAAEqL,aAAa,WAAW,YAAY,KAAKpB,EAAG,OAAOjK,EAAE4L,SAASP,aAAa,WAAW,YAAY,KAAKlB,EAAG,IAAIvC,EAAE5H,EAAEyL,OAC7Z,OADoazL,EAAEA,EAAEqL,eACndrL,EAAE,MADieA,EAAE4H,EAAEyD,aAClfzD,EAAEnnF,MAAM,IAAY,cAAcu/E,EAAE,IAAI,cAAqBA,EAAE,KAAKsK,EAAG,OAA6B,QAAtB1C,EAAE5H,EAAEqL,aAAa,MAAczD,EAAE8D,EAAG1L,EAAEznF,OAAO,OAAO,KAAKgyF,EAAG3C,EAAE5H,EAAE6L,SAAS7L,EAAEA,EAAE8L,MAAM,IAAI,OAAOJ,EAAG1L,EAAE4H,GAAG,CAAC,MAAMz2E,GAAG,EAAE,OAAO,IAAI,CAC3M,SAAS46E,EAAG/L,GAAG,IAAI4H,EAAE5H,EAAEznF,KAAK,OAAOynF,EAAEwL,KAAK,KAAK,GAAG,MAAM,QAAQ,KAAK,EAAE,OAAO5D,EAAEyD,aAAa,WAAW,YAAY,KAAK,GAAG,OAAOzD,EAAEgE,SAASP,aAAa,WAAW,YAAY,KAAK,GAAG,MAAM,qBAAqB,KAAK,GAAG,OAAkBrL,GAAXA,EAAE4H,EAAE6D,QAAWJ,aAAarL,EAAEv/E,MAAM,GAAGmnF,EAAEyD,cAAc,KAAKrL,EAAE,cAAcA,EAAE,IAAI,cAAc,KAAK,EAAE,MAAM,WAAW,KAAK,EAAE,OAAO4H,EAAE,KAAK,EAAE,MAAM,SAAS,KAAK,EAAE,MAAM,OAAO,KAAK,EAAE,MAAM,OAAO,KAAK,GAAG,OAAO8D,EAAG9D,GAAG,KAAK,EAAE,OAAOA,IAAImC,EAAG,aAAa,OAAO,KAAK,GAAG,MAAM,YACtf,KAAK,GAAG,MAAM,WAAW,KAAK,GAAG,MAAM,QAAQ,KAAK,GAAG,MAAM,WAAW,KAAK,GAAG,MAAM,eAAe,KAAK,GAAG,MAAM,gBAAgB,KAAK,EAAE,KAAK,EAAE,KAAK,GAAG,KAAK,EAAE,KAAK,GAAG,KAAK,GAAG,GAAG,oBAAoBnC,EAAE,OAAOA,EAAEyD,aAAazD,EAAEnnF,MAAM,KAAK,GAAG,kBAAkBmnF,EAAE,OAAOA,EAAE,OAAO,IAAI,CAAC,SAASoE,EAAGhM,GAAG,cAAcA,GAAG,IAAK,UAAU,IAAK,SAAS,IAAK,SAAS,IAAK,YAAqB,IAAK,SAAS,OAAOA,EAAE,QAAQ,MAAM,GAAG,CACra,SAASiM,EAAGjM,GAAG,IAAI4H,EAAE5H,EAAEznF,KAAK,OAAOynF,EAAEA,EAAEjkF,WAAW,UAAUikF,EAAE9nF,gBAAgB,aAAa0vF,GAAG,UAAUA,EAAE,CAEtF,SAASsE,EAAGlM,GAAGA,EAAEmM,gBAAgBnM,EAAEmM,cADvD,SAAYnM,GAAG,IAAI4H,EAAEqE,EAAGjM,GAAG,UAAU,QAAQ7uE,EAAE9Q,OAAO+rF,yBAAyBpM,EAAEx/E,YAAYF,UAAUsnF,GAAGW,EAAE,GAAGvI,EAAE4H,GAAG,IAAI5H,EAAEjhF,eAAe6oF,IAAI,qBAAqBz2E,GAAG,oBAAoBA,EAAEnP,KAAK,oBAAoBmP,EAAEtP,IAAI,CAAC,IAAIhJ,EAAEsY,EAAEnP,IAAIg9E,EAAE7tE,EAAEtP,IAAiL,OAA7KxB,OAAOka,eAAeylE,EAAE4H,EAAE,CAACyE,cAAa,EAAGrqF,IAAI,WAAW,OAAOnJ,EAAEkH,KAAKmB,KAAK,EAAEW,IAAI,SAASm+E,GAAGuI,EAAE,GAAGvI,EAAEhB,EAAEj/E,KAAKmB,KAAK8+E,EAAE,IAAI3/E,OAAOka,eAAeylE,EAAE4H,EAAE,CAAC0E,WAAWn7E,EAAEm7E,aAAmB,CAACviF,SAAS,WAAW,OAAOw+E,CAAC,EAAEgE,SAAS,SAASvM,GAAGuI,EAAE,GAAGvI,CAAC,EAAEwM,aAAa,WAAWxM,EAAEmM,cACxf,YAAYnM,EAAE4H,EAAE,EAAE,CAAC,CAAkD6E,CAAGzM,GAAG,CAAC,SAAS0M,EAAG1M,GAAG,IAAIA,EAAE,OAAM,EAAG,IAAI4H,EAAE5H,EAAEmM,cAAc,IAAIvE,EAAE,OAAM,EAAG,IAAIz2E,EAAEy2E,EAAE79E,WAAew+E,EAAE,GAAqD,OAAlDvI,IAAIuI,EAAE0D,EAAGjM,GAAGA,EAAE2M,QAAQ,OAAO,QAAQ3M,EAAExnF,QAAOwnF,EAAEuI,KAAap3E,IAAGy2E,EAAE2E,SAASvM,IAAG,EAAM,CAAC,SAAS4M,EAAG5M,GAAwD,GAAG,qBAAxDA,EAAEA,IAAI,qBAAqB2C,SAASA,cAAS,IAAkC,OAAO,KAAK,IAAI,OAAO3C,EAAE6M,eAAe7M,EAAEhlF,IAAI,CAAC,MAAM4sF,GAAG,OAAO5H,EAAEhlF,IAAI,CAAC,CACpa,SAAS8xF,EAAG9M,EAAE4H,GAAG,IAAIz2E,EAAEy2E,EAAE+E,QAAQ,OAAO/B,EAAE,CAAC,EAAEhD,EAAE,CAACmF,oBAAe,EAAOC,kBAAa,EAAOx0F,WAAM,EAAOm0F,QAAQ,MAAMx7E,EAAEA,EAAE6uE,EAAEiN,cAAcC,gBAAgB,CAAC,SAASC,EAAGnN,EAAE4H,GAAG,IAAIz2E,EAAE,MAAMy2E,EAAEoF,aAAa,GAAGpF,EAAEoF,aAAazE,EAAE,MAAMX,EAAE+E,QAAQ/E,EAAE+E,QAAQ/E,EAAEmF,eAAe57E,EAAE66E,EAAG,MAAMpE,EAAEpvF,MAAMovF,EAAEpvF,MAAM2Y,GAAG6uE,EAAEiN,cAAc,CAACC,eAAe3E,EAAE6E,aAAaj8E,EAAEk8E,WAAW,aAAazF,EAAErvF,MAAM,UAAUqvF,EAAErvF,KAAK,MAAMqvF,EAAE+E,QAAQ,MAAM/E,EAAEpvF,MAAM,CAAC,SAAS80F,EAAGtN,EAAE4H,GAAe,OAAZA,EAAEA,EAAE+E,UAAiBxD,EAAGnJ,EAAE,UAAU4H,GAAE,EAAG,CAC9d,SAAS2F,EAAGvN,EAAE4H,GAAG0F,EAAGtN,EAAE4H,GAAG,IAAIz2E,EAAE66E,EAAGpE,EAAEpvF,OAAO+vF,EAAEX,EAAErvF,KAAK,GAAG,MAAM4Y,EAAK,WAAWo3E,GAAM,IAAIp3E,GAAG,KAAK6uE,EAAExnF,OAAOwnF,EAAExnF,OAAO2Y,KAAE6uE,EAAExnF,MAAM,GAAG2Y,GAAO6uE,EAAExnF,QAAQ,GAAG2Y,IAAI6uE,EAAExnF,MAAM,GAAG2Y,QAAQ,GAAG,WAAWo3E,GAAG,UAAUA,EAA8B,YAA3BvI,EAAEhnE,gBAAgB,SAAgB4uE,EAAE7oF,eAAe,SAASyuF,GAAGxN,EAAE4H,EAAErvF,KAAK4Y,GAAGy2E,EAAE7oF,eAAe,iBAAiByuF,GAAGxN,EAAE4H,EAAErvF,KAAKyzF,EAAGpE,EAAEoF,eAAe,MAAMpF,EAAE+E,SAAS,MAAM/E,EAAEmF,iBAAiB/M,EAAE+M,iBAAiBnF,EAAEmF,eAAe,CACla,SAASU,EAAGzN,EAAE4H,EAAEz2E,GAAG,GAAGy2E,EAAE7oF,eAAe,UAAU6oF,EAAE7oF,eAAe,gBAAgB,CAAC,IAAIwpF,EAAEX,EAAErvF,KAAK,KAAK,WAAWgwF,GAAG,UAAUA,QAAG,IAASX,EAAEpvF,OAAO,OAAOovF,EAAEpvF,OAAO,OAAOovF,EAAE,GAAG5H,EAAEiN,cAAcG,aAAaj8E,GAAGy2E,IAAI5H,EAAExnF,QAAQwnF,EAAExnF,MAAMovF,GAAG5H,EAAEgN,aAAapF,CAAC,CAAU,MAATz2E,EAAE6uE,EAAEv/E,QAAcu/E,EAAEv/E,KAAK,IAAIu/E,EAAE+M,iBAAiB/M,EAAEiN,cAAcC,eAAe,KAAK/7E,IAAI6uE,EAAEv/E,KAAK0Q,EAAE,CACzV,SAASq8E,GAAGxN,EAAE4H,EAAEz2E,GAAM,WAAWy2E,GAAGgF,EAAG5M,EAAE/vE,iBAAiB+vE,IAAE,MAAM7uE,EAAE6uE,EAAEgN,aAAa,GAAGhN,EAAEiN,cAAcG,aAAapN,EAAEgN,eAAe,GAAG77E,IAAI6uE,EAAEgN,aAAa,GAAG77E,GAAE,CAAC,IAAIu8E,GAAGvzF,MAAMC,QAC7K,SAASuzF,GAAG3N,EAAE4H,EAAEz2E,EAAEo3E,GAAe,GAAZvI,EAAEA,EAAExlF,QAAWotF,EAAE,CAACA,EAAE,CAAC,EAAE,IAAI,IAAI/uF,EAAE,EAAEA,EAAEsY,EAAE5R,OAAO1G,IAAI+uF,EAAE,IAAIz2E,EAAEtY,KAAI,EAAG,IAAIsY,EAAE,EAAEA,EAAE6uE,EAAEzgF,OAAO4R,IAAItY,EAAE+uF,EAAE7oF,eAAe,IAAIihF,EAAE7uE,GAAG3Y,OAAOwnF,EAAE7uE,GAAGy8E,WAAW/0F,IAAImnF,EAAE7uE,GAAGy8E,SAAS/0F,GAAGA,GAAG0vF,IAAIvI,EAAE7uE,GAAG08E,iBAAgB,EAAG,KAAK,CAAmB,IAAlB18E,EAAE,GAAG66E,EAAG76E,GAAGy2E,EAAE,KAAS/uF,EAAE,EAAEA,EAAEmnF,EAAEzgF,OAAO1G,IAAI,CAAC,GAAGmnF,EAAEnnF,GAAGL,QAAQ2Y,EAAiD,OAA9C6uE,EAAEnnF,GAAG+0F,UAAS,OAAGrF,IAAIvI,EAAEnnF,GAAGg1F,iBAAgB,IAAW,OAAOjG,GAAG5H,EAAEnnF,GAAGi1F,WAAWlG,EAAE5H,EAAEnnF,GAAG,CAAC,OAAO+uF,IAAIA,EAAEgG,UAAS,EAAG,CAAC,CACxY,SAASG,GAAG/N,EAAE4H,GAAG,GAAG,MAAMA,EAAEoG,wBAAwB,MAAMrzF,MAAMwS,EAAE,KAAK,OAAOy9E,EAAE,CAAC,EAAEhD,EAAE,CAACpvF,WAAM,EAAOw0F,kBAAa,EAAOiB,SAAS,GAAGjO,EAAEiN,cAAcG,cAAc,CAAC,SAASc,GAAGlO,EAAE4H,GAAG,IAAIz2E,EAAEy2E,EAAEpvF,MAAM,GAAG,MAAM2Y,EAAE,CAA+B,GAA9BA,EAAEy2E,EAAEqG,SAASrG,EAAEA,EAAEoF,aAAgB,MAAM77E,EAAE,CAAC,GAAG,MAAMy2E,EAAE,MAAMjtF,MAAMwS,EAAE,KAAK,GAAGugF,GAAGv8E,GAAG,CAAC,GAAG,EAAEA,EAAE5R,OAAO,MAAM5E,MAAMwS,EAAE,KAAKgE,EAAEA,EAAE,EAAE,CAACy2E,EAAEz2E,CAAC,CAAC,MAAMy2E,IAAIA,EAAE,IAAIz2E,EAAEy2E,CAAC,CAAC5H,EAAEiN,cAAc,CAACG,aAAapB,EAAG76E,GAAG,CACnY,SAASg9E,GAAGnO,EAAE4H,GAAG,IAAIz2E,EAAE66E,EAAGpE,EAAEpvF,OAAO+vF,EAAEyD,EAAGpE,EAAEoF,cAAc,MAAM77E,KAAIA,EAAE,GAAGA,KAAM6uE,EAAExnF,QAAQwnF,EAAExnF,MAAM2Y,GAAG,MAAMy2E,EAAEoF,cAAchN,EAAEgN,eAAe77E,IAAI6uE,EAAEgN,aAAa77E,IAAI,MAAMo3E,IAAIvI,EAAEgN,aAAa,GAAGzE,EAAE,CAAC,SAAS6F,GAAGpO,GAAG,IAAI4H,EAAE5H,EAAEqO,YAAYzG,IAAI5H,EAAEiN,cAAcG,cAAc,KAAKxF,GAAG,OAAOA,IAAI5H,EAAExnF,MAAMovF,EAAE,CAAC,SAAS0G,GAAGtO,GAAG,OAAOA,GAAG,IAAK,MAAM,MAAM,6BAA6B,IAAK,OAAO,MAAM,qCAAqC,QAAQ,MAAM,+BAA+B,CAC7c,SAASuO,GAAGvO,EAAE4H,GAAG,OAAO,MAAM5H,GAAG,iCAAiCA,EAAEsO,GAAG1G,GAAG,+BAA+B5H,GAAG,kBAAkB4H,EAAE,+BAA+B5H,CAAC,CAChK,IAAIwO,GAAexO,GAAZyO,IAAYzO,GAAsJ,SAASA,EAAE4H,GAAG,GAAG,+BAA+B5H,EAAEx2E,cAAc,cAAcw2E,EAAEA,EAAE0O,UAAU9G,MAAM,CAA2F,KAA1F4G,GAAGA,IAAI7L,SAASpqE,cAAc,QAAUm2E,UAAU,QAAQ9G,EAAE+G,UAAUpuF,WAAW,SAAaqnF,EAAE4G,GAAGl9E,WAAW0uE,EAAE1uE,YAAY0uE,EAAEzsE,YAAYysE,EAAE1uE,YAAY,KAAKs2E,EAAEt2E,YAAY0uE,EAAEl4E,YAAY8/E,EAAEt2E,WAAW,CAAC,EAAvb,qBAAqBs9E,OAAOA,MAAMC,wBAAwB,SAASjH,EAAEz2E,EAAEo3E,EAAE1vF,GAAG+1F,MAAMC,yBAAwB,WAAW,OAAO7O,GAAE4H,EAAEz2E,EAAM,GAAE,EAAE6uE,IACtK,SAAS8O,GAAG9O,EAAE4H,GAAG,GAAGA,EAAE,CAAC,IAAIz2E,EAAE6uE,EAAE1uE,WAAW,GAAGH,GAAGA,IAAI6uE,EAAE9tE,WAAW,IAAIf,EAAEiB,SAAwB,YAAdjB,EAAE/G,UAAUw9E,EAAS,CAAC5H,EAAEqO,YAAYzG,CAAC,CACtH,IAAImH,GAAG,CAACC,yBAAwB,EAAGC,aAAY,EAAGC,mBAAkB,EAAGC,kBAAiB,EAAGC,kBAAiB,EAAGC,SAAQ,EAAGC,cAAa,EAAGC,iBAAgB,EAAGC,aAAY,EAAGC,SAAQ,EAAGC,MAAK,EAAGC,UAAS,EAAGC,cAAa,EAAGC,YAAW,EAAGC,cAAa,EAAGC,WAAU,EAAGC,UAAS,EAAGC,SAAQ,EAAGC,YAAW,EAAGC,aAAY,EAAGC,cAAa,EAAGC,YAAW,EAAGC,eAAc,EAAGC,gBAAe,EAAGC,iBAAgB,EAAGC,YAAW,EAAGC,WAAU,EAAGC,YAAW,EAAGC,SAAQ,EAAGhiC,OAAM,EAAGiiC,SAAQ,EAAGC,SAAQ,EAAGC,QAAO,EAAGC,QAAO,EAClfC,MAAK,EAAGC,aAAY,EAAGC,cAAa,EAAGC,aAAY,EAAGC,iBAAgB,EAAGC,kBAAiB,EAAGC,kBAAiB,EAAGC,eAAc,EAAGC,aAAY,GAAIC,GAAG,CAAC,SAAS,KAAK,MAAM,KAA6H,SAASC,GAAG3R,EAAE4H,EAAEz2E,GAAG,OAAO,MAAMy2E,GAAG,mBAAmBA,GAAG,KAAKA,EAAE,GAAGz2E,GAAG,kBAAkBy2E,GAAG,IAAIA,GAAGmH,GAAGhwF,eAAeihF,IAAI+O,GAAG/O,IAAI,GAAG4H,GAAGnvF,OAAOmvF,EAAE,IAAI,CACzb,SAASgK,GAAG5R,EAAE4H,GAAa,IAAI,IAAIz2E,KAAlB6uE,EAAEA,EAAE6R,MAAmBjK,EAAE,GAAGA,EAAE7oF,eAAeoS,GAAG,CAAC,IAAIo3E,EAAE,IAAIp3E,EAAEnX,QAAQ,MAAMnB,EAAE84F,GAAGxgF,EAAEy2E,EAAEz2E,GAAGo3E,GAAG,UAAUp3E,IAAIA,EAAE,YAAYo3E,EAAEvI,EAAE8R,YAAY3gF,EAAEtY,GAAGmnF,EAAE7uE,GAAGtY,CAAC,CAAC,CADYwH,OAAO0M,KAAKgiF,IAAIl1F,SAAQ,SAASmmF,GAAG0R,GAAG73F,SAAQ,SAAS+tF,GAAGA,EAAEA,EAAE5H,EAAEL,OAAO,GAAGlgF,cAAcugF,EAAEjmE,UAAU,GAAGg1E,GAAGnH,GAAGmH,GAAG/O,EAAE,GAAE,IAChI,IAAI+R,GAAGnH,EAAE,CAACoH,UAAS,GAAI,CAACC,MAAK,EAAG/5E,MAAK,EAAGg6E,IAAG,EAAGC,KAAI,EAAGC,OAAM,EAAGC,IAAG,EAAGC,KAAI,EAAG9rF,OAAM,EAAG+rF,QAAO,EAAGC,MAAK,EAAGC,MAAK,EAAGC,OAAM,EAAGhtF,QAAO,EAAGitF,OAAM,EAAGC,KAAI,IAClT,SAASC,GAAG7S,EAAE4H,GAAG,GAAGA,EAAE,CAAC,GAAGmK,GAAG/R,KAAK,MAAM4H,EAAEqG,UAAU,MAAMrG,EAAEoG,yBAAyB,MAAMrzF,MAAMwS,EAAE,IAAI6yE,IAAI,GAAG,MAAM4H,EAAEoG,wBAAwB,CAAC,GAAG,MAAMpG,EAAEqG,SAAS,MAAMtzF,MAAMwS,EAAE,KAAK,GAAG,kBAAkBy6E,EAAEoG,2BAA2B,WAAWpG,EAAEoG,yBAAyB,MAAMrzF,MAAMwS,EAAE,IAAK,CAAC,GAAG,MAAMy6E,EAAEiK,OAAO,kBAAkBjK,EAAEiK,MAAM,MAAMl3F,MAAMwS,EAAE,IAAK,CAAC,CAClW,SAAS2lF,GAAG9S,EAAE4H,GAAG,IAAI,IAAI5H,EAAEhmF,QAAQ,KAAK,MAAM,kBAAkB4tF,EAAEmL,GAAG,OAAO/S,GAAG,IAAK,iBAAiB,IAAK,gBAAgB,IAAK,YAAY,IAAK,gBAAgB,IAAK,gBAAgB,IAAK,mBAAmB,IAAK,iBAAiB,IAAK,gBAAgB,OAAM,EAAG,QAAQ,OAAM,EAAG,CAAC,IAAIgT,GAAG,KAAK,SAASC,GAAGjT,GAA6F,OAA1FA,EAAEA,EAAEv6E,QAAQu6E,EAAEkT,YAAY97F,QAAS+7F,0BAA0BnT,EAAEA,EAAEmT,yBAAgC,IAAInT,EAAE5tE,SAAS4tE,EAAEv1E,WAAWu1E,CAAC,CAAC,IAAIoT,GAAG,KAAKC,GAAG,KAAKC,GAAG,KACpc,SAASC,GAAGvT,GAAG,GAAGA,EAAEwT,GAAGxT,GAAG,CAAC,GAAG,oBAAoBoT,GAAG,MAAMz4F,MAAMwS,EAAE,MAAM,IAAIy6E,EAAE5H,EAAEyT,UAAU7L,IAAIA,EAAE8L,GAAG9L,GAAGwL,GAAGpT,EAAEyT,UAAUzT,EAAEznF,KAAKqvF,GAAG,CAAC,CAAC,SAAS+L,GAAG3T,GAAGqT,GAAGC,GAAGA,GAAGj5F,KAAK2lF,GAAGsT,GAAG,CAACtT,GAAGqT,GAAGrT,CAAC,CAAC,SAAS4T,KAAK,GAAGP,GAAG,CAAC,IAAIrT,EAAEqT,GAAGzL,EAAE0L,GAAoB,GAAjBA,GAAGD,GAAG,KAAKE,GAAGvT,GAAM4H,EAAE,IAAI5H,EAAE,EAAEA,EAAE4H,EAAEroF,OAAOygF,IAAIuT,GAAG3L,EAAE5H,GAAG,CAAC,CAAC,SAAS6T,GAAG7T,EAAE4H,GAAG,OAAO5H,EAAE4H,EAAE,CAAC,SAASkM,KAAK,CAAC,IAAIC,IAAG,EAAG,SAASC,GAAGhU,EAAE4H,EAAEz2E,GAAG,GAAG4iF,GAAG,OAAO/T,EAAE4H,EAAEz2E,GAAG4iF,IAAG,EAAG,IAAI,OAAOF,GAAG7T,EAAE4H,EAAEz2E,EAAE,CAAC,QAAW4iF,IAAG,GAAG,OAAOV,IAAI,OAAOC,MAAGQ,KAAKF,KAAI,CAAC,CAChb,SAASK,GAAGjU,EAAE4H,GAAG,IAAIz2E,EAAE6uE,EAAEyT,UAAU,GAAG,OAAOtiF,EAAE,OAAO,KAAK,IAAIo3E,EAAEmL,GAAGviF,GAAG,GAAG,OAAOo3E,EAAE,OAAO,KAAKp3E,EAAEo3E,EAAEX,GAAG5H,EAAE,OAAO4H,GAAG,IAAK,UAAU,IAAK,iBAAiB,IAAK,gBAAgB,IAAK,uBAAuB,IAAK,cAAc,IAAK,qBAAqB,IAAK,cAAc,IAAK,qBAAqB,IAAK,YAAY,IAAK,mBAAmB,IAAK,gBAAgBW,GAAGA,EAAEuF,YAAqBvF,IAAI,YAAbvI,EAAEA,EAAEznF,OAAuB,UAAUynF,GAAG,WAAWA,GAAG,aAAaA,IAAIA,GAAGuI,EAAE,MAAMvI,EAAE,QAAQA,GAAE,EAAG,GAAGA,EAAE,OAAO,KAAK,GAAG7uE,GAAG,oBACleA,EAAE,MAAMxW,MAAMwS,EAAE,IAAIy6E,SAASz2E,IAAI,OAAOA,CAAC,CAAC,IAAI+iF,IAAG,EAAG,GAAGhM,EAAG,IAAI,IAAIiM,GAAG,CAAC,EAAE9zF,OAAOka,eAAe45E,GAAG,UAAU,CAACnyF,IAAI,WAAWkyF,IAAG,CAAE,IAAI98F,OAAOg9F,iBAAiB,OAAOD,GAAGA,IAAI/8F,OAAOi9F,oBAAoB,OAAOF,GAAGA,GAAG,CAAC,MAAMnU,IAAGkU,IAAG,CAAE,CAAC,SAASI,GAAGtU,EAAE4H,EAAEz2E,EAAEo3E,EAAE1vF,EAAEmmF,EAAEwJ,EAAE4C,EAAE7J,GAAG,IAAIp6E,EAAEhN,MAAMmG,UAAUpG,MAAM6F,KAAKoL,UAAU,GAAG,IAAIy8E,EAAE5uF,MAAMmY,EAAEhK,EAAE,CAAC,MAAMw6E,GAAGzgF,KAAKqzF,QAAQ5S,EAAE,CAAC,CAAC,IAAI6S,IAAG,EAAGC,GAAG,KAAKC,IAAG,EAAGC,GAAG,KAAKC,GAAG,CAACL,QAAQ,SAASvU,GAAGwU,IAAG,EAAGC,GAAGzU,CAAC,GAAG,SAAS6U,GAAG7U,EAAE4H,EAAEz2E,EAAEo3E,EAAE1vF,EAAEmmF,EAAEwJ,EAAE4C,EAAE7J,GAAGiT,IAAG,EAAGC,GAAG,KAAKH,GAAGt7F,MAAM47F,GAAGzpF,UAAU,CACjW,SAAS2pF,GAAG9U,GAAG,IAAI4H,EAAE5H,EAAE7uE,EAAE6uE,EAAE,GAAGA,EAAE+U,UAAU,KAAKnN,EAAEoN,QAAQpN,EAAEA,EAAEoN,WAAW,CAAChV,EAAE4H,EAAE,GAAO,KAAa,MAAjBA,EAAE5H,GAASwD,SAAcryE,EAAEy2E,EAAEoN,QAAQhV,EAAE4H,EAAEoN,aAAahV,EAAE,CAAC,OAAO,IAAI4H,EAAE4D,IAAIr6E,EAAE,IAAI,CAAC,SAAS8jF,GAAGjV,GAAG,GAAG,KAAKA,EAAEwL,IAAI,CAAC,IAAI5D,EAAE5H,EAAEkV,cAAsE,GAAxD,OAAOtN,IAAkB,QAAd5H,EAAEA,EAAE+U,aAAqBnN,EAAE5H,EAAEkV,gBAAmB,OAAOtN,EAAE,OAAOA,EAAEuN,UAAU,CAAC,OAAO,IAAI,CAAC,SAASC,GAAGpV,GAAG,GAAG8U,GAAG9U,KAAKA,EAAE,MAAMrlF,MAAMwS,EAAE,KAAM,CAE1S,SAASkoF,GAAGrV,GAAW,OAAO,QAAfA,EADtN,SAAYA,GAAG,IAAI4H,EAAE5H,EAAE+U,UAAU,IAAInN,EAAE,CAAS,GAAG,QAAXA,EAAEkN,GAAG9U,IAAe,MAAMrlF,MAAMwS,EAAE,MAAM,OAAOy6E,IAAI5H,EAAE,KAAKA,CAAC,CAAC,IAAI,IAAI7uE,EAAE6uE,EAAEuI,EAAEX,IAAI,CAAC,IAAI/uF,EAAEsY,EAAE6jF,OAAO,GAAG,OAAOn8F,EAAE,MAAM,IAAImmF,EAAEnmF,EAAEk8F,UAAU,GAAG,OAAO/V,EAAE,CAAY,GAAG,QAAduJ,EAAE1vF,EAAEm8F,QAAmB,CAAC7jF,EAAEo3E,EAAE,QAAQ,CAAC,KAAK,CAAC,GAAG1vF,EAAEiZ,QAAQktE,EAAEltE,MAAM,CAAC,IAAIktE,EAAEnmF,EAAEiZ,MAAMktE,GAAG,CAAC,GAAGA,IAAI7tE,EAAE,OAAOikF,GAAGv8F,GAAGmnF,EAAE,GAAGhB,IAAIuJ,EAAE,OAAO6M,GAAGv8F,GAAG+uF,EAAE5I,EAAEA,EAAEsW,OAAO,CAAC,MAAM36F,MAAMwS,EAAE,KAAM,CAAC,GAAGgE,EAAE6jF,SAASzM,EAAEyM,OAAO7jF,EAAEtY,EAAE0vF,EAAEvJ,MAAM,CAAC,IAAI,IAAIwJ,GAAE,EAAG4C,EAAEvyF,EAAEiZ,MAAMs5E,GAAG,CAAC,GAAGA,IAAIj6E,EAAE,CAACq3E,GAAE,EAAGr3E,EAAEtY,EAAE0vF,EAAEvJ,EAAE,KAAK,CAAC,GAAGoM,IAAI7C,EAAE,CAACC,GAAE,EAAGD,EAAE1vF,EAAEsY,EAAE6tE,EAAE,KAAK,CAACoM,EAAEA,EAAEkK,OAAO,CAAC,IAAI9M,EAAE,CAAC,IAAI4C,EAAEpM,EAAEltE,MAAMs5E,GAAG,CAAC,GAAGA,IAC5fj6E,EAAE,CAACq3E,GAAE,EAAGr3E,EAAE6tE,EAAEuJ,EAAE1vF,EAAE,KAAK,CAAC,GAAGuyF,IAAI7C,EAAE,CAACC,GAAE,EAAGD,EAAEvJ,EAAE7tE,EAAEtY,EAAE,KAAK,CAACuyF,EAAEA,EAAEkK,OAAO,CAAC,IAAI9M,EAAE,MAAM7tF,MAAMwS,EAAE,KAAM,CAAC,CAAC,GAAGgE,EAAE4jF,YAAYxM,EAAE,MAAM5tF,MAAMwS,EAAE,KAAM,CAAC,GAAG,IAAIgE,EAAEq6E,IAAI,MAAM7wF,MAAMwS,EAAE,MAAM,OAAOgE,EAAEsiF,UAAUlpF,UAAU4G,EAAE6uE,EAAE4H,CAAC,CAAkB2N,CAAGvV,IAAmBwV,GAAGxV,GAAG,IAAI,CAAC,SAASwV,GAAGxV,GAAG,GAAG,IAAIA,EAAEwL,KAAK,IAAIxL,EAAEwL,IAAI,OAAOxL,EAAE,IAAIA,EAAEA,EAAEluE,MAAM,OAAOkuE,GAAG,CAAC,IAAI4H,EAAE4N,GAAGxV,GAAG,GAAG,OAAO4H,EAAE,OAAOA,EAAE5H,EAAEA,EAAEsV,OAAO,CAAC,OAAO,IAAI,CAC1X,IAAIxvF,GAAG6hF,EAAG8N,0BAA0BC,GAAG/N,EAAGgO,wBAAwBC,GAAGjO,EAAGkO,qBAAqBC,GAAGnO,EAAGoO,sBAAsBC,GAAErO,EAAGsO,aAAaC,GAAGvO,EAAGwO,iCAAiCC,GAAGzO,EAAG0O,2BAA2BC,GAAG3O,EAAG4O,8BAA8BC,GAAG7O,EAAG8O,wBAAwBjwD,GAAGmhD,EAAG+O,qBAAqBC,GAAGhP,EAAGiP,sBAAsBC,GAAG,KAAKC,GAAG,KACvV,IAAIlyF,GAAGJ,KAAKuyF,MAAMvyF,KAAKuyF,MAAiC,SAAY/W,GAAU,OAAPA,KAAK,EAAS,IAAIA,EAAE,GAAG,IAAIgX,GAAGhX,GAAGiX,GAAG,GAAG,CAAC,EAA/ED,GAAGxyF,KAAK0yF,IAAID,GAAGzyF,KAAK2yF,IAA4D,IAAIC,GAAG,GAAGv3B,GAAG,QAC7H,SAASw3B,GAAGrX,GAAG,OAAOA,GAAGA,GAAG,KAAK,EAAE,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE,KAAK,GAAG,OAAO,GAAG,KAAK,GAAG,OAAO,GAAG,KAAK,GAAG,KAAK,IAAI,KAAK,IAAI,KAAK,IAAI,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,MAAM,KAAK,MAAM,KAAK,MAAM,KAAK,OAAO,KAAK,OAAO,KAAK,OAAO,KAAK,QAAQ,KAAK,QAAQ,OAAS,QAAFA,EAAU,KAAK,QAAQ,KAAK,QAAQ,KAAK,SAAS,KAAK,SAAS,KAAK,SAAS,OAAS,UAAFA,EAAY,KAAK,UAAU,OAAO,UAAU,KAAK,UAAU,OAAO,UAAU,KAAK,UAAU,OAAO,UAAU,KAAK,WAAW,OAAO,WACzgB,QAAQ,OAAOA,EAAE,CAAC,SAASsX,GAAGtX,EAAE4H,GAAG,IAAIz2E,EAAE6uE,EAAEuX,aAAa,GAAG,IAAIpmF,EAAE,OAAO,EAAE,IAAIo3E,EAAE,EAAE1vF,EAAEmnF,EAAEwX,eAAexY,EAAEgB,EAAEyX,YAAYjP,EAAI,UAAFr3E,EAAY,GAAG,IAAIq3E,EAAE,CAAC,IAAI4C,EAAE5C,GAAG3vF,EAAE,IAAIuyF,EAAE7C,EAAE8O,GAAGjM,GAAS,KAALpM,GAAGwJ,KAAUD,EAAE8O,GAAGrY,GAAI,MAAa,KAAPwJ,EAAEr3E,GAAGtY,GAAQ0vF,EAAE8O,GAAG7O,GAAG,IAAIxJ,IAAIuJ,EAAE8O,GAAGrY,IAAI,GAAG,IAAIuJ,EAAE,OAAO,EAAE,GAAG,IAAIX,GAAGA,IAAIW,GAAG,KAAKX,EAAE/uF,MAAKA,EAAE0vF,GAAGA,KAAEvJ,EAAE4I,GAAGA,IAAQ,KAAK/uF,GAAG,KAAO,QAAFmmF,IAAY,OAAO4I,EAA0C,GAAxC,KAAO,EAAFW,KAAOA,GAAK,GAAFp3E,GAA4B,KAAtBy2E,EAAE5H,EAAE0X,gBAAwB,IAAI1X,EAAEA,EAAE2X,cAAc/P,GAAGW,EAAE,EAAEX,GAAc/uF,EAAE,IAAbsY,EAAE,GAAGvM,GAAGgjF,IAAUW,GAAGvI,EAAE7uE,GAAGy2E,IAAI/uF,EAAE,OAAO0vF,CAAC,CACvc,SAASqP,GAAG5X,EAAE4H,GAAG,OAAO5H,GAAG,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,OAAO4H,EAAE,IAAI,KAAK,EAAE,KAAK,GAAG,KAAK,GAAG,KAAK,GAAG,KAAK,IAAI,KAAK,IAAI,KAAK,IAAI,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,MAAM,KAAK,MAAM,KAAK,MAAM,KAAK,OAAO,KAAK,OAAO,KAAK,OAAO,KAAK,QAAQ,KAAK,QAAQ,OAAOA,EAAE,IAAuJ,QAAQ,OAAO,EAAE,CACrN,SAASiQ,GAAG7X,GAAgC,OAAO,KAApCA,GAAkB,WAAhBA,EAAEuX,cAAsCvX,EAAI,WAAFA,EAAa,WAAW,CAAC,CAAC,SAAS8X,KAAK,IAAI9X,EAAEoX,GAAoC,OAA1B,KAAQ,SAAfA,KAAK,MAAqBA,GAAG,IAAWpX,CAAC,CAAC,SAAS+X,GAAG/X,GAAG,IAAI,IAAI4H,EAAE,GAAGz2E,EAAE,EAAE,GAAGA,EAAEA,IAAIy2E,EAAEvtF,KAAK2lF,GAAG,OAAO4H,CAAC,CAC3a,SAASoQ,GAAGhY,EAAE4H,EAAEz2E,GAAG6uE,EAAEuX,cAAc3P,EAAE,YAAYA,IAAI5H,EAAEwX,eAAe,EAAExX,EAAEyX,YAAY,IAAGzX,EAAEA,EAAEiY,YAAWrQ,EAAE,GAAGhjF,GAAGgjF,IAAQz2E,CAAC,CACzH,SAAS+mF,GAAGlY,EAAE4H,GAAG,IAAIz2E,EAAE6uE,EAAE0X,gBAAgB9P,EAAE,IAAI5H,EAAEA,EAAE2X,cAAcxmF,GAAG,CAAC,IAAIo3E,EAAE,GAAG3jF,GAAGuM,GAAGtY,EAAE,GAAG0vF,EAAE1vF,EAAE+uF,EAAE5H,EAAEuI,GAAGX,IAAI5H,EAAEuI,IAAIX,GAAGz2E,IAAItY,CAAC,CAAC,CAAC,IAAIs/F,GAAE,EAAE,SAASC,GAAGpY,GAAS,OAAO,GAAbA,IAAIA,GAAa,EAAEA,EAAE,KAAO,UAAFA,GAAa,GAAG,UAAU,EAAE,CAAC,CAAC,IAAIqY,GAAGC,GAAGC,GAAGC,GAAGC,GAAGC,IAAG,EAAGC,GAAG,GAAGC,GAAG,KAAKC,GAAG,KAAKC,GAAG,KAAKC,GAAG,IAAI33F,IAAI43F,GAAG,IAAI53F,IAAI63F,GAAG,GAAGC,GAAG,6PAA6P/gG,MAAM,KAChiB,SAASynE,GAAGogB,EAAE4H,GAAG,OAAO5H,GAAG,IAAK,UAAU,IAAK,WAAW4Y,GAAG,KAAK,MAAM,IAAK,YAAY,IAAK,YAAYC,GAAG,KAAK,MAAM,IAAK,YAAY,IAAK,WAAWC,GAAG,KAAK,MAAM,IAAK,cAAc,IAAK,aAAaC,GAAG52F,OAAOylF,EAAEuR,WAAW,MAAM,IAAK,oBAAoB,IAAK,qBAAqBH,GAAG72F,OAAOylF,EAAEuR,WAAW,CACnT,SAASC,GAAGpZ,EAAE4H,EAAEz2E,EAAEo3E,EAAE1vF,EAAEmmF,GAAG,OAAG,OAAOgB,GAAGA,EAAEqZ,cAAcra,GAASgB,EAAE,CAACsZ,UAAU1R,EAAE2R,aAAapoF,EAAEqoF,iBAAiBjR,EAAE8Q,YAAYra,EAAEya,iBAAiB,CAAC5gG,IAAI,OAAO+uF,IAAY,QAARA,EAAE4L,GAAG5L,KAAa0Q,GAAG1Q,IAAI5H,IAAEA,EAAEwZ,kBAAkBjR,EAAEX,EAAE5H,EAAEyZ,iBAAiB,OAAO5gG,IAAI,IAAI+uF,EAAE5tF,QAAQnB,IAAI+uF,EAAEvtF,KAAKxB,GAAUmnF,EAAC,CAEpR,SAAS0Z,GAAG1Z,GAAG,IAAI4H,EAAE+R,GAAG3Z,EAAEv6E,QAAQ,GAAG,OAAOmiF,EAAE,CAAC,IAAIz2E,EAAE2jF,GAAGlN,GAAG,GAAG,OAAOz2E,EAAE,GAAW,MAARy2E,EAAEz2E,EAAEq6E,MAAY,GAAW,QAAR5D,EAAEqN,GAAG9jF,IAA4D,OAA/C6uE,EAAEsZ,UAAU1R,OAAE6Q,GAAGzY,EAAE4Z,UAAS,WAAWrB,GAAGpnF,EAAE,SAAgB,GAAG,IAAIy2E,GAAGz2E,EAAEsiF,UAAUlpF,QAAQ2qF,cAAc2E,aAAmE,YAArD7Z,EAAEsZ,UAAU,IAAInoF,EAAEq6E,IAAIr6E,EAAEsiF,UAAUqG,cAAc,KAAY,CAAC9Z,EAAEsZ,UAAU,IAAI,CAClT,SAASS,GAAG/Z,GAAG,GAAG,OAAOA,EAAEsZ,UAAU,OAAM,EAAG,IAAI,IAAI1R,EAAE5H,EAAEyZ,iBAAiB,EAAE7R,EAAEroF,QAAQ,CAAC,IAAI4R,EAAE6oF,GAAGha,EAAEuZ,aAAavZ,EAAEwZ,iBAAiB5R,EAAE,GAAG5H,EAAEqZ,aAAa,GAAG,OAAOloF,EAAiG,OAAe,QAARy2E,EAAE4L,GAAGriF,KAAamnF,GAAG1Q,GAAG5H,EAAEsZ,UAAUnoF,GAAE,EAA3H,IAAIo3E,EAAE,IAAtBp3E,EAAE6uE,EAAEqZ,aAAwB74F,YAAY2Q,EAAE5Y,KAAK4Y,GAAG6hF,GAAGzK,EAAEp3E,EAAE1L,OAAOw0F,cAAc1R,GAAGyK,GAAG,KAA0DpL,EAAEsS,OAAO,CAAC,OAAM,CAAE,CAAC,SAASC,GAAGna,EAAE4H,EAAEz2E,GAAG4oF,GAAG/Z,IAAI7uE,EAAEhP,OAAOylF,EAAE,CAAC,SAASwS,KAAK1B,IAAG,EAAG,OAAOE,IAAImB,GAAGnB,MAAMA,GAAG,MAAM,OAAOC,IAAIkB,GAAGlB,MAAMA,GAAG,MAAM,OAAOC,IAAIiB,GAAGjB,MAAMA,GAAG,MAAMC,GAAGl/F,QAAQsgG,IAAInB,GAAGn/F,QAAQsgG,GAAG,CACnf,SAASE,GAAGra,EAAE4H,GAAG5H,EAAEsZ,YAAY1R,IAAI5H,EAAEsZ,UAAU,KAAKZ,KAAKA,IAAG,EAAG/Q,EAAG8N,0BAA0B9N,EAAG8O,wBAAwB2D,KAAK,CAC5H,SAASE,GAAGta,GAAG,SAAS4H,EAAEA,GAAG,OAAOyS,GAAGzS,EAAE5H,EAAE,CAAC,GAAG,EAAE2Y,GAAGp5F,OAAO,CAAC86F,GAAG1B,GAAG,GAAG3Y,GAAG,IAAI,IAAI7uE,EAAE,EAAEA,EAAEwnF,GAAGp5F,OAAO4R,IAAI,CAAC,IAAIo3E,EAAEoQ,GAAGxnF,GAAGo3E,EAAE+Q,YAAYtZ,IAAIuI,EAAE+Q,UAAU,KAAK,CAAC,CAAyF,IAAxF,OAAOV,IAAIyB,GAAGzB,GAAG5Y,GAAG,OAAO6Y,IAAIwB,GAAGxB,GAAG7Y,GAAG,OAAO8Y,IAAIuB,GAAGvB,GAAG9Y,GAAG+Y,GAAGl/F,QAAQ+tF,GAAGoR,GAAGn/F,QAAQ+tF,GAAOz2E,EAAE,EAAEA,EAAE8nF,GAAG15F,OAAO4R,KAAIo3E,EAAE0Q,GAAG9nF,IAAKmoF,YAAYtZ,IAAIuI,EAAE+Q,UAAU,MAAM,KAAK,EAAEL,GAAG15F,QAAiB,QAAR4R,EAAE8nF,GAAG,IAAYK,WAAYI,GAAGvoF,GAAG,OAAOA,EAAEmoF,WAAWL,GAAGiB,OAAO,CAAC,IAAIK,GAAG9Q,EAAG+Q,wBAAwBhqE,IAAG,EAC5a,SAASiqE,GAAGza,EAAE4H,EAAEz2E,EAAEo3E,GAAG,IAAI1vF,EAAEs/F,GAAEnZ,EAAEub,GAAGG,WAAWH,GAAGG,WAAW,KAAK,IAAIvC,GAAE,EAAEwC,GAAG3a,EAAE4H,EAAEz2E,EAAEo3E,EAAE,CAAC,QAAQ4P,GAAEt/F,EAAE0hG,GAAGG,WAAW1b,CAAC,CAAC,CAAC,SAAS4b,GAAG5a,EAAE4H,EAAEz2E,EAAEo3E,GAAG,IAAI1vF,EAAEs/F,GAAEnZ,EAAEub,GAAGG,WAAWH,GAAGG,WAAW,KAAK,IAAIvC,GAAE,EAAEwC,GAAG3a,EAAE4H,EAAEz2E,EAAEo3E,EAAE,CAAC,QAAQ4P,GAAEt/F,EAAE0hG,GAAGG,WAAW1b,CAAC,CAAC,CACjO,SAAS2b,GAAG3a,EAAE4H,EAAEz2E,EAAEo3E,GAAG,GAAG/3D,GAAG,CAAC,IAAI33B,EAAEmhG,GAAGha,EAAE4H,EAAEz2E,EAAEo3E,GAAG,GAAG,OAAO1vF,EAAEgiG,GAAG7a,EAAE4H,EAAEW,EAAE3wE,GAAGzG,GAAGyuD,GAAGogB,EAAEuI,QAAQ,GANtF,SAAYvI,EAAE4H,EAAEz2E,EAAEo3E,EAAE1vF,GAAG,OAAO+uF,GAAG,IAAK,UAAU,OAAOgR,GAAGQ,GAAGR,GAAG5Y,EAAE4H,EAAEz2E,EAAEo3E,EAAE1vF,IAAG,EAAG,IAAK,YAAY,OAAOggG,GAAGO,GAAGP,GAAG7Y,EAAE4H,EAAEz2E,EAAEo3E,EAAE1vF,IAAG,EAAG,IAAK,YAAY,OAAOigG,GAAGM,GAAGN,GAAG9Y,EAAE4H,EAAEz2E,EAAEo3E,EAAE1vF,IAAG,EAAG,IAAK,cAAc,IAAImmF,EAAEnmF,EAAEsgG,UAAkD,OAAxCJ,GAAGl3F,IAAIm9E,EAAEoa,GAAGL,GAAG/2F,IAAIg9E,IAAI,KAAKgB,EAAE4H,EAAEz2E,EAAEo3E,EAAE1vF,KAAU,EAAG,IAAK,oBAAoB,OAAOmmF,EAAEnmF,EAAEsgG,UAAUH,GAAGn3F,IAAIm9E,EAAEoa,GAAGJ,GAAGh3F,IAAIg9E,IAAI,KAAKgB,EAAE4H,EAAEz2E,EAAEo3E,EAAE1vF,KAAI,EAAG,OAAM,CAAE,CAM1QiiG,CAAGjiG,EAAEmnF,EAAE4H,EAAEz2E,EAAEo3E,GAAGA,EAAEwS,uBAAuB,GAAGn7B,GAAGogB,EAAEuI,GAAK,EAAFX,IAAM,EAAEsR,GAAGl/F,QAAQgmF,GAAG,CAAC,KAAK,OAAOnnF,GAAG,CAAC,IAAImmF,EAAEwU,GAAG36F,GAA0D,GAAvD,OAAOmmF,GAAGqZ,GAAGrZ,GAAiB,QAAdA,EAAEgb,GAAGha,EAAE4H,EAAEz2E,EAAEo3E,KAAasS,GAAG7a,EAAE4H,EAAEW,EAAE3wE,GAAGzG,GAAM6tE,IAAInmF,EAAE,MAAMA,EAAEmmF,CAAC,CAAC,OAAOnmF,GAAG0vF,EAAEwS,iBAAiB,MAAMF,GAAG7a,EAAE4H,EAAEW,EAAE,KAAKp3E,EAAE,CAAC,CAAC,IAAIyG,GAAG,KACpU,SAASoiF,GAAGha,EAAE4H,EAAEz2E,EAAEo3E,GAA2B,GAAxB3wE,GAAG,KAAwB,QAAXooE,EAAE2Z,GAAV3Z,EAAEiT,GAAG1K,KAAuB,GAAW,QAARX,EAAEkN,GAAG9U,IAAYA,EAAE,UAAU,GAAW,MAAR7uE,EAAEy2E,EAAE4D,KAAW,CAAS,GAAG,QAAXxL,EAAEiV,GAAGrN,IAAe,OAAO5H,EAAEA,EAAE,IAAI,MAAM,GAAG,IAAI7uE,EAAE,CAAC,GAAGy2E,EAAE6L,UAAUlpF,QAAQ2qF,cAAc2E,aAAa,OAAO,IAAIjS,EAAE4D,IAAI5D,EAAE6L,UAAUqG,cAAc,KAAK9Z,EAAE,IAAI,MAAM4H,IAAI5H,IAAIA,EAAE,MAAW,OAALpoE,GAAGooE,EAAS,IAAI,CAC7S,SAASgb,GAAGhb,GAAG,OAAOA,GAAG,IAAK,SAAS,IAAK,QAAQ,IAAK,QAAQ,IAAK,cAAc,IAAK,OAAO,IAAK,MAAM,IAAK,WAAW,IAAK,WAAW,IAAK,UAAU,IAAK,YAAY,IAAK,OAAO,IAAK,UAAU,IAAK,WAAW,IAAK,QAAQ,IAAK,UAAU,IAAK,UAAU,IAAK,WAAW,IAAK,QAAQ,IAAK,YAAY,IAAK,UAAU,IAAK,QAAQ,IAAK,QAAQ,IAAK,OAAO,IAAK,gBAAgB,IAAK,cAAc,IAAK,YAAY,IAAK,aAAa,IAAK,QAAQ,IAAK,SAAS,IAAK,SAAS,IAAK,SAAS,IAAK,cAAc,IAAK,WAAW,IAAK,aAAa,IAAK,eAAe,IAAK,SAAS,IAAK,kBAAkB,IAAK,YAAY,IAAK,mBAAmB,IAAK,iBAAiB,IAAK,oBAAoB,IAAK,aAAa,IAAK,YAAY,IAAK,cAAc,IAAK,OAAO,IAAK,mBAAmB,IAAK,QAAQ,IAAK,aAAa,IAAK,WAAW,IAAK,SAAS,IAAK,cAAc,OAAO,EAAE,IAAK,OAAO,IAAK,YAAY,IAAK,WAAW,IAAK,YAAY,IAAK,WAAW,IAAK,YAAY,IAAK,WAAW,IAAK,YAAY,IAAK,cAAc,IAAK,aAAa,IAAK,cAAc,IAAK,SAAS,IAAK,SAAS,IAAK,YAAY,IAAK,QAAQ,IAAK,aAAa,IAAK,aAAa,IAAK,eAAe,IAAK,eAAe,OAAO,EACpqC,IAAK,UAAU,OAAOkW,MAAM,KAAKE,GAAG,OAAO,EAAE,KAAKE,GAAG,OAAO,EAAE,KAAKE,GAAG,KAAKhwD,GAAG,OAAO,GAAG,KAAKmwD,GAAG,OAAO,UAAU,QAAQ,OAAO,GAAG,QAAQ,OAAO,GAAG,CAAC,IAAIsE,GAAG,KAAKC,GAAG,KAAKC,GAAG,KAAK,SAASC,KAAK,GAAGD,GAAG,OAAOA,GAAG,IAAInb,EAAkBuI,EAAhBX,EAAEsT,GAAG/pF,EAAEy2E,EAAEroF,OAAS1G,EAAE,UAAUoiG,GAAGA,GAAGziG,MAAMyiG,GAAG5M,YAAYrP,EAAEnmF,EAAE0G,OAAO,IAAIygF,EAAE,EAAEA,EAAE7uE,GAAGy2E,EAAE5H,KAAKnnF,EAAEmnF,GAAGA,KAAK,IAAIwI,EAAEr3E,EAAE6uE,EAAE,IAAIuI,EAAE,EAAEA,GAAGC,GAAGZ,EAAEz2E,EAAEo3E,KAAK1vF,EAAEmmF,EAAEuJ,GAAGA,KAAK,OAAO4S,GAAGtiG,EAAEqB,MAAM8lF,EAAE,EAAEuI,EAAE,EAAEA,OAAE,EAAO,CACxY,SAAS8S,GAAGrb,GAAG,IAAI4H,EAAE5H,EAAEsb,QAA+E,MAAvE,aAAatb,EAAgB,KAAbA,EAAEA,EAAEub,WAAgB,KAAK3T,IAAI5H,EAAE,IAAKA,EAAE4H,EAAE,KAAK5H,IAAIA,EAAE,IAAW,IAAIA,GAAG,KAAKA,EAAEA,EAAE,CAAC,CAAC,SAASwb,KAAK,OAAM,CAAE,CAAC,SAASC,KAAK,OAAM,CAAE,CAC5K,SAASC,GAAG1b,GAAG,SAAS4H,EAAEA,EAAEW,EAAE1vF,EAAEmmF,EAAEwJ,GAA6G,IAAI,IAAIr3E,KAAlHjQ,KAAKy6F,WAAW/T,EAAE1mF,KAAK06F,YAAY/iG,EAAEqI,KAAK3I,KAAKgwF,EAAErnF,KAAKm4F,YAAYra,EAAE99E,KAAKuE,OAAO+iF,EAAEtnF,KAAK26F,cAAc,KAAkB7b,EAAEA,EAAEjhF,eAAeoS,KAAKy2E,EAAE5H,EAAE7uE,GAAGjQ,KAAKiQ,GAAGy2E,EAAEA,EAAE5I,GAAGA,EAAE7tE,IAAgI,OAA5HjQ,KAAK46F,oBAAoB,MAAM9c,EAAE+c,iBAAiB/c,EAAE+c,kBAAiB,IAAK/c,EAAEgd,aAAaR,GAAGC,GAAGv6F,KAAK+6F,qBAAqBR,GAAUv6F,IAAI,CAC9E,OAD+E0pF,EAAEhD,EAAEtnF,UAAU,CAAC47F,eAAe,WAAWh7F,KAAK66F,kBAAiB,EAAG,IAAI/b,EAAE9+E,KAAKm4F,YAAYrZ,IAAIA,EAAEkc,eAAelc,EAAEkc,iBAAiB,mBAAmBlc,EAAEgc,cAC7ehc,EAAEgc,aAAY,GAAI96F,KAAK46F,mBAAmBN,GAAG,EAAET,gBAAgB,WAAW,IAAI/a,EAAE9+E,KAAKm4F,YAAYrZ,IAAIA,EAAE+a,gBAAgB/a,EAAE+a,kBAAkB,mBAAmB/a,EAAEmc,eAAenc,EAAEmc,cAAa,GAAIj7F,KAAK+6F,qBAAqBT,GAAG,EAAEY,QAAQ,WAAW,EAAEC,aAAab,KAAY5T,CAAC,CACjR,IAAoL0U,GAAGC,GAAGC,GAAtLC,GAAG,CAACC,WAAW,EAAEC,QAAQ,EAAEC,WAAW,EAAEC,UAAU,SAAS7c,GAAG,OAAOA,EAAE6c,WAAWC,KAAKC,KAAK,EAAEhB,iBAAiB,EAAEiB,UAAU,GAAGC,GAAGvB,GAAGe,IAAIS,GAAGtS,EAAE,CAAC,EAAE6R,GAAG,CAACtZ,KAAK,EAAEga,OAAO,IAAIC,GAAG1B,GAAGwB,IAAaG,GAAGzS,EAAE,CAAC,EAAEsS,GAAG,CAACI,QAAQ,EAAEC,QAAQ,EAAEC,QAAQ,EAAEC,QAAQ,EAAEC,MAAM,EAAEC,MAAM,EAAEC,QAAQ,EAAEC,SAAS,EAAEC,OAAO,EAAEC,QAAQ,EAAEC,iBAAiBC,GAAGC,OAAO,EAAEC,QAAQ,EAAEC,cAAc,SAASpe,GAAG,YAAO,IAASA,EAAEoe,cAAcpe,EAAEqe,cAAcre,EAAEkT,WAAWlT,EAAEse,UAAUte,EAAEqe,YAAYre,EAAEoe,aAAa,EAAEG,UAAU,SAASve,GAAG,MAAG,cAC3eA,EAASA,EAAEue,WAAUve,IAAIwc,KAAKA,IAAI,cAAcxc,EAAEznF,MAAM+jG,GAAGtc,EAAEsd,QAAQd,GAAGc,QAAQf,GAAGvc,EAAEud,QAAQf,GAAGe,SAAShB,GAAGD,GAAG,EAAEE,GAAGxc,GAAUsc,GAAE,EAAEkC,UAAU,SAASxe,GAAG,MAAM,cAAcA,EAAEA,EAAEwe,UAAUjC,EAAE,IAAIkC,GAAG/C,GAAG2B,IAAiCqB,GAAGhD,GAA7B9Q,EAAE,CAAC,EAAEyS,GAAG,CAACsB,aAAa,KAA4CC,GAAGlD,GAA9B9Q,EAAE,CAAC,EAAEsS,GAAG,CAACkB,cAAc,KAA0ES,GAAGnD,GAA5D9Q,EAAE,CAAC,EAAE6R,GAAG,CAACqC,cAAc,EAAEC,YAAY,EAAEC,cAAc,KAAcC,GAAGrU,EAAE,CAAC,EAAE6R,GAAG,CAACyC,cAAc,SAASlf,GAAG,MAAM,kBAAkBA,EAAEA,EAAEkf,cAAc9nG,OAAO8nG,aAAa,IAAIC,GAAGzD,GAAGuD,IAAyBG,GAAG1D,GAArB9Q,EAAE,CAAC,EAAE6R,GAAG,CAAC5+F,KAAK,KAAcwhG,GAAG,CAACC,IAAI,SACxfC,SAAS,IAAIC,KAAK,YAAYC,GAAG,UAAUC,MAAM,aAAaC,KAAK,YAAY7uE,IAAI,SAAS8uE,IAAI,KAAKC,KAAK,cAAcC,KAAK,cAAcC,OAAO,aAAaC,gBAAgB,gBAAgBC,GAAG,CAAC,EAAE,YAAY,EAAE,MAAM,GAAG,QAAQ,GAAG,QAAQ,GAAG,QAAQ,GAAG,UAAU,GAAG,MAAM,GAAG,QAAQ,GAAG,WAAW,GAAG,SAAS,GAAG,IAAI,GAAG,SAAS,GAAG,WAAW,GAAG,MAAM,GAAG,OAAO,GAAG,YAAY,GAAG,UAAU,GAAG,aAAa,GAAG,YAAY,GAAG,SAAS,GAAG,SAAS,IAAI,KAAK,IAAI,KAAK,IAAI,KAAK,IAAI,KAAK,IAAI,KAAK,IAAI,KAAK,IAAI,KACtf,IAAI,KAAK,IAAI,KAAK,IAAI,MAAM,IAAI,MAAM,IAAI,MAAM,IAAI,UAAU,IAAI,aAAa,IAAI,QAAQC,GAAG,CAACC,IAAI,SAASC,QAAQ,UAAUC,KAAK,UAAUC,MAAM,YAAY,SAASC,GAAGvgB,GAAG,IAAI4H,EAAE1mF,KAAKm4F,YAAY,OAAOzR,EAAEoW,iBAAiBpW,EAAEoW,iBAAiBhe,MAAIA,EAAEkgB,GAAGlgB,OAAM4H,EAAE5H,EAAK,CAAC,SAASie,KAAK,OAAOsC,EAAE,CAChS,IAAIC,GAAG5V,EAAE,CAAC,EAAEsS,GAAG,CAACjjG,IAAI,SAAS+lF,GAAG,GAAGA,EAAE/lF,IAAI,CAAC,IAAI2tF,EAAEyX,GAAGrf,EAAE/lF,MAAM+lF,EAAE/lF,IAAI,GAAG,iBAAiB2tF,EAAE,OAAOA,CAAC,CAAC,MAAM,aAAa5H,EAAEznF,KAAc,MAARynF,EAAEqb,GAAGrb,IAAU,QAAQlnF,OAAOC,aAAainF,GAAI,YAAYA,EAAEznF,MAAM,UAAUynF,EAAEznF,KAAK0nG,GAAGjgB,EAAEsb,UAAU,eAAe,EAAE,EAAEz8F,KAAK,EAAEunF,SAAS,EAAEwX,QAAQ,EAAEC,SAAS,EAAEC,OAAO,EAAEC,QAAQ,EAAE0C,OAAO,EAAEC,OAAO,EAAE1C,iBAAiBC,GAAG1C,SAAS,SAASvb,GAAG,MAAM,aAAaA,EAAEznF,KAAK8iG,GAAGrb,GAAG,CAAC,EAAEsb,QAAQ,SAAStb,GAAG,MAAM,YAAYA,EAAEznF,MAAM,UAAUynF,EAAEznF,KAAKynF,EAAEsb,QAAQ,CAAC,EAAEqF,MAAM,SAAS3gB,GAAG,MAAM,aAC7eA,EAAEznF,KAAK8iG,GAAGrb,GAAG,YAAYA,EAAEznF,MAAM,UAAUynF,EAAEznF,KAAKynF,EAAEsb,QAAQ,CAAC,IAAIsF,GAAGlF,GAAG8E,IAAiIK,GAAGnF,GAA7H9Q,EAAE,CAAC,EAAEyS,GAAG,CAAClE,UAAU,EAAE2H,MAAM,EAAEC,OAAO,EAAEC,SAAS,EAAEC,mBAAmB,EAAEC,MAAM,EAAEC,MAAM,EAAEC,MAAM,EAAEC,YAAY,EAAEC,UAAU,KAAmIC,GAAG7F,GAArH9Q,EAAE,CAAC,EAAEsS,GAAG,CAACsE,QAAQ,EAAEC,cAAc,EAAEC,eAAe,EAAE5D,OAAO,EAAEC,QAAQ,EAAEH,QAAQ,EAAEC,SAAS,EAAEG,iBAAiBC,MAA0E0D,GAAGjG,GAA3D9Q,EAAE,CAAC,EAAE6R,GAAG,CAAC5T,aAAa,EAAEkW,YAAY,EAAEC,cAAc,KAAc4C,GAAGhX,EAAE,CAAC,EAAEyS,GAAG,CAACwE,OAAO,SAAS7hB,GAAG,MAAM,WAAWA,EAAEA,EAAE6hB,OAAO,gBAAgB7hB,GAAGA,EAAE8hB,YAAY,CAAC,EACnfC,OAAO,SAAS/hB,GAAG,MAAM,WAAWA,EAAEA,EAAE+hB,OAAO,gBAAgB/hB,GAAGA,EAAEgiB,YAAY,eAAehiB,GAAGA,EAAEiiB,WAAW,CAAC,EAAEC,OAAO,EAAEC,UAAU,IAAIC,GAAG1G,GAAGkG,IAAIS,GAAG,CAAC,EAAE,GAAG,GAAG,IAAIC,GAAGpa,GAAI,qBAAqB9wF,OAAOmrG,GAAG,KAAKra,GAAI,iBAAiBvF,WAAW4f,GAAG5f,SAAS6f,cAAc,IAAIC,GAAGva,GAAI,cAAc9wF,SAASmrG,GAAGG,GAAGxa,KAAMoa,IAAIC,IAAI,EAAEA,IAAI,IAAIA,IAAI1qE,GAAG/+B,OAAOC,aAAa,IAAI4pG,IAAG,EAC1W,SAAS5iE,GAAGigD,EAAE4H,GAAG,OAAO5H,GAAG,IAAK,QAAQ,OAAO,IAAIqiB,GAAGroG,QAAQ4tF,EAAE0T,SAAS,IAAK,UAAU,OAAO,MAAM1T,EAAE0T,QAAQ,IAAK,WAAW,IAAK,YAAY,IAAK,WAAW,OAAM,EAAG,QAAQ,OAAM,EAAG,CAAC,SAASsH,GAAG5iB,GAAc,MAAM,kBAAjBA,EAAEA,EAAEmd,SAAkC,SAASnd,EAAEA,EAAEniF,KAAK,IAAI,CAAC,IAAIglG,IAAG,EAE9Q,IAAIxyD,GAAG,CAACyyD,OAAM,EAAGC,MAAK,EAAGC,UAAS,EAAG,kBAAiB,EAAGC,OAAM,EAAGC,OAAM,EAAGrc,QAAO,EAAGnoF,UAAS,EAAGs4D,OAAM,EAAGmsC,QAAO,EAAGC,KAAI,EAAGppF,MAAK,EAAGqpF,MAAK,EAAGtoG,KAAI,EAAGuoG,MAAK,GAAI,SAASC,GAAGvjB,GAAG,IAAI4H,EAAE5H,GAAGA,EAAEjkF,UAAUikF,EAAEjkF,SAAS7D,cAAc,MAAM,UAAU0vF,IAAIv3C,GAAG2vC,EAAEznF,MAAM,aAAaqvF,CAAO,CAAC,SAASppC,GAAGwhC,EAAE4H,EAAEz2E,EAAEo3E,GAAGoL,GAAGpL,GAAsB,GAAnBX,EAAE4b,GAAG5b,EAAE,aAAgBroF,SAAS4R,EAAE,IAAI8rF,GAAG,WAAW,SAAS,KAAK9rF,EAAEo3E,GAAGvI,EAAE3lF,KAAK,CAACopG,MAAMtyF,EAAEuyF,UAAU9b,IAAI,CAAC,IAAI+b,GAAG,KAAKC,GAAG,KAAK,SAASC,GAAG7jB,GAAG8jB,GAAG9jB,EAAE,EAAE,CAAC,SAAS+jB,GAAG/jB,GAAe,GAAG0M,EAATsX,GAAGhkB,IAAY,OAAOA,CAAC,CACpe,SAASikB,GAAGjkB,EAAE4H,GAAG,GAAG,WAAW5H,EAAE,OAAO4H,CAAC,CAAC,IAAIsc,IAAG,EAAG,GAAGhc,EAAG,CAAC,IAAIic,GAAG,GAAGjc,EAAG,CAAC,IAAIkc,GAAG,YAAYzhB,SAAS,IAAIyhB,GAAG,CAAC,IAAIC,GAAG1hB,SAASpqE,cAAc,OAAO8rF,GAAGtrF,aAAa,UAAU,WAAWqrF,GAAG,oBAAoBC,GAAGC,OAAO,CAACH,GAAGC,EAAE,MAAMD,IAAG,EAAGD,GAAGC,MAAMxhB,SAAS6f,cAAc,EAAE7f,SAAS6f,aAAa,CAAC,SAAS+B,KAAKZ,KAAKA,GAAGa,YAAY,mBAAmBC,IAAIb,GAAGD,GAAG,KAAK,CAAC,SAASc,GAAGzkB,GAAG,GAAG,UAAUA,EAAE6I,cAAckb,GAAGH,IAAI,CAAC,IAAIhc,EAAE,GAAGppC,GAAGopC,EAAEgc,GAAG5jB,EAAEiT,GAAGjT,IAAIgU,GAAG6P,GAAGjc,EAAE,CAAC,CAC/b,SAAS8c,GAAG1kB,EAAE4H,EAAEz2E,GAAG,YAAY6uE,GAAGukB,KAAUX,GAAGzyF,GAARwyF,GAAG/b,GAAU+c,YAAY,mBAAmBF,KAAK,aAAazkB,GAAGukB,IAAI,CAAC,SAASK,GAAG5kB,GAAG,GAAG,oBAAoBA,GAAG,UAAUA,GAAG,YAAYA,EAAE,OAAO+jB,GAAGH,GAAG,CAAC,SAASiB,GAAG7kB,EAAE4H,GAAG,GAAG,UAAU5H,EAAE,OAAO+jB,GAAGnc,EAAE,CAAC,SAASkd,GAAG9kB,EAAE4H,GAAG,GAAG,UAAU5H,GAAG,WAAWA,EAAE,OAAO+jB,GAAGnc,EAAE,CAAiE,IAAImd,GAAG,oBAAoB1kG,OAAO0yF,GAAG1yF,OAAO0yF,GAA5G,SAAY/S,EAAE4H,GAAG,OAAO5H,IAAI4H,IAAI,IAAI5H,GAAG,EAAEA,IAAI,EAAE4H,IAAI5H,IAAIA,GAAG4H,IAAIA,CAAC,EACtW,SAASod,GAAGhlB,EAAE4H,GAAG,GAAGmd,GAAG/kB,EAAE4H,GAAG,OAAM,EAAG,GAAG,kBAAkB5H,GAAG,OAAOA,GAAG,kBAAkB4H,GAAG,OAAOA,EAAE,OAAM,EAAG,IAAIz2E,EAAE9Q,OAAO0M,KAAKizE,GAAGuI,EAAEloF,OAAO0M,KAAK66E,GAAG,GAAGz2E,EAAE5R,SAASgpF,EAAEhpF,OAAO,OAAM,EAAG,IAAIgpF,EAAE,EAAEA,EAAEp3E,EAAE5R,OAAOgpF,IAAI,CAAC,IAAI1vF,EAAEsY,EAAEo3E,GAAG,IAAIJ,EAAGpoF,KAAK6nF,EAAE/uF,KAAKksG,GAAG/kB,EAAEnnF,GAAG+uF,EAAE/uF,IAAI,OAAM,CAAE,CAAC,OAAM,CAAE,CAAC,SAASosG,GAAGjlB,GAAG,KAAKA,GAAGA,EAAE1uE,YAAY0uE,EAAEA,EAAE1uE,WAAW,OAAO0uE,CAAC,CACtU,SAASklB,GAAGllB,EAAE4H,GAAG,IAAwBW,EAApBp3E,EAAE8zF,GAAGjlB,GAAO,IAAJA,EAAE,EAAY7uE,GAAG,CAAC,GAAG,IAAIA,EAAEiB,SAAS,CAA0B,GAAzBm2E,EAAEvI,EAAE7uE,EAAEk9E,YAAY9uF,OAAUygF,GAAG4H,GAAGW,GAAGX,EAAE,MAAM,CAAC7gF,KAAKoK,EAAE0I,OAAO+tE,EAAE5H,GAAGA,EAAEuI,CAAC,CAACvI,EAAE,CAAC,KAAK7uE,GAAG,CAAC,GAAGA,EAAEI,YAAY,CAACJ,EAAEA,EAAEI,YAAY,MAAMyuE,CAAC,CAAC7uE,EAAEA,EAAE1G,UAAU,CAAC0G,OAAE,CAAM,CAACA,EAAE8zF,GAAG9zF,EAAE,CAAC,CAAC,SAASg0F,GAAGnlB,EAAE4H,GAAG,SAAO5H,IAAG4H,KAAE5H,IAAI4H,KAAK5H,GAAG,IAAIA,EAAE5tE,YAAYw1E,GAAG,IAAIA,EAAEx1E,SAAS+yF,GAAGnlB,EAAE4H,EAAEn9E,YAAY,aAAau1E,EAAEA,EAAEolB,SAASxd,KAAG5H,EAAEqlB,4BAAwD,GAA7BrlB,EAAEqlB,wBAAwBzd,KAAY,CAC9Z,SAAS0d,KAAK,IAAI,IAAItlB,EAAE5oF,OAAOwwF,EAAEgF,IAAKhF,aAAa5H,EAAEulB,mBAAmB,CAAC,IAAI,IAAIp0F,EAAE,kBAAkBy2E,EAAE4d,cAAcpf,SAASqf,IAAI,CAAC,MAAMld,GAAGp3E,GAAE,CAAE,CAAC,IAAGA,EAAyB,MAAMy2E,EAAEgF,GAA/B5M,EAAE4H,EAAE4d,eAAgC7iB,SAAS,CAAC,OAAOiF,CAAC,CAAC,SAAS8d,GAAG1lB,GAAG,IAAI4H,EAAE5H,GAAGA,EAAEjkF,UAAUikF,EAAEjkF,SAAS7D,cAAc,OAAO0vF,IAAI,UAAUA,IAAI,SAAS5H,EAAEznF,MAAM,WAAWynF,EAAEznF,MAAM,QAAQynF,EAAEznF,MAAM,QAAQynF,EAAEznF,MAAM,aAAaynF,EAAEznF,OAAO,aAAaqvF,GAAG,SAAS5H,EAAE2lB,gBAAgB,CACxa,SAASC,GAAG5lB,GAAG,IAAI4H,EAAE0d,KAAKn0F,EAAE6uE,EAAE6lB,YAAYtd,EAAEvI,EAAE8lB,eAAe,GAAGle,IAAIz2E,GAAGA,GAAGA,EAAElB,eAAek1F,GAAGh0F,EAAElB,cAAcnU,gBAAgBqV,GAAG,CAAC,GAAG,OAAOo3E,GAAGmd,GAAGv0F,GAAG,GAAGy2E,EAAEW,EAAEhhF,WAAc,KAARy4E,EAAEuI,EAAE3H,OAAiBZ,EAAE4H,GAAG,mBAAmBz2E,EAAEA,EAAE40F,eAAene,EAAEz2E,EAAE60F,aAAaxhG,KAAKyhG,IAAIjmB,EAAE7uE,EAAE3Y,MAAM+G,aAAa,IAAGygF,GAAG4H,EAAEz2E,EAAElB,eAAe0yE,WAAWiF,EAAEse,aAAa9uG,QAAS+uG,aAAa,CAACnmB,EAAEA,EAAEmmB,eAAe,IAAIttG,EAAEsY,EAAEk9E,YAAY9uF,OAAOy/E,EAAEx6E,KAAKyhG,IAAI1d,EAAEhhF,MAAM1O,GAAG0vF,OAAE,IAASA,EAAE3H,IAAI5B,EAAEx6E,KAAKyhG,IAAI1d,EAAE3H,IAAI/nF,IAAImnF,EAAEomB,QAAQpnB,EAAEuJ,IAAI1vF,EAAE0vF,EAAEA,EAAEvJ,EAAEA,EAAEnmF,GAAGA,EAAEqsG,GAAG/zF,EAAE6tE,GAAG,IAAIwJ,EAAE0c,GAAG/zF,EACvfo3E,GAAG1vF,GAAG2vF,IAAI,IAAIxI,EAAEqmB,YAAYrmB,EAAEsmB,aAAaztG,EAAEkO,MAAMi5E,EAAEumB,eAAe1tG,EAAEghB,QAAQmmE,EAAEwmB,YAAYhe,EAAEzhF,MAAMi5E,EAAEymB,cAAcje,EAAE3uE,WAAU+tE,EAAEA,EAAE8e,eAAgBC,SAAS9tG,EAAEkO,KAAKlO,EAAEghB,QAAQmmE,EAAE4mB,kBAAkB5nB,EAAEuJ,GAAGvI,EAAE6mB,SAASjf,GAAG5H,EAAEomB,OAAO5d,EAAEzhF,KAAKyhF,EAAE3uE,UAAU+tE,EAAEkf,OAAOte,EAAEzhF,KAAKyhF,EAAE3uE,QAAQmmE,EAAE6mB,SAASjf,IAAI,CAAM,IAALA,EAAE,GAAO5H,EAAE7uE,EAAE6uE,EAAEA,EAAEv1E,YAAY,IAAIu1E,EAAE5tE,UAAUw1E,EAAEvtF,KAAK,CAACsS,QAAQqzE,EAAE+mB,KAAK/mB,EAAEgnB,WAAW/4B,IAAI+R,EAAEinB,YAAmD,IAAvC,oBAAoB91F,EAAE+1F,OAAO/1F,EAAE+1F,QAAY/1F,EAAE,EAAEA,EAAEy2E,EAAEroF,OAAO4R,KAAI6uE,EAAE4H,EAAEz2E,IAAKxE,QAAQq6F,WAAWhnB,EAAE+mB,KAAK/mB,EAAErzE,QAAQs6F,UAAUjnB,EAAE/R,GAAG,CAAC,CACzf,IAAIk5B,GAAGjf,GAAI,iBAAiBvF,UAAU,IAAIA,SAAS6f,aAAa4E,GAAG,KAAKxtC,GAAG,KAAKytC,GAAG,KAAKC,IAAG,EAC3F,SAASC,GAAGvnB,EAAE4H,EAAEz2E,GAAG,IAAIo3E,EAAEp3E,EAAE/Z,SAAS+Z,EAAEA,EAAEwxE,SAAS,IAAIxxE,EAAEiB,SAASjB,EAAEA,EAAElB,cAAcq3F,IAAI,MAAMF,IAAIA,KAAKxa,EAAGrE,KAAU,mBAALA,EAAE6e,KAAyB1B,GAAGnd,GAAGA,EAAE,CAAChhF,MAAMghF,EAAEwd,eAAenlB,IAAI2H,EAAEyd,cAAuFzd,EAAE,CAAC+d,YAA3E/d,GAAGA,EAAEt4E,eAAes4E,EAAEt4E,cAAci2F,aAAa9uG,QAAQ+uG,gBAA+BG,WAAWC,aAAahe,EAAEge,aAAaC,UAAUje,EAAEie,UAAUC,YAAYle,EAAEke,aAAcY,IAAIrC,GAAGqC,GAAG9e,KAAK8e,GAAG9e,EAAsB,GAApBA,EAAEib,GAAG5pC,GAAG,aAAgBr6D,SAASqoF,EAAE,IAAIqV,GAAG,WAAW,SAAS,KAAKrV,EAAEz2E,GAAG6uE,EAAE3lF,KAAK,CAACopG,MAAM7b,EAAE8b,UAAUnb,IAAIX,EAAEniF,OAAO2hG,KAAK,CACtf,SAASI,GAAGxnB,EAAE4H,GAAG,IAAIz2E,EAAE,CAAC,EAAiF,OAA/EA,EAAE6uE,EAAE9nF,eAAe0vF,EAAE1vF,cAAciZ,EAAE,SAAS6uE,GAAG,SAAS4H,EAAEz2E,EAAE,MAAM6uE,GAAG,MAAM4H,EAASz2E,CAAC,CAAC,IAAIs2F,GAAG,CAACC,aAAaF,GAAG,YAAY,gBAAgBG,mBAAmBH,GAAG,YAAY,sBAAsBI,eAAeJ,GAAG,YAAY,kBAAkBK,cAAcL,GAAG,aAAa,kBAAkBM,GAAG,CAAC,EAAEC,GAAG,CAAC,EACpF,SAASC,GAAGhoB,GAAG,GAAG8nB,GAAG9nB,GAAG,OAAO8nB,GAAG9nB,GAAG,IAAIynB,GAAGznB,GAAG,OAAOA,EAAE,IAAY7uE,EAARy2E,EAAE6f,GAAGznB,GAAK,IAAI7uE,KAAKy2E,EAAE,GAAGA,EAAE7oF,eAAeoS,IAAIA,KAAK42F,GAAG,OAAOD,GAAG9nB,GAAG4H,EAAEz2E,GAAG,OAAO6uE,CAAC,CAA/XkI,IAAK6f,GAAGplB,SAASpqE,cAAc,OAAOs5E,MAAM,mBAAmBz6F,gBAAgBqwG,GAAGC,aAAaO,iBAAiBR,GAAGE,mBAAmBM,iBAAiBR,GAAGG,eAAeK,WAAW,oBAAoB7wG,eAAeqwG,GAAGI,cAAcnN,YAAwJ,IAAIwN,GAAGF,GAAG,gBAAgBrsF,GAAGqsF,GAAG,sBAAsBG,GAAGH,GAAG,kBAAkBI,GAAGJ,GAAG,iBAAiBK,GAAG,IAAIjnG,IAAIknG,GAAG,smBAAsmBnwG,MAAM,KAC/lC,SAASowG,GAAGvoB,EAAE4H,GAAGygB,GAAGxmG,IAAIm+E,EAAE4H,GAAGI,EAAGJ,EAAE,CAAC5H,GAAG,CAAC,IAAI,IAAIwoB,GAAG,EAAEA,GAAGF,GAAG/oG,OAAOipG,KAAK,CAAC,IAAIC,GAAGH,GAAGE,IAA2DD,GAApDE,GAAGvwG,cAAuD,MAAtCuwG,GAAG,GAAGhpG,cAAcgpG,GAAGvuG,MAAM,IAAiB,CAACquG,GAAGL,GAAG,kBAAkBK,GAAG5sF,GAAG,wBAAwB4sF,GAAGJ,GAAG,oBAAoBI,GAAG,WAAW,iBAAiBA,GAAG,UAAU,WAAWA,GAAG,WAAW,UAAUA,GAAGH,GAAG,mBAAmBngB,EAAG,eAAe,CAAC,WAAW,cAAcA,EAAG,eAAe,CAAC,WAAW,cAAcA,EAAG,iBAAiB,CAAC,aAAa,gBAC7cA,EAAG,iBAAiB,CAAC,aAAa,gBAAgBD,EAAG,WAAW,oEAAoE7vF,MAAM,MAAM6vF,EAAG,WAAW,uFAAuF7vF,MAAM,MAAM6vF,EAAG,gBAAgB,CAAC,iBAAiB,WAAW,YAAY,UAAUA,EAAG,mBAAmB,2DAA2D7vF,MAAM,MAAM6vF,EAAG,qBAAqB,6DAA6D7vF,MAAM,MAC/f6vF,EAAG,sBAAsB,8DAA8D7vF,MAAM,MAAM,IAAIuwG,GAAG,6NAA6NvwG,MAAM,KAAKwwG,GAAG,IAAI7mG,IAAI,0CAA0C3J,MAAM,KAAKywG,OAAOF,KACzZ,SAASG,GAAG7oB,EAAE4H,EAAEz2E,GAAG,IAAIo3E,EAAEvI,EAAEznF,MAAM,gBAAgBynF,EAAE6b,cAAc1qF,EAlDjE,SAAY6uE,EAAE4H,EAAEz2E,EAAEo3E,EAAE1vF,EAAEmmF,EAAEwJ,EAAE4C,EAAE7J,GAA4B,GAAzBsT,GAAG77F,MAAMkI,KAAKiK,WAAcqpF,GAAG,CAAC,IAAGA,GAAgC,MAAM75F,MAAMwS,EAAE,MAA1C,IAAIhG,EAAEstF,GAAGD,IAAG,EAAGC,GAAG,KAA8BC,KAAKA,IAAG,EAAGC,GAAGxtF,EAAE,CAAC,CAkDpE2hG,CAAGvgB,EAAEX,OAAE,EAAO5H,GAAGA,EAAE6b,cAAc,IAAI,CACxG,SAASiI,GAAG9jB,EAAE4H,GAAGA,EAAE,KAAO,EAAFA,GAAK,IAAI,IAAIz2E,EAAE,EAAEA,EAAE6uE,EAAEzgF,OAAO4R,IAAI,CAAC,IAAIo3E,EAAEvI,EAAE7uE,GAAGtY,EAAE0vF,EAAEkb,MAAMlb,EAAEA,EAAEmb,UAAU1jB,EAAE,CAAC,IAAIhB,OAAE,EAAO,GAAG4I,EAAE,IAAI,IAAIY,EAAED,EAAEhpF,OAAO,EAAE,GAAGipF,EAAEA,IAAI,CAAC,IAAI4C,EAAE7C,EAAEC,GAAGjH,EAAE6J,EAAE2d,SAAS5hG,EAAEikF,EAAEyQ,cAA2B,GAAbzQ,EAAEA,EAAE4d,SAAYznB,IAAIvC,GAAGnmF,EAAEojG,uBAAuB,MAAMjc,EAAE6oB,GAAGhwG,EAAEuyF,EAAEjkF,GAAG63E,EAAEuC,CAAC,MAAM,IAAIiH,EAAE,EAAEA,EAAED,EAAEhpF,OAAOipF,IAAI,CAAoD,GAA5CjH,GAAP6J,EAAE7C,EAAEC,IAAOugB,SAAS5hG,EAAEikF,EAAEyQ,cAAczQ,EAAEA,EAAE4d,SAAYznB,IAAIvC,GAAGnmF,EAAEojG,uBAAuB,MAAMjc,EAAE6oB,GAAGhwG,EAAEuyF,EAAEjkF,GAAG63E,EAAEuC,CAAC,CAAC,CAAC,CAAC,GAAGmT,GAAG,MAAM1U,EAAE2U,GAAGD,IAAG,EAAGC,GAAG,KAAK3U,CAAE,CAC5a,SAASipB,GAAEjpB,EAAE4H,GAAG,IAAIz2E,EAAEy2E,EAAEshB,SAAI,IAAS/3F,IAAIA,EAAEy2E,EAAEshB,IAAI,IAAIpnG,KAAK,IAAIymF,EAAEvI,EAAE,WAAW7uE,EAAEvP,IAAI2mF,KAAK4gB,GAAGvhB,EAAE5H,EAAE,GAAE,GAAI7uE,EAAElP,IAAIsmF,GAAG,CAAC,SAAS6gB,GAAGppB,EAAE4H,EAAEz2E,GAAG,IAAIo3E,EAAE,EAAEX,IAAIW,GAAG,GAAG4gB,GAAGh4F,EAAE6uE,EAAEuI,EAAEX,EAAE,CAAC,IAAIyhB,GAAG,kBAAkB7kG,KAAKC,SAASlE,SAAS,IAAIrG,MAAM,GAAG,SAASovG,GAAGtpB,GAAG,IAAIA,EAAEqpB,IAAI,CAACrpB,EAAEqpB,KAAI,EAAGvhB,EAAGjuF,SAAQ,SAAS+tF,GAAG,oBAAoBA,IAAI+gB,GAAG/mG,IAAIgmF,IAAIwhB,GAAGxhB,GAAE,EAAG5H,GAAGopB,GAAGxhB,GAAE,EAAG5H,GAAG,IAAG,IAAI4H,EAAE,IAAI5H,EAAE5tE,SAAS4tE,EAAEA,EAAE/vE,cAAc,OAAO23E,GAAGA,EAAEyhB,MAAMzhB,EAAEyhB,KAAI,EAAGD,GAAG,mBAAkB,EAAGxhB,GAAG,CAAC,CACjb,SAASuhB,GAAGnpB,EAAE4H,EAAEz2E,EAAEo3E,GAAG,OAAOyS,GAAGpT,IAAI,KAAK,EAAE,IAAI/uF,EAAE4hG,GAAG,MAAM,KAAK,EAAE5hG,EAAE+hG,GAAG,MAAM,QAAQ/hG,EAAE8hG,GAAGxpF,EAAEtY,EAAEoH,KAAK,KAAK2nF,EAAEz2E,EAAE6uE,GAAGnnF,OAAE,GAAQq7F,IAAI,eAAetM,GAAG,cAAcA,GAAG,UAAUA,IAAI/uF,GAAE,GAAI0vF,OAAE,IAAS1vF,EAAEmnF,EAAEoU,iBAAiBxM,EAAEz2E,EAAE,CAACo4F,SAAQ,EAAGC,QAAQ3wG,IAAImnF,EAAEoU,iBAAiBxM,EAAEz2E,GAAE,QAAI,IAAStY,EAAEmnF,EAAEoU,iBAAiBxM,EAAEz2E,EAAE,CAACq4F,QAAQ3wG,IAAImnF,EAAEoU,iBAAiBxM,EAAEz2E,GAAE,EAAG,CAClV,SAAS0pF,GAAG7a,EAAE4H,EAAEz2E,EAAEo3E,EAAE1vF,GAAG,IAAImmF,EAAEuJ,EAAE,GAAG,KAAO,EAAFX,IAAM,KAAO,EAAFA,IAAM,OAAOW,EAAEvI,EAAE,OAAO,CAAC,GAAG,OAAOuI,EAAE,OAAO,IAAIC,EAAED,EAAEiD,IAAI,GAAG,IAAIhD,GAAG,IAAIA,EAAE,CAAC,IAAI4C,EAAE7C,EAAEkL,UAAUqG,cAAc,GAAG1O,IAAIvyF,GAAG,IAAIuyF,EAAEh5E,UAAUg5E,EAAE3gF,aAAa5R,EAAE,MAAM,GAAG,IAAI2vF,EAAE,IAAIA,EAAED,EAAEyM,OAAO,OAAOxM,GAAG,CAAC,IAAIjH,EAAEiH,EAAEgD,IAAI,IAAG,IAAIjK,GAAG,IAAIA,MAAKA,EAAEiH,EAAEiL,UAAUqG,iBAAkBjhG,GAAG,IAAI0oF,EAAEnvE,UAAUmvE,EAAE92E,aAAa5R,GAAE,OAAO2vF,EAAEA,EAAEwM,MAAM,CAAC,KAAK,OAAO5J,GAAG,CAAS,GAAG,QAAX5C,EAAEmR,GAAGvO,IAAe,OAAe,GAAG,KAAX7J,EAAEiH,EAAEgD,MAAc,IAAIjK,EAAE,CAACgH,EAAEvJ,EAAEwJ,EAAE,SAASxI,CAAC,CAACoL,EAAEA,EAAE3gF,UAAU,CAAC,CAAC89E,EAAEA,EAAEyM,MAAM,CAAChB,IAAG,WAAW,IAAIzL,EAAEvJ,EAAEnmF,EAAEo6F,GAAG9hF,GAAGq3E,EAAE,GACpfxI,EAAE,CAAC,IAAIoL,EAAEid,GAAGrmG,IAAIg+E,GAAG,QAAG,IAASoL,EAAE,CAAC,IAAI7J,EAAE0b,GAAG78F,EAAE4/E,EAAE,OAAOA,GAAG,IAAK,WAAW,GAAG,IAAIqb,GAAGlqF,GAAG,MAAM6uE,EAAE,IAAK,UAAU,IAAK,QAAQuB,EAAEqf,GAAG,MAAM,IAAK,UAAUxgG,EAAE,QAAQmhF,EAAEqd,GAAG,MAAM,IAAK,WAAWx+F,EAAE,OAAOmhF,EAAEqd,GAAG,MAAM,IAAK,aAAa,IAAK,YAAYrd,EAAEqd,GAAG,MAAM,IAAK,QAAQ,GAAG,IAAIztF,EAAE+sF,OAAO,MAAMle,EAAE,IAAK,WAAW,IAAK,WAAW,IAAK,YAAY,IAAK,YAAY,IAAK,UAAU,IAAK,WAAW,IAAK,YAAY,IAAK,cAAcuB,EAAEkd,GAAG,MAAM,IAAK,OAAO,IAAK,UAAU,IAAK,YAAY,IAAK,WAAW,IAAK,YAAY,IAAK,WAAW,IAAK,YAAY,IAAK,OAAOld,EAC1iBmd,GAAG,MAAM,IAAK,cAAc,IAAK,WAAW,IAAK,YAAY,IAAK,aAAand,EAAEggB,GAAG,MAAM,KAAK2G,GAAG,KAAKvsF,GAAG,KAAKwsF,GAAG5mB,EAAEsd,GAAG,MAAM,KAAKuJ,GAAG7mB,EAAEogB,GAAG,MAAM,IAAK,SAASpgB,EAAE6b,GAAG,MAAM,IAAK,QAAQ7b,EAAE6gB,GAAG,MAAM,IAAK,OAAO,IAAK,MAAM,IAAK,QAAQ7gB,EAAE4d,GAAG,MAAM,IAAK,oBAAoB,IAAK,qBAAqB,IAAK,gBAAgB,IAAK,cAAc,IAAK,cAAc,IAAK,aAAa,IAAK,cAAc,IAAK,YAAY5d,EAAEsf,GAAG,IAAItzF,EAAE,KAAO,EAAFq6E,GAAK6hB,GAAGl8F,GAAG,WAAWyyE,EAAE0pB,EAAEn8F,EAAE,OAAO69E,EAAEA,EAAE,UAAU,KAAKA,EAAE79E,EAAE,GAAG,IAAI,IAAQo8F,EAAJC,EAAErhB,EAAI,OAC/eqhB,GAAG,CAAK,IAAIC,GAARF,EAAEC,GAAUnW,UAAsF,GAA5E,IAAIkW,EAAEne,KAAK,OAAOqe,IAAIF,EAAEE,EAAE,OAAOH,IAAc,OAAVG,EAAE5V,GAAG2V,EAAEF,KAAYn8F,EAAElT,KAAKyvG,GAAGF,EAAEC,EAAEF,MAASF,EAAE,MAAMG,EAAEA,EAAE5U,MAAM,CAAC,EAAEznF,EAAEhO,SAAS6rF,EAAE,IAAI7J,EAAE6J,EAAEhrF,EAAE,KAAK+Q,EAAEtY,GAAG2vF,EAAEnuF,KAAK,CAACopG,MAAMrY,EAAEsY,UAAUn2F,IAAI,CAAC,CAAC,GAAG,KAAO,EAAFq6E,GAAK,CAA4E,GAAnCrG,EAAE,aAAavB,GAAG,eAAeA,KAAtEoL,EAAE,cAAcpL,GAAG,gBAAgBA,IAA2C7uE,IAAI6hF,MAAK5yF,EAAE+Q,EAAEitF,eAAejtF,EAAEktF,eAAe1E,GAAGv5F,KAAIA,EAAE2pG,OAAgBxoB,GAAG6J,KAAGA,EAAEvyF,EAAEzB,SAASyB,EAAEA,GAAGuyF,EAAEvyF,EAAEoX,eAAem7E,EAAE8a,aAAa9a,EAAE4e,aAAa5yG,OAAUmqF,GAAqCA,EAAEgH,EAAiB,QAAfnoF,GAAnCA,EAAE+Q,EAAEitF,eAAejtF,EAAEmtF,WAAkB3E,GAAGv5F,GAAG,QAC9dA,KAARqpG,EAAE3U,GAAG10F,KAAU,IAAIA,EAAEorF,KAAK,IAAIprF,EAAEorF,OAAKprF,EAAE,QAAUmhF,EAAE,KAAKnhF,EAAEmoF,GAAKhH,IAAInhF,GAAE,CAAgU,GAA/TmN,EAAEkxF,GAAGoL,EAAE,eAAeH,EAAE,eAAeE,EAAE,QAAW,eAAe5pB,GAAG,gBAAgBA,IAAEzyE,EAAEszF,GAAGgJ,EAAE,iBAAiBH,EAAE,iBAAiBE,EAAE,WAAUH,EAAE,MAAMloB,EAAE6J,EAAE4Y,GAAGziB,GAAGooB,EAAE,MAAMvpG,EAAEgrF,EAAE4Y,GAAG5jG,IAAGgrF,EAAE,IAAI79E,EAAEs8F,EAAED,EAAE,QAAQroB,EAAEpwE,EAAEtY,IAAK4M,OAAOgkG,EAAEre,EAAEgT,cAAcuL,EAAEE,EAAE,KAAKlQ,GAAG9gG,KAAK0vF,KAAIh7E,EAAE,IAAIA,EAAEm8F,EAAEE,EAAE,QAAQxpG,EAAE+Q,EAAEtY,IAAK4M,OAAOkkG,EAAEp8F,EAAE6wF,cAAcqL,EAAEI,EAAEt8F,GAAGk8F,EAAEI,EAAKtoB,GAAGnhF,EAAEwnF,EAAE,CAAa,IAAR8hB,EAAEtpG,EAAEwpG,EAAE,EAAMD,EAAhBp8F,EAAEg0E,EAAkBooB,EAAEA,EAAEM,GAAGN,GAAGC,IAAQ,IAAJD,EAAE,EAAME,EAAEH,EAAEG,EAAEA,EAAEI,GAAGJ,GAAGF,IAAI,KAAK,EAAEC,EAAED,GAAGp8F,EAAE08F,GAAG18F,GAAGq8F,IAAI,KAAK,EAAED,EAAEC,GAAGF,EACpfO,GAAGP,GAAGC,IAAI,KAAKC,KAAK,CAAC,GAAGr8F,IAAIm8F,GAAG,OAAOA,GAAGn8F,IAAIm8F,EAAE3U,UAAU,MAAMnN,EAAEr6E,EAAE08F,GAAG18F,GAAGm8F,EAAEO,GAAGP,EAAE,CAACn8F,EAAE,IAAI,MAAMA,EAAE,KAAK,OAAOg0E,GAAG2oB,GAAG1hB,EAAE4C,EAAE7J,EAAEh0E,GAAE,GAAI,OAAOnN,GAAG,OAAOqpG,GAAGS,GAAG1hB,EAAEihB,EAAErpG,EAAEmN,GAAE,EAAG,CAA8D,GAAG,YAA1Cg0E,GAAjB6J,EAAE7C,EAAEyb,GAAGzb,GAAGnxF,QAAW2E,UAAUqvF,EAAErvF,SAAS7D,gBAA+B,UAAUqpF,GAAG,SAAS6J,EAAE7yF,KAAK,IAAI4xG,EAAGlG,QAAQ,GAAGV,GAAGnY,GAAG,GAAG8Y,GAAGiG,EAAGrF,OAAO,CAACqF,EAAGvF,GAAG,IAAIwF,EAAG1F,EAAE,MAAMnjB,EAAE6J,EAAErvF,WAAW,UAAUwlF,EAAErpF,gBAAgB,aAAakzF,EAAE7yF,MAAM,UAAU6yF,EAAE7yF,QAAQ4xG,EAAGtF,IACrV,OAD4VsF,IAAKA,EAAGA,EAAGnqB,EAAEuI,IAAK/pC,GAAGgqC,EAAE2hB,EAAGh5F,EAAEtY,IAAWuxG,GAAIA,EAAGpqB,EAAEoL,EAAE7C,GAAG,aAAavI,IAAIoqB,EAAGhf,EAAE6B,gBAClfmd,EAAG/c,YAAY,WAAWjC,EAAE7yF,MAAMi1F,GAAGpC,EAAE,SAASA,EAAE5yF,QAAO4xG,EAAG7hB,EAAEyb,GAAGzb,GAAGnxF,OAAc4oF,GAAG,IAAK,WAAaujB,GAAG6G,IAAK,SAASA,EAAGzE,mBAAgByB,GAAGgD,EAAGxwC,GAAG2uB,EAAE8e,GAAG,MAAK,MAAM,IAAK,WAAWA,GAAGztC,GAAGwtC,GAAG,KAAK,MAAM,IAAK,YAAYE,IAAG,EAAG,MAAM,IAAK,cAAc,IAAK,UAAU,IAAK,UAAUA,IAAG,EAAGC,GAAG/e,EAAEr3E,EAAEtY,GAAG,MAAM,IAAK,kBAAkB,GAAGsuG,GAAG,MAAM,IAAK,UAAU,IAAK,QAAQI,GAAG/e,EAAEr3E,EAAEtY,GAAG,IAAIwxG,EAAG,GAAG/H,GAAG1a,EAAE,CAAC,OAAO5H,GAAG,IAAK,mBAAmB,IAAIsqB,EAAG,qBAAqB,MAAM1iB,EAAE,IAAK,iBAAiB0iB,EAAG,mBACpe,MAAM1iB,EAAE,IAAK,oBAAoB0iB,EAAG,sBAAsB,MAAM1iB,EAAE0iB,OAAG,CAAM,MAAMzH,GAAG9iE,GAAGigD,EAAE7uE,KAAKm5F,EAAG,oBAAoB,YAAYtqB,GAAG,MAAM7uE,EAAEmqF,UAAUgP,EAAG,sBAAsBA,IAAK5H,IAAI,OAAOvxF,EAAEuvF,SAASmC,IAAI,uBAAuByH,EAAG,qBAAqBA,GAAIzH,KAAKwH,EAAGjP,OAAYF,GAAG,UAARD,GAAGpiG,GAAkBoiG,GAAGziG,MAAMyiG,GAAG5M,YAAYwU,IAAG,IAAiB,GAAZuH,EAAG5G,GAAGjb,EAAE+hB,IAAS/qG,SAAS+qG,EAAG,IAAIlL,GAAGkL,EAAGtqB,EAAE,KAAK7uE,EAAEtY,GAAG2vF,EAAEnuF,KAAK,CAACopG,MAAM6G,EAAG5G,UAAU0G,IAAKC,EAAGC,EAAGzsG,KAAKwsG,EAAa,QAATA,EAAGzH,GAAGzxF,MAAem5F,EAAGzsG,KAAKwsG,MAAUA,EAAG5H,GA5BhM,SAAYziB,EAAE4H,GAAG,OAAO5H,GAAG,IAAK,iBAAiB,OAAO4iB,GAAGhb,GAAG,IAAK,WAAW,OAAG,KAAKA,EAAE+Y,MAAa,MAAKgC,IAAG,EAAU9qE,IAAG,IAAK,YAAY,OAAOmoD,EAAE4H,EAAE/pF,QAASg6B,IAAI8qE,GAAG,KAAK3iB,EAAE,QAAQ,OAAO,KAAK,CA4BEuqB,CAAGvqB,EAAE7uE,GA3Bzd,SAAY6uE,EAAE4H,GAAG,GAAGib,GAAG,MAAM,mBAAmB7iB,IAAIsiB,IAAIviE,GAAGigD,EAAE4H,IAAI5H,EAAEob,KAAKD,GAAGD,GAAGD,GAAG,KAAK4H,IAAG,EAAG7iB,GAAG,KAAK,OAAOA,GAAG,IAAK,QAAgQ,QAAQ,OAAO,KAA3P,IAAK,WAAW,KAAK4H,EAAEgW,SAAShW,EAAEkW,QAAQlW,EAAEmW,UAAUnW,EAAEgW,SAAShW,EAAEkW,OAAO,CAAC,GAAGlW,EAAE4iB,MAAM,EAAE5iB,EAAE4iB,KAAKjrG,OAAO,OAAOqoF,EAAE4iB,KAAK,GAAG5iB,EAAE+Y,MAAM,OAAO7nG,OAAOC,aAAa6uF,EAAE+Y,MAAM,CAAC,OAAO,KAAK,IAAK,iBAAiB,OAAO+B,IAAI,OAAO9a,EAAE8Y,OAAO,KAAK9Y,EAAE/pF,KAAyB,CA2BqF4sG,CAAGzqB,EAAE7uE,MACje,GADoeo3E,EAAEib,GAAGjb,EAAE,kBACvehpF,SAAS1G,EAAE,IAAIumG,GAAG,gBAAgB,cAAc,KAAKjuF,EAAEtY,GAAG2vF,EAAEnuF,KAAK,CAACopG,MAAM5qG,EAAE6qG,UAAUnb,IAAI1vF,EAAEgF,KAAKwsG,GAAG,CAACvG,GAAGtb,EAAEZ,EAAE,GAAE,CAAC,SAASkiB,GAAG9pB,EAAE4H,EAAEz2E,GAAG,MAAM,CAAC43F,SAAS/oB,EAAEgpB,SAASphB,EAAEiU,cAAc1qF,EAAE,CAAC,SAASqyF,GAAGxjB,EAAE4H,GAAG,IAAI,IAAIz2E,EAAEy2E,EAAE,UAAUW,EAAE,GAAG,OAAOvI,GAAG,CAAC,IAAInnF,EAAEmnF,EAAEhB,EAAEnmF,EAAE46F,UAAU,IAAI56F,EAAE2yF,KAAK,OAAOxM,IAAInmF,EAAEmmF,EAAY,OAAVA,EAAEiV,GAAGjU,EAAE7uE,KAAYo3E,EAAEmiB,QAAQZ,GAAG9pB,EAAEhB,EAAEnmF,IAAc,OAAVmmF,EAAEiV,GAAGjU,EAAE4H,KAAYW,EAAEluF,KAAKyvG,GAAG9pB,EAAEhB,EAAEnmF,KAAKmnF,EAAEA,EAAEgV,MAAM,CAAC,OAAOzM,CAAC,CAAC,SAAS0hB,GAAGjqB,GAAG,GAAG,OAAOA,EAAE,OAAO,KAAK,GAAGA,EAAEA,EAAEgV,aAAahV,GAAG,IAAIA,EAAEwL,KAAK,OAAOxL,GAAI,IAAI,CACnd,SAASkqB,GAAGlqB,EAAE4H,EAAEz2E,EAAEo3E,EAAE1vF,GAAG,IAAI,IAAImmF,EAAE4I,EAAE+T,WAAWnT,EAAE,GAAG,OAAOr3E,GAAGA,IAAIo3E,GAAG,CAAC,IAAI6C,EAAEj6E,EAAEowE,EAAE6J,EAAE2J,UAAU5tF,EAAEikF,EAAEqI,UAAU,GAAG,OAAOlS,GAAGA,IAAIgH,EAAE,MAAM,IAAI6C,EAAEI,KAAK,OAAOrkF,IAAIikF,EAAEjkF,EAAEtO,EAAa,OAAV0oF,EAAE0S,GAAG9iF,EAAE6tE,KAAYwJ,EAAEkiB,QAAQZ,GAAG34F,EAAEowE,EAAE6J,IAAKvyF,GAAc,OAAV0oF,EAAE0S,GAAG9iF,EAAE6tE,KAAYwJ,EAAEnuF,KAAKyvG,GAAG34F,EAAEowE,EAAE6J,KAAMj6E,EAAEA,EAAE6jF,MAAM,CAAC,IAAIxM,EAAEjpF,QAAQygF,EAAE3lF,KAAK,CAACopG,MAAM7b,EAAE8b,UAAUlb,GAAG,CAAC,IAAImiB,GAAG,SAASC,GAAG,iBAAiB,SAASC,GAAG7qB,GAAG,OAAO,kBAAkBA,EAAEA,EAAE,GAAGA,GAAGv5E,QAAQkkG,GAAG,MAAMlkG,QAAQmkG,GAAG,GAAG,CAAC,SAASE,GAAG9qB,EAAE4H,EAAEz2E,GAAW,GAARy2E,EAAEijB,GAAGjjB,GAAMijB,GAAG7qB,KAAK4H,GAAGz2E,EAAE,MAAMxW,MAAMwS,EAAE,KAAM,CAAC,SAAS49F,KAAK,CAC9e,IAAIC,GAAG,KAAKC,GAAG,KAAK,SAASC,GAAGlrB,EAAE4H,GAAG,MAAM,aAAa5H,GAAG,aAAaA,GAAG,kBAAkB4H,EAAEqG,UAAU,kBAAkBrG,EAAEqG,UAAU,kBAAkBrG,EAAEoG,yBAAyB,OAAOpG,EAAEoG,yBAAyB,MAAMpG,EAAEoG,wBAAwBmd,MAAM,CAC5P,IAAIC,GAAG,oBAAoBpuG,WAAWA,gBAAW,EAAOquG,GAAG,oBAAoB/uG,aAAaA,kBAAa,EAAOgvG,GAAG,oBAAoBC,QAAQA,aAAQ,EAAOC,GAAG,oBAAoBC,eAAeA,eAAe,qBAAqBH,GAAG,SAAStrB,GAAG,OAAOsrB,GAAGI,QAAQ,MAAMC,KAAK3rB,GAAG4rB,MAAMC,GAAG,EAAET,GAAG,SAASS,GAAG7rB,GAAGhjF,YAAW,WAAW,MAAMgjF,CAAE,GAAE,CACpV,SAAS8rB,GAAG9rB,EAAE4H,GAAG,IAAIz2E,EAAEy2E,EAAEW,EAAE,EAAE,EAAE,CAAC,IAAI1vF,EAAEsY,EAAEI,YAA6B,GAAjByuE,EAAEzsE,YAAYpC,GAAMtY,GAAG,IAAIA,EAAEuZ,SAAS,GAAY,QAATjB,EAAEtY,EAAEgF,MAAc,CAAC,GAAG,IAAI0qF,EAA0B,OAAvBvI,EAAEzsE,YAAY1a,QAAGyhG,GAAG1S,GAAUW,GAAG,KAAK,MAAMp3E,GAAG,OAAOA,GAAG,OAAOA,GAAGo3E,IAAIp3E,EAAEtY,CAAC,OAAOsY,GAAGmpF,GAAG1S,EAAE,CAAC,SAASmkB,GAAG/rB,GAAG,KAAK,MAAMA,EAAEA,EAAEA,EAAEzuE,YAAY,CAAC,IAAIq2E,EAAE5H,EAAE5tE,SAAS,GAAG,IAAIw1E,GAAG,IAAIA,EAAE,MAAM,GAAG,IAAIA,EAAE,CAAU,GAAG,OAAZA,EAAE5H,EAAEniF,OAAiB,OAAO+pF,GAAG,OAAOA,EAAE,MAAM,GAAG,OAAOA,EAAE,OAAO,IAAI,CAAC,CAAC,OAAO5H,CAAC,CACjY,SAASgsB,GAAGhsB,GAAGA,EAAEA,EAAE/tE,gBAAgB,IAAI,IAAI21E,EAAE,EAAE5H,GAAG,CAAC,GAAG,IAAIA,EAAE5tE,SAAS,CAAC,IAAIjB,EAAE6uE,EAAEniF,KAAK,GAAG,MAAMsT,GAAG,OAAOA,GAAG,OAAOA,EAAE,CAAC,GAAG,IAAIy2E,EAAE,OAAO5H,EAAE4H,GAAG,KAAK,OAAOz2E,GAAGy2E,GAAG,CAAC5H,EAAEA,EAAE/tE,eAAe,CAAC,OAAO,IAAI,CAAC,IAAIg6F,GAAGznG,KAAKC,SAASlE,SAAS,IAAIrG,MAAM,GAAGgyG,GAAG,gBAAgBD,GAAGE,GAAG,gBAAgBF,GAAGlC,GAAG,oBAAoBkC,GAAG/C,GAAG,iBAAiB+C,GAAGG,GAAG,oBAAoBH,GAAGI,GAAG,kBAAkBJ,GAClX,SAAStS,GAAG3Z,GAAG,IAAI4H,EAAE5H,EAAEksB,IAAI,GAAGtkB,EAAE,OAAOA,EAAE,IAAI,IAAIz2E,EAAE6uE,EAAEv1E,WAAW0G,GAAG,CAAC,GAAGy2E,EAAEz2E,EAAE44F,KAAK54F,EAAE+6F,IAAI,CAAe,GAAd/6F,EAAEy2E,EAAEmN,UAAa,OAAOnN,EAAE91E,OAAO,OAAOX,GAAG,OAAOA,EAAEW,MAAM,IAAIkuE,EAAEgsB,GAAGhsB,GAAG,OAAOA,GAAG,CAAC,GAAG7uE,EAAE6uE,EAAEksB,IAAI,OAAO/6F,EAAE6uE,EAAEgsB,GAAGhsB,EAAE,CAAC,OAAO4H,CAAC,CAAKz2E,GAAJ6uE,EAAE7uE,GAAM1G,UAAU,CAAC,OAAO,IAAI,CAAC,SAAS+oF,GAAGxT,GAAkB,QAAfA,EAAEA,EAAEksB,KAAKlsB,EAAE+pB,MAAc,IAAI/pB,EAAEwL,KAAK,IAAIxL,EAAEwL,KAAK,KAAKxL,EAAEwL,KAAK,IAAIxL,EAAEwL,IAAI,KAAKxL,CAAC,CAAC,SAASgkB,GAAGhkB,GAAG,GAAG,IAAIA,EAAEwL,KAAK,IAAIxL,EAAEwL,IAAI,OAAOxL,EAAEyT,UAAU,MAAM94F,MAAMwS,EAAE,IAAK,CAAC,SAASumF,GAAG1T,GAAG,OAAOA,EAAEmsB,KAAK,IAAI,CAAC,IAAIG,GAAG,GAAGC,IAAI,EAAE,SAASC,GAAGxsB,GAAG,MAAM,CAACz1E,QAAQy1E,EAAE,CACve,SAASysB,GAAEzsB,GAAG,EAAEusB,KAAKvsB,EAAEz1E,QAAQ+hG,GAAGC,IAAID,GAAGC,IAAI,KAAKA,KAAK,CAAC,SAASG,GAAE1sB,EAAE4H,GAAG2kB,KAAKD,GAAGC,IAAIvsB,EAAEz1E,QAAQy1E,EAAEz1E,QAAQq9E,CAAC,CAAC,IAAI+kB,GAAG,CAAC,EAAEC,GAAEJ,GAAGG,IAAIE,GAAGL,IAAG,GAAIM,GAAGH,GAAG,SAASI,GAAG/sB,EAAE4H,GAAG,IAAIz2E,EAAE6uE,EAAEznF,KAAKy0G,aAAa,IAAI77F,EAAE,OAAOw7F,GAAG,IAAIpkB,EAAEvI,EAAEyT,UAAU,GAAGlL,GAAGA,EAAE0kB,8CAA8CrlB,EAAE,OAAOW,EAAE2kB,0CAA0C,IAASluB,EAALnmF,EAAE,CAAC,EAAI,IAAImmF,KAAK7tE,EAAEtY,EAAEmmF,GAAG4I,EAAE5I,GAAoH,OAAjHuJ,KAAIvI,EAAEA,EAAEyT,WAAYwZ,4CAA4CrlB,EAAE5H,EAAEktB,0CAA0Cr0G,GAAUA,CAAC,CAC9d,SAASs0G,GAAGntB,GAAyB,OAAO,QAA7BA,EAAEA,EAAEotB,yBAAmC,IAASptB,CAAC,CAAC,SAASqtB,KAAKZ,GAAEI,IAAIJ,GAAEG,GAAE,CAAC,SAASU,GAAGttB,EAAE4H,EAAEz2E,GAAG,GAAGy7F,GAAEriG,UAAUoiG,GAAG,MAAMhyG,MAAMwS,EAAE,MAAMu/F,GAAEE,GAAEhlB,GAAG8kB,GAAEG,GAAG17F,EAAE,CAAC,SAASo8F,GAAGvtB,EAAE4H,EAAEz2E,GAAG,IAAIo3E,EAAEvI,EAAEyT,UAAgC,GAAtB7L,EAAEA,EAAEwlB,kBAAqB,oBAAoB7kB,EAAEilB,gBAAgB,OAAOr8F,EAAwB,IAAI,IAAItY,KAA9B0vF,EAAEA,EAAEilB,kBAAiC,KAAK30G,KAAK+uF,GAAG,MAAMjtF,MAAMwS,EAAE,IAAI4+E,EAAG/L,IAAI,UAAUnnF,IAAI,OAAO+xF,EAAE,CAAC,EAAEz5E,EAAEo3E,EAAE,CACxX,SAASklB,GAAGztB,GAA2G,OAAxGA,GAAGA,EAAEA,EAAEyT,YAAYzT,EAAE0tB,2CAA2Cf,GAAGG,GAAGF,GAAEriG,QAAQmiG,GAAEE,GAAE5sB,GAAG0sB,GAAEG,GAAGA,GAAGtiG,UAAe,CAAE,CAAC,SAASojG,GAAG3tB,EAAE4H,EAAEz2E,GAAG,IAAIo3E,EAAEvI,EAAEyT,UAAU,IAAIlL,EAAE,MAAM5tF,MAAMwS,EAAE,MAAMgE,GAAG6uE,EAAEutB,GAAGvtB,EAAE4H,EAAEklB,IAAIvkB,EAAEmlB,0CAA0C1tB,EAAEysB,GAAEI,IAAIJ,GAAEG,IAAGF,GAAEE,GAAE5sB,IAAIysB,GAAEI,IAAIH,GAAEG,GAAG17F,EAAE,CAAC,IAAI8mB,GAAG,KAAK21E,IAAG,EAAG7sE,IAAG,EAAG,SAAS8sE,GAAG7tB,GAAG,OAAO/nD,GAAGA,GAAG,CAAC+nD,GAAG/nD,GAAG59B,KAAK2lF,EAAE,CAChW,SAAS8tB,KAAK,IAAI/sE,IAAI,OAAO9I,GAAG,CAAC8I,IAAG,EAAG,IAAIi/C,EAAE,EAAE4H,EAAEuQ,GAAE,IAAI,IAAIhnF,EAAE8mB,GAAG,IAAIkgE,GAAE,EAAEnY,EAAE7uE,EAAE5R,OAAOygF,IAAI,CAAC,IAAIuI,EAAEp3E,EAAE6uE,GAAG,GAAGuI,EAAEA,GAAE,SAAU,OAAOA,EAAE,CAACtwD,GAAG,KAAK21E,IAAG,CAAE,CAAC,MAAM/0G,GAAG,MAAM,OAAOo/B,KAAKA,GAAGA,GAAG/9B,MAAM8lF,EAAE,IAAIl6E,GAAGswF,GAAG0X,IAAIj1G,CAAE,CAAC,QAAQs/F,GAAEvQ,EAAE7mD,IAAG,CAAE,CAAC,CAAC,OAAO,IAAI,CAAC,IAAIgtE,GAAG,GAAGz5D,GAAG,EAAE05D,GAAG,KAAKC,GAAG,EAAEC,GAAG,GAAGC,GAAG,EAAEC,GAAG,KAAKC,GAAG,EAAEC,GAAG,GAAG,SAASC,GAAGvuB,EAAE4H,GAAGmmB,GAAGz5D,MAAM25D,GAAGF,GAAGz5D,MAAM05D,GAAGA,GAAGhuB,EAAEiuB,GAAGrmB,CAAC,CACjV,SAAS4mB,GAAGxuB,EAAE4H,EAAEz2E,GAAG+8F,GAAGC,MAAME,GAAGH,GAAGC,MAAMG,GAAGJ,GAAGC,MAAMC,GAAGA,GAAGpuB,EAAE,IAAIuI,EAAE8lB,GAAGruB,EAAEsuB,GAAG,IAAIz1G,EAAE,GAAG+L,GAAG2jF,GAAG,EAAEA,KAAK,GAAG1vF,GAAGsY,GAAG,EAAE,IAAI6tE,EAAE,GAAGp6E,GAAGgjF,GAAG/uF,EAAE,GAAG,GAAGmmF,EAAE,CAAC,IAAIwJ,EAAE3vF,EAAEA,EAAE,EAAEmmF,GAAGuJ,GAAG,GAAGC,GAAG,GAAGjoF,SAAS,IAAIgoF,IAAIC,EAAE3vF,GAAG2vF,EAAE6lB,GAAG,GAAG,GAAGzpG,GAAGgjF,GAAG/uF,EAAEsY,GAAGtY,EAAE0vF,EAAE+lB,GAAGtvB,EAAEgB,CAAC,MAAMquB,GAAG,GAAGrvB,EAAE7tE,GAAGtY,EAAE0vF,EAAE+lB,GAAGtuB,CAAC,CAAC,SAASyuB,GAAGzuB,GAAG,OAAOA,EAAEgV,SAASuZ,GAAGvuB,EAAE,GAAGwuB,GAAGxuB,EAAE,EAAE,GAAG,CAAC,SAAS0uB,GAAG1uB,GAAG,KAAKA,IAAIguB,IAAIA,GAAGD,KAAKz5D,IAAIy5D,GAAGz5D,IAAI,KAAK25D,GAAGF,KAAKz5D,IAAIy5D,GAAGz5D,IAAI,KAAK,KAAK0rC,IAAIouB,IAAIA,GAAGF,KAAKC,IAAID,GAAGC,IAAI,KAAKG,GAAGJ,KAAKC,IAAID,GAAGC,IAAI,KAAKE,GAAGH,KAAKC,IAAID,GAAGC,IAAI,IAAI,CAAC,IAAIQ,GAAG,KAAKC,GAAG,KAAKC,IAAE,EAAGC,GAAG,KACje,SAASC,GAAG/uB,EAAE4H,GAAG,IAAIz2E,EAAE69F,GAAG,EAAE,KAAK,KAAK,GAAG79F,EAAE81E,YAAY,UAAU91E,EAAEsiF,UAAU7L,EAAEz2E,EAAE6jF,OAAOhV,EAAgB,QAAd4H,EAAE5H,EAAEivB,YAAoBjvB,EAAEivB,UAAU,CAAC99F,GAAG6uE,EAAEwD,OAAO,IAAIoE,EAAEvtF,KAAK8W,EAAE,CACxJ,SAAS+9F,GAAGlvB,EAAE4H,GAAG,OAAO5H,EAAEwL,KAAK,KAAK,EAAE,IAAIr6E,EAAE6uE,EAAEznF,KAAyE,OAAO,QAA3EqvF,EAAE,IAAIA,EAAEx1E,UAAUjB,EAAEjZ,gBAAgB0vF,EAAE7rF,SAAS7D,cAAc,KAAK0vF,KAAmB5H,EAAEyT,UAAU7L,EAAE+mB,GAAG3uB,EAAE4uB,GAAG7C,GAAGnkB,EAAEt2E,aAAY,GAAO,KAAK,EAAE,OAAoD,QAA7Cs2E,EAAE,KAAK5H,EAAEmvB,cAAc,IAAIvnB,EAAEx1E,SAAS,KAAKw1E,KAAY5H,EAAEyT,UAAU7L,EAAE+mB,GAAG3uB,EAAE4uB,GAAG,MAAK,GAAO,KAAK,GAAG,OAA+B,QAAxBhnB,EAAE,IAAIA,EAAEx1E,SAAS,KAAKw1E,KAAYz2E,EAAE,OAAOi9F,GAAG,CAACx2F,GAAGy2F,GAAGe,SAASd,IAAI,KAAKtuB,EAAEkV,cAAc,CAACC,WAAWvN,EAAEynB,YAAYl+F,EAAEm+F,UAAU,aAAYn+F,EAAE69F,GAAG,GAAG,KAAK,KAAK,IAAKvb,UAAU7L,EAAEz2E,EAAE6jF,OAAOhV,EAAEA,EAAEluE,MAAMX,EAAEw9F,GAAG3uB,EAAE4uB,GAClf,MAAK,GAAO,QAAQ,OAAM,EAAG,CAAC,SAASW,GAAGvvB,GAAG,OAAO,KAAY,EAAPA,EAAEwvB,OAAS,KAAa,IAARxvB,EAAEwD,MAAU,CAAC,SAASisB,GAAGzvB,GAAG,GAAG6uB,GAAE,CAAC,IAAIjnB,EAAEgnB,GAAG,GAAGhnB,EAAE,CAAC,IAAIz2E,EAAEy2E,EAAE,IAAIsnB,GAAGlvB,EAAE4H,GAAG,CAAC,GAAG2nB,GAAGvvB,GAAG,MAAMrlF,MAAMwS,EAAE,MAAMy6E,EAAEmkB,GAAG56F,EAAEI,aAAa,IAAIg3E,EAAEomB,GAAG/mB,GAAGsnB,GAAGlvB,EAAE4H,GAAGmnB,GAAGxmB,EAAEp3E,IAAI6uE,EAAEwD,OAAe,KAATxD,EAAEwD,MAAY,EAAEqrB,IAAE,EAAGF,GAAG3uB,EAAE,CAAC,KAAK,CAAC,GAAGuvB,GAAGvvB,GAAG,MAAMrlF,MAAMwS,EAAE,MAAM6yE,EAAEwD,OAAe,KAATxD,EAAEwD,MAAY,EAAEqrB,IAAE,EAAGF,GAAG3uB,CAAC,CAAC,CAAC,CAAC,SAAS0vB,GAAG1vB,GAAG,IAAIA,EAAEA,EAAEgV,OAAO,OAAOhV,GAAG,IAAIA,EAAEwL,KAAK,IAAIxL,EAAEwL,KAAK,KAAKxL,EAAEwL,KAAKxL,EAAEA,EAAEgV,OAAO2Z,GAAG3uB,CAAC,CACha,SAASl/C,GAAGk/C,GAAG,GAAGA,IAAI2uB,GAAG,OAAM,EAAG,IAAIE,GAAE,OAAOa,GAAG1vB,GAAG6uB,IAAE,GAAG,EAAG,IAAIjnB,EAAkG,IAA/FA,EAAE,IAAI5H,EAAEwL,QAAQ5D,EAAE,IAAI5H,EAAEwL,OAAgB5D,EAAE,UAAXA,EAAE5H,EAAEznF,OAAmB,SAASqvF,IAAIsjB,GAAGlrB,EAAEznF,KAAKynF,EAAE2vB,gBAAmB/nB,IAAIA,EAAEgnB,IAAI,CAAC,GAAGW,GAAGvvB,GAAG,MAAM4vB,KAAKj1G,MAAMwS,EAAE,MAAM,KAAKy6E,GAAGmnB,GAAG/uB,EAAE4H,GAAGA,EAAEmkB,GAAGnkB,EAAEr2E,YAAY,CAAO,GAANm+F,GAAG1vB,GAAM,KAAKA,EAAEwL,IAAI,CAAgD,KAA7BxL,EAAE,QAApBA,EAAEA,EAAEkV,eAAyBlV,EAAEmV,WAAW,MAAW,MAAMx6F,MAAMwS,EAAE,MAAM6yE,EAAE,CAAiB,IAAhBA,EAAEA,EAAEzuE,YAAgBq2E,EAAE,EAAE5H,GAAG,CAAC,GAAG,IAAIA,EAAE5tE,SAAS,CAAC,IAAIjB,EAAE6uE,EAAEniF,KAAK,GAAG,OAAOsT,EAAE,CAAC,GAAG,IAAIy2E,EAAE,CAACgnB,GAAG7C,GAAG/rB,EAAEzuE,aAAa,MAAMyuE,CAAC,CAAC4H,GAAG,KAAK,MAAMz2E,GAAG,OAAOA,GAAG,OAAOA,GAAGy2E,GAAG,CAAC5H,EAAEA,EAAEzuE,WAAW,CAACq9F,GACjgB,IAAI,CAAC,MAAMA,GAAGD,GAAG5C,GAAG/rB,EAAEyT,UAAUliF,aAAa,KAAK,OAAM,CAAE,CAAC,SAASq+F,KAAK,IAAI,IAAI5vB,EAAE4uB,GAAG5uB,GAAGA,EAAE+rB,GAAG/rB,EAAEzuE,YAAY,CAAC,SAASs+F,KAAKjB,GAAGD,GAAG,KAAKE,IAAE,CAAE,CAAC,SAASiB,GAAG9vB,GAAG,OAAO8uB,GAAGA,GAAG,CAAC9uB,GAAG8uB,GAAGz0G,KAAK2lF,EAAE,CAAC,IAAI+vB,GAAGtmB,EAAG+Q,wBAChM,SAASwV,GAAGhwB,EAAE4H,EAAEz2E,GAAW,GAAG,QAAX6uE,EAAE7uE,EAAE8+F,MAAiB,oBAAoBjwB,GAAG,kBAAkBA,EAAE,CAAC,GAAG7uE,EAAE++F,OAAO,CAAY,GAAX/+F,EAAEA,EAAE++F,OAAY,CAAC,GAAG,IAAI/+F,EAAEq6E,IAAI,MAAM7wF,MAAMwS,EAAE,MAAM,IAAIo7E,EAAEp3E,EAAEsiF,SAAS,CAAC,IAAIlL,EAAE,MAAM5tF,MAAMwS,EAAE,IAAI6yE,IAAI,IAAInnF,EAAE0vF,EAAEvJ,EAAE,GAAGgB,EAAE,OAAG,OAAO4H,GAAG,OAAOA,EAAEqoB,KAAK,oBAAoBroB,EAAEqoB,KAAKroB,EAAEqoB,IAAIE,aAAanxB,EAAS4I,EAAEqoB,KAAIroB,EAAE,SAAS5H,GAAG,IAAI4H,EAAE/uF,EAAEu3G,KAAK,OAAOpwB,SAAS4H,EAAE5I,GAAG4I,EAAE5I,GAAGgB,CAAC,EAAE4H,EAAEuoB,WAAWnxB,EAAS4I,EAAC,CAAC,GAAG,kBAAkB5H,EAAE,MAAMrlF,MAAMwS,EAAE,MAAM,IAAIgE,EAAE++F,OAAO,MAAMv1G,MAAMwS,EAAE,IAAI6yE,GAAI,CAAC,OAAOA,CAAC,CAC/c,SAASqwB,GAAGrwB,EAAE4H,GAAuC,MAApC5H,EAAE3/E,OAAOC,UAAUC,SAASR,KAAK6nF,GAASjtF,MAAMwS,EAAE,GAAG,oBAAoB6yE,EAAE,qBAAqB3/E,OAAO0M,KAAK66E,GAAG3yE,KAAK,MAAM,IAAI+qE,GAAI,CAAC,SAASswB,GAAGtwB,GAAiB,OAAO4H,EAAf5H,EAAE8L,OAAe9L,EAAE6L,SAAS,CACrM,SAAS0kB,GAAGvwB,GAAG,SAAS4H,EAAEA,EAAEz2E,GAAG,GAAG6uE,EAAE,CAAC,IAAIuI,EAAEX,EAAEqnB,UAAU,OAAO1mB,GAAGX,EAAEqnB,UAAU,CAAC99F,GAAGy2E,EAAEpE,OAAO,IAAI+E,EAAEluF,KAAK8W,EAAE,CAAC,CAAC,SAASA,EAAEA,EAAEo3E,GAAG,IAAIvI,EAAE,OAAO,KAAK,KAAK,OAAOuI,GAAGX,EAAEz2E,EAAEo3E,GAAGA,EAAEA,EAAE+M,QAAQ,OAAO,IAAI,CAAC,SAAS/M,EAAEvI,EAAE4H,GAAG,IAAI5H,EAAE,IAAI5+E,IAAI,OAAOwmF,GAAG,OAAOA,EAAE3tF,IAAI+lF,EAAEn+E,IAAI+lF,EAAE3tF,IAAI2tF,GAAG5H,EAAEn+E,IAAI+lF,EAAE7tF,MAAM6tF,GAAGA,EAAEA,EAAE0N,QAAQ,OAAOtV,CAAC,CAAC,SAASnnF,EAAEmnF,EAAE4H,GAAsC,OAAnC5H,EAAEwwB,GAAGxwB,EAAE4H,IAAK7tF,MAAM,EAAEimF,EAAEsV,QAAQ,KAAYtV,CAAC,CAAC,SAAShB,EAAE4I,EAAEz2E,EAAEo3E,GAAa,OAAVX,EAAE7tF,MAAMwuF,EAAMvI,EAA6C,QAAjBuI,EAAEX,EAAEmN,YAA6BxM,EAAEA,EAAExuF,OAAQoX,GAAGy2E,EAAEpE,OAAO,EAAEryE,GAAGo3E,GAAEX,EAAEpE,OAAO,EAASryE,IAArGy2E,EAAEpE,OAAO,QAAQryE,EAAqF,CAAC,SAASq3E,EAAEZ,GACzd,OAD4d5H,GAC7f,OAAO4H,EAAEmN,YAAYnN,EAAEpE,OAAO,GAAUoE,CAAC,CAAC,SAASwD,EAAEpL,EAAE4H,EAAEz2E,EAAEo3E,GAAG,OAAG,OAAOX,GAAG,IAAIA,EAAE4D,MAAW5D,EAAE6oB,GAAGt/F,EAAE6uE,EAAEwvB,KAAKjnB,IAAKyM,OAAOhV,EAAE4H,KAAEA,EAAE/uF,EAAE+uF,EAAEz2E,IAAK6jF,OAAOhV,EAAS4H,EAAC,CAAC,SAASrG,EAAEvB,EAAE4H,EAAEz2E,EAAEo3E,GAAG,IAAIvJ,EAAE7tE,EAAE5Y,KAAK,OAAGymF,IAAI8K,EAAUnI,EAAE3B,EAAE4H,EAAEz2E,EAAE80E,MAAMgI,SAAS1F,EAAEp3E,EAAElX,KAAQ,OAAO2tF,IAAIA,EAAEX,cAAcjI,GAAG,kBAAkBA,GAAG,OAAOA,GAAGA,EAAE2M,WAAWpB,GAAI+lB,GAAGtxB,KAAK4I,EAAErvF,QAAagwF,EAAE1vF,EAAE+uF,EAAEz2E,EAAE80E,QAASgqB,IAAID,GAAGhwB,EAAE4H,EAAEz2E,GAAGo3E,EAAEyM,OAAOhV,EAAEuI,KAAEA,EAAEmoB,GAAGv/F,EAAE5Y,KAAK4Y,EAAElX,IAAIkX,EAAE80E,MAAM,KAAKjG,EAAEwvB,KAAKjnB,IAAK0nB,IAAID,GAAGhwB,EAAE4H,EAAEz2E,GAAGo3E,EAAEyM,OAAOhV,EAASuI,EAAC,CAAC,SAASphF,EAAE64E,EAAE4H,EAAEz2E,EAAEo3E,GAAG,OAAG,OAAOX,GAAG,IAAIA,EAAE4D,KACjf5D,EAAE6L,UAAUqG,gBAAgB3oF,EAAE2oF,eAAelS,EAAE6L,UAAUxnF,iBAAiBkF,EAAElF,iBAAsB27E,EAAE+oB,GAAGx/F,EAAE6uE,EAAEwvB,KAAKjnB,IAAKyM,OAAOhV,EAAE4H,KAAEA,EAAE/uF,EAAE+uF,EAAEz2E,EAAE88E,UAAU,KAAM+G,OAAOhV,EAAS4H,EAAC,CAAC,SAASjG,EAAE3B,EAAE4H,EAAEz2E,EAAEo3E,EAAEvJ,GAAG,OAAG,OAAO4I,GAAG,IAAIA,EAAE4D,MAAW5D,EAAEgpB,GAAGz/F,EAAE6uE,EAAEwvB,KAAKjnB,EAAEvJ,IAAKgW,OAAOhV,EAAE4H,KAAEA,EAAE/uF,EAAE+uF,EAAEz2E,IAAK6jF,OAAOhV,EAAS4H,EAAC,CAAC,SAASipB,EAAE7wB,EAAE4H,EAAEz2E,GAAG,GAAG,kBAAkBy2E,GAAG,KAAKA,GAAG,kBAAkBA,EAAE,OAAOA,EAAE6oB,GAAG,GAAG7oB,EAAE5H,EAAEwvB,KAAKr+F,IAAK6jF,OAAOhV,EAAE4H,EAAE,GAAG,kBAAkBA,GAAG,OAAOA,EAAE,CAAC,OAAOA,EAAE+D,UAAU,KAAKhC,EAAG,OAAOx4E,EAAEu/F,GAAG9oB,EAAErvF,KAAKqvF,EAAE3tF,IAAI2tF,EAAE3B,MAAM,KAAKjG,EAAEwvB,KAAKr+F,IACjf8+F,IAAID,GAAGhwB,EAAE,KAAK4H,GAAGz2E,EAAE6jF,OAAOhV,EAAE7uE,EAAE,KAAK04E,EAAG,OAAOjC,EAAE+oB,GAAG/oB,EAAE5H,EAAEwvB,KAAKr+F,IAAK6jF,OAAOhV,EAAE4H,EAAE,KAAK2C,EAAiB,OAAOsmB,EAAE7wB,GAAEuI,EAAnBX,EAAEkE,OAAmBlE,EAAEiE,UAAU16E,GAAG,GAAGu8E,GAAG9F,IAAI8C,EAAG9C,GAAG,OAAOA,EAAEgpB,GAAGhpB,EAAE5H,EAAEwvB,KAAKr+F,EAAE,OAAQ6jF,OAAOhV,EAAE4H,EAAEyoB,GAAGrwB,EAAE4H,EAAE,CAAC,OAAO,IAAI,CAAC,SAASkpB,EAAE9wB,EAAE4H,EAAEz2E,EAAEo3E,GAAG,IAAI1vF,EAAE,OAAO+uF,EAAEA,EAAE3tF,IAAI,KAAK,GAAG,kBAAkBkX,GAAG,KAAKA,GAAG,kBAAkBA,EAAE,OAAO,OAAOtY,EAAE,KAAKuyF,EAAEpL,EAAE4H,EAAE,GAAGz2E,EAAEo3E,GAAG,GAAG,kBAAkBp3E,GAAG,OAAOA,EAAE,CAAC,OAAOA,EAAEw6E,UAAU,KAAKhC,EAAG,OAAOx4E,EAAElX,MAAMpB,EAAE0oF,EAAEvB,EAAE4H,EAAEz2E,EAAEo3E,GAAG,KAAK,KAAKsB,EAAG,OAAO14E,EAAElX,MAAMpB,EAAEsO,EAAE64E,EAAE4H,EAAEz2E,EAAEo3E,GAAG,KAAK,KAAKgC,EAAG,OAAiBumB,EAAE9wB,EACpf4H,GADwe/uF,EAAEsY,EAAE26E,OACxe36E,EAAE06E,UAAUtD,GAAG,GAAGmF,GAAGv8E,IAAIu5E,EAAGv5E,GAAG,OAAO,OAAOtY,EAAE,KAAK8oF,EAAE3B,EAAE4H,EAAEz2E,EAAEo3E,EAAE,MAAM8nB,GAAGrwB,EAAE7uE,EAAE,CAAC,OAAO,IAAI,CAAC,SAAS4/F,EAAE/wB,EAAE4H,EAAEz2E,EAAEo3E,EAAE1vF,GAAG,GAAG,kBAAkB0vF,GAAG,KAAKA,GAAG,kBAAkBA,EAAE,OAAwB6C,EAAExD,EAAnB5H,EAAEA,EAAEh+E,IAAImP,IAAI,KAAW,GAAGo3E,EAAE1vF,GAAG,GAAG,kBAAkB0vF,GAAG,OAAOA,EAAE,CAAC,OAAOA,EAAEoD,UAAU,KAAKhC,EAAG,OAA2CpI,EAAEqG,EAAtC5H,EAAEA,EAAEh+E,IAAI,OAAOumF,EAAEtuF,IAAIkX,EAAEo3E,EAAEtuF,MAAM,KAAWsuF,EAAE1vF,GAAG,KAAKgxF,EAAG,OAA2C1iF,EAAEygF,EAAtC5H,EAAEA,EAAEh+E,IAAI,OAAOumF,EAAEtuF,IAAIkX,EAAEo3E,EAAEtuF,MAAM,KAAWsuF,EAAE1vF,GAAG,KAAK0xF,EAAiB,OAAOwmB,EAAE/wB,EAAE4H,EAAEz2E,GAAE6tE,EAAvBuJ,EAAEuD,OAAuBvD,EAAEsD,UAAUhzF,GAAG,GAAG60F,GAAGnF,IAAImC,EAAGnC,GAAG,OAAwB5G,EAAEiG,EAAnB5H,EAAEA,EAAEh+E,IAAImP,IAAI,KAAWo3E,EAAE1vF,EAAE,MAAMw3G,GAAGzoB,EAAEW,EAAE,CAAC,OAAO,IAAI,CAC9f,SAASnoF,EAAEvH,EAAE2vF,EAAE4C,EAAE7J,GAAG,IAAI,IAAIp6E,EAAE,KAAKw6E,EAAE,KAAKgoB,EAAEnhB,EAAEohB,EAAEphB,EAAE,EAAEkhB,EAAE,KAAK,OAAOC,GAAGC,EAAExe,EAAE7rF,OAAOqqG,IAAI,CAACD,EAAE5vG,MAAM6vG,GAAGF,EAAEC,EAAEA,EAAE,MAAMD,EAAEC,EAAErU,QAAQ,IAAIl1F,EAAE0wG,EAAEj4G,EAAE8wG,EAAEve,EAAEwe,GAAGroB,GAAG,GAAG,OAAOnhF,EAAE,CAAC,OAAOupG,IAAIA,EAAED,GAAG,KAAK,CAAC1pB,GAAG2pB,GAAG,OAAOvpG,EAAE20F,WAAWnN,EAAE/uF,EAAE8wG,GAAGnhB,EAAExJ,EAAE5+E,EAAEooF,EAAEohB,GAAG,OAAOjoB,EAAEx6E,EAAE/G,EAAEuhF,EAAE2T,QAAQl1F,EAAEuhF,EAAEvhF,EAAEupG,EAAED,CAAC,CAAC,GAAGE,IAAIxe,EAAE7rF,OAAO,OAAO4R,EAAEtY,EAAE8wG,GAAGkF,IAAGN,GAAG11G,EAAE+wG,GAAGziG,EAAE,GAAG,OAAOwiG,EAAE,CAAC,KAAKC,EAAExe,EAAE7rF,OAAOqqG,IAAkB,QAAdD,EAAEkH,EAAEh4G,EAAEuyF,EAAEwe,GAAGroB,MAAciH,EAAExJ,EAAE2qB,EAAEnhB,EAAEohB,GAAG,OAAOjoB,EAAEx6E,EAAEwiG,EAAEhoB,EAAE2T,QAAQqU,EAAEhoB,EAAEgoB,GAAc,OAAXkF,IAAGN,GAAG11G,EAAE+wG,GAAUziG,CAAC,CAAC,IAAIwiG,EAAEphB,EAAE1vF,EAAE8wG,GAAGC,EAAExe,EAAE7rF,OAAOqqG,IAAsB,QAAlBF,EAAEqH,EAAEpH,EAAE9wG,EAAE+wG,EAAExe,EAAEwe,GAAGroB,MAAcvB,GAAG,OAAO0pB,EAAE3U,WAAW4U,EAAExnG,OAAO,OACvfunG,EAAEzvG,IAAI2vG,EAAEF,EAAEzvG,KAAKuuF,EAAExJ,EAAE0qB,EAAElhB,EAAEohB,GAAG,OAAOjoB,EAAEx6E,EAAEuiG,EAAE/nB,EAAE2T,QAAQoU,EAAE/nB,EAAE+nB,GAAuD,OAApD1pB,GAAG2pB,EAAE9vG,SAAQ,SAASmmF,GAAG,OAAO4H,EAAE/uF,EAAEmnF,EAAE,IAAG6uB,IAAGN,GAAG11G,EAAE+wG,GAAUziG,CAAC,CAAC,SAASoG,EAAE1U,EAAE2vF,EAAE4C,EAAE7J,GAAG,IAAIp6E,EAAEujF,EAAGU,GAAG,GAAG,oBAAoBjkF,EAAE,MAAMxM,MAAMwS,EAAE,MAAkB,GAAG,OAAfi+E,EAAEjkF,EAAEpH,KAAKqrF,IAAc,MAAMzwF,MAAMwS,EAAE,MAAM,IAAI,IAAIw8F,EAAExiG,EAAE,KAAKw6E,EAAE6G,EAAEohB,EAAEphB,EAAE,EAAEkhB,EAAE,KAAKtpG,EAAEgrF,EAAEprF,OAAO,OAAO2hF,IAAIvhF,EAAES,KAAK+oG,IAAIxpG,EAAEgrF,EAAEprF,OAAO,CAAC2hF,EAAE5nF,MAAM6vG,GAAGF,EAAE/nB,EAAEA,EAAE,MAAM+nB,EAAE/nB,EAAE2T,QAAQ,IAAI/nF,EAAEujG,EAAEj4G,EAAE8oF,EAAEvhF,EAAE5H,MAAM+oF,GAAG,GAAG,OAAOh0E,EAAE,CAAC,OAAOo0E,IAAIA,EAAE+nB,GAAG,KAAK,CAAC1pB,GAAG2B,GAAG,OAAOp0E,EAAEwnF,WAAWnN,EAAE/uF,EAAE8oF,GAAG6G,EAAExJ,EAAEzxE,EAAEi7E,EAAEohB,GAAG,OAAOD,EAAExiG,EAAEoG,EAAEo8F,EAAErU,QAAQ/nF,EAAEo8F,EAAEp8F,EAAEo0E,EAAE+nB,CAAC,CAAC,GAAGtpG,EAAES,KAAK,OAAOsQ,EAAEtY,EACzf8oF,GAAGktB,IAAGN,GAAG11G,EAAE+wG,GAAGziG,EAAE,GAAG,OAAOw6E,EAAE,CAAC,MAAMvhF,EAAES,KAAK+oG,IAAIxpG,EAAEgrF,EAAEprF,OAAwB,QAAjBI,EAAEywG,EAAEh4G,EAAEuH,EAAE5H,MAAM+oF,MAAciH,EAAExJ,EAAE5+E,EAAEooF,EAAEohB,GAAG,OAAOD,EAAExiG,EAAE/G,EAAEupG,EAAErU,QAAQl1F,EAAEupG,EAAEvpG,GAAc,OAAXyuG,IAAGN,GAAG11G,EAAE+wG,GAAUziG,CAAC,CAAC,IAAIw6E,EAAE4G,EAAE1vF,EAAE8oF,IAAIvhF,EAAES,KAAK+oG,IAAIxpG,EAAEgrF,EAAEprF,OAA4B,QAArBI,EAAE2wG,EAAEpvB,EAAE9oF,EAAE+wG,EAAExpG,EAAE5H,MAAM+oF,MAAcvB,GAAG,OAAO5/E,EAAE20F,WAAWpT,EAAEx/E,OAAO,OAAO/B,EAAEnG,IAAI2vG,EAAExpG,EAAEnG,KAAKuuF,EAAExJ,EAAE5+E,EAAEooF,EAAEohB,GAAG,OAAOD,EAAExiG,EAAE/G,EAAEupG,EAAErU,QAAQl1F,EAAEupG,EAAEvpG,GAAuD,OAApD4/E,GAAG2B,EAAE9nF,SAAQ,SAASmmF,GAAG,OAAO4H,EAAE/uF,EAAEmnF,EAAE,IAAG6uB,IAAGN,GAAG11G,EAAE+wG,GAAUziG,CAAC,CAG3T,OAH4T,SAASsiG,EAAEzpB,EAAEuI,EAAEvJ,EAAEoM,GAAkF,GAA/E,kBAAkBpM,GAAG,OAAOA,GAAGA,EAAEzmF,OAAOuxF,GAAI,OAAO9K,EAAE/kF,MAAM+kF,EAAEA,EAAEiH,MAAMgI,UAAa,kBAAkBjP,GAAG,OAAOA,EAAE,CAAC,OAAOA,EAAE2M,UAAU,KAAKhC,EAAG3J,EAAE,CAAC,IAAI,IAAIuB,EAC7hBvC,EAAE/kF,IAAIkN,EAAEohF,EAAE,OAAOphF,GAAG,CAAC,GAAGA,EAAElN,MAAMsnF,EAAE,CAAU,IAATA,EAAEvC,EAAEzmF,QAAYuxF,GAAI,GAAG,IAAI3iF,EAAEqkF,IAAI,CAACr6E,EAAE6uE,EAAE74E,EAAEmuF,UAAS/M,EAAE1vF,EAAEsO,EAAE63E,EAAEiH,MAAMgI,WAAY+G,OAAOhV,EAAEA,EAAEuI,EAAE,MAAMvI,CAAC,OAAO,GAAG74E,EAAE8/E,cAAc1F,GAAG,kBAAkBA,GAAG,OAAOA,GAAGA,EAAEoK,WAAWpB,GAAI+lB,GAAG/uB,KAAKp6E,EAAE5O,KAAK,CAAC4Y,EAAE6uE,EAAE74E,EAAEmuF,UAAS/M,EAAE1vF,EAAEsO,EAAE63E,EAAEiH,QAASgqB,IAAID,GAAGhwB,EAAE74E,EAAE63E,GAAGuJ,EAAEyM,OAAOhV,EAAEA,EAAEuI,EAAE,MAAMvI,CAAC,CAAC7uE,EAAE6uE,EAAE74E,GAAG,KAAK,CAAMygF,EAAE5H,EAAE74E,GAAGA,EAAEA,EAAEmuF,OAAO,CAACtW,EAAEzmF,OAAOuxF,IAAIvB,EAAEqoB,GAAG5xB,EAAEiH,MAAMgI,SAASjO,EAAEwvB,KAAKpkB,EAAEpM,EAAE/kF,MAAO+6F,OAAOhV,EAAEA,EAAEuI,KAAI6C,EAAEslB,GAAG1xB,EAAEzmF,KAAKymF,EAAE/kF,IAAI+kF,EAAEiH,MAAM,KAAKjG,EAAEwvB,KAAKpkB,IAAK6kB,IAAID,GAAGhwB,EAAEuI,EAAEvJ,GAAGoM,EAAE4J,OAAOhV,EAAEA,EAAEoL,EAAE,CAAC,OAAO5C,EAAExI,GAAG,KAAK6J,EAAG7J,EAAE,CAAC,IAAI74E,EAAE63E,EAAE/kF,IAAI,OACzfsuF,GAAG,CAAC,GAAGA,EAAEtuF,MAAMkN,EAAC,CAAC,GAAG,IAAIohF,EAAEiD,KAAKjD,EAAEkL,UAAUqG,gBAAgB9a,EAAE8a,eAAevR,EAAEkL,UAAUxnF,iBAAiB+yE,EAAE/yE,eAAe,CAACkF,EAAE6uE,EAAEuI,EAAE+M,UAAS/M,EAAE1vF,EAAE0vF,EAAEvJ,EAAEiP,UAAU,KAAM+G,OAAOhV,EAAEA,EAAEuI,EAAE,MAAMvI,CAAC,CAAM7uE,EAAE6uE,EAAEuI,GAAG,KAAM,CAAKX,EAAE5H,EAAEuI,GAAGA,EAAEA,EAAE+M,OAAO,EAAC/M,EAAEooB,GAAG3xB,EAAEgB,EAAEwvB,KAAKpkB,IAAK4J,OAAOhV,EAAEA,EAAEuI,CAAC,CAAC,OAAOC,EAAExI,GAAG,KAAKuK,EAAG,OAAiBkf,EAAEzpB,EAAEuI,GAAdphF,EAAE63E,EAAE8M,OAAc9M,EAAE6M,UAAUT,GAAG,GAAGsC,GAAG1O,GAAG,OAAO5+E,EAAE4/E,EAAEuI,EAAEvJ,EAAEoM,GAAG,GAAGV,EAAG1L,GAAG,OAAOzxE,EAAEyyE,EAAEuI,EAAEvJ,EAAEoM,GAAGilB,GAAGrwB,EAAEhB,EAAE,CAAC,MAAM,kBAAkBA,GAAG,KAAKA,GAAG,kBAAkBA,GAAGA,EAAE,GAAGA,EAAE,OAAOuJ,GAAG,IAAIA,EAAEiD,KAAKr6E,EAAE6uE,EAAEuI,EAAE+M,UAAS/M,EAAE1vF,EAAE0vF,EAAEvJ,IAAKgW,OAAOhV,EAAEA,EAAEuI,IACnfp3E,EAAE6uE,EAAEuI,IAAGA,EAAEkoB,GAAGzxB,EAAEgB,EAAEwvB,KAAKpkB,IAAK4J,OAAOhV,EAAEA,EAAEuI,GAAGC,EAAExI,IAAI7uE,EAAE6uE,EAAEuI,EAAE,CAAS,CAAC,IAAIyoB,GAAGT,IAAG,GAAIU,GAAGV,IAAG,GAAIW,GAAG1E,GAAG,MAAM2E,GAAG,KAAKC,GAAG,KAAKC,GAAG,KAAK,SAASC,KAAKD,GAAGD,GAAGD,GAAG,IAAI,CAAC,SAASI,GAAGvxB,GAAG,IAAI4H,EAAEspB,GAAG3mG,QAAQkiG,GAAEyE,IAAIlxB,EAAEwxB,cAAc5pB,CAAC,CAAC,SAAS6pB,GAAGzxB,EAAE4H,EAAEz2E,GAAG,KAAK,OAAO6uE,GAAG,CAAC,IAAIuI,EAAEvI,EAAE+U,UAA+H,IAApH/U,EAAE0xB,WAAW9pB,KAAKA,GAAG5H,EAAE0xB,YAAY9pB,EAAE,OAAOW,IAAIA,EAAEmpB,YAAY9pB,IAAI,OAAOW,IAAIA,EAAEmpB,WAAW9pB,KAAKA,IAAIW,EAAEmpB,YAAY9pB,GAAM5H,IAAI7uE,EAAE,MAAM6uE,EAAEA,EAAEgV,MAAM,CAAC,CACnZ,SAAS/pF,GAAG+0E,EAAE4H,GAAGupB,GAAGnxB,EAAEqxB,GAAGD,GAAG,KAAsB,QAAjBpxB,EAAEA,EAAE2xB,eAAuB,OAAO3xB,EAAE4xB,eAAe,KAAK5xB,EAAE6xB,MAAMjqB,KAAKkqB,IAAG,GAAI9xB,EAAE4xB,aAAa,KAAK,CAAC,SAASG,GAAG/xB,GAAG,IAAI4H,EAAE5H,EAAEwxB,cAAc,GAAGH,KAAKrxB,EAAE,GAAGA,EAAE,CAACgyB,QAAQhyB,EAAEiyB,cAAcrqB,EAAE5nF,KAAK,MAAM,OAAOoxG,GAAG,CAAC,GAAG,OAAOD,GAAG,MAAMx2G,MAAMwS,EAAE,MAAMikG,GAAGpxB,EAAEmxB,GAAGQ,aAAa,CAACE,MAAM,EAAED,aAAa5xB,EAAE,MAAMoxB,GAAGA,GAAGpxG,KAAKggF,EAAE,OAAO4H,CAAC,CAAC,IAAIsqB,GAAG,KAAK,SAASC,GAAGnyB,GAAG,OAAOkyB,GAAGA,GAAG,CAAClyB,GAAGkyB,GAAG73G,KAAK2lF,EAAE,CACvY,SAASoyB,GAAGpyB,EAAE4H,EAAEz2E,EAAEo3E,GAAG,IAAI1vF,EAAE+uF,EAAEyqB,YAA+E,OAAnE,OAAOx5G,GAAGsY,EAAEnR,KAAKmR,EAAEghG,GAAGvqB,KAAKz2E,EAAEnR,KAAKnH,EAAEmH,KAAKnH,EAAEmH,KAAKmR,GAAGy2E,EAAEyqB,YAAYlhG,EAASmhG,GAAGtyB,EAAEuI,EAAE,CAAC,SAAS+pB,GAAGtyB,EAAE4H,GAAG5H,EAAE6xB,OAAOjqB,EAAE,IAAIz2E,EAAE6uE,EAAE+U,UAAqC,IAA3B,OAAO5jF,IAAIA,EAAE0gG,OAAOjqB,GAAGz2E,EAAE6uE,EAAMA,EAAEA,EAAEgV,OAAO,OAAOhV,GAAGA,EAAE0xB,YAAY9pB,EAAgB,QAAdz2E,EAAE6uE,EAAE+U,aAAqB5jF,EAAEugG,YAAY9pB,GAAGz2E,EAAE6uE,EAAEA,EAAEA,EAAEgV,OAAO,OAAO,IAAI7jF,EAAEq6E,IAAIr6E,EAAEsiF,UAAU,IAAI,CAAC,IAAI8e,IAAG,EAAG,SAASC,GAAGxyB,GAAGA,EAAEyyB,YAAY,CAACC,UAAU1yB,EAAEkV,cAAcyd,gBAAgB,KAAKC,eAAe,KAAKC,OAAO,CAACC,QAAQ,KAAKT,YAAY,KAAKR,MAAM,GAAGkB,QAAQ,KAAK,CAC/e,SAASC,GAAGhzB,EAAE4H,GAAG5H,EAAEA,EAAEyyB,YAAY7qB,EAAE6qB,cAAczyB,IAAI4H,EAAE6qB,YAAY,CAACC,UAAU1yB,EAAE0yB,UAAUC,gBAAgB3yB,EAAE2yB,gBAAgBC,eAAe5yB,EAAE4yB,eAAeC,OAAO7yB,EAAE6yB,OAAOE,QAAQ/yB,EAAE+yB,SAAS,CAAC,SAASE,GAAGjzB,EAAE4H,GAAG,MAAM,CAACsrB,UAAUlzB,EAAEmzB,KAAKvrB,EAAE4D,IAAI,EAAEhpF,QAAQ,KAAKhL,SAAS,KAAKwI,KAAK,KAAK,CACtR,SAASozG,GAAGpzB,EAAE4H,EAAEz2E,GAAG,IAAIo3E,EAAEvI,EAAEyyB,YAAY,GAAG,OAAOlqB,EAAE,OAAO,KAAgB,GAAXA,EAAEA,EAAEsqB,OAAU,KAAO,EAAFQ,IAAK,CAAC,IAAIx6G,EAAE0vF,EAAEuqB,QAA+D,OAAvD,OAAOj6G,EAAE+uF,EAAE5nF,KAAK4nF,GAAGA,EAAE5nF,KAAKnH,EAAEmH,KAAKnH,EAAEmH,KAAK4nF,GAAGW,EAAEuqB,QAAQlrB,EAAS0qB,GAAGtyB,EAAE7uE,EAAE,CAAoF,OAAnE,QAAhBtY,EAAE0vF,EAAE8pB,cAAsBzqB,EAAE5nF,KAAK4nF,EAAEuqB,GAAG5pB,KAAKX,EAAE5nF,KAAKnH,EAAEmH,KAAKnH,EAAEmH,KAAK4nF,GAAGW,EAAE8pB,YAAYzqB,EAAS0qB,GAAGtyB,EAAE7uE,EAAE,CAAC,SAASmiG,GAAGtzB,EAAE4H,EAAEz2E,GAAmB,GAAG,QAAnBy2E,EAAEA,EAAE6qB,eAA0B7qB,EAAEA,EAAEirB,OAAO,KAAO,QAAF1hG,IAAY,CAAC,IAAIo3E,EAAEX,EAAEiqB,MAAwB1gG,GAAlBo3E,GAAGvI,EAAEuX,aAAkB3P,EAAEiqB,MAAM1gG,EAAE+mF,GAAGlY,EAAE7uE,EAAE,CAAC,CACrZ,SAASoiG,GAAGvzB,EAAE4H,GAAG,IAAIz2E,EAAE6uE,EAAEyyB,YAAYlqB,EAAEvI,EAAE+U,UAAU,GAAG,OAAOxM,GAAoBp3E,KAAhBo3E,EAAEA,EAAEkqB,aAAmB,CAAC,IAAI55G,EAAE,KAAKmmF,EAAE,KAAyB,GAAG,QAAvB7tE,EAAEA,EAAEwhG,iBAA4B,CAAC,EAAE,CAAC,IAAInqB,EAAE,CAAC0qB,UAAU/hG,EAAE+hG,UAAUC,KAAKhiG,EAAEgiG,KAAK3nB,IAAIr6E,EAAEq6E,IAAIhpF,QAAQ2O,EAAE3O,QAAQhL,SAAS2Z,EAAE3Z,SAASwI,KAAK,MAAM,OAAOg/E,EAAEnmF,EAAEmmF,EAAEwJ,EAAExJ,EAAEA,EAAEh/E,KAAKwoF,EAAEr3E,EAAEA,EAAEnR,IAAI,OAAO,OAAOmR,GAAG,OAAO6tE,EAAEnmF,EAAEmmF,EAAE4I,EAAE5I,EAAEA,EAAEh/E,KAAK4nF,CAAC,MAAM/uF,EAAEmmF,EAAE4I,EAAiH,OAA/Gz2E,EAAE,CAACuhG,UAAUnqB,EAAEmqB,UAAUC,gBAAgB95G,EAAE+5G,eAAe5zB,EAAE6zB,OAAOtqB,EAAEsqB,OAAOE,QAAQxqB,EAAEwqB,cAAS/yB,EAAEyyB,YAAYthG,EAAQ,CAAoB,QAAnB6uE,EAAE7uE,EAAEyhG,gBAAwBzhG,EAAEwhG,gBAAgB/qB,EAAE5H,EAAEhgF,KACnf4nF,EAAEz2E,EAAEyhG,eAAehrB,CAAC,CACpB,SAAS4rB,GAAGxzB,EAAE4H,EAAEz2E,EAAEo3E,GAAG,IAAI1vF,EAAEmnF,EAAEyyB,YAAYF,IAAG,EAAG,IAAIvzB,EAAEnmF,EAAE85G,gBAAgBnqB,EAAE3vF,EAAE+5G,eAAexnB,EAAEvyF,EAAEg6G,OAAOC,QAAQ,GAAG,OAAO1nB,EAAE,CAACvyF,EAAEg6G,OAAOC,QAAQ,KAAK,IAAIvxB,EAAE6J,EAAEjkF,EAAEo6E,EAAEvhF,KAAKuhF,EAAEvhF,KAAK,KAAK,OAAOwoF,EAAExJ,EAAE73E,EAAEqhF,EAAExoF,KAAKmH,EAAEqhF,EAAEjH,EAAE,IAAII,EAAE3B,EAAE+U,UAAU,OAAOpT,KAAoByJ,GAAhBzJ,EAAEA,EAAE8wB,aAAgBG,kBAAmBpqB,IAAI,OAAO4C,EAAEzJ,EAAEgxB,gBAAgBxrG,EAAEikF,EAAEprF,KAAKmH,EAAEw6E,EAAEixB,eAAerxB,GAAG,CAAC,GAAG,OAAOvC,EAAE,CAAC,IAAI6xB,EAAEh4G,EAAE65G,UAA6B,IAAnBlqB,EAAE,EAAE7G,EAAEx6E,EAAEo6E,EAAE,KAAK6J,EAAEpM,IAAI,CAAC,IAAI8xB,EAAE1lB,EAAE+nB,KAAKpC,EAAE3lB,EAAE8nB,UAAU,IAAI3qB,EAAEuoB,KAAKA,EAAE,CAAC,OAAOnvB,IAAIA,EAAEA,EAAE3hF,KAAK,CAACkzG,UAAUnC,EAAEoC,KAAK,EAAE3nB,IAAIJ,EAAEI,IAAIhpF,QAAQ4oF,EAAE5oF,QAAQhL,SAAS4zF,EAAE5zF,SACvfwI,KAAK,OAAOggF,EAAE,CAAC,IAAI5/E,EAAE4/E,EAAEzyE,EAAE69E,EAAU,OAAR0lB,EAAElpB,EAAEmpB,EAAE5/F,EAAS5D,EAAEi+E,KAAK,KAAK,EAAc,GAAG,oBAAfprF,EAAEmN,EAAE/K,SAAiC,CAACquG,EAAEzwG,EAAEL,KAAKgxG,EAAEF,EAAEC,GAAG,MAAM9wB,CAAC,CAAC6wB,EAAEzwG,EAAE,MAAM4/E,EAAE,KAAK,EAAE5/E,EAAEojF,OAAe,MAATpjF,EAAEojF,MAAa,IAAI,KAAK,EAAsD,GAAG,QAA3CstB,EAAE,oBAAd1wG,EAAEmN,EAAE/K,SAAgCpC,EAAEL,KAAKgxG,EAAEF,EAAEC,GAAG1wG,SAAe,IAAS0wG,EAAE,MAAM9wB,EAAE6wB,EAAEjmB,EAAE,CAAC,EAAEimB,EAAEC,GAAG,MAAM9wB,EAAE,KAAK,EAAEuyB,IAAG,EAAG,CAAC,OAAOnnB,EAAE5zF,UAAU,IAAI4zF,EAAE+nB,OAAOnzB,EAAEwD,OAAO,GAAe,QAAZstB,EAAEj4G,EAAEk6G,SAAiBl6G,EAAEk6G,QAAQ,CAAC3nB,GAAG0lB,EAAEz2G,KAAK+wF,GAAG,MAAM2lB,EAAE,CAACmC,UAAUnC,EAAEoC,KAAKrC,EAAEtlB,IAAIJ,EAAEI,IAAIhpF,QAAQ4oF,EAAE5oF,QAAQhL,SAAS4zF,EAAE5zF,SAASwI,KAAK,MAAM,OAAO2hF,GAAGx6E,EAAEw6E,EAAEovB,EAAExvB,EAAEsvB,GAAGlvB,EAAEA,EAAE3hF,KAAK+wG,EAAEvoB,GAAGsoB,EAC3e,GAAG,QAAZ1lB,EAAEA,EAAEprF,MAAiB,IAAsB,QAAnBorF,EAAEvyF,EAAEg6G,OAAOC,SAAiB,MAAe1nB,GAAJ0lB,EAAE1lB,GAAMprF,KAAK8wG,EAAE9wG,KAAK,KAAKnH,EAAE+5G,eAAe9B,EAAEj4G,EAAEg6G,OAAOC,QAAQ,IAAI,EAAsG,GAA5F,OAAOnxB,IAAIJ,EAAEsvB,GAAGh4G,EAAE65G,UAAUnxB,EAAE1oF,EAAE85G,gBAAgBxrG,EAAEtO,EAAE+5G,eAAejxB,EAA4B,QAA1BiG,EAAE/uF,EAAEg6G,OAAOR,aAAwB,CAACx5G,EAAE+uF,EAAE,GAAGY,GAAG3vF,EAAEs6G,KAAKt6G,EAAEA,EAAEmH,WAAWnH,IAAI+uF,EAAE,MAAM,OAAO5I,IAAInmF,EAAEg6G,OAAOhB,MAAM,GAAG4B,IAAIjrB,EAAExI,EAAE6xB,MAAMrpB,EAAExI,EAAEkV,cAAc2b,CAAC,CAAC,CAC9V,SAAS6C,GAAG1zB,EAAE4H,EAAEz2E,GAA8B,GAA3B6uE,EAAE4H,EAAEmrB,QAAQnrB,EAAEmrB,QAAQ,KAAQ,OAAO/yB,EAAE,IAAI4H,EAAE,EAAEA,EAAE5H,EAAEzgF,OAAOqoF,IAAI,CAAC,IAAIW,EAAEvI,EAAE4H,GAAG/uF,EAAE0vF,EAAE/wF,SAAS,GAAG,OAAOqB,EAAE,CAAqB,GAApB0vF,EAAE/wF,SAAS,KAAK+wF,EAAEp3E,EAAK,oBAAoBtY,EAAE,MAAM8B,MAAMwS,EAAE,IAAItU,IAAIA,EAAEkH,KAAKwoF,EAAE,CAAC,CAAC,CAAC,IAAIorB,GAAG,CAAC,EAAEC,GAAGpH,GAAGmH,IAAIE,GAAGrH,GAAGmH,IAAIG,GAAGtH,GAAGmH,IAAI,SAASI,GAAG/zB,GAAG,GAAGA,IAAI2zB,GAAG,MAAMh5G,MAAMwS,EAAE,MAAM,OAAO6yE,CAAC,CACnS,SAASg0B,GAAGh0B,EAAE4H,GAAyC,OAAtC8kB,GAAEoH,GAAGlsB,GAAG8kB,GAAEmH,GAAG7zB,GAAG0sB,GAAEkH,GAAGD,IAAI3zB,EAAE4H,EAAEx1E,UAAmB,KAAK,EAAE,KAAK,GAAGw1E,GAAGA,EAAEA,EAAE9rF,iBAAiB8rF,EAAEp+E,aAAa+kF,GAAG,KAAK,IAAI,MAAM,QAAkE3G,EAAE2G,GAArC3G,GAAvB5H,EAAE,IAAIA,EAAE4H,EAAEn9E,WAAWm9E,GAAMp+E,cAAc,KAAKw2E,EAAEA,EAAEx1E,SAAkBiiG,GAAEmH,IAAIlH,GAAEkH,GAAGhsB,EAAE,CAAC,SAASqsB,KAAKxH,GAAEmH,IAAInH,GAAEoH,IAAIpH,GAAEqH,GAAG,CAAC,SAASI,GAAGl0B,GAAG+zB,GAAGD,GAAGvpG,SAAS,IAAIq9E,EAAEmsB,GAAGH,GAAGrpG,SAAa4G,EAAEo9E,GAAG3G,EAAE5H,EAAEznF,MAAMqvF,IAAIz2E,IAAIu7F,GAAEmH,GAAG7zB,GAAG0sB,GAAEkH,GAAGziG,GAAG,CAAC,SAASgjG,GAAGn0B,GAAG6zB,GAAGtpG,UAAUy1E,IAAIysB,GAAEmH,IAAInH,GAAEoH,IAAI,CAAC,IAAIO,GAAE5H,GAAG,GACxZ,SAAS6H,GAAGr0B,GAAG,IAAI,IAAI4H,EAAE5H,EAAE,OAAO4H,GAAG,CAAC,GAAG,KAAKA,EAAE4D,IAAI,CAAC,IAAIr6E,EAAEy2E,EAAEsN,cAAc,GAAG,OAAO/jF,IAAmB,QAAfA,EAAEA,EAAEgkF,aAAqB,OAAOhkF,EAAEtT,MAAM,OAAOsT,EAAEtT,MAAM,OAAO+pF,CAAC,MAAM,GAAG,KAAKA,EAAE4D,UAAK,IAAS5D,EAAE+nB,cAAc2E,aAAa,GAAG,KAAa,IAAR1sB,EAAEpE,OAAW,OAAOoE,OAAO,GAAG,OAAOA,EAAE91E,MAAM,CAAC81E,EAAE91E,MAAMkjF,OAAOpN,EAAEA,EAAEA,EAAE91E,MAAM,QAAQ,CAAC,GAAG81E,IAAI5H,EAAE,MAAM,KAAK,OAAO4H,EAAE0N,SAAS,CAAC,GAAG,OAAO1N,EAAEoN,QAAQpN,EAAEoN,SAAShV,EAAE,OAAO,KAAK4H,EAAEA,EAAEoN,MAAM,CAACpN,EAAE0N,QAAQN,OAAOpN,EAAEoN,OAAOpN,EAAEA,EAAE0N,OAAO,CAAC,OAAO,IAAI,CAAC,IAAIif,GAAG,GACrc,SAASC,KAAK,IAAI,IAAIx0B,EAAE,EAAEA,EAAEu0B,GAAGh1G,OAAOygF,IAAIu0B,GAAGv0B,GAAGy0B,8BAA8B,KAAKF,GAAGh1G,OAAO,CAAC,CAAC,IAAIm1G,GAAGjrB,EAAGkrB,uBAAuBC,GAAGnrB,EAAG+Q,wBAAwBqa,GAAG,EAAEC,GAAE,KAAKC,GAAE,KAAKC,GAAE,KAAKC,IAAG,EAAGC,IAAG,EAAGC,GAAG,EAAEC,GAAG,EAAE,SAASC,KAAI,MAAM16G,MAAMwS,EAAE,KAAM,CAAC,SAASmoG,GAAGt1B,EAAE4H,GAAG,GAAG,OAAOA,EAAE,OAAM,EAAG,IAAI,IAAIz2E,EAAE,EAAEA,EAAEy2E,EAAEroF,QAAQ4R,EAAE6uE,EAAEzgF,OAAO4R,IAAI,IAAI4zF,GAAG/kB,EAAE7uE,GAAGy2E,EAAEz2E,IAAI,OAAM,EAAG,OAAM,CAAE,CAChW,SAASokG,GAAGv1B,EAAE4H,EAAEz2E,EAAEo3E,EAAE1vF,EAAEmmF,GAAyH,GAAtH61B,GAAG71B,EAAE81B,GAAEltB,EAAEA,EAAEsN,cAAc,KAAKtN,EAAE6qB,YAAY,KAAK7qB,EAAEiqB,MAAM,EAAE6C,GAAGnqG,QAAQ,OAAOy1E,GAAG,OAAOA,EAAEkV,cAAcsgB,GAAGC,GAAGz1B,EAAE7uE,EAAEo3E,EAAE1vF,GAAMq8G,GAAG,CAACl2B,EAAE,EAAE,EAAE,CAAY,GAAXk2B,IAAG,EAAGC,GAAG,EAAK,IAAIn2B,EAAE,MAAMrkF,MAAMwS,EAAE,MAAM6xE,GAAG,EAAEg2B,GAAED,GAAE,KAAKntB,EAAE6qB,YAAY,KAAKiC,GAAGnqG,QAAQmrG,GAAG11B,EAAE7uE,EAAEo3E,EAAE1vF,EAAE,OAAOq8G,GAAG,CAA+D,GAA9DR,GAAGnqG,QAAQorG,GAAG/tB,EAAE,OAAOmtB,IAAG,OAAOA,GAAE/0G,KAAK60G,GAAG,EAAEG,GAAED,GAAED,GAAE,KAAKG,IAAG,EAAMrtB,EAAE,MAAMjtF,MAAMwS,EAAE,MAAM,OAAO6yE,CAAC,CAAC,SAAS41B,KAAK,IAAI51B,EAAE,IAAIm1B,GAAQ,OAALA,GAAG,EAASn1B,CAAC,CAC/Y,SAAS61B,KAAK,IAAI71B,EAAE,CAACkV,cAAc,KAAKwd,UAAU,KAAKoD,UAAU,KAAKC,MAAM,KAAK/1G,KAAK,MAA8C,OAAxC,OAAOg1G,GAAEF,GAAE5f,cAAc8f,GAAEh1B,EAAEg1B,GAAEA,GAAEh1G,KAAKggF,EAASg1B,EAAC,CAAC,SAASgB,KAAK,GAAG,OAAOjB,GAAE,CAAC,IAAI/0B,EAAE80B,GAAE/f,UAAU/U,EAAE,OAAOA,EAAEA,EAAEkV,cAAc,IAAI,MAAMlV,EAAE+0B,GAAE/0G,KAAK,IAAI4nF,EAAE,OAAOotB,GAAEF,GAAE5f,cAAc8f,GAAEh1G,KAAK,GAAG,OAAO4nF,EAAEotB,GAAEptB,EAAEmtB,GAAE/0B,MAAM,CAAC,GAAG,OAAOA,EAAE,MAAMrlF,MAAMwS,EAAE,MAAU6yE,EAAE,CAACkV,eAAP6f,GAAE/0B,GAAqBkV,cAAcwd,UAAUqC,GAAErC,UAAUoD,UAAUf,GAAEe,UAAUC,MAAMhB,GAAEgB,MAAM/1G,KAAK,MAAM,OAAOg1G,GAAEF,GAAE5f,cAAc8f,GAAEh1B,EAAEg1B,GAAEA,GAAEh1G,KAAKggF,CAAC,CAAC,OAAOg1B,EAAC,CACje,SAASiB,GAAGj2B,EAAE4H,GAAG,MAAM,oBAAoBA,EAAEA,EAAE5H,GAAG4H,CAAC,CACnD,SAASsuB,GAAGl2B,GAAG,IAAI4H,EAAEouB,KAAK7kG,EAAEy2E,EAAEmuB,MAAM,GAAG,OAAO5kG,EAAE,MAAMxW,MAAMwS,EAAE,MAAMgE,EAAEglG,oBAAoBn2B,EAAE,IAAIuI,EAAEwsB,GAAEl8G,EAAE0vF,EAAEutB,UAAU92B,EAAE7tE,EAAE2hG,QAAQ,GAAG,OAAO9zB,EAAE,CAAC,GAAG,OAAOnmF,EAAE,CAAC,IAAI2vF,EAAE3vF,EAAEmH,KAAKnH,EAAEmH,KAAKg/E,EAAEh/E,KAAKg/E,EAAEh/E,KAAKwoF,CAAC,CAACD,EAAEutB,UAAUj9G,EAAEmmF,EAAE7tE,EAAE2hG,QAAQ,IAAI,CAAC,GAAG,OAAOj6G,EAAE,CAACmmF,EAAEnmF,EAAEmH,KAAKuoF,EAAEA,EAAEmqB,UAAU,IAAItnB,EAAE5C,EAAE,KAAKjH,EAAE,KAAKp6E,EAAE63E,EAAE,EAAE,CAAC,IAAI2C,EAAEx6E,EAAEgsG,KAAK,IAAI0B,GAAGlzB,KAAKA,EAAE,OAAOJ,IAAIA,EAAEA,EAAEvhF,KAAK,CAACmzG,KAAK,EAAEiD,OAAOjvG,EAAEivG,OAAOC,cAAclvG,EAAEkvG,cAAcC,WAAWnvG,EAAEmvG,WAAWt2G,KAAK,OAAOuoF,EAAEphF,EAAEkvG,cAAclvG,EAAEmvG,WAAWt2B,EAAEuI,EAAEphF,EAAEivG,YAAY,CAAC,IAAIvF,EAAE,CAACsC,KAAKxxB,EAAEy0B,OAAOjvG,EAAEivG,OAAOC,cAAclvG,EAAEkvG,cACngBC,WAAWnvG,EAAEmvG,WAAWt2G,KAAK,MAAM,OAAOuhF,GAAG6J,EAAE7J,EAAEsvB,EAAEroB,EAAED,GAAGhH,EAAEA,EAAEvhF,KAAK6wG,EAAEiE,GAAEjD,OAAOlwB,EAAE8xB,IAAI9xB,CAAC,CAACx6E,EAAEA,EAAEnH,IAAI,OAAO,OAAOmH,GAAGA,IAAI63E,GAAG,OAAOuC,EAAEiH,EAAED,EAAEhH,EAAEvhF,KAAKorF,EAAE2Z,GAAGxc,EAAEX,EAAEsN,iBAAiB4c,IAAG,GAAIlqB,EAAEsN,cAAc3M,EAAEX,EAAE8qB,UAAUlqB,EAAEZ,EAAEkuB,UAAUv0B,EAAEpwE,EAAEolG,kBAAkBhuB,CAAC,CAAiB,GAAG,QAAnBvI,EAAE7uE,EAAEkhG,aAAwB,CAACx5G,EAAEmnF,EAAE,GAAGhB,EAAEnmF,EAAEs6G,KAAK2B,GAAEjD,OAAO7yB,EAAEy0B,IAAIz0B,EAAEnmF,EAAEA,EAAEmH,WAAWnH,IAAImnF,EAAE,MAAM,OAAOnnF,IAAIsY,EAAE0gG,MAAM,GAAG,MAAM,CAACjqB,EAAEsN,cAAc/jF,EAAEqlG,SAAS,CAC9X,SAASC,GAAGz2B,GAAG,IAAI4H,EAAEouB,KAAK7kG,EAAEy2E,EAAEmuB,MAAM,GAAG,OAAO5kG,EAAE,MAAMxW,MAAMwS,EAAE,MAAMgE,EAAEglG,oBAAoBn2B,EAAE,IAAIuI,EAAEp3E,EAAEqlG,SAAS39G,EAAEsY,EAAE2hG,QAAQ9zB,EAAE4I,EAAEsN,cAAc,GAAG,OAAOr8F,EAAE,CAACsY,EAAE2hG,QAAQ,KAAK,IAAItqB,EAAE3vF,EAAEA,EAAEmH,KAAK,GAAGg/E,EAAEgB,EAAEhB,EAAEwJ,EAAE4tB,QAAQ5tB,EAAEA,EAAExoF,WAAWwoF,IAAI3vF,GAAGksG,GAAG/lB,EAAE4I,EAAEsN,iBAAiB4c,IAAG,GAAIlqB,EAAEsN,cAAclW,EAAE,OAAO4I,EAAEkuB,YAAYluB,EAAE8qB,UAAU1zB,GAAG7tE,EAAEolG,kBAAkBv3B,CAAC,CAAC,MAAM,CAACA,EAAEuJ,EAAE,CAAC,SAASmuB,KAAK,CACpW,SAASC,GAAG32B,EAAE4H,GAAG,IAAIz2E,EAAE2jG,GAAEvsB,EAAEytB,KAAKn9G,EAAE+uF,IAAI5I,GAAG+lB,GAAGxc,EAAE2M,cAAcr8F,GAAsE,GAAnEmmF,IAAIuJ,EAAE2M,cAAcr8F,EAAEi5G,IAAG,GAAIvpB,EAAEA,EAAEwtB,MAAMa,GAAGphG,GAAGvV,KAAK,KAAKkR,EAAEo3E,EAAEvI,GAAG,CAACA,IAAOuI,EAAEsuB,cAAcjvB,GAAG5I,GAAG,OAAOg2B,IAAuB,EAApBA,GAAE9f,cAAc1J,IAAM,CAAuD,GAAtDr6E,EAAEqyE,OAAO,KAAKszB,GAAG,EAAEC,GAAG92G,KAAK,KAAKkR,EAAEo3E,EAAE1vF,EAAE+uF,QAAG,EAAO,MAAS,OAAOovB,GAAE,MAAMr8G,MAAMwS,EAAE,MAAM,KAAQ,GAAH0nG,KAAQoC,GAAG9lG,EAAEy2E,EAAE/uF,EAAE,CAAC,OAAOA,CAAC,CAAC,SAASo+G,GAAGj3B,EAAE4H,EAAEz2E,GAAG6uE,EAAEwD,OAAO,MAAMxD,EAAE,CAAC62B,YAAYjvB,EAAEpvF,MAAM2Y,GAAmB,QAAhBy2E,EAAEktB,GAAErC,cAAsB7qB,EAAE,CAACsvB,WAAW,KAAKC,OAAO,MAAMrC,GAAErC,YAAY7qB,EAAEA,EAAEuvB,OAAO,CAACn3B,IAAgB,QAAX7uE,EAAEy2E,EAAEuvB,QAAgBvvB,EAAEuvB,OAAO,CAACn3B,GAAG7uE,EAAE9W,KAAK2lF,EAAG,CAClf,SAAS+2B,GAAG/2B,EAAE4H,EAAEz2E,EAAEo3E,GAAGX,EAAEpvF,MAAM2Y,EAAEy2E,EAAEivB,YAAYtuB,EAAE6uB,GAAGxvB,IAAIyvB,GAAGr3B,EAAE,CAAC,SAASxqE,GAAGwqE,EAAE4H,EAAEz2E,GAAG,OAAOA,GAAE,WAAWimG,GAAGxvB,IAAIyvB,GAAGr3B,EAAE,GAAE,CAAC,SAASo3B,GAAGp3B,GAAG,IAAI4H,EAAE5H,EAAE62B,YAAY72B,EAAEA,EAAExnF,MAAM,IAAI,IAAI2Y,EAAEy2E,IAAI,OAAOmd,GAAG/kB,EAAE7uE,EAAE,CAAC,MAAMo3E,GAAG,OAAM,CAAE,CAAC,CAAC,SAAS8uB,GAAGr3B,GAAG,IAAI4H,EAAE0qB,GAAGtyB,EAAE,GAAG,OAAO4H,GAAG0vB,GAAG1vB,EAAE5H,EAAE,GAAG,EAAE,CAClQ,SAASu3B,GAAGv3B,GAAG,IAAI4H,EAAEiuB,KAA8M,MAAzM,oBAAoB71B,IAAIA,EAAEA,KAAK4H,EAAEsN,cAActN,EAAE8qB,UAAU1yB,EAAEA,EAAE,CAAC8yB,QAAQ,KAAKT,YAAY,KAAKR,MAAM,EAAE2E,SAAS,KAAKL,oBAAoBF,GAAGM,kBAAkBv2B,GAAG4H,EAAEmuB,MAAM/1B,EAAEA,EAAEA,EAAEw2B,SAASlvE,GAAGrnC,KAAK,KAAK60G,GAAE90B,GAAS,CAAC4H,EAAEsN,cAAclV,EAAE,CAC5P,SAAS82B,GAAG92B,EAAE4H,EAAEz2E,EAAEo3E,GAA8O,OAA3OvI,EAAE,CAACwL,IAAIxL,EAAEw3B,OAAO5vB,EAAE6vB,QAAQtmG,EAAEumG,KAAKnvB,EAAEvoF,KAAK,MAAsB,QAAhB4nF,EAAEktB,GAAErC,cAAsB7qB,EAAE,CAACsvB,WAAW,KAAKC,OAAO,MAAMrC,GAAErC,YAAY7qB,EAAEA,EAAEsvB,WAAWl3B,EAAEhgF,KAAKggF,GAAmB,QAAf7uE,EAAEy2E,EAAEsvB,YAAoBtvB,EAAEsvB,WAAWl3B,EAAEhgF,KAAKggF,GAAGuI,EAAEp3E,EAAEnR,KAAKmR,EAAEnR,KAAKggF,EAAEA,EAAEhgF,KAAKuoF,EAAEX,EAAEsvB,WAAWl3B,GAAWA,CAAC,CAAC,SAAS23B,KAAK,OAAO3B,KAAK9gB,aAAa,CAAC,SAAS0iB,GAAG53B,EAAE4H,EAAEz2E,EAAEo3E,GAAG,IAAI1vF,EAAEg9G,KAAKf,GAAEtxB,OAAOxD,EAAEnnF,EAAEq8F,cAAc4hB,GAAG,EAAElvB,EAAEz2E,OAAE,OAAO,IAASo3E,EAAE,KAAKA,EAAE,CAC9Y,SAASsvB,GAAG73B,EAAE4H,EAAEz2E,EAAEo3E,GAAG,IAAI1vF,EAAEm9G,KAAKztB,OAAE,IAASA,EAAE,KAAKA,EAAE,IAAIvJ,OAAE,EAAO,GAAG,OAAO+1B,GAAE,CAAC,IAAIvsB,EAAEusB,GAAE7f,cAA0B,GAAZlW,EAAEwJ,EAAEivB,QAAW,OAAOlvB,GAAG+sB,GAAG/sB,EAAEC,EAAEkvB,MAAmC,YAA5B7+G,EAAEq8F,cAAc4hB,GAAGlvB,EAAEz2E,EAAE6tE,EAAEuJ,GAAU,CAACusB,GAAEtxB,OAAOxD,EAAEnnF,EAAEq8F,cAAc4hB,GAAG,EAAElvB,EAAEz2E,EAAE6tE,EAAEuJ,EAAE,CAAC,SAASuvB,GAAG93B,EAAE4H,GAAG,OAAOgwB,GAAG,QAAQ,EAAE53B,EAAE4H,EAAE,CAAC,SAASgvB,GAAG52B,EAAE4H,GAAG,OAAOiwB,GAAG,KAAK,EAAE73B,EAAE4H,EAAE,CAAC,SAASjnC,GAAGq/B,EAAE4H,GAAG,OAAOiwB,GAAG,EAAE,EAAE73B,EAAE4H,EAAE,CAAC,SAASmwB,GAAG/3B,EAAE4H,GAAG,OAAOiwB,GAAG,EAAE,EAAE73B,EAAE4H,EAAE,CAChX,SAASh2B,GAAGouB,EAAE4H,GAAG,MAAG,oBAAoBA,GAAS5H,EAAEA,IAAI4H,EAAE5H,GAAG,WAAW4H,EAAE,KAAK,GAAK,OAAOA,QAAG,IAASA,GAAS5H,EAAEA,IAAI4H,EAAEr9E,QAAQy1E,EAAE,WAAW4H,EAAEr9E,QAAQ,IAAI,QAA1E,CAA2E,CAAC,SAASytG,GAAGh4B,EAAE4H,EAAEz2E,GAA6C,OAA1CA,EAAE,OAAOA,QAAG,IAASA,EAAEA,EAAEy3F,OAAO,CAAC5oB,IAAI,KAAY63B,GAAG,EAAE,EAAEjmD,GAAG3xD,KAAK,KAAK2nF,EAAE5H,GAAG7uE,EAAE,CAAC,SAAS8mG,KAAK,CAAC,SAASC,GAAGl4B,EAAE4H,GAAG,IAAIz2E,EAAE6kG,KAAKpuB,OAAE,IAASA,EAAE,KAAKA,EAAE,IAAIW,EAAEp3E,EAAE+jF,cAAc,OAAG,OAAO3M,GAAG,OAAOX,GAAG0tB,GAAG1tB,EAAEW,EAAE,IAAWA,EAAE,IAAGp3E,EAAE+jF,cAAc,CAAClV,EAAE4H,GAAU5H,EAAC,CAC7Z,SAASm4B,GAAGn4B,EAAE4H,GAAG,IAAIz2E,EAAE6kG,KAAKpuB,OAAE,IAASA,EAAE,KAAKA,EAAE,IAAIW,EAAEp3E,EAAE+jF,cAAc,OAAG,OAAO3M,GAAG,OAAOX,GAAG0tB,GAAG1tB,EAAEW,EAAE,IAAWA,EAAE,IAAGvI,EAAEA,IAAI7uE,EAAE+jF,cAAc,CAAClV,EAAE4H,GAAU5H,EAAC,CAAC,SAASo4B,GAAGp4B,EAAE4H,EAAEz2E,GAAG,OAAG,KAAQ,GAAH0jG,KAAc70B,EAAE0yB,YAAY1yB,EAAE0yB,WAAU,EAAGZ,IAAG,GAAI9xB,EAAEkV,cAAc/jF,IAAE4zF,GAAG5zF,EAAEy2E,KAAKz2E,EAAE2mF,KAAKgd,GAAEjD,OAAO1gG,EAAEsiG,IAAItiG,EAAE6uE,EAAE0yB,WAAU,GAAW9qB,EAAC,CAAC,SAASywB,GAAGr4B,EAAE4H,GAAG,IAAIz2E,EAAEgnF,GAAEA,GAAE,IAAIhnF,GAAG,EAAEA,EAAEA,EAAE,EAAE6uE,GAAE,GAAI,IAAIuI,EAAEqsB,GAAGla,WAAWka,GAAGla,WAAW,CAAC,EAAE,IAAI1a,GAAE,GAAI4H,GAAG,CAAC,QAAQuQ,GAAEhnF,EAAEyjG,GAAGla,WAAWnS,CAAC,CAAC,CAAC,SAAS+vB,KAAK,OAAOtC,KAAK9gB,aAAa,CAC1d,SAASta,GAAGoF,EAAE4H,EAAEz2E,GAAG,IAAIo3E,EAAEgwB,GAAGv4B,GAAkE,GAA/D7uE,EAAE,CAACgiG,KAAK5qB,EAAE6tB,OAAOjlG,EAAEklG,eAAc,EAAGC,WAAW,KAAKt2G,KAAK,MAASw4G,GAAGx4B,GAAGy4B,GAAG7wB,EAAEz2E,QAAQ,GAAiB,QAAdA,EAAEihG,GAAGpyB,EAAE4H,EAAEz2E,EAAEo3E,IAAY,CAAW+uB,GAAGnmG,EAAE6uE,EAAEuI,EAAXmwB,MAAgBC,GAAGxnG,EAAEy2E,EAAEW,EAAE,CAAC,CAC/K,SAASjhD,GAAG04C,EAAE4H,EAAEz2E,GAAG,IAAIo3E,EAAEgwB,GAAGv4B,GAAGnnF,EAAE,CAACs6G,KAAK5qB,EAAE6tB,OAAOjlG,EAAEklG,eAAc,EAAGC,WAAW,KAAKt2G,KAAK,MAAM,GAAGw4G,GAAGx4B,GAAGy4B,GAAG7wB,EAAE/uF,OAAO,CAAC,IAAImmF,EAAEgB,EAAE+U,UAAU,GAAG,IAAI/U,EAAE6xB,QAAQ,OAAO7yB,GAAG,IAAIA,EAAE6yB,QAAiC,QAAxB7yB,EAAE4I,EAAEuuB,qBAA8B,IAAI,IAAI3tB,EAAEZ,EAAE2uB,kBAAkBnrB,EAAEpM,EAAEwJ,EAAEr3E,GAAqC,GAAlCtY,EAAEw9G,eAAc,EAAGx9G,EAAEy9G,WAAWlrB,EAAK2Z,GAAG3Z,EAAE5C,GAAG,CAAC,IAAIjH,EAAEqG,EAAEyqB,YAA+E,OAAnE,OAAO9wB,GAAG1oF,EAAEmH,KAAKnH,EAAEs5G,GAAGvqB,KAAK/uF,EAAEmH,KAAKuhF,EAAEvhF,KAAKuhF,EAAEvhF,KAAKnH,QAAG+uF,EAAEyqB,YAAYx5G,EAAQ,CAAC,CAAC,MAAMsO,GAAG,CAAwB,QAAdgK,EAAEihG,GAAGpyB,EAAE4H,EAAE/uF,EAAE0vF,MAAoB+uB,GAAGnmG,EAAE6uE,EAAEuI,EAAb1vF,EAAE6/G,MAAgBC,GAAGxnG,EAAEy2E,EAAEW,GAAG,CAAC,CAC/c,SAASiwB,GAAGx4B,GAAG,IAAI4H,EAAE5H,EAAE+U,UAAU,OAAO/U,IAAI80B,IAAG,OAAOltB,GAAGA,IAAIktB,EAAC,CAAC,SAAS2D,GAAGz4B,EAAE4H,GAAGstB,GAAGD,IAAG,EAAG,IAAI9jG,EAAE6uE,EAAE8yB,QAAQ,OAAO3hG,EAAEy2E,EAAE5nF,KAAK4nF,GAAGA,EAAE5nF,KAAKmR,EAAEnR,KAAKmR,EAAEnR,KAAK4nF,GAAG5H,EAAE8yB,QAAQlrB,CAAC,CAAC,SAAS+wB,GAAG34B,EAAE4H,EAAEz2E,GAAG,GAAG,KAAO,QAAFA,GAAW,CAAC,IAAIo3E,EAAEX,EAAEiqB,MAAwB1gG,GAAlBo3E,GAAGvI,EAAEuX,aAAkB3P,EAAEiqB,MAAM1gG,EAAE+mF,GAAGlY,EAAE7uE,EAAE,CAAC,CAC9P,IAAIwkG,GAAG,CAACiD,YAAY7G,GAAG8G,YAAYxD,GAAEyD,WAAWzD,GAAE0D,UAAU1D,GAAE2D,oBAAoB3D,GAAE4D,mBAAmB5D,GAAE6D,gBAAgB7D,GAAE8D,QAAQ9D,GAAE+D,WAAW/D,GAAEgE,OAAOhE,GAAEiE,SAASjE,GAAEkE,cAAclE,GAAEmE,iBAAiBnE,GAAEoE,cAAcpE,GAAEqE,iBAAiBrE,GAAEsE,qBAAqBtE,GAAEuE,MAAMvE,GAAEwE,0BAAyB,GAAIrE,GAAG,CAACoD,YAAY7G,GAAG8G,YAAY,SAAS74B,EAAE4H,GAA4C,OAAzCiuB,KAAK3gB,cAAc,CAAClV,OAAE,IAAS4H,EAAE,KAAKA,GAAU5H,CAAC,EAAE84B,WAAW/G,GAAGgH,UAAUjB,GAAGkB,oBAAoB,SAASh5B,EAAE4H,EAAEz2E,GAA6C,OAA1CA,EAAE,OAAOA,QAAG,IAASA,EAAEA,EAAEy3F,OAAO,CAAC5oB,IAAI,KAAY43B,GAAG,QAC3f,EAAEhmD,GAAG3xD,KAAK,KAAK2nF,EAAE5H,GAAG7uE,EAAE,EAAE+nG,gBAAgB,SAASl5B,EAAE4H,GAAG,OAAOgwB,GAAG,QAAQ,EAAE53B,EAAE4H,EAAE,EAAEqxB,mBAAmB,SAASj5B,EAAE4H,GAAG,OAAOgwB,GAAG,EAAE,EAAE53B,EAAE4H,EAAE,EAAEuxB,QAAQ,SAASn5B,EAAE4H,GAAG,IAAIz2E,EAAE0kG,KAAqD,OAAhDjuB,OAAE,IAASA,EAAE,KAAKA,EAAE5H,EAAEA,IAAI7uE,EAAE+jF,cAAc,CAAClV,EAAE4H,GAAU5H,CAAC,EAAEo5B,WAAW,SAASp5B,EAAE4H,EAAEz2E,GAAG,IAAIo3E,EAAEstB,KAAkM,OAA7LjuB,OAAE,IAASz2E,EAAEA,EAAEy2E,GAAGA,EAAEW,EAAE2M,cAAc3M,EAAEmqB,UAAU9qB,EAAE5H,EAAE,CAAC8yB,QAAQ,KAAKT,YAAY,KAAKR,MAAM,EAAE2E,SAAS,KAAKL,oBAAoBn2B,EAAEu2B,kBAAkB3uB,GAAGW,EAAEwtB,MAAM/1B,EAAEA,EAAEA,EAAEw2B,SAAS57B,GAAG36E,KAAK,KAAK60G,GAAE90B,GAAS,CAACuI,EAAE2M,cAAclV,EAAE,EAAEq5B,OAAO,SAASr5B,GAC3d,OAAdA,EAAE,CAACz1E,QAAQy1E,GAAhB61B,KAA4B3gB,cAAclV,CAAC,EAAEs5B,SAAS/B,GAAGgC,cAActB,GAAGuB,iBAAiB,SAASx5B,GAAG,OAAO61B,KAAK3gB,cAAclV,CAAC,EAAEy5B,cAAc,WAAW,IAAIz5B,EAAEu3B,IAAG,GAAI3vB,EAAE5H,EAAE,GAA6C,OAA1CA,EAAEq4B,GAAGp4G,KAAK,KAAK+/E,EAAE,IAAI61B,KAAK3gB,cAAclV,EAAQ,CAAC4H,EAAE5H,EAAE,EAAE05B,iBAAiB,WAAW,EAAEC,qBAAqB,SAAS35B,EAAE4H,EAAEz2E,GAAG,IAAIo3E,EAAEusB,GAAEj8G,EAAEg9G,KAAK,GAAGhH,GAAE,CAAC,QAAG,IAAS19F,EAAE,MAAMxW,MAAMwS,EAAE,MAAMgE,EAAEA,GAAG,KAAK,CAAO,GAANA,EAAEy2E,IAAO,OAAOovB,GAAE,MAAMr8G,MAAMwS,EAAE,MAAM,KAAQ,GAAH0nG,KAAQoC,GAAG1uB,EAAEX,EAAEz2E,EAAE,CAACtY,EAAEq8F,cAAc/jF,EAAE,IAAI6tE,EAAE,CAACxmF,MAAM2Y,EAAE0lG,YAAYjvB,GACvZ,OAD0Z/uF,EAAEk9G,MAAM/2B,EAAE84B,GAAGtiG,GAAGvV,KAAK,KAAKsoF,EACpfvJ,EAAEgB,GAAG,CAACA,IAAIuI,EAAE/E,OAAO,KAAKszB,GAAG,EAAEC,GAAG92G,KAAK,KAAKsoF,EAAEvJ,EAAE7tE,EAAEy2E,QAAG,EAAO,MAAaz2E,CAAC,EAAEyoG,MAAM,WAAW,IAAI55B,EAAE61B,KAAKjuB,EAAEovB,GAAE8C,iBAAiB,GAAGjL,GAAE,CAAC,IAAI19F,EAAEm9F,GAAkD1mB,EAAE,IAAIA,EAAE,KAA9Cz2E,GAAHk9F,KAAU,GAAG,GAAGzpG,GAAhBypG,IAAsB,IAAI9tG,SAAS,IAAI4Q,GAAuB,GAAPA,EAAEgkG,QAAWvtB,GAAG,IAAIz2E,EAAE5Q,SAAS,KAAKqnF,GAAG,GAAG,MAAaA,EAAE,IAAIA,EAAE,KAAfz2E,EAAEikG,MAAmB70G,SAAS,IAAI,IAAI,OAAOy/E,EAAEkV,cAActN,CAAC,EAAEiyB,0BAAyB,GAAIpE,GAAG,CAACmD,YAAY7G,GAAG8G,YAAYX,GAAGY,WAAW/G,GAAGgH,UAAUnC,GAAGoC,oBAAoBhB,GAAGiB,mBAAmBt4D,GAAGu4D,gBAAgBnB,GAAGoB,QAAQhB,GAAGiB,WAAWlD,GAAGmD,OAAO1B,GAAG2B,SAAS,WAAW,OAAOpD,GAAGD,GAAG,EACrhBsD,cAActB,GAAGuB,iBAAiB,SAASx5B,GAAc,OAAOo4B,GAAZpC,KAAiBjB,GAAE7f,cAAclV,EAAE,EAAEy5B,cAAc,WAAgD,MAAM,CAArCvD,GAAGD,IAAI,GAAKD,KAAK9gB,cAAyB,EAAEwkB,iBAAiBhD,GAAGiD,qBAAqBhD,GAAGiD,MAAMtB,GAAGuB,0BAAyB,GAAInE,GAAG,CAACkD,YAAY7G,GAAG8G,YAAYX,GAAGY,WAAW/G,GAAGgH,UAAUnC,GAAGoC,oBAAoBhB,GAAGiB,mBAAmBt4D,GAAGu4D,gBAAgBnB,GAAGoB,QAAQhB,GAAGiB,WAAW3C,GAAG4C,OAAO1B,GAAG2B,SAAS,WAAW,OAAO7C,GAAGR,GAAG,EAAEsD,cAActB,GAAGuB,iBAAiB,SAASx5B,GAAG,IAAI4H,EAAEouB,KAAK,OAAO,OACzfjB,GAAEntB,EAAEsN,cAAclV,EAAEo4B,GAAGxwB,EAAEmtB,GAAE7f,cAAclV,EAAE,EAAEy5B,cAAc,WAAgD,MAAM,CAArChD,GAAGR,IAAI,GAAKD,KAAK9gB,cAAyB,EAAEwkB,iBAAiBhD,GAAGiD,qBAAqBhD,GAAGiD,MAAMtB,GAAGuB,0BAAyB,GAAI,SAASE,GAAG/5B,EAAE4H,GAAG,GAAG5H,GAAGA,EAAEg6B,aAAa,CAA4B,IAAI,IAAI7oG,KAAnCy2E,EAAEgD,EAAE,CAAC,EAAEhD,GAAG5H,EAAEA,EAAEg6B,kBAA4B,IAASpyB,EAAEz2E,KAAKy2E,EAAEz2E,GAAG6uE,EAAE7uE,IAAI,OAAOy2E,CAAC,CAAC,OAAOA,CAAC,CAAC,SAASqyB,GAAGj6B,EAAE4H,EAAEz2E,EAAEo3E,GAA8Bp3E,EAAE,QAAXA,EAAEA,EAAEo3E,EAAtBX,EAAE5H,EAAEkV,sBAAmC,IAAS/jF,EAAEy2E,EAAEgD,EAAE,CAAC,EAAEhD,EAAEz2E,GAAG6uE,EAAEkV,cAAc/jF,EAAE,IAAI6uE,EAAE6xB,QAAQ7xB,EAAEyyB,YAAYC,UAAUvhG,EAAE,CACrd,IAAI+oG,GAAG,CAACC,UAAU,SAASn6B,GAAG,SAAOA,EAAEA,EAAEo6B,kBAAiBtlB,GAAG9U,KAAKA,CAAI,EAAEq6B,gBAAgB,SAASr6B,EAAE4H,EAAEz2E,GAAG6uE,EAAEA,EAAEo6B,gBAAgB,IAAI7xB,EAAEmwB,KAAI7/G,EAAE0/G,GAAGv4B,GAAGhB,EAAEi0B,GAAG1qB,EAAE1vF,GAAGmmF,EAAEx8E,QAAQolF,OAAE,IAASz2E,GAAG,OAAOA,IAAI6tE,EAAExnF,SAAS2Z,GAAe,QAAZy2E,EAAEwrB,GAAGpzB,EAAEhB,EAAEnmF,MAAcy+G,GAAG1vB,EAAE5H,EAAEnnF,EAAE0vF,GAAG+qB,GAAG1rB,EAAE5H,EAAEnnF,GAAG,EAAEyhH,oBAAoB,SAASt6B,EAAE4H,EAAEz2E,GAAG6uE,EAAEA,EAAEo6B,gBAAgB,IAAI7xB,EAAEmwB,KAAI7/G,EAAE0/G,GAAGv4B,GAAGhB,EAAEi0B,GAAG1qB,EAAE1vF,GAAGmmF,EAAEwM,IAAI,EAAExM,EAAEx8E,QAAQolF,OAAE,IAASz2E,GAAG,OAAOA,IAAI6tE,EAAExnF,SAAS2Z,GAAe,QAAZy2E,EAAEwrB,GAAGpzB,EAAEhB,EAAEnmF,MAAcy+G,GAAG1vB,EAAE5H,EAAEnnF,EAAE0vF,GAAG+qB,GAAG1rB,EAAE5H,EAAEnnF,GAAG,EAAE0hH,mBAAmB,SAASv6B,EAAE4H,GAAG5H,EAAEA,EAAEo6B,gBAAgB,IAAIjpG,EAAEunG,KAAInwB,EACnfgwB,GAAGv4B,GAAGnnF,EAAEo6G,GAAG9hG,EAAEo3E,GAAG1vF,EAAE2yF,IAAI,OAAE,IAAS5D,GAAG,OAAOA,IAAI/uF,EAAErB,SAASowF,GAAe,QAAZA,EAAEwrB,GAAGpzB,EAAEnnF,EAAE0vF,MAAc+uB,GAAG1vB,EAAE5H,EAAEuI,EAAEp3E,GAAGmiG,GAAG1rB,EAAE5H,EAAEuI,GAAG,GAAG,SAASiyB,GAAGx6B,EAAE4H,EAAEz2E,EAAEo3E,EAAE1vF,EAAEmmF,EAAEwJ,GAAiB,MAAM,oBAApBxI,EAAEA,EAAEyT,WAAsCgnB,sBAAsBz6B,EAAEy6B,sBAAsBlyB,EAAEvJ,EAAEwJ,IAAGZ,EAAEtnF,YAAWsnF,EAAEtnF,UAAUo6G,wBAAsB1V,GAAG7zF,EAAEo3E,KAAKyc,GAAGnsG,EAAEmmF,GAAK,CAC1S,SAAS27B,GAAG36B,EAAE4H,EAAEz2E,GAAG,IAAIo3E,GAAE,EAAG1vF,EAAE8zG,GAAO3tB,EAAE4I,EAAEgzB,YAA2W,MAA/V,kBAAkB57B,GAAG,OAAOA,EAAEA,EAAE+yB,GAAG/yB,IAAInmF,EAAEs0G,GAAGvlB,GAAGklB,GAAGF,GAAEriG,QAAyBy0E,GAAGuJ,EAAE,QAAtBA,EAAEX,EAAEolB,oBAA4B,IAASzkB,GAAGwkB,GAAG/sB,EAAEnnF,GAAG8zG,IAAI/kB,EAAE,IAAIA,EAAEz2E,EAAE6tE,GAAGgB,EAAEkV,cAAc,OAAOtN,EAAEizB,YAAO,IAASjzB,EAAEizB,MAAMjzB,EAAEizB,MAAM,KAAKjzB,EAAEkzB,QAAQZ,GAAGl6B,EAAEyT,UAAU7L,EAAEA,EAAEwyB,gBAAgBp6B,EAAEuI,KAAIvI,EAAEA,EAAEyT,WAAYwZ,4CAA4Cp0G,EAAEmnF,EAAEktB,0CAA0CluB,GAAU4I,CAAC,CAC5Z,SAASmzB,GAAG/6B,EAAE4H,EAAEz2E,EAAEo3E,GAAGvI,EAAE4H,EAAEizB,MAAM,oBAAoBjzB,EAAEozB,2BAA2BpzB,EAAEozB,0BAA0B7pG,EAAEo3E,GAAG,oBAAoBX,EAAEqzB,kCAAkCrzB,EAAEqzB,iCAAiC9pG,EAAEo3E,GAAGX,EAAEizB,QAAQ76B,GAAGk6B,GAAGI,oBAAoB1yB,EAAEA,EAAEizB,MAAM,KAAK,CACpQ,SAASK,GAAGl7B,EAAE4H,EAAEz2E,EAAEo3E,GAAG,IAAI1vF,EAAEmnF,EAAEyT,UAAU56F,EAAEotF,MAAM90E,EAAEtY,EAAEgiH,MAAM76B,EAAEkV,cAAcr8F,EAAEu3G,KAAK,CAAC,EAAEoC,GAAGxyB,GAAG,IAAIhB,EAAE4I,EAAEgzB,YAAY,kBAAkB57B,GAAG,OAAOA,EAAEnmF,EAAEm5G,QAAQD,GAAG/yB,IAAIA,EAAEmuB,GAAGvlB,GAAGklB,GAAGF,GAAEriG,QAAQ1R,EAAEm5G,QAAQjF,GAAG/sB,EAAEhB,IAAInmF,EAAEgiH,MAAM76B,EAAEkV,cAA2C,oBAA7BlW,EAAE4I,EAAEuzB,4BAAiDlB,GAAGj6B,EAAE4H,EAAE5I,EAAE7tE,GAAGtY,EAAEgiH,MAAM76B,EAAEkV,eAAe,oBAAoBtN,EAAEuzB,0BAA0B,oBAAoBtiH,EAAEuiH,yBAAyB,oBAAoBviH,EAAEwiH,2BAA2B,oBAAoBxiH,EAAEyiH,qBAAqB1zB,EAAE/uF,EAAEgiH,MACrf,oBAAoBhiH,EAAEyiH,oBAAoBziH,EAAEyiH,qBAAqB,oBAAoBziH,EAAEwiH,2BAA2BxiH,EAAEwiH,4BAA4BzzB,IAAI/uF,EAAEgiH,OAAOX,GAAGI,oBAAoBzhH,EAAEA,EAAEgiH,MAAM,MAAMrH,GAAGxzB,EAAE7uE,EAAEtY,EAAE0vF,GAAG1vF,EAAEgiH,MAAM76B,EAAEkV,eAAe,oBAAoBr8F,EAAE0iH,oBAAoBv7B,EAAEwD,OAAO,QAAQ,CAAC,SAASg4B,GAAGx7B,EAAE4H,GAAG,IAAI,IAAIz2E,EAAE,GAAGo3E,EAAEX,EAAE,GAAGz2E,GAAGo6E,EAAGhD,GAAGA,EAAEA,EAAEyM,aAAazM,GAAG,IAAI1vF,EAAEsY,CAAC,CAAC,MAAM6tE,GAAGnmF,EAAE,6BAA6BmmF,EAAEzvE,QAAQ,KAAKyvE,EAAE8L,KAAK,CAAC,MAAM,CAACtyF,MAAMwnF,EAAEt6E,OAAOkiF,EAAEkD,MAAMjyF,EAAE4iH,OAAO,KAAK,CAC1d,SAASC,GAAG17B,EAAE4H,EAAEz2E,GAAG,MAAM,CAAC3Y,MAAMwnF,EAAEt6E,OAAO,KAAKolF,MAAM,MAAM35E,EAAEA,EAAE,KAAKsqG,OAAO,MAAM7zB,EAAEA,EAAE,KAAK,CAAC,SAAS+zB,GAAG37B,EAAE4H,GAAG,IAAIt7E,QAAQnD,MAAMy+E,EAAEpvF,MAAM,CAAC,MAAM2Y,GAAGnU,YAAW,WAAW,MAAMmU,CAAE,GAAE,CAAC,CAAC,IAAIyqG,GAAG,oBAAoBC,QAAQA,QAAQz6G,IAAI,SAAS06G,GAAG97B,EAAE4H,EAAEz2E,IAAGA,EAAE8hG,IAAI,EAAE9hG,IAAKq6E,IAAI,EAAEr6E,EAAE3O,QAAQ,CAACmK,QAAQ,MAAM,IAAI47E,EAAEX,EAAEpvF,MAAsD,OAAhD2Y,EAAE3Z,SAAS,WAAWukH,KAAKA,IAAG,EAAGpqD,GAAG42B,GAAGozB,GAAG37B,EAAE4H,EAAE,EAASz2E,CAAC,CACrW,SAAS6qG,GAAGh8B,EAAE4H,EAAEz2E,IAAGA,EAAE8hG,IAAI,EAAE9hG,IAAKq6E,IAAI,EAAE,IAAIjD,EAAEvI,EAAEznF,KAAK0jH,yBAAyB,GAAG,oBAAoB1zB,EAAE,CAAC,IAAI1vF,EAAE+uF,EAAEpvF,MAAM2Y,EAAE3O,QAAQ,WAAW,OAAO+lF,EAAE1vF,EAAE,EAAEsY,EAAE3Z,SAAS,WAAWmkH,GAAG37B,EAAE4H,EAAE,CAAC,CAAC,IAAI5I,EAAEgB,EAAEyT,UAA8O,OAApO,OAAOzU,GAAG,oBAAoBA,EAAEk9B,oBAAoB/qG,EAAE3Z,SAAS,WAAWmkH,GAAG37B,EAAE4H,GAAG,oBAAoBW,IAAI,OAAO4zB,GAAGA,GAAG,IAAIr6G,IAAI,CAACZ,OAAOi7G,GAAGl6G,IAAIf,OAAO,IAAIiQ,EAAEy2E,EAAEkD,MAAM5pF,KAAKg7G,kBAAkBt0B,EAAEpvF,MAAM,CAAC4jH,eAAe,OAAOjrG,EAAEA,EAAE,IAAI,GAAUA,CAAC,CACnb,SAASkrG,GAAGr8B,EAAE4H,EAAEz2E,GAAG,IAAIo3E,EAAEvI,EAAEs8B,UAAU,GAAG,OAAO/zB,EAAE,CAACA,EAAEvI,EAAEs8B,UAAU,IAAIV,GAAG,IAAI/iH,EAAE,IAAIiJ,IAAIymF,EAAE1mF,IAAI+lF,EAAE/uF,EAAE,WAAiB,KAAXA,EAAE0vF,EAAEvmF,IAAI4lF,MAAgB/uF,EAAE,IAAIiJ,IAAIymF,EAAE1mF,IAAI+lF,EAAE/uF,IAAIA,EAAE+I,IAAIuP,KAAKtY,EAAEoJ,IAAIkP,GAAG6uE,EAAEu8B,GAAGt8G,KAAK,KAAK+/E,EAAE4H,EAAEz2E,GAAGy2E,EAAE+jB,KAAK3rB,EAAEA,GAAG,CAAC,SAASw8B,GAAGx8B,GAAG,EAAE,CAAC,IAAI4H,EAA4E,IAAvEA,EAAE,KAAK5H,EAAEwL,OAAsB5D,EAAE,QAApBA,EAAE5H,EAAEkV,gBAAyB,OAAOtN,EAAEuN,YAAuBvN,EAAE,OAAO5H,EAAEA,EAAEA,EAAEgV,MAAM,OAAO,OAAOhV,GAAG,OAAO,IAAI,CAChW,SAASy8B,GAAGz8B,EAAE4H,EAAEz2E,EAAEo3E,EAAE1vF,GAAG,OAAG,KAAY,EAAPmnF,EAAEwvB,OAAexvB,IAAI4H,EAAE5H,EAAEwD,OAAO,OAAOxD,EAAEwD,OAAO,IAAIryE,EAAEqyE,OAAO,OAAOryE,EAAEqyE,QAAQ,MAAM,IAAIryE,EAAEq6E,MAAM,OAAOr6E,EAAE4jF,UAAU5jF,EAAEq6E,IAAI,KAAI5D,EAAEqrB,IAAI,EAAE,IAAKznB,IAAI,EAAE4nB,GAAGjiG,EAAEy2E,EAAE,KAAKz2E,EAAE0gG,OAAO,GAAG7xB,IAAEA,EAAEwD,OAAO,MAAMxD,EAAE6xB,MAAMh5G,EAASmnF,EAAC,CAAC,IAAI08B,GAAGjzB,EAAGkzB,kBAAkB7K,IAAG,EAAG,SAASn3B,GAAGqF,EAAE4H,EAAEz2E,EAAEo3E,GAAGX,EAAE91E,MAAM,OAAOkuE,EAAEixB,GAAGrpB,EAAE,KAAKz2E,EAAEo3E,GAAGyoB,GAAGppB,EAAE5H,EAAEluE,MAAMX,EAAEo3E,EAAE,CACnV,SAASq0B,GAAG58B,EAAE4H,EAAEz2E,EAAEo3E,EAAE1vF,GAAGsY,EAAEA,EAAEs6E,OAAO,IAAIzM,EAAE4I,EAAEqoB,IAAqC,OAAjChlG,GAAG28E,EAAE/uF,GAAG0vF,EAAEgtB,GAAGv1B,EAAE4H,EAAEz2E,EAAEo3E,EAAEvJ,EAAEnmF,GAAGsY,EAAEykG,KAAQ,OAAO51B,GAAI8xB,IAA2EjD,IAAG19F,GAAGs9F,GAAG7mB,GAAGA,EAAEpE,OAAO,EAAE7I,GAAGqF,EAAE4H,EAAEW,EAAE1vF,GAAU+uF,EAAE91E,QAA7G81E,EAAE6qB,YAAYzyB,EAAEyyB,YAAY7qB,EAAEpE,QAAQ,KAAKxD,EAAE6xB,QAAQh5G,EAAEgkH,GAAG78B,EAAE4H,EAAE/uF,GAAoD,CACzN,SAASikH,GAAG98B,EAAE4H,EAAEz2E,EAAEo3E,EAAE1vF,GAAG,GAAG,OAAOmnF,EAAE,CAAC,IAAIhB,EAAE7tE,EAAE5Y,KAAK,MAAG,oBAAoBymF,GAAI+9B,GAAG/9B,SAAI,IAASA,EAAEg7B,cAAc,OAAO7oG,EAAE6rG,cAAS,IAAS7rG,EAAE6oG,eAAoDh6B,EAAE0wB,GAAGv/F,EAAE5Y,KAAK,KAAKgwF,EAAEX,EAAEA,EAAE4nB,KAAK32G,IAAKo3G,IAAIroB,EAAEqoB,IAAIjwB,EAAEgV,OAAOpN,EAASA,EAAE91E,MAAMkuE,IAArG4H,EAAE4D,IAAI,GAAG5D,EAAErvF,KAAKymF,EAAEi+B,GAAGj9B,EAAE4H,EAAE5I,EAAEuJ,EAAE1vF,GAAyE,CAAW,GAAVmmF,EAAEgB,EAAEluE,MAAS,KAAKkuE,EAAE6xB,MAAMh5G,GAAG,CAAC,IAAI2vF,EAAExJ,EAAE2wB,cAA0C,IAAhBx+F,EAAE,QAAdA,EAAEA,EAAE6rG,SAAmB7rG,EAAE6zF,IAAQxc,EAAED,IAAIvI,EAAEiwB,MAAMroB,EAAEqoB,IAAI,OAAO4M,GAAG78B,EAAE4H,EAAE/uF,EAAE,CAA6C,OAA5C+uF,EAAEpE,OAAO,GAAExD,EAAEwwB,GAAGxxB,EAAEuJ,IAAK0nB,IAAIroB,EAAEqoB,IAAIjwB,EAAEgV,OAAOpN,EAASA,EAAE91E,MAAMkuE,CAAC,CAC1b,SAASi9B,GAAGj9B,EAAE4H,EAAEz2E,EAAEo3E,EAAE1vF,GAAG,GAAG,OAAOmnF,EAAE,CAAC,IAAIhB,EAAEgB,EAAE2vB,cAAc,GAAG3K,GAAGhmB,EAAEuJ,IAAIvI,EAAEiwB,MAAMroB,EAAEqoB,IAAI,IAAG6B,IAAG,EAAGlqB,EAAEunB,aAAa5mB,EAAEvJ,EAAE,KAAKgB,EAAE6xB,MAAMh5G,GAAsC,OAAO+uF,EAAEiqB,MAAM7xB,EAAE6xB,MAAMgL,GAAG78B,EAAE4H,EAAE/uF,GAAjE,KAAa,OAARmnF,EAAEwD,SAAgBsuB,IAAG,EAAyC,EAAC,OAAOoL,GAAGl9B,EAAE4H,EAAEz2E,EAAEo3E,EAAE1vF,EAAE,CACxN,SAASskH,GAAGn9B,EAAE4H,EAAEz2E,GAAG,IAAIo3E,EAAEX,EAAEunB,aAAat2G,EAAE0vF,EAAE0F,SAASjP,EAAE,OAAOgB,EAAEA,EAAEkV,cAAc,KAAK,GAAG,WAAW3M,EAAEinB,KAAK,GAAG,KAAY,EAAP5nB,EAAE4nB,MAAQ5nB,EAAEsN,cAAc,CAACkoB,UAAU,EAAEC,UAAU,KAAKC,YAAY,MAAM5Q,GAAE6Q,GAAGC,IAAIA,IAAIrsG,MAAM,CAAC,GAAG,KAAO,WAAFA,GAAc,OAAO6uE,EAAE,OAAOhB,EAAEA,EAAEo+B,UAAUjsG,EAAEA,EAAEy2E,EAAEiqB,MAAMjqB,EAAE8pB,WAAW,WAAW9pB,EAAEsN,cAAc,CAACkoB,UAAUp9B,EAAEq9B,UAAU,KAAKC,YAAY,MAAM11B,EAAE6qB,YAAY,KAAK/F,GAAE6Q,GAAGC,IAAIA,IAAIx9B,EAAE,KAAK4H,EAAEsN,cAAc,CAACkoB,UAAU,EAAEC,UAAU,KAAKC,YAAY,MAAM/0B,EAAE,OAAOvJ,EAAEA,EAAEo+B,UAAUjsG,EAAEu7F,GAAE6Q,GAAGC,IAAIA,IAAIj1B,CAAC,MAAM,OACtfvJ,GAAGuJ,EAAEvJ,EAAEo+B,UAAUjsG,EAAEy2E,EAAEsN,cAAc,MAAM3M,EAAEp3E,EAAEu7F,GAAE6Q,GAAGC,IAAIA,IAAIj1B,EAAc,OAAZ5N,GAAGqF,EAAE4H,EAAE/uF,EAAEsY,GAAUy2E,EAAE91E,KAAK,CAAC,SAAS2rG,GAAGz9B,EAAE4H,GAAG,IAAIz2E,EAAEy2E,EAAEqoB,KAAO,OAAOjwB,GAAG,OAAO7uE,GAAG,OAAO6uE,GAAGA,EAAEiwB,MAAM9+F,KAAEy2E,EAAEpE,OAAO,IAAIoE,EAAEpE,OAAO,QAAO,CAAC,SAAS05B,GAAGl9B,EAAE4H,EAAEz2E,EAAEo3E,EAAE1vF,GAAG,IAAImmF,EAAEmuB,GAAGh8F,GAAG27F,GAAGF,GAAEriG,QAAmD,OAA3Cy0E,EAAE+tB,GAAGnlB,EAAE5I,GAAG/zE,GAAG28E,EAAE/uF,GAAGsY,EAAEokG,GAAGv1B,EAAE4H,EAAEz2E,EAAEo3E,EAAEvJ,EAAEnmF,GAAG0vF,EAAEqtB,KAAQ,OAAO51B,GAAI8xB,IAA2EjD,IAAGtmB,GAAGkmB,GAAG7mB,GAAGA,EAAEpE,OAAO,EAAE7I,GAAGqF,EAAE4H,EAAEz2E,EAAEtY,GAAU+uF,EAAE91E,QAA7G81E,EAAE6qB,YAAYzyB,EAAEyyB,YAAY7qB,EAAEpE,QAAQ,KAAKxD,EAAE6xB,QAAQh5G,EAAEgkH,GAAG78B,EAAE4H,EAAE/uF,GAAoD,CACla,SAAS6kH,GAAG19B,EAAE4H,EAAEz2E,EAAEo3E,EAAE1vF,GAAG,GAAGs0G,GAAGh8F,GAAG,CAAC,IAAI6tE,GAAE,EAAGyuB,GAAG7lB,EAAE,MAAM5I,GAAE,EAAW,GAAR/zE,GAAG28E,EAAE/uF,GAAM,OAAO+uF,EAAE6L,UAAUkqB,GAAG39B,EAAE4H,GAAG+yB,GAAG/yB,EAAEz2E,EAAEo3E,GAAG2yB,GAAGtzB,EAAEz2E,EAAEo3E,EAAE1vF,GAAG0vF,GAAE,OAAQ,GAAG,OAAOvI,EAAE,CAAC,IAAIwI,EAAEZ,EAAE6L,UAAUrI,EAAExD,EAAE+nB,cAAcnnB,EAAEvC,MAAMmF,EAAE,IAAI7J,EAAEiH,EAAEwpB,QAAQ7qG,EAAEgK,EAAEypG,YAAY,kBAAkBzzG,GAAG,OAAOA,EAAEA,EAAE4qG,GAAG5qG,GAAyBA,EAAE4lG,GAAGnlB,EAA1BzgF,EAAEgmG,GAAGh8F,GAAG27F,GAAGF,GAAEriG,SAAmB,IAAIo3E,EAAExwE,EAAEgqG,yBAAyBtK,EAAE,oBAAoBlvB,GAAG,oBAAoB6G,EAAE4yB,wBAAwBvK,GAAG,oBAAoBroB,EAAEyyB,kCAAkC,oBAAoBzyB,EAAEwyB,4BAC1d5vB,IAAI7C,GAAGhH,IAAIp6E,IAAI4zG,GAAGnzB,EAAEY,EAAED,EAAEphF,GAAGorG,IAAG,EAAG,IAAIzB,EAAElpB,EAAEsN,cAAc1M,EAAEqyB,MAAM/J,EAAE0C,GAAG5rB,EAAEW,EAAEC,EAAE3vF,GAAG0oF,EAAEqG,EAAEsN,cAAc9J,IAAI7C,GAAGuoB,IAAIvvB,GAAGsrB,GAAGtiG,SAASgoG,IAAI,oBAAoB5wB,IAAIs4B,GAAGryB,EAAEz2E,EAAEwwE,EAAE4G,GAAGhH,EAAEqG,EAAEsN,gBAAgB9J,EAAEmnB,IAAIiI,GAAG5yB,EAAEz2E,EAAEi6E,EAAE7C,EAAEuoB,EAAEvvB,EAAEp6E,KAAK0pG,GAAG,oBAAoBroB,EAAE6yB,2BAA2B,oBAAoB7yB,EAAE8yB,qBAAqB,oBAAoB9yB,EAAE8yB,oBAAoB9yB,EAAE8yB,qBAAqB,oBAAoB9yB,EAAE6yB,2BAA2B7yB,EAAE6yB,6BAA6B,oBAAoB7yB,EAAE+yB,oBAAoB3zB,EAAEpE,OAAO,WAClf,oBAAoBgF,EAAE+yB,oBAAoB3zB,EAAEpE,OAAO,SAASoE,EAAE+nB,cAAcpnB,EAAEX,EAAEsN,cAAc3T,GAAGiH,EAAEvC,MAAMsC,EAAEC,EAAEqyB,MAAMt5B,EAAEiH,EAAEwpB,QAAQ7qG,EAAEohF,EAAE6C,IAAI,oBAAoB5C,EAAE+yB,oBAAoB3zB,EAAEpE,OAAO,SAAS+E,GAAE,EAAG,KAAK,CAACC,EAAEZ,EAAE6L,UAAUuf,GAAGhzB,EAAE4H,GAAGwD,EAAExD,EAAE+nB,cAAcxoG,EAAEygF,EAAErvF,OAAOqvF,EAAEX,YAAYmE,EAAE2uB,GAAGnyB,EAAErvF,KAAK6yF,GAAG5C,EAAEvC,MAAM9+E,EAAE0pG,EAAEjpB,EAAEunB,aAAa2B,EAAEtoB,EAAEwpB,QAAwB,kBAAhBzwB,EAAEpwE,EAAEypG,cAAiC,OAAOr5B,EAAEA,EAAEwwB,GAAGxwB,GAAyBA,EAAEwrB,GAAGnlB,EAA1BrG,EAAE4rB,GAAGh8F,GAAG27F,GAAGF,GAAEriG,SAAmB,IAAIwmG,EAAE5/F,EAAEgqG,0BAA0Bx5B,EAAE,oBAAoBovB,GAAG,oBAAoBvoB,EAAE4yB,0BAC9e,oBAAoB5yB,EAAEyyB,kCAAkC,oBAAoBzyB,EAAEwyB,4BAA4B5vB,IAAIylB,GAAGC,IAAIvvB,IAAIw5B,GAAGnzB,EAAEY,EAAED,EAAEhH,GAAGgxB,IAAG,EAAGzB,EAAElpB,EAAEsN,cAAc1M,EAAEqyB,MAAM/J,EAAE0C,GAAG5rB,EAAEW,EAAEC,EAAE3vF,GAAG,IAAIuH,EAAEwnF,EAAEsN,cAAc9J,IAAIylB,GAAGC,IAAI1wG,GAAGysG,GAAGtiG,SAASgoG,IAAI,oBAAoBxB,IAAIkJ,GAAGryB,EAAEz2E,EAAE4/F,EAAExoB,GAAGnoF,EAAEwnF,EAAEsN,gBAAgB/tF,EAAEorG,IAAIiI,GAAG5yB,EAAEz2E,EAAEhK,EAAEohF,EAAEuoB,EAAE1wG,EAAEmhF,KAAI,IAAKI,GAAG,oBAAoB6G,EAAEo1B,4BAA4B,oBAAoBp1B,EAAEq1B,sBAAsB,oBAAoBr1B,EAAEq1B,qBAAqBr1B,EAAEq1B,oBAAoBt1B,EAAEnoF,EAAEmhF,GAAG,oBAAoBiH,EAAEo1B,4BAC5fp1B,EAAEo1B,2BAA2Br1B,EAAEnoF,EAAEmhF,IAAI,oBAAoBiH,EAAEs1B,qBAAqBl2B,EAAEpE,OAAO,GAAG,oBAAoBgF,EAAE4yB,0BAA0BxzB,EAAEpE,OAAO,QAAQ,oBAAoBgF,EAAEs1B,oBAAoB1yB,IAAIpL,EAAE2vB,eAAemB,IAAI9wB,EAAEkV,gBAAgBtN,EAAEpE,OAAO,GAAG,oBAAoBgF,EAAE4yB,yBAAyBhwB,IAAIpL,EAAE2vB,eAAemB,IAAI9wB,EAAEkV,gBAAgBtN,EAAEpE,OAAO,MAAMoE,EAAE+nB,cAAcpnB,EAAEX,EAAEsN,cAAc90F,GAAGooF,EAAEvC,MAAMsC,EAAEC,EAAEqyB,MAAMz6G,EAAEooF,EAAEwpB,QAAQzwB,EAAEgH,EAAEphF,IAAI,oBAAoBqhF,EAAEs1B,oBAAoB1yB,IAAIpL,EAAE2vB,eAAemB,IACjf9wB,EAAEkV,gBAAgBtN,EAAEpE,OAAO,GAAG,oBAAoBgF,EAAE4yB,yBAAyBhwB,IAAIpL,EAAE2vB,eAAemB,IAAI9wB,EAAEkV,gBAAgBtN,EAAEpE,OAAO,MAAM+E,GAAE,EAAG,CAAC,OAAOw1B,GAAG/9B,EAAE4H,EAAEz2E,EAAEo3E,EAAEvJ,EAAEnmF,EAAE,CACnK,SAASklH,GAAG/9B,EAAE4H,EAAEz2E,EAAEo3E,EAAE1vF,EAAEmmF,GAAGy+B,GAAGz9B,EAAE4H,GAAG,IAAIY,EAAE,KAAa,IAARZ,EAAEpE,OAAW,IAAI+E,IAAIC,EAAE,OAAO3vF,GAAG80G,GAAG/lB,EAAEz2E,GAAE,GAAI0rG,GAAG78B,EAAE4H,EAAE5I,GAAGuJ,EAAEX,EAAE6L,UAAUipB,GAAGnyG,QAAQq9E,EAAE,IAAIwD,EAAE5C,GAAG,oBAAoBr3E,EAAE8qG,yBAAyB,KAAK1zB,EAAEkD,SAAwI,OAA/H7D,EAAEpE,OAAO,EAAE,OAAOxD,GAAGwI,GAAGZ,EAAE91E,MAAMk/F,GAAGppB,EAAE5H,EAAEluE,MAAM,KAAKktE,GAAG4I,EAAE91E,MAAMk/F,GAAGppB,EAAE,KAAKwD,EAAEpM,IAAIrE,GAAGqF,EAAE4H,EAAEwD,EAAEpM,GAAG4I,EAAEsN,cAAc3M,EAAEsyB,MAAMhiH,GAAG80G,GAAG/lB,EAAEz2E,GAAE,GAAWy2E,EAAE91E,KAAK,CAAC,SAASksG,GAAGh+B,GAAG,IAAI4H,EAAE5H,EAAEyT,UAAU7L,EAAEq2B,eAAe3Q,GAAGttB,EAAE4H,EAAEq2B,eAAer2B,EAAEq2B,iBAAiBr2B,EAAEoqB,SAASpqB,EAAEoqB,SAAS1E,GAAGttB,EAAE4H,EAAEoqB,SAAQ,GAAIgC,GAAGh0B,EAAE4H,EAAEkS,cAAc,CAC5e,SAASokB,GAAGl+B,EAAE4H,EAAEz2E,EAAEo3E,EAAE1vF,GAAuC,OAApCg3G,KAAKC,GAAGj3G,GAAG+uF,EAAEpE,OAAO,IAAI7I,GAAGqF,EAAE4H,EAAEz2E,EAAEo3E,GAAUX,EAAE91E,KAAK,CAAC,IAaqLqsG,GAAGC,GAAGC,GAAGC,GAb1LC,GAAG,CAACppB,WAAW,KAAKka,YAAY,KAAKC,UAAU,GAAG,SAASkP,GAAGx+B,GAAG,MAAM,CAACo9B,UAAUp9B,EAAEq9B,UAAU,KAAKC,YAAY,KAAK,CAClM,SAASmB,GAAGz+B,EAAE4H,EAAEz2E,GAAG,IAA0Di6E,EAAtD7C,EAAEX,EAAEunB,aAAat2G,EAAEu7G,GAAE7pG,QAAQy0E,GAAE,EAAGwJ,EAAE,KAAa,IAARZ,EAAEpE,OAAqJ,IAAvI4H,EAAE5C,KAAK4C,GAAE,OAAOpL,GAAG,OAAOA,EAAEkV,gBAAiB,KAAO,EAAFr8F,IAASuyF,GAAEpM,GAAE,EAAG4I,EAAEpE,QAAQ,KAAY,OAAOxD,GAAG,OAAOA,EAAEkV,gBAAcr8F,GAAG,GAAE6zG,GAAE0H,GAAI,EAAFv7G,GAAQ,OAAOmnF,EAA2B,OAAxByvB,GAAG7nB,GAAwB,QAArB5H,EAAE4H,EAAEsN,gBAA2C,QAAflV,EAAEA,EAAEmV,aAA4B,KAAY,EAAPvN,EAAE4nB,MAAQ5nB,EAAEiqB,MAAM,EAAE,OAAO7xB,EAAEniF,KAAK+pF,EAAEiqB,MAAM,EAAEjqB,EAAEiqB,MAAM,WAAW,OAAKrpB,EAAED,EAAE0F,SAASjO,EAAEuI,EAAEm2B,SAAgB1/B,GAAGuJ,EAAEX,EAAE4nB,KAAKxwB,EAAE4I,EAAE91E,MAAM02E,EAAE,CAACgnB,KAAK,SAASvhB,SAASzF,GAAG,KAAO,EAAFD,IAAM,OAAOvJ,GAAGA,EAAE0yB,WAAW,EAAE1yB,EAAEmwB,aAC7e3mB,GAAGxJ,EAAE2/B,GAAGn2B,EAAED,EAAE,EAAE,MAAMvI,EAAE4wB,GAAG5wB,EAAEuI,EAAEp3E,EAAE,MAAM6tE,EAAEgW,OAAOpN,EAAE5H,EAAEgV,OAAOpN,EAAE5I,EAAEsW,QAAQtV,EAAE4H,EAAE91E,MAAMktE,EAAE4I,EAAE91E,MAAMojF,cAAcspB,GAAGrtG,GAAGy2E,EAAEsN,cAAcqpB,GAAGv+B,GAAG4+B,GAAGh3B,EAAEY,IAAqB,GAAG,QAArB3vF,EAAEmnF,EAAEkV,gBAA2C,QAAf9J,EAAEvyF,EAAEs8F,YAAqB,OAGpM,SAAYnV,EAAE4H,EAAEz2E,EAAEo3E,EAAE1vF,EAAEmmF,EAAEwJ,GAAG,GAAGr3E,EAAG,OAAW,IAARy2E,EAAEpE,OAAiBoE,EAAEpE,QAAQ,IAAwBq7B,GAAG7+B,EAAE4H,EAAEY,EAA3BD,EAAEmzB,GAAG/gH,MAAMwS,EAAE,SAAsB,OAAOy6E,EAAEsN,eAAqBtN,EAAE91E,MAAMkuE,EAAEluE,MAAM81E,EAAEpE,OAAO,IAAI,OAAKxE,EAAEuJ,EAAEm2B,SAAS7lH,EAAE+uF,EAAE4nB,KAAKjnB,EAAEo2B,GAAG,CAACnP,KAAK,UAAUvhB,SAAS1F,EAAE0F,UAAUp1F,EAAE,EAAE,OAAMmmF,EAAE4xB,GAAG5xB,EAAEnmF,EAAE2vF,EAAE,OAAQhF,OAAO,EAAE+E,EAAEyM,OAAOpN,EAAE5I,EAAEgW,OAAOpN,EAAEW,EAAE+M,QAAQtW,EAAE4I,EAAE91E,MAAMy2E,EAAE,KAAY,EAAPX,EAAE4nB,OAASwB,GAAGppB,EAAE5H,EAAEluE,MAAM,KAAK02E,GAAGZ,EAAE91E,MAAMojF,cAAcspB,GAAGh2B,GAAGZ,EAAEsN,cAAcqpB,GAAUv/B,GAAE,GAAG,KAAY,EAAP4I,EAAE4nB,MAAQ,OAAOqP,GAAG7+B,EAAE4H,EAAEY,EAAE,MAAM,GAAG,OAAO3vF,EAAEgF,KAAK,CAChd,GADid0qF,EAAE1vF,EAAE0Y,aAAa1Y,EAAE0Y,YAAYutG,QAC3e,IAAI1zB,EAAE7C,EAAEw2B,KAA0C,OAArCx2B,EAAE6C,EAA0CyzB,GAAG7+B,EAAE4H,EAAEY,EAA/BD,EAAEmzB,GAAlB18B,EAAErkF,MAAMwS,EAAE,MAAao7E,OAAE,GAA0B,CAAwB,GAAvB6C,EAAE,KAAK5C,EAAExI,EAAE0xB,YAAeI,IAAI1mB,EAAE,CAAK,GAAG,QAAP7C,EAAEyuB,IAAc,CAAC,OAAOxuB,GAAGA,GAAG,KAAK,EAAE3vF,EAAE,EAAE,MAAM,KAAK,GAAGA,EAAE,EAAE,MAAM,KAAK,GAAG,KAAK,IAAI,KAAK,IAAI,KAAK,IAAI,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,MAAM,KAAK,MAAM,KAAK,MAAM,KAAK,OAAO,KAAK,OAAO,KAAK,OAAO,KAAK,QAAQ,KAAK,QAAQ,KAAK,QAAQ,KAAK,QAAQ,KAAK,SAAS,KAAK,SAAS,KAAK,SAASA,EAAE,GAAG,MAAM,KAAK,UAAUA,EAAE,UAAU,MAAM,QAAQA,EAAE,EAChd,KADkdA,EAAE,KAAKA,GAAG0vF,EAAEiP,eAAehP,IAAI,EAAE3vF,IAC5eA,IAAImmF,EAAEswB,YAAYtwB,EAAEswB,UAAUz2G,EAAEy5G,GAAGtyB,EAAEnnF,GAAGy+G,GAAG/uB,EAAEvI,EAAEnnF,GAAG,GAAG,CAA0B,OAAzBmmH,KAAgCH,GAAG7+B,EAAE4H,EAAEY,EAAlCD,EAAEmzB,GAAG/gH,MAAMwS,EAAE,OAAyB,CAAC,MAAG,OAAOtU,EAAEgF,MAAY+pF,EAAEpE,OAAO,IAAIoE,EAAE91E,MAAMkuE,EAAEluE,MAAM81E,EAAEq3B,GAAGh/G,KAAK,KAAK+/E,GAAGnnF,EAAEqmH,YAAYt3B,EAAE,OAAK5H,EAAEhB,EAAEqwB,YAAYT,GAAG7C,GAAGlzG,EAAE0Y,aAAao9F,GAAG/mB,EAAEinB,IAAE,EAAGC,GAAG,KAAK,OAAO9uB,IAAIkuB,GAAGC,MAAME,GAAGH,GAAGC,MAAMG,GAAGJ,GAAGC,MAAMC,GAAGC,GAAGruB,EAAEpoE,GAAG02F,GAAGtuB,EAAEovB,SAAShB,GAAGxmB,GAAGA,EAAEg3B,GAAGh3B,EAAEW,EAAE0F,UAAUrG,EAAEpE,OAAO,KAAYoE,EAAC,CALrKu3B,CAAGn/B,EAAE4H,EAAEY,EAAED,EAAE6C,EAAEvyF,EAAEsY,GAAG,GAAG6tE,EAAE,CAACA,EAAEuJ,EAAEm2B,SAASl2B,EAAEZ,EAAE4nB,KAAepkB,GAAVvyF,EAAEmnF,EAAEluE,OAAUwjF,QAAQ,IAAI/T,EAAE,CAACiuB,KAAK,SAASvhB,SAAS1F,EAAE0F,UAChF,OAD0F,KAAO,EAAFzF,IAAMZ,EAAE91E,QAAQjZ,IAAG0vF,EAAEX,EAAE91E,OAAQ4/F,WAAW,EAAEnpB,EAAE4mB,aAAa5tB,EAAEqG,EAAEqnB,UAAU,OAAO1mB,EAAEioB,GAAG33G,EAAE0oF,IAAK69B,aAA4B,SAAfvmH,EAAEumH,aAAuB,OAAOh0B,EAAEpM,EAAEwxB,GAAGplB,EAAEpM,IAAIA,EAAE4xB,GAAG5xB,EAAEwJ,EAAEr3E,EAAE,OAAQqyE,OAAO,EAAGxE,EAAEgW,OACnfpN,EAAEW,EAAEyM,OAAOpN,EAAEW,EAAE+M,QAAQtW,EAAE4I,EAAE91E,MAAMy2E,EAAEA,EAAEvJ,EAAEA,EAAE4I,EAAE91E,MAA8B02E,EAAE,QAA1BA,EAAExI,EAAEluE,MAAMojF,eAAyBspB,GAAGrtG,GAAG,CAACisG,UAAU50B,EAAE40B,UAAUjsG,EAAEksG,UAAU,KAAKC,YAAY90B,EAAE80B,aAAat+B,EAAEkW,cAAc1M,EAAExJ,EAAE0yB,WAAW1xB,EAAE0xB,YAAYvgG,EAAEy2E,EAAEsN,cAAcqpB,GAAUh2B,CAAC,CAAoO,OAAzNvI,GAAVhB,EAAEgB,EAAEluE,OAAUwjF,QAAQ/M,EAAEioB,GAAGxxB,EAAE,CAACwwB,KAAK,UAAUvhB,SAAS1F,EAAE0F,WAAW,KAAY,EAAPrG,EAAE4nB,QAAUjnB,EAAEspB,MAAM1gG,GAAGo3E,EAAEyM,OAAOpN,EAAEW,EAAE+M,QAAQ,KAAK,OAAOtV,IAAkB,QAAd7uE,EAAEy2E,EAAEqnB,YAAoBrnB,EAAEqnB,UAAU,CAACjvB,GAAG4H,EAAEpE,OAAO,IAAIryE,EAAE9W,KAAK2lF,IAAI4H,EAAE91E,MAAMy2E,EAAEX,EAAEsN,cAAc,KAAY3M,CAAC,CACnd,SAASq2B,GAAG5+B,EAAE4H,GAA8D,OAA3DA,EAAE+2B,GAAG,CAACnP,KAAK,UAAUvhB,SAASrG,GAAG5H,EAAEwvB,KAAK,EAAE,OAAQxa,OAAOhV,EAASA,EAAEluE,MAAM81E,CAAC,CAAC,SAASi3B,GAAG7+B,EAAE4H,EAAEz2E,EAAEo3E,GAAwG,OAArG,OAAOA,GAAGunB,GAAGvnB,GAAGyoB,GAAGppB,EAAE5H,EAAEluE,MAAM,KAAKX,IAAG6uE,EAAE4+B,GAAGh3B,EAAEA,EAAEunB,aAAalhB,WAAYzK,OAAO,EAAEoE,EAAEsN,cAAc,KAAYlV,CAAC,CAGkJ,SAASq/B,GAAGr/B,EAAE4H,EAAEz2E,GAAG6uE,EAAE6xB,OAAOjqB,EAAE,IAAIW,EAAEvI,EAAE+U,UAAU,OAAOxM,IAAIA,EAAEspB,OAAOjqB,GAAG6pB,GAAGzxB,EAAEgV,OAAOpN,EAAEz2E,EAAE,CACxc,SAASmuG,GAAGt/B,EAAE4H,EAAEz2E,EAAEo3E,EAAE1vF,GAAG,IAAImmF,EAAEgB,EAAEkV,cAAc,OAAOlW,EAAEgB,EAAEkV,cAAc,CAACqqB,YAAY33B,EAAE43B,UAAU,KAAKC,mBAAmB,EAAEC,KAAKn3B,EAAEo3B,KAAKxuG,EAAEyuG,SAAS/mH,IAAImmF,EAAEugC,YAAY33B,EAAE5I,EAAEwgC,UAAU,KAAKxgC,EAAEygC,mBAAmB,EAAEzgC,EAAE0gC,KAAKn3B,EAAEvJ,EAAE2gC,KAAKxuG,EAAE6tE,EAAE4gC,SAAS/mH,EAAE,CAC3O,SAASgnH,GAAG7/B,EAAE4H,EAAEz2E,GAAG,IAAIo3E,EAAEX,EAAEunB,aAAat2G,EAAE0vF,EAAE+rB,YAAYt1B,EAAEuJ,EAAEo3B,KAAsC,GAAjChlC,GAAGqF,EAAE4H,EAAEW,EAAE0F,SAAS98E,GAAkB,KAAO,GAAtBo3E,EAAE6rB,GAAE7pG,UAAqBg+E,EAAI,EAAFA,EAAI,EAAEX,EAAEpE,OAAO,QAAQ,CAAC,GAAG,OAAOxD,GAAG,KAAa,IAARA,EAAEwD,OAAWxD,EAAE,IAAIA,EAAE4H,EAAE91E,MAAM,OAAOkuE,GAAG,CAAC,GAAG,KAAKA,EAAEwL,IAAI,OAAOxL,EAAEkV,eAAemqB,GAAGr/B,EAAE7uE,EAAEy2E,QAAQ,GAAG,KAAK5H,EAAEwL,IAAI6zB,GAAGr/B,EAAE7uE,EAAEy2E,QAAQ,GAAG,OAAO5H,EAAEluE,MAAM,CAACkuE,EAAEluE,MAAMkjF,OAAOhV,EAAEA,EAAEA,EAAEluE,MAAM,QAAQ,CAAC,GAAGkuE,IAAI4H,EAAE,MAAM5H,EAAE,KAAK,OAAOA,EAAEsV,SAAS,CAAC,GAAG,OAAOtV,EAAEgV,QAAQhV,EAAEgV,SAASpN,EAAE,MAAM5H,EAAEA,EAAEA,EAAEgV,MAAM,CAAChV,EAAEsV,QAAQN,OAAOhV,EAAEgV,OAAOhV,EAAEA,EAAEsV,OAAO,CAAC/M,GAAG,CAAC,CAAQ,GAAPmkB,GAAE0H,GAAE7rB,GAAM,KAAY,EAAPX,EAAE4nB,MAAQ5nB,EAAEsN,cAC/e,UAAU,OAAOr8F,GAAG,IAAK,WAAqB,IAAVsY,EAAEy2E,EAAE91E,MAAUjZ,EAAE,KAAK,OAAOsY,GAAiB,QAAd6uE,EAAE7uE,EAAE4jF,YAAoB,OAAOsf,GAAGr0B,KAAKnnF,EAAEsY,GAAGA,EAAEA,EAAEmkF,QAAY,QAAJnkF,EAAEtY,IAAYA,EAAE+uF,EAAE91E,MAAM81E,EAAE91E,MAAM,OAAOjZ,EAAEsY,EAAEmkF,QAAQnkF,EAAEmkF,QAAQ,MAAMgqB,GAAG13B,GAAE,EAAG/uF,EAAEsY,EAAE6tE,GAAG,MAAM,IAAK,YAA6B,IAAjB7tE,EAAE,KAAKtY,EAAE+uF,EAAE91E,MAAU81E,EAAE91E,MAAM,KAAK,OAAOjZ,GAAG,CAAe,GAAG,QAAjBmnF,EAAEnnF,EAAEk8F,YAAuB,OAAOsf,GAAGr0B,GAAG,CAAC4H,EAAE91E,MAAMjZ,EAAE,KAAK,CAACmnF,EAAEnnF,EAAEy8F,QAAQz8F,EAAEy8F,QAAQnkF,EAAEA,EAAEtY,EAAEA,EAAEmnF,CAAC,CAACs/B,GAAG13B,GAAE,EAAGz2E,EAAE,KAAK6tE,GAAG,MAAM,IAAK,WAAWsgC,GAAG13B,GAAE,EAAG,KAAK,UAAK,GAAQ,MAAM,QAAQA,EAAEsN,cAAc,KAAK,OAAOtN,EAAE91E,KAAK,CAC7d,SAAS6rG,GAAG39B,EAAE4H,GAAG,KAAY,EAAPA,EAAE4nB,OAAS,OAAOxvB,IAAIA,EAAE+U,UAAU,KAAKnN,EAAEmN,UAAU,KAAKnN,EAAEpE,OAAO,EAAE,CAAC,SAASq5B,GAAG78B,EAAE4H,EAAEz2E,GAAyD,GAAtD,OAAO6uE,IAAI4H,EAAE+pB,aAAa3xB,EAAE2xB,cAAc8B,IAAI7rB,EAAEiqB,MAAS,KAAK1gG,EAAEy2E,EAAE8pB,YAAY,OAAO,KAAK,GAAG,OAAO1xB,GAAG4H,EAAE91E,QAAQkuE,EAAEluE,MAAM,MAAMnX,MAAMwS,EAAE,MAAM,GAAG,OAAOy6E,EAAE91E,MAAM,CAA4C,IAAjCX,EAAEq/F,GAAZxwB,EAAE4H,EAAE91E,MAAakuE,EAAEmvB,cAAcvnB,EAAE91E,MAAMX,EAAMA,EAAE6jF,OAAOpN,EAAE,OAAO5H,EAAEsV,SAAStV,EAAEA,EAAEsV,SAAQnkF,EAAEA,EAAEmkF,QAAQkb,GAAGxwB,EAAEA,EAAEmvB,eAAgBna,OAAOpN,EAAEz2E,EAAEmkF,QAAQ,IAAI,CAAC,OAAO1N,EAAE91E,KAAK,CAO9a,SAASguG,GAAG9/B,EAAE4H,GAAG,IAAIinB,GAAE,OAAO7uB,EAAE4/B,UAAU,IAAK,SAASh4B,EAAE5H,EAAE2/B,KAAK,IAAI,IAAIxuG,EAAE,KAAK,OAAOy2E,GAAG,OAAOA,EAAEmN,YAAY5jF,EAAEy2E,GAAGA,EAAEA,EAAE0N,QAAQ,OAAOnkF,EAAE6uE,EAAE2/B,KAAK,KAAKxuG,EAAEmkF,QAAQ,KAAK,MAAM,IAAK,YAAYnkF,EAAE6uE,EAAE2/B,KAAK,IAAI,IAAIp3B,EAAE,KAAK,OAAOp3E,GAAG,OAAOA,EAAE4jF,YAAYxM,EAAEp3E,GAAGA,EAAEA,EAAEmkF,QAAQ,OAAO/M,EAAEX,GAAG,OAAO5H,EAAE2/B,KAAK3/B,EAAE2/B,KAAK,KAAK3/B,EAAE2/B,KAAKrqB,QAAQ,KAAK/M,EAAE+M,QAAQ,KAAK,CAC5U,SAASyqB,GAAE//B,GAAG,IAAI4H,EAAE,OAAO5H,EAAE+U,WAAW/U,EAAE+U,UAAUjjF,QAAQkuE,EAAEluE,MAAMX,EAAE,EAAEo3E,EAAE,EAAE,GAAGX,EAAE,IAAI,IAAI/uF,EAAEmnF,EAAEluE,MAAM,OAAOjZ,GAAGsY,GAAGtY,EAAEg5G,MAAMh5G,EAAE64G,WAAWnpB,GAAkB,SAAf1vF,EAAEumH,aAAsB72B,GAAW,SAAR1vF,EAAE2qF,MAAe3qF,EAAEm8F,OAAOhV,EAAEnnF,EAAEA,EAAEy8F,aAAa,IAAIz8F,EAAEmnF,EAAEluE,MAAM,OAAOjZ,GAAGsY,GAAGtY,EAAEg5G,MAAMh5G,EAAE64G,WAAWnpB,GAAG1vF,EAAEumH,aAAa72B,GAAG1vF,EAAE2qF,MAAM3qF,EAAEm8F,OAAOhV,EAAEnnF,EAAEA,EAAEy8F,QAAyC,OAAjCtV,EAAEo/B,cAAc72B,EAAEvI,EAAE0xB,WAAWvgG,EAASy2E,CAAC,CAC7V,SAASo4B,GAAGhgC,EAAE4H,EAAEz2E,GAAG,IAAIo3E,EAAEX,EAAEunB,aAAmB,OAANT,GAAG9mB,GAAUA,EAAE4D,KAAK,KAAK,EAAE,KAAK,GAAG,KAAK,GAAG,KAAK,EAAE,KAAK,GAAG,KAAK,EAAE,KAAK,EAAE,KAAK,GAAG,KAAK,EAAE,KAAK,GAAG,OAAOu0B,GAAEn4B,GAAG,KAAK,KAAK,EAUtD,KAAK,GAAG,OAAOulB,GAAGvlB,EAAErvF,OAAO80G,KAAK0S,GAAEn4B,GAAG,KAVqD,KAAK,EAA2Q,OAAzQW,EAAEX,EAAE6L,UAAUwgB,KAAKxH,GAAEI,IAAIJ,GAAEG,IAAG4H,KAAKjsB,EAAE01B,iBAAiB11B,EAAEypB,QAAQzpB,EAAE01B,eAAe11B,EAAE01B,eAAe,MAAS,OAAOj+B,GAAG,OAAOA,EAAEluE,QAAMgvB,GAAG8mD,GAAGA,EAAEpE,OAAO,EAAE,OAAOxD,GAAGA,EAAEkV,cAAc2E,cAAc,KAAa,IAARjS,EAAEpE,SAAaoE,EAAEpE,OAAO,KAAK,OAAOsrB,KAAKmR,GAAGnR,IAAIA,GAAG,QAAOsP,GAAGp+B,EAAE4H,GAAGm4B,GAAEn4B,GAAU,KAAK,KAAK,EAAEusB,GAAGvsB,GAAG,IAAI/uF,EAAEk7G,GAAGD,GAAGvpG,SAC7e,GAAT4G,EAAEy2E,EAAErvF,KAAQ,OAAOynF,GAAG,MAAM4H,EAAE6L,UAAU4qB,GAAGr+B,EAAE4H,EAAEz2E,EAAEo3E,EAAE1vF,GAAGmnF,EAAEiwB,MAAMroB,EAAEqoB,MAAMroB,EAAEpE,OAAO,IAAIoE,EAAEpE,OAAO,aAAa,CAAC,IAAI+E,EAAE,CAAC,GAAG,OAAOX,EAAE6L,UAAU,MAAM94F,MAAMwS,EAAE,MAAW,OAAL4yG,GAAEn4B,GAAU,IAAI,CAAkB,GAAjB5H,EAAE+zB,GAAGH,GAAGrpG,SAAYu2B,GAAG8mD,GAAG,CAACW,EAAEX,EAAE6L,UAAUtiF,EAAEy2E,EAAErvF,KAAK,IAAIymF,EAAE4I,EAAE+nB,cAA+C,OAAjCpnB,EAAE2jB,IAAItkB,EAAEW,EAAE4jB,IAAIntB,EAAEgB,EAAE,KAAY,EAAP4H,EAAE4nB,MAAer+F,GAAG,IAAK,SAAS83F,GAAE,SAAS1gB,GAAG0gB,GAAE,QAAQ1gB,GAAG,MAAM,IAAK,SAAS,IAAK,SAAS,IAAK,QAAQ0gB,GAAE,OAAO1gB,GAAG,MAAM,IAAK,QAAQ,IAAK,QAAQ,IAAI1vF,EAAE,EAAEA,EAAE6vG,GAAGnpG,OAAO1G,IAAIowG,GAAEP,GAAG7vG,GAAG0vF,GAAG,MAAM,IAAK,SAAS0gB,GAAE,QAAQ1gB,GAAG,MAAM,IAAK,MAAM,IAAK,QAAQ,IAAK,OAAO0gB,GAAE,QACnhB1gB,GAAG0gB,GAAE,OAAO1gB,GAAG,MAAM,IAAK,UAAU0gB,GAAE,SAAS1gB,GAAG,MAAM,IAAK,QAAQ4E,EAAG5E,EAAEvJ,GAAGiqB,GAAE,UAAU1gB,GAAG,MAAM,IAAK,SAASA,EAAE0E,cAAc,CAACizB,cAAclhC,EAAEmhC,UAAUlX,GAAE,UAAU1gB,GAAG,MAAM,IAAK,WAAW2F,GAAG3F,EAAEvJ,GAAGiqB,GAAE,UAAU1gB,GAAkB,IAAI,IAAIC,KAAvBqK,GAAG1hF,EAAE6tE,GAAGnmF,EAAE,KAAkBmmF,EAAE,GAAGA,EAAEjgF,eAAeypF,GAAG,CAAC,IAAI4C,EAAEpM,EAAEwJ,GAAG,aAAaA,EAAE,kBAAkB4C,EAAE7C,EAAE8F,cAAcjD,KAAI,IAAKpM,EAAEohC,0BAA0BtV,GAAGviB,EAAE8F,YAAYjD,EAAEpL,GAAGnnF,EAAE,CAAC,WAAWuyF,IAAI,kBAAkBA,GAAG7C,EAAE8F,cAAc,GAAGjD,KAAI,IAAKpM,EAAEohC,0BAA0BtV,GAAGviB,EAAE8F,YAC1ejD,EAAEpL,GAAGnnF,EAAE,CAAC,WAAW,GAAGuyF,IAAIrD,EAAGhpF,eAAeypF,IAAI,MAAM4C,GAAG,aAAa5C,GAAGygB,GAAE,SAAS1gB,EAAE,CAAC,OAAOp3E,GAAG,IAAK,QAAQ+6E,EAAG3D,GAAGkF,EAAGlF,EAAEvJ,GAAE,GAAI,MAAM,IAAK,WAAWkN,EAAG3D,GAAG6F,GAAG7F,GAAG,MAAM,IAAK,SAAS,IAAK,SAAS,MAAM,QAAQ,oBAAoBvJ,EAAEqhC,UAAU93B,EAAE+3B,QAAQvV,IAAIxiB,EAAE1vF,EAAE+uF,EAAE6qB,YAAYlqB,EAAE,OAAOA,IAAIX,EAAEpE,OAAO,EAAE,KAAK,CAACgF,EAAE,IAAI3vF,EAAEuZ,SAASvZ,EAAEA,EAAEoX,cAAc,iCAAiC+vE,IAAIA,EAAEsO,GAAGn9E,IAAI,iCAAiC6uE,EAAE,WAAW7uE,IAAG6uE,EAAEwI,EAAEjwE,cAAc,QAASm2E,UAAU,qBAAuB1O,EAAEA,EAAEzsE,YAAYysE,EAAE1uE,aAC/f,kBAAkBi3E,EAAEwK,GAAG/S,EAAEwI,EAAEjwE,cAAcpH,EAAE,CAAC4hF,GAAGxK,EAAEwK,MAAM/S,EAAEwI,EAAEjwE,cAAcpH,GAAG,WAAWA,IAAIq3E,EAAExI,EAAEuI,EAAE43B,SAAS33B,EAAE23B,UAAS,EAAG53B,EAAEjmF,OAAOkmF,EAAElmF,KAAKimF,EAAEjmF,QAAQ09E,EAAEwI,EAAE3+E,gBAAgBm2E,EAAE7uE,GAAG6uE,EAAEksB,IAAItkB,EAAE5H,EAAEmsB,IAAI5jB,EAAE41B,GAAGn+B,EAAE4H,GAAE,GAAG,GAAIA,EAAE6L,UAAUzT,EAAEA,EAAE,CAAW,OAAVwI,EAAEsK,GAAG3hF,EAAEo3E,GAAUp3E,GAAG,IAAK,SAAS83F,GAAE,SAASjpB,GAAGipB,GAAE,QAAQjpB,GAAGnnF,EAAE0vF,EAAE,MAAM,IAAK,SAAS,IAAK,SAAS,IAAK,QAAQ0gB,GAAE,OAAOjpB,GAAGnnF,EAAE0vF,EAAE,MAAM,IAAK,QAAQ,IAAK,QAAQ,IAAI1vF,EAAE,EAAEA,EAAE6vG,GAAGnpG,OAAO1G,IAAIowG,GAAEP,GAAG7vG,GAAGmnF,GAAGnnF,EAAE0vF,EAAE,MAAM,IAAK,SAAS0gB,GAAE,QAAQjpB,GAAGnnF,EAAE0vF,EAAE,MAAM,IAAK,MAAM,IAAK,QAAQ,IAAK,OAAO0gB,GAAE,QAClfjpB,GAAGipB,GAAE,OAAOjpB,GAAGnnF,EAAE0vF,EAAE,MAAM,IAAK,UAAU0gB,GAAE,SAASjpB,GAAGnnF,EAAE0vF,EAAE,MAAM,IAAK,QAAQ4E,EAAGnN,EAAEuI,GAAG1vF,EAAEi0F,EAAG9M,EAAEuI,GAAG0gB,GAAE,UAAUjpB,GAAG,MAAM,IAAK,SAAiL,QAAQnnF,EAAE0vF,QAAxK,IAAK,SAASvI,EAAEiN,cAAc,CAACizB,cAAc33B,EAAE43B,UAAUtnH,EAAE+xF,EAAE,CAAC,EAAErC,EAAE,CAAC/vF,WAAM,IAASywG,GAAE,UAAUjpB,GAAG,MAAM,IAAK,WAAWkO,GAAGlO,EAAEuI,GAAG1vF,EAAEk1F,GAAG/N,EAAEuI,GAAG0gB,GAAE,UAAUjpB,GAAiC,IAAIhB,KAAhB6T,GAAG1hF,EAAEtY,GAAGuyF,EAAEvyF,EAAa,GAAGuyF,EAAErsF,eAAeigF,GAAG,CAAC,IAAIuC,EAAE6J,EAAEpM,GAAG,UAAUA,EAAE4S,GAAG5R,EAAEuB,GAAG,4BAA4BvC,EAAuB,OAApBuC,EAAEA,EAAEA,EAAE4pB,YAAO,IAAgB1c,GAAGzO,EAAEuB,GAAI,aAAavC,EAAE,kBAAkBuC,GAAG,aAC7epwE,GAAG,KAAKowE,IAAIuN,GAAG9O,EAAEuB,GAAG,kBAAkBA,GAAGuN,GAAG9O,EAAE,GAAGuB,GAAG,mCAAmCvC,GAAG,6BAA6BA,GAAG,cAAcA,IAAI+I,EAAGhpF,eAAeigF,GAAG,MAAMuC,GAAG,aAAavC,GAAGiqB,GAAE,SAASjpB,GAAG,MAAMuB,GAAG4H,EAAGnJ,EAAEhB,EAAEuC,EAAEiH,GAAG,CAAC,OAAOr3E,GAAG,IAAK,QAAQ+6E,EAAGlM,GAAGyN,EAAGzN,EAAEuI,GAAE,GAAI,MAAM,IAAK,WAAW2D,EAAGlM,GAAGoO,GAAGpO,GAAG,MAAM,IAAK,SAAS,MAAMuI,EAAE/vF,OAAOwnF,EAAEjnE,aAAa,QAAQ,GAAGizE,EAAGzD,EAAE/vF,QAAQ,MAAM,IAAK,SAASwnF,EAAEmgC,WAAW53B,EAAE43B,SAAmB,OAAVnhC,EAAEuJ,EAAE/vF,OAAcm1F,GAAG3N,IAAIuI,EAAE43B,SAASnhC,GAAE,GAAI,MAAMuJ,EAAEyE,cAAcW,GAAG3N,IAAIuI,EAAE43B,SAAS53B,EAAEyE,cAClf,GAAI,MAAM,QAAQ,oBAAoBn0F,EAAEwnH,UAAUrgC,EAAEsgC,QAAQvV,IAAI,OAAO55F,GAAG,IAAK,SAAS,IAAK,QAAQ,IAAK,SAAS,IAAK,WAAWo3E,IAAIA,EAAEg4B,UAAU,MAAMvgC,EAAE,IAAK,MAAMuI,GAAE,EAAG,MAAMvI,EAAE,QAAQuI,GAAE,EAAG,CAACA,IAAIX,EAAEpE,OAAO,EAAE,CAAC,OAAOoE,EAAEqoB,MAAMroB,EAAEpE,OAAO,IAAIoE,EAAEpE,OAAO,QAAQ,CAAM,OAALu8B,GAAEn4B,GAAU,KAAK,KAAK,EAAE,GAAG5H,GAAG,MAAM4H,EAAE6L,UAAU6qB,GAAGt+B,EAAE4H,EAAE5H,EAAE2vB,cAAcpnB,OAAO,CAAC,GAAG,kBAAkBA,GAAG,OAAOX,EAAE6L,UAAU,MAAM94F,MAAMwS,EAAE,MAAsC,GAAhCgE,EAAE4iG,GAAGD,GAAGvpG,SAASwpG,GAAGH,GAAGrpG,SAAYu2B,GAAG8mD,GAAG,CAAyC,GAAxCW,EAAEX,EAAE6L,UAAUtiF,EAAEy2E,EAAE+nB,cAAcpnB,EAAE2jB,IAAItkB,GAAK5I,EAAEuJ,EAAEn+E,YAAY+G,IAC/e,QADof6uE,EACvf2uB,IAAY,OAAO3uB,EAAEwL,KAAK,KAAK,EAAEsf,GAAGviB,EAAEn+E,UAAU+G,EAAE,KAAY,EAAP6uE,EAAEwvB,OAAS,MAAM,KAAK,GAAE,IAAKxvB,EAAE2vB,cAAcyQ,0BAA0BtV,GAAGviB,EAAEn+E,UAAU+G,EAAE,KAAY,EAAP6uE,EAAEwvB,OAASxwB,IAAI4I,EAAEpE,OAAO,EAAE,MAAM+E,GAAG,IAAIp3E,EAAEiB,SAASjB,EAAEA,EAAElB,eAAe3E,eAAei9E,IAAK2jB,IAAItkB,EAAEA,EAAE6L,UAAUlL,CAAC,CAAM,OAALw3B,GAAEn4B,GAAU,KAAK,KAAK,GAA0B,GAAvB6kB,GAAE2H,IAAG7rB,EAAEX,EAAEsN,cAAiB,OAAOlV,GAAG,OAAOA,EAAEkV,eAAe,OAAOlV,EAAEkV,cAAcC,WAAW,CAAC,GAAG0Z,IAAG,OAAOD,IAAI,KAAY,EAAPhnB,EAAE4nB,OAAS,KAAa,IAAR5nB,EAAEpE,OAAWosB,KAAKC,KAAKjoB,EAAEpE,OAAO,MAAMxE,GAAE,OAAQ,GAAGA,EAAEl+C,GAAG8mD,GAAG,OAAOW,GAAG,OAAOA,EAAE4M,WAAW,CAAC,GAAG,OAC5fnV,EAAE,CAAC,IAAIhB,EAAE,MAAMrkF,MAAMwS,EAAE,MAAqD,KAA7B6xE,EAAE,QAApBA,EAAE4I,EAAEsN,eAAyBlW,EAAEmW,WAAW,MAAW,MAAMx6F,MAAMwS,EAAE,MAAM6xE,EAAEktB,IAAItkB,CAAC,MAAMioB,KAAK,KAAa,IAARjoB,EAAEpE,SAAaoE,EAAEsN,cAAc,MAAMtN,EAAEpE,OAAO,EAAEu8B,GAAEn4B,GAAG5I,GAAE,CAAE,MAAM,OAAO8vB,KAAKmR,GAAGnR,IAAIA,GAAG,MAAM9vB,GAAE,EAAG,IAAIA,EAAE,OAAe,MAAR4I,EAAEpE,MAAYoE,EAAE,IAAI,CAAC,OAAG,KAAa,IAARA,EAAEpE,QAAkBoE,EAAEiqB,MAAM1gG,EAAEy2E,KAAEW,EAAE,OAAOA,MAAO,OAAOvI,GAAG,OAAOA,EAAEkV,gBAAgB3M,IAAIX,EAAE91E,MAAM0xE,OAAO,KAAK,KAAY,EAAPoE,EAAE4nB,QAAU,OAAOxvB,GAAG,KAAe,EAAVo0B,GAAE7pG,SAAW,IAAIi2G,KAAIA,GAAE,GAAGxB,OAAO,OAAOp3B,EAAE6qB,cAAc7qB,EAAEpE,OAAO,GAAGu8B,GAAEn4B,GAAU,MAAK,KAAK,EAAE,OAAOqsB,KACrfmK,GAAGp+B,EAAE4H,GAAG,OAAO5H,GAAGspB,GAAG1hB,EAAE6L,UAAUqG,eAAeimB,GAAEn4B,GAAG,KAAK,KAAK,GAAG,OAAO2pB,GAAG3pB,EAAErvF,KAAKqzF,UAAUm0B,GAAEn4B,GAAG,KAA+C,KAAK,GAA0B,GAAvB6kB,GAAE2H,IAAwB,QAArBp1B,EAAE4I,EAAEsN,eAA0B,OAAO6qB,GAAEn4B,GAAG,KAAuC,GAAlCW,EAAE,KAAa,IAARX,EAAEpE,OAA4B,QAAjBgF,EAAExJ,EAAEwgC,WAAsB,GAAGj3B,EAAEu3B,GAAG9gC,GAAE,OAAQ,CAAC,GAAG,IAAIwhC,IAAG,OAAOxgC,GAAG,KAAa,IAARA,EAAEwD,OAAW,IAAIxD,EAAE4H,EAAE91E,MAAM,OAAOkuE,GAAG,CAAS,GAAG,QAAXwI,EAAE6rB,GAAGr0B,IAAe,CAAmG,IAAlG4H,EAAEpE,OAAO,IAAIs8B,GAAG9gC,GAAE,GAAoB,QAAhBuJ,EAAEC,EAAEiqB,eAAuB7qB,EAAE6qB,YAAYlqB,EAAEX,EAAEpE,OAAO,GAAGoE,EAAEw3B,aAAa,EAAE72B,EAAEp3E,EAAMA,EAAEy2E,EAAE91E,MAAM,OAAOX,GAAO6uE,EAAEuI,GAANvJ,EAAE7tE,GAAQqyE,OAAO,SAC/d,QAAdgF,EAAExJ,EAAE+V,YAAoB/V,EAAE0yB,WAAW,EAAE1yB,EAAE6yB,MAAM7xB,EAAEhB,EAAEltE,MAAM,KAAKktE,EAAEogC,aAAa,EAAEpgC,EAAE2wB,cAAc,KAAK3wB,EAAEkW,cAAc,KAAKlW,EAAEyzB,YAAY,KAAKzzB,EAAE2yB,aAAa,KAAK3yB,EAAEyU,UAAU,OAAOzU,EAAE0yB,WAAWlpB,EAAEkpB,WAAW1yB,EAAE6yB,MAAMrpB,EAAEqpB,MAAM7yB,EAAEltE,MAAM02E,EAAE12E,MAAMktE,EAAEogC,aAAa,EAAEpgC,EAAEiwB,UAAU,KAAKjwB,EAAE2wB,cAAcnnB,EAAEmnB,cAAc3wB,EAAEkW,cAAc1M,EAAE0M,cAAclW,EAAEyzB,YAAYjqB,EAAEiqB,YAAYzzB,EAAEzmF,KAAKiwF,EAAEjwF,KAAKynF,EAAEwI,EAAEmpB,aAAa3yB,EAAE2yB,aAAa,OAAO3xB,EAAE,KAAK,CAAC6xB,MAAM7xB,EAAE6xB,MAAMD,aAAa5xB,EAAE4xB,eAAezgG,EAAEA,EAAEmkF,QAA2B,OAAnBoX,GAAE0H,GAAY,EAAVA,GAAE7pG,QAAU,GAAUq9E,EAAE91E,KAAK,CAACkuE,EAClgBA,EAAEsV,OAAO,CAAC,OAAOtW,EAAE2gC,MAAM3pB,KAAIyqB,KAAK74B,EAAEpE,OAAO,IAAI+E,GAAE,EAAGu3B,GAAG9gC,GAAE,GAAI4I,EAAEiqB,MAAM,QAAQ,KAAK,CAAC,IAAItpB,EAAE,GAAW,QAARvI,EAAEq0B,GAAG7rB,KAAa,GAAGZ,EAAEpE,OAAO,IAAI+E,GAAE,EAAmB,QAAhBp3E,EAAE6uE,EAAEyyB,eAAuB7qB,EAAE6qB,YAAYthG,EAAEy2E,EAAEpE,OAAO,GAAGs8B,GAAG9gC,GAAE,GAAI,OAAOA,EAAE2gC,MAAM,WAAW3gC,EAAE4gC,WAAWp3B,EAAEuM,YAAY8Z,GAAE,OAAOkR,GAAEn4B,GAAG,UAAU,EAAEoO,KAAIhX,EAAEygC,mBAAmBgB,IAAI,aAAatvG,IAAIy2E,EAAEpE,OAAO,IAAI+E,GAAE,EAAGu3B,GAAG9gC,GAAE,GAAI4I,EAAEiqB,MAAM,SAAS7yB,EAAEugC,aAAa/2B,EAAE8M,QAAQ1N,EAAE91E,MAAM81E,EAAE91E,MAAM02E,IAAa,QAATr3E,EAAE6tE,EAAE0gC,MAAcvuG,EAAEmkF,QAAQ9M,EAAEZ,EAAE91E,MAAM02E,EAAExJ,EAAE0gC,KAAKl3B,EAAE,CAAC,OAAG,OAAOxJ,EAAE2gC,MAAY/3B,EAAE5I,EAAE2gC,KAAK3gC,EAAEwgC,UAC9e53B,EAAE5I,EAAE2gC,KAAK/3B,EAAE0N,QAAQtW,EAAEygC,mBAAmBzpB,KAAIpO,EAAE0N,QAAQ,KAAKnkF,EAAEijG,GAAE7pG,QAAQmiG,GAAE0H,GAAE7rB,EAAI,EAAFp3E,EAAI,EAAI,EAAFA,GAAKy2E,IAAEm4B,GAAEn4B,GAAU,MAAK,KAAK,GAAG,KAAK,GAAG,OAAO84B,KAAKn4B,EAAE,OAAOX,EAAEsN,cAAc,OAAOlV,GAAG,OAAOA,EAAEkV,gBAAgB3M,IAAIX,EAAEpE,OAAO,MAAM+E,GAAG,KAAY,EAAPX,EAAE4nB,MAAQ,KAAQ,WAAHgO,MAAiBuC,GAAEn4B,GAAkB,EAAfA,EAAEw3B,eAAiBx3B,EAAEpE,OAAO,OAAOu8B,GAAEn4B,GAAG,KAAK,KAAK,GAAe,KAAK,GAAG,OAAO,KAAK,MAAMjtF,MAAMwS,EAAE,IAAIy6E,EAAE4D,KAAM,CAClX,SAASm1B,GAAG3gC,EAAE4H,GAAS,OAAN8mB,GAAG9mB,GAAUA,EAAE4D,KAAK,KAAK,EAAE,OAAO2hB,GAAGvlB,EAAErvF,OAAO80G,KAAiB,OAAZrtB,EAAE4H,EAAEpE,QAAeoE,EAAEpE,OAAS,MAAHxD,EAAS,IAAI4H,GAAG,KAAK,KAAK,EAAE,OAAOqsB,KAAKxH,GAAEI,IAAIJ,GAAEG,IAAG4H,KAAe,KAAO,OAAjBx0B,EAAE4H,EAAEpE,SAAqB,KAAO,IAAFxD,IAAQ4H,EAAEpE,OAAS,MAAHxD,EAAS,IAAI4H,GAAG,KAAK,KAAK,EAAE,OAAOusB,GAAGvsB,GAAG,KAAK,KAAK,GAA0B,GAAvB6kB,GAAE2H,IAAwB,QAArBp0B,EAAE4H,EAAEsN,gBAA2B,OAAOlV,EAAEmV,WAAW,CAAC,GAAG,OAAOvN,EAAEmN,UAAU,MAAMp6F,MAAMwS,EAAE,MAAM0iG,IAAI,CAAW,OAAS,OAAnB7vB,EAAE4H,EAAEpE,QAAsBoE,EAAEpE,OAAS,MAAHxD,EAAS,IAAI4H,GAAG,KAAK,KAAK,GAAG,OAAO6kB,GAAE2H,IAAG,KAAK,KAAK,EAAE,OAAOH,KAAK,KAAK,KAAK,GAAG,OAAO1C,GAAG3pB,EAAErvF,KAAKqzF,UAAU,KAAK,KAAK,GAAG,KAAK,GAAG,OAAO80B,KAC1gB,KAAyB,QAAQ,OAAO,KAAK,CArB7CvC,GAAG,SAASn+B,EAAE4H,GAAG,IAAI,IAAIz2E,EAAEy2E,EAAE91E,MAAM,OAAOX,GAAG,CAAC,GAAG,IAAIA,EAAEq6E,KAAK,IAAIr6E,EAAEq6E,IAAIxL,EAAEl4E,YAAYqJ,EAAEsiF,gBAAgB,GAAG,IAAItiF,EAAEq6E,KAAK,OAAOr6E,EAAEW,MAAM,CAACX,EAAEW,MAAMkjF,OAAO7jF,EAAEA,EAAEA,EAAEW,MAAM,QAAQ,CAAC,GAAGX,IAAIy2E,EAAE,MAAM,KAAK,OAAOz2E,EAAEmkF,SAAS,CAAC,GAAG,OAAOnkF,EAAE6jF,QAAQ7jF,EAAE6jF,SAASpN,EAAE,OAAOz2E,EAAEA,EAAE6jF,MAAM,CAAC7jF,EAAEmkF,QAAQN,OAAO7jF,EAAE6jF,OAAO7jF,EAAEA,EAAEmkF,OAAO,CAAC,EAAE8oB,GAAG,WAAW,EACxTC,GAAG,SAASr+B,EAAE4H,EAAEz2E,EAAEo3E,GAAG,IAAI1vF,EAAEmnF,EAAE2vB,cAAc,GAAG92G,IAAI0vF,EAAE,CAACvI,EAAE4H,EAAE6L,UAAUsgB,GAAGH,GAAGrpG,SAAS,IAA4Ri+E,EAAxRxJ,EAAE,KAAK,OAAO7tE,GAAG,IAAK,QAAQtY,EAAEi0F,EAAG9M,EAAEnnF,GAAG0vF,EAAEuE,EAAG9M,EAAEuI,GAAGvJ,EAAE,GAAG,MAAM,IAAK,SAASnmF,EAAE+xF,EAAE,CAAC,EAAE/xF,EAAE,CAACL,WAAM,IAAS+vF,EAAEqC,EAAE,CAAC,EAAErC,EAAE,CAAC/vF,WAAM,IAASwmF,EAAE,GAAG,MAAM,IAAK,WAAWnmF,EAAEk1F,GAAG/N,EAAEnnF,GAAG0vF,EAAEwF,GAAG/N,EAAEuI,GAAGvJ,EAAE,GAAG,MAAM,QAAQ,oBAAoBnmF,EAAEwnH,SAAS,oBAAoB93B,EAAE83B,UAAUrgC,EAAEsgC,QAAQvV,IAAyB,IAAI5jG,KAAzB0rF,GAAG1hF,EAAEo3E,GAASp3E,EAAE,KAActY,EAAE,IAAI0vF,EAAExpF,eAAeoI,IAAItO,EAAEkG,eAAeoI,IAAI,MAAMtO,EAAEsO,GAAG,GAAG,UAAUA,EAAE,CAAC,IAAIikF,EAAEvyF,EAAEsO,GAAG,IAAIqhF,KAAK4C,EAAEA,EAAErsF,eAAeypF,KACjfr3E,IAAIA,EAAE,CAAC,GAAGA,EAAEq3E,GAAG,GAAG,KAAK,4BAA4BrhF,GAAG,aAAaA,GAAG,mCAAmCA,GAAG,6BAA6BA,GAAG,cAAcA,IAAI4gF,EAAGhpF,eAAeoI,GAAG63E,IAAIA,EAAE,KAAKA,EAAEA,GAAG,IAAI3kF,KAAK8M,EAAE,OAAO,IAAIA,KAAKohF,EAAE,CAAC,IAAIhH,EAAEgH,EAAEphF,GAAyB,GAAtBikF,EAAE,MAAMvyF,EAAEA,EAAEsO,QAAG,EAAUohF,EAAExpF,eAAeoI,IAAIo6E,IAAI6J,IAAI,MAAM7J,GAAG,MAAM6J,GAAG,GAAG,UAAUjkF,EAAE,GAAGikF,EAAE,CAAC,IAAI5C,KAAK4C,GAAGA,EAAErsF,eAAeypF,IAAIjH,GAAGA,EAAExiF,eAAeypF,KAAKr3E,IAAIA,EAAE,CAAC,GAAGA,EAAEq3E,GAAG,IAAI,IAAIA,KAAKjH,EAAEA,EAAExiF,eAAeypF,IAAI4C,EAAE5C,KAAKjH,EAAEiH,KAAKr3E,IAAIA,EAAE,CAAC,GAAGA,EAAEq3E,GAAGjH,EAAEiH,GAAG,MAAMr3E,IAAI6tE,IAAIA,EAAE,IAAIA,EAAE3kF,KAAK8M,EACpfgK,IAAIA,EAAEowE,MAAM,4BAA4Bp6E,GAAGo6E,EAAEA,EAAEA,EAAE4pB,YAAO,EAAO/f,EAAEA,EAAEA,EAAE+f,YAAO,EAAO,MAAM5pB,GAAG6J,IAAI7J,IAAIvC,EAAEA,GAAG,IAAI3kF,KAAK8M,EAAEo6E,IAAI,aAAap6E,EAAE,kBAAkBo6E,GAAG,kBAAkBA,IAAIvC,EAAEA,GAAG,IAAI3kF,KAAK8M,EAAE,GAAGo6E,GAAG,mCAAmCp6E,GAAG,6BAA6BA,IAAI4gF,EAAGhpF,eAAeoI,IAAI,MAAMo6E,GAAG,aAAap6E,GAAG8hG,GAAE,SAASjpB,GAAGhB,GAAGoM,IAAI7J,IAAIvC,EAAE,MAAMA,EAAEA,GAAG,IAAI3kF,KAAK8M,EAAEo6E,GAAG,CAACpwE,IAAI6tE,EAAEA,GAAG,IAAI3kF,KAAK,QAAQ8W,GAAG,IAAIhK,EAAE63E,GAAK4I,EAAE6qB,YAAYtrG,KAAEygF,EAAEpE,OAAO,EAAC,CAAC,EAAE86B,GAAG,SAASt+B,EAAE4H,EAAEz2E,EAAEo3E,GAAGp3E,IAAIo3E,IAAIX,EAAEpE,OAAO,EAAE,EAkBlb,IAAIo9B,IAAG,EAAGC,IAAE,EAAGC,GAAG,oBAAoBC,QAAQA,QAAQj/G,IAAIk/G,GAAE,KAAK,SAASC,GAAGjhC,EAAE4H,GAAG,IAAIz2E,EAAE6uE,EAAEiwB,IAAI,GAAG,OAAO9+F,EAAE,GAAG,oBAAoBA,EAAE,IAAIA,EAAE,KAAK,CAAC,MAAMo3E,GAAG24B,GAAElhC,EAAE4H,EAAEW,EAAE,MAAMp3E,EAAE5G,QAAQ,IAAI,CAAC,SAAS42G,GAAGnhC,EAAE4H,EAAEz2E,GAAG,IAAIA,GAAG,CAAC,MAAMo3E,GAAG24B,GAAElhC,EAAE4H,EAAEW,EAAE,CAAC,CAAC,IAAI64B,IAAG,EAIxR,SAASC,GAAGrhC,EAAE4H,EAAEz2E,GAAG,IAAIo3E,EAAEX,EAAE6qB,YAAyC,GAAG,QAAhClqB,EAAE,OAAOA,EAAEA,EAAE2uB,WAAW,MAAiB,CAAC,IAAIr+G,EAAE0vF,EAAEA,EAAEvoF,KAAK,EAAE,CAAC,IAAInH,EAAE2yF,IAAIxL,KAAKA,EAAE,CAAC,IAAIhB,EAAEnmF,EAAE4+G,QAAQ5+G,EAAE4+G,aAAQ,OAAO,IAASz4B,GAAGmiC,GAAGv5B,EAAEz2E,EAAE6tE,EAAE,CAACnmF,EAAEA,EAAEmH,IAAI,OAAOnH,IAAI0vF,EAAE,CAAC,CAAC,SAAS+4B,GAAGthC,EAAE4H,GAAgD,GAAG,QAAhCA,EAAE,QAAlBA,EAAEA,EAAE6qB,aAAuB7qB,EAAEsvB,WAAW,MAAiB,CAAC,IAAI/lG,EAAEy2E,EAAEA,EAAE5nF,KAAK,EAAE,CAAC,IAAImR,EAAEq6E,IAAIxL,KAAKA,EAAE,CAAC,IAAIuI,EAAEp3E,EAAEqmG,OAAOrmG,EAAEsmG,QAAQlvB,GAAG,CAACp3E,EAAEA,EAAEnR,IAAI,OAAOmR,IAAIy2E,EAAE,CAAC,CAAC,SAAS25B,GAAGvhC,GAAG,IAAI4H,EAAE5H,EAAEiwB,IAAI,GAAG,OAAOroB,EAAE,CAAC,IAAIz2E,EAAE6uE,EAAEyT,UAAiBzT,EAAEwL,IAA8BxL,EAAE7uE,EAAE,oBAAoBy2E,EAAEA,EAAE5H,GAAG4H,EAAEr9E,QAAQy1E,CAAC,CAAC,CAClf,SAASwhC,GAAGxhC,GAAG,IAAI4H,EAAE5H,EAAE+U,UAAU,OAAOnN,IAAI5H,EAAE+U,UAAU,KAAKysB,GAAG55B,IAAI5H,EAAEluE,MAAM,KAAKkuE,EAAEivB,UAAU,KAAKjvB,EAAEsV,QAAQ,KAAK,IAAItV,EAAEwL,MAAoB,QAAd5D,EAAE5H,EAAEyT,oBAA4B7L,EAAEskB,WAAWtkB,EAAEukB,WAAWvkB,EAAEshB,WAAWthB,EAAEwkB,WAAWxkB,EAAEykB,MAAMrsB,EAAEyT,UAAU,KAAKzT,EAAEgV,OAAO,KAAKhV,EAAE2xB,aAAa,KAAK3xB,EAAE2vB,cAAc,KAAK3vB,EAAEkV,cAAc,KAAKlV,EAAEmvB,aAAa,KAAKnvB,EAAEyT,UAAU,KAAKzT,EAAEyyB,YAAY,IAAI,CAAC,SAASgP,GAAGzhC,GAAG,OAAO,IAAIA,EAAEwL,KAAK,IAAIxL,EAAEwL,KAAK,IAAIxL,EAAEwL,GAAG,CACna,SAASk2B,GAAG1hC,GAAGA,EAAE,OAAO,CAAC,KAAK,OAAOA,EAAEsV,SAAS,CAAC,GAAG,OAAOtV,EAAEgV,QAAQysB,GAAGzhC,EAAEgV,QAAQ,OAAO,KAAKhV,EAAEA,EAAEgV,MAAM,CAA2B,IAA1BhV,EAAEsV,QAAQN,OAAOhV,EAAEgV,OAAWhV,EAAEA,EAAEsV,QAAQ,IAAItV,EAAEwL,KAAK,IAAIxL,EAAEwL,KAAK,KAAKxL,EAAEwL,KAAK,CAAC,GAAW,EAARxL,EAAEwD,MAAQ,SAASxD,EAAE,GAAG,OAAOA,EAAEluE,OAAO,IAAIkuE,EAAEwL,IAAI,SAASxL,EAAOA,EAAEluE,MAAMkjF,OAAOhV,EAAEA,EAAEA,EAAEluE,KAAK,CAAC,KAAa,EAARkuE,EAAEwD,OAAS,OAAOxD,EAAEyT,SAAS,CAAC,CACzT,SAASkuB,GAAG3hC,EAAE4H,EAAEz2E,GAAG,IAAIo3E,EAAEvI,EAAEwL,IAAI,GAAG,IAAIjD,GAAG,IAAIA,EAAEvI,EAAEA,EAAEyT,UAAU7L,EAAE,IAAIz2E,EAAEiB,SAASjB,EAAE1G,WAAWsM,aAAaipE,EAAE4H,GAAGz2E,EAAE4F,aAAaipE,EAAE4H,IAAI,IAAIz2E,EAAEiB,UAAUw1E,EAAEz2E,EAAE1G,YAAasM,aAAaipE,EAAE7uE,IAAKy2E,EAAEz2E,GAAIrJ,YAAYk4E,GAA4B,QAAxB7uE,EAAEA,EAAEywG,2BAA8B,IAASzwG,GAAG,OAAOy2E,EAAE04B,UAAU14B,EAAE04B,QAAQvV,UAAU,GAAG,IAAIxiB,GAAc,QAAVvI,EAAEA,EAAEluE,OAAgB,IAAI6vG,GAAG3hC,EAAE4H,EAAEz2E,GAAG6uE,EAAEA,EAAEsV,QAAQ,OAAOtV,GAAG2hC,GAAG3hC,EAAE4H,EAAEz2E,GAAG6uE,EAAEA,EAAEsV,OAAO,CAC1X,SAASusB,GAAG7hC,EAAE4H,EAAEz2E,GAAG,IAAIo3E,EAAEvI,EAAEwL,IAAI,GAAG,IAAIjD,GAAG,IAAIA,EAAEvI,EAAEA,EAAEyT,UAAU7L,EAAEz2E,EAAE4F,aAAaipE,EAAE4H,GAAGz2E,EAAErJ,YAAYk4E,QAAQ,GAAG,IAAIuI,GAAc,QAAVvI,EAAEA,EAAEluE,OAAgB,IAAI+vG,GAAG7hC,EAAE4H,EAAEz2E,GAAG6uE,EAAEA,EAAEsV,QAAQ,OAAOtV,GAAG6hC,GAAG7hC,EAAE4H,EAAEz2E,GAAG6uE,EAAEA,EAAEsV,OAAO,CAAC,IAAIwsB,GAAE,KAAKC,IAAG,EAAG,SAASC,GAAGhiC,EAAE4H,EAAEz2E,GAAG,IAAIA,EAAEA,EAAEW,MAAM,OAAOX,GAAG8wG,GAAGjiC,EAAE4H,EAAEz2E,GAAGA,EAAEA,EAAEmkF,OAAO,CACnR,SAAS2sB,GAAGjiC,EAAE4H,EAAEz2E,GAAG,GAAG2lF,IAAI,oBAAoBA,GAAGorB,qBAAqB,IAAIprB,GAAGorB,qBAAqBrrB,GAAG1lF,EAAE,CAAC,MAAMi6E,GAAG,CAAC,OAAOj6E,EAAEq6E,KAAK,KAAK,EAAEq1B,IAAGI,GAAG9vG,EAAEy2E,GAAG,KAAK,EAAE,IAAIW,EAAEu5B,GAAEjpH,EAAEkpH,GAAGD,GAAE,KAAKE,GAAGhiC,EAAE4H,EAAEz2E,GAAO4wG,GAAGlpH,EAAE,QAATipH,GAAEv5B,KAAkBw5B,IAAI/hC,EAAE8hC,GAAE3wG,EAAEA,EAAEsiF,UAAU,IAAIzT,EAAE5tE,SAAS4tE,EAAEv1E,WAAW8I,YAAYpC,GAAG6uE,EAAEzsE,YAAYpC,IAAI2wG,GAAEvuG,YAAYpC,EAAEsiF,YAAY,MAAM,KAAK,GAAG,OAAOquB,KAAIC,IAAI/hC,EAAE8hC,GAAE3wG,EAAEA,EAAEsiF,UAAU,IAAIzT,EAAE5tE,SAAS05F,GAAG9rB,EAAEv1E,WAAW0G,GAAG,IAAI6uE,EAAE5tE,UAAU05F,GAAG9rB,EAAE7uE,GAAGmpF,GAAGta,IAAI8rB,GAAGgW,GAAE3wG,EAAEsiF,YAAY,MAAM,KAAK,EAAElL,EAAEu5B,GAAEjpH,EAAEkpH,GAAGD,GAAE3wG,EAAEsiF,UAAUqG,cAAcioB,IAAG,EAClfC,GAAGhiC,EAAE4H,EAAEz2E,GAAG2wG,GAAEv5B,EAAEw5B,GAAGlpH,EAAE,MAAM,KAAK,EAAE,KAAK,GAAG,KAAK,GAAG,KAAK,GAAG,IAAIgoH,KAAoB,QAAhBt4B,EAAEp3E,EAAEshG,cAAsC,QAAflqB,EAAEA,EAAE2uB,aAAsB,CAACr+G,EAAE0vF,EAAEA,EAAEvoF,KAAK,EAAE,CAAC,IAAIg/E,EAAEnmF,EAAE2vF,EAAExJ,EAAEy4B,QAAQz4B,EAAEA,EAAEwM,SAAI,IAAShD,IAAI,KAAO,EAAFxJ,IAAe,KAAO,EAAFA,KAAfmiC,GAAGhwG,EAAEy2E,EAAEY,GAAyB3vF,EAAEA,EAAEmH,IAAI,OAAOnH,IAAI0vF,EAAE,CAACy5B,GAAGhiC,EAAE4H,EAAEz2E,GAAG,MAAM,KAAK,EAAE,IAAI0vG,KAAII,GAAG9vG,EAAEy2E,GAAiB,oBAAdW,EAAEp3E,EAAEsiF,WAAgC0uB,sBAAsB,IAAI55B,EAAEtC,MAAM90E,EAAEw+F,cAAcpnB,EAAEsyB,MAAM1pG,EAAE+jF,cAAc3M,EAAE45B,sBAAsB,CAAC,MAAM/2B,GAAG81B,GAAE/vG,EAAEy2E,EAAEwD,EAAE,CAAC42B,GAAGhiC,EAAE4H,EAAEz2E,GAAG,MAAM,KAAK,GAAG6wG,GAAGhiC,EAAE4H,EAAEz2E,GAAG,MAAM,KAAK,GAAU,EAAPA,EAAEq+F,MAAQqR,IAAGt4B,EAAEs4B,KAAI,OAChf1vG,EAAE+jF,cAAc8sB,GAAGhiC,EAAE4H,EAAEz2E,GAAG0vG,GAAEt4B,GAAGy5B,GAAGhiC,EAAE4H,EAAEz2E,GAAG,MAAM,QAAQ6wG,GAAGhiC,EAAE4H,EAAEz2E,GAAG,CAAC,SAASixG,GAAGpiC,GAAG,IAAI4H,EAAE5H,EAAEyyB,YAAY,GAAG,OAAO7qB,EAAE,CAAC5H,EAAEyyB,YAAY,KAAK,IAAIthG,EAAE6uE,EAAEyT,UAAU,OAAOtiF,IAAIA,EAAE6uE,EAAEyT,UAAU,IAAIqtB,IAAIl5B,EAAE/tF,SAAQ,SAAS+tF,GAAG,IAAIW,EAAE85B,GAAGpiH,KAAK,KAAK+/E,EAAE4H,GAAGz2E,EAAEvP,IAAIgmF,KAAKz2E,EAAElP,IAAI2lF,GAAGA,EAAE+jB,KAAKpjB,EAAEA,GAAG,GAAE,CAAC,CACzQ,SAAS+5B,GAAGtiC,EAAE4H,GAAG,IAAIz2E,EAAEy2E,EAAEqnB,UAAU,GAAG,OAAO99F,EAAE,IAAI,IAAIo3E,EAAE,EAAEA,EAAEp3E,EAAE5R,OAAOgpF,IAAI,CAAC,IAAI1vF,EAAEsY,EAAEo3E,GAAG,IAAI,IAAIvJ,EAAEgB,EAAEwI,EAAEZ,EAAEwD,EAAE5C,EAAExI,EAAE,KAAK,OAAOoL,GAAG,CAAC,OAAOA,EAAEI,KAAK,KAAK,EAAEs2B,GAAE12B,EAAEqI,UAAUsuB,IAAG,EAAG,MAAM/hC,EAAE,KAAK,EAA4C,KAAK,EAAE8hC,GAAE12B,EAAEqI,UAAUqG,cAAcioB,IAAG,EAAG,MAAM/hC,EAAEoL,EAAEA,EAAE4J,MAAM,CAAC,GAAG,OAAO8sB,GAAE,MAAMnnH,MAAMwS,EAAE,MAAM80G,GAAGjjC,EAAEwJ,EAAE3vF,GAAGipH,GAAE,KAAKC,IAAG,EAAG,IAAIxgC,EAAE1oF,EAAEk8F,UAAU,OAAOxT,IAAIA,EAAEyT,OAAO,MAAMn8F,EAAEm8F,OAAO,IAAI,CAAC,MAAM7tF,GAAG+5G,GAAEroH,EAAE+uF,EAAEzgF,EAAE,CAAC,CAAC,GAAkB,MAAfygF,EAAEw3B,aAAmB,IAAIx3B,EAAEA,EAAE91E,MAAM,OAAO81E,GAAG26B,GAAG36B,EAAE5H,GAAG4H,EAAEA,EAAE0N,OAAO,CACje,SAASitB,GAAGviC,EAAE4H,GAAG,IAAIz2E,EAAE6uE,EAAE+U,UAAUxM,EAAEvI,EAAEwD,MAAM,OAAOxD,EAAEwL,KAAK,KAAK,EAAE,KAAK,GAAG,KAAK,GAAG,KAAK,GAAiB,GAAd82B,GAAG16B,EAAE5H,GAAGwiC,GAAGxiC,GAAQ,EAAFuI,EAAI,CAAC,IAAI84B,GAAG,EAAErhC,EAAEA,EAAEgV,QAAQssB,GAAG,EAAEthC,EAAE,CAAC,MAAMzyE,GAAG2zG,GAAElhC,EAAEA,EAAEgV,OAAOznF,EAAE,CAAC,IAAI8zG,GAAG,EAAErhC,EAAEA,EAAEgV,OAAO,CAAC,MAAMznF,GAAG2zG,GAAElhC,EAAEA,EAAEgV,OAAOznF,EAAE,CAAC,CAAC,MAAM,KAAK,EAAE+0G,GAAG16B,EAAE5H,GAAGwiC,GAAGxiC,GAAK,IAAFuI,GAAO,OAAOp3E,GAAG8vG,GAAG9vG,EAAEA,EAAE6jF,QAAQ,MAAM,KAAK,EAAgD,GAA9CstB,GAAG16B,EAAE5H,GAAGwiC,GAAGxiC,GAAK,IAAFuI,GAAO,OAAOp3E,GAAG8vG,GAAG9vG,EAAEA,EAAE6jF,QAAmB,GAARhV,EAAEwD,MAAS,CAAC,IAAI3qF,EAAEmnF,EAAEyT,UAAU,IAAI3E,GAAGj2F,EAAE,GAAG,CAAC,MAAM0U,GAAG2zG,GAAElhC,EAAEA,EAAEgV,OAAOznF,EAAE,CAAC,CAAC,GAAK,EAAFg7E,GAAoB,OAAd1vF,EAAEmnF,EAAEyT,WAAmB,CAAC,IAAIzU,EAAEgB,EAAE2vB,cAAcnnB,EAAE,OAAOr3E,EAAEA,EAAEw+F,cAAc3wB,EAAEoM,EAAEpL,EAAEznF,KAAKgpF,EAAEvB,EAAEyyB,YACje,GAAnBzyB,EAAEyyB,YAAY,KAAQ,OAAOlxB,EAAE,IAAI,UAAU6J,GAAG,UAAUpM,EAAEzmF,MAAM,MAAMymF,EAAEv+E,MAAM6sF,EAAGz0F,EAAEmmF,GAAG8T,GAAG1H,EAAE5C,GAAG,IAAIrhF,EAAE2rF,GAAG1H,EAAEpM,GAAG,IAAIwJ,EAAE,EAAEA,EAAEjH,EAAEhiF,OAAOipF,GAAG,EAAE,CAAC,IAAI7G,EAAEJ,EAAEiH,GAAGqoB,EAAEtvB,EAAEiH,EAAE,GAAG,UAAU7G,EAAEiQ,GAAG/4F,EAAEg4G,GAAG,4BAA4BlvB,EAAE8M,GAAG51F,EAAEg4G,GAAG,aAAalvB,EAAEmN,GAAGj2F,EAAEg4G,GAAG1nB,EAAGtwF,EAAE8oF,EAAEkvB,EAAE1pG,EAAE,CAAC,OAAOikF,GAAG,IAAK,QAAQmC,EAAG10F,EAAEmmF,GAAG,MAAM,IAAK,WAAWmP,GAAGt1F,EAAEmmF,GAAG,MAAM,IAAK,SAAS,IAAI8xB,EAAEj4G,EAAEo0F,cAAcizB,YAAYrnH,EAAEo0F,cAAcizB,cAAclhC,EAAEmhC,SAAS,IAAIpP,EAAE/xB,EAAExmF,MAAM,MAAMu4G,EAAEpjB,GAAG90F,IAAImmF,EAAEmhC,SAASpP,GAAE,GAAID,MAAM9xB,EAAEmhC,WAAW,MAAMnhC,EAAEgO,aAAaW,GAAG90F,IAAImmF,EAAEmhC,SACnfnhC,EAAEgO,cAAa,GAAIW,GAAG90F,IAAImmF,EAAEmhC,SAASnhC,EAAEmhC,SAAS,GAAG,IAAG,IAAKtnH,EAAEszG,IAAIntB,CAAC,CAAC,MAAMzxE,GAAG2zG,GAAElhC,EAAEA,EAAEgV,OAAOznF,EAAE,CAAC,CAAC,MAAM,KAAK,EAAgB,GAAd+0G,GAAG16B,EAAE5H,GAAGwiC,GAAGxiC,GAAQ,EAAFuI,EAAI,CAAC,GAAG,OAAOvI,EAAEyT,UAAU,MAAM94F,MAAMwS,EAAE,MAAMtU,EAAEmnF,EAAEyT,UAAUzU,EAAEgB,EAAE2vB,cAAc,IAAI92G,EAAEuR,UAAU40E,CAAC,CAAC,MAAMzxE,GAAG2zG,GAAElhC,EAAEA,EAAEgV,OAAOznF,EAAE,CAAC,CAAC,MAAM,KAAK,EAAgB,GAAd+0G,GAAG16B,EAAE5H,GAAGwiC,GAAGxiC,GAAQ,EAAFuI,GAAK,OAAOp3E,GAAGA,EAAE+jF,cAAc2E,aAAa,IAAIS,GAAG1S,EAAEkS,cAAc,CAAC,MAAMvsF,GAAG2zG,GAAElhC,EAAEA,EAAEgV,OAAOznF,EAAE,CAAC,MAAM,KAAK,EAG4G,QAAQ+0G,GAAG16B,EACnf5H,GAAGwiC,GAAGxiC,SAJ4Y,KAAK,GAAGsiC,GAAG16B,EAAE5H,GAAGwiC,GAAGxiC,GAAqB,MAAlBnnF,EAAEmnF,EAAEluE,OAAQ0xE,QAAaxE,EAAE,OAAOnmF,EAAEq8F,cAAcr8F,EAAE46F,UAAUgvB,SAASzjC,GAAGA,GAClf,OAAOnmF,EAAEk8F,WAAW,OAAOl8F,EAAEk8F,UAAUG,gBAAgBwtB,GAAG1sB,OAAQ,EAAFzN,GAAK65B,GAAGpiC,GAAG,MAAM,KAAK,GAAsF,GAAnF2B,EAAE,OAAOxwE,GAAG,OAAOA,EAAE+jF,cAAqB,EAAPlV,EAAEwvB,MAAQqR,IAAG15G,EAAE05G,KAAIl/B,EAAE2gC,GAAG16B,EAAE5H,GAAG6gC,GAAE15G,GAAGm7G,GAAG16B,EAAE5H,GAAGwiC,GAAGxiC,GAAQ,KAAFuI,EAAO,CAA0B,GAAzBphF,EAAE,OAAO64E,EAAEkV,eAAkBlV,EAAEyT,UAAUgvB,SAASt7G,KAAKw6E,GAAG,KAAY,EAAP3B,EAAEwvB,MAAQ,IAAIwR,GAAEhhC,EAAE2B,EAAE3B,EAAEluE,MAAM,OAAO6vE,GAAG,CAAC,IAAIkvB,EAAEmQ,GAAEr/B,EAAE,OAAOq/B,IAAG,CAAe,OAAVjQ,GAAJD,EAAEkQ,IAAMlvG,MAAag/F,EAAEtlB,KAAK,KAAK,EAAE,KAAK,GAAG,KAAK,GAAG,KAAK,GAAG61B,GAAG,EAAEvQ,EAAEA,EAAE9b,QAAQ,MAAM,KAAK,EAAEisB,GAAGnQ,EAAEA,EAAE9b,QAAQ,IAAI50F,EAAE0wG,EAAErd,UAAU,GAAG,oBAAoBrzF,EAAE+hH,qBAAqB,CAAC55B,EAAEuoB,EAAE3/F,EAAE2/F,EAAE9b,OAAO,IAAIpN,EAAEW,EAAEnoF,EAAE6lF,MACpf2B,EAAE+nB,cAAcvvG,EAAEy6G,MAAMjzB,EAAEsN,cAAc90F,EAAE+hH,sBAAsB,CAAC,MAAM50G,GAAG2zG,GAAE34B,EAAEp3E,EAAE5D,EAAE,CAAC,CAAC,MAAM,KAAK,EAAE0zG,GAAGnQ,EAAEA,EAAE9b,QAAQ,MAAM,KAAK,GAAG,GAAG,OAAO8b,EAAE5b,cAAc,CAACytB,GAAG9R,GAAG,QAAQ,EAAE,OAAOE,GAAGA,EAAE/b,OAAO8b,EAAEkQ,GAAEjQ,GAAG4R,GAAG9R,EAAE,CAAClvB,EAAEA,EAAE2T,OAAO,CAACtV,EAAE,IAAI2B,EAAE,KAAKkvB,EAAE7wB,IAAI,CAAC,GAAG,IAAI6wB,EAAErlB,KAAK,GAAG,OAAO7J,EAAE,CAACA,EAAEkvB,EAAE,IAAIh4G,EAAEg4G,EAAEpd,UAAUtsF,EAAa,oBAAV63E,EAAEnmF,EAAEg5F,OAA4BC,YAAY9S,EAAE8S,YAAY,UAAU,OAAO,aAAa9S,EAAE4jC,QAAQ,QAASx3B,EAAEylB,EAAEpd,UAAkCjL,OAAE,KAA1BjH,EAAEsvB,EAAElB,cAAc9d,QAAoB,OAAOtQ,GAAGA,EAAExiF,eAAe,WAAWwiF,EAAEqhC,QAAQ,KAAKx3B,EAAEyG,MAAM+wB,QACzfjxB,GAAG,UAAUnJ,GAAG,CAAC,MAAMj7E,GAAG2zG,GAAElhC,EAAEA,EAAEgV,OAAOznF,EAAE,CAAC,OAAO,GAAG,IAAIsjG,EAAErlB,KAAK,GAAG,OAAO7J,EAAE,IAAIkvB,EAAEpd,UAAUrpF,UAAUjD,EAAE,GAAG0pG,EAAElB,aAAa,CAAC,MAAMpiG,GAAG2zG,GAAElhC,EAAEA,EAAEgV,OAAOznF,EAAE,OAAO,IAAI,KAAKsjG,EAAErlB,KAAK,KAAKqlB,EAAErlB,KAAK,OAAOqlB,EAAE3b,eAAe2b,IAAI7wB,IAAI,OAAO6wB,EAAE/+F,MAAM,CAAC++F,EAAE/+F,MAAMkjF,OAAO6b,EAAEA,EAAEA,EAAE/+F,MAAM,QAAQ,CAAC,GAAG++F,IAAI7wB,EAAE,MAAMA,EAAE,KAAK,OAAO6wB,EAAEvb,SAAS,CAAC,GAAG,OAAOub,EAAE7b,QAAQ6b,EAAE7b,SAAShV,EAAE,MAAMA,EAAE2B,IAAIkvB,IAAIlvB,EAAE,MAAMkvB,EAAEA,EAAE7b,MAAM,CAACrT,IAAIkvB,IAAIlvB,EAAE,MAAMkvB,EAAEvb,QAAQN,OAAO6b,EAAE7b,OAAO6b,EAAEA,EAAEvb,OAAO,CAAC,CAAC,MAAM,KAAK,GAAGgtB,GAAG16B,EAAE5H,GAAGwiC,GAAGxiC,GAAK,EAAFuI,GAAK65B,GAAGpiC,GAAS,KAAK,IACtd,CAAC,SAASwiC,GAAGxiC,GAAG,IAAI4H,EAAE5H,EAAEwD,MAAM,GAAK,EAAFoE,EAAI,CAAC,IAAI5H,EAAE,CAAC,IAAI,IAAI7uE,EAAE6uE,EAAEgV,OAAO,OAAO7jF,GAAG,CAAC,GAAGswG,GAAGtwG,GAAG,CAAC,IAAIo3E,EAAEp3E,EAAE,MAAM6uE,CAAC,CAAC7uE,EAAEA,EAAE6jF,MAAM,CAAC,MAAMr6F,MAAMwS,EAAE,KAAM,CAAC,OAAOo7E,EAAEiD,KAAK,KAAK,EAAE,IAAI3yF,EAAE0vF,EAAEkL,UAAkB,GAARlL,EAAE/E,QAAWsL,GAAGj2F,EAAE,IAAI0vF,EAAE/E,QAAQ,IAAgBq+B,GAAG7hC,EAAT0hC,GAAG1hC,GAAUnnF,GAAG,MAAM,KAAK,EAAE,KAAK,EAAE,IAAI2vF,EAAED,EAAEkL,UAAUqG,cAAsB6nB,GAAG3hC,EAAT0hC,GAAG1hC,GAAUwI,GAAG,MAAM,QAAQ,MAAM7tF,MAAMwS,EAAE,MAAO,CAAC,MAAMo0E,GAAG2/B,GAAElhC,EAAEA,EAAEgV,OAAOzT,EAAE,CAACvB,EAAEwD,QAAQ,CAAC,CAAG,KAAFoE,IAAS5H,EAAEwD,QAAQ,KAAK,CAAC,SAASq/B,GAAG7iC,EAAE4H,EAAEz2E,GAAG6vG,GAAEhhC,EAAE8iC,GAAG9iC,EAAE4H,EAAEz2E,EAAE,CACvb,SAAS2xG,GAAG9iC,EAAE4H,EAAEz2E,GAAG,IAAI,IAAIo3E,EAAE,KAAY,EAAPvI,EAAEwvB,MAAQ,OAAOwR,IAAG,CAAC,IAAInoH,EAAEmoH,GAAEhiC,EAAEnmF,EAAEiZ,MAAM,GAAG,KAAKjZ,EAAE2yF,KAAKjD,EAAE,CAAC,IAAIC,EAAE,OAAO3vF,EAAEq8F,eAAe0rB,GAAG,IAAIp4B,EAAE,CAAC,IAAI4C,EAAEvyF,EAAEk8F,UAAUxT,EAAE,OAAO6J,GAAG,OAAOA,EAAE8J,eAAe2rB,GAAEz1B,EAAEw1B,GAAG,IAAIz5G,EAAE05G,GAAO,GAALD,GAAGp4B,GAAMq4B,GAAEt/B,KAAKp6E,EAAE,IAAI65G,GAAEnoH,EAAE,OAAOmoH,IAAOz/B,GAAJiH,EAAEw4B,IAAMlvG,MAAM,KAAK02E,EAAEgD,KAAK,OAAOhD,EAAE0M,cAAc6tB,GAAGlqH,GAAG,OAAO0oF,GAAGA,EAAEyT,OAAOxM,EAAEw4B,GAAEz/B,GAAGwhC,GAAGlqH,GAAG,KAAK,OAAOmmF,GAAGgiC,GAAEhiC,EAAE8jC,GAAG9jC,EAAE4I,EAAEz2E,GAAG6tE,EAAEA,EAAEsW,QAAQ0rB,GAAEnoH,EAAE+nH,GAAGx1B,EAAEy1B,GAAE15G,CAAC,CAAC67G,GAAGhjC,EAAM,MAAM,KAAoB,KAAfnnF,EAAEumH,eAAoB,OAAOpgC,GAAGA,EAAEgW,OAAOn8F,EAAEmoH,GAAEhiC,GAAGgkC,GAAGhjC,EAAM,CAAC,CACvc,SAASgjC,GAAGhjC,GAAG,KAAK,OAAOghC,IAAG,CAAC,IAAIp5B,EAAEo5B,GAAE,GAAG,KAAa,KAARp5B,EAAEpE,OAAY,CAAC,IAAIryE,EAAEy2E,EAAEmN,UAAU,IAAI,GAAG,KAAa,KAARnN,EAAEpE,OAAY,OAAOoE,EAAE4D,KAAK,KAAK,EAAE,KAAK,GAAG,KAAK,GAAGq1B,IAAGS,GAAG,EAAE15B,GAAG,MAAM,KAAK,EAAE,IAAIW,EAAEX,EAAE6L,UAAU,GAAW,EAAR7L,EAAEpE,QAAUq9B,GAAE,GAAG,OAAO1vG,EAAEo3E,EAAEgzB,wBAAwB,CAAC,IAAI1iH,EAAE+uF,EAAEX,cAAcW,EAAErvF,KAAK4Y,EAAEw+F,cAAcoK,GAAGnyB,EAAErvF,KAAK4Y,EAAEw+F,eAAepnB,EAAEu1B,mBAAmBjlH,EAAEsY,EAAE+jF,cAAc3M,EAAE06B,oCAAoC,CAAC,IAAIjkC,EAAE4I,EAAE6qB,YAAY,OAAOzzB,GAAG00B,GAAG9rB,EAAE5I,EAAEuJ,GAAG,MAAM,KAAK,EAAE,IAAIC,EAAEZ,EAAE6qB,YAAY,GAAG,OAAOjqB,EAAE,CAAQ,GAAPr3E,EAAE,KAAQ,OAAOy2E,EAAE91E,MAAM,OAAO81E,EAAE91E,MAAM05E,KAAK,KAAK,EACvf,KAAK,EAAEr6E,EAAEy2E,EAAE91E,MAAM2hF,UAAUigB,GAAG9rB,EAAEY,EAAEr3E,EAAE,CAAC,MAAM,KAAK,EAAE,IAAIi6E,EAAExD,EAAE6L,UAAU,GAAG,OAAOtiF,GAAW,EAARy2E,EAAEpE,MAAQ,CAACryE,EAAEi6E,EAAE,IAAI7J,EAAEqG,EAAE+nB,cAAc,OAAO/nB,EAAErvF,MAAM,IAAK,SAAS,IAAK,QAAQ,IAAK,SAAS,IAAK,WAAWgpF,EAAEg/B,WAAWpvG,EAAE+1F,QAAQ,MAAM,IAAK,MAAM3lB,EAAEt0E,MAAMkE,EAAElE,IAAIs0E,EAAEt0E,KAAK,CAAC,MAAM,KAAK,EAAQ,KAAK,EAAQ,KAAK,GAAyJ,KAAK,GAAG,KAAK,GAAG,KAAK,GAAG,KAAK,GAAG,KAAK,GAAG,KAAK,GAAG,MAAhM,KAAK,GAAG,GAAG,OAAO26E,EAAEsN,cAAc,CAAC,IAAI/tF,EAAEygF,EAAEmN,UAAU,GAAG,OAAO5tF,EAAE,CAAC,IAAIw6E,EAAEx6E,EAAE+tF,cAAc,GAAG,OAAOvT,EAAE,CAAC,IAAIkvB,EAAElvB,EAAEwT,WAAW,OAAO0b,GAAGvW,GAAGuW,EAAE,CAAC,CAAC,CAAC,MAC5c,QAAQ,MAAMl2G,MAAMwS,EAAE,MAAO0zG,IAAW,IAARj5B,EAAEpE,OAAW+9B,GAAG35B,EAAE,CAAC,MAAMkpB,GAAGoQ,GAAEt5B,EAAEA,EAAEoN,OAAO8b,EAAE,CAAC,CAAC,GAAGlpB,IAAI5H,EAAE,CAACghC,GAAE,KAAK,KAAK,CAAa,GAAG,QAAf7vG,EAAEy2E,EAAE0N,SAAoB,CAACnkF,EAAE6jF,OAAOpN,EAAEoN,OAAOgsB,GAAE7vG,EAAE,KAAK,CAAC6vG,GAAEp5B,EAAEoN,MAAM,CAAC,CAAC,SAAS2tB,GAAG3iC,GAAG,KAAK,OAAOghC,IAAG,CAAC,IAAIp5B,EAAEo5B,GAAE,GAAGp5B,IAAI5H,EAAE,CAACghC,GAAE,KAAK,KAAK,CAAC,IAAI7vG,EAAEy2E,EAAE0N,QAAQ,GAAG,OAAOnkF,EAAE,CAACA,EAAE6jF,OAAOpN,EAAEoN,OAAOgsB,GAAE7vG,EAAE,KAAK,CAAC6vG,GAAEp5B,EAAEoN,MAAM,CAAC,CACvS,SAAS+tB,GAAG/iC,GAAG,KAAK,OAAOghC,IAAG,CAAC,IAAIp5B,EAAEo5B,GAAE,IAAI,OAAOp5B,EAAE4D,KAAK,KAAK,EAAE,KAAK,GAAG,KAAK,GAAG,IAAIr6E,EAAEy2E,EAAEoN,OAAO,IAAIssB,GAAG,EAAE15B,EAAE,CAAC,MAAMrG,GAAG2/B,GAAEt5B,EAAEz2E,EAAEowE,EAAE,CAAC,MAAM,KAAK,EAAE,IAAIgH,EAAEX,EAAE6L,UAAU,GAAG,oBAAoBlL,EAAEgzB,kBAAkB,CAAC,IAAI1iH,EAAE+uF,EAAEoN,OAAO,IAAIzM,EAAEgzB,mBAAmB,CAAC,MAAMh6B,GAAG2/B,GAAEt5B,EAAE/uF,EAAE0oF,EAAE,CAAC,CAAC,IAAIvC,EAAE4I,EAAEoN,OAAO,IAAIusB,GAAG35B,EAAE,CAAC,MAAMrG,GAAG2/B,GAAEt5B,EAAE5I,EAAEuC,EAAE,CAAC,MAAM,KAAK,EAAE,IAAIiH,EAAEZ,EAAEoN,OAAO,IAAIusB,GAAG35B,EAAE,CAAC,MAAMrG,GAAG2/B,GAAEt5B,EAAEY,EAAEjH,EAAE,EAAE,CAAC,MAAMA,GAAG2/B,GAAEt5B,EAAEA,EAAEoN,OAAOzT,EAAE,CAAC,GAAGqG,IAAI5H,EAAE,CAACghC,GAAE,KAAK,KAAK,CAAC,IAAI51B,EAAExD,EAAE0N,QAAQ,GAAG,OAAOlK,EAAE,CAACA,EAAE4J,OAAOpN,EAAEoN,OAAOgsB,GAAE51B,EAAE,KAAK,CAAC41B,GAAEp5B,EAAEoN,MAAM,CAAC,CAC7d,IAwBkNkuB,GAxB9MC,GAAG3+G,KAAK4+G,KAAKC,GAAG55B,EAAGkrB,uBAAuB2O,GAAG75B,EAAGkzB,kBAAkB4G,GAAG95B,EAAG+Q,wBAAwB6Y,GAAE,EAAE2D,GAAE,KAAKwM,GAAE,KAAKC,GAAE,EAAEjG,GAAG,EAAED,GAAG/Q,GAAG,GAAGgU,GAAE,EAAEkD,GAAG,KAAKjQ,GAAG,EAAEkQ,GAAG,EAAEC,GAAG,EAAEC,GAAG,KAAKC,GAAG,KAAKpB,GAAG,EAAEjC,GAAGsD,IAASC,GAAG,KAAKjI,IAAG,EAAGpqD,GAAG,KAAKwqD,GAAG,KAAK8H,IAAG,EAAGC,GAAG,KAAKC,GAAG,EAAEC,GAAG,EAAEC,GAAG,KAAKC,IAAI,EAAEC,GAAG,EAAE,SAAS7L,KAAI,OAAO,KAAO,EAAFrF,IAAKrd,MAAK,IAAIsuB,GAAGA,GAAGA,GAAGtuB,IAAG,CAChU,SAASuiB,GAAGv4B,GAAG,OAAG,KAAY,EAAPA,EAAEwvB,MAAe,EAAK,KAAO,EAAF6D,KAAM,IAAIoQ,GAASA,IAAGA,GAAK,OAAO1T,GAAGrV,YAAkB,IAAI6pB,KAAKA,GAAGzsB,MAAMysB,IAAU,KAAPvkC,EAAEmY,IAAkBnY,EAAiBA,OAAE,KAAjBA,EAAE5oF,OAAOqsG,OAAmB,GAAGzI,GAAGhb,EAAEznF,KAAc,CAAC,SAAS++G,GAAGt3B,EAAE4H,EAAEz2E,EAAEo3E,GAAG,GAAG,GAAG67B,GAAG,MAAMA,GAAG,EAAEC,GAAG,KAAK1pH,MAAMwS,EAAE,MAAM6qF,GAAGhY,EAAE7uE,EAAEo3E,GAAM,KAAO,EAAF8qB,KAAMrzB,IAAIg3B,KAAEh3B,IAAIg3B,KAAI,KAAO,EAAF3D,MAAOsQ,IAAIxyG,GAAG,IAAIqvG,IAAGgE,GAAGxkC,EAAEyjC,KAAIgB,GAAGzkC,EAAEuI,GAAG,IAAIp3E,GAAG,IAAIkiG,IAAG,KAAY,EAAPzrB,EAAE4nB,QAAUiR,GAAGzqB,KAAI,IAAI4X,IAAIE,MAAK,CAC1Y,SAAS2W,GAAGzkC,EAAE4H,GAAG,IAAIz2E,EAAE6uE,EAAE0kC,cA3MzB,SAAY1kC,EAAE4H,GAAG,IAAI,IAAIz2E,EAAE6uE,EAAEwX,eAAejP,EAAEvI,EAAEyX,YAAY5+F,EAAEmnF,EAAE2kC,gBAAgB3lC,EAAEgB,EAAEuX,aAAa,EAAEvY,GAAG,CAAC,IAAIwJ,EAAE,GAAG5jF,GAAGo6E,GAAGoM,EAAE,GAAG5C,EAAEjH,EAAE1oF,EAAE2vF,IAAO,IAAIjH,EAAM,KAAK6J,EAAEj6E,IAAI,KAAKi6E,EAAE7C,KAAG1vF,EAAE2vF,GAAGoP,GAAGxM,EAAExD,IAAQrG,GAAGqG,IAAI5H,EAAE4kC,cAAcx5B,GAAGpM,IAAIoM,CAAC,CAAC,CA2MnLy5B,CAAG7kC,EAAE4H,GAAG,IAAIW,EAAE+O,GAAGtX,EAAEA,IAAIg3B,GAAEyM,GAAE,GAAG,GAAG,IAAIl7B,EAAE,OAAOp3E,GAAGukF,GAAGvkF,GAAG6uE,EAAE0kC,aAAa,KAAK1kC,EAAE8kC,iBAAiB,OAAO,GAAGl9B,EAAEW,GAAGA,EAAEvI,EAAE8kC,mBAAmBl9B,EAAE,CAAgB,GAAf,MAAMz2E,GAAGukF,GAAGvkF,GAAM,IAAIy2E,EAAE,IAAI5H,EAAEwL,IA5IsJ,SAAYxL,GAAG4tB,IAAG,EAAGC,GAAG7tB,EAAE,CA4I5K+kC,CAAGC,GAAG/kH,KAAK,KAAK+/E,IAAI6tB,GAAGmX,GAAG/kH,KAAK,KAAK+/E,IAAIwrB,IAAG,WAAW,KAAO,EAAF6H,KAAMvF,IAAI,IAAG38F,EAAE,SAAS,CAAC,OAAOinF,GAAG7P,IAAI,KAAK,EAAEp3E,EAAEilF,GAAG,MAAM,KAAK,EAAEjlF,EAAEmlF,GAAG,MAAM,KAAK,GAAwC,QAAQnlF,EAAEqlF,SAApC,KAAK,UAAUrlF,EAAEwlF,GAAsBxlF,EAAE8zG,GAAG9zG,EAAE+zG,GAAGjlH,KAAK,KAAK+/E,GAAG,CAACA,EAAE8kC,iBAAiBl9B,EAAE5H,EAAE0kC,aAAavzG,CAAC,CAAC,CAC7c,SAAS+zG,GAAGllC,EAAE4H,GAAc,GAAX08B,IAAI,EAAEC,GAAG,EAAK,KAAO,EAAFlR,IAAK,MAAM14G,MAAMwS,EAAE,MAAM,IAAIgE,EAAE6uE,EAAE0kC,aAAa,GAAGS,MAAMnlC,EAAE0kC,eAAevzG,EAAE,OAAO,KAAK,IAAIo3E,EAAE+O,GAAGtX,EAAEA,IAAIg3B,GAAEyM,GAAE,GAAG,GAAG,IAAIl7B,EAAE,OAAO,KAAK,GAAG,KAAO,GAAFA,IAAO,KAAKA,EAAEvI,EAAE4kC,eAAeh9B,EAAEA,EAAEw9B,GAAGplC,EAAEuI,OAAO,CAACX,EAAEW,EAAE,IAAI1vF,EAAEw6G,GAAEA,IAAG,EAAE,IAAIr0B,EAAEqmC,KAAgD,IAAxCrO,KAAIh3B,GAAGyjC,KAAI77B,IAAEo8B,GAAG,KAAKvD,GAAGzqB,KAAI,IAAIsvB,GAAGtlC,EAAE4H,UAAU29B,KAAK,KAAK,CAAC,MAAMn6B,GAAGo6B,GAAGxlC,EAAEoL,EAAE,CAAUkmB,KAAK+R,GAAG94G,QAAQy0E,EAAEq0B,GAAEx6G,EAAE,OAAO2qH,GAAE57B,EAAE,GAAGovB,GAAE,KAAKyM,GAAE,EAAE77B,EAAE44B,GAAE,CAAC,GAAG,IAAI54B,EAAE,CAAyC,GAAxC,IAAIA,IAAY,KAAR/uF,EAAEg/F,GAAG7X,MAAWuI,EAAE1vF,EAAE+uF,EAAE69B,GAAGzlC,EAAEnnF,KAAQ,IAAI+uF,EAAE,MAAMz2E,EAAEuyG,GAAG4B,GAAGtlC,EAAE,GAAGwkC,GAAGxkC,EAAEuI,GAAGk8B,GAAGzkC,EAAEgW,MAAK7kF,EAAE,GAAG,IAAIy2E,EAAE48B,GAAGxkC,EAAEuI,OAChf,CAAuB,GAAtB1vF,EAAEmnF,EAAEz1E,QAAQwqF,UAAa,KAAO,GAAFxM,KAGnC,SAAYvI,GAAG,IAAI,IAAI4H,EAAE5H,IAAI,CAAC,GAAW,MAAR4H,EAAEpE,MAAY,CAAC,IAAIryE,EAAEy2E,EAAE6qB,YAAY,GAAG,OAAOthG,GAAe,QAAXA,EAAEA,EAAEgmG,QAAiB,IAAI,IAAI5uB,EAAE,EAAEA,EAAEp3E,EAAE5R,OAAOgpF,IAAI,CAAC,IAAI1vF,EAAEsY,EAAEo3E,GAAGvJ,EAAEnmF,EAAEg+G,YAAYh+G,EAAEA,EAAEL,MAAM,IAAI,IAAIusG,GAAG/lB,IAAInmF,GAAG,OAAM,CAAE,CAAC,MAAM2vF,GAAG,OAAM,CAAE,CAAC,CAAC,CAAW,GAAVr3E,EAAEy2E,EAAE91E,MAAwB,MAAf81E,EAAEw3B,cAAoB,OAAOjuG,EAAEA,EAAE6jF,OAAOpN,EAAEA,EAAEz2E,MAAM,CAAC,GAAGy2E,IAAI5H,EAAE,MAAM,KAAK,OAAO4H,EAAE0N,SAAS,CAAC,GAAG,OAAO1N,EAAEoN,QAAQpN,EAAEoN,SAAShV,EAAE,OAAM,EAAG4H,EAAEA,EAAEoN,MAAM,CAACpN,EAAE0N,QAAQN,OAAOpN,EAAEoN,OAAOpN,EAAEA,EAAE0N,OAAO,CAAC,CAAC,OAAM,CAAE,CAHvXowB,CAAG7sH,KAAe,KAAV+uF,EAAEw9B,GAAGplC,EAAEuI,MAAmB,KAARvJ,EAAE6Y,GAAG7X,MAAWuI,EAAEvJ,EAAE4I,EAAE69B,GAAGzlC,EAAEhB,KAAK,IAAI4I,GAAG,MAAMz2E,EAAEuyG,GAAG4B,GAAGtlC,EAAE,GAAGwkC,GAAGxkC,EAAEuI,GAAGk8B,GAAGzkC,EAAEgW,MAAK7kF,EAAqC,OAAnC6uE,EAAE2lC,aAAa9sH,EAAEmnF,EAAE4lC,cAAcr9B,EAASX,GAAG,KAAK,EAAE,KAAK,EAAE,MAAMjtF,MAAMwS,EAAE,MAAM,KAAK,EAC8B,KAAK,EAAE04G,GAAG7lC,EAAE8jC,GAAGE,IAAI,MAD7B,KAAK,EAAU,GAARQ,GAAGxkC,EAAEuI,IAAS,UAAFA,KAAeA,GAAiB,IAAbX,EAAE86B,GAAG,IAAI1sB,MAAU,CAAC,GAAG,IAAIsB,GAAGtX,EAAE,GAAG,MAAyB,KAAnBnnF,EAAEmnF,EAAEwX,gBAAqBjP,KAAKA,EAAE,CAACmwB,KAAI14B,EAAEyX,aAAazX,EAAEwX,eAAe3+F,EAAE,KAAK,CAACmnF,EAAE8lC,cAAc1a,GAAGya,GAAG5lH,KAAK,KAAK+/E,EAAE8jC,GAAGE,IAAIp8B,GAAG,KAAK,CAACi+B,GAAG7lC,EAAE8jC,GAAGE,IAAI,MAAM,KAAK,EAAU,GAARQ,GAAGxkC,EAAEuI,IAAS,QAAFA,KAC9eA,EAAE,MAAqB,IAAfX,EAAE5H,EAAEiY,WAAep/F,GAAG,EAAE,EAAE0vF,GAAG,CAAC,IAAIC,EAAE,GAAG5jF,GAAG2jF,GAAGvJ,EAAE,GAAGwJ,GAAEA,EAAEZ,EAAEY,IAAK3vF,IAAIA,EAAE2vF,GAAGD,IAAIvJ,CAAC,CAAqG,GAApGuJ,EAAE1vF,EAAqG,IAA3F0vF,GAAG,KAAXA,EAAEyN,KAAIzN,GAAW,IAAI,IAAIA,EAAE,IAAI,KAAKA,EAAE,KAAK,KAAKA,EAAE,KAAK,IAAIA,EAAE,IAAI,KAAKA,EAAE,KAAK,KAAK46B,GAAG56B,EAAE,OAAOA,GAAU,CAACvI,EAAE8lC,cAAc1a,GAAGya,GAAG5lH,KAAK,KAAK+/E,EAAE8jC,GAAGE,IAAIz7B,GAAG,KAAK,CAACs9B,GAAG7lC,EAAE8jC,GAAGE,IAAI,MAA+B,QAAQ,MAAMrpH,MAAMwS,EAAE,MAAO,CAAC,CAAW,OAAVs3G,GAAGzkC,EAAEgW,MAAYhW,EAAE0kC,eAAevzG,EAAE+zG,GAAGjlH,KAAK,KAAK+/E,GAAG,IAAI,CACrX,SAASylC,GAAGzlC,EAAE4H,GAAG,IAAIz2E,EAAE0yG,GAA2G,OAAxG7jC,EAAEz1E,QAAQ2qF,cAAc2E,eAAeyrB,GAAGtlC,EAAE4H,GAAGpE,OAAO,KAAe,KAAVxD,EAAEolC,GAAGplC,EAAE4H,MAAWA,EAAEk8B,GAAGA,GAAG3yG,EAAE,OAAOy2E,GAAGq4B,GAAGr4B,IAAW5H,CAAC,CAAC,SAASigC,GAAGjgC,GAAG,OAAO8jC,GAAGA,GAAG9jC,EAAE8jC,GAAGzpH,KAAKrB,MAAM8qH,GAAG9jC,EAAE,CAE5L,SAASwkC,GAAGxkC,EAAE4H,GAAuD,IAApDA,IAAIg8B,GAAGh8B,IAAI+7B,GAAG3jC,EAAEwX,gBAAgB5P,EAAE5H,EAAEyX,cAAc7P,EAAM5H,EAAEA,EAAE2kC,gBAAgB,EAAE/8B,GAAG,CAAC,IAAIz2E,EAAE,GAAGvM,GAAGgjF,GAAGW,EAAE,GAAGp3E,EAAE6uE,EAAE7uE,IAAI,EAAEy2E,IAAIW,CAAC,CAAC,CAAC,SAASy8B,GAAGhlC,GAAG,GAAG,KAAO,EAAFqzB,IAAK,MAAM14G,MAAMwS,EAAE,MAAMg4G,KAAK,IAAIv9B,EAAE0P,GAAGtX,EAAE,GAAG,GAAG,KAAO,EAAF4H,GAAK,OAAO68B,GAAGzkC,EAAEgW,MAAK,KAAK,IAAI7kF,EAAEi0G,GAAGplC,EAAE4H,GAAG,GAAG,IAAI5H,EAAEwL,KAAK,IAAIr6E,EAAE,CAAC,IAAIo3E,EAAEsP,GAAG7X,GAAG,IAAIuI,IAAIX,EAAEW,EAAEp3E,EAAEs0G,GAAGzlC,EAAEuI,GAAG,CAAC,GAAG,IAAIp3E,EAAE,MAAMA,EAAEuyG,GAAG4B,GAAGtlC,EAAE,GAAGwkC,GAAGxkC,EAAE4H,GAAG68B,GAAGzkC,EAAEgW,MAAK7kF,EAAE,GAAG,IAAIA,EAAE,MAAMxW,MAAMwS,EAAE,MAAiF,OAA3E6yE,EAAE2lC,aAAa3lC,EAAEz1E,QAAQwqF,UAAU/U,EAAE4lC,cAAch+B,EAAEi+B,GAAG7lC,EAAE8jC,GAAGE,IAAIS,GAAGzkC,EAAEgW,MAAY,IAAI,CACvd,SAAS+vB,GAAG/lC,EAAE4H,GAAG,IAAIz2E,EAAEkiG,GAAEA,IAAG,EAAE,IAAI,OAAOrzB,EAAE4H,EAAE,CAAC,QAAY,KAAJyrB,GAAEliG,KAAUsvG,GAAGzqB,KAAI,IAAI4X,IAAIE,KAAK,CAAC,CAAC,SAASkY,GAAGhmC,GAAG,OAAOkkC,IAAI,IAAIA,GAAG14B,KAAK,KAAO,EAAF6nB,KAAM8R,KAAK,IAAIv9B,EAAEyrB,GAAEA,IAAG,EAAE,IAAIliG,EAAEoyG,GAAG7oB,WAAWnS,EAAE4P,GAAE,IAAI,GAAGorB,GAAG7oB,WAAW,KAAKvC,GAAE,EAAEnY,EAAE,OAAOA,GAAG,CAAC,QAAQmY,GAAE5P,EAAEg7B,GAAG7oB,WAAWvpF,EAAM,KAAO,GAAXkiG,GAAEzrB,KAAakmB,IAAI,CAAC,CAAC,SAAS4S,KAAKlD,GAAGD,GAAGhzG,QAAQkiG,GAAE8Q,GAAG,CAChT,SAAS+H,GAAGtlC,EAAE4H,GAAG5H,EAAE2lC,aAAa,KAAK3lC,EAAE4lC,cAAc,EAAE,IAAIz0G,EAAE6uE,EAAE8lC,cAAiD,IAAlC,IAAI30G,IAAI6uE,EAAE8lC,eAAe,EAAEza,GAAGl6F,IAAO,OAAOqyG,GAAE,IAAIryG,EAAEqyG,GAAExuB,OAAO,OAAO7jF,GAAG,CAAC,IAAIo3E,EAAEp3E,EAAQ,OAANu9F,GAAGnmB,GAAUA,EAAEiD,KAAK,KAAK,EAA6B,QAA3BjD,EAAEA,EAAEhwF,KAAK60G,yBAA4B,IAAS7kB,GAAG8kB,KAAK,MAAM,KAAK,EAAE4G,KAAKxH,GAAEI,IAAIJ,GAAEG,IAAG4H,KAAK,MAAM,KAAK,EAAEL,GAAG5rB,GAAG,MAAM,KAAK,EAAE0rB,KAAK,MAAM,KAAK,GAAc,KAAK,GAAGxH,GAAE2H,IAAG,MAAM,KAAK,GAAG7C,GAAGhpB,EAAEhwF,KAAKqzF,UAAU,MAAM,KAAK,GAAG,KAAK,GAAG80B,KAAKvvG,EAAEA,EAAE6jF,MAAM,CAAqE,GAApEgiB,GAAEh3B,EAAEwjC,GAAExjC,EAAEwwB,GAAGxwB,EAAEz1E,QAAQ,MAAMk5G,GAAEjG,GAAG51B,EAAE44B,GAAE,EAAEkD,GAAG,KAAKE,GAAGD,GAAGlQ,GAAG,EAAEqQ,GAAGD,GAAG,KAAQ,OAAO3R,GAAG,CAAC,IAAItqB,EAC1f,EAAEA,EAAEsqB,GAAG3yG,OAAOqoF,IAAI,GAA2B,QAAhBW,GAARp3E,EAAE+gG,GAAGtqB,IAAOyqB,aAAqB,CAAClhG,EAAEkhG,YAAY,KAAK,IAAIx5G,EAAE0vF,EAAEvoF,KAAKg/E,EAAE7tE,EAAE2hG,QAAQ,GAAG,OAAO9zB,EAAE,CAAC,IAAIwJ,EAAExJ,EAAEh/E,KAAKg/E,EAAEh/E,KAAKnH,EAAE0vF,EAAEvoF,KAAKwoF,CAAC,CAACr3E,EAAE2hG,QAAQvqB,CAAC,CAAC2pB,GAAG,IAAI,CAAC,OAAOlyB,CAAC,CAC3K,SAASwlC,GAAGxlC,EAAE4H,GAAG,OAAE,CAAC,IAAIz2E,EAAEqyG,GAAE,IAAuB,GAAnBlS,KAAKoD,GAAGnqG,QAAQorG,GAAMV,GAAG,CAAC,IAAI,IAAI1sB,EAAEusB,GAAE5f,cAAc,OAAO3M,GAAG,CAAC,IAAI1vF,EAAE0vF,EAAEwtB,MAAM,OAAOl9G,IAAIA,EAAEi6G,QAAQ,MAAMvqB,EAAEA,EAAEvoF,IAAI,CAACi1G,IAAG,CAAE,CAA4C,GAA3CJ,GAAG,EAAEG,GAAED,GAAED,GAAE,KAAKI,IAAG,EAAGC,GAAG,EAAEmO,GAAG/4G,QAAQ,KAAQ,OAAO4G,GAAG,OAAOA,EAAE6jF,OAAO,CAACwrB,GAAE,EAAEkD,GAAG97B,EAAE47B,GAAE,KAAK,KAAK,CAACxjC,EAAE,CAAC,IAAIhB,EAAEgB,EAAEwI,EAAEr3E,EAAE6jF,OAAO5J,EAAEj6E,EAAEowE,EAAEqG,EAAqB,GAAnBA,EAAE67B,GAAEr4B,EAAE5H,OAAO,MAAS,OAAOjC,GAAG,kBAAkBA,GAAG,oBAAoBA,EAAEoqB,KAAK,CAAC,IAAIxkG,EAAEo6E,EAAEI,EAAEyJ,EAAEylB,EAAElvB,EAAE6J,IAAI,GAAG,KAAY,EAAP7J,EAAE6tB,QAAU,IAAIqB,GAAG,KAAKA,GAAG,KAAKA,GAAG,CAAC,IAAIC,EAAEnvB,EAAEoT,UAAU+b,GAAGnvB,EAAE8wB,YAAY3B,EAAE2B,YAAY9wB,EAAEuT,cAAc4b,EAAE5b,cACxevT,EAAEkwB,MAAMf,EAAEe,QAAQlwB,EAAE8wB,YAAY,KAAK9wB,EAAEuT,cAAc,KAAK,CAAC,IAAI6b,EAAEyL,GAAGh0B,GAAG,GAAG,OAAOuoB,EAAE,CAACA,EAAEvtB,QAAQ,IAAIi5B,GAAG1L,EAAEvoB,EAAE4C,EAAEpM,EAAE4I,GAAU,EAAPmpB,EAAEvB,MAAQ6M,GAAGr9B,EAAE73E,EAAEygF,GAAOrG,EAAEp6E,EAAE,IAAI/G,GAAZwnF,EAAEmpB,GAAc0B,YAAY,GAAG,OAAOryG,EAAE,CAAC,IAAImN,EAAE,IAAIzL,IAAIyL,EAAEtL,IAAIs/E,GAAGqG,EAAE6qB,YAAYllG,CAAC,MAAMnN,EAAE6B,IAAIs/E,GAAG,MAAMvB,CAAC,CAAM,GAAG,KAAO,EAAF4H,GAAK,CAACy0B,GAAGr9B,EAAE73E,EAAEygF,GAAGo3B,KAAK,MAAMh/B,CAAC,CAACuB,EAAE5mF,MAAMwS,EAAE,KAAM,MAAM,GAAG0hG,IAAU,EAAPzjB,EAAEokB,KAAO,CAAC,IAAI/F,EAAE+S,GAAGh0B,GAAG,GAAG,OAAOihB,EAAE,CAAC,KAAa,MAARA,EAAEjmB,SAAeimB,EAAEjmB,OAAO,KAAKi5B,GAAGhT,EAAEjhB,EAAE4C,EAAEpM,EAAE4I,GAAGkoB,GAAG0L,GAAGj6B,EAAE6J,IAAI,MAAMpL,CAAC,CAAC,CAAChB,EAAEuC,EAAEi6B,GAAGj6B,EAAE6J,GAAG,IAAIo1B,KAAIA,GAAE,GAAG,OAAOqD,GAAGA,GAAG,CAAC7kC,GAAG6kC,GAAGxpH,KAAK2kF,GAAGA,EAAEwJ,EAAE,EAAE,CAAC,OAAOxJ,EAAEwM,KAAK,KAAK,EAAExM,EAAEwE,OAAO,MACpfoE,IAAIA,EAAE5I,EAAE6yB,OAAOjqB,EAAkB2rB,GAAGv0B,EAAb88B,GAAG98B,EAAEuC,EAAEqG,IAAW,MAAM5H,EAAE,KAAK,EAAEoL,EAAE7J,EAAE,IAAIqoB,EAAE5qB,EAAEzmF,KAAKoxG,EAAE3qB,EAAEyU,UAAU,GAAG,KAAa,IAARzU,EAAEwE,SAAa,oBAAoBomB,EAAEqS,0BAA0B,OAAOtS,GAAG,oBAAoBA,EAAEuS,oBAAoB,OAAOC,KAAKA,GAAGv6G,IAAI+nG,KAAK,CAAC3qB,EAAEwE,OAAO,MAAMoE,IAAIA,EAAE5I,EAAE6yB,OAAOjqB,EAAkB2rB,GAAGv0B,EAAbg9B,GAAGh9B,EAAEoM,EAAExD,IAAW,MAAM5H,CAAC,EAAEhB,EAAEA,EAAEgW,MAAM,OAAO,OAAOhW,EAAE,CAACinC,GAAG90G,EAAE,CAAC,MAAMg5F,GAAIviB,EAAEuiB,EAAGqZ,KAAIryG,GAAG,OAAOA,IAAIqyG,GAAEryG,EAAEA,EAAE6jF,QAAQ,QAAQ,CAAC,KAAK,CAAS,CAAC,SAASqwB,KAAK,IAAIrlC,EAAEqjC,GAAG94G,QAAsB,OAAd84G,GAAG94G,QAAQorG,GAAU,OAAO31B,EAAE21B,GAAG31B,CAAC,CACrd,SAASg/B,KAAQ,IAAIwB,IAAG,IAAIA,IAAG,IAAIA,KAAEA,GAAE,GAAE,OAAOxJ,IAAG,KAAQ,UAAHvD,KAAe,KAAQ,UAAHkQ,KAAea,GAAGxN,GAAEyM,GAAE,CAAC,SAAS2B,GAAGplC,EAAE4H,GAAG,IAAIz2E,EAAEkiG,GAAEA,IAAG,EAAE,IAAI9qB,EAAE88B,KAAqC,IAA7BrO,KAAIh3B,GAAGyjC,KAAI77B,IAAEo8B,GAAG,KAAKsB,GAAGtlC,EAAE4H,UAAUs+B,KAAK,KAAK,CAAC,MAAMrtH,GAAG2sH,GAAGxlC,EAAEnnF,EAAE,CAAgC,GAAtBy4G,KAAK+B,GAAEliG,EAAEkyG,GAAG94G,QAAQg+E,EAAK,OAAOi7B,GAAE,MAAM7oH,MAAMwS,EAAE,MAAiB,OAAX6pG,GAAE,KAAKyM,GAAE,EAASjD,EAAC,CAAC,SAAS0F,KAAK,KAAK,OAAO1C,IAAG2C,GAAG3C,GAAE,CAAC,SAAS+B,KAAK,KAAK,OAAO/B,KAAI5tB,MAAMuwB,GAAG3C,GAAE,CAAC,SAAS2C,GAAGnmC,GAAG,IAAI4H,EAAEs7B,GAAGljC,EAAE+U,UAAU/U,EAAEw9B,IAAIx9B,EAAE2vB,cAAc3vB,EAAEmvB,aAAa,OAAOvnB,EAAEq+B,GAAGjmC,GAAGwjC,GAAE57B,EAAE07B,GAAG/4G,QAAQ,IAAI,CAC1d,SAAS07G,GAAGjmC,GAAG,IAAI4H,EAAE5H,EAAE,EAAE,CAAC,IAAI7uE,EAAEy2E,EAAEmN,UAAqB,GAAX/U,EAAE4H,EAAEoN,OAAU,KAAa,MAARpN,EAAEpE,QAAc,GAAgB,QAAbryE,EAAE6uG,GAAG7uG,EAAEy2E,EAAE41B,KAAkB,YAAJgG,GAAEryG,OAAc,CAAW,GAAG,QAAbA,EAAEwvG,GAAGxvG,EAAEy2E,IAAmC,OAAnBz2E,EAAEqyE,OAAO,WAAMggC,GAAEryG,GAAS,GAAG,OAAO6uE,EAAmE,OAAXwgC,GAAE,OAAEgD,GAAE,MAA5DxjC,EAAEwD,OAAO,MAAMxD,EAAEo/B,aAAa,EAAEp/B,EAAEivB,UAAU,IAA4B,CAAa,GAAG,QAAfrnB,EAAEA,EAAE0N,SAAyB,YAAJkuB,GAAE57B,GAAS47B,GAAE57B,EAAE5H,CAAC,OAAO,OAAO4H,GAAG,IAAI44B,KAAIA,GAAE,EAAE,CAAC,SAASqF,GAAG7lC,EAAE4H,EAAEz2E,GAAG,IAAIo3E,EAAE4P,GAAEt/F,EAAE0qH,GAAG7oB,WAAW,IAAI6oB,GAAG7oB,WAAW,KAAKvC,GAAE,EAC3Y,SAAYnY,EAAE4H,EAAEz2E,EAAEo3E,GAAG,GAAG48B,WAAW,OAAOjB,IAAI,GAAG,KAAO,EAAF7Q,IAAK,MAAM14G,MAAMwS,EAAE,MAAMgE,EAAE6uE,EAAE2lC,aAAa,IAAI9sH,EAAEmnF,EAAE4lC,cAAc,GAAG,OAAOz0G,EAAE,OAAO,KAA2C,GAAtC6uE,EAAE2lC,aAAa,KAAK3lC,EAAE4lC,cAAc,EAAKz0G,IAAI6uE,EAAEz1E,QAAQ,MAAM5P,MAAMwS,EAAE,MAAM6yE,EAAE0kC,aAAa,KAAK1kC,EAAE8kC,iBAAiB,EAAE,IAAI9lC,EAAE7tE,EAAE0gG,MAAM1gG,EAAEugG,WAA8J,GAzNtT,SAAY1xB,EAAE4H,GAAG,IAAIz2E,EAAE6uE,EAAEuX,cAAc3P,EAAE5H,EAAEuX,aAAa3P,EAAE5H,EAAEwX,eAAe,EAAExX,EAAEyX,YAAY,EAAEzX,EAAE4kC,cAAch9B,EAAE5H,EAAEomC,kBAAkBx+B,EAAE5H,EAAE0X,gBAAgB9P,EAAEA,EAAE5H,EAAE2X,cAAc,IAAIpP,EAAEvI,EAAEiY,WAAW,IAAIjY,EAAEA,EAAE2kC,gBAAgB,EAAExzG,GAAG,CAAC,IAAItY,EAAE,GAAG+L,GAAGuM,GAAG6tE,EAAE,GAAGnmF,EAAE+uF,EAAE/uF,GAAG,EAAE0vF,EAAE1vF,IAAI,EAAEmnF,EAAEnnF,IAAI,EAAEsY,IAAI6tE,CAAC,CAAC,CAyN5GqnC,CAAGrmC,EAAEhB,GAAGgB,IAAIg3B,KAAIwM,GAAExM,GAAE,KAAKyM,GAAE,GAAG,KAAoB,KAAftyG,EAAEiuG,eAAoB,KAAa,KAARjuG,EAAEqyE,QAAaygC,KAAKA,IAAG,EAAGgB,GAAGzuB,IAAG,WAAgB,OAAL2uB,KAAY,IAAI,KAAInmC,EAAE,KAAa,MAAR7tE,EAAEqyE,OAAgB,KAAoB,MAAfryE,EAAEiuG,eAAqBpgC,EAAE,CAACA,EAAEukC,GAAG7oB,WAAW6oB,GAAG7oB,WAAW,KAChf,IAAIlS,EAAE2P,GAAEA,GAAE,EAAE,IAAI/M,EAAEioB,GAAEA,IAAG,EAAEiQ,GAAG/4G,QAAQ,KA1CpC,SAAYy1E,EAAE4H,GAAgB,GAAbojB,GAAGx6E,GAAak1E,GAAV1lB,EAAEslB,MAAc,CAAC,GAAG,mBAAmBtlB,EAAE,IAAI7uE,EAAE,CAAC5J,MAAMy4E,EAAE+lB,eAAenlB,IAAIZ,EAAEgmB,mBAAmBhmB,EAAE,CAA8C,IAAIuI,GAAjDp3E,GAAGA,EAAE6uE,EAAE/vE,gBAAgBkB,EAAE+0F,aAAa9uG,QAAe+uG,cAAch1F,EAAEg1F,eAAe,GAAG5d,GAAG,IAAIA,EAAE8d,WAAW,CAACl1F,EAAEo3E,EAAE+d,WAAW,IAAIztG,EAAE0vF,EAAEge,aAAavnB,EAAEuJ,EAAEie,UAAUje,EAAEA,EAAEke,YAAY,IAAIt1F,EAAEiB,SAAS4sE,EAAE5sE,QAAQ,CAAC,MAAMy3F,GAAG14F,EAAE,KAAK,MAAM6uE,CAAC,CAAC,IAAIwI,EAAE,EAAE4C,GAAG,EAAE7J,GAAG,EAAEp6E,EAAE,EAAEw6E,EAAE,EAAEkvB,EAAE7wB,EAAE8wB,EAAE,KAAKlpB,EAAE,OAAO,CAAC,IAAI,IAAImpB,EAAKF,IAAI1/F,GAAG,IAAItY,GAAG,IAAIg4G,EAAEz+F,WAAWg5E,EAAE5C,EAAE3vF,GAAGg4G,IAAI7xB,GAAG,IAAIuJ,GAAG,IAAIsoB,EAAEz+F,WAAWmvE,EAAEiH,EAAED,GAAG,IAAIsoB,EAAEz+F,WAAWo2E,GACnfqoB,EAAEzmG,UAAU7K,QAAW,QAAQwxG,EAAEF,EAAEv/F,aAAkBw/F,EAAED,EAAEA,EAAEE,EAAE,OAAO,CAAC,GAAGF,IAAI7wB,EAAE,MAAM4H,EAA8C,GAA5CkpB,IAAI3/F,KAAKhK,IAAItO,IAAIuyF,EAAE5C,GAAGsoB,IAAI9xB,KAAK2C,IAAI4G,IAAIhH,EAAEiH,GAAM,QAAQuoB,EAAEF,EAAEt/F,aAAa,MAAUu/F,GAAJD,EAAEC,GAAMrmG,UAAU,CAAComG,EAAEE,CAAC,CAAC5/F,GAAG,IAAIi6E,IAAI,IAAI7J,EAAE,KAAK,CAACh6E,MAAM6jF,EAAExK,IAAIW,EAAE,MAAMpwE,EAAE,IAAI,CAACA,EAAEA,GAAG,CAAC5J,MAAM,EAAEq5E,IAAI,EAAE,MAAMzvE,EAAE,KAA+C,IAA1C85F,GAAG,CAACpF,YAAY7lB,EAAE8lB,eAAe30F,GAAGqf,IAAG,EAAOwwF,GAAEp5B,EAAE,OAAOo5B,IAAG,GAAOhhC,GAAJ4H,EAAEo5B,IAAMlvG,MAAM,KAAoB,KAAf81E,EAAEw3B,eAAoB,OAAOp/B,EAAEA,EAAEgV,OAAOpN,EAAEo5B,GAAEhhC,OAAO,KAAK,OAAOghC,IAAG,CAACp5B,EAAEo5B,GAAE,IAAI,IAAI5gH,EAAEwnF,EAAEmN,UAAU,GAAG,KAAa,KAARnN,EAAEpE,OAAY,OAAOoE,EAAE4D,KAAK,KAAK,EAAE,KAAK,GAAG,KAAK,GACvK,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,GAAG,MAA3W,KAAK,EAAE,GAAG,OAAOprF,EAAE,CAAC,IAAImN,EAAEnN,EAAEuvG,cAAclG,EAAErpG,EAAE80F,cAAcwU,EAAE9hB,EAAE6L,UAAUmW,EAAEF,EAAE0R,wBAAwBxzB,EAAEX,cAAcW,EAAErvF,KAAKgV,EAAEwsG,GAAGnyB,EAAErvF,KAAKgV,GAAGk8F,GAAGC,EAAEuZ,oCAAoCrZ,CAAC,CAAC,MAAM,KAAK,EAAE,IAAID,EAAE/hB,EAAE6L,UAAUqG,cAAc,IAAI6P,EAAEv3F,SAASu3F,EAAEtb,YAAY,GAAG,IAAIsb,EAAEv3F,UAAUu3F,EAAE7tG,iBAAiB6tG,EAAEp2F,YAAYo2F,EAAE7tG,iBAAiB,MAAyC,QAAQ,MAAMnB,MAAMwS,EAAE,MAAO,CAAC,MAAM08F,GAAGqX,GAAEt5B,EAAEA,EAAEoN,OAAO6U,EAAE,CAAa,GAAG,QAAf7pB,EAAE4H,EAAE0N,SAAoB,CAACtV,EAAEgV,OAAOpN,EAAEoN,OAAOgsB,GAAEhhC,EAAE,KAAK,CAACghC,GAAEp5B,EAAEoN,MAAM,CAAC50F,EAAEghH,GAAGA,IAAG,CAAW,CAwCldkF,CAAGtmC,EAAE7uE,GAAGoxG,GAAGpxG,EAAE6uE,GAAG4lB,GAAGqF,IAAIz6E,KAAKw6E,GAAGC,GAAGD,GAAG,KAAKhrB,EAAEz1E,QAAQ4G,EAAE0xG,GAAG1xG,EAAE6uE,EAAEnnF,GAAGi9F,KAAKud,GAAEjoB,EAAE+M,GAAE3P,EAAE+6B,GAAG7oB,WAAW1b,CAAC,MAAMgB,EAAEz1E,QAAQ4G,EAAsF,GAApF8yG,KAAKA,IAAG,EAAGC,GAAGlkC,EAAEmkC,GAAGtrH,GAAGmmF,EAAEgB,EAAEuX,aAAa,IAAIvY,IAAIm9B,GAAG,MAhOmJ,SAAYn8B,GAAG,GAAG8W,IAAI,oBAAoBA,GAAGyvB,kBAAkB,IAAIzvB,GAAGyvB,kBAAkB1vB,GAAG7W,OAAE,EAAO,OAAuB,IAAhBA,EAAEz1E,QAAQi5E,OAAW,CAAC,MAAMoE,GAAG,CAAC,CAgOxR4+B,CAAGr1G,EAAEsiF,WAAagxB,GAAGzkC,EAAEgW,MAAQ,OAAOpO,EAAE,IAAIW,EAAEvI,EAAEymC,mBAAmBt1G,EAAE,EAAEA,EAAEy2E,EAAEroF,OAAO4R,IAAItY,EAAE+uF,EAAEz2E,GAAGo3E,EAAE1vF,EAAEL,MAAM,CAAC4jH,eAAevjH,EAAEiyF,MAAM2wB,OAAO5iH,EAAE4iH,SAAS,GAAGM,GAAG,MAAMA,IAAG,EAAG/7B,EAAEruB,GAAGA,GAAG,KAAKquB,EAAE,KAAQ,EAAHmkC,KAAO,IAAInkC,EAAEwL,KAAK25B,KAAKnmC,EAAEgB,EAAEuX,aAAa,KAAO,EAAFvY,GAAKgB,IAAIqkC,GAAGD,MAAMA,GAAG,EAAEC,GAAGrkC,GAAGokC,GAAG,EAAEtW,IAAgB,CAFxF4Y,CAAG1mC,EAAE4H,EAAEz2E,EAAEo3E,EAAE,CAAC,QAAQg7B,GAAG7oB,WAAW7hG,EAAEs/F,GAAE5P,CAAC,CAAC,OAAO,IAAI,CAGhc,SAAS48B,KAAK,GAAG,OAAOjB,GAAG,CAAC,IAAIlkC,EAAEoY,GAAG+rB,IAAIv8B,EAAE27B,GAAG7oB,WAAWvpF,EAAEgnF,GAAE,IAAmC,GAA/BorB,GAAG7oB,WAAW,KAAKvC,GAAE,GAAGnY,EAAE,GAAGA,EAAK,OAAOkkC,GAAG,IAAI37B,GAAE,MAAO,CAAmB,GAAlBvI,EAAEkkC,GAAGA,GAAG,KAAKC,GAAG,EAAK,KAAO,EAAF9Q,IAAK,MAAM14G,MAAMwS,EAAE,MAAM,IAAItU,EAAEw6G,GAAO,IAALA,IAAG,EAAM2N,GAAEhhC,EAAEz1E,QAAQ,OAAOy2G,IAAG,CAAC,IAAIhiC,EAAEgiC,GAAEx4B,EAAExJ,EAAEltE,MAAM,GAAG,KAAa,GAARkvG,GAAEx9B,OAAU,CAAC,IAAI4H,EAAEpM,EAAEiwB,UAAU,GAAG,OAAO7jB,EAAE,CAAC,IAAI,IAAI7J,EAAE,EAAEA,EAAE6J,EAAE7rF,OAAOgiF,IAAI,CAAC,IAAIp6E,EAAEikF,EAAE7J,GAAG,IAAIy/B,GAAE75G,EAAE,OAAO65G,IAAG,CAAC,IAAIr/B,EAAEq/B,GAAE,OAAOr/B,EAAE6J,KAAK,KAAK,EAAE,KAAK,GAAG,KAAK,GAAG61B,GAAG,EAAE1/B,EAAE3C,GAAG,IAAI6xB,EAAElvB,EAAE7vE,MAAM,GAAG,OAAO++F,EAAEA,EAAE7b,OAAOrT,EAAEq/B,GAAEnQ,OAAO,KAAK,OAAOmQ,IAAG,CAAK,IAAIlQ,GAARnvB,EAAEq/B,IAAU1rB,QAAQyb,EAAEpvB,EAAEqT,OAAa,GAANwsB,GAAG7/B,GAAMA,IACnfx6E,EAAE,CAAC65G,GAAE,KAAK,KAAK,CAAC,GAAG,OAAOlQ,EAAE,CAACA,EAAE9b,OAAO+b,EAAEiQ,GAAElQ,EAAE,KAAK,CAACkQ,GAAEjQ,CAAC,CAAC,CAAC,CAAC,IAAI3wG,EAAE4+E,EAAE+V,UAAU,GAAG,OAAO30F,EAAE,CAAC,IAAImN,EAAEnN,EAAE0R,MAAM,GAAG,OAAOvE,EAAE,CAACnN,EAAE0R,MAAM,KAAK,EAAE,CAAC,IAAI23F,EAAEl8F,EAAE+nF,QAAQ/nF,EAAE+nF,QAAQ,KAAK/nF,EAAEk8F,CAAC,OAAO,OAAOl8F,EAAE,CAAC,CAACyzG,GAAEhiC,CAAC,CAAC,CAAC,GAAG,KAAoB,KAAfA,EAAEogC,eAAoB,OAAO52B,EAAEA,EAAEwM,OAAOhW,EAAEgiC,GAAEx4B,OAAOZ,EAAE,KAAK,OAAOo5B,IAAG,CAAK,GAAG,KAAa,MAApBhiC,EAAEgiC,IAAYx9B,OAAY,OAAOxE,EAAEwM,KAAK,KAAK,EAAE,KAAK,GAAG,KAAK,GAAG61B,GAAG,EAAEriC,EAAEA,EAAEgW,QAAQ,IAAI0U,EAAE1qB,EAAEsW,QAAQ,GAAG,OAAOoU,EAAE,CAACA,EAAE1U,OAAOhW,EAAEgW,OAAOgsB,GAAEtX,EAAE,MAAM9hB,CAAC,CAACo5B,GAAEhiC,EAAEgW,MAAM,CAAC,CAAC,IAAI4U,EAAE5pB,EAAEz1E,QAAQ,IAAIy2G,GAAEpX,EAAE,OAAOoX,IAAG,CAAK,IAAIrX,GAARnhB,EAAEw4B,IAAUlvG,MAAM,GAAG,KAAoB,KAAf02E,EAAE42B,eAAoB,OAClfzV,EAAEA,EAAE3U,OAAOxM,EAAEw4B,GAAErX,OAAO/hB,EAAE,IAAIY,EAAEohB,EAAE,OAAOoX,IAAG,CAAK,GAAG,KAAa,MAApB51B,EAAE41B,IAAYx9B,OAAY,IAAI,OAAO4H,EAAEI,KAAK,KAAK,EAAE,KAAK,GAAG,KAAK,GAAG81B,GAAG,EAAEl2B,GAAG,CAAC,MAAM+e,GAAI+W,GAAE91B,EAAEA,EAAE4J,OAAOmV,EAAG,CAAC,GAAG/e,IAAI5C,EAAE,CAACw4B,GAAE,KAAK,MAAMp5B,CAAC,CAAC,IAAIiiB,EAAEze,EAAEkK,QAAQ,GAAG,OAAOuU,EAAE,CAACA,EAAE7U,OAAO5J,EAAE4J,OAAOgsB,GAAEnX,EAAE,MAAMjiB,CAAC,CAACo5B,GAAE51B,EAAE4J,MAAM,CAAC,CAAU,GAATqe,GAAEx6G,EAAEi1G,KAAQhX,IAAI,oBAAoBA,GAAG6vB,sBAAsB,IAAI7vB,GAAG6vB,sBAAsB9vB,GAAG7W,EAAE,CAAC,MAAMmqB,GAAI,CAAC5hB,GAAE,CAAE,CAAC,OAAOA,CAAC,CAAC,QAAQ4P,GAAEhnF,EAAEoyG,GAAG7oB,WAAW9S,CAAC,CAAC,CAAC,OAAM,CAAE,CAAC,SAASg/B,GAAG5mC,EAAE4H,EAAEz2E,GAAyB6uE,EAAEozB,GAAGpzB,EAAjB4H,EAAEk0B,GAAG97B,EAAf4H,EAAE4zB,GAAGrqG,EAAEy2E,GAAY,GAAY,GAAGA,EAAE8wB,KAAI,OAAO14B,IAAIgY,GAAGhY,EAAE,EAAE4H,GAAG68B,GAAGzkC,EAAE4H,GAAG,CACze,SAASs5B,GAAElhC,EAAE4H,EAAEz2E,GAAG,GAAG,IAAI6uE,EAAEwL,IAAIo7B,GAAG5mC,EAAEA,EAAE7uE,QAAQ,KAAK,OAAOy2E,GAAG,CAAC,GAAG,IAAIA,EAAE4D,IAAI,CAACo7B,GAAGh/B,EAAE5H,EAAE7uE,GAAG,KAAK,CAAM,GAAG,IAAIy2E,EAAE4D,IAAI,CAAC,IAAIjD,EAAEX,EAAE6L,UAAU,GAAG,oBAAoB7L,EAAErvF,KAAK0jH,0BAA0B,oBAAoB1zB,EAAE2zB,oBAAoB,OAAOC,KAAKA,GAAGv6G,IAAI2mF,IAAI,CAAuBX,EAAEwrB,GAAGxrB,EAAjB5H,EAAEg8B,GAAGp0B,EAAf5H,EAAEw7B,GAAGrqG,EAAE6uE,GAAY,GAAY,GAAGA,EAAE04B,KAAI,OAAO9wB,IAAIoQ,GAAGpQ,EAAE,EAAE5H,GAAGykC,GAAG78B,EAAE5H,IAAI,KAAK,CAAC,CAAC4H,EAAEA,EAAEoN,MAAM,CAAC,CACnV,SAASunB,GAAGv8B,EAAE4H,EAAEz2E,GAAG,IAAIo3E,EAAEvI,EAAEs8B,UAAU,OAAO/zB,GAAGA,EAAEpmF,OAAOylF,GAAGA,EAAE8wB,KAAI14B,EAAEyX,aAAazX,EAAEwX,eAAermF,EAAE6lG,KAAIh3B,IAAIyjC,GAAEtyG,KAAKA,IAAI,IAAIqvG,IAAG,IAAIA,KAAM,UAAFiD,MAAeA,IAAG,IAAIztB,KAAI0sB,GAAG4C,GAAGtlC,EAAE,GAAG4jC,IAAIzyG,GAAGszG,GAAGzkC,EAAE4H,EAAE,CAAC,SAASi/B,GAAG7mC,EAAE4H,GAAG,IAAIA,IAAI,KAAY,EAAP5H,EAAEwvB,MAAQ5nB,EAAE,GAAGA,EAAE/nB,GAAU,KAAQ,WAAfA,KAAK,MAAuBA,GAAG,WAAW,IAAI1uD,EAAEunG,KAAc,QAAV14B,EAAEsyB,GAAGtyB,EAAE4H,MAAcoQ,GAAGhY,EAAE4H,EAAEz2E,GAAGszG,GAAGzkC,EAAE7uE,GAAG,CAAC,SAAS8tG,GAAGj/B,GAAG,IAAI4H,EAAE5H,EAAEkV,cAAc/jF,EAAE,EAAE,OAAOy2E,IAAIz2E,EAAEy2E,EAAE0nB,WAAWuX,GAAG7mC,EAAE7uE,EAAE,CACjZ,SAASkxG,GAAGriC,EAAE4H,GAAG,IAAIz2E,EAAE,EAAE,OAAO6uE,EAAEwL,KAAK,KAAK,GAAG,IAAIjD,EAAEvI,EAAEyT,UAAc56F,EAAEmnF,EAAEkV,cAAc,OAAOr8F,IAAIsY,EAAEtY,EAAEy2G,WAAW,MAAM,KAAK,GAAG/mB,EAAEvI,EAAEyT,UAAU,MAAM,QAAQ,MAAM94F,MAAMwS,EAAE,MAAO,OAAOo7E,GAAGA,EAAEpmF,OAAOylF,GAAGi/B,GAAG7mC,EAAE7uE,EAAE,CAQqK,SAAS8zG,GAAGjlC,EAAE4H,GAAG,OAAO9hF,GAAGk6E,EAAE4H,EAAE,CACjZ,SAASk/B,GAAG9mC,EAAE4H,EAAEz2E,EAAEo3E,GAAGrnF,KAAKsqF,IAAIxL,EAAE9+E,KAAKjH,IAAIkX,EAAEjQ,KAAKo0F,QAAQp0F,KAAK4Q,MAAM5Q,KAAK8zF,OAAO9zF,KAAKuyF,UAAUvyF,KAAK3I,KAAK2I,KAAK+lF,YAAY,KAAK/lF,KAAKnH,MAAM,EAAEmH,KAAK+uG,IAAI,KAAK/uG,KAAKiuG,aAAavnB,EAAE1mF,KAAKywG,aAAazwG,KAAKg0F,cAAch0F,KAAKuxG,YAAYvxG,KAAKyuG,cAAc,KAAKzuG,KAAKsuG,KAAKjnB,EAAErnF,KAAKk+G,aAAal+G,KAAKsiF,MAAM,EAAEtiF,KAAK+tG,UAAU,KAAK/tG,KAAKwwG,WAAWxwG,KAAK2wG,MAAM,EAAE3wG,KAAK6zF,UAAU,IAAI,CAAC,SAASia,GAAGhvB,EAAE4H,EAAEz2E,EAAEo3E,GAAG,OAAO,IAAIu+B,GAAG9mC,EAAE4H,EAAEz2E,EAAEo3E,EAAE,CAAC,SAASw0B,GAAG/8B,GAAiB,UAAdA,EAAEA,EAAE1/E,aAAuB0/E,EAAE+mC,iBAAiB,CAEpd,SAASvW,GAAGxwB,EAAE4H,GAAG,IAAIz2E,EAAE6uE,EAAE+U,UACuB,OADb,OAAO5jF,IAAGA,EAAE69F,GAAGhvB,EAAEwL,IAAI5D,EAAE5H,EAAE/lF,IAAI+lF,EAAEwvB,OAAQvoB,YAAYjH,EAAEiH,YAAY91E,EAAE5Y,KAAKynF,EAAEznF,KAAK4Y,EAAEsiF,UAAUzT,EAAEyT,UAAUtiF,EAAE4jF,UAAU/U,EAAEA,EAAE+U,UAAU5jF,IAAIA,EAAEg+F,aAAavnB,EAAEz2E,EAAE5Y,KAAKynF,EAAEznF,KAAK4Y,EAAEqyE,MAAM,EAAEryE,EAAEiuG,aAAa,EAAEjuG,EAAE89F,UAAU,MAAM99F,EAAEqyE,MAAc,SAARxD,EAAEwD,MAAeryE,EAAEugG,WAAW1xB,EAAE0xB,WAAWvgG,EAAE0gG,MAAM7xB,EAAE6xB,MAAM1gG,EAAEW,MAAMkuE,EAAEluE,MAAMX,EAAEw+F,cAAc3vB,EAAE2vB,cAAcx+F,EAAE+jF,cAAclV,EAAEkV,cAAc/jF,EAAEshG,YAAYzyB,EAAEyyB,YAAY7qB,EAAE5H,EAAE2xB,aAAaxgG,EAAEwgG,aAAa,OAAO/pB,EAAE,KAAK,CAACiqB,MAAMjqB,EAAEiqB,MAAMD,aAAahqB,EAAEgqB,cAC/ezgG,EAAEmkF,QAAQtV,EAAEsV,QAAQnkF,EAAEpX,MAAMimF,EAAEjmF,MAAMoX,EAAE8+F,IAAIjwB,EAAEiwB,IAAW9+F,CAAC,CACxD,SAASu/F,GAAG1wB,EAAE4H,EAAEz2E,EAAEo3E,EAAE1vF,EAAEmmF,GAAG,IAAIwJ,EAAE,EAAM,GAAJD,EAAEvI,EAAK,oBAAoBA,EAAE+8B,GAAG/8B,KAAKwI,EAAE,QAAQ,GAAG,kBAAkBxI,EAAEwI,EAAE,OAAOxI,EAAE,OAAOA,GAAG,KAAK8J,EAAG,OAAO8mB,GAAGz/F,EAAE88E,SAASp1F,EAAEmmF,EAAE4I,GAAG,KAAKmC,EAAGvB,EAAE,EAAE3vF,GAAG,EAAE,MAAM,KAAKmxF,EAAG,OAAOhK,EAAEgvB,GAAG,GAAG79F,EAAEy2E,EAAI,EAAF/uF,IAAOouF,YAAY+C,EAAGhK,EAAE6xB,MAAM7yB,EAAEgB,EAAE,KAAKoK,EAAG,OAAOpK,EAAEgvB,GAAG,GAAG79F,EAAEy2E,EAAE/uF,IAAKouF,YAAYmD,EAAGpK,EAAE6xB,MAAM7yB,EAAEgB,EAAE,KAAKqK,EAAG,OAAOrK,EAAEgvB,GAAG,GAAG79F,EAAEy2E,EAAE/uF,IAAKouF,YAAYoD,EAAGrK,EAAE6xB,MAAM7yB,EAAEgB,EAAE,KAAKwK,EAAG,OAAOm0B,GAAGxtG,EAAEtY,EAAEmmF,EAAE4I,GAAG,QAAQ,GAAG,kBAAkB5H,GAAG,OAAOA,EAAE,OAAOA,EAAE2L,UAAU,KAAK1B,EAAGzB,EAAE,GAAG,MAAMxI,EAAE,KAAKkK,EAAG1B,EAAE,EAAE,MAAMxI,EAAE,KAAKmK,EAAG3B,EAAE,GACpf,MAAMxI,EAAE,KAAKsK,EAAG9B,EAAE,GAAG,MAAMxI,EAAE,KAAKuK,EAAG/B,EAAE,GAAGD,EAAE,KAAK,MAAMvI,EAAE,MAAMrlF,MAAMwS,EAAE,IAAI,MAAM6yE,EAAEA,SAASA,EAAE,KAAuD,OAAjD4H,EAAEonB,GAAGxmB,EAAEr3E,EAAEy2E,EAAE/uF,IAAKouF,YAAYjH,EAAE4H,EAAErvF,KAAKgwF,EAAEX,EAAEiqB,MAAM7yB,EAAS4I,CAAC,CAAC,SAASgpB,GAAG5wB,EAAE4H,EAAEz2E,EAAEo3E,GAA2B,OAAxBvI,EAAEgvB,GAAG,EAAEhvB,EAAEuI,EAAEX,IAAKiqB,MAAM1gG,EAAS6uE,CAAC,CAAC,SAAS2+B,GAAG3+B,EAAE4H,EAAEz2E,EAAEo3E,GAAuE,OAApEvI,EAAEgvB,GAAG,GAAGhvB,EAAEuI,EAAEX,IAAKX,YAAYuD,EAAGxK,EAAE6xB,MAAM1gG,EAAE6uE,EAAEyT,UAAU,CAACgvB,UAAS,GAAWziC,CAAC,CAAC,SAASywB,GAAGzwB,EAAE4H,EAAEz2E,GAA8B,OAA3B6uE,EAAEgvB,GAAG,EAAEhvB,EAAE,KAAK4H,IAAKiqB,MAAM1gG,EAAS6uE,CAAC,CAC5W,SAAS2wB,GAAG3wB,EAAE4H,EAAEz2E,GAA8J,OAA3Jy2E,EAAEonB,GAAG,EAAE,OAAOhvB,EAAEiO,SAASjO,EAAEiO,SAAS,GAAGjO,EAAE/lF,IAAI2tF,IAAKiqB,MAAM1gG,EAAEy2E,EAAE6L,UAAU,CAACqG,cAAc9Z,EAAE8Z,cAAcktB,gBAAgB,KAAK/6G,eAAe+zE,EAAE/zE,gBAAuB27E,CAAC,CACtL,SAASq/B,GAAGjnC,EAAE4H,EAAEz2E,EAAEo3E,EAAE1vF,GAAGqI,KAAKsqF,IAAI5D,EAAE1mF,KAAK44F,cAAc9Z,EAAE9+E,KAAKykH,aAAazkH,KAAKo7G,UAAUp7G,KAAKqJ,QAAQrJ,KAAK8lH,gBAAgB,KAAK9lH,KAAK4kH,eAAe,EAAE5kH,KAAKwjH,aAAaxjH,KAAK+8G,eAAe/8G,KAAK8wG,QAAQ,KAAK9wG,KAAK4jH,iBAAiB,EAAE5jH,KAAK+2F,WAAWF,GAAG,GAAG72F,KAAKyjH,gBAAgB5sB,IAAI,GAAG72F,KAAKw2F,eAAex2F,KAAK0kH,cAAc1kH,KAAKklH,iBAAiBllH,KAAK0jH,aAAa1jH,KAAKu2F,YAAYv2F,KAAKs2F,eAAet2F,KAAKq2F,aAAa,EAAEr2F,KAAKy2F,cAAcI,GAAG,GAAG72F,KAAK44G,iBAAiBvxB,EAAErnF,KAAKulH,mBAAmB5tH,EAAEqI,KAAKgmH,gCAC/e,IAAI,CAAC,SAASC,GAAGnnC,EAAE4H,EAAEz2E,EAAEo3E,EAAE1vF,EAAEmmF,EAAEwJ,EAAE4C,EAAE7J,GAAgN,OAA7MvB,EAAE,IAAIinC,GAAGjnC,EAAE4H,EAAEz2E,EAAEi6E,EAAE7J,GAAG,IAAIqG,GAAGA,EAAE,GAAE,IAAK5I,IAAI4I,GAAG,IAAIA,EAAE,EAAE5I,EAAEgwB,GAAG,EAAE,KAAK,KAAKpnB,GAAG5H,EAAEz1E,QAAQy0E,EAAEA,EAAEyU,UAAUzT,EAAEhB,EAAEkW,cAAc,CAACvoF,QAAQ47E,EAAEsR,aAAa1oF,EAAEi2G,MAAM,KAAK9J,YAAY,KAAK+J,0BAA0B,MAAM7U,GAAGxzB,GAAUgB,CAAC,CACzP,SAASsnC,GAAGtnC,GAAG,IAAIA,EAAE,OAAO2sB,GAAuB3sB,EAAE,CAAC,GAAG8U,GAA1B9U,EAAEA,EAAEo6B,mBAA8Bp6B,GAAG,IAAIA,EAAEwL,IAAI,MAAM7wF,MAAMwS,EAAE,MAAM,IAAIy6E,EAAE5H,EAAE,EAAE,CAAC,OAAO4H,EAAE4D,KAAK,KAAK,EAAE5D,EAAEA,EAAE6L,UAAUue,QAAQ,MAAMhyB,EAAE,KAAK,EAAE,GAAGmtB,GAAGvlB,EAAErvF,MAAM,CAACqvF,EAAEA,EAAE6L,UAAUia,0CAA0C,MAAM1tB,CAAC,EAAE4H,EAAEA,EAAEoN,MAAM,OAAO,OAAOpN,GAAG,MAAMjtF,MAAMwS,EAAE,KAAM,CAAC,GAAG,IAAI6yE,EAAEwL,IAAI,CAAC,IAAIr6E,EAAE6uE,EAAEznF,KAAK,GAAG40G,GAAGh8F,GAAG,OAAOo8F,GAAGvtB,EAAE7uE,EAAEy2E,EAAE,CAAC,OAAOA,CAAC,CACpW,SAASh+E,GAAGo2E,EAAE4H,EAAEz2E,EAAEo3E,EAAE1vF,EAAEmmF,EAAEwJ,EAAE4C,EAAE7J,GAAwK,OAArKvB,EAAEmnC,GAAGh2G,EAAEo3E,GAAE,EAAGvI,EAAEnnF,EAAEmmF,EAAEwJ,EAAE4C,EAAE7J,IAAKywB,QAAQsV,GAAG,MAAMn2G,EAAE6uE,EAAEz1E,SAAsBy0E,EAAEi0B,GAAhB1qB,EAAEmwB,KAAI7/G,EAAE0/G,GAAGpnG,KAAe3Z,cAAS,IAASowF,GAAG,OAAOA,EAAEA,EAAE,KAAKwrB,GAAGjiG,EAAE6tE,EAAEnmF,GAAGmnF,EAAEz1E,QAAQsnG,MAAMh5G,EAAEm/F,GAAGhY,EAAEnnF,EAAE0vF,GAAGk8B,GAAGzkC,EAAEuI,GAAUvI,CAAC,CAAC,SAASunC,GAAGvnC,EAAE4H,EAAEz2E,EAAEo3E,GAAG,IAAI1vF,EAAE+uF,EAAEr9E,QAAQy0E,EAAE05B,KAAIlwB,EAAE+vB,GAAG1/G,GAAsL,OAAnLsY,EAAEm2G,GAAGn2G,GAAG,OAAOy2E,EAAEoqB,QAAQpqB,EAAEoqB,QAAQ7gG,EAAEy2E,EAAEq2B,eAAe9sG,GAAEy2E,EAAEqrB,GAAGj0B,EAAEwJ,IAAKhmF,QAAQ,CAACmK,QAAQqzE,GAAuB,QAApBuI,OAAE,IAASA,EAAE,KAAKA,KAAaX,EAAEpwF,SAAS+wF,GAAe,QAAZvI,EAAEozB,GAAGv6G,EAAE+uF,EAAEY,MAAc8uB,GAAGt3B,EAAEnnF,EAAE2vF,EAAExJ,GAAGs0B,GAAGtzB,EAAEnnF,EAAE2vF,IAAWA,CAAC,CAC3b,SAASpnD,GAAG4+C,GAAe,OAAZA,EAAEA,EAAEz1E,SAAcuH,OAAyBkuE,EAAEluE,MAAM05E,IAAoDxL,EAAEluE,MAAM2hF,WAAhF,IAA0F,CAAC,SAAS+zB,GAAGxnC,EAAE4H,GAAqB,GAAG,QAArB5H,EAAEA,EAAEkV,gBAA2B,OAAOlV,EAAEmV,WAAW,CAAC,IAAIhkF,EAAE6uE,EAAEsvB,UAAUtvB,EAAEsvB,UAAU,IAAIn+F,GAAGA,EAAEy2E,EAAEz2E,EAAEy2E,CAAC,CAAC,CAAC,SAAS6/B,GAAGznC,EAAE4H,GAAG4/B,GAAGxnC,EAAE4H,IAAI5H,EAAEA,EAAE+U,YAAYyyB,GAAGxnC,EAAE4H,EAAE,CAnB7Ss7B,GAAG,SAASljC,EAAE4H,EAAEz2E,GAAG,GAAG,OAAO6uE,EAAE,GAAGA,EAAE2vB,gBAAgB/nB,EAAEunB,cAActC,GAAGtiG,QAAQunG,IAAG,MAAO,CAAC,GAAG,KAAK9xB,EAAE6xB,MAAM1gG,IAAI,KAAa,IAARy2E,EAAEpE,OAAW,OAAOsuB,IAAG,EAzE1I,SAAY9xB,EAAE4H,EAAEz2E,GAAG,OAAOy2E,EAAE4D,KAAK,KAAK,EAAEwyB,GAAGp2B,GAAGioB,KAAK,MAAM,KAAK,EAAEqE,GAAGtsB,GAAG,MAAM,KAAK,EAAEulB,GAAGvlB,EAAErvF,OAAOk1G,GAAG7lB,GAAG,MAAM,KAAK,EAAEosB,GAAGpsB,EAAEA,EAAE6L,UAAUqG,eAAe,MAAM,KAAK,GAAG,IAAIvR,EAAEX,EAAErvF,KAAKqzF,SAAS/yF,EAAE+uF,EAAE+nB,cAAcn3G,MAAMk0G,GAAEwE,GAAG3oB,EAAEipB,eAAejpB,EAAEipB,cAAc34G,EAAE,MAAM,KAAK,GAAqB,GAAG,QAArB0vF,EAAEX,EAAEsN,eAA2B,OAAG,OAAO3M,EAAE4M,YAAkBuX,GAAE0H,GAAY,EAAVA,GAAE7pG,SAAWq9E,EAAEpE,OAAO,IAAI,MAAQ,KAAKryE,EAAEy2E,EAAE91E,MAAM4/F,YAAmB+M,GAAGz+B,EAAE4H,EAAEz2E,IAAGu7F,GAAE0H,GAAY,EAAVA,GAAE7pG,SAA8B,QAAnBy1E,EAAE68B,GAAG78B,EAAE4H,EAAEz2E,IAAmB6uE,EAAEsV,QAAQ,MAAKoX,GAAE0H,GAAY,EAAVA,GAAE7pG,SAAW,MAAM,KAAK,GAC7d,GADgeg+E,EAAE,KAAKp3E,EACrfy2E,EAAE8pB,YAAe,KAAa,IAAR1xB,EAAEwD,OAAW,CAAC,GAAG+E,EAAE,OAAOs3B,GAAG7/B,EAAE4H,EAAEz2E,GAAGy2E,EAAEpE,OAAO,GAAG,CAA6F,GAA1E,QAAlB3qF,EAAE+uF,EAAEsN,iBAAyBr8F,EAAE2mH,UAAU,KAAK3mH,EAAE8mH,KAAK,KAAK9mH,EAAEq+G,WAAW,MAAMxK,GAAE0H,GAAEA,GAAE7pG,SAAYg+E,EAAE,MAAW,OAAO,KAAK,KAAK,GAAG,KAAK,GAAG,OAAOX,EAAEiqB,MAAM,EAAEsL,GAAGn9B,EAAE4H,EAAEz2E,GAAG,OAAO0rG,GAAG78B,EAAE4H,EAAEz2E,EAAE,CAwE7Gu2G,CAAG1nC,EAAE4H,EAAEz2E,GAAG2gG,GAAG,KAAa,OAAR9xB,EAAEwD,MAAmB,MAAMsuB,IAAG,EAAGjD,IAAG,KAAa,QAARjnB,EAAEpE,QAAgBgrB,GAAG5mB,EAAEqmB,GAAGrmB,EAAE7tF,OAAiB,OAAV6tF,EAAEiqB,MAAM,EAASjqB,EAAE4D,KAAK,KAAK,EAAE,IAAIjD,EAAEX,EAAErvF,KAAKolH,GAAG39B,EAAE4H,GAAG5H,EAAE4H,EAAEunB,aAAa,IAAIt2G,EAAEk0G,GAAGnlB,EAAEglB,GAAEriG,SAASU,GAAG28E,EAAEz2E,GAAGtY,EAAE08G,GAAG,KAAK3tB,EAAEW,EAAEvI,EAAEnnF,EAAEsY,GAAG,IAAI6tE,EAAE42B,KACvI,OAD4IhuB,EAAEpE,OAAO,EAAE,kBAAkB3qF,GAAG,OAAOA,GAAG,oBAAoBA,EAAE4yF,aAAQ,IAAS5yF,EAAE8yF,UAAU/D,EAAE4D,IAAI,EAAE5D,EAAEsN,cAAc,KAAKtN,EAAE6qB,YAC1e,KAAKtF,GAAG5kB,IAAIvJ,GAAE,EAAGyuB,GAAG7lB,IAAI5I,GAAE,EAAG4I,EAAEsN,cAAc,OAAOr8F,EAAEgiH,YAAO,IAAShiH,EAAEgiH,MAAMhiH,EAAEgiH,MAAM,KAAKrI,GAAG5qB,GAAG/uF,EAAEiiH,QAAQZ,GAAGtyB,EAAE6L,UAAU56F,EAAEA,EAAEuhH,gBAAgBxyB,EAAEszB,GAAGtzB,EAAEW,EAAEvI,EAAE7uE,GAAGy2E,EAAEm2B,GAAG,KAAKn2B,EAAEW,GAAE,EAAGvJ,EAAE7tE,KAAKy2E,EAAE4D,IAAI,EAAEqjB,IAAG7vB,GAAGyvB,GAAG7mB,GAAGjN,GAAG,KAAKiN,EAAE/uF,EAAEsY,GAAGy2E,EAAEA,EAAE91E,OAAc81E,EAAE,KAAK,GAAGW,EAAEX,EAAEX,YAAYjH,EAAE,CAAqF,OAApF29B,GAAG39B,EAAE4H,GAAG5H,EAAE4H,EAAEunB,aAAuB5mB,GAAV1vF,EAAE0vF,EAAEuD,OAAUvD,EAAEsD,UAAUjE,EAAErvF,KAAKgwF,EAAE1vF,EAAE+uF,EAAE4D,IAQtU,SAAYxL,GAAG,GAAG,oBAAoBA,EAAE,OAAO+8B,GAAG/8B,GAAG,EAAE,EAAE,QAAG,IAASA,GAAG,OAAOA,EAAE,CAAc,IAAbA,EAAEA,EAAE2L,YAAgBxB,EAAG,OAAO,GAAG,GAAGnK,IAAIsK,EAAG,OAAO,EAAE,CAAC,OAAO,CAAC,CAR2Lq9B,CAAGp/B,GAAGvI,EAAE+5B,GAAGxxB,EAAEvI,GAAUnnF,GAAG,KAAK,EAAE+uF,EAAEs1B,GAAG,KAAKt1B,EAAEW,EAAEvI,EAAE7uE,GAAG,MAAM6uE,EAAE,KAAK,EAAE4H,EAAE81B,GAAG,KAAK91B,EAAEW,EAAEvI,EAAE7uE,GAAG,MAAM6uE,EAAE,KAAK,GAAG4H,EAAEg1B,GAAG,KAAKh1B,EAAEW,EAAEvI,EAAE7uE,GAAG,MAAM6uE,EAAE,KAAK,GAAG4H,EAAEk1B,GAAG,KAAKl1B,EAAEW,EAAEwxB,GAAGxxB,EAAEhwF,KAAKynF,GAAG7uE,GAAG,MAAM6uE,EAAE,MAAMrlF,MAAMwS,EAAE,IACvgBo7E,EAAE,IAAK,CAAC,OAAOX,EAAE,KAAK,EAAE,OAAOW,EAAEX,EAAErvF,KAAKM,EAAE+uF,EAAEunB,aAA2C+N,GAAGl9B,EAAE4H,EAAEW,EAArC1vF,EAAE+uF,EAAEX,cAAcsB,EAAE1vF,EAAEkhH,GAAGxxB,EAAE1vF,GAAcsY,GAAG,KAAK,EAAE,OAAOo3E,EAAEX,EAAErvF,KAAKM,EAAE+uF,EAAEunB,aAA2CuO,GAAG19B,EAAE4H,EAAEW,EAArC1vF,EAAE+uF,EAAEX,cAAcsB,EAAE1vF,EAAEkhH,GAAGxxB,EAAE1vF,GAAcsY,GAAG,KAAK,EAAE6uE,EAAE,CAAO,GAANg+B,GAAGp2B,GAAM,OAAO5H,EAAE,MAAMrlF,MAAMwS,EAAE,MAAMo7E,EAAEX,EAAEunB,aAA+Bt2G,GAAlBmmF,EAAE4I,EAAEsN,eAAkBvoF,QAAQqmG,GAAGhzB,EAAE4H,GAAG4rB,GAAG5rB,EAAEW,EAAE,KAAKp3E,GAAG,IAAIq3E,EAAEZ,EAAEsN,cAA0B,GAAZ3M,EAAEC,EAAE77E,QAAWqyE,EAAE6a,aAAY,CAAC,GAAG7a,EAAE,CAACryE,QAAQ47E,EAAEsR,cAAa,EAAGutB,MAAM5+B,EAAE4+B,MAAMC,0BAA0B7+B,EAAE6+B,0BAA0B/J,YAAY90B,EAAE80B,aAAa11B,EAAE6qB,YAAYC,UAChf1zB,EAAE4I,EAAEsN,cAAclW,EAAU,IAAR4I,EAAEpE,MAAU,CAAuBoE,EAAEs2B,GAAGl+B,EAAE4H,EAAEW,EAAEp3E,EAAjCtY,EAAE2iH,GAAG7gH,MAAMwS,EAAE,MAAMy6E,IAAmB,MAAM5H,CAAC,CAAM,GAAGuI,IAAI1vF,EAAE,CAAuB+uF,EAAEs2B,GAAGl+B,EAAE4H,EAAEW,EAAEp3E,EAAjCtY,EAAE2iH,GAAG7gH,MAAMwS,EAAE,MAAMy6E,IAAmB,MAAM5H,CAAC,CAAM,IAAI4uB,GAAG7C,GAAGnkB,EAAE6L,UAAUqG,cAAcxoF,YAAYq9F,GAAG/mB,EAAEinB,IAAE,EAAGC,GAAG,KAAK39F,EAAE8/F,GAAGrpB,EAAE,KAAKW,EAAEp3E,GAAGy2E,EAAE91E,MAAMX,EAAEA,GAAGA,EAAEqyE,OAAe,EAATryE,EAAEqyE,MAAS,KAAKryE,EAAEA,EAAEmkF,OAAQ,KAAI,CAAM,GAALua,KAAQtnB,IAAI1vF,EAAE,CAAC+uF,EAAEi1B,GAAG78B,EAAE4H,EAAEz2E,GAAG,MAAM6uE,CAAC,CAACrF,GAAGqF,EAAE4H,EAAEW,EAAEp3E,EAAE,CAACy2E,EAAEA,EAAE91E,KAAK,CAAC,OAAO81E,EAAE,KAAK,EAAE,OAAOssB,GAAGtsB,GAAG,OAAO5H,GAAGyvB,GAAG7nB,GAAGW,EAAEX,EAAErvF,KAAKM,EAAE+uF,EAAEunB,aAAanwB,EAAE,OAAOgB,EAAEA,EAAE2vB,cAAc,KAAKnnB,EAAE3vF,EAAEo1F,SAASid,GAAG3iB,EAAE1vF,GAAG2vF,EAAE,KAAK,OAAOxJ,GAAGksB,GAAG3iB,EAAEvJ,KAAK4I,EAAEpE,OAAO,IACnfi6B,GAAGz9B,EAAE4H,GAAGjN,GAAGqF,EAAE4H,EAAEY,EAAEr3E,GAAGy2E,EAAE91E,MAAM,KAAK,EAAE,OAAO,OAAOkuE,GAAGyvB,GAAG7nB,GAAG,KAAK,KAAK,GAAG,OAAO62B,GAAGz+B,EAAE4H,EAAEz2E,GAAG,KAAK,EAAE,OAAO6iG,GAAGpsB,EAAEA,EAAE6L,UAAUqG,eAAevR,EAAEX,EAAEunB,aAAa,OAAOnvB,EAAE4H,EAAE91E,MAAMk/F,GAAGppB,EAAE,KAAKW,EAAEp3E,GAAGwpE,GAAGqF,EAAE4H,EAAEW,EAAEp3E,GAAGy2E,EAAE91E,MAAM,KAAK,GAAG,OAAOy2E,EAAEX,EAAErvF,KAAKM,EAAE+uF,EAAEunB,aAA2CyN,GAAG58B,EAAE4H,EAAEW,EAArC1vF,EAAE+uF,EAAEX,cAAcsB,EAAE1vF,EAAEkhH,GAAGxxB,EAAE1vF,GAAcsY,GAAG,KAAK,EAAE,OAAOwpE,GAAGqF,EAAE4H,EAAEA,EAAEunB,aAAah+F,GAAGy2E,EAAE91E,MAAM,KAAK,EAAmD,KAAK,GAAG,OAAO6oE,GAAGqF,EAAE4H,EAAEA,EAAEunB,aAAalhB,SAAS98E,GAAGy2E,EAAE91E,MAAM,KAAK,GAAGkuE,EAAE,CACxZ,GADyZuI,EAAEX,EAAErvF,KAAKqzF,SAAS/yF,EAAE+uF,EAAEunB,aAAanwB,EAAE4I,EAAE+nB,cAClfnnB,EAAE3vF,EAAEL,MAAMk0G,GAAEwE,GAAG3oB,EAAEipB,eAAejpB,EAAEipB,cAAchpB,EAAK,OAAOxJ,EAAE,GAAG+lB,GAAG/lB,EAAExmF,MAAMgwF,IAAI,GAAGxJ,EAAEiP,WAAWp1F,EAAEo1F,WAAW4e,GAAGtiG,QAAQ,CAACq9E,EAAEi1B,GAAG78B,EAAE4H,EAAEz2E,GAAG,MAAM6uE,CAAC,OAAO,IAAc,QAAVhB,EAAE4I,EAAE91E,SAAiBktE,EAAEgW,OAAOpN,GAAG,OAAO5I,GAAG,CAAC,IAAIoM,EAAEpM,EAAE2yB,aAAa,GAAG,OAAOvmB,EAAE,CAAC5C,EAAExJ,EAAEltE,MAAM,IAAI,IAAIyvE,EAAE6J,EAAEwmB,aAAa,OAAOrwB,GAAG,CAAC,GAAGA,EAAEywB,UAAUzpB,EAAE,CAAC,GAAG,IAAIvJ,EAAEwM,IAAI,EAACjK,EAAE0xB,IAAI,EAAE9hG,GAAGA,IAAKq6E,IAAI,EAAE,IAAIrkF,EAAE63E,EAAEyzB,YAAY,GAAG,OAAOtrG,EAAE,CAAY,IAAIw6E,GAAfx6E,EAAEA,EAAE0rG,QAAeC,QAAQ,OAAOnxB,EAAEJ,EAAEvhF,KAAKuhF,GAAGA,EAAEvhF,KAAK2hF,EAAE3hF,KAAK2hF,EAAE3hF,KAAKuhF,GAAGp6E,EAAE2rG,QAAQvxB,CAAC,CAAC,CAACvC,EAAE6yB,OAAO1gG,EAAgB,QAAdowE,EAAEvC,EAAE+V,aAAqBxT,EAAEswB,OAAO1gG,GAAGsgG,GAAGzyB,EAAEgW,OAClf7jF,EAAEy2E,GAAGwD,EAAEymB,OAAO1gG,EAAE,KAAK,CAACowE,EAAEA,EAAEvhF,IAAI,CAAC,MAAM,GAAG,KAAKg/E,EAAEwM,IAAIhD,EAAExJ,EAAEzmF,OAAOqvF,EAAErvF,KAAK,KAAKymF,EAAEltE,WAAW,GAAG,KAAKktE,EAAEwM,IAAI,CAAY,GAAG,QAAdhD,EAAExJ,EAAEgW,QAAmB,MAAMr6F,MAAMwS,EAAE,MAAMq7E,EAAEqpB,OAAO1gG,EAAgB,QAAdi6E,EAAE5C,EAAEuM,aAAqB3J,EAAEymB,OAAO1gG,GAAGsgG,GAAGjpB,EAAEr3E,EAAEy2E,GAAGY,EAAExJ,EAAEsW,OAAO,MAAM9M,EAAExJ,EAAEltE,MAAM,GAAG,OAAO02E,EAAEA,EAAEwM,OAAOhW,OAAO,IAAIwJ,EAAExJ,EAAE,OAAOwJ,GAAG,CAAC,GAAGA,IAAIZ,EAAE,CAACY,EAAE,KAAK,KAAK,CAAa,GAAG,QAAfxJ,EAAEwJ,EAAE8M,SAAoB,CAACtW,EAAEgW,OAAOxM,EAAEwM,OAAOxM,EAAExJ,EAAE,KAAK,CAACwJ,EAAEA,EAAEwM,MAAM,CAAChW,EAAEwJ,CAAC,CAAC7N,GAAGqF,EAAE4H,EAAE/uF,EAAEo1F,SAAS98E,GAAGy2E,EAAEA,EAAE91E,KAAK,CAAC,OAAO81E,EAAE,KAAK,EAAE,OAAO/uF,EAAE+uF,EAAErvF,KAAKgwF,EAAEX,EAAEunB,aAAalhB,SAAShjF,GAAG28E,EAAEz2E,GAAWo3E,EAAEA,EAAV1vF,EAAEk5G,GAAGl5G,IAAU+uF,EAAEpE,OAAO,EAAE7I,GAAGqF,EAAE4H,EAAEW,EAAEp3E,GACpfy2E,EAAE91E,MAAM,KAAK,GAAG,OAAgBjZ,EAAEkhH,GAAXxxB,EAAEX,EAAErvF,KAAYqvF,EAAEunB,cAA6B2N,GAAG98B,EAAE4H,EAAEW,EAAtB1vF,EAAEkhH,GAAGxxB,EAAEhwF,KAAKM,GAAcsY,GAAG,KAAK,GAAG,OAAO8rG,GAAGj9B,EAAE4H,EAAEA,EAAErvF,KAAKqvF,EAAEunB,aAAah+F,GAAG,KAAK,GAAG,OAAOo3E,EAAEX,EAAErvF,KAAKM,EAAE+uF,EAAEunB,aAAat2G,EAAE+uF,EAAEX,cAAcsB,EAAE1vF,EAAEkhH,GAAGxxB,EAAE1vF,GAAG8kH,GAAG39B,EAAE4H,GAAGA,EAAE4D,IAAI,EAAE2hB,GAAG5kB,IAAIvI,GAAE,EAAGytB,GAAG7lB,IAAI5H,GAAE,EAAG/0E,GAAG28E,EAAEz2E,GAAGwpG,GAAG/yB,EAAEW,EAAE1vF,GAAGqiH,GAAGtzB,EAAEW,EAAE1vF,EAAEsY,GAAG4sG,GAAG,KAAKn2B,EAAEW,GAAE,EAAGvI,EAAE7uE,GAAG,KAAK,GAAG,OAAO0uG,GAAG7/B,EAAE4H,EAAEz2E,GAAG,KAAK,GAAG,OAAOgsG,GAAGn9B,EAAE4H,EAAEz2E,GAAG,MAAMxW,MAAMwS,EAAE,IAAIy6E,EAAE4D,KAAM,EAYxC,IAAIo8B,GAAG,oBAAoBC,YAAYA,YAAY,SAAS7nC,GAAG1zE,QAAQnD,MAAM62E,EAAE,EAAE,SAAShrC,GAAGgrC,GAAG9+E,KAAK4mH,cAAc9nC,CAAC,CACjI,SAAS+nC,GAAG/nC,GAAG9+E,KAAK4mH,cAAc9nC,CAAC,CAC5J,SAASgoC,GAAGhoC,GAAG,SAASA,GAAG,IAAIA,EAAE5tE,UAAU,IAAI4tE,EAAE5tE,UAAU,KAAK4tE,EAAE5tE,SAAS,CAAC,SAAS61G,GAAGjoC,GAAG,SAASA,GAAG,IAAIA,EAAE5tE,UAAU,IAAI4tE,EAAE5tE,UAAU,KAAK4tE,EAAE5tE,WAAW,IAAI4tE,EAAE5tE,UAAU,iCAAiC4tE,EAAE51E,WAAW,CAAC,SAASwO,KAAK,CAExa,SAASsvG,GAAGloC,EAAE4H,EAAEz2E,EAAEo3E,EAAE1vF,GAAG,IAAImmF,EAAE7tE,EAAEywG,oBAAoB,GAAG5iC,EAAE,CAAC,IAAIwJ,EAAExJ,EAAE,GAAG,oBAAoBnmF,EAAE,CAAC,IAAIuyF,EAAEvyF,EAAEA,EAAE,WAAW,IAAImnF,EAAE5+C,GAAGonD,GAAG4C,EAAErrF,KAAKigF,EAAE,CAAC,CAACunC,GAAG3/B,EAAEY,EAAExI,EAAEnnF,EAAE,MAAM2vF,EADxJ,SAAYxI,EAAE4H,EAAEz2E,EAAEo3E,EAAE1vF,GAAG,GAAGA,EAAE,CAAC,GAAG,oBAAoB0vF,EAAE,CAAC,IAAIvJ,EAAEuJ,EAAEA,EAAE,WAAW,IAAIvI,EAAE5+C,GAAGonD,GAAGxJ,EAAEj/E,KAAKigF,EAAE,CAAC,CAAC,IAAIwI,EAAE5+E,GAAGg+E,EAAEW,EAAEvI,EAAE,EAAE,MAAK,EAAG,EAAG,GAAGpnE,IAAmF,OAA/EonE,EAAE4hC,oBAAoBp5B,EAAExI,EAAE+pB,IAAIvhB,EAAEj+E,QAAQ++F,GAAG,IAAItpB,EAAE5tE,SAAS4tE,EAAEv1E,WAAWu1E,GAAGgmC,KAAYx9B,CAAC,CAAC,KAAK3vF,EAAEmnF,EAAE9tE,WAAW8tE,EAAEzsE,YAAY1a,GAAG,GAAG,oBAAoB0vF,EAAE,CAAC,IAAI6C,EAAE7C,EAAEA,EAAE,WAAW,IAAIvI,EAAE5+C,GAAGmgD,GAAG6J,EAAErrF,KAAKigF,EAAE,CAAC,CAAC,IAAIuB,EAAE4lC,GAAGnnC,EAAE,GAAE,EAAG,KAAK,GAAK,EAAG,EAAG,GAAGpnE,IAA0G,OAAtGonE,EAAE4hC,oBAAoBrgC,EAAEvB,EAAE+pB,IAAIxoB,EAAEh3E,QAAQ++F,GAAG,IAAItpB,EAAE5tE,SAAS4tE,EAAEv1E,WAAWu1E,GAAGgmC,IAAG,WAAWuB,GAAG3/B,EAAErG,EAAEpwE,EAAEo3E,EAAE,IAAUhH,CAAC,CACpU4mC,CAAGh3G,EAAEy2E,EAAE5H,EAAEnnF,EAAE0vF,GAAG,OAAOnnD,GAAGonD,EAAE,CAHpLu/B,GAAGznH,UAAUmrF,OAAOz2C,GAAG10C,UAAUmrF,OAAO,SAASzL,GAAG,IAAI4H,EAAE1mF,KAAK4mH,cAAc,GAAG,OAAOlgC,EAAE,MAAMjtF,MAAMwS,EAAE,MAAMo6G,GAAGvnC,EAAE4H,EAAE,KAAK,KAAK,EAAEmgC,GAAGznH,UAAU8nH,QAAQpzE,GAAG10C,UAAU8nH,QAAQ,WAAW,IAAIpoC,EAAE9+E,KAAK4mH,cAAc,GAAG,OAAO9nC,EAAE,CAAC9+E,KAAK4mH,cAAc,KAAK,IAAIlgC,EAAE5H,EAAE8Z,cAAcksB,IAAG,WAAWuB,GAAG,KAAKvnC,EAAE,KAAK,KAAK,IAAG4H,EAAEmiB,IAAI,IAAI,CAAC,EACzTge,GAAGznH,UAAU+nH,2BAA2B,SAASroC,GAAG,GAAGA,EAAE,CAAC,IAAI4H,EAAE4Q,KAAKxY,EAAE,CAACsZ,UAAU,KAAK7zF,OAAOu6E,EAAE4Z,SAAShS,GAAG,IAAI,IAAIz2E,EAAE,EAAEA,EAAE8nF,GAAG15F,QAAQ,IAAIqoF,GAAGA,EAAEqR,GAAG9nF,GAAGyoF,SAASzoF,KAAK8nF,GAAGqvB,OAAOn3G,EAAE,EAAE6uE,GAAG,IAAI7uE,GAAGuoF,GAAG1Z,EAAE,CAAC,EAEXqY,GAAG,SAASrY,GAAG,OAAOA,EAAEwL,KAAK,KAAK,EAAE,IAAI5D,EAAE5H,EAAEyT,UAAU,GAAG7L,EAAEr9E,QAAQ2qF,cAAc2E,aAAa,CAAC,IAAI1oF,EAAEkmF,GAAGzP,EAAE2P,cAAc,IAAIpmF,IAAI+mF,GAAGtQ,EAAI,EAAFz2E,GAAKszG,GAAG78B,EAAEoO,MAAK,KAAO,EAAFqd,MAAOoN,GAAGzqB,KAAI,IAAI8X,MAAM,CAAC,MAAM,KAAK,GAAGkY,IAAG,WAAW,IAAIp+B,EAAE0qB,GAAGtyB,EAAE,GAAG,GAAG,OAAO4H,EAAE,CAAC,IAAIz2E,EAAEunG,KAAIpB,GAAG1vB,EAAE5H,EAAE,EAAE7uE,EAAE,CAAC,IAAGs2G,GAAGznC,EAAE,GAAG,EAC/bsY,GAAG,SAAStY,GAAG,GAAG,KAAKA,EAAEwL,IAAI,CAAC,IAAI5D,EAAE0qB,GAAGtyB,EAAE,WAAW,GAAG,OAAO4H,EAAa0vB,GAAG1vB,EAAE5H,EAAE,UAAX04B,MAAwB+O,GAAGznC,EAAE,UAAU,CAAC,EAAEuY,GAAG,SAASvY,GAAG,GAAG,KAAKA,EAAEwL,IAAI,CAAC,IAAI5D,EAAE2wB,GAAGv4B,GAAG7uE,EAAEmhG,GAAGtyB,EAAE4H,GAAG,GAAG,OAAOz2E,EAAammG,GAAGnmG,EAAE6uE,EAAE4H,EAAX8wB,MAAgB+O,GAAGznC,EAAE4H,EAAE,CAAC,EAAE4Q,GAAG,WAAW,OAAOL,EAAC,EAAEM,GAAG,SAASzY,EAAE4H,GAAG,IAAIz2E,EAAEgnF,GAAE,IAAI,OAAOA,GAAEnY,EAAE4H,GAAG,CAAC,QAAQuQ,GAAEhnF,CAAC,CAAC,EAClSiiF,GAAG,SAASpT,EAAE4H,EAAEz2E,GAAG,OAAOy2E,GAAG,IAAK,QAAyB,GAAjB2F,EAAGvN,EAAE7uE,GAAGy2E,EAAEz2E,EAAE1Q,KAAQ,UAAU0Q,EAAE5Y,MAAM,MAAMqvF,EAAE,CAAC,IAAIz2E,EAAE6uE,EAAE7uE,EAAE1G,YAAY0G,EAAEA,EAAE1G,WAAsF,IAA3E0G,EAAEA,EAAEo3G,iBAAiB,cAAcrsH,KAAK8B,UAAU,GAAG4pF,GAAG,mBAAuBA,EAAE,EAAEA,EAAEz2E,EAAE5R,OAAOqoF,IAAI,CAAC,IAAIW,EAAEp3E,EAAEy2E,GAAG,GAAGW,IAAIvI,GAAGuI,EAAEigC,OAAOxoC,EAAEwoC,KAAK,CAAC,IAAI3vH,EAAE66F,GAAGnL,GAAG,IAAI1vF,EAAE,MAAM8B,MAAMwS,EAAE,KAAKu/E,EAAGnE,GAAGgF,EAAGhF,EAAE1vF,EAAE,CAAC,CAAC,CAAC,MAAM,IAAK,WAAWs1F,GAAGnO,EAAE7uE,GAAG,MAAM,IAAK,SAAmB,OAAVy2E,EAAEz2E,EAAE3Y,QAAem1F,GAAG3N,IAAI7uE,EAAEgvG,SAASv4B,GAAE,GAAI,EAAEiM,GAAGkyB,GAAGjyB,GAAGkyB,GACpa,IAAIyC,GAAG,CAACC,uBAAsB,EAAGC,OAAO,CAACn1B,GAAGwQ,GAAGtQ,GAAGC,GAAGC,GAAGmyB,KAAK6C,GAAG,CAACC,wBAAwBlvB,GAAGmvB,WAAW,EAAEjyG,QAAQ,SAASkyG,oBAAoB,aAC1IC,GAAG,CAACF,WAAWF,GAAGE,WAAWjyG,QAAQ+xG,GAAG/xG,QAAQkyG,oBAAoBH,GAAGG,oBAAoBE,eAAeL,GAAGK,eAAeC,kBAAkB,KAAKC,4BAA4B,KAAKC,4BAA4B,KAAKC,cAAc,KAAKC,wBAAwB,KAAKC,wBAAwB,KAAKC,gBAAgB,KAAKC,mBAAmB,KAAKC,eAAe,KAAKC,qBAAqBlgC,EAAGkrB,uBAAuBiV,wBAAwB,SAAS5pC,GAAW,OAAO,QAAfA,EAAEqV,GAAGrV,IAAmB,KAAKA,EAAEyT,SAAS,EAAEo1B,wBAAwBD,GAAGC,yBARjN,WAAc,OAAO,IAAI,EASpUgB,4BAA4B,KAAKC,gBAAgB,KAAKC,aAAa,KAAKC,kBAAkB,KAAKC,gBAAgB,KAAKC,kBAAkB,mCAAmC,GAAG,qBAAqBC,+BAA+B,CAAC,IAAIC,GAAGD,+BAA+B,IAAIC,GAAGC,YAAYD,GAAGE,cAAc,IAAIzzB,GAAGuzB,GAAGG,OAAOvB,IAAIlyB,GAAGszB,EAAE,CAAC,MAAMpqC,IAAG,CAAC,CAACzoF,EAAQmyF,mDAAmD++B,GAC/YlxH,EAAQizH,aAAa,SAASxqC,EAAE4H,GAAG,IAAIz2E,EAAE,EAAEhG,UAAU5L,aAAQ,IAAS4L,UAAU,GAAGA,UAAU,GAAG,KAAK,IAAI68G,GAAGpgC,GAAG,MAAMjtF,MAAMwS,EAAE,MAAM,OAbuH,SAAY6yE,EAAE4H,EAAEz2E,GAAG,IAAIo3E,EAAE,EAAEp9E,UAAU5L,aAAQ,IAAS4L,UAAU,GAAGA,UAAU,GAAG,KAAK,MAAM,CAACwgF,SAAS9B,EAAG5vF,IAAI,MAAMsuF,EAAE,KAAK,GAAGA,EAAE0F,SAASjO,EAAE8Z,cAAclS,EAAE37E,eAAekF,EAAE,CAa1Rs5G,CAAGzqC,EAAE4H,EAAE,KAAKz2E,EAAE,EAAE5Z,EAAQmzH,WAAW,SAAS1qC,EAAE4H,GAAG,IAAIogC,GAAGhoC,GAAG,MAAMrlF,MAAMwS,EAAE,MAAM,IAAIgE,GAAE,EAAGo3E,EAAE,GAAG1vF,EAAE+uH,GAA4P,OAAzP,OAAOhgC,QAAG,IAASA,KAAI,IAAKA,EAAE+iC,sBAAsBx5G,GAAE,QAAI,IAASy2E,EAAEkyB,mBAAmBvxB,EAAEX,EAAEkyB,uBAAkB,IAASlyB,EAAE6+B,qBAAqB5tH,EAAE+uF,EAAE6+B,qBAAqB7+B,EAAEu/B,GAAGnnC,EAAE,GAAE,EAAG,KAAK,EAAK7uE,EAAE,EAAGo3E,EAAE1vF,GAAGmnF,EAAE+pB,IAAIniB,EAAEr9E,QAAQ++F,GAAG,IAAItpB,EAAE5tE,SAAS4tE,EAAEv1E,WAAWu1E,GAAU,IAAIhrC,GAAG4yC,EAAE,EACrfrwF,EAAQqzH,YAAY,SAAS5qC,GAAG,GAAG,MAAMA,EAAE,OAAO,KAAK,GAAG,IAAIA,EAAE5tE,SAAS,OAAO4tE,EAAE,IAAI4H,EAAE5H,EAAEo6B,gBAAgB,QAAG,IAASxyB,EAAE,CAAC,GAAG,oBAAoB5H,EAAEyL,OAAO,MAAM9wF,MAAMwS,EAAE,MAAiC,MAA3B6yE,EAAE3/E,OAAO0M,KAAKizE,GAAG/qE,KAAK,KAAWta,MAAMwS,EAAE,IAAI6yE,GAAI,CAAqC,OAA5BA,EAAE,QAAVA,EAAEqV,GAAGzN,IAAc,KAAK5H,EAAEyT,SAAkB,EAAEl8F,EAAQszH,UAAU,SAAS7qC,GAAG,OAAOgmC,GAAGhmC,EAAE,EAAEzoF,EAAQuzH,QAAQ,SAAS9qC,EAAE4H,EAAEz2E,GAAG,IAAI82G,GAAGrgC,GAAG,MAAMjtF,MAAMwS,EAAE,MAAM,OAAO+6G,GAAG,KAAKloC,EAAE4H,GAAE,EAAGz2E,EAAE,EAC/Y5Z,EAAQwzH,YAAY,SAAS/qC,EAAE4H,EAAEz2E,GAAG,IAAI62G,GAAGhoC,GAAG,MAAMrlF,MAAMwS,EAAE,MAAM,IAAIo7E,EAAE,MAAMp3E,GAAGA,EAAE65G,iBAAiB,KAAKnyH,GAAE,EAAGmmF,EAAE,GAAGwJ,EAAEo/B,GAAyO,GAAtO,OAAOz2G,QAAG,IAASA,KAAI,IAAKA,EAAEw5G,sBAAsB9xH,GAAE,QAAI,IAASsY,EAAE2oG,mBAAmB96B,EAAE7tE,EAAE2oG,uBAAkB,IAAS3oG,EAAEs1G,qBAAqBj+B,EAAEr3E,EAAEs1G,qBAAqB7+B,EAAEh+E,GAAGg+E,EAAE,KAAK5H,EAAE,EAAE,MAAM7uE,EAAEA,EAAE,KAAKtY,EAAE,EAAGmmF,EAAEwJ,GAAGxI,EAAE+pB,IAAIniB,EAAEr9E,QAAQ++F,GAAGtpB,GAAMuI,EAAE,IAAIvI,EAAE,EAAEA,EAAEuI,EAAEhpF,OAAOygF,IAA2BnnF,GAAhBA,GAAPsY,EAAEo3E,EAAEvI,IAAOirC,aAAgB95G,EAAE+5G,SAAS,MAAMtjC,EAAEs/B,gCAAgCt/B,EAAEs/B,gCAAgC,CAAC/1G,EAAEtY,GAAG+uF,EAAEs/B,gCAAgC7sH,KAAK8W,EACvhBtY,GAAG,OAAO,IAAIkvH,GAAGngC,EAAE,EAAErwF,EAAQk0F,OAAO,SAASzL,EAAE4H,EAAEz2E,GAAG,IAAI82G,GAAGrgC,GAAG,MAAMjtF,MAAMwS,EAAE,MAAM,OAAO+6G,GAAG,KAAKloC,EAAE4H,GAAE,EAAGz2E,EAAE,EAAE5Z,EAAQ4zH,uBAAuB,SAASnrC,GAAG,IAAIioC,GAAGjoC,GAAG,MAAMrlF,MAAMwS,EAAE,KAAK,QAAO6yE,EAAE4hC,sBAAqBoE,IAAG,WAAWkC,GAAG,KAAK,KAAKloC,GAAE,GAAG,WAAWA,EAAE4hC,oBAAoB,KAAK5hC,EAAE+pB,IAAI,IAAI,GAAE,KAAG,EAAM,EAAExyG,EAAQ6zH,wBAAwBrF,GAC/UxuH,EAAQ8zH,oCAAoC,SAASrrC,EAAE4H,EAAEz2E,EAAEo3E,GAAG,IAAI0/B,GAAG92G,GAAG,MAAMxW,MAAMwS,EAAE,MAAM,GAAG,MAAM6yE,QAAG,IAASA,EAAEo6B,gBAAgB,MAAMz/G,MAAMwS,EAAE,KAAK,OAAO+6G,GAAGloC,EAAE4H,EAAEz2E,GAAE,EAAGo3E,EAAE,EAAEhxF,EAAQsf,QAAQ,8DC/T7L,IAAI8qE,EAAItqF,EAAQ,KAEdE,EAAQmzH,WAAa/oC,EAAE+oC,WACvBnzH,EAAQwzH,YAAcppC,EAAEopC,yCCH1B,SAASO,IAEP,GAC4C,qBAAnCnB,gCAC4C,oBAA5CA,+BAA+BmB,SAcxC,IAEEnB,+BAA+BmB,SAASA,EAC1C,CAAE,MAAO5zH,GAGP4U,QAAQnD,MAAMzR,EAChB,CACF,CAKE4zH,GACAh0H,EAAOC,QAAU,EAAjBD,oBClCFA,EAAOC,QAAQ,SAASsB,GAAG,IAAI0U,EAAE,CAAC,EAAE,SAASujG,EAAE1wG,GAAG,GAAGmN,EAAEnN,GAAG,OAAOmN,EAAEnN,GAAG7I,QAAQ,IAAIyoF,EAAEzyE,EAAEnN,GAAG,CAACnB,EAAEmB,EAAE+G,GAAE,EAAG5P,QAAQ,CAAC,GAAG,OAAOsB,EAAEuH,GAAGL,KAAKigF,EAAEzoF,QAAQyoF,EAAEA,EAAEzoF,QAAQu5G,GAAG9wB,EAAE74E,GAAE,EAAG64E,EAAEzoF,OAAO,CAAC,OAAOu5G,EAAEnvB,EAAE9oF,EAAEi4G,EAAE3/F,EAAE5D,EAAEujG,EAAEvoB,EAAE,SAAS1vF,EAAE0U,EAAEnN,GAAG0wG,EAAEnxG,EAAE9G,EAAE0U,IAAIlN,OAAOka,eAAe1hB,EAAE0U,EAAE,CAAC++E,YAAW,EAAGtqF,IAAI5B,GAAG,EAAE0wG,EAAEA,EAAE,SAASj4G,GAAG,oBAAoBiH,QAAQA,OAAOyrH,aAAalrH,OAAOka,eAAe1hB,EAAEiH,OAAOyrH,YAAY,CAAC/yH,MAAM,WAAW6H,OAAOka,eAAe1hB,EAAE,aAAa,CAACL,OAAM,GAAI,EAAEs4G,EAAEvjG,EAAE,SAAS1U,EAAE0U,GAAG,GAAG,EAAEA,IAAI1U,EAAEi4G,EAAEj4G,IAAI,EAAE0U,EAAE,OAAO1U,EAAE,GAAG,EAAE0U,GAAG,iBAAiB1U,GAAGA,GAAGA,EAAE2yH,WAAW,OAAO3yH,EAAE,IAAIuH,EAAEC,OAAOm3G,OAAO,MAAM,GAAG1G,EAAEA,EAAE1wG,GAAGC,OAAOka,eAAena,EAAE,UAAU,CAACksF,YAAW,EAAG9zF,MAAMK,IAAI,EAAE0U,GAAG,iBAAiB1U,EAAE,IAAI,IAAImnF,KAAKnnF,EAAEi4G,EAAEvoB,EAAEnoF,EAAE4/E,EAAE,SAASzyE,GAAG,OAAO1U,EAAE0U,EAAE,EAAEtN,KAAK,KAAK+/E,IAAI,OAAO5/E,CAAC,EAAE0wG,EAAE1wG,EAAE,SAASvH,GAAG,IAAI0U,EAAE1U,GAAGA,EAAE2yH,WAAW,WAAW,OAAO3yH,EAAE4yH,OAAO,EAAE,WAAW,OAAO5yH,CAAC,EAAE,OAAOi4G,EAAEvoB,EAAEh7E,EAAE,IAAIA,GAAGA,CAAC,EAAEujG,EAAEnxG,EAAE,SAAS9G,EAAE0U,GAAG,OAAOlN,OAAOC,UAAUvB,eAAegB,KAAKlH,EAAE0U,EAAE,EAAEujG,EAAE3jG,EAAE,GAAG2jG,EAAEA,EAAEpxB,EAAE,EAAE,CAAn5B,CAAq5B,CAAC,SAAS7mF,EAAE0U,GAAG1U,EAAEtB,QAAQF,EAAQ,GAAQ,EAAE,SAASwB,EAAE0U,EAAEujG,GAAG,IAAI1wG,GAKh+B,WAAW,aAAa,IAAI0wG,EAAE,CAAC,EAAE/xG,eAAe,SAASihF,IAAI,IAAI,IAAInnF,EAAE,GAAG0U,EAAE,EAAEA,EAAEpC,UAAU5L,OAAOgO,IAAI,CAAC,IAAInN,EAAE+K,UAAUoC,GAAG,GAAGnN,EAAE,CAAC,IAAIT,SAASS,EAAE,GAAG,WAAWT,GAAG,WAAWA,EAAE9G,EAAEwB,KAAK+F,QAAQ,GAAGjG,MAAMC,QAAQgG,IAAIA,EAAEb,OAAO,CAAC,IAAIN,EAAE+gF,EAAEhnF,MAAM,KAAKoH,GAAGnB,GAAGpG,EAAEwB,KAAK4E,EAAE,MAAM,GAAG,WAAWU,EAAE,IAAI,IAAIgqG,KAAKvpG,EAAE0wG,EAAE/wG,KAAKK,EAAEupG,IAAIvpG,EAAEupG,IAAI9wG,EAAEwB,KAAKsvG,EAAE,CAAC,CAAC,OAAO9wG,EAAEoc,KAAK,IAAI,CAACpc,EAAEtB,SAASyoF,EAAEyrC,QAAQzrC,EAAEnnF,EAAEtB,QAAQyoF,QAAG,KAAU5/E,EAAE,WAAW,OAAO4/E,CAAC,EAAEhnF,MAAMuU,EAAE,OAAO1U,EAAEtB,QAAQ6I,EAAE,CAAlb,EAAqb,EAAE,SAASvH,EAAE0U,EAAEujG,IAAG,SAAUvjG,GAAG,IAAIujG,EAAE,aAAa1wG,EAAE,qBAAqB4/E,EAAE,aAAargF,EAAE,cAAcV,EAAEuiF,SAASmoB,EAAE,iBAAiBp8F,GAAGA,GAAGA,EAAElN,SAASA,QAAQkN,EAAE4D,EAAE,iBAAiB0xE,MAAMA,MAAMA,KAAKxiF,SAASA,QAAQwiF,KAAKnD,EAAEiqB,GAAGx4F,GAAGvI,SAAS,cAATA,GAA0BzB,EAAE9G,OAAOC,UAAUC,SAASy+E,EAAEU,EAAE5/E,OAAOyoF,EAAEvJ,EAAEA,EAAE1+E,eAAU,EAAO6M,EAAEo7E,EAAEA,EAAEhoF,cAAS,EAAO,SAAS6qF,EAAEvyF,GAAG,GAAG,iBAAiBA,EAAE,OAAOA,EAAE,GAAGk4G,EAAEl4G,GAAG,OAAOsU,EAAEA,EAAEpN,KAAKlH,GAAG,GAAG,IAAI0U,EAAE1U,EAAE,GAAG,MAAM,KAAK0U,GAAG,EAAE1U,IAAG,IAAK,KAAK0U,CAAC,CAAC,SAASo0E,EAAE9oF,GAAG,IAAI0U,SAAS1U,EAAE,QAAQA,IAAI,UAAU0U,GAAG,YAAYA,EAAE,CAAC,SAASwjG,EAAEl4G,GAAG,MAAM,iBAAiBA,GAAG,SAASA,GAAG,QAAQA,GAAG,iBAAiBA,CAAC,CAAzC,CAA2CA,IAAI,mBAAmBsO,EAAEpH,KAAKlH,EAAE,CAAC,SAAS+uF,EAAE/uF,GAAG,OAAOA,GAAGA,EAAE,SAASA,GAAG,GAAG,iBAAiBA,EAAE,OAAOA,EAAE,GAAGk4G,EAAEl4G,GAAG,OAAO6yH,IAAI,GAAG/pC,EAAE9oF,GAAG,CAAC,IAAI0U,EAAE,mBAAmB1U,EAAE81F,QAAQ91F,EAAE81F,UAAU91F,EAAEA,EAAE8oF,EAAEp0E,GAAGA,EAAE,GAAGA,CAAC,CAAC,GAAG,iBAAiB1U,EAAE,OAAO,IAAIA,EAAEA,GAAGA,EAAEA,EAAEA,EAAE4N,QAAQqqG,EAAE,IAAI,IAAInH,EAAE3pB,EAAEr/E,KAAK9H,GAAG,OAAO8wG,GAAGhqG,EAAEgB,KAAK9H,GAAGoG,EAAEpG,EAAEqB,MAAM,GAAGyvG,EAAE,EAAE,GAAGvpG,EAAEO,KAAK9H,GAAG6yH,KAAK7yH,CAAC,CAAxQ,CAA0QA,MAAM,KAAKA,KAAI,IAAK,uBAAuBA,EAAE,GAAG,EAAE,GAAGA,GAAGA,EAAEA,EAAE,EAAE,IAAIA,EAAEA,EAAE,CAAC,CAACA,EAAEtB,QAAQ,SAASsB,EAAE0U,EAAEujG,GAAG,IAAI1wG,EAAE4/E,EAAI/gF,EAAE,OAAOpG,EAAE,OAAOuH,EAAEvH,GAAG,GAAGuyF,EAAEhrF,GAAG4/E,EAAE,SAASnnF,GAAG,IAAI0U,EAAEq6E,EAAE/uF,GAAGi4G,EAAEvjG,EAAE,EAAE,OAAOA,GAAGA,EAAEujG,EAAEvjG,EAAEujG,EAAEvjG,EAAE,CAAC,CAAlD,CAAoDujG,GAAO7xG,EAAEpG,EAAE0G,OAAOygF,GAAGA,SAAI,IAAS/gF,IAAI+gF,EAAEA,GAAG/gF,EAAE+gF,EAAE/gF,GAAgB+gF,EAAEA,GAA5D,EAAiEA,EAAjE,GAAuE8wB,EAAE9wB,EAAEzyE,EAAE69E,EAAE79E,GAAG1U,EAAEqB,MAAM42G,EAAEA,EAAEvjG,EAAEhO,SAASgO,CAAC,CAAE,GAAExN,KAAKmB,KAAK4vG,EAAE,GAAG,EAAE,SAASj4G,EAAE0U,GAAG,IAAIujG,EAAEA,EAAE,WAAW,OAAO5vG,IAAI,CAAtB,GAA0B,IAAI4vG,EAAEA,GAAG,IAAIloG,SAAS,cAAb,EAA6B,CAAC,MAAM/P,GAAG,iBAAiBzB,SAAS05G,EAAE15G,OAAO,CAACyB,EAAEtB,QAAQu5G,CAAC,EAAE,SAASj4G,EAAE0U,EAAEujG,IAAG,SAAUvjG,GAAG,IAAkLtO,EAA9K6xG,EAAE,8BAA8B1wG,EAAE,iBAAiBmN,GAAGA,GAAGA,EAAElN,SAASA,QAAQkN,EAAEyyE,EAAE,iBAAiB6C,MAAMA,MAAMA,KAAKxiF,SAASA,QAAQwiF,KAAKljF,EAAES,GAAG4/E,GAAGp3E,SAAS,cAATA,GAAgC+gG,EAAExvG,MAAMmG,UAAU6Q,EAAEvI,SAAStI,UAAUo/E,EAAEr/E,OAAOC,UAAU6G,EAAExH,EAAE,sBAAsBq/E,GAAG//E,EAAE,SAAS6hF,KAAK35E,GAAGA,EAAE4F,MAAM5F,EAAE4F,KAAK4+G,UAAU,KAAK,iBAAiB1sH,EAAE,GAAGspF,EAAEp3E,EAAE5Q,SAAS4M,EAAEuyE,EAAE3gF,eAAeqsF,EAAE1L,EAAEn/E,SAASohF,EAAE9C,OAAO,IAAI0J,EAAExoF,KAAKoN,GAAG1G,QAAQ,sBAAsB,QAAQA,QAAQ,yDAAyD,SAAS,KAAKsqG,EAAEpH,EAAE2e,OAAO1gC,EAAE8hB,EAAE/pG,EAAE,OAAO6oF,EAAEkhB,EAAErpG,OAAO,UAAU,SAAS6V,EAAErd,GAAG,IAAI0U,GAAG,EAAEujG,EAAEj4G,EAAEA,EAAE0G,OAAO,EAAE,IAAI2B,KAAKmB,UAAUkL,EAAEujG,GAAG,CAAC,IAAI1wG,EAAEvH,EAAE0U,GAAGrM,KAAKW,IAAIzB,EAAE,GAAGA,EAAE,GAAG,CAAC,CAAC,SAAS+3F,EAAEt/F,GAAG,IAAI0U,GAAG,EAAEujG,EAAEj4G,EAAEA,EAAE0G,OAAO,EAAE,IAAI2B,KAAKmB,UAAUkL,EAAEujG,GAAG,CAAC,IAAI1wG,EAAEvH,EAAE0U,GAAGrM,KAAKW,IAAIzB,EAAE,GAAGA,EAAE,GAAG,CAAC,CAAC,SAASwrH,EAAE/yH,GAAG,IAAI0U,GAAG,EAAEujG,EAAEj4G,EAAEA,EAAE0G,OAAO,EAAE,IAAI2B,KAAKmB,UAAUkL,EAAEujG,GAAG,CAAC,IAAI1wG,EAAEvH,EAAE0U,GAAGrM,KAAKW,IAAIzB,EAAE,GAAGA,EAAE,GAAG,CAAC,CAAC,SAASwpG,EAAE/wG,EAAE0U,GAAG,IAAI,IAAIujG,EAAE1wG,EAAE4/E,EAAEnnF,EAAE0G,OAAOygF,KAAK,IAAI8wB,EAAEj4G,EAAEmnF,GAAG,OAAO5/E,EAAEmN,IAAIujG,GAAGA,GAAG1wG,GAAGA,EAAE,OAAO4/E,EAAE,OAAO,CAAC,CAAC,SAAS+/B,EAAElnH,GAAG,SAASm8G,EAAEn8G,KAAK0U,EAAE1U,EAAEmmF,GAAGA,KAAKzxE,MAAM,SAAS1U,GAAG,IAAI0U,EAAEynG,EAAEn8G,GAAGuyF,EAAErrF,KAAKlH,GAAG,GAAG,MAAM,qBAAqB0U,GAAG,8BAA8BA,CAAC,CAAjG,CAAmG1U,IAAI,SAASA,GAAG,IAAI0U,GAAE,EAAG,GAAG,MAAM1U,GAAG,mBAAmBA,EAAE0H,SAAS,IAAIgN,KAAK1U,EAAE,GAAG,CAAC,MAAMA,GAAG,CAAC,OAAO0U,CAAC,CAAhG,CAAkG1U,GAAG8oF,EAAEmvB,GAAGnwG,KAAK,SAAS9H,GAAG,GAAG,MAAMA,EAAE,CAAC,IAAI,OAAO0vF,EAAExoF,KAAKlH,EAAE,CAAC,MAAMA,GAAG,CAAC,IAAI,OAAOA,EAAE,EAAE,CAAC,MAAMA,GAAG,CAAC,CAAC,MAAM,EAAE,CAA1F,CAA4FA,IAAI,IAAI0U,CAAC,CAAC,SAASs+G,EAAEhzH,EAAE0U,GAAG,IAAIujG,EAAE1wG,EAAE4/E,EAAEnnF,EAAEizH,SAAS,OAAO,WAAW1rH,SAAS0wG,EAAEvjG,KAAK,UAAUnN,GAAG,UAAUA,GAAG,WAAWA,EAAE,cAAc0wG,EAAE,OAAOA,GAAG9wB,EAAE,iBAAiBzyE,EAAE,SAAS,QAAQyyE,EAAEzoE,GAAG,CAAC,SAASmyF,EAAE7wG,EAAE0U,GAAG,IAAIujG,EAAE,SAASj4G,EAAE0U,GAAG,OAAO,MAAM1U,OAAE,EAAOA,EAAE0U,EAAE,CAAxC,CAA0C1U,EAAE0U,GAAG,OAAOwyG,EAAEjP,GAAGA,OAAE,CAAM,CAAC,SAASiE,EAAEl8G,EAAE0U,GAAG,GAAG,mBAAmB1U,GAAG0U,GAAG,mBAAmBA,EAAE,MAAM,IAAIzM,UAAU,uBAAuB,IAAIgwG,EAAE,WAAW,IAAI1wG,EAAE+K,UAAU60E,EAAEzyE,EAAEA,EAAEvU,MAAMkI,KAAKd,GAAGA,EAAE,GAAGT,EAAEmxG,EAAEsW,MAAM,GAAGznH,EAAEiC,IAAIo+E,GAAG,OAAOrgF,EAAEqC,IAAIg+E,GAAG,IAAI/gF,EAAEpG,EAAEG,MAAMkI,KAAKd,GAAG,OAAO0wG,EAAEsW,MAAMznH,EAAEkC,IAAIm+E,EAAE/gF,GAAGA,CAAC,EAAE,OAAO6xG,EAAEsW,MAAM,IAAIrS,EAAEgX,OAAOH,GAAG9a,CAAC,CAAC,SAASkE,EAAEn8G,GAAG,IAAI0U,SAAS1U,EAAE,QAAQA,IAAI,UAAU0U,GAAG,YAAYA,EAAE,CAAC2I,EAAE5V,UAAU+B,MAAM,WAAWnB,KAAK4qH,SAAStjC,EAAEA,EAAE,MAAM,CAAC,CAAC,EAAEtyE,EAAE5V,UAAU6B,OAAO,SAAStJ,GAAG,OAAOqI,KAAKU,IAAI/I,WAAWqI,KAAK4qH,SAASjzH,EAAE,EAAEqd,EAAE5V,UAAU0B,IAAI,SAASnJ,GAAG,IAAI0U,EAAErM,KAAK4qH,SAAS,GAAGtjC,EAAE,CAAC,IAAIsoB,EAAEvjG,EAAE1U,GAAG,MAAM,8BAA8Bi4G,OAAE,EAAOA,CAAC,CAAC,OAAO3jG,EAAEpN,KAAKwN,EAAE1U,GAAG0U,EAAE1U,QAAG,CAAM,EAAEqd,EAAE5V,UAAUsB,IAAI,SAAS/I,GAAG,IAAI0U,EAAErM,KAAK4qH,SAAS,OAAOtjC,OAAE,IAASj7E,EAAE1U,GAAGsU,EAAEpN,KAAKwN,EAAE1U,EAAE,EAAEqd,EAAE5V,UAAUuB,IAAI,SAAShJ,EAAE0U,GAAG,OAAOrM,KAAK4qH,SAASjzH,GAAG2vF,QAAG,IAASj7E,EAAE,4BAA4BA,EAAErM,IAAI,EAAEi3F,EAAE73F,UAAU+B,MAAM,WAAWnB,KAAK4qH,SAAS,EAAE,EAAE3zB,EAAE73F,UAAU6B,OAAO,SAAStJ,GAAG,IAAI0U,EAAErM,KAAK4qH,SAAShb,EAAElH,EAAEr8F,EAAE1U,GAAG,QAAQi4G,EAAE,KAAKA,GAAGvjG,EAAEhO,OAAO,EAAEgO,EAAE20E,MAAM6uB,EAAEhxG,KAAKwN,EAAEujG,EAAE,IAAG,EAAG,EAAE3Y,EAAE73F,UAAU0B,IAAI,SAASnJ,GAAG,IAAI0U,EAAErM,KAAK4qH,SAAShb,EAAElH,EAAEr8F,EAAE1U,GAAG,OAAOi4G,EAAE,OAAE,EAAOvjG,EAAEujG,GAAG,EAAE,EAAE3Y,EAAE73F,UAAUsB,IAAI,SAAS/I,GAAG,OAAO+wG,EAAE1oG,KAAK4qH,SAASjzH,IAAI,CAAC,EAAEs/F,EAAE73F,UAAUuB,IAAI,SAAShJ,EAAE0U,GAAG,IAAIujG,EAAE5vG,KAAK4qH,SAAS1rH,EAAEwpG,EAAEkH,EAAEj4G,GAAG,OAAOuH,EAAE,EAAE0wG,EAAEz2G,KAAK,CAACxB,EAAE0U,IAAIujG,EAAE1wG,GAAG,GAAGmN,EAAErM,IAAI,EAAE0qH,EAAEtrH,UAAU+B,MAAM,WAAWnB,KAAK4qH,SAAS,CAACE,KAAK,IAAI91G,EAAEqB,IAAI,IAAIqwE,GAAGuQ,GAAGrV,OAAO,IAAI5sE,EAAE,EAAE01G,EAAEtrH,UAAU6B,OAAO,SAAStJ,GAAG,OAAOgzH,EAAE3qH,KAAKrI,GAAGsJ,OAAOtJ,EAAE,EAAE+yH,EAAEtrH,UAAU0B,IAAI,SAASnJ,GAAG,OAAOgzH,EAAE3qH,KAAKrI,GAAGmJ,IAAInJ,EAAE,EAAE+yH,EAAEtrH,UAAUsB,IAAI,SAAS/I,GAAG,OAAOgzH,EAAE3qH,KAAKrI,GAAG+I,IAAI/I,EAAE,EAAE+yH,EAAEtrH,UAAUuB,IAAI,SAAShJ,EAAE0U,GAAG,OAAOs+G,EAAE3qH,KAAKrI,GAAGgJ,IAAIhJ,EAAE0U,GAAGrM,IAAI,EAAE6zG,EAAEgX,MAAMH,EAAE/yH,EAAEtB,QAAQw9G,CAAE,GAAEh1G,KAAKmB,KAAK4vG,EAAE,GAAG,EAAE,SAASj4G,EAAE0U,EAAEujG,IAAG,SAAUvjG,GAAG,IAAIujG,EAAE,aAAa1wG,EAAE,qBAAqB4/E,EAAE,aAAargF,EAAE,cAAcV,EAAEuiF,SAASmoB,EAAE,iBAAiBp8F,GAAGA,GAAGA,EAAElN,SAASA,QAAQkN,EAAE4D,EAAE,iBAAiB0xE,MAAMA,MAAMA,KAAKxiF,SAASA,QAAQwiF,KAAKnD,EAAEiqB,GAAGx4F,GAAGvI,SAAS,cAATA,GAA0BzB,EAAE9G,OAAOC,UAAUC,SAASy+E,EAAEx6E,KAAK69E,IAAIkG,EAAE/jF,KAAKyhG,IAAI94F,EAAE,WAAW,OAAOuyE,EAAEod,KAAKC,KAAK,EAAE,SAAS3R,EAAEvyF,GAAG,IAAI0U,SAAS1U,EAAE,QAAQA,IAAI,UAAU0U,GAAG,YAAYA,EAAE,CAAC,SAASo0E,EAAE9oF,GAAG,GAAG,iBAAiBA,EAAE,OAAOA,EAAE,GAAG,SAASA,GAAG,MAAM,iBAAiBA,GAAG,SAASA,GAAG,QAAQA,GAAG,iBAAiBA,CAAC,CAAzC,CAA2CA,IAAI,mBAAmBsO,EAAEpH,KAAKlH,EAAE,CAAjH,CAAmHA,GAAG,OAAO6yH,IAAI,GAAGtgC,EAAEvyF,GAAG,CAAC,IAAI0U,EAAE,mBAAmB1U,EAAE81F,QAAQ91F,EAAE81F,UAAU91F,EAAEA,EAAEuyF,EAAE79E,GAAGA,EAAE,GAAGA,CAAC,CAAC,GAAG,iBAAiB1U,EAAE,OAAO,IAAIA,EAAEA,GAAGA,EAAEA,EAAEA,EAAE4N,QAAQqqG,EAAE,IAAI,IAAInH,EAAE3pB,EAAEr/E,KAAK9H,GAAG,OAAO8wG,GAAGhqG,EAAEgB,KAAK9H,GAAGoG,EAAEpG,EAAEqB,MAAM,GAAGyvG,EAAE,EAAE,GAAGvpG,EAAEO,KAAK9H,GAAG6yH,KAAK7yH,CAAC,CAACA,EAAEtB,QAAQ,SAASsB,EAAE0U,EAAEujG,GAAG,IAAI1wG,EAAE4/E,EAAErgF,EAAEV,EAAE0qG,EAAEx4F,EAAEuuE,EAAE,EAAEv4E,GAAE,EAAG4pG,GAAE,EAAGnpB,GAAE,EAAG,GAAG,mBAAmB/uF,EAAE,MAAM,IAAIiI,UAAU,uBAAuB,SAAS0nF,EAAEj7E,GAAG,IAAIujG,EAAE1wG,EAAET,EAAEqgF,EAAE,OAAO5/E,EAAE4/E,OAAE,EAAON,EAAEnyE,EAAEtO,EAAEpG,EAAEG,MAAM2G,EAAEmxG,EAAE,CAAqD,SAAS3Y,EAAEt/F,GAAG,IAAIi4G,EAAEj4G,EAAEsY,EAAE,YAAO,IAASA,GAAG2/F,GAAGvjG,GAAGujG,EAAE,GAAGC,GAAGl4G,EAAE6mF,GAAG//E,CAAC,CAAC,SAASisH,IAAI,IAAI/yH,EAAEsU,IAAI,GAAGgrF,EAAEt/F,GAAG,OAAO+wG,EAAE/wG,GAAG8wG,EAAE3sG,WAAW4uH,EAAE,SAAS/yH,GAAG,IAAIi4G,EAAEvjG,GAAG1U,EAAEsY,GAAG,OAAO4/F,EAAExoB,EAAEuoB,EAAEnxG,GAAG9G,EAAE6mF,IAAIoxB,CAAC,CAAjD,CAAmDj4G,GAAG,CAAC,SAAS+wG,EAAE/wG,GAAG,OAAO8wG,OAAE,EAAO/hB,GAAGxnF,EAAEooF,EAAE3vF,IAAIuH,EAAE4/E,OAAE,EAAO/gF,EAAE,CAAC,SAAS8gH,IAAI,IAAIlnH,EAAEsU,IAAI2jG,EAAE3Y,EAAEt/F,GAAG,GAAGuH,EAAE+K,UAAU60E,EAAE9+E,KAAKiQ,EAAEtY,EAAEi4G,EAAE,CAAC,QAAG,IAASnH,EAAE,OAArW,SAAW9wG,GAAG,OAAO6mF,EAAE7mF,EAAE8wG,EAAE3sG,WAAW4uH,EAAEr+G,GAAGpG,EAAEqhF,EAAE3vF,GAAGoG,CAAC,CAAyTiX,CAAE/E,GAAG,GAAG4/F,EAAE,OAAOpH,EAAE3sG,WAAW4uH,EAAEr+G,GAAGi7E,EAAEr3E,EAAE,CAAC,YAAO,IAASw4F,IAAIA,EAAE3sG,WAAW4uH,EAAEr+G,IAAItO,CAAC,CAAC,OAAOsO,EAAEo0E,EAAEp0E,IAAI,EAAE69E,EAAE0lB,KAAK3pG,IAAI2pG,EAAEmb,QAAQtsH,GAAGoxG,EAAE,YAAYD,GAAG9xB,EAAE2C,EAAEmvB,EAAEob,UAAU,EAAE3+G,GAAG5N,EAAEioF,EAAE,aAAakpB,IAAIA,EAAEqb,SAASvkC,GAAGm4B,EAAEqM,OAAO,gBAAW,IAASziB,GAAGrtG,aAAaqtG,GAAGjqB,EAAE,EAAEt/E,EAAE+Q,EAAE6uE,EAAE2pB,OAAE,CAAM,EAAEoW,EAAEsM,MAAM,WAAW,YAAO,IAAS1iB,EAAE1qG,EAAE2qG,EAAEz8F,IAAI,EAAE4yG,CAAC,CAAE,GAAEhgH,KAAKmB,KAAK4vG,EAAE,GAAG,EAAE,SAASj4G,EAAE0U,EAAEujG,IAAG,SAAUj4G,EAAEi4G,GAAG,IAAI1wG,EAAE,qBAAqB4/E,EAAE,eAAergF,EAAE,kBAAkBV,EAAE,eAAe0qG,EAAE,mDAAmDx4F,EAAE,QAAQuuE,EAAE,MAAMv4E,EAAE,mGAAmG63E,EAAE,WAAWuJ,EAAE,8BAA8Bp7E,EAAE,mBAAmBi+E,EAAE,CAAC,EAAEA,EAAE,yBAAyBA,EAAE,yBAAyBA,EAAE,sBAAsBA,EAAE,uBAAuBA,EAAE,uBAAuBA,EAAE,uBAAuBA,EAAE,8BAA8BA,EAAE,wBAAwBA,EAAE,yBAAwB,EAAGA,EAAEhrF,GAAGgrF,EAAE,kBAAkBA,EAAE,wBAAwBA,EAAE,oBAAoBA,EAAE,qBAAqBA,EAAE,iBAAiBA,EAAE,kBAAkBA,EAAE,qBAAqBA,EAAEpL,GAAGoL,EAAE,mBAAmBA,EAAEzrF,GAAGyrF,EAAE,mBAAmBA,EAAEnsF,GAAGmsF,EAAE,mBAAmBA,EAAE,qBAAoB,EAAG,IAAIzJ,EAAE,iBAAiB9oF,GAAGA,GAAGA,EAAEwH,SAASA,QAAQxH,EAAEk4G,EAAE,iBAAiBluB,MAAMA,MAAMA,KAAKxiF,SAASA,QAAQwiF,KAAK+E,EAAEjG,GAAGovB,GAAGnoG,SAAS,cAATA,GAA0B4/E,EAAEj7E,IAAIA,EAAE6E,UAAU7E,EAAE2I,EAAEsyE,GAAG,iBAAiBsoB,GAAGA,IAAIA,EAAE1+F,UAAU0+F,EAAE3Y,EAAEjiF,GAAGA,EAAE3e,UAAUixF,GAAG7G,EAAE2qC,QAAQV,EAAE,WAAW,IAAI,OAAOzzB,GAAGA,EAAEo0B,QAAQ,OAAO,CAAC,MAAM1zH,GAAG,CAAC,CAArD,GAAyD+wG,EAAEgiB,GAAGA,EAAEY,aAAa,SAASzM,EAAElnH,EAAE0U,EAAEujG,EAAE1wG,GAAG,IAAI4/E,GAAG,EAAErgF,EAAE9G,EAAEA,EAAE0G,OAAO,EAAE,IAAIa,GAAGT,IAAImxG,EAAEj4G,IAAImnF,MAAMA,EAAErgF,GAAGmxG,EAAEvjG,EAAEujG,EAAEj4G,EAAEmnF,GAAGA,EAAEnnF,GAAG,OAAOi4G,CAAC,CAAC,SAAS+a,EAAEhzH,EAAE0U,GAAG,IAAI,IAAIujG,GAAG,EAAE1wG,EAAEvH,EAAEA,EAAE0G,OAAO,IAAIuxG,EAAE1wG,GAAG,GAAGmN,EAAE1U,EAAEi4G,GAAGA,EAAEj4G,GAAG,OAAM,EAAG,OAAM,CAAE,CAAC,SAAS6wG,EAAE7wG,EAAE0U,EAAEujG,EAAE1wG,EAAE4/E,GAAG,OAAOA,EAAEnnF,GAAG,SAASA,EAAEmnF,EAAErgF,GAAGmxG,EAAE1wG,GAAGA,GAAE,EAAGvH,GAAG0U,EAAEujG,EAAEj4G,EAAEmnF,EAAErgF,EAAE,IAAImxG,CAAC,CAAC,SAASiE,EAAEl8G,GAAG,IAAI0U,GAAE,EAAG,GAAG,MAAM1U,GAAG,mBAAmBA,EAAE0H,SAAS,IAAIgN,KAAK1U,EAAE,GAAG,CAAC,MAAMA,GAAG,CAAC,OAAO0U,CAAC,CAAC,SAASynG,EAAEn8G,GAAG,IAAI0U,GAAG,EAAEujG,EAAE32G,MAAMtB,EAAEyJ,MAAM,OAAOzJ,EAAEgB,SAAS,SAAShB,EAAEuH,GAAG0wG,IAAIvjG,GAAG,CAACnN,EAAEvH,EAAE,IAAIi4G,CAAC,CAAC,SAASvvB,EAAE1oF,GAAG,IAAI0U,GAAG,EAAEujG,EAAE32G,MAAMtB,EAAEyJ,MAAM,OAAOzJ,EAAEgB,SAAS,SAAShB,GAAGi4G,IAAIvjG,GAAG1U,CAAC,IAAIi4G,CAAC,CAAC,IAAIrE,EAAE+T,EAAE3R,EAAEjkB,EAAEzwF,MAAMmG,UAAU2oG,EAAErgG,SAAStI,UAAU+0G,EAAEh1G,OAAOC,UAAUupG,EAAEjiB,EAAE,sBAAsBktB,GAAGrI,EAAE,SAAS3rB,KAAK+oB,GAAGA,EAAE98F,MAAM88F,EAAE98F,KAAK4+G,UAAU,KAAK,iBAAiBlf,EAAE,GAAGiM,EAAEzP,EAAE1oG,SAAS6zG,EAAEiB,EAAEt2G,eAAeiqF,EAAEqsB,EAAE90G,SAASy1F,EAAEnX,OAAO,IAAI65B,EAAE34G,KAAKq0G,GAAG3tG,QAAQ,sBAAsB,QAAQA,QAAQ,yDAAyD,SAAS,KAAKimG,EAAE9kB,EAAE9nF,OAAO2sH,EAAE7kC,EAAE3uF,WAAW+nH,EAAE3L,EAAEqX,qBAAqBrZ,EAAEzoB,EAAE09B,OAAOzH,GAAGL,EAAEngH,OAAO0M,KAAK8hG,EAAExuG,OAAO,SAASxH,GAAG,OAAO2nH,EAAE3R,EAAEh2G,GAAG,GAAGg4G,EAAEnL,GAAG9d,EAAE,YAAYglB,EAAElH,GAAG9d,EAAE,OAAOs5B,EAAExb,GAAG9d,EAAE,WAAW6hB,EAAE/D,GAAG9d,EAAE,OAAO67B,EAAE/d,GAAG9d,EAAE,WAAWovB,EAAEtR,GAAGrlG,OAAO,UAAUmjH,EAAErc,GAAG0J,GAAGiR,EAAE3a,GAAGyF,GAAG/0E,GAAGsvE,GAAG+Z,GAAGnd,GAAGoD,GAAGsC,GAAG5F,GAAGsD,GAAGsc,GAAGjlE,GAAGkuD,EAAEA,EAAEpsG,eAAU,EAAOgiG,GAAG9jD,GAAGA,GAAGmwC,aAAQ,EAAO6U,GAAGhlD,GAAGA,GAAGj+C,cAAS,EAAO,SAASsiG,GAAGhqG,GAAG,IAAI0U,GAAG,EAAEujG,EAAEj4G,EAAEA,EAAE0G,OAAO,EAAE,IAAI2B,KAAKmB,UAAUkL,EAAEujG,GAAG,CAAC,IAAI1wG,EAAEvH,EAAE0U,GAAGrM,KAAKW,IAAIzB,EAAE,GAAGA,EAAE,GAAG,CAAC,CAAC,SAAS4jG,GAAGnrG,GAAG,IAAI0U,GAAG,EAAEujG,EAAEj4G,EAAEA,EAAE0G,OAAO,EAAE,IAAI2B,KAAKmB,UAAUkL,EAAEujG,GAAG,CAAC,IAAI1wG,EAAEvH,EAAE0U,GAAGrM,KAAKW,IAAIzB,EAAE,GAAGA,EAAE,GAAG,CAAC,CAAC,SAASqiG,GAAG5pG,GAAG,IAAI0U,GAAG,EAAEujG,EAAEj4G,EAAEA,EAAE0G,OAAO,EAAE,IAAI2B,KAAKmB,UAAUkL,EAAEujG,GAAG,CAAC,IAAI1wG,EAAEvH,EAAE0U,GAAGrM,KAAKW,IAAIzB,EAAE,GAAGA,EAAE,GAAG,CAAC,CAAC,SAAS0jG,GAAGjrG,GAAG,IAAI0U,GAAG,EAAEujG,EAAEj4G,EAAEA,EAAE0G,OAAO,EAAE,IAAI2B,KAAK4qH,SAAS,IAAIrpB,KAAKl1F,EAAEujG,GAAG5vG,KAAKe,IAAIpJ,EAAE0U,GAAG,CAAC,SAAS8iC,GAAGx3C,GAAGqI,KAAK4qH,SAAS,IAAI9nB,GAAGnrG,EAAE,CAA0N,SAAS6pG,GAAG7pG,EAAE0U,GAAG,IAAI,IAAIujG,EAAEj4G,EAAE0G,OAAOuxG,KAAK,GAAGxL,GAAGzsG,EAAEi4G,GAAG,GAAGvjG,GAAG,OAAOujG,EAAE,OAAO,CAAC,CAACjO,GAAGviG,UAAU+B,MAAM,WAAWnB,KAAK4qH,SAAS9U,EAAEA,EAAE,MAAM,CAAC,CAAC,EAAEnU,GAAGviG,UAAU6B,OAAO,SAAStJ,GAAG,OAAOqI,KAAKU,IAAI/I,WAAWqI,KAAK4qH,SAASjzH,EAAE,EAAEgqG,GAAGviG,UAAU0B,IAAI,SAASnJ,GAAG,IAAI0U,EAAErM,KAAK4qH,SAAS,GAAG9U,EAAE,CAAC,IAAIlG,EAAEvjG,EAAE1U,GAAG,MAAM,8BAA8Bi4G,OAAE,EAAOA,CAAC,CAAC,OAAOsD,EAAEr0G,KAAKwN,EAAE1U,GAAG0U,EAAE1U,QAAG,CAAM,EAAEgqG,GAAGviG,UAAUsB,IAAI,SAAS/I,GAAG,IAAI0U,EAAErM,KAAK4qH,SAAS,OAAO9U,OAAE,IAASzpG,EAAE1U,GAAGu7G,EAAEr0G,KAAKwN,EAAE1U,EAAE,EAAEgqG,GAAGviG,UAAUuB,IAAI,SAAShJ,EAAE0U,GAAG,OAAOrM,KAAK4qH,SAASjzH,GAAGm+G,QAAG,IAASzpG,EAAE,4BAA4BA,EAAErM,IAAI,EAAE8iG,GAAG1jG,UAAU+B,MAAM,WAAWnB,KAAK4qH,SAAS,EAAE,EAAE9nB,GAAG1jG,UAAU6B,OAAO,SAAStJ,GAAG,IAAI0U,EAAErM,KAAK4qH,SAAShb,EAAEpO,GAAGn1F,EAAE1U,GAAG,QAAQi4G,EAAE,KAAKA,GAAGvjG,EAAEhO,OAAO,EAAEgO,EAAE20E,MAAMmxB,EAAEtzG,KAAKwN,EAAEujG,EAAE,IAAG,EAAG,EAAE9M,GAAG1jG,UAAU0B,IAAI,SAASnJ,GAAG,IAAI0U,EAAErM,KAAK4qH,SAAShb,EAAEpO,GAAGn1F,EAAE1U,GAAG,OAAOi4G,EAAE,OAAE,EAAOvjG,EAAEujG,GAAG,EAAE,EAAE9M,GAAG1jG,UAAUsB,IAAI,SAAS/I,GAAG,OAAO6pG,GAAGxhG,KAAK4qH,SAASjzH,IAAI,CAAC,EAAEmrG,GAAG1jG,UAAUuB,IAAI,SAAShJ,EAAE0U,GAAG,IAAIujG,EAAE5vG,KAAK4qH,SAAS1rH,EAAEsiG,GAAGoO,EAAEj4G,GAAG,OAAOuH,EAAE,EAAE0wG,EAAEz2G,KAAK,CAACxB,EAAE0U,IAAIujG,EAAE1wG,GAAG,GAAGmN,EAAErM,IAAI,EAAEuhG,GAAGniG,UAAU+B,MAAM,WAAWnB,KAAK4qH,SAAS,CAACE,KAAK,IAAInpB,GAAGtrF,IAAI,IAAIq1F,GAAG5I,IAAIlhB,OAAO,IAAI+f,GAAG,EAAEJ,GAAGniG,UAAU6B,OAAO,SAAStJ,GAAG,OAAOsrG,GAAGjjG,KAAKrI,GAAGsJ,OAAOtJ,EAAE,EAAE4pG,GAAGniG,UAAU0B,IAAI,SAASnJ,GAAG,OAAOsrG,GAAGjjG,KAAKrI,GAAGmJ,IAAInJ,EAAE,EAAE4pG,GAAGniG,UAAUsB,IAAI,SAAS/I,GAAG,OAAOsrG,GAAGjjG,KAAKrI,GAAG+I,IAAI/I,EAAE,EAAE4pG,GAAGniG,UAAUuB,IAAI,SAAShJ,EAAE0U,GAAG,OAAO42F,GAAGjjG,KAAKrI,GAAGgJ,IAAIhJ,EAAE0U,GAAGrM,IAAI,EAAE4iG,GAAGxjG,UAAU2B,IAAI6hG,GAAGxjG,UAAUjG,KAAK,SAASxB,GAAG,OAAOqI,KAAK4qH,SAASjqH,IAAIhJ,EAAE,6BAA6BqI,IAAI,EAAE4iG,GAAGxjG,UAAUsB,IAAI,SAAS/I,GAAG,OAAOqI,KAAK4qH,SAASlqH,IAAI/I,EAAE,EAAEw3C,GAAG/vC,UAAU+B,MAAM,WAAWnB,KAAK4qH,SAAS,IAAI9nB,EAAE,EAAE3zD,GAAG/vC,UAAU6B,OAAO,SAAStJ,GAAG,OAAOqI,KAAK4qH,SAAS3pH,OAAOtJ,EAAE,EAAEw3C,GAAG/vC,UAAU0B,IAAI,SAASnJ,GAAG,OAAOqI,KAAK4qH,SAAS9pH,IAAInJ,EAAE,EAAEw3C,GAAG/vC,UAAUsB,IAAI,SAAS/I,GAAG,OAAOqI,KAAK4qH,SAASlqH,IAAI/I,EAAE,EAAEw3C,GAAG/vC,UAAUuB,IAAI,SAAShJ,EAAE0U,GAAG,IAAIujG,EAAE5vG,KAAK4qH,SAAS,GAAGhb,aAAa9M,GAAG,CAAC,IAAI5jG,EAAE0wG,EAAEgb,SAAS,IAAIlf,GAAGxsG,EAAEb,OAAO,IAAI,OAAOa,EAAE/F,KAAK,CAACxB,EAAE0U,IAAIrM,KAAK4vG,EAAE5vG,KAAK4qH,SAAS,IAAIrpB,GAAGriG,EAAE,CAAC,OAAO0wG,EAAEjvG,IAAIhJ,EAAE0U,GAAGrM,IAAI,EAAE,IAAIyiG,GAAMJ,IAAII,GAAG,SAAS9qG,EAAE0U,GAAG,OAAO1U,GAAGurG,GAAGvrG,EAAE0U,EAAEq2F,GAAG,EAAE,SAAS/qG,EAAE0U,GAAG,GAAG,MAAM1U,EAAE,OAAOA,EAAE,IAAIwrG,GAAGxrG,GAAG,OAAO8qG,GAAG9qG,EAAE0U,GAAG,IAAI,IAAIujG,EAAEj4G,EAAE0G,OAAOa,GAAQ,EAAE4/E,EAAE3/E,OAAOxH,KAAauH,EAAE0wG,IAAI,IAAKvjG,EAAEyyE,EAAE5/E,GAAGA,EAAE4/E,KAAK,OAAOnnF,CAAC,GAAGurG,GAAsB,SAAS72F,EAAEujG,EAAE1wG,GAAG,IAAI,IAAI4/E,GAAG,EAAErgF,EAAEU,OAAOkN,GAAGtO,EAAEmB,EAAEmN,GAAGo8F,EAAE1qG,EAAEM,OAAOoqG,KAAK,CAAC,IAAIx4F,EAAElS,IAAQ+gF,GAAG,IAAG,IAAK8wB,EAAEnxG,EAAEwR,GAAGA,EAAExR,GAAG,KAAK,CAAC,OAAO4N,CAAC,EAAK,SAASg1F,GAAG1pG,EAAE0U,GAAG,IAAI,IAAIujG,EAAE,EAAE1wG,GAAGmN,EAAEs3F,GAAGt3F,EAAE1U,GAAG,CAAC0U,GAAG85F,GAAG95F,IAAIhO,OAAO,MAAM1G,GAAGi4G,EAAE1wG,GAAGvH,EAAEA,EAAE+rG,GAAGr3F,EAAEujG,OAAO,OAAOA,GAAGA,GAAG1wG,EAAEvH,OAAE,CAAM,CAAC,SAASknC,GAAGlnC,EAAE0U,GAAG,OAAO,MAAM1U,GAAG0U,KAAKlN,OAAOxH,EAAE,CAAC,SAASorG,GAAGprG,EAAE0U,EAAEujG,EAAEnH,EAAEx4F,GAAG,OAAOtY,IAAI0U,IAAI,MAAM1U,GAAG,MAAM0U,IAAI26F,GAAGrvG,KAAK2uG,GAAGj6F,GAAG1U,GAAGA,GAAG0U,GAAGA,EAAE,SAAS1U,EAAE0U,EAAEujG,EAAEnH,EAAEx4F,EAAEuuE,GAAG,IAAIv4E,EAAEg+F,GAAGtsG,GAAGmmF,EAAEmmB,GAAG53F,GAAGg7E,EAAE,iBAAiBp7E,EAAE,iBAAiBhG,IAAIohF,GAAGA,EAAEqd,GAAG/sG,KAAKuH,EAAET,EAAE4oF,GAAGvJ,IAAI7xE,GAAGA,EAAEy4F,GAAGr4F,KAAKnN,EAAET,EAAEwN,GAAG,IAAIi+E,EAAE7C,GAAG5oF,IAAIo1G,EAAEl8G,GAAG8oF,EAAEx0E,GAAGxN,IAAIo1G,EAAExnG,GAAGwjG,EAAExoB,GAAGp7E,EAAE,GAAG4jG,IAAI3lB,EAAE,OAAO1L,IAAIA,EAAE,IAAIrvC,IAAIlpC,GAAGogG,GAAG1uG,GAAG0xG,GAAG1xG,EAAE0U,EAAEujG,EAAEnH,EAAEx4F,EAAEuuE,GAAG,SAAS7mF,EAAE0U,EAAEujG,EAAE1wG,EAAET,EAAEgqG,EAAEx4F,GAAG,OAAO2/F,GAAG,IAAI,oBAAoB,GAAGj4G,EAAE0qF,YAAYh2E,EAAEg2E,YAAY1qF,EAAEyqF,YAAY/1E,EAAE+1E,WAAW,OAAM,EAAGzqF,EAAEA,EAAEwqF,OAAO91E,EAAEA,EAAE81E,OAAO,IAAI,uBAAuB,QAAQxqF,EAAE0qF,YAAYh2E,EAAEg2E,aAAanjF,EAAE,IAAIqsH,EAAE5zH,GAAG,IAAI4zH,EAAEl/G,KAAK,IAAI,mBAAmB,IAAI,gBAAgB,IAAI,kBAAkB,OAAO+3F,IAAIzsG,GAAG0U,GAAG,IAAI,iBAAiB,OAAO1U,EAAE4H,MAAM8M,EAAE9M,MAAM5H,EAAE0W,SAAShC,EAAEgC,QAAQ,IAAI,kBAAkB,IAAI,kBAAkB,OAAO1W,GAAG0U,EAAE,GAAG,KAAKyyE,EAAE,IAAIN,EAAEs1B,EAAE,KAAK/1G,EAAE,IAAIkI,EAAE,EAAEwiG,EAAE,GAAGjqB,IAAIA,EAAE6B,GAAG1oF,EAAEyJ,MAAMiL,EAAEjL,OAAO6E,EAAE,OAAM,EAAG,IAAI63E,EAAE7tE,EAAEnP,IAAInJ,GAAG,GAAGmmF,EAAE,OAAOA,GAAGzxE,EAAEo8F,GAAG,EAAEx4F,EAAEtP,IAAIhJ,EAAE0U,GAAG,IAAIg7E,EAAEgiB,GAAG7qB,EAAE7mF,GAAG6mF,EAAEnyE,GAAGnN,EAAET,EAAEgqG,EAAEx4F,GAAG,OAAOA,EAAEhP,OAAOtJ,GAAG0vF,EAAE,IAAI,kBAAkB,GAAG+Z,GAAG,OAAOA,GAAGviG,KAAKlH,IAAIypG,GAAGviG,KAAKwN,GAAG,OAAM,CAAE,CAAlqB,CAAoqB1U,EAAE0U,EAAEg7E,EAAEuoB,EAAEnH,EAAEx4F,EAAEuuE,GAAG,KAAK,EAAEvuE,GAAG,CAAC,IAAIy2E,EAAEwD,GAAGgpB,EAAEr0G,KAAKlH,EAAE,eAAe2vF,EAAE7G,GAAGyyB,EAAEr0G,KAAKwN,EAAE,eAAe,GAAGq6E,GAAGY,EAAE,CAAC,IAAItyE,EAAE0xE,EAAE/uF,EAAEL,QAAQK,EAAEs/F,EAAE3P,EAAEj7E,EAAE/U,QAAQ+U,EAAE,OAAOmyE,IAAIA,EAAE,IAAIrvC,IAAIygE,EAAE56F,EAAEiiF,EAAEwR,EAAEx4F,EAAEuuE,EAAE,CAAC,CAAC,QAAIqxB,IAAkBrxB,IAAIA,EAAE,IAAIrvC,IAAI,SAASx3C,EAAE0U,EAAEujG,EAAE1wG,EAAE4/E,EAAErgF,GAAG,IAAIV,EAAE,EAAE+gF,EAAE2pB,EAAE/F,GAAG/qG,GAAGsY,EAAEw4F,EAAEpqG,OAAsB,GAAG4R,GAAhByyF,GAAGr2F,GAAGhO,SAAiBN,EAAE,OAAM,EAAW,IAAR,IAAIkI,EAAEgK,EAAOhK,KAAK,CAAC,IAAI63E,EAAE2qB,EAAExiG,GAAG,KAAKlI,EAAE+/E,KAAKzxE,EAAE6mG,EAAEr0G,KAAKwN,EAAEyxE,IAAI,OAAM,CAAE,CAAC,IAAIuJ,EAAE5oF,EAAEqC,IAAInJ,GAAG,GAAG0vF,GAAG5oF,EAAEqC,IAAIuL,GAAG,OAAOg7E,GAAGh7E,EAAE,IAAIJ,GAAE,EAAGxN,EAAEkC,IAAIhJ,EAAE0U,GAAG5N,EAAEkC,IAAI0L,EAAE1U,GAAW,IAAR,IAAIuyF,EAAEnsF,IAASkI,EAAEgK,GAAG,CAAQ,IAAIwwE,EAAE9oF,EAAbmmF,EAAE2qB,EAAExiG,IAAc4pG,EAAExjG,EAAEyxE,GAAG,GAAG5+E,EAAE,IAAIwnF,EAAE3oF,EAAEmB,EAAE2wG,EAAEpvB,EAAE3C,EAAEzxE,EAAE1U,EAAE8G,GAAGS,EAAEuhF,EAAEovB,EAAE/xB,EAAEnmF,EAAE0U,EAAE5N,GAAG,UAAK,IAASioF,EAAEjG,IAAIovB,GAAGD,EAAEnvB,EAAEovB,EAAE3wG,EAAE4/E,EAAErgF,GAAGioF,GAAG,CAACz6E,GAAE,EAAG,KAAK,CAACi+E,IAAIA,EAAE,eAAepM,EAAE,CAAC,GAAG7xE,IAAIi+E,EAAE,CAAC,IAAI5C,EAAE3vF,EAAE2H,YAAY0V,EAAE3I,EAAE/M,YAAYgoF,GAAGtyE,KAAK,gBAAgBrd,MAAM,gBAAgB0U,IAAI,mBAAmBi7E,GAAGA,aAAaA,GAAG,mBAAmBtyE,GAAGA,aAAaA,IAAI/I,GAAE,EAAG,CAAC,OAAOxN,EAAEwC,OAAOtJ,GAAG8G,EAAEwC,OAAOoL,GAAGJ,CAAC,CAAzlB,CAA2lBtU,EAAE0U,EAAEujG,EAAEnH,EAAEx4F,EAAEuuE,GAAE,CAArrD,CAAurD7mF,EAAE0U,EAAE02F,GAAG6M,EAAEnH,EAAEx4F,GAAG,CAAo7C,SAASk2F,GAAGxuG,GAAG,OAAOssG,GAAGtsG,GAAGA,EAAE0rG,GAAG1rG,EAAE,CAAC,SAAS0xG,GAAG1xG,EAAE0U,EAAEujG,EAAE1wG,EAAE4/E,EAAErgF,GAAG,IAAIV,EAAE,EAAE+gF,EAAE2pB,EAAE9wG,EAAE0G,OAAO4R,EAAE5D,EAAEhO,OAAO,GAAGoqG,GAAGx4F,KAAKlS,GAAGkS,EAAEw4F,GAAG,OAAM,EAAG,IAAIjqB,EAAE//E,EAAEqC,IAAInJ,GAAG,GAAG6mF,GAAG//E,EAAEqC,IAAIuL,GAAG,OAAOmyE,GAAGnyE,EAAE,IAAIpG,GAAG,EAAE63E,GAAE,EAAGuJ,EAAE,EAAEvI,EAAE,IAAI8jB,QAAG,EAAO,IAAInkG,EAAEkC,IAAIhJ,EAAE0U,GAAG5N,EAAEkC,IAAI0L,EAAE1U,KAAKsO,EAAEwiG,GAAG,CAAC,IAAIx8F,EAAEtU,EAAEsO,GAAGikF,EAAE79E,EAAEpG,GAAG,GAAG/G,EAAE,IAAIuhF,EAAE1iF,EAAEmB,EAAEgrF,EAAEj+E,EAAEhG,EAAEoG,EAAE1U,EAAE8G,GAAGS,EAAE+M,EAAEi+E,EAAEjkF,EAAEtO,EAAE0U,EAAE5N,GAAG,QAAG,IAASgiF,EAAE,CAAC,GAAGA,EAAE,SAAS3C,GAAE,EAAG,KAAK,CAAC,GAAGuJ,GAAG,IAAIsjC,EAAEt+G,GAAG,SAAS1U,EAAE0U,GAAG,IAAIg7E,EAAE3mF,IAAI2L,KAAKJ,IAAItU,GAAGi4G,EAAE3jG,EAAEtU,EAAEuH,EAAE4/E,EAAErgF,IAAI,OAAO4oF,EAAEtmF,IAAIsL,EAAE,IAAI,CAACyxE,GAAE,EAAG,KAAK,OAAO,GAAG7xE,IAAIi+E,IAAI0lB,EAAE3jG,EAAEi+E,EAAEhrF,EAAE4/E,EAAErgF,GAAG,CAACq/E,GAAE,EAAG,KAAK,CAAC,CAAC,OAAOr/E,EAAEwC,OAAOtJ,GAAG8G,EAAEwC,OAAOoL,GAAGyxE,CAAC,CAAC,SAASmlB,GAAGtrG,EAAE0U,GAAG,IAAIujG,EAAE1wG,EAAE4/E,EAAEnnF,EAAEizH,SAAS,OAAO,WAAW1rH,SAAS0wG,EAAEvjG,KAAK,UAAUnN,GAAG,UAAUA,GAAG,WAAWA,EAAE,cAAc0wG,EAAE,OAAOA,GAAG9wB,EAAE,iBAAiBzyE,EAAE,SAAS,QAAQyyE,EAAEzoE,GAAG,CAAC,SAASmuF,GAAG7sG,EAAE0U,GAAG,IAAIujG,EAAE,SAASj4G,EAAE0U,GAAG,OAAO,MAAM1U,OAAE,EAAOA,EAAE0U,EAAE,CAAxC,CAA0C1U,EAAE0U,GAAG,OAAtqE,SAAY1U,GAAG,SAASqvG,GAAGrvG,IAAI,SAASA,GAAG,QAAQi8G,GAAGA,KAAKj8G,CAAC,CAA7B,CAA+BA,MAAM4rG,GAAG5rG,IAAIk8G,EAAEl8G,GAAGm9F,EAAEzN,GAAG5nF,KAAKwmG,GAAGtuG,GAAG,CAA6kE6rG,CAAGoM,GAAGA,OAAE,CAAM,CAAC,IAAIlL,GAAG,SAAS/sG,GAAG,OAAOmwF,EAAEjpF,KAAKlH,EAAE,EAAE,SAAS4xG,GAAG5xG,EAAE0U,GAAG,SAASA,EAAE,MAAMA,EAAE,iBAAiBA,KAAK,iBAAiB1U,GAAGsU,EAAExM,KAAK9H,KAAKA,GAAG,GAAGA,EAAE,GAAG,GAAGA,EAAE0U,CAAC,CAAC,SAASs3F,GAAGhsG,EAAE0U,GAAG,GAAG43F,GAAGtsG,GAAG,OAAM,EAAG,IAAIi4G,SAASj4G,EAAE,QAAQ,UAAUi4G,GAAG,UAAUA,GAAG,WAAWA,GAAG,MAAMj4G,IAAIqsG,GAAGrsG,KAAMsY,EAAExQ,KAAK9H,KAAK8wG,EAAEhpG,KAAK9H,IAAI,MAAM0U,GAAG1U,KAAKwH,OAAOkN,EAAG,CAAC,SAAS+5F,GAAGzuG,GAAG,OAAOA,GAAGA,IAAIqvG,GAAGrvG,EAAE,CAAC,SAASmsG,GAAGnsG,EAAE0U,GAAG,OAAO,SAASujG,GAAG,OAAO,MAAMA,GAAIA,EAAEj4G,KAAK0U,SAAI,IAASA,GAAG1U,KAAKwH,OAAOywG,GAAI,CAAC,EAAED,GAAG,qBAAqBjL,GAAG,IAAIiL,EAAE,IAAI8b,YAAY,MAAM/f,GAAGhH,GAAG,IAAIgH,IAAI5sB,GAAGkhC,GAAG,oBAAoBtb,GAAGsb,EAAExV,YAAYjC,GAAG7D,GAAG,IAAI6D,IAAIxqG,GAAGwkH,GAAG,oBAAoB7d,GAAG,IAAI6d,MAAM7d,GAAG,SAAS/sG,GAAG,IAAI0U,EAAEy7E,EAAEjpF,KAAKlH,GAAGi4G,EAAEvjG,GAAG5N,EAAE9G,EAAE2H,iBAAY,EAAOJ,EAAE0wG,EAAE3J,GAAG2J,QAAG,EAAO,GAAG1wG,EAAE,OAAOA,GAAG,KAAKojH,EAAE,MAAM,oBAAoB,KAAK1B,EAAE,OAAO9hC,EAAE,KAAKnoD,GAAG,MAAM,mBAAmB,KAAKksE,GAAG,OAAO9kG,EAAE,KAAK4kG,GAAG,MAAM,mBAAmB,OAAOt2F,CAAC,GAAG,IAAIg3F,GAAGO,IAAI,SAASjsG,GAAG,IAAI0U,EAAE1U,EAAE,OAAO0U,EAAE1U,GAAG,GAAG,SAASA,GAAG,GAAG,iBAAiBA,EAAE,OAAOA,EAAE,GAAGqsG,GAAGrsG,GAAG,OAAO2qG,GAAGA,GAAGzjG,KAAKlH,GAAG,GAAG,IAAI0U,EAAE1U,EAAE,GAAG,MAAM,KAAK0U,GAAG,EAAE1U,IAAG,IAAK,KAAK0U,CAAC,CAArH,CAAuHA,GAAG,IAAIujG,EAAE,GAAG,OAAOpxB,EAAE/+E,KAAK9H,IAAIi4G,EAAEz2G,KAAK,IAAIxB,EAAE4N,QAAQU,GAAG,SAAStO,EAAE0U,EAAEnN,EAAE4/E,GAAG8wB,EAAEz2G,KAAK+F,EAAE4/E,EAAEv5E,QAAQu4E,EAAE,MAAMzxE,GAAG1U,EAAE,IAAIi4G,CAAC,IAAI,SAASlM,GAAG/rG,GAAG,GAAG,iBAAiBA,GAAGqsG,GAAGrsG,GAAG,OAAOA,EAAE,IAAI0U,EAAE1U,EAAE,GAAG,MAAM,KAAK0U,GAAG,EAAE1U,IAAG,IAAK,KAAK0U,CAAC,CAAC,SAAS45F,GAAGtuG,GAAG,GAAG,MAAMA,EAAE,CAAC,IAAI,OAAO6/G,EAAE34G,KAAKlH,EAAE,CAAC,MAAMA,GAAG,CAAC,IAAI,OAAOA,EAAE,EAAE,CAAC,MAAMA,GAAG,CAAC,CAAC,MAAM,EAAE,CAAC,SAASisG,GAAGjsG,EAAE0U,GAAG,GAAG,mBAAmB1U,GAAG0U,GAAG,mBAAmBA,EAAE,MAAM,IAAIzM,UAAU,uBAAuB,IAAIgwG,EAAE,WAAW,IAAI1wG,EAAE+K,UAAU60E,EAAEzyE,EAAEA,EAAEvU,MAAMkI,KAAKd,GAAGA,EAAE,GAAGT,EAAEmxG,EAAEsW,MAAM,GAAGznH,EAAEiC,IAAIo+E,GAAG,OAAOrgF,EAAEqC,IAAIg+E,GAAG,IAAI/gF,EAAEpG,EAAEG,MAAMkI,KAAKd,GAAG,OAAO0wG,EAAEsW,MAAMznH,EAAEkC,IAAIm+E,EAAE/gF,GAAGA,CAAC,EAAE,OAAO6xG,EAAEsW,MAAM,IAAItiB,GAAGinB,OAAOtpB,IAAIqO,CAAC,CAAC,SAASxL,GAAGzsG,EAAE0U,GAAG,OAAO1U,IAAI0U,GAAG1U,GAAGA,GAAG0U,GAAGA,CAAC,CAAC,SAASqsD,GAAG/gE,GAAG,OAAO,SAASA,GAAG,OAAO2uG,GAAG3uG,IAAIwrG,GAAGxrG,EAAE,CAA/B,CAAiCA,IAAIu7G,EAAEr0G,KAAKlH,EAAE,aAAamoH,EAAEjhH,KAAKlH,EAAE,WAAWmwF,EAAEjpF,KAAKlH,IAAIuH,EAAE,CAAC0kG,GAAGinB,MAAMtpB,GAAG,IAAI0C,GAAGhrG,MAAMC,QAAQ,SAASiqG,GAAGxrG,GAAG,OAAO,MAAMA,GAAG+zH,GAAG/zH,EAAE0G,UAAUklG,GAAG5rG,EAAE,CAAC,SAAS4rG,GAAG5rG,GAAG,IAAI0U,EAAE26F,GAAGrvG,GAAGmwF,EAAEjpF,KAAKlH,GAAG,GAAG,MAAM,qBAAqB0U,GAAG,8BAA8BA,CAAC,CAAC,SAASq/G,GAAG/zH,GAAG,MAAM,iBAAiBA,GAAGA,GAAG,GAAGA,EAAE,GAAG,GAAGA,GAAG,gBAAgB,CAAC,SAASqvG,GAAGrvG,GAAG,IAAI0U,SAAS1U,EAAE,QAAQA,IAAI,UAAU0U,GAAG,YAAYA,EAAE,CAAC,SAASi6F,GAAG3uG,GAAG,QAAQA,GAAG,iBAAiBA,CAAC,CAAC,SAASqsG,GAAGrsG,GAAG,MAAM,iBAAiBA,GAAG2uG,GAAG3uG,IAAI,mBAAmBmwF,EAAEjpF,KAAKlH,EAAE,CAAC,IAAI0uG,GAAGqC,EAAE,SAAS/wG,GAAG,OAAO,SAAS0U,GAAG,OAAO1U,EAAE0U,EAAE,CAAC,CAA3C,CAA6Cq8F,GAAG,SAAS/wG,GAAG,OAAO2uG,GAAG3uG,IAAI+zH,GAAG/zH,EAAE0G,WAAW6rF,EAAEpC,EAAEjpF,KAAKlH,GAAG,EAAE,SAAS+qG,GAAG/qG,GAAG,OAAOwrG,GAAGxrG,GAAzxR,SAAYA,EAAE0U,GAAG,IAAIujG,EAAE3L,GAAGtsG,IAAI+gE,GAAG/gE,GAAG,SAASA,EAAE0U,GAAG,IAAI,IAAIujG,GAAG,EAAE1wG,EAAEjG,MAAMtB,KAAKi4G,EAAEj4G,GAAGuH,EAAE0wG,GAAGvjG,EAAEujG,GAAG,OAAO1wG,CAAC,CAA/D,CAAiEvH,EAAE0G,OAAOzG,QAAQ,GAAGsH,EAAE0wG,EAAEvxG,OAAOygF,IAAI5/E,EAAE,IAAI,IAAIT,KAAK9G,GAAG0U,IAAI6mG,EAAEr0G,KAAKlH,EAAE8G,IAAIqgF,IAAI,UAAUrgF,GAAG8qG,GAAG9qG,EAAES,KAAK0wG,EAAEz2G,KAAKsF,GAAG,OAAOmxG,CAAC,CAAokRnO,CAAG9pG,GAAnvG,SAAYA,GAAG,GAAGi4G,GAAGvjG,EAAE1U,IAAI0U,EAAE/M,YAAmD+M,KAArC,mBAAmBujG,GAAGA,EAAExwG,WAAW+0G,GAAQ,OAAOwL,EAAEhoH,GAAG,IAAI0U,EAAEujG,EAAI9wB,EAAE,GAAG,IAAI,IAAIrgF,KAAKU,OAAOxH,GAAGu7G,EAAEr0G,KAAKlH,EAAE8G,IAAI,eAAeA,GAAGqgF,EAAE3lF,KAAKsF,GAAG,OAAOqgF,CAAC,CAA6jGkkB,CAAGrrG,EAAE,CAAC,SAASksG,GAAGlsG,GAAG,OAAOA,CAAC,CAACi4G,EAAEv5G,QAAQ,SAASsB,EAAE0U,EAAEujG,GAAG,IAAI1wG,EAAE+kG,GAAGtsG,GAAGknH,EAAErW,EAAE1pB,EAAE70E,UAAU5L,OAAO,EAAE,OAAOa,EAAEvH,EAAp/I,SAAYA,GAAG,MAAM,mBAAmBA,EAAEA,EAAE,MAAMA,EAAEksG,GAAG,iBAAiBlsG,EAAEssG,GAAGtsG,GAAG,SAASA,EAAE0U,GAAG,OAAGs3F,GAAGhsG,IAAIyuG,GAAG/5F,GAAUy3F,GAAGJ,GAAG/rG,GAAG0U,GAAU,SAASujG,GAAG,IAAI1wG,EAAE,SAASvH,EAAE0U,GAAK,IAAInN,EAAE,MAAMvH,OAAE,EAAO0pG,GAAG1pG,EAAE0U,GAAG,YAAO,IAASnN,OAA7D,EAAiEA,CAAC,CAAlE,CAAoE0wG,EAAEj4G,GAAG,YAAO,IAASuH,GAAGA,IAAImN,EAAE,SAAS1U,EAAE0U,GAAG,OAAO,MAAM1U,GAAG,SAASA,EAAE0U,EAAEujG,GAA6C,IAAtB,IAAI1wG,EAAE4/E,GAAG,EAAErgF,GAA/B4N,EAAEs3F,GAAGt3F,EAAE1U,GAAG,CAAC0U,GAAG85F,GAAG95F,IAAkBhO,SAAcygF,EAAErgF,GAAG,CAAC,IAAIV,EAAE2lG,GAAGr3F,EAAEyyE,IAAI,KAAK5/E,EAAE,MAAMvH,GAAGi4G,EAAEj4G,EAAEoG,IAAI,MAAMpG,EAAEA,EAAEoG,EAAE,CAAC,OAAGmB,MAAoBT,EAAE9G,EAAEA,EAAE0G,OAAO,IAAIqtH,GAAGjtH,IAAI8qG,GAAGxrG,EAAEU,KAAKwlG,GAAGtsG,IAAI+gE,GAAG/gE,GAAG,CAAjM,CAAmMA,EAAE0U,EAAEwyB,GAAG,CAAxO,CAA0O+wE,EAAEj4G,GAAGorG,GAAG12F,EAAEnN,OAAE,EAAO,EAAE,CAAC,CAA5a,CAA8avH,EAAE,GAAGA,EAAE,IAAI,SAASA,GAAG,IAAI0U,EAAE,SAAS1U,GAA0B,IAAvB,IAAI0U,EAAEq2F,GAAG/qG,GAAGi4G,EAAEvjG,EAAEhO,OAAYuxG,KAAK,CAAC,IAAI1wG,EAAEmN,EAAEujG,GAAG9wB,EAAEnnF,EAAEuH,GAAGmN,EAAEujG,GAAG,CAAC1wG,EAAE4/E,EAAEsnB,GAAGtnB,GAAG,CAAC,OAAOzyE,CAAC,CAAzF,CAA2F1U,GAAG,OAAG,GAAG0U,EAAEhO,QAAQgO,EAAE,GAAG,GAAUy3F,GAAGz3F,EAAE,GAAG,GAAGA,EAAE,GAAG,IAAW,SAASujG,GAAG,OAAOA,IAAIj4G,GAAG,SAASA,EAAE0U,EAAEujG,EAAE1wG,GAAG,IAAI4/E,EAAE8wB,EAAEvxG,OAAOI,EAAEqgF,EAAO,GAAG,MAAMnnF,EAAE,OAAO8G,EAAE,IAAI9G,EAAEwH,OAAOxH,GAAGmnF,KAAK,CAAC,IAAI2pB,EAAEmH,EAAE9wB,GAAG,GAAM2pB,EAAE,GAAGA,EAAE,KAAK9wG,EAAE8wG,EAAE,MAAMA,EAAE,KAAK9wG,GAAG,OAAM,CAAE,CAAC,OAAOmnF,EAAErgF,GAAG,CAAC,IAAIwR,GAAGw4F,EAAEmH,EAAE9wB,IAAI,GAAGN,EAAE7mF,EAAEsY,GAAGhK,EAAEwiG,EAAE,GAAG,GAAMA,EAAE,IAAI,QAAG,IAASjqB,KAAKvuE,KAAKtY,GAAG,OAAM,MAAO,CAAC,IAAsB0vF,EAAlBvJ,EAAE,IAAI3uC,GAA6B,UAAK,IAASk4C,EAAE0b,GAAG98F,EAAEu4E,EAAEt/E,EAAE,EAAE4+E,GAAGuJ,GAAG,OAAM,CAAE,CAAC,CAAC,OAAM,CAAE,CAAxU,CAA0UuoB,EAAEj4G,EAAE0U,EAAE,CAAC,CAArhB,CAAuhB1U,GAAGgsG,GAAGt3F,EAAE1U,IAAIi4G,EAAElM,GAAGr3F,GAAG,SAAS1U,GAAG,OAAO,MAAMA,OAAE,EAAOA,EAAEi4G,EAAE,GAAG,SAASj4G,GAAG,OAAO,SAAS0U,GAAG,OAAOg1F,GAAGh1F,EAAE1U,EAAE,CAAC,CAA9C,CAAgD0U,GAAG,IAAIA,EAAEujG,CAAC,CAA+1G+b,CAAGt/G,GAAGujG,EAAE9wB,EAAEujB,GAAG,CAAE,GAAExjG,KAAKmB,KAAK4vG,EAAE,GAAGA,EAAE,EAAFA,CAAKj4G,GAAG,EAAE,SAASA,EAAE0U,GAAG1U,EAAEtB,QAAQ,SAASsB,GAAG,OAAOA,EAAEi0H,kBAAkBj0H,EAAEk0H,UAAU,WAAW,EAAEl0H,EAAEm0H,MAAM,GAAGn0H,EAAEo1F,WAAWp1F,EAAEo1F,SAAS,IAAI5tF,OAAOka,eAAe1hB,EAAE,SAAS,CAACyzF,YAAW,EAAGtqF,IAAI,WAAW,OAAOnJ,EAAEsO,CAAC,IAAI9G,OAAOka,eAAe1hB,EAAE,KAAK,CAACyzF,YAAW,EAAGtqF,IAAI,WAAW,OAAOnJ,EAAEoG,CAAC,IAAIpG,EAAEi0H,gBAAgB,GAAGj0H,CAAC,CAAC,EAAE,SAASA,EAAE0U,GAAGzU,OAAOwH,UAAU2sH,SAASn0H,OAAOwH,UAAU2sH,OAAO,SAASp0H,EAAE0U,GAAG,OAAO1U,IAAI,EAAE0U,EAAEzU,YAAO,IAASyU,EAAEA,EAAE,KAAKrM,KAAK3B,OAAO1G,EAAEC,OAAOoI,QAAQrI,GAAGqI,KAAK3B,QAAQgO,EAAEhO,SAASgO,GAAGA,EAAEkzF,OAAO5nG,EAAE0U,EAAEhO,SAASzG,OAAOoI,MAAMqM,EAAErT,MAAM,EAAErB,GAAG,EAAE,EAAE,SAASA,EAAE0U,EAAEujG,GAAG,aAAa,SAAS1wG,EAAEvH,EAAE0U,EAAEujG,GAAG,OAAOvjG,KAAK1U,EAAEwH,OAAOka,eAAe1hB,EAAE0U,EAAE,CAAC/U,MAAMs4G,EAAExkB,YAAW,EAAGD,cAAa,EAAG6gC,UAAS,IAAKr0H,EAAE0U,GAAGujG,EAAEj4G,CAAC,CAAC,SAASmnF,EAAEnnF,GAAG,GAAGiH,OAAOR,YAAYe,OAAOxH,IAAI,uBAAuBwH,OAAOC,UAAUC,SAASR,KAAKlH,GAAG,OAAOsB,MAAMuG,KAAK7H,EAAE,CAAC,SAAS8G,EAAE9G,GAAG,OAAO,SAASA,GAAG,GAAGsB,MAAMC,QAAQvB,GAAG,CAAC,IAAI,IAAI0U,EAAE,EAAEujG,EAAE,IAAI32G,MAAMtB,EAAE0G,QAAQgO,EAAE1U,EAAE0G,OAAOgO,IAAIujG,EAAEvjG,GAAG1U,EAAE0U,GAAG,OAAOujG,CAAC,CAAC,CAArG,CAAuGj4G,IAAImnF,EAAEnnF,IAAI,WAAW,MAAM,IAAIiI,UAAU,kDAAkD,CAAjF,EAAoF,CAAC,SAAS7B,EAAEpG,GAAG,GAAGsB,MAAMC,QAAQvB,GAAG,OAAOA,CAAC,CAAC,SAAS8wG,IAAI,MAAM,IAAI7oG,UAAU,uDAAuD,CAAC,SAASqQ,EAAEtY,EAAE0U,GAAG,KAAK1U,aAAa0U,GAAG,MAAM,IAAIzM,UAAU,oCAAoC,CAAC,SAAS4+E,EAAE7mF,EAAE0U,GAAG,IAAI,IAAIujG,EAAE,EAAEA,EAAEvjG,EAAEhO,OAAOuxG,IAAI,CAAC,IAAI1wG,EAAEmN,EAAEujG,GAAG1wG,EAAEksF,WAAWlsF,EAAEksF,aAAY,EAAGlsF,EAAEisF,cAAa,EAAG,UAAUjsF,IAAIA,EAAE8sH,UAAS,GAAI7sH,OAAOka,eAAe1hB,EAAEuH,EAAEnG,IAAImG,EAAE,CAAC,CAAC,SAAS+G,EAAEtO,GAAG,OAAOsO,EAAE,mBAAmBrH,QAAQ,iBAAiBA,OAAOR,SAAS,SAASzG,GAAG,cAAcA,CAAC,EAAE,SAASA,GAAG,OAAOA,GAAG,mBAAmBiH,QAAQjH,EAAE2H,cAAcV,QAAQjH,IAAIiH,OAAOQ,UAAU,gBAAgBzH,CAAC,GAAGA,EAAE,CAAC,SAASmmF,EAAEnmF,GAAG,OAAOmmF,EAAE,mBAAmBl/E,QAAQ,WAAWqH,EAAErH,OAAOR,UAAU,SAASzG,GAAG,OAAOsO,EAAEtO,EAAE,EAAE,SAASA,GAAG,OAAOA,GAAG,mBAAmBiH,QAAQjH,EAAE2H,cAAcV,QAAQjH,IAAIiH,OAAOQ,UAAU,SAAS6G,EAAEtO,EAAE,GAAGA,EAAE,CAAC,SAAS0vF,EAAE1vF,GAAG,QAAG,IAASA,EAAE,MAAM,IAAIs0H,eAAe,6DAA6D,OAAOt0H,CAAC,CAAC,SAASsU,EAAEtU,GAAG,OAAOsU,EAAE9M,OAAO+sH,eAAe/sH,OAAOgtH,eAAe,SAASx0H,GAAG,OAAOA,EAAEy0H,WAAWjtH,OAAOgtH,eAAex0H,EAAE,GAAGA,EAAE,CAAC,SAASuyF,EAAEvyF,EAAE0U,GAAG,OAAO69E,EAAE/qF,OAAO+sH,gBAAgB,SAASv0H,EAAE0U,GAAG,OAAO1U,EAAEy0H,UAAU//G,EAAE1U,CAAC,GAAGA,EAAE0U,EAAE,CAACujG,EAAEA,EAAEvjG,GAAG,IAAIo0E,EAAEmvB,EAAE,GAAGC,EAAED,EAAE1wG,EAAEuhF,GAAGiG,EAAEkpB,EAAE,GAAGtoB,EAAEsoB,EAAE1wG,EAAEwnF,GAAG1xE,EAAE46F,EAAE,GAAG3Y,EAAE2Y,EAAE1wG,EAAE8V,GAAG01G,EAAE9a,EAAE,GAAGlH,EAAEkH,EAAE1wG,EAAEwrH,GAAG7L,EAAEjP,EAAE,GAAG+a,EAAE/a,EAAE1wG,EAAE2/G,GAAGrW,EAAEoH,EAAE,GAAGiE,EAAEjE,EAAE1wG,EAAEspG,GAAQ,SAASsL,EAAEn8G,EAAE0U,GAAG,OAAOtO,EAAEpG,IAAI,SAASA,EAAE0U,GAAG,IAAIujG,EAAE,GAAG1wG,GAAE,EAAG4/E,GAAE,EAAGrgF,OAAE,EAAO,IAAI,IAAI,IAAIV,EAAE0qG,EAAE9wG,EAAEiH,OAAOR,cAAcc,GAAGnB,EAAE0qG,EAAE3pG,QAAQa,QAAQiwG,EAAEz2G,KAAK4E,EAAEzG,QAAQ+U,GAAGujG,EAAEvxG,SAASgO,GAAGnN,GAAE,GAAI,CAAC,MAAMvH,GAAGmnF,GAAE,EAAGrgF,EAAE9G,CAAC,CAAC,QAAQ,IAAIuH,GAAG,MAAMupG,EAAE3U,QAAQ2U,EAAE3U,QAAQ,CAAC,QAAQ,GAAGhV,EAAE,MAAMrgF,CAAC,CAAC,CAAC,OAAOmxG,CAAC,CAA3O,CAA6Oj4G,EAAE0U,IAAIo8F,GAAG,CAAxRmH,EAAE,GAAuR,IAAIvvB,EAAE,CAAC,CAAC,cAAc,CAAC,QAAQ,KAAK,MAAM,CAAC,UAAU,CAAC,UAAU,KAAK,OAAO,CAAC,UAAU,CAAC,SAAS,gBAAgB,KAAK,OAAO,CAAC,UAAU,CAAC,UAAU,KAAK,OAAO,CAAC,SAAS,CAAC,UAAU,KAAK,OAAO,CAAC,sBAAsB,CAAC,UAAU,aAAa,KAAK,QAAQ,CAAC,YAAY,CAAC,UAAU,iBAAiB,KAAK,KAAK,gBAAgB,EAAE,CAAC,KAAK,MAAM,MAAM,MAAM,MAAM,OAAO,MAAM,OAAO,MAAM,OAAO,OAAO,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,OAAO,MAAM,MAAM,QAAQ,CAAC,UAAU,CAAC,OAAO,WAAW,KAAK,MAAM,aAAa,CAAC,QAAQ,CAAC,UAAU,aAAa,KAAK,OAAO,CAAC,YAAY,CAAC,WAAW,KAAK,KAAK,iBAAiB,EAAE,CAAC,IAAI,IAAI,IAAI,IAAI,IAAI,KAAK,KAAK,KAAK,KAAK,OAAO,CAAC,UAAU,CAAC,SAAS,YAAY,KAAK,MAAM,CAAC,aAAa,CAAC,OAAO,WAAW,KAAK,MAAM,kBAAkB,CAAC,UAAU,CAAC,UAAU,aAAa,KAAK,QAAQ,CAAC,UAAU,CAAC,eAAe,KAAK,OAAO,CAAC,aAAa,CAAC,QAAQ,KAAK,OAAO,CAAC,WAAW,CAAC,UAAU,aAAa,KAAK,QAAQ,CAAC,UAAU,CAAC,SAAS,WAAW,KAAK,MAAM,kBAAkB,CAAC,UAAU,CAAC,SAAS,YAAY,KAAK,KAAK,gBAAgB,CAAC,SAAS,CAAC,UAAU,mBAAmB,KAAK,OAAO,CAAC,QAAQ,CAAC,UAAU,KAAK,OAAO,CAAC,SAAS,CAAC,QAAQ,KAAK,OAAO,CAAC,UAAU,CAAC,UAAU,iBAAiB,KAAK,OAAO,CAAC,yBAAyB,CAAC,SAAS,YAAY,KAAK,OAAO,CAAC,WAAW,CAAC,UAAU,KAAK,OAAO,CAAC,SAAS,CAAC,UAAU,iBAAiB,KAAK,KAAK,kBAAkB,CAAC,iCAAiC,CAAC,QAAQ,KAAK,OAAO,CAAC,SAAS,CAAC,QAAQ,KAAK,OAAO,CAAC,WAAW,CAAC,SAAS,YAAY,KAAK,OAAO,CAAC,eAAe,CAAC,UAAU,KAAK,OAAO,CAAC,UAAU,CAAC,UAAU,KAAK,OAAO,CAAC,WAAW,CAAC,QAAQ,KAAK,OAAO,CAAC,WAAW,CAAC,UAAU,KAAK,OAAO,CAAC,SAAS,CAAC,UAAU,iBAAiB,KAAK,IAAI,iBAAiB,EAAE,CAAC,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,QAAQ,CAAC,aAAa,CAAC,UAAU,KAAK,OAAO,CAAC,wBAAwB,CAAC,UAAU,aAAa,KAAK,MAAM,GAAG,GAAG,CAAC,2BAA2B,CAAC,UAAU,KAAK,OAAO,CAAC,OAAO,CAAC,UAAU,KAAK,OAAO,CAAC,QAAQ,CAAC,UAAU,iBAAiB,KAAK,MAAM,CAAC,QAAQ,CAAC,QAAQ,KAAK,KAAK,gBAAgB,CAAC,WAAW,CAAC,UAAU,iBAAiB,KAAK,KAAK,gBAAgB,CAAC,UAAU,CAAC,UAAU,KAAK,OAAO,CAAC,QAAQ,CAAC,UAAU,KAAK,OAAO,CAAC,QAAQ,CAAC,UAAU,KAAK,OAAO,CAAC,aAAa,CAAC,UAAU,mBAAmB,KAAK,MAAM,aAAa,CAAC,wBAAgB,CAAC,UAAU,KAAK,MAAM,eAAe,CAAC,UAAU,CAAC,SAAS,WAAW,YAAY,KAAK,OAAO,CAAC,OAAO,CAAC,UAAU,aAAa,KAAK,MAAM,CAAC,aAAU,CAAC,UAAU,aAAa,KAAK,MAAM,GAAG,GAAG,CAAC,SAAS,CAAC,SAAS,YAAY,KAAK,MAAM,aAAa,CAAC,iBAAiB,CAAC,SAAS,YAAY,KAAK,MAAM,eAAe,CAAC,UAAU,CAAC,SAAS,WAAW,UAAU,KAAK,KAAK,eAAe,CAAC,WAAW,CAAC,UAAU,KAAK,OAAO,CAAC,WAAW,CAAC,UAAU,aAAa,KAAK,QAAQ,CAAC,qBAAqB,CAAC,UAAU,aAAa,KAAK,IAAI,GAAG,EAAE,CAAC,MAAM,MAAM,QAAQ,CAAC,UAAU,CAAC,UAAU,iBAAiB,KAAK,OAAO,CAAC,QAAQ,CAAC,SAAS,gBAAgB,KAAK,MAAM,CAAC,cAAc,CAAC,UAAU,mBAAmB,KAAK,MAAM,aAAa,CAAC,oBAAoB,CAAC,UAAU,KAAK,OAAO,CAAC,UAAU,CAAC,UAAU,KAAK,OAAO,CAAC,UAAU,CAAC,SAAS,WAAW,UAAU,UAAU,KAAK,MAAM,eAAe,CAAC,WAAW,CAAC,UAAU,KAAK,OAAO,CAAC,OAAO,CAAC,WAAW,KAAK,OAAO,CAAC,UAAU,CAAC,SAAS,WAAW,UAAU,KAAK,MAAM,gBAAgB,CAAC,SAAS,CAAC,SAAS,YAAY,KAAK,KAAK,iBAAiB,CAAC,gBAAgB,CAAC,UAAU,iBAAiB,KAAK,OAAO,CAAC,mBAAmB,CAAC,WAAW,KAAK,OAAO,CAAC,QAAQ,CAAC,UAAU,KAAK,OAAO,CAAC,SAAS,CAAC,UAAU,KAAK,OAAO,CAAC,UAAU,CAAC,OAAO,WAAW,KAAK,OAAO,CAAC,UAAU,CAAC,SAAS,WAAW,UAAU,KAAK,KAAK,iBAAiB,CAAC,QAAQ,CAAC,UAAU,KAAK,OAAO,CAAC,SAAS,CAAC,SAAS,YAAY,KAAK,MAAM,CAAC,UAAU,CAAC,UAAU,aAAa,KAAK,QAAQ,CAAC,aAAa,CAAC,UAAU,aAAa,KAAK,MAAM,GAAG,GAAG,CAAC,OAAO,CAAC,WAAW,KAAK,QAAQ,CAAC,YAAY,CAAC,UAAU,mBAAmB,KAAK,MAAM,aAAa,CAAC,SAAS,CAAC,UAAU,KAAK,OAAO,CAAC,gBAAgB,CAAC,UAAU,KAAK,OAAO,CAAC,SAAS,CAAC,UAAU,iBAAiB,KAAK,OAAO,CAAC,QAAQ,CAAC,UAAU,aAAa,KAAK,MAAM,aAAa,CAAC,WAAW,CAAC,UAAU,mBAAmB,KAAK,OAAO,CAAC,YAAY,CAAC,QAAQ,KAAK,MAAM,aAAa,CAAC,UAAU,CAAC,SAAS,YAAY,KAAK,MAAM,CAAC,UAAU,CAAC,UAAU,KAAK,MAAM,YAAY,CAAC,QAAQ,CAAC,QAAQ,KAAK,KAAK,eAAe,CAAC,YAAY,CAAC,QAAQ,KAAK,MAAM,CAAC,OAAO,CAAC,eAAe,KAAK,KAAK,gBAAgB,CAAC,OAAO,CAAC,eAAe,KAAK,OAAO,CAAC,UAAU,CAAC,SAAS,YAAY,KAAK,MAAM,cAAc,CAAC,SAAS,CAAC,eAAe,KAAK,MAAM,gBAAgB,CAAC,QAAQ,CAAC,SAAS,YAAY,KAAK,KAAK,cAAc,GAAG,CAAC,UAAU,CAAC,UAAU,aAAa,KAAK,QAAQ,CAAC,QAAQ,CAAC,QAAQ,KAAK,KAAK,gBAAgB,CAAC,SAAS,CAAC,eAAe,KAAK,OAAO,CAAC,aAAa,CAAC,OAAO,WAAW,KAAK,IAAI,gBAAgB,EAAE,CAAC,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,OAAO,UAAU,CAAC,QAAQ,CAAC,UAAU,KAAK,OAAO,CAAC,WAAW,CAAC,WAAW,KAAK,OAAO,CAAC,SAAS,CAAC,SAAS,YAAY,KAAK,OAAO,CAAC,SAAS,CAAC,eAAe,KAAK,OAAO,CAAC,aAAa,CAAC,OAAO,WAAW,KAAK,MAAM,eAAe,CAAC,OAAO,CAAC,QAAQ,KAAK,OAAO,CAAC,SAAS,CAAC,SAAS,WAAW,UAAU,UAAU,KAAK,MAAM,cAAc,CAAC,UAAU,CAAC,eAAe,KAAK,OAAO,CAAC,UAAU,CAAC,UAAU,KAAK,OAAO,CAAC,UAAU,CAAC,UAAU,KAAK,OAAO,CAAC,QAAQ,CAAC,SAAS,gBAAgB,KAAK,OAAO,CAAC,gBAAgB,CAAC,UAAU,KAAK,OAAO,CAAC,YAAY,CAAC,SAAS,WAAW,UAAU,UAAU,KAAK,OAAO,CAAC,aAAa,CAAC,SAAS,YAAY,KAAK,OAAO,CAAC,QAAQ,CAAC,QAAQ,KAAK,OAAO,CAAC,YAAY,CAAC,SAAS,YAAY,KAAK,OAAO,CAAC,aAAa,CAAC,UAAU,KAAK,OAAO,CAAC,SAAS,CAAC,UAAU,KAAK,OAAO,CAAC,WAAW,CAAC,QAAQ,KAAK,KAAK,gBAAgB,CAAC,WAAW,CAAC,QAAQ,KAAK,OAAO,CAAC,OAAO,CAAC,UAAU,KAAK,OAAO,CAAC,QAAQ,CAAC,SAAS,YAAY,KAAK,OAAO,CAAC,mBAAmB,CAAC,WAAW,KAAK,OAAO,CAAC,aAAa,CAAC,UAAU,aAAa,KAAK,OAAO,CAAC,aAAa,CAAC,UAAU,KAAK,OAAO,CAAC,YAAY,CAAC,UAAU,KAAK,OAAO,CAAC,SAAS,CAAC,UAAU,mBAAmB,KAAK,KAAK,eAAe,EAAE,CAAC,KAAK,KAAK,KAAK,MAAM,MAAM,MAAM,MAAM,QAAQ,CAAC,aAAa,CAAC,WAAW,KAAK,OAAO,CAAC,UAAU,CAAC,UAAU,KAAK,MAAM,iBAAiB,CAAC,SAAS,CAAC,UAAU,KAAK,OAAO,CAAC,WAAW,CAAC,QAAQ,KAAK,OAAO,CAAC,aAAa,CAAC,SAAS,YAAY,KAAK,OAAO,CAAC,UAAU,CAAC,SAAS,gBAAgB,KAAK,OAAO,CAAC,aAAa,CAAC,UAAU,KAAK,OAAO,CAAC,UAAU,CAAC,QAAQ,KAAK,MAAM,CAAC,UAAU,CAAC,UAAU,KAAK,OAAO,CAAC,QAAQ,CAAC,UAAU,KAAK,OAAO,CAAC,QAAQ,CAAC,QAAQ,KAAK,OAAO,CAAC,cAAc,CAAC,SAAS,YAAY,KAAK,KAAK,eAAe,CAAC,gBAAgB,CAAC,WAAW,KAAK,OAAO,CAAC,cAAc,CAAC,WAAW,KAAK,KAAK,gBAAgB,CAAC,YAAY,CAAC,UAAU,mBAAmB,KAAK,OAAO,CAAC,QAAQ,CAAC,UAAU,KAAK,OAAO,CAAC,UAAU,CAAC,UAAU,KAAK,OAAO,CAAC,cAAc,CAAC,QAAQ,KAAK,OAAO,CAAC,SAAS,CAAC,SAAS,UAAU,KAAK,KAAK,cAAc,CAAC,OAAO,CAAC,eAAe,KAAK,OAAO,CAAC,WAAW,CAAC,QAAQ,KAAK,KAAK,eAAe,CAAC,QAAQ,CAAC,WAAW,KAAK,OAAO,CAAC,YAAY,CAAC,eAAe,KAAK,OAAO,CAAC,SAAS,CAAC,UAAU,mBAAmB,KAAK,OAAO,CAAC,mBAAmB,CAAC,WAAW,KAAK,OAAO,CAAC,WAAW,CAAC,UAAU,iBAAiB,KAAK,OAAO,CAAC,OAAO,CAAC,UAAU,iBAAiB,KAAK,MAAM,CAAC,cAAc,CAAC,QAAQ,KAAK,KAAK,gBAAgB,CAAC,SAAS,CAAC,SAAS,WAAW,UAAU,KAAK,KAAK,eAAe,CAAC,WAAW,CAAC,SAAS,YAAY,KAAK,OAAO,CAAC,cAAc,CAAC,UAAU,aAAa,KAAK,IAAI,GAAG,EAAE,CAAC,MAAM,QAAQ,CAAC,QAAQ,CAAC,eAAe,KAAK,OAAO,CAAC,aAAU,CAAC,UAAU,KAAK,OAAO,CAAC,UAAU,CAAC,SAAS,YAAY,KAAK,MAAM,CAAC,SAAS,CAAC,SAAS,OAAO,UAAU,UAAU,KAAK,IAAI,kBAAkB,GAAG,CAAC,SAAS,CAAC,UAAU,KAAK,OAAO,CAAC,wBAAwB,CAAC,UAAU,aAAa,KAAK,QAAQ,CAAC,cAAc,CAAC,UAAU,aAAa,KAAK,QAAQ,CAAC,mCAAmC,CAAC,UAAU,aAAa,KAAK,QAAQ,CAAC,QAAQ,CAAC,WAAW,KAAK,OAAO,CAAC,aAAa,CAAC,UAAU,KAAK,OAAO,CAAC,iCAAwB,CAAC,UAAU,KAAK,OAAO,CAAC,eAAe,CAAC,eAAe,KAAK,OAAO,CAAC,UAAU,CAAC,UAAU,KAAK,OAAO,CAAC,SAAS,CAAC,SAAS,YAAY,KAAK,OAAO,CAAC,aAAa,CAAC,UAAU,KAAK,OAAO,CAAC,eAAe,CAAC,UAAU,KAAK,OAAO,CAAC,YAAY,CAAC,QAAQ,KAAK,KAAK,aAAa,CAAC,WAAW,CAAC,SAAS,YAAY,KAAK,OAAO,CAAC,WAAW,CAAC,SAAS,WAAW,YAAY,KAAK,OAAO,CAAC,kBAAkB,CAAC,WAAW,KAAK,OAAO,CAAC,UAAU,CAAC,UAAU,KAAK,OAAO,CAAC,eAAe,CAAC,UAAU,KAAK,MAAM,CAAC,cAAc,CAAC,QAAQ,KAAK,KAAK,iBAAiB,CAAC,cAAc,CAAC,SAAS,gBAAgB,KAAK,OAAO,CAAC,QAAQ,CAAC,SAAS,YAAY,KAAK,KAAK,eAAe,CAAC,YAAY,CAAC,QAAQ,KAAK,MAAM,CAAC,QAAQ,CAAC,UAAU,KAAK,OAAO,CAAC,WAAW,CAAC,UAAU,iBAAiB,KAAK,OAAO,CAAC,YAAY,CAAC,UAAU,KAAK,OAAO,CAAC,SAAS,CAAC,SAAS,WAAW,UAAU,KAAK,KAAK,iBAAiB,CAAC,cAAc,CAAC,UAAU,KAAK,KAAK,gBAAgB,CAAC,QAAQ,CAAC,eAAe,KAAK,OAAO,CAAC,SAAS,CAAC,QAAQ,KAAK,OAAO,CAAC,aAAa,CAAC,OAAO,WAAW,KAAK,OAAO,CAAC,WAAW,CAAC,UAAU,KAAK,OAAO,CAAC,WAAW,CAAC,QAAQ,KAAK,MAAM,CAAC,cAAc,CAAC,QAAQ,KAAK,OAAO,CAAC,OAAO,CAAC,UAAU,KAAK,OAAO,CAAC,QAAQ,CAAC,WAAW,KAAK,OAAO,CAAC,sBAAsB,CAAC,UAAU,aAAa,KAAK,QAAQ,CAAC,UAAU,CAAC,SAAS,gBAAgB,KAAK,OAAO,CAAC,SAAS,CAAC,UAAU,KAAK,KAAK,iBAAiB,CAAC,eAAe,CAAC,OAAO,WAAW,KAAK,OAAO,CAAC,SAAS,CAAC,QAAQ,KAAK,OAAO,CAAC,SAAS,CAAC,UAAU,KAAK,OAAO,CAAC,UAAU,CAAC,SAAS,WAAW,KAAK,MAAM,kBAAkB,CAAC,uBAAuB,CAAC,eAAe,KAAK,OAAO,CAAC,iBAAiB,CAAC,SAAS,YAAY,KAAK,KAAK,eAAe,CAAC,gBAAgB,CAAC,UAAU,iBAAiB,KAAK,IAAI,iBAAiB,EAAE,CAAC,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,QAAQ,CAAC,UAAU,CAAC,UAAU,iBAAiB,KAAK,OAAO,CAAC,aAAa,CAAC,OAAO,WAAW,KAAK,MAAM,gBAAgB,CAAC,UAAU,CAAC,WAAW,KAAK,OAAO,CAAC,eAAe,CAAC,UAAU,KAAK,KAAK,eAAe,GAAG,CAAC,YAAY,CAAC,UAAU,iBAAiB,KAAK,MAAM,CAAC,UAAU,CAAC,QAAQ,KAAK,MAAM,CAAC,QAAQ,CAAC,eAAe,KAAK,OAAO,CAAC,SAAS,CAAC,UAAU,KAAK,OAAO,CAAC,WAAW,CAAC,UAAU,KAAK,QAAQkrB,EAAE,CAAC,CAAC,iBAAiB,CAAC,WAAW,KAAK,QAAQ,CAAC,WAAW,CAAC,UAAU,aAAa,KAAK,QAAQ,CAAC,UAAU,CAAC,UAAU,iBAAiB,KAAK,QAAQ,CAAC,yBAAyB,CAAC,UAAU,aAAa,KAAK,QAAQ,CAAC,iBAAiB,CAAC,UAAU,aAAa,KAAK,QAAQ,CAAC,eAAe,CAAC,WAAW,KAAK,OAAO,CAAC,mBAAmB,CAAC,UAAU,iBAAiB,KAAK,OAAO,CAAC,gBAAgB,CAAC,UAAU,KAAK,OAAO,CAAC,YAAY,CAAC,UAAU,KAAK,OAAO,CAAC,YAAY,CAAC,WAAW,KAAK,OAAO,CAAC,SAAS,CAAC,SAAS,YAAY,KAAK,KAAK,eAAe,CAAC,aAAa,CAAC,UAAU,aAAa,KAAK,QAAQ,CAAC,OAAO,CAAC,QAAQ,KAAK,OAAO,CAAC,iBAAiB,CAAC,WAAW,KAAK,OAAO,CAAC,2BAA2B,CAAC,WAAW,KAAK,QAAQ,CAAC,sBAAmB,CAAC,UAAU,aAAa,KAAK,MAAM,GAAG,GAAG,CAAC,eAAe,CAAC,UAAU,KAAK,OAAO,CAAC,eAAe,CAAC,UAAU,aAAa,KAAK,MAAM,GAAG,GAAG,CAAC,4BAA4B,CAAC,UAAU,iBAAiB,KAAK,OAAO,CAAC,eAAe,CAAC,UAAU,aAAa,KAAK,QAAQ,CAAC,UAAU,CAAC,WAAW,KAAK,OAAO,CAAC,2BAA2B,CAAC,UAAU,aAAa,KAAK,QAAQ,CAAC,sBAAsB,CAAC,UAAU,aAAa,KAAK,QAAQ,CAAC,oBAAoB,CAAC,WAAW,KAAK,QAAQ,SAAS+T,EAAE3nH,EAAE0U,EAAEujG,EAAE1wG,EAAE4/E,GAAG,OAAO8wB,GAAG9wB,EAAEnnF,EAAE,GAAGo0H,OAAO1/G,EAAEhO,OAAO,KAAK,IAAIa,EAAEvH,EAAE,GAAGo0H,OAAO1/G,EAAEhO,OAAO,KAAK,IAAIuxG,CAAC,CAAC,SAASjC,EAAEh2G,EAAE0U,EAAEujG,EAAE9wB,EAAE/gF,GAAG,IAAI0qG,EAAEx4F,EAAEuuE,EAAE,GAAG,OAAOvuE,GAAE,IAAK5D,EAAE,EAAEo8F,EAAE,IAAIf,OAAO5vG,MAAM2wG,EAAEhqG,EAAE9G,EAAE0e,KAAK,SAAS1e,GAAG,IAAI8G,EAAE,CAACc,KAAK5H,EAAE,GAAG00H,QAAQ10H,EAAE,GAAG20H,KAAK30H,EAAE,GAAG40H,YAAY50H,EAAE,GAAG60H,SAAS70H,EAAE,GAAG80H,OAAOnN,EAAE1P,EAAEj4G,EAAE,GAAGA,EAAE,GAAGmnF,EAAE/gF,GAAG26F,SAAS/gG,EAAE,IAAI,GAAG8wG,EAAE,GAAG,OAAO9wG,EAAE,IAAIA,EAAE,GAAG0e,KAAK,SAAShK,GAAG,IAAIujG,EAAE,SAASj4G,GAAG,IAAI,IAAI0U,EAAE,EAAEA,EAAEpC,UAAU5L,OAAOgO,IAAI,CAAC,IAAIujG,EAAE,MAAM3lG,UAAUoC,GAAGpC,UAAUoC,GAAG,CAAC,EAAEyyE,EAAE3/E,OAAO0M,KAAK+jG,GAAG,mBAAmBzwG,OAAOutH,wBAAwB5tC,EAAEA,EAAE4oB,OAAOvoG,OAAOutH,sBAAsB9c,GAAGjkG,QAAQ,SAAShU,GAAG,OAAOwH,OAAO+rF,yBAAyB0kB,EAAEj4G,GAAGyzF,UAAU,MAAMtM,EAAEnmF,SAAS,SAAS0T,GAAGnN,EAAEvH,EAAE0U,EAAEujG,EAAEvjG,GAAG,GAAG,CAAC,OAAO1U,CAAC,CAArU,CAAuU,CAAC,EAAE8G,GAAGmxG,EAAE4c,SAAS70H,EAAE,GAAG0U,EAAEujG,EAAE+c,YAAW,EAAG/c,EAAEgd,eAAevgH,EAAEhO,OAAOoqG,EAAEtvG,KAAKy2G,EAAE,IAAInH,EAAEpqG,OAAO,GAAGI,EAAEouH,UAAS,EAAG58G,GAAG,UAAU5D,EAAE/M,YAAYC,MAAM8M,EAAE+9E,SAASzyF,EAAE,KAAK8G,EAAEquH,cAAa,EAAG,CAACruH,GAAGipG,OAAOe,KAAKjqB,EAAEA,EAAEkpB,OAAOe,GAAG,CAAChqG,KAAK,CAACA,EAAE,MAAM+/E,EAAE,CAAC,SAASkL,EAAE/xF,EAAE0U,EAAEujG,EAAE1wG,GAAG,GAAG,OAAO0wG,EAAE,CAAC,IAAI9wB,EAAE3/E,OAAO0M,KAAK+jG,GAAGnxG,EAAEU,OAAO4tH,OAAOnd,GAAG9wB,EAAEnmF,SAAS,SAASi3G,EAAE9wB,GAAG,GAAG5/E,EAAE,OAAOvH,EAAEwB,KAAK,CAACy2G,EAAEnxG,EAAEqgF,KAAK,IAAI/gF,EAAEpG,EAAEq1H,WAAW,SAASr1H,GAAG,OAAOA,EAAE,KAAKi4G,CAAC,IAAI,IAAI,IAAI7xG,EAAE,CAAC,IAAI0qG,EAAE,CAACmH,GAAGnH,EAAEp8F,GAAG5N,EAAEqgF,GAAGnnF,EAAEwB,KAAKsvG,EAAE,MAAM9wG,EAAEoG,GAAGsO,GAAG5N,EAAEqgF,EAAE,GAAG,CAAC,CAAC,SAASipB,EAAEpwG,EAAE0U,GAAG,OAAO,IAAIA,EAAEhO,OAAO1G,EAAEA,EAAE0e,KAAK,SAAS1e,GAAG,IAAIi4G,EAAEvjG,EAAE2gH,WAAW,SAAS3gH,GAAG,OAAOA,EAAE,KAAK1U,EAAE,EAAE,IAAI,IAAI,IAAIi4G,EAAE,OAAOj4G,EAAE,IAAIuH,EAAEmN,EAAEujG,GAAG,OAAO1wG,EAAE,KAAKvH,EAAE,GAAGuH,EAAE,IAAIA,EAAE,KAAKvH,EAAE,GAAGuH,EAAE,IAAIA,EAAE,KAAKvH,EAAE,GAAGuH,EAAE,IAAIvH,CAAC,GAAG,CAAC,IAAIw8G,EAAE,SAASx8G,EAAE0U,EAAEujG,EAAE1wG,EAAE4/E,EAAE/gF,EAAE0qG,EAAEjqB,EAAEv4E,EAAE63E,EAAEuJ,EAAEp7E,EAAEi+E,EAAEzJ,EAAEovB,GAAG5/F,EAAEjQ,KAAKrI,GAAGqI,KAAKitH,cAAc,SAASt1H,EAAE0U,GAAG,GAAG,iBAAiB1U,EAAE,CAAC,IAAIi4G,EAAEj4G,EAAE,OAAO0U,EAAEV,QAAQ,SAAShU,GAAG,OAAOA,EAAE00H,QAAQa,MAAM,SAASv1H,GAAG,OAAOA,IAAIi4G,CAAC,GAAG,GAAG,CAAC,OAAOvjG,EAAEV,QAAQ,SAASU,GAAG,OAAO1U,EAAE0e,KAAK,SAAS1e,GAAG,OAAO0U,EAAEggH,QAAQa,MAAM,SAAS7gH,GAAG,OAAOA,IAAI1U,CAAC,GAAG,IAAIu1H,MAAM,SAASv1H,GAAG,OAAOA,CAAC,GAAG,GAAG,EAAEqI,KAAKmtH,gBAAgB,SAASx1H,EAAE0U,GAAG,IAAIujG,EAAE,GAAGlI,OAAOjpG,EAAE9G,GAAG8G,EAAE4N,IAAI,OAAOujG,EAAEwd,MAAM,SAASz1H,EAAE0U,GAAG,OAAO1U,EAAE4H,KAAK8M,EAAE9M,MAAM,EAAE5H,EAAE4H,KAAK8M,EAAE9M,KAAK,EAAE,CAAC,IAAIqwG,CAAC,EAAE5vG,KAAKqtH,uBAAuB,SAAS11H,EAAE0U,EAAEujG,GAAG,OAAO,IAAIj4G,EAAE0G,OAAOgO,EAAEujG,EAAEj4G,EAAE0e,KAAK,SAAS1e,GAAG,IAAIi4G,EAAEvjG,EAAE5H,MAAM,SAAS4H,GAAG,OAAOA,EAAEigH,OAAO30H,CAAC,IAAI,GAAGi4G,EAAE,OAAOA,CAAC,IAAIjkG,QAAQ,SAAShU,GAAG,OAAOA,CAAC,IAAI0U,EAAEV,QAAQ,SAASU,GAAG,OAAO1U,EAAEu1H,MAAM,SAASv1H,GAAG,OAAOA,IAAI0U,EAAEigH,IAAI,GAAG,GAAG,EAAEtsH,KAAKstH,kBAAkB,SAAS31H,EAAE0U,EAAEujG,GAAG,IAAI,IAAI1wG,EAAE,EAAEA,EAAEvH,EAAE0G,OAAOa,SAAI,IAASmN,EAAE1U,EAAEuH,GAAGotH,MAAM30H,EAAEuH,GAAGqJ,UAAU8D,EAAE1U,EAAEuH,GAAGotH,WAAM,IAASjgH,EAAE1U,EAAEuH,GAAGK,QAAQ5H,EAAEuH,GAAGqJ,UAAU8D,EAAE1U,EAAEuH,GAAGK,OAAO,OAAOqwG,GAAGj4G,EAAEy1H,MAAM,SAASz1H,EAAE0U,GAAG,OAAO1U,EAAE4Q,UAAU8D,EAAE9D,WAAW,EAAE5Q,EAAE4Q,UAAU8D,EAAE9D,UAAU,EAAE,CAAC,IAAI5Q,CAAC,EAAEqI,KAAKutH,eAAe,SAAS51H,EAAE0U,GAAG,IAAI,IAAIujG,EAAE,GAAG1wG,EAAE,EAAEA,EAAEmN,EAAEhO,OAAOa,IAAI,CAAC,IAAI4/E,EAAE9jF,KAAKC,MAAMD,KAAK8B,UAAUnF,IAAImnF,EAAE0tC,UAAUngH,EAAEnN,GAAG0wG,EAAEz2G,KAAK2lF,EAAE,CAAC,OAAO8wB,CAAC,EAAE5vG,KAAKwtH,iBAAiB,SAAS71H,EAAE0U,GAAG,OAAO,IAAIA,EAAEhO,OAAO1G,EAAEA,EAAEgU,QAAQ,SAAShU,GAAG,OAAO0U,EAAE+9E,SAASzyF,EAAE20H,KAAK,GAAG,EAAE,IAAI5lC,EAAE,SAAS/uF,EAAE0U,EAAEujG,GAAG,IAAI1wG,EAAE,GAAG,OAAOwqF,EAAExqF,EAAE,EAAEvH,GAAE,GAAI+xF,EAAExqF,EAAE,EAAEmN,GAAGq9E,EAAExqF,EAAE,EAAE0wG,GAAG1wG,CAAC,CAA/D,CAAiE+G,EAAE63E,EAAEuJ,GAAGC,EAAEygB,EAAE/sG,KAAKC,MAAMD,KAAK8B,UAAUujF,IAAIqG,GAAG1xE,EAAE+yF,EAAE/sG,KAAKC,MAAMD,KAAK8B,UAAUyuG,IAAI7kB,GAAGuQ,EAAE6c,EAAEnG,EAAErmB,EAAEj7E,EAAE69E,EAAEzJ,EAAEovB,GAAG,GAAG6a,EAAEzzB,EAAE,GAAGyR,EAAEzR,EAAE,GAAG,GAAG2Y,EAAE,CAAC,IAAIiP,EAAE/K,EAAEnG,EAAE34F,EAAE3I,EAAE69E,EAAEzJ,EAAEovB,GAAG,GAAG8a,EAAE9L,EAAE,GAAGA,EAAE,GAAG6L,EAAE1qH,KAAKmtH,gBAAgBxC,EAAED,EAAE,CAACxrH,IAAIwrH,EAAE1qH,KAAKitH,cAAc/tH,EAAEwrH,IAAI1qH,KAAKytH,cAAcztH,KAAKstH,kBAAkBttH,KAAKwtH,iBAAiBxtH,KAAKqtH,uBAAuBvuC,EAAE4rC,EAAElsC,EAAE4L,SAAS,kBAAkBqe,GAAGx8F,EAAEuyE,EAAE4L,SAAS,kBAAkBpqF,KAAK0tH,mBAAmB,IAAI3vH,EAAEM,OAAO,GAAG2B,KAAKstH,kBAAkBttH,KAAKqtH,uBAAuBtvH,EAAE2sH,EAAElsC,EAAE4L,SAAS,uBAAuBn+E,EAAEuyE,EAAE4L,SAAS,uBAAuBpqF,KAAK2tH,gBAAgB3tH,KAAKwtH,iBAAiBxtH,KAAKqtH,uBAAuBvuC,EAAE4pB,GAAGD,EAAE,EAAEE,EAAE,SAAShxG,GAAG,SAAS0U,EAAE1U,GAAG,IAAIi4G,EAAE3/F,EAAEjQ,KAAKqM,IAAIujG,EAAE,SAASj4G,EAAE0U,GAAG,OAAOA,GAAG,WAAWyxE,EAAEzxE,IAAI,mBAAmBA,EAAEg7E,EAAE1vF,GAAG0U,CAAC,CAApE,CAAsErM,KAAKiM,EAAEI,GAAGxN,KAAKmB,KAAKrI,KAAKi2H,qBAAqB32B,KAAK,SAASt/F,GAAG,OAAOA,GAAG,IAAIA,EAAE0G,OAAOuxG,EAAE+J,MAAM8T,cAAc9hH,QAAQ,SAASU,GAAG,OAAOs+G,IAAIt+G,EAAE9M,KAAKvI,cAAcW,EAAEX,cAAc,GAAGqwF,EAAEA,EAAEuoB,KAAK,GAAG,IAAI,IAAIA,EAAEie,qBAAqB52B,KAAK,SAASt/F,EAAE0U,EAAEnN,EAAE4/E,GAAG,IAAIrgF,EAAE,IAAG,IAAKmxG,EAAE7qB,MAAM+oC,kBAAkBhvC,EAAEouC,MAAM,SAAS7gH,GAAG,GAAGs+G,IAAIhzH,EAAE0U,EAAEmgH,UAAU,OAAOttH,EAAEguH,MAAM,SAASv1H,GAAG,GAAG0U,EAAEigH,OAAO30H,EAAE20H,MAAM30H,EAAEk1H,SAAS,OAAOpuH,EAAE9G,GAAE,CAAE,KAAI,CAAE,IAAI8G,GAAG,OAAOA,EAAE,IAAIV,EAAEmB,EAAEuF,MAAM,SAAS9M,GAAG,OAAOA,EAAE20H,MAAMjgH,CAAC,IAAI,GAAG,KAAK1U,EAAEJ,OAAO,OAAOwG,EAAE,IAAI0qG,EAAEvpG,EAAEhI,QAAQ,SAASmV,EAAEujG,GAAG,GAAG+a,IAAIhzH,EAAEi4G,EAAE4c,UAAU,CAAC,GAAG5c,EAAE4c,SAASnuH,OAAOgO,EAAEmgH,SAASnuH,OAAO,OAAOuxG,EAAE,GAAGA,EAAE4c,SAASnuH,SAASgO,EAAEmgH,SAASnuH,QAAQuxG,EAAElX,SAASrsF,EAAEqsF,SAAS,OAAOkX,CAAC,CAAC,OAAOvjG,CAAC,GAAG,CAACmgH,SAAS,GAAG9zB,SAAS,OAAOrR,EAAEA,EAAEuoB,KAAK,OAAOnH,EAAElpG,KAAKkpG,EAAE1qG,CAAC,IAAI6xG,EAAEme,cAAc,SAASp2H,GAAG,IAAI0U,EAAEnN,EAAE0wG,EAAE+J,MAAM8T,eAAephH,EAAE1U,EAAEmB,QAAQ,IAAI,KAAKnB,EAAEmB,QAAQ,IAAI,IAAIoG,EAAEuF,MAAM,SAAS4H,GAAG,OAAOA,EAAEmgH,WAAW70H,CAAC,IAAIuH,EAAEuF,MAAM,SAAS4H,GAAG,OAAOA,EAAEigH,MAAM30H,CAAC,MAAM0U,EAAEmgH,UAAU5c,EAAEoe,SAAS,CAACC,gBAAgB5hH,EAAE6hH,gBAAgBte,EAAE7qB,MAAMopC,mBAAmB,GAAGve,EAAEwe,aAAa/hH,EAAEmgH,SAASngH,IAAI,EAAEujG,EAAEye,SAAS,SAAS12H,EAAE0U,GAAG,GAAG1U,EAAE,CAAC,IAAIuH,EAAE0wG,EAAE0e,YAAY,GAAGpvH,GAAGuiF,SAAS3nF,KAAK,CAAC,IAAIglF,EAAE5/E,EAAEqvH,aAAa9vH,EAAES,EAAEsvH,wBAAwBzhD,IAAI0U,SAAS3nF,KAAKisG,UAAUhoG,EAAEU,EAAEqgF,EAAE2pB,EAAE9wG,EAAEsY,EAAEw4F,EAAE+lB,wBAAwBhwC,EAAEiqB,EAAE8lB,aAAatoH,EAAEgK,EAAE88D,IAAI0U,SAAS3nF,KAAKisG,UAAUjoB,EAAE73E,EAAEu4E,EAAE6I,EAAEphF,EAAExH,EAAES,EAAE6mG,UAAU95F,EAAE6yE,EAAE,EAAEN,EAAE,EAAE,GAAGoxB,EAAE7qB,MAAM0pC,aAAaxoH,EAAExH,EAAE,GAAGwH,EAAExH,EAAE4N,IAAIg7E,GAAGp7E,GAAG/M,EAAE6mG,UAAU1e,OAAO,GAAGvJ,EAAE//E,EAAE,CAACsO,IAAIg7E,GAAGp7E,GAAG,IAAIi+E,EAAEpL,EAAEN,EAAEt/E,EAAE6mG,UAAU1e,EAAE6C,CAAC,CAAC,CAAC,CAAC,EAAE0lB,EAAE8e,YAAY,WAAW,IAAI/2H,EAAEi4G,EAAE0e,YAAY32H,GAAG8pF,SAAS3nF,OAAOnC,EAAEouG,UAAU,EAAE,EAAE6J,EAAEwe,aAAa,SAASz2H,EAAE0U,GAAG,IAAIA,EAAE,OAAO1U,EAAE,IAAIuH,EAAET,EAAE4N,EAAEogH,OAAOx8G,EAAE2/F,EAAE7qB,MAAMvG,EAAEvuE,EAAEk+G,mBAAmBloH,EAAEgK,EAAE0+G,sBAAsB7wC,EAAE7tE,EAAE2+G,kBAAkBvnC,EAAEp3E,EAAE4+G,WAAW,GAAGrwC,IAAIt/E,EAAET,EAAExH,MAAM,MAAM+hG,QAAQ95F,EAAEA,EAAE6U,KAAK,MAAM9N,GAAGoG,EAAEsgH,aAAaztH,EAAET,EAAExH,MAAM,MAAM,GAAGiI,EAAE,GAAGqG,QAAQ,MAAM,GAAGwmH,OAAO1/G,EAAEugH,eAAe,MAAM1tH,EAAEA,EAAE6U,KAAK,MAAM7U,EAAET,GAAG9G,GAAG,IAAIA,EAAE0G,OAAO,OAAOmgF,EAAE,GAAGoxB,EAAE7qB,MAAMt7E,OAAO,GAAG9R,GAAGA,EAAE0G,OAAO,IAAIa,IAAImoF,EAAE,OAAO7I,EAAE7mF,EAAEi4G,EAAE7qB,MAAMt7E,OAAO9R,EAAE,IAAIsU,EAAEi+E,EAAEwe,IAAIxpG,GAAG,SAASvH,EAAE0U,GAAG,GAAG,IAAI1U,EAAEm3H,cAAczwH,OAAO,OAAO1G,EAAE,GAAG,MAAM0U,EAAE,MAAM,CAAC0iH,cAAcp3H,EAAEo3H,cAAc1iH,EAAEyiH,cAAcn3H,EAAEm3H,eAAe,IAAIlf,EAAE1wG,EAAEnB,EAAE6xG,EAAEj4G,EAAEm3H,gBAAgBhwC,EAAE8wB,IAAInH,IAAIhqG,EAAES,EAAE,GAAG+Q,EAAE/Q,EAAElG,MAAM,GAAG,MAAM,CAAC+1H,cAAcp3H,EAAEo3H,cAActwH,EAAEqwH,cAAc7+G,EAAE,GAAG,CAAC8+G,cAAc,GAAGD,cAAcn3H,EAAEV,MAAM,MAAM,OAAOgV,EAAE6xE,EAAEoM,EAAE6kC,cAAc7kC,EAAE4kC,cAAc/6G,KAAK,IAAIm2E,EAAE6kC,eAAe3kC,SAAS,OAAOn+E,EAAEm+E,SAAS,OAAOn+E,GAAG,KAAKA,CAAC,EAAE2jG,EAAEof,YAAY,WAAW,IAAIr3H,EAAEi4G,EAAEqf,eAAe,GAAGxtC,SAASkK,gBAAgBh0F,EAAE,CAACA,EAAEquG,QAAQ,IAAI35F,EAAE1U,EAAEL,MAAM+G,OAAO,MAAM1G,EAAEL,MAAMmnF,OAAOpyE,EAAE,KAAKA,GAAG,GAAG1U,EAAEu3H,kBAAkB7iH,EAAEA,EAAE,CAAC,EAAEujG,EAAEuf,WAAW,SAASx3H,GAAG,OAAOi4G,EAAE,WAAWlI,OAAO/vG,GAAG,EAAEi4G,EAAEwf,eAAe,WAAW,OAAOxf,EAAE+J,MAAMsU,gBAAgB,CAAC1uH,KAAKqwG,EAAE+J,MAAMsU,gBAAgB1uH,MAAM,GAAGitH,SAAS5c,EAAE+J,MAAMsU,gBAAgBzB,UAAU,GAAGD,YAAY3c,EAAE+J,MAAMsU,gBAAgB3B,MAAM,GAAGG,OAAO7c,EAAE+J,MAAMsU,gBAAgBxB,QAAQ,IAAI,CAAC,CAAC,EAAE7c,EAAEyf,wBAAwB,SAAS13H,GAAG,GAAGA,EAAEqjG,iBAAiB4U,EAAE+J,MAAM2V,eAAe1f,EAAE7qB,MAAM6H,SAAS,CAAC,IAAIvgF,EAAEujG,EAAE+J,MAAMz6G,EAAEmN,EAAEqhH,mBAAmB5uC,EAAEzyE,EAAEohH,cAAchvH,EAAE4N,EAAE4hH,gBAAgBlwH,EAAE6xG,EAAE2f,yBAAyBrwH,EAAE4/E,GAAGkuC,WAAW,SAASr1H,GAAG,OAAOA,EAAE60H,WAAW/tH,EAAE+tH,UAAU70H,EAAE20H,OAAO7tH,EAAE6tH,IAAI,IAAI1c,EAAEoe,SAAS,CAACsB,cAAc1f,EAAE+J,MAAM2V,aAAaE,sBAAsBzxH,IAAI,WAAW6xG,EAAE+J,MAAM2V,cAAc1f,EAAEye,SAASze,EAAEuf,WAAWvf,EAAE+J,MAAM6V,uBAAuB,GAAG,CAAC,EAAE5f,EAAE6f,YAAY,SAAS93H,GAAG,IAAI0U,EAAE1U,EAAE4M,OAAOjN,MAAM4H,EAAE0wG,EAAE7qB,MAAMjG,EAAE5/E,EAAEuK,OAAOhL,EAAES,EAAEwwH,SAAS3xH,EAAE6xG,EAAE7qB,MAAMopC,mBAAmB,GAAGrvC,EAAE2pB,EAAEmH,EAAE+J,MAAMsU,gBAAgBh+G,EAAE2/F,EAAE+J,MAAMgW,gBAAgB,IAAI/f,EAAE7qB,MAAM6qC,oBAAoB,CAAC,IAAIpxC,EAAEM,GAAG2pB,EAAEqkB,aAAald,EAAE+J,MAAM8T,cAAchpH,MAAM,SAAS9M,GAAG,OAAOA,EAAE20H,OAAO7jB,EAAE6jB,MAAM30H,EAAEk1H,QAAQ,IAAIL,SAAS/jB,EAAE+jB,UAAU,GAAGngH,EAAErT,MAAM,EAAEwlF,EAAEngF,UAAUmgF,EAAE,MAAM,CAAC,GAAGnyE,IAAIyyE,EAAE,OAAOrgF,GAAGA,EAAE,GAAGmxG,EAAEwf,iBAAiBz3H,EAAE,IAAIi4G,EAAEoe,SAAS,CAACE,gBAAgB,KAAK,GAAG7hH,EAAE9G,QAAQ,MAAM,IAAIlH,OAAO,GAAG,CAAC,IAAG,IAAKuxG,EAAE7qB,MAAM6pC,kBAAkB,OAAO,GAAG,iBAAiBhf,EAAE7qB,MAAM6pC,mBAAmBviH,EAAE9G,QAAQ,MAAM,IAAIlH,OAAOuxG,EAAE7qB,MAAM6pC,kBAAkB,MAAM,CAAC,GAAGviH,IAAIujG,EAAE+J,MAAMuU,gBAAgB,CAACv2H,EAAEqjG,eAAerjG,EAAEqjG,iBAAiBrjG,EAAEmjG,aAAY,EAAG,IAAI70F,EAAE2pG,EAAE7qB,MAAM8qC,QAAQ/xC,EAAE8xB,EAAE+J,MAAMtyB,EAAEvJ,EAAE2vC,cAAcxhH,EAAE6xE,EAAEmwC,gBAAgB/jC,EAAEpM,EAAE6vC,gBAAgB,GAAGlvH,GAAG9G,EAAEujG,UAAU7uF,EAAEhO,OAAO,EAAE,CAAC,IAAIoiF,EAAEp0E,EAAE9G,QAAQ,MAAM,MAAMqqG,EAAE+J,MAAMgW,iBAAiB1jH,GAAGA,EAAEugH,SAASnuH,OAAOoiF,EAAEpiF,UAAUoqG,EAAEmH,EAAE7qB,MAAM+qC,oBAAoB7jH,EAAE2jG,EAAEie,qBAAqBptC,EAAE5nE,UAAU,EAAE,GAAG5S,EAAEohF,EAAE6C,IAAIj+E,EAAEgE,GAAE,GAAIlS,EAAE6xG,EAAEwe,aAAa3tC,EAAEgoB,GAAGA,EAAEA,EAAE+jB,SAAS/jB,EAAEx8F,CAAC,CAAC,IAAI4jG,EAAEl4G,EAAE4M,OAAOsgG,eAAene,EAAE/uF,EAAE4M,OAAOsgG,eAAevd,EAAEsoB,EAAE+J,MAAMuU,gBAAgBl5G,EAAEjX,EAAEM,OAAOipF,EAAEjpF,OAAOuxG,EAAEoe,SAAS,CAACE,gBAAgBnwH,EAAE4xH,gBAAgB1/G,EAAEg+G,gBAAgBxlB,IAAI,WAAWzzF,EAAE,IAAI0xE,GAAG1xE,GAAG,KAAKjX,EAAE0gF,OAAO1gF,EAAEM,OAAO,GAAGuxG,EAAEqf,eAAeC,kBAAkBnxH,EAAEM,OAAO,EAAEN,EAAEM,OAAO,GAAGqoF,EAAE,GAAGY,EAAEjpF,QAAQN,EAAEM,OAAOuxG,EAAEqf,eAAeC,kBAAkBxoC,EAAEA,GAAGmpB,EAAEvoB,EAAEjpF,QAAQuxG,EAAEqf,eAAeC,kBAAkBrf,EAAEA,GAAGpxG,GAAGA,EAAEV,EAAEwH,QAAQ,WAAW,IAAIqqG,EAAEwf,iBAAiBz3H,EAAEoG,EAAE,GAAG,CAAC,EAAE6xG,EAAEmgB,iBAAiB,SAASp4H,GAAGi4G,EAAEoe,SAAS,CAACsB,cAAa,IAAK1f,EAAE7qB,MAAMo6B,SAASvP,EAAE7qB,MAAMo6B,QAAQxnH,EAAEi4G,EAAEwf,iBAAiB,EAAExf,EAAEogB,kBAAkB,SAASr4H,GAAG,IAAI0U,EAAE1U,EAAE4M,OAAOjN,MAAM+G,OAAO1G,EAAE4M,OAAO2qH,kBAAkB,EAAE7iH,EAAE,EAAEujG,EAAEqgB,oBAAoB,SAASt4H,EAAE0U,GAAG,IAAInN,EAAE0wG,EAAE+J,MAAMsU,gBAAgBnvC,EAAE8wB,EAAE+J,MAAM8T,cAAchpH,MAAM,SAAS4H,GAAG,OAAOA,GAAG1U,CAAC,IAAI,GAAGmnF,EAAE,CAAC,IAAIrgF,EAAEmxG,EAAE+J,MAAMuU,gBAAgB3oH,QAAQ,IAAI,IAAIA,QAAQ,IAAI,IAAIA,QAAQ,IAAI,IAAIA,QAAQ,IAAI,IAAIxH,EAAEU,EAAEJ,OAAO,EAAEI,EAAE8G,QAAQrG,EAAEstH,SAAS1tC,EAAE0tC,UAAU1tC,EAAE0tC,SAAS/jB,EAAEmH,EAAEwe,aAAarwH,EAAEwH,QAAQ,MAAM,IAAIu5E,GAAG8wB,EAAEoe,SAAS,CAACsB,cAAa,EAAGrB,gBAAgBnvC,EAAE6wC,iBAAgB,EAAGzB,gBAAgBzlB,EAAEynB,YAAY,KAAK,WAAWtgB,EAAEof,cAAcpf,EAAE7qB,MAAM2qC,UAAU9f,EAAE7qB,MAAM2qC,SAASjnB,EAAEljG,QAAQ,WAAW,IAAIqqG,EAAEwf,iBAAiB/iH,EAAEo8F,EAAE,GAAG,CAAC,EAAEmH,EAAEugB,iBAAiB,SAASx4H,GAAGi4G,EAAEqf,gBAAgBrf,EAAEqf,eAAe33H,QAAQs4G,EAAE7qB,MAAMt7E,QAAQmmG,EAAE+J,MAAMsU,kBAAkBre,EAAE7qB,MAAMopC,oBAAoBve,EAAEoe,SAAS,CAACE,gBAAgBte,EAAE7qB,MAAMt7E,OAAOmmG,EAAE+J,MAAMsU,gBAAgBzB,WAAW,WAAW5c,EAAE7qB,MAAMqrC,iBAAiBt0H,WAAW8zG,EAAEof,YAAY,EAAE,IAAIpf,EAAEoe,SAAS,CAACqC,YAAY,KAAKzgB,EAAE7qB,MAAMurC,SAAS1gB,EAAE7qB,MAAMurC,QAAQ34H,EAAEi4G,EAAEwf,kBAAkBxf,EAAE7qB,MAAMqrC,iBAAiBt0H,WAAW8zG,EAAEof,YAAY,EAAE,EAAEpf,EAAE2gB,gBAAgB,SAAS54H,GAAGA,EAAE4M,OAAOjN,OAAOs4G,EAAEoe,SAAS,CAACqC,YAAYzgB,EAAE7qB,MAAMsrC,cAAczgB,EAAE7qB,MAAMyrC,QAAQ5gB,EAAE7qB,MAAMyrC,OAAO74H,EAAEi4G,EAAEwf,iBAAiB,EAAExf,EAAE6gB,gBAAgB,SAAS94H,GAAG,GAAGi4G,EAAE7qB,MAAM2rC,gBAAgB,CAAC,IAAIrkH,EAAEnW,OAAO+uG,eAAe5lG,WAAWkG,QAAQ,WAAW,IAAI5N,EAAEqmG,cAAc2yB,QAAQ,aAAatkH,GAAG1U,EAAEqjG,gBAAgB,CAAC,EAAE4U,EAAEghB,yBAAyB,SAASj5H,GAAG,IAAI0U,EAAEujG,EAAE+J,MAAM6V,sBAAsB73H,EAAE,OAAO0U,EAAE,GAAGA,GAAGujG,EAAE+J,MAAM8T,cAAcpvH,OAAOuxG,EAAE+J,MAAM+T,mBAAmBrvH,OAAOgO,EAAE1U,EAAEi4G,EAAE7qB,MAAM0pC,cAAcpiH,EAAEujG,EAAEihB,6BAA6BxyH,OAAO,EAAEgO,CAAC,EAAEujG,EAAEkhB,cAAc,WAAW,IAAIn5H,EAAEi4G,EAAEge,qBAAqBhe,EAAE+J,MAAMoX,cAAcnhB,EAAE+J,MAAM8T,cAAc,GAAGphH,EAAEujG,EAAE+J,MAAM8T,cAAcT,WAAW,SAAS3gH,GAAG,OAAOA,GAAG1U,CAAC,IAAIi4G,EAAE+J,MAAM+T,mBAAmBrvH,OAAOuxG,EAAEye,SAASze,EAAEuf,WAAW9iH,IAAG,GAAIujG,EAAEoe,SAAS,CAAC+C,YAAY,GAAGvB,sBAAsBnjH,GAAG,EAAEujG,EAAEohB,cAAc,SAASr5H,GAAG,IAAI0U,EAAEujG,EAAE7qB,MAAMl5E,KAAK3M,EAAEvH,EAAE4M,OAAO0sH,UAAU,GAAG/xH,EAAEkrF,SAAS,kBAAkBzyF,EAAE8nG,QAAQpzF,EAAE6kH,QAAQthB,EAAE+J,MAAM2V,aAAa,OAAO1f,EAAEyf,wBAAwB13H,GAAG,GAAGuH,EAAEkrF,SAAS,kBAAkBzyF,EAAE8nG,QAAQpzF,EAAE6kH,OAAOv5H,EAAE8nG,QAAQpzF,EAAE8kH,KAAK,OAAOx5H,EAAE4M,OAAO6sH,OAAO,GAAGxhB,EAAE+J,MAAM2V,eAAe1f,EAAE7qB,MAAM6H,YAAY1tF,EAAEkrF,SAAS,eAAezyF,EAAE8nG,QAAQpzF,EAAEglH,IAAI15H,EAAE8nG,QAAQpzF,EAAEilH,MAAM35H,EAAE8nG,QAAQpzF,EAAE6kH,OAAOv5H,EAAE8nG,QAAQpzF,EAAE8kH,KAAK,KAAKx5H,EAAE4M,OAAOjN,OAAO,CAACK,EAAEqjG,eAAerjG,EAAEqjG,iBAAiBrjG,EAAEmjG,aAAY,EAAG,IAAIhc,EAAE,SAASnnF,GAAGi4G,EAAEoe,SAAS,CAACwB,sBAAsB5f,EAAEghB,yBAAyBj5H,KAAK,WAAWi4G,EAAEye,SAASze,EAAEuf,WAAWvf,EAAE+J,MAAM6V,wBAAuB,EAAG,GAAG,EAAE,OAAO73H,EAAE8nG,OAAO,KAAKpzF,EAAEilH,KAAKxyC,EAAE,GAAG,MAAM,KAAKzyE,EAAEglH,GAAGvyC,GAAG,GAAG,MAAM,KAAKzyE,EAAE6kH,MAAMthB,EAAE7qB,MAAM0pC,aAAa7e,EAAEqgB,oBAAoBrgB,EAAEihB,6BAA6BjhB,EAAE+J,MAAM6V,wBAAwB5f,EAAEihB,6BAA6B,GAAGl5H,GAAGi4G,EAAEqgB,oBAAoB,GAAGvoB,OAAOjpG,EAAEmxG,EAAE+J,MAAM+T,oBAAoBjvH,EAAEmxG,EAAE+J,MAAM8T,gBAAgB7d,EAAE+J,MAAM6V,uBAAuB73H,GAAG,MAAM,KAAK0U,EAAE8kH,IAAI,KAAK9kH,EAAEklH,IAAI3hB,EAAEoe,SAAS,CAACsB,cAAa,GAAI1f,EAAEof,aAAa,MAAM,SAASr3H,EAAE8nG,OAAOpzF,EAAEq9E,GAAG/xF,EAAE8nG,OAAOpzF,EAAEk2G,GAAG5qH,EAAE8nG,QAAQpzF,EAAEmlH,QAAQ5hB,EAAEoe,SAAS,CAAC+C,YAAYnhB,EAAE+J,MAAMoX,YAAYn5H,OAAOC,aAAaF,EAAE8nG,QAAQmQ,EAAE+J,MAAM8X,6BAA6B,CAAC,EAAE7hB,EAAE8hB,mBAAmB,SAAS/5H,GAAG,IAAI0U,EAAEujG,EAAE7qB,MAAM7lF,EAAEmN,EAAER,KAAKizE,EAAEzyE,EAAEslH,gBAAgBlzH,EAAE4N,EAAEulH,UAAUj6H,EAAE8nG,QAAQvgG,EAAEgyH,OAAOpyC,GAAGA,EAAEnnF,GAAG8G,GAAGA,EAAE9G,EAAE,EAAEi4G,EAAEiiB,mBAAmB,SAASl6H,GAAGi4G,EAAE0e,cAAc1e,EAAEkiB,qBAAqB5tB,SAASvsG,EAAE4M,SAASqrG,EAAE+J,MAAM2V,cAAc1f,EAAEoe,SAAS,CAACsB,cAAa,GAAI,EAAE1f,EAAEmiB,mBAAmB,SAASp6H,GAAG,IAAI0U,EAAE1U,EAAEgjG,cAAcrjG,MAAM4H,EAAE0wG,EAAE+J,MAAM76B,EAAE5/E,EAAEwuH,mBAAmBjvH,EAAES,EAAE+uH,gBAAgBlwH,EAAE,EAAE,GAAG,KAAKsO,GAAG5N,EAAE,CAAC,IAAIgqG,EAAEmH,EAAE+J,MAAM8T,cAAc1vH,EAAE6xG,EAAE2f,yBAAyBzwC,EAAE2pB,GAAGukB,WAAW,SAASr1H,GAAG,OAAOA,GAAG8G,CAAC,IAAI3C,YAAY,WAAW,OAAO8zG,EAAEye,SAASze,EAAEuf,WAAWpxH,GAAG,GAAG,IAAI,CAAC6xG,EAAEoe,SAAS,CAACkC,YAAY7jH,EAAEmjH,sBAAsBzxH,GAAG,EAAE6xG,EAAE2f,yBAAyB,SAAS53H,EAAE0U,GAAG,OAAO1U,EAAE0G,OAAO,EAAEI,EAAE,IAAImC,IAAIjJ,EAAE+vG,OAAOr7F,KAAKA,CAAC,EAAEujG,EAAEoiB,uBAAuB,SAASr6H,GAAG,OAAOA,EAAE4Q,WAAW5Q,EAAE4H,IAAI,EAAEqwG,EAAEihB,2BAA2B,WAAW,IAAIl5H,EAAEi4G,EAAE+J,MAAMttG,EAAE1U,EAAE+1H,mBAAmBxuH,EAAEvH,EAAE81H,cAAc3uC,EAAEnnF,EAAEu4H,YAAYnyH,EAAE6xG,EAAE7qB,MAAM0pC,aAAahmB,EAAEmH,EAAE2f,yBAAyBljH,EAAEnN,GAAG+Q,EAAE6uE,EAAEvnF,OAAOP,cAAcuO,QAAQ,IAAI,IAAI,GAAGxH,GAAGkS,EAAE,CAAC,GAAG,QAAQxQ,KAAKwQ,GAAG,OAAOw4F,EAAE98F,QAAQ,SAAShU,GAAG,IAAI0U,EAAE1U,EAAE60H,SAAS,MAAM,CAAC,GAAG9kB,OAAOr7F,IAAI6gH,MAAM,SAASv1H,GAAG,OAAOA,EAAEX,cAAcozF,SAASn6E,EAAE,GAAG,IAAI,IAAIuuE,EAAEiqB,EAAE98F,QAAQ,SAAShU,GAAG,IAAI0U,EAAE1U,EAAE20H,KAAK,MAAM,CAAC,GAAG5kB,OAAOr7F,IAAI6gH,MAAM,SAASv1H,GAAG,OAAOA,EAAEX,cAAcozF,SAASn6E,EAAE,GAAG,IAAIhK,EAAEwiG,EAAE98F,QAAQ,SAAShU,GAAG,IAAI0U,EAAE1U,EAAE4H,KAAKqwG,EAAEj4G,EAAE4Q,UAAiB,OAAP5Q,EAAE20H,KAAW,CAAC,GAAG5kB,OAAOr7F,GAAG,GAAGq7F,OAAOkI,GAAG,KAAKsd,MAAM,SAASv1H,GAAG,OAAOA,EAAEX,cAAcozF,SAASn6E,EAAE,GAAG,IAAI,OAAO2/F,EAAE8e,cAAcjwH,EAAE,IAAImC,IAAI,GAAG8mG,OAAOlpB,EAAEv4E,IAAI,CAAC,OAAOwiG,CAAC,EAAEmH,EAAEqiB,uBAAuB,WAAW,IAAIt6H,EAAEi4G,EAAE+J,MAAMttG,EAAE1U,EAAE+1H,mBAAmB5uC,EAAEnnF,EAAE63H,sBAAsB/wH,EAAE9G,EAAE23H,aAAavxH,EAAEpG,EAAEu4H,YAAYznB,EAAEmH,EAAE7qB,MAAM90E,EAAEw4F,EAAEypB,gBAAgB1zC,EAAEiqB,EAAEh/F,OAAOxD,EAAE2pG,EAAE7qB,MAAMjH,EAAE73E,EAAEwoH,aAAapnC,EAAEphF,EAAEksH,eAAelmH,EAAEhG,EAAEmsH,kBAAkBloC,EAAEjkF,EAAEosH,YAAY5xC,EAAEx6E,EAAEqsH,YAAY5rC,EAAEzgF,EAAEssH,kBAAkBjrC,EAAErhF,EAAEusH,mBAAmBx9G,EAAE46F,EAAEihB,6BAA6Bx6G,KAAK,SAAS1e,EAAE0U,GAAG,IAAInN,EAAE4/E,IAAIzyE,EAAE5N,EAAEo1G,IAAI,CAACgc,SAAQ,EAAG4C,UAAU,OAAO96H,EAAE20H,MAAM,OAAO30H,EAAE20H,KAAKoG,OAAO,OAAO/6H,EAAE20H,KAAKqG,UAAUzzH,IAAInB,EAAE,QAAQ2pG,OAAO/vG,EAAE20H,MAAM,OAAOzc,EAAE/wB,EAAEznE,cAAc,KAAKlY,OAAOmF,OAAO,CAACyqG,IAAI,SAASp3G,GAAG,OAAOi4G,EAAE,WAAWlI,OAAOr7F,IAAI1U,CAAC,EAAEoB,IAAI,WAAW2uG,OAAOr7F,GAAG,gBAAgB,WAAWq7F,OAAOr7F,GAAG4kH,UAAUxyH,EAAE,iBAAiB,IAAIm0H,SAAS3iH,EAAE,KAAK,IAAI,oBAAoBtY,EAAE20H,KAAKnN,QAAQ,SAAS9yG,GAAG,OAAOujG,EAAEqgB,oBAAoBt4H,EAAE0U,EAAE,EAAEwmH,KAAK,UAAU3zH,EAAE,CAAC,iBAAgB,GAAI,CAAC,GAAG2wG,EAAE/wB,EAAEznE,cAAc,MAAM,CAAC45G,UAAUlzH,IAAI8xG,EAAE/wB,EAAEznE,cAAc,OAAO,CAAC45G,UAAU,gBAAgBrhB,EAAEoiB,uBAAuBr6H,IAAIk4G,EAAE/wB,EAAEznE,cAAc,OAAO,CAAC45G,UAAU,aAAat5H,EAAE80H,OAAO7c,EAAEwe,aAAaz2H,EAAE60H,SAAS70H,GAAG6mF,EAAE7mF,EAAE60H,UAAU,IAAIv1B,EAAE4Y,EAAE/wB,EAAEznE,cAAc,KAAK,CAACte,IAAI,SAASk4H,UAAU,YAAY5kH,EAAEhO,OAAO,KAAKy/E,GAAGA,IAAI//E,EAAExG,SAASyd,EAAEoyG,OAAO/6G,EAAEhO,OAAO,EAAE44F,GAAG,IAAIyzB,EAAE7W,IAAI30G,EAAE,CAAC,gBAAe,EAAG4zH,MAAMr0H,GAAGmxG,EAAE7qB,MAAMguC,eAAc,IAAK,OAAOljB,EAAE/wB,EAAEznE,cAAc,KAAK,CAAC03F,IAAI,SAASp3G,GAAG,OAAOmmF,GAAGnmF,GAAGA,EAAEquG,QAAQ4J,EAAE0e,YAAY32H,CAAC,EAAEs5H,UAAUvG,EAAE/5B,MAAMif,EAAE7qB,MAAMiuC,cAAcH,KAAK,UAAUD,SAAS,KAAK90C,GAAG+xB,EAAE/wB,EAAEznE,cAAc,KAAK,CAAC45G,UAAUpd,IAAI30G,EAAE,CAAC+iG,QAAO,GAAI/X,EAAEA,MAAMj+E,GAAG4jG,EAAE/wB,EAAEznE,cAAc,OAAO,CAAC45G,UAAUpd,IAAI30G,EAAE,CAAC,gBAAe,GAAI,GAAGwoG,OAAOxd,EAAE,UAAUA,IAAI2oC,KAAK,MAAM,aAAa,oBAAoB,gBAAMhjB,EAAE/wB,EAAEznE,cAAc,QAAQ,CAAC45G,UAAUpd,IAAI30G,EAAE,CAAC,cAAa,GAAI,GAAGwoG,OAAOxd,EAAE,QAAQA,IAAIyG,MAAMlQ,EAAEppF,KAAK,SAASg5H,YAAY3pC,EAAE24B,WAAU,EAAG4T,aAAa3rC,EAAE,KAAK,MAAMhwF,MAAMyG,EAAE2xH,SAAS9f,EAAEmiB,sBAAsB/8G,EAAE3W,OAAO,EAAE2W,EAAE66F,EAAE/wB,EAAEznE,cAAc,KAAK,CAAC45G,UAAU,sBAAsBphB,EAAE/wB,EAAEznE,cAAc,OAAO,KAAKgwE,IAAI,EAAE,IAAI7I,EAAEv4E,EAAE,IAAIkuG,EAAEx8G,EAAEm2H,gBAAgBn2H,EAAEu7H,kBAAkBv7H,EAAE00H,QAAQ10H,EAAE81H,cAAc91H,EAAE+1H,mBAAmB/1H,EAAE61H,iBAAiB71H,EAAEw7H,cAAcx7H,EAAEy7H,MAAMz7H,EAAE+gG,SAAS/gG,EAAE07H,UAAU17H,EAAE27H,aAAa37H,EAAE8R,OAAO9R,EAAE47H,YAAY57H,EAAE67H,mBAAmBtpC,EAAEjkF,EAAEwnH,cAAchtC,EAAEx6E,EAAEynH,mBAAmBhnC,EAAEzgF,EAAE0nH,gBAAgB34G,EAAErd,EAAEL,MAAMK,EAAEL,MAAMiO,QAAQ,MAAM,IAAI,GAAGi5E,EAAE7mF,EAAE87H,2BAA2B,EAAEz+G,EAAE3W,OAAO,EAAEuxG,EAAEie,qBAAqB74G,EAAE6D,UAAU,EAAE,GAAGlhB,EAAEk4H,QAAQ3lC,EAAExD,IAAI,EAAE/uF,EAAEk4H,SAAS3lC,EAAEzlF,MAAM,SAAS4H,GAAG,OAAOA,EAAEigH,MAAM30H,EAAEk4H,OAAO,KAAK,EAAE,IAAInF,EAAE7L,EAAE7pG,EAAE3W,OAAO,GAAGmgF,IAAImsC,IAAI31G,EAAEwpE,EAAEguC,UAAUhuC,EAAEguC,SAAS,GAAG9B,EAAE,KAAK11G,GAAG,IAAIwpE,EAAE,GAAGoxB,EAAEwe,cAAcz2H,EAAEw2H,mBAAmB,GAAGtP,GAAG7pG,EAAEwpE,EAAEj/E,KAAKi/E,OAAE,GAAQ,IAAIgqB,EAAEte,EAAE8iC,WAAW,SAASr1H,GAAG,OAAOA,GAAG6mF,CAAC,IAAI,OAAOoxB,EAAE+J,MAAM,CAAC2V,aAAa33H,EAAE23H,aAAapB,gBAAgBxD,EAAE+C,cAAcvjC,EAAEwjC,mBAAmBjtC,EAAEktC,gBAAgBjnC,EAAEunC,gBAAgBzvC,EAAEgxC,sBAAsBhnB,EAAEuoB,YAAY,GAAGpB,iBAAgB,EAAG8B,4BAA4BnqC,IAAIsoB,EAAEkhB,cAAc,KAAKZ,YAAY,IAAItgB,CAAC,CAAC,IAAIA,EAAE3pG,EAAI,OAAO,SAAStO,EAAE0U,GAAG,GAAG,mBAAmBA,GAAG,OAAOA,EAAE,MAAM,IAAIzM,UAAU,sDAAsDjI,EAAEyH,UAAUD,OAAOm3G,OAAOjqG,GAAGA,EAAEjN,UAAU,CAACE,YAAY,CAAChI,MAAMK,EAAEq0H,UAAS,EAAG7gC,cAAa,KAAM9+E,GAAG69E,EAAEvyF,EAAE0U,EAAE,CAAjO,CAAmOA,EAAE1U,GAAGi4G,EAAEvjG,GAAGpG,EAAE,CAAC,CAAClN,IAAI,oBAAoBzB,MAAM,WAAWmqF,SAASyR,kBAAkBlzF,KAAK+kF,MAAM2uC,oBAAoBjyC,SAASyR,iBAAiB,YAAYlzF,KAAK6xH,oBAAoB7xH,KAAK+kF,MAAM4uC,SAAS3zH,KAAK+kF,MAAM4uC,QAAQ3zH,KAAK25G,MAAMuU,gBAAgB3oH,QAAQ,WAAW,IAAIvF,KAAKovH,iBAAiBpvH,KAAK25G,MAAMuU,gBAAgB,GAAG,CAACn1H,IAAI,uBAAuBzB,MAAM,WAAWmqF,SAAS0R,qBAAqBnzF,KAAK+kF,MAAM2uC,oBAAoBjyC,SAAS0R,oBAAoB,YAAYnzF,KAAK6xH,mBAAmB,GAAG,CAAC94H,IAAI,qBAAqBzB,MAAM,SAASK,EAAE0U,EAAEujG,GAAGj4G,EAAEk4H,UAAU7vH,KAAK+kF,MAAM8qC,QAAQ7vH,KAAK+tH,cAAc/tH,KAAK+kF,MAAM8qC,SAASl4H,EAAEL,QAAQ0I,KAAK+kF,MAAMztF,OAAO0I,KAAK4zH,sBAAsB5zH,KAAK+kF,MAAMztF,MAAM,GAAG,CAACyB,IAAI,wBAAwBzB,MAAM,SAASK,GAAG,GAAG,OAAOA,EAAE,OAAOqI,KAAKguH,SAAS,CAACC,gBAAgB,EAAEC,gBAAgB,KAAK,IAAI7hH,EAAErM,KAAK25G,MAAM/J,EAAEvjG,EAAEohH,cAAcvuH,EAAEmN,EAAE4hH,gBAAgBnvC,EAAEzyE,EAAEshH,gBAAgBlvH,EAAEuB,KAAK+kF,MAAMhnF,EAAEU,EAAEoxH,QAAQpnB,EAAEhqG,EAAEgL,OAAO,GAAG,KAAK9R,EAAE,OAAOqI,KAAKguH,SAAS,CAACC,gBAAgB/uH,EAAEgvH,gBAAgB,KAAK,IAAIj+G,EAAEuuE,EAAEv4E,EAAEtO,EAAE4N,QAAQ,MAAM,IAAI,GAAGrG,GAAGyrH,IAAIhzH,EAAE8wG,EAAEvpG,EAAEstH,UAAUhuC,EAAEx+E,KAAKouH,aAAanoH,EAAE/G,GAAGc,KAAKguH,SAAS,CAACE,gBAAgB1vC,QAAQ,CAAC,IAAIV,GAAG7tE,EAAEjQ,KAAK+kF,MAAM+qC,oBAAoB5wH,EAAEc,KAAK6tH,qBAAqB5nH,EAAE4S,UAAU,EAAE,GAAG9a,EAAE6xG,EAAE9wB,IAAI5/E,IAAIyrH,IAAI1kH,EAAEwiG,EAAEx4F,EAAEu8G,UAAUv8G,EAAEu8G,SAAS,GAAGhuC,EAAEx+E,KAAKouH,cAAcpuH,KAAK+kF,MAAMopC,mBAAmB,GAAGrwC,GAAG73E,EAAEgK,QAAG,GAAQjQ,KAAKguH,SAAS,CAACC,gBAAgBh+G,EAAEi+G,gBAAgB1vC,GAAG,CAAC,GAAG,CAACzlF,IAAI,SAASzB,MAAM,WAAW,IAAIK,EAAE0U,EAAEujG,EAAE9wB,EAAE9+E,KAAKvB,EAAEuB,KAAK25G,MAAM57G,EAAEU,EAAEgvH,cAAchlB,EAAEhqG,EAAEwvH,gBAAgBh+G,EAAExR,EAAE6wH,aAAa9wC,EAAE//E,EAAEyvH,gBAAgBjoH,EAAExH,EAAEkvH,gBAAgB7vC,EAAE99E,KAAK+kF,MAAMsC,EAAEvJ,EAAEo0C,gBAAgBjmH,EAAE6xE,EAAE+1C,mBAAmB3pC,EAAEpM,EAAEg2C,QAAQrzC,EAAE3C,EAAEi2C,oBAAoBrtC,EAAE5I,EAAEk2C,aAAa,GAAG,kBAAkB9pC,EAAE79E,EAAE69E,MAAM,CAAC,IAAI5C,EAAE4C,EAAE1L,EAAEj5E,QAAQ,MAAM,IAAIkjG,EAAE1qG,EAAEkI,GAAG,kBAAkBqhF,GAAE,KAAMj7E,EAAEi7E,KAAKsoB,EAAEnvB,IAAIp0E,GAAE,EAAGujG,EAAEtoB,EAAE,CAAC,IAAItyE,EAAE6+F,KAAK30G,EAAEvH,EAAE,CAAC,EAAEqI,KAAK+kF,MAAMkvC,gBAAe,GAAI/0H,EAAEvH,EAAE,mBAAkB,GAAIA,IAAIs/F,EAAE4c,IAAI,CAACqgB,OAAM,EAAGC,GAAGlkH,IAAIy6G,EAAE7W,IAAI30G,EAAE,CAAC,gBAAe,EAAG,kBAAkBmN,EAAE/O,KAAK2S,GAAGjQ,KAAK+kF,MAAMqvC,YAAW,IAAK1rB,EAAEmL,IAAI,CAAC,iBAAgB,EAAGv2G,KAAK2S,IAAI4uG,EAAEhL,IAAI30G,EAAE,CAAC,iBAAgB,EAAG,kBAAkBmN,EAAE/O,KAAK2S,GAAGjQ,KAAK+kF,MAAMsvC,aAAY,IAAK1J,EAAE,QAAQjjB,OAAOe,GAAGA,EAAE6jB,MAAM,OAAOzc,EAAE/wB,EAAEznE,cAAc,MAAM,CAAC45G,UAAU,GAAGvpB,OAAO1yF,EAAE,KAAK0yF,OAAO1nG,KAAK+kF,MAAMksC,WAAWtgC,MAAM3wF,KAAK+kF,MAAM4L,OAAO3wF,KAAK+kF,MAAMuvC,eAAe1C,UAAU5xH,KAAKgxH,eAAetqC,GAAGmpB,EAAE/wB,EAAEznE,cAAc,MAAM,CAAC45G,UAAU,iBAAiBvqC,GAAGkpB,GAAGC,EAAE/wB,EAAEznE,cAAc,MAAM,CAAC45G,UAAU,0BAA0BrhB,GAAGC,EAAE/wB,EAAEznE,cAAc,QAAQlY,OAAOmF,OAAO,CAAC2sH,UAAUvG,EAAE/5B,MAAM3wF,KAAK+kF,MAAMwvC,WAAW7E,SAAS1vH,KAAKyvH,YAAYtQ,QAAQn/G,KAAK+vH,iBAAiByE,cAAcx0H,KAAKgwH,kBAAkBM,QAAQtwH,KAAKmwH,iBAAiBK,OAAOxwH,KAAKuwH,gBAAgBkE,OAAOz0H,KAAKywH,gBAAgBn5H,MAAMknF,EAAEozC,UAAU5xH,KAAK0xH,mBAAmBrB,YAAYrwH,KAAK+kF,MAAMsrC,YAAYzjC,SAAS5sF,KAAK+kF,MAAM6H,SAASv1F,KAAK,OAAO2I,KAAK+kF,MAAM2vC,WAAW,CAAC3lB,IAAI,SAASp3G,GAAGmnF,EAAEmwC,eAAet3H,EAAE,mBAAmBmnF,EAAEiG,MAAM2vC,WAAW3lB,IAAIjwB,EAAEiG,MAAM2vC,WAAW3lB,IAAIp3G,GAAG,iBAAiBmnF,EAAEiG,MAAM2vC,WAAW3lB,MAAMjwB,EAAEiG,MAAM2vC,WAAW3lB,IAAI1lG,QAAQ1R,EAAE,KAAKk4G,EAAE/wB,EAAEznE,cAAc,MAAM,CAAC45G,UAAUpS,EAAEluB,MAAM3wF,KAAK+kF,MAAM4vC,YAAY5lB,IAAI,SAASp3G,GAAG,OAAOmnF,EAAEgzC,qBAAqBn6H,CAAC,GAAGsU,EAAE4jG,EAAE/wB,EAAEznE,cAAc,MAAM,CAAC45G,UAAUvoB,GAAGz8F,GAAG4jG,EAAE/wB,EAAEznE,cAAc,MAAM,CAAC8nG,QAAQ93B,OAAE,EAAOrnF,KAAKqvH,wBAAwB4B,UAAUvoB,EAAEksB,MAAMnsB,EAAE,GAAGf,OAAOe,EAAElgG,WAAWkgG,EAAElpG,KAAK,QAAQmoG,OAAOe,EAAE+jB,UAAU,GAAGoG,SAASvrC,EAAE,KAAK,IAAIwrC,KAAK,SAAS,gBAAgB,UAAU,kBAAkB5iH,QAAG,GAAQ4/F,EAAE/wB,EAAEznE,cAAc,MAAM,CAAC45G,UAAUtG,IAAItjC,GAAGwoB,EAAE/wB,EAAEznE,cAAc,MAAM,CAAC45G,UAAUh6B,MAAMhnF,GAAGjQ,KAAKiyH,0BAA0B,MAAMzzC,EAAEoxB,EAAExwG,UAAU6G,GAAaoG,CAAC,CAA7xf,CAA+xfwjG,EAAE/wB,EAAE+1C,WAAWlsB,EAAEmQ,aAAa,CAAC+W,QAAQ,GAAGv4H,MAAM,GAAGm2H,cAAc,GAAGC,mBAAmB,GAAGF,iBAAiB,GAAG6C,YAAY,mBAAmBkC,kBAAkB,SAASJ,eAAe,qBAAqB2C,eAAe,cAAcloC,UAAS,EAAG0nC,eAAe,CAAC,EAAEC,WAAW,CAAC,EAAEI,YAAY,CAAC,EAAE3B,cAAc,CAAC,EAAEV,YAAY,CAAC,EAAE2B,eAAe,GAAGG,WAAW,GAAGC,YAAY,GAAGtB,cAAc,GAAGV,YAAY,GAAGpB,UAAU,GAAGpC,YAAW,EAAGf,iBAAgB,EAAGoF,mBAAkB,EAAG/E,oBAAmB,EAAG+D,iBAAgB,EAAGtD,mBAAkB,EAAGgB,qBAAoB,EAAGnB,cAAa,EAAG2D,mBAAkB,EAAGqB,4BAA2B,EAAG3D,qBAAoB,EAAGzD,QAAQ,GAAGqI,WAAW,CAAC,EAAEpB,aAAa,CAAC,EAAEF,MAAM,KAAK16B,SAAS,KAAK26B,UAAU,KAAKF,cAAc,GAAGI,YAAY,qBAAqBC,mBAAkB,EAAG/pH,OAAO,IAAIinH,iBAAgB,EAAGmD,mBAAmB,GAAGrB,oBAAmB,EAAGpC,iBAAgB,EAAGzB,uBAAsB,EAAG+E,oBAAmB,EAAGpE,cAAa,EAAGwE,SAAQ,EAAGC,oBAAoB,GAAGC,aAAa,QAAQrC,gBAAgB,KAAK9lH,KAAK,CAACwlH,GAAG,GAAGC,KAAK,GAAGyD,MAAM,GAAGC,KAAK,GAAG9D,MAAM,GAAGC,IAAI,GAAG8D,KAAK,GAAGvrC,EAAE,GAAG64B,EAAE,GAAGiP,MAAM,GAAGD,IAAI,IAAIllH,EAAEk+G,QAAQ5hB,CAAC,gCCI/9qD,IAAI7qB,EAAE3nF,EAAQ,IAASkqF,EAAEzhF,OAAO8pF,IAAI,iBAAiBziF,EAAErH,OAAO8pF,IAAI,kBAAkBjI,EAAEthF,OAAOC,UAAUvB,eAAeqB,EAAE4+E,EAAE0K,mDAAmDizB,kBAAkBxvG,EAAE,CAAClT,KAAI,EAAGg2G,KAAI,EAAGmmB,QAAO,EAAGC,UAAS,GAChP,SAASxlB,EAAE1/F,EAAE6uE,EAAEwI,GAAG,IAAIZ,EAAEW,EAAE,CAAC,EAAE1vF,EAAE,KAAKuyF,EAAE,KAAiF,IAAIxD,UAAhF,IAASY,IAAI3vF,EAAE,GAAG2vF,QAAG,IAASxI,EAAE/lF,MAAMpB,EAAE,GAAGmnF,EAAE/lF,UAAK,IAAS+lF,EAAEiwB,MAAM7kB,EAAEpL,EAAEiwB,KAAcjwB,EAAE2B,EAAE5hF,KAAKigF,EAAE4H,KAAKz6E,EAAEpO,eAAe6oF,KAAKW,EAAEX,GAAG5H,EAAE4H,IAAI,GAAGz2E,GAAGA,EAAE6oG,aAAa,IAAIpyB,KAAK5H,EAAE7uE,EAAE6oG,kBAAe,IAASzxB,EAAEX,KAAKW,EAAEX,GAAG5H,EAAE4H,IAAI,MAAM,CAAC+D,SAASpK,EAAEhpF,KAAK4Y,EAAElX,IAAIpB,EAAEo3G,IAAI7kB,EAAEnF,MAAMsC,EAAE2nB,OAAO9vG,EAAEmK,QAAQ,CAAChT,EAAQ++H,SAASnvH,EAAE5P,EAAQg/H,IAAI1lB,EAAEt5G,EAAQi/H,KAAK3lB,4BCD7V,IAAI1pG,EAAErH,OAAO8pF,IAAI,iBAAiBxpF,EAAEN,OAAO8pF,IAAI,gBAAgBz8E,EAAErN,OAAO8pF,IAAI,kBAAkBinB,EAAE/wG,OAAO8pF,IAAI,qBAAqBknB,EAAEhxG,OAAO8pF,IAAI,kBAAkBr8E,EAAEzN,OAAO8pF,IAAI,kBAAkB+f,EAAE7pG,OAAO8pF,IAAI,iBAAiB1zE,EAAEpW,OAAO8pF,IAAI,qBAAqBggB,EAAE9pG,OAAO8pF,IAAI,kBAAkB8f,EAAE5pG,OAAO8pF,IAAI,cAAcmnB,EAAEjxG,OAAO8pF,IAAI,cAAcZ,EAAElpF,OAAOR,SACzW,IAAI02F,EAAE,CAACmkB,UAAU,WAAW,OAAM,CAAE,EAAEI,mBAAmB,WAAW,EAAED,oBAAoB,WAAW,EAAED,gBAAgB,WAAW,GAAGliB,EAAE93F,OAAOmF,OAAOyjG,EAAE,CAAC,EAAE,SAASwD,EAAEzsB,EAAE4H,EAAE/uF,GAAGqI,KAAK+kF,MAAMjG,EAAE9+E,KAAK8wG,QAAQpqB,EAAE1mF,KAAKkvG,KAAKnH,EAAE/nG,KAAK45G,QAAQjiH,GAAGm9F,CAAC,CACwI,SAAS6T,IAAI,CAAyB,SAAS6C,EAAE1sB,EAAE4H,EAAE/uF,GAAGqI,KAAK+kF,MAAMjG,EAAE9+E,KAAK8wG,QAAQpqB,EAAE1mF,KAAKkvG,KAAKnH,EAAE/nG,KAAK45G,QAAQjiH,GAAGm9F,CAAC,CADxPyW,EAAEnsG,UAAUymH,iBAAiB,CAAC,EACpQta,EAAEnsG,UAAU4uH,SAAS,SAASlvC,EAAE4H,GAAG,GAAG,kBAAkB5H,GAAG,oBAAoBA,GAAG,MAAMA,EAAE,MAAMrlF,MAAM,yHAAyHuG,KAAK45G,QAAQT,gBAAgBn5G,KAAK8+E,EAAE4H,EAAE,WAAW,EAAE6kB,EAAEnsG,UAAUm2H,YAAY,SAASz2C,GAAG9+E,KAAK45G,QAAQP,mBAAmBr5G,KAAK8+E,EAAE,cAAc,EAAgB6pB,EAAEvpG,UAAUmsG,EAAEnsG,UAAsF,IAAIssG,EAAEF,EAAEpsG,UAAU,IAAIupG,EACrf+C,EAAEpsG,YAAYksG,EAAEvU,EAAEyU,EAAEH,EAAEnsG,WAAWssG,EAAE8N,sBAAqB,EAAG,IAAI7L,EAAE10G,MAAMC,QAAQqvG,EAAEppG,OAAOC,UAAUvB,eAAes0G,EAAE,CAAC9oG,QAAQ,MAAM6pG,EAAE,CAACn6G,KAAI,EAAGg2G,KAAI,EAAGmmB,QAAO,EAAGC,UAAS,GACtK,SAASvhB,EAAE90B,EAAE4H,EAAE/uF,GAAG,IAAI0vF,EAAEp3E,EAAE,CAAC,EAAEowE,EAAE,KAAK6J,EAAE,KAAK,GAAG,MAAMxD,EAAE,IAAIW,UAAK,IAASX,EAAEqoB,MAAM7kB,EAAExD,EAAEqoB,UAAK,IAASroB,EAAE3tF,MAAMsnF,EAAE,GAAGqG,EAAE3tF,KAAK2tF,EAAE6hB,EAAE1pG,KAAK6nF,EAAEW,KAAK6rB,EAAEr1G,eAAewpF,KAAKp3E,EAAEo3E,GAAGX,EAAEW,IAAI,IAAIC,EAAEr9E,UAAU5L,OAAO,EAAE,GAAG,IAAIipF,EAAEr3E,EAAE88E,SAASp1F,OAAO,GAAG,EAAE2vF,EAAE,CAAC,IAAI,IAAIxJ,EAAE7kF,MAAMquF,GAAG7G,EAAE,EAAEA,EAAE6G,EAAE7G,IAAI3C,EAAE2C,GAAGx2E,UAAUw2E,EAAE,GAAGxwE,EAAE88E,SAASjP,CAAC,CAAC,GAAGgB,GAAGA,EAAEg6B,aAAa,IAAIzxB,KAAKC,EAAExI,EAAEg6B,kBAAe,IAAS7oG,EAAEo3E,KAAKp3E,EAAEo3E,GAAGC,EAAED,IAAI,MAAM,CAACoD,SAASxkF,EAAE5O,KAAKynF,EAAE/lF,IAAIsnF,EAAE0uB,IAAI7kB,EAAEnF,MAAM90E,EAAE++F,OAAOmD,EAAE9oG,QAAQ,CAChV,SAASyqG,EAAEh1B,GAAG,MAAM,kBAAkBA,GAAG,OAAOA,GAAGA,EAAE2L,WAAWxkF,CAAC,CAAoG,IAAIkuG,EAAE,OAAO,SAAS2B,EAAEh3B,EAAE4H,GAAG,MAAM,kBAAkB5H,GAAG,OAAOA,GAAG,MAAMA,EAAE/lF,IAA7K,SAAgB+lF,GAAG,IAAI4H,EAAE,CAAC,IAAI,KAAK,IAAI,MAAM,MAAM,IAAI5H,EAAEv5E,QAAQ,SAAQ,SAASu5E,GAAG,OAAO4H,EAAE5H,EAAE,GAAE,CAA+E02C,CAAO,GAAG12C,EAAE/lF,KAAK2tF,EAAErnF,SAAS,GAAG,CAC/W,SAASm4G,EAAE14B,EAAE4H,EAAE/uF,EAAE0vF,EAAEp3E,GAAG,IAAIowE,SAASvB,EAAK,cAAcuB,GAAG,YAAYA,IAAEvB,EAAE,MAAK,IAAIoL,GAAE,EAAG,GAAG,OAAOpL,EAAEoL,GAAE,OAAQ,OAAO7J,GAAG,IAAK,SAAS,IAAK,SAAS6J,GAAE,EAAG,MAAM,IAAK,SAAS,OAAOpL,EAAE2L,UAAU,KAAKxkF,EAAE,KAAK/G,EAAEgrF,GAAE,GAAI,GAAGA,EAAE,OAAWj6E,EAAEA,EAANi6E,EAAEpL,GAASA,EAAE,KAAKuI,EAAE,IAAIyuB,EAAE5rB,EAAE,GAAG7C,EAAEsmB,EAAE19F,IAAItY,EAAE,GAAG,MAAMmnF,IAAInnF,EAAEmnF,EAAEv5E,QAAQ4uG,EAAE,OAAO,KAAKqD,EAAEvnG,EAAEy2E,EAAE/uF,EAAE,IAAG,SAASmnF,GAAG,OAAOA,CAAC,KAAI,MAAM7uE,IAAI6jG,EAAE7jG,KAAKA,EADnW,SAAW6uE,EAAE4H,GAAG,MAAM,CAAC+D,SAASxkF,EAAE5O,KAAKynF,EAAEznF,KAAK0B,IAAI2tF,EAAEqoB,IAAIjwB,EAAEiwB,IAAIhqB,MAAMjG,EAAEiG,MAAMiqB,OAAOlwB,EAAEkwB,OAAO,CACyQ6E,CAAE5jG,EAAEtY,IAAIsY,EAAElX,KAAKmxF,GAAGA,EAAEnxF,MAAMkX,EAAElX,IAAI,IAAI,GAAGkX,EAAElX,KAAKwM,QAAQ4uG,EAAE,OAAO,KAAKr1B,IAAI4H,EAAEvtF,KAAK8W,IAAI,EAAyB,GAAvBi6E,EAAE,EAAE7C,EAAE,KAAKA,EAAE,IAAIA,EAAE,IAAOsmB,EAAE7uB,GAAG,IAAI,IAAIwI,EAAE,EAAEA,EAAExI,EAAEzgF,OAAOipF,IAAI,CAC/e,IAAIxJ,EAAEuJ,EAAEyuB,EADwez1B,EACrfvB,EAAEwI,GAAeA,GAAG4C,GAAGstB,EAAEn3B,EAAEqG,EAAE/uF,EAAEmmF,EAAE7tE,EAAE,MAAM,GAAG6tE,EAPsU,SAAWgB,GAAG,OAAG,OAAOA,GAAG,kBAAkBA,EAAS,KAAsC,oBAAjCA,EAAEgJ,GAAGhJ,EAAEgJ,IAAIhJ,EAAE,eAA0CA,EAAE,IAAI,CAO5b4K,CAAE5K,GAAG,oBAAoBhB,EAAE,IAAIgB,EAAEhB,EAAEj/E,KAAKigF,GAAGwI,EAAE,IAAIjH,EAAEvB,EAAEhgF,QAAQa,MAA6BuqF,GAAGstB,EAA1Bn3B,EAAEA,EAAE/oF,MAA0BovF,EAAE/uF,EAAtBmmF,EAAEuJ,EAAEyuB,EAAEz1B,EAAEiH,KAAkBr3E,QAAQ,GAAG,WAAWowE,EAAE,MAAMqG,EAAE9uF,OAAOknF,GAAGrlF,MAAM,mDAAmD,oBAAoBitF,EAAE,qBAAqBvnF,OAAO0M,KAAKizE,GAAG/qE,KAAK,MAAM,IAAI2yE,GAAG,6EAA6E,OAAOwD,CAAC,CACzZ,SAAS20B,EAAE//B,EAAE4H,EAAE/uF,GAAG,GAAG,MAAMmnF,EAAE,OAAOA,EAAE,IAAIuI,EAAE,GAAGp3E,EAAE,EAAmD,OAAjDunG,EAAE14B,EAAEuI,EAAE,GAAG,IAAG,SAASvI,GAAG,OAAO4H,EAAE7nF,KAAKlH,EAAEmnF,EAAE7uE,IAAI,IAAUo3E,CAAC,CAAC,SAASi4B,EAAExgC,GAAG,IAAI,IAAIA,EAAE22C,QAAQ,CAAC,IAAI/uC,EAAE5H,EAAE42C,SAAQhvC,EAAEA,KAAM+jB,MAAK,SAAS/jB,GAAM,IAAI5H,EAAE22C,UAAU,IAAI32C,EAAE22C,UAAQ32C,EAAE22C,QAAQ,EAAE32C,EAAE42C,QAAQhvC,EAAC,IAAE,SAASA,GAAM,IAAI5H,EAAE22C,UAAU,IAAI32C,EAAE22C,UAAQ32C,EAAE22C,QAAQ,EAAE32C,EAAE42C,QAAQhvC,EAAC,KAAI,IAAI5H,EAAE22C,UAAU32C,EAAE22C,QAAQ,EAAE32C,EAAE42C,QAAQhvC,EAAE,CAAC,GAAG,IAAI5H,EAAE22C,QAAQ,OAAO32C,EAAE42C,QAAQnL,QAAQ,MAAMzrC,EAAE42C,OAAQ,CAC5Z,IAAI/V,EAAE,CAACt2G,QAAQ,MAAMy2G,EAAE,CAACtmB,WAAW,MAAMwmB,EAAE,CAACvM,uBAAuBkM,EAAErmB,wBAAwBwmB,EAAErE,kBAAkBtJ,GAAG,SAASyO,IAAI,MAAMnnH,MAAM,2DAA4D,CACzMpD,EAAQs/H,SAAS,CAACt/G,IAAIwoG,EAAElmH,QAAQ,SAASmmF,EAAE4H,EAAE/uF,GAAGknH,EAAE//B,GAAE,WAAW4H,EAAE5uF,MAAMkI,KAAKiK,UAAU,GAAEtS,EAAE,EAAEihB,MAAM,SAASkmE,GAAG,IAAI4H,EAAE,EAAuB,OAArBm4B,EAAE//B,GAAE,WAAW4H,GAAG,IAAUA,CAAC,EAAEkvC,QAAQ,SAAS92C,GAAG,OAAO+/B,EAAE//B,GAAE,SAASA,GAAG,OAAOA,CAAC,KAAI,EAAE,EAAE+2C,KAAK,SAAS/2C,GAAG,IAAIg1B,EAAEh1B,GAAG,MAAMrlF,MAAM,yEAAyE,OAAOqlF,CAAC,GAAGzoF,EAAQw+H,UAAUtpB,EAAEl1G,EAAQ++H,SAASnpH,EAAE5V,EAAQy/H,SAASlmB,EAAEv5G,EAAQ0/H,cAAcvqB,EAAEn1G,EAAQ2/H,WAAWrmB,EAAEt5G,EAAQ4/H,SAASvtB,EAClcryG,EAAQmyF,mDAAmDw3B,EAAE3pH,EAAQ6/H,IAAItV,EACzEvqH,EAAQ8/H,aAAa,SAASr3C,EAAE4H,EAAE/uF,GAAG,GAAG,OAAOmnF,QAAG,IAASA,EAAE,MAAMrlF,MAAM,iFAAiFqlF,EAAE,KAAK,IAAIuI,EAAE4P,EAAE,CAAC,EAAEnY,EAAEiG,OAAO90E,EAAE6uE,EAAE/lF,IAAIsnF,EAAEvB,EAAEiwB,IAAI7kB,EAAEpL,EAAEkwB,OAAO,GAAG,MAAMtoB,EAAE,CAAoE,QAAnE,IAASA,EAAEqoB,MAAM1uB,EAAEqG,EAAEqoB,IAAI7kB,EAAEioB,EAAE9oG,cAAS,IAASq9E,EAAE3tF,MAAMkX,EAAE,GAAGy2E,EAAE3tF,KAAQ+lF,EAAEznF,MAAMynF,EAAEznF,KAAKyhH,aAAa,IAAIxxB,EAAExI,EAAEznF,KAAKyhH,aAAa,IAAIh7B,KAAK4I,EAAE6hB,EAAE1pG,KAAK6nF,EAAE5I,KAAKo1B,EAAEr1G,eAAeigF,KAAKuJ,EAAEvJ,QAAG,IAAS4I,EAAE5I,SAAI,IAASwJ,EAAEA,EAAExJ,GAAG4I,EAAE5I,GAAG,CAAC,IAAIA,EAAE7zE,UAAU5L,OAAO,EAAE,GAAG,IAAIy/E,EAAEuJ,EAAE0F,SAASp1F,OAAO,GAAG,EAAEmmF,EAAE,CAACwJ,EAAEruF,MAAM6kF,GACrf,IAAI,IAAI2C,EAAE,EAAEA,EAAE3C,EAAE2C,IAAI6G,EAAE7G,GAAGx2E,UAAUw2E,EAAE,GAAG4G,EAAE0F,SAASzF,CAAC,CAAC,MAAM,CAACmD,SAASxkF,EAAE5O,KAAKynF,EAAEznF,KAAK0B,IAAIkX,EAAE8+F,IAAI1uB,EAAE0E,MAAMsC,EAAE2nB,OAAO9kB,EAAE,EAAE7zF,EAAQ+/H,cAAc,SAASt3C,GAAqK,OAAlKA,EAAE,CAAC2L,SAASge,EAAE6H,cAAcxxB,EAAEu3C,eAAev3C,EAAEw3C,aAAa,EAAEC,SAAS,KAAKC,SAAS,KAAKC,cAAc,KAAKC,YAAY,OAAQH,SAAS,CAAC9rC,SAASp+E,EAAEq+E,SAAS5L,GAAUA,EAAE03C,SAAS13C,CAAC,EAAEzoF,EAAQghB,cAAcu8F,EAAEv9G,EAAQsgI,cAAc,SAAS73C,GAAG,IAAI4H,EAAEktB,EAAE70G,KAAK,KAAK+/E,GAAY,OAAT4H,EAAErvF,KAAKynF,EAAS4H,CAAC,EAAErwF,EAAQugI,UAAU,WAAW,MAAM,CAACvtH,QAAQ,KAAK,EAC9dhT,EAAQwgI,WAAW,SAAS/3C,GAAG,MAAM,CAAC2L,SAASz1E,EAAEu1E,OAAOzL,EAAE,EAAEzoF,EAAQygI,eAAehjB,EAAEz9G,EAAQ0gI,KAAK,SAASj4C,GAAG,MAAM,CAAC2L,SAASolB,EAAEllB,SAAS,CAAC8qC,SAAS,EAAEC,QAAQ52C,GAAG8L,MAAM00B,EAAE,EAAEjpH,EAAQ2gI,KAAK,SAASl4C,EAAE4H,GAAG,MAAM,CAAC+D,SAAS+d,EAAEnxG,KAAKynF,EAAEg9B,aAAQ,IAASp1B,EAAE,KAAKA,EAAE,EAAErwF,EAAQ4gI,gBAAgB,SAASn4C,GAAG,IAAI4H,EAAEo5B,EAAEtmB,WAAWsmB,EAAEtmB,WAAW,CAAC,EAAE,IAAI1a,GAAG,CAAC,QAAQghC,EAAEtmB,WAAW9S,CAAC,CAAC,EAAErwF,EAAQ6gI,aAAatW,EAAEvqH,EAAQshH,YAAY,SAAS74B,EAAE4H,GAAG,OAAOi5B,EAAEt2G,QAAQsuG,YAAY74B,EAAE4H,EAAE,EAAErwF,EAAQuhH,WAAW,SAAS94B,GAAG,OAAO6gC,EAAEt2G,QAAQuuG,WAAW94B,EAAE,EAC3fzoF,EAAQgiH,cAAc,WAAW,EAAEhiH,EAAQiiH,iBAAiB,SAASx5B,GAAG,OAAO6gC,EAAEt2G,QAAQivG,iBAAiBx5B,EAAE,EAAEzoF,EAAQwhH,UAAU,SAAS/4B,EAAE4H,GAAG,OAAOi5B,EAAEt2G,QAAQwuG,UAAU/4B,EAAE4H,EAAE,EAAErwF,EAAQqiH,MAAM,WAAW,OAAOiH,EAAEt2G,QAAQqvG,OAAO,EAAEriH,EAAQyhH,oBAAoB,SAASh5B,EAAE4H,EAAE/uF,GAAG,OAAOgoH,EAAEt2G,QAAQyuG,oBAAoBh5B,EAAE4H,EAAE/uF,EAAE,EAAEtB,EAAQ0hH,mBAAmB,SAASj5B,EAAE4H,GAAG,OAAOi5B,EAAEt2G,QAAQ0uG,mBAAmBj5B,EAAE4H,EAAE,EAAErwF,EAAQ2hH,gBAAgB,SAASl5B,EAAE4H,GAAG,OAAOi5B,EAAEt2G,QAAQ2uG,gBAAgBl5B,EAAE4H,EAAE,EACzdrwF,EAAQ4hH,QAAQ,SAASn5B,EAAE4H,GAAG,OAAOi5B,EAAEt2G,QAAQ4uG,QAAQn5B,EAAE4H,EAAE,EAAErwF,EAAQ6hH,WAAW,SAASp5B,EAAE4H,EAAE/uF,GAAG,OAAOgoH,EAAEt2G,QAAQ6uG,WAAWp5B,EAAE4H,EAAE/uF,EAAE,EAAEtB,EAAQ8hH,OAAO,SAASr5B,GAAG,OAAO6gC,EAAEt2G,QAAQ8uG,OAAOr5B,EAAE,EAAEzoF,EAAQ+hH,SAAS,SAASt5B,GAAG,OAAO6gC,EAAEt2G,QAAQ+uG,SAASt5B,EAAE,EAAEzoF,EAAQoiH,qBAAqB,SAAS35B,EAAE4H,EAAE/uF,GAAG,OAAOgoH,EAAEt2G,QAAQovG,qBAAqB35B,EAAE4H,EAAE/uF,EAAE,EAAEtB,EAAQkiH,cAAc,WAAW,OAAOoH,EAAEt2G,QAAQkvG,eAAe,EAAEliH,EAAQsf,QAAQ,oCCtBlavf,EAAOC,QAAU,EAAjBD,iCCAAA,EAAOC,QAAU,EAAjBD,+BCMW,SAAS0nF,EAAEgB,EAAE4H,GAAG,IAAIz2E,EAAE6uE,EAAEzgF,OAAOygF,EAAE3lF,KAAKutF,GAAG5H,EAAE,KAAK,EAAE7uE,GAAG,CAAC,IAAIo3E,EAAEp3E,EAAE,IAAI,EAAEtY,EAAEmnF,EAAEuI,GAAG,KAAG,EAAEC,EAAE3vF,EAAE+uF,IAA0B,MAAM5H,EAA7BA,EAAEuI,GAAGX,EAAE5H,EAAE7uE,GAAGtY,EAAEsY,EAAEo3E,CAAc,CAAC,CAAC,SAAS6C,EAAEpL,GAAG,OAAO,IAAIA,EAAEzgF,OAAO,KAAKygF,EAAE,EAAE,CAAC,SAASuB,EAAEvB,GAAG,GAAG,IAAIA,EAAEzgF,OAAO,OAAO,KAAK,IAAIqoF,EAAE5H,EAAE,GAAG7uE,EAAE6uE,EAAEkC,MAAM,GAAG/wE,IAAIy2E,EAAE,CAAC5H,EAAE,GAAG7uE,EAAE6uE,EAAE,IAAI,IAAIuI,EAAE,EAAE1vF,EAAEmnF,EAAEzgF,OAAOqqG,EAAE/wG,IAAI,EAAE0vF,EAAEqhB,GAAG,CAAC,IAAIjoB,EAAE,GAAG4G,EAAE,GAAG,EAAE4P,EAAEnY,EAAE2B,GAAGvhF,EAAEuhF,EAAE,EAAE+nB,EAAE1pB,EAAE5/E,GAAG,GAAG,EAAEooF,EAAE2P,EAAEhnF,GAAG/Q,EAAEvH,GAAG,EAAE2vF,EAAEkhB,EAAEvR,IAAInY,EAAEuI,GAAGmhB,EAAE1pB,EAAE5/E,GAAG+Q,EAAEo3E,EAAEnoF,IAAI4/E,EAAEuI,GAAG4P,EAAEnY,EAAE2B,GAAGxwE,EAAEo3E,EAAE5G,OAAQ,MAAGvhF,EAAEvH,GAAG,EAAE2vF,EAAEkhB,EAAEv4F,IAA0B,MAAM6uE,EAA7BA,EAAEuI,GAAGmhB,EAAE1pB,EAAE5/E,GAAG+Q,EAAEo3E,EAAEnoF,CAAc,EAAC,CAAC,OAAOwnF,CAAC,CAC3c,SAASY,EAAExI,EAAE4H,GAAG,IAAIz2E,EAAE6uE,EAAEq4C,UAAUzwC,EAAEywC,UAAU,OAAO,IAAIlnH,EAAEA,EAAE6uE,EAAEpoE,GAAGgwE,EAAEhwE,EAAE,CAAC,GAAG,kBAAkB0gH,aAAa,oBAAoBA,YAAYv7B,IAAI,CAAC,IAAI51F,EAAEmxH,YAAY/gI,EAAQ0+F,aAAa,WAAW,OAAO9uF,EAAE41F,KAAK,CAAC,KAAK,CAAC,IAAI5vF,EAAE2vF,KAAK+T,EAAE1jG,EAAE4vF,MAAMxlG,EAAQ0+F,aAAa,WAAW,OAAO9oF,EAAE4vF,MAAM8T,CAAC,CAAC,CAAC,IAAIC,EAAE,GAAGvjG,EAAE,GAAGo8F,EAAE,EAAEzzF,EAAE,KAAK66F,EAAE,EAAE/nB,GAAE,EAAG4B,GAAE,EAAGoL,GAAE,EAAGiT,EAAE,oBAAoBjsG,WAAWA,WAAW,KAAKyvG,EAAE,oBAAoBnwG,aAAaA,aAAa,KAAKutG,EAAE,qBAAqB0uB,aAAaA,aAAa,KACnT,SAAS7rB,EAAE1sB,GAAG,IAAI,IAAI4H,EAAEwD,EAAE79E,GAAG,OAAOq6E,GAAG,CAAC,GAAG,OAAOA,EAAEpwF,SAAS+pF,EAAEh0E,OAAQ,MAAGq6E,EAAE4wC,WAAWx4C,GAAgD,MAA9CuB,EAAEh0E,GAAGq6E,EAAEywC,UAAUzwC,EAAE6wC,eAAez5C,EAAE8xB,EAAElpB,EAAa,CAACA,EAAEwD,EAAE79E,EAAE,CAAC,CAAC,SAASq/F,EAAE5sB,GAAa,GAAVgW,GAAE,EAAG0W,EAAE1sB,IAAO4K,EAAE,GAAG,OAAOQ,EAAE0lB,GAAGlmB,GAAE,EAAGikB,EAAEpF,OAAO,CAAC,IAAI7hB,EAAEwD,EAAE79E,GAAG,OAAOq6E,GAAGyrB,EAAEzG,EAAEhlB,EAAE4wC,UAAUx4C,EAAE,CAAC,CACra,SAASypB,EAAEzpB,EAAE4H,GAAGgD,GAAE,EAAGoL,IAAIA,GAAE,EAAGyW,EAAE2H,GAAGA,GAAG,GAAGprB,GAAE,EAAG,IAAI73E,EAAE4/F,EAAE,IAAS,IAALrE,EAAE9kB,GAAO1xE,EAAEk1E,EAAE0lB,GAAG,OAAO56F,MAAMA,EAAEuiH,eAAe7wC,IAAI5H,IAAI80B,MAAM,CAAC,IAAIvsB,EAAEryE,EAAE1e,SAAS,GAAG,oBAAoB+wF,EAAE,CAACryE,EAAE1e,SAAS,KAAKu5G,EAAE76F,EAAEwiH,cAAc,IAAI7/H,EAAE0vF,EAAEryE,EAAEuiH,gBAAgB7wC,GAAGA,EAAErwF,EAAQ0+F,eAAe,oBAAoBp9F,EAAEqd,EAAE1e,SAASqB,EAAEqd,IAAIk1E,EAAE0lB,IAAIvvB,EAAEuvB,GAAGpE,EAAE9kB,EAAE,MAAMrG,EAAEuvB,GAAG56F,EAAEk1E,EAAE0lB,EAAE,CAAC,GAAG,OAAO56F,EAAE,IAAI0zF,GAAE,MAAO,CAAC,IAAIjoB,EAAEyJ,EAAE79E,GAAG,OAAOo0E,GAAG0xB,EAAEzG,EAAEjrB,EAAE62C,UAAU5wC,GAAGgiB,GAAE,CAAE,CAAC,OAAOA,CAAC,CAAC,QAAQ1zF,EAAE,KAAK66F,EAAE5/F,EAAE63E,GAAE,CAAE,CAAC,CAD1a,qBAAqB2vC,gBAAW,IAASA,UAAUC,iBAAY,IAASD,UAAUC,WAAWC,gBAAgBF,UAAUC,WAAWC,eAAe54H,KAAK04H,UAAUC,YAC2Q,IACzP7Y,EAD6PhL,GAAE,EAAGC,EAAE,KAAKZ,GAAG,EAAEiB,EAAE,EAAE2B,GAAG,EACvc,SAASlC,IAAI,QAAOv9G,EAAQ0+F,eAAe+gB,EAAE3B,EAAO,CAAC,SAASqD,IAAI,GAAG,OAAO1D,EAAE,CAAC,IAAIh1B,EAAEzoF,EAAQ0+F,eAAe+gB,EAAEh3B,EAAE,IAAI4H,GAAE,EAAG,IAAIA,EAAEotB,GAAE,EAAGh1B,EAAE,CAAC,QAAQ4H,EAAEm4B,KAAKhL,GAAE,EAAGC,EAAE,KAAK,CAAC,MAAMD,GAAE,CAAE,CAAO,GAAG,oBAAoBlL,EAAEkW,EAAE,WAAWlW,EAAE6O,EAAE,OAAO,GAAG,qBAAqBogB,eAAe,CAAC,IAAItY,EAAE,IAAIsY,eAAejY,EAAEL,EAAEuY,MAAMvY,EAAEwY,MAAMC,UAAUvgB,EAAEqH,EAAE,WAAWc,EAAEqY,YAAY,KAAK,CAAC,MAAMnZ,EAAE,WAAW9W,EAAEyP,EAAE,EAAE,EAAE,SAAS7J,EAAE7uB,GAAGg1B,EAAEh1B,EAAE+0B,IAAIA,GAAE,EAAGgL,IAAI,CAAC,SAAS1M,EAAErzB,EAAE4H,GAAGwsB,EAAEnL,GAAE,WAAWjpB,EAAEzoF,EAAQ0+F,eAAe,GAAErO,EAAE,CAC5drwF,EAAQq/F,sBAAsB,EAAEr/F,EAAQ8+F,2BAA2B,EAAE9+F,EAAQm/F,qBAAqB,EAAEn/F,EAAQk/F,wBAAwB,EAAEl/F,EAAQ4hI,mBAAmB,KAAK5hI,EAAQg/F,8BAA8B,EAAEh/F,EAAQo+F,wBAAwB,SAAS3V,GAAGA,EAAExoF,SAAS,IAAI,EAAED,EAAQ6hI,2BAA2B,WAAWxuC,GAAG5B,IAAI4B,GAAE,EAAGikB,EAAEpF,GAAG,EAC1UlyG,EAAQ8hI,wBAAwB,SAASr5C,GAAG,EAAEA,GAAG,IAAIA,EAAE1zE,QAAQnD,MAAM,mHAAmHksG,EAAE,EAAEr1B,EAAEx7E,KAAK80H,MAAM,IAAIt5C,GAAG,CAAC,EAAEzoF,EAAQ4+F,iCAAiC,WAAW,OAAO4a,CAAC,EAAEx5G,EAAQgiI,8BAA8B,WAAW,OAAOnuC,EAAE0lB,EAAE,EAAEv5G,EAAQiiI,cAAc,SAASx5C,GAAG,OAAO+wB,GAAG,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,IAAInpB,EAAE,EAAE,MAAM,QAAQA,EAAEmpB,EAAE,IAAI5/F,EAAE4/F,EAAEA,EAAEnpB,EAAE,IAAI,OAAO5H,GAAG,CAAC,QAAQ+wB,EAAE5/F,CAAC,CAAC,EAAE5Z,EAAQkiI,wBAAwB,WAAW,EAC9fliI,EAAQw+F,sBAAsB,WAAW,EAAEx+F,EAAQmiI,yBAAyB,SAAS15C,EAAE4H,GAAG,OAAO5H,GAAG,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,QAAQA,EAAE,EAAE,IAAI7uE,EAAE4/F,EAAEA,EAAE/wB,EAAE,IAAI,OAAO4H,GAAG,CAAC,QAAQmpB,EAAE5/F,CAAC,CAAC,EAChM5Z,EAAQk+F,0BAA0B,SAASzV,EAAE4H,EAAEz2E,GAAG,IAAIo3E,EAAEhxF,EAAQ0+F,eAA8F,OAA/E,kBAAkB9kF,GAAG,OAAOA,EAAaA,EAAE,kBAAZA,EAAEA,EAAEwoH,QAA6B,EAAExoH,EAAEo3E,EAAEp3E,EAAEo3E,EAAGp3E,EAAEo3E,EAASvI,GAAG,KAAK,EAAE,IAAInnF,GAAG,EAAE,MAAM,KAAK,EAAEA,EAAE,IAAI,MAAM,KAAK,EAAEA,EAAE,WAAW,MAAM,KAAK,EAAEA,EAAE,IAAI,MAAM,QAAQA,EAAE,IAAmN,OAAzMmnF,EAAE,CAACpoE,GAAG+xF,IAAInyG,SAASowF,EAAE8wC,cAAc14C,EAAEw4C,UAAUrnH,EAAEsnH,eAAvD5/H,EAAEsY,EAAEtY,EAAoEw/H,WAAW,GAAGlnH,EAAEo3E,GAAGvI,EAAEq4C,UAAUlnH,EAAE6tE,EAAEzxE,EAAEyyE,GAAG,OAAOoL,EAAE0lB,IAAI9wB,IAAIoL,EAAE79E,KAAKyoF,GAAGyW,EAAE2H,GAAGA,GAAG,GAAGpe,GAAE,EAAGqd,EAAEzG,EAAEz7F,EAAEo3E,MAAMvI,EAAEq4C,UAAUx/H,EAAEmmF,EAAE8xB,EAAE9wB,GAAG4K,GAAG5B,IAAI4B,GAAE,EAAGikB,EAAEpF,KAAYzpB,CAAC,EACnezoF,EAAQs+F,qBAAqBif,EAAEv9G,EAAQqiI,sBAAsB,SAAS55C,GAAG,IAAI4H,EAAEmpB,EAAE,OAAO,WAAW,IAAI5/F,EAAE4/F,EAAEA,EAAEnpB,EAAE,IAAI,OAAO5H,EAAEhnF,MAAMkI,KAAKiK,UAAU,CAAC,QAAQ4lG,EAAE5/F,CAAC,CAAC,CAAC,8BCf7J7Z,EAAOC,QAAU,EAAjBD,sBCDF,WACE,IAAIuiI,EACF,iIACEC,EAAsB,2BACtBC,EAAkB,oBAClBC,EAAsB,wCAEtBC,EAAa,CAOfC,iBAAkB,SAAUC,EAASC,EAAaC,GAKhD,GAJAA,EAAOA,GAAQ,CAAC,EAEhBF,EAAUA,EAAQ1hI,SAClB2hI,EAAcA,EAAY3hI,QACR,CAIhB,IAAK4hI,EAAKC,gBACR,OAAOH,EAET,IAAII,EAAwBN,EAAWO,SAASL,GAChD,IAAKI,EACH,MAAM,IAAI5/H,MAAM,mCAKlB,OAHA4/H,EAAsBE,KAAOR,EAAWS,cACtCH,EAAsBE,MAEjBR,EAAWU,kBAAkBJ,EACtC,CACA,IAAIK,EAAgBX,EAAWO,SAASJ,GACxC,IAAKQ,EACH,MAAM,IAAIjgI,MAAM,uCAElB,GAAIigI,EAAcC,OAGhB,OAAKR,EAAKC,iBAGVM,EAAcH,KAAOR,EAAWS,cAAcE,EAAcH,MACrDR,EAAWU,kBAAkBC,IAH3BR,EAKX,IAAIU,EAAYb,EAAWO,SAASL,GACpC,IAAKW,EACH,MAAM,IAAIngI,MAAM,mCAElB,IAAKmgI,EAAUC,QAAUD,EAAUL,MAA8B,MAAtBK,EAAUL,KAAK,GAAY,CAGpE,IAAIO,EAAYlB,EAAoBh5C,KAAKg6C,EAAUL,MACnDK,EAAUC,OAASC,EAAU,GAC7BF,EAAUL,KAAOO,EAAU,EAC7B,CACIF,EAAUC,SAAWD,EAAUL,OACjCK,EAAUL,KAAO,KAEnB,IAAIQ,EAAa,CAGfJ,OAAQC,EAAUD,OAClBE,OAAQH,EAAcG,OACtBN,KAAM,KACNhgI,OAAQmgI,EAAcngI,OACtBygI,MAAON,EAAcM,MACrBC,SAAUP,EAAcO,UAE1B,IAAKP,EAAcG,SAIjBE,EAAWF,OAASD,EAAUC,OAGA,MAA1BH,EAAcH,KAAK,IACrB,GAAKG,EAAcH,KAgBZ,CAKL,IAAIW,EAAcN,EAAUL,KACxBY,EACFD,EAAYrhH,UAAU,EAAGqhH,EAAY16C,YAAY,KAAO,GACxDk6C,EAAcH,KAChBQ,EAAWR,KAAOR,EAAWS,cAAcW,EAC7C,MAvBEJ,EAAWR,KAAOK,EAAUL,KAIvBG,EAAcngI,SACjBwgI,EAAWxgI,OAASqgI,EAAUrgI,OAIzBmgI,EAAcM,QACjBD,EAAWC,MAAQJ,EAAUI,QAqBvC,OALwB,OAApBD,EAAWR,OACbQ,EAAWR,KAAOJ,EAAKC,gBACnBL,EAAWS,cAAcE,EAAcH,MACvCG,EAAcH,MAEbR,EAAWU,kBAAkBM,EACtC,EACAT,SAAU,SAAUz/H,GAClB,IAAIugI,EAAQzB,EAAU/4C,KAAK/lF,GAC3B,OAAKugI,EAGE,CACLT,OAAQS,EAAM,IAAM,GACpBP,OAAQO,EAAM,IAAM,GACpBb,KAAMa,EAAM,IAAM,GAClB7gI,OAAQ6gI,EAAM,IAAM,GACpBJ,MAAOI,EAAM,IAAM,GACnBH,SAAUG,EAAM,IAAM,IARf,IAUX,EACAZ,cAAe,SAAUD,GAgBvB,IATAA,EAAOA,EAAKtiI,MAAM,IAAIojI,UAAUtmH,KAAK,IAAIxO,QAAQszH,EAAiB,IAUhEU,EAAKl7H,UAAYk7H,EAAOA,EAAKh0H,QAAQuzH,EAAqB,KAAKz6H,SAEjE,OAAOk7H,EAAKtiI,MAAM,IAAIojI,UAAUtmH,KAAK,GACvC,EACA0lH,kBAAmB,SAAUW,GAC3B,OACEA,EAAMT,OACNS,EAAMP,OACNO,EAAMb,KACNa,EAAM7gI,OACN6gI,EAAMJ,MACNI,EAAMH,QAEV,GAIA7jI,EAAOC,QAAU0iI,CAOpB,CA3KD,yICFA,SAAS/gI,IACP,OAAOA,EAAWmH,OAAOmF,OAASnF,OAAOmF,OAAOvF,OAAS,SAAUG,GACjE,IAAK,IAAIvH,EAAI,EAAGA,EAAIsS,UAAU5L,OAAQ1G,IAAK,CACzC,IAAI0U,EAAIpC,UAAUtS,GAClB,IAAK,IAAIi4G,KAAKvjG,GAAG,CAAG,GAAExO,eAAegB,KAAKwN,EAAGujG,KAAO1wG,EAAE0wG,GAAKvjG,EAAEujG,GAC/D,CACA,OAAO1wG,CACT,EAAGlH,EAASF,MAAM,KAAMmS,UAC1B,sBCNIqwH,EAAmB,qBA4CvB,QA1CiB,SAAoBC,EAASC,GAE5C,GAAI,YAAY/6H,KAAK+6H,GACnB,OAAOA,EAIL,SAAS/6H,KAAK86H,KAChBA,EAAUrkI,IAAAA,UAAmBA,IAAAA,SAAgBquG,MAAQ,IAKvD,IAAIk2B,EAAkC,oBAAfvkI,IAAAA,IACnBwkI,EAAe,QAAQj7H,KAAK86H,GAG5BI,GAAkBzkI,IAAAA,WAAoB,QAAQuJ,KAAK86H,GAQvD,GANIE,EACFF,EAAU,IAAIrkI,IAAAA,KAAWqkI,EAASrkI,IAAAA,UAAmBokI,GAC3C,QAAQ76H,KAAK86H,KACvBA,EAAUxB,IAAAA,iBAA4B7iI,IAAAA,UAAmBA,IAAAA,SAAgBquG,MAAQ,GAAIg2B,IAGnFE,EAAW,CACb,IAAIG,EAAS,IAAIC,IAAIL,EAAaD,GAIlC,OAAII,EACKC,EAAOr2B,KAAKvrG,MAAMshI,IAChBI,EACFE,EAAOr2B,KAAKvrG,MAAM4hI,EAAOE,SAASz8H,QAGpCu8H,EAAOr2B,IAChB,CAEA,OAAOw0B,IAAAA,iBAA4BwB,EAASC,EAC9C,ECnCA,IAAIO,EAAsB,WACxB,SAASA,IACP/6H,KAAKwiG,UAAY,CAAC,CACpB,CAUA,IAAIpiG,EAAS26H,EAAO37H,UA+FpB,OA7FAgB,EAAO46H,GAAK,SAAY3jI,EAAMywG,GACvB9nG,KAAKwiG,UAAUnrG,KAClB2I,KAAKwiG,UAAUnrG,GAAQ,IAGzB2I,KAAKwiG,UAAUnrG,GAAM8B,KAAK2uG,EAC5B,EAWA1nG,EAAO66H,IAAM,SAAa5jI,EAAMywG,GAC9B,IAAK9nG,KAAKwiG,UAAUnrG,GAClB,OAAO,EAGT,IAAIwB,EAAQmH,KAAKwiG,UAAUnrG,GAAMyB,QAAQgvG,GAWzC,OAFA9nG,KAAKwiG,UAAUnrG,GAAQ2I,KAAKwiG,UAAUnrG,GAAM2B,MAAM,GAClDgH,KAAKwiG,UAAUnrG,GAAM+vH,OAAOvuH,EAAO,GAC5BA,GAAS,CAClB,EASAuH,EAAO86H,QAAU,SAAiB7jI,GAChC,IAAI8jI,EAAYn7H,KAAKwiG,UAAUnrG,GAE/B,GAAK8jI,EAQL,GAAyB,IAArBlxH,UAAU5L,OAGZ,IAFA,IAAIA,EAAS88H,EAAU98H,OAEdN,EAAI,EAAGA,EAAIM,IAAUN,EAC5Bo9H,EAAUp9H,GAAGc,KAAKmB,KAAMiK,UAAU,SAMpC,IAHA,IAAImxH,EAAOniI,MAAMmG,UAAUpG,MAAM6F,KAAKoL,UAAW,GAC7CoxH,EAAUF,EAAU98H,OAEfi9H,EAAK,EAAGA,EAAKD,IAAWC,EAC/BH,EAAUG,GAAIxjI,MAAMkI,KAAMo7H,EAGhC,EAMAh7H,EAAOm7H,QAAU,WACfv7H,KAAKwiG,UAAY,CAAC,CACpB,EAWApiG,EAAOo7H,KAAO,SAAcC,GAC1Bz7H,KAAKg7H,GAAG,QAAQ,SAAUr+H,GACxB8+H,EAAYtiI,KAAKwD,EACnB,GACF,EAEOo+H,CACT,CA7G0B,GCHX,SAASW,EAAsBC,GAI5C,IAHA,IALuBn9C,EAKnBo9C,GALmBp9C,EAKEm9C,EAJlBzlI,IAAAA,KAAcA,IAAAA,KAAYsoF,GAAKq9C,OAAOr8H,KAAKg/E,EAAG,UAAUn/E,SAAS,WAKpElB,EAAQ,IAAIpG,WAAW6jI,EAAcv9H,QAEhCN,EAAI,EAAGA,EAAI69H,EAAcv9H,OAAQN,IACxCI,EAAMJ,GAAK69H,EAAc1rH,WAAWnS,GAGtC,OAAOI,CACT,CCCA,MAAM29H,UAAmBf,EACvBz7H,WAAAA,GACEy8H,QACA/7H,KAAKmiF,OAAS,EAChB,CAQAhpF,IAAAA,CAAKwD,GACH,IAAIq/H,EAIJ,IAHAh8H,KAAKmiF,QAAUxlF,EACfq/H,EAAch8H,KAAKmiF,OAAOrpF,QAAQ,MAE3BkjI,GAAe,EAAGA,EAAch8H,KAAKmiF,OAAOrpF,QAAQ,MACzDkH,KAAKk7H,QAAQ,OAAQl7H,KAAKmiF,OAAOtpE,UAAU,EAAGmjH,IAC9Ch8H,KAAKmiF,OAASniF,KAAKmiF,OAAOtpE,UAAUmjH,EAAc,EAEtD,EAIF,MAAMzK,EAAM35H,OAAOC,aAAa,GAE1BokI,EAAiB,SAAUC,GAG/B,MAAMt9C,EAAQ,yBAAyBgB,KAAKs8C,GAAmB,IACzDxjI,EAAS,CAAC,EAUhB,OARIkmF,EAAM,KACRlmF,EAAO2F,OAASiiF,SAAS1B,EAAM,GAAI,KAGjCA,EAAM,KACRlmF,EAAOigB,OAAS2nE,SAAS1B,EAAM,GAAI,KAG9BlmF,CACT,EAuBMyjI,EAAkB,SAAUhoH,GAChC,MAAMzb,EAAS,CAAC,EAEhB,IAAKyb,EACH,OAAOzb,EAIT,MAAM+P,EAAQ0L,EAAWld,MAjBlB,IAAI0mF,OAAO,yCAkBlB,IACI70E,EADA/K,EAAI0K,EAAMpK,OAGd,KAAON,KAEY,KAAb0K,EAAM1K,KAKV+K,EAAO,eAAe82E,KAAKn3E,EAAM1K,IAAI/E,MAAM,GAE3C8P,EAAK,GAAKA,EAAK,GAAGvD,QAAQ,aAAc,IACxCuD,EAAK,GAAKA,EAAK,GAAGvD,QAAQ,aAAc,IACxCuD,EAAK,GAAKA,EAAK,GAAGvD,QAAQ,kBAAmB,MAC7C7M,EAAOoQ,EAAK,IAAMA,EAAK,IAGzB,OAAOpQ,CACT,EAWM0jI,EAAkBC,IACtB,MAAMplI,EAAQolI,EAAWplI,MAAM,KACzByB,EAAS,CAAC,EAUhB,OARIzB,EAAM,KACRyB,EAAOknG,MAAQtf,SAASrpF,EAAM,GAAI,KAGhCA,EAAM,KACRyB,EAAOmnG,OAASvf,SAASrpF,EAAM,GAAI,KAG9ByB,CAAM,EA4Bf,MAAM4jI,UAAoBvB,EACxBz7H,WAAAA,GACEy8H,QACA/7H,KAAKu8H,cAAgB,GACrBv8H,KAAKw8H,WAAa,EACpB,CAQArjI,IAAAA,CAAKsjI,GACH,IAAI79C,EACA2jB,EAIJ,GAAoB,KAFpBk6B,EAAOA,EAAKllI,QAEH8G,OAEP,OAIF,GAAgB,MAAZo+H,EAAK,GAKP,YAJAz8H,KAAKk7H,QAAQ,OAAQ,CACnB7jI,KAAM,MACNgC,IAAKojI,IAMQz8H,KAAKw8H,WAAWtlI,QAAO,CAACwlI,EAAKC,KAC5C,MAAMC,EAAaD,EAAOF,GAE1B,OAAIG,IAAeH,EACVC,EAGFA,EAAIh1B,OAAO,CAACk1B,GAAY,GAC9B,CAACH,IACK9jI,SAAQkkI,IACf,IAAK,IAAI9+H,EAAI,EAAGA,EAAIiC,KAAKu8H,cAAcl+H,OAAQN,IAC7C,GAAIiC,KAAKu8H,cAAcx+H,GAAGc,KAAKmB,KAAM68H,GACnC,OAKJ,GAAgC,IAA5BA,EAAQ/jI,QAAQ,QAcpB,GAJA+jI,EAAUA,EAAQt3H,QAAQ,KAAM,IAEhCq5E,EAAQ,WAAWgB,KAAKi9C,GAEpBj+C,EACF5+E,KAAKk7H,QAAQ,OAAQ,CACnB7jI,KAAM,MACNylI,QAAS,YAHb,CAUA,GAFAl+C,EAAQ,+BAA+BgB,KAAKi9C,GAExCj+C,EAeF,OAdA2jB,EAAQ,CACNlrG,KAAM,MACNylI,QAAS,OAGPl+C,EAAM,KACR2jB,EAAMw6B,SAAWC,WAAWp+C,EAAM,KAGhCA,EAAM,KACR2jB,EAAMqyB,MAAQh2C,EAAM,SAGtB5+E,KAAKk7H,QAAQ,OAAQ34B,GAMvB,GAFA3jB,EAAQ,oCAAoCgB,KAAKi9C,GAE7Cj+C,EAWF,OAVA2jB,EAAQ,CACNlrG,KAAM,MACNylI,QAAS,kBAGPl+C,EAAM,KACR2jB,EAAMw6B,SAAWz8C,SAAS1B,EAAM,GAAI,UAGtC5+E,KAAKk7H,QAAQ,OAAQ34B,GAMvB,GAFA3jB,EAAQ,6BAA6BgB,KAAKi9C,GAEtCj+C,EAWF,OAVA2jB,EAAQ,CACNlrG,KAAM,MACNylI,QAAS,WAGPl+C,EAAM,KACR2jB,EAAM5sF,QAAU2qE,SAAS1B,EAAM,GAAI,UAGrC5+E,KAAKk7H,QAAQ,OAAQ34B,GAMvB,GAFA3jB,EAAQ,uCAAuCgB,KAAKi9C,GAEhDj+C,EAWF,OAVA2jB,EAAQ,CACNlrG,KAAM,MACNylI,QAAS,kBAGPl+C,EAAM,KACR2jB,EAAM5c,OAASrF,SAAS1B,EAAM,GAAI,UAGpC5+E,KAAKk7H,QAAQ,OAAQ34B,GAMvB,GAFA3jB,EAAQ,+CAA+CgB,KAAKi9C,GAExDj+C,EAWF,OAVA2jB,EAAQ,CACNlrG,KAAM,MACNylI,QAAS,0BAGPl+C,EAAM,KACR2jB,EAAM5c,OAASrF,SAAS1B,EAAM,GAAI,UAGpC5+E,KAAKk7H,QAAQ,OAAQ34B,GAMvB,GAFA3jB,EAAQ,+BAA+BgB,KAAKi9C,GAExCj+C,EAWF,OAVA2jB,EAAQ,CACNlrG,KAAM,MACNylI,QAAS,iBAGPl+C,EAAM,KACR2jB,EAAM06B,aAAer+C,EAAM,SAG7B5+E,KAAKk7H,QAAQ,OAAQ34B,GAMvB,GAFA3jB,EAAQ,2BAA2BgB,KAAKi9C,GAEpCj+C,EAMF,OALA2jB,EAAQvqG,EAASikI,EAAer9C,EAAM,IAAK,CACzCvnF,KAAM,MACNylI,QAAS,mBAEX98H,KAAKk7H,QAAQ,OAAQ34B,GAMvB,GAFA3jB,EAAQ,gCAAgCgB,KAAKi9C,GAEzCj+C,EAWF,OAVA2jB,EAAQ,CACNlrG,KAAM,MACNylI,QAAS,eAGPl+C,EAAM,KACR2jB,EAAM26B,SAAW,KAAKz9H,KAAKm/E,EAAM,UAGnC5+E,KAAKk7H,QAAQ,OAAQ34B,GAMvB,GAFA3jB,EAAQ,oBAAoBgB,KAAKi9C,GAE7Bj+C,EAAJ,CAME,GALA2jB,EAAQ,CACNlrG,KAAM,MACNylI,QAAS,OAGPl+C,EAAM,GAAI,CACZ,MAAMzqE,EAAagoH,EAAgBv9C,EAAM,IAErCzqE,EAAWgpH,MACb56B,EAAMlpG,IAAM8a,EAAWgpH,KAGrBhpH,EAAWipH,YACb76B,EAAM86B,UAAYpB,EAAe9nH,EAAWipH,WAEhD,CAEAp9H,KAAKk7H,QAAQ,OAAQ34B,EAEvB,KApBA,CAwBA,GAFA3jB,EAAQ,2BAA2BgB,KAAKi9C,GAEpCj+C,EA2BF,OA1BA2jB,EAAQ,CACNlrG,KAAM,MACNylI,QAAS,cAGPl+C,EAAM,KACR2jB,EAAMpuF,WAAagoH,EAAgBv9C,EAAM,IAErC2jB,EAAMpuF,WAAWmpH,aACnB/6B,EAAMpuF,WAAWmpH,WAAalB,EAAgB75B,EAAMpuF,WAAWmpH,aAG7D/6B,EAAMpuF,WAAWopH,YACnBh7B,EAAMpuF,WAAWopH,UAAYj9C,SAASiiB,EAAMpuF,WAAWopH,UAAW,KAGhEh7B,EAAMpuF,WAAW,gBACnBouF,EAAMpuF,WAAW,cAAgB6oH,WAAWz6B,EAAMpuF,WAAW,gBAG3DouF,EAAMpuF,WAAW,gBACnBouF,EAAMpuF,WAAW,cAAgBmsE,SAASiiB,EAAMpuF,WAAW,cAAe,WAI9EnU,KAAKk7H,QAAQ,OAAQ34B,GAMvB,GAFA3jB,EAAQ,sBAAsBgB,KAAKi9C,GAE/Bj+C,EAWF,OAVA2jB,EAAQ,CACNlrG,KAAM,MACNylI,QAAS,SAGPl+C,EAAM,KACR2jB,EAAMpuF,WAAagoH,EAAgBv9C,EAAM,UAG3C5+E,KAAKk7H,QAAQ,OAAQ34B,GAMvB,GAFA3jB,EAAQ,kBAAkBgB,KAAKi9C,GAE3Bj+C,EACF5+E,KAAKk7H,QAAQ,OAAQ,CACnB7jI,KAAM,MACNylI,QAAS,iBAOb,GAFAl+C,EAAQ,wBAAwBgB,KAAKi9C,GAEjCj+C,EACF5+E,KAAKk7H,QAAQ,OAAQ,CACnB7jI,KAAM,MACNylI,QAAS,sBAHb,CAUA,GAFAl+C,EAAQ,kCAAkCgB,KAAKi9C,GAE3Cj+C,EAYF,OAXA2jB,EAAQ,CACNlrG,KAAM,MACNylI,QAAS,qBAGPl+C,EAAM,KACR2jB,EAAMi7B,eAAiB5+C,EAAM,GAC7B2jB,EAAMk7B,eAAiB,IAAI7hC,KAAKhd,EAAM,UAGxC5+E,KAAKk7H,QAAQ,OAAQ34B,GAMvB,GAFA3jB,EAAQ,oBAAoBgB,KAAKi9C,GAE7Bj+C,EAwBF,OAvBA2jB,EAAQ,CACNlrG,KAAM,MACNylI,QAAS,OAGPl+C,EAAM,KACR2jB,EAAMpuF,WAAagoH,EAAgBv9C,EAAM,IAErC2jB,EAAMpuF,WAAWupH,KACuC,OAAtDn7B,EAAMpuF,WAAWupH,GAAG7kH,UAAU,EAAG,GAAG7hB,gBACtCurG,EAAMpuF,WAAWupH,GAAKn7B,EAAMpuF,WAAWupH,GAAG7kH,UAAU,IAGtD0pF,EAAMpuF,WAAWupH,GAAKn7B,EAAMpuF,WAAWupH,GAAG9+C,MAAM,SAChD2jB,EAAMpuF,WAAWupH,GAAG,GAAKp9C,SAASiiB,EAAMpuF,WAAWupH,GAAG,GAAI,IAC1Dn7B,EAAMpuF,WAAWupH,GAAG,GAAKp9C,SAASiiB,EAAMpuF,WAAWupH,GAAG,GAAI,IAC1Dn7B,EAAMpuF,WAAWupH,GAAG,GAAKp9C,SAASiiB,EAAMpuF,WAAWupH,GAAG,GAAI,IAC1Dn7B,EAAMpuF,WAAWupH,GAAG,GAAKp9C,SAASiiB,EAAMpuF,WAAWupH,GAAG,GAAI,IAC1Dn7B,EAAMpuF,WAAWupH,GAAK,IAAIC,YAAYp7B,EAAMpuF,WAAWupH,WAI3D19H,KAAKk7H,QAAQ,OAAQ34B,GAMvB,GAFA3jB,EAAQ,sBAAsBgB,KAAKi9C,GAE/Bj+C,EAaF,OAZA2jB,EAAQ,CACNlrG,KAAM,MACNylI,QAAS,SAGPl+C,EAAM,KACR2jB,EAAMpuF,WAAagoH,EAAgBv9C,EAAM,IACzC2jB,EAAMpuF,WAAW,eAAiB6oH,WAAWz6B,EAAMpuF,WAAW,gBAC9DouF,EAAMpuF,WAAWypH,QAAU,MAAMn+H,KAAK8iG,EAAMpuF,WAAWypH,eAGzD59H,KAAKk7H,QAAQ,OAAQ34B,GAMvB,GAFA3jB,EAAQ,8BAA8BgB,KAAKi9C,GAEvCj+C,EAaF,OAZA2jB,EAAQ,CACNlrG,KAAM,MACNylI,QAAS,gBAGPl+C,EAAM,GACR2jB,EAAM5lG,KAAOiiF,EAAM,GAEnB2jB,EAAM5lG,KAAO,QAGfqD,KAAKk7H,QAAQ,OAAQ34B,GAMvB,GAFA3jB,EAAQ,yBAAyBgB,KAAKi9C,GAElCj+C,EAaF,OAZA2jB,EAAQ,CACNlrG,KAAM,MACNylI,QAAS,WAGPl+C,EAAM,GACR2jB,EAAM5lG,KAAOiiF,EAAM,GAEnB2jB,EAAM5lG,KAAO,QAGfqD,KAAKk7H,QAAQ,OAAQ34B,GAMvB,GAFA3jB,EAAQ,yBAAyBgB,KAAKi9C,GAElCj+C,EAaF,OAZA2jB,EAAQ,CACNlrG,KAAM,MACNylI,QAAS,UAGPl+C,EAAM,GACR2jB,EAAM5lG,KAAOiiF,EAAM,GAEnB2jB,EAAM5lG,KAAO,QAGfqD,KAAKk7H,QAAQ,OAAQ34B,GAMvB,GAFA3jB,EAAQ,qBAAqBgB,KAAKi9C,GAE9Bj+C,GAASA,EAAM,GAgBjB,OAfA2jB,EAAQ,CACNlrG,KAAM,MACNylI,QAAS,QAEXv6B,EAAMpuF,WAAagoH,EAAgBv9C,EAAM,IAErC2jB,EAAMpuF,WAAWtW,eAAe,sBAClC0kG,EAAMpuF,WAAW,oBAAsBmsE,SAASiiB,EAAMpuF,WAAW,oBAAqB,KAGpFouF,EAAMpuF,WAAWtW,eAAe,iCAClC0kG,EAAMpuF,WAAW,+BAAiCouF,EAAMpuF,WAAW,+BAA+Bld,MAAMs6H,SAG1GvxH,KAAKk7H,QAAQ,OAAQ34B,GAMvB,GAFA3jB,EAAQ,qBAAqBgB,KAAKi9C,GAE9Bj+C,GAASA,EAAM,GAsBjB,OArBA2jB,EAAQ,CACNlrG,KAAM,MACNylI,QAAS,QAEXv6B,EAAMpuF,WAAagoH,EAAgBv9C,EAAM,IACzC,CAAC,YAAYjmF,SAAQ,SAAUI,GACzBwpG,EAAMpuF,WAAWtW,eAAe9E,KAClCwpG,EAAMpuF,WAAWpb,GAAOikI,WAAWz6B,EAAMpuF,WAAWpb,IAExD,IACA,CAAC,cAAe,OAAOJ,SAAQ,SAAUI,GACnCwpG,EAAMpuF,WAAWtW,eAAe9E,KAClCwpG,EAAMpuF,WAAWpb,GAAO,MAAM0G,KAAK8iG,EAAMpuF,WAAWpb,IAExD,IAEIwpG,EAAMpuF,WAAWtW,eAAe,eAClC0kG,EAAMpuF,WAAWkpH,UAAYpB,EAAe15B,EAAMpuF,WAAWipH,iBAG/Dp9H,KAAKk7H,QAAQ,OAAQ34B,GAMvB,GAFA3jB,EAAQ,+BAA+BgB,KAAKi9C,GAExCj+C,GAASA,EAAM,GAiBjB,OAhBA2jB,EAAQ,CACNlrG,KAAM,MACNylI,QAAS,kBAEXv6B,EAAMpuF,WAAagoH,EAAgBv9C,EAAM,IACzC,CAAC,iBAAkB,iBAAkB,aAAajmF,SAAQ,SAAUI,GAC9DwpG,EAAMpuF,WAAWtW,eAAe9E,KAClCwpG,EAAMpuF,WAAWpb,GAAOikI,WAAWz6B,EAAMpuF,WAAWpb,IAExD,IACA,CAAC,sBAAuB,oBAAoBJ,SAAQ,SAAUI,GACxDwpG,EAAMpuF,WAAWtW,eAAe9E,KAClCwpG,EAAMpuF,WAAWpb,GAAO,MAAM0G,KAAK8iG,EAAMpuF,WAAWpb,IAExD,SACAiH,KAAKk7H,QAAQ,OAAQ34B,GAMvB,GAFA3jB,EAAQ,yBAAyBgB,KAAKi9C,GAElCj+C,GAASA,EAAM,GAYjB,OAXA2jB,EAAQ,CACNlrG,KAAM,MACNylI,QAAS,YAEXv6B,EAAMpuF,WAAagoH,EAAgBv9C,EAAM,IACzC,CAAC,eAAejmF,SAAQ,SAAUI,GAC5BwpG,EAAMpuF,WAAWtW,eAAe9E,KAClCwpG,EAAMpuF,WAAWpb,GAAOikI,WAAWz6B,EAAMpuF,WAAWpb,IAExD,SACAiH,KAAKk7H,QAAQ,OAAQ34B,GAMvB,GAFA3jB,EAAQ,6BAA6BgB,KAAKi9C,GAEtCj+C,GAASA,EAAM,GAiBjB,OAhBA2jB,EAAQ,CACNlrG,KAAM,MACNylI,QAAS,gBAEXv6B,EAAMpuF,WAAagoH,EAAgBv9C,EAAM,IACzC,CAAC,kBAAmB,oBAAoBjmF,SAAQ,SAAUI,GACxD,GAAIwpG,EAAMpuF,WAAWtW,eAAe9E,GAAM,CACxCwpG,EAAMpuF,WAAWpb,GAAOunF,SAASiiB,EAAMpuF,WAAWpb,GAAM,IACxD,MAAM8kI,EAAiB,qBAAR9kI,EAA6B,SAAW,SACvDwpG,EAAMpuF,WAAWkpH,UAAY96B,EAAMpuF,WAAWkpH,WAAa,CAAC,EAC5D96B,EAAMpuF,WAAWkpH,UAAUQ,GAAUt7B,EAAMpuF,WAAWpb,UAE/CwpG,EAAMpuF,WAAWpb,EAC1B,CACF,SACAiH,KAAKk7H,QAAQ,OAAQ34B,GAMvB,GAFA3jB,EAAQ,iCAAiCgB,KAAKi9C,GAE1Cj+C,GAASA,EAAM,GAYjB,OAXA2jB,EAAQ,CACNlrG,KAAM,MACNylI,QAAS,oBAEXv6B,EAAMpuF,WAAagoH,EAAgBv9C,EAAM,IACzC,CAAC,WAAY,aAAajmF,SAAQ,SAAUI,GACtCwpG,EAAMpuF,WAAWtW,eAAe9E,KAClCwpG,EAAMpuF,WAAWpb,GAAOunF,SAASiiB,EAAMpuF,WAAWpb,GAAM,IAE5D,SACAiH,KAAKk7H,QAAQ,OAAQ34B,GAMvB,GAFA3jB,EAAQ,0BAA0BgB,KAAKi9C,GAEnCj+C,GAASA,EAAM,GAAnB,CACE2jB,EAAQ,CACNlrG,KAAM,MACNylI,QAAS,aAEXv6B,EAAMpuF,WAAagoH,EAAgBv9C,EAAM,IACzC,CAAC,KAAM,SAASjmF,SAAQ,SAAUI,GAC5BwpG,EAAMpuF,WAAWtW,eAAe9E,KAClCwpG,EAAMpuF,WAAWpb,GAAOnB,OAAO2qG,EAAMpuF,WAAWpb,IAEpD,IACA,CAAC,aAAc,YAAYJ,SAAQ,SAAUI,GACvCwpG,EAAMpuF,WAAWtW,eAAe9E,KAClCwpG,EAAMpuF,WAAWpb,GAAO,IAAI6iG,KAAK2G,EAAMpuF,WAAWpb,IAEtD,IACA,CAAC,WAAY,oBAAoBJ,SAAQ,SAAUI,GAC7CwpG,EAAMpuF,WAAWtW,eAAe9E,KAClCwpG,EAAMpuF,WAAWpb,GAAOikI,WAAWz6B,EAAMpuF,WAAWpb,IAExD,IACA,CAAC,eAAeJ,SAAQ,SAAUI,GAC5BwpG,EAAMpuF,WAAWtW,eAAe9E,KAClCwpG,EAAMpuF,WAAWpb,GAAO,OAAO0G,KAAK8iG,EAAMpuF,WAAWpb,IAEzD,IACA,CAAC,aAAc,cAAe,aAAaJ,SAAQ,SAAUI,GACvDwpG,EAAMpuF,WAAWtW,eAAe9E,KAClCwpG,EAAMpuF,WAAWpb,GAAOwpG,EAAMpuF,WAAWpb,GAAKsG,SAAS,IAE3D,IACA,MAAMy+H,EAAyB,uBAE/B,IAAK,MAAM/kI,KAAOwpG,EAAMpuF,WAAY,CAClC,IAAK2pH,EAAuBr+H,KAAK1G,GAC/B,SAGF,MAAMglI,EAAgB,kBAAkBt+H,KAAK8iG,EAAMpuF,WAAWpb,IACxDilI,EAAoB,gBAAgBv+H,KAAK8iG,EAAMpuF,WAAWpb,IAChEwpG,EAAMpuF,WAAWpb,GAAOglI,EAAgBx7B,EAAMpuF,WAAWpb,GAAKsG,SAAS,IAAM2+H,EAAoBhB,WAAWz6B,EAAMpuF,WAAWpb,IAAQnB,OAAO2qG,EAAMpuF,WAAWpb,GAC/J,CAEAiH,KAAKk7H,QAAQ,OAAQ34B,EAEvB,MAIA,GAFA3jB,EAAQ,+BAA+BgB,KAAKi9C,GAExCj+C,EACF5+E,KAAKk7H,QAAQ,OAAQ,CACnB7jI,KAAM,MACNylI,QAAS,8BAOb,GAFAl+C,EAAQ,wBAAwBgB,KAAKi9C,GAEjCj+C,EACF5+E,KAAKk7H,QAAQ,OAAQ,CACnB7jI,KAAM,MACNylI,QAAS,sBAHb,CAUA,GAFAl+C,EAAQ,iCAAiCgB,KAAKi9C,GAE1Cj+C,EAOF,OANA2jB,EAAQ,CACNlrG,KAAM,MACNylI,QAAS,oBAEXv6B,EAAMpuF,WAAagoH,EAAgBv9C,EAAM,SACzC5+E,KAAKk7H,QAAQ,OAAQ34B,GAMvB,GAFA3jB,EAAQ,mCAAmCgB,KAAKi9C,GAE5Cj+C,EA4BF,OA3BA2jB,EAAQ,CACNlrG,KAAM,MACNylI,QAAS,oBAEXv6B,EAAMpuF,WAAagoH,EAAgBv9C,EAAM,IAErC2jB,EAAMpuF,WAAWgpH,MACnB56B,EAAMlpG,IAAMkpG,EAAMpuF,WAAWgpH,KAG3B56B,EAAMpuF,WAAWopH,YACnBh7B,EAAMpuF,WAAWopH,UAAYj9C,SAASiiB,EAAMpuF,WAAWopH,UAAW,KAGhEh7B,EAAMpuF,WAAWmpH,aACnB/6B,EAAMpuF,WAAWmpH,WAAalB,EAAgB75B,EAAMpuF,WAAWmpH,aAG7D/6B,EAAMpuF,WAAW,uBACnBouF,EAAMpuF,WAAW,qBAAuBmsE,SAASiiB,EAAMpuF,WAAW,qBAAsB,KAGtFouF,EAAMpuF,WAAW,gBACnBouF,EAAMpuF,WAAW,cAAgB6oH,WAAWz6B,EAAMpuF,WAAW,qBAG/DnU,KAAKk7H,QAAQ,OAAQ34B,GAMvB,GAFA3jB,EAAQ,uBAAuBgB,KAAKi9C,GAEhCj+C,EAOF,OANA2jB,EAAQ,CACNlrG,KAAM,MACNylI,QAAS,UAEXv6B,EAAMpuF,WAAagoH,EAAgBv9C,EAAM,SACzC5+E,KAAKk7H,QAAQ,OAAQ34B,GAKvBviG,KAAKk7H,QAAQ,OAAQ,CACnB7jI,KAAM,MACNsF,KAAMkgI,EAAQ7jI,MAAM,IA9DtB,CAzTA,CApEA,CAvJA,MAnBEgH,KAAKk7H,QAAQ,OAAQ,CACnB7jI,KAAM,UACNyhB,KAAM+jH,EAAQ7jI,MAAM,IAomBtB,GAEN,CAYAilI,SAAAA,CAASt7H,GAKN,IALO,WACRu7H,EAAU,WACVC,EAAU,WACVC,EAAU,QACVC,GACD17H,EAC2B,oBAAfy7H,IACTA,EAAa3B,GAAQA,GAGvBz8H,KAAKu8H,cAAcpjI,MAAKsjI,IAGtB,GAFcyB,EAAWt+C,KAAK68C,GAS5B,OANAz8H,KAAKk7H,QAAQ,OAAQ,CACnB7jI,KAAM,SACNsF,KAAMyhI,EAAW3B,GACjB0B,aACAE,aAEK,CACT,GAEJ,CAUAC,YAAAA,CAAYC,GAGT,IAHU,WACXL,EAAU,IACV7nH,GACDkoH,EASCv+H,KAAKw8H,WAAWrjI,MARFsjI,GACRyB,EAAWz+H,KAAKg9H,GACXpmH,EAAIomH,GAGNA,GAIX,EAIF,MAEM+B,EAAgB,SAAUrqH,GAC9B,MAAMzb,EAAS,CAAC,EAIhB,OAHAyG,OAAO0M,KAAKsI,GAAYxb,SAAQ,SAAUI,GAJ1B0lI,MAKd/lI,GALc+lI,EAKG1lI,EALI0lI,EAAIznI,cAAcuO,QAAQ,UAAUu5E,GAAKA,EAAE,GAAGvgF,kBAK1C4V,EAAWpb,EACtC,IACOL,CACT,EAMMgmI,EAAc,SAAUC,GAC5B,MAAM,cACJC,EAAa,eACbC,EAAc,mBACdC,GACEH,EAEJ,IAAKC,EACH,OAGF,MAAMt0C,EAAM,wBACN0C,EAAK,WACL+xC,EAAM,eACNC,EAAoBH,GAAmC,EAAjBA,EACtCI,EAAkBH,GAA2C,EAArBA,EAE1CD,IAAmBD,EAAc/gI,eAAemvF,KAClD4xC,EAAc5xC,GAAMgyC,EACpBh/H,KAAKk7H,QAAQ,OAAQ,CACnB7sH,QAAS,GAAGi8E,iDAAmD00C,SAI/DA,GAAqBJ,EAAc5xC,GAAMgyC,IAC3Ch/H,KAAKk7H,QAAQ,OAAQ,CACnB7sH,QAAS,GAAGi8E,yBAA2Bs0C,EAAc5xC,8BAA+BgyC,OAEtFJ,EAAc5xC,GAAMgyC,GAIlBF,IAAuBF,EAAc/gI,eAAekhI,KACtDH,EAAcG,GAA4B,EAArBD,EACrB9+H,KAAKk7H,QAAQ,OAAQ,CACnB7sH,QAAS,GAAGi8E,0DAA4Ds0C,EAAcG,UAKtFD,GAAsBF,EAAcG,GAAOE,IAC7Cj/H,KAAKk7H,QAAQ,OAAQ,CACnB7sH,QAAS,GAAGi8E,8BAAgCs0C,EAAcG,kCAAoCE,QAEhGL,EAAcG,GAAOE,EAEzB,EA2BA,MAAMC,UAAenE,EACnBz7H,WAAAA,GAAuB,IAAX65H,EAAIlvH,UAAA5L,OAAA,QAAA/D,IAAA2P,UAAA,GAAAA,UAAA,GAAG,CAAC,EAClB8xH,QACA/7H,KAAKm/H,WAAa,IAAIrD,EACtB97H,KAAKo/H,YAAc,IAAI9C,EACvBt8H,KAAKm/H,WAAW3D,KAAKx7H,KAAKo/H,aAC1Bp/H,KAAKq/H,gBAAkBlG,EAAKkG,iBAAmB,CAAC,EAChDr/H,KAAKzG,OAAS,IAAIshI,IAAI1B,EAAK9/H,IAAK,iBAAiBimI,aACjDt/H,KAAKu/H,oBAAsB,KAG3B,MAAM59C,EAAO3hF,KAGPw/H,EAAO,GACb,IAEIC,EAEA1mI,EAJA2mI,EAAa,CAAC,EAKdC,GAAW,EAEf,MAAMC,EAAO,WAAa,EAEpBC,EAAqB,CACzB,MAAS,CAAC,EACV,MAAS,CAAC,EACV,kBAAmB,CAAC,EACpB,UAAa,CAAC,GAMhB,IAAIC,EAAkB,EAEtB9/H,KAAK2+H,SAAW,CACdoB,YAAY,EACZC,oBAAqB,GACrBC,WAAY,GACZC,gBAAiB,GACjBC,SAAU,IAKZ,IAAIC,EAAmB,EAEnBC,EAAuB,EAC3B,MAAMC,EAAgB,CAAC,EACvBtgI,KAAKg7H,GAAG,OAAO,KAGT0E,EAAWrmI,MAAQqmI,EAAWtF,QAAUsF,EAAWa,gBAIlDb,EAAWrpH,KAAOopH,IACrBC,EAAWrpH,IAAMopH,IAGdC,EAAW3mI,KAAOA,IACrB2mI,EAAW3mI,IAAMA,GAGd2mI,EAAWc,UAAuC,kBAApBV,IACjCJ,EAAWc,SAAWV,GAGxB9/H,KAAK2+H,SAAS8B,eAAiBf,EAAU,IAG3C1/H,KAAKo/H,YAAYpE,GAAG,QAAQ,SAAU0F,GACpC,IAAIC,EACAC,EAEJ,GAAIj/C,EAAKg9C,SAASkC,YAChB,IAAK,MAAMC,KAAOn/C,EAAKg9C,SAASkC,YAK9B,GAJIH,EAAMrnI,MACRqnI,EAAMrnI,IAAMqnI,EAAMrnI,IAAIkM,QAAQ,KAAKu7H,KAAQn/C,EAAKg9C,SAASkC,YAAYC,KAGnEJ,EAAMvsH,WACR,IAAK,MAAMrL,KAAQ43H,EAAMvsH,WACe,kBAA3BusH,EAAMvsH,WAAWrL,KAC1B43H,EAAMvsH,WAAWrL,GAAQ43H,EAAMvsH,WAAWrL,GAAMvD,QAAQ,KAAKu7H,KAAQn/C,EAAKg9C,SAASkC,YAAYC,MAOzG,CACEx2C,GAAAA,IAEI,CACA30E,OAAAA,GACM+qH,EAAM/qH,UACR3V,KAAK2+H,SAAShpH,QAAU+qH,EAAM/qH,QAElC,EAEA,gBACE3V,KAAK2+H,SAASoB,WAAaW,EAAMxD,QAE3B,YAAawD,IACjB1gI,KAAKk7H,QAAQ,OAAQ,CACnB7sH,QAAS,iCAEXrO,KAAK2+H,SAASoB,YAAa,EAE/B,EAEA1C,SAAAA,GACE,MAAMA,EAAY,CAAC,EAEf,WAAYqD,IACdhB,EAAWrC,UAAYA,EACvBA,EAAUh/H,OAASqiI,EAAMriI,OAEnB,WAAYqiI,IAWhBA,EAAM/nH,OAASynH,IAIf,WAAYM,IACdhB,EAAWrC,UAAYA,EACvBA,EAAU1kH,OAAS+nH,EAAM/nH,QAG3BynH,EAAmB/C,EAAU1kH,OAAS0kH,EAAUh/H,MAClD,EAEA0iI,OAAAA,GACE/gI,KAAK2+H,SAASqC,SAAU,CAC1B,EAEAC,GAAAA,GACQ,kBAAmBjhI,KAAK2+H,WAC5B3+H,KAAK2+H,SAASuC,cAAgB,EAC9BlhI,KAAKk7H,QAAQ,OAAQ,CACnB7sH,QAAS,uCAIP,0BAA2BrO,KAAK2+H,WACpC3+H,KAAK2+H,SAASwC,sBAAwB,EACtCnhI,KAAKk7H,QAAQ,OAAQ,CACnB7sH,QAAS,+CAITqyH,EAAM9L,QACR8K,EAAW9K,MAAQ8L,EAAM9L,OAGvB8L,EAAM3D,SAAW,IACnB2C,EAAW3C,SAAW2D,EAAM3D,UAGP,IAAnB2D,EAAM3D,WACR2C,EAAW3C,SAAW,IACtB/8H,KAAKk7H,QAAQ,OAAQ,CACnB7sH,QAAS,qDAIbrO,KAAK2+H,SAASwB,SAAWX,CAC3B,EAEAzmI,GAAAA,GACE,GAAK2nI,EAAMvsH,WAQX,GAAgC,SAA5BusH,EAAMvsH,WAAWitH,OAKrB,GAAKV,EAAMvsH,WAAWgpH,IAAtB,CAOA,GAAmC,mCAA/BuD,EAAMvsH,WAAWktH,UAMnB,OALArhI,KAAK2+H,SAAS2C,kBAAoBthI,KAAK2+H,SAAS2C,mBAAqB,CAAC,OAEtEthI,KAAK2+H,SAAS2C,kBAAkB,qBAAuB,CACrDntH,WAAYusH,EAAMvsH,aAKtB,GAAmC,4BAA/BusH,EAAMvsH,WAAWktH,UAMnB,OALArhI,KAAK2+H,SAAS2C,kBAAoBthI,KAAK2+H,SAAS2C,mBAAqB,CAAC,OAEtEthI,KAAK2+H,SAAS2C,kBAAkB,2BAA6B,CAC3DjoI,IAAKqnI,EAAMvsH,WAAWgpH,MAO1B,GA7LW,kDA6LPuD,EAAMvsH,WAAWktH,UAA4B,CAG/C,OAAwD,IAFlC,CAAC,aAAc,iBAAkB,mBAErCvoI,QAAQ4nI,EAAMvsH,WAAWitH,aACzCphI,KAAKk7H,QAAQ,OAAQ,CACnB7sH,QAAS,8CAKmB,oBAA5BqyH,EAAMvsH,WAAWitH,QACnBphI,KAAKk7H,QAAQ,OAAQ,CACnB7sH,QAAS,qEAIiC,4BAA1CqyH,EAAMvsH,WAAWgpH,IAAItkH,UAAU,EAAG,SACpC7Y,KAAKk7H,QAAQ,OAAQ,CACnB7sH,QAAS,0CAKPqyH,EAAMvsH,WAAWotH,OAAoD,OAA3Cb,EAAMvsH,WAAWotH,MAAM1oH,UAAU,EAAG,IASpE7Y,KAAK2+H,SAAS2C,kBAAoBthI,KAAK2+H,SAAS2C,mBAAqB,CAAC,OACtEthI,KAAK2+H,SAAS2C,kBAAkB,sBAAwB,CACtDntH,WAAY,CACVqtH,YAAad,EAAMvsH,WAAWktH,UAE9BI,MAAOf,EAAMvsH,WAAWotH,MAAM1oH,UAAU,IAG1C6oH,KAAMhG,EAAsBgF,EAAMvsH,WAAWgpH,IAAIlmI,MAAM,KAAK,YAhB5D+I,KAAKk7H,QAAQ,OAAQ,CACnB7sH,QAAS,yCAkBf,CAEKqyH,EAAMvsH,WAAWitH,QACpBphI,KAAKk7H,QAAQ,OAAQ,CACnB7sH,QAAS,qCAKbtV,EAAM,CACJqD,OAAQskI,EAAMvsH,WAAWitH,QAAU,UACnC/nI,IAAKqnI,EAAMvsH,WAAWgpH,KAGW,qBAAxBuD,EAAMvsH,WAAWupH,KAC1B3kI,EAAI4oI,GAAKjB,EAAMvsH,WAAWupH,GAhF5B,MAJE19H,KAAKk7H,QAAQ,OAAQ,CACnB7sH,QAAS,8CANXtV,EAAM,UARNiH,KAAKk7H,QAAQ,OAAQ,CACnB7sH,QAAS,mDAkGf,EAEA,mBACOuzH,SAASlB,EAAM/6C,QAOpB3lF,KAAK2+H,SAASuC,cAAgBR,EAAM/6C,OANlC3lF,KAAKk7H,QAAQ,OAAQ,CACnB7sH,QAAS,oCAAsCqyH,EAAM/6C,QAM3D,EAEA,2BACOi8C,SAASlB,EAAM/6C,SAOpB3lF,KAAK2+H,SAASwC,sBAAwBT,EAAM/6C,OAC5Cm6C,EAAkBY,EAAM/6C,QAPtB3lF,KAAKk7H,QAAQ,OAAQ,CACnB7sH,QAAS,4CAA8CqyH,EAAM/6C,QAOnE,EAEA,kBACO,YAAYlmF,KAAKihI,EAAMzD,cAO5Bj9H,KAAK2+H,SAAS1B,aAAeyD,EAAMzD,aANjCj9H,KAAKk7H,QAAQ,OAAQ,CACnB7sH,QAAS,mCAAqCqyH,EAAMmB,UAM1D,EAEAxrH,GAAAA,GACEopH,EAAa,CAAC,EAEViB,EAAMrnI,MACRomI,EAAWpmI,IAAMqnI,EAAMrnI,KAGrBqnI,EAAMrD,YACRoC,EAAWpC,UAAYqD,EAAMrD,WAG3BtkI,IACF0mI,EAAW1mI,IAAMA,EAErB,EAEA,eACEiH,KAAK2+H,SAASmD,UAAYtC,EAC1Bx/H,KAAK2+H,SAASoD,YAAc/hI,KAAK2+H,SAASoD,aAAelC,EAEpDa,EAAMvsH,YAONurH,EAAWvrH,aACdurH,EAAWvrH,WAAa,CAAC,GAG3Bnc,EAAS0nI,EAAWvrH,WAAYusH,EAAMvsH,aAVpCnU,KAAKk7H,QAAQ,OAAQ,CACnB7sH,QAAS,wCAUf,EAEA2zH,KAAAA,GAGE,GAFAhiI,KAAK2+H,SAASoD,YAAc/hI,KAAK2+H,SAASoD,aAAelC,IAEnDa,EAAMvsH,YAAcusH,EAAMvsH,WAAW8tH,MAAQvB,EAAMvsH,WAAW,aAAeusH,EAAMvsH,WAAW+tH,MAIlG,YAHAliI,KAAKk7H,QAAQ,OAAQ,CACnB7sH,QAAS,+CAMb,MAAM8zH,EAAiBniI,KAAK2+H,SAASoD,YAAYrB,EAAMvsH,WAAW8tH,MAClEE,EAAezB,EAAMvsH,WAAW,aAAeguH,EAAezB,EAAMvsH,WAAW,cAAgB,CAAC,EAChGwsH,EAAawB,EAAezB,EAAMvsH,WAAW,aAE7CysH,EAAY,CACVrW,QAAS,OAAO9qH,KAAKihI,EAAMvsH,WAAWiuH,UAGpCxB,EAAUrW,QACZqW,EAAUyB,YAAa,EAEvBzB,EAAUyB,WAAa,OAAO5iI,KAAKihI,EAAMvsH,WAAWmuH,YAGlD5B,EAAMvsH,WAAWouH,WACnB3B,EAAU4B,SAAW9B,EAAMvsH,WAAWouH,UAGpC7B,EAAMvsH,WAAWgpH,MACnByD,EAAUvnI,IAAMqnI,EAAMvsH,WAAWgpH,KAG/BuD,EAAMvsH,WAAW,iBACnBysH,EAAU6B,WAAa/B,EAAMvsH,WAAW,gBAGtCusH,EAAMvsH,WAAWuuH,kBACnB9B,EAAU+B,gBAAkBjC,EAAMvsH,WAAWuuH,iBAG3ChC,EAAMvsH,WAAWyuH,SACnBhC,EAAUiC,OAAS,OAAOpjI,KAAKihI,EAAMvsH,WAAWyuH,SAIlDjC,EAAWD,EAAMvsH,WAAW+tH,MAAQtB,CACtC,EAEAkC,aAAAA,GACEhD,GAAmB,EACnBJ,EAAWoD,eAAgB,EAC3B9iI,KAAK2+H,SAASqB,oBAAoB7mI,KAAKqmI,EAAKnhI,OAC9C,EAEA,sBAC8C,qBAAjC2B,KAAK2+H,SAASnB,iBAKvBx9H,KAAK2+H,SAASnB,eAAiBkD,EAAMlD,eACrCx9H,KAAK2+H,SAASlB,eAAiBiD,EAAMjD,gBAGvCiC,EAAWlC,eAAiBkD,EAAMlD,eAClCkC,EAAWjC,eAAiBiD,EAAMjD,eAClC,MAAM,oBACJ8B,GACEv/H,KACJA,KAAKu/H,oBAAsB,IAAI3jC,KAAK8kC,EAAMlD,gBAAgBuF,UAG9B,OAAxBxD,GAIFv/H,KAAK2+H,SAASwB,SAAS6C,aAAY,CAACC,EAAiB5E,KACnDA,EAAQ4E,gBAAkBA,EAAqC,IAAnB5E,EAAQtB,SAC7CsB,EAAQ4E,kBACdjjI,KAAKu/H,oBAEZ,EAEA2D,cAAAA,IACOtB,SAASlB,EAAM3D,WAAa2D,EAAM3D,SAAW,EAChD/8H,KAAKk7H,QAAQ,OAAQ,CACnB7sH,QAAS,qCAAuCqyH,EAAM3D,YAK1D/8H,KAAK2+H,SAASE,eAAiB6B,EAAM3D,SACrC2B,EAAY7/H,KAAKmB,KAAMA,KAAK2+H,UAC9B,EAEAt4H,KAAAA,GACOq6H,EAAMvsH,aAAcg0E,MAAMu4C,EAAMvsH,WAAW,gBAOhDnU,KAAK2+H,SAASt4H,MAAQ,CACpB88H,WAAYzC,EAAMvsH,WAAW,eAC7BivH,QAAS1C,EAAMvsH,WAAWypH,SAR1B59H,KAAKk7H,QAAQ,OAAQ,CACnB7sH,QAAS,iEASf,EAEA,YACEqxH,EAAW2D,OAAS3C,EAAM/jI,IAC5B,EAEA,iBACE+iI,EAAW4D,WAAa5C,EAAM/jI,IAChC,EAEA,WACE+iI,EAAW6D,MAAQ7C,EAAM/jI,IAC3B,EAEA,OACEqD,KAAK2+H,SAAS6E,KAAOhF,EAAckC,EAAMvsH,YACzCnU,KAAKyjI,yBAAyB,cAAe/C,EAAMvsH,WAAY,CAAC,oBAClE,EAEA,OACEwrH,GAAW,EAEX,MAAM+D,EAAe1jI,KAAK2+H,SAASwB,SAAS9hI,OACtCoxD,EAAO+uE,EAAckC,EAAMvsH,YACjCurH,EAAWtF,MAAQsF,EAAWtF,OAAS,GACvCsF,EAAWtF,MAAMjhI,KAAKs2D,GAElBA,EAAK4tE,YACF5tE,EAAK4tE,UAAUx/H,eAAe,YACjC4xD,EAAK4tE,UAAU1kH,OAAS0nH,GAG1BA,EAAuB5wE,EAAK4tE,UAAU1kH,OAAS82C,EAAK4tE,UAAUh/H,QAGhE,MAAMslI,EAAYjE,EAAWtF,MAAM/7H,OAAS,EAC5C2B,KAAKyjI,yBAAyB,gBAAgBE,kBAA0BD,IAAgBhD,EAAMvsH,WAAY,CAAC,MAAO,aAE9GnU,KAAK2+H,SAASiF,kBAChB5jI,KAAK2+H,SAASiF,iBAAiBjrI,SAAQ,CAACi3G,EAAG7xG,KACpC6xG,EAAE/xG,eAAe,aACpBmC,KAAKk7H,QAAQ,OAAQ,CACnB7sH,QAAS,4BAA4BtQ,4CAEzC,GAGN,EAEA,mBACE,MAAM0K,EAAQzI,KAAK2+H,SAASC,cAAgBJ,EAAckC,EAAMvsH,YAE3D1L,EAAM5K,eAAe,oBACxB4K,EAAMo7H,gBAAiB,EACvB7jI,KAAKk7H,QAAQ,OAAQ,CACnB7sH,QAAS,gEAIbqwH,EAAY7/H,KAAKmB,KAAMA,KAAK2+H,UAExBl2H,EAAMq7H,oBAAsBr7H,EAAM5K,eAAe,iBACnDmC,KAAKk7H,QAAQ,OAAQ,CACnB7sH,QAAS,mHAGf,EAEA,iBAEE,MAAMq1H,EAAe1jI,KAAK2+H,SAASwB,SAAS9hI,OACtC0lI,EAAOvF,EAAckC,EAAMvsH,YAC3B6vH,EAASD,EAAK1sI,MAAsB,SAAd0sI,EAAK1sI,KACjCqoI,EAAWa,aAAeb,EAAWa,cAAgB,GACrDb,EAAWa,aAAapnI,KAAK4qI,GAEzBA,EAAK1G,YACF0G,EAAK1G,UAAUx/H,eAAe,YAEjCkmI,EAAK1G,UAAU1kH,OAASqrH,EAAS3D,EAAuB,EAEpD2D,IACF3D,EAAuB0D,EAAK1G,UAAU1kH,OAASorH,EAAK1G,UAAUh/H,UAKpE,MAAMxF,EAAQ6mI,EAAWa,aAAaliI,OAAS,EAG/C,GAFA2B,KAAKyjI,yBAAyB,wBAAwB5qI,kBAAsB6qI,IAAgBhD,EAAMvsH,WAAY,CAAC,OAAQ,QAElH4vH,EAAK1sI,KAMV,IAAK,IAAI0G,EAAI,EAAGA,EAAI2hI,EAAWa,aAAaliI,OAAS,EAAGN,IAAK,CAC3D,MAAMkmI,EAAYvE,EAAWa,aAAaxiI,GAErCkmI,EAAU5sI,OAIX4sI,EAAU5sI,OAAS0sI,EAAK1sI,MAC1B2I,KAAKk7H,QAAQ,OAAQ,CACnB7sH,QAAS,wBAAwBxV,kBAAsB6qI,uBAAkCK,EAAK1sI,yBAAyB0G,MAG7H,CACF,EAEA,qBACE,MAAMmmI,EAAS1F,EAAckC,EAAMvsH,YACnCnU,KAAK2+H,SAASiF,iBAAmB5jI,KAAK2+H,SAASiF,kBAAoB,GACnE5jI,KAAK2+H,SAASiF,iBAAiBzqI,KAAK+qI,GACpC,MAAMrrI,EAAQmH,KAAK2+H,SAASiF,iBAAiBvlI,OAAS,EAChD8lI,EAAW,CAAC,WAAY,OAE1BxE,GACFwE,EAAShrI,KAAK,aAGhB6G,KAAKyjI,yBAAyB,4BAA4B5qI,IAAS6nI,EAAMvsH,WAAYgwH,EACvF,EAEA,aACEnkI,KAAK2+H,SAASyF,QAAU5F,EAAckC,EAAMvsH,YAC5CnU,KAAKyjI,yBAAyB,kBAAmB/C,EAAMvsH,WAAY,CAAC,gBAEhEnU,KAAK2+H,SAASyF,QAAQC,aACxBrkI,KAAK2+H,SAASG,mBAAqB9+H,KAAK2+H,SAASyF,QAAQC,YAG3D3F,EAAY7/H,KAAKmB,KAAMA,KAAK2+H,SAC9B,EAEA,YACE3+H,KAAK2+H,SAASsB,WAAW9mI,KAAKqlI,EAAckC,EAAMvsH,aAClD,MAAMtb,EAAQmH,KAAK2+H,SAASsB,WAAW5hI,OAAS,EAChD2B,KAAKyjI,yBAAyB,qBAAqB5qI,IAAS6nI,EAAMvsH,WAAY,CAAC,KAAM,eACrF,MAAMmwH,EAAYtkI,KAAK2+H,SAASsB,WAAWpnI,GAEvCyrI,EAAUC,SAAWD,EAAUE,WAAa,IAAI5oC,KAAK0oC,EAAUC,SAAW,IAAI3oC,KAAK0oC,EAAUE,YAC/FxkI,KAAKk7H,QAAQ,OAAQ,CACnB7sH,QAAS,wFAITi2H,EAAUvH,UAAYuH,EAAUvH,SAAW,GAC7C/8H,KAAKk7H,QAAQ,OAAQ,CACnB7sH,QAAS,kDAITi2H,EAAUG,iBAAmBH,EAAUG,gBAAkB,GAC3DzkI,KAAKk7H,QAAQ,OAAQ,CACnB7sH,QAAS,0DAIb,MAAMq2H,IAAiBJ,EAAUK,UAcjC,GAZID,IAAiBJ,EAAUM,OAC7B5kI,KAAKk7H,QAAQ,OAAQ,CACnB7sH,QAAS,kFAITq2H,IAAiBJ,EAAUvH,UAAYuH,EAAUC,UACnDvkI,KAAKk7H,QAAQ,OAAQ,CACnB7sH,QAAS,uGAITi2H,EAAUvH,UAAYuH,EAAUC,QAAS,CAC3C,MACMM,EADYP,EAAUE,UACOzB,UAAiC,IAArBuB,EAAUvH,SACzD/8H,KAAK2+H,SAASsB,WAAWpnI,GAAO0rI,QAAU,IAAI3oC,KAAKipC,EACrD,CAEA,GAAKvE,EAAcgE,EAAU5tH,IAEtB,CACL,IAAK,MAAMouH,KAAaxE,EAAcgE,EAAU5tH,IAC9C,GAAM4tH,EAAUQ,IAAc9pI,KAAK8B,UAAUwjI,EAAcgE,EAAU5tH,IAAIouH,MAAgB9pI,KAAK8B,UAAUwnI,EAAUQ,IAAa,CAC7H9kI,KAAKk7H,QAAQ,OAAQ,CACnB7sH,QAAS,6FAEX,KACF,CAIF,MAAM02H,EAAsB/kI,KAAK2+H,SAASsB,WAAWjT,WAAUgY,GAAmBA,EAAgBtuH,KAAO4tH,EAAU5tH,KACnH1W,KAAK2+H,SAASsB,WAAW8E,GAAuB/sI,EAASgI,KAAK2+H,SAASsB,WAAW8E,GAAsBT,GACxGhE,EAAcgE,EAAU5tH,IAAM1e,EAASsoI,EAAcgE,EAAU5tH,IAAK4tH,GAEpEtkI,KAAK2+H,SAASsB,WAAWj/C,KAC3B,MAjBEs/C,EAAcgE,EAAU5tH,IAAM4tH,CAkBlC,EAEA,yBACEtkI,KAAK2+H,SAASsG,qBAAsB,CACtC,EAEA,kBACEjlI,KAAK2+H,SAASuG,aAAc,EAC5BllI,KAAKmlI,6BAA6BnlI,KAAK2+H,SAAShpH,QAAS,EAC3D,EAEA,qBACE3V,KAAK2+H,SAASyG,gBAAkB5G,EAAckC,EAAMvsH,YACpDnU,KAAKyjI,yBAAyB,0BAA2B/C,EAAMvsH,WAAY,CAAC,cAC9E,EAGAkxH,MAAAA,GACErlI,KAAK2+H,SAASkC,YAAc7gI,KAAK2+H,SAASkC,aAAe,CAAC,EAE1D,MAAMyE,EAASA,CAACpmI,EAAG8V,KACb9V,KAAKc,KAAK2+H,SAASkC,YAIrB7gI,KAAKk7H,QAAQ,QAAS,CACpB7sH,QAAS,gCAAgCnP,MAK7Cc,KAAK2+H,SAASkC,YAAY3hI,GAAK8V,CAAC,EAGlC,GAAI,eAAgB0rH,EAAMvsH,WAAY,CACpC,GAAI,SAAUusH,EAAMvsH,YAAc,WAAYusH,EAAMvsH,WAOlD,YAHAnU,KAAKk7H,QAAQ,QAAS,CACpB7sH,QAAS,qCAKb,MAAMk3H,EAAMvlI,KAAKzG,OAAOuH,IAAI4/H,EAAMvsH,WAAWqxH,YAE7C,OAAKD,OAWLD,EAAO5E,EAAMvsH,WAAWqxH,WAAYC,mBAAmBF,SANrDvlI,KAAKk7H,QAAQ,QAAS,CACpB7sH,QAAS,gCAAgCqyH,EAAMvsH,WAAWqxH,cAOhE,CAEA,MAAI,SAAU9E,EAAMvsH,WACd,WAAYusH,EAAMvsH,gBAIpBnU,KAAKk7H,QAAQ,QAAS,CACpB7sH,QAAS,qCAKP,UAAWqyH,EAAMvsH,YAAiD,kBAA3BusH,EAAMvsH,WAAWuxH,WAS9DJ,EAAO5E,EAAMvsH,WAAW+tH,KAAMxB,EAAMvsH,WAAWuxH,YAN7C1lI,KAAKk7H,QAAQ,QAAS,CACpB7sH,QAAS,8BAA8BqyH,EAAMvsH,WAAW+tH,SAS1D,WAAYxB,EAAMvsH,WACfnU,KAAKq/H,gBAAgBqB,EAAMvsH,WAAWwxH,aAe3CL,EAAO5E,EAAMvsH,WAAWwxH,OAAQ3lI,KAAKq/H,gBAAgBqB,EAAMvsH,WAAWwxH,cANpE3lI,KAAKk7H,QAAQ,QAAS,CACpB7sH,QAAS,0BAA0BqyH,EAAMvsH,WAAWwxH,2DAY1D3lI,KAAKk7H,QAAQ,QAAS,CACpB7sH,QAAS,8BAEb,EAEA,qBACErO,KAAK2+H,SAASuB,gBAAgB/mI,KAAK,CACjCgb,WAAYusH,EAAMvsH,WAClB9a,IAAKqnI,EAAMrnI,IACXmnI,SAAUV,IAEZ9/H,KAAKyjI,yBAAyB,4BAA6B/C,EAAMvsH,WAAY,CAAC,YAAa,OAC7F,GAECusH,EAAM5D,UAAY8C,GAAM/gI,KAAK8iF,EAClC,EAEAtoF,GAAAA,GACEqmI,EAAWrmI,IAAMqnI,EAAMrnI,IACvBmmI,EAAKrmI,KAAKumI,GAEN1/H,KAAK2+H,SAASE,kBAAoB,aAAca,KAClD1/H,KAAKk7H,QAAQ,OAAQ,CACnB7sH,QAAS,uDAEXqxH,EAAW3C,SAAW/8H,KAAK2+H,SAASE,gBAIlC9lI,IACF2mI,EAAW3mI,IAAMA,GAGnB2mI,EAAWc,SAAWV,EAElBL,IACFC,EAAWrpH,IAAMopH,GAInBY,EAAuB,EAEU,OAA7BrgI,KAAKu/H,sBACPG,EAAWuD,gBAAkBjjI,KAAKu/H,oBAClCv/H,KAAKu/H,qBAA6C,IAAtBG,EAAW3C,UAIzC2C,EAAa,CAAC,CAChB,EAEAn1H,OAAAA,GAAW,EAGXq7H,MAAAA,GAEMlF,EAAMrC,SACRqB,EAAWkG,OAASlG,EAAWkG,QAAU,CAAC,EAC1ClG,EAAWkG,OAAOlF,EAAMvC,YAAcuC,EAAM/jI,OAE5CqD,KAAK2+H,SAASiH,OAAS5lI,KAAK2+H,SAASiH,QAAU,CAAC,EAChD5lI,KAAK2+H,SAASiH,OAAOlF,EAAMvC,YAAcuC,EAAM/jI,KAEnD,IAEC+jI,EAAMrpI,MAAMwH,KAAK8iF,EACtB,GACF,CAEAwjD,4BAAAA,CAA6BU,EAAgBC,IACvCD,EAAiBC,IAAkBD,IACrC7lI,KAAKk7H,QAAQ,OAAQ,CACnB7sH,QAAS,qCAAqCy3H,KAGpD,CAEArC,wBAAAA,CAAyBsC,EAAY5xH,EAAYgwH,GAC/C,MAAM6B,EAAU,GAChB7B,EAASxrI,SAAQ,SAAUI,GACpBob,EAAWtW,eAAe9E,IAC7BitI,EAAQ7sI,KAAKJ,EAEjB,IAEIitI,EAAQ3nI,QACV2B,KAAKk7H,QAAQ,OAAQ,CACnB7sH,QAAS,GAAG03H,kCAA2CC,EAAQjyH,KAAK,SAG1E,CAQA5a,IAAAA,CAAK8sI,GACHjmI,KAAKm/H,WAAWhmI,KAAK8sI,EACvB,CAQAvmD,GAAAA,GAEE1/E,KAAKm/H,WAAWhmI,KAAK,MAEjB6G,KAAK2+H,SAASsB,WAAW5hI,QAAuC,OAA7B2B,KAAKu/H,qBAC1Cv/H,KAAKk7H,QAAQ,OAAQ,CACnB7sH,QAAS,6FAIbrO,KAAKu/H,oBAAsB,KAC3Bv/H,KAAKk7H,QAAQ,MACf,CAYA+C,SAAAA,CAAU3kI,GACR0G,KAAKo/H,YAAYnB,UAAU3kI,EAC7B,CAUAglI,YAAAA,CAAahlI,GACX0G,KAAKo/H,YAAYd,aAAahlI,EAChC,ECj2DF,IAAI4sI,EAAS,CAEXC,IAAK,oEACLC,KAAM,gCACNC,IAAK,sCAELC,MAAO,sDACPC,MAAO,2DACPztH,KAAM,oBAEN0tH,WAAY,YACZC,WAAY,UAIZC,UAAW,MAETC,EAAa,CAAC,QAAS,QAAS,QAChCC,EAAkB,CAAC,QAAS,QAAS,QAW9BC,EAAuB,SAA8BC,GAC9D,OAAKA,EAIEA,EAAMvhI,QAAQ,uBAAuB,SAAUwhI,EAAMC,EAASC,GAGnE,MAAO,SAFW,KAAOziD,OAAOwiD,GAAS3nI,SAAS,KAAKrG,OAAO,GAEhC,MADX,KAAOwrF,OAAOyiD,GAAU5nI,SAAS,KAAKrG,OAAO,EAElE,IAPS8tI,CAQX,EAqDWI,EAAc,SAAqBC,QACxB,IAAhBA,IACFA,EAAc,IAGhB,IAAIC,EAASD,EAAYlwI,MAAM,KAC3ByB,EAAS,GA8Bb,OA7BA0uI,EAAOzuI,SAAQ,SAAUmuI,GAEvB,IAAIO,EADJP,EAAQA,EAAMvvI,OAEdovI,EAAWhuI,SAAQ,SAAU4G,GAC3B,IAAIq/E,EAAQsnD,EAAO3mI,GAAMqgF,KAAKknD,EAAM9vI,eAEpC,GAAK4nF,KAASA,EAAMvgF,QAAU,GAA9B,CAIAgpI,EAAY9nI,EAEZ,IAAIlI,EAAOyvI,EAAMjuH,UAAU,EAAG+lE,EAAM,GAAGvgF,QACnCipI,EAAUR,EAAMvhI,QAAQlO,EAAM,IAClCqB,EAAOS,KAAK,CACV9B,KAAMA,EACNiwI,QAASA,EACTC,UAAWhoI,GATb,CAWF,IAEK8nI,GACH3uI,EAAOS,KAAK,CACV9B,KAAMyvI,EACNQ,QAAS,GACTC,UAAW,WAGjB,IACO7uI,CACT,EA0CW8uI,EAAe,SAAsBV,GAK9C,YAJc,IAAVA,IACFA,EAAQ,IAGHZ,EAAOK,MAAM9mI,KAAKqnI,EAAMvvI,OAAOP,cACxC,EAQWywI,EAAkB,SAAyBN,GACpD,GAAKA,GAAsC,kBAAhBA,EAA3B,CAIA,IAZ4CL,EAYxCM,EAASD,EAAYnwI,cAAcC,MAAM,KAAKof,KAAI,SAAUpG,GAC9D,OAAO42H,EAAqB52H,EAAE1Y,OAChC,IAEIF,EAAO,QAGW,IAAlB+vI,EAAO/oI,QAAgBmpI,EAAaJ,EAAO,IAC7C/vI,EAAO,QACoB,IAAlB+vI,EAAO/oI,cApBJ,KAD8ByoI,EAqBEM,EAAO,MAnBnDN,EAAQ,IAGHZ,EAAOptH,KAAKrZ,KAAKqnI,EAAMvvI,OAAOP,kBAkBnCK,EAAO,eAIT,IAAIqwI,EAAY,MAiBhB,OAdIN,EAAOhwH,OAAM,SAAUnH,GACzB,OAAOi2H,EAAOC,IAAI1mI,KAAKwQ,EACzB,IACEy3H,EAAY,MACHN,EAAOhwH,OAAM,SAAUnH,GAChC,OAAOi2H,EAAOE,KAAK3mI,KAAKwQ,EAC1B,IACEy3H,EAAY,OACHN,EAAOhwH,OAAM,SAAUnH,GAChC,OAAOi2H,EAAOG,IAAI5mI,KAAKwQ,EACzB,MACEy3H,EAAY,OAGPrwI,EAAO,IAAMqwI,EAAY,YAAeP,EAAc,GAlC7D,CAmCF,EACWQ,EAAuB,SAA8BR,GAK9D,YAJoB,IAAhBA,IACFA,EAAc,IAGTjxI,IAAAA,aAAsBA,IAAAA,YAAmB0xI,iBAAmB1xI,IAAAA,YAAmB0xI,gBAAgBH,EAAgBN,MAAiB,CACzI,EACWU,EAAqB,SAA4BV,GAK1D,YAJoB,IAAhBA,IACFA,EAAc,IAGTA,EAAYnwI,cAAcC,MAAM,KAAKmgB,OAAM,SAAU0vH,GAC1DA,EAAQA,EAAMvvI,OAEd,IAAK,IAAIwG,EAAI,EAAGA,EAAI6oI,EAAgBvoI,OAAQN,IAAK,CAG/C,GAAImoI,EAAO,QAFAU,EAAgB7oI,IAEA0B,KAAKqnI,GAC9B,OAAO,CAEX,CAEA,OAAO,CACT,GACF,EACWgB,EAAsB,YC3P7BC,EAAgB,yDAChBC,EAAa,2BAaNC,EAA2B,SAAkC5wI,GACtE,OAAI0wI,EAActoI,KAAKpI,GACd,MAGL2wI,EAAWvoI,KAAKpI,GACX,OAUI,qCAATA,EACK,WAGF,IACT,ECNW6wI,EAAoB,SAA2BpqI,GACxD,MAA2B,aAAvB2tH,YAAY0c,OACP1c,YAAY0c,OAAOrqI,GAGrBA,GAAOA,EAAIqkF,kBAAkBspC,WACtC,EAIW2c,EAAU,SAAiBC,GACpC,OAAIA,aAAiBtwI,WACZswI,GAGJpvI,MAAMC,QAAQmvI,IAPZH,EAOoCG,IAAYA,aAAiB5c,cAIpE4c,EADmB,kBAAVA,GAAuC,kBAAVA,GAAsBA,IAAUA,EAC9D,EAEA,CAACA,IAIN,IAAItwI,WAAWswI,GAASA,EAAMlmD,QAAUkmD,EAAOA,GAASA,EAAMjmD,YAAc,EAAGimD,GAASA,EAAMhmD,YAAc,GACrH,EAqBIimD,EAASpyI,IAAAA,QAAiBsuF,OAC1B+jD,EAAa,CAACD,EAAO,OAAQA,EAAO,SAAUA,EAAO,WAAYA,EAAO,aAAcA,EAAO,eAAgBA,EAAO,iBAAkBA,EAAO,mBAAoBA,EAAO,qBAAsBA,EAAO,wBAiB9LE,GAhBa,WACtB,IAAI1pD,EAAI,IAAI2pD,YAAY,CAAC,QACrB/hD,EAAI,IAAI3uF,WAAW+mF,EAAEqD,OAAQrD,EAAEsD,WAAYtD,EAAEuD,YAEpC,MAATqE,EAAE,IAIFA,EAAE,EAKR,CAbwB,GAgBG,SAAuB2hD,EAAO3lI,GACvD,IAAIC,OAAiB,IAAVD,EAAmB,CAAC,EAAIA,EAC/BgmI,EAAc/lI,EAAKgmI,OACnBA,OAAyB,IAAhBD,GAAiCA,EAC1CE,EAAUjmI,EAAKwsC,GACfA,OAAiB,IAAZy5F,GAA6BA,EAEtCP,EAAQD,EAAQC,GAChB,IAAIzgI,EAAKunC,EAAK,SAAW,cAErBw2C,GADM0iD,EAAMzgI,GAAMygI,EAAMzgI,GAAM3O,MAAMmG,UAAUwI,IACjC/I,KAAKwpI,GAAO,SAAUQ,EAAOC,EAAM/qI,GAClD,IAAIgrI,EAAW55F,EAAKpxC,EAAIuF,KAAK0lI,IAAIjrI,EAAI,EAAIsqI,EAAMhqI,QAC/C,OAAOwqI,EAAQP,EAAOQ,GAAQP,EAAWQ,EAC3C,GAAGT,EAAO,IAEV,GAAIK,EAAQ,CACV,IAAIxnD,EAAMonD,EAAWF,EAAMhqI,QAAUiqI,EAAO,GAAKA,EAAO,IACxD3iD,EAAS2iD,EAAO3iD,IAEHxE,IACXwE,GAAUxE,EACVwE,GAAUxE,EACVwE,GAAU2iD,EAAO,GAErB,CAEA,OAAO9jD,OAAOmB,EAChB,GACWsjD,EAAgB,SAAuBtjD,EAAQujD,GACxD,IACIC,QADmB,IAAXD,EAAoB,CAAC,EAAIA,GAChB/5F,GACjBA,OAAkB,IAAbg6F,GAA8BA,GAGjB,kBAAXxjD,GAAyC,kBAAXA,GAAyC,kBAAXA,GAAuBA,IAAWA,KACvGA,EAAS,GAGXA,EAAS2iD,EAAO3iD,GAIhB,IAHA,IAlH0C6iB,EAkHtC4gC,GAlHsC5gC,EAkHf7iB,EAjHpBriF,KAAK4+G,KALS,SAAmB1Z,GACxC,OAAOA,EAAEnpG,SAAS,GAAGhB,MACvB,CAGmBgrI,CAAU7gC,GAAK,IAkH5B6/B,EAAQ,IAAItwI,WAAW,IAAI0zH,YAAY2d,IAElCrrI,EAAI,EAAGA,EAAIqrI,EAAWrrI,IAAK,CAClC,IAAIurI,EAAYn6F,EAAKpxC,EAAIuF,KAAK0lI,IAAIjrI,EAAI,EAAIsqI,EAAMhqI,QAChDgqI,EAAMiB,GAAa9kD,OAAOmB,EAAS4iD,EAAWxqI,GAAKuqI,EAAO,MAEtD3iD,EAAS,IACX0iD,EAAMiB,GAAahmI,KAAK0lI,KAAKX,EAAMiB,IACnCjB,EAAMiB,IAAoB,IAANvrI,EAAU,EAAI,EAEtC,CAEA,OAAOsqI,CACT,EAmBWkB,EAAgB,SAAuB3nD,EAAQ4nD,GAKxD,GAJsB,kBAAX5nD,GAAuBA,GAAqC,oBAApBA,EAAOviF,WACxDuiF,EAASA,EAAOviF,YAGI,kBAAXuiF,EACT,OAAO,IAAI7pF,WAMRyxI,IACH5nD,EAAS6nD,SAAS9iD,mBAAmB/E,KAKvC,IAFA,IAAIK,EAAO,IAAIlqF,WAAW6pF,EAAOvjF,QAExBN,EAAI,EAAGA,EAAI6jF,EAAOvjF,OAAQN,IACjCkkF,EAAKlkF,GAAK6jF,EAAO1xE,WAAWnS,GAG9B,OAAOkkF,CACT,EAmDWynD,EAAa,SAAoB5qD,EAAG4H,EAAGijD,GAChD,IAAIC,OAAmB,IAAXD,EAAoB,CAAC,EAAIA,EACjCE,EAAeD,EAAMjxH,OACrBA,OAA0B,IAAjBkxH,EAA0B,EAAIA,EACvCC,EAAaF,EAAMG,KACnBA,OAAsB,IAAfD,EAAwB,GAAKA,EAExChrD,EAAIspD,EAAQtpD,GAGZ,IAAIl3E,GAFJ8+E,EAAI0hD,EAAQ1hD,IAEDtvE,MAAQsvE,EAAEtvE,MAAQne,MAAMmG,UAAUgY,MAC7C,OAAOsvE,EAAEroF,QAAUygF,EAAEzgF,OAASsa,GAAU+tE,EAAEroF,QAC1CuJ,EAAG/I,KAAK6nF,GAAG,SAAUsjD,EAAOjsI,GAE1B,OAAOisI,KADKD,EAAKhsI,GAAKgsI,EAAKhsI,GAAK+gF,EAAEnmE,EAAS5a,GAAK+gF,EAAEnmE,EAAS5a,GAE7D,GACF,EC1Pe,SAAS29H,EAAsBC,GAI5C,IAHA,IALuBn9C,EAKnBo9C,GALmBp9C,EAKEm9C,EAJlBzlI,IAAAA,KAAcA,IAAAA,KAAYsoF,GAAKq9C,OAAOr8H,KAAKg/E,EAAG,UAAUn/E,SAAS,WAKpElB,EAAQ,IAAIpG,WAAW6jI,EAAcv9H,QAEhCN,EAAI,EAAGA,EAAI69H,EAAcv9H,OAAQN,IACxCI,EAAMJ,GAAK69H,EAAc1rH,WAAWnS,GAGtC,OAAOI,CACT,cCNA,MAAM8rI,EAAWnsI,KACNA,GAAsB,kBAARA,EAGnBosI,EAAQ,WAAgB,QAAAC,EAAAlgI,UAAA5L,OAAZ+rI,EAAO,IAAAnxI,MAAAkxI,GAAAE,EAAA,EAAAA,EAAAF,EAAAE,IAAPD,EAAOC,GAAApgI,UAAAogI,GACvB,OAAOD,EAAQlzI,QAAO,CAACwB,EAAQ8L,KACP,kBAAXA,GAIXrF,OAAO0M,KAAKrH,GAAQ7L,SAAQI,IACtBE,MAAMC,QAAQR,EAAOK,KAASE,MAAMC,QAAQsL,EAAOzL,IACrDL,EAAOK,GAAOL,EAAOK,GAAK2uG,OAAOljG,EAAOzL,IAC/BkxI,EAASvxI,EAAOK,KAASkxI,EAASzlI,EAAOzL,IAClDL,EAAOK,GAAOmxI,EAAMxxI,EAAOK,GAAMyL,EAAOzL,IAExCL,EAAOK,GAAOyL,EAAOzL,EACvB,IAVOL,IAaR,CAAC,EACN,EACMq0H,EAAStuH,GAAKU,OAAO0M,KAAKpN,GAAG4X,KAAIgqE,GAAK5hF,EAAE4hF,KAWxCiqD,EAAUC,GAASA,EAAMrzI,QAAO,CAACsxG,EAAGqH,IAAMrH,EAAEd,OAAOmI,IAAI,IACvDrwG,GAAOkF,IACX,IAAKA,EAAKrG,OACR,MAAO,GAGT,MAAM3F,EAAS,GAEf,IAAK,IAAIqF,EAAI,EAAGA,EAAI2G,EAAKrG,OAAQN,IAC/BrF,EAAOS,KAAKuL,EAAK3G,IAGnB,OAAOrF,CAAM,EA2Bf,IAAI8xI,GACwB,2BADxBA,GAGmB,sBAHnBA,GAIgB,mBAJhBA,GAKW,cALXA,GAOwB,2BAPxBA,GAQ6B,gCA6BjC,MAAMC,GAAmB9nI,IAKnB,IALoB,QACxB43H,EAAU,GAAE,OACZ/1H,EAAS,GAAE,MACXsxD,EAAQ,GAAE,WACV40E,EAAa,IACd/nI,EACC,MAAM07H,EAAU,CACdhlI,IAAKmL,EACLmmI,YAAaC,EAAWrQ,GAAW,GAAI/1H,IAGzC,GAAIsxD,GAAS40E,EAAY,CACvB,MACMG,GADW/0E,GAAgB40E,GACTzzI,MAAM,KAE9B,IAWIoH,EAXAysI,EAAa50I,IAAAA,OAAgBA,IAAAA,OAAc20I,EAAO,IAAMvqD,SAASuqD,EAAO,GAAI,IAC5EE,EAAW70I,IAAAA,OAAgBA,IAAAA,OAAc20I,EAAO,IAAMvqD,SAASuqD,EAAO,GAAI,IAE1EC,EAAatmD,OAAOC,kBAA0C,kBAAfqmD,IACjDA,EAAatmD,OAAOsmD,IAGlBC,EAAWvmD,OAAOC,kBAAwC,kBAAbsmD,IAC/CA,EAAWvmD,OAAOumD,IAMlB1sI,EADsB,kBAAb0sI,GAA+C,kBAAfD,EAChC50I,IAAAA,OAAc60I,GAAY70I,IAAAA,OAAc40I,GAAc50I,IAAAA,OAAc,GAEpE60I,EAAWD,EAAa,EAGb,kBAAXzsI,GAAuBA,EAASmmF,OAAOC,mBAChDpmF,EAASmmF,OAAOnmF,IAKlBggI,EAAQhB,UAAY,CAClBh/H,SACAsa,OAAQmyH,EAEZ,CAEA,OAAOzM,CAAO,EA2BV2M,GAAiBC,IACjBA,GAAkC,kBAAdA,IACtBA,EAAY3qD,SAAS2qD,EAAW,KAG9B9iD,MAAM8iD,GACD,KAGFA,GAQHC,GAAe,CASnBC,MAAAA,CAAOh3H,GACL,MAAM,SACJ4oH,EAAQ,UACRp6C,EAAY,EAAC,eACbyoD,EAAc,eACdC,GACEl3H,EACE82H,EAAYD,GAAe72H,EAAW82H,WACtCK,EAAkBvO,EAAWp6C,EAEnC,MAAyB,kBAAdsoD,EACF,CACL5kI,MAAO,EACPq5E,IAAKurD,GAIqB,kBAAnBI,EACF,CACLhlI,MAAO,EACPq5E,IAAK2rD,EAAiBC,GAInB,CACLjlI,MAAO,EACPq5E,IAAK0rD,EAAiBE,EAE1B,EAUAC,OAAAA,CAAQp3H,GACN,MAAM,IACJq3H,EAAG,aACHC,EAAY,sBACZC,EAAqB,UACrB/oD,EAAY,EAAC,SACbo6C,EAAQ,YACR4O,EAAc,EAAC,oBACfC,EAAsB,EAAC,qBACvBC,EAAuBhpB,KACrB1uG,EACE82H,EAAYD,GAAe72H,EAAW82H,WAGtCpvC,GAAO2vC,EAAMC,GAAgB,IAG7BK,EAAgBJ,EAAwBC,EAGxCN,EADcxvC,EAAM+vC,EACWE,EAC/BC,EAAezoI,KAAK4+G,KAAKmpB,EAAiB1oD,EAAYo6C,GACtDiP,EAAiB1oI,KAAK80H,OAAOv8B,EAAMiwC,EAAgBD,GAAwBlpD,EAAYo6C,GACvFkP,EAAe3oI,KAAK80H,OAAOv8B,EAAMiwC,GAAiBnpD,EAAYo6C,GACpE,MAAO,CACL12H,MAAO/C,KAAK69E,IAAI,EAAG6qD,GACnBtsD,IAA0B,kBAAdurD,EAAyBA,EAAY3nI,KAAKyhG,IAAIgnC,EAAcE,GAE5E,GAoDIC,GAAkB/3H,IACtB,MAAM,KACJ9c,EAAI,SACJ0lI,EAAQ,UACRp6C,EAAY,EAAC,eACb0oD,EAAc,eACdD,GACEj3H,GACE,MACJ9N,EAAK,IACLq5E,GACEwrD,GAAa7zI,GAAM8c,GACjBgsH,EA1TMrqE,EAACzvD,EAAOq5E,KACpB,MAAMhnF,EAAS,GAEf,IAAK,IAAIqF,EAAIsI,EAAOtI,EAAI2hF,EAAK3hF,IAC3BrF,EAAOS,KAAK4E,GAGd,OAAOrF,CAAM,EAmTIo9D,CAAMzvD,EAAOq5E,GAAKrpE,IArClBlC,IAAcwxE,IAC/B,MAAM,SACJo3C,EAAQ,UACRp6C,EAAY,EAAC,YACbgpD,EAAW,YACXQ,EAAc,GACZh4H,EACJ,MAAO,CACLwxE,OAAQwmD,EAAcxmD,EACtBo3C,SAAUA,EAAWp6C,EACrB69C,SAAUmL,EACVxpC,KAAMxc,EAASo3C,EAChB,EAyBsCqP,CAAWj4H,IAElD,GAAa,WAAT9c,EAAmB,CACrB,MAAMwB,EAAQsnI,EAAS9hI,OAAS,EAE1BguI,EAA4C,kBAAnBhB,EAA8BA,EAAiBD,EAE9EjL,EAAStnI,GAAOkkI,SAAWsP,EAAkBtP,EAAWp6C,EAAY9pF,CACtE,CAEA,OAAOsnI,CAAQ,EAcXmM,GAAmBn4H,IACvB,MAAM,QACJomH,EAAO,eACPgS,EAAiB,CAAC,EAAC,eACnBnB,EAAc,WACdV,EAAa,GAAE,YACfiB,EAAW,iBACXa,EAAgB,OAChB7mD,EAAS,EAAC,SACVo3C,GACE5oH,EAEJ,IAAKomH,EACH,MAAM,IAAI9gI,MAAM+wI,IAGlB,MAAMiC,EAAchC,GAAiB,CACnClQ,UACA/1H,OAAQ+nI,EAAeG,UACvB52E,MAAOy2E,EAAez2E,QAElBuoE,EAAUoM,GAAiB,CAC/BlQ,UACA/1H,OAAQ+1H,EACRmQ,eAKF,GAHArM,EAAQhoH,IAAMo2H,EAGV1P,EAAU,CACZ,MAAM4P,EAAkBT,GAAgB/3H,GAEpCw4H,EAAgBtuI,SAClBggI,EAAQtB,SAAW4P,EAAgB,GAAG5P,SACtCsB,EAAQmC,SAAWmM,EAAgB,GAAGnM,SAE1C,MAAW4K,IACT/M,EAAQtB,SAAWqO,EACnB/M,EAAQmC,SAAWmL,GASrB,OAFAtN,EAAQmO,iBAAmBA,GAAoBb,EAC/CtN,EAAQ14C,OAASA,EACV,CAAC04C,EAAQ,EAcZuO,GAA8BA,CAAC/K,EAAUgL,EAAMtS,KAEnD,MAAMkS,EAAc5K,EAASgL,KAAKx2H,IAAMwrH,EAASgL,KAAKx2H,IAAM,KAEtD+0H,EAAiBvJ,EAASgL,KAAK9P,SAE/ByD,EAAWqB,EAASrB,UAAY,EAChCsM,EAAgBjL,EAASgL,KAAKxP,UAC9B0P,EAAUD,EAAcn0H,OAASm0H,EAAczuI,OAE/CskF,EAAYkqD,EAAKlqD,UAEjBqqD,EAAkBH,EAAKrqD,WAAW72E,QAAOikG,GAAyB,IAApBA,EAAE5sB,gBAChDm9C,EAAW,GACX9oI,EAAOwqI,EAASb,QAAU,SAAW,UACrC2K,EAAc9J,EAASgL,KAAKrM,SAClC,IAGIpiD,EAHAouD,EAAmBb,EACnBhmD,EAASk8C,EAASX,eAAiB,EAKrC9iD,EAD8B,kBAArByuD,EAAKhqD,YACD3sF,IAAAA,OAAc62I,GAAWF,EAAKhqD,YAE9BkqD,EAAUF,EAAKhqD,YAG9B,IAAK,IAAI9kF,EAAI,EAAGA,EAAIivI,EAAgB3uI,OAAQN,IAAK,CAC/C,MAAMkvI,EAAYJ,EAAKrqD,WAAWzkF,GAE5BqD,EAAO6rI,EAAUhqD,eAGjB85C,EAAWkQ,EAAU/pD,mBAE3B,IAAIgqD,EAGFA,EADwB,kBAAf9uD,EACEA,EAAaloF,IAAAA,OAAckL,GAAQlL,IAAAA,OAAc,GAEjDkoF,EAAah9E,EAAO,EAGjC,MAaMi9H,EAAUiO,GAZG,CACjB/R,UACA53C,YACA69C,WACAmL,cACAa,mBACA7mD,SACAo3C,WACAqO,iBACAV,WAViB,GAAGtsD,KAAc8uD,IAWlC71I,SAE2C,GAEzCo1I,IACFpO,EAAQhoH,IAAMo2H,GAGhBtM,EAAShnI,KAAKklI,GAGZjgD,GADwB,kBAAfA,EACKloF,IAAAA,OAAckL,GAEdA,EAGhBorI,GAAoBzP,EAAWp6C,EAC/BgD,GACF,CAGA,OADAk8C,EAAS1B,SAAWA,EACb0B,CAAQ,EAGXsL,GAAwB,CAAC,QAAS,aAElCC,GAAa,EAAI,GASjBC,GAA0BC,IAC9B,OAlca/C,EAkcA+C,EAlcOC,EAkcShP,IAAA,IAAC,SAC5BiC,GACDjC,EAAA,OAAKiC,CAAQ,EAncPzT,EAAOwd,EAAMrzI,QAAO,CAACwlI,EAAKh4H,KAC/BA,EAAK/L,SAAQ+P,IACXg0H,EAAI6Q,EAAY7kI,IAAOA,CAAE,IAEpBg0H,IACN,CAAC,KA8bYtP,MAAK,CAACtuC,EAAG4H,IAAM5H,EAAE0hD,SAAW95C,EAAE85C,SAAW,GAAK,IApclDgN,IAACjD,EAAOgD,CAoc4C,EA4B5DE,GAAyB9O,IAC7B,IAAI+O,EAAsB,GC9hBG,IAA2BC,EAAgBr3I,EDkiBxE,OCliBwDq3I,ED+hBtChP,EC/hBsDroI,ED+hBrB,CAACs3I,EAAYv2I,EAAMw2I,EAAOC,KAC3EJ,EAAsBA,EAAoBhmC,OAAOkmC,EAAW9L,WAAa,GAAG,EADlDqL,GC9hBrBx0I,SAAQ,SAAU4uI,GACvB,IAAK,IAAIwG,KAAYJ,EAAO5L,YAAYwF,GACtC,IAAK,IAAIyG,KAAYL,EAAO5L,YAAYwF,GAAWwG,GAAW,CAC5D,IAAIE,EAAkBN,EAAO5L,YAAYwF,GAAWwG,GAAUC,GAC9D13I,EAAS23I,EAAiB1G,EAAWwG,EAAUC,EACjD,CAEJ,ID0hBON,CAAmB,EAUtBQ,GAAiCtE,IAGjC,IAHkC,SACtC/H,EAAQ,cACRX,GACD0I,EACC/H,EAASX,cAAgBA,EACzBW,EAAS1B,SAASxnI,SAAQ,CAAC0lI,EAASxlI,KAClCwlI,EAAQ14C,OAASk8C,EAASX,cAAgBroI,CAAK,GAC/C,EAqIEs1I,GAA6BC,IAG7B,IAH8B,YAClCC,EAAW,YACXC,GACDF,EAoBC,MAAMG,EAAeF,EAAYvM,UAAUp6B,OAAO+lC,GAAuBY,IACnEG,EAAeF,EAAYxM,UAAUp6B,OAAO+lC,GAAuBa,IAazE,OANAA,EAAYhB,eAAiBD,GAAwB,CAACgB,EAAYf,eAAgBgB,EAAYhB,iBAnJlEmB,KAIxB,IAJyB,aAC7BF,EAAY,aACZC,EAAY,eACZlB,GACDmB,EACCD,EAAa71I,SAAQkpI,IACnBA,EAASV,sBAAwBmM,EAAetgB,WAAU,SAAA0hB,GAEvD,IAFiE,SAClElO,GACDkO,EACC,OAAOlO,IAAaqB,EAASrB,QAC/B,IAKA,MAAMmO,EAvEmBC,EAAC9M,EAAWviI,KACvC,IAAK,IAAIxB,EAAI,EAAGA,EAAI+jI,EAAUzjI,OAAQN,IACpC,GAAI+jI,EAAU/jI,GAAGoW,WAAW+tH,OAAS3iI,EACnC,OAAOuiI,EAAU/jI,GAIrB,OAAO,IAAI,EAgEW6wI,CAAqBL,EAAc1M,EAAS1tH,WAAW+tH,MAE3E,IAAKyM,EAGH,OAaF,GAAI9M,EAASgL,KACX,OAKF,MAAMgC,EAAkBhN,EAAS1B,SAAS,GACpC2O,EAA0BH,EAAYxO,SAASnT,WAAU,SAAU+hB,GACvE,OAAOzrI,KAAK0lI,IAAI+F,EAAWvC,iBAAmBqC,EAAgBrC,kBAAoBY,EACpF,IAKA,IAAiC,IAA7B0B,EA8BF,OA7BAZ,GAA+B,CAC7BrM,WACAX,cAAeyN,EAAYzN,cAAgByN,EAAYxO,SAAS9hI,SAElEwjI,EAAS1B,SAAS,GAAG2C,eAAgB,EACrCjB,EAAS7B,oBAAoBx2B,QAAQ,UAoBhCmlC,EAAYxO,SAAS9hI,QAAUwjI,EAASrB,SAAWmO,EAAYnO,UAAYmO,EAAYxO,SAAS9hI,QAAUwjI,EAASrB,SAAWmO,EAAYxO,SAASwO,EAAYxO,SAAS9hI,OAAS,GAAGmiI,WACvLqB,EAASV,yBAiBcwN,EAAYxO,SAAS2O,GAEzBhM,gBAAkB+L,EAAgB/L,gBACvD+L,EAAgB/L,eAAgB,EAChCjB,EAAS7B,oBAAoBx2B,QAAQ,GACrCq4B,EAASV,yBAGX+M,GAA+B,CAC7BrM,WACAX,cAAeyN,EAAYxO,SAAS2O,GAAyBnpD,QAC7D,GACF,EA6CFqpD,CAAsB,CACpBT,eACAC,eACAlB,eAAgBgB,EAAYhB,iBAEvBgB,CAAW,EAGdW,GAAkBpC,GAAQA,GAAQA,EAAKxzI,IAAM,IArkBzBgkI,KAGxB,IAAI0N,EAQJ,OALEA,EAD8B,kBAArB1N,EAAU1kH,QAAmD,kBAArB0kH,EAAUh/H,OAChDnI,IAAAA,OAAcmnI,EAAU1kH,QAAUziB,IAAAA,OAAcmnI,EAAUh/H,QAAUnI,IAAAA,OAAc,GAElFmnI,EAAU1kH,OAAS0kH,EAAUh/H,OAAS,EAG5C,GAAGg/H,EAAU1kH,UAAUoyH,GAAU,EA0jBemE,CAAkBrC,EAAKxP,WAE1E8R,GAA8BrN,IAElC,MAAMsN,EAAqBtN,EAAU5qI,QAAO,SAAUwlI,EAAK2S,GAMzD,OALK3S,EAAI2S,EAAIl7H,WAAWomH,WACtBmC,EAAI2S,EAAIl7H,WAAWomH,SAAW,IAGhCmC,EAAI2S,EAAIl7H,WAAWomH,SAASphI,KAAKk2I,GAC1B3S,CACT,GAAG,CAAC,GACJ,IAAI4S,EAAe,GAwCnB,OAvCAnwI,OAAO4tH,OAAOqiB,GAAoBz2I,SAAQ42I,IACxC,MAAMC,EAAkBziB,EAAOwiB,EAAcr4I,QAAO,CAACwlI,EAAKmF,KAIxD,MAAMtiI,EAAOsiI,EAAS1tH,WAAWuC,IAAMmrH,EAAS1tH,WAAW3N,MAAQ,IA8BnE,OA5BKk2H,EAAIn9H,IAMHsiI,EAAS1B,WAEP0B,EAAS1B,SAAS,KACpB0B,EAAS1B,SAAS,GAAG2C,eAAgB,GAGvCpG,EAAIn9H,GAAM4gI,SAAShnI,QAAQ0oI,EAAS1B,WAKlC0B,EAAS1tH,WAAWmtH,oBACtB5E,EAAIn9H,GAAM4U,WAAWmtH,kBAAoBO,EAAS1tH,WAAWmtH,qBAhB/D5E,EAAIn9H,GAAQsiI,EACZnF,EAAIn9H,GAAM4U,WAAWm5H,eAAiB,IAmBxC5Q,EAAIn9H,GAAM4U,WAAWm5H,eAAen0I,KAAK,CAGvCkN,MAAOw7H,EAAS1tH,WAAWw3H,YAC3BnL,SAAUqB,EAAS1tH,WAAWw3H,cAEzBjP,CAAG,GACT,CAAC,IACJ4S,EAAeA,EAAa5nC,OAAO8nC,EAAgB,IAE9CF,EAAaj5H,KAAIwrH,IAvuBN4N,IAACxpI,EAAGlN,EAyuBpB,OADA8oI,EAAS7B,qBAxuBQ/5H,EAwuB0B47H,EAAS1B,UAAY,GAxuB5CpnI,EAwuBgD,gBAxuBxCkN,EAAE/O,QAAO,CAAC4nF,EAAGnnF,EAAGoG,KAC1CpG,EAAEoB,IACJ+lF,EAAE3lF,KAAK4E,GAGF+gF,IACN,KAmuBQ+iD,CAAQ,GACf,EAGE6N,GAA4BA,CAAC7N,EAAU8N,KAC3C,MAAMC,EAAUX,GAAgBpN,EAASgL,MACnCgD,EAAYD,GAAWD,EAAYC,IAAYD,EAAYC,GAAS/C,KAM1E,OAJIgD,GACFjD,GAA4B/K,EAAUgO,EAAWhO,EAASgL,KAAKlC,aAG1D9I,CAAQ,EAEXiO,GAA6B,SAAChO,GAAgC,IAArB6N,EAAW1lI,UAAA5L,OAAA,QAAA/D,IAAA2P,UAAA,GAAAA,UAAA,GAAG,CAAC,EAC5D,IAAK9K,OAAO0M,KAAK8jI,GAAatxI,OAC5B,OAAOyjI,EAGT,IAAK,MAAM/jI,KAAK+jI,EACdA,EAAU/jI,GAAK2xI,GAA0B5N,EAAU/jI,GAAI4xI,GAGzD,OAAO7N,CACT,EA4LMiO,GAAsBC,IAKtB,IALuB,WAC3B77H,EAAU,SACVgsH,EAAQ,KACR0M,EAAI,oBACJ7M,GACDgQ,EACC,MAAMnO,EAAW,CACf1tH,WAAY,CACV+tH,KAAM/tH,EAAWuC,GACjBu5H,MAAO,QACPC,UAAW,OACX5S,WAAY,CACV19B,MAAOzrF,EAAWyrF,MAClBC,OAAQ1rF,EAAW0rF,QAErBswC,OAAQh8H,EAAWizH,OACnB7J,UAAWppH,EAAWi8H,UACtB,aAAgB,GAElB/2I,IAAK,GACL2nI,QAA6B,WAApB7sH,EAAW9c,KACpBmpI,SAAUrsH,EAAWw3H,YACrBhB,YAAax2H,EAAWomH,SAAW,GACnCsE,eAAgB1qH,EAAW4oH,SAC3BiD,sBACAsN,eAAgBn5H,EAAWm5H,eAC3BnN,YAmBF,OAhBIhsH,EAAWk8H,YACbxO,EAAS1tH,WAAW,cAAgBA,EAAWk8H,WAG7Cl8H,EAAWmtH,oBACbO,EAASP,kBAAoBntH,EAAWmtH,mBAGtCntH,EAAWm8H,kBACbzO,EAAS1tH,WAAWm8H,gBAAkBn8H,EAAWm8H,iBAG/CzD,IACFhL,EAASgL,KAAOA,GAGXhL,CAAQ,EAGX0O,GAAYC,IAAA,IAAC,WACjBr8H,GACDq8H,EAAA,MAA6B,cAAxBr8H,EAAWpN,UAAoD,eAAxBoN,EAAWpN,UAAwD,UAA3BoN,EAAWhd,WAAuB,EAEjHs5I,GAAYC,IAAA,IAAC,WACjBv8H,GACDu8H,EAAA,MAA6B,cAAxBv8H,EAAWpN,UAAoD,eAAxBoN,EAAWpN,UAAwD,UAA3BoN,EAAWhd,WAAuB,EAEjHw5I,GAAUC,IAAA,IAAC,WACfz8H,GACDy8H,EAAA,MAA6B,aAAxBz8H,EAAWpN,UAAsD,SAA3BoN,EAAWhd,WAAsB,EA8DvE05I,GAA6BC,GAC5BA,EAIE3xI,OAAO0M,KAAKilI,GAAkB55I,QAAO,CAACwlI,EAAKoR,KAChD,MAAMiD,EAAgBD,EAAiBhD,GACvC,OAAOpR,EAAIh1B,OAAOqpC,EAAcjP,UAAU,GACzC,IANM,GAQLkP,GAASC,IAOT,IAPU,cACdC,EAAa,UACbC,EAAS,gBACT/L,EAAe,YACfuK,EAAc,CAAC,EAAC,iBAChByB,EAAgB,YAChBC,GACDJ,EACC,IAAKC,EAAc7yI,OACjB,MAAO,CAAC,EAIV,MACE+sI,eAAgBrO,EAAQ,KACxB1lI,EAAI,2BACJi6I,EAA0B,oBAC1B1F,GACEsF,EAAc,GAAG/8H,WACfo9H,EAAiBpC,GAA4B+B,EAAcvlI,OAAO4kI,KAAYl6H,IAAI05H,IAClFyB,EAAiBrC,GAA4B+B,EAAcvlI,OAAO8kI,KAClEgB,EAAetC,GAA4B+B,EAAcvlI,OAAOglI,KAChEe,EAAWR,EAAc76H,KAAIwrH,GAAYA,EAAS1tH,WAAWw9H,kBAAiBhmI,OAAOimI,SACrFjT,EAAW,CACfoB,YAAY,EACZC,oBAAqB,GACrBG,SAAU,GACVa,SAAS,EACTe,YAAa,CACXkO,MAAO,CAAC,EACR4B,MAAO,CAAC,EACR,kBAAqB,CAAC,EACtB3B,UAAW,CAAC,GAEd72I,IAAK,GACL0jI,WACA+E,UAAWgO,GAA2ByB,EAAgB5B,IAGpD/D,GAAuB,IACzBjN,EAASiN,oBAA4C,IAAtBA,GAG7BuF,IACFxS,EAASwS,UAAYA,GAGnB/L,IACFzG,EAASyG,gBAAkBA,GAGhB,YAAT/tI,IACFsnI,EAAS2S,2BAA6BA,GAGpCD,GAAeA,EAAYhzI,OAAS,IACtCsgI,EAAS0S,YAAcA,GAGzB,MAAMS,EAA4C,IAA9BnT,EAASmD,UAAUzjI,OACjC0zI,EAAsBP,EAAenzI,OAzRd,SAACyjI,GAAqD,IAC/EkQ,EADqCrC,EAAW1lI,UAAA5L,OAAA,QAAA/D,IAAA2P,UAAA,GAAAA,UAAA,GAAG,CAAC,EAAG6nI,EAAW7nI,UAAA5L,OAAA,QAAA/D,IAAA2P,UAAA,IAAAA,UAAA,GAEtE,MAAMgoI,EAAqBnQ,EAAU5qI,QAAO,CAAC4nF,EAAG+iD,KAC9C,MAAMhP,EAAOgP,EAAS1tH,WAAW0+G,MAAQgP,EAAS1tH,WAAW0+G,KAAKv7H,OAAS,GACrEkrI,EAAWX,EAAS1tH,WAAW3N,MAAQ,GAC7C,IAAIsnI,EAAQjM,EAAS1tH,WAAW25H,OAAS,OAEzC,GAAItL,IAAaX,EAAS1tH,WAAW25H,MAAO,CAC1C,MAAMoE,EAAYrf,EAAO,KAAKA,KAAU,GACxCib,EAAQ,GAAGjM,EAAS1tH,WAAW3N,OAAO0rI,GACxC,CAEKpzD,EAAEgvD,KACLhvD,EAAEgvD,GAAS,CACTtL,WACAH,YAAY,EACZ9X,QAAkB,SAATsI,EACTiP,UAAW,GACXzoI,IAAK,KAIT,MAAM84I,EAAYzC,GAtHM0C,EAAAC,EAOzBP,KAAgB,IAPU,WAC3B39H,EAAU,SACVgsH,EAAQ,KACR0M,EAAI,cACJ3L,EAAa,sBACbC,EAAqB,oBACrBnB,GACDqS,EACC,MAAMxQ,EAAW,CACf1tH,WAAY,CACV+tH,KAAM/tH,EAAWuC,GACjB6mH,UAAWppH,EAAWi8H,UACtBD,OAAQh8H,EAAWizH,OACnB,aAAgB,GAElB/tI,IAAK,GACL2nI,QAA6B,WAApB7sH,EAAW9c,KACpBmpI,SAAUrsH,EAAWw3H,YACrBhB,YAAax2H,EAAWomH,SAAW,GACnCsE,eAAgB1qH,EAAW4oH,SAC3BoE,wBACAnB,sBACAsN,eAAgBn5H,EAAWm5H,eAC3BpM,gBACAf,YAoBF,OAjBIhsH,EAAWmtH,oBACbO,EAASP,kBAAoBntH,EAAWmtH,mBAGtCntH,EAAWm8H,kBACbzO,EAAS1tH,WAAWm8H,gBAAkBn8H,EAAWm8H,iBAG/CzD,IACFhL,EAASgL,KAAOA,GAGdiF,IACFjQ,EAAS1tH,WAAW87H,MAAQ,QAC5BpO,EAAS1tH,WAAW+7H,UAAY,QAG3BrO,CAAQ,EA0E+BuQ,CAAoBvQ,EAAUiQ,GAAcnC,GAQxF,OAPA7wD,EAAEgvD,GAAOhM,UAAU3oI,KAAKg5I,GAEI,qBAAjBH,GAAyC,SAATnf,IACzCmf,EAAenQ,EACfmQ,EAAaznB,SAAU,GAGlBzrC,CAAC,GACP,CAAC,GAECkzD,IAEHC,EADmB9yI,OAAO0M,KAAKomI,GAAoB,IACpB1nB,SAAU,GAG3C,OAAO0nB,CACT,CAkPsDK,CAAuBd,EAAgB7B,EAAamC,GAAe,KACjHS,EAAoBd,EAAapzI,OAlPZ,SAACyjI,GAAgC,IAArB6N,EAAW1lI,UAAA5L,OAAA,QAAA/D,IAAA2P,UAAA,GAAAA,UAAA,GAAG,CAAC,EACtD,OAAO63H,EAAU5qI,QAAO,CAAC4nF,EAAG+iD,KAC1B,MAAMiM,EAAQjM,EAAS1tH,WAAW25H,OAASjM,EAAS1tH,WAAW3N,MAAQ,OAavE,OAXKs4E,EAAEgvD,KACLhvD,EAAEgvD,GAAS,CACTtL,SAAUsL,EACVvjB,SAAS,EACT8X,YAAY,EACZP,UAAW,GACXzoI,IAAK,KAITylF,EAAEgvD,GAAOhM,UAAU3oI,KAAKu2I,GAxGF8C,KAMpB,IANqB,WACzBr+H,EAAU,SACVgsH,EAAQ,cACRe,EAAa,oBACblB,EAAmB,sBACnBmB,GACDqR,EACyB,qBAAbrS,IAETA,EAAW,CAAC,CACV9mI,IAAK8a,EAAWomH,QAChBiG,SAAUrsH,EAAWw3H,YACrBhB,YAAax2H,EAAWomH,SAAW,GACnCwC,SAAU5oH,EAAWi3H,eACrBzlD,OAAQ,IAGVxxE,EAAW4oH,SAAW5oH,EAAWi3H,gBAGnC,MAAMqH,EAAiB,CACrBvQ,KAAM/tH,EAAWuC,GACjB6mH,UAAWppH,EAAWi8H,UACtB,aAAgB,GAGdj8H,EAAWizH,SACbqL,EAAetC,OAASh8H,EAAWizH,QAGrC,MAAMsL,EAAc,CAClBv+H,WAAYs+H,EACZp5I,IAAK,GACL2nI,QAA6B,WAApB7sH,EAAW9c,KACpBmpI,SAAUrsH,EAAWw3H,YACrBhB,YAAax2H,EAAWomH,SAAW,GACnCsE,eAAgB1qH,EAAW4oH,SAC3BuQ,eAAgBn5H,EAAWm5H,eAC3BtN,sBACAmB,wBACAD,gBACAf,YAOF,OAJIhsH,EAAWm8H,kBACboC,EAAYv+H,WAAWm8H,gBAAkBn8H,EAAWm8H,iBAG/CoC,CAAW,EAwDkCC,CAAkB9Q,GAAW8N,IACxE7wD,CAAC,GACP,CAAC,EACN,CAiOkD8zD,CAAqBnB,EAAc9B,GAAe,KAC5FsC,EAAqBV,EAAe7pC,OAAOmpC,GAA2BkB,GAAsBlB,GAA2B0B,IACvHM,EAAyBZ,EAAmB57H,KAAIy8H,IAAA,IAAC,eACrDxF,GACDwF,EAAA,OAAKxF,CAAc,IAxGSyF,IAACjR,EAAWwL,EAwHzC,OAfA3O,EAAS2O,eAAiBD,GAAwBwF,GAzGpB/Q,EA0GPmQ,EA1GkB3E,EA0GE3O,EAAS2O,eAxGpDxL,EAAUnpI,SAAQkpI,IAChBA,EAASX,cAAgB,EACzBW,EAASV,sBAAwBmM,EAAetgB,WAAU,SAAAgmB,GAEvD,IAFiE,SAClExS,GACDwS,EACC,OAAOxS,IAAaqB,EAASrB,QAC/B,IAEKqB,EAAS1B,UAId0B,EAAS1B,SAASxnI,SAAQ,CAAC0lI,EAASxlI,KAClCwlI,EAAQ14C,OAAS9sF,CAAK,GACtB,IA4FAk5I,IACFpT,EAASoD,YAAYkO,MAAM1J,MAAQwL,GAGjCQ,IACF5T,EAASoD,YAAYmO,UAAU+C,KAAOV,GAGpCb,EAASrzI,SACXsgI,EAASoD,YAAY,mBAAmBrtC,GAA6Bg9C,EAhPNx6I,QAAO,CAACg8I,EAAQC,IAC5EA,GAILA,EAAIx6I,SAAQy6I,IACV,MAAM,QACJC,EAAO,SACP7Q,GACE4Q,EACJF,EAAO1Q,GAAY,CACjBH,YAAY,EACZ9X,SAAS,EACTkY,WAAY4Q,EACZ7Q,YAGE4Q,EAAQv1I,eAAe,iBACzBq1I,EAAO1Q,GAAUz0C,YAAcqlD,EAAQrlD,aAGrCqlD,EAAQv1I,eAAe,gBACzBq1I,EAAO1Q,GAAU8Q,WAAaF,EAAQE,YAGpCF,EAAQv1I,eAAe,QACzBq1I,EAAO1Q,GAAU,MAAQ4Q,EAAQ,MACnC,IAEKF,GA3BEA,GA4BR,CAAC,IAqNE9B,EACKjD,GAA2B,CAChCE,YAAa+C,EACb9C,YAAa3P,IAIVA,CAAQ,EAkBX4U,GAAgBA,CAACp/H,EAAYguF,EAAM46B,KACvC,MAAM,IACJyO,EAAG,aACHC,EAAY,sBACZC,EAAqB,UACrB/oD,EAAY,EAAC,YACbgpD,EAAc,EAAC,oBACfC,EAAsB,GACpBz3H,EAIEk3H,GAHOG,EAAMC,GAAgB,IAETG,GADJF,EAAwBC,GAG9C,OAAOroI,KAAK4+G,MAAMmpB,EAAiB1oD,EAAYwf,GAAQ46B,EAAS,EAiB5DyW,GAAkBA,CAACr/H,EAAYs/H,KACnC,MAAM,KACJp8I,EAAI,oBACJu0I,EAAsB,EAAC,MACvB5J,EAAQ,GAAE,eACVoJ,EAAc,UACdzoD,EAAY,EAAC,YACbwpD,EAAc,EACdR,YAAanL,GACXrsH,EACEgsH,EAAW,GACjB,IAAIh+B,GAAQ,EAEZ,IAAK,IAAIuxC,EAAS,EAAGA,EAASD,EAAgBp1I,OAAQq1I,IAAU,CAC9D,MAAM70B,EAAI40B,EAAgBC,GACpB3W,EAAWle,EAAEx3B,EACbkY,EAASsf,EAAEjP,GAAK,EAChB+jC,EAAc90B,EAAExyG,GAAK,EA+B3B,IAAIuM,EAEJ,GA/BIupF,EAAO,IAETA,EAAOwxC,GAGLA,GAAeA,EAAcxxC,IAqB/BA,EAAOwxC,GAKLp0C,EAAS,EAAG,CACd,MAAMq0C,EAAQF,EAAS,EAKnB96H,EAHAg7H,IAAUH,EAAgBp1I,OAEf,YAAThH,GAAsBu0I,EAAsB,GAAK5J,EAAMlpI,QAAQ,YAAc,EACvEy6I,GAAcp/H,EAAYguF,EAAM46B,IAG/BqO,EAAiBzoD,EAAYwf,GAAQ46B,GAGvC0W,EAAgBG,GAAOvnI,EAAI81F,GAAQ46B,CAEhD,MACEnkH,EAAQ2mF,EAAS,EAGnB,MAAM7f,EAAMysD,EAAchM,EAAS9hI,OAASua,EAC5C,IAAI+sE,EAASwmD,EAAchM,EAAS9hI,OAEpC,KAAOsnF,EAASjG,GACdygD,EAAShnI,KAAK,CACZwsF,SACAo3C,SAAUA,EAAWp6C,EACrBwf,OACAq+B,aAEFr+B,GAAQ46B,EACRp3C,GAEJ,CAEA,OAAOw6C,CAAQ,EAGX0T,GAAoB,kCAsFpBC,GAAuBA,CAACj6I,EAAKkzH,IAAWlzH,EAAI0L,QAAQsuI,GAhD5B9mB,IAAU,CAACnuC,EAAOmnD,EAAYtZ,EAAQ7sB,KAClE,GAAc,OAAVhhB,EAEF,MAAO,IAGT,GAAkC,qBAAvBmuC,EAAOgZ,GAChB,OAAOnnD,EAGT,MAAMtnF,EAAQ,GAAKy1H,EAAOgZ,GAE1B,MAAmB,qBAAfA,EAEKzuI,GAMPsoG,EAHG6sB,EAGKnsC,SAASsf,EAAO,IAFhB,EAKNtoG,EAAM+G,QAAUuhG,EACXtoG,EAGF,GAAG,IAAI2B,MAAM2mG,EAAQtoG,EAAM+G,OAAS,GAAG0V,KAAK,OAAOzc,IAAO,EAqBUy8I,CAAsBhnB,IA8C7FinB,GAAuBA,CAAC7/H,EAAYs/H,KACxC,MAAMQ,EAAiB,CACrBC,iBAAkB//H,EAAWuC,GAC7By9H,UAAWhgI,EAAWi8H,WAAa,IAE/B,eACJ7D,EAAiB,CACfG,UAAW,GACX52E,MAAO,KAEP3hD,EACEigI,EAAa3J,GAAiB,CAClClQ,QAASpmH,EAAWomH,QACpB/1H,OAAQsvI,GAAqBvH,EAAeG,UAAWuH,GACvDn+E,MAAOy2E,EAAez2E,QAElBqqE,EA/CkBkU,EAAClgI,EAAYs/H,IAChCt/H,EAAW4oH,UAAa0W,EAWzBt/H,EAAW4oH,SACNmP,GAAgB/3H,GAGlBq/H,GAAgBr/H,EAAYs/H,GAZ1B,CAAC,CACN9tD,OAAQxxE,EAAWg4H,aAAe,EAClCpP,SAAU5oH,EAAWi3H,eACrBjpC,KAAM,EACNq+B,SAAUrsH,EAAWw3H,cAuCR0I,CAAkBlgI,EAAYs/H,GAC/C,OAAOtT,EAAS9pH,KAAIgoH,IAClB4V,EAAezvD,OAAS65C,EAAQ14C,OAChCsuD,EAAeK,KAAOjW,EAAQl8B,KAC9B,MAAM9oG,EAAMy6I,GAAqB3/H,EAAW6tH,OAAS,GAAIiS,GAGnDtxD,EAAYxuE,EAAWwuE,WAAa,EAEpC4xD,EAAyBpgI,EAAWogI,wBAA0B,EAC9D/H,EAENr4H,EAAWw3H,aAAetN,EAAQl8B,KAAOoyC,GAA0B5xD,EAUnE,MATY,CACVtpF,MACAmnI,SAAUnC,EAAQmC,SAClBzD,SAAUsB,EAAQtB,SAClB4N,YAAaC,EAAWz2H,EAAWomH,SAAW,GAAIlhI,GAClDgd,IAAK+9H,EACLzuD,OAAQ04C,EAAQ14C,OAChB6mD,mBAEQ,GACV,EAgDEgI,GAAmBA,CAACrgI,EAAYs/H,KACpC,MAAM,SACJ1W,EAAQ,YACR0X,EAAc,GAAE,YAChB9I,GACEx3H,EAGJ,IAAK4oH,IAAa0W,GAAmB1W,GAAY0W,EAC/C,MAAM,IAAIh6I,MAAM+wI,IAGlB,MAAMkK,EAAgBD,EAAYp+H,KAAIs+H,GA7CNC,EAACzgI,EAAY0gI,KAC7C,MAAM,QACJta,EAAO,eACPgS,EAAiB,CAAC,GAChBp4H,EACEs4H,EAAchC,GAAiB,CACnClQ,UACA/1H,OAAQ+nI,EAAeG,UACvB52E,MAAOy2E,EAAez2E,QAElBuoE,EAAUoM,GAAiB,CAC/BlQ,UACA/1H,OAAQqwI,EAAW7S,MACnBlsE,MAAO++E,EAAWC,aAGpB,OADAzW,EAAQhoH,IAAMo2H,EACPpO,CAAO,EA6B4CuW,CAA0BzgI,EAAYwgI,KAChG,IAAIhI,EAEA5P,IACF4P,EAAkBT,GAAgB/3H,IAGhCs/H,IACF9G,EAAkB6G,GAAgBr/H,EAAYs/H,IAqBhD,OAlBiB9G,EAAgBt2H,KAAI,CAACs9H,EAAa96I,KACjD,GAAI67I,EAAc77I,GAAQ,CACxB,MAAMwlI,EAAUqW,EAAc77I,GAGxB8pF,EAAYxuE,EAAWwuE,WAAa,EAEpC4xD,EAAyBpgI,EAAWogI,wBAA0B,EAKpE,OAJAlW,EAAQmC,SAAWmT,EAAYnT,SAC/BnC,EAAQtB,SAAW4W,EAAY5W,SAC/BsB,EAAQ14C,OAASguD,EAAYhuD,OAC7B04C,EAAQmO,iBAAmBb,GAAegI,EAAYxxC,KAAOoyC,GAA0B5xD,EAChF07C,CACT,KAIC1yH,QAAO0yH,GAAWA,GACN,EAGX0W,GAAmBC,IAGnB,IACAC,EACAC,GALoB,WACxB/gI,EAAU,YACVghI,GACDH,EAIKG,EAAYC,UACdF,EAAalB,GACbiB,EAAoB/K,EAAM/1H,EAAYghI,EAAYC,WACzCD,EAAYn+H,MACrBk+H,EAAa5I,GACb2I,EAAoB/K,EAAM/1H,EAAYghI,EAAYn+H,OACzCm+H,EAAYzwI,OACrBwwI,EAAaV,GACbS,EAAoB/K,EAAM/1H,EAAYghI,EAAYzwI,OAGpD,MAAM2wI,EAAe,CACnBlhI,cAGF,IAAK+gI,EACH,OAAOG,EAGT,MAAMlV,EAAW+U,EAAWD,EAAmBE,EAAY1B,iBAI3D,GAAIwB,EAAkBlY,SAAU,CAC9B,MAAM,SACJA,EAAQ,UACRp6C,EAAY,GACVsyD,EACJA,EAAkBlY,SAAWA,EAAWp6C,CAC1C,MAAWw9C,EAAS9hI,OAGlB42I,EAAkBlY,SAAWoD,EAASjpI,QAAO,CAACiqF,EAAKk9C,IAC1C/6H,KAAK69E,IAAIA,EAAK79E,KAAK4+G,KAAKmc,EAAQtB,YACtC,GAEHkY,EAAkBlY,SAAW,EAW/B,OARAsY,EAAalhI,WAAa8gI,EAC1BI,EAAalV,SAAWA,EAEpBgV,EAAYn+H,MAAQi+H,EAAkBvK,aACxC2K,EAAaxI,KAAO1M,EAAS,GAC7BkV,EAAalV,SAAW,IAGnBkV,CAAY,EAIfC,GAAeA,CAAC7pI,EAASlM,IAASC,GAAKiM,EAAQkF,YAAYhF,QAAO4pI,IAAA,IAAC,QACvEjsI,GACDisI,EAAA,OAAKjsI,IAAY/J,CAAI,IAChBi2I,GAAa/pI,GAAWA,EAAQ0hF,YAAY51F,OAa5Ck+I,GAAgBhX,IACpB,MAOM7/C,EADgB,+EACMgB,KAAK6+C,GAEjC,IAAK7/C,EACH,OAAO,EAGT,MAAO82D,EAAM1zC,EAAO2zC,EAAKC,EAAMC,EAAQC,GAAUl3D,EAAM5lF,MAAM,GAC7D,OAdwB,QAcjBgkI,WAAW0Y,GAAQ,GAbD,OAawB1Y,WAAWh7B,GAAS,GAZ9C,MAYsEg7B,WAAW2Y,GAAO,GAXvF,KAW6G3Y,WAAW4Y,GAAQ,GAVjI,GAUwJ5Y,WAAW6Y,GAAU,GAAsB7Y,WAAW8Y,GAAU,EAAE,EAe7OC,GAAU,CAUdC,0BAA0B1+I,GACjBm+I,GAAcn+I,GAavBo0I,qBAAAA,CAAsBp0I,GACpB,MAnCgB,oCAGJmI,KANEg/H,EAsCGnnI,KA/BjBmnI,GAAO,KAGF7iC,KAAK3gG,MAAMwjI,GA4BU,IAtCZA,KAuChB,EAWAmN,oBAAoBt0I,GACXm+I,GAAcn+I,GAYvBg6I,2BAA2Bh6I,GAClBm+I,GAAcn+I,GAYvBD,KAAKC,GACIA,EAYTu0I,qBAAqBv0I,GACZm+I,GAAcn+I,GAYvB+O,MAAM/O,GACGm+I,GAAcn+I,GAWvBsoG,MAAMtoG,GACGgpF,SAAShpF,EAAO,IAWzBuoG,OAAOvoG,GACEgpF,SAAShpF,EAAO,IAWzB84I,UAAU94I,GACDgpF,SAAShpF,EAAO,IAWzB+4I,UAAU/4I,GA3KeA,IAClB0lI,WAAW1lI,EAAML,MAAM,KAAKC,QAAO,CAAC++I,EAAM5sI,IAAY4sI,EAAO5sI,KA2K3D6sI,CAAmB5+I,GAW5B60I,YAAY70I,GACHgpF,SAAShpF,EAAO,IAWzBqrF,UAAUrrF,GACDgpF,SAAShpF,EAAO,IAYzBi9I,uBAAuBj9I,GACdgpF,SAAShpF,EAAO,IAezBylI,QAAAA,CAASzlI,GACP,MAAM6+I,EAAc71D,SAAShpF,EAAO,IAEpC,OAAI6wF,MAAMguD,GACDV,GAAcn+I,GAGhB6+I,CACT,EAUA9uD,EAAE/vF,GACOgpF,SAAShpF,EAAO,IAYzB+U,EAAE/U,GACOgpF,SAAShpF,EAAO,IAYzBs4G,EAAEt4G,GACOgpF,SAAShpF,EAAO,IAYzBk1I,iBAAiBl1I,GACRgpF,SAAShpF,EAAO,IAYzB8qI,QAAQ9qI,GACCA,GAcL6kI,GAAkBzzH,GAChBA,GAAMA,EAAGyL,WAIR3U,GAAKkJ,EAAGyL,YAAYjd,QAAO,CAAC4nF,EAAGnnF,KACpC,MAAMy+I,EAAUL,GAAQp+I,EAAE4H,OAASw2I,GAAQ3T,QAE3C,OADAtjD,EAAEnnF,EAAE4H,MAAQ62I,EAAQz+I,EAAEL,OACfwnF,CAAC,GACP,CAAC,GAPK,CAAC,EAUNu3D,GAAgB,CACpB,gDAAiD,kBACjD,gDAAiD,qBACjD,gDAAiD,0BACjD,gDAAiD,sBAEjD,mCAAoC,iBAahCC,GAAgBA,CAAC9zD,EAAY+zD,IAC5BA,EAAgBl4I,OAIdisI,EAAQ9nD,EAAWnsE,KAAI,SAAU42H,GACtC,OAAOsJ,EAAgBlgI,KAAI,SAAUmgI,GACnC,MAAMC,EAAiBjB,GAAWgB,GAC5BE,EAAkB9L,EAAWqC,EAAU1S,QAASkc,GAChDE,EAAezM,EAAM/N,GAAgBqa,GAAiB,CAC1Djc,QAASmc,IAQX,OAJIA,IAAoBD,IAAmBE,EAAarG,iBAAmBrD,EAAUqD,kBACnFqG,EAAarG,gBAAkBrD,EAAUqD,iBAGpCqG,CACT,GACF,KAlBSn0D,EA2CLo0D,GAAwBC,IAC5B,MAAMC,EAAkBxB,GAAauB,EAAe,mBAAmB,GACjEE,EAAczB,GAAauB,EAAe,eAAe,GACzDpC,EAAcsC,GAAezB,GAAayB,EAAa,cAAc1gI,KAAImoE,GAAK0rD,EAAM,CACxF5/C,IAAK,cACJ6xC,GAAgB39C,MACbw4D,EAAc1B,GAAauB,EAAe,eAAe,GACzDI,EAA4BF,GAAeD,EAC3CrD,EAAkBwD,GAA6B3B,GAAa2B,EAA2B,mBAAmB,GAC1GC,EAAkCH,GAAeC,GAAeF,EAChEK,EAAwBD,GAAmC5B,GAAa4B,EAAiC,kBAAkB,GAM3H9B,EAAW0B,GAAmB3a,GAAgB2a,GAEhD1B,GAAY+B,EACd/B,EAAS7I,eAAiB4K,GAAyBhb,GAAgBgb,GAC1D/B,GAAYA,EAAS7I,iBAI9B6I,EAAS7I,eAAiB,CACxBG,UAAW0I,EAAS7I,iBAIxB,MAAM4I,EAAc,CAClBC,WACA3B,gBAAiBA,GAAmB6B,GAAa7B,EAAiB,KAAKp9H,KAAImoE,GAAK29C,GAAgB39C,KAChG95E,KAAMqyI,GAAe7M,EAAM/N,GAAgB4a,GAAc,CACvDtC,cACAlI,eAAgBpQ,GAAgBgb,KAElCngI,KAAMggI,GAAe9M,EAAM/N,GAAgB6a,GAAc,CACvDzK,eAAgBpQ,GAAgBgb,MAQpC,OALAh4I,OAAO0M,KAAKspI,GAAax8I,SAAQI,IAC1Bo8I,EAAYp8I,WACRo8I,EAAYp8I,EACrB,IAEKo8I,CAAW,EA4KdiC,GAAgBtnF,GAEbw6E,EAAQgL,GAAaxlF,EAAOjqD,KAAM,eAAewQ,KAAIg7H,IAC1D,MAAMgG,EAAwBlb,GAAgBkV,GACxC7P,EAAc6V,EAAsB7V,YAE1C,OAAO8T,GAAajE,EAAa,SAASh7H,KAAIksF,IAC5C,MAAM+0C,EAAkBnb,GAAgB55B,GAClCiqC,EAAmB8K,EAAgB9K,kBAAoB,EACvD7pD,EAAY00D,EAAsB10D,WAAa,EAC/Co6C,EAAWua,EAAgBva,UAAY,EACvC12H,EAAQmmI,EAAmB7pD,EAAY7yB,EAAO37C,WAAW9N,MAC/D,MAAO,CACLm7H,cACAlqI,MAAO+/I,EAAsB//I,MAC7Bof,GAAI4gI,EAAgB5gI,GACpBrQ,QACAq5E,IAAKr5E,EAAQ02H,EAAWp6C,EACxB40D,YAAa/B,GAAWjzC,IAAU+0C,EAAgBC,YAClDC,gBAAiBH,EAAsBG,gBACvCjD,uBAAwB8C,EAAsB9C,wBAA0B,EACzE,GACD,KA6BAkD,GAAoBA,CAACC,EAAkBC,EAAgBC,IAAsBf,IACjF,MAAMgB,EAA0B1b,GAAgB0a,GAC1CiB,EAAwBxB,GAAcqB,EAAgBrC,GAAauB,EAAe,YAClFhkB,EAAOyiB,GAAauB,EAAe,QAAQ,GAC3CkB,EAAiB,CACrBllB,KAAMsJ,GAAgBtJ,IAExB,IAAIpqH,EAAQyhI,EAAMwN,EAAkBG,EAAyBE,GAC7D,MAAMC,EAAgB1C,GAAauB,EAAe,iBAAiB,GAC7DlF,EA7I4ByB,KAElC,GAA4B,kCAAxBA,EAAQ5R,YAEV,OADwC,kBAAlB4R,EAAQ97I,MAAqB,GAAK87I,EAAQ97I,MAAML,MAAM,MAC9Dof,KAAI/e,IAChB,IAAI+7I,EACA7Q,EAUJ,OARAA,EAAWlrI,EAEP,SAASmI,KAAKnI,IACf+7I,EAAS7Q,GAAYlrI,EAAML,MAAM,KACzB,SAASwI,KAAKnI,KACvB+7I,EAAU/7I,GAGL,CACL+7I,UACA7Q,WACD,IAEE,GAA4B,kCAAxB4Q,EAAQ5R,YAEjB,OADwC,kBAAlB4R,EAAQ97I,MAAqB,GAAK87I,EAAQ97I,MAAML,MAAM,MAC9Dof,KAAI/e,IAChB,MAAMgrF,EAAQ,CAEZ,aAAWhoF,EAGX,cAAYA,EAGZ,YAAe,EAIf,WAAc,EAId,KAAM,GAGR,GAAI,IAAImF,KAAKnI,GAAQ,CACnB,MAAO+7I,EAASla,EAAO,IAAM7hI,EAAML,MAAM,KACzCqrF,EAAM+wD,QAAUA,EAChB/wD,EAAMkgD,SAAWlrI,EACjB6hI,EAAKliI,MAAM,KAAK0B,SAAQs/I,IACtB,MAAO14I,EAAMgmI,GAAO0S,EAAIhhJ,MAAM,KAEjB,SAATsI,EACF+iF,EAAMkgD,SAAW+C,EACC,OAAThmI,EACT+iF,EAAMgxD,WAAa9uD,OAAO+gD,GACR,QAAThmI,EACT+iF,EAAMyL,YAAcvJ,OAAO+gD,GACT,OAAThmI,IACT+iF,EAAM,MAAQkC,OAAO+gD,GACvB,GAEJ,MACEjjD,EAAMkgD,SAAWlrI,EAOnB,OAJIgrF,EAAM+wD,UACR/wD,EAAM+wD,QAAU,UAAY/wD,EAAM+wD,SAG7B/wD,CAAK,GAEhB,EAuEwB41D,CAA4B/b,GAAgB6b,IAEhErG,IACFlpI,EAAQyhI,EAAMzhI,EAAO,CACnBkpI,qBAIJ,MAAM7D,EAAQwH,GAAauB,EAAe,SAAS,GAEnD,GAAI/I,GAASA,EAAMn9H,WAAWtS,OAAQ,CACpC,MAAM85I,EAAWrK,EAAMn9H,WAAW,GAAGzH,UAAU3R,OAC/CkR,EAAQyhI,EAAMzhI,EAAO,CACnBqlI,MAAOqK,GAEX,CAEA,MAAM7W,EAAiDgU,GAAauB,EAAe,qBA3LrD3/I,QAAO,CAACwlI,EAAK72H,KACzC,MAAMsO,EAAagoH,GAAgBt2H,GAK/BsO,EAAWqtH,cACbrtH,EAAWqtH,YAAcrtH,EAAWqtH,YAAYxqI,eAGlD,MAAMohJ,EAAY/B,GAAcliI,EAAWqtH,aAE3C,GAAI4W,EAAW,CACb1b,EAAI0b,GAAa,CACfjkI,cAEF,MAAMkkI,EAAW/C,GAAazvI,EAAM,aAAa,GAEjD,GAAIwyI,EAAU,CACZ,MAAM3W,EAAO8T,GAAW6C,GACxB3b,EAAI0b,GAAW1W,KAAOA,GAAQhG,EAAsBgG,EACtD,CACF,CAEA,OAAOhF,CAAG,GACT,CAAC,GAoKAv9H,OAAO0M,KAAKy1H,GAAmBjjI,SACjCoK,EAAQyhI,EAAMzhI,EAAO,CACnB64H,uBAIJ,MAAM6T,EAAcyB,GAAsBC,GACpCyB,EAAkBhD,GAAauB,EAAe,kBAC9C0B,EAA2BrO,EAAM0N,EAAmBzC,GAC1D,OAAO7K,EAAQgO,EAAgBjiI,IA7NTmiI,EAACX,EAAyBC,EAAuBS,IAA6BE,IACpG,MAAMC,EAAqBpD,GAAamD,EAAgB,WAClDE,EAAcrC,GAAcwB,EAAuBY,GACnDvkI,EAAa+1H,EAAM2N,EAAyB1b,GAAgBsc,IAC5DG,EAA4BhC,GAAsB6B,GACxD,OAAOE,EAAYtiI,KAAIkkH,IACd,CACL4a,YAAajL,EAAMqO,EAA0BK,GAC7CzkI,WAAY+1H,EAAM/1H,EAAYomH,MAEhC,EAmNiCie,CAAgB/vI,EAAOqvI,EAAuBS,IAA2B,EAuCxGM,GAAmBA,CAACC,EAAeC,IAAgB,CAACjpF,EAAQj3D,KAChE,MAAM8+I,EAAiBrB,GAAcyC,EAAazD,GAAaxlF,EAAOjqD,KAAM,YACtE6xI,EAAmBxN,EAAM4O,EAAe,CAC5CnN,YAAa77E,EAAO37C,WAAW9N,QAGS,kBAA/BypD,EAAO37C,WAAW4oH,WAC3B2a,EAAiBrM,eAAiBv7E,EAAO37C,WAAW4oH,UAGtD,MAAMic,EAAiB1D,GAAaxlF,EAAOjqD,KAAM,iBAC3C+xI,EAAoBhB,GAAsB9mF,EAAOjqD,MACvD,OAAOykI,EAAQ0O,EAAe3iI,IAAIohI,GAAkBC,EAAkBC,EAAgBC,IAAoB,EAiBtGqB,GAAqCA,CAACC,EAAsBC,KAUhE,GARID,EAAqB76I,OAAS,GAChC86I,EAAa,CACX9hJ,KAAM,OACNgX,QAAS,0EAKR6qI,EAAqB76I,OACxB,OAAO,KAGT,MAAM+6I,EAA6BlP,EAAM,CACvCmP,UAAW7D,GAAW0D,EAAqB,KAC1C/c,GAAgB+c,EAAqB,KAIxC,OADAE,EAA2BE,iBAAmE,SAAhDF,EAA2BE,iBAClEF,CAA0B,EAmJ7BG,GAAiBC,IACrB,GAAuB,KAAnBA,EACF,MAAM,IAAI//I,MAAM+wI,IAGlB,MAAMiP,EAAS,IAAIj0I,EAAAA,UACnB,IAAIuC,EACA2xI,EAEJ,IACE3xI,EAAM0xI,EAAO3yI,gBAAgB0yI,EAAgB,mBAC7CE,EAAM3xI,GAAuC,QAAhCA,EAAInN,gBAAgB0O,QAAoBvB,EAAInN,gBAAkB,IAC7E,CAAE,MAAOjD,GAAI,CAGb,IAAK+hJ,GAAOA,GAAOA,EAAIlhI,qBAAqB,eAAena,OAAS,EAClE,MAAM,IAAI5E,MAAM+wI,IAGlB,OAAOkP,CAAG,EAiENz+I,GAAQ,SAACu+I,GAAiC,IAAjBlgJ,EAAO2Q,UAAA5L,OAAA,QAAA/D,IAAA2P,UAAA,GAAAA,UAAA,GAAG,CAAC,EACxC,MAAM0vI,EA3JkB,SAACD,GAAsB,IAAjBpgJ,EAAO2Q,UAAA5L,OAAA,QAAA/D,IAAA2P,UAAA,GAAAA,UAAA,GAAG,CAAC,EACzC,MAAM,YACJ2vI,EAAc,GAAE,IAChBpO,EAAM5vC,KAAKC,MAAK,aAChB4vC,EAAe,EAAC,aAOhB0N,EAAe,WAAa,GAC1B7/I,EACEugJ,EAAcvE,GAAaoE,EAAK,UAEtC,IAAKG,EAAYx7I,OACf,MAAM,IAAI5E,MAAM+wI,IAGlB,MAAM2G,EAAYmE,GAAaoE,EAAK,YAC9BZ,EAAgB3c,GAAgBud,GAChCX,EAAczC,GAAc,CAAC,CACjC/b,QAASqf,IACPtE,GAAaoE,EAAK,YAChBR,EAAuB5D,GAAaoE,EAAK,mBAE/CZ,EAAczhJ,KAAOyhJ,EAAczhJ,MAAQ,SAC3CyhJ,EAAc1N,eAAiB0N,EAAc9C,2BAA6B,EAC1E8C,EAActN,IAAMA,EACpBsN,EAAcrN,aAAeA,EAEzB0F,EAAU9yI,SACZy6I,EAAc3H,UAAYA,EAAU96H,IAAIm/H,KAG1C,MAAMsE,EAAU,GAoBhB,OAfAD,EAAYlhJ,SAAQ,CAACkN,EAAMhN,KACzB,MAAMsb,EAAagoH,GAAgBt2H,GAG7Bk0I,EAAcD,EAAQjhJ,EAAQ,GACpCsb,EAAW9N,MAzGQ2zI,KAIjB,IAJkB,WACtB7lI,EAAU,sBACV8lI,EAAqB,QACrBC,GACDF,EAeC,MAAgC,kBAArB7lI,EAAW9N,MACb8N,EAAW9N,MAIhB4zI,GAAgE,kBAAhCA,EAAsB5zI,OAAgE,kBAAnC4zI,EAAsBld,SACpGkd,EAAsB5zI,MAAQ4zI,EAAsBld,SAIxDkd,GAAqC,WAAZC,EAWvB,KAVE,CAUE,EAiEUC,CAAe,CAChChmI,aACA8lI,sBAAuBF,EAAcA,EAAY5lI,WAAa,KAC9D+lI,QAASpB,EAAczhJ,OAEzByiJ,EAAQ3gJ,KAAK,CACX0M,OACAsO,cACA,IAEG,CACLg9H,UAAW2H,EAAc3H,UACzBiJ,oBAAqBnB,GAAmCC,EAAsBC,GAQ9EkB,mBAAoB/P,EAAQwP,EAAQzjI,IAAIwiI,GAAiBC,EAAeC,KACxE1H,YAAa/G,EAAQwP,EAAQzjI,IAAI+gI,KAErC,CAuF6BkD,CAAkBf,GAAeC,GAAiBlgJ,GACvEwoI,EAAwB6X,EAAmBU,mBAjgCIhkI,IAAI0+H,IAkgCzD,OAAO/D,GAAO,CACZE,cAAepP,EACfqP,UAAWwI,EAAmBxI,UAC9B/L,gBAAiBuU,EAAmBS,oBACpCzK,YAAar2I,EAAQq2I,YACrByB,iBAAkB93I,EAAQ83I,iBAC1BC,YAAasI,EAAmBtI,aAEpC,EAWMkJ,GAAiBf,GA3EME,KAC3B,MAAMc,EAAgBlF,GAAaoE,EAAK,aAAa,GAErD,IAAKc,EACH,OAAO,KAGT,MAAMrmI,EAAagoH,GAAgBqe,GAEnC,OAAQrmI,EAAWqtH,aACjB,IAAK,mCACL,IAAK,mCACHrtH,EAAW/X,OAAS,OACpB,MAEF,IAAK,qCACL,IAAK,kCACL,IAAK,qCACL,IAAK,kCACH+X,EAAW/X,OAAS,MACpB,MAEF,IAAK,gCACL,IAAK,gCACH+X,EAAW/X,OAAS,SACpB+X,EAAW7c,MAAQskG,KAAK3gG,MAAMkZ,EAAW7c,OACzC,MAKF,QACE,MAAM,IAAImC,MAAM+wI,IAGpB,OAAOr2H,CAAU,EAwCsBsmI,CAAqBlB,GAAeC,QE/oFzEkB,wBCzBAC,GAAMvS,EAAQ,CAAC,GAAM,GAAM,KAiBpBwS,GAAe,SAASA,EAAavS,EAAO1vH,GAOrD,YANe,IAAXA,IACFA,EAAS,IAGX0vH,EAAQD,EAAQC,IAENhqI,OAASsa,EAAS,KAAO+wH,EAAWrB,EAAOsS,GAAK,CACxDhiI,OAAQA,IAEDA,GAGTA,GA7BsB,SAAoB0vH,EAAO1vH,QAClC,IAAXA,IACFA,EAAS,GAIX,IAAI2pE,GADJ+lD,EAAQD,EAAQC,IACE1vH,EAAS,GACvBkiI,EAAaxS,EAAM1vH,EAAS,IAAM,GAAK0vH,EAAM1vH,EAAS,IAAM,GAAK0vH,EAAM1vH,EAAS,IAAM,EAAI0vH,EAAM1vH,EAAS,GAG7G,OAF6B,GAAR2pE,IAAe,EAG3Bu4D,EAAa,GAGfA,EAAa,EACtB,CAcYC,CAAWzS,EAAO1vH,GAIrBiiI,EAAavS,EAAO1vH,GAC7B,EDhCI6gH,IEJmB,IAAIzhI,WAAW,CACtC,GAAM,IAAM,IAAM,IAClB,GAAM,IAAM,GAAM,MFEE,SAAuBwhI,GACzC,MAAoB,kBAATA,EACFgQ,EAAchQ,GAIdA,CAIX,GAaWwhB,GAAmB,SAA0B1S,GACtDA,EAAQD,EAAQC,GAIhB,IAHA,IAAI2S,EAAU,GACVj9I,EAAI,EAEDsqI,EAAMhqI,OAASN,GAAG,CACvB,IAAIusF,EAAM+9C,EAAMtqI,GACZqD,EAAO,EACP65I,EAAa,EAGbnS,EAAOT,IADX4S,GAKA,IAFAA,IAEc,IAAPnS,GACL1nI,GAAe,IAAP0nI,IAAgB,EACxBA,EAAOT,EAAM4S,GACbA,IAGF75I,GAAe,IAAP0nI,EAER,IAAK,IAAIhhD,EAAI,EAAGA,EAAI4yD,GAAYr8I,OAAQypF,IAAK,CAC3C,IAAIozD,EAAiBR,GAAY5yD,GAC7BpxE,EAAKwkI,EAAexkI,GACpB+iI,EAASyB,EAAezB,OAE5B,GAAInvD,IAAQ5zE,EAAI,CACdskI,EAAQ7hJ,KAAKsgJ,EAAOpR,EAAM9lD,SAAS04D,EAAYA,EAAa75I,KAC5D,KACF,CACF,CAEArD,GAAKqD,EAAO65I,CACd,CAEA,OAAOD,CACT,EACAN,GAAc,CAAC,CACbhkI,GAAI,EACJ+iI,OAAQ,SAAgBpR,GACtB,IAAI8S,EAAO,CACT7wD,IAAK,EACL5zE,GAAI2xH,EAAM,IAAM,EAAIA,EAAM,GAC1B/lD,MAAO+lD,EAAM,GACbjnI,KAAM,EACNg6I,cAAe,EACfC,QAAS,EACTC,YAAa,GACbzhJ,IAAK,IASP,GANiB,IAAbshJ,EAAK74D,QACP64D,EAAKC,cAAgB/S,EAAM8S,EAAK/5I,OAAS,EAAIinI,EAAM8S,EAAK/5I,KAAO,GAC/D+5I,EAAK/5I,MAAQ,GAIE,GAAb+5I,EAAK74D,MAAc,CACrB,IAAIxiF,EAAMuoI,EAAM8S,EAAK/5I,MACrB+5I,EAAKthJ,IJ4DgB,SAAuBwuI,GAChD,IAAKA,EACH,MAAO,GAKTA,EAAQpvI,MAAMmG,UAAUpG,MAAM6F,KAAKwpI,GACnC,IAAIzmD,EAAShqF,OAAOC,aAAaC,MAAM,KAAMswI,EAAQC,IAErD,IACE,OAAO5C,mBAAmBjQ,OAAO5zC,GACnC,CAAE,MAAOjqF,GACP,CAGF,OAAOiqF,CACT,CI7EiB25D,CAAclT,EAAM9lD,SAAS44D,EAAK/5I,KAAO,EAAG+5I,EAAK/5I,KAAO,EAAItB,IACvEq7I,EAAK/5I,MAAQtB,CACf,CASA,OANiB,GAAbq7I,EAAK74D,QACP64D,EAAKE,QAAUhT,EAAM8S,EAAK/5I,OAAS,EAAIinI,EAAM8S,EAAK/5I,KAAO,GACzD+5I,EAAK/5I,MAAQ,GAGf+5I,EAAKG,YAAcP,GAAiB1S,EAAM9lD,SAAS44D,EAAK/5I,QAAU,GAC3D+5I,CACT,GACC,CACDzkI,GAAI,EACJ+iI,OAAQ,SAAgBpR,GAWtB,MATW,CACT/9C,IAAK,EACLkxD,IAAKnT,EAAM,GACXoT,WAAYpT,EAAM,GAClBqT,WAAYrT,EAAM,IAAM,GAAKA,EAAM,IAAM,EAAIA,EAAM,GACnDsT,WAAYtT,EAAM,IAAM,GAAKA,EAAM,IAAM,GAAKA,EAAM,IAAM,EAAIA,EAAM,GACpEuT,WAAYvT,EAAM,IAAM,GAAKA,EAAM,KAAO,GAAKA,EAAM,KAAO,EAAIA,EAAM,IACtEiT,YAAaP,GAAiB1S,EAAM9lD,SAAS,KAGjD,GACC,CACD7rE,GAAI,EACJ+iI,OAAQ,SAAgBpR,GAEtB,MAAO,CACL/9C,IAAK,EACL+9C,MAAOA,EAEX,GACC,CACD3xH,GAAI,EACJ+iI,OAAQ,SAAgBpR,GAEtB,MAAO,CACL/9C,IAAK,EACL+9C,MAAOA,EAEX,IAuBK,IAAIwT,GAAU,SAASA,EAAQxT,EAAOvc,EAAOgwB,QACjC,IAAbA,IACFA,GAAW,GAGbhwB,EAjJmB,SAAwBA,GAC3C,OAAK7yH,MAAMC,QAAQ4yH,GAIZA,EAAMz1G,KAAI,SAAUpK,GACzB,OAAOutH,GAAcvtH,EACvB,IALS,CAACutH,GAAc1N,GAM1B,CAyIUiwB,CAAejwB,GACvBuc,EAAQD,EAAQC,GAChB,IAAI2S,EAAU,GAEd,IAAKlvB,EAAMztH,OAET,OAAO28I,EAKT,IAFA,IAAIj9I,EAAI,EAEDA,EAAIsqI,EAAMhqI,QAAQ,CACvB,IAAI+C,GAAQinI,EAAMtqI,IAAM,GAAKsqI,EAAMtqI,EAAI,IAAM,GAAKsqI,EAAMtqI,EAAI,IAAM,EAAIsqI,EAAMtqI,EAAI,MAAQ,EACpF1G,EAAOgxI,EAAM9lD,SAASxkF,EAAI,EAAGA,EAAI,GAErC,GAAa,IAATqD,EACF,MAGF,IAAIs+E,EAAM3hF,EAAIqD,EAEd,GAAIs+E,EAAM2oD,EAAMhqI,OAAQ,CAGtB,GAAIy9I,EACF,MAGFp8D,EAAM2oD,EAAMhqI,MACd,CAEA,IAAI1B,EAAO0rI,EAAM9lD,SAASxkF,EAAI,EAAG2hF,GAE7BgqD,EAAWryI,EAAMy0H,EAAM,MACJ,IAAjBA,EAAMztH,OAGR28I,EAAQ7hJ,KAAKwD,GAGbq+I,EAAQ7hJ,KAAKrB,MAAMkjJ,EAASa,EAAQl/I,EAAMmvH,EAAM9yH,MAAM,GAAI8iJ,KAI9D/9I,EAAI2hF,CACN,CAGA,OAAOs7D,CACT,EG5MWgB,GAAY,CACrBC,KAAM7T,EAAQ,CAAC,GAAM,GAAM,IAAM,MACjC8T,QAAS9T,EAAQ,CAAC,GAAM,MACxB+T,QAAS/T,EAAQ,CAAC,GAAM,GAAM,IAAM,MACpCgU,YAAahU,EAAQ,CAAC,GAAM,GAAM,IAAM,MACxCiU,OAAQjU,EAAQ,CAAC,GAAM,GAAM,IAAM,MACnCkU,MAAOlU,EAAQ,CAAC,MAChBmU,YAAanU,EAAQ,CAAC,MACtBoU,gBAAiBpU,EAAQ,CAAC,GAAM,IAAM,MACtCqU,WAAYrU,EAAQ,CAAC,MACrBsU,UAAWtU,EAAQ,CAAC,MACpBuU,YAAavU,EAAQ,CAAC,MACtBwU,QAASxU,EAAQ,CAAC,MAClByU,aAAczU,EAAQ,CAAC,GAAM,MAC7B0U,WAAY1U,EAAQ,CAAC,MACrB2U,WAAY3U,EAAQ,CAAC,MAIrB4U,QAAS5U,EAAQ,CAAC,GAAM,GAAM,IAAM,MACpC6U,UAAW7U,EAAQ,CAAC,MACpB8U,eAAgB9U,EAAQ,CAAC,GAAM,IAAM,MACrC+U,WAAY/U,EAAQ,CAAC,MACrBgV,cAAehV,EAAQ,CAAC,MACxBiV,MAAOjV,EAAQ,CAAC,MAChBkV,YAAalV,EAAQ,CAAC,OAUpBmV,GAAe,CAAC,IAAK,GAAI,GAAI,GAAI,EAAG,EAAG,EAAG,GAqB1CC,GAAU,SAAiBnV,EAAO1vH,EAAQ8kI,EAAc9U,QACrC,IAAjB8U,IACFA,GAAe,QAGF,IAAX9U,IACFA,GAAS,GAGX,IAAItqI,EA5BU,SAAmByqI,GAGjC,IAFA,IAAIhpI,EAAM,EAED/B,EAAI,EAAGA,EAAIw/I,GAAal/I,UAC3ByqI,EAAOyU,GAAax/I,IADeA,IAKvC+B,IAGF,OAAOA,CACT,CAgBe49I,CAAUrV,EAAM1vH,IACzBglI,EAAatV,EAAM9lD,SAAS5pE,EAAQA,EAASta,GAUjD,OALIo/I,KACFE,EAAa1kJ,MAAMmG,UAAUpG,MAAM6F,KAAKwpI,EAAO1vH,EAAQA,EAASta,IACrD,IAAMk/I,GAAal/I,EAAS,IAGlC,CACLA,OAAQA,EACR/G,MAAOkxI,EAAcmV,EAAY,CAC/BhV,OAAQA,IAEVN,MAAOsV,EAEX,EAEInkB,GAAgB,SAASA,EAAcD,GACzC,MAAoB,kBAATA,EACFA,EAAK36C,MAAM,WAAWvoE,KAAI,SAAUpK,GACzC,OAAOutH,EAAcvtH,EACvB,IAGkB,kBAATstH,EACF0P,EAAc1P,GAGhBA,CACT,EAYIqkB,GAAsB,SAASA,EAAoBlnI,EAAI2xH,EAAO1vH,GAChE,GAAIA,GAAU0vH,EAAMhqI,OAClB,OAAOgqI,EAAMhqI,OAGf,IAAIw/I,EAAUL,GAAQnV,EAAO1vH,GAAQ,GAErC,GAAI+wH,EAAWhzH,EAAG2xH,MAAOwV,EAAQxV,OAC/B,OAAO1vH,EAGT,IAAImlI,EAAaN,GAAQnV,EAAO1vH,EAASklI,EAAQx/I,QACjD,OAAOu/I,EAAoBlnI,EAAI2xH,EAAO1vH,EAASmlI,EAAWz/I,OAASy/I,EAAWxmJ,MAAQumJ,EAAQx/I,OAChG,EAsBW0/I,GAAW,SAASA,EAAS1V,EAAOvc,GAC7CA,EA9CmB,SAAwBA,GAC3C,OAAK7yH,MAAMC,QAAQ4yH,GAIZA,EAAMz1G,KAAI,SAAUpK,GACzB,OAAOutH,GAAcvtH,EACvB,IALS,CAACutH,GAAc1N,GAM1B,CAsCUiwB,CAAejwB,GACvBuc,EAAQD,EAAQC,GAChB,IAAI2S,EAAU,GAEd,IAAKlvB,EAAMztH,OACT,OAAO28I,EAKT,IAFA,IAAIj9I,EAAI,EAEDA,EAAIsqI,EAAMhqI,QAAQ,CACvB,IAAIqY,EAAK8mI,GAAQnV,EAAOtqI,GAAG,GACvB+/I,EAAaN,GAAQnV,EAAOtqI,EAAI2Y,EAAGrY,QACnC2/I,EAAYjgJ,EAAI2Y,EAAGrY,OAASy/I,EAAWz/I,OAElB,MAArBy/I,EAAWxmJ,QACbwmJ,EAAWxmJ,MAAQsmJ,GAAoBlnI,EAAI2xH,EAAO2V,GAE9CF,EAAWxmJ,QAAU+wI,EAAMhqI,SAC7By/I,EAAWxmJ,OAAS0mJ,IAIxB,IAAIC,EAAUD,EAAYF,EAAWxmJ,MAAQ+wI,EAAMhqI,OAASgqI,EAAMhqI,OAAS2/I,EAAYF,EAAWxmJ,MAC9FqF,EAAO0rI,EAAM9lD,SAASy7D,EAAWC,GAEjCvU,EAAW5d,EAAM,GAAIp1G,EAAG2xH,SACL,IAAjBvc,EAAMztH,OAGR28I,EAAQ7hJ,KAAKwD,GAIbq+I,EAAUA,EAAQtzC,OAAOq2C,EAASphJ,EAAMmvH,EAAM9yH,MAAM,MAMxD+E,GAFkB2Y,EAAGrY,OAASy/I,EAAWz/I,OAAS1B,EAAK0B,MAGzD,CAEA,OAAO28I,CACT,EClMWkD,GAAe9V,EAAQ,CAAC,EAAM,EAAM,EAAM,IAC1C+V,GAAe/V,EAAQ,CAAC,EAAM,EAAM,IACpCgW,GAAuBhW,EAAQ,CAAC,EAAM,EAAM,IAW5CiW,GAAkC,SAAyChW,GAIpF,IAHA,IAAIiW,EAAY,GACZvgJ,EAAI,EAEDA,EAAIsqI,EAAMhqI,OAAS,GACpBqrI,EAAWrB,EAAM9lD,SAASxkF,EAAGA,EAAI,GAAIqgJ,MACvCE,EAAUnlJ,KAAK4E,EAAI,GACnBA,KAGFA,IAKF,GAAyB,IAArBugJ,EAAUjgJ,OACZ,OAAOgqI,EAIT,IAAIkW,EAAYlW,EAAMhqI,OAASigJ,EAAUjgJ,OACrCmgJ,EAAU,IAAIzmJ,WAAWwmJ,GACzBE,EAAc,EAElB,IAAK1gJ,EAAI,EAAGA,EAAIwgJ,EAAWE,IAAe1gJ,IACpC0gJ,IAAgBH,EAAU,KAE5BG,IAEAH,EAAUtlD,SAGZwlD,EAAQzgJ,GAAKsqI,EAAMoW,GAGrB,OAAOD,CACT,EACWE,GAAU,SAAiBrW,EAAOsW,EAAUC,EAAOC,QAC3C,IAAbA,IACFA,EAAWh8B,KAGbwlB,EAAQD,EAAQC,GAChBuW,EAAQ,GAAGl3C,OAAOk3C,GASlB,IARA,IACIE,EADA/gJ,EAAI,EAEJghJ,EAAY,EAMThhJ,EAAIsqI,EAAMhqI,SAAW0gJ,EAAYF,GAAYC,IAAW,CAC7D,IAAIE,OAAY,EAUhB,GARItV,EAAWrB,EAAM9lD,SAASxkF,GAAImgJ,IAChCc,EAAY,EACHtV,EAAWrB,EAAM9lD,SAASxkF,GAAIogJ,MACvCa,EAAY,GAKTA,EAAL,CAOA,GAFAD,IAEID,EACF,OAAOT,GAAgChW,EAAM9lD,SAASu8D,EAAU/gJ,IAGlE,IAAIkhJ,OAAU,EAEG,SAAbN,EACFM,EAAiC,GAAvB5W,EAAMtqI,EAAIihJ,GACE,SAAbL,IACTM,EAAU5W,EAAMtqI,EAAIihJ,IAAc,EAAI,KAGR,IAA5BJ,EAAM9lJ,QAAQmmJ,KAChBH,EAAW/gJ,EAAIihJ,GAIjBjhJ,GAAKihJ,GAA0B,SAAbL,EAAsB,EAAI,EArB5C,MAFE5gJ,GAwBJ,CAEA,OAAOsqI,EAAM9lD,SAAS,EAAG,EAC3B,ECpGI28D,GAAY,CAEd,KAAQ9W,EAAQ,CAAC,IAAM,IAAM,GAAM,MAEnC,SAAYA,EAAQ,CAAC,IAAM,GAAM,IAAM,IAAM,IAAM,IAAM,IAAM,KAE/D,KAAQA,EAAQ,CAAC,IAAM,GAAM,GAAM,KAEnC,IAAOA,EAAQ,CAAC,GAAM,IAAM,IAAM,KAGlC,IAAOA,EAAQ,CAAC,GAAM,MAEtB,KAAQA,EAAQ,CAAC,GAAM,GAAM,GAAM,KAEnC,IAAOA,EAAQ,CAAC,GAAM,GAAM,KAE5B,IAAOA,EAAQ,CAAC,GAAM,GAAM,GAAM,KAElC,MAAOA,EAAQ,CAAC,IAAM,IAAM,IAAM,IAAM,GAAM,MAE9C,IAAOA,EAAQ,CAAC,IAAM,IAAM,IAAM,MAElC,KAAQA,EAAQ,CAAC,IAAM,IAAM,IAAM,MAEnC,IAAOA,EAAQ,CAAC,IAAM,IAAM,IAAM,IAAM,IAAM,MAE9C,KAAQA,EAAQ,CAAC,IAAM,IAAM,IAAM,MAEnC,KAAQA,EAAQ,CAAC,IAAM,IAAM,IAAM,OAEjC+W,GAAY,CACdC,IAAK,SAAa/W,GAChB,IAAI1vH,EAASiiI,GAAavS,GAC1B,OAAOqB,EAAWrB,EAAO,CAAC,IAAM,IAAO,CACrC1vH,OAAQA,EACRoxH,KAAM,CAAC,IAAM,KAEjB,EACAsV,IAAK,SAAahX,GAChB,IAAI1vH,EAASiiI,GAAavS,GAC1B,OAAOqB,EAAWrB,EAAO,CAAC,IAAM,GAAO,CACrC1vH,OAAQA,EACRoxH,KAAM,CAAC,IAAM,IAEjB,EACA3D,KAAM,SAAciC,GAClB,IAAIiX,EAAUvB,GAAS1V,EAAO,CAAC2T,GAAUC,KAAMD,GAAUE,UAAU,GAEnE,OAAOxS,EAAW4V,EAASJ,GAAU9Y,KACvC,EACAmZ,IAAK,SAAalX,GAChB,IAAIiX,EAAUvB,GAAS1V,EAAO,CAAC2T,GAAUC,KAAMD,GAAUE,UAAU,GAEnE,OAAOxS,EAAW4V,EAASJ,GAAUM,SACvC,EACArZ,IAAK,SAAakC,GAEhB,OAAI8W,GAAU,OAAO9W,KAAU8W,GAAUM,IAAIpX,QAKzCqB,EAAWrB,EAAO6W,GAAU/Y,IAAK,CACnCxtH,OAAQ,MACJ+wH,EAAWrB,EAAO6W,GAAUQ,KAAM,CACtC/mI,OAAQ,UAMN+wH,EAAWrB,EAAO6W,GAAUS,KAAM,CACpChnI,OAAQ,MACJ+wH,EAAWrB,EAAO6W,GAAUU,KAAM,CACtCjnI,OAAQ,WAHV,GAOF,EACA8mI,IAAK,SAAapX,GAChB,OAAOqB,EAAWrB,EAAO6W,GAAUO,IAAK,CACtC9mI,OAAQ,GAEZ,EACA,MAAO,SAAY0vH,GACjB,OAAOqB,EAAWrB,EAAO6W,GAAU,OAAQ,CACzCvmI,OAAQ,GAEZ,EACAknI,IAAK,SAAaxX,GAChB,IAAI1vH,EAASiiI,GAAavS,GAC1B,OAAOqB,EAAWrB,EAAO6W,GAAUW,IAAK,CACtClnI,OAAQA,GAEZ,EACAmnI,GAAI,SAAYzX,GACd,GAAIA,EAAMhqI,OAAS,KAAOgqI,EAAMhqI,QAAU,EACxC,OAAoB,KAAbgqI,EAAM,GAKf,IAFA,IAAItqI,EAAI,EAEDA,EAAI,IAAMsqI,EAAMhqI,QAAUN,EAAI,KAAK,CACxC,GAAiB,KAAbsqI,EAAMtqI,IAAkC,KAAnBsqI,EAAMtqI,EAAI,KACjC,OAAO,EAGTA,GAAK,CACP,CAEA,OAAO,CACT,EACAgiJ,KAAM,SAAc1X,GAClB,IAAI1vH,EAASiiI,GAAavS,GAC1B,OAAOqB,EAAWrB,EAAO6W,GAAUa,KAAM,CACvCpnI,OAAQA,GAEZ,EACA0tH,IAAK,SAAagC,GAChB,OAAOqB,EAAWrB,EAAO6W,GAAU7Y,IACrC,EACA2Z,IAAK,SAAa3X,GAChB,OAAOqB,EAAWrB,EAAO6W,GAAUe,OAASvW,EAAWrB,EAAO6W,GAAUc,IAAK,CAC3ErnI,OAAQ,GAEZ,EACAunI,IAAK,SAAa7X,GAChB,OAAOqB,EAAWrB,EAAO6W,GAAUe,OAASvW,EAAWrB,EAAO6W,GAAUgB,IAAK,CAC3EvnI,OAAQ,GAEZ,EACA,KAAQ,SAAc0vH,GAEpB,ODjCqB,SAAqBA,EAAOhxI,EAAMwnJ,GACzD,OAAOH,GAAQrW,EAAO,OAAQhxI,EAAMwnJ,EACtC,CC+BWsB,CAAY9X,EAAO,EAAG,GAAGhqI,MAClC,EACA,KAAQ,SAAcgqI,GAEpB,ODlCqB,SAAqBA,EAAOhxI,EAAMwnJ,GACzD,OAAOH,GAAQrW,EAAO,OAAQhxI,EAAMwnJ,EACtC,CCgCWuB,CAAY/X,EAAO,CAAC,GAAI,IAAK,GAAGhqI,MACzC,GAKEgiJ,GAAgBlhJ,OAAO0M,KAAKszI,IAC/BxzI,QAAO,SAAUU,GAChB,MAAa,OAANA,GAAoB,SAANA,GAAsB,SAANA,CACvC,IACCq7F,OAAO,CAAC,KAAM,OAAQ,SAEvB24C,GAAc1nJ,SAAQ,SAAUtB,GAC9B,IAAIipJ,EAAanB,GAAU9nJ,GAE3B8nJ,GAAU9nJ,GAAQ,SAAUgxI,GAC1B,OAAOiY,EAAWlY,EAAQC,GAC5B,CACF,IAEO,IAAIkY,GAAWpB,GAGXqB,GAA0B,SAAiCnY,GACpEA,EAAQD,EAAQC,GAEhB,IAAK,IAAItqI,EAAI,EAAGA,EAAIsiJ,GAAchiJ,OAAQN,IAAK,CAC7C,IAAI1G,EAAOgpJ,GAActiJ,GAEzB,GAAIwiJ,GAASlpJ,GAAMgxI,GACjB,OAAOhxI,CAEX,CAEA,MAAO,EACT,YCtJIopJ,GAAY,SAQhB,MAAMC,GAAS,CAAC,EAcVC,GAAQ,SAAUtpJ,EAAMuQ,GAK5B,OAJA84I,GAAOrpJ,GAAQqpJ,GAAOrpJ,IAAS,GAC3BuQ,IACF84I,GAAOrpJ,GAAQqpJ,GAAOrpJ,GAAMqwG,OAAO9/F,IAE9B84I,GAAOrpJ,EAChB,EA2BMupJ,GAAa,SAAUvpJ,EAAMuQ,GACjC,MAAM/O,EAAQ8nJ,GAAMtpJ,GAAMyB,QAAQ8O,GAClC,QAAI/O,IAAU,KAGd6nJ,GAAOrpJ,GAAQqpJ,GAAOrpJ,GAAM2B,QAC5B0nJ,GAAOrpJ,GAAM+vH,OAAOvuH,EAAO,IACpB,EACT,EAiCMgoJ,GAAgB,CACpBC,UAAU,GAINC,GAAS,CAAC,CAAC,oBAAqB,iBAAkB,oBAAqB,oBAAqB,mBAAoB,kBAAmB,cAEzI,CAAC,0BAA2B,uBAAwB,0BAA2B,0BAA2B,yBAA0B,wBAAyB,wBACvJC,GAAUD,GAAO,GACvB,IAAIE,GAGJ,IAAK,IAAIljJ,GAAI,EAAGA,GAAIgjJ,GAAO1iJ,OAAQN,KAEjC,GAAIgjJ,GAAOhjJ,IAAG,KAAMmjJ,IAAY,CAC9BD,GAAaF,GAAOhjJ,IACpB,KACF,CAIF,GAAIkjJ,GAAY,CACd,IAAK,IAAIljJ,EAAI,EAAGA,EAAIkjJ,GAAW5iJ,OAAQN,IACrC8iJ,GAAcG,GAAQjjJ,IAAMkjJ,GAAWljJ,GAEzC8iJ,GAAcC,SAAWG,GAAW,KAAOD,GAAQ,EACrD,CAQA,IAAIG,GAAU,GAmRd,MAAMC,GApNN,SAASC,EAAe9hJ,GAAoC,IAKtD+hJ,EALwBC,EAASt3I,UAAA5L,OAAA,QAAA/D,IAAA2P,UAAA,GAAAA,UAAA,GAAG,IAAKu3I,EAAMv3I,UAAA5L,OAAA,QAAA/D,IAAA2P,UAAA,GAAAA,UAAA,GAAG,GAElDw3I,EAAQ,OA0BZ,SAASzrD,IAAa,QAAAm0C,EAAAlgI,UAAA5L,OAAN+8H,EAAI,IAAAniI,MAAAkxI,GAAAE,EAAA,EAAAA,EAAAF,EAAAE,IAAJjP,EAAIiP,GAAApgI,UAAAogI,GAClBiX,EAAU,MAAOG,EAAOrmB,EAC1B,CA+KA,OA5KAkmB,EAjFuBI,EAACniJ,EAAMy2F,EAAKwrD,IAAW,CAACnqJ,EAAMoqJ,EAAOrmB,KAC5D,MAAMumB,EAAM3rD,EAAI4rD,OAAOH,GACjBI,EAAY,IAAIlkE,OAAO,KAAKgkE,OAClC,IAAIG,EAAaviJ,EAcjB,GAba,QAATlI,GAEF+jI,EAAK5xB,QAAQnyG,EAAKkH,cAAgB,KAEhCijJ,IACFM,EAAa,KAAKviJ,IAClB67H,EAAK5xB,QAAQg4C,IAIfpmB,EAAK5xB,QAAQs4C,EAAa,KAGtBX,GAAS,CACXA,GAAQhoJ,KAAK,GAAGuuG,OAAO0zB,IAGvB,MAAMhU,EAAS+5B,GAAQ9iJ,OAAS,IAChC8iJ,GAAQ/5B,OAAO,EAAGA,EAAS,EAAIA,EAAS,EAC1C,CAIA,IAAK26B,IAAAA,QACH,OAMF,IAAIn6I,EAAKm6I,IAAAA,QAAiB1qJ,GACrBuQ,GAAe,UAATvQ,IAGTuQ,EAAKm6I,IAAAA,QAAiBC,MAAQD,IAAAA,QAAiB/rD,KAK5CpuF,GAAO+5I,GAAQE,EAAUpiJ,KAAKpI,IAGnCuQ,EAAG3O,MAAMC,QAAQkiI,GAAQ,QAAU,QAAQ2mB,IAAAA,QAAkB3mB,EAAK,EAmCtDsmB,CAAiBniJ,EAAMy2F,EAAKwrD,GAmBxCxrD,EAAIisD,aAAe,CAACC,EAASC,EAAcC,KACzC,MAAMC,OAAmC/nJ,IAAjB6nJ,EAA6BA,EAAeZ,EAGpE,OAAOF,EADY,GAAG9hJ,KAAQ8iJ,KAAmBH,IACfG,OAFC/nJ,IAAd8nJ,EAA0BA,EAAYZ,EAEK,EAclExrD,EAAIssD,gBAAkB,CAACC,EAASC,EAAcC,IACrCpB,EAAekB,EAASC,EAAcC,GAsB/CzsD,EAAI4rD,OAAS,CACXc,IAAK,uBACLznB,IAAK,GACL0nB,MAAO,uBACPX,KAAM,iBACN32I,KAAM,aACNpD,MAAO,QACPm6H,QAASqf,GAeXzrD,EAAIyrD,MAAQE,IACV,GAAmB,kBAARA,EAAkB,CAC3B,IAAK3rD,EAAI4rD,OAAO/jJ,eAAe8jJ,GAC7B,MAAM,IAAIloJ,MAAM,IAAIkoJ,+BAEtBF,EAAQE,CACV,CACA,OAAOF,CAAK,EAYdzrD,EAAImrD,QAAU,IAAMA,GAAU,GAAGz5C,OAAOy5C,IAAW,GAWnDnrD,EAAImrD,QAAQx1I,OAASi3I,IACXzB,IAAW,IAAIx1I,QAAOk3I,GAErB,IAAIllE,OAAO,KAAKilE,OAAWnjJ,KAAKojJ,EAAY,MAQvD7sD,EAAImrD,QAAQhgJ,MAAQ,KACdggJ,KACFA,GAAQ9iJ,OAAS,EACnB,EAMF23F,EAAImrD,QAAQ7gJ,QAAU,KACJ,OAAZ6gJ,KACFA,GAAQ9iJ,OAAS,EACjB8iJ,GAAU,KACZ,EAMFnrD,EAAImrD,QAAQ9gJ,OAAS,KACH,OAAZ8gJ,KACFA,GAAU,GACZ,EASFnrD,EAAI/tF,MAAQ,mBAAA66I,EAAA74I,UAAA5L,OAAI+8H,EAAI,IAAAniI,MAAA6pJ,GAAAC,EAAA,EAAAA,EAAAD,EAAAC,IAAJ3nB,EAAI2nB,GAAA94I,UAAA84I,GAAA,OAAKzB,EAAU,QAASG,EAAOrmB,EAAK,EAQxDplC,EAAI3qF,KAAO,mBAAA23I,EAAA/4I,UAAA5L,OAAI+8H,EAAI,IAAAniI,MAAA+pJ,GAAAC,EAAA,EAAAA,EAAAD,EAAAC,IAAJ7nB,EAAI6nB,GAAAh5I,UAAAg5I,GAAA,OAAK3B,EAAU,OAAQG,EAAOrmB,EAAK,EAStDplC,EAAI2sD,MAAQ,mBAAAO,EAAAj5I,UAAA5L,OAAI+8H,EAAI,IAAAniI,MAAAiqJ,GAAAC,EAAA,EAAAA,EAAAD,EAAAC,IAAJ/nB,EAAI+nB,GAAAl5I,UAAAk5I,GAAA,OAAK7B,EAAU,QAASG,EAAOrmB,EAAK,EACjDplC,CACT,CAMcqrD,CAAe,WACvBY,GAAeb,GAAMa,aAgCrB5iJ,GAAWF,OAAOC,UAAUC,SAc5BwM,GAAO,SAAUpI,GACrB,OAAOwmI,GAASxmI,GAAUtE,OAAO0M,KAAKpI,GAAU,EAClD,EAWA,SAAS2/I,GAAK3/I,EAAQmE,GACpBiE,GAAKpI,GAAQ9K,SAAQI,GAAO6O,EAAGnE,EAAO1K,GAAMA,IAC9C,CAmBA,SAAS7B,GAAOuM,EAAQmE,GAAiB,IAAby7I,EAAOp5I,UAAA5L,OAAA,QAAA/D,IAAA2P,UAAA,GAAAA,UAAA,GAAG,EACpC,OAAO4B,GAAKpI,GAAQvM,QAAO,CAACosJ,EAAOvqJ,IAAQ6O,EAAG07I,EAAO7/I,EAAO1K,GAAMA,IAAMsqJ,EAC1E,CAYA,SAASpZ,GAAS3yI,GAChB,QAASA,GAA0B,kBAAVA,CAC3B,CASA,SAASisJ,GAAQjsJ,GACf,OAAO2yI,GAAS3yI,IAAmC,oBAAzB+H,GAASR,KAAKvH,IAAgCA,EAAMgI,cAAgBH,MAChG,CAkBA,SAASqkJ,KACP,MAAM9qJ,EAAS,CAAC,EAAE,QAAA+qJ,EAAAx5I,UAAA5L,OADAqlJ,EAAO,IAAAzqJ,MAAAwqJ,GAAAE,EAAA,EAAAA,EAAAF,EAAAE,IAAPD,EAAOC,GAAA15I,UAAA05I,GAiBzB,OAfAD,EAAQ/qJ,SAAQ6L,IACTA,GAGL4+I,GAAK5+I,GAAQ,CAAClN,EAAOyB,KACdwqJ,GAAQjsJ,IAIRisJ,GAAQ7qJ,EAAOK,MAClBL,EAAOK,GAAO,CAAC,GAEjBL,EAAOK,GAAOyqJ,GAAQ9qJ,EAAOK,GAAMzB,IANjCoB,EAAOK,GAAOzB,CAMyB,GACzC,IAEGoB,CACT,CAQA,SAASq0H,KAAoB,IAAbvoH,EAAMyF,UAAA5L,OAAA,QAAA/D,IAAA2P,UAAA,GAAAA,UAAA,GAAG,CAAC,EACxB,MAAMvR,EAAS,GACf,IAAK,MAAMK,KAAOyL,EAChB,GAAIA,EAAO3G,eAAe9E,GAAM,CAC9B,MAAMzB,EAAQkN,EAAOzL,GACrBL,EAAOS,KAAK7B,EACd,CAEF,OAAOoB,CACT,CAWA,SAASkrJ,GAAmB9lJ,EAAK/E,EAAK8P,GAAyB,IAAfg7I,IAAM55I,UAAA5L,OAAA,QAAA/D,IAAA2P,UAAA,KAAAA,UAAA,GACpD,MAAMtJ,EAAMrJ,GAAS6H,OAAOka,eAAevb,EAAK/E,EAAK,CACnDzB,QACA8zF,YAAY,EACZ4gC,UAAU,IAEN1yH,EAAU,CACd6xF,cAAc,EACdC,YAAY,EACZtqF,GAAAA,GACE,MAAMxJ,EAAQuR,IAEd,OADAlI,EAAIrJ,GACGA,CACT,GAKF,OAHIusJ,IACFvqJ,EAAQqH,IAAMA,GAETxB,OAAOka,eAAevb,EAAK/E,EAAKO,EACzC,CAEA,IAAIwqJ,GAAmB3kJ,OAAOqE,OAAO,CACnC4oH,UAAW,KACXg3B,KAAMA,GACNlsJ,OAAQA,GACR+yI,SAAUA,GACVsZ,QAASA,GACTrZ,MAAOsZ,GACPz2B,OAAQA,GACR62B,mBAAoBA,KActB,IAwBIG,GAxBAC,IAAU,EAQVC,GAAc,KAQdC,IAAa,EAgBbC,IAAa,EAQbC,IAAU,EAQVC,IAAc,EAgBdC,IAAY,EAQZC,GAAmB,KAWnBC,GAAiB,KAQrB,MAAMC,GAAyB7S,QAAQmQ,IAAAA,MAAiBA,IAAAA,KAAc2C,WAAa3C,IAAAA,KAAc2C,UAAUC,qBAS3G,IAAIC,GAAa,KAQbC,IAAY,EAQZC,IAAa,EAQbC,IAAU,EAWVC,IAAY,EAQZC,IAAW,EAQXC,IAAW,EAQXC,IAAc,EASlB,MAAMC,GAAgBxT,QAAQyT,OAAa,sBAA8BtD,IAAAA,UAAmBuD,gBAAkBvD,IAAAA,eAA0BA,IAAAA,oBAA6BA,IAAAA,gBAC/JwD,GAAMxD,IAAAA,WAAsBA,IAAAA,UAAmByD,cAiBrD,GAhBID,IAAOA,GAAIE,UAAYF,GAAIG,SAK7BxB,GAA8B,YAAjBqB,GAAIE,SACjBrB,GAAUxS,QAAQ2T,GAAIG,OAAOjhJ,MAAKiiF,GAAiB,mBAAZA,EAAEi/D,SACzCtB,GAAczS,QAAQ2T,GAAIG,OAAOjhJ,MAAKiiF,GAAiB,aAAZA,EAAEi/D,SAC7CrB,IAAaF,IAAWC,GACxBE,GAAmBC,IAAkBe,GAAIG,OAAOjhJ,MAAKiiF,GAAiB,aAAZA,EAAEi/D,SAAyB,CAAC,GAAGhwI,SAAW,KACpGmvI,GAA8B,YAAjBS,GAAIE,WAMdpB,GAAa,CAChB,MAAMuB,EAAa7D,IAAAA,WAAsBA,IAAAA,UAAmB8D,WAAa,GACzE7B,GAAU,QAAQvkJ,KAAKmmJ,GACvB3B,GAAc,WACZ,MAAMrlE,EAAQgnE,EAAWhnE,MAAM,cAC/B,OAAIA,GAASA,EAAM,GACVA,EAAM,GAER,IACT,CANc,GAOdslE,GAAa,WAAWzkJ,KAAKmmJ,GAC7B7B,GAAkB,WAGhB,MAAMnlE,EAAQgnE,EAAWhnE,MAAM,0CAC/B,IAAKA,EACH,OAAO,KAET,MAAMknE,EAAQlnE,EAAM,IAAMo+C,WAAWp+C,EAAM,IACrCmnE,EAAQnnE,EAAM,IAAMo+C,WAAWp+C,EAAM,IAC3C,OAAIknE,GAASC,EACJ/oB,WAAWp+C,EAAM,GAAK,IAAMA,EAAM,IAChCknE,GAGJ,IACT,CAfkB,GAgBlB3B,GAAa,WAAW1kJ,KAAKmmJ,GAC7BxB,GAAU,OAAO3kJ,KAAKmmJ,GACtBvB,GAAc,UAAU5kJ,KAAKmmJ,IAAe,SAASnmJ,KAAKmmJ,GAC1DtB,IAAaF,IAAWC,GACxBE,GAAmBC,GAAiB,WAClC,MAAM5lE,EAAQgnE,EAAWhnE,MAAM,yBAC/B,OAAIA,GAASA,EAAM,GACVo+C,WAAWp+C,EAAM,IAEnB,IACT,CANoC,GAOpCgmE,GAAa,WACX,MAAMlsJ,EAAS,kBAAkBknF,KAAKgmE,GACtC,IAAIjwI,EAAUjd,GAAUskI,WAAWtkI,EAAO,IAK1C,OAJKid,GAAW,gBAAgBlW,KAAKmmJ,IAAe,UAAUnmJ,KAAKmmJ,KAEjEjwI,EAAU,IAELA,CACT,CARa,GASbsvI,GAAW,SAASxlJ,KAAKmmJ,GACzBV,GAAW,SAASzlJ,KAAKmmJ,GACzBT,GAAcF,IAAYC,GAC1BL,GAAY,UAAUplJ,KAAKmmJ,KAAgBtB,KAAcJ,KAAeE,KAAYe,GACpFL,GAAa,WAAWrlJ,KAAKmmJ,GAC7Bb,GAAU,QAAQtlJ,KAAKmmJ,IAAef,IAAaO,KAAkB,UAAU3lJ,KAAKmmJ,GACpFZ,GAAY,UAAUvlJ,KAAKmmJ,KAAgBb,EAC7C,CASA,MAAMiB,GAAShB,IAAaD,IAAWf,GASjCiC,IAAiBpB,IAAamB,MAAY1B,GAEhD,IAAI4B,GAAuB/mJ,OAAOqE,OAAO,CACvC4oH,UAAW,KACX,WAAI43B,GAAa,OAAOA,EAAS,EACjC,eAAIC,GAAiB,OAAOA,EAAa,EACzC,cAAIC,GAAgB,OAAOA,EAAY,EACvC,mBAAIH,GAAqB,OAAOA,EAAiB,EACjD,cAAII,GAAgB,OAAOA,EAAY,EACvC,WAAIC,GAAa,OAAOA,EAAS,EACjC,eAAIC,GAAiB,OAAOA,EAAa,EACzC,aAAIC,GAAe,OAAOA,EAAW,EACrC,oBAAIC,GAAsB,OAAOA,EAAkB,EACnD,kBAAIC,GAAoB,OAAOA,EAAgB,EAC/CC,uBAAwBA,GACxB,cAAIG,GAAgB,OAAOA,EAAY,EACvC,aAAIC,GAAe,OAAOA,EAAW,EACrC,cAAIC,GAAgB,OAAOA,EAAY,EACvC,WAAIC,GAAa,OAAOA,EAAS,EACjC,aAAIC,GAAe,OAAOA,EAAW,EACrC,YAAIC,GAAc,OAAOA,EAAU,EACnC,YAAIC,GAAc,OAAOA,EAAU,EACnC,eAAIC,GAAiB,OAAOA,EAAa,EACzCC,cAAeA,GACfY,OAAQA,GACRC,cAAeA,KAmBjB,SAASE,GAAiB1nB,GAMxB,MAAsB,kBAARA,GAAoBmT,QAAQnT,EAAIlnI,OAChD,CA0BA,SAAS8tJ,KAEP,OAAOnE,MAAea,IAAAA,QACxB,CAWA,SAASqE,GAAK9uJ,GACZ,OAAO2yI,GAAS3yI,IAA6B,IAAnBA,EAAM4Z,QAClC,CASA,SAASm1I,KAGP,IACE,OAAOtE,IAAAA,SAAoBA,IAAAA,IAC7B,CAAE,MAAOv5C,GACP,OAAO,CACT,CACF,CAYA,SAAS89C,GAAclqJ,GACrB,OAAO,SAAUmqJ,EAAUz1C,GACzB,IAAKq1C,GAAiBI,GACpB,OAAOrF,IAAW9kJ,GAAQ,MAExB+pJ,GAAiBr1C,KACnBA,EAAUowC,IAAAA,cAAyBpwC,IAErC,MAAM01C,EAAMJ,GAAKt1C,GAAWA,EAAUowC,IACtC,OAAOsF,EAAIpqJ,IAAWoqJ,EAAIpqJ,GAAQmqJ,EACpC,CACF,CAoBA,SAASE,KAAqE,IAA5Dn9I,EAAOW,UAAA5L,OAAA,QAAA/D,IAAA2P,UAAA,GAAAA,UAAA,GAAG,MAAO2jI,EAAU3jI,UAAA5L,OAAA,QAAA/D,IAAA2P,UAAA,GAAAA,UAAA,GAAG,CAAC,EAAGkK,EAAUlK,UAAA5L,OAAA,QAAA/D,IAAA2P,UAAA,GAAAA,UAAA,GAAG,CAAC,EAAGy8I,EAAOz8I,UAAA5L,OAAA,EAAA4L,UAAA,QAAA3P,EAC1E,MAAMoO,EAAKw4I,IAAAA,cAAyB53I,GAkBpC,OAjBAnK,OAAOwnJ,oBAAoB/Y,GAAYj1I,SAAQ,SAAUqsF,GACvD,MAAMugD,EAAMqI,EAAW5oD,GAIN,gBAAbA,EACFmI,GAAYzkF,EAAI68H,GACP78H,EAAGs8E,KAAcugD,GAAoB,aAAbvgD,IACjCt8E,EAAGs8E,GAAYugD,EAEnB,IACApmI,OAAOwnJ,oBAAoBxyI,GAAYxb,SAAQ,SAAU4lF,GACvD71E,EAAGmP,aAAa0mE,EAAUpqE,EAAWoqE,GACvC,IACImoE,GACFE,GAAcl+I,EAAIg+I,GAEbh+I,CACT,CAcA,SAASykF,GAAYzkF,EAAIoQ,GAMvB,MAL8B,qBAAnBpQ,EAAGykF,YACZzkF,EAAGm+I,UAAY/tI,EAEfpQ,EAAGykF,YAAcr0E,EAEZpQ,CACT,CAWA,SAASo+I,GAAUl2I,EAAOc,GACpBA,EAAOtB,WACTsB,EAAOmE,aAAajF,EAAOc,EAAOtB,YAElCsB,EAAO9K,YAAYgK,EAEvB,CAiBA,SAASm2I,GAASt7I,EAASu7I,GAEzB,OAtKF,SAA2BvoB,GAEzB,GAAIA,EAAI3lI,QAAQ,MAAQ,EACtB,MAAM,IAAIW,MAAM,0CAEpB,CAgKEwtJ,CAAkBD,GACXv7I,EAAQy7I,UAAUhjD,SAAS8iD,EACpC,CAcA,SAASG,GAAS17I,GAA0B,QAAA27I,EAAAn9I,UAAA5L,OAAdgpJ,EAAY,IAAApuJ,MAAAmuJ,EAAA,EAAAA,EAAA,KAAAE,EAAA,EAAAA,EAAAF,EAAAE,IAAZD,EAAYC,EAAA,GAAAr9I,UAAAq9I,GAExC,OADA77I,EAAQy7I,UAAUnmJ,OAAOsmJ,EAAanwJ,QAAO,CAAC++I,EAAM5sI,IAAY4sI,EAAKvuC,OAAOr+F,EAAQpS,MAAM,SAAS,KAC5FwU,CACT,CAcA,SAAS87I,GAAY97I,GAEnB,IAAKA,EAEH,OADA21I,GAAM/1I,KAAK,6DACJ,KACR,QAAAm8I,EAAAv9I,UAAA5L,OAL8BopJ,EAAe,IAAAxuJ,MAAAuuJ,EAAA,EAAAA,EAAA,KAAAE,EAAA,EAAAA,EAAAF,EAAAE,IAAfD,EAAeC,EAAA,GAAAz9I,UAAAy9I,GAO9C,OADAj8I,EAAQy7I,UAAU32I,UAAUk3I,EAAgBvwJ,QAAO,CAAC++I,EAAM5sI,IAAY4sI,EAAKvuC,OAAOr+F,EAAQpS,MAAM,SAAS,KAClGwU,CACT,CAmCA,SAASk8I,GAAYl8I,EAASm8I,EAAejjJ,GAQ3C,MAPyB,oBAAdA,IACTA,EAAYA,EAAU8G,EAASm8I,IAER,mBAAdjjJ,IACTA,OAAYrK,GAEdstJ,EAAc3wJ,MAAM,OAAO0B,SAAQs4H,GAAaxlH,EAAQy7I,UAAUW,OAAO52B,EAAWtsH,KAC7E8G,CACT,CAWA,SAASq8I,GAAcp/I,EAAIyL,GACzBhV,OAAOwnJ,oBAAoBxyI,GAAYxb,SAAQ,SAAU4lF,GACvD,MAAMwpE,EAAY5zI,EAAWoqE,GACX,OAAdwpE,GAA2C,qBAAdA,IAA2C,IAAdA,EAC5Dr/I,EAAGoP,gBAAgBymE,GAEnB71E,EAAGmP,aAAa0mE,GAAwB,IAAdwpE,EAAqB,GAAKA,EAExD,GACF,CAeA,SAASC,GAAc19D,GACrB,MAAMxsF,EAAM,CAAC,EAKPmqJ,EAAgB,CAAC,WAAY,WAAY,cAAe,OAAQ,QAAS,UAAW,gBAC1F,GAAI39D,GAAOA,EAAIn2E,YAAcm2E,EAAIn2E,WAAW9V,OAAS,EAAG,CACtD,MAAMoK,EAAQ6hF,EAAIn2E,WAClB,IAAK,IAAIpW,EAAI0K,EAAMpK,OAAS,EAAGN,GAAK,EAAGA,IAAK,CAC1C,MAAMwgF,EAAW91E,EAAM1K,GAAGwB,KAE1B,IAAI2oJ,EAAUz/I,EAAM1K,GAAGzG,MAInB2wJ,EAAc79D,SAAS7L,KAIzB2pE,EAAsB,OAAZA,GAEZpqJ,EAAIygF,GAAY2pE,CAClB,CACF,CACA,OAAOpqJ,CACT,CAcA,SAAS8Y,GAAalO,EAAIo8H,GACxB,OAAOp8H,EAAGkO,aAAakuH,EACzB,CAcA,SAASjtH,GAAanP,EAAIo8H,EAAWxtI,GACnCoR,EAAGmP,aAAaitH,EAAWxtI,EAC7B,CAWA,SAASwgB,GAAgBpP,EAAIo8H,GAC3Bp8H,EAAGoP,gBAAgBgtH,EACrB,CAKA,SAASqjB,KACPjH,IAAAA,KAAgBl7C,QAChBk7C,IAAAA,cAA2B,WACzB,OAAO,CACT,CACF,CAKA,SAASkH,KACPlH,IAAAA,cAA2B,WACzB,OAAO,CACT,CACF,CAqBA,SAAS1yB,GAAsB9lH,GAC7B,GAAIA,GAAMA,EAAG8lH,uBAAyB9lH,EAAGa,WAAY,CACnD,MAAMwvD,EAAOrwD,EAAG8lH,wBACV91H,EAAS,CAAC,EAYhB,MAXA,CAAC,SAAU,SAAU,OAAQ,QAAS,MAAO,SAASC,SAAQ0nF,SAC5C/lF,IAAZy+D,EAAKsnB,KACP3nF,EAAO2nF,GAAKtnB,EAAKsnB,GACnB,IAEG3nF,EAAOmnG,SACVnnG,EAAOmnG,OAASm9B,WAAWqrB,GAAc3/I,EAAI,YAE1ChQ,EAAOknG,QACVlnG,EAAOknG,MAAQo9B,WAAWqrB,GAAc3/I,EAAI,WAEvChQ,CACT,CACF,CA2BA,SAAS4vJ,GAAa5/I,GACpB,IAAKA,GAAMA,IAAOA,EAAG6/I,aACnB,MAAO,CACL1iD,KAAM,EACN94B,IAAK,EACL6yB,MAAO,EACPC,OAAQ,GAGZ,MAAMD,EAAQl3F,EAAG8/I,YACX3oD,EAASn3F,EAAG6lH,aAClB,IAAI1oB,EAAO,EACP94B,EAAM,EACV,KAAOrkE,EAAG6/I,cAAgB7/I,IAAOw4I,IAAWL,GAAc4H,oBACxD5iD,GAAQn9F,EAAGggJ,WACX37E,GAAOrkE,EAAGigJ,UACVjgJ,EAAKA,EAAG6/I,aAEV,MAAO,CACL1iD,OACA94B,MACA6yB,QACAC,SAEJ,CA6BA,SAAS+oD,GAAmBlgJ,EAAI65F,GAC9B,MAAMsmD,EAAa,CACjBrgD,EAAG,EACHqH,EAAG,GAEL,GAAIm2C,GAAQ,CACV,IAAInhJ,EAAO6D,EACX,KAAO7D,GAAwC,SAAhCA,EAAKhK,SAAS7D,eAA0B,CACrD,MAAM8xJ,EAAYT,GAAcxjJ,EAAM,aACtC,GAAI,UAAUpF,KAAKqpJ,GAAY,CAC7B,MAAM/7B,EAAS+7B,EAAU9vJ,MAAM,GAAI,GAAG/B,MAAM,OAAOof,IAAImuE,QACvDqkE,EAAWrgD,GAAKukB,EAAO,GACvB87B,EAAWh5C,GAAKkd,EAAO,EACzB,MAAO,GAAI,YAAYttH,KAAKqpJ,GAAY,CACtC,MAAM/7B,EAAS+7B,EAAU9vJ,MAAM,GAAI,GAAG/B,MAAM,OAAOof,IAAImuE,QACvDqkE,EAAWrgD,GAAKukB,EAAO,IACvB87B,EAAWh5C,GAAKkd,EAAO,GACzB,CACA,GAAIloH,EAAKkkJ,cAAgBlkJ,EAAKkkJ,aAAaC,eAAiBjH,IAAAA,gBAA0B,CACpF,MAAMkH,EAAiBlH,IAAAA,iBAA0Bl9I,EAAKkkJ,aAAaC,eAAeF,UAC5EI,EAAS,IAAInH,IAAAA,iBAAyBkH,GAC5CJ,EAAWrgD,GAAK0gD,EAAOC,IACvBN,EAAWh5C,GAAKq5C,EAAOE,GACzB,CACAvkJ,EAAOA,EAAK0E,YAAc1E,EAAKwkJ,IACjC,CACF,CACA,MAAMzjJ,EAAW,CAAC,EACZ0jJ,EAAYhB,GAAa/lD,EAAMh+F,QAC/BglJ,EAAMjB,GAAa5/I,GACnB8gJ,EAAOD,EAAI3pD,MACX38E,EAAOsmI,EAAI1pD,OACjB,IAAI4pD,EAAUlnD,EAAMknD,SAAWF,EAAIx8E,IAAMu8E,EAAUv8E,KAC/C28E,EAAUnnD,EAAMmnD,SAAWH,EAAI1jD,KAAOyjD,EAAUzjD,MAWpD,OAVItD,EAAM/B,iBACRkpD,EAAUnnD,EAAM/B,eAAe,GAAGhE,MAAQ+sD,EAAI1jD,KAC9C4jD,EAAUlnD,EAAM/B,eAAe,GAAG/D,MAAQ8sD,EAAIx8E,IAC1Ci5E,KACF0D,GAAWb,EAAWrgD,EACtBihD,GAAWZ,EAAWh5C,IAG1BjqG,EAASiqG,EAAI,EAAIvsG,KAAK69E,IAAI,EAAG79E,KAAKyhG,IAAI,EAAG0kD,EAAUxmI,IACnDrd,EAAS4iG,EAAIllG,KAAK69E,IAAI,EAAG79E,KAAKyhG,IAAI,EAAG2kD,EAAUF,IACxC5jJ,CACT,CAWA,SAASwL,GAAW9Z,GAClB,OAAO2yI,GAAS3yI,IAA6B,IAAnBA,EAAM4Z,QAClC,CAWA,SAASy4I,GAAQjhJ,GACf,KAAOA,EAAG0H,YACR1H,EAAG2J,YAAY3J,EAAG0H,YAEpB,OAAO1H,CACT,CAkCA,SAASkhJ,GAAiBlD,GASxB,MANuB,oBAAZA,IACTA,EAAUA,MAKJztJ,MAAMC,QAAQwtJ,GAAWA,EAAU,CAACA,IAAUrwI,KAAI/e,IAGnC,oBAAVA,IACTA,EAAQA,KAEN8uJ,GAAK9uJ,IAAU8Z,GAAW9Z,GACrBA,EAEY,kBAAVA,GAAsB,KAAKmI,KAAKnI,GAClC4pJ,IAAAA,eAA0B5pJ,QADnC,KAGCqU,QAAOrU,GAASA,GACrB,CAcA,SAASsvJ,GAAcl+I,EAAIg+I,GAEzB,OADAkD,GAAiBlD,GAAS/tJ,SAAQkN,GAAQ6C,EAAG9B,YAAYf,KAClD6C,CACT,CAeA,SAASmhJ,GAAcnhJ,EAAIg+I,GACzB,OAAOE,GAAc+C,GAAQjhJ,GAAKg+I,EACpC,CAWA,SAASoD,GAAkBvnD,GAKzB,YAAqBjoG,IAAjBioG,EAAMvF,aAA0C1iG,IAAlBioG,EAAMtF,UAenB,IAAjBsF,EAAMvF,aAAkC1iG,IAAlBioG,EAAMtF,UASb,YAAfsF,EAAMlrG,MAAuC,IAAjBkrG,EAAMvF,QAAkC,IAAlBuF,EAAMtF,UAKzC,cAAfsF,EAAMlrG,MAAyC,IAAjBkrG,EAAMvF,QAAkC,IAAlBuF,EAAMtF,SAGzC,IAAjBsF,EAAMvF,QAAkC,IAAlBuF,EAAMtF,UASlC,CAkBA,MAAMsuB,GAAI+6B,GAAc,iBAoBlByD,GAAKzD,GAAc,oBAiBzB,SAAS+B,GAAc3/I,EAAImrD,GACzB,IAAKnrD,IAAOmrD,EACV,MAAO,GAET,GAAyC,oBAA9BkuF,IAAAA,iBAA0C,CACnD,IAAIiI,EACJ,IACEA,EAAqBjI,IAAAA,iBAA0Br5I,EACjD,CAAE,MAAO/Q,GACP,MAAO,EACT,CACA,OAAOqyJ,EAAqBA,EAAmBC,iBAAiBp2F,IAASm2F,EAAmBn2F,GAAQ,EACtG,CACA,MAAO,EACT,CASA,SAASq2F,GAAwBxoE,GAC/B,IAAIw/D,IAAAA,aAAwBvoJ,SAAQwxJ,IAClC,IACE,MAAMC,EAAW,IAAID,EAAWC,UAAU/zI,KAAIg0I,GAAQA,EAAKC,UAASv2I,KAAK,IACnE48E,EAAQuwD,IAAAA,cAAyB,SACvCvwD,EAAMxD,YAAci9D,EACpB1oE,EAAID,SAAS8oE,KAAK3jJ,YAAY+pF,EAChC,CAAE,MAAOh5F,GACP,MAAM25F,EAAO4vD,IAAAA,cAAyB,QACtC5vD,EAAKk5D,IAAM,aACXl5D,EAAKj6F,KAAO8yJ,EAAW9yJ,KAEvBi6F,EAAK0wC,MAAQmoB,EAAWnoB,MAAMyoB,UAC9Bn5D,EAAKiT,KAAO4lD,EAAW5lD,KACvB7iB,EAAID,SAAS8oE,KAAK3jJ,YAAY0qF,EAChC,IAEJ,CAEA,IAAIo5D,GAAmBvrJ,OAAOqE,OAAO,CACnC4oH,UAAW,KACXi5B,OAAQA,GACRe,KAAMA,GACNC,UAAWA,GACXI,SAAUA,GACVt5D,YAAaA,GACb25D,UAAWA,GACXC,SAAUA,GACVI,SAAUA,GACVI,YAAaA,GACbI,YAAaA,GACbG,cAAeA,GACfE,cAAeA,GACfpxI,aAAcA,GACdiB,aAAcA,GACdC,gBAAiBA,GACjBqwI,mBAAoBA,GACpBC,qBAAsBA,GACtB55B,sBAAuBA,GACvB85B,aAAcA,GACdM,mBAAoBA,GACpBx3I,WAAYA,GACZu4I,QAASA,GACTC,iBAAkBA,GAClBhD,cAAeA,GACfiD,cAAeA,GACfC,kBAAmBA,GACnBv+B,EAAGA,GACHw+B,GAAIA,GACJ1B,cAAeA,GACf6B,wBAAyBA,KAS3B,IACIS,GADAC,IAAgB,EAMpB,MAAMC,GAAY,WAChB,IAAoC,IAAhCF,GAAUrxJ,QAAQuxJ,UACpB,OAEF,MAAMC,EAAO7xJ,MAAMmG,UAAUpG,MAAM6F,KAAKqiJ,IAAAA,qBAAgC,UAClE6J,EAAS9xJ,MAAMmG,UAAUpG,MAAM6F,KAAKqiJ,IAAAA,qBAAgC,UACpE8J,EAAO/xJ,MAAMmG,UAAUpG,MAAM6F,KAAKqiJ,IAAAA,qBAAgC,aAClE+J,EAAWH,EAAKpjD,OAAOqjD,EAAQC,GAGrC,GAAIC,GAAYA,EAAS5sJ,OAAS,EAChC,IAAK,IAAIN,EAAI,EAAGpG,EAAIszJ,EAAS5sJ,OAAQN,EAAIpG,EAAGoG,IAAK,CAC/C,MAAMmtJ,EAAUD,EAASltJ,GAGzB,IAAImtJ,IAAWA,EAAQt0I,aAchB,CACLu0I,GAAiB,GACjB,KACF,CAfE,QAAuB7wJ,IAAnB4wJ,EAAQE,OAAsB,CAKhB,OAJAF,EAAQt0I,aAAa,eAMnC+zI,GAAUO,EAEd,CAOJ,MAGUN,IACVO,GAAiB,EAErB,EAYA,SAASA,GAAiBE,EAAMC,GAEzBjG,OAGDiG,IACFX,GAAYW,GAEdvJ,IAAAA,WAAoB8I,GAAWQ,GACjC,CAOA,SAASE,KACPX,IAAgB,EAChB7I,IAAAA,oBAA6B,OAAQwJ,GACvC,CACIlG,OAC4B,aAA1BnE,IAAAA,WACFqK,KAUAxJ,IAAAA,iBAA0B,OAAQwJ,KAkBtC,MAAMC,GAAqB,SAAUv6B,GACnC,MAAMtgC,EAAQuwD,IAAAA,cAAyB,SAEvC,OADAvwD,EAAMsgC,UAAYA,EACXtgC,CACT,EAWM86D,GAAiB,SAAU/iJ,EAAIg+I,GAC/Bh+I,EAAGyhJ,WACLzhJ,EAAGyhJ,WAAWG,QAAU5D,EAExBh+I,EAAGykF,YAAcu5D,CAErB,EAiBA,IAAIgF,GAAU,IAAI/wC,QAoBlB,IA8MIgxC,GA9MAC,GAPiB,EAerB,SAASC,KACP,OAAOD,IACT,CAqBA,SAASE,GAAeC,EAAM10J,GAC5B,IAAKq0J,GAAQhrJ,IAAIqrJ,GACf,OAEF,MAAMpvJ,EAAO+uJ,GAAQ5qJ,IAAIirJ,GAGU,IAA/BpvJ,EAAKqvJ,SAAS30J,GAAMgH,gBACf1B,EAAKqvJ,SAAS30J,GAKjB00J,EAAK54D,oBACP44D,EAAK54D,oBAAoB97F,EAAMsF,EAAKsvJ,YAAY,GACvCF,EAAKzoD,aACdyoD,EAAKzoD,YAAY,KAAOjsG,EAAMsF,EAAKsvJ,aAKnC9sJ,OAAOwnJ,oBAAoBhqJ,EAAKqvJ,UAAU3tJ,QAAU,WAC/C1B,EAAKqvJ,gBACLrvJ,EAAKsvJ,kBACLtvJ,EAAKiwF,UAIkC,IAA5CztF,OAAOwnJ,oBAAoBhqJ,GAAM0B,QACnCqtJ,GAAQzqJ,OAAO8qJ,EAEnB,CAiBA,SAASG,GAAsBtkJ,EAAImkJ,EAAMnN,EAAOtoJ,GAC9CsoJ,EAAMjmJ,SAAQ,SAAUtB,GAEtBuQ,EAAGmkJ,EAAM10J,EAAMf,EACjB,GACF,CAWA,SAAS61J,GAAS5pD,GAChB,GAAIA,EAAM6pD,OACR,OAAO7pD,EAET,SAAS8pD,IACP,OAAO,CACT,CACA,SAASC,IACP,OAAO,CACT,CAOA,IAAK/pD,IAAUA,EAAMxH,uBAAyBwH,EAAMgqD,8BAA+B,CACjF,MAAMp0I,EAAMoqF,GAASw/C,IAAAA,MACrBx/C,EAAQ,CAAC,EAOT,MAAMiqD,EAAkB,CAAC,SAAU,SAAU,cAAe,OAAQ,kBAAmB,kBAAmB,cAAe,kBACzH,IAAK,MAAMzzJ,KAAOof,EAKXq0I,EAAgBpiE,SAASrxF,IAGd,gBAARA,GAAyBof,EAAI6iF,iBACjCuH,EAAMxpG,GAAOof,EAAIpf,IAgDvB,GA1CKwpG,EAAMh+F,SACTg+F,EAAMh+F,OAASg+F,EAAMvQ,YAAckvD,KAIhC3+C,EAAMrF,gBACTqF,EAAMrF,cAAgBqF,EAAMpF,cAAgBoF,EAAMh+F,OAASg+F,EAAMnF,UAAYmF,EAAMpF,aAIrFoF,EAAMvH,eAAiB,WACjB7iF,EAAI6iF,gBACN7iF,EAAI6iF,iBAENuH,EAAMzH,aAAc,EACpB3iF,EAAI2iF,aAAc,EAClByH,EAAM1H,kBAAmB,CAC3B,EACA0H,EAAM1H,kBAAmB,EAGzB0H,EAAM1I,gBAAkB,WAClB1hF,EAAI0hF,iBACN1hF,EAAI0hF,kBAEN0I,EAAMtH,cAAe,EACrB9iF,EAAI8iF,cAAe,EACnBsH,EAAMxH,qBAAuBsxD,CAC/B,EACA9pD,EAAMxH,qBAAuBuxD,EAG7B/pD,EAAMkqD,yBAA2B,WAC3Bt0I,EAAIs0I,0BACNt0I,EAAIs0I,2BAENlqD,EAAMgqD,8BAAgCF,EACtC9pD,EAAM1I,iBACR,EACA0I,EAAMgqD,8BAAgCD,EAGhB,OAAlB/pD,EAAMjG,cAAsChiG,IAAlBioG,EAAMjG,QAAuB,CACzD,MAAMz1F,EAAMq6I,IAAAA,gBACNpnJ,EAAOonJ,IAAAA,KACb3+C,EAAM/F,MAAQ+F,EAAMjG,SAAWz1F,GAAOA,EAAIi/F,YAAchsG,GAAQA,EAAKgsG,YAAc,IAAMj/F,GAAOA,EAAI6lJ,YAAc5yJ,GAAQA,EAAK4yJ,YAAc,GAC7InqD,EAAM9F,MAAQ8F,EAAMhG,SAAW11F,GAAOA,EAAIk/F,WAAajsG,GAAQA,EAAKisG,WAAa,IAAMl/F,GAAOA,EAAI8lJ,WAAa7yJ,GAAQA,EAAK6yJ,WAAa,EAC3I,CAGApqD,EAAM9C,MAAQ8C,EAAMlI,UAAYkI,EAAMnI,QAIjB,OAAjBmI,EAAMvF,aAAoC1iG,IAAjBioG,EAAMvF,SAIjCuF,EAAMvF,OAAwB,EAAfuF,EAAMvF,OAAa,EAAmB,EAAfuF,EAAMvF,OAAa,EAAmB,EAAfuF,EAAMvF,OAAa,EAAI,EAGxF,CAGA,OAFAuF,EAAM6pD,QAAS,EAER7pD,CACT,CAMA,MAqBMqqD,GAAgB,CAAC,aAAc,aAiBrC,SAAS5xB,GAAG+wB,EAAM10J,EAAMuQ,GACtB,GAAI3O,MAAMC,QAAQ7B,GAChB,OAAO60J,GAAsBlxB,GAAI+wB,EAAM10J,EAAMuQ,GAE1C8jJ,GAAQhrJ,IAAIqrJ,IACfL,GAAQ/qJ,IAAIorJ,EAAM,CAAC,GAErB,MAAMpvJ,EAAO+uJ,GAAQ5qJ,IAAIirJ,GAsCzB,GAnCKpvJ,EAAKqvJ,WACRrvJ,EAAKqvJ,SAAW,CAAC,GAEdrvJ,EAAKqvJ,SAAS30J,KACjBsF,EAAKqvJ,SAAS30J,GAAQ,IAEnBuQ,EAAGilJ,OACNjlJ,EAAGilJ,KAAOhB,MAEZlvJ,EAAKqvJ,SAAS30J,GAAM8B,KAAKyO,GACpBjL,EAAKsvJ,aACRtvJ,EAAKiwF,UAAW,EAChBjwF,EAAKsvJ,WAAa,SAAU1pD,EAAOuoB,GACjC,GAAInuH,EAAKiwF,SACP,OAEF2V,EAAQ4pD,GAAS5pD,GACjB,MAAMypD,EAAWrvJ,EAAKqvJ,SAASzpD,EAAMlrG,MACrC,GAAI20J,EAAU,CAEZ,MAAMc,EAAed,EAAShzJ,MAAM,GACpC,IAAK,IAAIynF,EAAI,EAAGvhF,EAAI4tJ,EAAazuJ,OAAQoiF,EAAIvhF,IACvCqjG,EAAMgqD,gCADoC9rE,IAI5C,IACEqsE,EAAarsE,GAAG5hF,KAAKktJ,EAAMxpD,EAAOuoB,EACpC,CAAE,MAAOnzH,GACPypJ,GAAMn5I,MAAMtQ,EACd,CAGN,CACF,GAEiC,IAA/BgF,EAAKqvJ,SAAS30J,GAAMgH,OACtB,GAAI0tJ,EAAK74D,iBAAkB,CACzB,IAAI55F,GAAU,GArFI,WACtB,GAAgC,mBAArBqyJ,GAAgC,CACzCA,IAAmB,EACnB,IACE,MAAMxyB,EAAOh6H,OAAOka,eAAe,CAAC,EAAG,UAAW,CAChDvY,GAAAA,GACE6qJ,IAAmB,CACrB,IAEF5J,IAAAA,iBAA0B,OAAQ,KAAM5oB,GACxC4oB,IAAAA,oBAA6B,OAAQ,KAAM5oB,EAC7C,CAAE,MAAOxhI,GACP,CAEJ,CACA,OAAOg0J,EACT,EAsEUoB,IAAqBH,GAAc9zJ,QAAQzB,IAAS,IACtDiC,EAAU,CACRgvG,SAAS,IAGbyjD,EAAK74D,iBAAiB77F,EAAMsF,EAAKsvJ,WAAY3yJ,EAC/C,MAAWyyJ,EAAKtoD,aACdsoD,EAAKtoD,YAAY,KAAOpsG,EAAMsF,EAAKsvJ,WAGzC,CAeA,SAAShxB,GAAI8wB,EAAM10J,EAAMuQ,GAEvB,IAAK8jJ,GAAQhrJ,IAAIqrJ,GACf,OAEF,MAAMpvJ,EAAO+uJ,GAAQ5qJ,IAAIirJ,GAGzB,IAAKpvJ,EAAKqvJ,SACR,OAEF,GAAI/yJ,MAAMC,QAAQ7B,GAChB,OAAO60J,GAAsBjxB,GAAK8wB,EAAM10J,EAAMuQ,GAIhD,MAAMolJ,EAAa,SAAUtkJ,EAAI2D,GAC/B1P,EAAKqvJ,SAAS3/I,GAAK,GACnBy/I,GAAepjJ,EAAI2D,EACrB,EAGA,QAAa/R,IAATjD,EAAoB,CACtB,IAAK,MAAMgV,KAAK1P,EAAKqvJ,SACf7sJ,OAAOC,UAAUvB,eAAegB,KAAKlC,EAAKqvJ,UAAY,CAAC,EAAG3/I,IAC5D2gJ,EAAWjB,EAAM1/I,GAGrB,MACF,CACA,MAAM2/I,EAAWrvJ,EAAKqvJ,SAAS30J,GAG/B,GAAK20J,EAKL,GAAKpkJ,EAAL,CAMA,GAAIA,EAAGilJ,KACL,IAAK,IAAI3tJ,EAAI,EAAGA,EAAI8sJ,EAAS3tJ,OAAQa,IAC/B8sJ,EAAS9sJ,GAAG2tJ,OAASjlJ,EAAGilJ,MAC1Bb,EAAS5kC,OAAOloH,IAAK,GAI3B4sJ,GAAeC,EAAM10J,EAVrB,MAFE21J,EAAWjB,EAAM10J,EAarB,CAkBA,SAAS6jI,GAAQ6wB,EAAMxpD,EAAOuoB,GAI5B,MAAMmiC,EAAWvB,GAAQhrJ,IAAIqrJ,GAAQL,GAAQ5qJ,IAAIirJ,GAAQ,CAAC,EACpDr6I,EAASq6I,EAAKxiJ,YAAcwiJ,EAAKh9I,cAwBvC,GAnBqB,kBAAVwzF,EACTA,EAAQ,CACNlrG,KAAMkrG,EACNh+F,OAAQwnJ,GAEAxpD,EAAMh+F,SAChBg+F,EAAMh+F,OAASwnJ,GAIjBxpD,EAAQ4pD,GAAS5pD,GAGb0qD,EAAShB,YACXgB,EAAShB,WAAWptJ,KAAKktJ,EAAMxpD,EAAOuoB,GAKpCp5G,IAAW6wF,EAAMxH,yBAA4C,IAAlBwH,EAAM9G,QACnDy/B,GAAQr8H,KAAK,KAAM6S,EAAQ6wF,EAAOuoB,QAG7B,IAAKp5G,IAAW6wF,EAAM1H,kBAAoB0H,EAAMh+F,QAAUg+F,EAAMh+F,OAAOg+F,EAAMlrG,MAAO,CACpFq0J,GAAQhrJ,IAAI6hG,EAAMh+F,SACrBmnJ,GAAQ/qJ,IAAI4hG,EAAMh+F,OAAQ,CAAC,GAE7B,MAAM2oJ,EAAaxB,GAAQ5qJ,IAAIyhG,EAAMh+F,QAGjCg+F,EAAMh+F,OAAOg+F,EAAMlrG,QAErB61J,EAAWtgE,UAAW,EAEkB,oBAA7B2V,EAAMh+F,OAAOg+F,EAAMlrG,OAC5BkrG,EAAMh+F,OAAOg+F,EAAMlrG,QAGrB61J,EAAWtgE,UAAW,EAE1B,CAGA,OAAQ2V,EAAM1H,gBAChB,CAcA,SAASsyD,GAAIpB,EAAM10J,EAAMuQ,GACvB,GAAI3O,MAAMC,QAAQ7B,GAChB,OAAO60J,GAAsBiB,GAAKpB,EAAM10J,EAAMuQ,GAEhD,MAAM89E,EAAO,WACXu1C,GAAI8wB,EAAM10J,EAAMquF,GAChB99E,EAAG9P,MAAMkI,KAAMiK,UACjB,EAGAy7E,EAAKmnE,KAAOjlJ,EAAGilJ,KAAOjlJ,EAAGilJ,MAAQhB,KACjC7wB,GAAG+wB,EAAM10J,EAAMquF,EACjB,CAeA,SAASG,GAAIkmE,EAAM10J,EAAMuQ,GACvB,MAAM89E,EAAO,WACXu1C,GAAI8wB,EAAM10J,EAAMquF,GAChB99E,EAAG9P,MAAMkI,KAAMiK,UACjB,EAGAy7E,EAAKmnE,KAAOjlJ,EAAGilJ,KAAOjlJ,EAAGilJ,MAAQhB,KAGjC7wB,GAAG+wB,EAAM10J,EAAMquF,EACjB,CAEA,IAAI+hC,GAAsBtoH,OAAOqE,OAAO,CACtC4oH,UAAW,KACX+/B,SAAUA,GACVnxB,GAAIA,GACJC,IAAKA,GACLC,QAASA,GACTiyB,IAAKA,GACLtnE,IAAKA,KAOP,MAAMunE,GAA0B,GAsB1BC,GAAQ,SAAUv8C,EAASlpG,EAAI0lJ,GAE9B1lJ,EAAGilJ,OACNjlJ,EAAGilJ,KAAOhB,MAIZ,MAAM0B,EAAQ3lJ,EAAG7I,KAAK+xG,GAStB,OADAy8C,EAAMV,KAAOS,EAAMA,EAAM,IAAM1lJ,EAAGilJ,KAAOjlJ,EAAGilJ,KACrCU,CACT,EAeMC,GAAW,SAAU5lJ,EAAIyjJ,GAC7B,IAAI7sC,EAAOujC,IAAAA,YAAqBlmD,MAQhC,OAPkB,WAChB,MAAMA,EAAMkmD,IAAAA,YAAqBlmD,MAC7BA,EAAM2iB,GAAQ6sC,IAChBzjJ,KAAGqC,WACHu0G,EAAO3iB,EAEX,CAEF,EA4BM4xD,GAAW,SAAU/nE,EAAM2lE,EAAMqC,GAA+B,IAChEzzJ,EAD4C62G,EAAO7mG,UAAA5L,OAAA,QAAA/D,IAAA2P,UAAA,GAAAA,UAAA,GAAG83I,IAE1D,MAMM4L,EAAY,WAChB,MAAMhsE,EAAO3hF,KACPo7H,EAAOnxH,UACb,IAAI2jJ,EAAQ,WACV3zJ,EAAU,KACV2zJ,EAAQ,KACHF,GACHhoE,EAAK5tF,MAAM6pF,EAAMy5C,EAErB,GACKnhI,GAAWyzJ,GACdhoE,EAAK5tF,MAAM6pF,EAAMy5C,GAEnBtqB,EAAQ11G,aAAanB,GACrBA,EAAU62G,EAAQh1G,WAAW8xJ,EAAOvC,EACtC,EAIA,OADAsC,EAAUziC,OAxBKA,KACbpa,EAAQ11G,aAAanB,GACrBA,EAAU,IAAI,EAuBT0zJ,CACT,EAEA,IAAIE,GAAkB1uJ,OAAOqE,OAAO,CAClC4oH,UAAW,KACXghC,wBAAyBA,GACzBC,MAAOA,GACPG,SAAUA,GACVC,SAAUA,KAMZ,IAAIK,GAUJ,MAAMC,GAWJ/yB,EAAAA,CAAG3jI,EAAMuQ,GAGP,MAAMomJ,EAAMhuJ,KAAKkzF,iBACjBlzF,KAAKkzF,iBAAmB,OACxB8nC,GAAGh7H,KAAM3I,EAAMuQ,GACf5H,KAAKkzF,iBAAmB86D,CAC1B,CAYA/yB,GAAAA,CAAI5jI,EAAMuQ,GACRqzH,GAAIj7H,KAAM3I,EAAMuQ,EAClB,CAYAulJ,GAAAA,CAAI91J,EAAMuQ,GAGR,MAAMomJ,EAAMhuJ,KAAKkzF,iBACjBlzF,KAAKkzF,iBAAmB,OACxBi6D,GAAIntJ,KAAM3I,EAAMuQ,GAChB5H,KAAKkzF,iBAAmB86D,CAC1B,CAaAnoE,GAAAA,CAAIxuF,EAAMuQ,GAGR,MAAMomJ,EAAMhuJ,KAAKkzF,iBACjBlzF,KAAKkzF,iBAAmB,OACxBrN,GAAI7lF,KAAM3I,EAAMuQ,GAChB5H,KAAKkzF,iBAAmB86D,CAC1B,CAiBA9yB,OAAAA,CAAQ34B,GACN,MAAMlrG,EAAOkrG,EAAMlrG,MAAQkrG,EAON,kBAAVA,IACTA,EAAQ,CACNlrG,SAGJkrG,EAAQ4pD,GAAS5pD,GACbviG,KAAKiuJ,eAAe52J,IAAS2I,KAAK,KAAO3I,IAC3C2I,KAAK,KAAO3I,GAAMkrG,GAEpB24B,GAAQl7H,KAAMuiG,EAChB,CACA2rD,YAAAA,CAAa3rD,GAENurD,KACHA,GAAY,IAAI5tJ,KAElB,MAAM7I,EAAOkrG,EAAMlrG,MAAQkrG,EAC3B,IAAIlsF,EAAMy3I,GAAUhtJ,IAAId,MACnBqW,IACHA,EAAM,IAAInW,IACV4tJ,GAAUntJ,IAAIX,KAAMqW,IAEtB,MAAM83I,EAAa93I,EAAIvV,IAAIzJ,GAC3Bgf,EAAIpV,OAAO5J,GACX0qJ,IAAAA,aAAsBoM,GACtB,MAAMl0J,EAAU8nJ,IAAAA,YAAoB,KAClC1rI,EAAIpV,OAAO5J,GAEM,IAAbgf,EAAIjV,OACNiV,EAAM,KACNy3I,GAAU7sJ,OAAOjB,OAEnBA,KAAKk7H,QAAQ34B,EAAM,GAClB,GACHlsF,EAAI1V,IAAItJ,EAAM4C,EAChB,EAgCF8zJ,GAAc3uJ,UAAU6uJ,eAAiB,CAAC,EAS1CF,GAAc3uJ,UAAU8zF,iBAAmB66D,GAAc3uJ,UAAU47H,GASnE+yB,GAAc3uJ,UAAU+zF,oBAAsB46D,GAAc3uJ,UAAU67H,IAStE8yB,GAAc3uJ,UAAU25F,cAAgBg1D,GAAc3uJ,UAAU87H,QAMhE,MAAMkzB,GAAUtwJ,GACU,oBAAbA,EAAIyB,KACNzB,EAAIyB,OAEW,kBAAbzB,EAAIyB,KACNzB,EAAIyB,KAETzB,EAAIuwJ,MACCvwJ,EAAIuwJ,MAETvwJ,EAAIwB,aAAexB,EAAIwB,YAAYC,KAC9BzB,EAAIwB,YAAYC,YAEXzB,EAYVwwJ,GAAY7qJ,GAAUA,aAAkBsqJ,MAAmBtqJ,EAAO8qJ,aAAe,CAAC,KAAM,MAAO,MAAO,WAAWn3I,OAAMipE,GAA0B,oBAAd58E,EAAO48E,KA+B1ImuE,GAAmBn3J,GAGT,kBAATA,GAAqB,KAAKoI,KAAKpI,IAAS4B,MAAMC,QAAQ7B,MAAWA,EAAKgH,OAkBvEowJ,GAAiBA,CAAClqJ,EAAQzG,EAAK4wJ,KACnC,IAAKnqJ,IAAWA,EAAO1J,WAAayzJ,GAAU/pJ,GAC5C,MAAM,IAAI9K,MAAM,sBAAsB20J,GAAQtwJ,MAAQ4wJ,2CACxD,EAmBIC,GAAoBA,CAACt3J,EAAMyG,EAAK4wJ,KACpC,IAAKF,GAAiBn3J,GACpB,MAAM,IAAIoC,MAAM,0BAA0B20J,GAAQtwJ,MAAQ4wJ,0CAC5D,EAmBIE,GAAmBA,CAAC9mD,EAAUhqG,EAAK4wJ,KACvC,GAAwB,oBAAb5mD,EACT,MAAM,IAAIruG,MAAM,wBAAwB20J,GAAQtwJ,MAAQ4wJ,yBAC1D,EAqBIG,GAAsBA,CAACltE,EAAMy5C,EAAMszB,KAGvC,MAAMI,EAAkB1zB,EAAK/8H,OAAS,GAAK+8H,EAAK,KAAOz5C,GAAQy5C,EAAK,KAAOz5C,EAAK4sE,YAChF,IAAIhqJ,EACAlN,EACAywG,EAsBJ,OArBIgnD,GACFvqJ,EAASo9E,EAAK4sE,YAIVnzB,EAAK/8H,QAAU,GACjB+8H,EAAKpiC,SAEN3hG,EAAMywG,GAAYszB,IAKnB72H,EAAS62H,EAAK,GACd/jI,EAAO+jI,EAAK,GACZtzB,EAAWszB,EAAK,IAElBqzB,GAAelqJ,EAAQo9E,EAAM+sE,GAC7BC,GAAkBt3J,EAAMsqF,EAAM+sE,GAC9BE,GAAiB9mD,EAAUnmB,EAAM+sE,GACjC5mD,EAAWulD,GAAM1rE,EAAMmmB,GAChB,CACLgnD,kBACAvqJ,SACAlN,OACAywG,WACD,EAoBGinD,GAASA,CAACxqJ,EAAQnI,EAAQ/E,EAAMywG,KACpC2mD,GAAelqJ,EAAQA,EAAQnI,GAC3BmI,EAAO1J,SACT4sH,GAAOrrH,GAAQmI,EAAQlN,EAAMywG,GAE7BvjG,EAAOnI,GAAQ/E,EAAMywG,EACvB,EASIknD,GAAe,CAwBnBh0B,EAAAA,GAAY,QAAAi0B,EAAAhlJ,UAAA5L,OAAN+8H,EAAI,IAAAniI,MAAAg2J,GAAAC,EAAA,EAAAA,EAAAD,EAAAC,IAAJ9zB,EAAI8zB,GAAAjlJ,UAAAilJ,GACR,MAAM,gBACJJ,EAAe,OACfvqJ,EAAM,KACNlN,EAAI,SACJywG,GACE+mD,GAAoB7uJ,KAAMo7H,EAAM,MAIpC,GAHA2zB,GAAOxqJ,EAAQ,KAAMlN,EAAMywG,IAGtBgnD,EAAiB,CAEpB,MAAMK,EAA0BA,IAAMnvJ,KAAKi7H,IAAI12H,EAAQlN,EAAMywG,GAI7DqnD,EAAwBtC,KAAO/kD,EAAS+kD,KAKxC,MAAMuC,EAA+BA,IAAMpvJ,KAAKi7H,IAAI,UAAWk0B,GAI/DC,EAA6BvC,KAAO/kD,EAAS+kD,KAC7CkC,GAAO/uJ,KAAM,KAAM,UAAWmvJ,GAC9BJ,GAAOxqJ,EAAQ,KAAM,UAAW6qJ,EAClC,CACF,EAwBAjC,GAAAA,GAAa,QAAAkC,EAAA,KAAAC,EAAArlJ,UAAA5L,OAAN+8H,EAAI,IAAAniI,MAAAq2J,GAAAC,EAAA,EAAAA,EAAAD,EAAAC,IAAJn0B,EAAIm0B,GAAAtlJ,UAAAslJ,GACT,MAAM,gBACJT,EAAe,OACfvqJ,EAAM,KACNlN,EAAI,SACJywG,GACE+mD,GAAoB7uJ,KAAMo7H,EAAM,OAGpC,GAAI0zB,EACFC,GAAOxqJ,EAAQ,MAAOlN,EAAMywG,OAGvB,CAKL,MAAM0nD,EAAU,WACdH,EAAKp0B,IAAI12H,EAAQlN,EAAMm4J,GAAS,QAAAC,EAAAxlJ,UAAA5L,OADdqxJ,EAAK,IAAAz2J,MAAAw2J,GAAAE,EAAA,EAAAA,EAAAF,EAAAE,IAALD,EAAKC,GAAA1lJ,UAAA0lJ,GAEvB7nD,EAAShwG,MAAM,KAAM43J,EACvB,EAIAF,EAAQ3C,KAAO/kD,EAAS+kD,KACxBkC,GAAOxqJ,EAAQ,MAAOlN,EAAMm4J,EAC9B,CACF,EAyBA3pE,GAAAA,GAAa,QAAA+pE,EAAA,KAAAC,EAAA5lJ,UAAA5L,OAAN+8H,EAAI,IAAAniI,MAAA42J,GAAAC,EAAA,EAAAA,EAAAD,EAAAC,IAAJ10B,EAAI00B,GAAA7lJ,UAAA6lJ,GACT,MAAM,gBACJhB,EAAe,OACfvqJ,EAAM,KACNlN,EAAI,SACJywG,GACE+mD,GAAoB7uJ,KAAMo7H,EAAM,OAGpC,GAAI0zB,EACFC,GAAOxqJ,EAAQ,MAAOlN,EAAMywG,OAGvB,CACL,MAAM0nD,EAAU,WACdI,EAAK30B,IAAI12H,EAAQlN,EAAMm4J,GAAS,QAAAO,EAAA9lJ,UAAA5L,OADdqxJ,EAAK,IAAAz2J,MAAA82J,GAAAC,EAAA,EAAAA,EAAAD,EAAAC,IAALN,EAAKM,GAAA/lJ,UAAA+lJ,GAEvBloD,EAAShwG,MAAM,KAAM43J,EACvB,EAIAF,EAAQ3C,KAAO/kD,EAAS+kD,KACxBkC,GAAOxqJ,EAAQ,MAAOlN,EAAMm4J,EAC9B,CACF,EAoBAv0B,GAAAA,CAAIg1B,EAAcC,EAAgBpoD,GAEhC,IAAKmoD,GAAgBzB,GAAiByB,GACpCh1B,GAAIj7H,KAAKuuJ,YAAa0B,EAAcC,OAG/B,CACL,MAAM3rJ,EAAS0rJ,EACT54J,EAAO64J,EAGbzB,GAAelqJ,EAAQvE,KAAM,OAC7B2uJ,GAAkBt3J,EAAM2I,KAAM,OAC9B4uJ,GAAiB9mD,EAAU9nG,KAAM,OAGjC8nG,EAAWulD,GAAMrtJ,KAAM8nG,GAIvB9nG,KAAKi7H,IAAI,UAAWnzB,GAChBvjG,EAAO1J,UACTogI,GAAI12H,EAAQlN,EAAMywG,GAClBmzB,GAAI12H,EAAQ,UAAWujG,IACdwmD,GAAU/pJ,KACnBA,EAAO02H,IAAI5jI,EAAMywG,GACjBvjG,EAAO02H,IAAI,UAAWnzB,GAE1B,CACF,EAaAozB,OAAAA,CAAQ34B,EAAOuoB,GACb2jC,GAAezuJ,KAAKuuJ,YAAavuJ,KAAM,WACvC,MAAM3I,EAAOkrG,GAA0B,kBAAVA,EAAqBA,EAAMlrG,KAAOkrG,EAC/D,IAAKisD,GAAiBn3J,GACpB,MAAM,IAAIoC,MAAM,0BAA0B20J,GAAQpuJ,mGAEpD,OAAOk7H,GAAQl7H,KAAKuuJ,YAAahsD,EAAOuoB,EAC1C,GAoBF,SAASqlC,GAAQ5rJ,GAAsB,IAAdjL,EAAO2Q,UAAA5L,OAAA,QAAA/D,IAAA2P,UAAA,GAAAA,UAAA,GAAG,CAAC,EAClC,MAAM,YACJmmJ,GACE92J,EAGJ,GAAI82J,EAAa,CACf,IAAK7rJ,EAAO6rJ,GAAav1J,SACvB,MAAM,IAAIpB,MAAM,oBAAoB22J,oCAEtC7rJ,EAAOgqJ,YAAchqJ,EAAO6rJ,EAC9B,MACE7rJ,EAAOgqJ,YAAc9H,GAAS,OAAQ,CACpCx1B,UAAW,kBAsBf,OAnBA9xH,OAAOmF,OAAOC,EAAQyqJ,IAClBzqJ,EAAO8rJ,kBACT9rJ,EAAO8rJ,iBAAiB13J,SAAQrC,IAC9BA,GAAU,IAKdiO,EAAOy2H,GAAG,WAAW,KACnBz2H,EAAO02H,MACP,CAAC12H,EAAQA,EAAO+rJ,IAAK/rJ,EAAOgqJ,aAAa51J,SAAQ,SAAU4sI,GACrDA,GAAOmmB,GAAQhrJ,IAAI6kI,IACrBmmB,GAAQzqJ,OAAOskI,EAEnB,IACAwc,IAAAA,YAAoB,KAClBx9I,EAAOgqJ,YAAc,IAAI,GACxB,EAAE,IAEAhqJ,CACT,CAaA,MAAMgsJ,GAAgB,CAOpB52C,MAAO,CAAC,EAcRqU,QAAAA,CAASwiC,GAKP,IAAIC,EAkCJ,MArC4B,oBAAjBD,IACTA,EAAeA,KAGjBpN,GAAKoN,GAAc,CAACl5J,EAAOyB,KAGrBiH,KAAK25G,MAAM5gH,KAASzB,IACtBm5J,EAAUA,GAAW,CAAC,EACtBA,EAAQ13J,GAAO,CACbyG,KAAMQ,KAAK25G,MAAM5gH,GACjB23J,GAAIp5J,IAGR0I,KAAK25G,MAAM5gH,GAAOzB,CAAK,IAMrBm5J,GAAWnC,GAAUtuJ,OAYvBA,KAAKk7H,QAAQ,CACXu1B,UACAp5J,KAAM,iBAGHo5J,CACT,GAqBF,SAASE,GAASpsJ,EAAQqsJ,GAWxB,OAVAzxJ,OAAOmF,OAAOC,EAAQgsJ,IAItBhsJ,EAAOo1G,MAAQx6G,OAAOmF,OAAO,CAAC,EAAGC,EAAOo1G,MAAOi3C,GAGN,oBAA9BrsJ,EAAOssJ,oBAAqCvC,GAAU/pJ,IAC/DA,EAAOy2H,GAAG,eAAgBz2H,EAAOssJ,oBAE5BtsJ,CACT,CAgBA,MAAMvN,GAAc,SAAU4qF,GAC5B,MAAsB,kBAAXA,EACFA,EAEFA,EAAOr8E,QAAQ,KAAKmjG,GAAKA,EAAE1xG,eACpC,EAWM85J,GAAgB,SAAUlvE,GAC9B,MAAsB,kBAAXA,EACFA,EAEFA,EAAOr8E,QAAQ,KAAKmjG,GAAKA,EAAEnqG,eACpC,EAcMwyJ,GAAkB,SAAUC,EAAMC,GACtC,OAAOH,GAAcE,KAAUF,GAAcG,EAC/C,EAEA,IAAIC,GAAmB/xJ,OAAOqE,OAAO,CACnC4oH,UAAW,KACXp1H,YAAaA,GACbm6J,YAAaL,GACbC,gBAAiBA,KA2BnB,MAAMK,GAqBJ9xJ,WAAAA,CAAY8rJ,EAAQ9xJ,EAAS+3J,GAsB3B,IApBKjG,GAAUprJ,KAAKsxJ,KAClBtxJ,KAAKuxJ,QAAUnG,EAASprJ,KAExBA,KAAKuxJ,QAAUnG,EAEjBprJ,KAAKwxJ,aAAc,EAGnBxxJ,KAAKyxJ,iBAAmB,KAGxBzxJ,KAAK0xJ,SAAWlO,GAAQ,CAAC,EAAGxjJ,KAAK0xJ,UAGjCp4J,EAAU0G,KAAK0xJ,SAAWlO,GAAQxjJ,KAAK0xJ,SAAUp4J,GAGjD0G,KAAK2xJ,IAAMr4J,EAAQod,IAAMpd,EAAQoP,IAAMpP,EAAQoP,GAAGgO,IAG7C1W,KAAK2xJ,IAAK,CAEb,MAAMj7I,EAAK00I,GAAUA,EAAO10I,IAAM00I,EAAO10I,MAAQ,YACjD1W,KAAK2xJ,IAAM,GAAGj7I,eAAgBm1I,MAChC,CACA7rJ,KAAKquJ,MAAQ/0J,EAAQiG,MAAQ,KAGzBjG,EAAQoP,GACV1I,KAAKswJ,IAAMh3J,EAAQoP,IACW,IAArBpP,EAAQmtJ,WACjBzmJ,KAAKswJ,IAAMtwJ,KAAKymJ,YAEdntJ,EAAQ23H,WAAajxH,KAAKswJ,KAC5Bh3J,EAAQ23H,UAAUh6H,MAAM,KAAK0B,SAAQsX,GAAKjQ,KAAKmnJ,SAASl3I,KAK1D,CAAC,KAAM,MAAO,MAAO,MAAO,WAAWtX,SAAQiP,IAC7C5H,KAAK4H,QAAMtN,CAAS,KAIE,IAApBhB,EAAQ62J,UAEVA,GAAQnwJ,KAAM,CACZowJ,YAAapwJ,KAAKswJ,IAAM,MAAQ,OAElCtwJ,KAAK4xJ,qBAAuB5xJ,KAAK4xJ,qBAAqB7yJ,KAAKiB,MAC3DA,KAAKg7H,GAAGh7H,KAAKuxJ,QAAS,iBAAkBvxJ,KAAK4xJ,uBAE/CjB,GAAS3wJ,KAAMA,KAAKV,YAAYsxJ,cAChC5wJ,KAAK6xJ,UAAY,GACjB7xJ,KAAK8xJ,YAAc,CAAC,EACpB9xJ,KAAK+xJ,gBAAkB,CAAC,EACxB/xJ,KAAKgyJ,eAAiB,IAAIpxJ,IAC1BZ,KAAKiyJ,gBAAkB,IAAIrxJ,IAC3BZ,KAAKkyJ,QAAU,IAAItxJ,IACnBZ,KAAKmyJ,WAAa,IAAIjyJ,IACtBF,KAAKoyJ,0BAA2B,GAGH,IAAzB94J,EAAQ+4J,cACVryJ,KAAKqyJ,eAKPryJ,KAAKqxJ,MAAMA,IACyB,IAAhC/3J,EAAQg5J,qBACVtyJ,KAAKuyJ,qBAET,CAiFAh3B,OAAAA,GAAsB,IAAdjiI,EAAO2Q,UAAA5L,OAAA,QAAA/D,IAAA2P,UAAA,GAAAA,UAAA,GAAG,CAAC,EAEjB,IAAIjK,KAAKwxJ,YAAT,CAwBA,GArBIxxJ,KAAKwyJ,cACPxyJ,KAAKwyJ,YAAYn0J,OAAS,GAa5B2B,KAAKk7H,QAAQ,CACX7jI,KAAM,UACNokG,SAAS,IAEXz7F,KAAKwxJ,aAAc,EAGfxxJ,KAAK6xJ,UACP,IAAK,IAAI9zJ,EAAIiC,KAAK6xJ,UAAUxzJ,OAAS,EAAGN,GAAK,EAAGA,IAC1CiC,KAAK6xJ,UAAU9zJ,GAAGw9H,SACpBv7H,KAAK6xJ,UAAU9zJ,GAAGw9H,UAMxBv7H,KAAK6xJ,UAAY,KACjB7xJ,KAAK8xJ,YAAc,KACnB9xJ,KAAK+xJ,gBAAkB,KACvB/xJ,KAAKyxJ,iBAAmB,KACpBzxJ,KAAKswJ,MAEHtwJ,KAAKswJ,IAAI/mJ,aACPjQ,EAAQm5J,UACVzyJ,KAAKswJ,IAAI/mJ,WAAWwM,aAAazc,EAAQm5J,UAAWzyJ,KAAKswJ,KAEzDtwJ,KAAKswJ,IAAI/mJ,WAAW8I,YAAYrS,KAAKswJ,MAGzCtwJ,KAAKswJ,IAAM,MAIbtwJ,KAAKuxJ,QAAU,IAhDf,CAiDF,CAQAmB,UAAAA,GACE,OAAO9gB,QAAQ5xI,KAAKwxJ,YACtB,CAQApG,MAAAA,GACE,OAAOprJ,KAAKuxJ,OACd,CAaAj4J,OAAAA,CAAQwE,GACN,OAAKA,GAGLkC,KAAK0xJ,SAAWlO,GAAQxjJ,KAAK0xJ,SAAU5zJ,GAChCkC,KAAK0xJ,UAHH1xJ,KAAK0xJ,QAIhB,CAQAhpJ,EAAAA,GACE,OAAO1I,KAAKswJ,GACd,CAiBA7J,QAAAA,CAASn9I,EAASskI,EAAYz5H,GAC5B,OAAOsyI,GAASn9I,EAASskI,EAAYz5H,EACvC,CAwCAw+I,QAAAA,CAAS/wE,EAAQgxE,GAA+B,IAAvB9mE,EAAY7hF,UAAA5L,OAAA,QAAA/D,IAAA2P,UAAA,GAAAA,UAAA,GAAG23E,EACtC,MAAMjkF,EAAOqC,KAAKuxJ,QAAQ/uB,UAAYxiI,KAAKuxJ,QAAQ/uB,WAC7CqwB,EAAY7yJ,KAAKuxJ,QAAQsB,WAAa7yJ,KAAKuxJ,QAAQsB,YACnDrwB,EAAWqwB,GAAaA,EAAUl1J,GAClCm1J,EAAcn1J,GAAQA,EAAK1G,MAAM,KAAK,GACtC87J,EAAcF,GAAaA,EAAUC,GAC3C,IAAIE,EAAkBlnE,EAgBtB,OAfI02C,GAAYA,EAAS5gD,GACvBoxE,EAAkBxwB,EAAS5gD,GAClBmxE,GAAeA,EAAYnxE,KACpCoxE,EAAkBD,EAAYnxE,IAE5BgxE,IACFI,EAAkBA,EAAgBztJ,QAAQ,cAAc,SAAUq5E,EAAO/lF,GACvE,MAAMvB,EAAQs7J,EAAO/5J,EAAQ,GAC7B,IAAIo6J,EAAM37J,EAIV,MAHqB,qBAAVA,IACT27J,EAAMr0E,GAEDq0E,CACT,KAEKD,CACT,CAOApB,oBAAAA,GAAwB,CASxBsB,SAAAA,GACE,OAAOlzJ,KAAKmzJ,YAAcnzJ,KAAKswJ,GACjC,CAQA55I,EAAAA,GACE,OAAO1W,KAAK2xJ,GACd,CASApyJ,IAAAA,GACE,OAAOS,KAAKquJ,KACd,CAQAthE,QAAAA,GACE,OAAO/sF,KAAK6xJ,SACd,CAWAuB,YAAAA,CAAa18I,GACX,OAAO1W,KAAK8xJ,YAAYp7I,EAC1B,CAWA28I,QAAAA,CAAS9zJ,GACP,GAAKA,EAGL,OAAOS,KAAK+xJ,gBAAgBxyJ,EAC9B,CAgBA+zJ,aAAAA,GAAwB,QAAAC,EAAAtpJ,UAAA5L,OAAPm1J,EAAK,IAAAv6J,MAAAs6J,GAAAE,EAAA,EAAAA,EAAAF,EAAAE,IAALD,EAAKC,GAAAxpJ,UAAAwpJ,GAEpBD,EAAQA,EAAMt8J,QAAO,CAACwlI,EAAKx9H,IAAMw9H,EAAIh1B,OAAOxoG,IAAI,IAChD,IAAIw0J,EAAe1zJ,KACnB,IAAK,IAAIjC,EAAI,EAAGA,EAAIy1J,EAAMn1J,OAAQN,IAEhC,GADA21J,EAAeA,EAAaL,SAASG,EAAMz1J,KACtC21J,IAAiBA,EAAaL,SACjC,OAGJ,OAAOK,CACT,CAcAC,OAAAA,CAAQC,GAA0B,IAAhBlrJ,EAAEuB,UAAA5L,OAAA,QAAA/D,IAAA2P,UAAA,GAAAA,UAAA,GAAGjK,KAAK0I,KAM1B,IAAK1I,KAAKuxJ,QAAQG,SAASmC,qBACzB,OAEF,MAAMC,EAAW,6BAIXC,EAAgBtN,GAAS,OAAQ,CACrCx1B,UAAW,qCACV,CACD,cAAe,SAEX+iC,EAAQ9S,IAAAA,gBAA2B4S,EAAU,OACnDE,EAAMz7I,eAAe,KAAM,UAAW,eACtC,MAAM07I,EAAQ/S,IAAAA,gBAA2B4S,EAAU,OAYnD,OAXAE,EAAMptJ,YAAYqtJ,GAClBA,EAAM17I,eAAe,KAAM,OAAQ,aAAaq7I,KAChDG,EAAcntJ,YAAYotJ,GAGtBh0J,KAAKk0J,WACPxrJ,EAAGqN,aAAag+I,EAAerrJ,EAAGyrJ,cAAc,0BAEhDzrJ,EAAG9B,YAAYmtJ,GAEjB/zJ,KAAKk0J,YAAa,EACXH,CACT,CAoBAK,QAAAA,CAASxjJ,GAAoD,IACvDyjJ,EACApvE,EAFU3rF,EAAO2Q,UAAA5L,OAAA,QAAA/D,IAAA2P,UAAA,GAAAA,UAAA,GAAG,CAAC,EAAGpR,EAAKoR,UAAA5L,OAAA,QAAA/D,IAAA2P,UAAA,GAAAA,UAAA,GAAGjK,KAAK6xJ,UAAUxzJ,OAKnD,GAAqB,kBAAVuS,EAAoB,CAC7Bq0E,EAAgB6rE,GAAclgJ,GAC9B,MAAM0jJ,EAAqBh7J,EAAQi7J,gBAAkBtvE,EAGrD3rF,EAAQiG,KAAO0lF,EAIf,MAAMuvE,EAAiBpD,GAAYqD,aAAaH,GAChD,IAAKE,EACH,MAAM,IAAI/6J,MAAM,aAAa66J,oBAO/B,GAA8B,oBAAnBE,EACT,OAAO,KAETH,EAAY,IAAIG,EAAex0J,KAAKuxJ,SAAWvxJ,KAAM1G,EAGvD,MACE+6J,EAAYzjJ,EAqBd,GAnBIyjJ,EAAU5C,kBACZ4C,EAAU5C,iBAAiBp/I,YAAYgiJ,GAEzCr0J,KAAK6xJ,UAAUzqC,OAAOvuH,EAAO,EAAGw7J,GAChCA,EAAU5C,iBAAmBzxJ,KACD,oBAAjBq0J,EAAU39I,KACnB1W,KAAK8xJ,YAAYuC,EAAU39I,MAAQ29I,GAKrCpvE,EAAgBA,GAAiBovE,EAAU90J,MAAQuxJ,GAAcuD,EAAU90J,QACvE0lF,IACFjlF,KAAK+xJ,gBAAgB9sE,GAAiBovE,EACtCr0J,KAAK+xJ,gBAAgB/6J,GAAYiuF,IAAkBovE,GAKzB,oBAAjBA,EAAU3rJ,IAAqB2rJ,EAAU3rJ,KAAM,CAExD,IAAIgL,EAAU,KACV1T,KAAK6xJ,UAAUh5J,EAAQ,KAErBmH,KAAK6xJ,UAAUh5J,EAAQ,GAAGy3J,IAC5B58I,EAAU1T,KAAK6xJ,UAAUh5J,EAAQ,GAAGy3J,IAC3BlK,GAAKpmJ,KAAK6xJ,UAAUh5J,EAAQ,MACrC6a,EAAU1T,KAAK6xJ,UAAUh5J,EAAQ,KAGrCmH,KAAKkzJ,YAAYr9I,aAAaw+I,EAAU3rJ,KAAMgL,EAChD,CAGA,OAAO2gJ,CACT,CASAhiJ,WAAAA,CAAYgiJ,GAIV,GAHyB,kBAAdA,IACTA,EAAYr0J,KAAKqzJ,SAASgB,KAEvBA,IAAcr0J,KAAK6xJ,UACtB,OAEF,IAAI6C,GAAa,EACjB,IAAK,IAAI32J,EAAIiC,KAAK6xJ,UAAUxzJ,OAAS,EAAGN,GAAK,EAAGA,IAC9C,GAAIiC,KAAK6xJ,UAAU9zJ,KAAOs2J,EAAW,CACnCK,GAAa,EACb10J,KAAK6xJ,UAAUzqC,OAAOrpH,EAAG,GACzB,KACF,CAEF,IAAK22J,EACH,OAEFL,EAAU5C,iBAAmB,KAC7BzxJ,KAAK8xJ,YAAYuC,EAAU39I,MAAQ,KACnC1W,KAAK+xJ,gBAAgBjB,GAAcuD,EAAU90J,SAAW,KACxDS,KAAK+xJ,gBAAgB/6J,GAAYq9J,EAAU90J,SAAW,KACtD,MAAMo1J,EAASN,EAAU3rJ,KACrBisJ,GAAUA,EAAOprJ,aAAevJ,KAAKkzJ,aACvClzJ,KAAKkzJ,YAAY7gJ,YAAYgiJ,EAAU3rJ,KAE3C,CAKA2pJ,YAAAA,GACE,MAAMtlE,EAAW/sF,KAAK0xJ,SAAS3kE,SAC/B,GAAIA,EAAU,CAEZ,MAAM6nE,EAAgB50J,KAAK0xJ,SACrBmD,EAAYjkJ,IAChB,MAAMrR,EAAOqR,EAAMrR,KACnB,IAAI45H,EAAOvoH,EAAMuoH,KAWjB,QAN4B7+H,IAAxBs6J,EAAcr1J,KAChB45H,EAAOy7B,EAAcr1J,KAKV,IAAT45H,EACF,QAKW,IAATA,IACFA,EAAO,CAAC,GAMVA,EAAK27B,cAAgB90J,KAAK0xJ,SAASoD,cAMnC,MAAMrkJ,EAAWzQ,KAAKo0J,SAAS70J,EAAM45H,GACjC1oH,IACFzQ,KAAKT,GAAQkR,EACf,EAIF,IAAIskJ,EACJ,MAAMC,EAAO5D,GAAYqD,aAAa,QAEpCM,EADE97J,MAAMC,QAAQ6zF,GACEA,EAEA5tF,OAAO0M,KAAKkhF,GAEhCgoE,EAGCrtD,OAAOvoG,OAAO0M,KAAK7L,KAAK0xJ,UAAU/lJ,QAAO,SAAUiF,GAClD,OAAQmkJ,EAAgB7nC,MAAK,SAAU+nC,GACrC,MAAsB,kBAAXA,EACFrkJ,IAAUqkJ,EAEZrkJ,IAAUqkJ,EAAO11J,IAC1B,GACF,KAAI8W,KAAIzF,IACN,IAAIrR,EACA45H,EAQJ,MAPqB,kBAAVvoH,GACTrR,EAAOqR,EACPuoH,EAAOpsC,EAASxtF,IAASS,KAAK0xJ,SAASnyJ,IAAS,CAAC,IAEjDA,EAAOqR,EAAMrR,KACb45H,EAAOvoH,GAEF,CACLrR,OACA45H,OACD,IACAxtH,QAAOiF,IAIR,MAAMX,EAAImhJ,GAAYqD,aAAa7jJ,EAAMuoH,KAAKo7B,gBAAkBzD,GAAclgJ,EAAMrR,OACpF,OAAO0Q,IAAM+kJ,EAAKE,OAAOjlJ,EAAE,IAC1BtX,QAAQk8J,EACb,CACF,CAUAM,aAAAA,GAGE,MAAO,EACT,CAUA9D,KAAAA,CAAMzpJ,GAAkB,IAAdhL,EAAIqN,UAAA5L,OAAA,QAAA/D,IAAA2P,UAAA,IAAAA,UAAA,GACZ,GAAKrC,EAGL,OAAK5H,KAAKo1J,cAKNx4J,EACFgL,EAAG/I,KAAKmB,MAGRA,KAAKlE,WAAW8L,EAAI,KARpB5H,KAAKwyJ,YAAcxyJ,KAAKwyJ,aAAe,QACvCxyJ,KAAKwyJ,YAAYr5J,KAAKyO,GAS1B,CAOAytJ,YAAAA,GACEr1J,KAAKo1J,UAAW,EAGhBp1J,KAAKlE,YAAW,WACd,MAAMw5J,EAAat1J,KAAKwyJ,YAGxBxyJ,KAAKwyJ,YAAc,GACf8C,GAAcA,EAAWj3J,OAAS,GACpCi3J,EAAW38J,SAAQ,SAAUiP,GAC3BA,EAAG/I,KAAKmB,KACV,GAAGA,MAULA,KAAKk7H,QAAQ,QACf,GAAG,EACL,CAoBA3P,CAAAA,CAAEg7B,EAAUz1C,GACV,OAAOya,GAAEg7B,EAAUz1C,GAAW9wG,KAAKkzJ,YACrC,CAoBAnJ,EAAAA,CAAGxD,EAAUz1C,GACX,OAAOi5C,GAAGxD,EAAUz1C,GAAW9wG,KAAKkzJ,YACtC,CAYAnM,QAAAA,CAASC,GACP,OAAOD,GAAS/mJ,KAAKswJ,IAAKtJ,EAC5B,CAQAG,QAAAA,GAA0B,QAAAoO,EAAAtrJ,UAAA5L,OAAdgpJ,EAAY,IAAApuJ,MAAAs8J,GAAAC,EAAA,EAAAA,EAAAD,EAAAC,IAAZnO,EAAYmO,GAAAvrJ,UAAAurJ,GACtBrO,GAASnnJ,KAAKswJ,OAAQjJ,EACxB,CAQAE,WAAAA,GAAgC,QAAAkO,EAAAxrJ,UAAA5L,OAAjBopJ,EAAe,IAAAxuJ,MAAAw8J,GAAAC,EAAA,EAAAA,EAAAD,EAAAC,IAAfjO,EAAeiO,GAAAzrJ,UAAAyrJ,GAC5BnO,GAAYvnJ,KAAKswJ,OAAQ7I,EAC3B,CAaAE,WAAAA,CAAYC,EAAejjJ,GACzBgjJ,GAAY3nJ,KAAKswJ,IAAK1I,EAAejjJ,EACvC,CAMAgxJ,IAAAA,GACE31J,KAAKunJ,YAAY,aACnB,CAMAz0B,IAAAA,GACE9yH,KAAKmnJ,SAAS,aAChB,CAQAyO,WAAAA,GACE51J,KAAKmnJ,SAAS,mBAChB,CAQA0O,aAAAA,GACE71J,KAAKunJ,YAAY,mBACnB,CAiBA3wI,YAAAA,CAAakuH,GACX,OAAOluH,GAAa5W,KAAKswJ,IAAKxrB,EAChC,CAaAjtH,YAAAA,CAAaitH,EAAWxtI,GACtBugB,GAAa7X,KAAKswJ,IAAKxrB,EAAWxtI,EACpC,CAUAwgB,eAAAA,CAAgBgtH,GACdhtH,GAAgB9X,KAAKswJ,IAAKxrB,EAC5B,CAeAllC,KAAAA,CAAM52C,EAAK8sG,GACT,OAAO91J,KAAK+1J,UAAU,QAAS/sG,EAAK8sG,EACtC,CAeAj2D,MAAAA,CAAO72C,EAAK8sG,GACV,OAAO91J,KAAK+1J,UAAU,SAAU/sG,EAAK8sG,EACvC,CAWAE,UAAAA,CAAWp2D,EAAOC,GAEhB7/F,KAAK4/F,MAAMA,GAAO,GAClB5/F,KAAK6/F,OAAOA,EACd,CA8BAk2D,SAAAA,CAAUE,EAAejtG,EAAK8sG,GAC5B,QAAYx7J,IAAR0uD,EAyBF,OAvBY,OAARA,GAAgBA,IAAQA,IAC1BA,EAAM,IAIyB,KAA5B,GAAKA,GAAKlwD,QAAQ,OAA6C,KAA7B,GAAKkwD,GAAKlwD,QAAQ,MACvDkH,KAAKswJ,IAAI3/D,MAAMslE,GAAiBjtG,EAEhChpD,KAAKswJ,IAAI3/D,MAAMslE,GADE,SAARjtG,EACuB,GAEAA,EAAM,UAInC8sG,GAOH91J,KAAKk7H,QAAQ,oBAOjB,IAAKl7H,KAAKswJ,IACR,OAAO,EAIT,MAAM/qB,EAAMvlI,KAAKswJ,IAAI3/D,MAAMslE,GACrBC,EAAU3wB,EAAIzsI,QAAQ,MAC5B,OAAiB,IAAbo9J,EAEK51E,SAASilD,EAAIvsI,MAAM,EAAGk9J,GAAU,IAMlC51E,SAAStgF,KAAKswJ,IAAI,SAAWQ,GAAcmF,IAAiB,GACrE,CAcAE,gBAAAA,CAAiBF,GACf,IAAIG,EAAwB,EAC5B,GAAsB,UAAlBH,GAA+C,WAAlBA,EAC/B,MAAM,IAAIx8J,MAAM,uDAUlB,GARA28J,EAAwB/N,GAAcroJ,KAAKswJ,IAAK2F,GAGhDG,EAAwBp5B,WAAWo5B,GAKL,IAA1BA,GAA+BjuE,MAAMiuE,GAAwB,CAC/D,MAAM/L,EAAO,SAASyG,GAAcmF,KACpCG,EAAwBp2J,KAAKswJ,IAAIjG,EACnC,CACA,OAAO+L,CACT,CAwBAC,iBAAAA,GACE,MAAO,CACLz2D,MAAO5/F,KAAKm2J,iBAAiB,SAC7Bt2D,OAAQ7/F,KAAKm2J,iBAAiB,UAElC,CAUAG,YAAAA,GACE,OAAOt2J,KAAKm2J,iBAAiB,QAC/B,CAUAI,aAAAA,GACE,OAAOv2J,KAAKm2J,iBAAiB,SAC/B,CAYAK,YAAAA,GACE,MAAMz9F,EAAO/4D,KAAKswJ,IAAI9hC,wBAyBtB,MAAO,CACLioC,mBAvByB,CACzBjuD,EAAGzvC,EAAKyvC,EACRqH,EAAG92C,EAAK82C,EACRjQ,MAAO7mC,EAAK6mC,MACZC,OAAQ9mC,EAAK8mC,OACb9yB,IAAKhU,EAAKgU,IACV2pF,MAAO39F,EAAK29F,MACZp0I,OAAQy2C,EAAKz2C,OACbujF,KAAM9sC,EAAK8sC,MAgBX8wD,OAZa,CACbnuD,EAAGzvC,EAAK8sC,KAAO9sC,EAAK6mC,MAAQ,EAC5BiQ,EAAG92C,EAAKgU,IAAMhU,EAAK8mC,OAAS,EAC5BD,MAAO,EACPC,OAAQ,EACR9yB,IAAKhU,EAAKgU,IAAMhU,EAAK8mC,OAAS,EAC9B62D,MAAO39F,EAAK8sC,KAAO9sC,EAAK6mC,MAAQ,EAChCt9E,OAAQy2C,EAAKgU,IAAMhU,EAAK8mC,OAAS,EACjCgG,KAAM9sC,EAAK8sC,KAAO9sC,EAAK6mC,MAAQ,GAMnC,CAKAoG,KAAAA,GACEhmG,KAAKswJ,IAAItqD,OACX,CAKAorB,IAAAA,GACEpxH,KAAKswJ,IAAIl/B,MACX,CASAwlC,aAAAA,CAAcr0D,GACRviG,KAAKuxJ,UAGW,QAAdhvD,EAAMxpG,KAAmBiH,KAAKuxJ,QAAQG,SAASoD,cAAc+B,mBAAqB72J,KAAKuxJ,QAAQG,SAASoD,cAAc+B,kBAAkBC,SAC1Iv0D,EAAM1I,kBAER75F,KAAKuxJ,QAAQqF,cAAcr0D,GAE/B,CAWAw0D,cAAAA,CAAex0D,GACbviG,KAAK42J,cAAcr0D,EACrB,CAeAy0D,aAAAA,GAEE,IAAIC,EAAa,EACbC,EAAa,KASjB,IAAIC,EACJn3J,KAAKg7H,GAAG,cAAc,SAAUz4B,GAED,IAAzBA,EAAMjC,QAAQjiG,SAEhB64J,EAAa,CACX16D,MAAO+F,EAAMjC,QAAQ,GAAG9D,MACxBC,MAAO8F,EAAMjC,QAAQ,GAAG7D,OAG1Bw6D,EAAalV,IAAAA,YAAqBlmD,MAElCs7D,GAAa,EAEjB,IACAn3J,KAAKg7H,GAAG,aAAa,SAAUz4B,GAE7B,GAAIA,EAAMjC,QAAQjiG,OAAS,EACzB84J,GAAa,OACR,GAAID,EAAY,CAGrB,MAAME,EAAQ70D,EAAMjC,QAAQ,GAAG9D,MAAQ06D,EAAW16D,MAC5C66D,EAAQ90D,EAAMjC,QAAQ,GAAG7D,MAAQy6D,EAAWz6D,MAC5Bn5F,KAAKg0J,KAAKF,EAAQA,EAAQC,EAAQA,GA5B/B,KA8BvBF,GAAa,EAEjB,CACF,IACA,MAAMI,EAAQ,WACZJ,GAAa,CACf,EAGAn3J,KAAKg7H,GAAG,aAAcu8B,GACtBv3J,KAAKg7H,GAAG,cAAeu8B,GAIvBv3J,KAAKg7H,GAAG,YAAY,SAAUz4B,GAG5B,GAFA20D,EAAa,MAEM,IAAfC,EAAqB,CAELpV,IAAAA,YAAqBlmD,MAAQo7D,EA9CxB,MAmDrB10D,EAAMvH,iBAONh7F,KAAKk7H,QAAQ,OAKjB,CACF,GACF,CAyBAq3B,mBAAAA,GAEE,IAAKvyJ,KAAKorJ,WAAaprJ,KAAKorJ,SAASoM,mBACnC,OAIF,MAAMtzB,EAASmpB,GAAMrtJ,KAAKorJ,SAAUprJ,KAAKorJ,SAASoM,oBAClD,IAAIC,EACJz3J,KAAKg7H,GAAG,cAAc,WACpBkJ,IAIAlkI,KAAK03J,cAAcD,GAEnBA,EAAez3J,KAAK23J,YAAYzzB,EAAQ,IAC1C,IACA,MAAM0zB,EAAW,SAAUr1D,GACzB2hC,IAEAlkI,KAAK03J,cAAcD,EACrB,EACAz3J,KAAKg7H,GAAG,YAAakJ,GACrBlkI,KAAKg7H,GAAG,WAAY48B,GACpB53J,KAAKg7H,GAAG,cAAe48B,EACzB,CAmCA97J,UAAAA,CAAW8L,EAAI3N,GAGb,IAAI49J,EAUJ,OATAjwJ,EAAKylJ,GAAMrtJ,KAAM4H,GACjB5H,KAAK83J,wBACLD,EAAY9V,IAAAA,YAAoB,KAC1B/hJ,KAAKgyJ,eAAetxJ,IAAIm3J,IAC1B73J,KAAKgyJ,eAAe/wJ,OAAO42J,GAE7BjwJ,GAAI,GACH3N,GACH+F,KAAKgyJ,eAAejxJ,IAAI82J,GACjBA,CACT,CAiBAz8J,YAAAA,CAAay8J,GAKX,OAJI73J,KAAKgyJ,eAAetxJ,IAAIm3J,KAC1B73J,KAAKgyJ,eAAe/wJ,OAAO42J,GAC3B9V,IAAAA,aAAsB8V,IAEjBA,CACT,CAsBAF,WAAAA,CAAY/vJ,EAAImwJ,GACdnwJ,EAAKylJ,GAAMrtJ,KAAM4H,GACjB5H,KAAK83J,wBACL,MAAME,EAAajW,IAAAA,YAAqBn6I,EAAImwJ,GAE5C,OADA/3J,KAAKiyJ,gBAAgBlxJ,IAAIi3J,GAClBA,CACT,CAiBAN,aAAAA,CAAcM,GAKZ,OAJIh4J,KAAKiyJ,gBAAgBvxJ,IAAIs3J,KAC3Bh4J,KAAKiyJ,gBAAgBhxJ,OAAO+2J,GAC5BjW,IAAAA,cAAuBiW,IAElBA,CACT,CA2BAC,qBAAAA,CAAsBrwJ,GAKpB,IAAI8O,EASJ,OAbA1W,KAAK83J,wBAKLlwJ,EAAKylJ,GAAMrtJ,KAAM4H,GACjB8O,EAAKqrI,IAAAA,uBAA+B,KAC9B/hJ,KAAKkyJ,QAAQxxJ,IAAIgW,IACnB1W,KAAKkyJ,QAAQjxJ,OAAOyV,GAEtB9O,GAAI,IAEN5H,KAAKkyJ,QAAQnxJ,IAAI2V,GACVA,CACT,CAcAwhJ,0BAAAA,CAA2B34J,EAAMqI,GAC3B5H,KAAKmyJ,WAAWzxJ,IAAInB,IACtBS,KAAKm4J,0BAA0B54J,GAEjCS,KAAK83J,wBACLlwJ,EAAKylJ,GAAMrtJ,KAAM4H,GACjB,MAAM8O,EAAK1W,KAAKi4J,uBAAsB,KACpCrwJ,IACI5H,KAAKmyJ,WAAWzxJ,IAAInB,IACtBS,KAAKmyJ,WAAWlxJ,OAAO1B,EACzB,IAGF,OADAS,KAAKmyJ,WAAWxxJ,IAAIpB,EAAMmX,GACnBnX,CACT,CAQA44J,yBAAAA,CAA0B54J,GACnBS,KAAKmyJ,WAAWzxJ,IAAInB,KAGzBS,KAAKo4J,qBAAqBp4J,KAAKmyJ,WAAWrxJ,IAAIvB,IAC9CS,KAAKmyJ,WAAWlxJ,OAAO1B,GACzB,CAkBA64J,oBAAAA,CAAqB1hJ,GAKnB,OAJI1W,KAAKkyJ,QAAQxxJ,IAAIgW,KACnB1W,KAAKkyJ,QAAQjxJ,OAAOyV,GACpBqrI,IAAAA,qBAA8BrrI,IAEzBA,CACT,CAYAohJ,qBAAAA,GACM93J,KAAKoyJ,2BAGTpyJ,KAAKoyJ,0BAA2B,EAChCpyJ,KAAKmtJ,IAAI,WAAW,KAClB,CAAC,CAAC,aAAc,6BAA8B,CAAC,UAAW,wBAAyB,CAAC,iBAAkB,gBAAiB,CAAC,kBAAmB,kBAAkBx0J,SAAQgK,IAA0B,IAAxB01J,EAAQC,GAAW31J,EAIxL3C,KAAKq4J,GAAQ1/J,SAAQ,CAAC4sI,EAAKxsI,IAAQiH,KAAKs4J,GAAYv/J,IAAK,IAE3DiH,KAAKoyJ,0BAA2B,CAAK,IAEzC,CAWAmG,aAAAA,GACE,OAAO3mB,QAAQ5xI,KAAKswJ,IAAI1jE,SAC1B,CAUA4rE,mBAAAA,GACE,OAAOx4J,KAAKswJ,IAAImI,QAAUz4J,KAAKswJ,IAAIvhJ,cAAcnU,gBAAgB69J,KACnE,CASAC,cAAAA,CAAehwJ,GAEb,OADgBA,GAAM1I,KAAKswJ,KACZ19B,UAAY,KAAO5yH,KAAKu4J,iBAAmBv4J,KAAKw4J,sBACjE,CASAG,yBAAAA,CAA0BjwJ,GAQxB,SAASkwJ,EAAuBntJ,GAC9B,MAAMotJ,EAAe9W,IAAAA,iBAA0Bt2I,EAAS,MAClDqtJ,EAAiBD,EAAa5O,iBAAiB,cAGrD,MAAuB,SAFH4O,EAAa5O,iBAAiB,aAC3B,CAAC,SAAU,YACe7/D,SAAS0uE,EAC5D,CAgFA,OALKpwJ,IACHA,EAAK1I,KAAK0I,SAvCZ,SAAmB+C,GACjB,GAAIA,EAAQ+8I,YAAc/8I,EAAQ8iH,aAAe9iH,EAAQ+iH,wBAAwB3uB,OAASp0F,EAAQ+iH,wBAAwB5uB,QAAU,EAClI,OAAO,EAMT,MAAMm5D,EAAgB,CACpBvwD,EAAG/8F,EAAQ+iH,wBAAwB3oB,KAAOp6F,EAAQ+8I,YAAc,EAChE34C,EAAGpkG,EAAQ+iH,wBAAwBzhD,IAAMthE,EAAQ8iH,aAAe,GAElE,GAAIwqC,EAAcvwD,EAAI,EACpB,OAAO,EAET,GAAIuwD,EAAcvwD,GAAK04C,IAAAA,gBAA2B8X,aAAejX,IAAAA,YAC/D,OAAO,EAET,GAAIgX,EAAclpD,EAAI,EACpB,OAAO,EAET,GAAIkpD,EAAclpD,GAAKqxC,IAAAA,gBAA2B+X,cAAgBlX,IAAAA,aAChE,OAAO,EAET,IAAImX,EAAiBhY,IAAAA,iBAA4B6X,EAAcvwD,EAAGuwD,EAAclpD,GAChF,KAAOqpD,GAAgB,CACrB,GAAIA,IAAmBztJ,EACrB,OAAO,EAET,IAAIytJ,EAAe3vJ,WAGjB,OAAO,EAFP2vJ,EAAiBA,EAAe3vJ,UAIpC,CACF,CAQI4vJ,CAAUzwJ,KAjEW+C,EAiEY/C,EAhE9BkwJ,EAAuBntJ,EAAQu9I,gBAG/B4P,EAAuBntJ,IAAsC,MAA1BA,EAAQklF,MAAMjB,SAAiE,QAA9CqyD,IAAAA,iBAA0Bt2I,GAASo0F,QAAiE,QAA7CkiD,IAAAA,iBAA0Bt2I,GAASm0F,UA6DvHl3F,EAAGsgJ,eAAiBtgJ,EAAGkqH,UAAY,IAjEjF,IAAyBnnH,CAqE3B,CAqBA,wBAAO2tJ,CAAkB75J,EAAM85J,GAC7B,GAAoB,kBAAT95J,IAAsBA,EAC/B,MAAM,IAAI9F,MAAM,4BAA4B8F,mCAE9C,MAAMy1J,EAAO5D,GAAYqD,aAAa,QAGhCS,EAASF,GAAQA,EAAKE,OAAOmE,GAC7BC,EAASlI,KAAgBiI,GAAuBjI,GAAYhyJ,UAAUm6J,cAAcF,EAAoBj6J,WAC9G,GAAI81J,IAAWoE,EAAQ,CACrB,IAAIE,EAMJ,MAJEA,EADEtE,EACO,qDAEA,+BAEL,IAAIz7J,MAAM,uBAAuB8F,OAAUi6J,KACnD,CACAj6J,EAAOuxJ,GAAcvxJ,GAChB6xJ,GAAYqI,cACfrI,GAAYqI,YAAc,CAAC,GAE7B,MAAMC,EAAStI,GAAYqD,aAAa,UACxC,GAAa,WAATl1J,GAAqBm6J,GAAUA,EAAOC,QAAS,CACjD,MAAMA,EAAUD,EAAOC,QACjBC,EAAcz6J,OAAO0M,KAAK8tJ,GAMhC,GAAIA,GAAWC,EAAYv7J,OAAS,GAAKu7J,EAAYvjJ,KAAIwjJ,GAASF,EAAQE,KAAQziJ,MAAMw6H,SACtF,MAAM,IAAIn4I,MAAM,mEAEpB,CAGA,OAFA23J,GAAYqI,YAAYl6J,GAAQ85J,EAChCjI,GAAYqI,YAAYziK,GAAYuI,IAAS85J,EACtCA,CACT,CAWA,mBAAO5E,CAAal1J,GAClB,GAAKA,GAAS6xJ,GAAYqI,YAG1B,OAAOrI,GAAYqI,YAAYl6J,EACjC,EAuFF,SAASu6J,GAASpL,EAAQqL,EAAYlvB,EAAQmvB,GAE5C,OAhCF,SAAoBtL,EAAQ71J,EAAOohK,GACjC,GAAqB,kBAAVphK,GAAsBA,EAAQ,GAAKA,EAAQohK,EACpD,MAAM,IAAIxgK,MAAM,sBAAsBi1J,2CAAgD71J,yCAA6CohK,MAEvI,CA2BEC,CAAWxL,EAAQsL,EAAYnvB,EAAOxsI,OAAS,GACxCwsI,EAAOmvB,GAAYD,EAC5B,CAWA,SAASI,GAAoBtvB,GAC3B,IAAIuvB,EAqBJ,OAnBEA,OADa9/J,IAAXuwI,GAA0C,IAAlBA,EAAOxsI,OACjB,CACdA,OAAQ,EACRgI,KAAAA,GACE,MAAM,IAAI5M,MAAM,kCAClB,EACAimF,GAAAA,GACE,MAAM,IAAIjmF,MAAM,kCAClB,GAGc,CACd4E,OAAQwsI,EAAOxsI,OACfgI,MAAOyzJ,GAAS/6J,KAAK,KAAM,QAAS,EAAG8rI,GACvCnrD,IAAKo6E,GAAS/6J,KAAK,KAAM,MAAO,EAAG8rI,IAGnCkX,IAAAA,QAAmBA,IAAAA,OAAgB3jJ,WACrCg8J,EAAcrY,IAAAA,OAAgB3jJ,UAAY,KAAOysI,GAAU,IAAI9d,UAE1DqtC,CACT,CAgBA,SAASC,GAAmBh0J,EAAOq5E,GACjC,OAAIzmF,MAAMC,QAAQmN,GACT8zJ,GAAoB9zJ,QACR/L,IAAV+L,QAA+B/L,IAARolF,EACzBy6E,KAEFA,GAAoB,CAAC,CAAC9zJ,EAAOq5E,IACtC,CAjJA0xE,GAAYgI,kBAAkB,YAAahI,IAkK3C,MAAMkJ,GAAwB,SAAUx2E,EAASy2E,GAC/Cz2E,EAAUA,EAAU,EAAI,EAAIA,EAC5B,IAAItF,EAAIl7E,KAAK80H,MAAMt0C,EAAU,IACzBrD,EAAIn9E,KAAK80H,MAAMt0C,EAAU,GAAK,IAC9BoG,EAAI5mF,KAAK80H,MAAMt0C,EAAU,MAC7B,MAAM02E,EAAKl3J,KAAK80H,MAAMmiC,EAAQ,GAAK,IAC7BtpD,EAAK3tG,KAAK80H,MAAMmiC,EAAQ,MAkB9B,OAfIpyE,MAAMrE,IAAYA,IAAY++B,OAGhC34B,EAAIzJ,EAAIjC,EAAI,KAId0L,EAAIA,EAAI,GAAK+mB,EAAK,EAAI/mB,EAAI,IAAM,GAIhCzJ,IAAMyJ,GAAKswE,GAAM,KAAO/5E,EAAI,GAAK,IAAMA,EAAIA,GAAK,IAGhDjC,EAAIA,EAAI,GAAK,IAAMA,EAAIA,EAChB0L,EAAIzJ,EAAIjC,CACjB,EAGA,IAAIzzE,GAAiBuvJ,GAUrB,SAASG,GAAcC,GACrB3vJ,GAAiB2vJ,CACnB,CAKA,SAASC,KACP5vJ,GAAiBuvJ,EACnB,CAoBA,SAASM,GAAW92E,GAClB,OAAO/4E,GAAe+4E,EADU75E,UAAA5L,OAAA,QAAA/D,IAAA2P,UAAA,GAAAA,UAAA,GAAG65E,EAErC,CAEA,IAAIwwD,GAAoBn1I,OAAOqE,OAAO,CACpC4oH,UAAW,KACXyuC,iBAAkBR,GAClBS,gBAAiBT,GACjBI,cAAeA,GACfE,gBAAiBA,GACjBC,WAAYA,KAsBd,SAASG,GAAgBC,EAAUj+B,GACjC,IACI12H,EACAq5E,EAFAu7E,EAAmB,EAGvB,IAAKl+B,EACH,OAAO,EAEJi+B,GAAaA,EAAS38J,SACzB28J,EAAWX,GAAmB,EAAG,IAEnC,IAAK,IAAIt8J,EAAI,EAAGA,EAAIi9J,EAAS38J,OAAQN,IACnCsI,EAAQ20J,EAAS30J,MAAMtI,GACvB2hF,EAAMs7E,EAASt7E,IAAI3hF,GAGf2hF,EAAMq9C,IACRr9C,EAAMq9C,GAERk+B,GAAoBv7E,EAAMr5E,EAE5B,OAAO40J,EAAmBl+B,CAC5B,CAuBA,SAASm+B,GAAW5jK,GAGlB,GAAIA,aAAiB4jK,GACnB,OAAO5jK,EAEY,kBAAVA,EACT0I,KAAKrC,KAAOrG,EACc,kBAAVA,EAEhB0I,KAAKqO,QAAU/W,EACN2yI,GAAS3yI,KAGQ,kBAAfA,EAAMqG,OACfqC,KAAKrC,KAAOrG,EAAMqG,MAEpBwB,OAAOmF,OAAOtE,KAAM1I,IAEjB0I,KAAKqO,UACRrO,KAAKqO,QAAU6sJ,GAAWC,gBAAgBn7J,KAAKrC,OAAS,GAE5D,CA6LA,SAASy9J,GAAU9jK,GACjB,YAAiBgD,IAAVhD,GAAiC,OAAVA,GAAwC,oBAAfA,EAAMmzG,IAC/D,CAWA,SAAS4wD,GAAe/jK,GAClB8jK,GAAU9jK,IACZA,EAAMmzG,KAAK,MAAM9yG,OAErB,CAvMAujK,GAAW97J,UAAUzB,KAAO,EAQ5Bu9J,GAAW97J,UAAUiP,QAAU,GAW/B6sJ,GAAW97J,UAAUlD,OAAS,KAe9Bg/J,GAAW97J,UAAUrF,SAAW,KAehCmhK,GAAWI,WAAa,CAAC,mBAAoB,oBAAqB,oBAAqB,mBAAoB,8BAA+B,uBAQ1IJ,GAAWC,gBAAkB,CAC3B,EAAG,iCACH,EAAG,8DACH,EAAG,8HACH,EAAG,qHACH,EAAG,qEAULD,GAAWK,iBAAmB,EAS9BL,GAAW97J,UAAUm8J,iBAAmB,EASxCL,GAAWM,kBAAoB,EAS/BN,GAAW97J,UAAUo8J,kBAAoB,EASzCN,GAAWO,kBAAoB,EAS/BP,GAAW97J,UAAUq8J,kBAAoB,EASzCP,GAAWQ,iBAAmB,EAS9BR,GAAW97J,UAAUs8J,iBAAmB,EASxCR,GAAWS,4BAA8B,EASzCT,GAAW97J,UAAUu8J,4BAA8B,EASnDT,GAAWU,oBAAsB,EASjCV,GAAW97J,UAAUw8J,oBAAsB,EAkD3C,MAAMC,GAAe,SAAUpqE,GAgB7B,MAfY,CAAC,OAAQ,QAAS,WAAY,KAAM,kCAAmC,OAAQ,OAAOv6F,QAAO,CAACwlI,EAAK7oE,EAAM91D,KAC/G0zF,EAAM59B,KACR6oE,EAAI7oE,GAAQ49B,EAAM59B,IAEb6oE,IACN,CACDo/B,KAAMrqE,EAAMqqE,MAAQ7iK,MAAMmG,UAAUiX,IAAIxX,KAAK4yF,EAAMqqE,MAAM,SAAUC,GACjE,MAAO,CACLzkC,UAAWykC,EAAIzkC,UACf0kC,QAASD,EAAIC,QACbljJ,KAAMijJ,EAAIjjJ,KACVpC,GAAIqlJ,EAAIrlJ,GAEZ,KAGJ,EAiDA,IAAIulJ,GAnCqB,SAAUC,GACjC,MAAMC,EAAWD,EAAKnS,GAAG,SACnBqS,EAAYnjK,MAAMmG,UAAUiX,IAAIxX,KAAKs9J,GAAU9vJ,GAAKA,EAAEolF,QAQ5D,OAPex4F,MAAMmG,UAAUiX,IAAIxX,KAAKs9J,GAAU,SAAUE,GAC1D,MAAMx/J,EAAOg/J,GAAaQ,EAAQ5qE,OAIlC,OAHI4qE,EAAQtwJ,MACVlP,EAAKkP,IAAMswJ,EAAQtwJ,KAEdlP,CACT,IACc6qG,OAAOzuG,MAAMmG,UAAUuM,OAAO9M,KAAKq9J,EAAKI,cAAc,SAAU7qE,GAC5E,OAAqC,IAA9B2qE,EAAUtjK,QAAQ24F,EAC3B,IAAGp7E,IAAIwlJ,IACT,EAsBII,GATqB,SAAUp/J,EAAMq/J,GAOvC,OANAr/J,EAAKlE,SAAQ,SAAU84F,GACrB,MAAM8qE,EAAaL,EAAKM,mBAAmB/qE,GAAOA,OAC7CA,EAAM1lF,KAAO0lF,EAAMqqE,MACtBrqE,EAAMqqE,KAAKnjK,SAAQojK,GAAOQ,EAAWE,OAAOV,IAEhD,IACOG,EAAKI,YACd,EAcA,MAAMI,GAAmB,mBAWzB,MAAMC,WAAoBvL,GAqCxB9xJ,WAAAA,CAAY8rJ,EAAQ9xJ,GAClByiI,MAAMqvB,EAAQ9xJ,GACd0G,KAAK48J,eAAiBjlK,GAAKqI,KAAK42J,cAAcj/J,GAC9CqI,KAAK68J,OAASllK,GAAKqI,KAAK88J,MAAMnlK,GAC9BqI,KAAK+8J,QAAU/8J,KAAKg9J,eAAiBh9J,KAAKi9J,gBAAiB,EAC3Dj9J,KAAKk9J,WAAWl9J,KAAK0xJ,SAASyL,aAC9Bn9J,KAAK0mJ,QAAQ1mJ,KAAK0xJ,SAAShL,SAK3B1mJ,KAAKmzJ,WAAa1M,GAAS,MAAO,CAChCx1B,UAAW,GAAGyrC,cACb,CACD7pC,KAAM,aAER7yH,KAAKo9J,QAAU3W,GAAS,IAAK,CAC3Bx1B,UAAW,GAAGyrC,kCACdhmJ,GAAI1W,KAAK0I,KAAKkO,aAAa,sBAE7Bu2E,GAAYntF,KAAKo9J,QAASp9J,KAAKq9J,eAC/Br9J,KAAKswJ,IAAI1pJ,YAAY5G,KAAKo9J,SAC1Bp9J,KAAKswJ,IAAI1pJ,YAAY5G,KAAKmzJ,WAC5B,CAQA1M,QAAAA,GACE,OAAO1qB,MAAM0qB,SAAS,MAAO,CAC3Bx1B,UAAWjxH,KAAKm1J,gBAChBviC,UAAW,GACV,CACD,mBAAoB,GAAG5yH,KAAK0W,mBAC5B,cAAe,OACf,aAAc1W,KAAK8tI,QACnB,KAAQ,SACR,YAAa,UAEjB,CACAvS,OAAAA,GACEv7H,KAAKmzJ,WAAa,KAClBnzJ,KAAKo9J,QAAU,KACfp9J,KAAKs9J,oBAAsB,KAC3BvhC,MAAMR,SACR,CAQA45B,aAAAA,GACE,MAAO,GAAGuH,iBAA+B3gC,MAAMo5B,iBACjD,CAQArnB,KAAAA,GACE,OAAO9tI,KAAK2yJ,SAAS3yJ,KAAK0xJ,SAAS5jB,OAAS,eAC9C,CASAuvB,WAAAA,GACE,IAAIliB,EAAOn7I,KAAK0xJ,SAAS2L,aAAer9J,KAAK2yJ,SAAS,2BAMtD,OAHI3yJ,KAAKk9J,cACP/hB,GAAQ,IAAMn7I,KAAK2yJ,SAAS,wFAEvBxX,CACT,CAQA79I,IAAAA,GACE,GAAI0C,KAAK+8J,QAIP,YAHI/8J,KAAK0xJ,SAAS6L,YAChBv9J,KAAKw9J,QAIT,MAAMpS,EAASprJ,KAAKorJ,SAQpBprJ,KAAKk7H,QAAQ,mBACbl7H,KAAK+8J,SAAU,GAIX/8J,KAAK0xJ,SAAS6L,aAAev9J,KAAKg9J,iBAAmBh9J,KAAKi9J,iBAC5Dj9J,KAAKw9J,OAKPx9J,KAAKy9J,aAAerS,EAAOsS,SACvB19J,KAAK0xJ,SAASiM,aAAe39J,KAAKy9J,aACpCrS,EAAOwS,QAET59J,KAAKg7H,GAAG,UAAWh7H,KAAK48J,gBAGxB58J,KAAK69J,aAAezS,EAAO0S,WAC3B1S,EAAO0S,UAAS,GAChB99J,KAAK21J,OACL31J,KAAK+9J,oBACL/9J,KAAK0I,KAAKmP,aAAa,cAAe,SAQtC7X,KAAKk7H,QAAQ,aACbl7H,KAAKg9J,gBAAiB,CACxB,CAWAgB,MAAAA,CAAO1mK,GAIL,MAHqB,mBAAVA,GACT0I,KAAK1I,EAAQ,OAAS,WAEjB0I,KAAK+8J,OACd,CASAD,KAAAA,GACE,IAAK98J,KAAK+8J,QACR,OAEF,MAAM3R,EAASprJ,KAAKorJ,SAQpBprJ,KAAKk7H,QAAQ,oBACbl7H,KAAK+8J,SAAU,EACX/8J,KAAKy9J,aAAez9J,KAAK0xJ,SAASiM,aACpCvS,EAAOkG,OAETtxJ,KAAKi7H,IAAI,UAAWj7H,KAAK48J,gBACrB58J,KAAK69J,cACPzS,EAAO0S,UAAS,GAElB99J,KAAK8yH,OACL9yH,KAAK0I,KAAKmP,aAAa,cAAe,QAUtC7X,KAAKk7H,QAAQ,CACX7jI,KAAM,aACNokG,SAAS,IAEXz7F,KAAKi+J,mBACDj+J,KAAK0xJ,SAASwM,WAChBl+J,KAAKu7H,SAET,CAWA2hC,SAAAA,CAAU5lK,GACR,GAAqB,mBAAVA,EAAqB,CAC9B,MAAM4lK,EAAYl9J,KAAKm+J,aAAe7mK,EACtC,IAAIwlK,EAAQ98J,KAAKqzJ,SAAS,eAG1B,GAAI6J,IAAcJ,EAAO,CAGvB,MAAMsB,EAAOp+J,KAAKmzJ,WAClBnzJ,KAAKmzJ,WAAanzJ,KAAKswJ,IACvBwM,EAAQ98J,KAAKo0J,SAAS,cAAe,CACnCiK,YAAa,uBAEfr+J,KAAKmzJ,WAAaiL,EAClBp+J,KAAKg7H,GAAG8hC,EAAO,QAAS98J,KAAK68J,OAC/B,EAGKK,GAAaJ,IAChB98J,KAAKi7H,IAAI6hC,EAAO,QAAS98J,KAAK68J,QAC9B78J,KAAKqS,YAAYyqJ,GACjBA,EAAMvhC,UAEV,CACA,OAAOv7H,KAAKm+J,UACd,CAMAX,IAAAA,GACEx9J,KAAKs+J,SAASt+J,KAAK0mJ,UACrB,CAYA4X,QAAAA,CAAS5X,GACP,MAAMwM,EAAYlzJ,KAAKkzJ,YACjBqL,EAAWrL,EAAU3pJ,WACrBi1J,EAAgBtL,EAAU7iJ,YAQhCrQ,KAAKk7H,QAAQ,mBACbl7H,KAAKi9J,gBAAiB,EAItBsB,EAASlsJ,YAAY6gJ,GACrBlzJ,KAAK03B,QACLmyH,GAAcqJ,EAAWxM,GAOzB1mJ,KAAKk7H,QAAQ,aAGTsjC,EACFD,EAAS1oJ,aAAaq9I,EAAWsL,GAEjCD,EAAS33J,YAAYssJ,GAIvB,MAAMuL,EAAcz+J,KAAKqzJ,SAAS,eAC9BoL,GACFF,EAAS33J,YAAY63J,EAAYnO,KASnCtwJ,KAAKk7H,QAAQ,iBACf,CAQAxjG,KAAAA,GAOE13B,KAAKk7H,QAAQ,oBACbyuB,GAAQ3pJ,KAAKkzJ,aAQblzJ,KAAKk7H,QAAQ,aACf,CAiBAwrB,OAAAA,CAAQpvJ,GAIN,MAHqB,qBAAVA,IACT0I,KAAK0+J,SAAWpnK,GAEX0I,KAAK0+J,QACd,CAOAX,iBAAAA,GACE,MAAMY,EAAWzd,IAAAA,cACX0d,EAAW5+J,KAAKuxJ,QAAQjB,IAC9BtwJ,KAAKs9J,oBAAsB,MACvBsB,EAAS16D,SAASy6D,IAAaC,IAAaD,KAC9C3+J,KAAKs9J,oBAAsBqB,EAC3B3+J,KAAKgmG,QAET,CAOAi4D,gBAAAA,GACMj+J,KAAKs9J,sBACPt9J,KAAKs9J,oBAAoBt3D,QACzBhmG,KAAKs9J,oBAAsB,KAE/B,CAOA1G,aAAAA,CAAcr0D,GAeZ,GARAviG,KAAKk7H,QAAQ,CACX7jI,KAAM,eACNwnK,cAAet8D,EACfh+F,OAAQvE,KACRy7F,SAAS,IAGX8G,EAAM1I,kBACY,WAAd0I,EAAMxpG,KAAoBiH,KAAKk9J,YAGjC,OAFA36D,EAAMvH,sBACNh7F,KAAK88J,QAKP,GAAkB,QAAdv6D,EAAMxpG,IACR,OAEF,MAAM+lK,EAAe9+J,KAAK++J,gBACpBJ,EAAW3+J,KAAKswJ,IAAI6D,cAAc,UACxC,IAAI6K,EACJ,IAAK,IAAIjhK,EAAI,EAAGA,EAAI+gK,EAAazgK,OAAQN,IACvC,GAAI4gK,IAAaG,EAAa/gK,GAAI,CAChCihK,EAAajhK,EACb,KACF,CAEEmjJ,IAAAA,gBAA6BlhJ,KAAKswJ,MACpC0O,EAAa,GAEXz8D,EAAM5F,UAA2B,IAAfqiE,GACpBF,EAAaA,EAAazgK,OAAS,GAAG2nG,QACtCzD,EAAMvH,kBACIuH,EAAM5F,UAAYqiE,IAAeF,EAAazgK,OAAS,IACjEygK,EAAa,GAAG94D,QAChBzD,EAAMvH,iBAEV,CAOA+jE,aAAAA,GACE,MAAME,EAAcj/J,KAAKswJ,IAAIjpC,iBAAiB,KAC9C,OAAOpuH,MAAMmG,UAAUuM,OAAO9M,KAAKogK,GAAaruJ,IACtCA,aAAiBmxI,IAAAA,mBAA8BnxI,aAAiBmxI,IAAAA,kBAA6BnxI,EAAM+G,aAAa,UAAY/G,aAAiBmxI,IAAAA,kBAA6BnxI,aAAiBmxI,IAAAA,mBAA8BnxI,aAAiBmxI,IAAAA,qBAAgCnxI,aAAiBmxI,IAAAA,qBAAgCnxI,EAAM+G,aAAa,aAAe/G,aAAiBmxI,IAAAA,mBAA8BnxI,aAAiBmxI,IAAAA,mBAA8BnxI,aAAiBmxI,IAAAA,kBAA6BnxI,EAAM+G,aAAa,cAAmD,IAApC/G,EAAMgG,aAAa,aAAsBhG,EAAM+G,aAAa,oBAEnlB,EASFglJ,GAAYv9J,UAAUsyJ,SAAW,CAC/BiM,aAAa,EACbO,WAAW,GAEb9M,GAAYgI,kBAAkB,cAAeuD,IAc7C,MAAMuC,WAAkBnR,GAStBzuJ,WAAAA,GAAyB,IAAb6/J,EAAMl1J,UAAA5L,OAAA,QAAA/D,IAAA2P,UAAA,GAAAA,UAAA,GAAG,GACnB8xH,QACA/7H,KAAKo/J,QAAU,GAQfjgK,OAAOka,eAAerZ,KAAM,SAAU,CACpCc,GAAAA,GACE,OAAOd,KAAKo/J,QAAQ/gK,MACtB,IAEF,IAAK,IAAIN,EAAI,EAAGA,EAAIohK,EAAO9gK,OAAQN,IACjCiC,KAAKq/J,SAASF,EAAOphK,GAEzB,CAUAshK,QAAAA,CAAS5tE,GACP,MAAM54F,EAAQmH,KAAKo/J,QAAQ/gK,OACrB,GAAKxF,KAASmH,MAClBb,OAAOka,eAAerZ,KAAMnH,EAAO,CACjCiI,GAAAA,GACE,OAAOd,KAAKo/J,QAAQvmK,EACtB,KAKiC,IAAjCmH,KAAKo/J,QAAQtmK,QAAQ24F,KACvBzxF,KAAKo/J,QAAQjmK,KAAKs4F,GASlBzxF,KAAKk7H,QAAQ,CACXzpC,QACAp6F,KAAM,WACNkN,OAAQvE,QAYZyxF,EAAM6tE,aAAe,KACnBt/J,KAAKk7H,QAAQ,CACXzpC,QACAp6F,KAAM,cACNkN,OAAQvE,MACR,EAEAsuJ,GAAU78D,IACZA,EAAMyB,iBAAiB,cAAezB,EAAM6tE,aAEhD,CAUAC,WAAAA,CAAYC,GACV,IAAI/tE,EACJ,IAAK,IAAI1zF,EAAI,EAAGkI,EAAIjG,KAAK3B,OAAQN,EAAIkI,EAAGlI,IACtC,GAAIiC,KAAKjC,KAAOyhK,EAAQ,CACtB/tE,EAAQzxF,KAAKjC,GACT0zF,EAAMwpC,KACRxpC,EAAMwpC,MAERj7H,KAAKo/J,QAAQh4C,OAAOrpH,EAAG,GACvB,KACF,CAEG0zF,GAYLzxF,KAAKk7H,QAAQ,CACXzpC,QACAp6F,KAAM,cACNkN,OAAQvE,MAEZ,CAUAy/J,YAAAA,CAAa/oJ,GACX,IAAIhe,EAAS,KACb,IAAK,IAAIqF,EAAI,EAAGkI,EAAIjG,KAAK3B,OAAQN,EAAIkI,EAAGlI,IAAK,CAC3C,MAAM0zF,EAAQzxF,KAAKjC,GACnB,GAAI0zF,EAAM/6E,KAAOA,EAAI,CACnBhe,EAAS+4F,EACT,KACF,CACF,CACA,OAAO/4F,CACT,EAgBFwmK,GAAU9/J,UAAU6uJ,eAAiB,CACnCyR,OAAQ,SACRC,SAAU,WACVC,YAAa,cACbC,YAAa,eAIf,IAAK,MAAMt9D,MAAS28D,GAAU9/J,UAAU6uJ,eACtCiR,GAAU9/J,UAAU,KAAOmjG,IAAS,KAqBtC,MAAMu9D,GAAkB,SAAUp7J,EAAM+sF,GACtC,IAAK,IAAI1zF,EAAI,EAAGA,EAAI2G,EAAKrG,OAAQN,IAC1BoB,OAAO0M,KAAKnH,EAAK3G,IAAIM,QAAUozF,EAAM/6E,KAAOhS,EAAK3G,GAAG2Y,KAIzDhS,EAAK3G,GAAG+4J,SAAU,EAEtB,EA0FA,MAAMiJ,GAAgB,SAAUr7J,EAAM+sF,GACpC,IAAK,IAAI1zF,EAAI,EAAGA,EAAI2G,EAAKrG,OAAQN,IAC1BoB,OAAO0M,KAAKnH,EAAK3G,IAAIM,QAAUozF,EAAM/6E,KAAOhS,EAAK3G,GAAG2Y,KAIzDhS,EAAK3G,GAAG2uF,UAAW,EAEvB,EAkGA,MAAMszE,WAAsBd,GAS1BG,QAAAA,CAAS5tE,GACPsqC,MAAMsjC,SAAS5tE,GACVzxF,KAAKigK,eACRjgK,KAAKigK,aAAe,IAAMjgK,KAAKkuJ,aAAa,WAEzCluJ,KAAKkgK,gCACRlgK,KAAKmgK,+BAAiC,IAAMngK,KAAKk7H,QAAQ,2BAO3DzpC,EAAMyB,iBAAiB,aAAclzF,KAAKigK,eAEY,IADrB,CAAC,WAAY,YACjBnnK,QAAQ24F,EAAM2uE,OACzC3uE,EAAMyB,iBAAiB,aAAclzF,KAAKmgK,+BAE9C,CACAZ,WAAAA,CAAYC,GACVzjC,MAAMwjC,YAAYC,GAGdA,EAAOrsE,sBACLnzF,KAAKigK,cACPT,EAAOrsE,oBAAoB,aAAcnzF,KAAKigK,cAE5CjgK,KAAKqgK,yBACPb,EAAOrsE,oBAAoB,aAAcnzF,KAAKmgK,gCAGpD,EAsIF,MAAMG,GAOJhhK,WAAAA,CAAYw8J,GACVwE,GAAiBlhK,UAAUmhK,SAAS1hK,KAAKmB,KAAM87J,GAQ/C38J,OAAOka,eAAerZ,KAAM,SAAU,CACpCc,GAAAA,GACE,OAAOd,KAAKwgK,OACd,GAEJ,CAWAD,QAAAA,CAASzE,GACP,MAAM2E,EAAYzgK,KAAK3B,QAAU,EACjC,IAAIN,EAAI,EACR,MAAMkI,EAAI61J,EAAKz9J,OACf2B,KAAK0gK,MAAQ5E,EACb97J,KAAKwgK,QAAU1E,EAAKz9J,OACpB,MAAMsiK,EAAa,SAAU9nK,GACrB,GAAKA,KAASmH,MAClBb,OAAOka,eAAerZ,KAAM,GAAKnH,EAAO,CACtCiI,GAAAA,GACE,OAAOd,KAAK0gK,MAAM7nK,EACpB,GAGN,EACA,GAAI4nK,EAAYx6J,EAEd,IADAlI,EAAI0iK,EACG1iK,EAAIkI,EAAGlI,IACZ4iK,EAAW9hK,KAAKmB,KAAMjC,EAG5B,CAWA6iK,UAAAA,CAAWlqJ,GACT,IAAIhe,EAAS,KACb,IAAK,IAAIqF,EAAI,EAAGkI,EAAIjG,KAAK3B,OAAQN,EAAIkI,EAAGlI,IAAK,CAC3C,MAAMg+J,EAAM/7J,KAAKjC,GACjB,GAAIg+J,EAAIrlJ,KAAOA,EAAI,CACjBhe,EAASqjK,EACT,KACF,CACF,CACA,OAAOrjK,CACT,EAcF,MAAMmoK,GAAiB,CACrBC,YAAa,cACbpvB,SAAU,WACVqvB,KAAM,OACNC,KAAM,OACNC,UAAW,YACXC,WAAY,cAURC,GAAiB,CACrB,YAAe,cACf,aAAgB,eAChB,KAAQ,OACR,YAAa,YACb,YAAe,cACf,WAAc,cAUVC,GAAgB,CACpBH,UAAW,YACXvvB,SAAU,WACV2vB,aAAc,eACdC,SAAU,WACVvnK,SAAU,YAUNwnK,GAAgB,CACpB30E,SAAU,WACV40E,OAAQ,SACRC,QAAS,WAiBX,MAAMnlB,WAAcyR,GAqBlBzuJ,WAAAA,GAA0B,IAAdhG,EAAO2Q,UAAA5L,OAAA,QAAA/D,IAAA2P,UAAA,GAAAA,UAAA,GAAG,CAAC,EACrB8xH,QACA,MAAM2lC,EAAa,CACjBhrJ,GAAIpd,EAAQod,IAAM,aAAem1I,KACjCuU,KAAM9mK,EAAQ8mK,MAAQ,GACtB59B,SAAUlpI,EAAQkpI,UAAY,IAEhC,IAAIsL,EAAQx0I,EAAQw0I,OAAS,GA8B7B,IAAK,MAAM/0I,KAAO2oK,EAChBviK,OAAOka,eAAerZ,KAAMjH,EAAK,CAC/B+H,IAAGA,IACM4gK,EAAW3oK,GAEpB4H,GAAAA,GAAO,IAYXxB,OAAOka,eAAerZ,KAAM,QAAS,CACnCc,IAAGA,IACMgtI,EAETntI,GAAAA,CAAIghK,GACEA,IAAa7zB,IACfA,EAAQ6zB,EAUR3hK,KAAKk7H,QAAQ,eAEjB,GAEJ,EAkBF,MAAM0mC,GAAW,SAAU/nK,GACzB,OAAO,IAAIghI,IAAIhhI,EAAKqnJ,IAAAA,QACtB,EAYM2gB,GAAiB,SAAUhoK,GAC/B,OAAO,IAAIghI,IAAIhhI,EAAKqnJ,IAAAA,SAAoB38C,IAC1C,EAcMu9D,GAAmB,SAAUvoC,GACjC,GAAoB,kBAATA,EAAmB,CAC5B,MACMO,EADc,yEACUl6C,KAAK25C,GACnC,GAAIO,EACF,OAAOA,EAAU94C,MAAMhqF,aAE3B,CACA,MAAO,EACT,EAeM+qK,GAAgB,SAAUloK,GAAiC,IAA5BmoK,EAAM/3J,UAAA5L,OAAA,QAAA/D,IAAA2P,UAAA,GAAAA,UAAA,GAAG83I,IAAAA,SAC5C,OAAO6f,GAAS/nK,GAAKooK,SAAWD,EAAOC,MACzC,EAEA,IAAIC,GAAmB/iK,OAAOqE,OAAO,CACnC4oH,UAAW,KACXw1C,SAAUA,GACVC,eAAgBA,GAChBC,iBAAkBA,GAClBC,cAAeA,KAoBjB,MAAMI,GAAY,SAAUC,EAAY3wE,GACtC,MAAMgoD,EAAS,IAAIsI,IAAAA,OAAgB7iB,QAAO6iB,IAAUA,IAAAA,MAAgBA,IAAAA,OAAgBsgB,iBAC9E73B,EAAS,GACfiP,EAAO6oB,MAAQ,SAAUvG,GACvBtqE,EAAMgrE,OAAOV,EACf,EACAtiB,EAAO8oB,eAAiB,SAAUt6J,GAChCuiI,EAAOrxI,KAAK8O,EACd,EACAwxI,EAAO+oB,QAAU,WACf/wE,EAAMypC,QAAQ,CACZ7jI,KAAM,aACNkN,OAAQktF,GAEZ,EACAgoD,EAAOx+I,MAAMmnK,GACT53B,EAAOnsI,OAAS,IACd0jJ,IAAAA,SAAoBA,IAAAA,QAAiB0gB,gBACvC1gB,IAAAA,QAAiB0gB,eAAe,iCAAiChxE,EAAM1lF,OAEzEy+H,EAAO7xI,SAAQsP,GAASm5I,GAAMn5I,MAAMA,KAChC85I,IAAAA,SAAoBA,IAAAA,QAAiB2gB,UACvC3gB,IAAAA,QAAiB2gB,YAGrBjpB,EAAOtuB,OACT,EAaMw3C,GAAY,SAAU52J,EAAK0lF,GAC/B,MAAM0nC,EAAO,CACX9/H,IAAK0S,GAED62J,EAAcb,GAAch2J,GAC9B62J,IACFzpC,EAAK38H,KAAOomK,GAEd,MAAMnlK,EAAgD,oBAA9Bg0F,EAAMoxE,MAAMD,cAChCnlK,IACF07H,EAAK17H,gBAAkBA,GAEzBqlK,IAAI3pC,EAAMk0B,GAAMrtJ,MAAM,SAAUxJ,EAAKC,EAAUC,GAC7C,GAAIF,EACF,OAAO4qJ,GAAMn5I,MAAMzR,EAAKC,GAE1Bg7F,EAAMsxE,SAAU,EAIe,oBAApBhhB,IAAAA,OACLtwD,EAAMoxE,OAGRpxE,EAAMoxE,MAAMh9E,IAAI,CAAC,cAAe,eAAe0c,IAC7C,GAAmB,eAAfA,EAAMlrG,KAIV,OAAO8qK,GAAUzrK,EAAc+6F,GAH7B2vD,GAAMn5I,MAAM,oDAAoDwpF,EAAM1lF,MAGnC,IAIzCo2J,GAAUzrK,EAAc+6F,EAE5B,IACF,EAQA,MAAMuxE,WAAkB1mB,GAmCtBh9I,WAAAA,GAA0B,IAAdhG,EAAO2Q,UAAA5L,OAAA,QAAA/D,IAAA2P,UAAA,GAAAA,UAAA,GAAG,CAAC,EACrB,IAAK3Q,EAAQ4iK,KACX,MAAM,IAAIziK,MAAM,4BAElB,MAAMwpK,EAAWzf,GAAQlqJ,EAAS,CAChC8mK,KAAMgB,GAAc9nK,EAAQ8mK,OAAS,YACrC59B,SAAUlpI,EAAQkpI,UAAYlpI,EAAQ4pK,SAAW,KAEnD,IAAI50D,EAAOizD,GAAc0B,EAAS30D,OAAS,WAC3C,MAAM60D,EAAWF,EAAS14C,QACJ,aAAlB04C,EAAS7C,MAAyC,aAAlB6C,EAAS7C,OAC3C9xD,EAAO,UAETytB,MAAMknC,GACNjjK,KAAK6iK,MAAQI,EAAS/G,KACtBl8J,KAAK0gK,MAAQ,GACb1gK,KAAKojK,YAAc,GACnBpjK,KAAKqjK,UAA4C,IAAjCrjK,KAAK6iK,MAAMS,kBAC3B,MAAMxH,EAAO,IAAIwE,GAAiBtgK,KAAK0gK,OACjC6C,EAAa,IAAIjD,GAAiBtgK,KAAKojK,aAC7C,IAAII,GAAU,EACdxjK,KAAKyjK,kBAAoBpW,GAAMrtJ,MAAM,WAAsB,IAAZuiG,EAAKt4F,UAAA5L,OAAA,QAAA/D,IAAA2P,UAAA,GAAAA,UAAA,GAAG,CAAC,EAClDjK,KAAK6iK,MAAMnQ,eAGV1yJ,KAAK6iK,MAAMzN,UAWhBp1J,KAAKujK,WAAavjK,KAAKujK,WACnBC,IACFxjK,KAAKk7H,QAAQ,aACbsoC,GAAU,GAEO,eAAfjhE,EAAMlrG,OACR2I,KAAK0jK,KAAO1jK,KAAK6iK,MAAMc,0BAA0B3jK,KAAKyjK,qBAhBnC,eAAflhE,EAAMlrG,OACR2I,KAAK0jK,KAAO1jK,KAAK6iK,MAAMc,0BAA0B3jK,KAAKyjK,oBAiB5D,IAIAzjK,KAAK6iK,MAAM1V,IAAI,WAHQyW,KACrB5jK,KAAKsrF,cAAc,IAGR,aAATgjB,GACFtuG,KAAK6jK,gBAEP1kK,OAAO2kK,iBAAiB9jK,KAAM,CAU5BuqH,QAAS,CACPzpH,IAAGA,IACMqiK,EAETxiK,GAAAA,GAAO,GAWT2tG,KAAM,CACJxtG,IAAGA,IACMwtG,EAET3tG,GAAAA,CAAIojK,GACGxC,GAAcwC,IAGfz1D,IAASy1D,IAGbz1D,EAAOy1D,EACF/jK,KAAKqjK,UAAqB,aAAT/0D,GAA4C,IAArBtuG,KAAK87J,KAAKz9J,QAErDskK,GAAU3iK,KAAK+L,IAAK/L,MAEtBA,KAAKsrF,eACQ,aAATgjB,GACFtuG,KAAK6jK,gBAWP7jK,KAAKk7H,QAAQ,cACf,GAQF4gC,KAAM,CACJh7J,GAAAA,GACE,OAAKd,KAAK+iK,QAGHjH,EAFE,IAGX,EACAn7J,GAAAA,GAAO,GAQT4iK,WAAY,CACVziK,GAAAA,GACE,IAAKd,KAAK+iK,QACR,OAAO,KAIT,GAAyB,IAArB/iK,KAAK87J,KAAKz9J,OACZ,OAAOklK,EAET,MAAMS,EAAKhkK,KAAK6iK,MAAMoB,cAChBvxC,EAAS,GACf,IAAK,IAAI30H,EAAI,EAAGkI,EAAIjG,KAAK87J,KAAKz9J,OAAQN,EAAIkI,EAAGlI,IAAK,CAChD,MAAMg+J,EAAM/7J,KAAK87J,KAAK/9J,GAClBg+J,EAAIzkC,WAAa0sC,GAAMjI,EAAIC,SAAWgI,GACxCtxC,EAAOv5H,KAAK4iK,EAEhB,CAEA,GADAyH,GAAU,EACN9wC,EAAOr0H,SAAW2B,KAAKojK,YAAY/kK,OACrCmlK,GAAU,OAEV,IAAK,IAAIzlK,EAAI,EAAGA,EAAI20H,EAAOr0H,OAAQN,KACY,IAAzCiC,KAAKojK,YAAYtqK,QAAQ45H,EAAO30H,MAClCylK,GAAU,GAMhB,OAFAxjK,KAAKojK,YAAc1wC,EACnB6wC,EAAWhD,SAASvgK,KAAKojK,aAClBG,CACT,EAEA5iK,GAAAA,GAAO,KAGPsiK,EAASl3J,KACX/L,KAAK+L,IAAMk3J,EAASl3J,IACf/L,KAAKqjK,WAGRrjK,KAAK+iK,SAAU,IAEb/iK,KAAKqjK,UAA8B,cAAlBJ,EAAS7C,MAA0C,aAAlB6C,EAAS7C,OAC7DuC,GAAU3iK,KAAK+L,IAAK/L,OAGtBA,KAAK+iK,SAAU,CAEnB,CACAc,aAAAA,GAEE7jK,KAAK0jK,KAAO1jK,KAAK6iK,MAAMc,0BAA0B3jK,KAAKyjK,mBAEtDzjK,KAAK6iK,MAAM7nC,GAAG,aAAch7H,KAAKyjK,kBACnC,CACAn4E,YAAAA,GACMtrF,KAAK0jK,OACP1jK,KAAK6iK,MAAMqB,yBAAyBlkK,KAAK0jK,MACzC1jK,KAAK0jK,UAAOppK,GAEd0F,KAAK6iK,MAAM5nC,IAAI,aAAcj7H,KAAKyjK,kBACpC,CAQAhH,MAAAA,CAAO0H,GACL,IAAIpI,EAAMoI,EAGV,KAAM,iBAAkBpI,GAAM,CAC5BA,EAAM,IAAIha,IAAAA,MAAeqiB,QAAOD,EAAY7sC,UAAW6sC,EAAYnI,QAASmI,EAAYrrJ,MACxF,IAAK,MAAM+6C,KAAQswG,EACXtwG,KAAQkoG,IACZA,EAAIloG,GAAQswG,EAAYtwG,IAK5BkoG,EAAIrlJ,GAAKytJ,EAAYztJ,GACrBqlJ,EAAIsI,aAAeF,CACrB,CACA,MAAMhF,EAASn/J,KAAK6iK,MAAMvG,aAC1B,IAAK,IAAIv+J,EAAI,EAAGA,EAAIohK,EAAO9gK,OAAQN,IAC7BohK,EAAOphK,KAAOiC,MAChBm/J,EAAOphK,GAAGumK,UAAUvI,GAGxB/7J,KAAK0gK,MAAMvnK,KAAK4iK,GAChB/7J,KAAK87J,KAAKyE,SAASvgK,KAAK0gK,MAC1B,CAQA4D,SAAAA,CAAUA,GACR,IAAIvmK,EAAIiC,KAAK0gK,MAAMriK,OACnB,KAAON,KAAK,CACV,MAAMg+J,EAAM/7J,KAAK0gK,MAAM3iK,GACvB,GAAIg+J,IAAQuI,GAAavI,EAAIsI,cAAgBtI,EAAIsI,eAAiBC,EAAW,CAC3EtkK,KAAK0gK,MAAMt5C,OAAOrpH,EAAG,GACrBiC,KAAK87J,KAAKyE,SAASvgK,KAAK0gK,OACxB,KACF,CACF,CACF,EAQFsC,GAAU5jK,UAAU6uJ,eAAiB,CACnCsW,UAAW,aAUb,MAAMxnB,WAAmBT,GAuBvBh9I,WAAAA,GAA0B,IAAdhG,EAAO2Q,UAAA5L,OAAA,QAAA/D,IAAA2P,UAAA,GAAAA,UAAA,GAAG,CAAC,EACrB,MAAMg5J,EAAWzf,GAAQlqJ,EAAS,CAChC8mK,KAAMe,GAAe7nK,EAAQ8mK,OAAS,KAExCrkC,MAAMknC,GACN,IAAInM,GAAU,EAWd33J,OAAOka,eAAerZ,KAAM,UAAW,CACrCc,IAAGA,IACMg2J,EAETn2J,GAAAA,CAAI6jK,GAEwB,mBAAfA,GAA4BA,IAAe1N,IAGtDA,EAAU0N,EAYVxkK,KAAKk7H,QAAQ,iBACf,IAME+nC,EAASnM,UACX92J,KAAK82J,QAAUmM,EAASnM,SAE1B92J,KAAK+iK,SAAU,CACjB,EASF,MAAMjmB,WAAmBR,GAsBvBh9I,WAAAA,GAA0B,IAAdhG,EAAO2Q,UAAA5L,OAAA,QAAA/D,IAAA2P,UAAA,GAAAA,UAAA,GAAG,CAAC,EACrB,MAAMg5J,EAAWzf,GAAQlqJ,EAAS,CAChC8mK,KAAMS,GAAevnK,EAAQ8mK,OAAS,KAExCrkC,MAAMknC,GACN,IAAIv2E,GAAW,EAWfvtF,OAAOka,eAAerZ,KAAM,WAAY,CACtCc,IAAGA,IACM4rF,EAET/rF,GAAAA,CAAI8jK,GAEyB,mBAAhBA,GAA6BA,IAAgB/3E,IAGxDA,EAAW+3E,EAYXzkK,KAAKk7H,QAAQ,kBACf,IAME+nC,EAASv2E,WACX1sF,KAAK0sF,SAAWu2E,EAASv2E,SAE7B,EAeF,MAAMg4E,WAAyB3W,GAmC7BzuJ,WAAAA,GAA0B,IAEpBtC,EAFM1D,EAAO2Q,UAAA5L,OAAA,QAAA/D,IAAA2P,UAAA,GAAAA,UAAA,GAAG,CAAC,EACrB8xH,QAEA,MAAMtqC,EAAQ,IAAIuxE,GAAU1pK,GAC5B0G,KAAKogK,KAAO3uE,EAAM2uE,KAClBpgK,KAAK+L,IAAM0lF,EAAM1lF,IACjB/L,KAAKkjK,QAAUzxE,EAAM+wC,SACrBxiI,KAAK8tI,MAAQr8C,EAAMq8C,MACnB9tI,KAAKuqH,QAAU94B,EAAM84B,QACrBprH,OAAO2kK,iBAAiB9jK,KAAM,CAO5BhD,WAAY,CACV8D,IAAGA,IACM9D,GAUXy0F,MAAO,CACL3wF,IAAGA,IACM2wF,KAIbz0F,EAAa0nK,GAAiBC,KAM9BlzE,EAAMyB,iBAAiB,cAAc,KACnCl2F,EAAa0nK,GAAiBE,OAC9B5kK,KAAKk7H,QAAQ,CACX7jI,KAAM,OACNkN,OAAQvE,MACR,GAEN,EAMF0kK,GAAiBtlK,UAAU6uJ,eAAiB,CAC1C4W,KAAM,QASRH,GAAiBC,KAAO,EAQxBD,GAAiBI,QAAU,EAQ3BJ,GAAiBE,OAAS,EAQ1BF,GAAiBK,MAAQ,EAOzB,MAAMC,GAAS,CACbz+B,MAAO,CACL0+B,UA32CJ,cAA6B/F,GAO3B5/J,WAAAA,GAAyB,IAAb6/J,EAAMl1J,UAAA5L,OAAA,QAAA/D,IAAA2P,UAAA,GAAAA,UAAA,GAAG,GAGnB,IAAK,IAAIlM,EAAIohK,EAAO9gK,OAAS,EAAGN,GAAK,EAAGA,IACtC,GAAIohK,EAAOphK,GAAG+4J,QAAS,CACrBgJ,GAAgBX,EAAQA,EAAOphK,IAC/B,KACF,CAEFg+H,MAAMojC,GACNn/J,KAAKklK,WAAY,CACnB,CAUA7F,QAAAA,CAAS5tE,GACHA,EAAMqlE,SACRgJ,GAAgB9/J,KAAMyxF,GAExBsqC,MAAMsjC,SAAS5tE,GAEVA,EAAMyB,mBAGXzB,EAAM0zE,eAAiB,KAIjBnlK,KAAKklK,YAGTllK,KAAKklK,WAAY,EACjBpF,GAAgB9/J,KAAMyxF,GACtBzxF,KAAKklK,WAAY,EACjBllK,KAAKk7H,QAAQ,UAAS,EAOxBzpC,EAAMyB,iBAAiB,gBAAiBzB,EAAM0zE,gBAChD,CACA5F,WAAAA,CAAYC,GACVzjC,MAAMwjC,YAAYC,GACdA,EAAOrsE,qBAAuBqsE,EAAO2F,iBACvC3F,EAAOrsE,oBAAoB,gBAAiBqsE,EAAO2F,gBACnD3F,EAAO2F,eAAiB,KAE5B,GA8yCEC,WAAYroB,GACZsoB,YAAa,SAEf/+B,MAAO,CACL2+B,UA9wCJ,cAA6B/F,GAO3B5/J,WAAAA,GAAyB,IAAb6/J,EAAMl1J,UAAA5L,OAAA,QAAA/D,IAAA2P,UAAA,GAAAA,UAAA,GAAG,GAGnB,IAAK,IAAIlM,EAAIohK,EAAO9gK,OAAS,EAAGN,GAAK,EAAGA,IACtC,GAAIohK,EAAOphK,GAAG2uF,SAAU,CACtBqzE,GAAcZ,EAAQA,EAAOphK,IAC7B,KACF,CAEFg+H,MAAMojC,GACNn/J,KAAKklK,WAAY,EAMjB/lK,OAAOka,eAAerZ,KAAM,gBAAiB,CAC3Cc,GAAAA,GACE,IAAK,IAAI/C,EAAI,EAAGA,EAAIiC,KAAK3B,OAAQN,IAC/B,GAAIiC,KAAKjC,GAAG2uF,SACV,OAAO3uF,EAGX,OAAQ,CACV,EACA4C,GAAAA,GAAO,GAEX,CAUA0+J,QAAAA,CAAS5tE,GACHA,EAAM/E,UACRqzE,GAAc//J,KAAMyxF,GAEtBsqC,MAAMsjC,SAAS5tE,GAEVA,EAAMyB,mBAGXzB,EAAM6zE,gBAAkB,KAClBtlK,KAAKklK,YAGTllK,KAAKklK,WAAY,EACjBnF,GAAc//J,KAAMyxF,GACpBzxF,KAAKklK,WAAY,EACjBllK,KAAKk7H,QAAQ,UAAS,EAOxBzpC,EAAMyB,iBAAiB,iBAAkBzB,EAAM6zE,iBACjD,CACA/F,WAAAA,CAAYC,GACVzjC,MAAMwjC,YAAYC,GACdA,EAAOrsE,qBAAuBqsE,EAAO8F,kBACvC9F,EAAOrsE,oBAAoB,iBAAkBqsE,EAAO8F,iBACpD9F,EAAO8F,gBAAkB,KAE7B,GAosCEF,WAAYtoB,GACZuoB,YAAa,SAEfvsJ,KAAM,CACJmsJ,UAAWjF,GACXoF,WAAYpC,GACZqC,YAAa,SAGjBlmK,OAAO0M,KAAKm5J,IAAQrsK,SAAQ,SAAUtB,GACpC2tK,GAAO3tK,GAAMkuK,WAAa,GAAGluK,UAC7B2tK,GAAO3tK,GAAMmuK,YAAc,GAAGnuK,UAChC,IACA,MAAMouK,GAAS,CACbC,WAAY,CACVT,UAAWjF,GACXoF,WAAYpC,GACZqC,YAAa,aACbE,WAAY,mBACZC,YAAa,qBAEfG,aAAc,CACZV,UAzpCJ,MAOE3lK,WAAAA,GAAgC,IAApBsmK,EAAa37J,UAAA5L,OAAA,QAAA/D,IAAA2P,UAAA,GAAAA,UAAA,GAAG,GAC1BjK,KAAK6lK,eAAiB,GAQtB1mK,OAAOka,eAAerZ,KAAM,SAAU,CACpCc,GAAAA,GACE,OAAOd,KAAK6lK,eAAexnK,MAC7B,IAEF,IAAK,IAAIN,EAAI,EAAGM,EAASunK,EAAcvnK,OAAQN,EAAIM,EAAQN,IACzDiC,KAAK8lK,iBAAiBF,EAAc7nK,GAExC,CAUA+nK,gBAAAA,CAAiBC,GACf,MAAMltK,EAAQmH,KAAK6lK,eAAexnK,OAC5B,GAAKxF,KAASmH,MAClBb,OAAOka,eAAerZ,KAAMnH,EAAO,CACjCiI,GAAAA,GACE,OAAOd,KAAK6lK,eAAehtK,EAC7B,KAK+C,IAA/CmH,KAAK6lK,eAAe/sK,QAAQitK,IAC9B/lK,KAAK6lK,eAAe1sK,KAAK4sK,EAE7B,CAcAC,uBAAAA,CAAwBv0E,GACtB,IAAIw0E,EACJ,IAAK,IAAIloK,EAAI,EAAGM,EAAS2B,KAAK6lK,eAAexnK,OAAQN,EAAIM,EAAQN,IAC/D,GAAI0zF,IAAUzxF,KAAK6lK,eAAe9nK,GAAG0zF,MAAO,CAC1Cw0E,EAAgBjmK,KAAK6lK,eAAe9nK,GACpC,KACF,CAEF,OAAOkoK,CACT,CAUAC,mBAAAA,CAAoBH,GAClB,IAAK,IAAIhoK,EAAI,EAAGM,EAAS2B,KAAK6lK,eAAexnK,OAAQN,EAAIM,EAAQN,IAC/D,GAAIgoK,IAAiB/lK,KAAK6lK,eAAe9nK,GAAI,CACvCiC,KAAK6lK,eAAe9nK,GAAG0zF,OAAqD,oBAArCzxF,KAAK6lK,eAAe9nK,GAAG0zF,MAAMwpC,KACtEj7H,KAAK6lK,eAAe9nK,GAAG0zF,MAAMwpC,MAEW,oBAA/Bj7H,KAAK6lK,eAAe9nK,GAAGk9H,KAChCj7H,KAAK6lK,eAAe9nK,GAAGk9H,MAEzBj7H,KAAK6lK,eAAez+C,OAAOrpH,EAAG,GAC9B,KACF,CAEJ,GA4jCEqnK,WAAYV,GACZW,YAAa,qBACbE,WAAY,qBACZC,YAAa,wBAGXW,GAAMhnK,OAAOmF,OAAO,CAAC,EAAG0gK,GAAQS,IACtCA,GAAOjS,MAAQr0J,OAAO0M,KAAK45J,IAC3BT,GAAOxR,MAAQr0J,OAAO0M,KAAKm5J,IAC3BmB,GAAI3S,MAAQ,GAAG9rD,OAAO+9D,GAAOjS,OAAO9rD,OAAOs9D,GAAOxR,OAmElD,MAAMwB,WAAa5D,GAUjB9xJ,WAAAA,GAAkD,IAAtChG,EAAO2Q,UAAA5L,OAAA,QAAA/D,IAAA2P,UAAA,GAAAA,UAAA,GAAG,CAAC,EAAGonJ,EAAKpnJ,UAAA5L,OAAA,QAAA/D,IAAA2P,UAAA,GAAAA,UAAA,GAAG,WAAa,EAG7C3Q,EAAQg5J,qBAAsB,EAC9Bv2B,MAAM,KAAMziI,EAAS+3J,GACrBrxJ,KAAKomK,kBAAoBzuK,GAAKqI,KAAKqmK,iBAAiB1uK,GACpDqI,KAAKsmK,eAAiB3uK,GAAKqI,KAAKumK,cAAc5uK,GAC9CqI,KAAKwmK,kBAAoB7uK,GAAKqI,KAAKymK,iBAAiB9uK,GACpDqI,KAAK0mK,yBAA2B/uK,GAAKqI,KAAK2mK,wBAAwBhvK,GAClEqI,KAAK4mK,sBAAwBjvK,GAAKqI,KAAK6mK,qBAAqBlvK,GAC5DqI,KAAK8mK,eAAiB,IAAIlmK,IAI1BZ,KAAK+mK,aAAc,EACnB/mK,KAAKg7H,GAAG,WAAW,WACjBh7H,KAAK+mK,aAAc,CACrB,IACA/mK,KAAKg7H,GAAG,aAAa,WACnBh7H,KAAK+mK,aAAc,CACrB,IACAZ,GAAI3S,MAAM76J,SAAQ4G,IAChB,MAAMwlF,EAAQohF,GAAI5mK,GACdjG,GAAWA,EAAQyrF,EAAMwgF,cAC3BvlK,KAAK+kF,EAAMygF,aAAelsK,EAAQyrF,EAAMwgF,YAC1C,IAIGvlK,KAAKgnK,wBACRhnK,KAAKinK,mBAIFjnK,KAAKknK,0BACRlnK,KAAKmnK,sBAEP,CAAC,OAAQ,QAAS,SAASxuK,SAAQ84F,KACO,IAApCn4F,EAAQ,SAASm4F,aACnBzxF,KAAK,iBAAiByxF,YAAiB,EACzC,KAE6B,IAA3Bn4F,EAAQ8tK,iBAAyD,IAA7B9tK,EAAQ+tK,iBAC9CrnK,KAAKsnK,0BAA2B,GACI,IAA3BhuK,EAAQ8tK,iBAAwD,IAA7B9tK,EAAQ+tK,mBACpDrnK,KAAKsnK,0BAA2B,GAE7BtnK,KAAKsnK,0BACRtnK,KAAKunK,oBAEPvnK,KAAKsjK,mBAAkD,IAA9BhqK,EAAQgqK,kBACjCtjK,KAAKwnK,sBAAwB,IAAIrB,GAAIrtJ,KAAKmsJ,UAC1CjlK,KAAKynK,qBAGAnuK,EAAQouK,wBACX1nK,KAAKg3J,gBAEHh3J,KAAKV,cACPU,KAAKquJ,MAAQruJ,KAAKV,YAAYC,MAAQ,eAE1C,CASAooK,gBAAAA,CAAiB57J,GACV/L,KAAKo1J,UAGRp1J,KAAKmtJ,IAAI,SAAS,IAAMntJ,KAAKlE,YAAW,IAAMkE,KAAK2nK,iBAAiB57J,IAAM,KAW5E/L,KAAKk7H,QAAQ,CACXnvH,MACA1U,KAAM,aAEV,CAUA4vK,gBAAAA,GACEjnK,KAAKg7H,GAAG,iBAAkBh7H,KAAKomK,mBAC/BpmK,KAAK4nK,gBAAiB,EAGtB5nK,KAAKmtJ,IAAI,QAASntJ,KAAKsmK,eACzB,CAMAuB,iBAAAA,GACE7nK,KAAK4nK,gBAAiB,EACtB5nK,KAAK8nK,uBACL9nK,KAAKi7H,IAAI,iBAAkBj7H,KAAKomK,kBAClC,CAeAG,aAAAA,CAAchkE,GACZviG,KAAK8nK,uBACL9nK,KAAK+nK,iBAAmB/nK,KAAK23J,YAAYtK,GAAMrtJ,MAAM,WAGnD,MAAMgoK,EAAqBhoK,KAAK+6J,kBAC5B/6J,KAAKioK,mBAAqBD,GAO5BhoK,KAAKk7H,QAAQ,YAEfl7H,KAAKioK,iBAAmBD,EACG,IAAvBA,GACFhoK,KAAK8nK,sBAET,IAAI,IACN,CAWAzB,gBAAAA,CAAiB9jE,GACfviG,KAAKkoK,UAAYloK,KAAK+8H,UACxB,CAQAi+B,QAAAA,GACE,OAAOX,GAAmB,EAAG,EAC/B,CAUAU,eAAAA,GACE,OAAOA,GAAgB/6J,KAAKg7J,WAAYh7J,KAAKkoK,UAC/C,CAQAJ,oBAAAA,GACE9nK,KAAK03J,cAAc13J,KAAK+nK,iBAC1B,CAOAZ,mBAAAA,GACEnnK,KAAKmoK,mBAAoB,EACzBnoK,KAAKg7H,GAAG,OAAQh7H,KAAKwmK,mBACrBxmK,KAAKg7H,GAAG,QAASh7H,KAAK0mK,yBACxB,CAMA0B,oBAAAA,GACEpoK,KAAKmoK,mBAAoB,EACzBnoK,KAAK2mK,0BACL3mK,KAAKi7H,IAAI,OAAQj7H,KAAKwmK,mBACtBxmK,KAAKi7H,IAAI,QAASj7H,KAAK0mK,yBACzB,CASAD,gBAAAA,GACMzmK,KAAKqoK,qBACProK,KAAK2mK,0BAEP3mK,KAAKqoK,oBAAsBroK,KAAK23J,aAAY,WAO1C33J,KAAKk7H,QAAQ,CACX7jI,KAAM,aACNkN,OAAQvE,KACRsoK,mBAAmB,GAIvB,GAAG,IACL,CAQA3B,uBAAAA,GACE3mK,KAAK03J,cAAc13J,KAAKqoK,qBAIxBroK,KAAKk7H,QAAQ,CACX7jI,KAAM,aACNkN,OAAQvE,KACRsoK,mBAAmB,GAEvB,CAQA/sC,OAAAA,GAEEv7H,KAAKuoK,YAAYvD,GAAOxR,OAGpBxzJ,KAAK4nK,gBACP5nK,KAAK6nK,oBAEH7nK,KAAKmoK,mBACPnoK,KAAKooK,uBAEPrsC,MAAMR,SACR,CAYAgtC,WAAAA,CAAY3pB,IACVA,EAAQ,GAAGl3C,OAAOk3C,IAEZjmJ,SAAQtB,IACZ,MAAMqN,EAAO1E,KAAK,GAAG3I,cAAmB,GACxC,IAAI0G,EAAI2G,EAAKrG,OACb,KAAON,KAAK,CACV,MAAM0zF,EAAQ/sF,EAAK3G,GACN,SAAT1G,GACF2I,KAAKwoK,sBAAsB/2E,GAE7B/sF,EAAK66J,YAAY9tE,EACnB,IAEJ,CAMAg3E,qBAAAA,GACE,MAAM/jK,EAAO1E,KAAKwnK,uBAAyB,GAC3C,IAAIzpK,EAAI2G,EAAKrG,OACb,KAAON,KAAK,CACV,MAAM0zF,EAAQ/sF,EAAK3G,GACnBiC,KAAKwoK,sBAAsB/2E,EAC7B,CACF,CAOAlxF,KAAAA,GAAS,CASTqiK,WAAAA,GAAe,CAUf8F,cAAAA,GAAkB,CAWlBzgK,KAAAA,CAAMzR,GAKJ,YAJY8D,IAAR9D,IACFwJ,KAAK2oK,OAAS,IAAIzN,GAAW1kK,GAC7BwJ,KAAKk7H,QAAQ,UAERl7H,KAAK2oK,MACd,CAYAC,MAAAA,GACE,OAAI5oK,KAAK+mK,YACA1M,GAAmB,EAAG,GAExBA,IACT,CASA/I,IAAAA,GAAQ,CAYRuX,YAAAA,CAAaC,GAAe,CAS5BC,SAAAA,GAAa,CAUbC,cAAAA,CAAeC,GAETjpK,KAAKmoK,mBAOPnoK,KAAKk7H,QAAQ,CACX7jI,KAAM,aACNkN,OAAQvE,KACRsoK,mBAAmB,GAGzB,CAYAb,kBAAAA,GAqBEzC,GAAOxR,MAAM76J,SAAQ4G,IACnB,MAAMwlF,EAAQigF,GAAOzlK,GACf2pK,EAAmBA,KACvBlpK,KAAKk7H,QAAQ,GAAG37H,eAAkB,EAE9B4/J,EAASn/J,KAAK+kF,EAAMwgF,cAC1BpG,EAAOjsE,iBAAiB,cAAeg2E,GACvC/J,EAAOjsE,iBAAiB,WAAYg2E,GACpClpK,KAAKg7H,GAAG,WAAW,KACjBmkC,EAAOhsE,oBAAoB,cAAe+1E,GAC1C/J,EAAOhsE,oBAAoB,WAAY+1E,EAAiB,GACxD,GAEN,CAQAC,gBAAAA,GACE,IAAIpnB,IAAAA,OAOJ,GAAIb,IAAAA,KAAgBh9C,SAASlkG,KAAK0I,MAAO,CAIvC,IAAK1I,KAAK0xJ,SAAS,WAAanO,GAAQ6lB,MAAQjqK,OAAO0M,KAAKu9J,KAAK/qK,OAAS,EAExE,YADA2B,KAAKk7H,QAAQ,eAMf,MAAMmuC,EAASnoB,IAAAA,cAAyB,UACxCmoB,EAAOt9J,IAAM/L,KAAK0xJ,SAAS,WAAa,iDACxC2X,EAAOpsK,OAAS,KAOd+C,KAAKk7H,QAAQ,cAAc,EAE7BmuC,EAAOnsK,QAAU,KAOf8C,KAAKk7H,QAAQ,aAAa,EAE5Bl7H,KAAKg7H,GAAG,WAAW,KACjBquC,EAAOpsK,OAAS,KAChBosK,EAAOnsK,QAAU,IAAI,IAIvB6kJ,IAAAA,QAAkB,EAClB/hJ,KAAK0I,KAAKa,WAAW3C,YAAYyiK,EACnC,MACErpK,KAAKqxJ,MAAMrxJ,KAAKmpK,iBAEpB,CAMA5B,iBAAAA,GACE,MAAMpI,EAASn/J,KAAKs8J,aACdgN,EAAetpK,KAAKupK,mBACpBC,EAAiB7xK,GAAKwnK,EAAOE,SAAS1nK,EAAE85F,OACxCg4E,EAAoB9xK,GAAKwnK,EAAOI,YAAY5nK,EAAE85F,OACpD63E,EAAatuC,GAAG,WAAYwuC,GAC5BF,EAAatuC,GAAG,cAAeyuC,GAC/BzpK,KAAKmpK,mBACL,MAAMO,EAAgBA,IAAM1pK,KAAKk7H,QAAQ,mBACnCyuC,EAAoBA,KACxBD,IACA,IAAK,IAAI3rK,EAAI,EAAGA,EAAIohK,EAAO9gK,OAAQN,IAAK,CACtC,MAAM0zF,EAAQ0tE,EAAOphK,GACrB0zF,EAAM0B,oBAAoB,YAAau2E,GACpB,YAAfj4E,EAAM6c,MACR7c,EAAMyB,iBAAiB,YAAaw2E,EAExC,GAEFC,IACAxK,EAAOjsE,iBAAiB,SAAUy2E,GAClCxK,EAAOjsE,iBAAiB,WAAYy2E,GACpCxK,EAAOjsE,iBAAiB,cAAey2E,GACvC3pK,KAAKg7H,GAAG,WAAW,WACjBsuC,EAAaruC,IAAI,WAAYuuC,GAC7BF,EAAaruC,IAAI,cAAewuC,GAChCtK,EAAOhsE,oBAAoB,SAAUw2E,GACrCxK,EAAOhsE,oBAAoB,WAAYw2E,GACvCxK,EAAOhsE,oBAAoB,cAAew2E,GAC1C,IAAK,IAAI5rK,EAAI,EAAGA,EAAIohK,EAAO9gK,OAAQN,IAAK,CACxBohK,EAAOphK,GACfo1F,oBAAoB,YAAau2E,EACzC,CACF,GACF,CAiBAE,YAAAA,CAAaxJ,EAAMtyB,EAAOtL,GACxB,IAAK49B,EACH,MAAM,IAAI3mK,MAAM,mDAElB,OAznBJ,SAA2BkoF,EAAMy+E,EAAMtyB,EAAOtL,GAAwB,IAAdlpI,EAAO2Q,UAAA5L,OAAA,QAAA/D,IAAA2P,UAAA,GAAAA,UAAA,GAAG,CAAC,EACjE,MAAMk1J,EAASx9E,EAAK26E,aACpBhjK,EAAQ8mK,KAAOA,EACXtyB,IACFx0I,EAAQw0I,MAAQA,GAEdtL,IACFlpI,EAAQkpI,SAAWA,GAErBlpI,EAAQ4iK,KAAOv6E,EACf,MAAM8P,EAAQ,IAAI00E,GAAIrtJ,KAAKssJ,WAAW9rK,GAEtC,OADA6lK,EAAOE,SAAS5tE,GACTA,CACT,CA4mBWo4E,CAAkB7pK,KAAMogK,EAAMtyB,EAAOtL,EAC9C,CAuBAsnC,qBAAAA,CAAsBxwK,GACpB,MAAMm4F,EAAQ+xD,GAAQlqJ,EAAS,CAC7B4iK,KAAMl8J,OAER,OAAO,IAAIylK,GAAOE,aAAaP,WAAW3zE,EAC5C,CAmBA+qE,kBAAAA,GAAgD,IAA7BljK,EAAO2Q,UAAA5L,OAAA,QAAA/D,IAAA2P,UAAA,GAAAA,UAAA,GAAG,CAAC,EAAG8/J,EAAa9/J,UAAA5L,OAAA,EAAA4L,UAAA,QAAA3P,EAC5C,MAAM0vK,EAAmBhqK,KAAK8pK,sBAAsBxwK,GAYpD,MAX6B,mBAAlBywK,IACTA,GAAgB,GAIlB/pK,KAAKiqK,qBAAqBnE,iBAAiBkE,GAC3ChqK,KAAKupK,mBAAmBlK,SAAS2K,EAAiBv4E,QAC5B,IAAlBs4E,GAEF/pK,KAAKqxJ,OAAM,IAAMrxJ,KAAKwnK,sBAAsBnI,SAAS2K,EAAiBv4E,SAEjEu4E,CACT,CAQAxB,qBAAAA,CAAsB/2E,GACpB,MAAMs0E,EAAe/lK,KAAKiqK,qBAAqBjE,wBAAwBv0E,GAGvEzxF,KAAKiqK,qBAAqB/D,oBAAoBH,GAC9C/lK,KAAKupK,mBAAmBhK,YAAY9tE,GACpCzxF,KAAKwnK,sBAAsBjI,YAAY9tE,EACzC,CAaAy4E,uBAAAA,GACE,MAAO,CAAC,CACV,CAgBAC,uBAAAA,GACE,OAAO9/D,QAAQ+/D,QACjB,CAQAC,uBAAAA,GACE,OAAO,CACT,CAOAC,0BAAAA,GAA8B,CAQ9B3G,yBAAAA,CAA0Br3E,GACxB,MAAM51E,EAAKm1I,KAYX,OAXK7rJ,KAAKo1J,UAAYp1J,KAAK09J,UACzB19J,KAAK8mK,eAAe/lK,IAAI2V,GACxB1W,KAAKmtJ,IAAI,WAAW,KACdntJ,KAAK8mK,eAAepmK,IAAIgW,KAC1B1W,KAAK8mK,eAAe7lK,OAAOyV,GAC3B41E,IACF,KAGFtsF,KAAKk4J,2BAA2BxhJ,EAAI41E,GAE/B51E,CACT,CAOAwtJ,wBAAAA,CAAyBxtJ,GACnB1W,KAAK8mK,eAAepmK,IAAIgW,GAC1B1W,KAAK8mK,eAAe7lK,OAAOyV,GAE3B1W,KAAKm4J,0BAA0BzhJ,EAEnC,CAOA6zJ,SAAAA,GAAa,CAObC,WAAAA,GAAe,CAOfC,cAAAA,GAAkB,CAUlBC,yBAAAA,CAA0BC,GAAW,CAUrCC,yBAAAA,CAA0BD,GAAW,CAkBrCE,WAAAA,CAAYC,GACV,MAAO,EACT,CAYA,kBAAOD,CAAYC,GACjB,MAAO,EACT,CAWA,oBAAOC,CAAcC,EAAQ1xK,GAC3B,OAAO07J,GAAK6V,YAAYG,EAAO3zK,KACjC,CAcA,aAAO69J,CAAOb,GACZ,OAAOA,EAAUj1J,qBAAqB41J,IAAQX,aAAqBW,IAAQX,IAAcW,EAC3F,CAWA,mBAAOiW,CAAa1rK,EAAM28J,GAIxB,GAHKlH,GAAKkW,SACRlW,GAAKkW,OAAS,CAAC,IAEZlW,GAAKE,OAAOgH,GACf,MAAM,IAAIziK,MAAM,QAAQ8F,oBAE1B,IAAKy1J,GAAK6V,YACR,MAAM,IAAIpxK,MAAM,uDAElB,IAAKu7J,GAAK+V,cACR,MAAM,IAAItxK,MAAM,yDASlB,OAPA8F,EAAOuxJ,GAAcvxJ,GACrBy1J,GAAKkW,OAAO3rK,GAAQ28J,EACpBlH,GAAKkW,OAAOl0K,GAAYuI,IAAS28J,EACpB,SAAT38J,GAEFy1J,GAAKmW,kBAAkBhyK,KAAKoG,GAEvB28J,CACT,CAWA,cAAOkP,CAAQ7rK,GACb,GAAKA,EAGL,OAAIy1J,GAAKkW,QAAUlW,GAAKkW,OAAO3rK,GACtBy1J,GAAKkW,OAAO3rK,IAErBA,EAAOuxJ,GAAcvxJ,GACjBwiJ,KAAYA,IAAAA,SAAoBA,IAAAA,QAAiBxiJ,IACnD6hJ,GAAM/1I,KAAK,OAAO9L,8GACXwiJ,IAAAA,QAAiBxiJ,SAF1B,EAIF,EAsCF4mK,GAAI3S,MAAM76J,SAAQ,SAAU4G,GAC1B,MAAMwlF,EAAQohF,GAAI5mK,GAClBy1J,GAAK51J,UAAU2lF,EAAMwgF,YAAc,WAEjC,OADAvlK,KAAK+kF,EAAMygF,aAAexlK,KAAK+kF,EAAMygF,cAAgB,IAAIzgF,EAAMkgF,UACxDjlK,KAAK+kF,EAAMygF,YACpB,CACF,IAgCAxQ,GAAK51J,UAAUisK,uBAAwB,EAQvCrW,GAAK51J,UAAUksK,qBAAsB,EASrCtW,GAAK51J,UAAUmsK,0BAA2B,EAW1CvW,GAAK51J,UAAUosK,sBAAuB,EAStCxW,GAAK51J,UAAU4nK,wBAAyB,EAYxChS,GAAK51J,UAAUqsK,mBAAoB,EASnCzW,GAAK51J,UAAU8nK,0BAA2B,EAS1ClS,GAAK51J,UAAUkoK,0BAA2B,EAQ1CtS,GAAK51J,UAAUssK,4BAA6B,EAc5C1W,GAAK2W,mBAAqB,SAAUC,GAUlCA,EAAMC,sBAAwB,SAAUC,EAASjzK,GAC/C,IAAImzJ,EAAW4f,EAAMG,eAChB/f,IACHA,EAAW4f,EAAMG,eAAiB,SAEtBzxK,IAAVzB,IAEFA,EAAQmzJ,EAAS3tJ,QAEnB2tJ,EAAS5kC,OAAOvuH,EAAO,EAAGizK,EAC5B,EAYAF,EAAMf,YAAc,SAAUxzK,GAC5B,MAAM20J,EAAW4f,EAAMG,gBAAkB,GACzC,IAAIC,EACJ,IAAK,IAAIjuK,EAAI,EAAGA,EAAIiuJ,EAAS3tJ,OAAQN,IAEnC,GADAiuK,EAAMhgB,EAASjuJ,GAAG8sK,YAAYxzK,GAC1B20K,EACF,OAAOA,EAGX,MAAO,EACT,EAiBAJ,EAAMK,oBAAsB,SAAUznK,EAAQlL,GAC5C,MAAM0yJ,EAAW4f,EAAMG,gBAAkB,GACzC,IAAIC,EACJ,IAAK,IAAIjuK,EAAI,EAAGA,EAAIiuJ,EAAS3tJ,OAAQN,IAEnC,GADAiuK,EAAMhgB,EAASjuJ,GAAGmuK,gBAAgB1nK,EAAQlL,GACtC0yK,EACF,OAAOhgB,EAASjuJ,GAGpB,OAAO,IACT,EAcA6tK,EAAMb,cAAgB,SAAUC,EAAQ1xK,GACtC,MAAMk5G,EAAKo5D,EAAMK,oBAAoBjB,EAAQ1xK,GAC7C,OAAIk5G,EACKA,EAAG05D,gBAAgBlB,EAAQ1xK,GAE7B,EACT,EAMmB,CAAC,WAAY,UAAW,YAgBhCX,SAAQ,SAAU+1J,GAC3B,MAAMyd,EAAansK,KAAK0uJ,GACE,oBAAfyd,IAGXnsK,KAAK0uJ,GAAU,WACb,OAAI1uJ,KAAKosK,gBAAkBpsK,KAAKosK,eAAe1d,GACtC1uJ,KAAKosK,eAAe1d,GAAQ52J,MAAMkI,KAAKosK,eAAgBniK,WAEzDkiK,EAAWr0K,MAAMkI,KAAMiK,UAChC,EACF,GAAG2hK,EAAMxsK,WAUTwsK,EAAMxsK,UAAUitK,UAAY,SAAU7nK,GACpC,IAAIguG,EAAKo5D,EAAMK,oBAAoBznK,EAAQxE,KAAK0xJ,UAC3Cl/C,IAGCo5D,EAAMU,oBACR95D,EAAKo5D,EAAMU,oBAEXlrB,GAAMn5I,MAAM,oDAKhBjI,KAAK6mK,uBACL7mK,KAAKi7H,IAAI,UAAWj7H,KAAK4mK,uBACrBp0D,IAAOo5D,EAAMU,sBACftsK,KAAKusK,eAAiB/nK,GAExBxE,KAAKosK,eAAiB55D,EAAGg6D,aAAahoK,EAAQxE,KAAMA,KAAK0xJ,UACzD1xJ,KAAKmtJ,IAAI,UAAWntJ,KAAK4mK,sBAC3B,EAOAgF,EAAMxsK,UAAUynK,qBAAuB,WAIjC7mK,KAAKusK,iBACPvsK,KAAKuoK,YAAY,CAAC,QAAS,UAC3BvoK,KAAKusK,eAAiB,MAIxBvsK,KAAKyoK,wBACDzoK,KAAKosK,iBACHpsK,KAAKosK,eAAe7wC,SACtBv7H,KAAKosK,eAAe7wC,UAEtBv7H,KAAKosK,eAAiB,KAE1B,CACF,EAIAhb,GAAYgI,kBAAkB,OAAQpE,IACtCA,GAAKiW,aAAa,OAAQjW,IAO1BA,GAAKmW,kBAAoB,GAUzB,MAAMsB,GAAc,CAAC,EACfC,GAAsB,CAAC,EACvBC,GAAa,CAAC,EAsDpB,SAASN,GAAUjhB,EAAQr/I,EAAKjN,GAC9BssJ,EAAOtvJ,YAAW,IAAM8wK,GAAgB7gK,EAAK0gK,GAAY1gK,EAAI1U,MAAOyH,EAAMssJ,IAAS,EACrF,CAiFA,SAASyhB,GAAQC,EAAY5Q,EAAM9/J,GAAoB,IAAZ2wK,EAAG9iK,UAAA5L,OAAA,QAAA/D,IAAA2P,UAAA,GAAAA,UAAA,GAAG,KAC/C,MAAM+iK,EAAa,OAASlc,GAAc10J,GACpC6wK,EAAkBH,EAAW51K,OAAOg2K,GAAmBF,GAAaD,GACpEI,EAAaF,IAAoBN,GAGjC7xE,EAAcqyE,EAAa,KAAOjR,EAAK9/J,GAAQ6wK,GAErD,OAoDF,SAAsBG,EAAKhxK,EAAQ9E,EAAO61K,GACxC,IAAK,IAAIpvK,EAAIqvK,EAAI/uK,OAAS,EAAGN,GAAK,EAAGA,IAAK,CACxC,MAAMsvK,EAAKD,EAAIrvK,GACXsvK,EAAGjxK,IACLixK,EAAGjxK,GAAQ+wK,EAAY71K,EAE3B,CACF,CA5DEg2K,CAAaR,EAAY1wK,EAAQ0+F,EAAaqyE,GACvCryE,CACT,CAOA,MAAMyyE,GAAiB,CACrBvS,SAAU,EACViJ,YAAa,EACblnC,SAAU,EACVywC,MAAO,EACP5E,OAAQ,EACRlL,OAAQ,EACR+P,SAAU,EACVC,OAAQ,EACRC,MAAO,GAQHC,GAAiB,CACrB5E,eAAgB,EAChB6E,SAAU,EACVC,UAAW,GAQPC,GAAmB,CACvBzc,KAAM,EACNsM,MAAO,GAET,SAASsP,GAAmB9wK,GAC1B,MAAO,CAAC9E,EAAO+1K,IAET/1K,IAAUq1K,GACLA,GAELU,EAAGjxK,GACEixK,EAAGjxK,GAAQ9E,GAEbA,CAEX,CAkDA,SAASs1K,KAAoF,IAApE7gK,EAAG9B,UAAA5L,OAAA,QAAA/D,IAAA2P,UAAA,GAAAA,UAAA,GAAG,CAAC,EAAG6iK,EAAU7iK,UAAA5L,OAAA,QAAA/D,IAAA2P,UAAA,GAAAA,UAAA,GAAG,GAAInL,EAAImL,UAAA5L,OAAA,EAAA4L,UAAA,QAAA3P,EAAE8wJ,EAAMnhJ,UAAA5L,OAAA,EAAA4L,UAAA,QAAA3P,EAAEoiI,EAAGzyH,UAAA5L,OAAA,QAAA/D,IAAA2P,UAAA,GAAAA,UAAA,GAAG,GAAI+jK,EAAO/jK,UAAA5L,OAAA,QAAA/D,IAAA2P,UAAA,IAAAA,UAAA,GACjF,MAAOgkK,KAAcC,GAAUpB,EAG/B,GAAyB,kBAAdmB,EACTrB,GAAgB7gK,EAAK0gK,GAAYwB,GAAYnvK,EAAMssJ,EAAQ1uB,EAAKsxC,QAI3D,GAAIC,EAAW,CACpB,MAAMZ,EA/BV,SAA4BjiB,EAAQ6iB,GAClC,MAAMb,EAAMV,GAAoBthB,EAAO10I,MACvC,IAAI22J,EAAK,KACT,QAAY/yK,IAAR8yK,GAA6B,OAARA,EAGvB,OAFAC,EAAKY,EAAU7iB,GACfshB,GAAoBthB,EAAO10I,MAAQ,CAAC,CAACu3J,EAAWZ,IACzCA,EAET,IAAK,IAAItvK,EAAI,EAAGA,EAAIqvK,EAAI/uK,OAAQN,IAAK,CACnC,MAAOowK,EAAKC,GAAOhB,EAAIrvK,GACnBowK,IAAQF,IAGZZ,EAAKe,EACP,CAKA,OAJW,OAAPf,IACFA,EAAKY,EAAU7iB,GACfgiB,EAAIj0K,KAAK,CAAC80K,EAAWZ,KAEhBA,CACT,CAWegB,CAAmBjjB,EAAQ6iB,GAGtC,IAAKZ,EAAGhB,UAEN,OADA3vC,EAAIvjI,KAAKk0K,GACFT,GAAgB7gK,EAAKmiK,EAAQpvK,EAAMssJ,EAAQ1uB,EAAKsxC,GAEzDX,EAAGhB,UAAUltK,OAAOmF,OAAO,CAAC,EAAGyH,IAAM,SAAUvV,EAAK83K,GAGlD,GAAI93K,EACF,OAAOo2K,GAAgB7gK,EAAKmiK,EAAQpvK,EAAMssJ,EAAQ1uB,EAAKsxC,GAIzDtxC,EAAIvjI,KAAKk0K,GAITT,GAAgB0B,EAAMviK,EAAI1U,OAASi3K,EAAKj3K,KAAO62K,EAASzB,GAAY6B,EAAKj3K,MAAOyH,EAAMssJ,EAAQ1uB,EAAKsxC,EACrG,GACF,MAAWE,EAAO7vK,OAChBuuK,GAAgB7gK,EAAKmiK,EAAQpvK,EAAMssJ,EAAQ1uB,EAAKsxC,GACvCA,EACTlvK,EAAKiN,EAAK2wH,GAEVkwC,GAAgB7gK,EAAK0gK,GAAY,KAAM3tK,EAAMssJ,EAAQ1uB,GAAK,EAE9D,CAWA,MAAM6xC,GAAgB,CACpBC,KAAM,YACNC,IAAK,YACLtoC,IAAK,YACLsZ,IAAK,YACLivB,IAAK,YACLnvB,IAAK,mBACLovB,IAAK,YACLtvB,IAAK,aACLD,IAAK,YACLwvB,IAAK,cACL7uB,KAAM,aACN8uB,IAAK,YACL3uB,IAAK,YACL4uB,KAAM,wBACNp1B,IAAK,uBACLq1B,IAAK,aACLC,KAAM,aACNC,IAAK,YACLC,IAAK,YACLC,IAAK,gBACLC,KAAM,cAYFC,GAAc,WAClB,MAAMC,EAAMxN,GADmB73J,UAAA5L,OAAA,QAAA/D,IAAA2P,UAAA,GAAAA,UAAA,GAAG,IAGlC,OADiBskK,GAAce,EAAIt4K,gBAChB,EACrB,EA6DMu4K,GAAe,SAAUxjK,GAE7B,GAAI9S,MAAMC,QAAQ6S,GAAM,CACtB,IAAIyjK,EAAS,GACbzjK,EAAIpT,SAAQ,SAAU82K,GACpBA,EAASF,GAAaE,GAClBx2K,MAAMC,QAAQu2K,GAChBD,EAASA,EAAO9nE,OAAO+nE,GACdxlC,GAASwlC,IAClBD,EAAOr2K,KAAKs2K,EAEhB,IACA1jK,EAAMyjK,CACR,MAEEzjK,EAFwB,kBAARA,GAAoBA,EAAIxU,OAElC,CAACm4K,GAAU,CACf3jK,SAEOk+H,GAASl+H,IAA2B,kBAAZA,EAAIA,KAAoBA,EAAIA,KAAOA,EAAIA,IAAIxU,OAEtE,CAACm4K,GAAU3jK,IAGX,GAER,OAAOA,CACT,EAUA,SAAS2jK,GAAU3jK,GACjB,IAAKA,EAAI1U,KAAM,CACb,MAAMs4K,EAAWN,GAAYtjK,EAAIA,KAC7B4jK,IACF5jK,EAAI1U,KAAOs4K,EAEf,CACA,OAAO5jK,CACT,CAOA,MAAM6jK,GAAc3qB,GAAW,MAAQC,GAAW,IAAM,EAClD2qB,GAAqB,CACzBC,MAAO,CACLxe,KAAM,IACNsM,MAAO,GACPv2D,GAAI,IACJ0oE,GAAI,IACJC,KAAMJ,IAERpc,MAAO,CACL,IAAK,OACL,GAAI,QACJ,IAAK,KACL,IAAK,KACL,CAACoc,IAAc,QAEjBK,UAAAA,CAAW1tE,EAAO2tE,GAEhB,OADAA,EAAUA,EAAQl5K,iBACdgJ,KAAKwzJ,MAAMjxD,EAAMnI,UAAYp6F,KAAKwzJ,MAAMjxD,EAAMnI,WAAa81E,EAIjE,EACAC,YAAAA,CAAa5tE,GACX,GAAIviG,KAAKwzJ,MAAMjxD,EAAMnI,SACnB,OAAOp6F,KAAKwzJ,MAAMjxD,EAAMnI,SACnB,GAAIp6F,KAAK8vK,MAAMvtE,EAAM5kG,MAAO,CACjC,MAAMA,EAAOqC,KAAK8vK,MAAMvtE,EAAM5kG,MAC9B,OAAOqC,KAAKwzJ,MAAM71J,EACpB,CACA,OAAO,IACT,GAoBF,MAAMyyK,WAA0BriB,GAQ9BzuJ,WAAAA,CAAY8rJ,GACVrvB,QACA/7H,KAAKuxJ,QAAUnG,EACfprJ,KAAKqwK,oBAAsB,GAC3BrwK,KAAKswK,cAAe,EACpBtwK,KAAKuwK,WAAY,EACjBvwK,KAAKwwK,WAAaxwK,KAAKwwK,WAAWzxK,KAAKiB,MACvCA,KAAKywK,sBAAwB,IAC/B,CAMApqK,KAAAA,GAEMrG,KAAKswK,eAKTtwK,KAAKuxJ,QAAQv2B,GAAG,UAAWh7H,KAAKwwK,YAChCxwK,KAAKuxJ,QAAQv2B,GAAG,eAAgBh7H,KAAKwwK,YAErCxwK,KAAKuxJ,QAAQv2B,GAAG,kBAAkB,KAChCh7H,KAAKgmG,MAAMhmG,KAAK0wK,4BAA4B,GAAG,IAEjD1wK,KAAKuxJ,QAAQv2B,GAAG,cAAc,KAC5Bh7H,KAAK2wK,kBAAkB,IAEzB3wK,KAAKuxJ,QAAQv2B,GAAG,UAAWh7H,KAAK4wK,mBAAmB7xK,KAAKiB,OACxDA,KAAKuxJ,QAAQv2B,GAAG,WAAYh7H,KAAK6wK,kBAAkB9xK,KAAKiB,OACxDA,KAAKswK,cAAe,EAChBtwK,KAAKuxJ,QAAQuf,cACf9wK,KAAKuxJ,QAAQuf,aAAa91C,GAAG,kBAAkB,KAC7Ch7H,KAAK0wK,4BACD1wK,KAAKqwK,oBAAoBhyK,SAGvB2B,KAAKqwK,oBAAoBhyK,OAAS,EAIpC2B,KAAKqwK,oBAAoB,GAAGrqE,QAK5BhmG,KAAKqwK,oBAAoB,GAAGrqE,QAEhC,IAGN,CAMA+qE,IAAAA,GACE/wK,KAAKuxJ,QAAQt2B,IAAI,UAAWj7H,KAAKwwK,YACjCxwK,KAAKswK,cAAe,CACtB,CASAE,UAAAA,CAAWjuE,GAET,MAAMyuE,EAAczuE,EAAMs8D,cAAgBt8D,EAAMs8D,cAAgBt8D,EAChE,GAAI,CAAC,YAAa,aAAc,UAAW,aAAanY,SAAS4mF,EAAYj4K,KAAM,CAEjF,GAAIiH,KAAKuwK,UACP,OAEFS,EAAYh2E,iBAGZ,MAAMi2E,EAAYD,EAAYj4K,IAAI8f,UAAU,GAAG7hB,cAC/CgJ,KAAKkxK,KAAKD,EACZ,MAAO,GAAIpB,GAAmBI,WAAWe,EAAa,SAAWnB,GAAmBI,WAAWe,EAAa,UAAYnB,GAAmBI,WAAWe,EAAa,OAASnB,GAAmBI,WAAWe,EAAa,MAAO,CAE5NA,EAAYh2E,iBACZ,MAAMka,EAAS26D,GAAmBM,aAAaa,GAC/ChxK,KAAKmxK,oBAAoBj8D,EAC3B,MAAW26D,GAAmBI,WAAWe,EAAa,SAAWzuE,EAAMh+F,QAAUg+F,EAAMh+F,OAAO24J,cAC5F8T,EAAYh2E,iBACZuH,EAAMh+F,OAAOu4J,QAEjB,CAUAqU,mBAAAA,CAAoBp4K,GAClB,GAAIiH,KAAKuxJ,QACP,OAAQx4J,GACN,IAAK,OACCiH,KAAKuxJ,QAAQmM,UACf19J,KAAKuxJ,QAAQD,OAEf,MACF,IAAK,QACEtxJ,KAAKuxJ,QAAQmM,UAChB19J,KAAKuxJ,QAAQqM,QAEf,MACF,IAAK,KACH59J,KAAKoxK,UAAUpxK,KAAKuxJ,QAAQ0S,cAtIf,GAuIb,MACF,IAAK,KACHjkK,KAAKoxK,UAAUpxK,KAAKuxJ,QAAQ0S,cAzIf,GA6IrB,CASAmN,SAAAA,CAAUpN,GACJhkK,KAAKuxJ,QAAQ8f,aAAerxK,KAAKuxJ,QAAQ8f,YAAYC,UACvDtxK,KAAKuxJ,QAAQ8f,YAAYE,qBAE3BvxK,KAAKuxJ,QAAQ0S,YAAYD,EAC3B,CAMApG,KAAAA,GACE59J,KAAKuwK,WAAY,CACnB,CAMAiB,MAAAA,GACExxK,KAAKuwK,WAAY,CACnB,CAcAM,iBAAAA,CAAkBtuE,GAChB,MAAMkvE,EAAqBlvE,EAAMrF,cACjC,IAAIw0E,EAAqB,KACzB,MAAMC,EAAmB3xK,KAAK4xK,oBAAoBrvE,EAAMh+F,QACpDktK,IACFC,EAAqB9/B,QAAQ6/B,EAAmBI,QAAQ,cAGpDJ,EAAmBvqB,UAAUhjD,SAAS,6BAA+BlkG,KAAKuwK,WAC5EvwK,KAAK8xK,0BAGJvvE,EAAM5H,cAAcuJ,SAAS3B,EAAMrF,gBAAmBw0E,IAAuBD,IAC5EE,GAAgD,gBAA5BA,EAAiBpyK,OACvCS,KAAK2wK,oBAEL3wK,KAAK49J,QACD+T,GAAoBA,EAAiBjpK,OAEvC1I,KAAKywK,sBAAwBkB,IAIrC,CAOAf,kBAAAA,GACM5wK,KAAK4xK,uBAAyB5xK,KAAK4xK,sBAAsBlZ,kBAC3D14J,KAAKwxK,QAET,CAQAd,yBAAAA,GACE,MAAMtlB,EAASprJ,KAAKuxJ,QACd8e,EAAsB,GAU5B,SAAS0B,EAA4BC,GACnC,IAAK,MAAMj0K,KAAKi0K,EACVj0K,EAAEF,eAAe,QAAUE,EAAE26J,kBAAoB36J,EAAE46J,0BAA0B56J,EAAE2K,OACjF2nK,EAAoBl3K,KAAK4E,GAEvBA,EAAEF,eAAe,cAAgBE,EAAE8zJ,UAAUxzJ,OAAS,GACxD0zK,EAA4Bh0K,EAAE8zJ,UAGpC,CA0EA,OAvEAzG,EAAOyG,UAAUl5J,SAAQrB,IACvB,GAAIA,EAAMuG,eAAe,OAAQ,CAE/B,GAAIvG,EAAMohK,gBAAkBphK,EAAMqhK,2BAA6BrhK,EAAMohK,kBAAoBphK,EAAMqhK,0BAA0BrhK,EAAMoR,MAE7H,YADA2nK,EAAoBl3K,KAAK7B,GAGhBA,EAAMuG,eAAe,cAAgBvG,EAAMu6J,UAAUxzJ,OAAS,EACvE0zK,EAA4Bz6K,EAAMu6J,WAEzBv6J,EAAMuG,eAAe,UAAYvG,EAAM26K,MAAM5zK,OAAS,EAC/D0zK,EAA4Bz6K,EAAM26K,OAEzBjyK,KAAKkyK,qBAAqB56K,IACnC+4K,EAAoBl3K,KAAK7B,EAE7B,CAGA,GAAoB,iBAAhBA,EAAM+2J,OAA4B/2J,EAAMylK,QAAS,CACnD,MAAMoV,EAAkB76K,EAAMg5J,IAAI6D,cAAc,mCAChD,GAAIge,EAAiB,CACEA,EAAgB9qD,iBAAiB,UACzC1uH,SAAQ,CAAC8S,EAAS5S,KAE7Bw3K,EAAoBl3K,KAAK,CACvBoG,KAAMA,IACG,eAAiB1G,EAAQ,GAElC6P,GAAIA,IAAM+C,EACV+qJ,aAAcA,KACZ,MAAMz9F,EAAOttD,EAAQ+iH,wBAyBrB,MAAO,CACLioC,mBAvByB,CACzBjuD,EAAGzvC,EAAKyvC,EACRqH,EAAG92C,EAAK82C,EACRjQ,MAAO7mC,EAAK6mC,MACZC,OAAQ9mC,EAAK8mC,OACb9yB,IAAKhU,EAAKgU,IACV2pF,MAAO39F,EAAK29F,MACZp0I,OAAQy2C,EAAKz2C,OACbujF,KAAM9sC,EAAK8sC,MAgBX8wD,OAZa,CACbnuD,EAAGzvC,EAAK8sC,KAAO9sC,EAAK6mC,MAAQ,EAC5BiQ,EAAG92C,EAAKgU,IAAMhU,EAAK8mC,OAAS,EAC5BD,MAAO,EACPC,OAAQ,EACR9yB,IAAKhU,EAAKgU,IAAMhU,EAAK8mC,OAAS,EAC9B62D,MAAO39F,EAAK8sC,KAAO9sC,EAAK6mC,MAAQ,EAChCt9E,OAAQy2C,EAAKgU,IAAMhU,EAAK8mC,OAAS,EACjCgG,KAAM9sC,EAAK8sC,KAAO9sC,EAAK6mC,MAAQ,GAKhC,EAGH+4D,0BAA2BA,KAAM,EACjCD,eAAgBhwJ,IAAM,EACtBs9F,MAAOA,IAAMv6F,EAAQu6F,SACrB,GAEN,CACF,KAEFhmG,KAAKqwK,oBAAsBA,EACpBrwK,KAAKqwK,mBACd,CAQA6B,oBAAAA,CAAqB7d,GAwBnB,OAAIA,EAAU3rJ,KAbd,SAAS0pK,EAAuBvsK,GAC9B,GAAIwuJ,EAAUqE,eAAe7yJ,IAASwuJ,EAAUsE,0BAA0B9yJ,GACxE,OAAOA,EAET,IAAK,IAAI9H,EAAI,EAAGA,EAAI8H,EAAKknF,SAAS1uF,OAAQN,IAAK,CAC7C,MACMs0K,EAAgBD,EADRvsK,EAAKknF,SAAShvF,IAE5B,GAAIs0K,EACF,OAAOA,CAEX,CACA,OAAO,IACT,CAESD,CAAuB/d,EAAU3rJ,MAEnC,IACT,CAaAkpK,mBAAAA,CAAoBrtK,GAClBvE,KAAK0wK,4BAEL,MAAM4B,EAAU/tK,GAAUk9E,SAASkK,cACnC,GAAI3rF,KAAKqwK,oBAAoBhyK,OAC3B,IAAK,MAAMN,KAAKiC,KAAKqwK,oBAEnB,GAAItyK,EAAE2K,OAAS4pK,EACb,OAAOv0K,CAIf,CAQAgD,GAAAA,CAAIszJ,GACF,MAAMgc,EAAsB,IAAIrwK,KAAKqwK,qBACjChc,EAAUx2J,eAAe,QAAUw2J,EAAUqE,kBAAoBrE,EAAUsE,0BAA0BtE,EAAU3rJ,OACjH2nK,EAAoBl3K,KAAKk7J,GAE3Br0J,KAAKqwK,oBAAsBA,EAE3BrwK,KAAKk7H,QAAQ,CACX7jI,KAAM,6BACNg5K,oBAAqBrwK,KAAKqwK,qBAE9B,CAOA9/J,MAAAA,CAAO8jJ,GACL,IAAK,IAAIt2J,EAAI,EAAGA,EAAIiC,KAAKqwK,oBAAoBhyK,OAAQN,IACnD,GAAIiC,KAAKqwK,oBAAoBtyK,GAAGwB,SAAW80J,EAAU90J,OAOnD,OANAS,KAAKqwK,oBAAoBjpD,OAAOrpH,EAAG,QAEnCiC,KAAKk7H,QAAQ,CACX7jI,KAAM,6BACNg5K,oBAAqBrwK,KAAKqwK,qBAKlC,CAKAlvK,KAAAA,GAEMnB,KAAKqwK,oBAAoBhyK,OAAS,IAEpC2B,KAAKqwK,oBAAsB,GAG3BrwK,KAAKk7H,QAAQ,CACX7jI,KAAM,6BACNg5K,oBAAqBrwK,KAAKqwK,sBAGhC,CAOAa,IAAAA,CAAKD,GACH,MAAMsB,EAA0BvyK,KAAK4xK,sBACrC,IAAKW,EACH,OAEF,MAAMC,EAAmBD,EAAwB/b,eAC3Cic,EAAazyK,KAAKqwK,oBAAoB1kK,QAAO0oJ,GAAaA,IAAcke,GAA2BvyK,KAAK0yK,eAAeF,EAAiB/b,mBAAoBpC,EAAUmC,eAAeC,mBAAoBwa,KACzM0B,EAAgB3yK,KAAK4yK,mBAAmBJ,EAAiB7b,OAAQ8b,EAAYxB,GAC/E0B,EACF3yK,KAAKgmG,MAAM2sE,GAEX3yK,KAAKk7H,QAAQ,CACX7jI,KAAM,2BACN45K,YACA4B,iBAAkBN,GAGxB,CAWAK,kBAAAA,CAAmBE,EAAeL,EAAYxB,GAC5C,IAAI8B,EAAclwD,IACd8vD,EAAgB,KACpB,IAAK,MAAMK,KAAaP,EAAY,CAClC,MAAMQ,EAAkBD,EAAUxc,eAAeG,OAC3Cuc,EAAWlzK,KAAKmzK,mBAAmBL,EAAeG,EAAiBhC,GACrEiC,EAAWH,IACbA,EAAcG,EACdP,EAAgBK,EAEpB,CACA,OAAOL,CACT,CAWAD,cAAAA,CAAeU,EAASC,EAAYpC,GAClC,OAAQA,GACN,IAAK,QACH,OAAOoC,EAAWxtE,MAAQutE,EAAQ1c,MACpC,IAAK,OACH,OAAO2c,EAAW3c,OAAS0c,EAAQvtE,KACrC,IAAK,OACH,OAAOwtE,EAAWtmG,KAAOqmG,EAAQ9wJ,OACnC,IAAK,KACH,OAAO+wJ,EAAW/wJ,QAAU8wJ,EAAQrmG,IACtC,QACE,OAAO,EAEb,CAKA4jG,gBAAAA,GACE,GAAI3wK,KAAKywK,sBAAuB,CAEzBzwK,KAAKuxJ,QAAQ+hB,cAChBtzK,KAAKuxJ,QAAQ+hB,YAAW,GAE1BtzK,KAAK0wK,4BAIL,IAAK,IAAI3yK,EAAI,EAAGA,EAAIiC,KAAKqwK,oBAAoBhyK,OAAQN,IACnD,GAAIiC,KAAKqwK,oBAAoBtyK,GAAGwB,SAAWS,KAAKywK,sBAAsBlxK,OAEpE,YADAS,KAAKgmG,MAAMhmG,KAAKqwK,oBAAoBtyK,GAI1C,MACEiC,KAAKgmG,MAAMhmG,KAAK0wK,4BAA4B,GAEhD,CASA1qE,KAAAA,CAAMquD,GACqB,kBAAdA,IAGPA,EAAUsE,0BAA0BtE,EAAU3rJ,MAChD2rJ,EAAUruD,QACDhmG,KAAKkyK,qBAAqB7d,IACnCr0J,KAAKkyK,qBAAqB7d,GAAWruD,QAEzC,CAWAmtE,kBAAAA,CAAmBI,EAASC,EAASvC,GACnC,MAAMwC,EAAKnwK,KAAK0lI,IAAIuqC,EAAQ/qE,EAAIgrE,EAAQhrE,GAClCkrE,EAAKpwK,KAAK0lI,IAAIuqC,EAAQ1jE,EAAI2jE,EAAQ3jE,GACxC,IAAIqjE,EACJ,OAAQjC,GACN,IAAK,QACL,IAAK,OAEHiC,EAAWO,EAAU,IAALC,EAChB,MACF,IAAK,KAGHR,EAAgB,EAALQ,EAAc,GAALD,EACpB,MACF,IAAK,OAGHP,EAAgB,EAALQ,EAASD,EACpB,MACF,QACEP,EAAWO,EAAKC,EAEpB,OAAOR,CACT,CAQApB,qBAAAA,GACE,MAAMjb,EAAoB72J,KAC1B,IAAK,MAAMq0J,KAAawC,EAAkB6Z,4BACxC,GAAmC,oBAA/Brc,EAAU/0J,YAAYC,KAA4B,CACpDs3J,EAAkB7wD,MAAMquD,GACxB,KACF,CAEJ,EAgEFjD,GAAYgI,kBAAkB,cAjD9B,cAA0BhI,GAaxB9xJ,WAAAA,CAAY8rJ,EAAQ9xJ,EAAS+3J,GAU3B,GALAt1B,MAAMqvB,EAHW5H,GAAQ,CACvBiD,UAAU,GACTntJ,GACqB+3J,GAKnB/3J,EAAQw7J,cAAcpR,SAAoD,IAAzCpqJ,EAAQw7J,cAAcpR,QAAQrlJ,OAsBlE+sJ,EAAOr/I,IAAIzS,EAAQw7J,cAAcpR,cArBjC,IAAK,IAAI3lJ,EAAI,EAAG4sH,EAAIrxH,EAAQw7J,cAAc6e,UAAW51K,EAAI4sH,EAAEtsH,OAAQN,IAAK,CACtE,MAAM61K,EAAW9iB,GAAcnmC,EAAE5sH,IACjC,IAAIm+J,EAAOlH,GAAKoW,QAAQwI,GASxB,GALKA,IACH1X,EAAO9K,GAAYqD,aAAamf,IAI9B1X,GAAQA,EAAK/lJ,cAAe,CAC9Bi1I,EAAOyoB,UAAUD,GACjB,KACF,CACF,CAQJ,IAgBF,MAAME,WAA2B1iB,GAoB/B9xJ,WAAAA,CAAY8rJ,EAAQ9xJ,GAClByiI,MAAMqvB,EAAQ9xJ,GACV0G,KAAK0xJ,SAAS2M,aAChBr+J,KAAKq+J,YAAYr+J,KAAK0xJ,SAAS2M,aAEjCr+J,KAAK+zK,iBAAmBp8K,GAAKqI,KAAKg0K,gBAAgBr8K,GAClDqI,KAAKi0K,gBAAkBt8K,GAAKqI,KAAKk0K,eAAev8K,GAChDqI,KAAKm0K,aAAex8K,GAAKqI,KAAKo0K,YAAYz8K,GAC1CqI,KAAK48J,eAAiBjlK,GAAKqI,KAAK42J,cAAcj/J,GAC9CqI,KAAKg3J,gBACLh3J,KAAKK,QACP,CAiBAomJ,QAAAA,GAAmD,IAA1Cn8D,EAAGrgF,UAAA5L,OAAA,QAAA/D,IAAA2P,UAAA,GAAAA,UAAA,GAAG,MAAO86E,EAAK96E,UAAA5L,OAAA,QAAA/D,IAAA2P,UAAA,GAAAA,UAAA,GAAG,CAAC,EAAGkK,EAAUlK,UAAA5L,OAAA,QAAA/D,IAAA2P,UAAA,GAAAA,UAAA,GAAG,CAAC,EAC9C86E,EAAQ5lF,OAAOmF,OAAO,CACpB2sH,UAAWjxH,KAAKm1J,gBAChBviC,SAAU,GACT7tC,GACS,WAARuF,GACF82D,GAAMn5I,MAAM,yDAAyDqiF,6CAIvEn2E,EAAahV,OAAOmF,OAAO,CACzBuuH,KAAM,UACL1+G,GACHnU,KAAKq0K,UAAYtvF,EAAM6tC,SACvB,MAAMlqH,EAAK+9I,GAASn8D,EAAKvF,EAAO5wE,GAShC,OARKnU,KAAKuxJ,QAAQG,SAASmC,sBACzBnrJ,EAAG9B,YAAY6/I,GAAS,OAAQ,CAC9Bx1B,UAAW,wBACV,CACD,eAAe,KAGnBjxH,KAAKs0K,oBAAoB5rK,GAClBA,CACT,CACA6yH,OAAAA,GAEEv7H,KAAKu0K,eAAiB,KACtBx4C,MAAMR,SACR,CAWA+4C,mBAAAA,CAAoB5rK,GAWlB,OAVA1I,KAAKu0K,eAAiB9tB,GAAS,OAAQ,CACrCx1B,UAAW,oBACV,CAED,YAAa,WAEXvoH,GACFA,EAAG9B,YAAY5G,KAAKu0K,gBAEtBv0K,KAAKq+J,YAAYr+J,KAAKw0K,aAAc9rK,GAC7B1I,KAAKu0K,cACd,CAcAlW,WAAAA,CAAYvlJ,GAAsB,IAAhBpQ,EAAEuB,UAAA5L,OAAA,QAAA/D,IAAA2P,UAAA,GAAAA,UAAA,GAAGjK,KAAK0I,KAC1B,QAAapO,IAATwe,EACF,OAAO9Y,KAAKw0K,cAAgB,YAE9B,MAAMC,EAAgBz0K,KAAK2yJ,SAAS75I,GAGpC9Y,KAAKw0K,aAAe17J,EACpBq0E,GAAYntF,KAAKu0K,eAAgBE,GAC5Bz0K,KAAK00K,gBAAmB10K,KAAKuxJ,QAAQG,SAASijB,qBAEjDjsK,EAAGmP,aAAa,QAAS48J,EAE7B,CAQAtf,aAAAA,GACE,MAAO,0BAA0Bp5B,MAAMo5B,iBACzC,CAKA90J,MAAAA,GACOL,KAAKG,WACRH,KAAKG,UAAW,EAChBH,KAAKunJ,YAAY,gBACjBvnJ,KAAKswJ,IAAIz4I,aAAa,gBAAiB,SACT,qBAAnB7X,KAAKq0K,WACdr0K,KAAKswJ,IAAIz4I,aAAa,WAAY7X,KAAKq0K,WAEzCr0K,KAAKg7H,GAAG,CAAC,MAAO,SAAUh7H,KAAKm0K,cAC/Bn0K,KAAKg7H,GAAG,UAAWh7H,KAAK48J,gBAE5B,CAKAt8J,OAAAA,GACEN,KAAKG,UAAW,EAChBH,KAAKmnJ,SAAS,gBACdnnJ,KAAKswJ,IAAIz4I,aAAa,gBAAiB,QACT,qBAAnB7X,KAAKq0K,WACdr0K,KAAKswJ,IAAIx4I,gBAAgB,YAE3B9X,KAAKi7H,IAAI,YAAaj7H,KAAK+zK,kBAC3B/zK,KAAKi7H,IAAI,WAAYj7H,KAAKi0K,iBAC1Bj0K,KAAKi7H,IAAI,CAAC,MAAO,SAAUj7H,KAAKm0K,cAChCn0K,KAAKi7H,IAAI,UAAWj7H,KAAK48J,eAC3B,CAOAhL,oBAAAA,GACE5xJ,KAAKq+J,YAAYr+J,KAAKw0K,aACxB,CAaAJ,WAAAA,CAAY7xE,GACNviG,KAAK0xJ,SAASkjB,cAChB50K,KAAK0xJ,SAASkjB,aAAa/1K,KAAKmB,KAAMiK,UAE1C,CAaA2sJ,aAAAA,CAAcr0D,GAIM,MAAdA,EAAMxpG,KAA6B,UAAdwpG,EAAMxpG,KAC7BwpG,EAAMvH,iBACNuH,EAAM1I,kBACN75F,KAAKk7H,QAAQ,UAGba,MAAM66B,cAAcr0D,EAExB,EAEF6uD,GAAYgI,kBAAkB,qBAAsB0a,IAapD,MAAMe,WAAoBf,GAUxBx0K,WAAAA,CAAY8rJ,EAAQ9xJ,GAClByiI,MAAMqvB,EAAQ9xJ,GACd0G,KAAK80K,SACL90K,KAAK+0K,QAAUp9K,GAAKqI,KAAK80K,OAAOn9K,GAChCyzJ,EAAOpwB,GAAG,eAAgBh7H,KAAK+0K,QACjC,CAKAx5C,OAAAA,GACEv7H,KAAKorJ,SAASnwB,IAAI,eAAgBj7H,KAAK+0K,SACvCh5C,MAAMR,SACR,CAQAkrB,QAAAA,GAGE,OAAOA,GAAS,MAAO,CACrBx1B,UAAW,cAEf,CAaA2xC,WAAAA,CAAYtrK,GAEV,GAAqB,qBAAVA,EACT,OAAI0I,KAAKurH,EAAE,OAEFvrH,KAAKurH,EAAE,OAAOq3C,YACZ5iK,KAAKuxJ,QAAQsR,OAAS7iK,KAAKuxJ,QAAQsR,MAAMzN,SAE3Cp1J,KAAKuxJ,QAAQqR,cAIf5iK,KAAKuxJ,QAAQG,SAASkR,aAAe5iK,KAAKuxJ,QAAQG,SAASsjB,aAAe,KAErE,OAAV19K,GAA4B,cAAVA,GAAmC,oBAAVA,EAI3C0I,KAAKurH,EAAE,SACTvrH,KAAKurH,EAAE,OAAOq3C,YAActrK,GAJ5B0I,KAAKuxJ,QAAQv7D,IAAI3qF,KAAK,uEAAuE/T,KAOjG,CAUAw9K,MAAAA,CAAOvyE,GACL,MAAM1oG,EAAMmG,KAAKorJ,SAAS6pB,SAC1Bj1K,KAAKk1K,OAAOr7K,GAIRA,EACFmG,KAAK21J,OAEL31J,KAAK8yH,MAET,CAUAoiD,MAAAA,CAAOr7K,GACAA,GAIAmG,KAAKurH,EAAE,QACVvrH,KAAKswJ,IAAI1pJ,YAAY6/I,GAAS,UAAW,CACvCx1B,UAAW,aAEX2B,UAAW,GACV,CAAC,EAAG6zB,GAAS,MAAO,CACrB0uB,QAAS,OACTvS,YAAa5iK,KAAK4iK,eACjB,CACDwS,IAAK,OAGTp1K,KAAKurH,EAAE,OAAOx/G,IAAMlS,GAflBmG,KAAKswJ,IAAInjE,YAAc,EAgB3B,CAaAinF,WAAAA,CAAY7xE,GAELviG,KAAKuxJ,QAAQuM,aAGd99J,KAAKuxJ,QAAQ2K,MAAK,IACpBl8J,KAAKuxJ,QAAQ2K,MAAK,GAAMl2D,QAEtBhmG,KAAKuxJ,QAAQmM,SACfrC,GAAer7J,KAAKuxJ,QAAQD,QAE5BtxJ,KAAKuxJ,QAAQqM,QAEjB,EAgBFiX,GAAYz1K,UAAU41K,YAAcH,GAAYz1K,UAAUwjK,YAC1DxR,GAAYgI,kBAAkB,cAAeyb,IAQ7C,MAAMQ,GAAW,OACXC,GAAY,OACZC,GAAU,CACdC,UAAW,YACXC,UAAW,aACXC,MAAO,QACPC,mBAAoB,6CACpBC,eAAgB,2BAChBC,sBAAuB,aACvBC,kBAAmB,QACnBC,OAAQ,mCACR1M,OAAQ,8BACR2M,UAAW,0DAeb,SAASC,GAAer0E,EAAOlS,GAC7B,IAAIwmF,EACJ,GAAqB,IAAjBt0E,EAAMvjG,OAER63K,EAAMt0E,EAAM,GAAKA,EAAM,GAAKA,EAAM,GAAKA,EAAM,GAAKA,EAAM,GAAKA,EAAM,OAC9D,IAAqB,IAAjBA,EAAMvjG,OAIf,MAAM,IAAI5E,MAAM,gCAAkCmoG,EAAQ,gDAF1Ds0E,EAAMt0E,EAAM5oG,MAAM,EAGpB,CACA,MAAO,QAAUsnF,SAAS41F,EAAIl9K,MAAM,EAAG,GAAI,IAAM,IAAMsnF,SAAS41F,EAAIl9K,MAAM,EAAG,GAAI,IAAM,IAAMsnF,SAAS41F,EAAIl9K,MAAM,EAAG,GAAI,IAAM,IAAM02F,EAAU,GAC/I,CAiBA,SAASymF,GAAeztK,EAAIioF,EAAO05D,GACjC,IACE3hJ,EAAGioF,MAAMA,GAAS05D,CACpB,CAAE,MAAO1yJ,GAEP,MACF,CACF,CAaA,SAASy+K,GAAoBxwK,GAC3B,OAAOA,EAAW,GAAGA,MAAe,EACtC,CA6XAwrJ,GAAYgI,kBAAkB,mBAtX9B,cAA+BhI,GAa7B9xJ,WAAAA,CAAY8rJ,EAAQ9xJ,EAAS+3J,GAC3Bt1B,MAAMqvB,EAAQ9xJ,EAAS+3J,GACvB,MACMglB,EAAuB1+K,IAC3BqI,KAAKs2K,uBACLt2K,KAAK0pK,cAAc/xK,EAAE,EAEvByzJ,EAAOpwB,GAAG,aAAarjI,GAAKqI,KAAKu2K,cAAc5+K,KAC/CyzJ,EAAOpwB,GAAG,mBANuBrjI,GAAKqI,KAAK0pK,cAAc/xK,KAOzDyzJ,EAAOpwB,GAAG,kBAAkBrjI,IAC1BqI,KAAKs2K,uBACLt2K,KAAKw2K,eAAe7+K,EAAE,IAOxByzJ,EAAOiG,MAAMhE,GAAMrtJ,MAAM,WACvB,GAAIorJ,EAAOyX,OAASzX,EAAOyX,MAAMyE,yBAE/B,YADAtnK,KAAK8yH,OAGPs4B,EAAOpwB,GAAG,mBAAoBq7C,GAC9BjrB,EAAOpwB,GAAG,eAAgBq7C,GAC1B,MAAMI,EAAoB10B,IAAAA,OAAgB20B,aAAe30B,IACnD40B,EAAyB50B,IAAAA,OAAgB20B,YAAc,SAAW,oBACxED,EAAkBvjF,iBAAiByjF,EAAwBN,GAC3DjrB,EAAOpwB,GAAG,WAAW,IAAMy7C,EAAkBtjF,oBAAoBwjF,EAAwBN,KACzF,MAAMlX,EAASn/J,KAAK0xJ,SAASoD,cAAcqK,QAAU,GACrD,IAAK,IAAIphK,EAAI,EAAGA,EAAIohK,EAAO9gK,OAAQN,IACjCiC,KAAKuxJ,QAAQiL,mBAAmB2C,EAAOphK,IAAI,GAE7CiC,KAAKw2K,gBACP,IACF,CAWAA,cAAAA,GACE,MAAMI,EAAQ,CACZllC,SAAU,EACVuvB,UAAW,GAEP4V,EAAY72K,KAAKuxJ,QAAQ+K,aACzBwa,EAAW92K,KAAKuxJ,QAAQwlB,OAAOC,iBACrC,IAAIC,EACAC,EACAC,EACJ,IAAK,IAAIp5K,EAAI,EAAGA,EAAI84K,EAAUx4K,OAAQN,IAAK,CACzC,MAAM0zF,EAAQolF,EAAU94K,GACpB+4K,GAAYA,EAAShgB,SAAWggB,EAASt0C,UAAYs0C,EAASt0C,WAAa/wC,EAAM+wC,UAAY/wC,EAAM2uE,QAAQwW,EAEzGnlF,EAAM2uE,OAAS0W,EAAS1W,KAC1B+W,EAAiB1lF,EAEP0lF,IACVA,EAAiB1lF,GAIVqlF,IAAaA,EAAShgB,SAC/BqgB,EAAiB,KACjBF,EAAY,KACZC,EAAgB,MACPzlF,EAAM84B,UACI,iBAAf94B,EAAM2uE,MAA4B6W,EAE3BxlF,EAAM2uE,QAAQwW,IAAUM,IACjCA,EAAgBzlF,GAFhBwlF,EAAYxlF,EAKlB,CAMI0lF,EACFA,EAAe7oE,KAAO,UACb4oE,EACTA,EAAc5oE,KAAO,UACZ2oE,IACTA,EAAU3oE,KAAO,UAErB,CAUAioE,aAAAA,GACMv2K,KAAKuxJ,QAAQsR,OAAS7iK,KAAKuxJ,QAAQsR,MAAMyE,yBAC3CtnK,KAAK8yH,OAEL9yH,KAAK21J,MAET,CAQAlP,QAAAA,GACE,OAAO1qB,MAAM0qB,SAAS,MAAO,CAC3Bx1B,UAAW,0BACV,CACD,UAAa,MACb,YAAa,MACb,cAAe,QAEnB,CAKAmmD,YAAAA,GACiC,oBAApBr1B,IAAAA,QACTA,IAAAA,OAAgBs1B,YAAYt1B,IAAU,GAAI/hJ,KAAKswJ,IAEnD,CASAoZ,aAAAA,GACE,MAAMvK,EAASn/J,KAAKuxJ,QAAQ+K,aACtBgb,EAA6Bt3K,KAAK0xJ,SAAS4lB,2BAEjD,GADAt3K,KAAKo3K,eACDE,EAA4B,CAC9B,MAAMC,EAAgB,GACtB,IAAK,IAAIx5K,EAAI,EAAGA,EAAIohK,EAAO9gK,SAAUN,EAAG,CACtC,MAAM0zF,EAAQ0tE,EAAOphK,GACF,YAAf0zF,EAAM6c,MAGVipE,EAAcp+K,KAAKs4F,EACrB,CAEA,YADAzxF,KAAKw3K,eAAeD,EAEtB,CAMA,IAAIE,EAAoB,KACpBC,EAAyB,KACzB35K,EAAIohK,EAAO9gK,OACf,KAAON,KAAK,CACV,MAAM0zF,EAAQ0tE,EAAOphK,GACF,YAAf0zF,EAAM6c,OACW,iBAAf7c,EAAM2uE,KACRqX,EAAoBhmF,EAEpBimF,EAAyBjmF,EAG/B,CAYA,GAXIimF,GACqC,QAAnC13K,KAAK4W,aAAa,cACpB5W,KAAK6X,aAAa,YAAa,OAEjC7X,KAAKw3K,eAAeE,IACXD,IAC8B,cAAnCz3K,KAAK4W,aAAa,cACpB5W,KAAK6X,aAAa,YAAa,aAEjC7X,KAAKw3K,eAAeC,KAEjB11B,IAAAA,IAAa41B,SAAS,QAAS,QAAS,CAC3C,MAAMC,EAAmB53K,KAAKswJ,IACxBunB,EAAmBD,EAAiBvwD,iBAAiB,uBACrDywD,EAAmB93K,KAAKuxJ,QAAQwmB,WAAWznB,IAAI9hC,wBAAwB3uB,OACvEm4E,EAAeh4K,KAAKuxJ,QAAQjB,IAAI9hC,wBAAwB3uB,OAG9D+3E,EAAiBjnF,MAAQ,GAGzBwlF,GAAeyB,EAAkB,WAAY,YAC7CzB,GAAeyB,EAAkB,SAAUI,EAAeF,EAAmB,MAC7E3B,GAAeyB,EAAkB,MAAO,SAEtCzB,GAAeyB,EAAkB,SAD/BzyB,GACyC6yB,EAAe,KAEf,OAIzCH,EAAiBx5K,OAAS,GAC5Bw5K,EAAiBl/K,SAAQs/K,IAEvB,GAAIA,EAAgBtnF,MAAMunF,MAAO,CAC/B,MAAMC,EAAcF,EAAgBtnF,MAAMunF,MAAMjhL,MAAM,KAG3B,IAAvBkhL,EAAY95K,QACdc,OAAOmF,OAAO2zK,EAAgBtnF,MAAO,CACnC5jB,IAAKorG,EAAY,GACjBzhB,MAAOyhB,EAAY,GACnB71J,OAAQ61J,EAAY,GACpBtyE,KAAM,SAGZ,IAGN,CACF,CAMAywE,oBAAAA,GAGE,IAAKt2K,KAAKuxJ,QAAQ6mB,gBAAkBr2B,IAAAA,IAAa41B,SAAS,sBACxD,OAEF,MAAMU,EAAcr4K,KAAKuxJ,QAAQ+E,eAC3B0hB,EAAeh4K,KAAKuxJ,QAAQgF,gBAC5B+hB,EAAoBD,EAAcL,EAClCO,EAAmBv4K,KAAKuxJ,QAAQinB,aAAex4K,KAAKuxJ,QAAQ6mB,cAClE,IAAIK,EAAmB,EACnBC,EAAkB,EAClBp1K,KAAK0lI,IAAIsvC,EAAoBC,GAAoB,KAC/CD,EAAoBC,EACtBE,EAAmBn1K,KAAKq1K,OAAON,EAAcL,EAAeO,GAAoB,GAEhFG,EAAkBp1K,KAAKq1K,OAAOX,EAAeK,EAAcE,GAAoB,IAGnFpC,GAAen2K,KAAKswJ,IAAK,cAAe8lB,GAAoBqC,IAC5DtC,GAAen2K,KAAKswJ,IAAK,aAAc8lB,GAAoBsC,GAC7D,CAQAE,kBAAAA,CAAmBnnF,GACjB,MAAMonF,EAAY74K,KAAKuxJ,QAAQunB,kBAAkBC,YAC3Cjd,EAAOrqE,EAAM8xE,WACnB,IAAIxlK,EAAI+9J,EAAKz9J,OACb,KAAON,KAAK,CACV,MAAMg+J,EAAMD,EAAK/9J,GACjB,IAAKg+J,EACH,SAEF,MAAMid,EAASjd,EAAIkd,aA+BnB,GA9BIJ,EAAUj3E,QACZo3E,EAAO5oK,WAAWugF,MAAMiR,MAAQi3E,EAAUj3E,OAExCi3E,EAAUK,aACZ/C,GAAe6C,EAAO5oK,WAAY,QAAS6lK,GAAe4C,EAAUj3E,OAAS,OAAQi3E,EAAUK,cAE7FL,EAAUM,kBACZH,EAAO5oK,WAAWugF,MAAMwoF,gBAAkBN,EAAUM,iBAElDN,EAAUO,mBACZjD,GAAe6C,EAAO5oK,WAAY,kBAAmB6lK,GAAe4C,EAAUM,iBAAmB,OAAQN,EAAUO,oBAEjHP,EAAUQ,cACRR,EAAUS,cACZnD,GAAe6C,EAAQ,kBAAmB/C,GAAe4C,EAAUQ,YAAaR,EAAUS,gBAE1FN,EAAOroF,MAAMwoF,gBAAkBN,EAAUQ,aAGzCR,EAAUU,YACgB,eAAxBV,EAAUU,UACZP,EAAO5oK,WAAWugF,MAAM6oF,WAAa,eAAenE,mBAAyBA,mBAAyBA,KACrE,WAAxBwD,EAAUU,UACnBP,EAAO5oK,WAAWugF,MAAM6oF,WAAa,WAAWnE,eAAqBA,eAAqBA,KACzD,cAAxBwD,EAAUU,UACnBP,EAAO5oK,WAAWugF,MAAM6oF,WAAa,WAAWlE,aAAoBA,iBAAwBD,cAAoBA,KAC/E,YAAxBwD,EAAUU,YACnBP,EAAO5oK,WAAWugF,MAAM6oF,WAAa,WAAWnE,eAAqBA,eAAqBA,eAAqBA,OAG/GwD,EAAUY,aAAyC,IAA1BZ,EAAUY,YAAmB,CACxD,MAAMC,EAAW33B,IAAAA,WAAoBi3B,EAAOroF,MAAM+oF,UAClDV,EAAOroF,MAAM+oF,SAAWA,EAAWb,EAAUY,YAAc,KAC3DT,EAAOroF,MAAMkP,OAAS,OACtBm5E,EAAOroF,MAAM5jB,IAAM,MACrB,CACI8rG,EAAUc,YAAuC,YAAzBd,EAAUc,aACP,eAAzBd,EAAUc,WACZX,EAAO5oK,WAAWugF,MAAMipF,YAAc,aAEtCZ,EAAO5oK,WAAWugF,MAAMgpF,WAAapE,GAAQsD,EAAUc,YAG7D,CACF,CAQAnC,cAAAA,CAAerY,GAIb,GAHKlmK,MAAMC,QAAQimK,KACjBA,EAAS,CAACA,IAEmB,oBAApBpd,IAAAA,QAAkCod,EAAO/nJ,OAAMq6E,IAChDA,EAAM8xE,aAEd,OAEF,MAAMzH,EAAO,GAGb,IAAK,IAAI/9J,EAAI,EAAGA,EAAIohK,EAAO9gK,SAAUN,EAAG,CACtC,MAAM0zF,EAAQ0tE,EAAOphK,GACrB,IAAK,IAAI4sH,EAAI,EAAGA,EAAIl5B,EAAM8xE,WAAWllK,SAAUssH,EAC7CmxC,EAAK3iK,KAAKs4F,EAAM8xE,WAAW54C,GAE/B,CAGAo3B,IAAAA,OAAgBs1B,YAAYt1B,IAAU+Z,EAAM97J,KAAKswJ,KAGjD,IAAK,IAAIvyJ,EAAI,EAAGA,EAAIohK,EAAO9gK,SAAUN,EAAG,CACtC,MAAM0zF,EAAQ0tE,EAAOphK,GACrB,IAAK,IAAI4sH,EAAI,EAAGA,EAAIl5B,EAAM8xE,WAAWllK,SAAUssH,EAAG,CAChD,MAAMkvD,EAAQpoF,EAAM8xE,WAAW54C,GAAGsuD,aAClC9xB,GAAS0yB,EAAO,qBAAsB,uBAAyBpoF,EAAM+wC,SAAW/wC,EAAM+wC,SAAWzkI,IAC7F0zF,EAAM+wC,UACR3qH,GAAagiK,EAAO,OAAQpoF,EAAM+wC,SAEtC,CACIxiI,KAAKuxJ,QAAQunB,mBACf94K,KAAK44K,mBAAmBnnF,EAE5B,CACF,IA0CF2/D,GAAYgI,kBAAkB,iBA7B9B,cAA6BhI,GAO3B3K,QAAAA,GACE,MAAMqzB,EAAU95K,KAAKuxJ,QAAQuoB,UACvBC,EAAa/5K,KAAK2yJ,SAASmnB,EAAU,eAAiB,gBACtDzb,EAAc5X,GAAS,OAAQ,CACnCx1B,UAAW,mBACX9jC,YAAantF,KAAK2yJ,SAAS,kBAAmB,CAAConB,MAE3CrxK,EAAKqzH,MAAM0qB,SAAS,MAAO,CAC/Bx1B,UAAW,sBACX+oD,IAAK,QAGP,OADAtxK,EAAG9B,YAAYy3J,GACR31J,CACT,CAKAkpJ,oBAAAA,GACE5xJ,KAAKurH,EAAE,qBAAqBp+B,YAAcntF,KAAK2yJ,SAAS,kBAAmB,CAAC3yJ,KAAKuxJ,QAAQuoB,UAAY,eAAiB,gBACxH,IAaF,MAAMG,WAAenG,GAiBnBrtB,QAAAA,CAASn8D,GAAkC,IAA7BvF,EAAK96E,UAAA5L,OAAA,QAAA/D,IAAA2P,UAAA,GAAAA,UAAA,GAAG,CAAC,EAAGkK,EAAUlK,UAAA5L,OAAA,QAAA/D,IAAA2P,UAAA,GAAAA,UAAA,GAAG,CAAC,EACtCqgF,EAAM,SACNvF,EAAQ5lF,OAAOmF,OAAO,CACpB2sH,UAAWjxH,KAAKm1J,iBACfpwE,GAGH5wE,EAAahV,OAAOmF,OAAO,CAEzBjN,KAAM,UACL8c,GACH,MAAMzL,EAAK+9I,GAASn8D,EAAKvF,EAAO5wE,GAShC,OARKnU,KAAKuxJ,QAAQG,SAASmC,sBACzBnrJ,EAAG9B,YAAY6/I,GAAS,OAAQ,CAC9Bx1B,UAAW,wBACV,CACD,eAAe,KAGnBjxH,KAAKs0K,oBAAoB5rK,GAClBA,CACT,CAkBA0rJ,QAAAA,CAASxjJ,GAAqB,IAAdtX,EAAO2Q,UAAA5L,OAAA,QAAA/D,IAAA2P,UAAA,GAAAA,UAAA,GAAG,CAAC,EACzB,MAAMgnH,EAAYjxH,KAAKV,YAAYC,KAInC,OAHA6hJ,GAAM/1I,KAAK,+DAA+D4lH,0DAGnEmgC,GAAYhyJ,UAAUg1J,SAASv1J,KAAKmB,KAAM4Q,EAAOtX,EAC1D,CAMA+G,MAAAA,GACE07H,MAAM17H,SACNL,KAAKswJ,IAAIx4I,gBAAgB,WAC3B,CAMAxX,OAAAA,GACEy7H,MAAMz7H,UACNN,KAAKswJ,IAAIz4I,aAAa,WAAY,WACpC,CAWA++I,aAAAA,CAAcr0D,GAMM,MAAdA,EAAMxpG,KAA6B,UAAdwpG,EAAMxpG,IAM/BgjI,MAAM66B,cAAcr0D,GALlBA,EAAM1I,iBAMV,EAEFu3D,GAAYgI,kBAAkB,SAAU6gB,IAYxC,MAAMC,WAAsBD,GAC1B36K,WAAAA,CAAY8rJ,EAAQ9xJ,GAClByiI,MAAMqvB,EAAQ9xJ,GACd0G,KAAKm6K,YAAa,EAClBn6K,KAAK2zJ,QAAQ,QACb3zJ,KAAKg7H,GAAG,aAAarjI,GAAKqI,KAAKo6K,gBAAgBziL,IACjD,CAQAw9J,aAAAA,GACE,MAAO,qBACT,CAaAif,WAAAA,CAAY7xE,GACV,MAAM83E,EAAcr6K,KAAKuxJ,QAAQD,OAGjC,GAAItxJ,KAAKm6K,YAAc,YAAa53E,GAAS,YAAaA,EAKxD,OAJA84D,GAAegf,QACXr6K,KAAKuxJ,QAAQ2K,MAAK,IACpBl8J,KAAKuxJ,QAAQ2K,MAAK,GAAMl2D,SAI5B,MAAM1Z,EAAKtsF,KAAKuxJ,QAAQ8B,SAAS,cAC3BinB,EAAahuF,GAAMA,EAAG+mE,SAAS,cACrC,IAAKinB,EAEH,YADAt6K,KAAKuxJ,QAAQ2K,MAAK,GAAMl2D,QAG1B,MAAMu0E,EAAYA,IAAMD,EAAWt0E,QAC/Bo1D,GAAUif,GACZA,EAAY5vE,KAAK8vE,GAAW,SAE5Bv6K,KAAKlE,WAAWy+K,EAAW,EAE/B,CAWA3jB,aAAAA,CAAcr0D,GACZviG,KAAKm6K,YAAa,EAClBp+C,MAAM66B,cAAcr0D,EACtB,CAUA63E,eAAAA,CAAgB73E,GACdviG,KAAKm6K,YAAa,CACpB,EASFD,GAAc96K,UAAUo1K,aAAe,aACvCpjB,GAAYgI,kBAAkB,gBAAiB8gB,IA4F/C9oB,GAAYgI,kBAAkB,cA9E9B,cAA0B6gB,GAUxB36K,WAAAA,CAAY8rJ,EAAQ9xJ,GAClByiI,MAAMqvB,EAAQ9xJ,GACd0G,KAAK2zJ,QAAQ,UACb3zJ,KAAKq+J,YAAY/kK,GAAWA,EAAQ+kK,aAAer+J,KAAK2yJ,SAAS,SACnE,CAQAwC,aAAAA,GACE,MAAO,oBAAoBp5B,MAAMo5B,iBACnC,CAeAif,WAAAA,CAAY7xE,GAWVviG,KAAKk7H,QAAQ,CACX7jI,KAAM,QACNokG,SAAS,GAEb,CAYAm7D,aAAAA,CAAcr0D,GAEM,WAAdA,EAAMxpG,KACRwpG,EAAMvH,iBACNuH,EAAM1I,kBACN75F,KAAKk7H,QAAQ,UAGba,MAAM66B,cAAcr0D,EAExB,IAeF,MAAMi4E,WAAmBP,GAUvB36K,WAAAA,CAAY8rJ,GAAsB,IAAd9xJ,EAAO2Q,UAAA5L,OAAA,QAAA/D,IAAA2P,UAAA,GAAAA,UAAA,GAAG,CAAC,EAC7B8xH,MAAMqvB,EAAQ9xJ,GAGdA,EAAQmhL,YAA4BngL,IAAnBhB,EAAQmhL,QAAwBnhL,EAAQmhL,OACzDz6K,KAAK2zJ,QAAQ,QACb3zJ,KAAKg7H,GAAGowB,EAAQ,QAAQzzJ,GAAKqI,KAAK06K,WAAW/iL,KAC7CqI,KAAKg7H,GAAGowB,EAAQ,SAASzzJ,GAAKqI,KAAK26K,YAAYhjL,KAC3C2B,EAAQmhL,QACVz6K,KAAKg7H,GAAGowB,EAAQ,SAASzzJ,GAAKqI,KAAK46K,YAAYjjL,IAEnD,CAQAw9J,aAAAA,GACE,MAAO,oBAAoBp5B,MAAMo5B,iBACnC,CAaAif,WAAAA,CAAY7xE,GACNviG,KAAKuxJ,QAAQmM,SACfrC,GAAer7J,KAAKuxJ,QAAQD,QAE5BtxJ,KAAKuxJ,QAAQqM,OAEjB,CAWAid,YAAAA,CAAat4E,GACXviG,KAAKunJ,YAAY,aACbvnJ,KAAKuxJ,QAAQmM,SACf19J,KAAK26K,YAAYp4E,GAEjBviG,KAAK06K,WAAWn4E,EAEpB,CAUAm4E,UAAAA,CAAWn4E,GACTviG,KAAKunJ,YAAY,YAAa,cAC9BvnJ,KAAKmnJ,SAAS,eAEdnnJ,KAAK2zJ,QAAQ,SACb3zJ,KAAKq+J,YAAY,QACnB,CAUAsc,WAAAA,CAAYp4E,GACVviG,KAAKunJ,YAAY,eACjBvnJ,KAAKmnJ,SAAS,cAEdnnJ,KAAK2zJ,QAAQ,QACb3zJ,KAAKq+J,YAAY,OACnB,CAUAuc,WAAAA,CAAYr4E,GACVviG,KAAKunJ,YAAY,eACjBvnJ,KAAKmnJ,SAAS,aAEdnnJ,KAAK2zJ,QAAQ,UACb3zJ,KAAKq+J,YAAY,UAGjBr+J,KAAKmtJ,IAAIntJ,KAAKuxJ,QAAS,UAAU55J,GAAKqI,KAAK66K,aAAaljL,IAC1D,EASF6iL,GAAWp7K,UAAUo1K,aAAe,OACpCpjB,GAAYgI,kBAAkB,aAAcohB,IAa5C,MAAMM,WAAoB1pB,GAUxB9xJ,WAAAA,CAAY8rJ,EAAQ9xJ,GAClByiI,MAAMqvB,EAAQ9xJ,GACd0G,KAAKg7H,GAAGowB,EAAQ,CAAC,aAAc,QAAS,YAAYzzJ,GAAKqI,KAAK80K,OAAOn9K,KACrEqI,KAAK+6K,iBACP,CAQAt0B,QAAAA,GACE,MAAMx1B,EAAYjxH,KAAKm1J,gBACjBzsJ,EAAKqzH,MAAM0qB,SAAS,MAAO,CAC/Bx1B,UAAW,GAAGA,mCAEV+pD,EAAOv0B,GAAS,OAAQ,CAC5Bx1B,UAAW,mBACX9jC,YAAa,GAAGntF,KAAK2yJ,SAAS3yJ,KAAKi7K,mBAClC,CACDpoD,KAAM,iBAaR,OAXAnqH,EAAG9B,YAAYo0K,GACfh7K,KAAKmzJ,WAAa1M,GAAS,OAAQ,CACjCx1B,UAAW,GAAGA,aACb,CAKD4B,KAAM,iBAERnqH,EAAG9B,YAAY5G,KAAKmzJ,YACbzqJ,CACT,CACA6yH,OAAAA,GACEv7H,KAAKmzJ,WAAa,KAClBnzJ,KAAKk7K,UAAY,KACjBn/C,MAAMR,SACR,CAQAu5C,MAAAA,CAAOvyE,IACAviG,KAAKuxJ,QAAQG,SAASypB,qBAAsC,YAAf54E,EAAMlrG,OAGxD2I,KAAKo7K,cAAc74E,EACrB,CASAw4E,eAAAA,GAA0B,IAAV54E,EAAIl4F,UAAA5L,OAAA,QAAA/D,IAAA2P,UAAA,GAAAA,UAAA,GAAG,EACrBk4F,EAAOy4D,GAAWz4D,GACdniG,KAAKq7K,iBAAmBl5E,IAG5BniG,KAAKq7K,eAAiBl5E,EACtBniG,KAAKk4J,2BAA2B,+BAA+B,KAC7D,IAAKl4J,KAAKmzJ,WACR,OAEF,IAAImoB,EAAUt7K,KAAKk7K,UACfI,GAAWt7K,KAAKmzJ,WAAW/iJ,aAAekrK,IAC5CA,EAAU,KACVl6B,GAAM/1I,KAAK,uJAEbrL,KAAKk7K,UAAYh6B,IAAAA,eAA0BlhJ,KAAKq7K,gBAC3Cr7K,KAAKk7K,YAGNI,EACFt7K,KAAKmzJ,WAAWp9I,aAAa/V,KAAKk7K,UAAWI,GAE7Ct7K,KAAKmzJ,WAAWvsJ,YAAY5G,KAAKk7K,WACnC,IAEJ,CAWAE,aAAAA,CAAc74E,GAAQ,EASxBu4E,GAAY17K,UAAU67K,WAAa,OAUnCH,GAAY17K,UAAUo1K,aAAe,OACrCpjB,GAAYgI,kBAAkB,cAAe0hB,IAW7C,MAAMS,WAA2BT,GAO/B3lB,aAAAA,GACE,MAAO,kBACT,CAUAimB,aAAAA,CAAc74E,GAEZ,IAAIJ,EAEFA,EADEniG,KAAKuxJ,QAAQoc,QACR3tK,KAAKuxJ,QAAQx0B,WAEb/8H,KAAKuxJ,QAAQwX,YAAc/oK,KAAKuxJ,QAAQiqB,WAAWvX,YAAcjkK,KAAKuxJ,QAAQ0S,cAEvFjkK,KAAK+6K,gBAAgB54E,EACvB,EASFo5E,GAAmBn8K,UAAU67K,WAAa,eAU1CM,GAAmBn8K,UAAUo1K,aAAe,eAC5CpjB,GAAYgI,kBAAkB,qBAAsBmiB,IAapD,MAAME,WAAwBX,GAU5Bx7K,WAAAA,CAAY8rJ,EAAQ9xJ,GAClByiI,MAAMqvB,EAAQ9xJ,GACd,MAAM8hL,EAAgBzjL,GAAKqI,KAAKo7K,cAAczjL,GAK9CqI,KAAKg7H,GAAGowB,EAAQ,iBAAkBgwB,GAKlCp7K,KAAKg7H,GAAGowB,EAAQ,YAAagwB,GAK7Bp7K,KAAKg7H,GAAGowB,EAAQ,iBAAkBgwB,EACpC,CAQAjmB,aAAAA,GACE,MAAO,cACT,CAaAimB,aAAAA,CAAc74E,GACZ,MAAMw6B,EAAW/8H,KAAKuxJ,QAAQx0B,WAC9B/8H,KAAK+6K,gBAAgBh+C,EACvB,EASF0+C,GAAgBr8K,UAAU67K,WAAa,WAUvCQ,GAAgBr8K,UAAUo1K,aAAe,WACzCpjB,GAAYgI,kBAAkB,kBAAmBqiB,IAqCjDrqB,GAAYgI,kBAAkB,cAzB9B,cAA0BhI,GAOxB3K,QAAAA,GACE,MAAM/9I,EAAKqzH,MAAM0qB,SAAS,MAAO,CAC/Bx1B,UAAW,qCACV,CAID,eAAe,IAEX7/F,EAAM2qG,MAAM0qB,SAAS,OACrBu0B,EAAOj/C,MAAM0qB,SAAS,OAAQ,CAClCt5D,YAAa,MAIf,OAFA/7D,EAAIxqB,YAAYo0K,GAChBtyK,EAAG9B,YAAYwqB,GACR1oB,CACT,IAeF,MAAMgzK,WAA6BZ,GAUjCx7K,WAAAA,CAAY8rJ,EAAQ9xJ,GAClByiI,MAAMqvB,EAAQ9xJ,GACd0G,KAAKg7H,GAAGowB,EAAQ,kBAAkBzzJ,GAAKqI,KAAKo7K,cAAczjL,IAC5D,CAQAw9J,aAAAA,GACE,MAAO,oBACT,CAQA1O,QAAAA,GACE,MAAM/9I,EAAKqzH,MAAM0qB,WAMjB,OALsC,IAAlCzmJ,KAAK0xJ,SAASiqB,iBAChBjzK,EAAGmN,aAAa4wI,GAAS,OAAQ,CAAC,EAAG,CACnC,eAAe,GACd,KAAMzmJ,KAAKmzJ,YAETzqJ,CACT,CAWA0yK,aAAAA,CAAc74E,GACZ,GAAuC,kBAA5BviG,KAAKuxJ,QAAQx0B,WACtB,OAEF,IAAI56B,EAKFA,EADEniG,KAAKuxJ,QAAQoc,QACR,EACE3tK,KAAKuxJ,QAAQqqB,qBACf57K,KAAKuxJ,QAAQqqB,uBAEb57K,KAAKuxJ,QAAQsqB,gBAEtB77K,KAAK+6K,gBAAgB54E,EACvB,EASFu5E,GAAqBt8K,UAAU67K,WAAa,iBAU5CS,GAAqBt8K,UAAUo1K,aAAe,iBAC9CpjB,GAAYgI,kBAAkB,uBAAwBsiB,IA4EtDtqB,GAAYgI,kBAAkB,cA7D9B,cAA0BhI,GAUxB9xJ,WAAAA,CAAY8rJ,EAAQ9xJ,GAClByiI,MAAMqvB,EAAQ9xJ,GACd0G,KAAK87K,gBACL97K,KAAKg7H,GAAGh7H,KAAKorJ,SAAU,kBAAkBzzJ,GAAKqI,KAAK87K,cAAcnkL,IACnE,CAQA8uJ,QAAAA,GACE,MAAM/9I,EAAKqzH,MAAM0qB,SAAS,MAAO,CAC/Bx1B,UAAW,iCAab,OAXAjxH,KAAKmzJ,WAAa1M,GAAS,MAAO,CAChCx1B,UAAW,oBACV,CACD,YAAa,QAEfjxH,KAAKmzJ,WAAWvsJ,YAAY6/I,GAAS,OAAQ,CAC3Cx1B,UAAW,mBACX9jC,YAAa,GAAGntF,KAAK2yJ,SAAS,wBAEhC3yJ,KAAKmzJ,WAAWvsJ,YAAYs6I,IAAAA,eAA0BlhJ,KAAK2yJ,SAAS,UACpEjqJ,EAAG9B,YAAY5G,KAAKmzJ,YACbzqJ,CACT,CACA6yH,OAAAA,GACEv7H,KAAKmzJ,WAAa,KAClBp3B,MAAMR,SACR,CAWAugD,aAAAA,CAAcv5E,GACRviG,KAAKorJ,SAASruB,aAAela,IAC/B7iH,KAAK21J,OAEL31J,KAAK8yH,MAET,IAeF,MAAMipD,WAAmB9B,GAUvB36K,WAAAA,CAAY8rJ,EAAQ9xJ,GAClByiI,MAAMqvB,EAAQ9xJ,GACd0G,KAAKg8K,uBACDh8K,KAAKuxJ,QAAQ8f,cACfrxK,KAAKi8K,6BAA+BtkL,GAAKqI,KAAKg8K,qBAAqBrkL,GACnEqI,KAAKg7H,GAAGh7H,KAAKuxJ,QAAQ8f,YAAa,iBAAkBrxK,KAAKi8K,8BAE7D,CAQAx1B,QAAAA,GACE,MAAM/9I,EAAKqzH,MAAM0qB,SAAS,SAAU,CAClCx1B,UAAW,yCAUb,OARAjxH,KAAK2zJ,QAAQ,SAAUjrJ,GACvB1I,KAAKk8K,QAAUz1B,GAAS,OAAQ,CAC9Bx1B,UAAW,wBACX9jC,YAAantF,KAAK2yJ,SAAS,SAC1B,CACD,cAAe,SAEjBjqJ,EAAG9B,YAAY5G,KAAKk8K,SACbxzK,CACT,CAMAszK,oBAAAA,IAEOh8K,KAAKuxJ,QAAQ8f,aAAerxK,KAAKuxJ,QAAQ8f,YAAY8K,cACxDn8K,KAAK6X,aAAa,iBAAiB,GACnC7X,KAAKmnJ,SAAS,oBACdnnJ,KAAKq+J,YAAY,0CAEjBr+J,KAAK6X,aAAa,iBAAiB,GACnC7X,KAAKunJ,YAAY,oBACjBvnJ,KAAKq+J,YAAY,uCAErB,CAOA+V,WAAAA,GACEp0K,KAAKuxJ,QAAQ8f,YAAY+K,gBAC3B,CAKA7gD,OAAAA,GACMv7H,KAAKuxJ,QAAQ8f,aACfrxK,KAAKi7H,IAAIj7H,KAAKuxJ,QAAQ8f,YAAa,iBAAkBrxK,KAAKi8K,8BAE5Dj8K,KAAKk8K,QAAU,KACfngD,MAAMR,SACR,EA8BF,SAAS8gD,GAAM12F,EAAQof,EAAK5jB,GAE1B,OADAwE,EAASnB,OAAOmB,GACTriF,KAAKyhG,IAAI5jB,EAAK79E,KAAK69E,IAAI4jB,EAAK5c,MAAMxC,GAAUof,EAAMpf,GAC3D,CAzBAo2F,GAAW38K,UAAUo1K,aAAe,uCACpCpjB,GAAYgI,kBAAkB,aAAc2iB,IA0B5C,IAAIO,GAAmBn9K,OAAOqE,OAAO,CACnC4oH,UAAW,KACXiwD,MAAOA,KAeT,MAAME,WAAenrB,GAUnB9xJ,WAAAA,CAAY8rJ,EAAQ9xJ,GAClByiI,MAAMqvB,EAAQ9xJ,GACd0G,KAAKw8K,iBAAmB7kL,GAAKqI,KAAKo6K,gBAAgBziL,GAClDqI,KAAKy8K,eAAiB9kL,GAAKqI,KAAK08K,cAAc/kL,GAC9CqI,KAAK48J,eAAiBjlK,GAAKqI,KAAK42J,cAAcj/J,GAC9CqI,KAAKm0K,aAAex8K,GAAKqI,KAAKo0K,YAAYz8K,GAC1CqI,KAAK28K,iBAAmBhlL,GAAKqI,KAAK48K,gBAAgBjlL,GAClDqI,KAAK+0K,QAAUp9K,GAAKqI,KAAK80K,OAAOn9K,GAGhCqI,KAAK68K,IAAM78K,KAAKqzJ,SAASrzJ,KAAK0xJ,SAASorB,SAGvC98K,KAAK+8K,WAAW/8K,KAAK0xJ,SAASqrB,UAC9B/8K,KAAKK,QACP,CAQAy2J,OAAAA,GACE,OAAO92J,KAAKG,QACd,CAKAE,MAAAA,GACML,KAAK82J,YAGT92J,KAAKg7H,GAAG,YAAah7H,KAAKw8K,kBAC1Bx8K,KAAKg7H,GAAG,aAAch7H,KAAKw8K,kBAC3Bx8K,KAAKg7H,GAAG,UAAWh7H,KAAK48J,gBACxB58J,KAAKg7H,GAAG,QAASh7H,KAAKm0K,cAGtBn0K,KAAKg7H,GAAGh7H,KAAKuxJ,QAAS,kBAAmBvxJ,KAAK80K,QAC1C90K,KAAKg9K,aACPh9K,KAAKg7H,GAAGh7H,KAAKuxJ,QAASvxJ,KAAKg9K,YAAah9K,KAAK80K,QAE/C90K,KAAKunJ,YAAY,YACjBvnJ,KAAK6X,aAAa,WAAY,GAC9B7X,KAAKG,UAAW,EAClB,CAKAG,OAAAA,GACE,IAAKN,KAAK82J,UACR,OAEF,MAAMjwJ,EAAM7G,KAAK68K,IAAIvsB,IAAIvhJ,cACzB/O,KAAKi7H,IAAI,YAAaj7H,KAAKw8K,kBAC3Bx8K,KAAKi7H,IAAI,aAAcj7H,KAAKw8K,kBAC5Bx8K,KAAKi7H,IAAI,UAAWj7H,KAAK48J,gBACzB58J,KAAKi7H,IAAI,QAASj7H,KAAKm0K,cACvBn0K,KAAKi7H,IAAIj7H,KAAKuxJ,QAAS,kBAAmBvxJ,KAAK+0K,SAC/C/0K,KAAKi7H,IAAIp0H,EAAK,YAAa7G,KAAK28K,kBAChC38K,KAAKi7H,IAAIp0H,EAAK,UAAW7G,KAAKy8K,gBAC9Bz8K,KAAKi7H,IAAIp0H,EAAK,YAAa7G,KAAK28K,kBAChC38K,KAAKi7H,IAAIp0H,EAAK,WAAY7G,KAAKy8K,gBAC/Bz8K,KAAK8X,gBAAgB,YACrB9X,KAAKmnJ,SAAS,YACVnnJ,KAAKg9K,aACPh9K,KAAKi7H,IAAIj7H,KAAKuxJ,QAASvxJ,KAAKg9K,YAAah9K,KAAK80K,QAEhD90K,KAAKG,UAAW,CAClB,CAiBAsmJ,QAAAA,CAASpvJ,GAAmC,IAA7B0tF,EAAK96E,UAAA5L,OAAA,QAAA/D,IAAA2P,UAAA,GAAAA,UAAA,GAAG,CAAC,EAAGkK,EAAUlK,UAAA5L,OAAA,QAAA/D,IAAA2P,UAAA,GAAAA,UAAA,GAAG,CAAC,EAYvC,OAVA86E,EAAMksC,UAAYlsC,EAAMksC,UAAY,cACpClsC,EAAQ5lF,OAAOmF,OAAO,CACpBsuH,SAAU,GACT7tC,GACH5wE,EAAahV,OAAOmF,OAAO,CACzB,KAAQ,SACR,gBAAiB,EACjB,gBAAiB,EACjB,gBAAiB,KAChB6P,GACI4nH,MAAM0qB,SAASpvJ,EAAM0tF,EAAO5wE,EACrC,CAYAimK,eAAAA,CAAgB73E,GACd,MAAM17F,EAAM7G,KAAK68K,IAAIvsB,IAAIvhJ,cACN,cAAfwzF,EAAMlrG,MACRkrG,EAAMvH,iBAMW,eAAfuH,EAAMlrG,MAA0BitJ,IAClC/hD,EAAMvH,iBAERmtD,KACAnoJ,KAAKmnJ,SAAS,eAOdnnJ,KAAKk7H,QAAQ,gBACbl7H,KAAKg7H,GAAGn0H,EAAK,YAAa7G,KAAK28K,kBAC/B38K,KAAKg7H,GAAGn0H,EAAK,UAAW7G,KAAKy8K,gBAC7Bz8K,KAAKg7H,GAAGn0H,EAAK,YAAa7G,KAAK28K,kBAC/B38K,KAAKg7H,GAAGn0H,EAAK,WAAY7G,KAAKy8K,gBAC9Bz8K,KAAK48K,gBAAgBr6E,GAAO,EAC9B,CAgBAq6E,eAAAA,CAAgBr6E,GAAQ,CAYxBm6E,aAAAA,CAAcn6E,GACZ,MAAM17F,EAAM7G,KAAK68K,IAAIvsB,IAAIvhJ,cACzBq5I,KACApoJ,KAAKunJ,YAAY,eAOjBvnJ,KAAKk7H,QAAQ,kBACbl7H,KAAKi7H,IAAIp0H,EAAK,YAAa7G,KAAK28K,kBAChC38K,KAAKi7H,IAAIp0H,EAAK,UAAW7G,KAAKy8K,gBAC9Bz8K,KAAKi7H,IAAIp0H,EAAK,YAAa7G,KAAK28K,kBAChC38K,KAAKi7H,IAAIp0H,EAAK,WAAY7G,KAAKy8K,gBAC/Bz8K,KAAK80K,QACP,CASAA,MAAAA,GAKE,IAAK90K,KAAKswJ,MAAQtwJ,KAAK68K,IACrB,OAKF,MAAMI,EAAWj9K,KAAKk9K,cACtB,OAAID,IAAaj9K,KAAKm9K,YAGtBn9K,KAAKm9K,UAAYF,EACjBj9K,KAAKk4J,2BAA2B,iBAAiB,KAE/C,MAAMklB,EAAUp9K,KAAK+8K,WAAa,SAAW,QAG7C/8K,KAAK68K,IAAIn0K,KAAKioF,MAAMysF,IAAuB,IAAXH,GAAgBI,QAAQ,GAAK,GAAG,KARzDJ,CAWX,CASAC,WAAAA,GACE,OAAO14F,OAAO63F,GAAMr8K,KAAKs9K,aAAc,EAAG,GAAGD,QAAQ,GACvD,CAaAE,iBAAAA,CAAkBh7E,GAChB,MAAM38F,EAAWgjJ,GAAmB5oJ,KAAKswJ,IAAK/tD,GAC9C,OAAIviG,KAAK+8K,WACAn3K,EAASiqG,EAEXjqG,EAAS4iG,CAClB,CAYAouD,aAAAA,CAAcr0D,GACZ,MAAMi7E,EAAoBx9K,KAAK0xJ,SAASoD,cAAc+B,kBAChD4mB,EAAoBD,GAAqBA,EAAkB1mB,QAC3D4mB,EAAiBF,GAAqBA,EAAkBE,eAC1DD,EACEC,GAAgC,cAAdn7E,EAAMxpG,MAAwB2kL,GAAgC,cAAdn7E,EAAMxpG,KAC1EwpG,EAAMvH,iBACNuH,EAAM1I,kBACN75F,KAAK29K,YACID,GAAgC,eAAdn7E,EAAMxpG,MAAyB2kL,GAAgC,YAAdn7E,EAAMxpG,KAClFwpG,EAAMvH,iBACNuH,EAAM1I,kBACN75F,KAAK49K,eAEL7hD,MAAM66B,cAAcr0D,GAIC,cAAdA,EAAMxpG,KAAqC,cAAdwpG,EAAMxpG,KAC5CwpG,EAAMvH,iBACNuH,EAAM1I,kBACN75F,KAAK29K,YAGkB,YAAdp7E,EAAMxpG,KAAmC,eAAdwpG,EAAMxpG,KAC1CwpG,EAAMvH,iBACNuH,EAAM1I,kBACN75F,KAAK49K,eAGL7hD,MAAM66B,cAAcr0D,EAExB,CASA6xE,WAAAA,CAAY7xE,GACVA,EAAM1I,kBACN0I,EAAMvH,gBACR,CAaA+hF,QAAAA,CAASt3F,GACP,QAAanrF,IAATmrF,EACF,OAAOzlF,KAAK69K,YAAa,EAE3B79K,KAAK69K,YAAcp4F,EACfzlF,KAAK69K,UACP79K,KAAKmnJ,SAAS,uBAEdnnJ,KAAKmnJ,SAAS,wBAElB,EAEFiK,GAAYgI,kBAAkB,SAAUmjB,IASxC,MAAMuB,GAAaA,CAAC37E,EAAMziB,IAAQ28F,GAAMl6E,EAAOziB,EAAM,IAAK,EAAG,KAAK29F,QAAQ,GAAK,IA8G/EjsB,GAAYgI,kBAAkB,kBAvG9B,cAA8BhI,GAU5B9xJ,WAAAA,CAAY8rJ,EAAQ9xJ,GAClByiI,MAAMqvB,EAAQ9xJ,GACd0G,KAAK+9K,SAAW,GAChB/9K,KAAKg7H,GAAGowB,EAAQ,YAAYzzJ,GAAKqI,KAAK80K,OAAOn9K,IAC/C,CAQA8uJ,QAAAA,GACE,MAAM/9I,EAAKqzH,MAAM0qB,SAAS,MAAO,CAC/Bx1B,UAAW,sBAEPu+B,EAAU/I,GAAS,OAAQ,CAC/Bx1B,UAAW,qBAEP+sD,EAAav3B,GAAS,OAAQ,CAClCt5D,YAAantF,KAAK2yJ,SAAS,YAEvBsrB,EAAY/8B,IAAAA,eAA0B,MAS5C,OARAlhJ,KAAKk+K,cAAgBz3B,GAAS,OAAQ,CACpCx1B,UAAW,qCACX9jC,YAAa,OAEfzkF,EAAG9B,YAAY4oJ,GACfA,EAAQ5oJ,YAAYo3K,GACpBxuB,EAAQ5oJ,YAAYq3K,GACpBzuB,EAAQ5oJ,YAAY5G,KAAKk+K,eAClBx1K,CACT,CACA6yH,OAAAA,GACEv7H,KAAK+9K,SAAW,KAChB/9K,KAAKk+K,cAAgB,KACrBniD,MAAMR,SACR,CAUAu5C,MAAAA,CAAOvyE,GACLviG,KAAKk4J,2BAA2B,0BAA0B,KACxD,MAAMmZ,EAAcrxK,KAAKuxJ,QAAQ8f,YAC3BrW,EAAWh7J,KAAKuxJ,QAAQyJ,WACxBj+B,EAAWs0C,GAAeA,EAAYC,SAAWD,EAAY8M,cAAgBn+K,KAAKuxJ,QAAQx0B,WAC1FqhD,EAAcp+K,KAAKuxJ,QAAQ6sB,cAC3BrxF,EAAW/sF,KAAK+9K,SAChBM,EAAUP,GAAWM,EAAarhD,GACpC/8H,KAAKs+K,WAAaD,IAEpBr+K,KAAKswJ,IAAI3/D,MAAMiP,MAAQy+E,EAEvBlxF,GAAYntF,KAAKk+K,cAAeG,GAChCr+K,KAAKs+K,SAAWD,GAIlB,IAAK,IAAItgL,EAAI,EAAGA,EAAIi9J,EAAS38J,OAAQN,IAAK,CACxC,MAAMsI,EAAQ20J,EAAS30J,MAAMtI,GACvB2hF,EAAMs7E,EAASt7E,IAAI3hF,GACzB,IAAI0xD,EAAOs9B,EAAShvF,GACf0xD,IACHA,EAAOzvD,KAAKswJ,IAAI1pJ,YAAY6/I,MAC5B15D,EAAShvF,GAAK0xD,GAIZA,EAAKmuD,QAAQv3G,QAAUA,GAASopD,EAAKmuD,QAAQl+B,MAAQA,IAGzDjwB,EAAKmuD,QAAQv3G,MAAQA,EACrBopD,EAAKmuD,QAAQl+B,IAAMA,EAGnBjwB,EAAKkhC,MAAMkV,KAAOi4E,GAAWz3K,EAAO+3K,GACpC3uH,EAAKkhC,MAAMiP,MAAQk+E,GAAWp+F,EAAMr5E,EAAO+3K,GAC7C,CAGA,IAAK,IAAIrgL,EAAIgvF,EAAS1uF,OAAQN,EAAIi9J,EAAS38J,OAAQN,IACjDiC,KAAKswJ,IAAIj+I,YAAY06E,EAAShvF,EAAI,IAEpCgvF,EAAS1uF,OAAS28J,EAAS38J,MAAM,GAErC,IAiKF+yJ,GAAYgI,kBAAkB,cAlJ9B,cAA0BhI,GAUxB9xJ,WAAAA,CAAY8rJ,EAAQ9xJ,GAClByiI,MAAMqvB,EAAQ9xJ,GACd0G,KAAK80K,OAAStnB,GAASH,GAAMrtJ,KAAMA,KAAK80K,QAAS1nB,GACnD,CAQA3G,QAAAA,GACE,OAAO1qB,MAAM0qB,SAAS,MAAO,CAC3Bx1B,UAAW,oBACV,CACD,cAAe,QAEnB,CAYA6jD,MAAAA,CAAOyJ,EAAaC,EAAc93B,GAChC,MAAM+3B,EAAcn2B,GAAatoJ,KAAKswJ,KAChCouB,EAAalwD,GAAsBxuH,KAAKuxJ,QAAQ7oJ,MAChDi2K,EAAiBJ,EAAY3+E,MAAQ4+E,EAI3C,IAAKE,IAAeD,EAClB,OAOF,IAAIG,EAAmBL,EAAY14E,KAAO64E,EAAW74E,KAAO84E,EAMxDE,EAAoBN,EAAY3+E,MAAQ++E,GAAkBD,EAAWhoB,MAAQ6nB,EAAY7nB,OAOxFmoB,IACHA,EAAoBN,EAAY3+E,MAAQ++E,EACxCC,EAAmBD,GAIrB,IAAIG,EAAgBL,EAAY7+E,MAAQ,EAIpCg/E,EAAmBE,EACrBA,GAAiBA,EAAgBF,EACxBC,EAAoBC,IAC7BA,EAAgBD,GAMdC,EAAgB,EAClBA,EAAgB,EACPA,EAAgBL,EAAY7+E,QACrCk/E,EAAgBL,EAAY7+E,OAO9Bk/E,EAAgBx7K,KAAKq1K,MAAMmG,GAC3B9+K,KAAKswJ,IAAI3/D,MAAM+lE,MAAQ,IAAIooB,MAC3B9+K,KAAK++K,MAAMr4B,EACb,CAQAq4B,KAAAA,CAAMr4B,GACJv5D,GAAYntF,KAAKswJ,IAAK5J,EACxB,CAmBAs4B,UAAAA,CAAWT,EAAaC,EAAcr8E,EAAM7V,GAC1CtsF,KAAKk4J,2BAA2B,0BAA0B,KACxD,IAAIxR,EACJ,MAAM3pB,EAAW/8H,KAAKuxJ,QAAQx0B,WAC9B,GAAI/8H,KAAKuxJ,QAAQ8f,aAAerxK,KAAKuxJ,QAAQ8f,YAAYC,SAAU,CACjE,MAAM2N,EAAaj/K,KAAKuxJ,QAAQ8f,YAAY4N,aACtCC,EAAgBD,EAAaT,EAAeS,EAClDv4B,GAAWw4B,EAAgB,EAAI,GAAK,KAAOtkB,GAAWskB,EAAeD,EACvE,MACEv4B,EAAUkU,GAAWz4D,EAAM46B,GAE7B/8H,KAAK80K,OAAOyJ,EAAaC,EAAc93B,GACnCp6D,GACFA,GACF,GAEJ,IAcF,MAAM6yF,WAAwB/tB,GAU5B9xJ,WAAAA,CAAY8rJ,EAAQ9xJ,GAClByiI,MAAMqvB,EAAQ9xJ,GACd0G,KAAK2zJ,QAAQ,UACb3zJ,KAAK80K,OAAStnB,GAASH,GAAMrtJ,KAAMA,KAAK80K,QAAS1nB,GACnD,CAQA3G,QAAAA,GACE,OAAO1qB,MAAM0qB,SAAS,MAAO,CAC3Bx1B,UAAW,oCACV,CACD,cAAe,QAEnB,CAaA6jD,MAAAA,CAAOyJ,EAAaC,GAClB,MAAMY,EAAcp/K,KAAKqzJ,SAAS,eAClC,IAAK+rB,EACH,OAEF,MAAMj9E,EAAOniG,KAAKuxJ,QAAQwX,YAAc/oK,KAAKuxJ,QAAQiqB,WAAWvX,YAAcjkK,KAAKuxJ,QAAQ0S,cAC3Fmb,EAAYJ,WAAWT,EAAaC,EAAcr8E,EACpD,EASFg9E,GAAgB//K,UAAUsyJ,SAAW,CACnC3kE,SAAU,IAIPi5D,IAAW9B,IACdi7B,GAAgB//K,UAAUsyJ,SAAS3kE,SAAS5zF,KAAK,eAEnDi4J,GAAYgI,kBAAkB,kBAAmB+lB,IAcjD,MAAME,WAAyBjuB,GAU7B9xJ,WAAAA,CAAY8rJ,EAAQ9xJ,GAClByiI,MAAMqvB,EAAQ9xJ,GACd0G,KAAK80K,OAAStnB,GAASH,GAAMrtJ,KAAMA,KAAK80K,QAAS1nB,GACnD,CAQA3G,QAAAA,GACE,OAAO1qB,MAAM0qB,SAAS,MAAO,CAC3Bx1B,UAAW,qBAEf,CAaA6jD,MAAAA,CAAOyJ,EAAaC,GAClB,MAAMr8E,EAAOq8E,EAAex+K,KAAKuxJ,QAAQx0B,WACzC/8H,KAAKqzJ,SAAS,eAAe2rB,WAAWT,EAAaC,EAAcr8E,GAAM,KACvEniG,KAAKswJ,IAAI3/D,MAAMkV,KAAU04E,EAAY3+E,MAAQ4+E,EAAvB,IAAuC,GAEjE,EASFa,GAAiBjgL,UAAUsyJ,SAAW,CACpC3kE,SAAU,CAAC,gBAEbqkE,GAAYgI,kBAAkB,mBAAoBimB,IAkBlD,MAAMC,WAAgB/C,GAUpBj9K,WAAAA,CAAY8rJ,EAAQ9xJ,GAClByiI,MAAMqvB,EAAQ9xJ,GACd0G,KAAKu/K,mBACP,CAOAA,iBAAAA,GACEv/K,KAAK+0K,QAAU1nB,GAAMrtJ,KAAMA,KAAK80K,QAChC90K,KAAK80K,OAAStnB,GAASxtJ,KAAK+0K,QAAS3nB,IACrCptJ,KAAKg7H,GAAGh7H,KAAKuxJ,QAAS,CAAC,iBAAkB,cAAevxJ,KAAK80K,QAC7D90K,KAAKg7H,GAAGh7H,KAAKuxJ,QAAS,CAAC,SAAUvxJ,KAAK+0K,SAClC/0K,KAAKuxJ,QAAQ8f,aACfrxK,KAAKg7H,GAAGh7H,KAAKuxJ,QAAQ8f,YAAa,iBAAkBrxK,KAAK80K,QAK3D90K,KAAKw/K,eAAiB,KACtBx/K,KAAKy/K,uBAAyB9nL,GAAKqI,KAAK0/K,gBAAgB/nL,GACxDqI,KAAK2/K,wBAA0BhoL,GAAKqI,KAAK4/K,iBAAiBjoL,GAC1DqI,KAAKg7H,GAAGh7H,KAAKuxJ,QAAS,CAAC,WAAYvxJ,KAAKy/K,wBACxCz/K,KAAKg7H,GAAGh7H,KAAKuxJ,QAAS,CAAC,QAAS,QAAS,WAAYvxJ,KAAK2/K,yBAItD,gBAA0B,yBAC5B3/K,KAAKg7H,GAAGkmB,IAAY,mBAAoBlhJ,KAAK6/K,kBAEjD,CACAA,iBAAAA,CAAkBloL,GACmB,WAA/BupJ,IAAAA,iBACFlhJ,KAAKm4J,0BAA0B,kBAC/Bn4J,KAAKm4J,0BAA0B,iBAC/Bn4J,KAAK4/K,iBAAiBjoL,KAEjBqI,KAAKuxJ,QAAQoc,SAAY3tK,KAAKuxJ,QAAQmM,UACzC19J,KAAK0/K,kBAIP1/K,KAAK80K,SAET,CACA4K,eAAAA,GACM1/K,KAAKw/K,iBAGTx/K,KAAKw/K,eAAiBx/K,KAAK23J,YAAY33J,KAAK80K,OAAQ1nB,IACtD,CACAwyB,gBAAAA,CAAiBjoL,GACXqI,KAAKuxJ,QAAQ8f,aAAerxK,KAAKuxJ,QAAQ8f,YAAYC,UAAY35K,GAAgB,UAAXA,EAAEN,MAGvE2I,KAAKw/K,iBAGVx/K,KAAK03J,cAAc13J,KAAKw/K,gBACxBx/K,KAAKw/K,eAAiB,KACxB,CAQA/4B,QAAAA,GACE,OAAO1qB,MAAM0qB,SAAS,MAAO,CAC3Bx1B,UAAW,uBACV,CACD,aAAcjxH,KAAK2yJ,SAAS,iBAEhC,CAcAmiB,MAAAA,CAAOvyE,GAEL,GAAmC,WAA/B2+C,IAAAA,gBACF,OAEF,MAAMm9B,EAAUtiD,MAAM+4C,SAyBtB,OAxBA90K,KAAKk4J,2BAA2B,kBAAkB,KAChD,MAAM+L,EAAcjkK,KAAKuxJ,QAAQoc,QAAU3tK,KAAKuxJ,QAAQx0B,WAAa/8H,KAAK8/K,kBACpEzO,EAAcrxK,KAAKuxJ,QAAQ8f,YACjC,IAAIt0C,EAAW/8H,KAAKuxJ,QAAQx0B,WACxBs0C,GAAeA,EAAYC,WAC7Bv0C,EAAW/8H,KAAKuxJ,QAAQ8f,YAAY0O,mBAElC//K,KAAKs+K,WAAaD,IAEpBr+K,KAAKswJ,IAAIz4I,aAAa,iBAA4B,IAAVwmK,GAAehB,QAAQ,IAC/Dr9K,KAAKs+K,SAAWD,GAEdr+K,KAAKggL,eAAiB/b,GAAejkK,KAAKkoK,YAAcnrC,IAE1D/8H,KAAKswJ,IAAIz4I,aAAa,iBAAkB7X,KAAK2yJ,SAAS,oDAAqD,CAACiI,GAAWqJ,EAAalnC,GAAW69B,GAAW79B,EAAUA,IAAY,eAChL/8H,KAAKggL,aAAe/b,EACpBjkK,KAAKkoK,UAAYnrC,GAIf/8H,KAAK68K,KACP78K,KAAK68K,IAAI/H,OAAOtmD,GAAsBxuH,KAAK0I,MAAO1I,KAAKk9K,cACzD,IAEKmB,CACT,CASAjN,SAAAA,CAAUpN,GACJhkK,KAAKuxJ,QAAQ8f,aAAerxK,KAAKuxJ,QAAQ8f,YAAYC,UACvDtxK,KAAKuxJ,QAAQ8f,YAAYE,qBAE3BvxK,KAAKuxJ,QAAQ0S,YAAYD,EAC3B,CAWA8b,eAAAA,GACE,OAAO9/K,KAAKuxJ,QAAQwX,YAAc/oK,KAAKuxJ,QAAQiqB,WAAWvX,YAAcjkK,KAAKuxJ,QAAQ0S,aACvF,CAQAqZ,UAAAA,GACE,MAAMrZ,EAAcjkK,KAAK8/K,kBACzB,IAAIzB,EACJ,MAAMhN,EAAcrxK,KAAKuxJ,QAAQ8f,YAWjC,OAVIA,GAAeA,EAAYC,UAC7B+M,GAAWpa,EAAcoN,EAAY4O,iBAAmB5O,EAAY4N,aAGhE5N,EAAY8K,eACdkC,EAAU,IAGZA,EAAUpa,EAAcjkK,KAAKuxJ,QAAQx0B,WAEhCshD,CACT,CAUAjE,eAAAA,CAAgB73E,GACTunD,GAAkBvnD,KAKvBA,EAAM1I,kBACN75F,KAAKkgL,iBAAmBlgL,KAAKuxJ,QAAQmM,SACrC19J,KAAKuxJ,QAAQqM,QACb7hC,MAAMq+C,gBAAgB73E,GACxB,CAWAq6E,eAAAA,CAAgBr6E,GAA0B,IAOpC49E,EAPiBC,EAASn2K,UAAA5L,OAAA,QAAA/D,IAAA2P,UAAA,IAAAA,UAAA,GAC9B,IAAK6/I,GAAkBvnD,IAAUpa,MAAMnoF,KAAKuxJ,QAAQx0B,YAClD,OAEGqjD,GAAcpgL,KAAKuxJ,QAAQwX,aAC9B/oK,KAAKuxJ,QAAQwX,WAAU,GAGzB,MAAMmK,EAAWlzK,KAAKu9K,kBAAkBh7E,GAClC8uE,EAAcrxK,KAAKuxJ,QAAQ8f,YACjC,GAAKA,GAAgBA,EAAYC,SAO1B,CACL,GAAI4B,GAAY,IAEd,YADA7B,EAAY+K,iBAGd,MAAM6D,EAAgB5O,EAAY4O,gBAC5B9B,EAAc9M,EAAY0O,kBAiBhC,GAhBAI,EAAUF,EAAgB/M,EAAW7B,EAAY4N,aAG7CkB,GAAWhC,IACbgC,EAAUhC,GAKRgC,GAAWF,IACbE,EAAUF,EAAgB,IAMxBE,IAAYt9D,IACd,MAEJ,MAhCEs9D,EAAUjN,EAAWlzK,KAAKuxJ,QAAQx0B,WAG9BojD,IAAYngL,KAAKuxJ,QAAQx0B,aAC3BojD,GAAoB,IA+BxBngL,KAAKoxK,UAAU+O,GACXngL,KAAKuxJ,QAAQG,SAASypB,qBACxBn7K,KAAK80K,QAET,CACAz0K,MAAAA,GACE07H,MAAM17H,SACN,MAAMggL,EAAmBrgL,KAAKqzJ,SAAS,oBAClCgtB,GAGLA,EAAiB1qB,MACnB,CACAr1J,OAAAA,GACEy7H,MAAMz7H,UACN,MAAM+/K,EAAmBrgL,KAAKqzJ,SAAS,oBAClCgtB,GAGLA,EAAiBvtD,MACnB,CAUA4pD,aAAAA,CAAcn6E,GACZw5B,MAAM2gD,cAAcn6E,GAGhBA,GACFA,EAAM1I,kBAER75F,KAAKuxJ,QAAQwX,WAAU,GASvB/oK,KAAKuxJ,QAAQr2B,QAAQ,CACnB7jI,KAAM,aACNkN,OAAQvE,KACRsoK,mBAAmB,IAEjBtoK,KAAKkgL,gBACP7kB,GAAer7J,KAAKuxJ,QAAQD,QAI5BtxJ,KAAK+0K,SAET,CAKA6I,WAAAA,GACE59K,KAAKoxK,UAAUpxK,KAAKuxJ,QAAQ0S,cA7UX,EA8UnB,CAKA0Z,QAAAA,GACE39K,KAAKoxK,UAAUpxK,KAAKuxJ,QAAQ0S,cApVX,EAqVnB,CAUAqc,YAAAA,CAAa/9E,GACPviG,KAAKuxJ,QAAQmM,SACf19J,KAAKuxJ,QAAQD,OAEbtxJ,KAAKuxJ,QAAQqM,OAEjB,CAkBAhH,aAAAA,CAAcr0D,GACZ,MAAM8uE,EAAcrxK,KAAKuxJ,QAAQ8f,YACjC,GAAkB,MAAd9uE,EAAMxpG,KAA6B,UAAdwpG,EAAMxpG,IAC7BwpG,EAAMvH,iBACNuH,EAAM1I,kBACN75F,KAAKsgL,aAAa/9E,QACb,GAAkB,SAAdA,EAAMxpG,IACfwpG,EAAMvH,iBACNuH,EAAM1I,kBACN75F,KAAKoxK,UAAU,QACV,GAAkB,QAAd7uE,EAAMxpG,IACfwpG,EAAMvH,iBACNuH,EAAM1I,kBACFw3E,GAAeA,EAAYC,SAC7BtxK,KAAKoxK,UAAUC,EAAY0O,mBAE3B//K,KAAKoxK,UAAUpxK,KAAKuxJ,QAAQx0B,iBAEzB,GAAI,UAAUt9H,KAAK8iG,EAAMxpG,KAAM,CACpCwpG,EAAMvH,iBACNuH,EAAM1I,kBACN,MAAM0mF,EAAyC,GAA1BjgG,SAASiiB,EAAMxpG,IAAK,IACrCs4K,GAAeA,EAAYC,SAC7BtxK,KAAKoxK,UAAUC,EAAY4O,gBAAkB5O,EAAY4N,aAAesB,GAExEvgL,KAAKoxK,UAAUpxK,KAAKuxJ,QAAQx0B,WAAawjD,EAE7C,KAAyB,aAAdh+E,EAAMxpG,KACfwpG,EAAMvH,iBACNuH,EAAM1I,kBACN75F,KAAKoxK,UAAUpxK,KAAKuxJ,QAAQ0S,cAAgBuc,KACrB,WAAdj+E,EAAMxpG,KACfwpG,EAAMvH,iBACNuH,EAAM1I,kBACN75F,KAAKoxK,UAAUpxK,KAAKuxJ,QAAQ0S,cAAgBuc,KAG5CzkD,MAAM66B,cAAcr0D,EAExB,CACAg5B,OAAAA,GACEv7H,KAAK4/K,mBACL5/K,KAAKi7H,IAAIj7H,KAAKuxJ,QAAS,CAAC,iBAAkB,cAAevxJ,KAAK80K,QAC9D90K,KAAKi7H,IAAIj7H,KAAKuxJ,QAAS,CAAC,SAAUvxJ,KAAK+0K,SACnC/0K,KAAKuxJ,QAAQ8f,aACfrxK,KAAKi7H,IAAIj7H,KAAKuxJ,QAAQ8f,YAAa,iBAAkBrxK,KAAK80K,QAE5D90K,KAAKi7H,IAAIj7H,KAAKuxJ,QAAS,CAAC,WAAYvxJ,KAAKy/K,wBACzCz/K,KAAKi7H,IAAIj7H,KAAKuxJ,QAAS,CAAC,QAAS,QAAS,WAAYvxJ,KAAK2/K,yBAIvD,gBAA0B,yBAC5B3/K,KAAKi7H,IAAIimB,IAAY,mBAAoBlhJ,KAAK6/K,mBAEhD9jD,MAAMR,SACR,EASF+jD,GAAQlgL,UAAUsyJ,SAAW,CAC3B3kE,SAAU,CAAC,kBAAmB,mBAC9B+vF,QAAS,mBAIN92B,IAAW9B,IACdo7B,GAAQlgL,UAAUsyJ,SAAS3kE,SAASq6B,OAAO,EAAG,EAAG,oBAEnDgqC,GAAYgI,kBAAkB,UAAWkmB,IAYzC,MAAMmB,WAAwBrvB,GAU5B9xJ,WAAAA,CAAY8rJ,EAAQ9xJ,GAClByiI,MAAMqvB,EAAQ9xJ,GACd0G,KAAK48K,gBAAkBpvB,GAASH,GAAMrtJ,KAAMA,KAAK48K,iBAAkBxvB,IACnEptJ,KAAK0gL,yBAA2BlzB,GAASH,GAAMrtJ,KAAMA,KAAK2gL,iBAAkBvzB,IAC5EptJ,KAAK4gL,sBAAwBjpL,GAAKqI,KAAK08K,cAAc/kL,GACrDqI,KAAK6gL,wBAA0BlpL,GAAKqI,KAAKo6K,gBAAgBziL,GACzDqI,KAAKK,QACP,CAQAomJ,QAAAA,GACE,OAAO1qB,MAAM0qB,SAAS,MAAO,CAC3Bx1B,UAAW,oCAEf,CAWA2rD,eAAAA,CAAgBr6E,GACd,MAAMu+E,EAAU9gL,KAAKqzJ,SAAS,WAC9B,IAAKytB,EACH,OAEF,MAAMC,EAAkBD,EAAQztB,SAAS,mBACnCgtB,EAAmBS,EAAQztB,SAAS,oBAC1C,IAAK0tB,IAAoBV,EACvB,OAEF,MAAMW,EAAYF,EAAQp4K,KACpB61K,EAAcj2B,GAAa04B,GACjC,IAAIxC,EAAe51B,GAAmBo4B,EAAWz+E,GAAOiG,EAKxDg2E,EAAenC,GAAMmC,EAAc,EAAG,GAClC6B,GACFA,EAAiBvL,OAAOyJ,EAAaC,GAEnCuC,GACFA,EAAgBjM,OAAOyJ,EAAauC,EAAQ5D,cAEhD,CAsBAyD,eAAAA,CAAgBp+E,GACd,MAAMu+E,EAAU9gL,KAAKqzJ,SAAS,WAC1BytB,GACFA,EAAQlE,gBAAgBr6E,EAE5B,CAQAu0D,OAAAA,GACE,OAAO92J,KAAKG,QACd,CAKAG,OAAAA,GAEE,GADAN,KAAK+sF,WAAWp0F,SAAQiY,GAASA,EAAMtQ,SAAWsQ,EAAMtQ,YACnDN,KAAK82J,YAGV92J,KAAKi7H,IAAI,CAAC,YAAa,cAAej7H,KAAK6gL,yBAC3C7gL,KAAKi7H,IAAIj7H,KAAKswJ,IAAK,YAAatwJ,KAAK48K,iBACrC58K,KAAKihL,+CACLjhL,KAAKmnJ,SAAS,YACdnnJ,KAAKG,UAAW,EAGZH,KAAKuxJ,QAAQwX,aAAa,CAC5B,MAAM+X,EAAU9gL,KAAKqzJ,SAAS,WAC9BrzJ,KAAKuxJ,QAAQwX,WAAU,GACnB+X,EAAQZ,iBACV7kB,GAAer7J,KAAKuxJ,QAAQD,OAEhC,CACF,CAKAjxJ,MAAAA,GACEL,KAAK+sF,WAAWp0F,SAAQiY,GAASA,EAAMvQ,QAAUuQ,EAAMvQ,WACnDL,KAAK82J,YAGT92J,KAAKg7H,GAAG,CAAC,YAAa,cAAeh7H,KAAK6gL,yBAC1C7gL,KAAKg7H,GAAGh7H,KAAKswJ,IAAK,YAAatwJ,KAAK48K,iBACpC58K,KAAKunJ,YAAY,YACjBvnJ,KAAKG,UAAW,EAClB,CAKA8gL,4CAAAA,GACE,MAAMp6K,EAAM7G,KAAKswJ,IAAIvhJ,cACrB/O,KAAKi7H,IAAIp0H,EAAK,YAAa7G,KAAK0gL,0BAChC1gL,KAAKi7H,IAAIp0H,EAAK,YAAa7G,KAAK0gL,0BAChC1gL,KAAKi7H,IAAIp0H,EAAK,UAAW7G,KAAK4gL,uBAC9B5gL,KAAKi7H,IAAIp0H,EAAK,WAAY7G,KAAK4gL,sBACjC,CAWAxG,eAAAA,CAAgB73E,GACd,MAAM17F,EAAM7G,KAAKswJ,IAAIvhJ,cACf+xK,EAAU9gL,KAAKqzJ,SAAS,WAC1BytB,GACFA,EAAQ1G,gBAAgB73E,GAE1BviG,KAAKg7H,GAAGn0H,EAAK,YAAa7G,KAAK0gL,0BAC/B1gL,KAAKg7H,GAAGn0H,EAAK,YAAa7G,KAAK0gL,0BAC/B1gL,KAAKg7H,GAAGn0H,EAAK,UAAW7G,KAAK4gL,uBAC7B5gL,KAAKg7H,GAAGn0H,EAAK,WAAY7G,KAAK4gL,sBAChC,CAWAlE,aAAAA,CAAcn6E,GACZ,MAAMu+E,EAAU9gL,KAAKqzJ,SAAS,WAC1BytB,GACFA,EAAQpE,cAAcn6E,GAExBviG,KAAKihL,8CACP,EASFR,GAAgBrhL,UAAUsyJ,SAAW,CACnC3kE,SAAU,CAAC,YAEbqkE,GAAYgI,kBAAkB,kBAAmBqnB,IAajD,MAAMS,WAA+BjH,GAanC36K,WAAAA,CAAY8rJ,EAAQ9xJ,GAClByiI,MAAMqvB,EAAQ9xJ,GACd0G,KAAK2zJ,QAAQ,4BACb3zJ,KAAKg7H,GAAGowB,EAAQ,CAAC,wBAAyB,0BAA0BzzJ,GAAKqI,KAAKmhL,6BAA6BxpL,KAC3GqI,KAAKg7H,GAAGowB,EAAQ,CAAC,iCAAkC,mBAAmBzzJ,GAAKqI,KAAKohL,oCAAoCzpL,KACpHqI,KAAKg7H,GAAGowB,EAAQ,CAAC,iBAAkB,sBAAuB,0BAA0B,IAAMprJ,KAAKqhL,0CAG/FrhL,KAAKM,SACP,CAQA60J,aAAAA,GACE,MAAO,6CAA6Cp5B,MAAMo5B,iBAC5D,CAMAksB,qCAAAA,GAEuE,UAA/CrhL,KAAKuxJ,QAAQ+vB,cAAczoK,UAAU,EAAG,IACzB7Y,KAAKuxJ,QAAQgwB,mBAAqBvhL,KAAKuxJ,QAAQiwB,iBAKhFxhL,KAAKuxJ,QAAQkwB,wBACfzhL,KAAKuxJ,QAAQmwB,uBAEf1hL,KAAK8yH,QANH9yH,KAAK21J,MAOT,CAWAyrB,mCAAAA,GACMlgC,IAAAA,0BAAiF,IAA3ClhJ,KAAKuxJ,QAAQ8Y,2BAAuCrqK,KAAKuxJ,QAAQG,SAASiwB,gCAAkC,iCACpJ3hL,KAAKK,SAELL,KAAKM,SAET,CAYA6gL,4BAAAA,CAA6B5+E,GACvBviG,KAAKuxJ,QAAQkwB,wBACfzhL,KAAK2zJ,QAAQ,2BACb3zJ,KAAKq+J,YAAY,6BAEjBr+J,KAAK2zJ,QAAQ,4BACb3zJ,KAAKq+J,YAAY,uBAEnBr+J,KAAKohL,qCACP,CAaAhN,WAAAA,CAAY7xE,GACLviG,KAAKuxJ,QAAQkwB,uBAGhBzhL,KAAKuxJ,QAAQmwB,uBAFb1hL,KAAKuxJ,QAAQ4Y,yBAIjB,CAMAxU,IAAAA,GAEiD,oBAApCzU,IAAAA,sBAGXnlB,MAAM45B,MACR,EASFurB,GAAuB9hL,UAAUo1K,aAAe,qBAChDpjB,GAAYgI,kBAAkB,yBAA0B8nB,IAaxD,MAAMU,WAAyB3H,GAU7B36K,WAAAA,CAAY8rJ,EAAQ9xJ,GAClByiI,MAAMqvB,EAAQ9xJ,GACd0G,KAAK2zJ,QAAQ,oBACb3zJ,KAAKg7H,GAAGowB,EAAQ,oBAAoBzzJ,GAAKqI,KAAK6hL,uBAAuBlqL,MACjB,IAAhDupJ,IAAWkK,EAAO02B,OAAOC,oBAC3B/hL,KAAKM,SAET,CAQA60J,aAAAA,GACE,MAAO,0BAA0Bp5B,MAAMo5B,iBACzC,CAWA0sB,sBAAAA,CAAuBt/E,GACjBviG,KAAKuxJ,QAAQywB,gBACfhiL,KAAKq+J,YAAY,mBACjBr+J,KAAK2zJ,QAAQ,qBAEb3zJ,KAAKq+J,YAAY,cACjBr+J,KAAK2zJ,QAAQ,oBAEjB,CAaAygB,WAAAA,CAAY7xE,GACLviG,KAAKuxJ,QAAQywB,eAGhBhiL,KAAKuxJ,QAAQ0wB,iBAFbjiL,KAAKuxJ,QAAQ2wB,mBAIjB,EASFN,GAAiBxiL,UAAUo1K,aAAe,aAC1CpjB,GAAYgI,kBAAkB,mBAAoBwoB,IA0DlDxwB,GAAYgI,kBAAkB,cAlB9B,cAA0BhI,GAOxB3K,QAAAA,GACE,MAAM/9I,EAAKqzH,MAAM0qB,SAAS,MAAO,CAC/Bx1B,UAAW,qBAMb,OAJAjxH,KAAK2zJ,QAAQ,SAAUjrJ,GACvBA,EAAG9B,YAAYm1H,MAAM0qB,SAAS,OAAQ,CACpCx1B,UAAW,sBAENvoH,CACT,IA8HF0oJ,GAAYgI,kBAAkB,qBA/G9B,cAAiChI,GAU/B9xJ,WAAAA,CAAY8rJ,EAAQ9xJ,GAClByiI,MAAMqvB,EAAQ9xJ,GACd0G,KAAK80K,OAAStnB,GAASH,GAAMrtJ,KAAMA,KAAK80K,QAAS1nB,GACnD,CAQA3G,QAAAA,GACE,OAAO1qB,MAAM0qB,SAAS,MAAO,CAC3Bx1B,UAAW,sBACV,CACD,cAAe,QAEnB,CAkBA6jD,MAAAA,CAAOqN,EAAcC,EAAerF,EAAUr2B,GAC5C,IAAKq2B,EAAU,CACb,MAAM0B,EAAcjwD,GAAsBxuH,KAAKswJ,KACzCouB,EAAalwD,GAAsBxuH,KAAKuxJ,QAAQ7oJ,MAChD25K,EAAmBF,EAAaviF,MAAQwiF,EAC9C,IAAK1D,IAAeD,EAClB,OAEF,MAAMG,EAAmBuD,EAAat8E,KAAO64E,EAAW74E,KAAOw8E,EACzDxD,EAAoBsD,EAAaviF,MAAQyiF,GAAoB3D,EAAWhoB,MAAQyrB,EAAazrB,OACnG,IAAIooB,EAAgBL,EAAY7+E,MAAQ,EACpCg/E,EAAmBE,EACrBA,GAAiBA,EAAgBF,EACxBC,EAAoBC,IAC7BA,EAAgBD,GAEdC,EAAgB,EAClBA,EAAgB,EACPA,EAAgBL,EAAY7+E,QACrCk/E,EAAgBL,EAAY7+E,OAE9B5/F,KAAKswJ,IAAI3/D,MAAM+lE,MAAQ,IAAIooB,KAC7B,CACA9+K,KAAK++K,MAAM,GAAGr4B,KAChB,CAQAq4B,KAAAA,CAAMr4B,GACJv5D,GAAYntF,KAAKswJ,IAAK5J,EACxB,CAuBA47B,YAAAA,CAAaH,EAAcC,EAAerF,EAAUrP,EAAQphF,GAC1DtsF,KAAKk4J,2BAA2B,mCAAmC,KACjEl4J,KAAK80K,OAAOqN,EAAcC,EAAerF,EAAUrP,EAAO2P,QAAQ,IAC9D/wF,GACFA,GACF,GAEJ,IAgBF,MAAMi2F,WAAgCnxB,GAUpC9xJ,WAAAA,CAAY8rJ,EAAQ9xJ,GAClByiI,MAAMqvB,EAAQ9xJ,GACd0G,KAAK80K,OAAStnB,GAASH,GAAMrtJ,KAAMA,KAAK80K,QAAS1nB,GACnD,CAQA3G,QAAAA,GACE,OAAO1qB,MAAM0qB,SAAS,MAAO,CAC3Bx1B,UAAW,qBAEf,CAkBA6jD,MAAAA,CAAOqN,EAAcC,EAAerF,GAClC,MAAMrP,EAAS,IAAM0U,EACrBpiL,KAAKqzJ,SAAS,sBAAsBivB,aAAaH,EAAcC,EAAerF,EAAUrP,GAAQ,KAC1FqP,EACF/8K,KAAKswJ,IAAI3/D,MAAMruE,OAAY6/J,EAAatiF,OAASuiF,EAAzB,KAExBpiL,KAAKswJ,IAAI3/D,MAAMkV,KAAUs8E,EAAaviF,MAAQwiF,EAAxB,IACxB,GAEJ,EASFG,GAAwBnjL,UAAUsyJ,SAAW,CAC3C3kE,SAAU,CAAC,uBAEbqkE,GAAYgI,kBAAkB,0BAA2BmpB,IAWzD,MAAMC,WAAkBjG,GAUtBj9K,WAAAA,CAAY8rJ,EAAQ9xJ,GAClByiI,MAAMqvB,EAAQ9xJ,GACd0G,KAAKg7H,GAAG,gBAAgBrjI,GAAKqI,KAAKyiL,kBAAkB9qL,KACpDqI,KAAKg7H,GAAGowB,EAAQ,gBAAgBzzJ,GAAKqI,KAAK0iL,qBAAqB/qL,KAC/DyzJ,EAAOiG,OAAM,IAAMrxJ,KAAK0iL,wBAC1B,CAQAj8B,QAAAA,GACE,OAAO1qB,MAAM0qB,SAAS,MAAO,CAC3Bx1B,UAAW,iCACV,CACD,aAAcjxH,KAAK2yJ,SAAS,gBAC5B,YAAa,UAEjB,CAUAynB,eAAAA,CAAgB73E,GACTunD,GAAkBvnD,IAGvBw5B,MAAMq+C,gBAAgB73E,EACxB,CAUAq6E,eAAAA,CAAgBr6E,GACd,MAAMogF,EAA0B3iL,KAAKqzJ,SAAS,2BAC9C,GAAIsvB,EAAyB,CAC3B,MAAMC,EAAc5iL,KAAK0I,KACnBm6K,EAAgBr0D,GAAsBo0D,GACtC7F,EAAW/8K,KAAK+8K,WACtB,IAAI+F,EAAiBl6B,GAAmBg6B,EAAargF,GACrDugF,EAAiB/F,EAAW+F,EAAejzE,EAAIizE,EAAet6E,EAI9Ds6E,EAAiBzG,GAAMyG,EAAgB,EAAG,GAC1CH,EAAwB7N,OAAO+N,EAAeC,EAAgB/F,EAChE,CACKjzB,GAAkBvnD,KAGvBviG,KAAK+iL,aACL/iL,KAAKuxJ,QAAQmc,OAAO1tK,KAAKu9K,kBAAkBh7E,IAC7C,CAKAwgF,UAAAA,GACM/iL,KAAKuxJ,QAAQic,SACfxtK,KAAKuxJ,QAAQic,OAAM,EAEvB,CAQA8P,UAAAA,GACE,OAAIt9K,KAAKuxJ,QAAQic,QACR,EAEFxtK,KAAKuxJ,QAAQmc,QACtB,CAKAkQ,WAAAA,GACE59K,KAAK+iL,aACL/iL,KAAKuxJ,QAAQmc,OAAO1tK,KAAKuxJ,QAAQmc,SAAW,GAC9C,CAKAiQ,QAAAA,GACE39K,KAAK+iL,aACL/iL,KAAKuxJ,QAAQmc,OAAO1tK,KAAKuxJ,QAAQmc,SAAW,GAC9C,CAUAgV,oBAAAA,CAAqBngF,GACnB,MAAMygF,EAAYhjL,KAAKuxJ,QAAQic,QAAU,EAAIxtK,KAAKijL,sBAClDjjL,KAAKswJ,IAAIz4I,aAAa,gBAAiBmrK,GACvChjL,KAAKswJ,IAAIz4I,aAAa,iBAAkBmrK,EAAY,IACtD,CAOAC,mBAAAA,GACE,OAAO3/K,KAAKq1K,MAA8B,IAAxB34K,KAAKuxJ,QAAQmc,SACjC,CAUA+U,iBAAAA,GACE,MAAMS,EAAmBljL,KAAKuxJ,QAAQmc,SACtC1tK,KAAKmtJ,IAAI,kBAAkB,KACK,IAA1BntJ,KAAKuxJ,QAAQmc,UACf1tK,KAAKuxJ,QAAQ4xB,YAAYD,EAC3B,GAEJ,EASFV,GAAUpjL,UAAUsyJ,SAAW,CAC7B3kE,SAAU,CAAC,eACX+vF,QAAS,eAIN92B,IAAW9B,IACds+B,GAAUpjL,UAAUsyJ,SAAS3kE,SAASq6B,OAAO,EAAG,EAAG,2BAQrDo7D,GAAUpjL,UAAU49K,YAAc,eAClC5rB,GAAYgI,kBAAkB,YAAaopB,IAW3C,MAAMY,WAAsBhyB,GAU1B9xJ,WAAAA,CAAY8rJ,GAAsB,IAAd9xJ,EAAO2Q,UAAA5L,OAAA,QAAA/D,IAAA2P,UAAA,GAAAA,UAAA,GAAG,CAAC,EAC7B3Q,EAAQyjL,SAAWzjL,EAAQyjL,WAAY,GAIN,qBAAtBzjL,EAAQ+pL,WAA6B9/B,GAAQjqJ,EAAQ+pL,cAC9D/pL,EAAQ+pL,UAAY/pL,EAAQ+pL,WAAa,CAAC,EAC1C/pL,EAAQ+pL,UAAUtG,SAAWzjL,EAAQyjL,UAEvChhD,MAAMqvB,EAAQ9xJ,GA7cS,SAAUqoF,EAAMypE,GAErCA,EAAOyX,QAAUzX,EAAOyX,MAAMwI,uBAChC1pF,EAAKwlE,SAAS,cAEhBxlE,EAAKq5C,GAAGowB,EAAQ,aAAa,WACtBA,EAAOyX,MAAMwI,sBAGhB1pF,EAAK4lE,YAAY,cAFjB5lE,EAAKwlE,SAAS,aAIlB,GACF,CAocIm8B,CAAmBtjL,KAAMorJ,GACzBprJ,KAAKujL,yBAA2B/1B,GAASH,GAAMrtJ,KAAMA,KAAK48K,iBAAkBxvB,IAC5EptJ,KAAK4gL,sBAAwBjpL,GAAKqI,KAAK08K,cAAc/kL,GACrDqI,KAAKg7H,GAAG,aAAarjI,GAAKqI,KAAKo6K,gBAAgBziL,KAC/CqI,KAAKg7H,GAAG,cAAcrjI,GAAKqI,KAAKo6K,gBAAgBziL,KAChDqI,KAAKg7H,GAAG,aAAarjI,GAAKqI,KAAK48K,gBAAgBjlL,KAI/CqI,KAAKg7H,GAAGh7H,KAAKqjL,UAAW,CAAC,QAAS,iBAAiB,KACjDrjL,KAAKqjL,UAAUl8B,SAAS,qBACxBnnJ,KAAKmnJ,SAAS,qBACdnnJ,KAAKk7H,QAAQ,eAAe,IAE9Bl7H,KAAKg7H,GAAGh7H,KAAKqjL,UAAW,CAAC,OAAQ,mBAAmB,KAClDrjL,KAAKqjL,UAAU97B,YAAY,qBAC3BvnJ,KAAKunJ,YAAY,qBACjBvnJ,KAAKk7H,QAAQ,iBAAiB,GAElC,CAQAurB,QAAAA,GACE,IAAI+8B,EAAmB,wBAIvB,OAHIxjL,KAAK0xJ,SAASqrB,WAChByG,EAAmB,uBAEdznD,MAAM0qB,SAAS,MAAO,CAC3Bx1B,UAAW,kCAAkCuyD,KAEjD,CAWApJ,eAAAA,CAAgB73E,GACd,MAAM17F,EAAM7G,KAAKswJ,IAAIvhJ,cACrB/O,KAAKg7H,GAAGn0H,EAAK,YAAa7G,KAAKujL,0BAC/BvjL,KAAKg7H,GAAGn0H,EAAK,YAAa7G,KAAKujL,0BAC/BvjL,KAAKg7H,GAAGn0H,EAAK,UAAW7G,KAAK4gL,uBAC7B5gL,KAAKg7H,GAAGn0H,EAAK,WAAY7G,KAAK4gL,sBAChC,CAWAlE,aAAAA,CAAcn6E,GACZ,MAAM17F,EAAM7G,KAAKswJ,IAAIvhJ,cACrB/O,KAAKi7H,IAAIp0H,EAAK,YAAa7G,KAAKujL,0BAChCvjL,KAAKi7H,IAAIp0H,EAAK,YAAa7G,KAAKujL,0BAChCvjL,KAAKi7H,IAAIp0H,EAAK,UAAW7G,KAAK4gL,uBAC9B5gL,KAAKi7H,IAAIp0H,EAAK,WAAY7G,KAAK4gL,sBACjC,CAWAhE,eAAAA,CAAgBr6E,GACdviG,KAAKqjL,UAAUzG,gBAAgBr6E,EACjC,EASF6gF,GAAchkL,UAAUsyJ,SAAW,CACjC3kE,SAAU,CAAC,cAEbqkE,GAAYgI,kBAAkB,gBAAiBgqB,IA0C/C,MAAMK,WAAmBxJ,GAUvB36K,WAAAA,CAAY8rJ,EAAQ9xJ,GAClByiI,MAAMqvB,EAAQ9xJ,GApCO,SAAUqoF,EAAMypE,GAEnCA,EAAOyX,QAAUzX,EAAOyX,MAAMyI,qBAChC3pF,EAAKwlE,SAAS,cAEhBxlE,EAAKq5C,GAAGowB,EAAQ,aAAa,WACtBA,EAAOyX,MAAMyI,oBAGhB3pF,EAAK4lE,YAAY,cAFjB5lE,EAAKwlE,SAAS,aAIlB,GACF,CA2BIu8B,CAAiB1jL,KAAMorJ,GACvBprJ,KAAKg7H,GAAGowB,EAAQ,CAAC,YAAa,iBAAiBzzJ,GAAKqI,KAAK80K,OAAOn9K,IAClE,CAQAw9J,aAAAA,GACE,MAAO,oBAAoBp5B,MAAMo5B,iBACnC,CAaAif,WAAAA,CAAY7xE,GACV,MAAMohF,EAAM3jL,KAAKuxJ,QAAQmc,SACnBkW,EAAa5jL,KAAKuxJ,QAAQ4xB,cAChC,GAAY,IAARQ,EAAW,CACb,MAAME,EAAcD,EAAa,GAAM,GAAMA,EAC7C5jL,KAAKuxJ,QAAQmc,OAAOmW,GACpB7jL,KAAKuxJ,QAAQic,OAAM,EACrB,MACExtK,KAAKuxJ,QAAQic,OAAMxtK,KAAKuxJ,QAAQic,QAEpC,CAaAsH,MAAAA,CAAOvyE,GACLviG,KAAK8jL,cACL9jL,KAAK+jL,oBACP,CAaAD,WAAAA,GACE,MAAMH,EAAM3jL,KAAKuxJ,QAAQmc,SACzB,IAAIjsB,EAAQ,EACZzhJ,KAAK2zJ,QAAQ,eAKT3N,IAAUhmJ,KAAKuxJ,QAAQsR,OAAS7iK,KAAKuxJ,QAAQsR,MAAMvS,KACrDtwJ,KAAKuxJ,QAAQic,MAAMxtK,KAAKuxJ,QAAQsR,MAAMvS,IAAIkd,OAEhC,IAARmW,GAAa3jL,KAAKuxJ,QAAQic,SAC5BxtK,KAAK2zJ,QAAQ,eACblS,EAAQ,GACCkiC,EAAM,KACf3jL,KAAK2zJ,QAAQ,cACblS,EAAQ,GACCkiC,EAAM,MACf3jL,KAAK2zJ,QAAQ,iBACblS,EAAQ,GAEV8F,GAAYvnJ,KAAKswJ,IAAK,CAAC,EAAG,EAAG,EAAG,GAAGp5J,QAAO,CAACunI,EAAK1gI,IAAM0gI,EAAM,GAAG1gI,EAAI,IAAM,aAAaA,KAAK,KAC3FopJ,GAASnnJ,KAAKswJ,IAAK,WAAW7O,IAChC,CASAsiC,kBAAAA,GACE,MACMjrK,EADW9Y,KAAKuxJ,QAAQic,SAAqC,IAA1BxtK,KAAKuxJ,QAAQmc,SAC9B,SAAW,OAC/B1tK,KAAKq+J,gBAAkBvlJ,GACzB9Y,KAAKq+J,YAAYvlJ,EAErB,EASF2qK,GAAWrkL,UAAUo1K,aAAe,OACpCpjB,GAAYgI,kBAAkB,aAAcqqB,IAY5C,MAAMO,WAAoB5yB,GAUxB9xJ,WAAAA,CAAY8rJ,GAAsB,IAAd9xJ,EAAO2Q,UAAA5L,OAAA,QAAA/D,IAAA2P,UAAA,GAAAA,UAAA,GAAG,CAAC,EACC,qBAAnB3Q,EAAQ2qL,OACjB3qL,EAAQ2qL,OAAS3qL,EAAQ2qL,OAEzB3qL,EAAQ2qL,QAAS,GAKkB,qBAA1B3qL,EAAQ4qL,eAAiC3gC,GAAQjqJ,EAAQ4qL,kBAClE5qL,EAAQ4qL,cAAgB5qL,EAAQ4qL,eAAiB,CAAC,EAClD5qL,EAAQ4qL,cAAcnH,UAAYzjL,EAAQ2qL,QAE5CloD,MAAMqvB,EAAQ9xJ,GAGd0G,KAAKmkL,uBAAyBxsL,GAAKqI,KAAK+2J,eAAep/J,GACvDqI,KAAKg7H,GAAGowB,EAAQ,CAAC,cAAczzJ,GAAKqI,KAAKokL,kBAAkBzsL,KAC3DqI,KAAKg7H,GAAGh7H,KAAKqkL,WAAY,SAAS1sL,GAAKqI,KAAK+2J,eAAep/J,KAC3DqI,KAAKg7H,GAAGh7H,KAAKkkL,cAAe,SAASvsL,GAAKqI,KAAKskL,yBAAyB3sL,KACxEqI,KAAKg7H,GAAG,WAAWrjI,GAAKqI,KAAK+2J,eAAep/J,KAC5CqI,KAAKg7H,GAAG,aAAarjI,GAAKqI,KAAKg0K,gBAAgBr8K,KAC/CqI,KAAKg7H,GAAG,YAAYrjI,GAAKqI,KAAKk0K,eAAev8K,KAI7CqI,KAAKg7H,GAAGh7H,KAAKkkL,cAAe,CAAC,gBAAiBlkL,KAAKukL,eACnDvkL,KAAKg7H,GAAGh7H,KAAKkkL,cAAe,CAAC,kBAAmBlkL,KAAKwkL,gBACvD,CAQAD,aAAAA,GACEvkL,KAAKmnJ,SAAS,oBAChB,CAQAq9B,eAAAA,GACExkL,KAAKunJ,YAAY,oBACnB,CASA68B,iBAAAA,GAGMpkL,KAAKkkL,cAAcn9B,SAAS,eAAiB/mJ,KAAKqkL,WAAWt9B,SAAS,eACxE/mJ,KAAKmnJ,SAAS,cAKZnnJ,KAAKkkL,cAAcn9B,SAAS,gBAAkB/mJ,KAAKqkL,WAAWt9B,SAAS,eACzE/mJ,KAAKmnJ,SAAS,uBAElB,CAQAV,QAAAA,GACE,IAAI+8B,EAAmB,8BAIvB,OAHKxjL,KAAK0xJ,SAASuyB,SACjBT,EAAmB,6BAEdznD,MAAM0qB,SAAS,MAAO,CAC3Bx1B,UAAW,gCAAgCuyD,KAE/C,CAKAjoD,OAAAA,GACEv7H,KAAKk0K,iBACLn4C,MAAMR,SACR,CAWA+oD,wBAAAA,CAAyB/hF,GACL,WAAdA,EAAMxpG,KACRiH,KAAKqkL,WAAWr+E,OAEpB,CAYAguE,eAAAA,CAAgBzxE,GACdviG,KAAKmnJ,SAAS,aACdnsB,GAAGkmB,IAAY,QAASlhJ,KAAKmkL,uBAC/B,CAYAjQ,cAAAA,CAAe3xE,GACbviG,KAAKunJ,YAAY,aACjBtsB,GAAIimB,IAAY,QAASlhJ,KAAKmkL,uBAChC,CAWAptB,cAAAA,CAAex0D,GACK,WAAdA,EAAMxpG,KACRiH,KAAKk0K,gBAET,EASF8P,GAAY5kL,UAAUsyJ,SAAW,CAC/B3kE,SAAU,CAAC,aAAc,kBAE3BqkE,GAAYgI,kBAAkB,cAAe4qB,IAU7C,MAAMS,WAAoBxK,GACxB36K,WAAAA,CAAY8rJ,EAAQ9xJ,GAClByiI,MAAMqvB,EAAQ9xJ,GACd0G,KAAK0kL,aAAe,CAAC,EAAG,GAAI,IAC5B1kL,KAAK2kL,SAAW3kL,KAAK4kL,qBACjB5kL,KAAK2kL,UAAY3kL,KAAK0kL,aAAat6F,SAASpqF,KAAK2kL,WACnD3kL,KAAK2zJ,QAAQ,WAAW3zJ,KAAK2kL,YAC7B3kL,KAAKq+J,YAAYr+J,KAAK2yJ,SAAS,2BAA4B,CAAC3yJ,KAAK2kL,SAASE,eAAez5B,EAAO5oB,eAChGxiI,KAAK21J,QAEL31J,KAAK8yH,MAET,CACA8xD,kBAAAA,GACE,MAAM9vB,EAAgB90J,KAAK0xJ,SAASoD,cACpC,OAAOA,EAAcijB,YAAcjjB,EAAcijB,WAAW+M,aAAehwB,EAAcijB,WAAW+M,YAAYC,OAClH,CACA5vB,aAAAA,GACE,MAAO,oBAAoBn1J,KAAK4kL,wBAAwB7oD,MAAMo5B,iBAChE,CAaAif,WAAAA,CAAY7xE,GACV,GAAIpa,MAAMnoF,KAAKuxJ,QAAQx0B,YACrB,OAEF,MAAMioD,EAAmBhlL,KAAKuxJ,QAAQ0S,cAChCoN,EAAcrxK,KAAKuxJ,QAAQ8f,YAC3Bt0C,EAAWs0C,GAAeA,EAAYC,SAAWD,EAAY8M,cAAgBn+K,KAAKuxJ,QAAQx0B,WAChG,IAAIojD,EAEFA,EADE6E,EAAmBhlL,KAAK2kL,UAAY5nD,EAC5BioD,EAAmBhlL,KAAK2kL,SAExB5nD,EAEZ/8H,KAAKuxJ,QAAQ0S,YAAYkc,EAC3B,CAKAvuB,oBAAAA,GACE5xJ,KAAKq+J,YAAYr+J,KAAK2yJ,SAAS,2BAA4B,CAAC3yJ,KAAK2kL,WACnE,EAEFF,GAAYrlL,UAAUo1K,aAAe,eACrCpjB,GAAYgI,kBAAkB,cAAeqrB,IAU7C,MAAMQ,WAAqBhL,GACzB36K,WAAAA,CAAY8rJ,EAAQ9xJ,GAClByiI,MAAMqvB,EAAQ9xJ,GACd0G,KAAK0kL,aAAe,CAAC,EAAG,GAAI,IAC5B1kL,KAAK2kL,SAAW3kL,KAAKklL,sBACjBllL,KAAK2kL,UAAY3kL,KAAK0kL,aAAat6F,SAASpqF,KAAK2kL,WACnD3kL,KAAK2zJ,QAAQ,UAAU3zJ,KAAK2kL,YAC5B3kL,KAAKq+J,YAAYr+J,KAAK2yJ,SAAS,4BAA6B,CAAC3yJ,KAAK2kL,SAASE,eAAez5B,EAAO5oB,eACjGxiI,KAAK21J,QAEL31J,KAAK8yH,MAET,CACAoyD,mBAAAA,GACE,MAAMpwB,EAAgB90J,KAAK0xJ,SAASoD,cACpC,OAAOA,EAAcijB,YAAcjjB,EAAcijB,WAAW+M,aAAehwB,EAAcijB,WAAW+M,YAAYK,QAClH,CACAhwB,aAAAA,GACE,MAAO,qBAAqBn1J,KAAKklL,yBAAyBnpD,MAAMo5B,iBAClE,CAaAif,WAAAA,CAAY7xE,GACV,MAAMyiF,EAAmBhlL,KAAKuxJ,QAAQ0S,cAChCoN,EAAcrxK,KAAKuxJ,QAAQ8f,YAC3B4O,EAAgB5O,GAAeA,EAAYC,UAAYD,EAAY4O,gBACzE,IAAIE,EAEFA,EADEF,GAAiB+E,EAAmBhlL,KAAK2kL,UAAY1E,EAC7CA,EACD+E,GAAoBhlL,KAAK2kL,SACxBK,EAAmBhlL,KAAK2kL,SAExB,EAEZ3kL,KAAKuxJ,QAAQ0S,YAAYkc,EAC3B,CAKAvuB,oBAAAA,GACE5xJ,KAAKq+J,YAAYr+J,KAAK2yJ,SAAS,4BAA6B,CAAC3yJ,KAAK2kL,WACpE,EAEFM,GAAa7lL,UAAUo1K,aAAe,gBACtCpjB,GAAYgI,kBAAkB,eAAgB6rB,IAc9C,MAAMtmF,WAAayyD,GAWjB9xJ,WAAAA,CAAY8rJ,EAAQ9xJ,GAClByiI,MAAMqvB,EAAQ9xJ,GACVA,IACF0G,KAAKolL,YAAc9rL,EAAQ+rL,YAE7BrlL,KAAKslL,eAAiB,EACtBtlL,KAAKg7H,GAAG,WAAWrjI,GAAKqI,KAAK42J,cAAcj/J,KAG3CqI,KAAKulL,iBAAmB5tL,GAAKqI,KAAKwlL,WAAW7tL,GAC7CqI,KAAKylL,qBAAuB9tL,GAAKqI,KAAK0lL,eAAe/tL,EACvD,CASAguL,uBAAAA,CAAwBtxB,GAChBA,aAAqBjD,KAG3BpxJ,KAAKg7H,GAAGq5B,EAAW,OAAQr0J,KAAKulL,kBAChCvlL,KAAKg7H,GAAGq5B,EAAW,CAAC,MAAO,SAAUr0J,KAAKylL,sBAC5C,CASAG,0BAAAA,CAA2BvxB,GACnBA,aAAqBjD,KAG3BpxJ,KAAKi7H,IAAIo5B,EAAW,OAAQr0J,KAAKulL,kBACjCvlL,KAAKi7H,IAAIo5B,EAAW,CAAC,MAAO,SAAUr0J,KAAKylL,sBAC7C,CAWApzK,WAAAA,CAAYgiJ,GACe,kBAAdA,IACTA,EAAYr0J,KAAKqzJ,SAASgB,IAE5Br0J,KAAK4lL,2BAA2BvxB,GAChCt4B,MAAM1pH,YAAYgiJ,EACpB,CASAwxB,OAAAA,CAAQxxB,GACN,MAAMyxB,EAAiB9lL,KAAKo0J,SAASC,GACjCyxB,GACF9lL,KAAK2lL,wBAAwBG,EAEjC,CAQAr/B,QAAAA,GACE,MAAMs/B,EAAgB/lL,KAAK0xJ,SAASq0B,eAAiB,KACrD/lL,KAAKmzJ,WAAa1M,GAASs/B,EAAe,CACxC90D,UAAW,qBAEbjxH,KAAKmzJ,WAAWt7I,aAAa,OAAQ,QACrC,MAAMnP,EAAKqzH,MAAM0qB,SAAS,MAAO,CAC/Bu/B,OAAQhmL,KAAKmzJ,WACbliC,UAAW,aAUb,OARAvoH,EAAG9B,YAAY5G,KAAKmzJ,YAIpBn4B,GAAGtyH,EAAI,SAAS,SAAU65F,GACxBA,EAAMvH,iBACNuH,EAAMkqD,0BACR,IACO/jJ,CACT,CACA6yH,OAAAA,GACEv7H,KAAKmzJ,WAAa,KAClBnzJ,KAAKulL,iBAAmB,KACxBvlL,KAAKylL,qBAAuB,KAC5B1pD,MAAMR,SACR,CAUAiqD,UAAAA,CAAWjjF,GACT,MAAMrF,EAAgBqF,EAAMrF,eAAiBgkD,IAAAA,cAG7C,IAAKlhJ,KAAK+sF,WAAWmgC,MAAKzhH,GACjBA,EAAQ/C,OAASw0F,IACtB,CACF,MAAM+oF,EAAMjmL,KAAKolL,YACba,GAAOA,EAAIC,gBAAkBhpF,IAAkB+oF,EAAIv9K,KAAK0H,YAC1D61K,EAAIE,eAER,CACF,CAUAT,cAAAA,CAAenjF,GAEb,GAAIviG,KAAKolL,YAAa,CACpBplL,KAAKolL,YAAYe,gBACjB,MAAMC,EAAkBpmL,KAAK+sF,WAC7B,IAAK9zF,MAAMC,QAAQktL,GACjB,OAEF,MAAMC,EAAiBD,EAAgBz6K,QAAO0oJ,GAAaA,EAAU3rJ,OAAS65F,EAAMh+F,SAAQ,GAC5F,IAAK8hL,EACH,OAK4B,4BAA1BA,EAAe9mL,QACjBS,KAAKolL,YAAYp/E,OAErB,CACF,CAUA4wD,aAAAA,CAAcr0D,GAEM,cAAdA,EAAMxpG,KAAqC,cAAdwpG,EAAMxpG,KACrCwpG,EAAMvH,iBACNuH,EAAM1I,kBACN75F,KAAK49K,eAGkB,eAAdr7E,EAAMxpG,KAAsC,YAAdwpG,EAAMxpG,MAC7CwpG,EAAMvH,iBACNuH,EAAM1I,kBACN75F,KAAK29K,WAET,CAKAC,WAAAA,GACE,IAAI0I,EAAY,OACWhsL,IAAvB0F,KAAKslL,gBACPgB,EAAYtmL,KAAKslL,cAAgB,GAEnCtlL,KAAKgmG,MAAMsgF,EACb,CAKA3I,QAAAA,GACE,IAAI2I,EAAY,OACWhsL,IAAvB0F,KAAKslL,gBACPgB,EAAYtmL,KAAKslL,cAAgB,GAEnCtlL,KAAKgmG,MAAMsgF,EACb,CAQAtgF,KAAAA,GAAgB,IAAVnhG,EAAIoF,UAAA5L,OAAA,QAAA/D,IAAA2P,UAAA,GAAAA,UAAA,GAAG,EACX,MAAM8iF,EAAW/sF,KAAK+sF,WAAW/zF,QACf+zF,EAAS1uF,QAAU0uF,EAAS,GAAGg6D,SAAS,mBAExDh6D,EAASiM,QAEPjM,EAAS1uF,OAAS,IAChBwG,EAAO,EACTA,EAAO,EACEA,GAAQkoF,EAAS1uF,SAC1BwG,EAAOkoF,EAAS1uF,OAAS,GAE3B2B,KAAKslL,cAAgBzgL,EACrBkoF,EAASloF,GAAMyrJ,IAAItqD,QAEvB,EAEForD,GAAYgI,kBAAkB,OAAQz6D,IAatC,MAAM4nF,WAAmBn1B,GAUvB9xJ,WAAAA,CAAY8rJ,GAAsB,IAAd9xJ,EAAO2Q,UAAA5L,OAAA,QAAA/D,IAAA2P,UAAA,GAAAA,UAAA,GAAG,CAAC,EAC7B8xH,MAAMqvB,EAAQ9xJ,GACd0G,KAAKolL,YAAc,IAAInL,GAAO7uB,EAAQ9xJ,GACtC0G,KAAKolL,YAAY/mB,YAAYr+J,KAAKw0K,cAClCx0K,KAAKolL,YAAY90B,IAAIz4I,aAAa,gBAAiB,QAGnD,MAAMw8G,EAAc4lD,GAAO76K,UAAU+1J,gBACrCn1J,KAAKolL,YAAY90B,IAAIr/B,UAAYjxH,KAAKm1J,gBAAkB,IAAM9gC,EAC9Dr0H,KAAKolL,YAAY79B,YAAY,eAC7BvnJ,KAAKo0J,SAASp0J,KAAKolL,aACnBplL,KAAK80K,SACL90K,KAAKG,UAAW,EAChB,MAAMi0K,EAAcz8K,GAAKqI,KAAKo0K,YAAYz8K,GAC1CqI,KAAKwmL,iBAAmB7uL,GAAKqI,KAAKymL,gBAAgB9uL,GAClDqI,KAAKg7H,GAAGh7H,KAAKolL,YAAa,MAAOhR,GACjCp0K,KAAKg7H,GAAGh7H,KAAKolL,YAAa,QAAShR,GACnCp0K,KAAKg7H,GAAGh7H,KAAKolL,YAAa,WAAWztL,GAAKqI,KAAK42J,cAAcj/J,KAC7DqI,KAAKg7H,GAAGh7H,KAAKolL,YAAa,cAAc,KACtCplL,KAAKmnJ,SAAS,aACdnnJ,KAAK0mL,KAAK/wB,OACV36B,GAAGkmB,IAAY,QAASlhJ,KAAKwmL,iBAAiB,IAEhDxmL,KAAKg7H,GAAG,cAAcrjI,GAAKqI,KAAK2mL,iBAAiBhvL,KACjDqI,KAAKg7H,GAAG,WAAWrjI,GAAKqI,KAAK4mL,qBAAqBjvL,IACpD,CAKAm9K,MAAAA,GACE,MAAM4R,EAAO1mL,KAAK6mL,aACd7mL,KAAK0mL,OACP1mL,KAAK0mL,KAAKnrD,UACVv7H,KAAKqS,YAAYrS,KAAK0mL,OAExB1mL,KAAK0mL,KAAOA,EACZ1mL,KAAKo0J,SAASsyB,GAQd1mL,KAAKkmL,gBAAiB,EACtBlmL,KAAKolL,YAAY90B,IAAIz4I,aAAa,gBAAiB,SAC/C7X,KAAKiyK,OAASjyK,KAAKiyK,MAAM5zK,QAAU2B,KAAK8mL,gBAC1C9mL,KAAK8yH,OACL9yH,KAAK0mL,KAAKvzB,WAAWr7I,gBAAgB,UAErC9X,KAAK21J,OACL31J,KAAK0mL,KAAKvzB,WAAWt7I,aAAa,OAAQ,QAE9C,CAQAgvK,UAAAA,GACE,MAAMH,EAAO,IAAI/nF,GAAK3+F,KAAKuxJ,QAAS,CAClC8zB,WAAYrlL,OAcd,GAHAA,KAAK8mL,eAAiB,EAGlB9mL,KAAK0xJ,SAAS98B,MAAO,CACvB,MAAMmyD,EAAUtgC,GAAS,KAAM,CAC7Bx1B,UAAW,iBACX9jC,YAAa2jE,GAAc9wJ,KAAK0xJ,SAAS98B,OACzChC,UAAW,IAEPo0D,EAAiB,IAAI51B,GAAYpxJ,KAAKuxJ,QAAS,CACnD7oJ,GAAIq+K,IAENL,EAAKb,QAAQmB,EACf,CAEA,GADAhnL,KAAKiyK,MAAQjyK,KAAKinL,cACdjnL,KAAKiyK,MAEP,IAAK,IAAIl0K,EAAI,EAAGA,EAAIiC,KAAKiyK,MAAM5zK,OAAQN,IACrC2oL,EAAKb,QAAQ7lL,KAAKiyK,MAAMl0K,IAG5B,OAAO2oL,CACT,CAOAO,WAAAA,GAAe,CAQfxgC,QAAAA,GACE,OAAO1qB,MAAM0qB,SAAS,MAAO,CAC3Bx1B,UAAWjxH,KAAKknL,wBACf,CAAC,EACN,CASAvzB,OAAAA,CAAQp0J,GACNw8H,MAAM43B,QAAQp0J,EAAMS,KAAKolL,YAAY90B,IACvC,CAQA42B,oBAAAA,GACE,IAAIC,EAAkB,mBAGO,IAAzBnnL,KAAK0xJ,SAASuyB,OAChBkD,GAAmB,UAEnBA,GAAmB,SAKrB,MAAO,mBAAmBA,KADNlN,GAAO76K,UAAU+1J,mBACuBp5B,MAAMo5B,iBACpE,CAQAA,aAAAA,GACE,IAAIgyB,EAAkB,kBAQtB,OAL6B,IAAzBnnL,KAAK0xJ,SAASuyB,OAChBkD,GAAmB,UAEnBA,GAAmB,SAEd,mBAAmBA,KAAmBprD,MAAMo5B,iBACrD,CAgBAkJ,WAAAA,CAAYvlJ,GAAkC,IAA5BpQ,EAAEuB,UAAA5L,OAAA,QAAA/D,IAAA2P,UAAA,GAAAA,UAAA,GAAGjK,KAAKolL,YAAY18K,KACtC,OAAO1I,KAAKolL,YAAY/mB,YAAYvlJ,EAAMpQ,EAC5C,CAKA6yH,OAAAA,GACEv7H,KAAK2mL,mBACL5qD,MAAMR,SACR,CAaA64C,WAAAA,CAAY7xE,GACNviG,KAAKkmL,eACPlmL,KAAKmmL,gBAELnmL,KAAKonL,aAET,CAUAT,gBAAAA,CAAiBpkF,GACfviG,KAAKunJ,YAAY,aACjBtsB,GAAIimB,IAAY,QAASlhJ,KAAKwmL,iBAChC,CAKAxgF,KAAAA,GACEhmG,KAAKolL,YAAYp/E,OACnB,CAKAorB,IAAAA,GACEpxH,KAAKolL,YAAYh0D,MACnB,CAWAwlC,aAAAA,CAAcr0D,GAEM,QAAdA,EAAMxpG,KAA+B,QAAdwpG,EAAMxpG,KAC3BiH,KAAKkmL,gBACPlmL,KAAKmmL,gBAIY,SAAd5jF,EAAMxpG,MACTwpG,EAAMvH,iBAENh7F,KAAKolL,YAAYp/E,UAGI,OAAdzD,EAAMxpG,MAA8B,SAAdwpG,EAAMxpG,KAAoBiH,KAAKuxJ,QAAQG,SAASoD,cAAc+B,mBAAqB72J,KAAKuxJ,QAAQG,SAASoD,cAAc+B,kBAAkBC,UACnK92J,KAAKkmL,iBACR3jF,EAAMvH,iBACNh7F,KAAKonL,cAGX,CAWAX,eAAAA,CAAgBlkF,GAEI,QAAdA,EAAMxpG,KAA+B,QAAdwpG,EAAMxpG,KAC/BiH,KAAKunJ,YAAY,YAErB,CAUA8/B,qBAAAA,CAAsB9kF,GACpBviG,KAAK4mL,qBAAqBrkF,EAC5B,CAWAqkF,oBAAAA,CAAqBrkF,GAED,QAAdA,EAAMxpG,KAA+B,QAAdwpG,EAAMxpG,MAC3BiH,KAAKkmL,gBACPlmL,KAAKmmL,gBAGY,SAAd5jF,EAAMxpG,MACTwpG,EAAMvH,iBAENh7F,KAAKolL,YAAYp/E,SAGvB,CAKAohF,WAAAA,GACE,GAAIpnL,KAAKG,SAAU,CAQjB,GAPAH,KAAKkmL,gBAAiB,EACtBlmL,KAAK0mL,KAAK/wB,OACV31J,KAAK0mL,KAAK9wB,cACV51J,KAAKolL,YAAY90B,IAAIz4I,aAAa,gBAAiB,QAI/CmuI,IAAUK,KAEZ,OAEFrmJ,KAAK0mL,KAAK1gF,OACZ,CACF,CAKAmgF,aAAAA,GACMnmL,KAAKG,WACPH,KAAKkmL,gBAAiB,EACtBlmL,KAAK0mL,KAAK7wB,gBACV71J,KAAK0mL,KAAK5zD,OACV9yH,KAAKolL,YAAY90B,IAAIz4I,aAAa,gBAAiB,SAEvD,CAKAvX,OAAAA,GACEN,KAAKmmL,gBACLnmL,KAAKG,UAAW,EAChBH,KAAKmnJ,SAAS,gBACdnnJ,KAAKolL,YAAY9kL,SACnB,CAKAD,MAAAA,GACEL,KAAKG,UAAW,EAChBH,KAAKunJ,YAAY,gBACjBvnJ,KAAKolL,YAAY/kL,QACnB,EAEF+wJ,GAAYgI,kBAAkB,aAAcmtB,IAa5C,MAAMe,WAAoBf,GAUxBjnL,WAAAA,CAAY8rJ,EAAQ9xJ,GAClB,MAAM6lK,EAAS7lK,EAAQ6lK,OAKvB,GAJApjC,MAAMqvB,EAAQ9xJ,GACV0G,KAAKiyK,MAAM5zK,QAAU,GACvB2B,KAAK8yH,QAEFqsC,EACH,OAEF,MAAMooB,EAAgBl6B,GAAMrtJ,KAAMA,KAAK80K,QACvC3V,EAAOjsE,iBAAiB,cAAeq0F,GACvCpoB,EAAOjsE,iBAAiB,WAAYq0F,GACpCpoB,EAAOjsE,iBAAiB,cAAeq0F,GACvCvnL,KAAKuxJ,QAAQv2B,GAAG,QAASusD,GACzBvnL,KAAKuxJ,QAAQv2B,GAAG,WAAW,WACzBmkC,EAAOhsE,oBAAoB,cAAeo0F,GAC1CpoB,EAAOhsE,oBAAoB,WAAYo0F,GACvCpoB,EAAOhsE,oBAAoB,cAAeo0F,EAC5C,GACF,EAEFn2B,GAAYgI,kBAAkB,cAAekuB,IAa7C,MAAME,WAAiB1T,GAWrBx0K,WAAAA,CAAY8rJ,EAAQ9xJ,GAClByiI,MAAMqvB,EAAQ9xJ,GACd0G,KAAKynL,WAAanuL,EAAQmuL,WAC1BznL,KAAK0nL,YAAcpuL,EAAQozF,WAAY,EACvC1sF,KAAK2nL,gBAAkBruL,EAAQquL,gBAC/B3nL,KAAK0sF,SAAS1sF,KAAK0nL,aACf1nL,KAAKynL,WACHznL,KAAK2nL,gBACP3nL,KAAKswJ,IAAIz4I,aAAa,OAAQ,oBAE9B7X,KAAKswJ,IAAIz4I,aAAa,OAAQ,iBAGhC7X,KAAKswJ,IAAIz4I,aAAa,OAAQ,WAElC,CAiBA4uI,QAAAA,CAASpvJ,EAAM0tF,EAAOt8E,GAEpBzI,KAAK00K,gBAAiB,EACtB,MAAMhsK,EAAKqzH,MAAM0qB,SAAS,KAAMtnJ,OAAOmF,OAAO,CAC5C2sH,UAAW,gBACX2B,UAAW,GACV7tC,GAAQt8E,GAGLm/K,EAAanhC,GAAS,OAAQ,CAClCx1B,UAAW,qBACX9jC,YAAantF,KAAK2yJ,SAAS3yJ,KAAK0xJ,SAAS5jB,SAS3C,OALI9tI,KAAKuxJ,QAAQG,SAASmC,qBACxBnrJ,EAAG9B,YAAYghL,GAEfl/K,EAAGqN,aAAa6xK,EAAYl/K,EAAGyrJ,cAAc,0BAExCzrJ,CACT,CAWAkuJ,aAAAA,CAAcr0D,GACP,CAAC,MAAO,SAAU,UAAW,YAAa,aAAc,aAAanY,SAASmY,EAAMxpG,MAEvFgjI,MAAM66B,cAAcr0D,EAExB,CAaA6xE,WAAAA,CAAY7xE,GACVviG,KAAK0sF,UAAS,EAChB,CAQAA,QAAAA,CAASA,GACH1sF,KAAKynL,aACH/6F,GACF1sF,KAAKmnJ,SAAS,gBACdnnJ,KAAKswJ,IAAIz4I,aAAa,eAAgB,QAGtC7X,KAAKq+J,YAAY,cACjBr+J,KAAK0nL,aAAc,IAEnB1nL,KAAKunJ,YAAY,gBACjBvnJ,KAAKswJ,IAAIz4I,aAAa,eAAgB,SAEtC7X,KAAKq+J,YAAY,IACjBr+J,KAAK0nL,aAAc,GAGzB,EAEFt2B,GAAYgI,kBAAkB,WAAYouB,IAa1C,MAAMK,WAA0BL,GAU9BloL,WAAAA,CAAY8rJ,EAAQ9xJ,GAAS,IAAAwuL,EAC3B,MAAMr2F,EAAQn4F,EAAQm4F,MAChB0tE,EAAS/T,EAAOkR,aAGtBhjK,EAAQw0I,MAAQr8C,EAAMq8C,OAASr8C,EAAM+wC,UAAY,UACjDlpI,EAAQozF,SAA0B,YAAf+E,EAAM6c,KACzBytB,MAAMqvB,EAAQ9xJ,GAAQwuL,EAAA9nL,KACtBA,KAAKyxF,MAAQA,EAGbzxF,KAAK+nL,OAASzuL,EAAQyuL,OAAS,CAACzuL,EAAQ8mK,MAAQpgK,KAAKyxF,MAAM2uE,OAAOz0J,OAAOimI,SACzE,MAAMo2C,EAAgB,WAAa,QAAAC,EAAAh+K,UAAA5L,OAAT+8H,EAAI,IAAAniI,MAAAgvL,GAAAC,EAAA,EAAAA,EAAAD,EAAAC,IAAJ9sD,EAAI8sD,GAAAj+K,UAAAi+K,GAC5BJ,EAAKK,mBAAmBrwL,MAAMgwL,EAAM1sD,EACtC,EACMgtD,EAAgC,WAAa,QAAAC,EAAAp+K,UAAA5L,OAAT+8H,EAAI,IAAAniI,MAAAovL,GAAAC,EAAA,EAAAA,EAAAD,EAAAC,IAAJltD,EAAIktD,GAAAr+K,UAAAq+K,GAC5CR,EAAKS,6BAA6BzwL,MAAMgwL,EAAM1sD,EAChD,EAgBA,GAfAgwB,EAAOpwB,GAAG,CAAC,YAAa,mBAAoBgtD,GAC5C7oB,EAAOjsE,iBAAiB,SAAU80F,GAClC7oB,EAAOjsE,iBAAiB,yBAA0Bk1F,GAClDpoL,KAAKg7H,GAAG,WAAW,WACjBowB,EAAOnwB,IAAI,CAAC,YAAa,mBAAoB+sD,GAC7C7oB,EAAOhsE,oBAAoB,SAAU60F,GACrC7oB,EAAOhsE,oBAAoB,yBAA0Bi1F,EACvD,SAQwB9tL,IAApB6kK,EAAOqpB,SAAwB,CACjC,IAAIjmF,EACJviG,KAAKg7H,GAAG,CAAC,MAAO,UAAU,WACxB,GAA8B,kBAAnB+mB,IAAAA,MAET,IACEx/C,EAAQ,IAAIw/C,IAAAA,OAAe,SAC7B,CAAE,MAAOvrJ,GACP,CAGC+rG,IACHA,EAAQ2+C,IAAAA,YAAuB,SAC/B3+C,EAAMkmF,UAAU,UAAU,GAAM,IAElCtpB,EAAOpmE,cAAcwJ,EACvB,GACF,CAGAviG,KAAKmoL,oBACP,CAaA/T,WAAAA,CAAY7xE,GACV,MAAMmmF,EAAiB1oL,KAAKyxF,MACtB0tE,EAASn/J,KAAKuxJ,QAAQ+K,aAE5B,GADAvgC,MAAMq4C,YAAY7xE,GACb48D,EAGL,IAAK,IAAIphK,EAAI,EAAGA,EAAIohK,EAAO9gK,OAAQN,IAAK,CACtC,MAAM0zF,EAAQ0tE,EAAOphK,IAImB,IAApCiC,KAAK+nL,MAAMjvL,QAAQ24F,EAAM2uE,QAMzB3uE,IAAUi3F,EACO,YAAfj3F,EAAM6c,OACR7c,EAAM6c,KAAO,WAKS,aAAf7c,EAAM6c,OACf7c,EAAM6c,KAAO,YAEjB,CACF,CAUA65E,kBAAAA,CAAmB5lF,GACjB,MAAMomF,EAAuC,YAApB3oL,KAAKyxF,MAAM6c,KAIhCq6E,IAAqB3oL,KAAK0nL,aAC5B1nL,KAAK0sF,SAASi8F,EAElB,CACAJ,4BAAAA,CAA6BhmF,GAC3B,GAAwB,YAApBviG,KAAKyxF,MAAM6c,KAAoB,CACjC,MAAM0oE,EAAmBh3K,KAAKuxJ,QAAQwlB,OAAOC,iBAG7C,GAAIA,GAAoBA,EAAiBlgB,SAAWkgB,EAAiBx0C,WAAaxiI,KAAKyxF,MAAM+wC,UAAYw0C,EAAiB5W,OAASpgK,KAAKyxF,MAAM2uE,KAC5I,OAEFpgK,KAAKuxJ,QAAQwlB,OAAOC,iBAAmB,CACrClgB,SAAS,EACTt0B,SAAUxiI,KAAKyxF,MAAM+wC,SACrB49B,KAAMpgK,KAAKyxF,MAAM2uE,KAErB,CACF,CACA7kC,OAAAA,GAEEv7H,KAAKyxF,MAAQ,KACbsqC,MAAMR,SACR,EAEF61B,GAAYgI,kBAAkB,oBAAqByuB,IAanD,MAAMe,WAA6Bf,GAUjCvoL,WAAAA,CAAY8rJ,EAAQ9xJ,GAGlBA,EAAQm4F,MAAQ,CACd25D,SAIAgV,KAAM9mK,EAAQ8mK,KACd2nB,MAAOzuL,EAAQyuL,MACfx9D,SAAS,EACTjc,KAAM,YAEHh1G,EAAQyuL,QACXzuL,EAAQyuL,MAAQ,CAACzuL,EAAQ8mK,OAEvB9mK,EAAQw0I,MACVx0I,EAAQm4F,MAAMq8C,MAAQx0I,EAAQw0I,MAE9Bx0I,EAAQm4F,MAAMq8C,MAAQx0I,EAAQyuL,MAAMh0K,KAAK,SAAW,OAItDza,EAAQmuL,YAAa,EAErBnuL,EAAQquL,iBAAkB,EAC1B5rD,MAAMqvB,EAAQ9xJ,EAChB,CAQA6uL,kBAAAA,CAAmB5lF,GACjB,MAAM48D,EAASn/J,KAAKorJ,SAASkR,aAC7B,IAAIqsB,GAAmB,EACvB,IAAK,IAAI5qL,EAAI,EAAGkI,EAAIk5J,EAAO9gK,OAAQN,EAAIkI,EAAGlI,IAAK,CAC7C,MAAM0zF,EAAQ0tE,EAAOphK,GACrB,GAAIiC,KAAK0xJ,SAASq2B,MAAMjvL,QAAQ24F,EAAM2uE,OAAS,GAAoB,YAAf3uE,EAAM6c,KAAoB,CAC5Eq6E,GAAmB,EACnB,KACF,CACF,CAIIA,IAAqB3oL,KAAK0nL,aAC5B1nL,KAAK0sF,SAASi8F,EAElB,CACAJ,4BAAAA,CAA6BhmF,GAC3B,MAAM48D,EAASn/J,KAAKorJ,SAASkR,aAC7B,IAAIusB,GAAY,EAChB,IAAK,IAAI9qL,EAAI,EAAGkI,EAAIk5J,EAAO9gK,OAAQN,EAAIkI,EAAGlI,IAAK,CAC7C,MAAM0zF,EAAQ0tE,EAAOphK,GACrB,GAAI,CAAC,WAAY,eAAgB,aAAajF,QAAQ24F,EAAM2uE,OAAS,GAAoB,YAAf3uE,EAAM6c,KAAoB,CAClGu6E,GAAY,EACZ,KACF,CACF,CACIA,IACF7oL,KAAKuxJ,QAAQwlB,OAAOC,iBAAmB,CACrClgB,SAAS,GAGf,CAKAlF,oBAAAA,GACE5xJ,KAAKurH,EAAE,uBAAuBp+B,YAAcntF,KAAKuxJ,QAAQoB,SAAS3yJ,KAAK0xJ,SAAS5jB,OAChF/R,MAAM61B,sBACR,EAEFR,GAAYgI,kBAAkB,uBAAwBwvB,IAatD,MAAME,WAAwBxB,GAU5BhoL,WAAAA,CAAY8rJ,GAAsB,IAAd9xJ,EAAO2Q,UAAA5L,OAAA,QAAA/D,IAAA2P,UAAA,GAAAA,UAAA,GAAG,CAAC,EAC7B3Q,EAAQ6lK,OAAS/T,EAAOkR,aACxBvgC,MAAMqvB,EAAQ9xJ,EAChB,CAWA2tL,WAAAA,GAA2D,IAGrDn5C,EAHMmkC,EAAKhoK,UAAA5L,OAAA,QAAA/D,IAAA2P,UAAA,GAAAA,UAAA,GAAG,GAAI8+K,EAAa9+K,UAAA5L,OAAA,QAAA/D,IAAA2P,UAAA,GAAAA,UAAA,GAAG49K,GAIlC7nL,KAAKgpL,SACPl7C,EAAQ,GAAG9tI,KAAKgpL,cAGlB/W,EAAM94K,KAAK,IAAIyvL,GAAqB5oL,KAAKuxJ,QAAS,CAChDw2B,MAAO/nL,KAAKipL,OACZ7oB,KAAMpgK,KAAKkpL,MACXp7C,WAEF9tI,KAAK8mL,gBAAkB,EACvB,MAAM3nB,EAASn/J,KAAKuxJ,QAAQ+K,aACvBrjK,MAAMC,QAAQ8G,KAAKipL,UACtBjpL,KAAKipL,OAAS,CAACjpL,KAAKkpL,QAEtB,IAAK,IAAInrL,EAAI,EAAGA,EAAIohK,EAAO9gK,OAAQN,IAAK,CACtC,MAAM0zF,EAAQ0tE,EAAOphK,GAGrB,GAAIiC,KAAKipL,OAAOnwL,QAAQ24F,EAAM2uE,OAAS,EAAG,CACxC,MAAMv7J,EAAO,IAAIkkL,EAAc/oL,KAAKuxJ,QAAS,CAC3C9/D,QACAs2F,MAAO/nL,KAAKipL,OACZ7oB,KAAMpgK,KAAKkpL,MAEXzB,YAAY,EAEZE,iBAAiB,IAEnB9iL,EAAKsiJ,SAAS,OAAO11D,EAAM2uE,kBAC3B6R,EAAM94K,KAAK0L,EACb,CACF,CACA,OAAOotK,CACT,EAEF7gB,GAAYgI,kBAAkB,kBAAmB0vB,IAajD,MAAMK,WAA8B3B,GAUlCloL,WAAAA,CAAY8rJ,EAAQ9xJ,GAClB,MAAMm4F,EAAQn4F,EAAQm4F,MAChBsqE,EAAMziK,EAAQyiK,IACdkI,EAAc7Y,EAAO6Y,cAG3B3qK,EAAQmuL,YAAa,EACrBnuL,EAAQquL,iBAAkB,EAC1BruL,EAAQw0I,MAAQiuB,EAAIjjJ,KACpBxf,EAAQozF,SAAWqvE,EAAIzkC,WAAa2sC,GAAeA,EAAclI,EAAIC,QACrEjgC,MAAMqvB,EAAQ9xJ,GACd0G,KAAKyxF,MAAQA,EACbzxF,KAAK+7J,IAAMA,CACb,CAaAqY,WAAAA,CAAY7xE,GACVw5B,MAAMq4C,cACNp0K,KAAKuxJ,QAAQ0S,YAAYjkK,KAAK+7J,IAAIzkC,UACpC,EAEF85B,GAAYgI,kBAAkB,wBAAyB+vB,IAkBvD,MAAMC,WAAuBN,GAa3BxpL,WAAAA,CAAY8rJ,EAAQ9xJ,EAAS+3J,GAC3Bt1B,MAAMqvB,EAAQ9xJ,EAAS+3J,GACvBrxJ,KAAK2zJ,QAAQ,YACb3zJ,KAAKqpL,mBAAqB,KACxBrpL,KAAKiyK,MAAMt5K,SAAQkM,IACjBA,EAAK6nF,SAAS1sF,KAAKspL,OAAO/lB,WAAW,KAAO1+J,EAAKk3J,IAAI,GACrD,CAEN,CAQA5G,aAAAA,GACE,MAAO,uBAAuBp5B,MAAMo5B,iBACtC,CACA+xB,oBAAAA,GACE,MAAO,uBAAuBnrD,MAAMmrD,wBACtC,CAYApS,MAAAA,CAAOvyE,GACL,GAAIA,GAASA,EAAM9Q,OAA8B,aAArB8Q,EAAM9Q,MAAM2uE,KACtC,OAEF,MAAM3uE,EAAQzxF,KAAKupL,oBACf93F,IAAUzxF,KAAKspL,QACjBtpL,KAAKwpL,SAAS/3F,GACdsqC,MAAM+4C,YACI90K,KAAKiyK,OAASxgF,GAASA,EAAMqqE,MAAQrqE,EAAMqqE,KAAKz9J,SAAW2B,KAAKiyK,MAAM5zK,SAEhF09H,MAAM+4C,QAEV,CASA0U,QAAAA,CAAS/3F,GACP,GAAIzxF,KAAKspL,SAAW73F,EAApB,CAQA,GALKzxF,KAAKypL,iBACRzpL,KAAKypL,eAAiBzpL,KAAK80K,OAAO/1K,KAAKiB,OAIrCA,KAAKspL,OAAQ,CACf,MAAMI,EAAoB1pL,KAAKuxJ,QAAQ0Y,qBAAqBjE,wBAAwBhmK,KAAKspL,QACrFI,GACFA,EAAkBv2F,oBAAoB,OAAQnzF,KAAKypL,gBAErDzpL,KAAKspL,OAAOn2F,oBAAoB,YAAanzF,KAAKqpL,oBAClDrpL,KAAKspL,OAAS,IAChB,CAIA,GAHAtpL,KAAKspL,OAAS73F,EAGVzxF,KAAKspL,OAAQ,CACftpL,KAAKspL,OAAOh7E,KAAO,SACnB,MAAMo7E,EAAoB1pL,KAAKuxJ,QAAQ0Y,qBAAqBjE,wBAAwBhmK,KAAKspL,QACrFI,GACFA,EAAkBx2F,iBAAiB,OAAQlzF,KAAKypL,gBAElDzpL,KAAKspL,OAAOp2F,iBAAiB,YAAalzF,KAAKqpL,mBACjD,CAxBA,CAyBF,CAQAE,iBAAAA,GACE,MAAMpqB,EAASn/J,KAAKuxJ,QAAQ+K,cAAgB,GAC5C,IAAK,IAAIv+J,EAAIohK,EAAO9gK,OAAS,EAAGN,GAAK,EAAGA,IAAK,CAE3C,MAAM0zF,EAAQ0tE,EAAOphK,GACrB,GAAI0zF,EAAM2uE,OAASpgK,KAAKkpL,MACtB,OAAOz3F,CAEX,CACF,CASAk4F,cAAAA,GACE,OAAI3pL,KAAKspL,QAAUtpL,KAAKspL,OAAOx7C,MACtB9tI,KAAKspL,OAAOx7C,MAEd9tI,KAAK2yJ,SAAS7B,GAAc9wJ,KAAKkpL,OAC1C,CAQArC,UAAAA,GAEE,OADA7mL,KAAK0xJ,SAAS98B,MAAQ50H,KAAK2pL,iBACpB5tD,MAAM8qD,YACf,CAQAI,WAAAA,GACE,MAAMhV,EAAQ,GACd,IAAKjyK,KAAKspL,OACR,OAAOrX,EAET,MAAMnW,EAAO97J,KAAKspL,OAAOxtB,KACzB,IAAKA,EACH,OAAOmW,EAET,IAAK,IAAIl0K,EAAI,EAAGkI,EAAI61J,EAAKz9J,OAAQN,EAAIkI,EAAGlI,IAAK,CAC3C,MAAMg+J,EAAMD,EAAK/9J,GACX64G,EAAK,IAAIuyE,GAAsBnpL,KAAKuxJ,QAAS,CACjD9/D,MAAOzxF,KAAKspL,OACZvtB,QAEFkW,EAAM94K,KAAKy9G,EACb,CACA,OAAOq7D,CACT,EASFmX,GAAehqL,UAAU8pL,MAAQ,WAQjCE,GAAehqL,UAAUo1K,aAAe,WACxCpjB,GAAYgI,kBAAkB,iBAAkBgwB,IAahD,MAAMQ,WAA2Bd,GAa/BxpL,WAAAA,CAAY8rJ,EAAQ9xJ,EAAS+3J,GAC3Bt1B,MAAMqvB,EAAQ9xJ,EAAS+3J,GACvBrxJ,KAAK2zJ,QAAQ,qBACb,MAAMwL,EAAS/T,EAAOkR,aAChB0rB,EAAgB36B,GAAMrtJ,KAAMA,KAAKmoL,oBACvChpB,EAAOjsE,iBAAiB,SAAU80F,GAClChoL,KAAKg7H,GAAG,WAAW,WACjBmkC,EAAOhsE,oBAAoB,SAAU60F,EACvC,GACF,CAUAG,kBAAAA,CAAmB5lF,GACjB,MAAM48D,EAASn/J,KAAKorJ,SAASkR,aAC7B,IAAI1vE,GAAW,EAGf,IAAK,IAAI7uF,EAAI,EAAGkI,EAAIk5J,EAAO9gK,OAAQN,EAAIkI,EAAGlI,IAAK,CAC7C,MAAM0zF,EAAQ0tE,EAAOphK,GACrB,GAAI0zF,EAAM2uE,OAASpgK,KAAKkpL,OAAwB,YAAfz3F,EAAM6c,KAAoB,CACzD1hB,GAAW,EACX,KACF,CACF,CAGIA,EACF5sF,KAAKM,UAELN,KAAKK,QAET,CAQA80J,aAAAA,GACE,MAAO,2BAA2Bp5B,MAAMo5B,iBAC1C,CACA+xB,oBAAAA,GACE,MAAO,2BAA2BnrD,MAAMmrD,wBAC1C,EASF0C,GAAmBxqL,UAAU8pL,MAAQ,eAQrCU,GAAmBxqL,UAAUo1K,aAAe,eAC5CpjB,GAAYgI,kBAAkB,qBAAsBwwB,IAapD,MAAMC,WAAwBf,GAa5BxpL,WAAAA,CAAY8rJ,EAAQ9xJ,EAAS+3J,GAC3Bt1B,MAAMqvB,EAAQ9xJ,EAAS+3J,GACvBrxJ,KAAK2zJ,QAAQ,YACf,CAQAwB,aAAAA,GACE,MAAO,wBAAwBp5B,MAAMo5B,iBACvC,CACA+xB,oBAAAA,GACE,MAAO,wBAAwBnrD,MAAMmrD,wBACvC,EASF2C,GAAgBzqL,UAAU8pL,MAAQ,YAQlCW,GAAgBzqL,UAAUo1K,aAAe,YACzCpjB,GAAYgI,kBAAkB,kBAAmBywB,IAajD,MAAMC,WAAgCjC,GAUpCvoL,WAAAA,CAAY8rJ,EAAQ9xJ,GAClBA,EAAQm4F,MAAQ,CACd25D,SACAgV,KAAM9mK,EAAQ8mK,KACdtyB,MAAOx0I,EAAQ8mK,KAAO,YACtBqnB,YAAY,EACZl9D,SAAS,EACTjc,KAAM,YAIRh1G,EAAQmuL,YAAa,EACrBnuL,EAAQiG,KAAO,0BACfw8H,MAAMqvB,EAAQ9xJ,GACd0G,KAAKmnJ,SAAS,0BACdnnJ,KAAKq+J,YAAY,WAAa/kK,EAAQ8mK,KAAO,mBAC/C,CAaAgU,WAAAA,CAAY7xE,GACVviG,KAAKorJ,SAASiI,SAAS,qBAAqB/1J,MAC9C,CAKAs0J,oBAAAA,GACE5xJ,KAAKurH,EAAE,uBAAuBp+B,YAAcntF,KAAKuxJ,QAAQoB,SAAS3yJ,KAAK0xJ,SAAS0O,KAAO,aACvFrkC,MAAM61B,sBACR,EAEFR,GAAYgI,kBAAkB,0BAA2B0wB,IAazD,MAAMC,WAAuBjB,GAa3BxpL,WAAAA,CAAY8rJ,EAAQ9xJ,EAAS+3J,GAC3Bt1B,MAAMqvB,EAAQ9xJ,EAAS+3J,GACvBrxJ,KAAK2zJ,QAAQ,WACf,CAQAwB,aAAAA,GACE,MAAO,uBAAuBp5B,MAAMo5B,iBACtC,CACA+xB,oBAAAA,GACE,MAAO,uBAAuBnrD,MAAMmrD,wBACtC,CAQAD,WAAAA,GACE,MAAMhV,EAAQ,GAOd,OANMjyK,KAAKorJ,SAASyX,OAAS7iK,KAAKorJ,SAASyX,MAAMyE,2BAA6BtnK,KAAKorJ,SAASiI,SAAS,uBACnG4e,EAAM94K,KAAK,IAAI2wL,GAAwB9pL,KAAKuxJ,QAAS,CACnD6O,KAAMpgK,KAAKkpL,SAEblpL,KAAK8mL,gBAAkB,GAElB/qD,MAAMkrD,YAAYhV,EAC3B,EASF8X,GAAe3qL,UAAU8pL,MAAQ,WAQjCa,GAAe3qL,UAAUo1K,aAAe,WACxCpjB,GAAYgI,kBAAkB,iBAAkB2wB,IAYhD,MAAMC,WAAyBnC,GAC7BphC,QAAAA,CAASpvJ,EAAM0tF,EAAOt8E,GACpB,MAAMC,EAAKqzH,MAAM0qB,SAASpvJ,EAAM0tF,EAAOt8E,GACjCwhL,EAAavhL,EAAGyrJ,cAAc,uBAkBpC,MAjBiC,aAA7Bn0J,KAAK0xJ,SAASjgE,MAAM2uE,OAClBpgK,KAAKuxJ,QAAQG,SAASmC,qBACxB7zJ,KAAK2zJ,QAAQ,WAAYjrJ,GAEzBuhL,EAAWrjL,YAAY6/I,GAAS,OAAQ,CACtCx1B,UAAW,wBACV,CACD,eAAe,KAGnBg5D,EAAWrjL,YAAY6/I,GAAS,OAAQ,CACtCx1B,UAAW,mBAGX9jC,YAAa,IAAIntF,KAAK2yJ,SAAS,kBAG5BjqJ,CACT,EAEF0oJ,GAAYgI,kBAAkB,mBAAoB4wB,IAalD,MAAME,WAAuBpB,GAa3BxpL,WAAAA,CAAY8rJ,GACVrvB,MAAMqvB,EADmBnhJ,UAAA5L,OAAA,QAAA/D,IAAA2P,UAAA,GAAAA,UAAA,GAAG,CAAC,GAK7BjK,KAAKgpL,OAAS,YACdhpL,KAAK2zJ,QAAQ,aACT,CAAC,KAAM,QAAS,QAAS,SAAS76J,QAAQkH,KAAKuxJ,QAAQ44B,YAAc,IACvEnqL,KAAKgpL,OAAS,WACdhpL,KAAK2zJ,QAAQ,aAEf3zJ,KAAKolL,YAAY/mB,YAAYvN,GAAc9wJ,KAAKgpL,QAClD,CAQA7zB,aAAAA,GACE,MAAO,wBAAwBp5B,MAAMo5B,iBACvC,CACA+xB,oBAAAA,GACE,MAAO,wBAAwBnrD,MAAMmrD,wBACvC,CAQAD,WAAAA,GACE,IAAIhV,EAAQ,GAQZ,OAPMjyK,KAAKorJ,SAASyX,OAAS7iK,KAAKorJ,SAASyX,MAAMyE,2BAA6BtnK,KAAKorJ,SAASiI,SAAS,uBACnG4e,EAAM94K,KAAK,IAAI2wL,GAAwB9pL,KAAKuxJ,QAAS,CACnD6O,KAAMpgK,KAAKgpL,UAEbhpL,KAAK8mL,gBAAkB,GAEzB7U,EAAQl2C,MAAMkrD,YAAYhV,EAAO+X,IAC1B/X,CACT,EASFiY,GAAe9qL,UAAU6pL,OAAS,CAAC,WAAY,aAS/CiB,GAAe9qL,UAAUo1K,aAAe,YACxCpjB,GAAYgI,kBAAkB,iBAAkB8wB,IAahD,MAAME,WAA2B5C,GAU/BloL,WAAAA,CAAY8rJ,EAAQ9xJ,GAAS,IAAA+wL,EAC3B,MAAM54F,EAAQn4F,EAAQm4F,MAChB0tE,EAAS/T,EAAOk/B,cAGtBhxL,EAAQw0I,MAAQr8C,EAAMq8C,OAASr8C,EAAM+wC,UAAY,UACjDlpI,EAAQozF,SAAW+E,EAAMqlE,QACzB/6B,MAAMqvB,EAAQ9xJ,GAAQ+wL,EAAArqL,KACtBA,KAAKyxF,MAAQA,EACbzxF,KAAKmnJ,SAAS,OAAO11D,EAAM2uE,kBAC3B,MAAM4nB,EAAgB,WAAa,QAAAuC,EAAAtgL,UAAA5L,OAAT+8H,EAAI,IAAAniI,MAAAsxL,GAAAC,EAAA,EAAAA,EAAAD,EAAAC,IAAJpvD,EAAIovD,GAAAvgL,UAAAugL,GAC5BH,EAAKlC,mBAAmBrwL,MAAMuyL,EAAMjvD,EACtC,EACA+jC,EAAOjsE,iBAAiB,SAAU80F,GAClChoL,KAAKg7H,GAAG,WAAW,KACjBmkC,EAAOhsE,oBAAoB,SAAU60F,EAAc,GAEvD,CACAvhC,QAAAA,CAASpvJ,EAAM0tF,EAAOt8E,GACpB,MAAMC,EAAKqzH,MAAM0qB,SAASpvJ,EAAM0tF,EAAOt8E,GACjCwhL,EAAavhL,EAAGyrJ,cAAc,uBAYpC,MAXI,CAAC,YAAa,gBAAgBr7J,QAAQkH,KAAK0xJ,SAASjgE,MAAM2uE,OAAS,IACrE6pB,EAAWrjL,YAAY6/I,GAAS,OAAQ,CACtCx1B,UAAW,wBACV,CACD,eAAe,KAEjBg5D,EAAWrjL,YAAY6/I,GAAS,OAAQ,CACtCx1B,UAAW,mBACX9jC,YAAa,IAAMntF,KAAK2yJ,SAAS,oBAG9BjqJ,CACT,CAaA0rK,WAAAA,CAAY7xE,GAQV,GAPAw5B,MAAMq4C,YAAY7xE,GAIlBviG,KAAKyxF,MAAMqlE,SAAU,EAGjB92J,KAAKuxJ,QAAQsR,MAAM4nB,0BAA2B,CAChD,MAAMtrB,EAASn/J,KAAKuxJ,QAAQ+4B,cAC5B,IAAK,IAAIvsL,EAAI,EAAGA,EAAIohK,EAAO9gK,OAAQN,IAAK,CACtC,MAAM0zF,EAAQ0tE,EAAOphK,GAGjB0zF,IAAUzxF,KAAKyxF,QAGnBA,EAAMqlE,QAAUrlE,IAAUzxF,KAAKyxF,MACjC,CACF,CACF,CAUA02F,kBAAAA,CAAmB5lF,GACjBviG,KAAK0sF,SAAS1sF,KAAKyxF,MAAMqlE,QAC3B,EAEF1F,GAAYgI,kBAAkB,qBAAsBgxB,IAWpD,MAAMM,WAAyBpD,GAU7BhoL,WAAAA,CAAY8rJ,GAAsB,IAAd9xJ,EAAO2Q,UAAA5L,OAAA,QAAA/D,IAAA2P,UAAA,GAAAA,UAAA,GAAG,CAAC,EAC7B3Q,EAAQ6lK,OAAS/T,EAAOk/B,cACxBvuD,MAAMqvB,EAAQ9xJ,GACd0G,KAAK2zJ,QAAQ,QACf,CAQAwB,aAAAA,GACE,MAAO,oBAAoBp5B,MAAMo5B,iBACnC,CACA+xB,oBAAAA,GACE,MAAO,oBAAoBnrD,MAAMmrD,wBACnC,CAWAD,WAAAA,GAAwB,IAAZhV,EAAKhoK,UAAA5L,OAAA,QAAA/D,IAAA2P,UAAA,GAAAA,UAAA,GAAG,GAElBjK,KAAK8mL,eAAiB,EACtB,MAAM3nB,EAASn/J,KAAKuxJ,QAAQ+4B,cAC5B,IAAK,IAAIvsL,EAAI,EAAGA,EAAIohK,EAAO9gK,OAAQN,IAAK,CACtC,MAAM0zF,EAAQ0tE,EAAOphK,GACrBk0K,EAAM94K,KAAK,IAAIixL,GAAmBpqL,KAAKuxJ,QAAS,CAC9C9/D,QAEAg2F,YAAY,EAEZE,iBAAiB,IAErB,CACA,OAAO1V,CACT,EASFyY,GAAiBtrL,UAAUo1K,aAAe,cAC1CpjB,GAAYgI,kBAAkB,mBAAoBsxB,IAalD,MAAMC,WAA6BnD,GAUjCloL,WAAAA,CAAY8rJ,EAAQ9xJ,GAClB,MAAMw0I,EAAQx0I,EAAQsxL,KAChBA,EAAO5tD,WAAW8Q,EAAO,IAG/Bx0I,EAAQw0I,MAAQA,EAChBx0I,EAAQozF,SAAWk+F,IAASx/B,EAAOy/B,eACnCvxL,EAAQmuL,YAAa,EACrBnuL,EAAQquL,iBAAkB,EAC1B5rD,MAAMqvB,EAAQ9xJ,GACd0G,KAAK8tI,MAAQA,EACb9tI,KAAK4qL,KAAOA,EACZ5qL,KAAKg7H,GAAGowB,EAAQ,cAAczzJ,GAAKqI,KAAK80K,OAAOn9K,IACjD,CAaAy8K,WAAAA,CAAY7xE,GACVw5B,MAAMq4C,cACNp0K,KAAKorJ,SAASy/B,aAAa7qL,KAAK4qL,KAClC,CAUA9V,MAAAA,CAAOvyE,GACLviG,KAAK0sF,SAAS1sF,KAAKorJ,SAASy/B,iBAAmB7qL,KAAK4qL,KACtD,EASFD,GAAqBvrL,UAAU2mL,cAAgB,SAC/C30B,GAAYgI,kBAAkB,uBAAwBuxB,IAatD,MAAMG,WAA+BvE,GAUnCjnL,WAAAA,CAAY8rJ,EAAQ9xJ,GAClByiI,MAAMqvB,EAAQ9xJ,GACd0G,KAAKolL,YAAY90B,IAAIz4I,aAAa,mBAAoB7X,KAAK+qL,YAC3D/qL,KAAKgrL,mBACLhrL,KAAKirL,cACLjrL,KAAKg7H,GAAGowB,EAAQ,aAAazzJ,GAAKqI,KAAKgrL,iBAAiBrzL,KACxDqI,KAAKg7H,GAAGowB,EAAQ,cAAczzJ,GAAKqI,KAAKirL,YAAYtzL,KACpDqI,KAAKg7H,GAAGowB,EAAQ,uBAAuBzzJ,GAAKqI,KAAKkrL,0BAA0BvzL,IAC7E,CAQA8uJ,QAAAA,GACE,MAAM/9I,EAAKqzH,MAAM0qB,WAQjB,OAPAzmJ,KAAK+qL,WAAa,iCAAmC/qL,KAAK2xJ,IAC1D3xJ,KAAKmrL,SAAW1kC,GAAS,MAAO,CAC9Bx1B,UAAW,0BACXv6G,GAAI1W,KAAK+qL,WACT59F,YAAa,OAEfzkF,EAAG9B,YAAY5G,KAAKmrL,UACbziL,CACT,CACA6yH,OAAAA,GACEv7H,KAAKmrL,SAAW,KAChBpvD,MAAMR,SACR,CAQA45B,aAAAA,GACE,MAAO,qBAAqBp5B,MAAMo5B,iBACpC,CACA+xB,oBAAAA,GACE,MAAO,qBAAqBnrD,MAAMmrD,wBACpC,CAMAD,WAAAA,GACE,MAAMmE,EAAQprL,KAAKqrL,gBACbpZ,EAAQ,GACd,IAAK,IAAIl0K,EAAIqtL,EAAM/sL,OAAS,EAAGN,GAAK,EAAGA,IACrCk0K,EAAM94K,KAAK,IAAIwxL,GAAqB3qL,KAAKorJ,SAAU,CACjDw/B,KAAMQ,EAAMrtL,GAAK,OAGrB,OAAOk0K,CACT,CAOAiZ,yBAAAA,CAA0B3oF,GACxBviG,KAAK80K,QACP,CAQAuW,aAAAA,GACE,MAAMjgC,EAASprJ,KAAKorJ,SACpB,OAAOA,EAAOigC,eAAiBjgC,EAAOigC,iBAAmB,EAC3D,CASAC,qBAAAA,GACE,OAAOtrL,KAAKorJ,SAASyX,OAAS7iK,KAAKorJ,SAASyX,MAAM2I,sBAAwBxrK,KAAKqrL,iBAAmBrrL,KAAKqrL,gBAAgBhtL,OAAS,CAClI,CAUA2sL,gBAAAA,CAAiBzoF,GACXviG,KAAKsrL,wBACPtrL,KAAKunJ,YAAY,cAEjBvnJ,KAAKmnJ,SAAS,aAElB,CAUA8jC,WAAAA,CAAY1oF,GACNviG,KAAKsrL,0BACPtrL,KAAKmrL,SAASh+F,YAAcntF,KAAKorJ,SAASy/B,eAAiB,IAE/D,EAWFC,GAAuB1rL,UAAUo1K,aAAe,gBAChDpjB,GAAYgI,kBAAkB,yBAA0B0xB,IAYxD,MAAMS,WAAen6B,GAOnB+D,aAAAA,GACE,MAAO,cAAcp5B,MAAMo5B,iBAC7B,CAQA1O,QAAAA,GAAmD,IAA1Cn8D,EAAGrgF,UAAA5L,OAAA,QAAA/D,IAAA2P,UAAA,GAAAA,UAAA,GAAG,MAAO86E,EAAK96E,UAAA5L,OAAA,QAAA/D,IAAA2P,UAAA,GAAAA,UAAA,GAAG,CAAC,EAAGkK,EAAUlK,UAAA5L,OAAA,QAAA/D,IAAA2P,UAAA,GAAAA,UAAA,GAAG,CAAC,EAI9C,OAHK86E,EAAMksC,YACTlsC,EAAMksC,UAAYjxH,KAAKm1J,iBAElBp5B,MAAM0qB,SAASn8D,EAAKvF,EAAO5wE,EACpC,EAEFi9I,GAAYgI,kBAAkB,SAAUmyB,IAqCxCn6B,GAAYgI,kBAAkB,sBA1B9B,cAAkCmyB,GAOhCp2B,aAAAA,GACE,MAAO,6BAA6Bp5B,MAAMo5B,iBAC5C,CAQA1O,QAAAA,GACE,OAAO1qB,MAAM0qB,SAAS,MAAO,CAC3Bx1B,UAAWjxH,KAAKm1J,gBAGhBhoE,YAAa,QAEjB,IAaF,MAAMq+F,WAAmBp6B,GAOvB3K,QAAAA,GACE,OAAO1qB,MAAM0qB,SAAS,MAAO,CAC3Bx1B,UAAW,kBACX+oD,IAAK,OAET,EASFwR,GAAWpsL,UAAUsyJ,SAAW,CAC9B3kE,SAAU,CAAC,aAAc,eAAgB,cAAe,cAAe,qBAAsB,cAAe,kBAAmB,kBAAmB,cAAe,aAAc,uBAAwB,sBAAuB,yBAA0B,iBAAkB,qBAAsB,iBAAkB,mBAAoB,yBAA0B,qBAElWqkE,GAAYgI,kBAAkB,aAAcoyB,IAc5C,MAAMC,WAAqB9uB,GAUzBr9J,WAAAA,CAAY8rJ,EAAQ9xJ,GAClByiI,MAAMqvB,EAAQ9xJ,GACd0G,KAAKg7H,GAAGowB,EAAQ,SAASzzJ,IACvBqI,KAAK1C,KAAK3F,EAAE,GAEhB,CAUAw9J,aAAAA,GACE,MAAO,qBAAqBp5B,MAAMo5B,iBACpC,CAQAzO,OAAAA,GACE,MAAMz+I,EAAQjI,KAAKorJ,SAASnjJ,QAC5B,OAAOA,EAAQjI,KAAK2yJ,SAAS1qJ,EAAMoG,SAAW,EAChD,EAQFo9K,GAAarsL,UAAUsyJ,SAAWvyJ,OAAOmF,OAAO,CAAC,EAAGq4J,GAAYv9J,UAAUsyJ,SAAU,CAClFiM,aAAa,EACbJ,YAAY,EACZW,WAAW,EACXf,aAAa,IAEf/L,GAAYgI,kBAAkB,eAAgBqyB,IAU9C,MAAMC,WAAwBt6B,GAuB5B9xJ,WAAAA,CAAY8rJ,GACVrvB,MAAMqvB,EADmBnhJ,UAAA5L,OAAA,QAAA/D,IAAA2P,UAAA,GAAAA,UAAA,GAAG,CAAC,GAE7BjK,KAAKswJ,IAAIz4I,aAAa,kBAAmB7X,KAAK2rL,oBAChD,CAQAllC,QAAAA,GACEzmJ,KAAK2rL,oBAAsB,CAAC3rL,KAAK0xJ,SAASk6B,SAAU5rL,KAAK0xJ,SAASm6B,SAAS93K,KAAK,KAAKxc,OAkBrF,OAfsBkvJ,GAAS,SAAU,CACvC/vI,GAAI1W,KAAK0xJ,SAASh7I,IACjB,CAAC,EAAG1W,KAAK0xJ,SAASo6B,cAAcz1K,KAAI01K,IAIrC,MAAMC,GAAYhsL,KAAK0xJ,SAASm6B,QAAU7rL,KAAK0xJ,SAASm6B,QAAU,oBAAoBhgC,QAAe,IAAMkgC,EAAW,GAAGxmL,QAAQ,OAAQ,IACnI0mL,EAASxlC,GAAS,SAAU,CAChC/vI,GAAIs1K,EACJ10L,MAAO0I,KAAK2yJ,SAASo5B,EAAW,IAChC5+F,YAAa4+F,EAAW,KAG1B,OADAE,EAAOp0K,aAAa,kBAAmB,GAAG7X,KAAK2rL,uBAAuBK,KAC/DC,CAAM,IAGjB,EAEF76B,GAAYgI,kBAAkB,kBAAmBsyB,IAajD,MAAMQ,WAA0B96B,GA0C9B9xJ,WAAAA,CAAY8rJ,GACVrvB,MAAMqvB,EADmBnhJ,UAAA5L,OAAA,QAAA/D,IAAA2P,UAAA,GAAAA,UAAA,GAAG,CAAC,GAI7B,MAAMkiL,EAAgB1lC,GAAS,SAAU,CACvCt5D,YAAantF,KAAK2yJ,SAAS3yJ,KAAK0xJ,SAAS06B,YACzC11K,GAAI1W,KAAK0xJ,SAASk6B,WAEpB5rL,KAAK0I,KAAK9B,YAAYulL,GACtB,MAAME,EAAUrsL,KAAK0xJ,SAAS26B,QAG9B,IAAK,MAAMtuL,KAAKsuL,EAAS,CACvB,MAAMC,EAAetsL,KAAK0xJ,SAAS66B,cAAcxuL,GAC3CyuL,EAAkBF,EAAar7D,UAC/Bv6G,EAAK41K,EAAa51K,GAAGnR,QAAQ,KAAMvF,KAAK0xJ,SAASC,KACvD,IAAIqpB,EAAO,KACX,MAAMnuB,EAAO,cAAchB,OAG3B,GAA2B,WAAvB7rJ,KAAK0xJ,SAASr6J,KAAmB,CACnC2jL,EAAOv0B,GAAS,OAAQ,CACtBx1B,UAAWu7D,IAEb,MAAM1+C,EAAQ2Y,GAAS,QAAS,CAC9B/vI,KACAu6G,UAAW,YACX9jC,YAAam/F,EAAax+C,QAE5BA,EAAMj2H,aAAa,MAAOg1I,GAC1BmuB,EAAKp0K,YAAYknI,EACnB,CACA,MAAM2+C,EAAkB,IAAIf,GAAgBtgC,EAAQ,CAClD0gC,cAAeQ,EAAahzL,QAC5BsyL,SAAU5rL,KAAK0xJ,SAASk6B,SACxBl1K,GAAIm2I,EACJg/B,QAASn1K,IAEX1W,KAAKo0J,SAASq4B,GAGa,WAAvBzsL,KAAK0xJ,SAASr6J,OAChB2jL,EAAKp0K,YAAY6lL,EAAgB/jL,MACjC1I,KAAK0I,KAAK9B,YAAYo0K,GAE1B,CACF,CAQAv0B,QAAAA,GAME,OALWA,GAAS,WAAY,CAG9Bx1B,UAAWjxH,KAAK0xJ,SAASzgC,WAG7B,EAEFmgC,GAAYgI,kBAAkB,oBAAqB8yB,IAWnD,MAAMQ,WAAgCt7B,GAsBpC9xJ,WAAAA,CAAY8rJ,GACVrvB,MAAMqvB,EADmBnhJ,UAAA5L,OAAA,QAAA/D,IAAA2P,UAAA,GAAAA,UAAA,GAAG,CAAC,GAE7B,MAAM0nJ,EAAM3xJ,KAAK0xJ,SAASi7B,qBAGpBC,EAAoB,IAAIV,GAAkB9gC,EAAQ,CACtDuG,MACAi6B,SAAU,wBAAwBj6B,IAClCy6B,WAAYpsL,KAAK2yJ,SAAS,QAC1B1hC,UAAW,2BACXo7D,QAASrsL,KAAK0xJ,SAASm7B,UAAU,GACjCN,cAAevsL,KAAK0xJ,SAAS66B,cAC7Bl1L,KAAM,WAER2I,KAAKo0J,SAASw4B,GAGd,MAAME,EAAoB,IAAIZ,GAAkB9gC,EAAQ,CACtDuG,MACAi6B,SAAU,uBAAuBj6B,IACjCy6B,WAAYpsL,KAAK2yJ,SAAS,mBAC1B1hC,UAAW,2BACXo7D,QAASrsL,KAAK0xJ,SAASm7B,UAAU,GACjCN,cAAevsL,KAAK0xJ,SAAS66B,cAC7Bl1L,KAAM,WAER2I,KAAKo0J,SAAS04B,GAGd,MAAMC,EAAqB,IAAIb,GAAkB9gC,EAAQ,CACvDuG,MACAi6B,SAAU,mBAAmBj6B,IAC7By6B,WAAYpsL,KAAK2yJ,SAAS,2BAC1B1hC,UAAW,+BACXo7D,QAASrsL,KAAK0xJ,SAASm7B,UAAU,GACjCN,cAAevsL,KAAK0xJ,SAAS66B,cAC7Bl1L,KAAM,WAER2I,KAAKo0J,SAAS24B,EAChB,CAQAtmC,QAAAA,GAIE,OAHWA,GAAS,MAAO,CACzBx1B,UAAW,6BAGf,EAEFmgC,GAAYgI,kBAAkB,0BAA2BszB,IAWzD,MAAMM,WAA8B57B,GAsBlC9xJ,WAAAA,CAAY8rJ,GACVrvB,MAAMqvB,EADmBnhJ,UAAA5L,OAAA,QAAA/D,IAAA2P,UAAA,GAAAA,UAAA,GAAG,CAAC,GAE7B,MAAM0nJ,EAAM3xJ,KAAK0xJ,SAASi7B,qBACpBC,EAAoB,IAAIV,GAAkB9gC,EAAQ,CACtDuG,MACAi6B,SAAU,sBAAsBj6B,IAChCy6B,WAAY,YACZn7D,UAAW,qCACXo7D,QAASrsL,KAAK0xJ,SAASm7B,UAAU,GACjCN,cAAevsL,KAAK0xJ,SAAS66B,cAC7Bl1L,KAAM,SAER2I,KAAKo0J,SAASw4B,GACd,MAAME,EAAoB,IAAIZ,GAAkB9gC,EAAQ,CACtDuG,MACAi6B,SAAU,uBAAuBj6B,IACjCy6B,WAAYpsL,KAAK2yJ,SAAS,mBAC1B1hC,UAAW,mCACXo7D,QAASrsL,KAAK0xJ,SAASm7B,UAAU,GACjCN,cAAevsL,KAAK0xJ,SAAS66B,cAC7Bl1L,KAAM,SAER2I,KAAKo0J,SAAS04B,GACd,MAAMC,EAAqB,IAAIb,GAAkB9gC,EAAQ,CACvDuG,MACAi6B,SAAU,wBAAwBj6B,IAClCy6B,WAAYpsL,KAAK2yJ,SAAS,eAC1B1hC,UAAW,oCACXo7D,QAASrsL,KAAK0xJ,SAASm7B,UAAU,GACjCN,cAAevsL,KAAK0xJ,SAAS66B,cAC7Bl1L,KAAM,SAER2I,KAAKo0J,SAAS24B,EAChB,CAQAtmC,QAAAA,GAIE,OAHWA,GAAS,MAAO,CACzBx1B,UAAW,2BAGf,EAEFmgC,GAAYgI,kBAAkB,wBAAyB4zB,IAWvD,MAAMC,WAA8B77B,GAClC9xJ,WAAAA,CAAY8rJ,GACVrvB,MAAMqvB,EADmBnhJ,UAAA5L,OAAA,QAAA/D,IAAA2P,UAAA,GAAAA,UAAA,GAAG,CAAC,GAI7B,MAAMijL,EAAsBltL,KAAK2yJ,SAAS,8CACpCw6B,EAAc,IAAIlT,GAAO7uB,EAAQ,CACrCiT,YAAa6uB,EACbj8D,UAAW,uBAEbk8D,EAAYzkL,KAAKw+I,UAAU32I,OAAO,cAAe,cACjD48K,EAAYzkL,KAAKykF,YAAcntF,KAAK2yJ,SAAS,SAC7C3yJ,KAAKo0J,SAAS+4B,GACd,MAAMC,EAAa,IAAInT,GAAO7uB,EAAQ,CACpCiT,YAAa6uB,EACbj8D,UAAW,oBAIbm8D,EAAW1kL,KAAKw+I,UAAU32I,OAAO,cAAe,cAChD68K,EAAW1kL,KAAKykF,YAAcntF,KAAK2yJ,SAAS,QAC5C3yJ,KAAKo0J,SAASg5B,EAChB,CAQA3mC,QAAAA,GAIE,OAHWA,GAAS,MAAO,CACzBx1B,UAAW,+BAGf,EAEFmgC,GAAYgI,kBAAkB,wBAAyB6zB,IAQvD,MAAMI,GAAsB,0BACtBC,GAAc,CAAC,OAAQ,SACvBC,GAAa,CAAC,OAAQ,QACtBC,GAAa,CAAC,OAAQ,QACtBC,GAAc,CAAC,OAAQ,SACvBC,GAAgB,CAAC,OAAQ,WACzBC,GAAY,CAAC,OAAQ,OACrBC,GAAc,CAAC,OAAQ,SACvBC,GAAe,CAAC,OAAQ,UACxBC,GAAiB,CAAC,IAAK,UACvBC,GAAe,CAAC,MAAO,oBACvBC,GAAgB,CAAC,IAAK,eAatBzB,GAAgB,CACpBpT,gBAAiB,CACf5yB,SAAU,yBACV7vI,GAAI,+BACJo3H,MAAO,QACPx0I,QAAS,CAACg0L,GAAaM,GAAaD,GAAWF,GAAaF,GAAYM,GAAcH,GAAeF,IACrGv8D,UAAW,gBAEbmoD,kBAAmB,CACjB7yB,SAAU,2BACV7vI,GAAI,iCACJo3H,MAAO,UACPx0I,QAAS,CAACw0L,GAAgBC,GAAcC,IACxC/8D,UAAW,8BAEbrvB,MAAO,CACL2kD,SAAU,2BACV7vI,GAAI,+BACJo3H,MAAO,QACPx0I,QAAS,CAACs0L,GAAaN,GAAaK,GAAWF,GAAaF,GAAYM,GAAcH,GAAeF,IACrGv8D,UAAW,kBAEbsoD,UAAW,CACThzB,SAAU,2BACV7vI,GAAI,GACJo3H,MAAO,kBACPx0I,QAAS,CAAC,CAAC,OAAQ,QAAS,CAAC,SAAU,UAAW,CAAC,YAAa,aAAc,CAAC,UAAW,WAAY,CAAC,aAAc,iBAEvHqgL,WAAY,CACVpzB,SAAU,4BACV7vI,GAAI,GACJo3H,MAAO,cACPx0I,QAAS,CAAC,CAAC,wBAAyB,2BAA4B,CAAC,qBAAsB,wBAAyB,CAAC,oBAAqB,sBAAuB,CAAC,iBAAkB,mBAAoB,CAAC,SAAU,UAAW,CAAC,SAAU,UAAW,CAAC,aAAc,gBAEjQmgL,YAAa,CACXlzB,SAAU,6BACV7vI,GAAI,GACJo3H,MAAO,YACPx0I,QAAS,CAAC,CAAC,OAAQ,OAAQ,CAAC,OAAQ,OAAQ,CAAC,OAAQ,QAAS,CAAC,OAAQ,QAAS,CAAC,OAAQ,QAAS,CAAC,OAAQ,QAAS,CAAC,OAAQ,QAAS,CAAC,OAAQ,QAAS,CAAC,OAAQ,SACjKixH,QAAS,EACTkvB,OAAQzkI,GAAW,SAANA,EAAe,KAAOwvE,OAAOxvE,IAE5CkkK,YAAa,CACX3yB,SAAU,6BACV7vI,GAAI,iCACJo3H,MAAO,UACPx0I,QAAS,CAACw0L,GAAgBC,IAC1B98D,UAAW,gCAGbooD,YAAa,CACX9yB,SAAU,6BACV7vI,GAAI,2BACJo3H,MAAO,QACP7c,UAAW,oBAGbqoD,cAAe,CACb/yB,SAAU,+BACV7vI,GAAI,6BACJo3H,MAAO,UACPx0I,QAAS,CAAC00L,GAAeD,GAAcD,IACvC78D,UAAW,mCAqBf,SAASg9D,GAAiB32L,EAAOmiJ,GAI/B,GAHIA,IACFniJ,EAAQmiJ,EAAOniJ,IAEbA,GAAmB,SAAVA,EACX,OAAOA,CAEX,CAzBAi1L,GAAclT,YAAY//K,QAAUizL,GAAcpT,gBAAgB7/K,QAyPlE83J,GAAYgI,kBAAkB,oBAzK9B,cAAgCuD,GAU9Br9J,WAAAA,CAAY8rJ,EAAQ9xJ,GAClBA,EAAQ4kK,WAAY,EACpBniC,MAAMqvB,EAAQ9xJ,GACd0G,KAAK0pK,cAAgB1pK,KAAK0pK,cAAc3qK,KAAKiB,MAG7CA,KAAKw9J,OACLx9J,KAAKg9J,eAAiBh9J,KAAKi9J,gBAAiB,EAC5Cj9J,KAAKkuL,sBAAsB9iC,GAC3BprJ,KAAKmuL,UAAY1nC,GAAS,IAAK,CAC7Bx1B,UAAW,mBACX9jC,YAAantF,KAAK2yJ,SAAS,2BAE7B3yJ,KAAK0I,KAAK9B,YAAY5G,KAAKmuL,WAC3BnuL,KAAKouL,mBAGoC9zL,IAArChB,EAAQ+0L,2BACVruL,KAAK0xJ,SAAS28B,yBAA2BruL,KAAK0xJ,SAASoD,cAAcu5B,0BAEvEruL,KAAKsuL,mCACDtuL,KAAK0xJ,SAAS28B,0BAChBruL,KAAKuuL,iBAET,CACAL,qBAAAA,CAAsB9iC,GACpB,MAAMojC,EAA0B,IAAI9B,GAAwBthC,EAAQ,CAClEuhC,qBAAsB3sL,KAAK2xJ,IAC3B46B,iBACAM,UAAW,CAAC,CAAC,QAAS,eAAgB,CAAC,kBAAmB,qBAAsB,CAAC,cAAe,oBAElG7sL,KAAKo0J,SAASo6B,GACd,MAAMC,EAAwB,IAAIzB,GAAsB5hC,EAAQ,CAC9DuhC,qBAAsB3sL,KAAK2xJ,IAC3B46B,iBACAM,UAAW,CAAC,CAAC,eAAgB,CAAC,aAAc,CAAC,iBAE/C7sL,KAAKo0J,SAASq6B,GACd,MAAMC,EAAwB,IAAIzB,GAAsB7hC,GACxDprJ,KAAKo0J,SAASs6B,EAChB,CACAJ,gCAAAA,GACEtuL,KAAKg7H,GAAGh7H,KAAKurH,EAAE,oBAAqB,CAAC,QAAS,QAAQ,KACpDvrH,KAAK2uL,eACL3uL,KAAK88J,OAAO,IAEd98J,KAAKg7H,GAAGh7H,KAAKurH,EAAE,uBAAwB,CAAC,QAAS,QAAQ,KACvDvrH,KAAKouL,cACLpuL,KAAK0pK,eAAe,IAEtBtmB,GAAKmpC,IAAexrG,IAClB/gF,KAAKg7H,GAAGh7H,KAAKurH,EAAExqC,EAAOwlE,UAAW,SAAUvmJ,KAAK0pK,cAAc,GAElE,CACAnuC,OAAAA,GACEv7H,KAAKmuL,UAAY,KACjBpyD,MAAMR,SACR,CACAuS,KAAAA,GACE,OAAO9tI,KAAK2yJ,SAAS,0BACvB,CACA0K,WAAAA,GACE,OAAOr9J,KAAK2yJ,SAAS,uEACvB,CACAwC,aAAAA,GACE,OAAOp5B,MAAMo5B,gBAAkB,0BACjC,CAQA4jB,SAAAA,GACE,OAAO7hL,GAAOq1L,IAAe,CAACjpC,EAAOviE,EAAQhoF,KAC3C,MAAMzB,GA3HoBoR,EA2HW1I,KAAKurH,EAAExqC,EAAOwlE,UA3HrB9M,EA2HgC14D,EAAO04D,OAzHlEw0C,GADOvlL,EAAGpP,QAAQoP,EAAGpP,QAAQs1L,eAAet3L,MACpBmiJ,IAFjC,IAAgC/wI,EAAI+wI,EA+H9B,YAHcn/I,IAAVhD,IACFgsJ,EAAMvqJ,GAAOzB,GAERgsJ,CAAK,GACX,CAAC,EACN,CAQAurC,SAAAA,CAAU9hE,GACRq2B,GAAKmpC,IAAe,CAACxrG,EAAQhoF,MAtHjC,SAA2B2P,EAAIpR,EAAOmiJ,GACpC,GAAKniJ,EAGL,IAAK,IAAIyG,EAAI,EAAGA,EAAI2K,EAAGpP,QAAQ+E,OAAQN,IACrC,GAAIkwL,GAAiBvlL,EAAGpP,QAAQyE,GAAGzG,MAAOmiJ,KAAYniJ,EAAO,CAC3DoR,EAAGkmL,cAAgB7wL,EACnB,KACF,CAEJ,CA6GM+wL,CAAkB9uL,KAAKurH,EAAExqC,EAAOwlE,UAAWx5B,EAAOh0H,GAAMgoF,EAAO04D,OAAO,GAE1E,CAKA20C,WAAAA,GACEhrC,GAAKmpC,IAAexrG,IAClB,MAAMloF,EAAQkoF,EAAOljF,eAAe,WAAakjF,EAAOwpC,QAAU,EAClEvqH,KAAKurH,EAAExqC,EAAOwlE,UAAUqoC,cAAgB/1L,CAAK,GAEjD,CAKA01L,eAAAA,GACE,IAAIxhE,EACJ,IACEA,EAAS/xH,KAAKC,MAAM8mJ,IAAAA,aAAsBgtC,QAAQ1B,IACpD,CAAE,MAAO72L,GACP4qJ,GAAM/1I,KAAK7U,EACb,CACIu2H,GACF/sH,KAAK6uL,UAAU9hE,EAEnB,CAKA4hE,YAAAA,GACE,IAAK3uL,KAAK0xJ,SAAS28B,yBACjB,OAEF,MAAMthE,EAAS/sH,KAAK+4K,YACpB,IACM55K,OAAO0M,KAAKkhH,GAAQ1uH,OACtB0jJ,IAAAA,aAAsBitC,QAAQ3B,GAAqBryL,KAAK8B,UAAUiwH,IAElEg1B,IAAAA,aAAsBktC,WAAW5B,GAErC,CAAE,MAAO72L,GACP4qJ,GAAM/1I,KAAK7U,EACb,CACF,CAKAkzK,aAAAA,GACE,MAAMwlB,EAAYlvL,KAAKuxJ,QAAQ8B,SAAS,oBACpC67B,GACFA,EAAUxlB,eAEd,CAKA9X,oBAAAA,GACE5xJ,KAAKw9J,OACLx9J,KAAKkuL,sBAAsBluL,KAAKuxJ,SAChCvxJ,KAAKsuL,kCACP,IAsIFl9B,GAAYgI,kBAAkB,gBA7G9B,cAA4BhI,GAc1B9xJ,WAAAA,CAAY8rJ,EAAQ9xJ,GAClB,IAAI61L,EAA4B71L,EAAQ81L,gBAAkBrtC,IAAAA,eAG3B,OAA3BzoJ,EAAQ81L,iBACVD,GAA4B,GAQ9BpzD,MAAMqvB,EAJW5H,GAAQ,CACvBiD,UAAW0oC,EACX78B,qBAAqB,GACpBh5J,IAEH0G,KAAKovL,eAAiB91L,EAAQ81L,gBAAkBrtC,IAAAA,eAChD/hJ,KAAKqvL,cAAgB,KACrBrvL,KAAKsvL,gBAAkB,KACvBtvL,KAAKuvL,kBAAoB9hC,IAAS,KAChCztJ,KAAKwvL,eAAe,GACnB,KAAK,EAAOxvL,MACXmvL,GACFnvL,KAAKsvL,gBAAkB,IAAItvL,KAAKovL,eAAepvL,KAAKuvL,mBACpDvvL,KAAKsvL,gBAAgBG,QAAQrkC,EAAO1iJ,QAEpC1I,KAAKqvL,cAAgB,KACnB,IAAKrvL,KAAKswJ,MAAQtwJ,KAAKswJ,IAAIhsD,cACzB,OAEF,MAAMirF,EAAoBvvL,KAAKuvL,kBAC/B,IAAIG,EAAkB1vL,KAAK0vL,gBAAkB,WAC3Cz0D,GAAIj7H,KAAM,SAAUuvL,GACpBt0D,GAAIj7H,KAAM,SAAU0vL,GACpBA,EAAkB,IACpB,EAIA10D,GAAGh7H,KAAKswJ,IAAIhsD,cAAe,SAAUorF,GACrC10D,GAAGh7H,KAAKswJ,IAAIhsD,cAAe,SAAUirF,EAAkB,EAEzDvvL,KAAKmtJ,IAAI,OAAQntJ,KAAKqvL,eAE1B,CACA5oC,QAAAA,GACE,OAAO1qB,MAAM0qB,SAAS,SAAU,CAC9Bx1B,UAAW,qBACX2B,UAAW,EACXgC,MAAO50H,KAAK2yJ,SAAS,eACpB,CACD,cAAe,QAEnB,CAOA68B,aAAAA,GASOxvL,KAAKuxJ,SAAYvxJ,KAAKuxJ,QAAQr2B,SAGnCl7H,KAAKuxJ,QAAQr2B,QAAQ,eACvB,CACAK,OAAAA,GACMv7H,KAAKuvL,mBACPvvL,KAAKuvL,kBAAkBrkE,SAErBlrH,KAAKsvL,kBACHtvL,KAAKuxJ,QAAQ7oJ,MACf1I,KAAKsvL,gBAAgBK,UAAU3vL,KAAKuxJ,QAAQ7oJ,MAE9C1I,KAAKsvL,gBAAgBM,cAEnB5vL,KAAKqvL,eACPrvL,KAAKi7H,IAAI,OAAQj7H,KAAKqvL,eAEpBrvL,KAAKswJ,KAAOtwJ,KAAKswJ,IAAIhsD,eAAiBtkG,KAAK0vL,iBAC7C1vL,KAAK0vL,gBAAgB7wL,KAAKmB,KAAKswJ,IAAIhsD,eAErCtkG,KAAKovL,eAAiB,KACtBpvL,KAAK6vL,eAAiB,KACtB7vL,KAAKuvL,kBAAoB,KACzBvvL,KAAKqvL,cAAgB,KACrBtzD,MAAMR,SACR,IAMF,MAAMu0D,GAAa,CACjBC,kBAAmB,GACnBC,cAAe,IA2VjB5+B,GAAYgI,kBAAkB,cAjV9B,cAA0BhI,GAoBxB9xJ,WAAAA,CAAY8rJ,EAAQ9xJ,GAKlByiI,MAAMqvB,EAHW5H,GAAQssC,GAAYx2L,EAAS,CAC5CmtJ,UAAU,KAGZzmJ,KAAKiwL,kBAAoB,IAAMjwL,KAAKkwL,aACpClwL,KAAKmwL,YAAcx4L,GAAKqI,KAAK06K,WAAW/iL,GACxCqI,KAAKowL,uBAAyBz4L,GAAKqI,KAAKqwL,sBAAsB14L,GAC9DqI,KAAKswL,cAAgB34L,GAAKqI,KAAK66K,aAAaljL,GAC5CqI,KAAKuwL,gBAAkB54L,GAAKqI,KAAKo8K,eAAezkL,GAChDqI,KAAKwwL,SACLxwL,KAAKg7H,GAAGh7H,KAAKuxJ,QAAS,kBAAkB55J,GAAKqI,KAAKywL,qBAAqB94L,KAGvEqI,KAAKg7H,GAAGh7H,KAAKuxJ,QAAS,WAAW,IAAMvxJ,KAAK0wL,kBAC9C,CAMAR,UAAAA,GACE,MAAMziB,EAAWztK,KAAKuxJ,QAAQkc,WAG9B,IAAKA,IAAaA,EAASpvK,OACzB,OAEF,MAAM8hL,EAAU37F,OAAOu9D,IAAAA,YAAqBlmD,MAAMwhF,QAAQ,IACpDsT,GAAgC,IAApB3wL,KAAK4wL,UAAmB,GAAKzQ,EAAUngL,KAAK4wL,WAAa,IAC3E5wL,KAAK4wL,UAAYzQ,EACjBngL,KAAK6wL,aAAe7wL,KAAK8wL,cAAgBH,EACzC,MAAM5Q,EAAkB//K,KAAK+/K,kBACvB9b,EAAcjkK,KAAKuxJ,QAAQ0S,cAOjC,IAAI8sB,EAAW/wL,KAAKuxJ,QAAQmM,UAAY19J,KAAKgxL,mBAAqB1tL,KAAK0lI,IAAI+2C,EAAkB9b,GAAejkK,KAAK0xJ,SAASs+B,cAKrHhwL,KAAKixL,iBAAmBlR,IAAoBl9D,MAC/CkuE,GAAW,GAETA,IAAa/wL,KAAKkxL,kBACpBlxL,KAAKkxL,gBAAkBH,EACvB/wL,KAAKk7H,QAAQ,kBAEjB,CAMAu1D,oBAAAA,GACEzwL,KAAK0wL,gBACP,CAKAA,cAAAA,GACM1wL,KAAKuxJ,QAAQx0B,aAAela,KAAY7iH,KAAKi/K,cAAgBj/K,KAAK0xJ,SAASq+B,mBACzE/vL,KAAKuxJ,QAAQG,SAASy/B,QACxBnxL,KAAKuxJ,QAAQpK,SAAS,cAExBnnJ,KAAK6jK,kBAEL7jK,KAAKuxJ,QAAQhK,YAAY,cACzBvnJ,KAAKsrF,eAET,CAKAu4E,aAAAA,GACM7jK,KAAKoxL,eAOJpxL,KAAKixL,kBACRjxL,KAAKixL,gBAAkBjxL,KAAKuxJ,QAAQ8/B,cAEtCrxL,KAAKsxL,kBAAoBtxL,KAAK23J,YAAY33J,KAAKiwL,kBAAmB7iC,IAClEptJ,KAAKkwL,aACLlwL,KAAKg7H,GAAGh7H,KAAKuxJ,QAAS,CAAC,OAAQ,SAAUvxJ,KAAKiwL,mBACzCjwL,KAAKixL,gBAIRjxL,KAAKg7H,GAAGh7H,KAAKuxJ,QAAS,SAAUvxJ,KAAKswL,gBAHrCtwL,KAAKmtJ,IAAIntJ,KAAKuxJ,QAAS,OAAQvxJ,KAAKmwL,aACpCnwL,KAAKmtJ,IAAIntJ,KAAKuxJ,QAAS,aAAcvxJ,KAAKowL,yBAI9C,CAMAC,qBAAAA,GACErwL,KAAKixL,iBAAkB,EACvBjxL,KAAKg7H,GAAGh7H,KAAKuxJ,QAAS,SAAUvxJ,KAAKswL,cACvC,CAMAzV,YAAAA,GACE,MAAM0W,EAAWjuL,KAAK0lI,IAAIhpI,KAAK+/K,kBAAoB//K,KAAKuxJ,QAAQ0S,eAChEjkK,KAAKgxL,kBAAoBhxL,KAAKwxL,qBAAuBD,EAAW,EAChEvxL,KAAKwxL,qBAAsB,EAC3BxxL,KAAKkwL,YACP,CAMAxV,UAAAA,GACE16K,KAAKmtJ,IAAIntJ,KAAKuxJ,QAAS,aAAcvxJ,KAAKuwL,gBAC5C,CAMAC,MAAAA,GACExwL,KAAK4wL,WAAa,EAClB5wL,KAAK6wL,aAAe,EACpB7wL,KAAKyxL,cAAgB,EACrBzxL,KAAKkxL,iBAAkB,EACvBlxL,KAAKixL,iBAAkB,EACvBjxL,KAAKgxL,mBAAoB,EACzBhxL,KAAKwxL,qBAAsB,EAC3BxxL,KAAK03J,cAAc13J,KAAKsxL,mBACxBtxL,KAAKsxL,kBAAoB,KACzBtxL,KAAKi7H,IAAIj7H,KAAKuxJ,QAAS,CAAC,OAAQ,SAAUvxJ,KAAKiwL,mBAC/CjwL,KAAKi7H,IAAIj7H,KAAKuxJ,QAAS,SAAUvxJ,KAAKswL,eACtCtwL,KAAKi7H,IAAIj7H,KAAKuxJ,QAAS,OAAQvxJ,KAAKmwL,aACpCnwL,KAAKi7H,IAAIj7H,KAAKuxJ,QAAS,aAAcvxJ,KAAKowL,wBAC1CpwL,KAAKi7H,IAAIj7H,KAAKuxJ,QAAS,aAAcvxJ,KAAKuwL,gBAC5C,CAOAhf,kBAAAA,GACEvxK,KAAKwxL,qBAAsB,CAC7B,CAKAlmG,YAAAA,GACOtrF,KAAKoxL,eAGVpxL,KAAKwwL,SACLxwL,KAAKk7H,QAAQ,kBACf,CASAijD,WAAAA,GACE,MAAM1Q,EAAWztK,KAAKuxJ,QAAQkc,WACxBikB,EAAe,GACrB,IAAI3zL,EAAI0vK,EAAWA,EAASpvK,OAAS,EACrC,KAAON,KACL2zL,EAAav4L,KAAKs0K,EAAS/tF,IAAI3hF,IAKjC,OAAO2zL,EAAarzL,OAASqzL,EAAatkE,OAAOskE,EAAarzL,OAAS,GAAKwkH,GAC9E,CASAo9D,aAAAA,GACE,MAAMxS,EAAWztK,KAAKuxJ,QAAQkc,WACxBkkB,EAAiB,GACvB,IAAI5zL,EAAI0vK,EAAWA,EAASpvK,OAAS,EACrC,KAAON,KACL4zL,EAAex4L,KAAKs0K,EAASpnK,MAAMtI,IAKrC,OAAO4zL,EAAetzL,OAASszL,EAAevkE,OAAO,GAAK,CAC5D,CAWA6xD,UAAAA,GACE,MAAMc,EAAkB//K,KAAK+/K,kBAG7B,OAAIA,IAAoBl9D,IACf,EAEFk9D,EAAkB//K,KAAKigL,eAChC,CASA3O,MAAAA,GACE,OAAOtxK,KAAKoxL,YACd,CASAjV,UAAAA,GACE,OAAQn8K,KAAK4xL,gBACf,CAQA7R,eAAAA,GACE,OAAO//K,KAAK8wL,cAAgB9wL,KAAKm+K,aACnC,CASA2S,WAAAA,GACE,MAAM3S,EAAcn+K,KAAKm+K,cAKzB,OAJ2B,IAAvBn+K,KAAKyxL,cAAuBtT,IAAgBn+K,KAAKyxL,eACnDzxL,KAAK6wL,aAAe,GAEtB7wL,KAAKyxL,aAAetT,EACbn+K,KAAK6wL,YACd,CASAe,cAAAA,GACE,OAAO5xL,KAAKkxL,eACd,CAKAE,UAAAA,GACE,MAAyC,kBAA3BpxL,KAAKsxL,iBACrB,CAKAlV,cAAAA,GACEp8K,KAAKgxL,mBAAoB,EACrBhxL,KAAKm8K,eAGTn8K,KAAKwxL,qBAAsB,EAC3BxxL,KAAKuxJ,QAAQ0S,YAAYjkK,KAAK+/K,mBAChC,CAKAxkD,OAAAA,GACEv7H,KAAKsrF,eACLywC,MAAMR,SACR,IA4HF61B,GAAYgI,kBAAkB,WA/G9B,cAAuBhI,GACrB9xJ,WAAAA,CAAY8rJ,EAAQ9xJ,GAClByiI,MAAMqvB,EAAQ9xJ,GACd0G,KAAKg7H,GAAG,gBAAgBrjI,GAAKqI,KAAK6xL,eAClC7xL,KAAK6xL,YACP,CAQAprC,QAAAA,GAWE,OAVAzmJ,KAAKs3B,IAAM,CACTs9F,MAAO6xB,GAAS,MAAO,CACrBx1B,UAAW,sBACXv6G,GAAI,uBAAuBm1I,SAE7BwR,YAAa5W,GAAS,MAAO,CAC3Bx1B,UAAW,4BACXv6G,GAAI,6BAA6Bm1I,UAG9BpF,GAAS,MAAO,CACrBx1B,UAAW,iBACV,CAAC,EAAGlE,GAAO/sH,KAAKs3B,KACrB,CAKAu6J,UAAAA,GACE,MAAM31B,EAAOl8J,KAAKuxJ,QAAQsR,MACpBivB,EAAS51B,GAAQA,EAAK5L,IACtByhC,EAAgB,CACpBn9D,MAAO,kBACPyoC,YAAa,oBAEf,CAAC,QAAS,eAAe1kK,SAAQ0nF,IAC/B,MAAM/oF,EAAQ0I,KAAK25G,MAAMt5B,GACnB33E,EAAK1I,KAAKs3B,IAAI+oD,GACd2xG,EAAeD,EAAc1xG,GACnCspE,GAAQjhJ,GACJpR,GACF61F,GAAYzkF,EAAIpR,GAKdw6L,IACFA,EAAOh6K,gBAAgBk6K,GACnB16L,GACFw6L,EAAOj6K,aAAam6K,EAActpL,EAAGgO,IAEzC,IAEE1W,KAAK25G,MAAMib,OAAS50H,KAAK25G,MAAM0jD,YACjCr9J,KAAK21J,OAEL31J,KAAK8yH,MAET,CA+BAgiD,MAAAA,CAAOx7K,GACL0G,KAAKguH,SAAS10H,EAChB,CAKAiiI,OAAAA,GACE,MAAM2gC,EAAOl8J,KAAKuxJ,QAAQsR,MACpBivB,EAAS51B,GAAQA,EAAK5L,IACxBwhC,IACFA,EAAOh6K,gBAAgB,mBACvBg6K,EAAOh6K,gBAAgB,qBAEzBikH,MAAMR,UACNv7H,KAAKs3B,IAAM,IACb,IAiBF,MAAM26J,GAAW,CACfC,eAAgB,IAChBtsL,SAAU,GACVusL,WAAW,GAgGb/gC,GAAYgI,kBAAkB,kBA7E9B,cAA8B6gB,GAO5B36K,WAAAA,CAAY8rJ,EAAQ9xJ,GAElByiI,MAAMqvB,EADN9xJ,EAAUkqJ,GAAQyuC,GAAU34L,IAE5B0G,KAAKq+J,YAAY/kK,EAAQ+kK,aACzBr+J,KAAK8yH,OAIL9yH,KAAKg7H,GAAGh7H,KAAKuxJ,QAAS,CAAC,aAAc,iBAAiB55J,IACpDqI,KAAKunJ,YAAY,gBAAgB,GAErC,CAOA4N,aAAAA,GACE,MAAO,sCAAsCn1J,KAAK0xJ,SAAS9rJ,SAASyQ,KAAIpG,GAAK,OAAOA,MAAK8D,KAAK,MAChG,CAOA0yI,QAAAA,GAEE,MAAM/9I,EAAK+9I,GAAS,SAAU,CAAC,EAAG,CAChCpvJ,KAAM,SACNutI,MAAO5kI,KAAKm1J,iBACX1O,GAAS,SAEZ,OADAzmJ,KAAKu0K,eAAiB7rK,EAAGyrJ,cAAc,QAChCzrJ,CACT,CAMAitJ,IAAAA,GACE55B,MAAM45B,OACN31J,KAAKmnJ,SAAS,iBACVnnJ,KAAK0xJ,SAASygC,WAChBnyL,KAAK0I,KAAKs9F,MAAM,CACdosF,eAAe,IAGnBpyL,KAAKqyL,oBAAsBryL,KAAKuxJ,QAAQz1J,YAAW,KACjDkE,KAAKunJ,YAAY,gBAAgB,GAChCvnJ,KAAK0xJ,SAASwgC,eACnB,CAKAp/D,IAAAA,GACE9yH,KAAKunJ,YAAY,iBACjBxrB,MAAMjJ,MACR,CAKAyI,OAAAA,GACEv7H,KAAKuxJ,QAAQn2J,aAAa4E,KAAKqyL,qBAC/Bt2D,MAAMR,SACR,IAmBF,MAAM+2D,GAAgBp2B,IACpB,MAAMxzJ,EAAKwzJ,EAAKxzJ,KAGhB,GAAIA,EAAGiP,aAAa,OAElB,OADAukJ,EAAKyL,iBAAiBj/J,EAAGqD,MAClB,EAeT,MAAM23I,EAAUwY,EAAKnS,GAAG,UAClBwoC,EAAU,GAChB,IAAIxmL,EAAM,GAGV,IAAK23I,EAAQrlJ,OACX,OAAO,EAIT,IAAK,IAAIN,EAAI,EAAGA,EAAI2lJ,EAAQrlJ,OAAQN,IAAK,CACvC,MAAMlE,EAAM6pJ,EAAQ3lJ,GAAGgO,IACnBlS,IAAiC,IAA1B04L,EAAQz5L,QAAQe,IACzB04L,EAAQp5L,KAAKU,EAEjB,CAGA,QAAK04L,EAAQl0L,SAMU,IAAnBk0L,EAAQl0L,SACV0N,EAAMwmL,EAAQ,IAEhBr2B,EAAKyL,iBAAiB57J,IACf,EAAI,EAOPymL,GAA8BrzL,OAAOka,eAAe,CAAC,EAAG,YAAa,CACzEvY,GAAAA,GACE,OAAOd,KAAK+U,WAAU,GAAMy4E,SAC9B,EACA7sF,GAAAA,CAAIqU,GAEF,MAAMy9K,EAAQvxC,IAAAA,cAAyBlhJ,KAAKnF,SAAS7D,eAGrDy7L,EAAMjlG,UAAYx4E,EAGlB,MAAM09K,EAAUxxC,IAAAA,yBAIhB,KAAOuxC,EAAM9hL,WAAWtS,QACtBq0L,EAAQ9rL,YAAY6rL,EAAM9hL,WAAW,IAWvC,OAPA3Q,KAAK6mJ,UAAY,GAIjB9E,IAAAA,QAAiB3iJ,UAAUwH,YAAY/H,KAAKmB,KAAM0yL,GAG3C1yL,KAAKwtF,SACd,IAOImlG,GAAgBA,CAACj6F,EAAU7kC,KAC/B,IAAI++H,EAAa,CAAC,EAClB,IAAK,IAAI70L,EAAI,EAAGA,EAAI26F,EAASr6F,SAC3Bu0L,EAAazzL,OAAO+rF,yBAAyBwN,EAAS36F,GAAI81D,KACtD++H,GAAcA,EAAWjyL,KAAOiyL,EAAW9xL,MAFZ/C,KAQrC,OAFA60L,EAAWxnG,YAAa,EACxBwnG,EAAWznG,cAAe,EACnBynG,CAAU,EAsBbC,GAAmB,SAAU32B,GACjC,MAAMxzJ,EAAKwzJ,EAAKxzJ,KAGhB,GAAIA,EAAGoqL,kBACL,OAEF,MAAM36K,EAAM,CAAC,EACP46K,EA5BuB72B,IAAQy2B,GAAc,CAACz2B,EAAKxzJ,KAAMq5I,IAAAA,iBAA0B3iJ,UAAW2iJ,IAAAA,QAAiB3iJ,UAAWozL,IAA8B,aA4BtIQ,CAAuB92B,GACzC+2B,EAAgBC,GAAY,WAAa,QAAAC,EAAAlpL,UAAA5L,OAAT+8H,EAAI,IAAAniI,MAAAk6L,GAAAC,EAAA,EAAAA,EAAAD,EAAAC,IAAJh4D,EAAIg4D,GAAAnpL,UAAAmpL,GACxC,MAAMC,EAASH,EAASp7L,MAAM4Q,EAAI0yH,GAElC,OADAk3D,GAAcp2B,GACPm3B,CACT,EACA,CAAC,SAAU,cAAe,sBAAsB16L,SAAQ0nF,IACjD33E,EAAG23E,KAKRloE,EAAIkoE,GAAK33E,EAAG23E,GAIZ33E,EAAG23E,GAAK4yG,EAAc96K,EAAIkoE,IAAG,IAE/BlhF,OAAOka,eAAe3Q,EAAI,YAAa86I,GAAQuvC,EAAiB,CAC9DpyL,IAAKsyL,EAAcF,EAAgBpyL,QAErC+H,EAAGoqL,kBAAoB,KACrBpqL,EAAGoqL,kBAAoB,KACvB3zL,OAAO0M,KAAKsM,GAAKxf,SAAQ0nF,IACvB33E,EAAG23E,GAAKloE,EAAIkoE,EAAE,IAEhBlhF,OAAOka,eAAe3Q,EAAI,YAAaqqL,EAAgB,EAIzD72B,EAAK/O,IAAI,YAAazkJ,EAAGoqL,kBAC3B,EAMMQ,GAAwBn0L,OAAOka,eAAe,CAAC,EAAG,MAAO,CAC7DvY,GAAAA,GACE,OAAId,KAAK2X,aAAa,OACbkqJ,GAAe9f,IAAAA,QAAiB3iJ,UAAUwX,aAAa/X,KAAKmB,KAAM,QAEpE,EACT,EACAW,GAAAA,CAAIqU,GAEF,OADA+sI,IAAAA,QAAiB3iJ,UAAUyY,aAAahZ,KAAKmB,KAAM,MAAOgV,GACnDA,CACT,IAmBIu+K,GAAiB,SAAUr3B,GAC/B,IAAKA,EAAKuP,kBACR,OAEF,MAAM/iK,EAAKwzJ,EAAKxzJ,KAGhB,GAAIA,EAAG8qL,gBACL,OAEF,MAAMC,EA3BiBv3B,IAAQy2B,GAAc,CAACz2B,EAAKxzJ,KAAMq5I,IAAAA,iBAA0B3iJ,UAAWk0L,IAAwB,OA2BhGI,CAAiBx3B,GACjCy3B,EAAkBjrL,EAAGmP,aACrB+7K,EAAUlrL,EAAGm8J,KACnB1lK,OAAOka,eAAe3Q,EAAI,MAAO86I,GAAQiwC,EAAe,CACtD9yL,IAAKqU,IACH,MAAMq+K,EAASI,EAAc9yL,IAAI9B,KAAK6J,EAAIsM,GAI1C,OADAknJ,EAAKyL,iBAAiBj/J,EAAGqD,KAClBsnL,CAAM,KAGjB3qL,EAAGmP,aAAe,CAAC3Y,EAAG8V,KACpB,MAAMq+K,EAASM,EAAgB90L,KAAK6J,EAAIxJ,EAAG8V,GAI3C,MAHI,OAAOvV,KAAKP,IACdg9J,EAAKyL,iBAAiBj/J,EAAGqD,KAEpBsnL,CAAM,EAEf3qL,EAAGm8J,KAAO,KACR,MAAMwuB,EAASO,EAAQ/0L,KAAK6J,GAU5B,OAJK4pL,GAAcp2B,KACjBA,EAAKyL,iBAAiB,IACtBkrB,GAAiB32B,IAEZm3B,CAAM,EAEX3qL,EAAGmrL,WACL33B,EAAKyL,iBAAiBj/J,EAAGmrL,YACfvB,GAAcp2B,IACxB22B,GAAiB32B,GAEnBxzJ,EAAG8qL,gBAAkB,KACnB9qL,EAAG8qL,gBAAkB,KACrB9qL,EAAGm8J,KAAO+uB,EACVlrL,EAAGmP,aAAe87K,EAClBx0L,OAAOka,eAAe3Q,EAAI,MAAO+qL,GAC7B/qL,EAAGoqL,mBACLpqL,EAAGoqL,mBACL,CAEJ,EAYA,MAAMgB,WAAc9+B,GAUlB11J,WAAAA,CAAYhG,EAAS+3J,GACnBt1B,MAAMziI,EAAS+3J,GACf,MAAM7sJ,EAASlL,EAAQkL,OACvB,IAAIuvL,GAAoB,EAkBxB,GAjBA/zL,KAAK0rK,2BAA6B1rK,KAAK0rK,4BAAmD,UAArB1rK,KAAKswJ,IAAIhnJ,QAM1E9E,IAAWxE,KAAKswJ,IAAIujC,aAAervL,EAAOuH,KAAOzS,EAAQgxF,KAAyC,IAAlChxF,EAAQgxF,IAAI0pG,mBAC9Eh0L,KAAKqsK,UAAU7nK,GAEfxE,KAAKi0L,gBAAgBj0L,KAAKswJ,KAIxBh3J,EAAQ46L,iBACVl0L,KAAKm0L,0BAEPn0L,KAAKo0L,cAAe,EAChBp0L,KAAKswJ,IAAIr6I,gBAAiB,CAC5B,MAAMo+K,EAAQr0L,KAAKswJ,IAAI3/I,WACvB,IAAI2jL,EAAcD,EAAMh2L,OACxB,MAAMk2L,EAAc,GACpB,KAAOD,KAAe,CACpB,MAAMzuL,EAAOwuL,EAAMC,GAEF,UADAzuL,EAAKhL,SAAS7D,gBAExBgJ,KAAKsnK,0BAQRtnK,KAAKiqK,qBAAqBnE,iBAAiBjgK,GAC3C7F,KAAKupK,mBAAmBlK,SAASx5J,EAAK4rF,OACtCzxF,KAAKs8J,aAAa+C,SAASx5J,EAAK4rF,OAC3BsiG,GAAsB/zL,KAAKswJ,IAAI34I,aAAa,iBAAkBoqJ,GAAcl8J,EAAKkG,OACpFgoL,GAAoB,IAPtBQ,EAAYp7L,KAAK0M,GAWvB,CACA,IAAK,IAAI9H,EAAI,EAAGA,EAAIw2L,EAAYl2L,OAAQN,IACtCiC,KAAKswJ,IAAIj+I,YAAYkiL,EAAYx2L,GAErC,CACAiC,KAAKw0L,qBACDx0L,KAAKsnK,0BAA4BysB,GACnC3yC,GAAM/1I,KAAK,0IAIbrL,KAAKy0L,2CAMArvC,IAAiBJ,MAAiD,IAAnC1rJ,EAAQouK,wBAC1C1nK,KAAK00L,aAAY,GAKnB10L,KAAK20L,yBACL30L,KAAKq1J,cACP,CAKA95B,OAAAA,GACMv7H,KAAKswJ,KAAOtwJ,KAAKswJ,IAAIkjC,iBACvBxzL,KAAKswJ,IAAIkjC,kBAEXM,GAAMc,oBAAoB50L,KAAKswJ,KAC/BtwJ,KAAK0xJ,SAAW,KAGhB31B,MAAMR,SACR,CAMA44D,uBAAAA,GACEZ,GAAevzL,KACjB,CAUAy0L,uCAAAA,GACE,MAAMn4B,EAAat8J,KAAKs8J,aACxB,IAAIu4B,EAGJ,MAAMC,EAA4BA,KAChCD,EAAmC,GACnC,IAAK,IAAI92L,EAAI,EAAGA,EAAIu+J,EAAWj+J,OAAQN,IAAK,CAC1C,MAAM0zF,EAAQ6qE,EAAWv+J,GACN,aAAf0zF,EAAM2uE,MACRy0B,EAAiC17L,KAAK,CACpCs4F,QACAsjG,WAAYtjG,EAAM6c,MAGxB,GAKFwmF,IACAx4B,EAAWppE,iBAAiB,SAAU4hG,GACtC90L,KAAKg7H,GAAG,WAAW,IAAMshC,EAAWnpE,oBAAoB,SAAU2hG,KAClE,MAAME,EAAmBA,KACvB,IAAK,IAAIj3L,EAAI,EAAGA,EAAI82L,EAAiCx2L,OAAQN,IAAK,CAChE,MAAMk3L,EAAcJ,EAAiC92L,GACtB,aAA3Bk3L,EAAYxjG,MAAM6c,MAAuB2mF,EAAYxjG,MAAM6c,OAAS2mF,EAAYF,aAClFE,EAAYxjG,MAAM6c,KAAO2mF,EAAYF,WAEzC,CAEAz4B,EAAWnpE,oBAAoB,SAAU6hG,EAAiB,EAK5Dh1L,KAAKg7H,GAAG,yBAAyB,KAC/BshC,EAAWnpE,oBAAoB,SAAU2hG,GAGzCx4B,EAAWnpE,oBAAoB,SAAU6hG,GACzC14B,EAAWppE,iBAAiB,SAAU8hG,EAAiB,IAIzDh1L,KAAKg7H,GAAG,uBAAuB,KAE7BshC,EAAWnpE,oBAAoB,SAAU2hG,GACzCx4B,EAAWppE,iBAAiB,SAAU4hG,GAGtCx4B,EAAWnpE,oBAAoB,SAAU6hG,EAAiB,GAE9D,CAWAE,eAAAA,CAAgB79L,EAAMszK,GAEpB,GAAIA,IAAa3qK,KAAK,iBAAiB3I,WACrC,OAEF,MAAM89L,EAAgB99L,EAAKL,cACvBgJ,KAAK,GAAGm1L,sBACVh2L,OAAO0M,KAAK7L,KAAK,GAAGm1L,sBAAkCx8L,SAAQy8L,IAC3Cp1L,KAAK0I,KAAK,GAAGysL,WACrBhiG,oBAAoBiiG,EAAWp1L,KAAK,GAAGm1L,qBAAiCC,GAAW,IAGhGp1L,KAAK,iBAAiB3I,YAAiBszK,EACvC3qK,KAAK,GAAGm1L,qBAAmC,KAC3Cn1L,KAAKq1L,0BAA0BF,EACjC,CAQAzqB,yBAAAA,CAA0BC,GACxB3qK,KAAKk1L,gBAAgB,QAASvqB,EAChC,CAQAC,yBAAAA,CAA0BD,GACxB3qK,KAAKk1L,gBAAgB,QAASvqB,EAChC,CASA0qB,yBAAAA,CAA0B91L,GACxB,MAAMwlF,EAAQigF,GAAOzlK,GACf+1L,EAAWt1L,KAAK0I,KAAKq8E,EAAMwgF,YAC3BgwB,EAAav1L,KAAK+kF,EAAMwgF,cAC9B,IAAKvlK,KAAK,iBAAiB+kF,EAAMsgF,uBAAyBiwB,IAAaA,EAASpiG,iBAC9E,OAEF,MAAMsP,EAAY,CAChBk9D,OAAQ/nK,IACN,MAAM4qG,EAAQ,CACZlrG,KAAM,SACNkN,OAAQgxL,EACR56F,cAAe46F,EACfvjG,WAAYujG,GAEdA,EAAWr6D,QAAQ34B,GASN,SAAThjG,GACFS,KAAKylK,GAAOC,WAAWH,cAAcrqC,QAAQ34B,EAC/C,EAEFo9D,QAAAA,CAAShoK,GACP49L,EAAWl2B,SAAS1nK,EAAE85F,MACxB,EACAmuE,WAAAA,CAAYjoK,GACV49L,EAAWh2B,YAAY5nK,EAAE85F,MAC3B,GAEI+jG,EAAkB,WACtB,MAAMC,EAAe,GACrB,IAAK,IAAI13L,EAAI,EAAGA,EAAIw3L,EAAWl3L,OAAQN,IAAK,CAC1C,IAAI23L,GAAQ,EACZ,IAAK,IAAI/qE,EAAI,EAAGA,EAAI2qE,EAASj3L,OAAQssH,IACnC,GAAI2qE,EAAS3qE,KAAO4qE,EAAWx3L,GAAI,CACjC23L,GAAQ,EACR,KACF,CAEGA,GACHD,EAAat8L,KAAKo8L,EAAWx3L,GAEjC,CACA,KAAO03L,EAAap3L,QAClBk3L,EAAWh2B,YAAYk2B,EAAaz8F,QAExC,EACAh5F,KAAK+kF,EAAMwgF,WAAa,cAAgB/iE,EACxCrjG,OAAO0M,KAAK22F,GAAW7pG,SAAQy8L,IAC7B,MAAMttF,EAAWtF,EAAU4yF,GAC3BE,EAASpiG,iBAAiBkiG,EAAWttF,GACrC9nG,KAAKg7H,GAAG,WAAWrjI,GAAK29L,EAASniG,oBAAoBiiG,EAAWttF,IAAU,IAI5E9nG,KAAKg7H,GAAG,YAAaw6D,GACrBx1L,KAAKg7H,GAAG,WAAWrjI,GAAKqI,KAAKi7H,IAAI,YAAau6D,IAChD,CAQAhB,kBAAAA,GACExvB,GAAOxR,MAAM76J,SAAQ4G,IACnBS,KAAKq1L,0BAA0B91L,EAAK,GAExC,CAQAknJ,QAAAA,GACE,IAAI/9I,EAAK1I,KAAK0xJ,SAASpnE,IAMvB,IAAK5hF,IAAQ1I,KAAK0xJ,SAASikC,iBAAkB31L,KAAK41L,wBAA0B,CAE1E,GAAIltL,EAAI,CACN,MAAMmtL,EAAQntL,EAAGqM,WAAU,GACvBrM,EAAGa,YACLb,EAAGa,WAAWsM,aAAaggL,EAAOntL,GAEpCorL,GAAMc,oBAAoBlsL,GAC1BA,EAAKmtL,CACP,KAAO,CACLntL,EAAKw4I,IAAAA,cAAyB,SAG9B,MACM/sI,EAAaqvI,GAAQ,CAAC,EADNxjJ,KAAK0xJ,SAASpnE,KAAO09D,GAAchoJ,KAAK0xJ,SAASpnE,MAElE86D,KAA0D,IAAzCplJ,KAAK0xJ,SAASgW,+BAC3BvzJ,EAAW2pJ,SAEpBhW,GAAcp/I,EAAIvJ,OAAOmF,OAAO6P,EAAY,CAC1CuC,GAAI1W,KAAK0xJ,SAASokC,OAClBlxD,MAAO,aAEX,CACAl8H,EAAGqtL,SAAW/1L,KAAK0xJ,SAASqkC,QAC9B,CACqC,qBAA1B/1L,KAAK0xJ,SAASskC,SACvBn+K,GAAanP,EAAI,UAAW1I,KAAK0xJ,SAASskC,cAEE17L,IAA1C0F,KAAK0xJ,SAAS2Y,0BAChB3hK,EAAG2hK,wBAA0BrqK,KAAK0xJ,SAAS2Y,yBAM7C,MAAM4rB,EAAgB,CAAC,OAAQ,QAAS,cAAe,YACvD,IAAK,IAAIl4L,EAAI,EAAGA,EAAIk4L,EAAc53L,OAAQN,IAAK,CAC7C,MAAM+K,EAAOmtL,EAAcl4L,GACrBzG,EAAQ0I,KAAK0xJ,SAAS5oJ,GACP,qBAAVxR,IACLA,EACFugB,GAAanP,EAAII,EAAMA,GAEvBgP,GAAgBpP,EAAII,GAEtBJ,EAAGI,GAAQxR,EAEf,CACA,OAAOoR,CACT,CAeAurL,eAAAA,CAAgBvrL,GACd,GAAwB,IAApBA,EAAGwtL,cAA0C,IAApBxtL,EAAGwtL,aAG9B,OAEF,GAAsB,IAAlBxtL,EAAG1L,WAAkB,CAWvB,IAAIm5L,GAAiB,EACrB,MAAMC,EAAoB,WACxBD,GAAiB,CACnB,EACAn2L,KAAKg7H,GAAG,YAAao7D,GACrB,MAAMC,EAAmB,WAGlBF,GACHn2L,KAAKk7H,QAAQ,YAEjB,EAUA,OATAl7H,KAAKg7H,GAAG,iBAAkBq7D,QAC1Br2L,KAAKqxJ,OAAM,WACTrxJ,KAAKi7H,IAAI,YAAam7D,GACtBp2L,KAAKi7H,IAAI,iBAAkBo7D,GACtBF,GAEHn2L,KAAKk7H,QAAQ,YAEjB,GAEF,CAMA,MAAMo7D,EAAkB,CAAC,aAGzBA,EAAgBn9L,KAAK,kBAGjBuP,EAAG1L,YAAc,GACnBs5L,EAAgBn9L,KAAK,cAInBuP,EAAG1L,YAAc,GACnBs5L,EAAgBn9L,KAAK,WAInBuP,EAAG1L,YAAc,GACnBs5L,EAAgBn9L,KAAK,kBAIvB6G,KAAKqxJ,OAAM,WACTilC,EAAgB39L,SAAQ,SAAUtB,GAChC2I,KAAKk7H,QAAQ7jI,EACf,GAAG2I,KACL,GACF,CAWA6oK,YAAAA,CAAa0tB,GACXv2L,KAAKo0L,aAAemC,CACtB,CASAxtB,SAAAA,GACE,OAAO/oK,KAAKo0L,YACd,CAQAprB,cAAAA,CAAellF,GACb,IACM9jF,KAAKo0L,cAAgBp0L,KAAKswJ,IAAIkmC,UAAYvwC,GAC5CjmJ,KAAKswJ,IAAIkmC,SAAS1yG,GAElB9jF,KAAKswJ,IAAI2T,YAAcngF,CAE3B,CAAE,MAAOnsF,GACPypJ,GAAMzpJ,EAAG,iCAEX,CACF,CAQAolI,QAAAA,GAKE,GAAI/8H,KAAKswJ,IAAIvzB,WAAala,KAAYqhC,IAAcI,IAAsC,IAAzBtkJ,KAAKswJ,IAAI2T,YAAmB,CAG3F,MAAMwyB,EAAgBA,KAChBz2L,KAAKswJ,IAAI2T,YAAc,IAErBjkK,KAAKswJ,IAAIvzB,WAAala,KACxB7iH,KAAKk7H,QAAQ,kBAEfl7H,KAAKi7H,IAAI,aAAcw7D,GACzB,EAGF,OADAz2L,KAAKg7H,GAAG,aAAcy7D,GACfjsE,GACT,CACA,OAAOxqH,KAAKswJ,IAAIvzB,UAAYvS,GAC9B,CAQA5qB,KAAAA,GACE,OAAO5/F,KAAKswJ,IAAI9H,WAClB,CAQA3oD,MAAAA,GACE,OAAO7/F,KAAKswJ,IAAI/hC,YAClB,CAYAomE,sBAAAA,GACE,KAAM,+BAAgC30L,KAAKswJ,KACzC,OAEF,MAAMomC,EAAQ,WACZ12L,KAAKk7H,QAAQ,mBAAoB,CAC/B8mD,cAAc,IAGZhiL,KAAKswJ,IAAIwN,WAAa99J,KAAK0xJ,SAASgW,wBAA0B1nK,KAAK89J,aACrE99J,KAAKswJ,IAAIwN,UAAW,EAExB,EACM64B,EAAU,WACV,2BAA4B32L,KAAKswJ,KAA2C,uBAApCtwJ,KAAKswJ,IAAIsmC,yBACnD52L,KAAKmtJ,IAAI,sBAAuBupC,GAChC12L,KAAKk7H,QAAQ,mBAAoB,CAC/B8mD,cAAc,EAEd6U,qBAAqB,IAG3B,EACA72L,KAAKg7H,GAAG,wBAAyB27D,GACjC32L,KAAKg7H,GAAG,WAAW,KACjBh7H,KAAKi7H,IAAI,wBAAyB07D,GAClC32L,KAAKi7H,IAAI,sBAAuBy7D,EAAM,GAE1C,CASAI,kBAAAA,GACE,MAAiD,oBAAnC92L,KAAKswJ,IAAIymC,qBACzB,CAKAC,eAAAA,GACE,MAAM1wD,EAAQtmI,KAAKswJ,IACnB,GAAIhqB,EAAMo3B,QAAUp3B,EAAM4vD,cAAgB5vD,EAAM2wD,cAG9C57B,GAAer7J,KAAKswJ,IAAIgB,QAIxBtxJ,KAAKlE,YAAW,WACdwqI,EAAMs3B,QACN,IACEt3B,EAAMywD,uBACR,CAAE,MAAOp/L,GACPqI,KAAKk7H,QAAQ,kBAAmBvjI,EAClC,CACF,GAAG,QAEH,IACE2uI,EAAMywD,uBACR,CAAE,MAAOp/L,GACPqI,KAAKk7H,QAAQ,kBAAmBvjI,EAClC,CAEJ,CAKAu/L,cAAAA,GACOl3L,KAAKswJ,IAAI6mC,2BAIdn3L,KAAKswJ,IAAI8mC,uBAHPp3L,KAAKk7H,QAAQ,kBAAmB,IAAIzhI,MAAM,+BAI9C,CAYA0wK,uBAAAA,GACE,OAAOnqK,KAAKswJ,IAAI6Z,yBAClB,CAWAxG,yBAAAA,CAA0Br3E,GACxB,OAAItsF,KAAK0rK,6BAA+B1rK,KAAKswJ,IAAI+mC,WACxCr3L,KAAKswJ,IAAIqT,0BAA0Br3E,GAErCyvC,MAAM4nC,0BAA0Br3E,EACzC,CAOA43E,wBAAAA,CAAyBxtJ,GACnB1W,KAAK0rK,6BAA+B1rK,KAAKswJ,IAAI+mC,WAC/Cr3L,KAAKswJ,IAAI4T,yBAAyBxtJ,GAElCqlH,MAAMmoC,yBAAyBxtJ,EAEnC,CAeA3K,GAAAA,CAAIA,GACF,QAAYzR,IAARyR,EACF,OAAO/L,KAAKswJ,IAAIvkJ,IAIlB/L,KAAKk1K,OAAOnpK,EACd,CAMAxL,KAAAA,GACEuzL,GAAMwD,kBAAkBt3L,KAAKswJ,IAC/B,CAUAujC,UAAAA,GACE,OAAI7zL,KAAKusK,eACAvsK,KAAKusK,eAAexgK,IAEtB/L,KAAKswJ,IAAIujC,UAClB,CAQAa,WAAAA,CAAYnvD,GACVvlI,KAAKswJ,IAAIwN,WAAav4B,CACxB,CAiBAqkC,YAAAA,CAAaxJ,EAAMtyB,EAAOtL,GACxB,OAAKxiI,KAAKsnK,yBAGHtnK,KAAKswJ,IAAIsZ,aAAaxJ,EAAMtyB,EAAOtL,GAFjCzG,MAAM6tC,aAAaxJ,EAAMtyB,EAAOtL,EAG3C,CA8BAsnC,qBAAAA,CAAsBxwK,GACpB,IAAK0G,KAAKsnK,yBACR,OAAOvrC,MAAM+tC,sBAAsBxwK,GAErC,MAAM0wK,EAAmB9oB,IAAAA,cAAyB,SAmBlD,OAlBI5nJ,EAAQ8mK,OACV4J,EAAiB5J,KAAO9mK,EAAQ8mK,MAE9B9mK,EAAQw0I,QACVk8B,EAAiBl8B,MAAQx0I,EAAQw0I,QAE/Bx0I,EAAQkpI,UAAYlpI,EAAQ4pK,WAC9B8G,EAAiB9G,QAAU5pK,EAAQkpI,UAAYlpI,EAAQ4pK,SAErD5pK,EAAQixH,UACVy/C,EAAiBz/C,QAAUjxH,EAAQixH,SAEjCjxH,EAAQod,KACVszJ,EAAiBtzJ,GAAKpd,EAAQod,IAE5Bpd,EAAQyS,MACVi+J,EAAiBj+J,IAAMzS,EAAQyS,KAE1Bi+J,CACT,CAcAxN,kBAAAA,CAAmBljK,EAASywK,GAC1B,MAAMC,EAAmBjuC,MAAMygC,mBAAmBljK,EAASywK,GAI3D,OAHI/pK,KAAKsnK,0BACPtnK,KAAK0I,KAAK9B,YAAYojK,GAEjBA,CACT,CAQAxB,qBAAAA,CAAsB/2E,GAEpB,GADAsqC,MAAMysC,sBAAsB/2E,GACxBzxF,KAAKsnK,yBAA0B,CACjC,MAAMnI,EAASn/J,KAAK+pJ,GAAG,SACvB,IAAIhsJ,EAAIohK,EAAO9gK,OACf,KAAON,KACD0zF,IAAU0tE,EAAOphK,IAAM0zF,IAAU0tE,EAAOphK,GAAG0zF,OAC7CzxF,KAAK0I,KAAK2J,YAAY8sJ,EAAOphK,GAGnC,CACF,CAWAmsK,uBAAAA,GACE,GAAiD,oBAAtClqK,KAAK0I,KAAKwhK,wBACnB,OAAOlqK,KAAK0I,KAAKwhK,0BAEnB,MAAMqtB,EAAuB,CAAC,EAQ9B,MAPiD,qBAAtCv3L,KAAK0I,KAAK8uL,yBAAwF,qBAAtCx3L,KAAK0I,KAAK+uL,0BAC/EF,EAAqBG,mBAAqB13L,KAAK0I,KAAK8uL,wBACpDD,EAAqBI,iBAAmB33L,KAAK0I,KAAK+uL,yBAEhD11C,IAAAA,cACFw1C,EAAqBK,aAAe71C,IAAAA,YAAqBlmD,OAEpD07F,CACT,EAYF3zC,GAAmBkwC,GAAO,YAAY,WACpC,IAAKzuC,KACH,OAEF,MAAM/e,EAAQ4a,IAAAA,cAAyB,SACjCzvD,EAAQyvD,IAAAA,cAAyB,SAKvC,OAJAzvD,EAAM2uE,KAAO,WACb3uE,EAAMyxE,QAAU,KAChBzxE,EAAMq8C,MAAQ,UACdxH,EAAM1/H,YAAY6qF,GACX60C,CACT,IASAwtD,GAAM39K,YAAc,WAElB,IACE29K,GAAM+D,SAASnqB,OAAS,EAC1B,CAAE,MAAO/1K,GACP,OAAO,CACT,CACA,SAAUm8L,GAAM+D,WAAY/D,GAAM+D,SAAShtB,YAC7C,EASAipB,GAAMjpB,YAAc,SAAUxzK,GAC5B,OAAOy8L,GAAM+D,SAAShtB,YAAYxzK,EACpC,EAWAy8L,GAAM/oB,cAAgB,SAAUC,EAAQ1xK,GACtC,OAAOw6L,GAAMjpB,YAAYG,EAAO3zK,KAClC,EAWAy8L,GAAMgE,iBAAmB,WAEvB,IACE,MAAMpqB,EAASomB,GAAM+D,SAASnqB,OAC9BomB,GAAM+D,SAASnqB,OAASA,EAAS,EAAI,GACrC,MAAMqqB,EAAarqB,IAAWomB,GAAM+D,SAASnqB,OAO7C,OAAIqqB,GAAc/xC,IAChBjE,IAAAA,YAAoB,KACd+xC,IAASA,GAAM10L,YACjB00L,GAAM10L,UAAUisK,sBAAwBqC,IAAWomB,GAAM+D,SAASnqB,OACpE,KAIK,GAEFqqB,CACT,CAAE,MAAOpgM,GACP,OAAO,CACT,CACF,EAWAm8L,GAAMkE,cAAgB,WACpB,IACE,MAAMxqB,EAAQsmB,GAAM+D,SAASrqB,MAU7B,OANAsmB,GAAM+D,SAASrqB,OAASA,EACpBsmB,GAAM+D,SAASrqB,MACjB31J,GAAai8K,GAAM+D,SAAU,QAAS,SAEtC//K,GAAgBg8K,GAAM+D,SAAU,SAE3BrqB,IAAUsmB,GAAM+D,SAASrqB,KAClC,CAAE,MAAO71K,GACP,OAAO,CACT,CACF,EASAm8L,GAAMmE,uBAAyB,WAG7B,GAAI/zC,IAAcI,IAAaE,GAAiB,GAC9C,OAAO,EAGT,IACE,MAAMqmC,EAAeiJ,GAAM+D,SAAShN,aAEpC,OADAiJ,GAAM+D,SAAShN,aAAeA,EAAe,EAAI,GAC1CA,IAAiBiJ,GAAM+D,SAAShN,YACzC,CAAE,MAAOlzL,GACP,OAAO,CACT,CACF,EAUAm8L,GAAMoE,sBAAwB,WAG5B,IACE,MAAMt4D,EAAOA,OACbzgI,OAAOka,eAAe6nI,IAAAA,cAAyB,SAAU,MAAO,CAC9DpgJ,IAAK8+H,EACLj/H,IAAKi/H,IAEPzgI,OAAOka,eAAe6nI,IAAAA,cAAyB,SAAU,MAAO,CAC9DpgJ,IAAK8+H,EACLj/H,IAAKi/H,IAEPzgI,OAAOka,eAAe6nI,IAAAA,cAAyB,SAAU,YAAa,CACpEpgJ,IAAK8+H,EACLj/H,IAAKi/H,IAEPzgI,OAAOka,eAAe6nI,IAAAA,cAAyB,SAAU,YAAa,CACpEpgJ,IAAK8+H,EACLj/H,IAAKi/H,GAET,CAAE,MAAOjoI,GACP,OAAO,CACT,CACA,OAAO,CACT,EASAm8L,GAAMqE,yBAA2B,WAC/B,OAAOlyC,IAAiBD,IAAU1B,EACpC,EASAwvC,GAAMsE,0BAA4B,WAChC,SAAUtE,GAAM+D,WAAY/D,GAAM+D,SAASQ,YAC7C,EASAvE,GAAMwE,0BAA4B,WAChC,SAAUxE,GAAM+D,WAAY/D,GAAM+D,SAASvN,YAC7C,EAQAwJ,GAAMrsE,OAAS,CAAC,YAAa,UAAW,QAAS,QAAS,UAAW,UAAW,iBAAkB,aAAc,UAAW,iBAAkB,UAAW,UAAW,UAAW,SAAU,QAAS,iBAAkB,aAAc,WAAY,OAAQ,QAAS,aAAc,SAAU,gBAiDtR,CAAC,CAAC,sBAAuB,iBAAkB,CAAC,uBAAwB,0BAA2B,CAAC,oBAAqB,yBAA0B,CAAC,2BAA4B,4BAA6B,CAAC,4BAA6B,6BAA8B,CAAC,4BAA6B,8BAA8B9uH,SAAQ,SAAA4lI,GAAqB,IAAVxlI,EAAK6O,GAAG22H,EAC1VqlB,GAAmBkwC,GAAM10L,UAAWrG,GAAK,IAAM+6L,GAAMlsL,OAAO,EAC9D,IACAksL,GAAM10L,UAAUisK,sBAAwByoB,GAAMgE,mBAU9ChE,GAAM10L,UAAUw2L,yBAA2B5vC,GAW3C8tC,GAAM10L,UAAUmsK,0BAA2B,EAS3CuoB,GAAM10L,UAAU4nK,wBAAyB,EAQzC8sB,GAAM10L,UAAU8nK,0BAA2B,EAO3C4sB,GAAM10L,UAAUssK,8BAAgCooB,GAAM+D,WAAY/D,GAAM+D,SAASl0B,2BACjFmwB,GAAMc,oBAAsB,SAAUlsL,GACpC,GAAKA,EAAL,CAQA,IALIA,EAAGa,YACLb,EAAGa,WAAW8I,YAAY3J,GAIrBA,EAAGuN,iBACRvN,EAAG2J,YAAY3J,EAAG0H,YAKpB1H,EAAGoP,gBAAgB,OAII,oBAAZpP,EAAGm8J,MAEZ,WACE,IACEn8J,EAAGm8J,MACL,CAAE,MAAOltK,GACP,CAEH,CAND,EAlBF,CA0BF,EACAm8L,GAAMwD,kBAAoB,SAAU5uL,GAClC,IAAKA,EACH,OAEF,MAAMg7I,EAAUh7I,EAAG2+G,iBAAiB,UACpC,IAAItpH,EAAI2lJ,EAAQrlJ,OAChB,KAAON,KACL2K,EAAG2J,YAAYqxI,EAAQ3lJ,IAKzB2K,EAAGoP,gBAAgB,OACI,oBAAZpP,EAAGm8J,MAEZ,WACE,IACEn8J,EAAGm8J,MACL,CAAE,MAAOltK,GACP,CAEH,CAND,EAQJ,EAMA,CAaA,QAeA,eAaA,WAaA,WAgBA,OAcA,eAAegB,SAAQ,SAAUk7D,GAC/BigI,GAAM10L,UAAUy0D,GAAQ,WACtB,OAAO7zD,KAAKswJ,IAAIz8F,IAAS7zD,KAAKswJ,IAAI34I,aAAak8C,EACjD,CACF,IAMA,CAYA,QAYA,eAYA,WAeA,OAaA,eAAel7D,SAAQ,SAAUk7D,GAC/BigI,GAAM10L,UAAU,MAAQ0xJ,GAAcj9F,IAAS,SAAU7+C,GACvDhV,KAAKswJ,IAAIz8F,GAAQ7+C,EACbA,EACFhV,KAAKswJ,IAAIz4I,aAAag8C,EAAMA,GAE5B7zD,KAAKswJ,IAAIx4I,gBAAgB+7C,EAE7B,CACF,IAOA,CAWA,SAWA,cAYA,WAYA,SAYA,SAkBA,UAaA,QAaA,UAYA,WAaA,QAcA,eAiBA,sBAYA,0BAYA,SAgBA,eAkBA,aAYA,aAYA,cAaA,eAAel7D,SAAQ,SAAUk7D,GAC/BigI,GAAM10L,UAAUy0D,GAAQ,WACtB,OAAO7zD,KAAKswJ,IAAIz8F,EAClB,CACF,IAOA,CAYA,SAWA,MAYA,SAkBA,UAcA,eAiBA,sBAWA,0BAaA,eAAel7D,SAAQ,SAAUk7D,GAC/BigI,GAAM10L,UAAU,MAAQ0xJ,GAAcj9F,IAAS,SAAU7+C,GACvDhV,KAAKswJ,IAAIz8F,GAAQ7+C,CACnB,CACF,IAKA,CAQA,QAQA,OAQA,QAAQrc,SAAQ,SAAUk7D,GACxBigI,GAAM10L,UAAUy0D,GAAQ,WACtB,OAAO7zD,KAAKswJ,IAAIz8F,IAClB,CACF,IACAmhG,GAAK2W,mBAAmBmoB,IAWxBA,GAAMxnB,oBAAsB,CAAC,EAW7BwnB,GAAMxnB,oBAAoBzB,YAAc,SAAUxzK,GAEhD,IACE,OAAOy8L,GAAM+D,SAAShtB,YAAYxzK,EACpC,CAAE,MAAOM,GACP,MAAO,EACT,CACF,EAcAm8L,GAAMxnB,oBAAoBJ,gBAAkB,SAAU1nK,EAAQlL,GAE5D,GAAIkL,EAAOnN,KACT,OAAOy8L,GAAMxnB,oBAAoBzB,YAAYrmK,EAAOnN,MAG/C,GAAImN,EAAOuH,IAAK,CACrB,MAAMujK,EAAMxN,GAAiBt9J,EAAOuH,KACpC,OAAO+nL,GAAMxnB,oBAAoBzB,YAAY,SAASyE,IACxD,CACA,MAAO,EACT,EAcAwkB,GAAMxnB,oBAAoBE,aAAe,SAAUhoK,EAAQ03J,EAAM5iK,GAC/D4iK,EAAKgZ,OAAO1wK,EAAOuH,IACrB,EAKA+nL,GAAMxnB,oBAAoB/wC,QAAU,WAAa,EAGjDu4D,GAAMjoB,sBAAsBioB,GAAMxnB,qBAClCtX,GAAKiW,aAAa,QAAS6oB,IAiB3B,MAAMyE,GAAwB,CAe9B,WAeA,QAeA,UAeA,UAeA,UAeA,iBAeA,aAeA,aAeA,SAeA,eAeA,mBAKMC,GAAoB,CACxBC,QAAS,UACTC,eAAgB,iBAChBC,QAAS,UACTC,OAAQ,UAEJC,GAAmB,CAAC,OAAQ,SAAU,QAAS,SAAU,QAAS,SAAU,QAC5EC,GAAqB,CAAC,EAS5BD,GAAiBlgM,SAAQ0nF,IACvB,MAAMrrE,EAAoB,MAAhBqrE,EAAE5B,OAAO,GAAa,KAAK4B,EAAExnE,UAAU,KAAOwnE,EACxDy4G,GAAmBz4G,GAAK,cAAcrrE,GAAG,IAE3C,MAAM+jL,GAAsB,CAC1BC,KAAM,IACNC,OAAQ,IACRC,MAAO,IACPC,OAAQ,IACRC,MAAO,KACPC,OAAQ,KACRC,KAAMz2E,KAeR,MAAM62C,WAAetI,GAanB9xJ,WAAAA,CAAYgrF,EAAKhxF,EAAS+3J,GA2BxB,GAxBA/mE,EAAI5zE,GAAK4zE,EAAI5zE,IAAMpd,EAAQod,IAAM,aAAam1I,QAO9CvyJ,EAAU6F,OAAOmF,OAAOo1J,GAAO6/B,eAAejvG,GAAMhxF,IAI5C+4J,cAAe,EAGvB/4J,EAAQmtJ,UAAW,EAGnBntJ,EAAQ62J,SAAU,EAIlB72J,EAAQg5J,qBAAsB,GAGzBh5J,EAAQkpI,SAAU,CACrB,MAAMqvC,EAAUvnF,EAAIunF,QAAQ,UACxBA,IACFv4K,EAAQkpI,SAAWqvC,EAAQj7J,aAAa,QAE5C,CA8DA,GA3DAmlH,MAAM,KAAMziI,EAAS+3J,GAGrBrxJ,KAAKw5L,+BAAiC7hM,GAAKqI,KAAKy5L,0BAA0B9hM,GAC1EqI,KAAK05L,yBAA2B/hM,GAAKqI,KAAK25L,mBAAmBhiM,GAC7DqI,KAAK45L,oBAAsBjiM,GAAKqI,KAAK65L,eAAeliM,GACpDqI,KAAK85L,oBAAsBniM,GAAKqI,KAAK+5L,eAAepiM,GACpDqI,KAAKg6L,8BAAgCriM,GAAKqI,KAAKi6L,yBAAyBtiM,GACxEqI,KAAKk6L,sBAAwBviM,GAAKqI,KAAKm6L,iBAAiBxiM,GACxDqI,KAAKo6L,4BAA8BziM,GAAKqI,KAAKq6L,uBAAuB1iM,GACpEqI,KAAKs6L,2BAA6B3iM,GAAKqI,KAAKu6L,sBAAsB5iM,GAClEqI,KAAKw6L,0BAA4B7iM,GAAKqI,KAAKy6L,qBAAqB9iM,GAChEqI,KAAK06L,yBAA2B/iM,GAAKqI,KAAK26L,oBAAoBhjM,GAC9DqI,KAAK46L,oBAAsBjjM,GAAKqI,KAAK66L,eAAeljM,GACpDqI,KAAK86L,wCAA0CnjM,GAAKqI,KAAK+6L,mCAAmCpjM,GAG5FqI,KAAKg7L,eAAgB,EAGrBh7L,KAAKg2F,IAAMisD,GAAajiJ,KAAK2xJ,KAG7B3xJ,KAAK8hL,OAASjhC,GAGd7gJ,KAAKi7L,mBAAoB,EAIzBj7L,KAAKk7L,iBAAmB,GAGxBl7L,KAAKo1J,UAAW,EAGhBp1J,KAAK+mK,aAAc,EAGnB/mK,KAAKm7L,aAAc,EAGnBn7L,KAAKo7L,eAAgB,EAGrBp7L,KAAKq7L,gBAAiB,EAGtBr7L,KAAKs7L,kBAAmB,EAGxBt7L,KAAKu7L,gBAAkB,CACrBzjB,iBAAkB,KAClBE,aAAc,KACdwjB,eAAgB,KAKbx7L,KAAK0xJ,WAAa1xJ,KAAK0xJ,SAASiiB,YAAc3zK,KAAK0xJ,SAASiiB,UAAUt1K,OACzE,MAAM,IAAI5E,MAAM,2HAalB,GATAuG,KAAKsqF,IAAMA,EAGXtqF,KAAKy7L,cAAgBnxG,GAAO09D,GAAc19D,GAG1CtqF,KAAKwiI,SAASxiI,KAAK0xJ,SAASlvB,UAGxBlpI,EAAQu5J,UAAW,CAErB,MAAM6oC,EAAmB,CAAC,EAC1Bv8L,OAAOwnJ,oBAAoBrtJ,EAAQu5J,WAAWl6J,SAAQ,SAAU4G,GAC9Dm8L,EAAiBn8L,EAAKvI,eAAiBsC,EAAQu5J,UAAUtzJ,EAC3D,IACAS,KAAK27L,WAAaD,CACpB,MACE17L,KAAK27L,WAAajiC,GAAOt6J,UAAUsyJ,SAASmB,UAE9C7yJ,KAAK47L,cAIL57L,KAAK67L,QAAUviM,EAAQ27K,QAAU,GAIjCj1K,KAAK87L,YAAcxiM,EAAQwkK,SAK3BxzE,EAAIwzE,UAAW,EACfxzE,EAAIxyE,gBAAgB,YACpB9X,KAAK+7L,cAAe,EACpB/7L,KAAKg8L,eAAiB,GACtBh8L,KAAKi8L,qBAAuB,GAGxB3xG,EAAI3yE,aAAa,YACnB3X,KAAKk8L,UAAS,GAIdl8L,KAAKk8L,SAASl8L,KAAK0xJ,SAASwqC,UAI1B5iM,EAAQ6iM,SACVh9L,OAAO0M,KAAKvS,EAAQ6iM,SAASxjM,SAAQ4G,IACnC,GAA0B,oBAAfS,KAAKT,GACd,MAAM,IAAI9F,MAAM,WAAW8F,oBAC7B,IAUJS,KAAKo8L,YAAa,EAClBp8L,KAAKswJ,IAAMtwJ,KAAKymJ,WAGhB0J,GAAQnwJ,KAAM,CACZowJ,YAAa,QAOXpwJ,KAAK8hL,OAAOI,oBACdlnD,GAAGkmB,IAAYlhJ,KAAK8hL,OAAOua,iBAAkBr8L,KAAKw5L,gCAClDx5L,KAAKg7H,GAAGh7H,KAAK8hL,OAAOua,iBAAkBr8L,KAAKw5L,iCAEzCx5L,KAAKs8L,QACPt8L,KAAKg7H,GAAG,CAAC,cAAe,UAAWh7H,KAAK45L,qBAM1C,MAAM2C,EAAoB/4C,GAAQxjJ,KAAK0xJ,UAgBvC,GAbIp4J,EAAQ6iM,SACVh9L,OAAO0M,KAAKvS,EAAQ6iM,SAASxjM,SAAQ4G,IACnCS,KAAKT,GAAMjG,EAAQ6iM,QAAQ58L,GAAM,IAKjCjG,EAAQqpJ,OACV3iJ,KAAK2iJ,OAAM,GAEb3iJ,KAAK0xJ,SAASoD,cAAgBynC,EAC9Bv8L,KAAKw8L,YAAc,GACnBx8L,KAAKqrL,cAAc/xL,EAAQ+xL,eACvB/xL,EAAQu6J,qBAAsB,CAEhC,MACM4oC,GADS,IAAI16C,IAAAA,YACMj7I,gBA9rXnB,o1iBA8rX0C,iBAEhD,GADkB21L,EAAUtoC,cAAc,eAExC/S,GAAM/1I,KAAK,yDACXrL,KAAK0xJ,SAASmC,qBAAuB,SAChC,CACL,MAAM6oC,EAASD,EAAU7hM,gBACzB8hM,EAAO/rG,MAAM+wB,QAAU,OACvB1hH,KAAKswJ,IAAI1pJ,YAAY81L,GACrB18L,KAAKmnJ,SAAS,wBAChB,CACF,CACAnnJ,KAAKqyJ,eAGLryJ,KAAK85K,QAAuC,UAA/BxvF,EAAIzvF,SAAS7D,eAItBgJ,KAAK89J,WACP99J,KAAKmnJ,SAAS,wBAEdnnJ,KAAKmnJ,SAAS,yBAIhBnnJ,KAAKswJ,IAAIz4I,aAAa,OAAQ,UAC1B7X,KAAK85K,UACP95K,KAAKswJ,IAAIz4I,aAAa,aAAc7X,KAAK2yJ,SAAS,iBAElD3yJ,KAAKswJ,IAAIz4I,aAAa,aAAc7X,KAAK2yJ,SAAS,iBAEhD3yJ,KAAK85K,WACP95K,KAAKmnJ,SAAS,aAKZ7tJ,EAAQu9J,mBAAqBv9J,EAAQu9J,kBAAkBC,UACzD92J,KAAK62J,kBAAoB,IAAIuZ,GAAkBpwK,MAC/CA,KAAKmnJ,SAAS,mCAOZ/B,IACFplJ,KAAKmnJ,SAAS,qBAIXnB,IACHhmJ,KAAKmnJ,SAAS,oBAIhBuS,GAAOC,QAAQ35J,KAAK2xJ,KAAO3xJ,KAG3B,MAAM28L,EAAel8C,GAAUxpJ,MAAM,KAAK,GAC1C+I,KAAKmnJ,SAAS,QAAQw1C,KAItB38L,KAAKszK,YAAW,GAChBtzK,KAAKw3J,qBACLx3J,KAAKmtJ,IAAI,QAAQx1J,GAAKqI,KAAK48L,uBAAuBjlM,KAClDqI,KAAKg7H,GAAG,WAAWrjI,GAAKqI,KAAK42J,cAAcj/J,KAC3CqI,KAAKg7H,GAAG,kBAAkBrjI,GAAKqI,KAAK4xJ,qBAAqBj6J,KACzDqI,KAAK68L,YAAY78L,KAAK0xJ,SAASmrC,aAC/B78L,KAAK88L,WAAW98L,KAAK0xJ,SAASorC,YAI9B98L,KAAKg7H,GAAG,SAAS,KAGfh7H,KAAKuhL,gBAAgBvhL,KAAK0xJ,SAAS6vB,iBACnCvhL,KAAKwhL,cAAcxhL,KAAK0xJ,SAAS8vB,cAAc,GAEnD,CAUAjmD,OAAAA,GA5/XF,IAA6B6vB,EAmgYzBprJ,KAAKk7H,QAAQ,WAEbl7H,KAAKi7H,IAAI,WAGTA,GAAIimB,IAAYlhJ,KAAK8hL,OAAOua,iBAAkBr8L,KAAKw5L,gCACnDv+D,GAAIimB,IAAY,UAAWlhJ,KAAK05L,0BAC5B15L,KAAK+8L,UAAY/8L,KAAK+8L,SAASxzL,aACjCvJ,KAAK+8L,SAASxzL,WAAW8I,YAAYrS,KAAK+8L,UAC1C/8L,KAAK+8L,SAAW,MAIlBrjC,GAAOC,QAAQ35J,KAAK2xJ,KAAO,KACvB3xJ,KAAKsqF,KAAOtqF,KAAKsqF,IAAI8gE,SACvBprJ,KAAKsqF,IAAI8gE,OAAS,MAEhBprJ,KAAKswJ,KAAOtwJ,KAAKswJ,IAAIlF,SACvBprJ,KAAKswJ,IAAIlF,OAAS,MAEhBprJ,KAAK6iK,QACP7iK,KAAK6iK,MAAMtnC,UACXv7H,KAAKi7L,mBAAoB,EACzBj7L,KAAK67L,QAAU,IAEb77L,KAAKg9L,kBACPh9L,KAAKg9L,gBAAkB,MAErBh9L,KAAKsqF,MACPtqF,KAAKsqF,IAAM,MAhiYY8gE,EAkiYLprJ,KAjiYlB0sK,GAAoB7uK,eAAeutJ,EAAO10I,cACrCg2J,GAAoBthB,EAAO10I,MAqiYlCyvJ,GAAI3S,MAAM76J,SAAQ4G,IAChB,MACMmF,EAAO1E,KADCmmK,GAAI5mK,GACMgmK,cAIpB7gK,GAAQA,EAAKu2H,KACfv2H,EAAKu2H,KACP,IAIFc,MAAMR,QAAQ,CACZk3B,UAAWzyJ,KAAK0xJ,SAASe,WAE7B,CAQAhM,QAAAA,GACE,IACI/9I,EADA4hF,EAAMtqF,KAAKsqF,IAEXqrG,EAAiB31L,KAAKg9L,gBAAkB1yG,EAAI/gF,YAAc+gF,EAAI/gF,WAAWoO,cAAgB2yE,EAAI/gF,WAAWoO,aAAa,mBACzH,MAAMslL,EAA8C,aAAnCj9L,KAAKsqF,IAAIhhF,QAAQtS,cAC9B2+L,EACFjtL,EAAK1I,KAAKswJ,IAAMhmE,EAAI/gF,WACV0zL,IACVv0L,EAAK1I,KAAKswJ,IAAMv0B,MAAM0qB,SAAS,QAKjC,MAAMh+I,EAAQu/I,GAAc19D,GAC5B,GAAI2yG,EAAU,CAGZ,IAFAv0L,EAAK1I,KAAKswJ,IAAMhmE,EAChBA,EAAMtqF,KAAKsqF,IAAM42D,IAAAA,cAAyB,SACnCx4I,EAAGqkF,SAAS1uF,QACjBisF,EAAI1jF,YAAY8B,EAAG0H,YAEhB22I,GAASr+I,EAAI,aAChBy+I,GAASz+I,EAAI,YAEfA,EAAG9B,YAAY0jF,GACfqrG,EAAiB31L,KAAKg9L,gBAAkBt0L,EAKxCvJ,OAAO0M,KAAKnD,GAAI/P,SAAQ0nF,IACtB,IACEiK,EAAIjK,GAAK33E,EAAG23E,EACd,CAAE,MAAO1oF,GACP,IAGN,CAGA2yF,EAAIzyE,aAAa,WAAY,MAC7BpP,EAAMy0L,SAAW,KAMb54C,IAAaQ,KACfx6D,EAAIzyE,aAAa,OAAQ,eACzBpP,EAAMoqH,KAAO,eAIfvoC,EAAIxyE,gBAAgB,SACpBwyE,EAAIxyE,gBAAgB,UAChB,UAAWrP,UACNA,EAAMm3F,MAEX,WAAYn3F,UACPA,EAAMo3F,OAEf1gG,OAAOwnJ,oBAAoBl+I,GAAO9P,SAAQ,SAAUmQ,GAI5Cm0L,GAAqB,UAATn0L,GAChBJ,EAAGmP,aAAa/O,EAAML,EAAMK,IAE1Bm0L,GACF3yG,EAAIzyE,aAAa/O,EAAML,EAAMK,GAEjC,IAKAwhF,EAAIyrG,SAAWzrG,EAAI5zE,GACnB4zE,EAAI5zE,IAAM,aACV4zE,EAAI2mC,UAAY,WAGhB3mC,EAAI8gE,OAAS1iJ,EAAG0iJ,OAASprJ,KAEzBA,KAAKmnJ,SAAS,cACd,MAAMg2C,EAAmB,CAAC,cAAe,WAAY,WAAY,aAAc,UAAW,YAAa,0BAA0BxxL,QAAO5S,GAAOmtJ,GAAQntJ,KAAMsd,KAAItd,GACxJ,cAAgBA,EAAI8f,UAAU,GAAG7hB,cAAcuO,QAAQ,MAAO,OAOvE,GALAvF,KAAKmnJ,YAAYg2C,IAKyB,IAAtCp7C,IAAAA,yBAA4C,CAC9C/hJ,KAAK+8L,SAAWvxC,GAAmB,yBACnC,MAAM4xC,EAAkB7xE,GAAE,wBACpBg/B,EAAOh/B,GAAE,QACfg/B,EAAK10I,aAAa7V,KAAK+8L,SAAUK,EAAkBA,EAAgB/sL,YAAck6I,EAAKn6I,WACxF,CACApQ,KAAKq9L,OAAQ,EACbr9L,KAAKs8L,QAAS,EAGdt8L,KAAK4/F,MAAM5/F,KAAK0xJ,SAAS9xD,OACzB5/F,KAAK6/F,OAAO7/F,KAAK0xJ,SAAS7xD,QAC1B7/F,KAAKw9J,KAAKx9J,KAAK0xJ,SAAS8L,MACxBx9J,KAAKs9L,MAAMt9L,KAAK0xJ,SAAS4rC,OACzBt9L,KAAK+tF,YAAY/tF,KAAK0xJ,SAAS3jE,aAE/B/tF,KAAK4iK,YAAY5iK,KAAK0xJ,SAASkR,aAAe5iK,KAAK0xJ,SAASsjB,aAI5D,MAAMuoB,EAAQjzG,EAAI9xE,qBAAqB,KACvC,IAAK,IAAIza,EAAI,EAAGA,EAAIw/L,EAAMl/L,OAAQN,IAAK,CACrC,MAAMy/L,EAASD,EAAM14L,KAAK9G,GAC1BopJ,GAASq2C,EAAQ,cACjBA,EAAO3lL,aAAa,SAAU,SAChC,CAwBA,OApBAyyE,EAAI0pG,kBAAoB1pG,EAAI4rG,aAGxB5rG,EAAI/gF,aAAeosL,GACrBrrG,EAAI/gF,WAAWsM,aAAanN,EAAI4hF,GAQlCw8D,GAAUx8D,EAAK5hF,GACf1I,KAAK6xJ,UAAUroD,QAAQlf,GAIvBtqF,KAAKswJ,IAAIz4I,aAAa,OAAQ7X,KAAKmqL,WACnCnqL,KAAKswJ,IAAIz4I,aAAa,YAAa,MACnC7X,KAAKswJ,IAAM5nJ,EACJA,CACT,CAiBAk6J,WAAAA,CAAYtrK,GAEV,GAAqB,qBAAVA,EACT,OAAO0I,KAAKy9L,SAAS,eAET,OAAVnmM,GAA4B,cAAVA,GAAmC,oBAAVA,GAI/C0I,KAAK09L,UAAU,iBAAkBpmM,GAC7B0I,KAAK29L,aACP39L,KAAK29L,YAAY/6B,YAAYtrK,IAL7B8pJ,GAAM/1I,KAAK,uEAAuE/T,KAQtF,CAaAsoG,KAAAA,CAAMtoG,GACJ,OAAO0I,KAAK+1J,UAAU,QAASz+J,EACjC,CAaAuoG,MAAAA,CAAOvoG,GACL,OAAO0I,KAAK+1J,UAAU,SAAUz+J,EAClC,CAgBAy+J,SAAAA,CAAUA,EAAWz+J,GACnB,MAAMsmM,EAAgB7nC,EAAY,IAClC,QAAcz7J,IAAVhD,EACF,OAAO0I,KAAK49L,IAAkB,EAEhC,GAAc,KAAVtmM,GAA0B,SAAVA,EAIlB,OAFA0I,KAAK49L,QAAiBtjM,OACtB0F,KAAK65L,iBAGP,MAAMgE,EAAY7gE,WAAW1lI,GACzB6wF,MAAM01G,GACRz8C,GAAMn5I,MAAM,mBAAmB3Q,uBAA2By+J,MAG5D/1J,KAAK49L,GAAiBC,EACtB79L,KAAK65L,iBACP,CAgBAyD,KAAAA,CAAM73G,GACJ,QAAanrF,IAATmrF,EACF,QAASzlF,KAAKs8L,OA9imBOwB,IAACv5L,EAAQjO,EAgjmBhC0J,KAAKs8L,SAAW72G,EACZ6oE,GAAUtuJ,OACZA,KAAKi7H,IAAI,CAAC,cAAe,UAAWj7H,KAAK45L,qBAEvCn0G,GACFzlF,KAAKmnJ,SAAS,aACdnnJ,KAAKw9J,MAAK,GAtjmBoBlnK,EAujmBL,KACvB0J,KAAKg7H,GAAG,CAAC,cAAe,UAAWh7H,KAAK45L,oBAAoB,EAvjmB9DtrC,GADsB/pJ,EAujmBHvE,MArjmBrB1J,KAEKiO,EAAO8rJ,mBACV9rJ,EAAO8rJ,iBAAmB,IAE5B9rJ,EAAO8rJ,iBAAiBl3J,KAAK7C,KAojmB3B0J,KAAKunJ,YAAY,aAEnBvnJ,KAAK65L,gBACP,CAgBAr8B,IAAAA,CAAK/3E,GACH,QAAanrF,IAATmrF,EACF,QAASzlF,KAAKq9L,MAEhBr9L,KAAKq9L,QAAU53G,EACXA,GACFzlF,KAAKmnJ,SAAS,YACdnnJ,KAAKs9L,OAAM,IAEXt9L,KAAKunJ,YAAY,WAErB,CAsBAx5D,WAAAA,CAAY72B,GACV,QAAc58D,IAAV48D,EACF,OAAOl3D,KAAK+9L,aAId,IAAK,aAAat+L,KAAKy3D,GACrB,MAAM,IAAIz9D,MAAM,kGAElBuG,KAAK+9L,aAAe7mI,EAIpBl3D,KAAKs9L,OAAM,GACXt9L,KAAK65L,gBACP,CAQAA,cAAAA,GACE,IAA0C,IAAtC93C,IAAAA,yBAA4C,CAC9C,MAAMniD,EAA+B,kBAAhB5/F,KAAKg+L,OAAsBh+L,KAAKg+L,OAASh+L,KAAK0xJ,SAAS9xD,MACtEC,EAAiC,kBAAjB7/F,KAAKi+L,QAAuBj+L,KAAKi+L,QAAUj+L,KAAK0xJ,SAAS7xD,OACzEiyF,EAAS9xL,KAAK6iK,OAAS7iK,KAAK6iK,MAAMn6J,KASxC,YARIopL,IACElyF,GAAS,IACXkyF,EAAOlyF,MAAQA,GAEbC,GAAU,IACZiyF,EAAOjyF,OAASA,IAItB,CACA,IAAID,EACAC,EACA9R,EACAmwG,EAKFnwG,OAFwBzzF,IAAtB0F,KAAK+9L,cAAoD,SAAtB/9L,KAAK+9L,aAE5B/9L,KAAK+9L,aACV/9L,KAAKw4K,aAAe,EAEfx4K,KAAKw4K,aAAe,IAAMx4K,KAAKo4K,cAG/B,OAIhB,MAAM+lB,EAAapwG,EAAY92F,MAAM,KAC/BmnM,EAAkBD,EAAW,GAAKA,EAAW,GAGjDv+F,OAFkBtlG,IAAhB0F,KAAKg+L,OAECh+L,KAAKg+L,YACa1jM,IAAjB0F,KAAKi+L,QAENj+L,KAAKi+L,QAAUG,EAGfp+L,KAAKw4K,cAAgB,IAI7B34E,OAFmBvlG,IAAjB0F,KAAKi+L,QAEEj+L,KAAKi+L,QAGLr+F,EAAQw+F,EAKjBF,EADE,aAAaz+L,KAAKO,KAAK0W,MACf,cAAgB1W,KAAK0W,KAErB1W,KAAK0W,KAAO,cAIxB1W,KAAKmnJ,SAAS+2C,GACdzyC,GAAezrJ,KAAK+8L,SAAU,YACzBmB,uBACQt+F,yBACCC,2BAGTq+F,iEACgC,IAAlBE,qBAGrB,CAcAvqB,SAAAA,CAAUD,EAAUpvK,GAEdxE,KAAK6iK,OACP7iK,KAAKq+L,cAEP,MAAMC,EAAgBxtC,GAAc8iB,GAC9B2qB,EAAgB3qB,EAASn1F,OAAO,GAAGznF,cAAgB48K,EAAS56K,MAAM,GAGlD,UAAlBslM,GAA6Bt+L,KAAKsqF,MACpC0qE,GAAKoW,QAAQ,SAASwpB,oBAAoB50L,KAAKsqF,KAC/CtqF,KAAKsqF,IAAI8gE,OAAS,KAClBprJ,KAAKsqF,IAAM,MAEbtqF,KAAKw+L,UAAYF,EAGjBt+L,KAAKo1J,UAAW,EAChB,IAAI8mC,EAAWl8L,KAAKk8L,YAIW,kBAApBl8L,KAAKk8L,aAA+C,IAApBl8L,KAAKk8L,YAAuBl8L,KAAK0xJ,SAAS+sC,qBACnFvC,GAAW,GAIb,MAAMwC,EAAc,CAClBl6L,SACA03L,WACA,uBAA0Bl8L,KAAK0xJ,SAASgW,uBACxC,SAAY1nK,KAAK0W,KACjB,OAAU,GAAG1W,KAAK0W,QAAQ6nL,QAC1B,YAAev+L,KAAK0xJ,SAAS8Y,YAC7B,QAAWxqK,KAAK0xJ,SAASskC,QACzB,KAAQh2L,KAAK0xJ,SAASitC,KACtB,wBAA2B3+L,KAAK0xJ,SAAS2Y,wBACzC,MAASrqK,KAAK0xJ,SAAS8b,MACvB,OAAUxtK,KAAKi1K,SACf,SAAYj1K,KAAKwiI,WACjB,eAAkBxiI,KAAKg9L,kBAAmB,EAC1C,SAAUh9L,KAAK0xJ,SAAS,UACxB,oBAAuB1xJ,KAAK0xJ,SAASktC,sBACrC,gBAAmB5+L,KAAK0xJ,SAASwiC,iBAEnC/tB,GAAI3S,MAAM76J,SAAQ4G,IAChB,MAAMwlF,EAAQohF,GAAI5mK,GAClBm/L,EAAY35G,EAAMwgF,YAAcvlK,KAAK+kF,EAAMygF,YAAY,IAEzDrmK,OAAOmF,OAAOo6L,EAAa1+L,KAAK0xJ,SAAS4sC,IACzCn/L,OAAOmF,OAAOo6L,EAAa1+L,KAAK0xJ,SAAS6sC,IACzCp/L,OAAOmF,OAAOo6L,EAAa1+L,KAAK0xJ,SAASkiB,EAAS58K,gBAC9CgJ,KAAKsqF,MACPo0G,EAAYp0G,IAAMtqF,KAAKsqF,KAErB9lF,GAAUA,EAAOuH,MAAQ/L,KAAK+2K,OAAOhrK,KAAO/L,KAAK+2K,OAAO9S,YAAc,IACxEy6B,EAAYpnE,UAAYt3H,KAAK+2K,OAAO9S,aAItC,MAAM46B,EAAY7pC,GAAKoW,QAAQwI,GAC/B,IAAKirB,EACH,MAAM,IAAIplM,MAAM,kBAAkB6kM,eAA2BA,yDAE/Dt+L,KAAK6iK,MAAQ,IAAIg8B,EAAUH,GAG3B1+L,KAAK6iK,MAAMxR,MAAMhE,GAAMrtJ,KAAMA,KAAK8+L,mBAAmB,GACrD7iC,GAAoCj8J,KAAK++L,iBAAmB,GAAI/+L,KAAK6iK,OAGrE01B,GAAsB5/L,SAAQ4pG,IAC5BviG,KAAKg7H,GAAGh7H,KAAK6iK,MAAOtgE,GAAO5qG,GAAKqI,KAAK,aAAa8wJ,GAAcvuD,OAAW5qG,IAAG,IAEhFwH,OAAO0M,KAAK2sL,IAAmB7/L,SAAQ4pG,IACrCviG,KAAKg7H,GAAGh7H,KAAK6iK,MAAOtgE,GAAOy8F,IACS,IAA9Bh/L,KAAK6iK,MAAMgoB,gBAAwB7qL,KAAK6iK,MAAMo8B,UAChDj/L,KAAKk7L,iBAAiB/hM,KAAK,CACzB7C,SAAU0J,KAAK,aAAaw4L,GAAkBj2F,OAAWxjG,KAAKiB,MAC9DuiG,MAAOy8F,IAIXh/L,KAAK,aAAaw4L,GAAkBj2F,OAAWy8F,EAAS,GACxD,IAEJh/L,KAAKg7H,GAAGh7H,KAAK6iK,MAAO,aAAalrK,GAAKqI,KAAKk/L,qBAAqBvnM,KAChEqI,KAAKg7H,GAAGh7H,KAAK6iK,MAAO,aAAalrK,GAAKqI,KAAKm/L,qBAAqBxnM,KAChEqI,KAAKg7H,GAAGh7H,KAAK6iK,MAAO,WAAWlrK,GAAKqI,KAAKo/L,mBAAmBznM,KAC5DqI,KAAKg7H,GAAGh7H,KAAK6iK,MAAO,SAASlrK,GAAKqI,KAAKq/L,iBAAiB1nM,KACxDqI,KAAKg7H,GAAGh7H,KAAK6iK,MAAO,WAAWlrK,GAAKqI,KAAKs/L,mBAAmB3nM,KAC5DqI,KAAKg7H,GAAGh7H,KAAK6iK,MAAO,QAAQlrK,GAAKqI,KAAKu/L,gBAAgB5nM,KACtDqI,KAAKg7H,GAAGh7H,KAAK6iK,MAAO,SAASlrK,GAAKqI,KAAKw/L,iBAAiB7nM,KACxDqI,KAAKg7H,GAAGh7H,KAAK6iK,MAAO,kBAAkBlrK,GAAKqI,KAAKy/L,0BAA0B9nM,KAC1EqI,KAAKg7H,GAAGh7H,KAAK6iK,MAAO,oBAAoB,CAAClrK,EAAGgF,IAASqD,KAAK0/L,4BAA4B/nM,EAAGgF,KACzFqD,KAAKg7H,GAAGh7H,KAAK6iK,MAAO,mBAAmB,CAAClrK,EAAGnB,IAAQwJ,KAAK2/L,2BAA2BhoM,EAAGnB,KACtFwJ,KAAKg7H,GAAGh7H,KAAK6iK,MAAO,yBAAyBlrK,GAAKqI,KAAK4/L,iCAAiCjoM,KACxFqI,KAAKg7H,GAAGh7H,KAAK6iK,MAAO,yBAAyBlrK,GAAKqI,KAAK6/L,iCAAiCloM,KACxFqI,KAAKg7H,GAAGh7H,KAAK6iK,MAAO,SAASlrK,GAAKqI,KAAK8/L,iBAAiBnoM,KACxDqI,KAAKg7H,GAAGh7H,KAAK6iK,MAAO,gBAAgBlrK,GAAKqI,KAAK+/L,wBAAwBpoM,KACtEqI,KAAKg7H,GAAGh7H,KAAK6iK,MAAO,YAAYlrK,GAAKqI,KAAKggM,oBAAoBroM,KAC9DqI,KAAKg7H,GAAGh7H,KAAK6iK,MAAO,cAAclrK,GAAKqI,KAAKigM,sBAAsBtoM,KAClEqI,KAAKg7H,GAAGh7H,KAAK6iK,MAAO,iBAAkB7iK,KAAK45L,qBAC3C55L,KAAKkgM,oBAAoBlgM,KAAKy9L,SAAS,aACnCz9L,KAAK89J,aAAe99J,KAAKkgM,uBAC3BlgM,KAAKmgM,4BAKHngM,KAAK6iK,MAAMn6J,KAAKa,aAAevJ,KAAK0I,MAA2B,UAAlB41L,GAA8Bt+L,KAAKsqF,KAClFw8D,GAAU9mJ,KAAK6iK,MAAMn6J,KAAM1I,KAAK0I,MAI9B1I,KAAKsqF,MACPtqF,KAAKsqF,IAAI8gE,OAAS,KAClBprJ,KAAKsqF,IAAM,KAEf,CAOA+zG,WAAAA,GAEEl4B,GAAI3S,MAAM76J,SAAQ4G,IAChB,MAAMwlF,EAAQohF,GAAI5mK,GAClBS,KAAK+kF,EAAMygF,aAAexlK,KAAK+kF,EAAMwgF,aAAa,IAEpDvlK,KAAK++L,gBAAkB9iC,GAAoCj8J,KAAK6iK,OAChE7iK,KAAKo1J,UAAW,EAChBp1J,KAAK6iK,MAAMtnC,UACXv7H,KAAK6iK,OAAQ,EACT7iK,KAAKi7L,oBACPj7L,KAAK67L,QAAU,GACf77L,KAAKk7H,QAAQ,iBAEfl7H,KAAKi7L,mBAAoB,CAC3B,CAaA/+B,IAAAA,CAAKkkC,GAIH,YAHe9lM,IAAX8lM,GACFh/C,GAAM/1I,KAAK,sJAENrL,KAAK6iK,KACd,CAgBAltJ,OAAAA,GACE,MAAO,CACL,WAAY8qI,GAEhB,CAuBA0/C,yBAAAA,GAEEngM,KAAKqgM,+BACLrgM,KAAKg7H,GAAGh7H,KAAK6iK,MAAO,QAAS7iK,KAAKk6L,uBAClCl6L,KAAKg7H,GAAGh7H,KAAK6iK,MAAO,WAAY7iK,KAAKo6L,6BAKrCp6L,KAAKg7H,GAAGh7H,KAAK6iK,MAAO,aAAc7iK,KAAKs6L,4BACvCt6L,KAAKg7H,GAAGh7H,KAAK6iK,MAAO,YAAa7iK,KAAKw6L,2BACtCx6L,KAAKg7H,GAAGh7H,KAAK6iK,MAAO,WAAY7iK,KAAK06L,0BAIrC16L,KAAKg7H,GAAGh7H,KAAK6iK,MAAO,MAAO7iK,KAAK46L,oBAClC,CAQAyF,4BAAAA,GAGErgM,KAAKi7H,IAAIj7H,KAAK6iK,MAAO,MAAO7iK,KAAK46L,qBACjC56L,KAAKi7H,IAAIj7H,KAAK6iK,MAAO,aAAc7iK,KAAKs6L,4BACxCt6L,KAAKi7H,IAAIj7H,KAAK6iK,MAAO,YAAa7iK,KAAKw6L,2BACvCx6L,KAAKi7H,IAAIj7H,KAAK6iK,MAAO,WAAY7iK,KAAK06L,0BACtC16L,KAAKi7H,IAAIj7H,KAAK6iK,MAAO,QAAS7iK,KAAKk6L,uBACnCl6L,KAAKi7H,IAAIj7H,KAAK6iK,MAAO,WAAY7iK,KAAKo6L,4BACxC,CAOA0E,gBAAAA,GACE9+L,KAAKq1J,eAGDr1J,KAAK+2K,OAAOrJ,QACd1tK,KAAK09L,UAAU,YAAa19L,KAAK+2K,OAAOrJ,QAI1C1tK,KAAK+/L,0BAGL//L,KAAKy/L,2BACP,CASAP,oBAAAA,GAGEl/L,KAAKunJ,YAAY,YAAa,eAG9BvnJ,KAAKiI,MAAM,MAGXjI,KAAKy/L,4BACAz/L,KAAK09J,UAUR19J,KAAKqxL,YAAW,GAChBrxL,KAAKk7H,QAAQ,cAJbl7H,KAAKk7H,QAAQ,aASfl7H,KAAKsgM,iBAAoC,IAApBtgM,KAAKk8L,YAAuBl8L,KAAK0xJ,SAAS+sC,kBAAoB,OAASz+L,KAAKk8L,WACnG,CAQAoE,eAAAA,CAAgBjpM,GACd,IAAK2I,KAAK6iK,OAAyB,kBAATxrK,EACxB,OAKF,MAAMkpM,EAAeA,KACnB,MAAMC,EAAkBxgM,KAAKwtK,QAC7BxtK,KAAKwtK,OAAM,GACX,MAAMizB,EAAeA,KACnBzgM,KAAKwtK,MAAMgzB,EAAgB,EAI7BxgM,KAAKi8L,qBAAqB9iM,KAAKsnM,GAC/B,MAAMC,EAAe1gM,KAAKsxJ,OAC1B,GAAK8J,GAAUslC,GAGf,OAAOA,EAAah2F,OAAMl0G,IAExB,MADAiqM,IACM,IAAIhnM,MAAM,uDAAuDjD,GAAY,KAAK,GACxF,EAEJ,IAAImqM,EAcJ,MAVa,QAATtpM,GAAmB2I,KAAKwtK,QAQ1BmzB,EAHkB,UAATtpM,GAAqB2I,KAAKwtK,QAGzBxtK,KAAKsxJ,OAFLivC,KALVI,EAAU3gM,KAAKsxJ,OACX8J,GAAUulC,KACZA,EAAUA,EAAQj2F,MAAM61F,KAOvBnlC,GAAUulC,GAGRA,EAAQl2F,MAAK,KAClBzqG,KAAKk7H,QAAQ,CACX7jI,KAAM,mBACN6kM,SAAU7kM,GACV,IACDqzG,OAAM,KACP1qG,KAAKk7H,QAAQ,CACX7jI,KAAM,mBACN6kM,SAAU7kM,GACV,SAZJ,CAcF,CAaAupM,mBAAAA,GAAiC,IAAb51B,EAAM/gK,UAAA5L,OAAA,QAAA/D,IAAA2P,UAAA,GAAAA,UAAA,GAAG,GACvB8B,EAAMi/J,EACN3zK,EAAO,GACQ,kBAAR0U,IACTA,EAAMi/J,EAAOj/J,IACb1U,EAAO2zK,EAAO3zK,MAKhB2I,KAAK+2K,OAAOvyK,OAASxE,KAAK+2K,OAAOvyK,QAAU,CAAC,EAC5CxE,KAAK+2K,OAAOrzB,QAAU1jJ,KAAK+2K,OAAOrzB,SAAW,GAGzC33I,IAAQ1U,IACVA,EA/tZewpM,EAACz1C,EAAQr/I,KAC5B,IAAKA,EACH,MAAO,GAIT,GAAIq/I,EAAO2rB,OAAOvyK,OAAOuH,MAAQA,GAAOq/I,EAAO2rB,OAAOvyK,OAAOnN,KAC3D,OAAO+zJ,EAAO2rB,OAAOvyK,OAAOnN,KAI9B,MAAMypM,EAAkB11C,EAAO2rB,OAAOrzB,QAAQ/3I,QAAO6yE,GAAKA,EAAEzyE,MAAQA,IACpE,GAAI+0L,EAAgBziM,OAClB,OAAOyiM,EAAgB,GAAGzpM,KAI5B,MAAMqsJ,EAAU0H,EAAOrB,GAAG,UAC1B,IAAK,IAAIhsJ,EAAI,EAAGA,EAAI2lJ,EAAQrlJ,OAAQN,IAAK,CACvC,MAAMygF,EAAIklE,EAAQ3lJ,GAClB,GAAIygF,EAAEnnF,MAAQmnF,EAAEzyE,KAAOyyE,EAAEzyE,MAAQA,EAC/B,OAAOyyE,EAAEnnF,IAEb,CAGA,OAAOg4K,GAAYtjK,EAAI,EAqsZZ80L,CAAa7gM,KAAM+L,IAI5B/L,KAAK+2K,OAAOvyK,OAASg/I,GAAQ,CAAC,EAAGwnB,EAAQ,CACvCj/J,MACA1U,SAEF,MAAMypM,EAAkB9gM,KAAK+2K,OAAOrzB,QAAQ/3I,QAAO6yE,GAAKA,EAAEzyE,KAAOyyE,EAAEzyE,MAAQA,IACrEg1L,EAAkB,GAClBC,EAAYhhM,KAAK+pJ,GAAG,UACpBk3C,EAAoB,GAC1B,IAAK,IAAIljM,EAAI,EAAGA,EAAIijM,EAAU3iM,OAAQN,IAAK,CACzC,MAAMmjM,EAAYl5C,GAAcg5C,EAAUjjM,IAC1CgjM,EAAgB5nM,KAAK+nM,GACjBA,EAAUn1L,KAAOm1L,EAAUn1L,MAAQA,GACrCk1L,EAAkB9nM,KAAK+nM,EAAUn1L,IAErC,CAIIk1L,EAAkB5iM,SAAWyiM,EAAgBziM,OAC/C2B,KAAK+2K,OAAOrzB,QAAUq9C,EAGZD,EAAgBziM,SAC1B2B,KAAK+2K,OAAOrzB,QAAU,CAAC1jJ,KAAK+2K,OAAOvyK,SAIrCxE,KAAK+2K,OAAOhrK,IAAMA,CACpB,CAqCAozL,oBAAAA,CAAqB58F,GAGnB,IAAKviG,KAAK+7L,aAAc,CACtB,IAAIoF,EAAqBp1L,GAAO/L,KAAK4gM,oBAAoB70L,GACzD,MAAMq1L,EAAYphM,KAAKqhM,gBAAgBt1L,IACjCu1L,EAAW/+F,EAAMx2F,IAGnBq1L,IAAc,SAAS3hM,KAAK2hM,IAAc,SAAS3hM,KAAK6hM,MAGrDthM,KAAKuhM,aAAevhM,KAAKuhM,YAAYrlC,OAASolC,GAAYthM,KAAKuhM,YAAYn2C,SAAWg2C,KACzFD,EAAqBA,QAMzBA,EAAmBG,GAKd/+F,EAAMx2F,KACT/L,KAAK6iK,MAAMh9E,IAAI,CAAC,YAAa,cAAcluF,IAIzC,GAAe,cAAXA,EAAEN,KACJ,OAEF,MAAMmqM,EAAUxhM,KAAKy9L,SAAS,cAC9Bz9L,KAAKuhM,YAAYrlC,KAAOslC,EACxBxhM,KAAK4gM,oBAAoBY,EAAQ,GAGvC,CACAxhM,KAAKuhM,YAAc,CACjBn2C,OAAQprJ,KAAKqhM,gBAAgBt1L,IAC7BmwJ,KAAM35D,EAAMx2F,KAEd/L,KAAKk7H,QAAQ,CACXnvH,IAAKw2F,EAAMx2F,IACX1U,KAAM,aAEV,CAaAg6L,UAAAA,CAAWoQ,GACT,QAAgBnnM,IAAZmnM,EAEF,OAAOzhM,KAAK+mK,YAEV06B,IAAYzhM,KAAK+mK,cAGrB/mK,KAAK+mK,YAAc06B,EACfzhM,KAAK+mK,YACP/mK,KAAKmnJ,SAAS,mBAEdnnJ,KAAKunJ,YAAY,mBAErB,CAUAg4C,eAAAA,GACEv/L,KAAKunJ,YAAY,YAAa,cAC9BvnJ,KAAKmnJ,SAAS,eAGdnnJ,KAAKqxL,YAAW,GAQhBrxL,KAAKk7H,QAAQ,OACf,CAaA+kE,qBAAAA,GACMjgM,KAAK6iK,MAAMgoB,eAAiB,GAAsC,IAAjC7qL,KAAK+2K,OAAO2qB,mBAC/C1hM,KAAKk7L,iBAAiBviM,SAAQgpM,GAAUA,EAAOrrM,SAASqrM,EAAOp/F,SAC/DviG,KAAKk7L,iBAAmB,IAE1Bl7L,KAAK+2K,OAAO2qB,iBAAmB1hM,KAAK6iK,MAAMgoB,eAO1C7qL,KAAKk7H,QAAQ,aACf,CASAkkE,kBAAAA,GACEp/L,KAAKmnJ,SAAS,eAOdnnJ,KAAKk7H,QAAQ,WAIb,MAAM0mE,EAAkB5hM,KAAKikK,cACvB49B,EAAqBA,KACrBD,IAAoB5hM,KAAKikK,gBAC3BjkK,KAAKunJ,YAAY,eACjBvnJ,KAAKi7H,IAAI,aAAc4mE,GACzB,EAEF7hM,KAAKg7H,GAAG,aAAc6mE,EACxB,CAUAC,kBAAAA,GACE9hM,KAAKunJ,YAAY,eAOjBvnJ,KAAKk7H,QAAQ,UACf,CASA6mE,yBAAAA,GACE/hM,KAAKunJ,YAAY,eAQjBvnJ,KAAKk7H,QAAQ,iBACf,CASA8mE,kBAAAA,GACEhiM,KAAKunJ,YAAY,eAOjBvnJ,KAAKk7H,QAAQ,UACf,CASAokE,kBAAAA,GACEt/L,KAAKmnJ,SAAS,eAOdnnJ,KAAKk7H,QAAQ,UACf,CASA+mE,iBAAAA,GACEjiM,KAAKunJ,YAAY,cAAe,aAOhCvnJ,KAAKk7H,QAAQ,SACf,CASAskE,gBAAAA,GACEx/L,KAAKunJ,YAAY,eACjBvnJ,KAAKmnJ,SAAS,cAOdnnJ,KAAKk7H,QAAQ,QACf,CASAmkE,gBAAAA,GACEr/L,KAAKmnJ,SAAS,aACdnnJ,KAAKunJ,YAAY,eACbvnJ,KAAK0xJ,SAASitC,MAChB3+L,KAAKikK,YAAY,GACjBjkK,KAAKsxJ,QACKtxJ,KAAK09J,UACf19J,KAAK49J,QASP59J,KAAKk7H,QAAQ,QACf,CAQAukE,yBAAAA,GACEz/L,KAAK+8H,SAAS/8H,KAAKy9L,SAAS,YAC9B,CAWAtD,gBAAAA,CAAiB53F,GAGVviG,KAAK87L,iBAGYxhM,IAAlB0F,KAAK0xJ,eAAwDp3J,IAA9B0F,KAAK0xJ,SAASwwC,kBAAiE5nM,IAApC0F,KAAK0xJ,SAASwwC,YAAYC,QAA2D,IAApCniM,KAAK0xJ,SAASwwC,YAAYC,aACjI7nM,IAAlB0F,KAAK0xJ,eAAwDp3J,IAA9B0F,KAAK0xJ,SAASwwC,aAAwE,oBAApCliM,KAAK0xJ,SAASwwC,YAAYC,MAC7GniM,KAAK0xJ,SAASwwC,YAAYC,MAAMtjM,KAAKmB,KAAMuiG,GAClCviG,KAAK09J,SACdrC,GAAer7J,KAAKsxJ,QAEpBtxJ,KAAK49J,SAGX,CAWAy8B,sBAAAA,CAAuB93F,GACrB,IAAKviG,KAAK87L,UACR,OAKmB7iM,MAAMmG,UAAU8tH,KAAKruH,KAAKmB,KAAK+pJ,GAAG,wCAAwCrhJ,GAAMA,EAAGw7F,SAAS3B,EAAMh+F,gBAS/FjK,IAAlB0F,KAAK0xJ,eAAwDp3J,IAA9B0F,KAAK0xJ,SAASwwC,kBAAuE5nM,IAA1C0F,KAAK0xJ,SAASwwC,YAAYE,cAAuE,IAA1CpiM,KAAK0xJ,SAASwwC,YAAYE,mBACvI9nM,IAAlB0F,KAAK0xJ,eAAwDp3J,IAA9B0F,KAAK0xJ,SAASwwC,aAA8E,oBAA1CliM,KAAK0xJ,SAASwwC,YAAYE,YAC7GpiM,KAAK0xJ,SAASwwC,YAAYE,YAAYvjM,KAAKmB,KAAMuiG,GACxCviG,KAAKgiL,eACdhiL,KAAKiiL,iBAELjiL,KAAKkiL,oBAIb,CASA2Y,cAAAA,GACE76L,KAAKszK,YAAYtzK,KAAKszK,aACxB,CAQAinB,qBAAAA,GACEv6L,KAAKqiM,cAAgBriM,KAAKszK,YAC5B,CAQAmnB,oBAAAA,GACMz6L,KAAKqiM,eACPriM,KAAKw3J,oBAET,CAYAmjC,mBAAAA,CAAoBp4F,GAEdA,EAAM7G,YACR6G,EAAMvH,gBAEV,CAKAsnG,sBAAAA,GACMtiM,KAAKgiL,eACPhiL,KAAKmnJ,SAAS,kBAEdnnJ,KAAKunJ,YAAY,iBAErB,CAKAkyC,yBAAAA,CAA0B9hM,GACxB,MAAM4qM,EAAe5qM,EAAE4M,OAAO6mJ,OAI9B,GAAIm3C,GAAgBA,IAAiBviM,KACnC,OAEF,MAAM0I,EAAK1I,KAAK0I,KAChB,IAAI85L,EAAOthD,IAAWlhJ,KAAK8hL,OAAOr5B,qBAAuB//I,GACpD85L,GAAQ95L,EAAGwO,UACdsrL,EAAO95L,EAAGwO,QAAQ,IAAMlX,KAAK8hL,OAAO2gB,aAEtCziM,KAAKgiL,aAAawgB,EACpB,CAeA9C,2BAAAA,CAA4Bn9F,EAAO5lG,GAC7BA,IACEA,EAAKk6L,sBACP72L,KAAKmnJ,SAAS,qBACdnnJ,KAAK6iK,MAAM1V,IAAI,uBAAuB,KACpCntJ,KAAKunJ,YAAY,oBAAoB,KAGzCvnJ,KAAKgiL,aAAarlL,EAAKqlL,cAE3B,CACA2d,0BAAAA,CAA2Bp9F,EAAO/rG,GAChCwJ,KAAKk7H,QAAQ,kBAAmB1kI,EAClC,CAKAksM,4BAAAA,GACM1iM,KAAKyhL,uBACPzhL,KAAKmnJ,SAAS,0BAEdnnJ,KAAKunJ,YAAY,yBAErB,CAWAq4C,gCAAAA,CAAiCr9F,GAC/BviG,KAAKyhL,sBAAqB,EAC5B,CAWAoe,gCAAAA,CAAiCt9F,GAC/BviG,KAAKyhL,sBAAqB,EAC5B,CAQAqe,gBAAAA,GACE,MAAM73L,EAAQjI,KAAK6iK,MAAM56J,QACrBA,GACFjI,KAAKiI,MAAMA,EAEf,CASA+3L,mBAAAA,GACE,IAAIrjM,EAAO,KACPsN,UAAU5L,OAAS,IACrB1B,EAAOsN,UAAU,IASnBjK,KAAKk7H,QAAQ,WAAYv+H,EAC3B,CAQA6+K,QAAAA,GACE,OAAOx7K,KAAK+2K,MACd,CAUA6kB,WAAAA,GACE57L,KAAK+2K,OAAS,CAKZ9S,YAAa,EACb0+B,SAAU,EACVC,kBAAmB5iM,KAAK0xJ,SAASkxC,kBACjC7lE,SAAUvS,IACVo5D,WAAY,EACZ8d,iBAAkB1hM,KAAK6iM,sBACvB7gE,MAAO,KACPj2H,IAAK,GACLvH,OAAQ,CAAC,EACTk/I,QAAS,GACT2nC,cAAe,GACf3d,OAAQ,EAEZ,CAaAgwB,SAAAA,CAAUthM,EAAQ2wK,GAGhB/sK,KAAKqxJ,OAAM,WACT,GAAIj1J,KAAUwxK,GACZ,OAxmbR,SAAad,EAAY5Q,EAAM9/J,EAAQ2wK,GACrC,OAAO7Q,EAAK9/J,GAAQ0wK,EAAW51K,OAAOg2K,GAAmB9wK,GAAS2wK,GACpE,CAsmbepsK,CAAIX,KAAKw8L,YAAax8L,KAAK6iK,MAAOzmK,EAAQ2wK,GAC5C,GAAI3wK,KAAU2xK,GACnB,OAAOlB,GAAQ7sK,KAAKw8L,YAAax8L,KAAK6iK,MAAOzmK,EAAQ2wK,GAEvD,IACM/sK,KAAK6iK,OACP7iK,KAAK6iK,MAAMzmK,GAAQ2wK,EAEvB,CAAE,MAAOp1K,GAEP,MADAypJ,GAAMzpJ,GACAA,CACR,CACF,IAAG,EACL,CAeA8lM,QAAAA,CAASrhM,GACP,GAAK4D,KAAK6iK,OAAU7iK,KAAK6iK,MAAMzN,SAA/B,CAGA,GAAIh5J,KAAUmxK,GACZ,OAhqbN,SAAaT,EAAY5Q,EAAM9/J,GAC7B,OAAO0wK,EAAW9pC,YAAYkqC,GAAmB9wK,GAAS8/J,EAAK9/J,KACjE,CA8pba0E,CAAId,KAAKw8L,YAAax8L,KAAK6iK,MAAOzmK,GACpC,GAAIA,KAAU2xK,GACnB,OAAOlB,GAAQ7sK,KAAKw8L,YAAax8L,KAAK6iK,MAAOzmK,GAK/C,IACE,OAAO4D,KAAK6iK,MAAMzmK,IACpB,CAAE,MAAOzE,GAEP,QAA2B2C,IAAvB0F,KAAK6iK,MAAMzmK,GAEb,MADAglJ,GAAM,aAAahlJ,4BAAiC4D,KAAKw+L,iCAAkC7mM,GACrFA,EAIR,GAAe,cAAXA,EAAE4H,KAGJ,MAFA6hJ,GAAM,aAAahlJ,oBAAyB4D,KAAKw+L,yCAA0C7mM,GAC3FqI,KAAK6iK,MAAMzN,UAAW,EAChBz9J,EAKR,MADAypJ,GAAMzpJ,GACAA,CACR,CA5BA,CA6BF,CAYA25J,IAAAA,GACE,OAAO,IAAIjnD,SAAQG,IACjBxqG,KAAK8iM,MAAMt4F,EAAQ,GAEvB,CAWAs4F,KAAAA,GAAiC,IAA3BxsM,EAAQ2T,UAAA5L,OAAA,QAAA/D,IAAA2P,UAAA,GAAAA,UAAA,GAAGoxJ,GACfr7J,KAAKg8L,eAAe7iM,KAAK7C,GACzB,MAAMysM,EAAanxD,SAAS5xI,KAAK+7L,eAAiB/7L,KAAK+L,OAAS/L,KAAK6zL,eAC/DmP,EAAgBpxD,QAAQqU,IAAiBD,IAU/C,GAPIhmJ,KAAKijM,cACPjjM,KAAKi7H,IAAI,CAAC,QAAS,aAAcj7H,KAAKijM,aACtCjjM,KAAKijM,YAAc,OAKhBjjM,KAAKo1J,WAAa2tC,EAWrB,OAVA/iM,KAAKijM,YAActrM,IACjBqI,KAAK8iM,OAAO,EAEd9iM,KAAKmtJ,IAAI,CAAC,QAAS,aAAcntJ,KAAKijM,mBAIjCF,GAAcC,GACjBhjM,KAAK6kK,QAMT,MAAMt/B,EAAMvlI,KAAKy9L,SAAS,QAGHuF,GAAiBhjM,KAAK+mJ,SAAS,cAEpD/mJ,KAAKkjM,oBAGK,OAAR39D,EACFvlI,KAAKmjM,0BAELnjM,KAAKojM,kBAAkB79D,EAE3B,CAOA49D,uBAAAA,GACE,MAAMtuF,EAAQ70G,KAAKi8L,qBAAqBjjM,MAAM,GAC9CgH,KAAKi8L,qBAAuB,GAC5BpnF,EAAMl8G,SAAQ,SAAUg3G,GACtBA,GACF,GACF,CAWAyzF,iBAAAA,CAAkB79D,GAChB,MAAMpK,EAAYn7H,KAAKg8L,eAAehjM,MAAM,GAC5CgH,KAAKg8L,eAAiB,GAEtBh8L,KAAKi8L,qBAAuB,GAC5B9gE,EAAUxiI,SAAQ,SAAU2zF,GAC1BA,EAAGi5C,EACL,GACF,CAKAq4B,KAAAA,GACE59J,KAAK09L,UAAU,QACjB,CASAhgC,MAAAA,GAEE,OAAmC,IAA5B19J,KAAKy9L,SAAS,SACvB,CAUA70B,MAAAA,GACE,OAAO5oK,KAAKy9L,SAAS,WAAapjC,GAAmB,EAAG,EAC1D,CAcA0O,SAAAA,CAAUwtB,GACR,GAA2B,qBAAhBA,EACT,OAAOv2L,KAAKo8L,WAEdp8L,KAAKo8L,aAAe7F,EACpBv2L,KAAK09L,UAAU,eAAgB19L,KAAKo8L,YAChC7F,EACFv2L,KAAKmnJ,SAAS,iBAEdnnJ,KAAKunJ,YAAY,gBAErB,CAYA0c,WAAAA,CAAYngF,GACV,YAAgBxpF,IAAZwpF,GAOF9jF,KAAK+2K,OAAO9S,YAAcjkK,KAAKy9L,SAAS,gBAAkB,EACnDz9L,KAAK+2K,OAAO9S,cAEjBngF,EAAU,IACZA,EAAU,GAEP9jF,KAAKo1J,WAAYp1J,KAAK+7L,cAAiB/7L,KAAK6iK,OAAU7iK,KAAK6iK,MAAMzN,UAMtEp1J,KAAK09L,UAAU,iBAAkB55G,GACjC9jF,KAAK+2K,OAAO4rB,SAAW,OACnB/gE,SAAS99C,KACX9jF,KAAK+2K,OAAO9S,YAAcz/E,OAAOV,OARjC9jF,KAAK+2K,OAAO4rB,SAAW7+G,EACvB9jF,KAAKi7H,IAAI,UAAWj7H,KAAK85L,0BACzB95L,KAAKmtJ,IAAI,UAAWntJ,KAAK85L,sBAQ7B,CAOAC,cAAAA,GACE/5L,KAAKikK,YAAYjkK,KAAK+2K,OAAO4rB,SAC/B,CAmBA5lE,QAAAA,CAASj5C,GACP,QAAgBxpF,IAAZwpF,EAEF,YAAgCxpF,IAAzB0F,KAAK+2K,OAAOh6C,SAAyB/8H,KAAK+2K,OAAOh6C,SAAWvS,KAErE1mC,EAAUk5C,WAAWl5C,IAGP,IACZA,EAAU++B,KAER/+B,IAAY9jF,KAAK+2K,OAAOh6C,WAE1B/8H,KAAK+2K,OAAOh6C,SAAWj5C,EACnBA,IAAY++B,IACd7iH,KAAKmnJ,SAAS,YAEdnnJ,KAAKunJ,YAAY,YAEdp/D,MAAMrE,IAQT9jF,KAAKk7H,QAAQ,kBAGnB,CASA2gD,aAAAA,GACE,OAAO77K,KAAK+8H,WAAa/8H,KAAKikK,aAChC,CASA2X,oBAAAA,GACE,OAAOt4K,KAAK80H,MAAMp4H,KAAK+8H,YAAcz5H,KAAK80H,MAAMp4H,KAAKikK,cACvD,CAeAjJ,QAAAA,GACE,IAAIA,EAAWh7J,KAAKy9L,SAAS,YAI7B,OAHKziC,GAAaA,EAAS38J,SACzB28J,EAAWX,GAAmB,EAAG,IAE5BW,CACT,CAWAyS,QAAAA,GACE,IAAIA,EAAWztK,KAAKy9L,SAAS,YAI7B,OAHKhwB,GAAaA,EAASpvK,SACzBovK,EAAWpT,GAAmB,EAAG,IAE5BoT,CACT,CAOAwxB,OAAAA,GACE,OAAOj/L,KAAKy9L,SAAS,UACvB,CAOA9vB,KAAAA,GACE,OAAO3tK,KAAKy9L,SAAS,QACvB,CAqBAvH,YAAAA,GACE,OAAOl2L,KAAKy9L,SAAS,eACvB,CAwBAzgM,UAAAA,GACE,OAAOgD,KAAKy9L,SAAS,aACvB,CAUA1iC,eAAAA,GACE,OAAOA,GAAgB/6J,KAAKg7J,WAAYh7J,KAAK+8H,WAC/C,CASAqhD,WAAAA,GACE,MAAMpjB,EAAWh7J,KAAKg7J,WAChBj+B,EAAW/8H,KAAK+8H,WACtB,IAAIr9C,EAAMs7E,EAASt7E,IAAIs7E,EAAS38J,OAAS,GAIzC,OAHIqhF,EAAMq9C,IACRr9C,EAAMq9C,GAEDr9C,CACT,CAcAguF,MAAAA,CAAO21B,GACL,IAAI1f,EACJ,YAAyBrpL,IAArB+oM,GAEF1f,EAAMrgL,KAAK69E,IAAI,EAAG79E,KAAKyhG,IAAI,EAAGs+F,IAC9BrjM,KAAK+2K,OAAOrJ,OAASiW,EACrB3jL,KAAK09L,UAAU,YAAa/Z,QACxBA,EAAM,GACR3jL,KAAKmjL,YAAYQ,MAMrBA,EAAM3mD,WAAWh9H,KAAKy9L,SAAS,WACxBt1G,MAAMw7F,GAAO,EAAIA,EAC1B,CAcAnW,KAAAA,CAAMA,GACJ,QAAclzK,IAAVkzK,EAIJ,OAAOxtK,KAAKy9L,SAAS,WAAY,EAH/Bz9L,KAAK09L,UAAU,WAAYlwB,EAI/B,CA4BA81B,YAAAA,CAAaA,GAIX,YAHqBhpM,IAAjBgpM,GACFtjM,KAAK09L,UAAU,kBAAmB4F,GAE7BtjM,KAAKy9L,SAAS,kBAAmB,CAC1C,CAiBAta,WAAAA,CAAYkgB,GACV,QAAyB/oM,IAArB+oM,GAAuD,IAArBA,EAItC,OAAOrjM,KAAK+2K,OAAO6M,WAHjB5jL,KAAK+2K,OAAO6M,WAAayf,CAI7B,CASAvM,kBAAAA,GACE,OAAO92L,KAAKy9L,SAAS,wBAAyB,CAChD,CAkBAzb,YAAAA,CAAauhB,GACX,QAAajpM,IAATipM,EAAoB,CACtB,MAAMC,EAAWxjM,KAAKg7L,cActB,OAbAh7L,KAAKg7L,cAAgBppD,QAAQ2xD,GAKzBvjM,KAAKg7L,gBAAkBwI,GAAYxjM,KAAK8hL,OAAOhhC,UAKjD9gJ,KAAKk7H,QAAQ,yBAEfl7H,KAAKsiM,wBAEP,CACA,OAAOtiM,KAAKg7L,aACd,CAgBA9Y,iBAAAA,CAAkBuhB,GACZzjM,KAAKyhL,wBACPzhL,KAAK0hL,uBAEP,MAAM//F,EAAO3hF,KACb,OAAO,IAAIqqG,SAAQ,CAACG,EAAS4/D,KAC3B,SAASs5B,IACP/hH,EAAKs5C,IAAI,kBAAmBh0H,GAC5B06E,EAAKs5C,IAAI,mBAAoB+sD,EAC/B,CACA,SAASA,IACP0b,IACAl5F,GACF,CACA,SAASvjG,EAAatP,EAAGnB,GACvBktM,IACAt5B,EAAO5zK,EACT,CACAmrF,EAAKwrE,IAAI,mBAAoB66B,GAC7BrmG,EAAKwrE,IAAI,kBAAmBlmJ,GAC5B,MAAM05L,EAAUh/G,EAAKgiH,yBAAyBF,GAC1C9C,IACFA,EAAQl2F,KAAKi5F,EAAYA,GACzB/C,EAAQl2F,KAAKD,EAAS4/D,GACxB,GAEJ,CACAu5B,wBAAAA,CAAyBF,GACvB,IAAIG,EAkBJ,GAdK5jM,KAAK8hL,OAAOhhC,WACf8iD,EAAY5jM,KAAK0xJ,SAAS+wC,YAAcziM,KAAK0xJ,SAAS+wC,WAAWnpM,SAAW,CAAC,OACnDgB,IAAtBmpM,IACFG,EAAYH,IAWZzjM,KAAK8hL,OAAOI,kBAAmB,CACjC,MAAMye,EAAU3gM,KAAKswJ,IAAItwJ,KAAK8hL,OAAOI,mBAAmB0hB,GAMxD,OAHIjD,GACFA,EAAQl2F,MAAK,IAAMzqG,KAAKgiL,cAAa,KAAO,IAAMhiL,KAAKgiL,cAAa,KAE/D2e,CACT,CAAW3gM,KAAK6iK,MAAMi0B,uBAA4D,KAAnC92L,KAAK0xJ,SAASmyC,iBAG3D7jM,KAAK09L,UAAU,mBAIf19L,KAAK8jM,iBAET,CAOA7hB,cAAAA,GACE,MAAMtgG,EAAO3hF,KACb,OAAO,IAAIqqG,SAAQ,CAACG,EAAS4/D,KAC3B,SAASs5B,IACP/hH,EAAKs5C,IAAI,kBAAmBh0H,GAC5B06E,EAAKs5C,IAAI,mBAAoB+sD,EAC/B,CACA,SAASA,IACP0b,IACAl5F,GACF,CACA,SAASvjG,EAAatP,EAAGnB,GACvBktM,IACAt5B,EAAO5zK,EACT,CACAmrF,EAAKwrE,IAAI,mBAAoB66B,GAC7BrmG,EAAKwrE,IAAI,kBAAmBlmJ,GAC5B,MAAM05L,EAAUh/G,EAAKoiH,wBACjBpD,IACFA,EAAQl2F,KAAKi5F,EAAYA,GAEzB/C,EAAQl2F,KAAKD,EAAS4/D,GACxB,GAEJ,CACA25B,qBAAAA,GACE,GAAI/jM,KAAK8hL,OAAOI,kBAAmB,CACjC,MAAMye,EAAUz/C,IAAWlhJ,KAAK8hL,OAAOG,kBAQvC,OALI0e,GAGFtlC,GAAeslC,EAAQl2F,MAAK,IAAMzqG,KAAKgiL,cAAa,MAE/C2e,CACT,CAAW3gM,KAAK6iK,MAAMi0B,uBAA4D,KAAnC92L,KAAK0xJ,SAASmyC,iBAC3D7jM,KAAK09L,UAAU,kBAEf19L,KAAKgkM,gBAET,CAQAF,eAAAA,GACE9jM,KAAKgiL,cAAa,GAClBhiL,KAAKikM,cAAe,EAGpBjkM,KAAKkkM,gBAAkBhjD,IAAAA,gBAA2BvwD,MAAMud,SAGxD8sB,GAAGkmB,IAAY,UAAWlhJ,KAAK05L,0BAG/Bx4C,IAAAA,gBAA2BvwD,MAAMud,SAAW,SAG5Ci5C,GAASjG,IAAAA,KAAiB,mBAM1BlhJ,KAAKk7H,QAAQ,kBACf,CASAy+D,kBAAAA,CAAmBp3F,GACC,WAAdA,EAAMxpG,MACoB,IAAxBiH,KAAKgiL,iBACFhiL,KAAKikM,aAGRjkM,KAAKgkM,iBAFLhkM,KAAKiiL,iBAMb,CAOA+hB,cAAAA,GACEhkM,KAAKgiL,cAAa,GAClBhiL,KAAKikM,cAAe,EACpBhpE,GAAIimB,IAAY,UAAWlhJ,KAAK05L,0BAGhCx4C,IAAAA,gBAA2BvwD,MAAMud,SAAWluG,KAAKkkM,gBAGjD38C,GAAYrG,IAAAA,KAAiB,mBAQ7BlhJ,KAAKk7H,QAAQ,iBACf,CASAmvC,uBAAAA,CAAwB/yK,GACtB,QAAcgD,IAAVhD,EACF,OAAO0I,KAAKy9L,SAAS,2BAEvBz9L,KAAK09L,UAAU,6BAA8BpmM,GAC7C0I,KAAK0xJ,SAAS2Y,wBAA0B/yK,EACxC0I,KAAKk7H,QAAQ,iCACf,CAcAumD,oBAAAA,CAAqB0iB,GACnB,YAAc7pM,IAAV6pM,GACFnkM,KAAKokM,wBAA0BD,OAC/BnkM,KAAK0iM,kCAGE1iM,KAAKokM,qBAChB,CAqBAj6B,uBAAAA,GACE,GAAInqK,KAAK0xJ,SAASiwB,gCAAkC5/B,IAAAA,yBAAmC,CACrF,MAAMsiD,EAAenjD,IAAAA,cAAyBlhJ,KAAK0I,KAAKY,SAYxD,OAXA+6L,EAAan9C,UAAYlnJ,KAAK0I,KAAKw+I,UACnCm9C,EAAan9C,UAAUnmJ,IAAI,qBACvBf,KAAK29L,aACP0G,EAAaz9L,YAAY5G,KAAK29L,YAAYj1L,KAAKqM,WAAU,IAEvD/U,KAAKskM,UACPD,EAAaz9L,YAAY5G,KAAKskM,SAAS57L,KAAKqM,WAAU,IAExDsvL,EAAaz9L,YAAY6/I,GAAS,IAAK,CACrCx1B,UAAW,gBACV,CAAC,EAAGjxH,KAAK2yJ,SAAS,mCACd5Q,IAAAA,yBAAkCwiD,cAAc,CAErD3kG,MAAO5/F,KAAKw4K,aACZ34E,OAAQ7/F,KAAKo4K,gBACZ3tE,MAAK+5F,IACNt6C,GAAwBs6C,GACxBxkM,KAAKswJ,IAAI/mJ,WAAWsM,aAAawuL,EAAcrkM,KAAKswJ,KACpDk0C,EAAU/iH,SAAS3nF,KAAK8M,YAAY5G,KAAKswJ,KACzCk0C,EAAU/iH,SAAS3nF,KAAKotJ,UAAUnmJ,IAAI,kBACtCf,KAAKuxJ,QAAQkwB,sBAAqB,GAClCzhL,KAAKuxJ,QAAQr2B,QAAQ,CACnB7jI,KAAM,wBACNmtM,cAIFA,EAAUtxG,iBAAiB,YAAYqP,IACrC,MAAMkiG,EAAWliG,EAAMh+F,OAAO4vJ,cAAc,aAC5CkwC,EAAa96L,WAAWwM,aAAa0uL,EAAUJ,GAC/CrkM,KAAKuxJ,QAAQkwB,sBAAqB,GAClCzhL,KAAKuxJ,QAAQr2B,QAAQ,wBAAwB,IAExCspE,IAEX,CACA,MAAI,kCAA8E,IAAnCxkM,KAAKqqK,0BAO3CrqK,KAAKy9L,SAAS,2BAEhBpzF,QAAQ+/D,OAAO,2BACxB,CAYAsX,oBAAAA,GACE,OAAI3/B,IAAAA,0BAAqCA,IAAAA,yBAAkC7rJ,QAEzE6rJ,IAAAA,yBAAkC7rJ,OAAO4mK,QAClCzyD,QAAQG,WAEb,gCAOK02C,IAAAA,4BAPT,CASF,CAaA0V,aAAAA,CAAcr0D,GACZ,MAAM,YACJ2/F,GACEliM,KAAK0xJ,SAGT,IAAKwwC,IAAgBA,EAAYwC,QAC/B,OAKqBh8L,KACrB,MAAMY,EAAUZ,EAAGY,QAAQtS,cAG3B,GAAI0R,EAAGi8L,kBACL,OAAO,EAMT,GAAgB,UAAZr7L,EACF,OAA+C,IAFvB,CAAC,SAAU,WAAY,SAAU,QAAS,QAAS,UAElDxQ,QAAQ4P,EAAGrR,MAKtC,OAA0C,IADrB,CAAC,YACFyB,QAAQwQ,EAAe,EAIzCs7L,CAAe5kM,KAAKswJ,IAAIvhJ,cAAc48E,iBAGP,oBAAxBu2G,EAAYwC,QACrBxC,EAAYwC,QAAQ7lM,KAAKmB,KAAMuiG,GAE/BviG,KAAK6kM,cAActiG,GAEvB,CAaAsiG,aAAAA,CAActiG,GACZ,MAAMmiG,EAAU1kM,KAAK0xJ,SAASwwC,YAAcliM,KAAK0xJ,SAASwwC,YAAYwC,QAAU,CAAC,GAG3E,cACJI,EAAgBC,GAA4C,MAA5BxiG,EAAMxpG,IAAI/B,cAAqB,QAC/DguM,EAAUD,GAA4C,MAA5BxiG,EAAMxpG,IAAI/B,cAAqB,aACzDiuM,EAAeF,GAA4C,MAA5BxiG,EAAMxpG,IAAI/B,eAAqD,MAA5BurG,EAAMxpG,IAAI/B,eAC1E0tM,EACJ,GAAII,EAAcjmM,KAAKmB,KAAMuiG,GAAQ,CACnCA,EAAMvH,iBACNuH,EAAM1I,kBACN,MAAMqrG,EAAW9zC,GAAYqD,aAAa,qBACQ,IAA9CvT,IAAWlhJ,KAAK8hL,OAAOC,oBACzBmjB,EAAS9lM,UAAUg1K,YAAYv1K,KAAKmB,KAAMuiG,EAE9C,MAAO,GAAIyiG,EAAQnmM,KAAKmB,KAAMuiG,GAAQ,CACpCA,EAAMvH,iBACNuH,EAAM1I,kBACau3D,GAAYqD,aAAa,cACjCr1J,UAAUg1K,YAAYv1K,KAAKmB,KAAMuiG,EAC9C,MAAO,GAAI0iG,EAAapmM,KAAKmB,KAAMuiG,GAAQ,CACzCA,EAAMvH,iBACNuH,EAAM1I,kBACau3D,GAAYqD,aAAa,cACjCr1J,UAAUg1K,YAAYv1K,KAAKmB,KAAMuiG,EAC9C,CACF,CAaAsoE,WAAAA,CAAYxzK,GACV,IAAI20K,EAGJ,IAAK,IAAIjuK,EAAI,EAAG4sH,EAAI3qH,KAAK0xJ,SAASiiB,UAAW51K,EAAI4sH,EAAEtsH,OAAQN,IAAK,CAC9D,MAAM61K,EAAWjpD,EAAE5sH,GACnB,IAAIm+J,EAAOlH,GAAKoW,QAAQwI,GASxB,GALK1X,IACHA,EAAO9K,GAAYqD,aAAamf,IAI7B1X,GAML,GAAIA,EAAK/lJ,gBACP61J,EAAM9P,EAAK2O,YAAYxzK,GACnB20K,GACF,OAAOA,OART5qB,GAAMn5I,MAAM,QAAQ2rK,qEAWxB,CACA,MAAO,EACT,CAaAuxB,YAAAA,CAAazhD,GAGX,MAAM0hD,EAAQplM,KAAK0xJ,SAASiiB,UAAUt9J,KAAIu9J,GACjC,CAACA,EAAU5e,GAAKoW,QAAQwI,MAC9BjoK,QAAOi+H,IAAsB,IAApBgqC,EAAU1X,GAAKtyB,EAEzB,OAAIsyB,EAEKA,EAAK/lJ,eAEdirI,GAAMn5I,MAAM,QAAQ2rK,uEACb,EAAK,IAMRyxB,EAAiC,SAAUC,EAAYC,EAAYC,GACvE,IAAI9P,EASJ,OARA4P,EAAWp4E,MAAKu4E,GACPF,EAAWr4E,MAAKw4E,IAErB,GADAhQ,EAAQ8P,EAAOC,EAAaC,GACxBhQ,EACF,OAAO,CACT,MAGGA,CACT,EACA,IAAIiQ,EACJ,MACMC,EAASA,CAAAn3D,EAAmBjqI,KAAW,IAA5BovK,EAAU1X,GAAKztB,EAC9B,GAAIytB,EAAK6O,cAAcvmK,EAAQxE,KAAK0xJ,SAASkiB,EAAS58K,gBACpD,MAAO,CACLwN,SACA03J,KAAM0X,EAEV,EAPWhsK,MAmBb,OALE+9L,EAFE3lM,KAAK0xJ,SAASm0C,YAEKR,EAA+B3hD,EAAS0hD,GAdlDx9L,EAc8Dg+L,EAdxD,CAAC9mH,EAAG4H,IAAM9+E,EAAG8+E,EAAG5H,KAiBZumH,EAA+BD,EAAO1hD,EAASkiD,GAE/DD,IAAsB,CAC/B,CAmBAG,UAAAA,CAAWthM,EAAQuhM,GAEjB,GAAsB,qBAAXvhM,EACT,OAAOxE,KAAK+2K,OAAOhrK,KAAO,GAIxB/L,KAAKgmM,oBACPhmM,KAAKgmM,qBAKP,MAAMtiD,EAAU6rB,GAAa/qK,GAK7B,GAAKk/I,EAAQrlJ,QAsDb,GA3CA2B,KAAK+7L,cAAe,EAIfgK,IACH/lM,KAAK+2K,OAAOrzB,QAAUA,GAExB1jJ,KAAK4gM,oBAAoBl9C,EAAQ,IAGjC2oB,GAAUrsK,KAAM0jJ,EAAQ,IAAI,CAACuiD,EAAkB74B,KAC7CptK,KAAKw8L,YAAcpvB,EAId24B,IACH/lM,KAAK+2K,OAAOrzB,QAAUA,GAExB1jJ,KAAK4gM,oBAAoBqF,GAEzB,GADYjmM,KAAKkmM,KAAKD,GAEpB,OAAIviD,EAAQrlJ,OAAS,EACZ2B,KAAK8lM,WAAWpiD,EAAQ1qJ,MAAM,KAEvCgH,KAAK+7L,cAAe,EAGpB/7L,KAAKlE,YAAW,WACdkE,KAAKiI,MAAM,CACTtK,KAAM,EACN0Q,QAASrO,KAAK0xJ,SAASy0C,qBAE3B,GAAG,QAIHnmM,KAAKq1J,gBA12db,IAAiByX,EAAY5Q,EAAZ4Q,EA62dHM,EA72delR,EA62dVl8J,KAAK6iK,MA52dtBiK,EAAWn0K,SAAQ00K,GAAMA,EAAG+4B,SAAW/4B,EAAG+4B,QAAQlqC,IA42dtB,IAItBxY,EAAQrlJ,OAAS,EAAG,CACtB,MAAMrE,EAAQA,KAEZgG,KAAKiI,MAAM,MACXjI,KAAK8lM,WAAWpiD,EAAQ1qJ,MAAM,IAAI,EAAK,EAEnCqtM,EAAyBA,KAC7BrmM,KAAKi7H,IAAI,QAASjhI,EAAM,EAE1BgG,KAAKmtJ,IAAI,QAASnzJ,GAClBgG,KAAKmtJ,IAAI,UAAWk5C,GACpBrmM,KAAKgmM,mBAAqB,KACxBhmM,KAAKi7H,IAAI,QAASjhI,GAClBgG,KAAKi7H,IAAI,UAAWorE,EAAuB,CAE/C,OApEErmM,KAAKlE,YAAW,WACdkE,KAAKiI,MAAM,CACTtK,KAAM,EACN0Q,QAASrO,KAAK0xJ,SAASy0C,qBAE3B,GAAG,EAgEP,CAiBAp6L,GAAAA,CAAIvH,GACF,OAAOxE,KAAK8lM,WAAWthM,GAAQ,EACjC,CAeA0hM,IAAAA,CAAK1hM,GACH,MAAM8hM,EAAatmM,KAAKmlM,aAAa,CAAC3gM,IACtC,OAAK8hM,IAGAv1C,GAAgBu1C,EAAWpqC,KAAMl8J,KAAKw+L,YAY3Cx+L,KAAKqxJ,OAAM,WAKLrxJ,KAAK6iK,MAAMvjK,YAAYF,UAAUvB,eAAe,aAClDmC,KAAK09L,UAAU,YAAal5L,GAE5BxE,KAAK09L,UAAU,MAAOl5L,EAAOuH,KAE/B/L,KAAK+7L,cAAe,CACtB,IAAG,IACI,IAvBL/7L,KAAK+7L,cAAe,EAEpB/7L,KAAK6zK,UAAUyyB,EAAWpqC,KAAMoqC,EAAW9hM,QAC3CxE,KAAK6iK,MAAMxR,OAAM,KACfrxJ,KAAK+7L,cAAe,CAAK,KAEpB,GAkBX,CAKAl3B,IAAAA,GAGM7kK,KAAK6iK,OAAS7iK,KAAK6iK,MAAM0jC,IAC3BvmM,KAAK+L,IAAI/L,KAAKqhM,iBAGhBrhM,KAAK09L,UAAU,OACjB,CAOAn9L,KAAAA,GACE,GAAIP,KAAK09J,SACP19J,KAAKwmM,eACA,CAELnrC,GADoBr7J,KAAKsxJ,OACE7mD,MAAK,IAAMzqG,KAAKwmM,aAC7C,CACF,CACAA,QAAAA,GACMxmM,KAAK6iK,OACP7iK,KAAK6iK,MAAM0F,YAAY,QAEzBvoK,KAAKunJ,YAAY,eACjBvnJ,KAAKmnJ,SAAS,cACdnnJ,KAAK47L,cACL57L,KAAKi1K,OAAO,IACZj1K,KAAK6zK,UAAU7zK,KAAK0xJ,SAASiiB,UAAU,GAAI,MAC3C3zK,KAAK09L,UAAU,SACf19L,KAAKymM,qBACLzmM,KAAKiI,MAAM,MACPjI,KAAKskM,UACPtkM,KAAKskM,SAASxvB,OAAO,CACnBlgD,WAAOt6H,EACP+iK,iBAAa/iK,IAGbg0J,GAAUtuJ,OACZA,KAAKk7H,QAAQ,cAEjB,CAMAurE,kBAAAA,GACEzmM,KAAKkjM,oBACLljM,KAAK0mM,qBACL1mM,KAAK2mM,iBACP,CAKAzD,iBAAAA,GACEljM,KAAKikK,YAAY,GACjB,MAAM,mBACJ2iC,EAAkB,gBAClBC,EAAe,gBACfC,EAAe,qBACflrB,GACE57K,KAAK+3K,YAAc,CAAC,GAClB,QACJ+I,GACEgmB,GAAmB,CAAC,EACpBF,GACFA,EAAmBxrB,gBAEjByrB,GACFA,EAAgBzrB,gBAEdQ,GACFA,EAAqBR,gBAEnB0F,IACFA,EAAQhM,SACJgM,EAAQimB,iBACVjmB,EAAQimB,gBAAgBjyB,SAG9B,CAKA4xB,kBAAAA,GACE1mM,KAAK6qL,aAAa7qL,KAAK6iM,uBACvB7iM,KAAKigM,uBACP,CAKA0G,eAAAA,GACE3mM,KAAK0tK,OAAO,GACZ1tK,KAAKk7H,QAAQ,eACf,CAQA8rE,cAAAA,GACE,MAAMxiM,EAASxE,KAAKqhM,gBACd39C,EAAU,GAMhB,OAHmC,IAA/BvkJ,OAAO0M,KAAKrH,GAAQnG,QACtBqlJ,EAAQvqJ,KAAKqL,GAERxE,KAAK+2K,OAAOrzB,SAAWA,CAChC,CAQA29C,aAAAA,GACE,OAAOrhM,KAAK+2K,OAAOvyK,QAAU,CAAC,CAChC,CASAqvL,UAAAA,GACE,OAAO7zL,KAAKqhM,iBAAmBrhM,KAAKqhM,gBAAgBt1L,KAAO,EAC7D,CAUAu1K,WAAAA,GACE,OAAOthL,KAAKqhM,iBAAmBrhM,KAAKqhM,gBAAgBhqM,MAAQ,EAC9D,CAYA2+L,OAAAA,CAAQ1+L,GACN,YAAcgD,IAAVhD,GACF0I,KAAK09L,UAAU,aAAcpmM,QAC7B0I,KAAK0xJ,SAASskC,QAAU1+L,IAGnB0I,KAAKy9L,SAAS,UACvB,CAmBAvB,QAAAA,CAAS5kM,GAEP,QAAcgD,IAAVhD,EACF,OAAO0I,KAAK0xJ,SAASwqC,WAAY,EAEnC,IAAI+K,EAGiB,kBAAV3vM,GAAsB,mBAAmBmI,KAAKnI,KAAoB,IAAVA,GAAkB0I,KAAK0xJ,SAAS+sC,mBACjGz+L,KAAK0xJ,SAASwqC,SAAW5kM,EACzB0I,KAAKsgM,gBAAiC,kBAAVhpM,EAAqBA,EAAQ,QACzD2vM,GAAe,GASfjnM,KAAK0xJ,SAASwqC,WALJ5kM,EAOZ2vM,EAAuC,qBAAjBA,EAA+BjnM,KAAK0xJ,SAASwqC,SAAW+K,EAM1EjnM,KAAK6iK,OACP7iK,KAAK09L,UAAU,cAAeuJ,EAElC,CAkBAz8B,WAAAA,CAAYlzK,GAKV,YAJcgD,IAAVhD,IACF0I,KAAK09L,UAAU,iBAAkBpmM,GACjC0I,KAAK0xJ,SAAS8Y,YAAclzK,GAEvB0I,KAAKy9L,SAAS,cACvB,CAaAkB,IAAAA,CAAKrnM,GACH,YAAcgD,IAAVhD,GACF0I,KAAK09L,UAAU,UAAWpmM,QAC1B0I,KAAK0xJ,SAASitC,KAAOrnM,IAGhB0I,KAAKy9L,SAAS,OACvB,CAcAxoB,MAAAA,CAAOlpK,GACL,QAAYzR,IAARyR,EACF,OAAO/L,KAAK67L,QAKT9vL,IACHA,EAAM,IAEJA,IAAQ/L,KAAK67L,UAKjB77L,KAAK67L,QAAU9vL,EAGf/L,KAAK09L,UAAU,YAAa3xL,GAC5B/L,KAAKi7L,mBAAoB,EASzBj7L,KAAKk7H,QAAQ,gBACf,CAcA6kE,uBAAAA,GACE,KAAM//L,KAAK67L,SAAW77L,KAAK0xJ,SAASktC,wBAA0B5+L,KAAK6iK,OAAS7iK,KAAK6iK,MAAMoS,OAAQ,CAC7F,MAAMiyB,EAAYlnM,KAAK6iK,MAAMoS,UAAY,GACrCiyB,IAAclnM,KAAK67L,UACrB77L,KAAK67L,QAAUqL,EACflnM,KAAKi7L,mBAAoB,EAGzBj7L,KAAKk7H,QAAQ,gBAEjB,CACF,CAeA4iC,QAAAA,CAASr4E,GACP,QAAanrF,IAATmrF,EACF,QAASzlF,KAAK87L,UAEhBr2G,IAASA,EAGLzlF,KAAK87L,YAAcr2G,IAGvBzlF,KAAK87L,UAAYr2G,EACbzlF,KAAKkgM,uBACPlgM,KAAK09L,UAAU,cAAej4G,GAE5BzlF,KAAK87L,WACP97L,KAAKunJ,YAAY,yBACjBvnJ,KAAKmnJ,SAAS,wBAKdnnJ,KAAKk7H,QAAQ,mBACRl7H,KAAKkgM,uBACRlgM,KAAKmgM,8BAGPngM,KAAKunJ,YAAY,wBACjBvnJ,KAAKmnJ,SAAS,yBAKdnnJ,KAAKk7H,QAAQ,oBACRl7H,KAAKkgM,uBACRlgM,KAAKqgM,gCAGX,CAoBAH,mBAAAA,CAAoBz6G,GAClB,QAAanrF,IAATmrF,EACF,QAASzlF,KAAKmnM,qBAEhB1hH,IAASA,EAGLzlF,KAAKmnM,uBAAyB1hH,IAGlCzlF,KAAKmnM,qBAAuB1hH,EACxBzlF,KAAKmnM,sBACPnnM,KAAKmnJ,SAAS,6BAQdnnJ,KAAKk7H,QAAQ,yBAEbl7H,KAAKunJ,YAAY,6BAQjBvnJ,KAAKk7H,QAAQ,wBAEjB,CAeAjzH,KAAAA,CAAMzR,GACJ,QAAY8D,IAAR9D,EACF,OAAOwJ,KAAK2oK,QAAU,KAexB,GAXAhoB,GAAM,eAAehoJ,SAAQyuM,IAC3B,MAAMC,EAASD,EAAapnM,KAAMxJ,GAC5ByzI,GAASo9D,KAAYpuM,MAAMC,QAAQmuM,IAA6B,kBAAXA,GAAyC,kBAAXA,GAAkC,OAAXA,EAIhH7wM,EAAM6wM,EAHJrnM,KAAKg2F,IAAI/tF,MAAM,qEAGL,IAKVjI,KAAK0xJ,SAAS41C,2BAA6B9wM,GAAoB,IAAbA,EAAImH,KAAY,CACpE,MAAM4pM,EAAyB,WAC7BvnM,KAAKiI,MAAMzR,EACb,EAMA,OALAwJ,KAAK0xJ,SAAS41C,2BAA4B,EAC1CtnM,KAAK6lF,IAAI,CAAC,QAAS,cAAe0hH,QAClCvnM,KAAKmtJ,IAAI,aAAa,WACpBntJ,KAAKi7H,IAAI,CAAC,QAAS,cAAessE,EACpC,GAEF,CAGA,GAAY,OAAR/wM,EAMF,OALAwJ,KAAK2oK,OAAS,KACd3oK,KAAKunJ,YAAY,kBACbvnJ,KAAK8wK,cACP9wK,KAAK8wK,aAAahU,SAItB98J,KAAK2oK,OAAS,IAAIzN,GAAW1kK,GAG7BwJ,KAAKmnJ,SAAS,aAId/F,GAAMn5I,MAAM,SAASjI,KAAK2oK,OAAOhrK,QAAQu9J,GAAWI,WAAWt7J,KAAK2oK,OAAOhrK,SAAUqC,KAAK2oK,OAAOt6J,QAASrO,KAAK2oK,QAM/G3oK,KAAKk7H,QAAQ,SAGbylB,GAAM,SAAShoJ,SAAQyuM,GAAgBA,EAAapnM,KAAMA,KAAK2oK,SAEjE,CAQAnR,kBAAAA,CAAmBj1D,GACjBviG,KAAKwnM,eAAgB,CACvB,CAgBAl0B,UAAAA,CAAW7tF,GACT,QAAanrF,IAATmrF,EACF,OAAOzlF,KAAKm7L,YAGd,IADA11G,IAASA,KACIzlF,KAAKm7L,YAAlB,CAIA,GADAn7L,KAAKm7L,YAAc11G,EACfzlF,KAAKm7L,YASP,OARAn7L,KAAKwnM,eAAgB,EACrBxnM,KAAKunJ,YAAY,qBACjBvnJ,KAAKmnJ,SAAS,wBAKdnnJ,KAAKk7H,QAAQ,cAYXl7H,KAAK6iK,OACP7iK,KAAK6iK,MAAM1V,IAAI,aAAa,SAAUx1J,GACpCA,EAAEkiG,kBACFliG,EAAEqjG,gBACJ,IAEFh7F,KAAKwnM,eAAgB,EACrBxnM,KAAKunJ,YAAY,mBACjBvnJ,KAAKmnJ,SAAS,qBAKdnnJ,KAAKk7H,QAAQ,eAnCb,CAoCF,CAOA0hE,sBAAAA,GACE,IAAI6K,EACAC,EACAC,EACJ,MAAMC,EAAiBv6C,GAAMrtJ,KAAMA,KAAKw3J,oBAqBlCqwC,EAA6B,SAAUtlG,GAC3CqlG,IAEA5nM,KAAK03J,cAAc+vC,EACrB,EAGAznM,KAAKg7H,GAAG,aAlBgB,WACtB4sE,IAIA5nM,KAAK03J,cAAc+vC,GAInBA,EAAkBznM,KAAK23J,YAAYiwC,EAAgB,IACrD,IASA5nM,KAAKg7H,GAAG,aA5BgB,SAAUrjI,GAG5BA,EAAEykG,UAAYsrG,GAAa/vM,EAAE0kG,UAAYsrG,IAC3CD,EAAY/vM,EAAEykG,QACdurG,EAAYhwM,EAAE0kG,QACdurG,IAEJ,IAqBA5nM,KAAKg7H,GAAG,UAAW6sE,GACnB7nM,KAAKg7H,GAAG,aAAc6sE,GACtB,MAAM9vB,EAAa/3K,KAAKqzJ,SAAS,cA0BjC,IAAIuvC,GAtBA7qB,GAAe/xB,IAAW9B,KAC5B6zB,EAAW/8C,GAAG,cAAc,SAAUz4B,GACa,IAA7CviG,KAAKorJ,SAASsG,SAASkxC,oBACzB5iM,KAAKorJ,SAAS2rB,OAAO6rB,kBAAoB5iM,KAAKorJ,SAASsG,SAASkxC,mBAElE5iM,KAAKorJ,SAASsG,SAASkxC,kBAAoB,CAC7C,IACA7qB,EAAW/8C,GAAG,cAAc,SAAUz4B,GACpCviG,KAAKorJ,SAASsG,SAASkxC,kBAAoB5iM,KAAKorJ,SAAS2rB,OAAO6rB,iBAClE,KAKF5iM,KAAKg7H,GAAG,UAAW4sE,GACnB5nM,KAAKg7H,GAAG,QAAS4sE,GAwCjB5nM,KAAK23J,aA9BiB,WAEpB,IAAK33J,KAAKwnM,cACR,OAIFxnM,KAAKwnM,eAAgB,EAGrBxnM,KAAKszK,YAAW,GAGhBtzK,KAAK5E,aAAawnM,GAClB,MAAM3oM,EAAU+F,KAAK0xJ,SAASkxC,kBAC1B3oM,GAAW,IAMf2oM,EAAoB5iM,KAAKlE,YAAW,WAI7BkE,KAAKwnM,eACRxnM,KAAKszK,YAAW,EAEpB,GAAGr5K,GACL,GACgC,IAClC,CAgBA4wL,YAAAA,CAAaD,GACX,QAAatwL,IAATswL,EAMJ,OAAI5qL,KAAK6iK,OAAS7iK,KAAK6iK,MAAM2I,qBACpBxrK,KAAK+2K,OAAO2qB,kBAAoB1hM,KAAKy9L,SAAS,gBAEhD,EANLz9L,KAAK09L,UAAU,kBAAmB9S,EAOtC,CAiBAiY,mBAAAA,CAAoBjY,GAClB,YAAatwL,IAATswL,EACK5qL,KAAK09L,UAAU,yBAA0B9S,GAE9C5qL,KAAK6iK,OAAS7iK,KAAK6iK,MAAM2I,qBACpBxrK,KAAKy9L,SAAS,uBAEhB,CACT,CAaA3jB,OAAAA,CAAQr0F,GACN,QAAanrF,IAATmrF,EAIJ,QAASzlF,KAAK8nM,SAHZ9nM,KAAK8nM,WAAariH,CAItB,CACAs1G,kCAAAA,GACE,MAAMhjB,EAAa/3K,KAAKqzJ,SAAS,cAC5B0kB,GAAc/3K,KAAKu7L,gBAAgBzjB,mBAAqBC,EAAWxhB,kBAGxEv2J,KAAKu7L,gBAAgBzjB,iBAAmBC,EAAWxhB,gBACnDv2J,KAAK6/F,OAAO7/F,KAAKu7L,gBAAgBzjB,kBACnC,CACAiwB,kBAAAA,GAEE/nM,KAAKmnJ,SAAS,uBACd,MAAM6gD,EAAiBhoM,KAAK+sF,WACtBgrF,EAAa/3K,KAAKqzJ,SAAS,cAC3BykB,EAAmBC,GAAcA,EAAWxhB,gBAIlDyxC,EAAervM,SAAQiY,IACjBA,IAAUmnK,GAGVnnK,EAAM0/I,MAAQ1/I,EAAMm2I,SAAS,gBAC/Bn2I,EAAMkiH,OACN9yH,KAAKu7L,gBAAgBC,eAAeriM,KAAKyX,GAC3C,IAEF5Q,KAAKu7L,gBAAgBvjB,aAAeh4K,KAAKu2J,gBACzCv2J,KAAKu7L,gBAAgBzjB,iBAAmBA,EACxC93K,KAAKg7H,GAAG,eAAgBh7H,KAAK86L,yCAG7B96L,KAAK6/F,OAAOi4E,GACZ93K,KAAKk7H,QAAQ,sBACf,CACA+sE,mBAAAA,GACEjoM,KAAKunJ,YAAY,uBACjBvnJ,KAAKi7H,IAAI,eAAgBj7H,KAAK86L,yCAG9B96L,KAAKu7L,gBAAgBC,eAAe7iM,SAAQiY,GAASA,EAAM+kJ,SAG3D31J,KAAK6/F,OAAO7/F,KAAKu7L,gBAAgBvjB,cACjCh4K,KAAKk7H,QAAQ,sBACf,CAeAsmD,aAAAA,CAAclqL,GACZ,GAAqB,mBAAVA,GAAuBA,IAAU0I,KAAKq7L,eAC/C,OAAOr7L,KAAKq7L,eAKd,GAHAr7L,KAAKq7L,eAAiB/jM,EAGlBA,EAAO,CACT,MAAM4wM,EAAe,GAYrB,OATIloM,KAAKyhL,wBACPymB,EAAa/uM,KAAK6G,KAAK0hL,wBAErB1hL,KAAKgiL,gBACPkmB,EAAa/uM,KAAK6G,KAAKiiL,kBAErBjiL,KAAKuhL,mBACP2mB,EAAa/uM,KAAK6G,KAAKuhL,iBAAgB,IAElCl3E,QAAQq4C,IAAIwlD,GAAcz9F,MAAK,IAAMzqG,KAAK+nM,sBACnD,CAGA,OAAO19F,QAAQG,UAAUC,MAAK,IAAMzqG,KAAKioM,uBAC3C,CACAE,mBAAAA,IAEenoM,KAAK6iK,OAAS7iK,KAAK6iK,OAC3B/vC,OACL9yH,KAAKmnJ,SAAS,yBACdnnJ,KAAKk7H,QAAQ,wBACf,CACAktE,oBAAAA,IAEepoM,KAAK6iK,OAAS7iK,KAAK6iK,OAC3BlN,OACL31J,KAAKunJ,YAAY,yBACjBvnJ,KAAKk7H,QAAQ,wBACf,CAYAqmD,eAAAA,CAAgBjqL,GACd,GAAqB,mBAAVA,GAAuBA,IAAU0I,KAAKs7L,iBAC/C,OAAOt7L,KAAKs7L,iBAGd,GADAt7L,KAAKs7L,iBAAmBhkM,EACpBA,EAAO,CACT,GAAI0I,KAAKwhL,gBAAiB,CAExB,OAD6BxhL,KAAKwhL,eAAc,GACpB/2E,MAAK,KAE/BzqG,KAAKmoM,qBAAqB,GAE9B,CACA,OAAO99F,QAAQG,UAAUC,MAAK,KAE5BzqG,KAAKmoM,qBAAqB,GAE9B,CACA,OAAO99F,QAAQG,UAAUC,MAAK,KAE5BzqG,KAAKooM,sBAAsB,GAE/B,CAuBAx+B,YAAAA,CAAaxJ,EAAMtyB,EAAOtL,GACxB,GAAIxiI,KAAK6iK,MACP,OAAO7iK,KAAK6iK,MAAM+G,aAAaxJ,EAAMtyB,EAAOtL,EAEhD,CAmBAg6B,kBAAAA,CAAmBljK,EAASywK,GAC1B,GAAI/pK,KAAK6iK,MACP,OAAO7iK,KAAK6iK,MAAMrG,mBAAmBljK,EAASywK,EAElD,CAYAvB,qBAAAA,GAAgC,IAAV1qK,EAAGmM,UAAA5L,OAAA,QAAA/D,IAAA2P,UAAA,GAAAA,UAAA,GAAG,CAAC,GACvB,MACFwnF,GACE3zF,EAQJ,GAPK2zF,IACHA,EAAQ3zF,GAMNkC,KAAK6iK,MACP,OAAO7iK,KAAK6iK,MAAM2F,sBAAsB/2E,EAE5C,CAYAy4E,uBAAAA,GACE,OAAOlqK,KAAKy9L,SAAS,0BACvB,CAQAjlB,UAAAA,GACE,OAAOx4K,KAAK6iK,OAAS7iK,KAAK6iK,MAAM2V,YAAcx4K,KAAK6iK,MAAM2V,cAAgB,CAC3E,CAQAJ,WAAAA,GACE,OAAOp4K,KAAK6iK,OAAS7iK,KAAK6iK,MAAMuV,aAAep4K,KAAK6iK,MAAMuV,eAAiB,CAC7E,CAoBA51C,QAAAA,CAAS7kI,GACP,QAAarD,IAATqD,EACF,OAAOqC,KAAKmqL,UAEVnqL,KAAKmqL,YAAcvyL,OAAO+F,GAAM3G,gBAClCgJ,KAAKmqL,UAAYvyL,OAAO+F,GAAM3G,cAG1Bs3J,GAAUtuJ,OAOZA,KAAKk7H,QAAQ,kBAGnB,CAUA23B,SAAAA,GACE,OAAOrP,GAAQkW,GAAOt6J,UAAUsyJ,SAASmB,UAAW7yJ,KAAK27L,WAC3D,CASA0M,MAAAA,GACE,MAAM/uM,EAAUkqJ,GAAQxjJ,KAAK0xJ,UACvByN,EAAS7lK,EAAQ6lK,OACvB7lK,EAAQ6lK,OAAS,GACjB,IAAK,IAAIphK,EAAI,EAAGA,EAAIohK,EAAO9gK,OAAQN,IAAK,CACtC,IAAI0zF,EAAQ0tE,EAAOphK,GAGnB0zF,EAAQ+xD,GAAQ/xD,GAChBA,EAAM25D,YAAS9wJ,EACfhB,EAAQ6lK,OAAOphK,GAAK0zF,CACtB,CACA,OAAOn4F,CACT,CAkBAgvM,WAAAA,CAAY5hD,EAASptJ,IACnBA,EAAUA,GAAW,CAAC,GACdotJ,QAAUA,GAAW,GAC7B,MAAM6hD,EAAQ,IAAI5rC,GAAY38J,KAAM1G,GAMpC,OALA0G,KAAKo0J,SAASm0C,GACdA,EAAMvtE,GAAG,WAAW,KAClBh7H,KAAKqS,YAAYk2L,EAAM,IAEzBA,EAAMjrM,OACCirM,CACT,CAOAtO,wBAAAA,GACE,IAAKj6L,KAAK88L,aACR,OAEF,MAAM0L,EAAoBxoM,KAAKwoM,oBACzBlyC,EAAet2J,KAAKs2J,eAC1B,IAAK,IAAIv4J,EAAI,EAAGA,EAAI86L,GAAiBx6L,OAAQN,IAAK,CAChD,MAAM0qM,EAAsB5P,GAAiB96L,GAE7C,GAAIu4J,GADat2J,KAAK0oM,aAAaD,GACL,CAE5B,GAAID,IAAsBC,EACxB,OAIED,GACFxoM,KAAKunJ,YAAYuxC,GAAmB0P,IAEtCxoM,KAAKmnJ,SAAS2xC,GAAmB2P,IACjCzoM,KAAK2oM,YAAcF,EACnB,KACF,CACF,CACF,CAOAG,wBAAAA,GACE,MAAM33E,EAAYjxH,KAAK6oM,yBACvB7oM,KAAK2oM,YAAc,GACf13E,GACFjxH,KAAKunJ,YAAYt2B,EAErB,CAsCA4rE,WAAAA,CAAYA,GAEV,YAAoBviM,IAAhBuiM,IAGJ78L,KAAK2oM,YAAc,GACnB3oM,KAAK0oM,aAAevpM,OAAOmF,OAAO,CAAC,EAAGy0L,GAAqB8D,GAI3D78L,KAAKi6L,4BAPI96L,OAAOmF,OAAOtE,KAAK0oM,aAW9B,CAeA5L,UAAAA,CAAWxlM,GAET,QAAcgD,IAAVhD,EACF,OAAO0I,KAAK8oM,YAMd,OAJAxxM,EAAQs6I,QAAQt6I,MACA0I,KAAK8oM,aAQrB9oM,KAAK8oM,YAAcxxM,EAIfA,GACF0I,KAAKg7H,GAAG,eAAgBh7H,KAAKg6L,+BAC7Bh6L,KAAKi6L,6BAILj6L,KAAKi7H,IAAI,eAAgBj7H,KAAKg6L,+BAC9Bh6L,KAAK4oM,4BAEAtxM,QAlBP,CAmBF,CASAkxM,iBAAAA,GACE,OAAOxoM,KAAK2oM,WACd,CAUAE,sBAAAA,GACE,OAAO/P,GAAmB94L,KAAK2oM,cAAgB,EACjD,CAwDAI,SAAAA,CAAU/mE,EAAOqvB,GACf,IAAKrvB,GAA0B,kBAAVA,EACnB,OAEF,MAAM4gC,EAAc5iK,KAAK4iK,cACzB5iK,KAAKO,QAGLP,KAAK+2K,OAAO/0C,MAAQwhB,GAAQxhB,GAC5B,MAAM,OACJgnE,EAAM,QACNC,EAAO,YACP5rC,EAAW,OACX4X,EAAM,IACNlpK,EAAG,WACHuwJ,EAAU,MACV1nC,GACE50H,KAAK+2K,OAAO/0C,OAGXinE,GAAWh0B,IACdj1K,KAAK+2K,OAAO/0C,MAAMinE,QAAU,CAAC,CAC3Bl9L,IAAKkpK,EACL59K,KAAMg4K,GAAY4F,MAGlBrS,GACF5iK,KAAK4iK,YAAYA,GAEf72J,GACF/L,KAAK+L,IAAIA,GAEPkpK,GACFj1K,KAAKi1K,OAAOA,GAEVh8K,MAAMC,QAAQojK,IAChBA,EAAW3jK,SAAQuwM,GAAMlpM,KAAKw8J,mBAAmB0sC,GAAI,KAEnDlpM,KAAKskM,UACPtkM,KAAKskM,SAASxvB,OAAO,CACnBlgD,QACAyoC,YAAaA,GAAe2rC,GAAU,KAG1ChpM,KAAKqxJ,MAAMA,EACb,CAUA83C,QAAAA,GACE,IAAKnpM,KAAK+2K,OAAO/0C,MAAO,CACtB,MAAMizC,EAASj1K,KAAKi1K,SAQdjzC,EAAQ,CACZj2H,IARU/L,KAAKgnM,iBASf1qC,WARiBrjK,MAAMmG,UAAUiX,IAAIxX,KAAKmB,KAAKupK,oBAAoB2/B,IAAM,CACzE9oC,KAAM8oC,EAAG9oC,KACTtyB,MAAOo7D,EAAGp7D,MACVtL,SAAU0mE,EAAG1mE,SACbz2H,IAAKm9L,EAAGn9L,SAaV,OAPIkpK,IACFjzC,EAAMizC,OAASA,EACfjzC,EAAMinE,QAAU,CAAC,CACfl9L,IAAKi2H,EAAMizC,OACX59K,KAAMg4K,GAAYrtC,EAAMizC,WAGrBjzC,CACT,CACA,OAAOwhB,GAAQxjJ,KAAK+2K,OAAO/0C,MAC7B,CAYA,qBAAOu3D,CAAejvG,GACpB,MAAM8+G,EAAc,CAClB1lD,QAAS,GACTyb,OAAQ,IAEJkqC,EAAarhD,GAAc19D,GAC3Bg/G,EAAYD,EAAW,cAS7B,GARItiD,GAASz8D,EAAK,cAChB++G,EAAW7rC,MAAO,GAEhBzW,GAASz8D,EAAK,eAChB++G,EAAW/L,OAAQ,GAIH,OAAdgM,EAEF,IAEEnqM,OAAOmF,OAAO+kM,EAAYruM,KAAKC,MAAMquM,GAAa,MACpD,CAAE,MAAO3xM,GACPypJ,GAAMn5I,MAAM,aAActQ,EAC5B,CAKF,GAHAwH,OAAOmF,OAAO8kM,EAAaC,GAGvB/+G,EAAIr0E,gBAAiB,CACvB,MAAM82E,EAAWzC,EAAI35E,WACrB,IAAK,IAAI5S,EAAI,EAAG4sH,EAAI59B,EAAS1uF,OAAQN,EAAI4sH,EAAG5sH,IAAK,CAC/C,MAAM6S,EAAQm8E,EAAShvF,GAEjBwrM,EAAY34L,EAAM/V,SAAS7D,cACf,WAAduyM,EACFH,EAAY1lD,QAAQvqJ,KAAK6uJ,GAAcp3I,IAChB,UAAd24L,GACTH,EAAYjqC,OAAOhmK,KAAK6uJ,GAAcp3I,GAE1C,CACF,CACA,OAAOw4L,CACT,CAUAzmD,KAAAA,CAAMmU,GACJ,QAAgBx8J,IAAZw8J,EACF,OAAO92J,KAAKo7L,cAEVtkC,GACF92J,KAAKk7H,QAAQ,WACbl7H,KAAKwpM,kBAAoBxpM,KAAKg2F,IAAIyrD,MAClCzhJ,KAAKg2F,IAAIyrD,MAAM,SACfzhJ,KAAKo7L,eAAgB,IAErBp7L,KAAKk7H,QAAQ,YACbl7H,KAAKg2F,IAAIyrD,MAAMzhJ,KAAKwpM,mBACpBxpM,KAAKwpM,uBAAoBlvM,EACzB0F,KAAKo7L,eAAgB,EAEzB,CAcA/P,aAAAA,CAAcoe,GACZ,QAAiBnvM,IAAbmvM,EACF,OAAOzpM,KAAK+2K,OAAOsU,cAIhBpyL,MAAMC,QAAQuwM,IAKdA,EAASryL,OAAMwzK,GAAwB,kBAATA,MAGnC5qL,KAAK+2K,OAAOsU,cAAgBoe,EAQ5BzpM,KAAKk7H,QAAQ,uBACf,EAkFFirC,GAAI3S,MAAM76J,SAAQ,SAAU4G,GAC1B,MAAMwlF,EAAQohF,GAAI5mK,GAClBm6J,GAAOt6J,UAAU2lF,EAAMwgF,YAAc,WACnC,OAAIvlK,KAAK6iK,MACA7iK,KAAK6iK,MAAM99E,EAAMwgF,eAK1BvlK,KAAK+kF,EAAMygF,aAAexlK,KAAK+kF,EAAMygF,cAAgB,IAAIzgF,EAAMkgF,UACxDjlK,KAAK+kF,EAAMygF,aACpB,CACF,IAiBA9L,GAAOt6J,UAAU41K,YAActb,GAAOt6J,UAAUwjK,YAUhDlJ,GAAOC,QAAU,CAAC,EAClB,MAAMliC,GAAYsqB,IAAAA,UAUlB2X,GAAOt6J,UAAUsyJ,SAAW,CAE1BiiB,UAAW3e,GAAKmW,kBAChBu+B,MAAO,CAAC,EAERxV,iBAAiB,EAEjB0O,kBAAmB,IAEnBvX,cAAe,GAGf8F,QAAQ,EAERpkG,SAAU,CAAC,cAAe,cAAe,WAAY,mBAAoB,iBAAkB,gBAAiB,cAAe,aAAc,eAAgB,oBAAqB,iBAC9Ky1C,SAAU/K,KAAcA,GAAUo7B,WAAap7B,GAAUo7B,UAAU,IAAMp7B,GAAUkyE,cAAgBlyE,GAAU+K,WAAa,KAE1HqwB,UAAW,CAAC,EAEZszC,oBAAqB,iDACrB1H,mBAAmB,EACnBgE,WAAY,CACVnpM,QAAS,CACPswM,aAAc,SAGlB/M,YAAa,CAAC,EACdC,YAAY,EACZtb,eAAe,EACfD,iBAAiB,EACjB1qB,kBAAmB,CACjBC,SAAS,EACT4mB,gBAAgB,GAGlBvC,qBAAqB,GAEvBod,GAAsB5/L,SAAQ,SAAU4pG,GACtCm3D,GAAOt6J,UAAU,aAAa0xJ,GAAcvuD,OAAa,WACvD,OAAOviG,KAAKk7H,QAAQ34B,EACtB,CACF,IAgCA6uD,GAAYgI,kBAAkB,SAAUM,IAaxC,MAAMmwC,GAAmB,SASnBC,GAAmB,iBAQnBC,GAAgB,CAAC,EAYjBC,GAAezqM,GAAQwqM,GAAclsM,eAAe0B,GAYpD0qM,GAAY1qM,GAAQyqM,GAAazqM,GAAQwqM,GAAcxqM,QAAQjF,EAc/D4vM,GAAqBA,CAAC9+C,EAAQ7rJ,KAClC6rJ,EAAO0+C,IAAoB1+C,EAAO0+C,KAAqB,CAAC,EACxD1+C,EAAO0+C,IAAkBvqM,IAAQ,CAAI,EAiBjC4qM,GAAoBA,CAAC/+C,EAAQtgC,EAAMs/E,KACvC,MAAMhV,GAAagV,EAAS,SAAW,IAAM,cAC7Ch/C,EAAOlwB,QAAQk6D,EAAWtqE,GAC1BsgC,EAAOlwB,QAAQk6D,EAAY,IAAMtqE,EAAKvrH,KAAMurH,EAAK,EA6D7Cu/E,GAAsBA,CAAC9qM,EAAM+qM,KAGjCA,EAAelrM,UAAUG,KAAOA,EACzB,WACL4qM,GAAkBnqM,KAAM,CACtBT,OACAgrM,OAAQD,EACRziG,SAAU,OACT,GAAM,QAAA2iG,EAAAvgM,UAAA5L,OALS+8H,EAAI,IAAAniI,MAAAuxM,GAAAC,EAAA,EAAAA,EAAAD,EAAAC,IAAJrvE,EAAIqvE,GAAAxgM,UAAAwgM,GAMtB,MAAM5iG,EAAW,IAAIyiG,KAAkB,CAACtqM,QAASo7H,IAKjD,OAFAp7H,KAAKT,GAAQ,IAAMsoG,EACnBsiG,GAAkBnqM,KAAM6nG,EAAS6iG,gBAC1B7iG,CACT,GAiBF,MAAM8iG,GASJrrM,WAAAA,CAAY8rJ,GACV,GAAIprJ,KAAKV,cAAgBqrM,GACvB,MAAM,IAAIlxM,MAAM,0DAElBuG,KAAKorJ,OAASA,EACTprJ,KAAKg2F,MACRh2F,KAAKg2F,IAAMh2F,KAAKorJ,OAAOp1D,IAAIisD,aAAajiJ,KAAKT,OAK/C4wJ,GAAQnwJ,aACDA,KAAKk7H,QACZy1B,GAAS3wJ,KAAMA,KAAKV,YAAYsxJ,cAChCs5C,GAAmB9+C,EAAQprJ,KAAKT,MAIhCS,KAAKu7H,QAAUv7H,KAAKu7H,QAAQx8H,KAAKiB,MAGjCorJ,EAAOpwB,GAAG,UAAWh7H,KAAKu7H,QAC5B,CAKA5lH,OAAAA,GACE,OAAO3V,KAAKV,YAAYsrM,OAC1B,CAcAF,YAAAA,GAAwB,IAAX5/E,EAAI7gH,UAAA5L,OAAA,QAAA/D,IAAA2P,UAAA,GAAAA,UAAA,GAAG,CAAC,EAInB,OAHA6gH,EAAKvrH,KAAOS,KAAKT,KACjBurH,EAAKy/E,OAASvqM,KAAKV,YACnBwrH,EAAKjjB,SAAW7nG,KACT8qH,CACT,CAgBAoQ,OAAAA,CAAQ34B,GAAkB,IAAXuoB,EAAI7gH,UAAA5L,OAAA,QAAA/D,IAAA2P,UAAA,GAAAA,UAAA,GAAG,CAAC,EACrB,OAAOixH,GAAQl7H,KAAKuuJ,YAAahsD,EAAOviG,KAAK0qM,aAAa5/E,GAC5D,CAcA+lC,kBAAAA,CAAmBl5J,GAAI,CAUvB4jI,OAAAA,GACE,MAAM,KACJh8H,EAAI,OACJ6rJ,GACEprJ,KAQJA,KAAKk7H,QAAQ,WACbl7H,KAAKi7H,MACLmwB,EAAOnwB,IAAI,UAAWj7H,KAAKu7H,SAK3B6vB,EAAO0+C,IAAkBvqM,IAAQ,EACjCS,KAAKorJ,OAASprJ,KAAK25G,MAAQ,KAI3ByxC,EAAO7rJ,GAAQ8qM,GAAoB9qM,EAAMwqM,GAAcxqM,GACzD,CAYA,cAAOsrM,CAAQN,GACb,MAAMt+L,EAAsB,kBAAXs+L,EAAsBN,GAAUM,GAAUA,EAC3D,MAAoB,oBAANt+L,IAAqB0+L,GAAOvrM,UAAUm6J,cAActtJ,EAAE7M,UACtE,CAiBA,qBAAO0rM,CAAevrM,EAAMgrM,GAC1B,GAAoB,kBAAThrM,EACT,MAAM,IAAI9F,MAAM,yBAAyB8F,oCAAuCA,MAElF,GAAIyqM,GAAazqM,GACf6hJ,GAAM/1I,KAAK,mBAAmB9L,yEACzB,GAAIm6J,GAAOt6J,UAAUvB,eAAe0B,GACzC,MAAM,IAAI9F,MAAM,yBAAyB8F,2DAE3C,GAAsB,oBAAXgrM,EACT,MAAM,IAAI9wM,MAAM,uBAAuB8F,sCAAyCgrM,MAalF,OAXAR,GAAcxqM,GAAQgrM,EAIlBhrM,IAASsqM,KACPc,GAAOE,QAAQN,GACjB7wC,GAAOt6J,UAAUG,GA3PC,SAAUA,EAAMgrM,GACxC,MAAMQ,EAAqB,WAOzBZ,GAAkBnqM,KAAM,CACtBT,OACAgrM,SACA1iG,SAAU,OACT,GACH,MAAMA,EAAW0iG,EAAOzyM,MAAMkI,KAAMiK,WAOpC,OANAigM,GAAmBlqM,KAAMT,GACzB4qM,GAAkBnqM,KAAM,CACtBT,OACAgrM,SACA1iG,aAEKA,CACT,EAIA,OAHA1oG,OAAO0M,KAAK0+L,GAAQ5xM,SAAQ,SAAUk7D,GACpCk3I,EAAmBl3I,GAAQ02I,EAAO12I,EACpC,IACOk3I,CACT,CAiOiCC,CAAkBzrM,EAAMgrM,GAEjD7wC,GAAOt6J,UAAUG,GAAQ8qM,GAAoB9qM,EAAMgrM,IAGhDA,CACT,CAYA,uBAAOU,CAAiB1rM,GACtB,GAAIA,IAASsqM,GACX,MAAM,IAAIpwM,MAAM,mCAEduwM,GAAazqM,YACRwqM,GAAcxqM,UACdm6J,GAAOt6J,UAAUG,GAE5B,CAaA,iBAAO2rM,GAA+C,IAChDxyM,EAQJ,OATqBuR,UAAA5L,OAAA,QAAA/D,IAAA2P,UAAA,GAAAA,UAAA,GAAG9K,OAAO0M,KAAKk+L,KAE9BpxM,SAAQ4G,IACZ,MAAMgrM,EAASN,GAAU1qM,GACrBgrM,IACF7xM,EAASA,GAAU,CAAC,EACpBA,EAAO6G,GAAQgrM,EACjB,IAEK7xM,CACT,CAWA,uBAAOyyM,CAAiB5rM,GACtB,MAAMgrM,EAASN,GAAU1qM,GACzB,OAAOgrM,GAAUA,EAAOK,SAAW,EACrC,EAiIF,SAASQ,GAAkBtlD,EAAOulD,EAAS9oD,EAAS36I,GAClD,OAtBF,SAAmByG,EAASzG,GAC1B,IAAI0jM,GAAS,EACb,OAAO,WACAA,GACHlqD,GAAM/1I,KAAKgD,GAEbi9L,GAAS,EAAK,QAAAC,EAAAthM,UAAA5L,OAJI+8H,EAAI,IAAAniI,MAAAsyM,GAAAC,EAAA,EAAAA,EAAAD,EAAAC,IAAJpwE,EAAIowE,GAAAvhM,UAAAuhM,GAKtB,OAAO5jM,EAAG9P,MAAMkI,KAAMo7H,EACxB,CACF,CAaSvP,CAAU,GAAGw/E,0CAAgDvlD,mBAAuBvD,aAAoB36I,EACjH,CApHA+iM,GAAOV,UAAYA,GAOnBU,GAAOd,iBAAmBA,GAC1Bc,GAAOG,eAAejB,GAAkBc,IAOxCjxC,GAAOt6J,UAAUqsM,YAAc,SAAUlsM,GACvC,QAASS,KAAK8pM,MAAsD,IAAjC9pM,KAAK8pM,IAAkBvqM,EAC5D,EAOAm6J,GAAOt6J,UAAUssM,UAAY,SAAUnsM,GACrC,QAASyqM,GAAazqM,EACxB,EA8HA,MAAMosM,GAAcj1L,GAA0B,IAApBA,EAAG5d,QAAQ,KAAa4d,EAAG1d,MAAM,GAAK0d,EAsEhE,SAASk1L,GAAQl1L,EAAIpd,EAAS+3J,GAC5B,IAAIjG,EAASwgD,GAAQC,UAAUn1L,GAC/B,GAAI00I,EAOF,OANI9xJ,GACF8nJ,GAAM/1I,KAAK,WAAWqL,2DAEpB26I,GACFjG,EAAOiG,MAAMA,GAERjG,EAET,MAAM1iJ,EAAmB,kBAAPgO,EAAkB60G,GAAE,IAAMogF,GAAYj1L,IAAOA,EAC/D,IAAK0vI,GAAK19I,GACR,MAAM,IAAI9I,UAAU,sDAWtB,MACMksM,EADc,gBAAiBpjM,GAAKA,EAAGqjM,wBAAyBhqD,IAAAA,WACvCr5I,EAAGqjM,cAAgBrjM,EAAGqG,cAAcjV,KAC9D4O,EAAGqG,cAAci2F,aAAgB8mG,EAAS5nG,SAASx7F,IACtD04I,GAAM/1I,KAAK,oDAMa,KAJ1B/R,EAAUA,GAAW,CAAC,GAIVm5J,YACVn5J,EAAQm5J,WAAa/pJ,EAAGa,YAAcb,EAAGa,WAAWoO,cAAgBjP,EAAGa,WAAWoO,aAAa,mBAAqBjP,EAAGa,WAAab,GAAIqM,WAAU,IAEpJ4rI,GAAM,eAAehoJ,SAAQyuM,IAC3B,MAAMjuE,EAAOiuE,EAAa1+L,EAAI86I,GAAQlqJ,IACjC2wI,GAAS9Q,KAASlgI,MAAMC,QAAQigI,GAIrC7/H,EAAUkqJ,GAAQlqJ,EAAS6/H,GAHzBioB,GAAMn5I,MAAM,+CAGkB,IAKlC,MAAM+jM,EAAkB56C,GAAYqD,aAAa,UAGjD,OAFArJ,EAAS,IAAI4gD,EAAgBtjM,EAAIpP,EAAS+3J,GAC1C1Q,GAAM,SAAShoJ,SAAQyuM,GAAgBA,EAAah8C,KAC7CA,CACT,CAQA,GAPAwgD,GAAQlrD,OAASA,GACjBkrD,GAAQjrD,MAAQA,GAChBirD,GAAQK,KAhp1BK,SAAU50M,EAAMuQ,GAC3B+4I,GAAMtpJ,EAAMuQ,EACd,EA+o1BAgkM,GAAQM,SA9m1BS,SAAU70M,EAAMuQ,GAC/B+4I,GAAMtpJ,EAAM,GAAGqwG,OAAO9/F,GAAIyO,KAAI81L,IAC5B,MAAM38C,EAAU,WAEd,OADA5O,GAAWvpJ,EAAMm4J,GACV28C,KAASliM,UAClB,EACA,OAAOulJ,CAAO,IAElB,EAum1BAo8C,GAAQhrD,WAAaA,IAGqB,IAAtCmB,IAAAA,0BAA8CsD,KAAU,CAC1D,IAAI10D,EAAQ46B,GAAE,wBACd,IAAK56B,EAAO,CACVA,EAAQ66D,GAAmB,uBAC3B,MAAMjB,EAAOh/B,GAAE,QACXg/B,GACFA,EAAK10I,aAAa86E,EAAO45D,EAAKn6I,YAEhCq7I,GAAe96D,EAAO,0KAUxB,CACF,CAKAw6D,GAAiB,EAAGygD,IAOpBA,GAAQhB,QAAUnqD,GAQlBmrD,GAAQtyM,QAAUogK,GAAOt6J,UAAUsyJ,SAQnCk6C,GAAQQ,WAAa,IAAM1yC,GAAOC,QAgBlCiyC,GAAQC,UAAYn1L,IAClB,MAAMijJ,EAAUD,GAAOC,QACvB,IAAIrvE,EACJ,GAAkB,kBAAP5zE,EAAiB,CAC1B,MAAM21L,EAAMV,GAAYj1L,GAClB00I,EAASuO,EAAQ0yC,GACvB,GAAIjhD,EACF,OAAOA,EAET9gE,EAAMihC,GAAE,IAAM8gF,EAChB,MACE/hH,EAAM5zE,EAER,GAAI0vI,GAAK97D,GAAM,CACb,MAAM,OACJ8gE,EAAM,SACN2qC,GACEzrG,EAIJ,GAAI8gE,GAAUuO,EAAQo8B,GACpB,OAAO3qC,GAAUuO,EAAQo8B,EAE7B,GAYF6V,GAAQU,cAAgB,IAGxBntM,OAAO0M,KAAK6tJ,GAAOC,SAAStjJ,KAAIgqE,GAAKq5E,GAAOC,QAAQt5E,KAAI10E,OAAOimI,SAC/Dg6D,GAAQjyC,QAAUD,GAAOC,QACzBiyC,GAAQn3C,aAAerD,GAAYqD,aAmBnCm3C,GAAQxyC,kBAAoB,CAAC75J,EAAMurB,KAC7BkqI,GAAKE,OAAOpqI,IACds2H,GAAM/1I,KAAK,OAAO9L,gHAEb6xJ,GAAYgI,kBAAkBv6J,KAAKuyJ,GAAa7xJ,EAAMurB,IAE/D8gL,GAAQxgC,QAAUpW,GAAKoW,QACvBwgC,GAAQ3gC,aAAejW,GAAKiW,aAC5B2gC,GAAQW,IAp+iBR,SAAal1M,EAAMy1K,GACjBL,GAAYp1K,GAAQo1K,GAAYp1K,IAAS,GACzCo1K,GAAYp1K,GAAM8B,KAAK2zK,EACzB,EA0+iBA3tK,OAAOka,eAAeuyL,GAAS,aAAc,CAC3Ct0M,MAAO,CAAC,EACRk1M,WAAW,EACXphH,YAAY,IAEdjsF,OAAOka,eAAeuyL,GAAQ9+B,WAAY,aAAc,CACtDx1K,MAAOq1K,GACP6/B,WAAW,EACXphH,YAAY,IASdwgH,GAAQ1lD,QAAUA,GAQlB0lD,GAAQ9tM,IAAMgmJ,GASd8nD,GAAQa,aAAerB,GAAkB,EAAG,uBAAwB,oBAAqB5nD,IASzFooD,GAAQhoD,mBAAqBwnD,GAAkB,EAAG,6BAA8B,iCAAkCxnD,IASlHgoD,GAAQ7sM,KAAOqsM,GAAkB,EAAG,eAAgB,iCAAkC/9C,IACtFu+C,GAAQd,eAAiBH,GAAOG,eAChCc,GAAQX,iBAAmBN,GAAOM,iBAelCW,GAAQrB,OAAS,CAAChrM,EAAMgrM,KACtBnpD,GAAM/1I,KAAK,wEACJs/L,GAAOG,eAAevrM,EAAMgrM,IAErCqB,GAAQV,WAAaP,GAAOO,WAC5BU,GAAQ3B,UAAYU,GAAOV,UAC3B2B,GAAQT,iBAAmBR,GAAOQ,iBAelCS,GAAQc,YAAc,SAAU/uM,EAAMhB,GAKpC,OAJAgB,GAAQ,GAAKA,GAAM3G,cACnB40M,GAAQtyM,QAAQu5J,UAAYrP,GAAQooD,GAAQtyM,QAAQu5J,UAAW,CAC7D,CAACl1J,GAAOhB,IAEHivM,GAAQtyM,QAAQu5J,UAAUl1J,EACnC,EAQAiuM,GAAQ51G,IAAMorD,GACdwqD,GAAQ3pD,aAAeA,GAQvB2pD,GAAQzpG,KAAOmyC,GASfs3D,GAAQ9wC,gBAAkBswC,GAAkB,EAAG,0BAA2B,gCAAiC/wC,IAS3GuxC,GAAQ/wC,iBAAmBuwC,GAAkB,EAAG,2BAA4B,gCAAiC/wC,IAS7GuxC,GAAQhxC,WAAawwC,GAAkB,EAAG,qBAAsB,0BAA2BxwC,IAS3FgxC,GAAQnxC,cAAgB2wC,GAAkB,EAAG,wBAAyB,6BAA8B3wC,IASpGmxC,GAAQjxC,gBAAkBywC,GAAkB,EAAG,0BAA2B,+BAAgCzwC,IAS1GixC,GAAQhqC,SAAWwpC,GAAkB,EAAG,mBAAoB,uBAAwBxpC,IASpFgqC,GAAQ7pC,cAAgBqpC,GAAkB,EAAG,wBAAyB,4BAA6BrpC,IACnG6pC,GAAQe,YAAc5+C,GACtB69C,GAAQ/lH,IAAMA,GACd+lH,GAAQ5wE,GAAKA,GACb4wE,GAAQz+C,IAAMA,GACdy+C,GAAQ3wE,IAAMA,GACd2wE,GAAQ1wE,QAAUA,GAclB0wE,GAAQrxM,IAAMuoK,IACd8oC,GAAQ5oC,UAAYA,GACpB4oC,GAAQ7uD,WAAaA,GACrB6uD,GAAQ9uD,WAAaA,GACrB,CAAC,OAAQ,aAAc,WAAY,WAAY,WAAY,cAAe,cAAe,gBAAiB,gBAAiB,UAAW,gBAAiB,iBAAiBnkJ,SAAQ0nF,IAC9KurH,GAAQvrH,GAAK,WAEX,OADA+gE,GAAM/1I,KAAK,WAAWg1E,sCAAsCA,eACrDqqE,GAAIrqE,GAAGvoF,MAAM,KAAMmS,UAC5B,CAAC,IAEH2hM,GAAQvjD,cAAgB+iD,GAAkB,EAAG,wBAAyB,4BAA6B/iD,IAQnGujD,GAAQ7mM,IAAM2lJ,GAQdkhD,GAAQhkM,GAAKimJ,GAQb+9C,GAAQ5iJ,IAAMszH,GAQdsvB,GAAQntE,IAAMyyB,GAQd06C,GAAQ/xM,IAAMqoK,GAGd0pC,GAAQnyM,MAxiBQ,CACdmzM,iBAAkB,mBAClBC,qBAAsB,uBACtBC,sBAAuB,wBACvBC,sBAAuB,wBACvBC,wBAAyB,0BACzBC,gCAAiC,kCACjCC,iCAAkC,mCAClCC,oCAAqC,sCACrCC,wBAAyB,0BACzBC,mCAAoC,qCACpCC,gCAAiC,kCACjCC,iCAAkC,mCAClCC,+BAAgC,iCAChCC,2BAA4B,8BA4iB9B,MAAMC,GAYJpuM,WAAAA,CAAYm5I,GACV,IAAIgJ,EAAQzhJ,KA2BZ,OAzBAyhJ,EAAM/qI,GAAK+hI,EAAe/hI,GAC1B+qI,EAAM3T,MAAQ2T,EAAM/qI,GACpB+qI,EAAM7hD,MAAQ64C,EAAe74C,MAC7B6hD,EAAM5hD,OAAS44C,EAAe54C,OAC9B4hD,EAAMksD,QAAUl1D,EAAerI,UAC/BqR,EAAMpR,UAAYoI,EAAepI,UACjCoR,EAAMthJ,SAAWs4I,EAAeqe,QAChC33J,OAAOka,eAAeooI,EAAO,UAAW,CAMtC3gJ,IAAGA,IACM2gJ,EAAMthJ,WAOfQ,GAAAA,CAAIN,GACFohJ,EAAMthJ,SAASE,EACjB,IAEKohJ,CACT,EAuBF,MAAMmsD,WAAyBhC,GAAQe,YAIrCrtM,WAAAA,GACEy8H,QACA,IAAIr3H,EAAO1E,KA6BX,OA3BA0E,EAAKmpM,QAAU,GACfnpM,EAAKopM,gBAAkB,EAQvB3uM,OAAOka,eAAe3U,EAAM,gBAAiB,CAC3C5D,IAAGA,IACM4D,EAAKopM,iBAUhB3uM,OAAOka,eAAe3U,EAAM,SAAU,CACpC5D,IAAGA,IACM4D,EAAKmpM,QAAQxvM,SAGxBqG,EAAK9F,OAAOR,UAAY,IAAMsG,EAAKmpM,QAAQ9gF,SACpCroH,CACT,CAeAqpM,eAAAA,CAAgBt1D,GACd,IAAIu1D,EAAehuM,KAAKiuM,oBAAoBx1D,EAAe/hI,IAG3D,GAAIs3L,EACF,OAAOA,EAET,MAAMn1M,EAAQmH,KAAK6tM,QAAQxvM,OAc3B,OAbA2vM,EAAe,IAAIN,GAAaj1D,GAC1B,GAAK5/I,KAASmH,MAClBb,OAAOka,eAAerZ,KAAMnH,EAAO,CACjCiI,GAAAA,GACE,OAAOd,KAAK6tM,QAAQh1M,EACtB,IAGJmH,KAAK6tM,QAAQ10M,KAAK60M,GAClBhuM,KAAKk7H,QAAQ,CACX8yE,eACA32M,KAAM,oBAED22M,CACT,CASAE,kBAAAA,CAAmBF,GACjB,IAAIG,EAAU,KACd,IAAK,IAAIpwM,EAAI,EAAGkI,EAAIjG,KAAK3B,OAAQN,EAAIkI,EAAGlI,IACtC,GAAIiC,KAAKjC,KAAOiwM,EAAc,CAC5BG,EAAUnuM,KAAK6tM,QAAQzmF,OAAOrpH,EAAG,GAAG,GAChCiC,KAAK8tM,iBAAmB/vM,EAC1BiC,KAAK8tM,gBAAkB,EACd9tM,KAAK8tM,eAAiB/vM,GAC/BiC,KAAK8tM,iBAEP,KACF,CAQF,OANIK,GACFnuM,KAAKk7H,QAAQ,CACX8yE,eACA32M,KAAM,uBAGH82M,CACT,CASAF,mBAAAA,CAAoBv3L,GAClB,IAAK,IAAI3Y,EAAI,EAAGkI,EAAIjG,KAAK3B,OAAQN,EAAIkI,EAAGlI,IAAK,CAC3C,MAAM0jJ,EAAQzhJ,KAAKjC,GACnB,GAAI0jJ,EAAM/qI,KAAOA,EACf,OAAO+qI,CAEX,CACA,OAAO,IACT,CAOAlmB,OAAAA,GACEv7H,KAAK8tM,gBAAkB,EACvB9tM,KAAK6tM,QAAQxvM,OAAS,CACxB,EAQFuvM,GAAiBxuM,UAAU6uJ,eAAiB,CAC1CyR,OAAQ,SACR0uC,gBAAiB,kBACjBC,mBAAoB,sBAItB,IAAK,MAAM9rG,MAASqrG,GAAiBxuM,UAAU6uJ,eAC7C2/C,GAAiBxuM,UAAU,KAAOmjG,IAAS,KAE7C,IAAI+rG,GAAY,QAUhB,MAyBMC,GAAgB,SAAUj1M,GAC9B,OA1BmB,SAAU8xJ,GAC7B,MAAMojD,EAAmBpjD,EAAOmjD,cAC1BE,EAAmB,IAAIb,GACvBhqC,EAAiB,WACrB6qC,EAAiBlzE,UACjB6vB,EAAOmjD,cAAgBC,EACvBpjD,EAAOnwB,IAAI,UAAW2oC,EACxB,EAIA,OAHAxY,EAAOpwB,GAAG,UAAW4oC,GACrBxY,EAAOmjD,cAAgB,IAAME,EAC7BrjD,EAAOmjD,cAAc3D,QAAU0D,GACxBG,CACT,CAcSC,CAAa1uM,KAAM4rM,GAAQ9tM,IAAIosI,MAAM,CAAC,EAAG5wI,GAClD,EAGAsyM,GAAQd,eAAe,gBAAiByD,IAGxCA,GAAc3D,QAAU0D,GAOxB,MAAM1jE,GAAa+jE,EAabC,GAA0BA,CAAC/0M,EAAKg1M,IAIhCA,GAAOA,EAAIjzM,aAAe/B,IAAQg1M,EAAIjzM,YACjCizM,EAAIjzM,YAEN/B,EAEHi1M,GAAStqM,GACTonM,GAAQ51G,IAAI2sD,MACPipD,GAAQ51G,IAAI2sD,MAAM5jJ,KAAK6sM,GAAS,OAAQ,GAAGpnM,OAE7C,WAAa,EAWtB,SAAS0lI,KACP,MAAMp5B,EAAU86F,GAAQ9tM,KAAO8tM,GACzBhkM,EAAKkpG,EAAQo5B,OAASp5B,EAAQ27F,aAAa,QAAAsC,EAAA9kM,UAAA5L,OAFjC+8H,EAAI,IAAAniI,MAAA81M,GAAAC,EAAA,EAAAA,EAAAD,EAAAC,IAAJ5zE,EAAI4zE,GAAA/kM,UAAA+kM,GAGpB,OAAOpnM,EAAG9P,MAAMg5G,EAASsqB,EAC3B,CAMA,SAASy/B,KACP,MAAM/pD,EAAU86F,GAAQzpG,MAAQypG,GAC1BhkM,EAAKkpG,EAAQ+pD,kBAAoB/pD,EAAQ+pD,iBAAiB,QAAAo0C,EAAAhlM,UAAA5L,OAFrC+8H,EAAI,IAAAniI,MAAAg2M,GAAAC,EAAA,EAAAA,EAAAD,EAAAC,IAAJ9zE,EAAI8zE,GAAAjlM,UAAAilM,GAG/B,OAAOtnM,EAAG9P,MAAMg5G,EAASsqB,EAC3B,CA6BA,MAAM+zE,GAAoB,EAAI,GAMxBC,GAAkBD,GAClBE,GAAe,SAAUC,EAAY3qM,GACzC,MAAMq2I,EAAU,GAChB,IAAIj9I,EACJ,GAAIuxM,GAAcA,EAAWjxM,OAE3B,IAAKN,EAAI,EAAGA,EAAIuxM,EAAWjxM,OAAQN,IAC7B4G,EAAU2qM,EAAWjpM,MAAMtI,GAAIuxM,EAAW5vH,IAAI3hF,KAChDi9I,EAAQ7hJ,KAAK,CAACm2M,EAAWjpM,MAAMtI,GAAIuxM,EAAW5vH,IAAI3hF,KAIxD,OAAO88J,GAAiB7f,EAC1B,EAUMu0D,GAAY,SAAUv0C,EAAU74D,GACpC,OAAOktG,GAAar0C,GAAU,SAAU30J,EAAOq5E,GAC7C,OAAOr5E,EAAQ+oM,IAAmBjtG,GAAQziB,EAAM0vH,IAAmBjtG,CACrE,GACF,EASMqtG,GAAgB,SAAUF,EAAYntG,GAC1C,OAAOktG,GAAaC,GAAY,SAAUjpM,GACxC,OAAOA,EAAQ8oM,IAAqBhtG,CACtC,GACF,EAoGMstG,GAAiB35I,IACrB,MAAM45I,EAAS,GACf,IAAK55I,IAAUA,EAAMz3D,OACnB,MAAO,GAET,IAAK,IAAIN,EAAI,EAAGA,EAAI+3D,EAAMz3D,OAAQN,IAChC2xM,EAAOv2M,KAAK28D,EAAMzvD,MAAMtI,GAAK,OAAS+3D,EAAM4pB,IAAI3hF,IAElD,OAAO2xM,EAAO37L,KAAK,KAAK,EA4BpB47L,GAAoBL,IACxB,MAAMM,EAAiB,GACvB,IAAK,IAAI7xM,EAAI,EAAGA,EAAIuxM,EAAWjxM,OAAQN,IACrC6xM,EAAez2M,KAAK,CAClBkN,MAAOipM,EAAWjpM,MAAMtI,GACxB2hF,IAAK4vH,EAAW5vH,IAAI3hF,KAGxB,OAAO6xM,CAAc,EAsCjBC,GAAkB,SAAU/wH,GAChC,GAAKA,GAAMA,EAAEzgF,QAAWygF,EAAEY,IAG1B,OAAOZ,EAAEY,IAAIZ,EAAEzgF,OAAS,EAC1B,EAgBMyxM,GAAc,SAAUh6I,EAAOwhE,GACnC,IAAIn1B,EAAO,EACX,IAAKrsC,IAAUA,EAAMz3D,OACnB,OAAO8jG,EAET,IAAK,IAAIpkG,EAAI,EAAGA,EAAI+3D,EAAMz3D,OAAQN,IAAK,CACrC,MAAMsI,EAAQyvD,EAAMzvD,MAAMtI,GACpB2hF,EAAM5pB,EAAM4pB,IAAI3hF,GAElBu5H,EAAY53C,IAKdyiB,GADEm1B,EAAYjxH,GAASixH,GAAa53C,EAC5BA,EAAM43C,EAIR53C,EAAMr5E,EAChB,CACA,OAAO87F,CACT,EAoBM4tG,GAA2BA,CAACluE,EAAUxD,KAG1C,IAAKA,EAAQ23D,QACX,OAAO33D,EAAQtB,SAIjB,IAAIrkI,EAAS,EAWb,OAVC2lI,EAAQjE,OAAS,IAAIzhI,SAAQ,SAAUsT,GACtCvT,GAAUuT,EAAE8wH,QACd,KAGCsB,EAAQkC,cAAgB,IAAI5nI,SAAQ,SAAUsT,GAC9B,SAAXA,EAAE5U,OACJqB,GAAUmpI,EAAS/C,mBAEvB,IACOpmI,CAAM,EAWTs3M,GAAsBnuE,IAAaA,EAAS1B,UAAY,IAAIjpI,QAAO,CAACwlI,EAAK2B,EAASrnB,KAClFqnB,EAAQjE,MACViE,EAAQjE,MAAMzhI,SAAQ,SAAU82D,EAAMiB,GACpCgsE,EAAIvjI,KAAK,CACP4jI,SAAUttE,EAAKstE,SACf2G,aAAc1sB,EACd2sB,UAAWjzE,EACXjB,OACA4uE,WAEJ,IAEA3B,EAAIvjI,KAAK,CACP4jI,SAAUsB,EAAQtB,SAClB2G,aAAc1sB,EACd2sB,UAAW,KACXtF,UACA5uE,KAAM,OAGHitE,IACN,IACGuzE,GAAejuE,IACnB,MAAMkuE,EAAcluE,EAAM7B,UAAY6B,EAAM7B,SAAS9hI,QAAU2jI,EAAM7B,SAAS6B,EAAM7B,SAAS9hI,OAAS,GACtG,OAAO6xM,GAAeA,EAAY91E,OAAS,EAAE,EAEzC+1E,GAAoBzhE,IAEpB,IAFqB,eACzBjO,GACDiO,EACC,IAAKjO,EACH,OAEF,MAAM,MACJrG,EAAK,aACLmG,GACEE,EACJ,IAAI2vE,GAAa7vE,GAAgB,IAAIrpI,QAAO,CAAC0hB,EAAOmrH,IAASnrH,GAAuB,SAAdmrH,EAAK1sI,KAAkB,EAAI,IAAI,GAErG,OADA+4M,GAAah2E,GAASA,EAAM/7H,OAAS+7H,EAAM/7H,OAAS,EAC7C+xM,CAAS,EAWZC,GAAgBA,CAACtvC,EAAM/+B,KAC3B,GAAIA,EAAMhB,QACR,OAAO,EAGT,GAAI+/B,GAAQA,EAAKzvB,2BACf,OAAOyvB,EAAKzvB,2BAEd,MAAM3R,EAAWswE,GAAajuE,GAAO3jI,OAAS,EAE9C,OAAIshI,GAAYqC,EAAMpD,eAAiBoD,EAAMpD,cAAc0xE,aAClDtuE,EAAMpD,cAAc0xE,aAClB3wE,GAAYqC,EAAMlD,mBACO,EAA3BkD,EAAMlD,mBACJkD,EAAMpD,eAAiBoD,EAAMpD,cAAc2xE,SAC7CvuE,EAAMpD,cAAc2xE,SAClBvuE,EAAMnD,eACe,EAAvBmD,EAAMnD,eAER,CAAC,EAuGJ2xE,GAAmB,SAAU3uE,EAAU4uE,EAAaC,GAIxD,GAH2B,qBAAhBD,IACTA,EAAc5uE,EAASX,cAAgBW,EAAS1B,SAAS9hI,QAEvDoyM,EAAc5uE,EAASX,cACzB,OAAO,EAGT,MAAMikD,EArGiB,SAAUtjD,EAAU4uE,GAC3C,IAAI/3M,EAAS,EACTqF,EAAI0yM,EAAc5uE,EAASX,cAG3B7C,EAAUwD,EAAS1B,SAASpiI,GAGhC,GAAIsgI,EAAS,CACX,GAA6B,qBAAlBA,EAAQh4H,MACjB,MAAO,CACL3N,OAAQ2lI,EAAQh4H,MAChB+8H,SAAS,GAGb,GAA2B,qBAAhB/E,EAAQ3+C,IACjB,MAAO,CACLhnF,OAAQ2lI,EAAQ3+C,IAAM2+C,EAAQtB,SAC9BqG,SAAS,EAGf,CACA,KAAOrlI,KAAK,CAEV,GADAsgI,EAAUwD,EAAS1B,SAASpiI,GACD,qBAAhBsgI,EAAQ3+C,IACjB,MAAO,CACLhnF,OAAQA,EAAS2lI,EAAQ3+C,IACzB0jD,SAAS,GAIb,GADA1qI,GAAUq3M,GAAyBluE,EAAUxD,GAChB,qBAAlBA,EAAQh4H,MACjB,MAAO,CACL3N,OAAQA,EAAS2lI,EAAQh4H,MACzB+8H,SAAS,EAGf,CACA,MAAO,CACL1qI,SACA0qI,SAAS,EAEb,CA2DmButE,CAAiB9uE,EAAU4uE,GAC5C,GAAItrB,EAAS/hD,QAIX,OAAO+hD,EAASzsL,OAIlB,MAAMqsL,EA3DgB,SAAUljD,EAAU4uE,GAC1C,IACIpyE,EADA3lI,EAAS,EAETqF,EAAI0yM,EAAc5uE,EAASX,cAG/B,KAAOnjI,EAAI8jI,EAAS1B,SAAS9hI,OAAQN,IAAK,CAExC,GADAsgI,EAAUwD,EAAS1B,SAASpiI,GACC,qBAAlBsgI,EAAQh4H,MACjB,MAAO,CACL3N,OAAQ2lI,EAAQh4H,MAAQ3N,EACxB0qI,SAAS,GAIb,GADA1qI,GAAUq3M,GAAyBluE,EAAUxD,GAClB,qBAAhBA,EAAQ3+C,IACjB,MAAO,CACLhnF,OAAQ2lI,EAAQ3+C,IAAMhnF,EACtB0qI,SAAS,EAGf,CAEA,MAAO,CACL1qI,QAAS,EACT0qI,SAAS,EAEb,CAgCkBwtE,CAAgB/uE,EAAU4uE,GAC1C,OAAI1rB,EAAQ3hD,QAGH2hD,EAAQrsL,OAGVysL,EAASzsL,OAASg4M,CAC3B,EAiBM3zE,GAAW,SAAU8E,EAAU4uE,EAAaC,GAChD,IAAK7uE,EACH,OAAO,EAOT,GALuB,kBAAZ6uE,IACTA,EAAU,GAIe,qBAAhBD,EAA6B,CAEtC,GAAI5uE,EAASgvE,cACX,OAAOhvE,EAASgvE,cAGlB,IAAKhvE,EAASb,QACZ,OAAO+gB,IAAAA,IAEX,CAEA,OAAOyuD,GAAiB3uE,EAAU4uE,EAAaC,EACjD,EAcMI,GAAe,SAAA1iE,GAKlB,IAL4B,gBAC7B2iE,EAAe,aACfC,EAAY,WACZ5yH,EAAU,SACV8uD,GACDkB,EACK6iE,EAAY,EAIhB,GAHI7yH,EAAa8uD,KACd9uD,EAAY8uD,GAAY,CAACA,EAAU9uD,IAElCA,EAAa,EAAG,CAClB,IAAK,IAAIrgF,EAAIqgF,EAAYrgF,EAAIuF,KAAKyhG,IAAI,EAAGmoC,GAAWnvI,IAClDkzM,GAAaF,EAEf3yH,EAAa,CACf,CACA,IAAK,IAAIrgF,EAAIqgF,EAAYrgF,EAAImvI,EAAUnvI,IACrCkzM,GAAaD,EAAajzM,GAAGg/H,SAE/B,OAAOk0E,CACT,EAqBMC,GAAc,SAAUrvE,EAAU6uE,EAASS,EAAgBC,GAC/D,IAAKvvE,IAAaA,EAAS1B,SACzB,OAAO,KAET,GAAI0B,EAASb,QACX,OAAOjE,GAAS8E,GAElB,GAAgB,OAAZ6uE,EACF,OAAO,KAETA,EAAUA,GAAW,EACrB,IAAIW,EAAqBb,GAAiB3uE,EAAUA,EAASX,cAAgBW,EAAS1B,SAAS9hI,OAAQqyM,GAMvG,OALIS,IAEFE,GADAD,EAA6C,kBAApBA,EAA+BA,EAAkBf,GAAc,KAAMxuE,IAIzFv+H,KAAK69E,IAAI,EAAGkwH,EACrB,EAiLMC,GAAa,SAAUzvE,GAC3B,OAAOA,EAAS0vE,cAAgB1vE,EAAS0vE,aAAe31G,KAAKC,KAC/D,EAUM21G,GAAiB,SAAU3vE,GAC/B,OAAOA,EAAS0vE,cAAgB1vE,EAAS0vE,eAAiB1uF,GAC5D,EASM4uF,GAAY,SAAU5vE,GAC1B,MAAM6vE,EAAWJ,GAAWzvE,GAC5B,OAAQA,EAASj1C,WAAa8kH,CAChC,EAsCM/5L,GAAe,SAAU7O,EAAM+4H,GACnC,OAAOA,EAAS1tH,YAAc0tH,EAAS1tH,WAAWrL,EACpD,EA+BM6oM,GAA2BA,CAAC5wC,EAAM/+B,KACtC,GAA8B,IAA1B++B,EAAKj/B,UAAUzjI,OACjB,OAAO,EAET,MAAMuzM,EAAmB5vE,EAAM7tH,WAAWopH,WAAa/4C,OAAOqtH,UAC9D,OAKc,IALP9wC,EAAKj/B,UAAUn2H,QAAOk2H,KACtB4vE,GAAU5vE,KAGPA,EAAS1tH,WAAWopH,WAAa,GAAKq0E,IAC7CvzM,MAAY,EAEXyzM,GAAgBA,CAAChzH,EAAG4H,OAInB5H,IAAM4H,IAAM5H,GAAK4H,GAAK5H,IAAM4H,KAI7B5H,IAAM4H,OAKN5H,EAAEpoE,KAAMgwE,EAAEhwE,IAAMooE,EAAEpoE,KAAOgwE,EAAEhwE,SAK3BooE,EAAE6rD,cAAejkD,EAAEikD,aAAe7rD,EAAE6rD,cAAgBjkD,EAAEikD,iBAKtD7rD,EAAEzlF,MAAOqtF,EAAErtF,KAAOylF,EAAEzlF,MAAQqtF,EAAErtF,QAK9B04M,GAAmB,SAAUhxC,EAAMzqK,GACvC,MAAM25I,EAAQ8wB,GAAQA,EAAKh/B,aAAeg/B,EAAKh/B,YAAYkO,OAAS,CAAC,EACrE,IAAIylD,GAAQ,EACZ,IAAK,MAAMsc,KAAa/hE,EAAO,CAC7B,IAAK,MAAMnC,KAASmC,EAAM+hE,GAExB,GADAtc,EAAQp/L,EAAS25I,EAAM+hE,GAAWlkE,IAC9B4nD,EACF,MAGJ,GAAIA,EACF,KAEJ,CACA,QAASA,CACX,EACM5jD,GAAcivB,IAGlB,IAAKA,IAASA,EAAKj/B,YAAci/B,EAAKj/B,UAAUzjI,OAAQ,CAItD,OADc0zM,GAAiBhxC,GAAMkxC,GAAWA,EAAQnwE,WAAamwE,EAAQnwE,UAAUzjI,QAAU4zM,EAAQ54M,KAE3G,CAEA,IAAK,IAAI0E,EAAI,EAAGA,EAAIgjK,EAAKj/B,UAAUzjI,OAAQN,IAAK,CAC9C,MAAM8jI,EAAWk/B,EAAKj/B,UAAU/jI,GAC1BoyI,EAAStO,EAAS1tH,YAAc0tH,EAAS1tH,WAAWg8H,OAE1D,GAAIA,GAAUA,EAAOl5I,MAAM,KAAKmgB,OAAMnH,GAAKu3H,EAAav3H,KACtD,SAIF,IADc8hM,GAAiBhxC,GAAMkxC,GAAWH,GAAcjwE,EAAUowE,KAMxE,OAAO,CACT,CAGA,OAAO,CAAI,EAGb,IAAIC,GAAW,CACb7B,iBACAtzE,YACA0wC,SAzVe,SAAU5rC,EAAU6uE,EAASU,GAC5C,MACMnxB,EAAgBywB,GAAW,EACjC,IAAIvyB,EAAc+yB,GAAYrvE,EAAU6uE,GAFjB,EAE0CU,GACjE,OAAoB,OAAhBjzB,EACKtjB,MAGLsjB,EAAc8B,IAChB9B,EAAc8B,GAETplB,GAAiBolB,EAAe9B,GACzC,EA8UEg0B,oBA/T0B,SAAA9/D,GAOzB,IAPmC,SACpCxQ,EAAQ,YACRoiC,EAAW,qBACXmuC,EAAoB,kBACpBC,EAAiB,UACjB/6E,EAAS,qBACTg7E,GACDjgE,EACKlwC,EAAO8hE,EAAc3sC,EACzB,MAAMi7E,EAAmBvC,GAAoBnuE,GAC7C,IAAIzjD,EAAa,EACjB,IAAK,IAAIrgF,EAAI,EAAGA,EAAIw0M,EAAiBl0M,OAAQN,IAAK,CAChD,MAAMy0M,EAAiBD,EAAiBx0M,GACxC,GAAIq0M,IAAyBI,EAAe9uE,eAIX,kBAAtB2uE,GAAsE,kBAA7BG,EAAe7uE,WAA0B0uE,IAAsBG,EAAe7uE,WAAlI,CAGAvlD,EAAargF,EACb,KAFA,CAGF,CACA,GAAIokG,EAAO,EAAG,CAGZ,GAAI/jB,EAAa,EACf,IAAK,IAAIrgF,EAAIqgF,EAAa,EAAGrgF,GAAK,EAAGA,IAAK,CACxC,MAAMy0M,EAAiBD,EAAiBx0M,GAExC,GADAokG,GAAQqwG,EAAez1E,SACnBu1E,GACF,GAAInwG,EAAO,EACT,cAEG,GAAIA,EAAOgtG,IAAqB,EACrC,SAEF,MAAO,CACLxrE,UAAW6uE,EAAe7uE,UAC1BD,aAAc8uE,EAAe9uE,aAC7BpM,UAAWA,EAAYw5E,GAAa,CAClCC,gBAAiBlvE,EAAShD,eAC1BmyE,aAAcuB,EACdn0H,aACA8uD,SAAUnvI,IAGhB,CAIF,MAAO,CACL4lI,UAAW4uE,EAAiB,IAAMA,EAAiB,GAAG5uE,WAAa,KACnED,aAAc6uE,EAAiB,IAAMA,EAAiB,GAAG7uE,cAAgB,EACzEpM,UAAW2sC,EAEf,CAIA,GAAI7lF,EAAa,EAAG,CAClB,IAAK,IAAIrgF,EAAIqgF,EAAYrgF,EAAI,EAAGA,IAE9B,GADAokG,GAAQ0/B,EAAShD,eACb18B,EAAO,EACT,MAAO,CACLwhC,UAAW4uE,EAAiB,IAAMA,EAAiB,GAAG5uE,WAAa,KACnED,aAAc6uE,EAAiB,IAAMA,EAAiB,GAAG7uE,cAAgB,EACzEpM,UAAW2sC,GAIjB7lF,EAAa,CACf,CAGA,IAAK,IAAIrgF,EAAIqgF,EAAYrgF,EAAIw0M,EAAiBl0M,OAAQN,IAAK,CACzD,MAAMy0M,EAAiBD,EAAiBx0M,GACxCokG,GAAQqwG,EAAez1E,SACvB,MAAM01E,EAAoBD,EAAez1E,SAAWoyE,GAGpD,KAFmC,IAAThtG,MACOswG,GAAqBtwG,EAAOgtG,IAAqB,IAc5EpxM,IAAMw0M,EAAiBl0M,OAAS,EAbtC,CAiBA,GAAIi0M,GACF,GAAInwG,EAAO,EACT,cAEG,GAAIA,EAAOgtG,IAAqB,EACrC,SAEF,MAAO,CACLxrE,UAAW6uE,EAAe7uE,UAC1BD,aAAc8uE,EAAe9uE,aAC7BpM,UAAWA,EAAYw5E,GAAa,CAClCC,gBAAiBlvE,EAAShD,eAC1BmyE,aAAcuB,EACdn0H,aACA8uD,SAAUnvI,IAfd,CAkBF,CAEA,MAAO,CACL2lI,aAAc6uE,EAAiBA,EAAiBl0M,OAAS,GAAGqlI,aAC5DC,UAAW4uE,EAAiBA,EAAiBl0M,OAAS,GAAGslI,UACzDrM,UAAW2sC,EAEf,EAsMEwtC,aACAtoF,WA3JiB,SAAU0Y,GAC3B,OAAOA,EAASj1C,QAClB,EA0JE0kH,cACAE,kBACAN,eACAwB,MAtJY,SAAU1wE,GACtB,IAAK,IAAIjkI,EAAI,EAAGA,EAAIikI,EAAM7B,SAAS9hI,OAAQN,IACzC,GAAIikI,EAAM7B,SAASpiI,GAAGhF,IACpB,OAAO,EAGX,OAAO,CACT,EAgJE4e,gBACAg7L,2BAhHiC,SAAUrnE,EAAiB8E,EAAWvO,GAA6B,IAAnB+wE,EAAa3oM,UAAA5L,OAAA,QAAA/D,IAAA2P,UAAA,GAAAA,UAAA,GAAG,EACjG,IAAK0N,GAAa,YAAakqH,GAC7B,OAAOrX,IAGT,OADa8gB,EAAkBzJ,EAAS1tH,WAAWopH,UACpB,EAAhBq1E,GAAqBxiE,CACtC,EA2GEuhE,4BACA7/D,eACAggE,iBACA/B,6BAEF,MAAM,IACJ/5G,IACE41G,GACEiH,GAAmBA,CAACh6M,EAAOQ,IACxB,GAAGR,KAASQ,IAGfy5M,GAAUA,CAACz7M,EAAMw2I,EAAOC,IACrB,mBAAmBz2I,KAAQw2I,KAASC,IA8FvCilE,GAAoBA,CAAChyC,EAAMzqK,KAC1ByqK,EAAKh/B,aAGV,CAAC,QAAS,aAAappI,SAAQ4uI,IAC7B,GAAKw5B,EAAKh/B,YAAYwF,GAGtB,IAAK,MAAMwG,KAAYgzB,EAAKh/B,YAAYwF,GACtC,IAAK,MAAMyG,KAAY+yB,EAAKh/B,YAAYwF,GAAWwG,GAAW,CAC5D,MAAME,EAAkB8yB,EAAKh/B,YAAYwF,GAAWwG,GAAUC,GAC9D13I,EAAS23I,EAAiB1G,EAAWwG,EAAUC,EACjD,CACF,GACA,EAiBEglE,GAAqBhjE,IAIrB,IAJsB,SAC1BnO,EAAQ,IACRxoI,EAAG,GACHqd,GACDs5H,EACCnO,EAASnrH,GAAKA,EACdmrH,EAASoxE,gBAAkB,EACvB55M,IAIFwoI,EAASxoI,IAAMA,GASjBwoI,EAAS1tH,WAAa0tH,EAAS1tH,YAAc,CAAC,CAAC,EAgG3C++L,GAAsB,SAACnyC,EAAM1nK,GAAiC,IAA5B85M,EAAalpM,UAAA5L,OAAA,QAAA/D,IAAA2P,UAAA,GAAAA,UAAA,GAAG6oM,GACtD/xC,EAAK1nK,IAAMA,EACX,IAAK,IAAI0E,EAAI,EAAGA,EAAIgjK,EAAKj/B,UAAUzjI,OAAQN,IACzC,IAAKgjK,EAAKj/B,UAAU/jI,GAAG1E,IAAK,CAI1B,MAAM+5M,EAAW,mBAAmBr1M,IACpCgjK,EAAKj/B,UAAU/jI,GAAG1E,IAAM+5M,CAC1B,CAEF,MAAMC,EAAgBvhE,GAAYivB,GAClCgyC,GAAkBhyC,GAAM,CAACnzB,EAAYrG,EAAWwG,EAAUC,KAExD,IAAKJ,EAAW9L,YAAc8L,EAAW9L,UAAUzjI,OAAQ,CAIzD,GAAIg1M,GAA+B,UAAd9rE,IAA0BqG,EAAWv0I,IACxD,IAAK,IAAI0E,EAAI,EAAGA,EAAIgjK,EAAKj/B,UAAUzjI,OAAQN,IAAK,CAC9C,MAAMkO,EAAI80J,EAAKj/B,UAAU/jI,GACzB,GAAIkO,EAAEkI,YAAclI,EAAEkI,WAAW87H,OAAShkI,EAAEkI,WAAW87H,QAAUlC,EAC/D,MAEJ,CAEFH,EAAW9L,UAAY,CAAC9pI,EAAS,CAAC,EAAG41I,GACvC,CACAA,EAAW9L,UAAUnpI,SAAQ,SAAUsT,EAAGlO,GACxC,MAAMu1M,EAAUH,EAAc5rE,EAAWwG,EAAUC,EAAU/hI,GACvDyK,EAAKm8L,GAAiB90M,EAAGu1M,GAC3BrnM,EAAE5S,IACJ4S,EAAE0+H,YAAc1+H,EAAE0+H,aAAeC,GAAWm2B,EAAK1nK,IAAK4S,EAAE5S,MAMxD4S,EAAE5S,IAAY,IAAN0E,EAAUu1M,EAAU58L,EAG5BzK,EAAE0+H,YAAc1+H,EAAE5S,KAEpB4S,EAAEyK,GAAKzK,EAAEyK,IAAMA,EAGfzK,EAAEkI,WAAalI,EAAEkI,YAAc,CAAC,EAEhC4sJ,EAAKj/B,UAAU71H,EAAEyK,IAAMzK,EACvB80J,EAAKj/B,UAAU71H,EAAE5S,KAAO4S,CAC1B,GAAE,IAvIsB80J,KAC1B,IAAIhjK,EAAIgjK,EAAKj/B,UAAUzjI,OACvB,KAAON,KAAK,CACV,MAAM8jI,EAAWk/B,EAAKj/B,UAAU/jI,GAChCi1M,GAAmB,CACjBnxE,WACAnrH,GAAIm8L,GAAiB90M,EAAG8jI,EAASxoI,OAEnCwoI,EAAS8I,YAAcC,GAAWm2B,EAAK1nK,IAAKwoI,EAASxoI,KACrD0nK,EAAKj/B,UAAUD,EAASnrH,IAAMmrH,EAE9Bk/B,EAAKj/B,UAAUD,EAASxoI,KAAOwoI,EAK1BA,EAAS1tH,WAAWopH,WACvBvnC,GAAI3qF,KAAK,qEAEb,GAsHAkoM,CAAoBxyC,GA7GQA,KAC5BgyC,GAAkBhyC,GAAMnzB,IAClBA,EAAWv0I,MACbu0I,EAAWjD,YAAcC,GAAWm2B,EAAK1nK,IAAKu0I,EAAWv0I,KAC3D,GACA,EAyGFm6M,CAAsBzyC,EACxB,EACA,MAAM0yC,GACJn0M,WAAAA,GACEU,KAAK0zM,QAAU,KACf1zM,KAAK2zM,mBAAqB,IAAIzzM,IAC9BF,KAAK4zM,qBAAuB,IAAI1zM,GAClC,CACA2zM,SAAAA,GAAyB,IAAf1zE,EAAQl2H,UAAA5L,OAAA,QAAA/D,IAAA2P,UAAA,GAAAA,UAAA,GAAG,GAEnB,GAAqB,OAAjBjK,KAAK0zM,QACP,OAGF,IAAKvzE,EAAS9hI,OACZ,OAEF,MAAOy1M,GAAgB3zE,OAEc7lI,IAAjCw5M,EAAa7wE,kBAIjBjjI,KAAK0zM,QAAUI,EAAa7wE,gBAAkB,IAChD,CACA8wE,oBAAAA,GAAsC,IAAjB9zE,EAAUh2H,UAAA5L,OAAA,QAAA/D,IAAA2P,UAAA,GAAAA,UAAA,GAAG,GAChC,IAAKg2H,EAAW5hI,OACd,OAEF,MAAOimI,GAAarE,EACd3I,EAAYgN,EAAUE,UAAUzB,UACtC/iI,KAAKg0M,yBAAyB18E,GAC9Bt3H,KAAK2zM,mBAAqB1zE,EAAW/oI,QAAO,CAACmf,EAAK49L,KAChD59L,EAAI1V,IAAIszM,EAAiBv9L,GAAIu9L,GACtB59L,IACN,IAAInW,IACT,CACAg0M,gBAAAA,CAAiB5vE,GACftkI,KAAK2zM,mBAAmB1yM,OAAOqjI,EAAU5tH,IACzC1W,KAAK4zM,qBAAqBjzM,IAAI2jI,EAAU5tH,GAAI4tH,EAC9C,CACA6vE,sBAAAA,GACE,GAAqB,OAAjBn0M,KAAK0zM,QACP,MAAO,GAET,MAAMU,EAAmB,CAAC,EACpBC,EAAsB,GAC5Br0M,KAAK2zM,mBAAmBh7M,SAAQ,CAAC2rI,EAAW5tH,KAC1C,IAAI1W,KAAK4zM,qBAAqBlzM,IAAIgW,KAGlC4tH,EAAUhN,UAAYgN,EAAUE,UAAUzB,UAAY,IAAO/iI,KAAK0zM,QAClEpvE,EAAU4vE,iBAAmB,IAAMl0M,KAAKk0M,iBAAiB5vE,GACzD+vE,EAAoBl7M,KAAKmrI,GACpBA,EAAUM,OAGf,GAAIwvE,EAAiB9vE,EAAUM,OAAQ,CACrC,MAAMvmI,EAAS+1M,EAAiB9vE,EAAUM,OAAOzrI,KAAKmrI,GACtDA,EAAUgwE,eAAiBj2M,EAAS,CACtC,MACE+1M,EAAiB9vE,EAAUM,OAAS,CAACN,GACrCA,EAAUgwE,eAAiB,CAC7B,IAEF,IAAK,MAAMhwE,KAAa+vE,EAAqB,CAC3C,MAAMntD,EAAYktD,EAAiB9vE,EAAUM,QAAU,GACnDN,EAAUC,QACZD,EAAU03B,QAAU13B,EAAUC,QAAQxB,UAAY,IAAO/iI,KAAK0zM,QACrDpvE,EAAUK,WAAauiB,EAAU5iB,EAAUgwE,eAAiB,GACrEhwE,EAAU03B,QAAU9U,EAAU5iB,EAAUgwE,eAAiB,GAAGh9E,UACnDgN,EAAUvH,SACnBuH,EAAU03B,QAAU13B,EAAUhN,UAAYgN,EAAUvH,SAC3CuH,EAAUG,gBACnBH,EAAU03B,QAAU13B,EAAUhN,UAAYgN,EAAUG,gBAEpDH,EAAU03B,QAAU13B,EAAUhN,SAElC,CACA,OAAO+8E,CACT,CACAL,wBAAAA,CAAyB18E,GACV,IAAIp3H,IAAIF,KAAK4zM,sBACrBj7M,SAAQ,CAAC2rI,EAAW5tH,KACnB4tH,EAAUE,UAAUzB,UAAYzL,GAClCt3H,KAAK4zM,qBAAqB3yM,OAAOyV,EACnC,GAEJ,EAEF,MACM69L,GAAmC/jE,IAKnC,IALoC,YACxC92I,EAAW,QACX+nM,EAAO,MACPx5L,EAAK,aACLusM,GACDhkE,EACC,MAAMikE,EAAchT,EAAQvlM,OAAS,KAAOulM,EAAQvlM,OAAS,IACvDw4M,EAAYjT,EAAQvlM,QAAU,KAAOulM,EAAQvlM,QAAU,IACvDy4M,EAAgB,CACpBt7M,IAAKooM,EAAQpoM,IACbK,eAEIk7M,EAA4BH,IAAgBC,GAAaF,EAC/D,GAAIvsM,GAASysM,EAEXC,EAAc1sM,MAAQjQ,EAAS,CAAC,EAAGiQ,GACnC0sM,EAAcE,UAAYjJ,GAAQnyM,MAAMozM,0BACnC,GAAIpL,EAAQlmM,QACjBo5M,EAAcE,UAAYjJ,GAAQnyM,MAAMqzM,2BACnC,GAAIrL,EAAQqT,SACjBH,EAAcI,SAAWnJ,GAAQnyM,MAAMszM,2BAClC,GAAI6H,EAA2B,CACpC,MAAMC,EAAYL,EAAe5I,GAAQnyM,MAAMuzM,wBAA0BpB,GAAQnyM,MAAMmzM,iBACvF+H,EAAcE,UAAYA,EAC1BF,EAAcz4M,OAASulM,EAAQvlM,OAC/By4M,EAAcl9M,QAAUgqM,EAAQhqM,OAClC,CACA,OAAOk9M,CAAa,GAGpBhI,YAAaqI,IACXpJ,GAuEEqJ,GAAgBA,CAACn2H,EAAG4H,KACxB,IAAK5H,EACH,OAAO4H,EAET,MAAMhuF,EAASwxI,GAAMprD,EAAG4H,GAQxB,GALI5H,EAAEyhD,eAAiB75C,EAAE65C,qBAChB7nI,EAAO6nI,aAIZzhD,EAAEs7C,QAAU1zC,EAAE0zC,aACT1hI,EAAO0hI,WAGT,GAAIt7C,EAAEs7C,OAAS1zC,EAAE0zC,MACtB,IAAK,IAAIr8H,EAAI,EAAGA,EAAI2oF,EAAE0zC,MAAM/7H,OAAQN,IAC9B+gF,EAAEs7C,OAASt7C,EAAEs7C,MAAMr8H,KACrBrF,EAAO0hI,MAAMr8H,GAAKmsI,GAAMprD,EAAEs7C,MAAMr8H,GAAI2oF,EAAE0zC,MAAMr8H,KAclD,OARK+gF,EAAEo2H,SAAWxuH,EAAEwuH,UAClBx8M,EAAOw8M,SAAU,GAIfp2H,EAAEk3G,UAAYtvG,EAAEsvG,UAClBt9L,EAAOs9L,SAAU,GAEZt9L,CAAM,EAwCTy8M,GAAqBA,CAAC92E,EAAS+2E,MAG9B/2E,EAAQsM,aAAetM,EAAQhlI,MAClCglI,EAAQsM,YAAcC,GAAWwqE,EAAS/2E,EAAQhlI,MAEhDglI,EAAQtlI,MAAQslI,EAAQtlI,IAAI4xI,cAC9BtM,EAAQtlI,IAAI4xI,YAAcC,GAAWwqE,EAAS/2E,EAAQtlI,IAAIM,MAExDglI,EAAQhoH,MAAQgoH,EAAQhoH,IAAIs0H,cAC9BtM,EAAQhoH,IAAIs0H,YAAcC,GAAWwqE,EAAS/2E,EAAQhoH,IAAIhd,MAExDglI,EAAQhoH,KAAOgoH,EAAQhoH,IAAItd,MAAQslI,EAAQhoH,IAAItd,IAAI4xI,cACrDtM,EAAQhoH,IAAItd,IAAI4xI,YAAcC,GAAWwqE,EAAS/2E,EAAQhoH,IAAItd,IAAIM,MAEhEglI,EAAQjE,OAASiE,EAAQjE,MAAM/7H,QACjCggI,EAAQjE,MAAMzhI,SAAQsT,IAChBA,EAAE0+H,cAGN1+H,EAAE0+H,YAAcC,GAAWwqE,EAASnpM,EAAE5S,KAAI,IAG1CglI,EAAQkC,cAAgBlC,EAAQkC,aAAaliI,QAC/CggI,EAAQkC,aAAa5nI,SAAQsT,IACvBA,EAAE0+H,cAGN1+H,EAAE0+H,YAAcC,GAAWwqE,EAASnpM,EAAE5S,KAAI,GAE9C,EAEIg8M,GAAiB,SAAUrzE,GAC/B,MAAM7B,EAAW6B,EAAM7B,UAAY,GAC7BM,EAAiBuB,EAAMvB,eAI7B,GAAIA,GAAkBA,EAAerG,OAASqG,EAAerG,MAAM/7H,OAAQ,CAIzE,GAAIoiI,EAAeF,aACjB,IAAK,IAAIxiI,EAAI,EAAGA,EAAI0iI,EAAeF,aAAaliI,OAAQN,IACtD,GAA4C,QAAxC0iI,EAAeF,aAAaxiI,GAAG1G,KACjC,OAAO8oI,EAKbM,EAAe1D,SAAWiF,EAAMnD,eAChC4B,EAAeu1D,SAAU,EACzB71D,EAAShnI,KAAKsnI,EAChB,CACA,OAAON,CACT,EAIMm1E,GAAsBA,CAACx2H,EAAG4H,IAAM5H,IAAM4H,GAAK5H,EAAEqhD,UAAYz5C,EAAEy5C,UAAYrhD,EAAEqhD,SAAS9hI,SAAWqoF,EAAEy5C,SAAS9hI,QAAUygF,EAAEkiD,UAAYt6C,EAAEs6C,SAAWliD,EAAEoiD,gBAAkBx6C,EAAEw6C,eAAiBpiD,EAAE2hD,iBAAmB/5C,EAAE+5C,eAc3M80E,GAAe,SAACx0C,EAAMy0C,GAAmD,IAAzCC,EAAcxrM,UAAA5L,OAAA,QAAA/D,IAAA2P,UAAA,GAAAA,UAAA,GAAGqrM,GACrD,MAAM58M,EAASwxI,GAAM62B,EAAM,CAAC,GACtB20C,EAAWh9M,EAAOopI,UAAU0zE,EAAS9+L,IAC3C,IAAKg/L,EACH,OAAO,KAET,GAAID,EAAeC,EAAUF,GAC3B,OAAO,KAETA,EAASr1E,SAAWk1E,GAAeG,GACnC,MAAMG,EAAiBzrE,GAAMwrE,EAAUF,GAMvC,GAJIG,EAAel1E,iBAAmB+0E,EAAS/0E,uBACtCk1E,EAAel1E,eAGpBi1E,EAASv1E,SAAU,CACrB,GAAIq1E,EAAShyE,KAAM,CACjBgyE,EAASr1E,SAAWq1E,EAASr1E,UAAY,GAGzC,IAAK,IAAIpiI,EAAI,EAAGA,EAAIy3M,EAAShyE,KAAKoyE,gBAAiB73M,IACjDy3M,EAASr1E,SAAS32B,QAAQ,CACxB0rG,SAAS,GAGf,CACAS,EAAex1E,SA1HI01E,EAAC1J,EAAUr3B,EAAQn8J,KACxC,MAAMm9L,EAAc3J,EAASnzM,QACvB+8M,EAAcjhC,EAAO97K,QAC3B2f,EAASA,GAAU,EACnB,MAAMjgB,EAAS,GACf,IAAI+mI,EACJ,IAAK,IAAIu2E,EAAW,EAAGA,EAAWD,EAAY13M,OAAQ23M,IAAY,CAChE,MAAMjnE,EAAa+mE,EAAYE,EAAWr9L,GACpCs9L,EAAaF,EAAYC,GAC3BjnE,GACFtP,EAAasP,EAAW14H,KAAOopH,EAC/B/mI,EAAOS,KAAK87M,GAAclmE,EAAYknE,MAGlCx2E,IAAew2E,EAAW5/L,MAC5B4/L,EAAW5/L,IAAMopH,GAEnB/mI,EAAOS,KAAK88M,GAEhB,CACA,OAAOv9M,CAAM,EAsGem9M,CAAeH,EAASv1E,SAAUq1E,EAASr1E,SAAUq1E,EAASt0E,cAAgBw0E,EAASx0E,cACnH,CAEAy0E,EAAex1E,SAASxnI,SAAQ0lI,IAC9B82E,GAAmB92E,EAASs3E,EAAehrE,YAAY,IAKzD,IAAK,IAAI5sI,EAAI,EAAGA,EAAIrF,EAAOopI,UAAUzjI,OAAQN,IACvCrF,EAAOopI,UAAU/jI,GAAG2Y,KAAO8+L,EAAS9+L,KACtChe,EAAOopI,UAAU/jI,GAAK43M,GAiB1B,OAdAj9M,EAAOopI,UAAU0zE,EAAS9+L,IAAMi/L,EAEhCj9M,EAAOopI,UAAU0zE,EAASn8M,KAAOs8M,EAEjC5C,GAAkBhyC,GAAM,CAACnzB,EAAYrG,EAAWwG,EAAUC,KACxD,GAAKJ,EAAW9L,UAGhB,IAAK,IAAI/jI,EAAI,EAAGA,EAAI6vI,EAAW9L,UAAUzjI,OAAQN,IAC3Cy3M,EAAS9+L,KAAOk3H,EAAW9L,UAAU/jI,GAAG2Y,KAC1Ck3H,EAAW9L,UAAU/jI,GAAK43M,EAE9B,IAEKj9M,CACT,EAYMw9M,GAAeA,CAACl0E,EAAO8yC,KAC3B,MAAM30C,EAAW6B,EAAM7B,UAAY,GAC7B+vE,EAAc/vE,EAASA,EAAS9hI,OAAS,GACzC83M,EAAWjG,GAAeA,EAAY91E,OAAS81E,EAAY91E,MAAM81E,EAAY91E,MAAM/7H,OAAS,GAC5F+3M,EAAeD,GAAYA,EAASp5E,UAAYmzE,GAAeA,EAAYnzE,SACjF,OAAI+3C,GAAUshC,EACU,IAAfA,EAIyD,KAA1Dp0E,EAAMlD,oBAAsBkD,EAAMnD,gBAAkB,GAAS,EAEjEw3E,GAA0BA,CAACv0E,EAAWzqI,EAAMi6K,KAChD,IAAKxvC,EACH,OAEF,MAAMw0E,EAAa,GAkBnB,OAjBAx0E,EAAUnpI,SAAQkpI,IAEhB,IAAKA,EAAS1tH,WACZ,OAEF,MAAM,UACJopH,EAAS,WACTD,EAAU,OACV6S,GACEtO,EAAS1tH,WACbmiM,EAAWn9M,KAAK,CACdud,GAAImrH,EAASnrH,GACb05H,UAAW7S,EACXlB,WAAYiB,EACZ8J,OAAQ+I,GACR,IAEG,CACL94I,OACAi6K,SACAglC,aACD,EAYH,MAAMC,WAAuBvB,GAC3B11M,WAAAA,CAAYyM,EAAKw6L,GAAmB,IAAdjtM,EAAO2Q,UAAA5L,OAAA,QAAA/D,IAAA2P,UAAA,GAAAA,UAAA,GAAG,CAAC,EAE/B,GADA8xH,SACKhwH,EACH,MAAM,IAAItS,MAAM,kDAElBuG,KAAKw2M,QAAU1H,GAAO,kBACtB,MAAM,gBACJrxM,GAAkB,GAChBnE,EACJ0G,KAAK+L,IAAMA,EACX/L,KAAKy2M,KAAOlQ,EACZvmM,KAAKvC,gBAAkBA,EACvBuC,KAAK02M,0BAA4Bp9M,EAAQq9M,yBACzC,MAAMC,EAAarQ,EAAI70C,SACvB1xJ,KAAK62M,iBAAmBD,GAAcA,EAAWC,kBAAoB,GACrE72M,KAAK82M,iBAAmBF,GAAcA,EAAWE,kBAAoB,GACrE92M,KAAK+2M,MAAQH,GAAcA,EAAWG,MACtC/2M,KAAKg3M,mBAAqB,IAAIvD,GAE9BzzM,KAAK25G,MAAQ,eAEb35G,KAAKi3M,0BAA4Bj3M,KAAKi3M,0BAA0Bl4M,KAAKiB,MACrEA,KAAKg7H,GAAG,qBAAsBh7H,KAAKi3M,2BACnCj3M,KAAKg7H,GAAG,iBAAkBh7H,KAAKk3M,sBAAsBn4M,KAAKiB,MAC5D,CACAk3M,qBAAAA,GACE,MAAMC,EAAgBn3M,KAAKgiI,QAC3B,IAAKm1E,EACH,OAEFn3M,KAAKg3M,mBAAmBnD,UAAUsD,EAAch3E,UAChDngI,KAAKg3M,mBAAmBjD,qBAAqBoD,EAAcl3E,YAC3D,MAAMm3E,EAAsBp3M,KAAKg3M,mBAAmB7C,yBAC/CiD,EAAoB/4M,QAAW2B,KAAK02M,2BAGzC12M,KAAK02M,0BAA0BU,EACjC,CACAH,yBAAAA,GACE,GAAmB,kBAAfj3M,KAAK25G,MAEP,OAEF,MAAMqoB,EAAQhiI,KAAKgiI,QACnB,IAAI3oI,EAAMuxI,GAAW5qI,KAAK+gK,KAAK1nK,IAAK2oI,EAAM3oI,KACtC2G,KAAK+2M,QACP19M,EA7X0Bg+M,EAACh+M,EAAK2oI,KACpC,GAAIA,EAAMhB,UAAYgB,EAAMpD,cAC1B,OAAOvlI,EAET,MAAMi+M,EAAa,CAAC,EACpB,GAAIt1E,EAAMpD,cAAciF,eAAgB,CACtC,MAAM,eACJpD,GACEuB,EAEJ,IAAIu1E,EAAUv1E,EAAMd,cAAgBc,EAAM7B,SAAS9hI,OAInD,GAAIoiI,EAAgB,CAClB,MAAMrG,EAAQqG,EAAerG,OAAS,GAEhCo9E,EAAWrH,GAAkBnuE,GAAS,EAIxCw1E,GAAY,GAAKA,IAAap9E,EAAM/7H,OAAS,IAG/Ci5M,EAAWG,UAAYD,IAWrBA,GAAY,GAAKp9E,EAAM/7H,SACzBk5M,GAEJ,CAGAD,EAAWI,SAAWH,CACxB,CAMA,GALIv1E,EAAMpD,eAAiBoD,EAAMpD,cAAc+4E,eAG7CL,EAAWM,UAAY51E,EAAMpD,cAAckF,kBAAoB,KAAO,OAEpE3kI,OAAO0M,KAAKyrM,GAAYj5M,OAAQ,CAClC,MAAMw5M,EAAY,IAAI91D,IAAAA,KAAa1oJ,GACnC,CAAC,YAAa,WAAY,aAAaV,SAAQ,SAAU4G,GAClD+3M,EAAWz5M,eAAe0B,IAG/Bs4M,EAAUv4E,aAAa3+H,IAAIpB,EAAM+3M,EAAW/3M,GAC9C,IACAlG,EAAMw+M,EAAUx4M,UAClB,CACA,OAAOhG,CAAG,EAmUAg+M,CAAwBh+M,EAAK2oI,IAErChiI,KAAK25G,MAAQ,wBACb35G,KAAKyhM,QAAUzhM,KAAKy2M,KAAKl8M,IAAI,CAC3BlB,MACAoE,gBAAiBuC,KAAKvC,gBACtB/D,YAAa,iBACZ,CAACuO,EAAO4mM,KAET,GAAK7uM,KAAKyhM,QAGV,OAAIx5L,EACKjI,KAAK83M,qBAAqB93M,KAAKyhM,QAASzhM,KAAKgiI,QAAS,sBAE/DhiI,KAAK+3M,aAAa,CAChBC,eAAgBh4M,KAAKyhM,QAAQjnM,aAC7BX,IAAKmG,KAAKgiI,QAAQ3oI,IAClBqd,GAAI1W,KAAKgiI,QAAQtrH,IACjB,GAEN,CACAohM,oBAAAA,CAAqBv9M,EAAKsnI,EAAUo2E,GAClC,MAAM,IACJ5+M,EAAG,GACHqd,GACEmrH,EAEJ7hI,KAAKyhM,QAAU,KACXwW,IACFj4M,KAAK25G,MAAQs+F,GAEfj4M,KAAKiI,MAAQ,CACX45H,SAAU7hI,KAAK+gK,KAAKj/B,UAAUprH,GAC9Bxa,OAAQ3B,EAAI2B,OACZmS,QAAS,sCAAsChV,KAC/CmB,aAAcD,EAAIC,aAClBmD,KAAMpD,EAAI2B,QAAU,IAAM,EAAI,EAC9BnC,SAAUw6M,GAAiC,CACzC76M,YAAaa,EAAIb,YACjB+nM,QAASlnM,EACT0N,MAAO1N,EAAI0N,SAGfjI,KAAKk7H,QAAQ,QACf,CACAg9E,cAAAA,CAAcxnE,GAGX,IAHY,IACb72I,EAAG,eACH2/I,GACD9I,EACC,IACE,MA5zBgB8B,KAOhB,IAPiB,OACrB2lE,EAAM,OACNC,EAAM,eACN5+D,EAAc,iBACdq9D,EAAmB,GAAE,iBACrBC,EAAmB,GAAE,MACrBC,GACDvkE,EACC,MAAMiH,EAAS,IAAIva,EACfi5E,GACF1+D,EAAOze,GAAG,OAAQm9E,GAEhBC,GACF3+D,EAAOze,GAAG,OAAQo9E,GAEpBvB,EAAiBl+M,SAAQ0/M,GAAgB5+D,EAAOxb,UAAUo6E,KAC1DvB,EAAiBn+M,SAAQgkI,GAAU8c,EAAOnb,aAAa3B,KACvD8c,EAAOtgJ,KAAKqgJ,GACZC,EAAO/5D,MACP,MAAMi/C,EAAW8a,EAAO9a,SAmBxB,GAhBKo4E,IACH,CAAC,iBAAkB,OAAQ,gBAAiB,mBAAoB,UAAW,sBAAsBp+M,SAAQ,SAAU0nF,GAC7Gs+C,EAAS9gI,eAAewiF,WACnBs+C,EAASt+C,EAEpB,IACIs+C,EAASwB,UACXxB,EAASwB,SAASxnI,SAAQ,SAAU0lI,GAClC,CAAC,QAAS,gBAAgB1lI,SAAQ,SAAU0nF,GACtCg+C,EAAQxgI,eAAewiF,WAClBg+C,EAAQh+C,EAEnB,GACF,MAGCs+C,EAASE,eAAgB,CAC5B,IAAIA,EAAiB,GACjBF,EAASwB,UAAYxB,EAASwB,SAAS9hI,SACzCwgI,EAAiBF,EAASwB,SAASjpI,QAAO,CAACwlI,EAAKl+C,IAAMl7E,KAAK69E,IAAIu7C,EAAKl+C,EAAEu+C,WAAW,IAE/Eo7E,GACFA,EAAO,CACL9pM,QAAS,gDAAgDwwH,MAG7DF,EAASE,eAAiBA,CAC5B,CACA,MAAMzE,EAAQ61E,GAAatxE,GAC3B,GAAIvE,EAAM/7H,SAAWsgI,EAASG,mBAAoB,CAChD,MAAMA,EAAqB1E,EAAMljI,QAAO,CAACwlI,EAAKzwH,IAAM3I,KAAK69E,IAAIu7C,EAAKzwH,EAAE8wH,WAAW,GAC3Eo7E,IACFA,EAAO,CACL9pM,QAAS,oDAAoDywH,MAE/D9oC,GAAI/tF,MAAM,0MAEZ02H,EAASG,mBAAqBA,CAChC,CACA,OAAOH,CAAQ,EA+vBJ25E,CAAc,CACnBH,OAAQvnE,IAAA,IAAC,QACPviI,GACDuiI,EAAA,OAAK5wI,KAAKw2M,QAAQ,wBAAwB38M,MAAQwU,IAAU,EAC7D+pM,OAAQplE,IAAA,IAAC,QACP3kI,GACD2kI,EAAA,OAAKhzI,KAAKw2M,QAAQ,wBAAwB38M,MAAQwU,IAAU,EAC7DmrI,iBACAq9D,iBAAkB72M,KAAK62M,iBACvBC,iBAAkB92M,KAAK82M,iBACvBC,MAAO/2M,KAAK+2M,OAEhB,CAAE,MAAO9uM,GACPjI,KAAKiI,MAAQA,EACbjI,KAAKiI,MAAMlO,SAAW,CACpB86M,UAAWjJ,GAAQnyM,MAAMwzM,gCACzBhlM,QAEJ,CACF,CAcA8vM,YAAAA,CAAY9mE,GAKT,IALU,eACX+mE,EAAc,eACdO,EAAc,IACd1+M,EAAG,GACH6c,GACDu6H,EAECjxI,KAAKyhM,QAAU,KACfzhM,KAAK25G,MAAQ,gBACb,MAAM5/G,EAAW,CACfy+M,aAAc,CACZnhN,KAAM,QACNgC,IAAKQ,IAGTmG,KAAKk7H,QAAQ,CACX7jI,KAAM,qBACN0C,aAEF,MAAM8nI,EAAW02E,GAAkBv4M,KAAKk4M,eAAe,CACrDr+M,MACA2/I,eAAgBw+D,IAElBn2E,EAAS42E,YAAc78G,KAAKC,MAC5Bm3G,GAAmB,CACjBnxE,WACAxoI,IAAKQ,EACL6c,OAGF,MAAMo+J,EAASygC,GAAav1M,KAAK+gK,KAAMl/B,GACvC7hI,KAAK6+H,eAAiBgD,EAAS/C,oBAAsB+C,EAAShD,eAC9D7+H,KAAK04M,cAAgB,KACjB5jC,GACF90K,KAAK+gK,KAAO+T,EACZ90K,KAAK24M,OAAS34M,KAAK+gK,KAAKj/B,UAAUprH,IAElC1W,KAAKk7H,QAAQ,qBAEfl7H,KAAK44M,0BAA0B1C,GAAal2M,KAAKgiI,UAAW8yC,IAC5D/6K,EAAS8+M,eAAiBxC,GAAwBr2M,KAAK+gK,KAAKj/B,UAAW/nI,EAASy+M,aAAanhN,MAAO2I,KAAK24M,OAAO33E,SAChHhhI,KAAKk7H,QAAQ,CACX7jI,KAAM,wBACN0C,aAEFiG,KAAKk7H,QAAQ,iBACf,CAKAK,OAAAA,GACEv7H,KAAKk7H,QAAQ,WACbl7H,KAAK84M,cACL/2D,IAAAA,aAAsB/hJ,KAAK+4M,oBAC3Bh3D,IAAAA,aAAsB/hJ,KAAKg5M,uBAC3Bh5M,KAAKg3M,mBAAqB,IAAIvD,GAC9BzzM,KAAKi7H,KACP,CACA69E,WAAAA,GACE,GAAI94M,KAAKyhM,QAAS,CAChB,MAAMwX,EAAaj5M,KAAKyhM,QACxBzhM,KAAKyhM,QAAU,KACfwX,EAAWl8M,mBAAqB,KAChCk8M,EAAWv7M,OACb,CACF,CAgBAskI,KAAAA,CAAMH,EAAUq3E,GAEd,IAAKr3E,EACH,OAAO7hI,KAAK24M,OAGd,GAAmB,iBAAf34M,KAAK25G,MACP,MAAM,IAAIlgH,MAAM,qCAAuCuG,KAAK25G,OAI9D,GAAwB,kBAAbkoB,EAAuB,CAChC,IAAK7hI,KAAK+gK,KAAKj/B,UAAUD,GACvB,MAAM,IAAIpoI,MAAM,yBAA2BooI,GAE7CA,EAAW7hI,KAAK+gK,KAAKj/B,UAAUD,EACjC,CAEA,GADAkgB,IAAAA,aAAsB/hJ,KAAKg5M,uBACvBE,EAAa,CACf,MAAMzgF,GAASoJ,EAAS/C,oBAAsB+C,EAAShD,gBAAkB,EAAI,KAAQ,IAErF,YADA7+H,KAAKg5M,sBAAwBj3D,IAAAA,WAAoB/hJ,KAAKgiI,MAAMjjI,KAAKiB,KAAM6hI,GAAU,GAAQpJ,GAE3F,CACA,MAAMw/E,EAAgBj4M,KAAK25G,MACrBw/F,GAAen5M,KAAK24M,QAAU92E,EAASnrH,KAAO1W,KAAK24M,OAAOjiM,GAC1D0iM,EAAkBp5M,KAAK+gK,KAAKj/B,UAAUD,EAASnrH,IAErD,GAAI0iM,GAAmBA,EAAgBp4E,SAGvCa,EAASb,SAAWa,EAAS1B,SAAS9hI,OAuBpC,OArBI2B,KAAKyhM,UACPzhM,KAAKyhM,QAAQ1kM,mBAAqB,KAClCiD,KAAKyhM,QAAQ/jM,QACbsC,KAAKyhM,QAAU,MAEjBzhM,KAAK25G,MAAQ,gBACb35G,KAAK24M,OAAS92E,OAEVs3E,IACFn5M,KAAKk7H,QAAQ,iBACS,uBAAlB+8E,EAMFj4M,KAAKk7H,QAAQ,kBAEbl7H,KAAKk7H,QAAQ,iBAYnB,GAFAl7H,KAAK44M,0BAA0B1C,GAAar0E,GAAU,KAEjDs3E,EACH,OAIF,GAFAn5M,KAAK25G,MAAQ,kBAET35G,KAAKyhM,QAAS,CAChB,GAAI5/D,EAAS8I,cAAgB3qI,KAAKyhM,QAAQ5nM,IAGxC,OAEFmG,KAAKyhM,QAAQ1kM,mBAAqB,KAClCiD,KAAKyhM,QAAQ/jM,QACbsC,KAAKyhM,QAAU,IACjB,CAEIzhM,KAAK24M,QACP34M,KAAKk7H,QAAQ,iBAEfl7H,KAAK04M,cAAgB72E,EACrB,MAAM9nI,EAAW,CACfy+M,aAAc,CACZnhN,KAAM,QACNgC,IAAKwoI,EAASxoI,MAGlB2G,KAAKk7H,QAAQ,CACX7jI,KAAM,uBACN0C,aAEFiG,KAAKyhM,QAAUzhM,KAAKy2M,KAAKl8M,IAAI,CAC3BlB,IAAKwoI,EAAS8I,YACdltI,gBAAiBuC,KAAKvC,gBACtB/D,YAAa,iBACZ,CAACuO,EAAO4mM,KAET,GAAK7uM,KAAKyhM,QAAV,CAKA,GAFA5/D,EAAS42E,YAAc78G,KAAKC,MAC5BgmC,EAAS8I,YAAcikE,GAAwB/sE,EAAS8I,YAAakkE,GACjE5mM,EACF,OAAOjI,KAAK83M,qBAAqB93M,KAAKyhM,QAAS5/D,EAAUo2E,GAE3Dj4M,KAAKk7H,QAAQ,CACX7jI,KAAM,0BACN0C,aAEFiG,KAAK+3M,aAAa,CAChBC,eAAgBnJ,EAAIr0M,aACpBX,IAAKgoI,EAASxoI,IACdqd,GAAImrH,EAASnrH,KAGO,uBAAlBuhM,EACFj4M,KAAKk7H,QAAQ,kBAEbl7H,KAAKk7H,QAAQ,cAnBf,CAoBA,GAEJ,CAKA0iC,KAAAA,GACM59J,KAAK+4M,qBACPh3D,IAAAA,aAAsB/hJ,KAAK+4M,oBAC3B/4M,KAAK+4M,mBAAqB,MAE5B/4M,KAAK84M,cACc,iBAAf94M,KAAK25G,QAGP35G,KAAKq5M,SAAU,GAGE,oBAAfr5M,KAAK25G,MAIH35G,KAAK24M,OACP34M,KAAK25G,MAAQ,gBAEb35G,KAAK25G,MAAQ,qBAES,0BAAf35G,KAAK25G,QACd35G,KAAK25G,MAAQ,gBAEjB,CAKAkrD,IAAAA,CAAKq0C,GACCl5M,KAAK+4M,qBACPh3D,IAAAA,aAAsB/hJ,KAAK+4M,oBAC3B/4M,KAAK+4M,mBAAqB,MAE5B,MAAM/2E,EAAQhiI,KAAKgiI,QACnB,GAAIk3E,EAAJ,CACE,MAAMzgF,EAAQuJ,GAASA,EAAMlD,oBAAsBkD,EAAMnD,gBAAkB,EAAI,IAAO,IACtF7+H,KAAK+4M,mBAAqBh3D,IAAAA,YAAoB,KAC5C/hJ,KAAK+4M,mBAAqB,KAC1B/4M,KAAK6kK,MAAM,GACVpsC,EAEL,MACKz4H,KAAKq5M,QAINr3E,IAAUA,EAAMhB,QAClBhhI,KAAKk7H,QAAQ,sBAEbl7H,KAAKk7H,QAAQ,kBANbl7H,KAAKqG,OAQT,CACAuyM,yBAAAA,CAA0BngF,GACpBz4H,KAAK+4M,qBACPh3D,IAAAA,aAAsB/hJ,KAAK+4M,oBAC3B/4M,KAAK+4M,mBAAqB,MAGvB/4M,KAAKgiI,UAAWhiI,KAAKgiI,QAAQhB,UAGlChhI,KAAK+4M,mBAAqBh3D,IAAAA,YAAoB,KAC5C/hJ,KAAK+4M,mBAAqB,KAC1B/4M,KAAKk7H,QAAQ,sBACbl7H,KAAK44M,0BAA0BngF,EAAM,GACpCA,GACL,CAKApyH,KAAAA,GAEE,GADArG,KAAKq5M,SAAU,EACS,kBAAbr5M,KAAK+L,IAqBd,OAlBK/L,KAAK+L,IAAI1S,MACZ2G,KAAK+L,IAAI1S,IAAM0oJ,IAAAA,SAAkBx9C,MAInCvkG,KAAK+L,IAAI4+H,YAAc3qI,KAAK+L,IAAI1S,SAUhCyC,YAAW,KACTkE,KAAKs5M,qBAAqBt5M,KAAK+L,IAAI,GAClC,GAGL,MAAMhS,EAAW,CACfy+M,aAAc,CACZnhN,KAAM,eACNgC,IAAK2G,KAAK+L,MAGd/L,KAAKk7H,QAAQ,CACX7jI,KAAM,uBACN0C,aAGFiG,KAAKyhM,QAAUzhM,KAAKy2M,KAAKl8M,IAAI,CAC3BlB,IAAK2G,KAAK+L,IACVtO,gBAAiBuC,KAAKvC,gBACtB/D,YAAa,iBACZ,CAACuO,EAAO4mM,KAET,IAAK7uM,KAAKyhM,QACR,OAIF,GADAzhM,KAAKyhM,QAAU,KACXx5L,EAgBF,OAfAjI,KAAKiI,MAAQ,CACX/L,OAAQ2yM,EAAI3yM,OACZmS,QAAS,sCAAsCrO,KAAK+L,OACpDvR,aAAcq0M,EAAIr0M,aAElBmD,KAAM,EACN5D,SAAUw6M,GAAiC,CACzC76M,YAAam1M,EAAIn1M,YACjB+nM,QAASoN,EACT5mM,WAGe,iBAAfjI,KAAK25G,QACP35G,KAAKq5M,SAAU,GAEVr5M,KAAKk7H,QAAQ,SAEtBl7H,KAAKk7H,QAAQ,CACX7jI,KAAM,0BACN0C,aAEFiG,KAAK+L,IAAM6iM,GAAwB5uM,KAAK+L,IAAK8iM,GAC7C7uM,KAAKk7H,QAAQ,CACX7jI,KAAM,qBACN0C,aAEF,MAAM4kI,EAAW3+H,KAAKk4M,eAAe,CACnC1+D,eAAgBq1D,EAAIr0M,aACpBX,IAAKmG,KAAK+L,MAGZhS,EAAS8+M,eAAiBxC,GAAwB13E,EAASmD,UAAW/nI,EAASy+M,aAAanhN,MAAM,GAClG2I,KAAKk7H,QAAQ,CACX7jI,KAAM,wBACN0C,aAEFiG,KAAKs5M,qBAAqB36E,EAAS,GAEvC,CACA46E,MAAAA,GACE,MAA2B,kBAAbv5M,KAAK+L,IAAmB/L,KAAK+L,IAAM/L,KAAK+L,IAAI1S,GAC5D,CAoBAigN,oBAAAA,CAAqB36E,GAEnB,GADA3+H,KAAK25G,MAAQ,qBACTglB,EAASmD,UAkBX,OAjBA9hI,KAAK+gK,KAAOpiC,EACZu0E,GAAoBlzM,KAAK+gK,KAAM/gK,KAAKu5M,UAIpC56E,EAASmD,UAAUnpI,SAAQkpI,IACzBA,EAAS1B,SAAWk1E,GAAexzE,GACnCA,EAAS1B,SAASxnI,SAAQ0lI,IACxB82E,GAAmB92E,EAASwD,EAAS8I,YAAY,GACjD,IAEJ3qI,KAAKk7H,QAAQ,uBACRl7H,KAAKyhM,SAGRzhM,KAAKgiI,MAAMhiI,KAAK+gK,KAAKj/B,UAAU,KAOnC,MAAMzoI,EAAM2G,KAAKu5M,UAAYx3D,IAAAA,SAAkBx9C,KAC/CvkG,KAAK+gK,KAvkCYy4C,EAACx3E,EAAO3oI,KAC3B,MAAMqd,EAAKm8L,GAAiB,EAAGx5M,GACzB0nK,EAAO,CACXh/B,YAAa,CACX,MAAS,CAAC,EACV,MAAS,CAAC,EACV,kBAAmB,CAAC,EACpB,UAAa,CAAC,GAEhB1oI,IAAK0oJ,IAAAA,SAAkBx9C,KACvBomC,YAAaoX,IAAAA,SAAkBx9C,KAC/Bu9B,UAAW,CAAC,CACVzoI,MACAqd,KACAi0H,YAAatxI,EAGb8a,WAAY,CAAC,KAOjB,OAHA4sJ,EAAKj/B,UAAUprH,GAAMqqJ,EAAKj/B,UAAU,GAEpCi/B,EAAKj/B,UAAUzoI,GAAO0nK,EAAKj/B,UAAU,GAC9Bi/B,CAAI,EA+iCGy4C,CAAa76E,EAAUtlI,GACnC2G,KAAK+3M,aAAa,CAChBQ,eAAgB55E,EAChB9kI,IAAKR,EACLqd,GAAI1W,KAAK+gK,KAAKj/B,UAAU,GAAGprH,KAE7B1W,KAAKk7H,QAAQ,iBACf,CAYAu+E,mBAAAA,CAAoB5jB,EAAO6jB,GACzB,MAAM34C,EAAO/gK,KAAK+gK,KACZ44C,EAAU9jB,EAAM+jB,GACtB,IAAI77M,EAAIgjK,EAAKj/B,UAAUzjI,OAEvB,KAAON,KAAK,CACV,MAAMkO,EAAI80J,EAAKj/B,UAAU/jI,GACzB,GAAIkO,EAAEkI,WAAW,gBAAkBwlM,EAAS,CAC1C,MAAME,EAAiB5tM,EAAE0+H,YACnBmvE,EAAgB7tM,EAAEyK,GAExB,GAAIgjM,EAAU,CACZ,MAAMK,EAAiB/5M,KAAKg6M,gBAAgB/tM,EAAE0+H,YAAakrD,GACrDokB,EAAgBpH,GAAiB8G,EAASI,GAC1C5lM,EAAanU,KAAKk6M,uBAAuBP,EAAS1tM,EAAEkI,YACpDgmM,EAAkBn6M,KAAKo6M,qBAAqBnuM,EAAGguM,EAAepkB,EAAO1hL,GAC3E4sJ,EAAKj/B,UAAU/jI,GAAKo8M,EACpBp5C,EAAKj/B,UAAUm4E,GAAiBE,EAChCp5C,EAAKj/B,UAAUi4E,GAAkBI,CACnC,MAEEp5C,EAAKj/B,UAAU1a,OAAOrpH,EAAG,UAGpBgjK,EAAKj/B,UAAUg4E,UACf/4C,EAAKj/B,UAAU+3E,EACxB,CACF,CACA75M,KAAKq6M,yBAAyBxkB,EAAO6jB,EACvC,CAaAW,wBAAAA,CAAyBxkB,EAAO6jB,GAC9B,MAAM34C,EAAO/gK,KAAK+gK,KACZrqJ,EAAKm/K,EAAM+jB,GACjB,CAAC,QAAS,YAAa,mBAAmBjhN,SAAQ4uI,IAChD,GAAKw5B,EAAKh/B,YAAYwF,IAAew5B,EAAKh/B,YAAYwF,GAAW7wH,GAGjE,IAAK,MAAMq3H,KAAYgzB,EAAKh/B,YAAYwF,GAEtC,GAAIwG,IAAar3H,EAAI,CACnB,IAAK,MAAMs3H,KAAY+yB,EAAKh/B,YAAYwF,GAAWwG,GAAW,CAC3CgzB,EAAKh/B,YAAYwF,GAAWwG,GAAUC,GAC9ClM,UAAUnpI,SAAQ,CAACsT,EAAGlO,KAC7B,MAAMu8M,EAAmBv5C,EAAKj/B,UAAU71H,EAAEyK,IACpCojM,EAAgBQ,EAAiB5jM,GACjCmjM,EAAiBS,EAAiB3vE,mBACjCo2B,EAAKj/B,UAAUg4E,UACf/4C,EAAKj/B,UAAU+3E,EAAe,GAEzC,QAEO94C,EAAKh/B,YAAYwF,GAAWwG,EACrC,CACF,IAGE2rE,GACF15M,KAAKu6M,yBAAyB1kB,EAElC,CAQA2kB,eAAAA,CAAgB3kB,GAA0B,IAAnB4kB,EAAYxwM,UAAA5L,OAAA,QAAA/D,IAAA2P,UAAA,GAAAA,UAAA,GAAG,CAAC,EACrC,MAAM82J,EAAO/gK,KAAK+gK,KACZloK,EAAQkoK,EAAKj/B,UAAUzjI,OACvBhF,EAAM2G,KAAKg6M,gBAAgBS,EAAa9vE,YAAakrD,GACrD6kB,EAAa7H,GAAiBhd,EAAM+jB,GAAIvgN,GACxC8a,EAAanU,KAAKk6M,uBAAuBrkB,EAAM+jB,GAAIa,EAAatmM,YAChE0tH,EAAW7hI,KAAKo6M,qBAAqBK,EAAcC,EAAY7kB,EAAO1hL,GAC5E4sJ,EAAKj/B,UAAUjpI,GAASgpI,EAExBk/B,EAAKj/B,UAAU44E,GAAc74E,EAC7Bk/B,EAAKj/B,UAAUzoI,GAAOwoI,EACtB7hI,KAAKu6M,yBAAyB1kB,EAChC,CAWA0kB,wBAAAA,CAAyB1kB,GACvB,MAAMn/K,EAAKm/K,EAAM+jB,GACXe,EAAS9kB,EAAM,WACf90B,EAAO/gK,KAAK+gK,KAClB,CAAC,QAAS,YAAa,mBAAmBpoK,SAAQ4uI,IAGhD,GAAKw5B,EAAKh/B,YAAYwF,KAAcw5B,EAAKh/B,YAAYwF,GAAW7wH,GAGhE,IAAK,MAAMq3H,KAAYgzB,EAAKh/B,YAAYwF,GACtC,GAAIwG,IAAa4sE,EAAjB,CAEE55C,EAAKh/B,YAAYwF,GAAW7wH,GAAM,CAAC,EAKrC,IAAK,MAAMs3H,KAAY+yB,EAAKh/B,YAAYwF,GAAWwG,GAAW,CAC5D,MAAM2nE,EAAW30C,EAAKh/B,YAAYwF,GAAWwG,GAAUC,GACvD+yB,EAAKh/B,YAAYwF,GAAW7wH,GAAIs3H,GAAYh2I,EAAS,CAAC,EAAG09M,GACzD,MAAMF,EAAWz0C,EAAKh/B,YAAYwF,GAAW7wH,GAAIs3H,GAE3C4sE,EAAS56M,KAAKg6M,gBAAgBtE,EAAS/qE,YAAakrD,GAC1D2f,EAAS7qE,YAAciwE,EACvBpF,EAASn8M,IAAMuhN,EAEfpF,EAAS1zE,UAAY,GAErB4zE,EAAS5zE,UAAUnpI,SAAQ,CAACsT,EAAGlO,KAC7B,MAAMu8M,EAAmBv5C,EAAKj/B,UAAU71H,EAAEyK,IACpCm3H,EAAQilE,GAAQvrE,EAAW7wH,EAAIs3H,GAC/B6sE,EAAgBhI,GAAiBn8L,EAAIm3H,GAE3C,GAAIysE,IAAqBv5C,EAAKj/B,UAAU+4E,GAAgB,CACtD,MAAMC,EAAmB96M,KAAKo6M,qBAAqBE,EAAkBO,EAAehlB,GAC9EkkB,EAAiBe,EAAiBnwE,YACxCo2B,EAAKj/B,UAAU+4E,GAAiBC,EAChC/5C,EAAKj/B,UAAUi4E,GAAkBe,CACnC,CACAtF,EAAS1zE,UAAU/jI,GAAKiC,KAAKo6M,qBAAqBnuM,EAAG4uM,EAAehlB,EAAM,GAE9E,CAzBA,CA0BF,GAEJ,CAaAukB,oBAAAA,CAAqBK,EAAc/jM,EAAIm/K,EAAO1hL,GAC5C,MAAM9a,EAAM2G,KAAKg6M,gBAAgBS,EAAa9vE,YAAakrD,GACrDklB,EAAW,CACfpwE,YAAatxI,EACbA,MACAqd,MASF,OANI+jM,EAAat6E,WACf46E,EAAS56E,SAAW,IAElBhsH,IACF4mM,EAAS5mM,WAAaA,GAEjB+1H,GAAMuwE,EAAcM,EAC7B,CAYAf,eAAAA,CAAgBgB,EAASnlB,GACvB,MAAMx8L,EAAM,IAAIwhI,IAAImgF,GACpB3hN,EAAI4hN,SAAWplB,EAAM,mBAAmBqlB,KACxC,MAAM3hN,EAASs8L,EAAM,mBAAmBslB,OAExC,IAAK,MAAMpiN,KAAOoG,OAAO0M,KAAKtS,GAC5BF,EAAIimI,aAAa3+H,IAAI5H,EAAKQ,EAAOR,IAEnC,OAAOM,EAAIkrG,IACb,CAUA21G,sBAAAA,CAAuBxjM,EAAI0kM,GACzB,MAAMjnM,EAAa,CACjB,aAAgBuC,GAOlB,MALA,CAAC,QAAS,YAAa,mBAAmB/d,SAAQ4uI,IAC5C6zE,EAAc7zE,KAChBpzH,EAAWozH,GAAa7wH,EAC1B,IAEKvC,CACT,CAQAknM,WAAAA,CAAYx5E,GACV,GAAIA,EAASP,kBAAmB,CAC9B,MAAMg6E,EAAS,IAAI16M,IACnB,IAAK,MAAM26M,KAAa15E,EAASP,kBAAmB,CAClD,MAAMG,EAAQI,EAASP,kBAAkBi6E,GAAWpnM,WAAWstH,MAC3DA,GACF65E,EAAOv6M,IAAI0gI,EAAMzqI,cAErB,CACA,OAAOskN,CACT,CACF,EAOF,MAAME,GAAkB,SAAU/Z,EAASx5L,EAAOxR,EAAUH,GAC1D,MAAMmlN,EAAuC,gBAAzBha,EAAQhnM,aAAiCgnM,EAAQhrM,SAAWgrM,EAAQjnM,cACnFyN,GAASwzM,IACZha,EAAQia,aAAe9/G,KAAKC,MAC5B4lG,EAAQka,cAAgBla,EAAQia,aAAeja,EAAQma,YACvDna,EAAQmR,cAAgB6I,EAAYp5H,YAAco5H,EAAYp9M,OACzDojM,EAAQrxD,YACXqxD,EAAQrxD,UAAY9sI,KAAK80H,MAAMqpE,EAAQmR,cAAgBnR,EAAQka,cAAgB,EAAI,OAGnFllN,EAASgB,UACXgqM,EAAQoa,gBAAkBplN,EAASgB,SAKjCwQ,GAAwB,cAAfA,EAAMtK,OACjB8jM,EAAQqT,UAAW,GAKhB7sM,GAAUw5L,EAAQlmM,SAAmC,MAAxB9E,EAASE,YAA8C,MAAxBF,EAASE,YAA8C,IAAxBF,EAASE,aACvGsR,EAAQ,IAAIxO,MAAM,mCAAqCgoM,IAAYga,GAAeha,EAAQjnM,iBAE5FlE,EAAS2R,EAAOw5L,EAClB,EAoCMqa,GAAa,WACjB,MAAMvhN,EAAM,SAASwhN,EAAYziN,EAAShD,GAExCgD,EAAU4wI,GAAM,CACdjwI,QAAS,MACRX,GAIH,MAAM0iN,EAAgBD,EAAYC,eAAiBpQ,GAAQqQ,IAAI1hN,IAAIyhN,cAG7DE,EAAsBH,EAAYG,qBAAuBtQ,GAAQqQ,IAAI1hN,IAAI2hN,qBAAuB,IAAIt7M,IACpGu7M,EAAuBJ,EAAYI,sBAAwBvQ,GAAQqQ,IAAI1hN,IAAI4hN,qBAC7EH,GAA0C,oBAAlBA,IAC1BpQ,GAAQ51G,IAAI3qF,KAAK,uDACjB6wM,EAAoBn7M,IAAIi7M,IAI1B,MAAMI,GAAyC,IAA7BxQ,GAAQqQ,IAAI1hN,IAAI4xM,SAAoBP,GAAQrxM,IAAMqxM,GAAQqQ,IAAI1hN,IAE1E8hN,EAjDkBC,EAACC,EAAYjjN,KACvC,IAAKijN,IAAeA,EAAWn7M,KAC7B,OAEF,IAAIo7M,EAAaljN,EAIjB,OAHAijN,EAAW5jN,SAAQ8jN,IACjBD,EAAaC,EAAgBD,EAAW,IAEnCA,CAAU,EAyCcF,CAAoBJ,EAAqB5iN,GAEtE4iN,EAAoBj7M,OAAO+6M,GAE3B,MAAMva,EAAU2a,EAAUC,GAAwB/iN,GAAS,SAAU2O,EAAOxR,GAG1E,MArCuBimN,EAACC,EAAalb,EAASx5L,EAAOxR,KACpDkmN,GAAgBA,EAAYv7M,MAGjCu7M,EAAYhkN,SAAQikN,IAClBA,EAAiBnb,EAASx5L,EAAOxR,EAAS,GAC1C,EA8BEimN,CAAqBP,EAAsB1a,EAASx5L,EAAOxR,GACpD+kN,GAAgB/Z,EAASx5L,EAAOxR,EAAUH,EACnD,IACMumN,EAAgBpb,EAAQ/jM,MAQ9B,OAPA+jM,EAAQ/jM,MAAQ,WAEd,OADA+jM,EAAQlmM,SAAU,EACXshN,EAAc/kN,MAAM2pM,EAASx3L,UACtC,EACAw3L,EAAQpoM,IAAMC,EAAQD,IACtBooM,EAAQ/nM,YAAcJ,EAAQI,YAC9B+nM,EAAQma,YAAchgH,KAAKC,MACpB4lG,CACT,EAEA,OADAlnM,EAAI4xM,UAAW,EACR5xM,CACT,EA4BMuiN,GAAoB,SAAUz+E,GAClC,MAAM5mI,EAAU,CAAC,EAIjB,OAHI4mI,EAAQhB,YACV5lI,EAAQslN,MAtBS,SAAU1/E,GAG7B,IAAI2/E,EACJ,MAAMC,EAAiB5/E,EAAU1kH,OAMjC,OAJEqkM,EAD8B,kBAArB3/E,EAAU1kH,QAAmD,kBAArB0kH,EAAUh/H,OAC5C0jJ,IAAAA,OAAgB1kB,EAAU1kH,QAAUopI,IAAAA,OAAgB1kB,EAAUh/H,QAAU0jJ,IAAAA,OAAgB,GAExF1kB,EAAU1kH,OAAS0kH,EAAUh/H,OAAS,EAEhD,SAAW4+M,EAAiB,IAAMD,CAC3C,CAWoBE,CAAa7+E,EAAQhB,YAEhC5lI,CACT,EAcM0lN,GAAY,SAAUrnJ,EAAO/3D,GACjC,OAAO+3D,EAAMzvD,MAAMtI,GAAK,IAAM+3D,EAAM4pB,IAAI3hF,EAC1C,EASMq/M,GAAkB,SAAUzlN,EAAGoG,GACnC,MAAMzG,EAAQK,EAAE0H,SAAS,IACzB,MAAO,KAAKwZ,UAAU,EAAG,EAAIvhB,EAAM+G,QAAU/G,GAASyG,EAAI,EAAI,IAAM,GACtE,EACMs/M,GAAoB,SAAU1lN,GAClC,OAAIA,GAAK,IAAQA,EAAI,IACZC,OAAOC,aAAaF,GAEtB,GACT,EAYM2lN,GAA4B,SAAUjvM,GAC1C,MAAMkvM,EAAe,CAAC,EAatB,OAZAp+M,OAAO0M,KAAKwC,GAAS1V,SAAQI,IAC3B,MAAMzB,EAAQ+W,EAAQtV,GAClBmvI,EAAkB5wI,GACpBimN,EAAaxkN,GAAO,CAClBsvI,MAAO/wI,EAAM6qF,OACbC,WAAY9qF,EAAM8qF,WAClBC,WAAY/qF,EAAM+qF,YAGpBk7H,EAAaxkN,GAAOzB,CACtB,IAEKimN,CACT,EAWMC,GAAgB,SAAU/wE,GAC9B,MAAMpP,EAAYoP,EAAYpP,WAAa,CACzCh/H,OAAQwkH,IACRlqG,OAAQ,GAEV,MAAO,CAAC0kH,EAAUh/H,OAAQg/H,EAAU1kH,OAAQ8zH,EAAY9B,aAAa52H,KAAK,IAC5E,EAQM0pM,GAAe,SAAU1kN,GAC7B,OAAOA,EAAI4xI,WACb,EAUM+yE,GAAU/gN,IACd,MAAM0rI,EAAQpvI,MAAMmG,UAAUpG,MAAM6F,KAAKlC,GACnCghN,EAAO,GACb,IACIznC,EACA0nC,EAFAllN,EAAS,GAGb,IAAK,IAAIiyH,EAAI,EAAGA,EAAI0d,EAAMhqI,OAASs/M,EAAMhzF,IACvCurD,EAAM7tC,EAAMrvI,MAAM2xH,EAAIgzF,EAAMhzF,EAAIgzF,EAAOA,GAAMtnM,IAAI+mM,IAAiBrpM,KAAK,IACvE6pM,EAAQv1E,EAAMrvI,MAAM2xH,EAAIgzF,EAAMhzF,EAAIgzF,EAAOA,GAAMtnM,IAAIgnM,IAAmBtpM,KAAK,IAC3Erb,GAAUw9K,EAAM,IAAM0nC,EAAQ,KAEhC,OAAOllN,CAAM,EAaf,IAAImlN,GAAqB1+M,OAAOqE,OAAO,CACrC4oH,UAAW,KACXkxF,0BAA2BA,GAC3BE,cAAeA,GACfC,aAAcA,GACdC,QAASA,GACTI,QAjBchrE,IAAA,IAAC,MACfzK,GACDyK,EAAA,OAAK4qE,GAAQr1E,EAAM,EAgBlB01E,WAfiBlzE,IACjB,IACI9sI,EADArF,EAAS,GAEb,IAAKqF,EAAI,EAAGA,EAAI8sI,EAAOxsI,OAAQN,IAC7BrF,GAAUykN,GAAUtyE,EAAQ9sI,GAAK,IAEnC,OAAOrF,CAAM,IAef,MAuMMslN,GAAiBhpE,IAIjB,IAJkB,SACtBnT,EAAQ,KACR1/B,EAAgB,SAChB7rG,GACD0+I,EACC,IAAK1+I,EACH,MAAM,IAAImD,MAAM,6CAElB,IAAKooI,QAAqBvnI,IAAT6nG,EACf,OAAO7rG,EAAS,CACd+X,QAAS,uDAGb,MAAM4vM,EAtHyBC,EAAC/7G,EAAM0/B,KAKtC,IAAKA,IAAaA,EAAS1B,UAAyC,IAA7B0B,EAAS1B,SAAS9hI,OACvD,OAAO,KAET,IACIggI,EADA8/E,EAAa,EAEjB,IAAK,IAAIpgN,EAAI,EAAGA,EAAI8jI,EAAS1B,SAAS9hI,SACpCggI,EAAUwD,EAAS1B,SAASpiI,GAO5BogN,EAAa9/E,EAAQ+/E,gBAAkB//E,EAAQ+/E,gBAAgBC,0BAA4BF,EAAa9/E,EAAQtB,WAC5G56B,GAAQg8G,IATgCpgN,KAa9C,MAAMmyM,EAAcruE,EAAS1B,SAAS0B,EAAS1B,SAAS9hI,OAAS,GACjE,GAAI6xM,EAAYkO,iBAAmBlO,EAAYkO,gBAAgBC,0BAA4Bl8G,EAEzF,OAAO,KAET,GAAIA,EAAOg8G,EAAY,CAIrB,GAAIh8G,EAAOg8G,EA9HmB,IA8HNjO,EAAYnzE,SAIlC,OAAO,KAETsB,EAAU6xE,CACZ,CACA,MAAO,CACL7xE,UACAigF,eAAgBjgF,EAAQ+/E,gBAAkB//E,EAAQ+/E,gBAAgBG,4BAA8BJ,EAAa9/E,EAAQtB,SAGrH1lI,KAAMgnI,EAAQ+/E,gBAAkB,WAAa,WAC9C,EAwEsBF,CAAyB/7G,EAAM0/B,GACtD,IAAKo8E,EACH,OAAO3nN,EAAS,CACd+X,QAAS,oCAGb,GAA4B,aAAxB4vM,EAAe5mN,KACjB,OAAOf,EAAS,CACd+X,QAAS,wFACTmwM,SAAUP,EAAeK,iBAG7B,MAAMG,EAAoB,CACxBC,aAAcv8G,GAEVw8G,EAlNwBC,EAACC,EAAYxgF,KAC3C,IAAKA,EAAQZ,eAGX,OAAO,KAET,MAAMqhF,EAA6BzgF,EAAQ+/E,gBAAgBU,2BAIrDC,EAAyBF,GAHPxgF,EAAQ+/E,gBAAgBG,4BAEPO,GAEzC,OAAO,IAAIljH,KAAKyiC,EAAQZ,eAAesF,UAAqC,IAAzBg8E,EAA8B,EAuM7DH,CAAwBz8G,EAAM87G,EAAe5/E,SAIjE,OAHIsgF,IACFF,EAAkBx7E,gBAAkB07E,EAAYK,eAE3C1oN,EAAS,KAAMmoN,EAAkB,EAiBpCQ,GAAoB1pE,IAQpB,IARqB,YACzBopE,EAAW,SACX98E,EAAQ,WACRq9E,EAAa,EAAC,OACdC,EAAM,eACNC,GAAiB,EAAI,KACrBljD,EAAI,SACJ5lK,GACDi/I,EACC,IAAKj/I,EACH,MAAM,IAAImD,MAAM,gDAElB,GAA2B,qBAAhBklN,IAAgC98E,IAAas9E,EACtD,OAAO7oN,EAAS,CACd+X,QAAS,yEAGb,IAAKwzH,EAASb,UAAYk7B,EAAK6K,YAC7B,OAAOzwK,EAAS,CACd+X,QAAS,4DAGb,IAnGgCwzH,KAChC,IAAKA,EAAS1B,UAAyC,IAA7B0B,EAAS1B,SAAS9hI,OAC1C,OAAO,EAET,IAAK,IAAIN,EAAI,EAAGA,EAAI8jI,EAAS1B,SAAS9hI,OAAQN,IAE5C,IADgB8jI,EAAS1B,SAASpiI,GACrB0/H,eACX,OAAO,EAGX,OAAO,CAAI,EAyFN4hF,CAA0Bx9E,GAC7B,OAAOvrI,EAAS,CACd+X,QAAS,yDAA2DwzH,EAAS8I,cAGjF,MAAMszE,EA1O0BqB,EAACX,EAAa98E,KAI9C,IAAIpE,EACJ,IACEA,EAAiB,IAAI7hC,KAAK+iH,EAC5B,CAAE,MAAOhnN,GACP,OAAO,IACT,CACA,IAAKkqI,IAAaA,EAAS1B,UAAyC,IAA7B0B,EAAS1B,SAAS9hI,OACvD,OAAO,KAET,IAAIggI,EAAUwD,EAAS1B,SAAS,GAChC,GAAI1C,EAAiB,IAAI7hC,KAAKyiC,EAAQZ,gBAEpC,OAAO,KAET,IAAK,IAAI1/H,EAAI,EAAGA,EAAI8jI,EAAS1B,SAAS9hI,OAAS,IAC7CggI,EAAUwD,EAAS1B,SAASpiI,KAExB0/H,EADqB,IAAI7hC,KAAKimC,EAAS1B,SAASpiI,EAAI,GAAG0/H,kBAFX1/H,KAOlD,MAAMmyM,EAAcruE,EAAS1B,SAAS0B,EAAS1B,SAAS9hI,OAAS,GAC3DkhN,EAAmBrP,EAAYzyE,eAC/B+hF,EAAsBtP,EAAYkO,iBAtCLA,EAsCoDlO,EAAYkO,iBArC5EC,0BAA4BD,EAAgBG,4BAA8BH,EAAgBU,2BAqCK5O,EAAYnzE,SApElG,IAoE6GmzE,EAAYnzE,SAtCtHqhF,MAwCnC,OAAI3gF,EADmB,IAAI7hC,KAAK2jH,EAAiBx8E,UAAkC,IAAtBy8E,GAGpD,MAEL/hF,EAAiB,IAAI7hC,KAAK2jH,KAC5BlhF,EAAU6xE,GAEL,CACL7xE,UACAigF,eAAgBjgF,EAAQ+/E,gBAAkB//E,EAAQ+/E,gBAAgBG,4BAA8BrM,GAASn1E,SAAS8E,EAAUA,EAASX,cAAgBW,EAAS1B,SAASrnI,QAAQulI,IAK/KhnI,KAAMgnI,EAAQ+/E,gBAAkB,WAAa,YAC9C,EA8LsBkB,CAA0BX,EAAa98E,GAE9D,IAAKo8E,EACH,OAAO3nN,EAAS,CACd+X,QAAS,GAAGswM,kCAGhB,MAAMtgF,EAAU4/E,EAAe5/E,QACzBohF,EAlIuBC,EAACC,EAAqBhB,KACnD,IAAIiB,EACA38E,EACJ,IACE28E,EAAkB,IAAIhkH,KAAK+jH,GAC3B18E,EAAkB,IAAIrnC,KAAK+iH,EAC7B,CAAE,MAAOhnN,GAAI,CAEb,MAAMkoN,EAAmBD,EAAgB78E,UAEzC,OADyBE,EAAgBF,UACd88E,GAAoB,GAAI,EAwH/BH,CAAuBrhF,EAAQZ,eAAgBkhF,GACnE,GAA4B,aAAxBV,EAAe5mN,KAEjB,OAAmB,IAAf6nN,EACK5oN,EAAS,CACd+X,QAAS,GAAGswM,sCAGhBQ,EAAOlB,EAAeK,eAAiBmB,QACvCvjD,EAAK/O,IAAI,UAAU,KACjB8xD,GAAkB,CAChBN,cACA98E,WACAq9E,WAAYA,EAAa,EACzBC,SACAC,iBACAljD,OACA5lK,YACA,KAON,MAAMwpN,EAAazhF,EAAQh4H,MAAQo5M,EAKnCvjD,EAAK/O,IAAI,UAJc4yD,IACdzpN,EAAS,KAAM4lK,EAAK+H,iBAKzBm7C,GACFljD,EAAK0B,QAEPuhD,EAAOW,EAAW,EAKdE,GAAsBA,CAACve,EAASn1G,KACpC,GAA2B,IAAvBm1G,EAAQzkM,WACV,OAAOsvF,GAEH,EAEF2zH,GAAmBA,CAAC5mN,EAAKkB,EAAK+xF,EAAI5yF,KACtC,IACIwmN,EADA73E,EAAQ,GAER83E,GAAW,EACf,MAAMC,EAAwB,SAAU5pN,EAAKq4M,EAAKx3M,EAAMgpN,GAGtD,OAFAxR,EAAInxM,QACJyiN,GAAW,EACJ7zH,EAAG91F,EAAKq4M,EAAKx3M,EAAMgpN,EAC5B,EACMC,EAAmB,SAAUr4M,EAAOw5L,GACxC,GAAI0e,EACF,OAEF,GAAIl4M,EAMF,OALAA,EAAMlO,SAAWw6M,GAAiC,CAChD76M,cACA+nM,UACAx5L,UAEKm4M,EAAsBn4M,EAAOw5L,EAAS,GAAIp5D,GAGnD,MAAMk4E,EAAU9e,EAAQjnM,aAAaqe,UAAUwvH,GAASA,EAAMhmD,YAAc,EAAGo/G,EAAQjnM,aAAa6D,QAMpG,GAJAgqI,EVt48B2B,WAC7B,IAAK,IAAI8B,EAAOlgI,UAAU5L,OAAQmiN,EAAU,IAAIvnN,MAAMkxI,GAAOE,EAAO,EAAGA,EAAOF,EAAME,IAClFm2E,EAAQn2E,GAAQpgI,UAAUogI,GAO5B,IAJAm2E,EAAUA,EAAQ70M,QAAO,SAAU+6E,GACjC,OAAOA,IAAMA,EAAErE,YAAcqE,EAAEroF,SAAwB,kBAANqoF,CACnD,KAEYroF,QAAU,EAGpB,OAAO+pI,EAAQo4E,EAAQ,IAGzB,IAAIC,EAAWD,EAAQtpN,QAAO,SAAU2xI,EAAOp1H,EAAK1V,GAClD,OAAO8qI,GAASp1H,EAAI4uE,YAAc5uE,EAAIpV,OACxC,GAAG,GACCqiN,EAAa,IAAI3oN,WAAW0oN,GAC5B9nM,EAAS,EAMb,OALA6nM,EAAQ7nN,SAAQ,SAAU8a,GACxBA,EAAM20H,EAAQ30H,GACditM,EAAW//M,IAAI8S,EAAKkF,GACpBA,GAAUlF,EAAI4uE,UAChB,IACOq+H,CACT,CU428BYC,CAAkBt4E,EAAOkB,EAAcg3E,GAAS,IACxDL,EAAYA,GAAatlE,GAAavS,GAGlCA,EAAMhqI,OAAS,IAAM6hN,GAAa73E,EAAMhqI,OAAS6hN,EAAY,EAC/D,OAAOF,GAAoBve,GAAS,IAAM2e,EAAsBn4M,EAAOw5L,EAAS,GAAIp5D,KAEtF,MAAMhxI,EAAOmpJ,GAAwBnY,GAIrC,MAAa,OAAThxI,GAAiBgxI,EAAMhqI,OAAS,MAK/BhH,GAAQgxI,EAAMhqI,OAAS,IAJnB2hN,GAAoBve,GAAS,IAAM2e,EAAsBn4M,EAAOw5L,EAAS,GAAIp5D,KAO/E+3E,EAAsB,KAAM3e,EAASpqM,EAAMgxI,EACpD,EACM/uI,EAAU,CACdD,MACA4E,UAAAA,CAAWwjM,GAETA,EAAQmf,iBAAiB,sCACzBnf,EAAQvuG,iBAAiB,YAAY,SAAA8mD,GAGlC,IAH4C,MAC7CnR,EAAK,OACLg4E,GACD7mE,EACC,OAAOwhE,GAAgB/Z,EAAS,KAAM,CACpC9qM,WAAY8qM,EAAQvlM,QACnBokN,EACL,GACF,GAEI7e,EAAUlnM,EAAIjB,GAAS,SAAU2O,EAAOxR,GAC5C,OAAO+kN,GAAgB/Z,EAASx5L,EAAOxR,EAAU6pN,EACnD,IACA,OAAO7e,CAAO,GAEV,YACJkL,IACEf,GACEkV,GAAwB,SAAUhiI,EAAG4H,GACzC,IAAK4uH,GAAoBx2H,EAAG4H,GAC1B,OAAO,EAQT,GAAI5H,EAAE+tD,MAAQnmD,EAAEmmD,OAAS/tD,EAAE+tD,KAAKl0H,SAAW+tE,EAAEmmD,KAAKl0H,QAAUmmE,EAAE+tD,KAAKxuI,SAAWqoF,EAAEmmD,KAAKxuI,QACnF,OAAO,EACF,IAAKygF,EAAE+tD,MAAQnmD,EAAEmmD,MAAQ/tD,EAAE+tD,OAASnmD,EAAEmmD,KAC3C,OAAO,EAIT,GAAI/tD,EAAEqhD,WAAaz5C,EAAEy5C,WAAarhD,EAAEqhD,UAAYz5C,EAAEy5C,SAChD,OAAO,EAGT,IAAKrhD,EAAEqhD,WAAaz5C,EAAEy5C,SACpB,OAAO,EAGT,IAAK,IAAIpiI,EAAI,EAAGA,EAAI+gF,EAAEqhD,SAAS9hI,OAAQN,IAAK,CAC1C,MAAMgjN,EAAWjiI,EAAEqhD,SAASpiI,GACtBijN,EAAWt6H,EAAEy5C,SAASpiI,GAE5B,GAAIgjN,EAAS1nN,MAAQ2nN,EAAS3nN,IAC5B,OAAO,EAGT,IAAK0nN,EAAS1jF,YAAc2jF,EAAS3jF,UACnC,SAEF,MAAM4jF,EAAaF,EAAS1jF,UACtB6jF,EAAaF,EAAS3jF,UAE5B,GAAI4jF,IAAeC,IAAeD,GAAcC,EAC9C,OAAO,EAGT,GAAID,EAAWtoM,SAAWuoM,EAAWvoM,QAAUsoM,EAAW5iN,SAAW6iN,EAAW7iN,OAC9E,OAAO,CAEX,CAEA,OAAO,CACT,EAQM8iN,GAAcA,CAAC9pN,EAAMw2I,EAAOC,EAAOjM,IAGhC,mBAAmBxqI,KAAQw2I,KADfhM,EAAS1tH,WAAW+tH,MAAQ4L,IAiE3CszE,GAAaA,CAACC,EAASC,EAAS3xE,KACpC,IAAI4xE,GAAY,EACZzsC,EAAS5qC,GAAMm3E,EAAS,CAE1BtkF,SAAUukF,EAAQvkF,SAClB6O,oBAAqB01E,EAAQ11E,oBAC7B0B,eAAgBg0E,EAAQh0E,iBAG1B,IAAK,IAAIvvI,EAAI,EAAGA,EAAIujN,EAAQx/E,UAAUzjI,OAAQN,IAAK,CACjD,MAAM8jI,EAAWy/E,EAAQx/E,UAAU/jI,GACnC,GAAI8jI,EAASgL,KAAM,CACjB,MAAM+C,EAAUX,GAAgBpN,EAASgL,MAErC8C,GAAeA,EAAYC,IAAYD,EAAYC,GAAS/C,MAC9D6C,GAA0B7N,EAAU8N,EAAYC,GAAS/C,KAAMhL,EAASgL,KAAKlC,YAEjF,CACA,MAAM62E,EAAiBjM,GAAazgC,EAAQjzC,EAAUi/E,IAClDU,IACF1sC,EAAS0sC,EACTD,GAAY,EAEhB,CAuBA,OArBAxO,GAAkBuO,GAAS,CAAC1zE,EAAYv2I,EAAMw2I,EAAOC,KACnD,GAAIF,EAAW9L,WAAa8L,EAAW9L,UAAUzjI,OAAQ,CACvD,MAAMqY,EAAKk3H,EAAW9L,UAAU,GAAGprH,GAC7B8qM,EAAiBjM,GAAazgC,EAAQlnC,EAAW9L,UAAU,GAAIg/E,IACjEU,IACF1sC,EAAS0sC,EAEH1zE,KAASgnC,EAAO/yC,YAAY1qI,GAAMw2I,KACtCinC,EAAO/yC,YAAY1qI,GAAMw2I,GAAOC,GAASF,GAG3CknC,EAAO/yC,YAAY1qI,GAAMw2I,GAAOC,GAAOhM,UAAU,GAAKgzC,EAAOhzC,UAAUprH,GACvE6qM,GAAY,EAEhB,KA3D8BE,EAAC3sC,EAAQwsC,KACzCvO,GAAkBj+B,GAAQ,CAAClnC,EAAYv2I,EAAMw2I,EAAOC,KAC5CA,KAASwzE,EAAQv/E,YAAY1qI,GAAMw2I,WAChCinC,EAAO/yC,YAAY1qI,GAAMw2I,GAAOC,EACzC,GACA,EAyDF2zE,CAA0B3sC,EAAQwsC,GAC9BA,EAAQ11E,sBAAwBy1E,EAAQz1E,sBAC1C21E,GAAY,GAEVA,EACK,KAEFzsC,CAAM,EAYT4sC,GAAmBA,CAAC5/E,EAAW6/E,KACnC,MAAMC,EAAiB,CAAC,EACxB,IAAK,MAAMlrM,KAAMorH,EAAW,CAC1B,MACM+/E,EADW//E,EAAUprH,GACMm2H,KACjC,GAAIg1E,EAAiB,CACnB,MAAM9oN,EAAMk2I,GAAgB4yE,GAC5B,IAAKF,EAAe5oN,GAClB,MAEF,MAAM+oN,EAAgBH,EAAe5oN,GAAKgpN,SAhBxBjjI,EAiBCgjI,EAjBEp7H,EAiBam7H,GAhBnBjwE,SAAS9yD,EAAEzoE,MAAQqwE,EAAErwE,MACJu7H,QAAQ9yD,EAAEzoE,KAAOqwE,EAAErwE,KAAOyoE,EAAEzoE,IAAIgnH,UAAU1kH,SAAW+tE,EAAErwE,IAAIgnH,UAAU1kH,QAAUmmE,EAAEzoE,IAAIgnH,UAAUh/H,SAAWqoF,EAAErwE,IAAIgnH,UAAUh/H,UACtIygF,EAAEzlF,MAAQqtF,EAAErtF,KAAOylF,EAAEu+C,UAAU1kH,SAAW+tE,EAAE22C,UAAU1kH,QAAUmmE,EAAEu+C,UAAUh/H,SAAWqoF,EAAE22C,UAAUh/H,SAerHujN,EAAe7oN,GAAO4oN,EAAe5oN,GAEzC,CACF,CArBqBipN,IAACljI,EAAG4H,EAsBzB,OAAOk7H,CAAc,EAsBvB,MAAMK,WAA2BtV,GAI/BrtM,WAAAA,CAAY4iN,EAAkB3b,GAAuC,IAAlCjtM,EAAO2Q,UAAA5L,OAAA,QAAA/D,IAAA2P,UAAA,GAAAA,UAAA,GAAG,CAAC,EAAGk4M,EAAkBl4M,UAAA5L,OAAA,EAAA4L,UAAA,QAAA3P,EACjEyhI,QACA/7H,KAAKoiN,oBAAsBD,GAAsBniN,KAC5CmiN,IACHniN,KAAKqiN,SAAU,GAEjB,MAAM,gBACJ5kN,GAAkB,GAChBnE,EAIJ,GAHA0G,KAAKy2M,KAAOlQ,EACZvmM,KAAKvC,gBAAkBA,EACvBuC,KAAKsiN,uBAAyBhpN,EAAQgpN,wBACjCJ,EACH,MAAM,IAAIzoN,MAAM,kDAGlBuG,KAAKg7H,GAAG,uBAAuB,KAC7Bh7H,KAAKuiN,aAAa,IAGpBviN,KAAKg7H,GAAG,sBAAsB,KAC5Bh7H,KAAKwiN,cAAcxiN,KAAKgiI,QAAQtrH,GAAG,IAErC1W,KAAK25G,MAAQ,eACb35G,KAAKyiN,iBAAmB,CAAC,EACzBziN,KAAKw2M,QAAU1H,GAAO,sBAGlB9uM,KAAKqiN,SACPriN,KAAKoiN,oBAAoBM,OAASR,EAGlCliN,KAAKoiN,oBAAoBO,aAAe,CAAC,GAEzC3iN,KAAK4iN,eAAiBV,CAE1B,CACAW,eAAAA,CAAgBrsN,EAAKirM,EAASwW,GAE5B,OAAKj4M,KAAKyhM,UAIVzhM,KAAKyhM,QAAU,KACXjrM,GAGFwJ,KAAKiI,MAAuB,kBAARzR,GAAsBA,aAAeiD,MAAe,CACtEyC,OAAQulM,EAAQvlM,OAChBmS,QAAS,8BAAgCozL,EAAQpoM,IACjD5C,SAAUgrM,EAAQhrM,SAElBkH,KAAM,EACN5D,SAAUvD,EAAIuD,UANkDvD,EAQ9DyhN,IACFj4M,KAAK25G,MAAQs+F,GAEfj4M,KAAKk7H,QAAQ,UACN,QAfT,EAiBF,CAMA4nF,gBAAAA,CAAiBjhF,EAAUo2E,EAAe3rH,GACxC,MAAMsjD,EAAU/N,EAASgL,MAAQoC,GAAgBpN,EAASgL,MAE1D,IAAKhL,EAASgL,OAAS+C,GAAW5vI,KAAKoiN,oBAAoBO,aAAa/yE,GAGtE,YADA5vI,KAAK+iN,cAAgBhhE,IAAAA,YAAoB,IAAMz1D,GAAG,IAAQ,IAI5D,MAAMjzF,EAAMu1M,GAAwB/sE,EAASgL,KAAKlC,aAC5Cq4E,EAAMA,CAACxsN,EAAKirM,KAChB,GAAIzhM,KAAK6iN,gBAAgBrsN,EAAKirM,EAASwW,GACrC,OAEF,MAAMtoE,EAAc3vI,KAAKoiN,oBAAoBO,cACvC,YACJjpN,GACE+nM,EACJ,IAAI50D,EACJ,IACEA,EAAOo2E,KAAU76E,EAAQq5D,EAAQhrM,UAAU8rF,SAAS,GACtD,CAAE,MAAO5qF,GAQP,OAPAA,EAAEoC,SAAWw6M,GAAiC,CAC5C76M,cACA+nM,UACA+S,cAAc,SAGhBx0M,KAAK6iN,gBAAgBlrN,EAAG8pM,EAASwW,EAEnC,CAMA,OALAtoE,EAAYC,GAAW,CACrBmyE,SAAUlgF,EAASgL,KACnBA,QAEF6C,GAA0B7N,EAAUgL,EAAMhL,EAASgL,KAAKlC,aACjDr+C,GAAG,EAAK,EAGjBtsF,KAAKyhM,QAAUwe,GAAiB5mN,EAAK2G,KAAKy2M,KAAKl8M,KAAK,CAAC/D,EAAKirM,EAAS/5D,EAAWW,KAC5E,GAAI7xI,EACF,OAAOwsN,EAAIxsN,EAAKirM,GAElB,IAAK/5D,GAA2B,QAAdA,EAAqB,CACrC,MAAMw7E,EAAgBx7E,GAAa,UACnC,OAAOs7E,EAAI,CACT9mN,OAAQulM,EAAQvlM,OAChBmS,QAAS,eAAe60M,6CAAyD7pN,IAGjF5C,SAAU,GACVorI,WACAshF,UAAU,EACVC,0BAA2BvgG,IAE3BllH,KAAM,GACL8jM,EACL,CAEA,MAAM,OACJ9oL,EAAM,OACNta,GACEwjI,EAASgL,KAAKxP,UAClB,GAAIgL,EAAMhqI,QAAUA,EAASsa,EAC3B,OAAOqqM,EAAIxsN,EAAK,CACdC,SAAU4xI,EAAM9lD,SAAS5pE,EAAQA,EAASta,GAC1CnC,OAAQulM,EAAQvlM,OAChB7C,IAAKooM,EAAQpoM,MAIjB2G,KAAKyhM,QAAUzhM,KAAKy2M,KAAKl8M,IAAI,CAC3BlB,MACAoB,aAAc,cACdf,YAAa,YACbjC,QAASqlN,GAAkB,CACzBz/E,UAAWwE,EAASgL,KAAKxP,aAE1B2lF,EAAI,GAxCY,YA0CvB,CACAznF,OAAAA,GACEv7H,KAAKk7H,QAAQ,WACbl7H,KAAK84M,cACL94M,KAAKyiN,iBAAmB,CAAC,EACzB1gE,IAAAA,aAAsB/hJ,KAAKqjN,6BAC3BthE,IAAAA,aAAsB/hJ,KAAK+iN,eAC3BhhE,IAAAA,aAAsB/hJ,KAAK+4M,oBAC3B/4M,KAAK+4M,mBAAqB,KAC1B/4M,KAAK+iN,cAAgB,KACrB/iN,KAAKqjN,4BAA8B,KAC/BrjN,KAAKoiN,oBAAoBkB,oBAC3BtjN,KAAKi7H,IAAI,iBAAkBj7H,KAAKoiN,oBAAoBkB,mBACpDtjN,KAAKoiN,oBAAoBkB,kBAAoB,MAE/CtjN,KAAKi7H,KACP,CACAsoF,iBAAAA,GACE,OAAOvjN,KAAKyhM,SAAWzhM,KAAK+iN,aAC9B,CACAjK,WAAAA,GACE,GAAI94M,KAAKyhM,QAAS,CAChB,MAAMwX,EAAaj5M,KAAKyhM,QACxBzhM,KAAKyhM,QAAU,KACfwX,EAAWl8M,mBAAqB,KAChCk8M,EAAWv7M,OACb,CACF,CACAskI,KAAAA,CAAMH,GAEJ,IAAKA,EACH,OAAO7hI,KAAK24M,OAGd,GAAmB,iBAAf34M,KAAK25G,MACP,MAAM,IAAIlgH,MAAM,qCAAuCuG,KAAK25G,OAE9D,MAAMs+F,EAAgBj4M,KAAK25G,MAE3B,GAAwB,kBAAbkoB,EAAuB,CAChC,IAAK7hI,KAAKoiN,oBAAoBrhD,KAAKj/B,UAAUD,GAC3C,MAAM,IAAIpoI,MAAM,yBAA2BooI,GAE7CA,EAAW7hI,KAAKoiN,oBAAoBrhD,KAAKj/B,UAAUD,EACrD,CACA,MAAMs3E,GAAen5M,KAAK24M,QAAU92E,EAASnrH,KAAO1W,KAAK24M,OAAOjiM,GAEhE,GAAIyiM,GAAen5M,KAAKyiN,iBAAiB5gF,EAASnrH,KAAO1W,KAAKyiN,iBAAiB5gF,EAASnrH,IAAIsqH,QAQ1F,OAPAhhI,KAAK25G,MAAQ,gBACb35G,KAAK24M,OAAS92E,OAEVs3E,IACFn5M,KAAKk7H,QAAQ,iBACbl7H,KAAKk7H,QAAQ,iBAKZi+E,IAIDn5M,KAAK24M,QACP34M,KAAKk7H,QAAQ,iBAEfl7H,KAAK8iN,iBAAiBjhF,EAAUo2E,GAAeuL,IAE7CxjN,KAAK+3M,aAAa,CAChBE,gBACAp2E,YACA,IAEN,CACAk2E,YAAAA,CAAY0L,GAGT,IAHU,cACXxL,EAAa,SACbp2E,GACD4hF,EACCzjN,KAAK25G,MAAQ,gBACb35G,KAAKyiN,iBAAiB5gF,EAASnrH,IAAMmrH,EACrC7hI,KAAK+iN,cAAgB,KAErB/iN,KAAKwiN,cAAc3gF,EAASnrH,IAGN,uBAAlBuhM,EACFj4M,KAAKk7H,QAAQ,kBAGbl7H,KAAKk7H,QAAQ,cAEjB,CACA0iC,KAAAA,GACM59J,KAAKoiN,oBAAoBkB,oBAC3BtjN,KAAKi7H,IAAI,iBAAkBj7H,KAAKoiN,oBAAoBkB,mBACpDtjN,KAAKoiN,oBAAoBkB,kBAAoB,MAE/CtjN,KAAK84M,cACL/2D,IAAAA,aAAsB/hJ,KAAK+4M,oBAC3B/4M,KAAK+4M,mBAAqB,KACtB/4M,KAAKqiN,UACPtgE,IAAAA,aAAsB/hJ,KAAKoiN,oBAAoBiB,6BAC/CrjN,KAAKoiN,oBAAoBiB,4BAA8B,MAEtC,iBAAfrjN,KAAK25G,QAGP35G,KAAKq5M,SAAU,EAEnB,CACAx0C,IAAAA,CAAK6+C,GACH3hE,IAAAA,aAAsB/hJ,KAAK+4M,oBAC3B/4M,KAAK+4M,mBAAqB,KAC1B,MAAM/2E,EAAQhiI,KAAKgiI,QACnB,GAAI0hF,EAAJ,CACE,MAAMjrF,EAAQuJ,EAAQA,EAAMnD,eAAiB,EAAI,IAAO,IACxD7+H,KAAK+4M,mBAAqBh3D,IAAAA,YAAoB,IAAM/hJ,KAAK6kK,QAAQpsC,EAEnE,MAGKz4H,KAAKq5M,QAINr3E,IAAUA,EAAMhB,SAIdhhI,KAAKqiN,UAAYriN,KAAKqjN,8BAExBrjN,KAAKk7H,QAAQ,uBAEbl7H,KAAK2jN,qCAEP3jN,KAAKk7H,QAAQ,uBAEbl7H,KAAKk7H,QAAQ,kBAfbl7H,KAAKqG,OAiBT,CACAA,KAAAA,GACErG,KAAKq5M,SAAU,EAGVr5M,KAAKqiN,QAIVriN,KAAK4jN,cAAa,CAAC/U,EAAKgV,KACtB7jN,KAAK8jN,YACA9jN,KAAKujN,qBAAwBvjN,KAAK24M,QACrC34M,KAAKgiI,MAAMhiI,KAAKoiN,oBAAoBrhD,KAAKj/B,UAAU,GACrD,IAPA9hI,KAAK+iN,cAAgBhhE,IAAAA,YAAoB,IAAM/hJ,KAAK8jN,aAAa,EASrE,CACAF,YAAAA,CAAat3H,GACX,MAAMvyF,EAAW,CACfgqN,aAAc,CACZ1qN,IAAK2G,KAAKoiN,oBAAoBM,SAGlC1iN,KAAKk7H,QAAQ,CACX7jI,KAAM,uBACN0C,aAEFiG,KAAKyhM,QAAUzhM,KAAKy2M,KAAKl8M,IAAI,CAC3BlB,IAAK2G,KAAKoiN,oBAAoBM,OAC9BjlN,gBAAiBuC,KAAKvC,gBACtB/D,YAAa,kBACZ,CAACuO,EAAO4mM,KACT,GAAI5mM,EAAO,CACT,MAAM,YACJvO,GACEm1M,EACJ5mM,EAAMlO,SAAWw6M,GAAiC,CAChD76M,cACA+nM,QAASoN,EACT5mM,SAEJ,CACA,GAAIjI,KAAK6iN,gBAAgB56M,EAAO4mM,GAI9B,YAHmB,iBAAf7uM,KAAK25G,QACP35G,KAAKq5M,SAAU,IAInBr5M,KAAKk7H,QAAQ,CACX7jI,KAAM,0BACN0C,aAEF,MAAM8pN,EAAchV,EAAIr0M,eAAiBwF,KAAKoiN,oBAAoB4B,SAQlE,OAPAhkN,KAAKoiN,oBAAoB4B,SAAWnV,EAAIr0M,aACpCq0M,EAAIgN,iBAAmBhN,EAAIgN,gBAAgBh6G,KAC7C7hG,KAAKikN,YAAcroH,KAAK3gG,MAAM4zM,EAAIgN,gBAAgBh6G,MAElD7hG,KAAKikN,YAAcroH,KAAKC,MAE1B77F,KAAKoiN,oBAAoBM,OAAS9T,GAAwB5uM,KAAKoiN,oBAAoBM,OAAQ7T,GACvFgV,GACF7jN,KAAKkkN,mBACLlkN,KAAKmkN,wBAAuB,IACnB73H,EAAGuiH,EAAKgV,MAIZv3H,EAAGuiH,EAAKgV,EAAY,GAE/B,CASAM,sBAAAA,CAAuBxkN,GACrB,MAAMykN,EAAY7pE,GAAev6I,KAAKoiN,oBAAoB4B,UAG1D,OAAkB,OAAdI,GACFpkN,KAAKoiN,oBAAoBiC,cAAgBrkN,KAAKikN,YAAcroH,KAAKC,MAC1Dl8F,KAEgB,WAArBykN,EAAUhoN,QACZ4D,KAAKoiN,oBAAoBiC,cAAgBD,EAAU9sN,MAAQskG,KAAKC,MACzDl8F,UAETK,KAAKyhM,QAAUzhM,KAAKy2M,KAAKl8M,IAAI,CAC3BlB,IAAKuxI,GAAW5qI,KAAKoiN,oBAAoBM,OAAQ0B,EAAU9sN,OAC3D8E,OAAQgoN,EAAUhoN,OAClBqB,gBAAiBuC,KAAKvC,gBACtB/D,YAAa,oBACZ,CAACuO,EAAO4mM,KAET,IAAK7uM,KAAKyhM,QACR,OAEF,GAAIx5L,EAAO,CACT,MAAM,YACJvO,GACEm1M,EASJ,OARA7uM,KAAKiI,MAAMlO,SAAWw6M,GAAiC,CACrD76M,cACA+nM,QAASoN,EACT5mM,UAIFjI,KAAKoiN,oBAAoBiC,cAAgBrkN,KAAKikN,YAAcroH,KAAKC,MAC1Dl8F,GACT,CACA,IAAI2kN,EAOAA,EANqB,SAArBF,EAAUhoN,OACPyyM,EAAIgN,iBAAoBhN,EAAIgN,gBAAgBh6G,KAKlCjG,KAAK3gG,MAAM4zM,EAAIgN,gBAAgBh6G,MAF/B7hG,KAAKikN,YAKProH,KAAK3gG,MAAM4zM,EAAIr0M,cAE9BwF,KAAKoiN,oBAAoBiC,cAAgBC,EAAa1oH,KAAKC,MAC3Dl8F,GAAM,IAEV,CACAmkN,SAAAA,GACE9jN,KAAK25G,MAAQ,qBACT35G,KAAKqiN,QAIPriN,KAAKk7H,QAAQ,kBACHl7H,KAAK24M,QAGf34M,KAAKgiI,MAAMhiI,KAAK4iN,eAEpB,CACAsB,WAAAA,GAEElkN,KAAK+iN,cAAgB,KACrB,MAAM1B,EAAUrhN,KAAKoiN,oBAAoBrhD,KACnChnK,EAAW,CACfgqN,aAAc,CACZ1qN,IAAK2G,KAAKoiN,oBAAoBM,SAOlC,IAAIpB,EAJJthN,KAAKk7H,QAAQ,CACX7jI,KAAM,qBACN0C,aAGF,IACEunN,EA9kBeiD,KAMf,IANgB,QACpBC,EAAO,OACP9B,EAAM,aACNj3E,EAAY,YACZkE,EAAW,iBACXyB,GACDmzE,EACC,MAAM5lF,EAAW1jI,GAAMupN,EAAS,CAC9B5qE,YAAa8oE,EACbj3E,eACAkE,cACAyB,qBAGF,OADA8hE,GAAoBv0E,EAAU+jF,EAAQvB,IAC/BxiF,CAAQ,EAgkBD8lF,CAAa,CACrBD,QAASxkN,KAAKoiN,oBAAoB4B,SAClCtB,OAAQ1iN,KAAKoiN,oBAAoBM,OACjCj3E,aAAczrI,KAAKoiN,oBAAoBiC,cACvC10E,YAAa3vI,KAAKoiN,oBAAoBO,aACtCvxE,iBAAkBiwE,GAEtB,CAAE,MAAOp5M,GACPjI,KAAKiI,MAAQA,EACbjI,KAAKiI,MAAMlO,SAAW,CACpB86M,UAAWjJ,GAAQnyM,MAAMyzM,iCACzBjlM,SAEFjI,KAAKk7H,QAAQ,QACf,CAEImmF,IACFC,EAAUF,GAAWC,EAASC,EAASthN,KAAKoiN,oBAAoBO,eAGlE3iN,KAAKoiN,oBAAoBrhD,KAAOugD,GAAoBD,EACpD,MAAMn8H,EAAWllF,KAAKoiN,oBAAoBrhD,KAAK5vB,WAAanxI,KAAKoiN,oBAAoBrhD,KAAK5vB,UAAU,GAQpG,GAPIjsD,GAAYA,IAAallF,KAAKoiN,oBAAoBM,SACpD1iN,KAAKoiN,oBAAoBM,OAASx9H,KAE/Bm8H,GAAWC,GAAWA,EAAQ11E,sBAAwBy1E,EAAQz1E,sBACjE5rI,KAAK2jN,oCAEP3jN,KAAK0kN,+BAA+BpD,GAChCA,EAAS,CACX,MAAM,SACJvkF,EAAQ,QACRiE,GACEsgF,EACEhL,EAAa,GACnBgL,EAAQx/E,UAAUnpI,SAAQkpI,IACxBy0E,EAAWn9M,KAAK,CACdud,GAAImrH,EAASnrH,GACb05H,UAAWvO,EAAS1tH,WAAWopH,UAC/BlB,WAAYwF,EAAS1tH,WAAWmpH,WAChC8J,OAAQvF,EAAS1tH,WAAWg8H,QAC5B,IAEJ,MAAMw0E,EAAiB,CACrB5nF,WACAu0C,QAAStwC,EACTs1E,cAEFv8M,EAAS4qN,eAAiBA,EAC1B3kN,KAAKk7H,QAAQ,CACX7jI,KAAM,wBACN0C,YAEJ,CACA,OAAO63I,QAAQ0vE,EACjB,CACAqC,iCAAAA,GACE,MAAMiB,EAAM5kN,KAAKoiN,oBAGbwC,EAAItB,oBACNsB,EAAI3pF,IAAI,iBAAkB2pF,EAAItB,mBAC9BsB,EAAItB,kBAAoB,MAGtBsB,EAAIvB,8BACNthE,IAAAA,aAAsB6iE,EAAIvB,6BAC1BuB,EAAIvB,4BAA8B,MAEpC,IAAIwB,EAAMD,EAAI7jD,MAAQ6jD,EAAI7jD,KAAKn1B,oBAKnB,IAARi5E,IACED,EAAI5iF,QACN6iF,EAAmC,IAA7BD,EAAI5iF,QAAQnD,gBAElB+lF,EAAItB,kBAAoBsB,EAAIjB,kCAC5BiB,EAAIz3D,IAAI,iBAAkBy3D,EAAItB,qBAMf,kBAARuB,GAAoBA,GAAO,EAChCA,EAAM,GACR7kN,KAAKw2M,QAAQ,wCAAwCqO,4BAIzD7kN,KAAK8kN,kBAAkBD,EACzB,CACAC,iBAAAA,CAAkBD,GAChB,MAAMD,EAAM5kN,KAAKoiN,oBACjBwC,EAAIvB,4BAA8BthE,IAAAA,YAAoB,KACpD6iE,EAAIvB,4BAA8B,KAClCuB,EAAI1pF,QAAQ,uBACZ0pF,EAAIE,kBAAkBD,EAAI,GACzBA,EACL,CAKAtC,WAAAA,GACEviN,KAAK4jN,cAAa,CAAC/U,EAAKgV,KACjBA,IAGD7jN,KAAK24M,SACP34M,KAAK24M,OAAS34M,KAAKoiN,oBAAoBrhD,KAAKj/B,UAAU9hI,KAAK24M,OAAOjiM,KAGpE1W,KAAKoiN,oBAAoBO,aA3jBGoC,EAAChkD,EAAM4gD,KAEvC,IAAIqD,EADctD,GAAiB3gD,EAAKj/B,UAAW6/E,GAQnD,OANA5O,GAAkBhyC,GAAM,CAACnzB,EAAYrG,EAAWwG,EAAUC,KACxD,GAAIJ,EAAW9L,WAAa8L,EAAW9L,UAAUzjI,OAAQ,CACvD,MAAMyjI,EAAY8L,EAAW9L,UAC7BkjF,EAAiB96E,GAAM86E,EAAgBtD,GAAiB5/E,EAAW6/E,GACrE,KAEKqD,CAAc,EAkjBuBD,CAA0B/kN,KAAKoiN,oBAAoBrhD,KAAM/gK,KAAKoiN,oBAAoBO,cAC1H3iN,KAAK8iN,iBAAiB9iN,KAAKgiI,QAAShiI,KAAK25G,OAAO6pG,IAE9CxjN,KAAKwiN,cAAcxiN,KAAKgiI,QAAQtrH,GAAG,IACnC,GAEN,CAOA8rM,aAAAA,CAAcyC,GACZ,IAAKA,EACH,MAAM,IAAIxrN,MAAM,sCAOduG,KAAK24M,QAAU34M,KAAKqiN,SACtBriN,KAAKkkN,cAEP,MAAMpiF,EAAY9hI,KAAKoiN,oBAAoBrhD,KAAKj/B,UAC1CojF,GAAgBllN,KAAK24M,QAAU34M,KAAK24M,SAAW72E,EAAUmjF,GAM/D,GALIC,EACFllN,KAAK24M,OAAS72E,EAAUmjF,GAExBjlN,KAAKk7H,QAAQ,sBAEVl7H,KAAK+4M,mBAAoB,CAC5B,MAAMoM,EAA2BA,KAC3BnlN,KAAKgiI,QAAQhB,UAGjBhhI,KAAK+4M,mBAAqBh3D,IAAAA,YAAoB,KAC5C/hJ,KAAKk7H,QAAQ,sBACbiqF,GAA0B,GACzBjP,GAAal2M,KAAKgiI,QAAS4P,QAAQszE,KAAe,EAEvDC,GACF,CACAnlN,KAAKk7H,QAAQ,iBACf,CAOAwpF,8BAAAA,CAA+BpD,GAE7B,GAAIA,GAAWthN,KAAKoiN,oBAAoBrhD,KAAK1vB,YAAa,CAExD,MAAM+zE,EAAgBplN,KAAKoiN,oBAAoBrhD,KAAK1vB,YAAYh7H,KAAIgvM,IAC3D,CACLC,QAASD,EAAgBh/M,MACzBk/M,OAAQ,CAAC,CACP5oN,KAAM0oN,EAAgB9tE,kBAI5Bv3I,KAAKsiN,uBAAuB,cAAe8C,EAAeplN,KAAKoiN,oBAAoBrhD,KAAKhkC,SAC1F,CACF,CAQAs+E,WAAAA,CAAYx5E,GACV,GAAIA,EAASP,kBAAmB,CAC9B,MAAMg6E,EAAS,IAAI16M,IACnB,IAAK,MAAM26M,KAAa15E,EAASP,kBAAmB,CAClD,MAAMkkF,EAAa3jF,EAASP,kBAAkBi6E,GAAWpnM,WAAW,oBAChEqxM,GAEFlK,EAAOv6M,IAAIykN,EAAWjgN,QAAQ,KAAM,IAAIvO,cAE5C,CACA,OAAOskN,CACT,CACF,EAEF,IAAImK,GAAS,CACXC,mBAAoB,GACpBC,uBAAwB,GACxBC,mBAAoB,GACpBC,wBAAyB,EAEzBC,kBAAmB,QAGnBC,mBAAoB,IAEpBC,sBAAuB,EACvBC,0BAA2B,GAE3BC,uCAAwC,GACxCC,2BAA4B,EAE5BC,uBAAwB,IAE1B,MAUMC,GAAwB,SAAUC,GAItC,OAFAA,EAAUtrF,GAAKsrF,EAAUpzH,iBACzBozH,EAAUrrF,IAAMqrF,EAAUnzH,oBACnBmzH,CACT,EAYMC,GAAU,SAAU5oN,GACxB,OAAO,WACL,MAAM6oN,EAbc,SAAU/nF,GAChC,IACE,OAAO5D,IAAI4rF,gBAAgB,IAAIC,KAAK,CAACjoF,GAAM,CACzCpnI,KAAM,2BAEV,CAAE,MAAOM,GACP,MAAMgvN,EAAO,IAAIC,YAEjB,OADAD,EAAK3gC,OAAOvnD,GACL5D,IAAI4rF,gBAAgBE,EAAKE,UAClC,CACF,CAGsBJ,CAAgB9oN,GAC5BmpN,EAAST,GAAsB,IAAIU,OAAOP,IAChDM,EAAOE,OAASR,EAChB,MAAMS,EAAYH,EAAOG,UAOzB,OANAH,EAAO9rF,GAAK8rF,EAAO5zH,iBACnB4zH,EAAO7rF,IAAM6rF,EAAO3zH,oBACpB2zH,EAAOG,UAAY,WAEjB,OADApsF,IAAIqsF,gBAAgBV,GACbS,EAAUpoN,KAAKmB,KACxB,EACO8mN,CACT,CACF,EACMh+D,GAAY,SAAUnrJ,GAC1B,MAAO,+BAA+B0oN,GAAsBhnN,8CAAqD1B,CACnH,EACMwpN,GAAkB,SAAUv/M,GAChC,OAAOA,EAAGvI,WAAWkG,QAAQ,gBAAiB,IAAIvM,MAAM,GAAI,EAC9D,EAGMouN,GAAet+D,GAAUq+D,IAAgB,WAC7C,IAAIE,EAAuC,qBAAfC,WAA6BA,WAA+B,qBAAXpxN,OAAyBA,OAA2B,qBAAXqrF,EAAAA,EAAyBA,EAAAA,EAAyB,qBAATI,KAAuBA,KAAO,CAAC,EAW1L4lI,EAAW,WACbvnN,KAAKwnN,KAAO,WACV,IAAIhlH,EAAY,CAAC,EAQjBxiG,KAAKg7H,GAAK,SAAU3jI,EAAMywG,GACnBtF,EAAUnrG,KACbmrG,EAAUnrG,GAAQ,IAEpBmrG,EAAUnrG,GAAQmrG,EAAUnrG,GAAMqwG,OAAOI,EAC3C,EAQA9nG,KAAKi7H,IAAM,SAAU5jI,EAAMywG,GACzB,IAAIjvG,EACJ,QAAK2pG,EAAUnrG,KAGfwB,EAAQ2pG,EAAUnrG,GAAMyB,QAAQgvG,GAChCtF,EAAUnrG,GAAQmrG,EAAUnrG,GAAM2B,QAClCwpG,EAAUnrG,GAAM+vH,OAAOvuH,EAAO,GACvBA,GAAS,EAClB,EAOAmH,KAAKk7H,QAAU,SAAU7jI,GACvB,IAAI8jI,EAAWp9H,EAAGM,EAAQ+8H,EAE1B,GADAD,EAAY34B,EAAUnrG,GAQtB,GAAyB,IAArB4S,UAAU5L,OAEZ,IADAA,EAAS88H,EAAU98H,OACdN,EAAI,EAAGA,EAAIM,IAAUN,EACxBo9H,EAAUp9H,GAAGc,KAAKmB,KAAMiK,UAAU,QAE/B,CAGL,IAFAmxH,EAAO,GACPr9H,EAAIkM,UAAU5L,OACTN,EAAI,EAAGA,EAAIkM,UAAU5L,SAAUN,EAClCq9H,EAAKjiI,KAAK8Q,UAAUlM,IAGtB,IADAM,EAAS88H,EAAU98H,OACdN,EAAI,EAAGA,EAAIM,IAAUN,EACxBo9H,EAAUp9H,GAAGjG,MAAMkI,KAAMo7H,EAE7B,CACF,EAKAp7H,KAAKu7H,QAAU,WACb/4B,EAAY,CAAC,CACf,CACF,CACF,EAWA+kH,EAASnoN,UAAUo8H,KAAO,SAAUC,GAgBlC,OAfAz7H,KAAKg7H,GAAG,QAAQ,SAAUr+H,GACxB8+H,EAAYtiI,KAAKwD,EACnB,IACAqD,KAAKg7H,GAAG,QAAQ,SAAUysF,GACxBhsF,EAAYtQ,MAAMs8F,EACpB,IACAznN,KAAKg7H,GAAG,eAAe,SAAUysF,GAC/BhsF,EAAYisF,aAAaD,EAC3B,IACAznN,KAAKg7H,GAAG,iBAAiB,SAAUysF,GACjChsF,EAAYksF,YAAYF,EAC1B,IACAznN,KAAKg7H,GAAG,SAAS,SAAUysF,GACzBhsF,EAAYl7H,MAAMknN,EACpB,IACOhsF,CACT,EAKA8rF,EAASnoN,UAAUjG,KAAO,SAAUwD,GAClCqD,KAAKk7H,QAAQ,OAAQv+H,EACvB,EACA4qN,EAASnoN,UAAU+rH,MAAQ,SAAUs8F,GACnCznN,KAAKk7H,QAAQ,OAAQusF,EACvB,EACAF,EAASnoN,UAAUsoN,aAAe,SAAUD,GAC1CznN,KAAKk7H,QAAQ,cAAeusF,EAC9B,EACAF,EAASnoN,UAAUuoN,YAAc,SAAUF,GACzCznN,KAAKk7H,QAAQ,gBAAiBusF,EAChC,EACAF,EAASnoN,UAAUmB,MAAQ,SAAUknN,GACnCznN,KAAKk7H,QAAQ,QAASusF,EACxB,EACA,IA6BIl+D,EAAKq+D,EAAMC,EAAMC,EAAMC,EAAMC,EAAMC,EAAMtoE,EAAMC,EAAMsoE,EAAMC,EAAMC,EAAMC,EAAMC,EAAMC,EAAMC,EAAMC,EAAMC,EAAMC,EAAMC,EAAMC,EAAMC,EAAQlqE,EAAOmqE,EAAaC,EAAeC,EAAYC,EAAYC,EAAYC,EAAYC,EAAMC,EAAMC,EAAMC,EAAMC,EAAMC,EAAMC,EA7B5PC,EAASrC,EACTsC,EAAevmN,KAAK8gF,IAAI,EAAG,IAa3B0lI,EAAU,CACZ9nI,UAbgB,SAAUqC,GAC1B,IACI/sF,EADAgtF,EAAK,IAAIpC,SAASmC,EAAMlC,OAAQkC,EAAMjC,WAAYiC,EAAMhC,YAE5D,OAAIiC,EAAGC,cACLjtF,EAAQgtF,EAAGC,aAAa,IACZC,OAAOC,iBACVD,OAAOltF,GAETA,EAEFgtF,EAAG5B,UAAU,GAAKmnI,EAAevlI,EAAG5B,UAAU,EACvD,EAGEyB,WAAY0lI,GAYV1lI,EAAa2lI,EAAQ3lI,YAGzB,WACE,IAAIpmF,EA2CJ,GA1CA6gJ,EAAQ,CACNmrE,KAAM,GAENC,KAAM,GACNC,KAAM,GACNrC,KAAM,GACNsC,KAAM,GACNrC,KAAM,GACNC,KAAM,GACNU,KAAM,GACNT,KAAM,GACNQ,KAAM,GACND,KAAM,GACNN,KAAM,GACNC,KAAM,GACNtoE,KAAM,GACNC,KAAM,GACNuqE,KAAM,GAENjC,KAAM,GACNC,KAAM,GACNiC,KAAM,GACN3B,KAAM,GACN4B,KAAM,GACN3B,KAAM,GACN4B,KAAM,GACNC,KAAM,GACN5B,KAAM,GACN6B,KAAM,GACNC,KAAM,GACNC,KAAM,GACNC,KAAM,GACNC,KAAM,GACNhC,KAAM,GACNR,KAAM,GACNyC,KAAM,GACNhC,KAAM,GACNR,KAAM,GACNyC,KAAM,IAIkB,qBAAf/yN,WAAX,CAGA,IAAKgG,KAAK6gJ,EACJA,EAAM/gJ,eAAeE,KACvB6gJ,EAAM7gJ,GAAK,CAACA,EAAEmS,WAAW,GAAInS,EAAEmS,WAAW,GAAInS,EAAEmS,WAAW,GAAInS,EAAEmS,WAAW,KAGhF64M,EAAc,IAAIhxN,WAAW,CAAC,IAAImY,WAAW,GAAI,IAAIA,WAAW,GAAI,IAAIA,WAAW,GAAI,IAAIA,WAAW,KACtG+4M,EAAa,IAAIlxN,WAAW,CAAC,IAAImY,WAAW,GAAI,IAAIA,WAAW,GAAI,IAAIA,WAAW,GAAI,IAAIA,WAAW,KACrG84M,EAAgB,IAAIjxN,WAAW,CAAC,EAAG,EAAG,EAAG,IACzCmxN,EAAa,IAAInxN,WAAW,CAAC,EAE7B,EAAM,EAAM,EAEZ,EAAM,EAAM,EAAM,EAElB,IAAM,IAAM,IAAM,IAElB,EAAM,EAAM,EAAM,EAElB,EAAM,EAAM,EAAM,EAElB,EAAM,EAAM,EAAM,EAElB,GAAM,IAAM,IAAM,IAAM,IAAM,GAAM,GAAM,IAAM,IAAM,IAAM,IAAM,IAAM,IAExEoxN,EAAa,IAAIpxN,WAAW,CAAC,EAE7B,EAAM,EAAM,EAEZ,EAAM,EAAM,EAAM,EAElB,IAAM,IAAM,IAAM,IAElB,EAAM,EAAM,EAAM,EAElB,EAAM,EAAM,EAAM,EAElB,EAAM,EAAM,EAAM,EAElB,GAAM,IAAM,IAAM,IAAM,IAAM,GAAM,GAAM,IAAM,IAAM,IAAM,IAAM,IAAM,IAExEqxN,EAAa,CACX9iF,MAAO4iF,EACP3iF,MAAO4iF,GAETI,EAAO,IAAIxxN,WAAW,CAAC,EAEvB,EAAM,EAAM,EAEZ,EAAM,EAAM,EAAM,EAElB,EAAM,EAAM,EAAM,GAElB,IAAM,IAAM,IAAM,GAElB,EAEA,EAAM,EAAM,IAEZuxN,EAAO,IAAIvxN,WAAW,CAAC,EAEvB,EAAM,EAAM,EAEZ,EAAM,EAEN,EAAM,IAENyxN,EAAO,IAAIzxN,WAAW,CAAC,EAEvB,EAAM,EAAM,EAEZ,EAAM,EAAM,EAAM,IAElB0xN,EAAOD,EACPE,EAAO,IAAI3xN,WAAW,CAAC,EAEvB,EAAM,EAAM,EAEZ,EAAM,EAAM,EAAM,EAElB,EAAM,EAAM,EAAM,IAElB4xN,EAAOH,EACPH,EAAO,IAAItxN,WAAW,CAAC,EAEvB,EAAM,EAAM,EAEZ,EAAM,EAEN,EAAM,EAAM,EAAM,EAAM,EAAM,GAzF9B,CA2FD,CAzID,GA0IAwxJ,EAAM,SAAUlyJ,GACd,IAEE0G,EACArF,EAHE4I,EAAU,GACZF,EAAO,EAIT,IAAKrD,EAAI,EAAGA,EAAIkM,UAAU5L,OAAQN,IAChCuD,EAAQnI,KAAK8Q,UAAUlM,IAIzB,IAFAA,EAAIuD,EAAQjD,OAELN,KACLqD,GAAQE,EAAQvD,GAAGskF,WAOrB,IALA3pF,EAAS,IAAIX,WAAWqJ,EAAO,GACxB,IAAI8gF,SAASxpF,EAAOypF,OAAQzpF,EAAO0pF,WAAY1pF,EAAO2pF,YACxD0oI,UAAU,EAAGryN,EAAO2pF,YACzB3pF,EAAOiI,IAAItJ,EAAM,GAEZ0G,EAAI,EAAGqD,EAAO,EAAGrD,EAAIuD,EAAQjD,OAAQN,IACxCrF,EAAOiI,IAAIW,EAAQvD,GAAIqD,GACvBA,GAAQE,EAAQvD,GAAGskF,WAErB,OAAO3pF,CACT,EACAkvN,EAAO,WACL,OAAOr+D,EAAI3K,EAAMgpE,KAAMr+D,EAAI3K,EAAMsrE,KAAMX,GACzC,EACA1B,EAAO,SAAUp2H,GACf,OAAO83D,EAAI3K,EAAMipE,KAAM,IAAI9vN,WAAW,CAAC,EAEvC,EAAM,EAAM,EAGZ,EAEA,GAEA,EAAM,EAEN,EAGA,EAEA,GAEA,GAEA,GAEA,EAAM,EAAM,EAEZ,EAAM,EAAM,IAAM,IAElB,EAAM,EAAM,IAAM,IAGlB,EAEA,EAIA05F,EAAMu5H,iBAAmB,EAAIv5H,EAAMw5H,yBAA2B,EAAGx5H,EAAMw5H,wBAA0B,EAAIx5H,EAAMy5H,cAAgB,EAAG,EAAM,EAAM,IAE5I,EACApD,EAAO,WACL,OAAOv+D,EAAI3K,EAAMkpE,KAAMiB,EAAaC,EAAeD,EAAaE,EAClE,EACAT,EAAO,SAAUnxN,GACf,OAAOkyJ,EAAI3K,EAAM4pE,KAAMY,EAAW/xN,GACpC,EACA0wN,EAAO,SAAUprN,GACf,OAAO4sJ,EAAI3K,EAAMmpE,KAAMprN,EACzB,EACA4rN,EAAO,SAAU92H,GACf,IAAI/4F,EAAS,IAAIX,WAAW,CAAC,EAE7B,EAAM,EAAM,EAEZ,EAAM,EAAM,EAAM,EAElB,EAAM,EAAM,EAAM,EAElB,EAAM,EAAM,GAAM,IAElB05F,EAAMsrC,WAAa,GAAK,IAAMtrC,EAAMsrC,WAAa,GAAK,IAAMtrC,EAAMsrC,WAAa,EAAI,IAAuB,IAAjBtrC,EAAMsrC,SAE/F,GAAM,IAEN,EAAM,IAUN,OANItrC,EAAM05H,aACRzyN,EAAO,IAAM+4F,EAAM05H,aAAe,GAAK,IACvCzyN,EAAO,IAAM+4F,EAAM05H,aAAe,GAAK,IACvCzyN,EAAO,IAAM+4F,EAAM05H,aAAe,EAAI,IACtCzyN,EAAO,IAAyB,IAAnB+4F,EAAM05H,YAEd5hE,EAAI3K,EAAM2pE,KAAM7vN,EACzB,EACA4vN,EAAO,SAAU72H,GACf,OAAO83D,EAAI3K,EAAM0pE,KAAMC,EAAK92H,GAAQ+2H,EAAK/2H,EAAMp6F,MAAO4wN,EAAKx2H,GAC7D,EACAu2H,EAAO,SAAUoD,GACf,OAAO7hE,EAAI3K,EAAMopE,KAAM,IAAIjwN,WAAW,CAAC,EAAM,EAAM,EAAM,GAEvC,WAAjBqzN,IAAgC,IAAsB,SAAjBA,IAA8B,IAAsB,MAAjBA,IAA4B,EAAoB,IAAjBA,IAE1G,EACAnD,EAAO,SAAUx2H,GACf,OAAO83D,EAAI3K,EAAMqpE,KAAqB,UAAfx2H,EAAMp6F,KAAmBkyJ,EAAI3K,EAAMksE,KAAMzB,GAAQ9/D,EAAI3K,EAAMyrE,KAAMf,GAAO1B,IAAQc,EAAKj3H,GAC9G,EACAkuD,EAAO,SAAUyrE,EAAgBjsD,GAI/B,IAHA,IAAIksD,EAAiB,GACnBttN,EAAIohK,EAAO9gK,OAENN,KACLstN,EAAettN,GAAK6qN,EAAKzpD,EAAOphK,IAElC,OAAOwrJ,EAAIzxJ,MAAM,KAAM,CAAC8mJ,EAAMe,KAAMqoE,EAAKoD,IAAiB1jH,OAAO2jH,GACnE,EAOAzrE,EAAO,SAAUuf,GAGf,IAFA,IAAIphK,EAAIohK,EAAO9gK,OACbitN,EAAQ,GACHvtN,KACLutN,EAAMvtN,GAAKqqN,EAAKjpD,EAAOphK,IAEzB,OAAOwrJ,EAAIzxJ,MAAM,KAAM,CAAC8mJ,EAAMgB,KAAMuoE,EAAK,aAAazgH,OAAO4jH,GAAO5jH,OAAOwgH,EAAK/oD,IAClF,EACA+oD,EAAO,SAAU/oD,GAGf,IAFA,IAAIphK,EAAIohK,EAAO9gK,OACbitN,EAAQ,GACHvtN,KACLutN,EAAMvtN,GAAK8qN,EAAK1pD,EAAOphK,IAEzB,OAAOwrJ,EAAIzxJ,MAAM,KAAM,CAAC8mJ,EAAMspE,MAAMxgH,OAAO4jH,GAC7C,EACAnD,EAAO,SAAUprF,GACf,IAAIsL,EAAQ,IAAItwI,WAAW,CAAC,EAE5B,EAAM,EAAM,EAEZ,EAAM,EAAM,EAAM,EAElB,EAAM,EAAM,EAAM,EAElB,EAAM,EAAM,GAAM,KAEN,WAAXglI,IAA0B,IAAgB,SAAXA,IAAwB,IAAgB,MAAXA,IAAsB,EAAc,IAAXA,EAEtF,EAAM,EAAM,EAAM,EAElB,EAAM,EAEN,EAAM,EAEN,EAAM,EAAM,EAAM,EAElB,EAAM,EAAM,EAAM,EAElB,EAAM,EAAM,EAAM,EAAM,EAAM,EAAM,EAAM,EAAM,EAAM,EAAM,EAAM,EAAM,EAAM,EAAM,EAAM,EAAM,EAAM,EAAM,EAAM,EAAM,EAAM,EAAM,EAAM,EAAM,EAAM,EAAM,EAAM,EAAM,EAAM,EAAM,EAAM,EAAM,GAAM,EAAM,EAAM,EAElN,EAAM,EAAM,EAAM,EAAM,EAAM,EAAM,EAAM,EAAM,EAAM,EAAM,EAAM,EAAM,EAAM,EAAM,EAAM,EAAM,EAAM,EAAM,EAAM,EAAM,EAAM,EAAM,EAAM,EAE1I,IAAM,IAAM,IAAM,MAElB,OAAOwsB,EAAI3K,EAAMupE,KAAM9/E,EACzB,EACAogF,EAAO,SAAUh3H,GACf,IAEEnP,EACAvkF,EAHEwtN,EAAU95H,EAAM85H,SAAW,GAC7BljF,EAAQ,IAAItwI,WAAW,EAAIwzN,EAAQltN,QAKrC,IAAKN,EAAI,EAAGA,EAAIwtN,EAAQltN,OAAQN,IAC9BukF,EAAQipI,EAAQxtN,GAAGukF,MACnB+lD,EAAMtqI,EAAI,GAAKukF,EAAMkpI,WAAa,EAAIlpI,EAAMmpI,cAAgB,EAAInpI,EAAMopI,cAExE,OAAOniE,EAAI3K,EAAM6pE,KAAMpgF,EACzB,EACAqgF,EAAO,SAAUj3H,GACf,OAAO83D,EAAI3K,EAAM8pE,KAAMC,EAAKl3H,GAAQ83D,EAAI3K,EAAM6rE,KAAMd,GAAOpgE,EAAI3K,EAAM2rE,KAAMd,GAAOlgE,EAAI3K,EAAM4rE,KAAMd,GAAOngE,EAAI3K,EAAM0rE,KAAMd,GAC3H,EACA,WACE,IAAImC,EAAaC,EACjBjD,EAAO,SAAUl3H,GACf,OAAO83D,EAAI3K,EAAM+pE,KAAM,IAAI5wN,WAAW,CAAC,EAEvC,EAAM,EAAM,EAEZ,EAAM,EAAM,EAAM,IAAuB,UAAf05F,EAAMp6F,KAAmBs0N,EAAYl6H,GAASm6H,EAAYn6H,GACtF,EACAk6H,EAAc,SAAUl6H,GACtB,IAIE1zF,EACA8tN,EALEC,EAAMr6H,EAAMq6H,KAAO,GACrBC,EAAMt6H,EAAMs6H,KAAO,GACnBC,EAAwB,GACxBC,EAAuB,GAIzB,IAAKluN,EAAI,EAAGA,EAAI+tN,EAAIztN,OAAQN,IAC1BiuN,EAAsB7yN,MAA0B,MAApB2yN,EAAI/tN,GAAGskF,cAAyB,GAC5D2pI,EAAsB7yN,KAAyB,IAApB2yN,EAAI/tN,GAAGskF,YAElC2pI,EAAwBA,EAAsBtkH,OAAOzuG,MAAMmG,UAAUpG,MAAM6F,KAAKitN,EAAI/tN,KAGtF,IAAKA,EAAI,EAAGA,EAAIguN,EAAI1tN,OAAQN,IAC1BkuN,EAAqB9yN,MAA0B,MAApB4yN,EAAIhuN,GAAGskF,cAAyB,GAC3D4pI,EAAqB9yN,KAAyB,IAApB4yN,EAAIhuN,GAAGskF,YACjC4pI,EAAuBA,EAAqBvkH,OAAOzuG,MAAMmG,UAAUpG,MAAM6F,KAAKktN,EAAIhuN,KAmDpF,GAjDA8tN,EAAU,CAACjtE,EAAMmrE,KAAM,IAAIhyN,WAAW,CAAC,EAAM,EAAM,EAAM,EAAM,EAAM,EAErE,EAAM,EAEN,EAAM,EAEN,EAAM,EAEN,EAAM,EAAM,EAAM,EAAM,EAAM,EAAM,EAAM,EAAM,EAAM,EAAM,EAAM,GAEnD,MAAd05F,EAAMmO,QAAmB,EAAiB,IAAdnO,EAAMmO,OAEnB,MAAfnO,EAAMoO,SAAoB,EAAkB,IAAfpO,EAAMoO,OAEpC,EAAM,GAAM,EAAM,EAElB,EAAM,GAAM,EAAM,EAElB,EAAM,EAAM,EAAM,EAElB,EAAM,EAEN,GAAM,IAAM,IAAM,IAAM,IAAM,IAAM,IAAM,IAAM,GAAM,GAAM,IAAM,IAAM,IAAM,IAAM,IAAM,GAAM,GAAM,IAAM,IAAM,IAAM,EAAM,EAAM,EAAM,EAAM,EAAM,EAAM,EAAM,EAAM,EAAM,EAAM,EAAM,EAE1L,EAAM,GAEN,GAAM,KACF0pD,EAAI3K,EAAMorE,KAAM,IAAIjyN,WAAW,CAAC,EAEpC05F,EAAMy6H,WAENz6H,EAAM06H,qBAEN16H,EAAM26H,SAEN,KACE1kH,OAAO,CAACokH,EAAIztN,QAEd2tN,EAEA,CAACD,EAAI1tN,QAEL4tN,KACK1iE,EAAI3K,EAAMqrE,KAAM,IAAIlyN,WAAW,CAAC,EAAM,GAAM,IAAM,IAEvD,EAAM,GAAM,IAAM,IAElB,EAAM,GAAM,IAAM,QAEd05F,EAAM46H,SAAU,CAClB,IAAIC,EAAW76H,EAAM46H,SAAS,GAC5BE,EAAW96H,EAAM46H,SAAS,GAC5BR,EAAQ1yN,KAAKowJ,EAAI3K,EAAMwrE,KAAM,IAAIryN,WAAW,EAAa,WAAXu0N,IAA0B,IAAgB,SAAXA,IAAwB,IAAgB,MAAXA,IAAsB,EAAc,IAAXA,GAA6B,WAAXC,IAA0B,IAAgB,SAAXA,IAAwB,IAAgB,MAAXA,IAAsB,EAAc,IAAXA,KAC5O,CACA,OAAOhjE,EAAIzxJ,MAAM,KAAM+zN,EACzB,EACAD,EAAc,SAAUn6H,GACtB,OAAO83D,EAAI3K,EAAMurE,KAAM,IAAIpyN,WAAW,CAEtC,EAAM,EAAM,EAAM,EAAM,EAAM,EAE9B,EAAM,EAGN,EAAM,EAAM,EAAM,EAElB,EAAM,EAAM,EAAM,GAEI,MAArB05F,EAAMy5H,eAA0B,EAAwB,IAArBz5H,EAAMy5H,cAEtB,MAAnBz5H,EAAM+6H,aAAwB,EAAsB,IAAnB/6H,EAAM+6H,WAExC,EAAM,EAEN,EAAM,GAEc,MAAnB/6H,EAAM05H,aAAwB,EAAsB,IAAnB15H,EAAM05H,WAAmB,EAAM,IAE7DtD,EAAKp2H,GACX,CACD,CA7GD,GA8GA42H,EAAO,SAAU52H,GACf,IAAI/4F,EAAS,IAAIX,WAAW,CAAC,EAE7B,EAAM,EAAM,EAEZ,EAAM,EAAM,EAAM,EAElB,EAAM,EAAM,EAAM,GAEN,WAAX05F,EAAM/6E,KAAoB,IAAgB,SAAX+6E,EAAM/6E,KAAkB,IAAgB,MAAX+6E,EAAM/6E,KAAgB,EAAc,IAAX+6E,EAAM/6E,GAE5F,EAAM,EAAM,EAAM,GAEA,WAAjB+6E,EAAMsrC,WAA0B,IAAsB,SAAjBtrC,EAAMsrC,WAAwB,IAAsB,MAAjBtrC,EAAMsrC,WAAsB,EAAoB,IAAjBtrC,EAAMsrC,SAE9G,EAAM,EAAM,EAAM,EAAM,EAAM,EAAM,EAAM,EAE1C,EAAM,EAEN,EAAM,EAEN,EAAM,EAEN,EAAM,EAEN,EAAM,EAAM,EAAM,EAAM,EAAM,EAAM,EAAM,EAAM,EAAM,EAAM,EAAM,EAAM,EAAM,EAAM,EAAM,EAAM,EAAM,EAAM,EAAM,EAAM,EAAM,EAAM,EAAM,EAAM,EAAM,EAAM,EAAM,EAAM,EAAM,EAAM,EAAM,EAAM,GAAM,EAAM,EAAM,GAEnM,MAAdtrC,EAAMmO,QAAmB,EAAiB,IAAdnO,EAAMmO,MAAc,EAAM,GAEvC,MAAfnO,EAAMoO,SAAoB,EAAkB,IAAfpO,EAAMoO,OAAe,EAAM,IAEzD,OAAO0pD,EAAI3K,EAAMypE,KAAM3vN,EACzB,EAMAkwN,EAAO,SAAUn3H,GACf,IAAIg7H,EAAqBC,EAAyBC,EAAkBC,EAAmCC,EAA8BC,EAuCrI,OAtCAL,EAAsBljE,EAAI3K,EAAMgsE,KAAM,IAAI7yN,WAAW,CAAC,EAEtD,EAAM,EAAM,IAEA,WAAX05F,EAAM/6E,KAAoB,IAAgB,SAAX+6E,EAAM/6E,KAAkB,IAAgB,MAAX+6E,EAAM/6E,KAAgB,EAAc,IAAX+6E,EAAM/6E,GAE5F,EAAM,EAAM,EAAM,EAElB,EAAM,EAAM,EAAM,EAElB,EAAM,EAAM,EAAM,EAElB,EAAM,EAAM,EAAM,KAElBm2M,EAA+BvpN,KAAK80H,MAAM3mC,EAAMs7H,oBAAsB5oI,GACtE2oI,EAA+BxpN,KAAK80H,MAAM3mC,EAAMs7H,oBAAsB5oI,GACtEuoI,EAA0BnjE,EAAI3K,EAAM+rE,KAAM,IAAI5yN,WAAW,CAAC,EAE1D,EAAM,EAAM,EAGZ80N,IAAiC,GAAK,IAAMA,IAAiC,GAAK,IAAMA,IAAiC,EAAI,IAAqC,IAA/BA,EAAqCC,IAAiC,GAAK,IAAMA,IAAiC,GAAK,IAAMA,IAAiC,EAAI,IAAqC,IAA/BA,KAiBxR,UAAfr7H,EAAMp6F,MACRs1N,EAAmB7D,EAAOr3H,EAdf,IAeJ83D,EAAI3K,EAAMgqE,KAAM6D,EAAqBC,EAAyBC,KAKvEC,EAAwBnE,EAAKh3H,GAC7Bk7H,EAAmB7D,EAAOr3H,EAAOm7H,EAAsBvuN,OArB1C,IAsBNkrJ,EAAI3K,EAAMgqE,KAAM6D,EAAqBC,EAAyBC,EAAkBC,GACzF,EAOAxE,EAAO,SAAU32H,GAEf,OADAA,EAAMsrC,SAAWtrC,EAAMsrC,UAAY,WAC5BwsB,EAAI3K,EAAMwpE,KAAMC,EAAK52H,GAAQ62H,EAAK72H,GAC3C,EACAo3H,EAAO,SAAUp3H,GACf,IAAI/4F,EAAS,IAAIX,WAAW,CAAC,EAE7B,EAAM,EAAM,GAEA,WAAX05F,EAAM/6E,KAAoB,IAAgB,SAAX+6E,EAAM/6E,KAAkB,IAAgB,MAAX+6E,EAAM/6E,KAAgB,EAAc,IAAX+6E,EAAM/6E,GAE5F,EAAM,EAAM,EAAM,EAElB,EAAM,EAAM,EAAM,EAElB,EAAM,EAAM,EAAM,EAElB,EAAM,EAAM,EAAM,IASlB,MAHmB,UAAf+6E,EAAMp6F,OACRqB,EAAOA,EAAO2F,OAAS,GAAK,GAEvBkrJ,EAAI3K,EAAMiqE,KAAMnwN,EACzB,EACA,WACE,IAAIs0N,EAAWC,EAAWC,EAK1BA,EAAa,SAAU3B,EAAS5yM,GAC9B,IAAIw0M,EAAkB,EACpBC,EAAc,EACdC,EAAe,EACfC,EAAwB,EAgB1B,OAdI/B,EAAQltN,cACkB/D,IAAxBixN,EAAQ,GAAGxuF,WACbowF,EAAkB,QAEI7yN,IAApBixN,EAAQ,GAAGnqN,OACbgsN,EAAc,QAES9yN,IAArBixN,EAAQ,GAAGjpI,QACb+qI,EAAe,QAEwB/yN,IAArCixN,EAAQ,GAAG+B,wBACbA,EAAwB,IAGrB,CAAC,EAER,EAAMH,EAAkBC,EAAcC,EAAeC,EAAuB,GAE1D,WAAjB/B,EAAQltN,UAAyB,IAAsB,SAAjBktN,EAAQltN,UAAuB,IAAsB,MAAjBktN,EAAQltN,UAAqB,EAAoB,IAAjBktN,EAAQltN,QAEzG,WAATsa,KAAyB,IAAc,SAATA,KAAuB,IAAc,MAATA,KAAqB,EAAY,IAATA,EAErF,EACAs0M,EAAY,SAAUx7H,EAAO94E,GAC3B,IAAI40M,EAAallF,EAAOmlF,EAAQjC,EAASkC,EAAQ1vN,EAOjD,IALA4a,GAAU,GAAS,IADnB4yM,EAAU95H,EAAM85H,SAAW,IACKltN,OAChCmvN,EAASN,EAAW3B,EAAS5yM,IAC7B0vH,EAAQ,IAAItwI,WAAWy1N,EAAOnvN,OAA0B,GAAjBktN,EAAQltN,SACzCsC,IAAI6sN,GACVD,EAAcC,EAAOnvN,OAChBN,EAAI,EAAGA,EAAIwtN,EAAQltN,OAAQN,IAC9B0vN,EAASlC,EAAQxtN,GACjBsqI,EAAMklF,MAAoC,WAAlBE,EAAO1wF,YAA2B,GAC1DsL,EAAMklF,MAAoC,SAAlBE,EAAO1wF,YAAyB,GACxDsL,EAAMklF,MAAoC,MAAlBE,EAAO1wF,YAAuB,EACtDsL,EAAMklF,KAAmC,IAAlBE,EAAO1wF,SAE9BsL,EAAMklF,MAAgC,WAAdE,EAAOrsN,QAAuB,GACtDinI,EAAMklF,MAAgC,SAAdE,EAAOrsN,QAAqB,GACpDinI,EAAMklF,MAAgC,MAAdE,EAAOrsN,QAAmB,EAClDinI,EAAMklF,KAA+B,IAAdE,EAAOrsN,KAE9BinI,EAAMklF,KAAiBE,EAAOnrI,MAAMorI,WAAa,EAAID,EAAOnrI,MAAMkpI,UAClEnjF,EAAMklF,KAAiBE,EAAOnrI,MAAMmpI,cAAgB,EAAIgC,EAAOnrI,MAAMopI,eAAiB,EAAI+B,EAAOnrI,MAAMqrI,cAAgB,EAAIF,EAAOnrI,MAAMsrI,gBACxIvlF,EAAMklF,KAAoD,MAAnCE,EAAOnrI,MAAMurI,oBACpCxlF,EAAMklF,KAAoD,GAAnCE,EAAOnrI,MAAMurI,oBAEpCxlF,EAAMklF,MAAiD,WAA/BE,EAAOH,yBAAwC,GACvEjlF,EAAMklF,MAAiD,SAA/BE,EAAOH,yBAAsC,GACrEjlF,EAAMklF,MAAiD,MAA/BE,EAAOH,yBAAoC,EACnEjlF,EAAMklF,KAAgD,IAA/BE,EAAOH,sBAEhC,OAAO/jE,EAAI3K,EAAMisE,KAAMxiF,EACzB,EACA2kF,EAAY,SAAUv7H,EAAO94E,GAC3B,IAAI0vH,EAAOklF,EAAaC,EAAQjC,EAASkC,EAAQ1vN,EAOjD,IALA4a,GAAU,GAAS,GADnB4yM,EAAU95H,EAAM85H,SAAW,IACIltN,OAC/BmvN,EAASN,EAAW3B,EAAS5yM,IAC7B0vH,EAAQ,IAAItwI,WAAWy1N,EAAOnvN,OAA0B,EAAjBktN,EAAQltN,SACzCsC,IAAI6sN,GACVD,EAAcC,EAAOnvN,OAChBN,EAAI,EAAGA,EAAIwtN,EAAQltN,OAAQN,IAC9B0vN,EAASlC,EAAQxtN,GACjBsqI,EAAMklF,MAAoC,WAAlBE,EAAO1wF,YAA2B,GAC1DsL,EAAMklF,MAAoC,SAAlBE,EAAO1wF,YAAyB,GACxDsL,EAAMklF,MAAoC,MAAlBE,EAAO1wF,YAAuB,EACtDsL,EAAMklF,KAAmC,IAAlBE,EAAO1wF,SAE9BsL,EAAMklF,MAAgC,WAAdE,EAAOrsN,QAAuB,GACtDinI,EAAMklF,MAAgC,SAAdE,EAAOrsN,QAAqB,GACpDinI,EAAMklF,MAAgC,MAAdE,EAAOrsN,QAAmB,EAClDinI,EAAMklF,KAA+B,IAAdE,EAAOrsN,KAEhC,OAAOmoJ,EAAI3K,EAAMisE,KAAMxiF,EACzB,EACAygF,EAAS,SAAUr3H,EAAO94E,GACxB,MAAmB,UAAf84E,EAAMp6F,KACD21N,EAAUv7H,EAAO94E,GAEnBs0M,EAAUx7H,EAAO94E,EAC1B,CACD,CA/FD,GAgGA,IAyTIm1M,EA8BFxqI,EACAC,EACAC,EACAC,EACAC,EACAC,EACAC,EA7VEmqI,EAAe,CACjBjG,KAAMA,EACNC,KAAMA,EACNpoE,KAAMA,EACNC,KAAMA,EACNnT,YAAa,SAAU0yB,GACrB,IAEEzmK,EAFEs1N,EAAWlG,IACbmG,EAAQruE,EAAKuf,GAKf,OAHAzmK,EAAS,IAAIX,WAAWi2N,EAAS3rI,WAAa4rI,EAAM5rI,aAC7C1hF,IAAIqtN,GACXt1N,EAAOiI,IAAIstN,EAAOD,EAAS3rI,YACpB3pF,CACT,GA4KEw1N,EAAiB,SAAUC,EAAOC,GACpC,IAAIX,EAtBG,CACLrsN,KAAM,EACNkhF,MAAO,CACLorI,UAAW,EACXlC,UAAW,EACXC,aAAc,EACdC,cAAe,EACfmC,oBAAqB,EACrBD,gBAAiB,IAyBrB,OAVAH,EAAOW,WAAaA,EACpBX,EAAOH,sBAAwBa,EAAME,IAAMF,EAAMG,IACjDb,EAAO1wF,SAAWoxF,EAAMpxF,SACxB0wF,EAAOrsN,KAAO,EAAI+sN,EAAM9vN,OAExBovN,EAAOrsN,MAAQ+sN,EAAM9rI,WACjB8rI,EAAMI,WACRd,EAAOnrI,MAAMkpI,UAAY,EACzBiC,EAAOnrI,MAAMsrI,gBAAkB,GAE1BH,CACT,EAkFIe,EAAe,CACjBC,oBAhQwB,SAAUC,GAClC,IAAI3wN,EACF4wN,EACAC,EAAe,GACfrJ,EAAS,GAMX,IAJAA,EAAOljI,WAAa,EACpBkjI,EAAOsJ,SAAW,EAClBtJ,EAAOxoF,SAAW,EAClB6xF,EAAavsI,WAAa,EACrBtkF,EAAI,EAAGA,EAAI2wN,EAASrwN,OAAQN,IAGA,gCAF/B4wN,EAAaD,EAAS3wN,IAEP+wN,aAGTF,EAAavwN,SACfuwN,EAAa7xF,SAAW4xF,EAAWL,IAAMM,EAAaN,IAEtD/I,EAAOljI,YAAcusI,EAAavsI,WAClCkjI,EAAOsJ,UAAYD,EAAavwN,OAChCknN,EAAOxoF,UAAY6xF,EAAa7xF,SAChCwoF,EAAOpsN,KAAKy1N,KAEdA,EAAe,CAACD,IACHtsI,WAAassI,EAAWhyN,KAAK0lF,WAC1CusI,EAAaP,IAAMM,EAAWN,IAC9BO,EAAaN,IAAMK,EAAWL,MAGC,8CAA3BK,EAAWG,cACbF,EAAaL,UAAW,GAE1BK,EAAa7xF,SAAW4xF,EAAWL,IAAMM,EAAaN,IACtDM,EAAavsI,YAAcssI,EAAWhyN,KAAK0lF,WAC3CusI,EAAaz1N,KAAKw1N,IActB,OATIpJ,EAAOlnN,UAAYuwN,EAAa7xF,UAAY6xF,EAAa7xF,UAAY,KACvE6xF,EAAa7xF,SAAWwoF,EAAOA,EAAOlnN,OAAS,GAAG0+H,UAIpDwoF,EAAOljI,YAAcusI,EAAavsI,WAClCkjI,EAAOsJ,UAAYD,EAAavwN,OAChCknN,EAAOxoF,UAAY6xF,EAAa7xF,SAChCwoF,EAAOpsN,KAAKy1N,GACLrJ,CACT,EA+MEwJ,oBA1MwB,SAAUxJ,GAClC,IAAIxnN,EACF6wN,EACAI,EAAa,GACbC,EAAO,GAcT,IAXAD,EAAW3sI,WAAa,EACxB2sI,EAAWH,SAAW,EACtBG,EAAWjyF,SAAW,EACtBiyF,EAAWX,IAAM9I,EAAO,GAAG8I,IAC3BW,EAAWV,IAAM/I,EAAO,GAAG+I,IAE3BW,EAAK5sI,WAAa,EAClB4sI,EAAKJ,SAAW,EAChBI,EAAKlyF,SAAW,EAChBkyF,EAAKZ,IAAM9I,EAAO,GAAG8I,IACrBY,EAAKX,IAAM/I,EAAO,GAAG+I,IAChBvwN,EAAI,EAAGA,EAAIwnN,EAAOlnN,OAAQN,KAC7B6wN,EAAerJ,EAAOxnN,IACLwwN,UAGXS,EAAW3wN,SACb4wN,EAAK91N,KAAK61N,GACVC,EAAK5sI,YAAc2sI,EAAW3sI,WAC9B4sI,EAAKJ,UAAYG,EAAWH,SAC5BI,EAAKlyF,UAAYiyF,EAAWjyF,WAE9BiyF,EAAa,CAACJ,IACHC,SAAWD,EAAavwN,OACnC2wN,EAAW3sI,WAAausI,EAAavsI,WACrC2sI,EAAWX,IAAMO,EAAaP,IAC9BW,EAAWV,IAAMM,EAAaN,IAC9BU,EAAWjyF,SAAW6xF,EAAa7xF,WAEnCiyF,EAAWjyF,UAAY6xF,EAAa7xF,SACpCiyF,EAAWH,UAAYD,EAAavwN,OACpC2wN,EAAW3sI,YAAcusI,EAAavsI,WACtC2sI,EAAW71N,KAAKy1N,IAWpB,OARIK,EAAK5wN,QAAU2wN,EAAWjyF,UAAY,IACxCiyF,EAAWjyF,SAAWkyF,EAAKA,EAAK5wN,OAAS,GAAG0+H,UAE9CkyF,EAAK5sI,YAAc2sI,EAAW3sI,WAC9B4sI,EAAKJ,UAAYG,EAAWH,SAC5BI,EAAKlyF,UAAYiyF,EAAWjyF,SAE5BkyF,EAAK91N,KAAK61N,GACHC,CACT,EAwJEC,oBA7IwB,SAAUD,GAClC,IAAID,EAaJ,OAZKC,EAAK,GAAG,GAAGV,UAAYU,EAAK5wN,OAAS,IAExC2wN,EAAaC,EAAKj2H,QAClBi2H,EAAK5sI,YAAc2sI,EAAW3sI,WAC9B4sI,EAAKJ,UAAYG,EAAWH,SAI5BI,EAAK,GAAG,GAAGX,IAAMU,EAAWV,IAC5BW,EAAK,GAAG,GAAGZ,IAAMW,EAAWX,IAC5BY,EAAK,GAAG,GAAGlyF,UAAYiyF,EAAWjyF,UAE7BkyF,CACT,EA+HEE,oBApF0B,SAAUF,EAAMG,GAC1C,IAAIllI,EACFnsF,EACA0vN,EACAuB,EACAJ,EACAR,EAAagB,GAAkB,EAC/B7D,EAAU,GACZ,IAAKrhI,EAAI,EAAGA,EAAI+kI,EAAK5wN,OAAQ6rF,IAE3B,IADA8kI,EAAaC,EAAK/kI,GACbnsF,EAAI,EAAGA,EAAIixN,EAAW3wN,OAAQN,IACjC6wN,EAAeI,EAAWjxN,GAE1BqwN,IADAX,EAASS,EAAeU,EAAcR,IACjBhtN,KACrBmqN,EAAQpyN,KAAKs0N,GAGjB,OAAOlC,CACT,EAmEE8D,mBAjEuB,SAAUJ,GACjC,IAAI/kI,EACFnsF,EACA4sH,EACAqkG,EACAJ,EACAD,EACAP,EAAa,EACbkB,EAAiBL,EAAK5sI,WACtBktI,EAAeN,EAAKJ,SAEpBlyN,EAAO,IAAI5E,WADOu3N,EAAiB,EAAIC,GAEvCttI,EAAO,IAAIC,SAASvlF,EAAKwlF,QAE3B,IAAK+H,EAAI,EAAGA,EAAI+kI,EAAK5wN,OAAQ6rF,IAG3B,IAFA8kI,EAAaC,EAAK/kI,GAEbnsF,EAAI,EAAGA,EAAIixN,EAAW3wN,OAAQN,IAGjC,IAFA6wN,EAAeI,EAAWjxN,GAErB4sH,EAAI,EAAGA,EAAIikG,EAAavwN,OAAQssH,IACnCgkG,EAAaC,EAAajkG,GAC1B1oC,EAAK8oI,UAAUqD,EAAYO,EAAWhyN,KAAK0lF,YAC3C+rI,GAAc,EACdzxN,EAAKgE,IAAIguN,EAAWhyN,KAAMyxN,GAC1BA,GAAcO,EAAWhyN,KAAK0lF,WAIpC,OAAO1lF,CACT,EAoCE6yN,4BAlCgC,SAAUrB,EAAOiB,GACjD,IAAI3B,EAEFlC,EAAU,GAGZ,OAFAkC,EAASS,EAAeC,EAFTiB,GAAkB,GAGjC7D,EAAQpyN,KAAKs0N,GACNlC,CACT,EA4BEkE,2BA1B+B,SAAUtB,GACzC,IAAIpwN,EACF4wN,EACAP,EAAa,EACbkB,EAAiBnB,EAAM9rI,WACvBktI,EAAepB,EAAM9vN,OAErB1B,EAAO,IAAI5E,WADOu3N,EAAiB,EAAIC,GAEvCttI,EAAO,IAAIC,SAASvlF,EAAKwlF,QAE3B,IAAKpkF,EAAI,EAAGA,EAAIowN,EAAM9vN,OAAQN,IAC5B4wN,EAAaR,EAAMpwN,GACnBkkF,EAAK8oI,UAAUqD,EAAYO,EAAWhyN,KAAK0lF,YAC3C+rI,GAAc,EACdzxN,EAAKgE,IAAIguN,EAAWhyN,KAAMyxN,GAC1BA,GAAcO,EAAWhyN,KAAK0lF,WAEhC,OAAO1lF,CACT,GAiBI+yN,GAAa,CAAC,GAAI,GAAI,EAAG,GAAI,IAAK,IAClCC,GAAY,CAAC,GAAI,GAAI,IAAK,GAAI,EAAG,EAAG,EAAG,EAAG,IAAK,EAAG,EAAG,EAAG,GAAI,IAAK,KACjEC,GAAW,SAAUh3M,GAEvB,IADA,IAAIkmE,EAAI,GACDlmE,KACLkmE,EAAE3lF,KAAK,GAET,OAAO2lF,CACT,EAqCI+wI,GAAqB,IAqBzBnsI,EAAmB,SAAUM,EAAWD,GACtC,OAAOT,EAAiBG,EAAiBO,EAAWD,GACtD,EACAJ,EAAmB,SAAUK,EAAWD,GACtC,OAAOR,EAAiBC,EAAiBQ,GAAYD,EACvD,EAMAH,EAAsB,SAAUI,EAAWC,EAAkBC,GAC3D,OAAOV,EAAiBU,EAAyBF,EAAYA,EAAYC,EAC3E,EACA,IAAI6rI,GAAU,CACZjsI,iBAAkBgsI,GAClBvsI,iBA5BFA,EAAmB,SAAUQ,GAC3B,OAAOA,EAAU+rI,EACnB,EA2BEtsI,iBA1BFA,EAAmB,SAAUO,EAASC,GACpC,OAAOD,EAAUC,CACnB,EAyBEP,iBAxBFA,EAAmB,SAAUQ,GAC3B,OAAOA,EAAY6rI,EACrB,EAuBEpsI,iBAtBFA,EAAmB,SAAUO,EAAWD,GACtC,OAAOC,EAAYD,CACrB,EAqBEL,iBAAkBA,EAClBC,iBAAkBA,EAClBC,oBAAqBA,GASnBmsI,GA/EY,WACd,IAAKjC,EAAS,CAEZ,IAAIiC,EAAgB,CAClB,KAAO,CAACL,GAAY,CAAC,IAAK,IAAKE,GAAS,KAAM,CAAC,KAC/C,MAAO,CAACF,GAAY,CAAC,KAAME,GAAS,KAAM,CAAC,KAC3C,KAAO,CAACF,GAAY,CAAC,IAAK,KAAME,GAAS,KAAM,CAAC,KAChD,KAAO,CAACF,GAAY,CAAC,IAAK,KAAME,GAAS,KAAM,CAAC,GAAI,IAAK,KAAMA,GAAS,IAAK,CAAC,MAC9E,MAAO,CAACF,GAAY,CAAC,IAAK,KAAME,GAAS,KAAM,CAAC,GAAI,IAAK,KAAMA,GAAS,IAAK,CAAC,MAC9E,KAAO,CAACF,GAAY,CAAC,IAAK,KAAME,GAAS,KAAM,CAAC,GAAI,KAAMA,GAAS,KAAM,CAAC,MAC1E,KAAO,CAACF,GAAY,CAAC,IAAK,KAAME,GAAS,KAAM,CAAC,GAAI,IAAK,KAAMA,GAAS,KAAM,CAAC,IAAK,KAAMA,GAAS,KAAM,CAAC,MAC1G,KAAO,CAACF,GAAY,CAAC,IAAK,KAAME,GAAS,KAAM,CAAC,GAAI,IAAK,KAAMA,GAAS,KAAM,CAAC,IAAK,KAAMA,GAAS,KAAM,CAAC,IAAK,KAAMA,GAAS,KAAM,CAAC,EAAG,MACxI,KAAO,CAACD,GAAWC,GAAS,KAAM,CAAC,EAAG,IAAK,KAAMA,GAAS,KAAM,CAAC,EAAG,IAAK,KAAMA,GAAS,KAAM,CAAC,GAAI,IAAK,KAAMA,GAAS,KAAM,CAAC,GAAI,IAAK,KAAMA,GAAS,KAAM,CAAC,KAC7J,MAAO,CAACD,GAAWC,GAAS,KAAM,CAAC,EAAG,IAAK,KAAMA,GAAS,KAAM,CAAC,EAAG,IAAK,KAAMA,GAAS,KAAM,CAAC,GAAI,IAAK,KAAMA,GAAS,KAAM,CAAC,GAAI,IAAK,KAAMA,GAAS,KAAM,CAAC,GAAI,IAAK,KAAMA,GAAS,KAAM,CAAC,MAC5L,IAAM,CAACD,GAAWC,GAAS,KAAM,CAAC,EAAG,IAAK,IAAKA,GAAS,IAAK,CAAC,KAvB1CI,EAyBFD,EAApBjC,EAxBK3uN,OAAO0M,KAAKmkN,GAAW94N,QAAO,SAAU4G,EAAK/E,GAIlD,OAHA+E,EAAI/E,GAAO,IAAIhB,WAAWi4N,EAAUj3N,GAAK7B,QAAO,SAAU2I,EAAK4vD,GAC7D,OAAO5vD,EAAI6nG,OAAOj4C,EACpB,GAAG,KACI3xD,CACT,GAAG,CAAC,EAoBJ,CA1Bc,IAAUkyN,EA2BxB,OAAOlC,CACT,EA6DImC,GAAUH,GA8GVI,GAAoB,CACtBC,kBA7FsB,SAAU1+H,EAAO8zH,EAAQ6K,EAAoBC,GACnE,IAAIC,EACFC,EAIAC,EACAzyN,EACA0yN,EALAC,EAAmB,EACnBC,EAAsB,EACtBC,EAAoB,EAItB,GAAKrL,EAAOlnN,SAGZiyN,EAAwBL,GAAQvsI,iBAAiB+N,EAAMs7H,oBAAqBt7H,EAAM05H,YAElFoF,EAAgBjtN,KAAK4+G,KAAK+tG,GAAQpsI,kBAAoB4N,EAAM05H,WAAa,OACrEiF,GAAsBC,IAExBK,EAAmBJ,EAAwBhtN,KAAK69E,IAAIivI,EAAoBC,GAGxEO,GADAD,EAAsBrtN,KAAK80H,MAAMs4F,EAAmBH,IACVA,KAIxCI,EAAsB,GAAKC,EAAoBX,GAAQpsI,iBAAmB,IAA9E,CASA,KANA2sI,EAAcT,KAAgBt+H,EAAM05H,eAIlCqF,EAAcjL,EAAO,GAAG5oN,MAErBoB,EAAI,EAAGA,EAAI4yN,EAAqB5yN,IACnC0yN,EAAalL,EAAO,GACpBA,EAAOn+F,OAAO,EAAG,EAAG,CAClBzqH,KAAM6zN,EACNlC,IAAKmC,EAAWnC,IAAMiC,EACtBlC,IAAKoC,EAAWpC,IAAMkC,IAI1B,OADA9+H,EAAMs7H,qBAAuBzpN,KAAK80H,MAAM63F,GAAQtsI,iBAAiBitI,EAAmBn/H,EAAM05H,aACnFyF,CAhBP,CAiBF,EAmDEC,4BA9CgC,SAAUC,EAAYr/H,EAAOs/H,GAC7D,OAAIt/H,EAAMu/H,eAAiBD,EAClBD,GAGTr/H,EAAMu/H,cAAgBnuG,IACfiuG,EAAWnlN,QAAO,SAAUijN,GAEjC,OAAIA,EAAaN,KAAOyC,IACtBt/H,EAAMu/H,cAAgB1tN,KAAKyhG,IAAItT,EAAMu/H,cAAepC,EAAaN,KACjE78H,EAAMw/H,cAAgBx/H,EAAMu/H,eACrB,EAIX,IACF,EA+BE7B,oBA7BwB,SAAU5J,GAClC,IAAIxnN,EACF6wN,EACArD,EAAU,GACZ,IAAKxtN,EAAI,EAAGA,EAAIwnN,EAAOlnN,OAAQN,IAC7B6wN,EAAerJ,EAAOxnN,GACtBwtN,EAAQpyN,KAAK,CACXiI,KAAMwtN,EAAajyN,KAAK0lF,WACxB06C,SAAU,OAGd,OAAOwuF,CACT,EAkBE2F,qBAhByB,SAAU3L,GACnC,IAAIxnN,EACF6wN,EACAR,EAAa,EACbzxN,EAAO,IAAI5E,WAjGW,SAAUoG,GAClC,IAAIJ,EAEFmqE,EAAM,EAER,IAAKnqE,EAAI,EAAGA,EAAII,EAAME,OAAQN,IAE5BmqE,GADa/pE,EAAMJ,GACDpB,KAAK0lF,WAEzB,OAAOna,CACT,CAuF0BipJ,CAAoB5L,IAC5C,IAAKxnN,EAAI,EAAGA,EAAIwnN,EAAOlnN,OAAQN,IAC7B6wN,EAAerJ,EAAOxnN,GACtBpB,EAAKgE,IAAIiuN,EAAajyN,KAAMyxN,GAC5BA,GAAcQ,EAAajyN,KAAK0lF,WAElC,OAAO1lF,CACT,GAcIy0N,GAAqBtB,GAAQjsI,iBAmF7BwtI,GAAoB,CACtBC,aAxCiB,SAAU7/H,UACpBA,EAAMu/H,qBACNv/H,EAAM8/H,qBACN9/H,EAAMw/H,qBACNx/H,EAAM+/H,aACf,EAoCEC,kCA1BsC,SAAUhgI,EAAOvN,GACvD,IAAI6oI,EAEFiE,EAAgBv/H,EAAMu/H,cAmBxB,OAjBK9sI,IACH8sI,GAAiBv/H,EAAMigI,kBAAkBpD,KAI3CvB,EAAsBt7H,EAAMigI,kBAAkB3E,oBAE9CA,GAAuBiE,EAEvBjE,EAAsBzpN,KAAK69E,IAAI,EAAG4rI,GACf,UAAft7H,EAAMp6F,OAIR01N,GADQt7H,EAAM05H,WAAaiG,GAE3BrE,EAAsBzpN,KAAK80H,MAAM20F,IAE5BA,CACT,EAIE4E,eA/EmB,SAAUlgI,EAAO90F,GACZ,kBAAbA,EAAK0xN,WACsB/zN,IAAhCm3F,EAAMigI,kBAAkBrD,MAC1B58H,EAAMigI,kBAAkBrD,IAAM1xN,EAAK0xN,UAET/zN,IAAxBm3F,EAAMw/H,cACRx/H,EAAMw/H,cAAgBt0N,EAAK0xN,IAE3B58H,EAAMw/H,cAAgB3tN,KAAKyhG,IAAItT,EAAMw/H,cAAet0N,EAAK0xN,UAE/B/zN,IAAxBm3F,EAAM+/H,cACR//H,EAAM+/H,cAAgB70N,EAAK0xN,IAE3B58H,EAAM+/H,cAAgBluN,KAAK69E,IAAIsQ,EAAM+/H,cAAe70N,EAAK0xN,MAGrC,kBAAb1xN,EAAK2xN,WACsBh0N,IAAhCm3F,EAAMigI,kBAAkBpD,MAC1B78H,EAAMigI,kBAAkBpD,IAAM3xN,EAAK2xN,UAETh0N,IAAxBm3F,EAAMu/H,cACRv/H,EAAMu/H,cAAgBr0N,EAAK2xN,IAE3B78H,EAAMu/H,cAAgB1tN,KAAKyhG,IAAItT,EAAMu/H,cAAer0N,EAAK2xN,UAE/Bh0N,IAAxBm3F,EAAM8/H,cACR9/H,EAAM8/H,cAAgB50N,EAAK2xN,IAE3B78H,EAAM8/H,cAAgBjuN,KAAK69E,IAAIsQ,EAAM8/H,cAAe50N,EAAK2xN,KAG/D,GAiNIsD,GAAsB,CACxBC,SArIa,SAAUxpF,GASvB,IARA,IAAItqI,EAAI,EACNrF,EAAS,CACPo5N,aAAc,EACdC,YAAa,GAEfD,EAAc,EACdC,EAAc,EAETh0N,EAAIsqI,EAAMhmD,YAnBI,MAqBfgmD,EAAMtqI,IAFiB,CAM3B,KAAoB,MAAbsqI,EAAMtqI,IACX+zN,GAAe,IACf/zN,IAIF,IAFA+zN,GAAezpF,EAAMtqI,KAED,MAAbsqI,EAAMtqI,IACXg0N,GAAe,IACfh0N,IAKF,GAHAg0N,GAAe1pF,EAAMtqI,MAGhBrF,EAAO4I,SAvCqB,IAuCVwwN,EAAgD,CAErE,GAAuB,SADFl6N,OAAOC,aAAawwI,EAAMtqI,EAAI,GAAIsqI,EAAMtqI,EAAI,GAAIsqI,EAAMtqI,EAAI,GAAIsqI,EAAMtqI,EAAI,IAC9D,CAC7BrF,EAAOo5N,YAAcA,EACrBp5N,EAAOq5N,YAAcA,EACrBr5N,EAAO4I,QAAU+mI,EAAM9lD,SAASxkF,EAAGA,EAAIg0N,GACvC,KACF,CACEr5N,EAAO4I,aAAU,CAErB,CAEAvD,GAAKg0N,EACLD,EAAc,EACdC,EAAc,CAChB,CACA,OAAOr5N,CACT,EAyFEs5N,cAvFkB,SAAUC,GAG5B,OAAuB,MAAnBA,EAAI3wN,QAAQ,IAI+B,MAA1C2wN,EAAI3wN,QAAQ,IAAM,EAAI2wN,EAAI3wN,QAAQ,KAIqD,SAAxF1J,OAAOC,aAAao6N,EAAI3wN,QAAQ,GAAI2wN,EAAI3wN,QAAQ,GAAI2wN,EAAI3wN,QAAQ,GAAI2wN,EAAI3wN,QAAQ,KAI7D,IAAnB2wN,EAAI3wN,QAAQ,GAXP,KAgBF2wN,EAAI3wN,QAAQihF,SAAS,EAAG0vI,EAAI3wN,QAAQjD,OAAS,EACtD,EAmEE6zN,oBAjEwB,SAAU7D,EAAK8D,GACvC,IACEp0N,EACA6a,EACAD,EACAhc,EAJEq+I,EAAU,GAMd,KAAoB,GAAdm3E,EAAS,IACb,OAAOn3E,EAIT,IADApiI,EAAsB,GAAdu5M,EAAS,GACZp0N,EAAI,EAAGA,EAAI6a,EAAO7a,IAErBpB,EAAO,CACLtF,KAA6B,EAAvB86N,GAFRx5M,EAAa,EAAJ5a,GAEiB,GACxBswN,IAAKA,GAGoB,EAAvB8D,EAASx5M,EAAS,KACpBhc,EAAKy1N,OAASD,EAASx5M,EAAS,IAAM,EAAIw5M,EAASx5M,EAAS,GAC5DqiI,EAAQ7hJ,KAAKwD,IAGjB,OAAOq+I,CACT,EAyCEqD,gCAxCsC,SAAU1hJ,GAOhD,IANA,IAGE4hJ,EACAC,EAJEngJ,EAAS1B,EAAK0lF,WAChBgwI,EAAoC,GACpCt0N,EAAI,EAICA,EAAIM,EAAS,GACF,IAAZ1B,EAAKoB,IAA4B,IAAhBpB,EAAKoB,EAAI,IAA4B,IAAhBpB,EAAKoB,EAAI,IACjDs0N,EAAkCl5N,KAAK4E,EAAI,GAC3CA,GAAK,GAELA,IAKJ,GAAiD,IAA7Cs0N,EAAkCh0N,OACpC,OAAO1B,EAGT4hJ,EAAYlgJ,EAASg0N,EAAkCh0N,OACvDmgJ,EAAU,IAAIzmJ,WAAWwmJ,GACzB,IAAIE,EAAc,EAClB,IAAK1gJ,EAAI,EAAGA,EAAIwgJ,EAAWE,IAAe1gJ,IACpC0gJ,IAAgB4zE,EAAkC,KAEpD5zE,IAEA4zE,EAAkCr5H,SAEpCwlD,EAAQzgJ,GAAKpB,EAAK8hJ,GAEpB,OAAOD,CACT,EAOE8zE,+BApJmC,GAqKjCC,GAAW3I,EACX4I,GAAeZ,GACfa,GAAkB,SAAUn5N,GAC9BA,EAAUA,GAAW,CAAC,EACtBm5N,GAAgBrzN,UAAUooN,KAAK3oN,KAAKmB,MAEpCA,KAAK0yN,kBAAwD,mBAA7Bp5N,EAAQq5N,kBAAiCr5N,EAAQq5N,iBACjF3yN,KAAK4yN,gBAAkB,GACvB5yN,KAAK6yN,WAAa,CAAC,IAAIC,GAAa,EAAG,GAEvC,IAAIA,GAAa,EAAG,GAEpB,IAAIA,GAAa,EAAG,GAEpB,IAAIA,GAAa,EAAG,IAEhB9yN,KAAK0yN,oBACP1yN,KAAK+yN,aAAe,IAAIC,GAAa,CACnCrhF,gBAAiBr4I,EAAQq4I,mBAG7B3xI,KAAKO,QAELP,KAAK6yN,WAAWl6N,SAAQ,SAAU+7F,GAChCA,EAAGsmC,GAAG,OAAQh7H,KAAKk7H,QAAQn8H,KAAKiB,KAAM,SACtC00F,EAAGsmC,GAAG,cAAeh7H,KAAKk7H,QAAQn8H,KAAKiB,KAAM,gBAC7C00F,EAAGsmC,GAAG,OAAQh7H,KAAKk7H,QAAQn8H,KAAKiB,KAAM,QACxC,GAAGA,MACCA,KAAK0yN,oBACP1yN,KAAK+yN,aAAa/3F,GAAG,OAAQh7H,KAAKk7H,QAAQn8H,KAAKiB,KAAM,SACrDA,KAAK+yN,aAAa/3F,GAAG,cAAeh7H,KAAKk7H,QAAQn8H,KAAKiB,KAAM,gBAC5DA,KAAK+yN,aAAa/3F,GAAG,OAAQh7H,KAAKk7H,QAAQn8H,KAAKiB,KAAM,SAEzD,EACAyyN,GAAgBrzN,UAAY,IAAImzN,GAChCE,GAAgBrzN,UAAUjG,KAAO,SAAUopG,GACzC,IAAI0vH,EAAKE,EAAUc,EAEnB,GAA0B,aAAtB1wH,EAAMusH,cAIVmD,EAAMO,GAAaX,SAAStvH,EAAM2wH,cAEzB5xN,SAIL2wN,EAAIH,cAAgBU,GAAaF,iCAIrCH,EAAWK,GAAaR,cAAcC,IAatC,GAAI1vH,EAAM+rH,IAAMtuN,KAAKmzN,WAEnBnzN,KAAKozN,qBAAsB,MAF7B,CAIO,GAAI7wH,EAAM+rH,MAAQtuN,KAAKmzN,YAAcnzN,KAAKozN,oBAM/C,OALApzN,KAAKqzN,mBACArzN,KAAKqzN,cAERrzN,KAAKozN,qBAAsB,IAK/BH,EAAoBT,GAAaN,oBAAoB3vH,EAAM8rH,IAAK8D,GAChEnyN,KAAK4yN,gBAAkB5yN,KAAK4yN,gBAAgBlrH,OAAOurH,GAC/CjzN,KAAKmzN,aAAe5wH,EAAM+rH,MAC5BtuN,KAAKqzN,YAAc,GAErBrzN,KAAKqzN,cACLrzN,KAAKmzN,WAAa5wH,EAAM+rH,GARxB,CASF,EACAmE,GAAgBrzN,UAAUk0N,eAAiB,SAAUC,GACnDvzN,KAAK6yN,WAAWl6N,SAAQ,SAAU+7F,GAChC,MAAqB,UAAd6+H,EAAwB7+H,EAAGy2B,QAAUz2B,EAAGgzH,cACjD,GAAG1nN,KACL,EACAyyN,GAAgBrzN,UAAUo0N,YAAc,SAAUD,GAE3CvzN,KAAK4yN,gBAAgBv0N,QAM1B2B,KAAK4yN,gBAAgBj6N,SAAQ,SAAUozJ,EAAM0nE,GAC3C1nE,EAAK2nE,aAAeD,CACtB,IAEAzzN,KAAK4yN,gBAAgBxlG,MAAK,SAAUtuC,EAAG4H,GACrC,OAAI5H,EAAEuvI,MAAQ3nI,EAAE2nI,IACPvvI,EAAE40I,aAAehtI,EAAEgtI,aAErB50I,EAAEuvI,IAAM3nI,EAAE2nI,GACnB,IACAruN,KAAK4yN,gBAAgBj6N,SAAQ,SAAUg7N,GACjCA,EAAOt8N,KAAO,EAEhB2I,KAAK4zN,qBAAqBD,GAG1B3zN,KAAK6zN,qBAAqBF,EAE9B,GAAG3zN,MACHA,KAAK4yN,gBAAgBv0N,OAAS,EAC9B2B,KAAKszN,eAAeC,IAzBlBvzN,KAAKszN,eAAeC,EA0BxB,EACAd,GAAgBrzN,UAAU+rH,MAAQ,WAChC,OAAOnrH,KAAKwzN,YAAY,QAC1B,EAEAf,GAAgBrzN,UAAUsoN,aAAe,WACvC,OAAO1nN,KAAKwzN,YAAY,eAC1B,EACAf,GAAgBrzN,UAAUmB,MAAQ,WAChCP,KAAKmzN,WAAa,KAClBnzN,KAAKozN,qBAAsB,EAC3BpzN,KAAKqzN,YAAc,EACnBrzN,KAAK8zN,qBAAuB,CAAC,KAAM,MACnC9zN,KAAK6yN,WAAWl6N,SAAQ,SAAUo7N,GAChCA,EAASxzN,OACX,GACF,EAaAkyN,GAAgBrzN,UAAUw0N,qBAAuB,SAAUD,GAErD3zN,KAAKg0N,oBAAoBL,GAC3B3zN,KAAK8zN,qBAAqBH,EAAOt8N,MAAQ,KAChC2I,KAAKi0N,mBAAmBN,GACjC3zN,KAAK8zN,qBAAqBH,EAAOt8N,MAAQ,EAChC2I,KAAKk0N,mBAAmBP,KACjC3zN,KAAK8zN,qBAAqBH,EAAOt8N,MAAQ,GAEI,OAA3C2I,KAAK8zN,qBAAqBH,EAAOt8N,OAMrC2I,KAAK6yN,YAAYc,EAAOt8N,MAAQ,GAAK2I,KAAK8zN,qBAAqBH,EAAOt8N,OAAO8B,KAAKw6N,EACpF,EACAlB,GAAgBrzN,UAAU60N,mBAAqB,SAAUN,GACvD,OAAoC,QAAZ,MAAhBA,EAAOvB,OACjB,EACAK,GAAgBrzN,UAAU80N,mBAAqB,SAAUP,GACvD,OAAoC,QAAZ,MAAhBA,EAAOvB,OACjB,EACAK,GAAgBrzN,UAAU40N,oBAAsB,SAAUL,GACxD,OAAoC,OAAZ,MAAhBA,EAAOvB,SAA4D,QAAZ,MAAhBuB,EAAOvB,SAA4D,QAAZ,MAAhBuB,EAAOvB,OAC/F,EACAK,GAAgBrzN,UAAUy0N,qBAAuB,SAAUF,GACrD3zN,KAAK0yN,mBACP1yN,KAAK+yN,aAAa55N,KAAKw6N,EAE3B,EAmBA,IAAIQ,GAA4B,CAC9B,IAAM,KAEN,KAAQ,GAER,KAAQ,IAER,KAAQ,KAER,KAAQ,IAER,KAAQ,IAER,KAAQ,KAER,KAAQ,KAER,KAAQ,KAER,KAAQ,KAER,KAAQ,KAER,KAAQ,KAER,KAAQ,KAER,KAAQ,IAER,KAAQ,IAER,KAAQ,KAER,KAAQ,IAER,KAAQ,KAER,KAAQ,KAER,KAAQ,KAER,KAAQ,KAER,KAAQ,KAER,KAAQ,KAER,KAAQ,KAER,KAAQ,KAER,KAAQ,KAER,KAAQ,KAER,KAAQ,OAUNC,GAAqB,SAAU1tI,GACjC,OAAO,IAAQA,GAAKA,GAAK,KAAQ,KAAQA,GAAKA,GAAK,GACrD,EACI2tI,GAAe,SAAUC,GAC3Bt0N,KAAKs0N,UAAYA,EACjBt0N,KAAKO,OACP,EACA8zN,GAAaj1N,UAAUmB,MAAQ,WAC7BP,KAAKu0N,YACLv0N,KAAKw0N,gBAAiB,EACtBx0N,KAAKy0N,QAAU,CAAC,EAChBz0N,KAAK00N,QAAU,CAAC,EAChB10N,KAAK20N,OAAS,CAAC,EACf30N,KAAK40N,SAAW,CAAC,EAGjB50N,KAAK60N,QAAU,EACf70N,KAAK80N,QAAU,EACf90N,KAAK+0N,WAAa,EAClB/0N,KAAK04F,SAAW,EAChB14F,KAAKg1N,oBAAsB,EAC3Bh1N,KAAKi1N,eAAiB,EACtBj1N,KAAKk1N,iBAAmB,EACxBl1N,KAAKm1N,YAAc,EACnBn1N,KAAKo1N,SAAW,EAChBp1N,KAAKq1N,gBAAkBr1N,KAAKo1N,SAAW,EACvCp1N,KAAKsuF,YAAc,GACnBtuF,KAAKs1N,YAAc,EACnBt1N,KAAKu1N,SAAW,CAClB,EACAlB,GAAaj1N,UAAUo2N,QAAU,WAC/B,OAAOx1N,KAAKy1N,KAAK1hN,KAAK,KACxB,EACAsgN,GAAaj1N,UAAUm1N,UAAY,WACjCv0N,KAAKy1N,KAAO,CAAC,IACbz1N,KAAK01N,OAAS,CAChB,EACArB,GAAaj1N,UAAUy9H,QAAU,SAAUwxF,GASzC,IARIruN,KAAKy1N,KAAKp3N,QAAU2B,KAAKq1N,iBAAqD,oBAA3Br1N,KAAK21N,mBAC1D31N,KAAK21N,kBAAkBtH,GAErBruN,KAAKy1N,KAAKp3N,OAAS,IACrB2B,KAAKy1N,KAAKt8N,KAAK,IACf6G,KAAK01N,UAGA11N,KAAKy1N,KAAKp3N,OAAS2B,KAAKq1N,iBAC7Br1N,KAAKy1N,KAAKz8H,QACVh5F,KAAK01N,QAET,EACArB,GAAaj1N,UAAUpB,QAAU,WAC/B,OAAyB,IAArBgC,KAAKy1N,KAAKp3N,QAEkB,IAArB2B,KAAKy1N,KAAKp3N,QACK,KAAjB2B,KAAKy1N,KAAK,EAGrB,EACApB,GAAaj1N,UAAUw2N,QAAU,SAAU98M,GACzC9Y,KAAKy1N,KAAKz1N,KAAK01N,SAAW58M,CAC5B,EACAu7M,GAAaj1N,UAAUy2N,UAAY,WACjC,IAAK71N,KAAKhC,UAAW,CACnB,IAAIpF,EAAMoH,KAAKy1N,KAAKz1N,KAAK01N,QACzB11N,KAAKy1N,KAAKz1N,KAAK01N,QAAU98N,EAAI0N,OAAO,EAAG1N,EAAIyF,OAAS,EACtD,CACF,EACA,IAAIy3N,GAAgB,SAAUC,EAAYC,EAAUpM,GAClD5pN,KAAK+1N,WAAaA,EAClB/1N,KAAK8Y,KAAO,GACZ9Y,KAAKi2N,cAAgB,IAAI5B,IAAc,GACvCr0N,KAAKk2N,QAAU,GACfl2N,KAAK4pN,OAASA,EAEU,kBAAboM,GACTh2N,KAAKm2N,kBAAkBH,EAE3B,EASAF,GAAc12N,UAAUooN,KAAO,SAAU6G,EAAKsH,GAC5C31N,KAAKo2N,SAAW/H,EAChB,IAAK,IAAI3sI,EAAM,EAAGA,EAAM,EAAGA,IACzB1hF,KAAKk2N,QAAQx0I,GAAO,IAAI2yI,GAAa3yI,GACJ,oBAAtBi0I,IACT31N,KAAKk2N,QAAQx0I,GAAKi0I,kBAAoBA,EAG5C,EAOAG,GAAc12N,UAAUi3N,iBAAmB,SAAU/B,GACnDt0N,KAAKi2N,cAAgBj2N,KAAKk2N,QAAQ5B,EACpC,EAKAwB,GAAc12N,UAAU+2N,kBAAoB,SAAUH,GACpD,GAA2B,qBAAhBn/N,YACTmJ,KAAK4pN,OAAO1uF,QAAQ,MAAO,CACzBumB,MAAO,OACPpzI,QAAS,0EAGX,IACErO,KAAKs2N,aAAe,IAAIz/N,YAAYm/N,EACtC,CAAE,MAAO/tN,GACPjI,KAAK4pN,OAAO1uF,QAAQ,MAAO,CACzBumB,MAAO,OACPpzI,QAAS,yCAA2C2nN,EAAW,cAAgB/tN,GAEnF,CAEJ,EACA,IAAI+qN,GAAe,SAAU15N,GAC3BA,EAAUA,GAAW,CAAC,EACtB05N,GAAa5zN,UAAUooN,KAAK3oN,KAAKmB,MACjC,IAGIu2N,EAHA50I,EAAO3hF,KACP2xI,EAAkBr4I,EAAQq4I,iBAAmB,CAAC,EAC9C6kF,EAA0B,CAAC,EAG/Br3N,OAAO0M,KAAK8lI,GAAiBh5I,SAAQ89N,IACnCF,EAAe5kF,EAAgB8kF,GAC3B,WAAWh3N,KAAKg3N,KAClBD,EAAwBC,GAAeF,EAAaP,SACtD,IAEFh2N,KAAK02N,iBAAmBF,EACxBx2N,KAAK22N,iBAAmB,KACxB32N,KAAK42N,SAAW,CAAC,EACjB52N,KAAK7G,KAAO,SAAUw6N,GACA,IAAhBA,EAAOt8N,MAETsqF,EAAKk1I,eACLl1I,EAAKm1I,YAAYnD,KAEa,OAA1BhyI,EAAKg1I,kBAEPh1I,EAAKk1I,eAEPl1I,EAAKm1I,YAAYnD,GAErB,CACF,EACAX,GAAa5zN,UAAY,IAAImzN,GAK7BS,GAAa5zN,UAAUy3N,aAAe,WACN,OAA1B72N,KAAK22N,kBACP32N,KAAK+2N,gBAEP/2N,KAAK22N,iBAAmB,CACtBh6N,KAAM,GACNq6N,QAAS,GAEb,EAKAhE,GAAa5zN,UAAU03N,YAAc,SAAUnD,GAC7C,IAAIh3N,EAAOg3N,EAAOvB,OACd6E,EAAQt6N,IAAS,EACjBu6N,EAAe,IAAPv6N,EAGZqD,KAAK22N,iBAAiBK,QAAQ79N,KAAKw6N,EAAOtF,KAC1CruN,KAAK22N,iBAAiBh6N,KAAKxD,KAAK89N,GAChCj3N,KAAK22N,iBAAiBh6N,KAAKxD,KAAK+9N,EAClC,EAKAlE,GAAa5zN,UAAU23N,cAAgB,WACrC,IAAII,EAAYn3N,KAAK22N,iBACjBS,EAAaD,EAAUx6N,KACvBo5N,EAAa,KACbsB,EAAY,KACZt5N,EAAI,EACJ2oF,EAAI0wI,EAAWr5N,KAInB,IAHAo5N,EAAUG,IAAM5wI,GAAK,EACrBywI,EAAUI,SAAe,GAAJ7wI,EAEd3oF,EAAIq5N,EAAW/4N,OAAQN,IAG5Bs5N,EAAgB,IAFhB3wI,EAAI0wI,EAAWr5N,MAII,KAHnBg4N,EAAarvI,GAAK,IAGM2wI,EAAY,IAGlCtB,EADArvI,EAAI0wI,EAAWr5N,MAGjBiC,KAAKw3N,iBAAiBzB,EAAYh4N,EAAGs5N,GACjCA,EAAY,IACdt5N,GAAKs5N,EAAY,EAGvB,EAcArE,GAAa5zN,UAAUo4N,iBAAmB,SAAUzB,EAAY1vN,EAAOjF,GACrE,IAAIslF,EACA3oF,EAAIsI,EACJ+wN,EAAap3N,KAAK22N,iBAAiBh6N,KACnCy2I,EAAUpzI,KAAK42N,SAASb,GAI5B,IAHK3iF,IACHA,EAAUpzI,KAAKy3N,YAAY1B,EAAYh4N,IAElCA,EAAIsI,EAAQjF,GAAQrD,EAAIq5N,EAAW/4N,OAAQN,IAChD2oF,EAAI0wI,EAAWr5N,GACXq2N,GAAmB1tI,GACrB3oF,EAAIiC,KAAK03N,WAAW35N,EAAGq1I,GACR,KAAN1sD,EACT3oF,EAAIiC,KAAK23N,mBAAmB55N,EAAGq1I,GAChB,KAAN1sD,EACT3oF,EAAIiC,KAAK43N,iBAAiB75N,EAAGq1I,GACpB,KAAQ1sD,GAAKA,GAAK,IAC3B3oF,EAAIiC,KAAKq2N,iBAAiBt4N,EAAGq1I,GACpB,KAAQ1sD,GAAKA,GAAK,IAC3B3oF,EAAIiC,KAAK63N,aAAa95N,EAAGq1I,GACV,MAAN1sD,EACT3oF,EAAIiC,KAAK83N,aAAa/5N,EAAGq1I,GACV,MAAN1sD,EACT3oF,EAAIiC,KAAK+3N,cAAch6N,EAAGq1I,GACX,MAAN1sD,EACT3oF,EAAIiC,KAAKg4N,eAAej6N,EAAGq1I,GACZ,MAAN1sD,EACT3oF,EAAIiC,KAAKi4N,YAAYl6N,EAAGq1I,GACT,MAAN1sD,EACT3oF,EAAIiC,KAAKk4N,cAAcn6N,EAAGq1I,GACX,MAAN1sD,EACT3oF,EAAIiC,KAAKm4N,oBAAoBp6N,EAAGq1I,GACjB,MAAN1sD,EACT3oF,EAAIiC,KAAKo4N,iBAAiBr6N,EAAGq1I,GACd,MAAN1sD,EACT3oF,EAAIiC,KAAKq4N,YAAYt6N,EAAGq1I,GACT,MAAN1sD,EACT3oF,EAAIiC,KAAKs4N,eAAev6N,EAAGq1I,GACZ,MAAN1sD,EACT0sD,EAAUpzI,KAAKO,MAAMxC,EAAGq1I,GACT,IAAN1sD,EAET0sD,EAAQ6iF,cAAcJ,YACP,KAANnvI,EAET0sD,EAAQ6iF,cAAc1B,YACP,KAAN7tI,EAET0sD,EAAQ6iF,cAAczB,gBAAiB,EACxB,KAAN9tI,EAET0sD,EAAQ6iF,cAAc1B,YACP,MAAN7tI,GAET3oF,GAGN,EASAi1N,GAAa5zN,UAAUw4N,iBAAmB,SAAU75N,EAAGq1I,GACrD,IACI1sD,EADa1mF,KAAK22N,iBAAiBh6N,OAClBoB,GAMrB,OALIq2N,GAAmB1tI,KACrB3oF,EAAIiC,KAAK03N,WAAW35N,EAAGq1I,EAAS,CAC9BmlF,YAAY,KAGTx6N,CACT,EAQAi1N,GAAa5zN,UAAUo5N,OAAS,SAAUlvF,GAExC,OAAOtpI,KAAK22N,iBAAiBK,QAAQ1zN,KAAK80H,MAAMkR,EAAY,GAC9D,EAQA0pF,GAAa5zN,UAAUq4N,YAAc,SAAU1B,EAAYh4N,GACzD,IAEI04N,EACAT,EAFAr0I,EAAO3hF,KAUX,OAXIy2N,EAAc,UAAYV,KAIX/1N,KAAK02N,mBACtBV,EAAWh2N,KAAK02N,iBAAiBD,IAEnCz2N,KAAK42N,SAASb,GAAc,IAAID,GAAcC,EAAYC,EAAUr0I,GACpE3hF,KAAK42N,SAASb,GAAYvO,KAAKxnN,KAAKw4N,OAAOz6N,IAAI,SAAUswN,GACvD1sI,EAAK82I,eAAepK,EAAK1sI,EAAKi1I,SAASb,GACzC,IACO/1N,KAAK42N,SAASb,EACvB,EASA/C,GAAa5zN,UAAUs4N,WAAa,SAAU35N,EAAGq1I,EAAS95I,GACxD,IAOIgwG,EACAovH,EARAH,EAAaj/N,GAAWA,EAAQi/N,WAChCI,EAAcr/N,GAAWA,EAAQq/N,YACjCvB,EAAap3N,KAAK22N,iBAAiBh6N,KACnCi8N,EAAWL,EAAa,KAAS,EACjCM,EAAczB,EAAWr5N,GACzB+6N,EAAW1B,EAAWr5N,EAAI,GAC1B2jF,EAAM0xD,EAAQ6iF,cAgBlB,GAPI0C,GACFD,EAAgB,CAACG,EAAaC,GAC9B/6N,KAEA26N,EAAgB,CAACG,GAGfzlF,EAAQkjF,eAAiBiC,EAC3BjvH,EAAO8pC,EAAQkjF,aAAa5+N,OAAO,IAAIK,WAAW2gO,SAGlD,GAAIC,EAAa,CACf,MAAMI,EAAsBL,EAhBbriN,KAAIyyH,IACX,KAAc,IAAPA,GAAazpI,SAAS,KAAKrG,OAAO,KAChD+a,KAAK,IAgBNu1F,EAAO1xG,OAAOC,aAAayoF,SAASy4I,EAAS,IAC/C,MACEzvH,EAhYmB,SAAU3rG,GACjC,IAAIq7N,EAAU7E,GAA0Bx2N,IAASA,EACjD,OAAW,KAAPA,GAAiBA,IAASq7N,EAErB,GAEFphO,OAAOC,aAAamhO,EAC7B,CAyXaC,CAAmBL,EAAWC,GAQzC,OALIn3I,EAAI8yI,iBAAmB9yI,EAAI1jF,WAC7B0jF,EAAIm7C,QAAQ78H,KAAKw4N,OAAOz6N,IAE1B2jF,EAAI8yI,gBAAiB,EACrB9yI,EAAIk0I,QAAQtsH,GACLvrG,CACT,EASAi1N,GAAa5zN,UAAUu4N,mBAAqB,SAAU55N,EAAGq1I,GACvD,IAAIgkF,EAAap3N,KAAK22N,iBAAiBh6N,KACnCu8N,EAAY9B,EAAWr5N,EAAI,GAC3Bo7N,EAAa/B,EAAWr5N,EAAI,GAMhC,OALIq2N,GAAmB8E,IAAc9E,GAAmB+E,KACtDp7N,EAAIiC,KAAK03N,aAAa35N,EAAGq1I,EAAS,CAChCulF,aAAa,KAGV56N,CACT,EAWAi1N,GAAa5zN,UAAUi3N,iBAAmB,SAAUt4N,EAAGq1I,GACrD,IAEIkhF,EAAgB,EAFHt0N,KAAK22N,iBAAiBh6N,KACpBoB,GAGnB,OADAq1I,EAAQijF,iBAAiB/B,GAClBv2N,CACT,EAWAi1N,GAAa5zN,UAAUy4N,aAAe,SAAU95N,EAAGq1I,GACjD,IAAIgkF,EAAap3N,KAAK22N,iBAAiBh6N,KACnC+pF,EAAI0wI,EAAWr5N,GACfu2N,EAAgB,EAAJ5tI,EAChB0sD,EAAQijF,iBAAiB/B,GACzB,IAAI5yI,EAAM0xD,EAAQ6iF,cAiClB,OAhCAvvI,EAAI0wI,IAAar5N,GACjB2jF,EAAImzI,SAAe,GAAJnuI,IAAa,EAE5BhF,EAAIozI,SAAe,GAAJpuI,IAAa,EAE5BhF,EAAIqzI,YAAkB,EAAJruI,IAAa,EAE/BhF,EAAIgX,SAAe,EAAJhS,EAEfA,EAAI0wI,IAAar5N,GACjB2jF,EAAIszI,qBAA2B,IAAJtuI,IAAa,EAExChF,EAAIuzI,eAAqB,IAAJvuI,EAErBA,EAAI0wI,IAAar5N,GACjB2jF,EAAIwzI,iBAAmBxuI,EAEvBA,EAAI0wI,IAAar5N,GACjB2jF,EAAIyzI,aAAmB,IAAJzuI,IAAa,EAEhChF,EAAI0zI,SAAe,GAAJ1uI,EAEfA,EAAI0wI,IAAar5N,GACjB2jF,EAAI4M,YAAkB,GAAJ5H,EAElBA,EAAI0wI,IAAar5N,GACjB2jF,EAAI4zI,aAAmB,GAAJ5uI,IAAa,EAEhChF,EAAI6zI,SAAe,EAAJ7uI,EAGfhF,EAAI2zI,gBAAkB3zI,EAAI0zI,SAAW,EAC9Br3N,CACT,EAWAi1N,GAAa5zN,UAAU+4N,oBAAsB,SAAUp6N,EAAGq1I,GACxD,IAAIgkF,EAAap3N,KAAK22N,iBAAiBh6N,KACnC+pF,EAAI0wI,EAAWr5N,GACf02N,EAAUrhF,EAAQ6iF,cAAcxB,QAqCpC,OApCA/tI,EAAI0wI,IAAar5N,GACjB02N,EAAQzkI,aAAmB,IAAJtJ,IAAa,EAEpC+tI,EAAQ2E,SAAe,GAAJ1yI,IAAa,EAEhC+tI,EAAQ4E,WAAiB,GAAJ3yI,IAAa,EAElC+tI,EAAQ6E,SAAe,EAAJ5yI,EAEnBA,EAAI0wI,IAAar5N,GACjB02N,EAAQ8E,YAAkB,IAAJ7yI,IAAa,EAEnC+tI,EAAQ+E,WAAiB,GAAJ9yI,IAAa,EAElC+tI,EAAQgF,aAAmB,GAAJ/yI,IAAa,EAEpC+tI,EAAQiF,WAAiB,EAAJhzI,EAErBA,EAAI0wI,IAAar5N,GACjB02N,EAAQ8E,aAAmB,IAAJ7yI,IAAa,EAEpC+tI,EAAQkF,UAAgB,GAAJjzI,IAAa,EAEjC+tI,EAAQmF,gBAAsB,GAAJlzI,IAAa,EAEvC+tI,EAAQoF,iBAAuB,GAAJnzI,IAAa,EAExC+tI,EAAQqF,QAAc,EAAJpzI,EAElBA,EAAI0wI,IAAar5N,GACjB02N,EAAQsF,aAAmB,IAAJrzI,IAAa,EAEpC+tI,EAAQuF,iBAAuB,GAAJtzI,IAAa,EAExC+tI,EAAQwF,cAAoB,EAAJvzI,EAEjB3oF,CACT,EAQAi1N,GAAa5zN,UAAUq5N,eAAiB,SAAUpK,EAAKj7E,GAIrD,IAHA,IAAI8mF,EAAgB,GAGXC,EAAQ,EAAGA,EAAQ,EAAGA,IACzB/mF,EAAQ8iF,QAAQiE,GAAOtF,UAAYzhF,EAAQ8iF,QAAQiE,GAAOn8N,WAC5Dk8N,EAAc/gO,KAAKi6I,EAAQ8iF,QAAQiE,GAAO3E,WAG9CpiF,EAAQgnF,OAAS/L,EACjBj7E,EAAQt6H,KAAOohN,EAAcnmN,KAAK,QAClC/T,KAAKq6N,YAAYjnF,GACjBA,EAAQgjF,SAAW/H,CACrB,EAOA2E,GAAa5zN,UAAUi7N,YAAc,SAAUjnF,GACxB,KAAjBA,EAAQt6H,OACV9Y,KAAKk7H,QAAQ,OAAQ,CACnBk7F,SAAUhjF,EAAQgjF,SAClBgE,OAAQhnF,EAAQgnF,OAChBthN,KAAMs6H,EAAQt6H,KACd8wM,OAAQ,SAAWx2E,EAAQ2iF,aAE7B3iF,EAAQt6H,KAAO,GACfs6H,EAAQgjF,SAAWhjF,EAAQgnF,OAE/B,EAWApH,GAAa5zN,UAAU44N,eAAiB,SAAUj6N,EAAGq1I,GACnD,IACI1sD,EADa1mF,KAAK22N,iBAAiBh6N,OAClBoB,GACjBswN,EAAMruN,KAAKw4N,OAAOz6N,GACtBiC,KAAKy4N,eAAepK,EAAKj7E,GACzB,IAAK,IAAI+mF,EAAQ,EAAGA,EAAQ,EAAGA,IACzBzzI,EAAI,GAAQyzI,IACd/mF,EAAQ8iF,QAAQiE,GAAOtF,QAAU,GAGrC,OAAO92N,CACT,EAWAi1N,GAAa5zN,UAAU64N,YAAc,SAAUl6N,EAAGq1I,GAChD,IACI1sD,EADa1mF,KAAK22N,iBAAiBh6N,OAClBoB,GACjBswN,EAAMruN,KAAKw4N,OAAOz6N,GACtBiC,KAAKy4N,eAAepK,EAAKj7E,GACzB,IAAK,IAAI+mF,EAAQ,EAAGA,EAAQ,EAAGA,IACzBzzI,EAAI,GAAQyzI,IACd/mF,EAAQ8iF,QAAQiE,GAAOtF,QAAU,GAGrC,OAAO92N,CACT,EAWAi1N,GAAa5zN,UAAU84N,cAAgB,SAAUn6N,EAAGq1I,GAClD,IACI1sD,EADa1mF,KAAK22N,iBAAiBh6N,OAClBoB,GACjBswN,EAAMruN,KAAKw4N,OAAOz6N,GACtBiC,KAAKy4N,eAAepK,EAAKj7E,GACzB,IAAK,IAAI+mF,EAAQ,EAAGA,EAAQ,EAAGA,IACzBzzI,EAAI,GAAQyzI,IACd/mF,EAAQ8iF,QAAQiE,GAAOtF,SAAW,GAGtC,OAAO92N,CACT,EAWAi1N,GAAa5zN,UAAU04N,aAAe,SAAU/5N,EAAGq1I,GACjD,IACI1sD,EADa1mF,KAAK22N,iBAAiBh6N,OAClBoB,GACjBswN,EAAMruN,KAAKw4N,OAAOz6N,GACtBiC,KAAKy4N,eAAepK,EAAKj7E,GACzB,IAAK,IAAI+mF,EAAQ,EAAGA,EAAQ,EAAGA,IACzBzzI,EAAI,GAAQyzI,GACd/mF,EAAQ8iF,QAAQiE,GAAO5F,YAG3B,OAAOx2N,CACT,EAWAi1N,GAAa5zN,UAAU24N,cAAgB,SAAUh6N,EAAGq1I,GAClD,IACI1sD,EADa1mF,KAAK22N,iBAAiBh6N,OAClBoB,GACjBswN,EAAMruN,KAAKw4N,OAAOz6N,GACtBiC,KAAKy4N,eAAepK,EAAKj7E,GACzB,IAAK,IAAI+mF,EAAQ,EAAGA,EAAQ,EAAGA,IACzBzzI,EAAI,GAAQyzI,GACd/mF,EAAQ8iF,QAAQiE,GAAO55N,QAG3B,OAAOxC,CACT,EAWAi1N,GAAa5zN,UAAUg5N,iBAAmB,SAAUr6N,EAAGq1I,GACrD,IAAIgkF,EAAap3N,KAAK22N,iBAAiBh6N,KACnC+pF,EAAI0wI,EAAWr5N,GACf22N,EAAUthF,EAAQ6iF,cAAcvB,QAiBpC,OAhBAhuI,EAAI0wI,IAAar5N,GACjB22N,EAAQ4F,SAAe,IAAJ5zI,IAAa,EAEhCguI,EAAQ/7M,QAAc,GAAJ+tE,IAAa,EAE/BguI,EAAQ6F,QAAc,EAAJ7zI,EAElBA,EAAI0wI,IAAar5N,GACjB22N,EAAQ8F,SAAe,IAAJ9zI,IAAa,EAEhCguI,EAAQ+F,WAAiB,GAAJ/zI,IAAa,EAElCguI,EAAQgG,UAAgB,GAAJh0I,IAAa,EAEjCguI,EAAQiG,UAAgB,EAAJj0I,EAEb3oF,CACT,EAWAi1N,GAAa5zN,UAAUi5N,YAAc,SAAUt6N,EAAGq1I,GAChD,IAAIgkF,EAAap3N,KAAK22N,iBAAiBh6N,KACnC+pF,EAAI0wI,EAAWr5N,GACf62N,EAAWxhF,EAAQ6iF,cAAcrB,SA0BrC,OAzBAluI,EAAI0wI,IAAar5N,GACjB62N,EAASgG,WAAiB,IAAJl0I,IAAa,EAEnCkuI,EAASiG,OAAa,GAAJn0I,IAAa,EAE/BkuI,EAASkG,SAAe,GAAJp0I,IAAa,EAEjCkuI,EAASmG,OAAa,EAAJr0I,EAElBA,EAAI0wI,IAAar5N,GACjB62N,EAASoG,WAAiB,IAAJt0I,IAAa,EAEnCkuI,EAASqG,OAAa,GAAJv0I,IAAa,EAE/BkuI,EAASsG,SAAe,GAAJx0I,IAAa,EAEjCkuI,EAASuG,OAAa,EAAJz0I,EAElBA,EAAI0wI,IAAar5N,GACjB62N,EAASwG,SAAe,GAAJ10I,IAAa,EAEjCkuI,EAASyG,WAAiB,GAAJ30I,IAAa,EAEnCkuI,EAAS0G,SAAe,EAAJ50I,EAEb3oF,CACT,EAWAi1N,GAAa5zN,UAAUk5N,eAAiB,SAAUv6N,EAAGq1I,GACnD,IAAIgkF,EAAap3N,KAAK22N,iBAAiBh6N,KACnC+pF,EAAI0wI,EAAWr5N,GACf42N,EAASvhF,EAAQ6iF,cAActB,OASnC,OAPAvhF,EAAQ6iF,cAAczB,gBAAiB,EACvC9tI,EAAI0wI,IAAar5N,GACjB42N,EAAO/7N,IAAU,GAAJ8tF,EAEbA,EAAI0wI,IAAar5N,GACjB42N,EAAO4G,OAAa,GAAJ70I,EAET3oF,CACT,EAWAi1N,GAAa5zN,UAAUmB,MAAQ,SAAUxC,EAAGq1I,GAC1C,IAAIi7E,EAAMruN,KAAKw4N,OAAOz6N,GAEtB,OADAiC,KAAKy4N,eAAepK,EAAKj7E,GAClBpzI,KAAKy3N,YAAYrkF,EAAQ2iF,WAAYh4N,EAC9C,EAQA,IAAIy9N,GAAwB,CAC1B,GAAM,IAEN,GAAM,IAEN,GAAM,IAEN,GAAM,IAEN,GAAM,IAEN,IAAM,IAEN,IAAM,IAEN,IAAM,IAEN,IAAM,IAEN,IAAM,KAEN,IAAQ,IAER,IAAQ,IAER,IAAQ,IAER,IAAQ,IAER,IAAQ,KAER,IAAQ,IAER,IAAQ,IAER,IAAQ,KAER,IAAQ,IAER,IAAQ,IAER,IAAQ,IAER,IAAQ,IAER,IAAQ,IAER,IAAQ,IAER,IAAQ,IAER,IAAQ,IAER,IAAQ,IAER,IAAQ,IAER,IAAQ,IAER,IAAQ,IAER,IAAQ,IAER,IAAQ,IAER,IAAQ,KAER,IAAQ,IAER,IAAQ,GAER,IAAQ,GAER,IAAQ,KAER,IAAQ,IAER,IAAQ,KAER,IAAQ,KAER,IAAQ,KAER,IAAQ,KAER,IAAQ,IAER,IAAQ,IAER,IAAQ,IAER,IAAQ,IAER,IAAQ,IAER,IAAQ,IAER,IAAQ,IAER,IAAQ,IAER,IAAQ,IAER,IAAQ,IAER,IAAQ,IAER,IAAQ,IAER,IAAQ,IAER,IAAQ,IAER,IAAQ,IAER,IAAQ,IAER,IAAQ,IAER,IAAQ,IAER,IAAQ,IAER,IAAQ,IAER,IAAQ,IAER,IAAQ,IAER,IAAQ,IAER,IAAQ,IAER,IAAQ,IAER,IAAQ,IAER,IAAQ,IAER,IAAQ,GAER,IAAQ,GAER,IAAQ,GAER,IAAQ,IAER,IAAQ,IAER,IAAQ,IAER,IAAQ,IAER,IAAQ,IAER,IAAQ,IAER,IAAQ,IAER,IAAQ,IAER,IAAQ,IAER,IAAQ,KAER,IAAQ,IAER,IAAQ,IAER,IAAQ,IAER,IAAQ,IAER,IAAQ,KAER,IAAQ,KAER,IAAQ,KAER,IAAQ,MAENC,GAAkB,SAAU99N,GAC9B,OAAa,OAATA,EACK,IAETA,EAAO69N,GAAsB79N,IAASA,EAC/B/F,OAAOC,aAAa8F,GAC7B,EAKI+9N,GAAO,CAAC,KAAQ,KAAQ,KAAQ,KAAQ,KAAQ,KAAQ,KAAQ,KAAQ,KAAQ,KAAQ,KAAQ,KAAQ,KAAQ,KAAQ,MAKxHC,GAAsB,WAGxB,IAFA,IAAIjjO,EAAS,GACXqF,EAAI69N,GACC79N,KACLrF,EAAOS,KAAK,CACV2f,KAAM,GACN+iN,OAAQ,EACRljN,OAAQ,IAGZ,OAAOjgB,CACT,EACIo6N,GAAe,SAAUgJ,EAAOC,GAClCjJ,GAAa1zN,UAAUooN,KAAK3oN,KAAKmB,MACjCA,KAAKg8N,OAASF,GAAS,EACvB97N,KAAKi8N,aAAeF,GAAe,EACnC/7N,KAAKquJ,MAAQ,MAAiD,GAAxCruJ,KAAKg8N,QAAU,EAAIh8N,KAAKi8N,eAC9Cj8N,KAAKk8N,eACLl8N,KAAKO,QACLP,KAAK7G,KAAO,SAAUw6N,GACpB,IAAIh3N,EAAMw/N,EAAMC,EAAOC,EAAOvjN,EAI9B,IAFAnc,EAAuB,MAAhBg3N,EAAOvB,UAEDpyN,KAAKs8N,kBAYlB,GAPwB,QAAZ,MAAP3/N,GACHqD,KAAKs8N,iBAAmB3/N,EACfA,IAASqD,KAAKu8N,WACvBv8N,KAAKs8N,iBAAmB,MAE1BF,EAAQz/N,IAAS,EACjB0/N,EAAe,IAAP1/N,EACJA,IAASqD,KAAKu8N,SAEX,GAAI5/N,IAASqD,KAAKw8N,wBACvBx8N,KAAKy8N,MAAQ,aACR,GAAI9/N,IAASqD,KAAK08N,gBAKvB18N,KAAKy8N,MAAQ,QACbz8N,KAAK28N,gBAAgBhJ,EAAOtF,KAE5BruN,KAAKy4N,eAAe9E,EAAOtF,KAE3B8N,EAAOn8N,KAAK48N,WACZ58N,KAAK48N,WAAa58N,KAAK68N,cACvB78N,KAAK68N,cAAgBV,EAErBn8N,KAAK88N,UAAYnJ,EAAOtF,SACnB,GAAI1xN,IAASqD,KAAK+8N,gBACvB/8N,KAAKg9N,YAAc,EACnBh9N,KAAKi9N,UAAUtJ,EAAOtF,UACjB,GAAI1xN,IAASqD,KAAKk9N,gBACvBl9N,KAAKg9N,YAAc,EACnBh9N,KAAKi9N,UAAUtJ,EAAOtF,UACjB,GAAI1xN,IAASqD,KAAKm9N,gBACvBn9N,KAAKg9N,YAAc,EACnBh9N,KAAKi9N,UAAUtJ,EAAOtF,UACjB,GAAI1xN,IAASqD,KAAKo9N,iBACvBp9N,KAAK28N,gBAAgBhJ,EAAOtF,KAC5BruN,KAAKy4N,eAAe9E,EAAOtF,KAC3BruN,KAAKq9N,eACLr9N,KAAK88N,UAAYnJ,EAAOtF,SACnB,GAAI1xN,IAASqD,KAAKs9N,WACJ,UAAft9N,KAAKy8N,MACPz8N,KAAK68N,cAAc78N,KAAKu9N,MAAMzkN,KAAO9Y,KAAK68N,cAAc78N,KAAKu9N,MAAMzkN,KAAK9f,MAAM,GAAI,GAElFgH,KAAK48N,WAAW58N,KAAKu9N,MAAMzkN,KAAO9Y,KAAK48N,WAAW58N,KAAKu9N,MAAMzkN,KAAK9f,MAAM,GAAI,QAEzE,GAAI2D,IAASqD,KAAKw9N,wBACvBx9N,KAAKy4N,eAAe9E,EAAOtF,KAC3BruN,KAAK48N,WAAajB,UACb,GAAIh/N,IAASqD,KAAKy9N,4BACvBz9N,KAAK68N,cAAgBlB,UAChB,GAAIh/N,IAASqD,KAAK09N,0BACJ,YAAf19N,KAAKy8N,QAGPz8N,KAAKy4N,eAAe9E,EAAOtF,KAC3BruN,KAAK48N,WAAajB,MAEpB37N,KAAKy8N,MAAQ,UACbz8N,KAAK88N,UAAYnJ,EAAOtF,SACnB,GAAIruN,KAAK29N,mBAAmBvB,EAAOC,GAMxCvjN,EAAO2iN,IADPW,GAAiB,EAARA,IAAiB,GACKC,GAC/Br8N,KAAKA,KAAKy8N,OAAO9I,EAAOtF,IAAKv1M,GAC7B9Y,KAAK49N,eACA,GAAI59N,KAAK69N,eAAezB,EAAOC,GAMjB,UAAfr8N,KAAKy8N,MACPz8N,KAAK68N,cAAc78N,KAAKu9N,MAAMzkN,KAAO9Y,KAAK68N,cAAc78N,KAAKu9N,MAAMzkN,KAAK9f,MAAM,GAAI,GAElFgH,KAAK48N,WAAW58N,KAAKu9N,MAAMzkN,KAAO9Y,KAAK48N,WAAW58N,KAAKu9N,MAAMzkN,KAAK9f,MAAM,GAAI,GAO9E8f,EAAO2iN,IADPW,GAAiB,EAARA,IAAiB,GACKC,GAC/Br8N,KAAKA,KAAKy8N,OAAO9I,EAAOtF,IAAKv1M,GAC7B9Y,KAAK49N,eACA,GAAI59N,KAAK89N,aAAa1B,EAAOC,GAElCr8N,KAAK28N,gBAAgBhJ,EAAOtF,KAG5BruN,KAAKA,KAAKy8N,OAAO9I,EAAOtF,IAAK,KAC7BruN,KAAK49N,UACiB,MAAT,GAARvB,IACHr8N,KAAK+9N,cAAcpK,EAAOtF,IAAK,CAAC,MAEZ,KAAT,EAARgO,IACHr8N,KAAK+9N,cAAcpK,EAAOtF,IAAK,CAAC,WAE7B,GAAIruN,KAAKg+N,oBAAoB5B,EAAOC,GAAQ,CAKjD,MAAM1jN,EAAiB,EAAR0jN,EAGfr8N,KAAK68N,cAAc78N,KAAKu9N,MAAM5kN,OAASA,EACvC3Y,KAAK49N,SAAWjlN,CAClB,MAAO,GAAI3Y,KAAKi+N,MAAM7B,EAAOC,GAAQ,CAGnC,IAAIzjO,EAAM8iO,GAAK5iO,QAAe,KAAP6D,GAuBvB,GArBmB,WAAfqD,KAAKy8N,QAIH7jO,EAAMoH,KAAKg9N,YAAc,EAAI,IAC/BpkO,EAAMoH,KAAKg9N,YAAc,GAE3Bh9N,KAAKi9N,UAAUtJ,EAAOtF,IAAKz1N,IAIzBA,IAAQoH,KAAKu9N,MAAQ3kO,GAAO,GAAKA,GAAO,KAE1CoH,KAAK28N,gBAAgBhJ,EAAOtF,KAC5BruN,KAAKu9N,KAAO3kO,GAIF,EAARyjO,IAAkD,IAAnCr8N,KAAKk+N,YAAYplO,QAAQ,MAC1CkH,KAAK+9N,cAAcpK,EAAOtF,IAAK,CAAC,MAEZ,MAAV,GAAP1xN,GAAuB,CAK1B,MAAMwhO,GAAuB,GAAPxhO,IAAe,EACrCqD,KAAK49N,QAAyB,EAAfO,EAEfn+N,KAAK68N,cAAc78N,KAAKu9N,MAAM1B,QAAUsC,CAC1C,CACIn+N,KAAKo+N,WAAW/B,IAKI,MAAT,GAARA,IACHr8N,KAAK+9N,cAAcpK,EAAOtF,IAAK,CAAC,KAGtC,MAAWruN,KAAKq+N,aAAajC,KACb,IAAVC,IACFA,EAAQ,MAEVvjN,EAAO2iN,GAAgBW,GACvBtjN,GAAQ2iN,GAAgBY,GACxBr8N,KAAKA,KAAKy8N,OAAO9I,EAAOtF,IAAKv1M,GAC7B9Y,KAAK49N,SAAW9kN,EAAKza,aAvKrB2B,KAAKs8N,iBAAmB,IAyK5B,CACF,EACAxJ,GAAa1zN,UAAY,IAAImzN,GAG7BO,GAAa1zN,UAAUq5N,eAAiB,SAAUpK,GAChD,MAAMiQ,EAAazlO,IACjBmH,KAAKk7H,QAAQ,MAAO,CAClBumB,MAAO,OACPpzI,QAAS,6CAA+CxV,EAAQ,KAChE,EAEE6tJ,EAAU,GAChB1mJ,KAAK48N,WAAWjkO,SAAQ,CAACC,EAAKmF,KAC5B,GAAInF,GAAOA,EAAIkgB,MAAQlgB,EAAIkgB,KAAKza,OAAQ,CACtC,IAEEzF,EAAIkgB,KAAOlgB,EAAIkgB,KAAKvhB,MACtB,CAAE,MAAOI,GAIP2mO,EAAWvgO,EACb,CAGInF,EAAIkgB,KAAKza,QACXqoJ,EAAQvtJ,KAAK,CAEX2f,KAAMlgB,EAAIkgB,KAEV2jH,KAAM1+H,EAAI,EAIV6H,SAAU,GAAKtC,KAAKyhG,IAAI,GAAiB,GAAbnsG,EAAIijO,QAA4B,IAAbjjO,EAAI+f,QAGzD,WAAmBre,IAAR1B,GAA6B,OAARA,GAC9B0lO,EAAWvgO,EACb,IAEE2oJ,EAAQroJ,QACV2B,KAAKk7H,QAAQ,OAAQ,CACnBk7F,SAAUp2N,KAAK88N,UACf1C,OAAQ/L,EACR3nE,UACAkjE,OAAQ5pN,KAAKquJ,OAGnB,EAKAykE,GAAa1zN,UAAUmB,MAAQ,WAC7BP,KAAKy8N,MAAQ,QAKbz8N,KAAKu+N,QAAU,EACfv+N,KAAK88N,UAAY,EACjB98N,KAAK48N,WAAajB,KAClB37N,KAAK68N,cAAgBlB,KACrB37N,KAAKs8N,iBAAmB,KAExBt8N,KAAK49N,QAAU,EACf59N,KAAKu9N,KA9QU,GA+Qfv9N,KAAKg9N,YAAc,EAEnBh9N,KAAKk+N,YAAc,EACrB,EAKApL,GAAa1zN,UAAU88N,aAAe,WAaV,IAAtBl8N,KAAKi8N,cACPj8N,KAAKw+N,MAAQ,GACbx+N,KAAKy+N,KAAO,GACZz+N,KAAK0+N,UAAY,GAAO1+N,KAAKg8N,SAAW,EACxCh8N,KAAK2+N,QAAU,IACgB,IAAtB3+N,KAAKi8N,eACdj8N,KAAKw+N,MAAQ,GACbx+N,KAAKy+N,KAAO,GACZz+N,KAAK0+N,UAAY,GAAO1+N,KAAKg8N,SAAW,EACxCh8N,KAAK2+N,QAAU,IAMjB3+N,KAAKu8N,SAAW,EAEhBv8N,KAAKw8N,wBAA0C,GAAhBx8N,KAAK0+N,SACpC1+N,KAAK08N,gBAAkC,GAAhB18N,KAAK0+N,SAE5B1+N,KAAK+8N,gBAAkC,GAAhB/8N,KAAK0+N,SAC5B1+N,KAAKk9N,gBAAkC,GAAhBl9N,KAAK0+N,SAC5B1+N,KAAKm9N,gBAAkC,GAAhBn9N,KAAK0+N,SAC5B1+N,KAAKo9N,iBAAmC,GAAhBp9N,KAAK0+N,SAE7B1+N,KAAK09N,0BAA4C,GAAhB19N,KAAK0+N,SAEtC1+N,KAAKs9N,WAA6B,GAAhBt9N,KAAK0+N,SACvB1+N,KAAKw9N,wBAA0C,GAAhBx9N,KAAK0+N,SACpC1+N,KAAKy9N,4BAA8C,GAAhBz9N,KAAK0+N,QAC1C,EAaA5L,GAAa1zN,UAAUu+N,mBAAqB,SAAUvB,EAAOC,GAC3D,OAAOD,IAAUp8N,KAAKy+N,MAAQpC,GAAS,IAAQA,GAAS,EAC1D,EAaAvJ,GAAa1zN,UAAUy+N,eAAiB,SAAUzB,EAAOC,GACvD,OAAQD,IAAUp8N,KAAKy+N,KAAO,GAAKrC,IAAUp8N,KAAKy+N,KAAO,IAAMpC,GAAS,IAAQA,GAAS,EAC3F,EAaAvJ,GAAa1zN,UAAU0+N,aAAe,SAAU1B,EAAOC,GACrD,OAAOD,IAAUp8N,KAAKy+N,MAAQpC,GAAS,IAAQA,GAAS,EAC1D,EAaAvJ,GAAa1zN,UAAU4+N,oBAAsB,SAAU5B,EAAOC,GAC5D,OAAOD,IAAUp8N,KAAK2+N,SAAWtC,GAAS,IAAQA,GAAS,EAC7D,EAaAvJ,GAAa1zN,UAAU6+N,MAAQ,SAAU7B,EAAOC,GAC9C,OAAOD,GAASp8N,KAAKw+N,OAASpC,EAAQp8N,KAAKw+N,MAAQ,GAAKnC,GAAS,IAAQA,GAAS,GACpF,EAWAvJ,GAAa1zN,UAAUg/N,WAAa,SAAU/B,GAC5C,OAAOA,GAAS,IAAQA,GAAS,IAAQA,GAAS,IAAQA,GAAS,GACrE,EAUAvJ,GAAa1zN,UAAUi/N,aAAe,SAAU/0H,GAC9C,OAAOA,GAAQ,IAAQA,GAAQ,GACjC,EASAwpH,GAAa1zN,UAAU69N,UAAY,SAAU5O,EAAKuQ,GAUhD,GARmB,WAAf5+N,KAAKy8N,QACPz8N,KAAKu9N,KAlbQ,GAmbbv9N,KAAKy8N,MAAQ,SAEbz8N,KAAKy4N,eAAepK,GACpBruN,KAAK68N,cAAgBlB,KACrB37N,KAAK48N,WAAajB,WAEDrhO,IAAfskO,GAA4BA,IAAe5+N,KAAKu9N,KAElD,IAAK,IAAIx/N,EAAI,EAAGA,EAAIiC,KAAKg9N,YAAaj/N,IACpCiC,KAAK48N,WAAWgC,EAAa7gO,GAAKiC,KAAK48N,WAAW58N,KAAKu9N,KAAOx/N,GAC9DiC,KAAK48N,WAAW58N,KAAKu9N,KAAOx/N,GAAK,CAC/B+a,KAAM,GACN+iN,OAAQ,EACRljN,OAAQ,QAIKre,IAAfskO,IACFA,EAAa5+N,KAAKu9N,MAEpBv9N,KAAKu+N,QAAUK,EAAa5+N,KAAKg9N,YAAc,CACjD,EAGAlK,GAAa1zN,UAAU2+N,cAAgB,SAAU1P,EAAK5hG,GACpDzsH,KAAKk+N,YAAcl+N,KAAKk+N,YAAYx2H,OAAO+kB,GAC3C,IAAI3zG,EAAO2zG,EAAOv1H,QAAO,SAAU4hB,EAAM2zG,GACvC,OAAO3zG,EAAO,IAAM2zG,EAAS,GAC/B,GAAG,IACHzsH,KAAKA,KAAKy8N,OAAOpO,EAAKv1M,EACxB,EAGAg6M,GAAa1zN,UAAUu9N,gBAAkB,SAAUtO,GACjD,GAAKruN,KAAKk+N,YAAY7/N,OAAtB,CAGA,IAAIya,EAAO9Y,KAAKk+N,YAAY7jG,UAAUnjI,QAAO,SAAU4hB,EAAM2zG,GAC3D,OAAO3zG,EAAO,KAAO2zG,EAAS,GAChC,GAAG,IACHzsH,KAAKk+N,YAAc,GACnBl+N,KAAKA,KAAKy8N,OAAOpO,EAAKv1M,EALtB,CAMF,EAEAg6M,GAAa1zN,UAAUy/N,MAAQ,SAAUxQ,EAAKv1M,GAC5C,IAAIgmN,EAAU9+N,KAAK68N,cAAc78N,KAAKu9N,MAAMzkN,KAE5CgmN,GAAWhmN,EACX9Y,KAAK68N,cAAc78N,KAAKu9N,MAAMzkN,KAAOgmN,CACvC,EACAhM,GAAa1zN,UAAU2/N,OAAS,SAAU1Q,EAAKv1M,GAC7C,IAAIgmN,EAAU9+N,KAAK48N,WAAW58N,KAAKu9N,MAAMzkN,KACzCgmN,GAAWhmN,EACX9Y,KAAK48N,WAAW58N,KAAKu9N,MAAMzkN,KAAOgmN,CACpC,EACAhM,GAAa1zN,UAAUi+N,aAAe,WACpC,IAAIt/N,EAEJ,IAAKA,EAAI,EAAGA,EAAIiC,KAAKu+N,QAASxgO,IAC5BiC,KAAK48N,WAAW7+N,GAAK,CACnB+a,KAAM,GACN+iN,OAAQ,EACRljN,OAAQ,GAGZ,IAAK5a,EAAIiC,KAAKu9N,KAAO,EAAGx/N,EAAI69N,GAAgB79N,IAC1CiC,KAAK48N,WAAW7+N,GAAK,CACnB+a,KAAM,GACN+iN,OAAQ,EACRljN,OAAQ,GAIZ,IAAK5a,EAAIiC,KAAKu+N,QAASxgO,EAAIiC,KAAKu9N,KAAMx/N,IACpCiC,KAAK48N,WAAW7+N,GAAKiC,KAAK48N,WAAW7+N,EAAI,GAG3CiC,KAAK48N,WAAW58N,KAAKu9N,MAAQ,CAC3BzkN,KAAM,GACN+iN,OAAQ,EACRljN,OAAQ,EAEZ,EACAm6M,GAAa1zN,UAAU4/N,QAAU,SAAU3Q,EAAKv1M,GAC9C,IAAIgmN,EAAU9+N,KAAK48N,WAAW58N,KAAKu9N,MAAMzkN,KACzCgmN,GAAWhmN,EACX9Y,KAAK48N,WAAW58N,KAAKu9N,MAAMzkN,KAAOgmN,CACpC,EAEA,IAAIG,GAAgB,CAClBC,cAAezM,GACfK,aAAcA,GACdE,aAAcA,IASZmM,GAAc,CAChBC,iBAAkB,GAClBC,iBAAkB,GAClBC,qBAAsB,IAapBC,GAAW3V,EAGX4V,GAAc,SACdC,GAAmB,SAAUnoO,EAAO21I,GACtC,IAAIgkC,EAAY,EAahB,IAZI35K,EAAQ21I,IAQVgkC,GAAa,GAIR3tK,KAAK0lI,IAAIiE,EAAY31I,GAhBd,YAiBZA,GAlBS,WAkBA25K,EAEX,OAAO35K,CACT,EACIooO,GAA4B,SAAUroO,GACxC,IAAIsoO,EAASC,EACbF,GAA0BtgO,UAAUooN,KAAK3oN,KAAKmB,MAI9CA,KAAK6/N,MAAQxoO,GAAQmoO,GACrBx/N,KAAK7G,KAAO,SAAUwD,GAWF,aAAdA,EAAKtF,KAML2I,KAAK6/N,QAAUL,IAAe7iO,EAAKtF,OAAS2I,KAAK6/N,aAGhCvlO,IAAjBslO,IACFA,EAAejjO,EAAK2xN,KAEtB3xN,EAAK2xN,IAAMmR,GAAiB9iO,EAAK2xN,IAAKsR,GACtCjjO,EAAK0xN,IAAMoR,GAAiB9iO,EAAK0xN,IAAKuR,GACtCD,EAAUhjO,EAAK2xN,IACftuN,KAAKk7H,QAAQ,OAAQv+H,IAdnBqD,KAAKk7H,QAAQ,OAAQv+H,EAezB,EACAqD,KAAKmrH,MAAQ,WACXy0G,EAAeD,EACf3/N,KAAKk7H,QAAQ,OACf,EACAl7H,KAAK2nN,YAAc,WACjB3nN,KAAKmrH,QACLnrH,KAAKk7H,QAAQ,gBACf,EACAl7H,KAAK8iI,cAAgB,WACnB88F,OAAe,EACfD,OAAU,CACZ,EACA3/N,KAAKO,MAAQ,WACXP,KAAK8iI,gBACL9iI,KAAKk7H,QAAQ,QACf,CACF,EACAwkG,GAA0BtgO,UAAY,IAAImgO,GAC1C,IAsPEO,GAtPEC,GAA0B,CAC5BC,wBAAyBN,GACzBO,eAAgBR,IAedS,GAZsBC,CAACD,EAAYz0N,EAAS20N,KAC9C,IAAKF,EACH,OAAQ,EAGV,IADA,IAAIG,EAAeD,EACZC,EAAeH,EAAW7hO,OAAQgiO,IACvC,GAAIH,EAAWG,KAAkB50N,EAC/B,OAAO40N,EAGX,OAAQ,CAAC,EAePC,GAAoBJ,GAGtBK,GAOQ,EAIRC,GAAkB,SAAUn4F,EAAOhiI,EAAOq5E,GACxC,IAAI3hF,EACFrF,EAAS,GACX,IAAKqF,EAAIsI,EAAOtI,EAAI2hF,EAAK3hF,IACvBrF,GAAU,KAAO,KAAO2vI,EAAMtqI,GAAGsB,SAAS,KAAKrG,OAAO,GAExD,OAAON,CACT,EAGA+nO,GAAY,SAAUp4F,EAAOhiI,EAAOq5E,GAClC,OAAO+lD,mBAAmB+6F,GAAgBn4F,EAAOhiI,EAAOq5E,GAC1D,EAGAghJ,GAAkB,SAAUr4F,EAAOhiI,EAAOq5E,GACxC,OAAO+pD,SAAS+2F,GAAgBn4F,EAAOhiI,EAAOq5E,GAChD,EACAihJ,GAAyB,SAAUhkO,GACjC,OAAOA,EAAK,IAAM,GAAKA,EAAK,IAAM,GAAKA,EAAK,IAAM,EAAIA,EAAK,EAC7D,EACAikO,GAAe,CACb,KAAQ,SAAUzS,GAChB,IACE0S,EACAC,EAFE/iO,EAAI,EAIJowN,EAAMxxN,KAAK,KAAO4jO,MAKtBM,EAAmBP,GAAkBnS,EAAMxxN,KAAM,EAAGoB,IAC7B,IAKvBowN,EAAMpnN,SAAW25N,GAAgBvS,EAAMxxN,KAAMoB,EAAG8iO,GAChD9iO,EAAI8iO,EAAmB,EAEvB1S,EAAM4S,YAAc5S,EAAMxxN,KAAKoB,GAC/BA,KACA+iO,EAAsBR,GAAkBnS,EAAMxxN,KAAM,EAAGoB,IAC7B,IAK1BowN,EAAM9wD,YAAcojE,GAAUtS,EAAMxxN,KAAMoB,EAAG+iO,GAC7C/iO,EAAI+iO,EAAsB,EAxBP,WAyBf3S,EAAMpnN,SAERonN,EAAMt0N,IAAM6mO,GAAgBvS,EAAMxxN,KAAMoB,EAAGowN,EAAMxxN,KAAK0B,QAGtD8vN,EAAM6S,YAAc7S,EAAMxxN,KAAK4lF,SAASxkF,EAAGowN,EAAMxxN,KAAK0B,UAE1D,EACA,KAAM,SAAU8vN,GACVA,EAAMxxN,KAAK,KAAO4jO,KAMtBpS,EAAM72N,MAAQmpO,GAAUtS,EAAMxxN,KAAM,EAAGwxN,EAAMxxN,KAAK0B,QAAQkH,QAAQ,OAAQ,IAE1E4oN,EAAMphG,OAASohG,EAAM72N,MAAML,MAAM,MACnC,EACA,KAAQ,SAAUk3N,GAChB,IAAI2S,EACA3S,EAAMxxN,KAAK,KAAO4jO,KAKO,KAD7BO,EAAsBR,GAAkBnS,EAAMxxN,KAAM,EAAG,MAKvDwxN,EAAM9wD,YAAcojE,GAAUtS,EAAMxxN,KAAM,EAAGmkO,GAI7C3S,EAAM72N,MAAQmpO,GAAUtS,EAAMxxN,KAAMmkO,EAAsB,EAAG3S,EAAMxxN,KAAK0B,QAAQkH,QAAQ,OAAQ,IAChG4oN,EAAMxxN,KAAOwxN,EAAM72N,MACrB,EACA,KAAM,SAAU62N,GAGdA,EAAMt0N,IAAM6mO,GAAgBvS,EAAMxxN,KAAM,EAAGwxN,EAAMxxN,KAAK0B,QAAQkH,QAAQ,QAAS,GACjF,EACA,KAAQ,SAAU4oN,GAChB,IAAI2S,EACA3S,EAAMxxN,KAAK,KAAO4jO,KAKO,KAD7BO,EAAsBR,GAAkBnS,EAAMxxN,KAAM,EAAG,MAKvDwxN,EAAM9wD,YAAcojE,GAAUtS,EAAMxxN,KAAM,EAAGmkO,GAI7C3S,EAAMt0N,IAAM6mO,GAAgBvS,EAAMxxN,KAAMmkO,EAAsB,EAAG3S,EAAMxxN,KAAK0B,QAAQkH,QAAQ,QAAS,IACvG,EACA,KAAQ,SAAU4oN,GAChB,IAAIpwN,EACJ,IAAKA,EAAI,EAAGA,EAAIowN,EAAMxxN,KAAK0B,OAAQN,IACjC,GAAsB,IAAlBowN,EAAMxxN,KAAKoB,GAAU,CAEvBowN,EAAM8S,MAAQP,GAAgBvS,EAAMxxN,KAAM,EAAGoB,GAC7C,KACF,CAEFowN,EAAM+S,YAAc/S,EAAMxxN,KAAK4lF,SAASxkF,EAAI,GAC5CowN,EAAMxxN,KAAOwxN,EAAM+S,WACrB,GA8DAC,GAAW,CACbC,eA7DqB,SAAUzkO,GAC/B,IAAI0kO,EAEFC,EAAa,GACbC,EAAU,EACVhc,EAAS,GAGX,KAAI5oN,EAAK0B,OAAS,IAAM1B,EAAK,KAAO,IAAIuT,WAAW,IAAMvT,EAAK,KAAO,IAAIuT,WAAW,IAAMvT,EAAK,KAAO,IAAIuT,WAAW,IAArH,CAOAqxN,EAAUZ,GAAuBhkO,EAAK4lF,SAAS,EAAG,KAGlDg/I,GAAW,GAEuB,GAAV5kO,EAAK,KAG3B2kO,GAAc,EAEdA,GAAcX,GAAuBhkO,EAAK4lF,SAAS,GAAI,KACvDg/I,GAAWZ,GAAuBhkO,EAAK4lF,SAAS,GAAI,MAItD,EAAG,CAGD,IADA8+I,EAAYV,GAAuBhkO,EAAK4lF,SAAS++I,EAAa,EAAGA,EAAa,KAC9D,EACd,MAGF,IAAInT,EAAQ,CACVz3M,GAFY9e,OAAOC,aAAa8E,EAAK2kO,GAAa3kO,EAAK2kO,EAAa,GAAI3kO,EAAK2kO,EAAa,GAAI3kO,EAAK2kO,EAAa,IAGhH3kO,KAAMA,EAAK4lF,SAAS++I,EAAa,GAAIA,EAAaD,EAAY,KAEhElT,EAAMp1N,IAAMo1N,EAAMz3M,GAEdkqN,GAAazS,EAAMz3M,IAErBkqN,GAAazS,EAAMz3M,IAAIy3M,GACE,MAAhBA,EAAMz3M,GAAG,GAElBkqN,GAAa,MAAMzS,GACM,MAAhBA,EAAMz3M,GAAG,IAElBkqN,GAAa,MAAMzS,GAErB5I,EAAOpsN,KAAKg1N,GACZmT,GAAc,GAEdA,GAAcD,CAChB,OAASC,EAAaC,GACtB,OAAOhc,CAhDP,CAiDF,EAGEic,qBAAsBb,GACtBC,aAAcA,IAcda,GAAgBtC,GAChBuC,GAAMP,IAERrB,GAAiB,SAAUxmO,GACzB,IAYEyE,EAZEklK,EAAW,CAIX2vB,WAAYt5L,GAAWA,EAAQs5L,YAGjC2uC,EAAU,EAEVp/I,EAAS,GAETu5D,EAAa,EAMf,GAJAokF,GAAe1gO,UAAUooN,KAAK3oN,KAAKmB,MAGnCA,KAAK2hO,aAAeF,GAAcnC,qBAAqBjgO,SAAS,IAC5D4jK,EAAS2vB,WACX,IAAK70L,EAAI,EAAGA,EAAIklK,EAAS2vB,WAAWv0L,OAAQN,IAC1CiC,KAAK2hO,eAAiB,KAAO1+D,EAAS2vB,WAAW70L,GAAGsB,SAAS,KAAKrG,OAAO,GAG7EgH,KAAK7G,KAAO,SAAU8sI,GACpB,IAAI37C,EAAKg3I,EAAYD,EAAWlT,EAAOpwN,EACvC,GAAmB,mBAAfkoI,EAAM5uI,KAWV,GALI4uI,EAAM27F,yBACRlmF,EAAa,EACbv5D,EAAO9jF,OAAS,GAGI,IAAlB8jF,EAAO9jF,SAAiB4nI,EAAMtpI,KAAK0B,OAAS,IAAM4nI,EAAMtpI,KAAK,KAAO,IAAIuT,WAAW,IAAM+1H,EAAMtpI,KAAK,KAAO,IAAIuT,WAAW,IAAM+1H,EAAMtpI,KAAK,KAAO,IAAIuT,WAAW,IACnKlQ,KAAKk7H,QAAQ,MAAO,CAClBumB,MAAO,OACPpzI,QAAS,+CAmBb,GAdA8zE,EAAOhpF,KAAK8sI,GACZyV,GAAczV,EAAMtpI,KAAK0lF,WAEH,IAAlBF,EAAO9jF,SAKTkjO,EAAUG,GAAIF,qBAAqBv7F,EAAMtpI,KAAK4lF,SAAS,EAAG,KAG1Dg/I,GAAW,MAGT7lF,EAAa6lF,GAAjB,CAUA,IANAj3I,EAAM,CACJ3tF,KAAM,IAAI5E,WAAWwpO,GACrBhc,OAAQ,GACR8I,IAAKlsI,EAAO,GAAGksI,IACfC,IAAKnsI,EAAO,GAAGmsI,KAEZvwN,EAAI,EAAGA,EAAIwjO,GACdj3I,EAAI3tF,KAAKgE,IAAIwhF,EAAO,GAAGxlF,KAAK4lF,SAAS,EAAGg/I,EAAUxjO,GAAIA,GACtDA,GAAKokF,EAAO,GAAGxlF,KAAK0lF,WACpBq5D,GAAcv5D,EAAO,GAAGxlF,KAAK0lF,WAC7BF,EAAO6W,QAGTsoI,EAAa,GACK,GAAdh3I,EAAI3tF,KAAK,KAEX2kO,GAAc,EAEdA,GAAcI,GAAIF,qBAAqBl3I,EAAI3tF,KAAK4lF,SAAS,GAAI,KAE7Dg/I,GAAWG,GAAIF,qBAAqBl3I,EAAI3tF,KAAK4lF,SAAS,GAAI,MAI5D,EAAG,CAGD,IADA8+I,EAAYK,GAAIF,qBAAqBl3I,EAAI3tF,KAAK4lF,SAAS++I,EAAa,EAAGA,EAAa,KACpE,EAAG,CACjBthO,KAAKk7H,QAAQ,MAAO,CAClBumB,MAAO,OACPpzI,QAAS,0EAIX,KACF,CAoBA,IAlBA8/M,EAAQ,CACNz3M,GAFY9e,OAAOC,aAAayyF,EAAI3tF,KAAK2kO,GAAah3I,EAAI3tF,KAAK2kO,EAAa,GAAIh3I,EAAI3tF,KAAK2kO,EAAa,GAAIh3I,EAAI3tF,KAAK2kO,EAAa,IAGhI3kO,KAAM2tF,EAAI3tF,KAAK4lF,SAAS++I,EAAa,GAAIA,EAAaD,EAAY,MAE9DtoO,IAAMo1N,EAAMz3M,GAEdgrN,GAAId,aAAazS,EAAMz3M,IAEzBgrN,GAAId,aAAazS,EAAMz3M,IAAIy3M,GACF,MAAhBA,EAAMz3M,GAAG,GAElBgrN,GAAId,aAAa,MAAMzS,GACE,MAAhBA,EAAMz3M,GAAG,IAElBgrN,GAAId,aAAa,MAAMzS,GAIL,iDAAhBA,EAAM8S,MAA0D,CAClE,IAAI55I,EAAI8mI,EAAMxxN,KACZyE,GAAe,EAAPimF,EAAE,KAAc,GAAKA,EAAE,IAAM,GAAKA,EAAE,IAAM,GAAKA,EAAE,IAAM,EAAIA,EAAE,KAAO,EAC9EjmF,GAAQ,EACRA,GAAe,EAAPimF,EAAE,GACV8mI,EAAMxyH,UAAYv6F,OAKF9G,IAAZgwF,EAAI+jI,UAAiC/zN,IAAZgwF,EAAIgkI,MAC/BhkI,EAAI+jI,IAAMF,EAAMxyH,UAChBrR,EAAIgkI,IAAMH,EAAMxyH,WAElB37F,KAAKk7H,QAAQ,YAAaizF,EAC5B,CACA7jI,EAAIi7H,OAAOpsN,KAAKg1N,GAChBmT,GAAc,GAEdA,GAAcD,CAChB,OAASC,EAAaC,GACtBvhO,KAAKk7H,QAAQ,OAAQ5wC,EA9ErB,CA+EF,CACF,GACelrF,UAAY,IAjJZwqN,EAkJf,IAiBIiY,GAAuBC,GAAsBC,GAjB7CC,GAAiBlC,GAYjBmC,GAAWrY,EACbsY,GAAkBjD,GAClBkD,GAAgBhD,GAChBa,GAA0BD,GAAwBC,wBAIhDoC,GAAuB,KAQ3BP,GAAwB,WACtB,IAAI1/I,EAAS,IAAIpqF,WAAWqqO,IAC1BC,EAAgB,EAClBR,GAAsBziO,UAAUooN,KAAK3oN,KAAKmB,MAM1CA,KAAK7G,KAAO,SAAUkvI,GACpB,IAEEi6F,EAFElkJ,EAAa,EACf8uD,EAAWk1F,GAab,IATIC,IACFC,EAAa,IAAIvqO,WAAWswI,EAAMhmD,WAAaggJ,IACpC1hO,IAAIwhF,EAAOI,SAAS,EAAG8/I,IAClCC,EAAW3hO,IAAI0nI,EAAOg6F,GACtBA,EAAgB,GAEhBC,EAAaj6F,EAGR6E,EAAWo1F,EAAWjgJ,YA9BjB,KAgCNigJ,EAAWlkJ,IAhCL,KAgCoCkkJ,EAAWp1F,IAWzD9uD,IACA8uD,MATEltI,KAAKk7H,QAAQ,OAAQonG,EAAW//I,SAASnE,EAAY8uD,IACrD9uD,GAAcgkJ,GACdl1F,GAAYk1F,IAYZhkJ,EAAakkJ,EAAWjgJ,aAC1BF,EAAOxhF,IAAI2hO,EAAW//I,SAASnE,GAAa,GAC5CikJ,EAAgBC,EAAWjgJ,WAAajE,EAE5C,EAKAp+E,KAAKmrH,MAAQ,WAIPk3G,IAAkBD,IA9DV,KA8DkCjgJ,EAAO,KACnDniF,KAAKk7H,QAAQ,OAAQ/4C,GACrBkgJ,EAAgB,GAElBriO,KAAKk7H,QAAQ,OACf,EACAl7H,KAAK2nN,YAAc,WACjB3nN,KAAKmrH,QACLnrH,KAAKk7H,QAAQ,gBACf,EACAl7H,KAAKO,MAAQ,WACX8hO,EAAgB,EAChBriO,KAAKk7H,QAAQ,QACf,CACF,GACsB97H,UAAY,IAAI6iO,GAMtCH,GAAuB,WACrB,IAAIS,EAAUC,EAAUC,EAAU9gJ,EAClCmgJ,GAAqB1iO,UAAUooN,KAAK3oN,KAAKmB,MACzC2hF,EAAO3hF,KACPA,KAAK0iO,qBAAuB,GAC5B1iO,KAAK2iO,qBAAkBroO,EACvBioO,EAAW,SAAUjhO,EAASgzD,GAC5B,IAAI37C,EAAS,EAOT27C,EAAIsuK,4BACNjqN,GAAUrX,EAAQqX,GAAU,GAEb,QAAb27C,EAAIj9D,KACNmrO,EAASlhO,EAAQihF,SAAS5pE,GAAS27C,GAEnCmuK,EAASnhO,EAAQihF,SAAS5pE,GAAS27C,EAEvC,EACAkuK,EAAW,SAAUlhO,EAASuhO,GAC5BA,EAAIC,eAAiBxhO,EAAQ,GAE7BuhO,EAAIE,oBAAsBzhO,EAAQ,GAGlCqgF,EAAKqhJ,QAAwB,GAAd1hO,EAAQ,MAAe,EAAIA,EAAQ,IAClDuhO,EAAIG,OAASrhJ,EAAKqhJ,MACpB,EAUAP,EAAW,SAAUnhO,EAAS2hO,GAC5B,IAAmBC,EAA6BvqN,EAMhD,GAAmB,EAAbrX,EAAQ,GAAd,CAiBA,IAbAqgF,EAAKghJ,gBAAkB,CACrBr8F,MAAO,KACPC,MAAO,KACP,iBAAkB,CAAC,GAIrB28F,EAAW,IADmB,GAAb5hO,EAAQ,KAAc,EAAIA,EAAQ,IACpB,EAK/BqX,EAAS,KAF0B,GAAdrX,EAAQ,MAAe,EAAIA,EAAQ,KAGjDqX,EAASuqN,GAAU,CACxB,IAAIznF,EAAan6I,EAAQqX,GACrBwqN,GAA6B,GAAtB7hO,EAAQqX,EAAS,KAAc,EAAIrX,EAAQqX,EAAS,GAI3D8iI,IAAe0mF,GAAc/C,kBAAmD,OAA/Bz9I,EAAKghJ,gBAAgBr8F,MACxE3kD,EAAKghJ,gBAAgBr8F,MAAQ68F,EACpB1nF,IAAe0mF,GAAc9C,kBAAmD,OAA/B19I,EAAKghJ,gBAAgBp8F,MAC/E5kD,EAAKghJ,gBAAgBp8F,MAAQ48F,EACpB1nF,IAAe0mF,GAAc7C,uBAEtC39I,EAAKghJ,gBAAgB,kBAAkBQ,GAAO1nF,GAIhD9iI,GAAsE,IAApC,GAAtBrX,EAAQqX,EAAS,KAAc,EAAIrX,EAAQqX,EAAS,GAClE,CAEAsqN,EAAIN,gBAAkBhhJ,EAAKghJ,eAlC3B,CAmCF,EAKA3iO,KAAK7G,KAAO,SAAUw6N,GACpB,IAAIj7N,EAAS,CAAC,EACZigB,EAAS,EAeX,GAdAjgB,EAAOkqO,6BAA2C,GAAZjP,EAAO,IAE7Cj7N,EAAOyqO,IAAkB,GAAZxP,EAAO,GACpBj7N,EAAOyqO,MAAQ,EACfzqO,EAAOyqO,KAAOxP,EAAO,IAMJ,GAAZA,EAAO,MAAe,EAAI,IAC7Bh7M,GAAUg7M,EAAOh7M,GAAU,GAGV,IAAfjgB,EAAOyqO,IACTzqO,EAAOrB,KAAO,MACdkrO,EAAS5O,EAAOpxI,SAAS5pE,GAASjgB,GAClCsH,KAAKk7H,QAAQ,OAAQxiI,QAChB,GAAIA,EAAOyqO,MAAQnjO,KAAKgjO,OAK7B,IAJAtqO,EAAOrB,KAAO,MACdkrO,EAAS5O,EAAOpxI,SAAS5pE,GAASjgB,GAClCsH,KAAKk7H,QAAQ,OAAQxiI,GAEdsH,KAAK0iO,qBAAqBrkO,QAC/B2B,KAAKojO,YAAYtrO,MAAMkI,KAAMA,KAAK0iO,qBAAqB1pI,mBAEvB1+F,IAAzB0F,KAAK2iO,gBAGd3iO,KAAK0iO,qBAAqBvpO,KAAK,CAACw6N,EAAQh7M,EAAQjgB,IAEhDsH,KAAKojO,YAAYzP,EAAQh7M,EAAQjgB,EAErC,EACAsH,KAAKojO,YAAc,SAAUzP,EAAQh7M,EAAQjgB,GAEvCA,EAAOyqO,MAAQnjO,KAAK2iO,gBAAgBr8F,MACtC5tI,EAAO+iJ,WAAa0mF,GAAc/C,iBACzB1mO,EAAOyqO,MAAQnjO,KAAK2iO,gBAAgBp8F,MAC7C7tI,EAAO+iJ,WAAa0mF,GAAc9C,iBAIlC3mO,EAAO+iJ,WAAaz7I,KAAK2iO,gBAAgB,kBAAkBjqO,EAAOyqO,KAEpEzqO,EAAOrB,KAAO,MACdqB,EAAOiE,KAAOg3N,EAAOpxI,SAAS5pE,GAC9B3Y,KAAKk7H,QAAQ,OAAQxiI,EACvB,CACF,EACAopO,GAAqB1iO,UAAY,IAAI6iO,GACrCH,GAAqBuB,aAAe,CAClCC,KAAM,GACNC,KAAM,IAWRxB,GAAmB,WACjB,IAeEY,EAfEhhJ,EAAO3hF,KACTwjO,GAAgB,EAEhBl9F,EAAQ,CACN3pI,KAAM,GACNyE,KAAM,GAERmlI,EAAQ,CACN5pI,KAAM,GACNyE,KAAM,GAERqiO,EAAgB,CACd9mO,KAAM,GACNyE,KAAM,GAuDRoyN,EAAc,SAAU5J,EAAQvyN,EAAMqsO,GACpC,IAMEC,EACA1pG,EAPEm9F,EAAa,IAAIr/N,WAAW6xN,EAAOxoN,MACrCmhG,EAAQ,CACNlrG,KAAMA,GAER0G,EAAI,EACJ4a,EAAS,EAKX,GAAKixM,EAAOjtN,KAAK0B,UAAUurN,EAAOxoN,KAAO,GAAzC,CAKA,IAFAmhG,EAAMqhI,QAAUha,EAAOjtN,KAAK,GAAGwmO,IAE1BplO,EAAI,EAAGA,EAAI6rN,EAAOjtN,KAAK0B,OAAQN,IAClCk8H,EAAW2vF,EAAOjtN,KAAKoB,GACvBq5N,EAAWz2N,IAAIs5H,EAASt9H,KAAMgc,GAC9BA,GAAUshH,EAASt9H,KAAK0lF,YAvEjB,SAAU/gF,EAASuiO,GAC5B,IAAIC,EACJ,MAAMC,EAAcziO,EAAQ,IAAM,GAAKA,EAAQ,IAAM,EAAIA,EAAQ,GAEjEuiO,EAAIlnO,KAAO,IAAI5E,WAIK,IAAhBgsO,IAIJF,EAAIG,aAAe,GAAK1iO,EAAQ,IAAM,EAAIA,EAAQ,IAElDuiO,EAAIjC,uBAAiD,KAAV,EAAbtgO,EAAQ,IAapB,KATlBwiO,EAAcxiO,EAAQ,MAapBuiO,EAAIxV,KAAoB,GAAb/sN,EAAQ,KAAc,IAAoB,IAAdA,EAAQ,MAAe,IAAoB,IAAdA,EAAQ,MAAe,IAAoB,IAAdA,EAAQ,MAAe,GAAmB,IAAdA,EAAQ,OAAgB,EACrJuiO,EAAIxV,KAAO,EAEXwV,EAAIxV,MAAsB,EAAd/sN,EAAQ,OAAgB,EAEpCuiO,EAAIvV,IAAMuV,EAAIxV,IACI,GAAdyV,IACFD,EAAIvV,KAAqB,GAAdhtN,EAAQ,MAAe,IAAoB,IAAdA,EAAQ,MAAe,IAAoB,IAAdA,EAAQ,MAAe,IAAoB,IAAdA,EAAQ,MAAe,GAAmB,IAAdA,EAAQ,OAAgB,EACtJuiO,EAAIvV,KAAO,EAEXuV,EAAIvV,MAAsB,EAAdhtN,EAAQ,OAAgB,IAMxCuiO,EAAIlnO,KAAO2E,EAAQihF,SAAS,EAAIjhF,EAAQ,IAC1C,CA0BE2iO,CAAS7M,EAAY70H,GAGrBohI,EAA2B,UAATtsO,GAAoBkrG,EAAMyhI,cAAgBpa,EAAOxoN,MAE/DsiO,GAAcC,KAChB/Z,EAAOxoN,KAAO,EACdwoN,EAAOjtN,KAAK0B,OAAS,GAInBslO,GACFhiJ,EAAKu5C,QAAQ,OAAQ34B,EArBvB,CAuBF,EACFw/H,GAAiB3iO,UAAUooN,KAAK3oN,KAAKmB,MAMrCA,KAAK7G,KAAO,SAAUwD,IACpB,CACEkmO,IAAK,WACH,EAEFgB,IAAK,WACH,IAAIja,EAAQnuE,EACZ,OAAQ9+I,EAAK8+I,YACX,KAAK0mF,GAAc/C,iBACjBxV,EAAStjF,EACTmV,EAAa,QACb,MACF,KAAK0mF,GAAc9C,iBACjBzV,EAASrjF,EACTkV,EAAa,QACb,MACF,KAAK0mF,GAAc7C,qBACjB1V,EAAS6Z,EACThoF,EAAa,iBACb,MACF,QAEE,OAIA9+I,EAAKimO,2BACPpP,EAAY5J,EAAQnuE,GAAY,GAIlCmuE,EAAOjtN,KAAKxD,KAAKwD,GACjBitN,EAAOxoN,MAAQzE,EAAKA,KAAK0lF,UAC3B,EACA4gJ,IAAK,WACH,IAAI1gI,EAAQ,CACVlrG,KAAM,WACN8nK,OAAQ,IAIoB,QAF9BwjE,EAAkBhmO,EAAKgmO,iBAEHr8F,OAClB/jC,EAAM48D,OAAOhmK,KAAK,CAChBu4N,kBAAmB,CACjB3E,oBAAqB,GAEvBr2M,IAAKisN,EAAgBr8F,MACrBQ,MAAO,MACPzvI,KAAM,UAGoB,OAA1BsrO,EAAgBp8F,OAClBhkC,EAAM48D,OAAOhmK,KAAK,CAChBu4N,kBAAmB,CACjB3E,oBAAqB,GAEvBr2M,IAAKisN,EAAgBp8F,MACrBO,MAAO,OACPzvI,KAAM,UAGVmsO,GAAgB,EAChB7hJ,EAAKu5C,QAAQ,OAAQ34B,EACvB,IACC5lG,EAAKtF,OACV,EACA2I,KAAKO,MAAQ,WACX+lI,EAAMllI,KAAO,EACbklI,EAAM3pI,KAAK0B,OAAS,EACpBkoI,EAAMnlI,KAAO,EACbmlI,EAAM5pI,KAAK0B,OAAS,EACpB2B,KAAKk7H,QAAQ,QACf,EAWAl7H,KAAKkkO,cAAgB,WAGnB1Q,EAAYltF,EAAO,SACnBktF,EAAYjtF,EAAO,SACnBitF,EAAYiQ,EAAe,iBAC7B,EACAzjO,KAAKmrH,MAAQ,WAIX,IAAKq4G,GAAiBb,EAAiB,CACrC,IAAIM,EAAM,CACR5rO,KAAM,WACN8nK,OAAQ,IAGoB,OAA1BwjE,EAAgBr8F,OAClB28F,EAAI9jE,OAAOhmK,KAAK,CACdu4N,kBAAmB,CACjB3E,oBAAqB,GAEvBr2M,IAAKisN,EAAgBr8F,MACrBQ,MAAO,MACPzvI,KAAM,UAGoB,OAA1BsrO,EAAgBp8F,OAClB08F,EAAI9jE,OAAOhmK,KAAK,CACdu4N,kBAAmB,CACjB3E,oBAAqB,GAEvBr2M,IAAKisN,EAAgBp8F,MACrBO,MAAO,OACPzvI,KAAM,UAGVsqF,EAAKu5C,QAAQ,OAAQ+nG,EACvB,CACAO,GAAgB,EAChBxjO,KAAKkkO,gBACLlkO,KAAKk7H,QAAQ,OACf,CACF,EACA6mG,GAAiB3iO,UAAY,IAAI6iO,GACjC,IAAIkC,GAAS,CACXC,QAAS,EACTC,mBAAoBjC,GACpBP,sBAAuBA,GACvBC,qBAAsBA,GACtBC,iBAAkBA,GAClB/B,wBAAyBA,GACzBd,cAAegD,GAAgBhD,cAC/BpM,aAAcoP,GAAgBpP,aAC9BE,aAAckP,GAAgBlP,aAC9B8M,eAAgBkC,IAElB,IAAK,IAAI3qO,MAAQ8qO,GACXA,GAActkO,eAAexG,MAC/B8sO,GAAO9sO,IAAQ8qO,GAAc9qO,KAGjC,IAUIitO,GAVAC,GAASJ,GASTK,GAAqB1U,GAAQjsI,iBAE7B4gJ,GAA8B,CAAC,KAAO,MAAO,KAAO,KAAO,MAAO,KAAO,KAAO,MAAO,KAAO,KAAO,MAAO,IAAM,OAUtHH,GAAe,SAAUI,GACvB,IAAIviJ,EACFwiJ,EAAW,EACbL,GAAallO,UAAUooN,KAAK3oN,KAAKmB,MACjCA,KAAK4kO,UAAY,SAAUv+N,EAAOq5E,GAChC1/E,KAAKk7H,QAAQ,MAAO,CAClBumB,MAAO,OACPpzI,QAAS,sBAAsBhI,QAAYq5E,cAAgBilJ,sBAE/D,EACA3kO,KAAK7G,KAAO,SAAUw6N,GACpB,IACEkR,EACAC,EACAC,EACAC,EACAC,EALElnO,EAAI,EASR,GAHK2mO,IACHC,EAAW,GAEO,UAAhBhR,EAAOt8N,KAAX,CAgBA,IAAImsI,EAGJ,IAbIrhD,GAAUA,EAAO9jF,QACnB0mO,EAAY5iJ,GACZA,EAAS,IAAIpqF,WAAWgtO,EAAU1iJ,WAAasxI,EAAOh3N,KAAK0lF,aACpD1hF,IAAIokO,GACX5iJ,EAAOxhF,IAAIgzN,EAAOh3N,KAAMooO,EAAU1iJ,aAElCF,EAASwxI,EAAOh3N,KAOXoB,EAAI,EAAIokF,EAAO9jF,QAEpB,GAAkB,MAAd8jF,EAAOpkF,IAA0C,OAAV,IAAhBokF,EAAOpkF,EAAI,IAAtC,CAwBA,GAfoB,kBAATylI,IACTxjI,KAAK4kO,UAAUphG,EAAMzlI,GACrBylI,EAAO,MAITshG,EAAgD,GAAR,GAAhB3iJ,EAAOpkF,EAAI,IAInC8mO,GAA+B,EAAhB1iJ,EAAOpkF,EAAI,KAAc,GAAKokF,EAAOpkF,EAAI,IAAM,GAAqB,IAAhBokF,EAAOpkF,EAAI,KAAc,EAE5FknO,GADAD,EAA6C,MAAL,GAAR,EAAhB7iJ,EAAOpkF,EAAI,MACOymO,GAAqBC,IAA6C,GAAhBtiJ,EAAOpkF,EAAI,MAAe,GAG1GokF,EAAOE,WAAatkF,EAAI8mO,EAC1B,MAGF7kO,KAAKk7H,QAAQ,OAAQ,CACnBmzF,IAAKsF,EAAOtF,IAAMsW,EAAWM,EAC7B3W,IAAKqF,EAAOrF,IAAMqW,EAAWM,EAC7BD,YAAaA,EACbha,gBAAgD,GAA9B7oI,EAAOpkF,EAAI,KAAO,EAAI,GACxCmtN,cAA+B,EAAhB/oI,EAAOpkF,EAAI,KAAW,GAAqB,IAAhBokF,EAAOpkF,EAAI,MAAe,EACpEotN,WAAYsZ,IAA6C,GAAhBtiJ,EAAOpkF,EAAI,MAAe,GACnEktN,wBAAyC,GAAhB9oI,EAAOpkF,EAAI,MAAe,EAEnDyuN,WAAY,GAEZ7vN,KAAMwlF,EAAOI,SAASxkF,EAAI,EAAI+mO,EAAqB/mO,EAAI8mO,KAEzDF,IACA5mO,GAAK8mO,CAlCL,KAPsB,kBAATrhG,IACTA,EAAOzlI,GAITA,IAsCgB,kBAATylI,IACTxjI,KAAK4kO,UAAUphG,EAAMzlI,GACrBylI,EAAO,MAGTrhD,EAASA,EAAOI,SAASxkF,EAnEzB,CAoEF,EACAiC,KAAKmrH,MAAQ,WACXw5G,EAAW,EACX3kO,KAAKk7H,QAAQ,OACf,EACAl7H,KAAKO,MAAQ,WACX4hF,OAAS,EACTniF,KAAKk7H,QAAQ,QACf,EACAl7H,KAAK2nN,YAAc,WACjBxlI,OAAS,EACTniF,KAAKk7H,QAAQ,gBACf,CACF,GACa97H,UAAY,IAtHVwqN,EAuHf,IA+IIsb,GAAcC,GACdC,GAhJA7B,GAAOe,GA6IPe,GAAWzb,EACX0b,GAhIU,SAAUC,GACtB,IAEEC,EAAwBD,EAAYljJ,WAEpCojJ,EAAc,EAGdC,EAAuB,EAGzB1lO,KAAK3B,OAAS,WACZ,OAAO,EAAImnO,CACb,EAEAxlO,KAAK2lO,cAAgB,WACnB,OAAO,EAAIH,EAAwBE,CACrC,EAEA1lO,KAAK4lO,SAAW,WACd,IAAIhgO,EAAW2/N,EAAYljJ,WAAamjJ,EACtCK,EAAe,IAAI9tO,WAAW,GAC9B+tO,EAAiBxiO,KAAKyhG,IAAI,EAAGygI,GAC/B,GAAuB,IAAnBM,EACF,MAAM,IAAIrsO,MAAM,sBAElBosO,EAAallO,IAAI4kO,EAAYhjJ,SAAS38E,EAAUA,EAAWkgO,IAC3DL,EAAc,IAAIvjJ,SAAS2jJ,EAAa1jJ,QAAQO,UAAU,GAE1DgjJ,EAAwC,EAAjBI,EACvBN,GAAyBM,CAC3B,EAEA9lO,KAAK+lO,SAAW,SAAUntN,GACxB,IAAIotN,EAEAN,EAAuB9sN,GACzB6sN,IAAgB7sN,EAChB8sN,GAAwB9sN,IAExBA,GAAS8sN,EAET9sN,GAAqB,GADrBotN,EAAY1iO,KAAK80H,MAAMx/G,EAAQ,IAE/B4sN,GAAyBQ,EACzBhmO,KAAK4lO,WACLH,IAAgB7sN,EAChB8sN,GAAwB9sN,EAE5B,EAEA5Y,KAAKimO,SAAW,SAAU7kO,GACxB,IAAI8kO,EAAO5iO,KAAKyhG,IAAI2gI,EAAsBtkO,GAExC+kO,EAAOV,IAAgB,GAAKS,EAU9B,OAPAR,GAAwBQ,GACG,EACzBT,IAAgBS,EACPV,EAAwB,GACjCxlO,KAAK4lO,YAEPM,EAAO9kO,EAAO8kO,GACH,EACFC,GAAQD,EAAOlmO,KAAKimO,SAASC,GAE/BC,CACT,EAEAnmO,KAAKomO,iBAAmB,WACtB,IAAIC,EAEJ,IAAKA,EAAmB,EAAGA,EAAmBX,IAAwBW,EACpE,GAAwD,KAAnDZ,EAAc,aAAeY,GAIhC,OAFAZ,IAAgBY,EAChBX,GAAwBW,EACjBA,EAKX,OADArmO,KAAK4lO,WACES,EAAmBrmO,KAAKomO,kBACjC,EAEApmO,KAAKsmO,sBAAwB,WAC3BtmO,KAAK+lO,SAAS,EAAI/lO,KAAKomO,mBACzB,EAEApmO,KAAKumO,cAAgB,WACnBvmO,KAAK+lO,SAAS,EAAI/lO,KAAKomO,mBACzB,EAEApmO,KAAKwmO,sBAAwB,WAC3B,IAAIC,EAAMzmO,KAAKomO,mBAEf,OAAOpmO,KAAKimO,SAASQ,EAAM,GAAK,CAClC,EAEAzmO,KAAK0mO,cAAgB,WACnB,IAAIP,EAAOnmO,KAAKwmO,wBAEhB,OAAI,EAAOL,EAEF,EAAIA,IAAS,GAEd,GAAKA,IAAS,EACxB,EAGAnmO,KAAK2mO,YAAc,WACjB,OAA4B,IAArB3mO,KAAKimO,SAAS,EACvB,EAEAjmO,KAAK4mO,iBAAmB,WACtB,OAAO5mO,KAAKimO,SAAS,EACvB,EACAjmO,KAAK4lO,UACP,GAiBAT,GAAgB,WACd,IACEpnO,EACAokF,EAFE0kJ,EAAY,EAGhB1B,GAAc/lO,UAAUooN,KAAK3oN,KAAKmB,MASlCA,KAAK7G,KAAO,SAAUwD,GACpB,IAAImqO,EACC3kJ,IAGH2kJ,EAAa,IAAI/uO,WAAWoqF,EAAOE,WAAa1lF,EAAKA,KAAK0lF,aAC/C1hF,IAAIwhF,GACf2kJ,EAAWnmO,IAAIhE,EAAKA,KAAMwlF,EAAOE,YACjCF,EAAS2kJ,GALT3kJ,EAASxlF,EAAKA,KAiBhB,IAVA,IAAImD,EAAMqiF,EAAOE,WAUVwkJ,EAAY/mO,EAAM,EAAG+mO,IAC1B,GAA8B,IAA1B1kJ,EAAO0kJ,EAAY,GAAU,CAE/B9oO,EAAI8oO,EAAY,EAChB,KACF,CAEF,KAAO9oO,EAAI+B,GAGT,OAAQqiF,EAAOpkF,IACb,KAAK,EAEH,GAAsB,IAAlBokF,EAAOpkF,EAAI,GAAU,CACvBA,GAAK,EACL,KACF,CAAO,GAAsB,IAAlBokF,EAAOpkF,EAAI,GAAU,CAC9BA,IACA,KACF,CAEI8oO,EAAY,IAAM9oO,EAAI,GACxBiC,KAAKk7H,QAAQ,OAAQ/4C,EAAOI,SAASskJ,EAAY,EAAG9oO,EAAI,IAG1D,GACEA,UACqB,IAAdokF,EAAOpkF,IAAYA,EAAI+B,GAChC+mO,EAAY9oO,EAAI,EAChBA,GAAK,EACL,MACF,KAAK,EAEH,GAAsB,IAAlBokF,EAAOpkF,EAAI,IAA8B,IAAlBokF,EAAOpkF,EAAI,GAAU,CAC9CA,GAAK,EACL,KACF,CAEAiC,KAAKk7H,QAAQ,OAAQ/4C,EAAOI,SAASskJ,EAAY,EAAG9oO,EAAI,IACxD8oO,EAAY9oO,EAAI,EAChBA,GAAK,EACL,MACF,QAGEA,GAAK,EAKXokF,EAASA,EAAOI,SAASskJ,GACzB9oO,GAAK8oO,EACLA,EAAY,CACd,EACA7mO,KAAKO,MAAQ,WACX4hF,EAAS,KACT0kJ,EAAY,EACZ7mO,KAAKk7H,QAAQ,QACf,EACAl7H,KAAKmrH,MAAQ,WAEPhpC,GAAUA,EAAOE,WAAa,GAChCriF,KAAKk7H,QAAQ,OAAQ/4C,EAAOI,SAASskJ,EAAY,IAGnD1kJ,EAAS,KACT0kJ,EAAY,EACZ7mO,KAAKk7H,QAAQ,OACf,EACAl7H,KAAK2nN,YAAc,WACjB3nN,KAAKmrH,QACLnrH,KAAKk7H,QAAQ,gBACf,CACF,GACc97H,UAAY,IAAIimO,GAI9BD,GAAkC,CAChC,KAAK,EACL,KAAK,EACL,KAAK,EACL,KAAK,EACL,IAAI,EACJ,IAAI,EACJ,IAAI,EACJ,KAAK,EACL,KAAK,EAGL,KAAK,EACL,KAAK,EACL,KAAK,GAOPF,GAAe,WACb,IACEvjJ,EACAiiJ,EACAmD,EACAC,EACA3oF,EACA4oF,EACAC,EAPEC,EAAgB,IAAIhC,GAQxBD,GAAa9lO,UAAUooN,KAAK3oN,KAAKmB,MACjC2hF,EAAO3hF,KAaPA,KAAK7G,KAAO,SAAUw6N,GACA,UAAhBA,EAAOt8N,OAGXusO,EAAUjQ,EAAOiQ,QACjBmD,EAAapT,EAAOtF,IACpB2Y,EAAarT,EAAOrF,IACpB6Y,EAAchuO,KAAKw6N,GACrB,EAUAwT,EAAcnsG,GAAG,QAAQ,SAAUr+H,GACjC,IAAI4lG,EAAQ,CACVqhI,QAASA,EACTvV,IAAK0Y,EACLzY,IAAK0Y,EACLrqO,KAAMA,EACNyqO,gBAA2B,GAAVzqO,EAAK,IAExB,OAAQ4lG,EAAM6kI,iBACZ,KAAK,EACH7kI,EAAMusH,YAAc,4CACpB,MACF,KAAK,EACHvsH,EAAMusH,YAAc,WACpBvsH,EAAM2wH,YAAc70E,EAAgC1hJ,EAAK4lF,SAAS,IAClE,MACF,KAAK,EACHggB,EAAMusH,YAAc,yBACpBvsH,EAAM2wH,YAAc70E,EAAgC1hJ,EAAK4lF,SAAS,IAClEggB,EAAMxhB,OAASkmJ,EAAyB1kI,EAAM2wH,aAC9C,MACF,KAAK,EACH3wH,EAAMusH,YAAc,yBACpB,MACF,KAAK,EACHvsH,EAAMusH,YAAc,6BAIxBntI,EAAKu5C,QAAQ,OAAQ34B,EACvB,IACA4kI,EAAcnsG,GAAG,QAAQ,WACvBr5C,EAAKu5C,QAAQ,OACf,IACAisG,EAAcnsG,GAAG,eAAe,WAC9Br5C,EAAKu5C,QAAQ,cACf,IACAisG,EAAcnsG,GAAG,SAAS,WACxBr5C,EAAKu5C,QAAQ,QACf,IACAisG,EAAcnsG,GAAG,iBAAiB,WAChCr5C,EAAKu5C,QAAQ,gBACf,IACAl7H,KAAKmrH,MAAQ,WACXg8G,EAAch8G,OAChB,EACAnrH,KAAK0nN,aAAe,WAClByf,EAAczf,cAChB,EACA1nN,KAAKO,MAAQ,WACX4mO,EAAc5mO,OAChB,EACAP,KAAK2nN,YAAc,WACjBwf,EAAcxf,aAChB,EAWAuf,EAAkB,SAAUtuN,EAAOyuN,GACjC,IAEE18G,EAFE28G,EAAY,EACdC,EAAY,EAGd,IAAK58G,EAAI,EAAGA,EAAI/xG,EAAO+xG,IACH,IAAd48G,IAEFA,GAAaD,EADAD,EAAiBX,gBACQ,KAAO,KAE/CY,EAA0B,IAAdC,EAAkBD,EAAYC,CAE9C,EAUAlpF,EAAkC,SAAU1hJ,GAO1C,IANA,IAGE4hJ,EACAC,EAJEngJ,EAAS1B,EAAK0lF,WAChBgwI,EAAoC,GACpCt0N,EAAI,EAICA,EAAIM,EAAS,GACF,IAAZ1B,EAAKoB,IAA4B,IAAhBpB,EAAKoB,EAAI,IAA4B,IAAhBpB,EAAKoB,EAAI,IACjDs0N,EAAkCl5N,KAAK4E,EAAI,GAC3CA,GAAK,GAELA,IAKJ,GAAiD,IAA7Cs0N,EAAkCh0N,OACpC,OAAO1B,EAGT4hJ,EAAYlgJ,EAASg0N,EAAkCh0N,OACvDmgJ,EAAU,IAAIzmJ,WAAWwmJ,GACzB,IAAIE,EAAc,EAClB,IAAK1gJ,EAAI,EAAGA,EAAIwgJ,EAAWE,IAAe1gJ,IACpC0gJ,IAAgB4zE,EAAkC,KAEpD5zE,IAEA4zE,EAAkCr5H,SAEpCwlD,EAAQzgJ,GAAKpB,EAAK8hJ,GAEpB,OAAOD,CACT,EAWAyoF,EAA2B,SAAUtqO,GACnC,IAIE0qO,EACAnb,EACAE,EACAD,EACAqb,EACAC,EACAC,EACAC,EACAC,EACAC,EACAC,EAGA/pO,EAjBEgqO,EAAsB,EACxBC,EAAuB,EACvBC,EAAqB,EACrBC,EAAwB,EAYxB7b,EAAW,CAAC,EAAG,GAajB,GATAH,GADAmb,EAAmB,IAAI/B,GAAU3oO,IACHiqO,mBAE9Bza,EAAuBkb,EAAiBT,mBAExCxa,EAAWib,EAAiBT,mBAE5BS,EAAiBf,wBAGblB,GAAgClZ,KAEV,KADxBsb,EAAkBH,EAAiBb,0BAEjCa,EAAiBtB,SAAS,GAE5BsB,EAAiBf,wBAEjBe,EAAiBf,wBAEjBe,EAAiBtB,SAAS,GAEtBsB,EAAiBV,eAGnB,IADAmB,EAAuC,IAApBN,EAAwB,EAAI,GAC1CzpO,EAAI,EAAGA,EAAI+pO,EAAkB/pO,IAC5BspO,EAAiBV,eAGjBO,EADEnpO,EAAI,EACU,GAEA,GAFIspO,GAW9B,GAHAA,EAAiBf,wBAGO,KADxBmB,EAAkBJ,EAAiBb,yBAEjCa,EAAiBb,6BACZ,GAAwB,IAApBiB,EAQT,IAPAJ,EAAiBtB,SAAS,GAE1BsB,EAAiBd,gBAEjBc,EAAiBd,gBAEjBmB,EAAiCL,EAAiBb,wBAC7CzoO,EAAI,EAAGA,EAAI2pO,EAAgC3pO,IAC9CspO,EAAiBd,gBAsBrB,GAnBAc,EAAiBf,wBAEjBe,EAAiBtB,SAAS,GAE1B4B,EAAsBN,EAAiBb,wBACvCoB,EAA4BP,EAAiBb,wBAEpB,KADzBqB,EAAmBR,EAAiBpB,SAAS,KAE3CoB,EAAiBtB,SAAS,GAE5BsB,EAAiBtB,SAAS,GAEtBsB,EAAiBV,gBAEnBoB,EAAsBV,EAAiBb,wBACvCwB,EAAuBX,EAAiBb,wBACxCyB,EAAqBZ,EAAiBb,wBACtC0B,EAAwBb,EAAiBb,yBAEvCa,EAAiBV,eAEfU,EAAiBV,cAAe,CAGlC,OADiBU,EAAiBT,oBAEhC,KAAK,EACHva,EAAW,CAAC,EAAG,GACf,MACF,KAAK,EACHA,EAAW,CAAC,GAAI,IAChB,MACF,KAAK,EACHA,EAAW,CAAC,GAAI,IAChB,MACF,KAAK,EACHA,EAAW,CAAC,GAAI,IAChB,MACF,KAAK,EACHA,EAAW,CAAC,GAAI,IAChB,MACF,KAAK,EACHA,EAAW,CAAC,GAAI,IAChB,MACF,KAAK,EACHA,EAAW,CAAC,GAAI,IAChB,MACF,KAAK,EACHA,EAAW,CAAC,GAAI,IAChB,MACF,KAAK,EACHA,EAAW,CAAC,GAAI,IAChB,MACF,KAAK,GACHA,EAAW,CAAC,GAAI,IAChB,MACF,KAAK,GACHA,EAAW,CAAC,GAAI,IAChB,MACF,KAAK,GACHA,EAAW,CAAC,GAAI,IAChB,MACF,KAAK,GACHA,EAAW,CAAC,IAAK,IACjB,MACF,KAAK,GACHA,EAAW,CAAC,EAAG,GACf,MACF,KAAK,GACHA,EAAW,CAAC,EAAG,GACf,MACF,KAAK,GACHA,EAAW,CAAC,EAAG,GACf,MACF,KAAK,IAEDA,EAAW,CAACgb,EAAiBT,oBAAsB,EAAIS,EAAiBT,mBAAoBS,EAAiBT,oBAAsB,EAAIS,EAAiBT,oBAI1Jva,IACFA,EAAS,GAAKA,EAAS,GAE3B,CAEF,MAAO,CACLH,WAAYA,EACZE,SAAUA,EACVD,qBAAsBA,EACtBvsH,MAAmC,IAA3B+nI,EAAsB,GAAgC,EAAtBI,EAAiD,EAAvBC,EAClEnoI,QAAS,EAAIgoI,IAAqBD,EAA4B,GAAK,GAA0B,EAArBK,EAAiD,EAAxBC,EAEjG7b,SAAUA,EAEd,CACF,EACA6Y,GAAa9lO,UAAY,IAAIimO,GAC7B,IAoJI8C,GApJA7E,GAAO,CACT8E,WAAYlD,GACZC,cAAeA,IAWbkD,GAA4B,CAAC,KAAO,MAAO,KAAO,KAAO,MAAO,KAAO,KAAO,MAAO,KAAO,KAAO,MAAO,IAAM,MAChHC,GAAkB,SAAU9a,EAAQlkF,GACtC,IAAIuR,EAAa2yE,EAAOlkF,EAAY,IAAM,GAAKkkF,EAAOlkF,EAAY,IAAM,GAAKkkF,EAAOlkF,EAAY,IAAM,EAAIkkF,EAAOlkF,EAAY,GAK7H,OADAuR,EAAaA,GAAc,EAAIA,EAAa,GAFjB,GADjB2yE,EAAOlkF,EAAY,KACK,EAIzBuR,EAAa,GAEfA,EAAa,EACtB,EACID,GAAe,SAAUj+I,EAAMgc,GACjC,OAAIhc,EAAK0B,OAASsa,EAAS,IAAMhc,EAAKgc,KAAY,IAAIzI,WAAW,IAAMvT,EAAKgc,EAAS,KAAO,IAAIzI,WAAW,IAAMvT,EAAKgc,EAAS,KAAO,IAAIzI,WAAW,GAC5IyI,GAETA,GAAU2vN,GAAgB3rO,EAAMgc,GACzBiiI,GAAaj+I,EAAMgc,GAC5B,EASI6oN,GAAuB,SAAU7kO,GACnC,OAAOA,EAAK,IAAM,GAAKA,EAAK,IAAM,GAAKA,EAAK,IAAM,EAAIA,EAAK,EAC7D,EAoFIkhN,GAAQ,CACV0qB,gBA9FsB,SAAU5rO,GAChC,IAAIgc,EAASiiI,GAAaj+I,EAAM,GAChC,OAAOA,EAAK0B,QAAUsa,EAAS,GAA+B,OAAV,IAAfhc,EAAKgc,KAA0D,OAAV,IAAnBhc,EAAKgc,EAAS,KAGvD,MAAV,GAAnBhc,EAAKgc,EAAS,GACjB,EAyFE2vN,gBAAiBA,GACjBE,cAvEkB,SAAUhb,EAAQlkF,GACpC,IAAIm/F,GAAoC,IAAxBjb,EAAOlkF,EAAY,KAAc,EAC/Co/F,EAASlb,EAAOlkF,EAAY,IAAM,EAEpC,OADoC,KAAxBkkF,EAAOlkF,EAAY,GACdo/F,EAASD,CAC5B,EAmEEE,UAlEgB,SAAUnb,EAAQlkF,GAClC,OAAIkkF,EAAOlkF,KAAe,IAAIp5H,WAAW,IAAMs9M,EAAOlkF,EAAY,KAAO,IAAIp5H,WAAW,IAAMs9M,EAAOlkF,EAAY,KAAO,IAAIp5H,WAAW,GAC9H,kBACsB,EAApBs9M,EAAOlkF,IAAiE,OAAV,IAAxBkkF,EAAOlkF,EAAY,IAC3D,QAEF,IACT,EA4DEs/F,gBA3DoB,SAAUjV,GAE9B,IADA,IAAI51N,EAAI,EACDA,EAAI,EAAI41N,EAAOt1N,QAAQ,CAC5B,GAAkB,MAAds1N,EAAO51N,IAA0C,OAAV,IAAhB41N,EAAO51N,EAAI,IAMtC,OAAOsqO,IAA2C,GAAhB1U,EAAO51N,EAAI,MAAe,GAH1DA,GAIJ,CACA,OAAO,IACT,EAgDE8qO,kBA/CsB,SAAUlV,GAChC,IAAI2N,EAAYD,EAAWlT,EAE3BmT,EAAa,GACG,GAAZ3N,EAAO,KAET2N,GAAc,EAEdA,GAAcE,GAAqB7N,EAAOpxI,SAAS,GAAI,MAIzD,EAAG,CAGD,IADA8+I,EAAYG,GAAqB7N,EAAOpxI,SAAS++I,EAAa,EAAGA,EAAa,KAC9D,EACd,OAAO,KAGT,GAAoB,SADN1pO,OAAOC,aAAa87N,EAAO2N,GAAa3N,EAAO2N,EAAa,GAAI3N,EAAO2N,EAAa,GAAI3N,EAAO2N,EAAa,IAC9F,CAC1BnT,EAAQwF,EAAOpxI,SAAS++I,EAAa,GAAIA,EAAaD,EAAY,IAClE,IAAK,IAAItjO,EAAI,EAAGA,EAAIowN,EAAM9rI,WAAYtkF,IACpC,GAAiB,IAAbowN,EAAMpwN,GAAU,CAClB,IAAIkjO,EApDLx3F,SAXW,SAAUpB,EAAOhiI,EAAOq5E,GAC1C,IAAI3hF,EACFrF,EAAS,GACX,IAAKqF,EAAIsI,EAAOtI,EAAI2hF,EAAK3hF,IACvBrF,GAAU,KAAO,KAAO2vI,EAAMtqI,GAAGsB,SAAS,KAAKrG,OAAO,GAExD,OAAON,CACT,CAIkBowO,CAoDkB3a,EAAO,EAAGpwN,IACpC,GAAc,iDAAVkjO,EAA0D,CAC5D,IAAI55I,EAAI8mI,EAAM5rI,SAASxkF,EAAI,GACvBqD,GAAe,EAAPimF,EAAE,KAAc,GAAKA,EAAE,IAAM,GAAKA,EAAE,IAAM,GAAKA,EAAE,IAAM,EAAIA,EAAE,KAAO,EAGhF,OAFAjmF,GAAQ,EACRA,GAAe,EAAPimF,EAAE,EAEZ,CACA,KACF,CAEJ,CACAi6I,GAAc,GAEdA,GAAcD,CAChB,OAASC,EAAa3N,EAAOtxI,YAC7B,OAAO,IACT,GAqBI0mJ,GAAWlrB,IAOfsqB,GAAc,WACZ,IAAI7F,EAAa,IAAIvqO,WACnB4jG,EAAY,EACdwsI,GAAY/oO,UAAUooN,KAAK3oN,KAAKmB,MAChCA,KAAKgpO,aAAe,SAAUhlJ,GAC5B2X,EAAY3X,CACd,EACAhkF,KAAK7G,KAAO,SAAUkvI,GACpB,IAEE4gG,EACAhjG,EACA0tF,EACAuV,EALE7H,EAAY,EACd/3F,EAAY,EAed,IARIg5F,EAAWjkO,QACb6qO,EAAa5G,EAAWjkO,QACxBikO,EAAa,IAAIvqO,WAAWswI,EAAMhmD,WAAa6mJ,IACpCvoO,IAAI2hO,EAAW//I,SAAS,EAAG2mJ,IACtC5G,EAAW3hO,IAAI0nI,EAAO6gG,IAEtB5G,EAAaj6F,EAERi6F,EAAWjkO,OAASirI,GAAa,GACtC,GAAIg5F,EAAWh5F,KAAe,IAAIp5H,WAAW,IAAMoyN,EAAWh5F,EAAY,KAAO,IAAIp5H,WAAW,IAAMoyN,EAAWh5F,EAAY,KAAO,IAAIp5H,WAAW,GAqB5I,GAAuC,OAAV,IAAxBoyN,EAAWh5F,KAAsE,OAAV,IAA5Bg5F,EAAWh5F,EAAY,IAsB9EA,QAtBO,CAGL,GAAIg5F,EAAWjkO,OAASirI,EAAY,EAClC,MAKF,GAAIA,GAHJ+3F,EAAY0H,GAASP,cAAclG,EAAYh5F,IAGnBg5F,EAAWjkO,OACrC,MAEFs1N,EAAS,CACPt8N,KAAM,QACNsF,KAAM2lO,EAAW//I,SAAS+mD,EAAWA,EAAY+3F,GACjDhT,IAAK1yH,EACL2yH,IAAK3yH,GAEP37F,KAAKk7H,QAAQ,OAAQy4F,GACrBrqF,GAAa+3F,CAEf,KA1CA,CAGE,GAAIiB,EAAWjkO,OAASirI,EAAY,GAClC,MAOF,GAAIA,GAJJ+3F,EAAY0H,GAAST,gBAAgBhG,EAAYh5F,IAIrBg5F,EAAWjkO,OACrC,MAEF4nI,EAAQ,CACN5uI,KAAM,iBACNsF,KAAM2lO,EAAW//I,SAAS+mD,EAAWA,EAAY+3F,IAEnDrhO,KAAKk7H,QAAQ,OAAQ+K,GACrBqD,GAAa+3F,CAuBf,CAGF4H,EAAY3G,EAAWjkO,OAASirI,EAE9Bg5F,EADE2G,EAAY,EACD3G,EAAW//I,SAAS+mD,GAEpB,IAAIvxI,UAErB,EACAiI,KAAKO,MAAQ,WACX+hO,EAAa,IAAIvqO,WACjBiI,KAAKk7H,QAAQ,QACf,EACAl7H,KAAK2nN,YAAc,WACjB2a,EAAa,IAAIvqO,WACjBiI,KAAKk7H,QAAQ,gBACf,CACF,GACY97H,UAAY,IA9FTwqN,EA+Ff,IA+BIuf,GAAoBC,GAAoBC,GAAYC,GAfpDvuG,GAAS6uF,EACTzjF,GAAM4nF,EACNwb,GAAa/a,EACbgb,GAAkBtZ,GAClBuZ,GAAkBpY,GAClBqY,GAAOnF,GACPoF,GAAQ7Z,GACR8Z,GAAarG,GACb6E,GAAa9E,GAAK8E,WAClByB,GAzBM1B,GA0BNI,GAAkB1qB,GAAM0qB,gBACxBuB,GAAqBha,GAAQjsI,iBAC7BkmJ,GA3BqB,CAAC,kBAAmB,eAAgB,aAAc,yBAA0B,cA4BjGC,GA1BqB,CAAC,QAAS,SAAU,aAAc,WAAY,uBAAwB,YA6B3FC,GAAqB,SAAUlxO,EAAKwpG,GACtCA,EAAMqnH,OAAS7wN,EACfiH,KAAKk7H,QAAQ,MAAO34B,EACtB,EACI2nI,GAA2B,SAAUC,EAAYC,GAEnD,IADA,IAAIv+N,EAAO1M,OAAO0M,KAAKu+N,GACdrsO,EAAI,EAAGA,EAAI8N,EAAKxN,OAAQN,IAAK,CACpC,IAAIhF,EAAM8S,EAAK9N,GAGH,mBAARhF,GAA6BqxO,EAASrxO,GAAKiiI,IAG/CovG,EAASrxO,GAAKiiI,GAAG,MAAOivG,GAAmBlrO,KAAKorO,EAAYpxO,GAC9D,CACF,EAKIsxO,GAAc,SAAUvrJ,EAAG4H,GAC7B,IAAI3oF,EACJ,GAAI+gF,EAAEzgF,SAAWqoF,EAAEroF,OACjB,OAAO,EAGT,IAAKN,EAAI,EAAGA,EAAI+gF,EAAEzgF,OAAQN,IACxB,GAAI+gF,EAAE/gF,KAAO2oF,EAAE3oF,GACb,OAAO,EAGX,OAAO,CACT,EACIusO,GAA4B,SAAUvd,EAAqBwd,EAAUnU,EAAUoU,EAAQpQ,EAAQqQ,GAQjG,MAAO,CACLpkO,MAAO,CACLioN,IAAKvB,EACLsB,IAAKtB,GAVcqJ,EAAWmU,IAYhC7qJ,IAAK,CACH4uI,IAAKvB,GAZUyd,EAASD,GAaxBlc,IAAKtB,GAZgBqN,EAAShE,IAchCqU,yBAA0BA,EAC1B1d,oBAAqBA,EAEzB,EAWAqc,GAAqB,SAAU33I,EAAOn4F,GACpC,IACE8xN,EADE0F,EAAa,GAEfC,EAAqB,EACrBX,EAAqB,EACrBC,EAA2BxtG,IAE7BuoG,GADA9xN,EAAUA,GAAW,CAAC,GACGoxO,qBAAuB,EAChDtB,GAAmBhqO,UAAUooN,KAAK3oN,KAAKmB,MACvCA,KAAK7G,KAAO,SAAUwD,GACpB8sO,GAAgB9X,eAAelgI,EAAO90F,GAClC80F,GACFs4I,GAAiBpxO,SAAQ,SAAUk7D,GACjC49B,EAAM59B,GAAQl3D,EAAKk3D,EACrB,IAGFi9J,EAAW33N,KAAKwD,EAClB,EACAqD,KAAK2qO,eAAiB,SAAUC,GAC9B7Z,EAAqB6Z,CACvB,EACA5qO,KAAK6qO,4BAA8B,SAAU9d,GAC3CsD,EAA2BtD,CAC7B,EACA/sN,KAAK8qO,oBAAsB,SAAU9mJ,GACnCosI,EAAqBpsI,CACvB,EACAhkF,KAAKmrH,MAAQ,WACX,IAAIo6F,EAAQ5lE,EAAMooE,EAAMuD,EAAOiF,EAAejlF,EAAiBy/F,EAErC,IAAtBja,EAAWzyN,QAIfknN,EAASikB,GAAgB3Y,4BAA4BC,EAAYr/H,EAAOs/H,GACxEt/H,EAAMs7H,oBAAsB0c,GAAgBhY,kCAAkChgI,EAAOn4F,EAAQ4qF,wBAE7F6mJ,EAAoCvB,GAAgBrZ,kBAAkB1+H,EAAO8zH,EAAQ6K,EAAoBC,GAGzG5+H,EAAM85H,QAAUie,GAAgBra,oBAAoB5J,GAEpDwC,EAAO5hF,GAAI4hF,KAAKyhB,GAAgBtY,qBAAqB3L,IACrDuL,EAAa,GACbnxE,EAAOxZ,GAAIwZ,KAAKyrE,EAAgB,CAAC35H,IACjC65H,EAAQ,IAAIvzN,WAAW4nJ,EAAKt9D,WAAa0lI,EAAK1lI,YAE9C+oI,IACAE,EAAM3qN,IAAIg/I,GACV2rE,EAAM3qN,IAAIonN,EAAMpoE,EAAKt9D,YACrBonJ,GAAgBnY,aAAa7/H,GAC7B8+H,EAAgBjtN,KAAK4+G,KAA0B,KAArB4nH,GAA4Br4I,EAAM05H,YAKxD5F,EAAOlnN,SACTitI,EAAkBi6E,EAAOlnN,OAASkyN,EAClCvwN,KAAKk7H,QAAQ,oBAAqBovG,GAIlCX,GAAMjmJ,iBAAiB+N,EAAMs7H,oBAAqBt7H,EAAM05H,YAExD5F,EAAO,GAAG+I,IAAK/I,EAAO,GAAG8I,IAAK9I,EAAO,GAAG+I,IAAMhjF,EAAiBi6E,EAAO,GAAG8I,IAAM/iF,EAAiBy/F,GAAqC,IACrI/qO,KAAKk7H,QAAQ,aAAc,CACzB70H,MAAOk/M,EAAO,GAAG8I,IACjB3uI,IAAK6lI,EAAO,GAAG8I,IAAM/iF,KAGzBtrI,KAAKk7H,QAAQ,OAAQ,CACnBzpC,MAAOA,EACP65H,MAAOA,IAETtrN,KAAKk7H,QAAQ,OAAQ,uBA3CnBl7H,KAAKk7H,QAAQ,OAAQ,qBA4CzB,EACAl7H,KAAKO,MAAQ,WACXkpO,GAAgBnY,aAAa7/H,GAC7Bq/H,EAAa,GACb9wN,KAAKk7H,QAAQ,QACf,CACF,EACAkuG,GAAmBhqO,UAAY,IAAI27H,GAanCouG,GAAqB,SAAU13I,EAAOn4F,GACpC,IAAI8xN,EAGFrqI,EACAgrI,EAHA2C,EAAW,GACXsc,EAAkB,GAIpB5f,GADA9xN,EAAUA,GAAW,CAAC,GACGoxO,qBAAuB,EAChDvB,GAAmB/pO,UAAUooN,KAAK3oN,KAAKmB,aAChCyxF,EAAMw5I,OACbjrO,KAAKkrO,UAAY,GAUjBlrO,KAAK7G,KAAO,SAAUgyO,GACpB1B,GAAgB9X,eAAelgI,EAAO05I,GAEV,2BAAxBA,EAAQrc,aAA6C/tI,IACvDA,EAASoqJ,EAAQpqJ,OACjB0Q,EAAMq6H,IAAM,CAACqf,EAAQxuO,MACrBqtO,GAAiBrxO,SAAQ,SAAUk7D,GACjC49B,EAAM59B,GAAQktB,EAAOltB,EACvB,GAAG7zD,OAEuB,2BAAxBmrO,EAAQrc,aAA6C/C,IACvDA,EAAMof,EAAQxuO,KACd80F,EAAMs6H,IAAM,CAACof,EAAQxuO,OAGvB+xN,EAASv1N,KAAKgyO,EAChB,EAMAnrO,KAAKmrH,MAAQ,WAYX,IAXA,IAAIo6F,EACF6lB,EACAnc,EACAtvE,EACAooE,EACAuD,EAEA+f,EACAC,EAFAb,EAA2B,EAKtB/b,EAASrwN,QACkB,+BAA5BqwN,EAAS,GAAGI,aAGhBJ,EAAS11H,QAGX,GAAwB,IAApB01H,EAASrwN,OAGX,OAFA2B,KAAKurO,oBACLvrO,KAAKk7H,QAAQ,OAAQ,sBA+CvB,GAzCAqqF,EAASgkB,GAAW9a,oBAAoBC,IACxCO,EAAOsa,GAAWxa,oBAAoBxJ,IAmB5B,GAAG,GAAGgJ,YAEd6c,EAAeprO,KAAKwrO,iBAAiB9c,EAAS,GAAIj9H,KAIhDg5I,EAA2BW,EAAaruG,SACxCkyF,EAAKzlH,QAAQ4hI,GAGbnc,EAAK5sI,YAAc+oJ,EAAa/oJ,WAChC4sI,EAAKJ,UAAYuc,EAAavc,SAC9BI,EAAKZ,IAAM+c,EAAa/c,IACxBY,EAAKX,IAAM8c,EAAa9c,IACxBW,EAAKlyF,UAAYquG,EAAaruG,UAG9BkyF,EAAOsa,GAAWra,oBAAoBD,IAItC+b,EAAgB3sO,OAAQ,CAC1B,IAAIotO,EAMJ,KAJEA,EADEnyO,EAAQoyO,eACI1rO,KAAK2rO,gBAAgB1c,GAErBjvN,KAAK4rO,kBAAkB3c,IAgBrC,OAZAjvN,KAAKkrO,UAAU1hI,QAAQ,CACrBqiI,IAAK5c,EAAKjuI,MACV+qI,IAAKt6H,EAAMs6H,IACXD,IAAKr6H,EAAMq6H,MAGb9rN,KAAKkrO,UAAU7sO,OAASiF,KAAKyhG,IAAI,EAAG/kG,KAAKkrO,UAAU7sO,QAEnDqwN,EAAW,GAEX1uN,KAAKurO,oBACLvrO,KAAKk7H,QAAQ,OAAQ,sBAKvBuuG,GAAgBnY,aAAa7/H,GAC7Bw9H,EAAOwc,CACT,CACAhC,GAAgB9X,eAAelgI,EAAOw9H,GAGtCx9H,EAAM85H,QAAUge,GAAWpa,oBAAoBF,GAE/ClH,EAAO5hF,GAAI4hF,KAAKwhB,GAAWla,mBAAmBJ,IAC9Cx9H,EAAMs7H,oBAAsB0c,GAAgBhY,kCAAkChgI,EAAOn4F,EAAQ4qF,wBAC7FlkF,KAAKk7H,QAAQ,oBAAqB+zF,EAAK54M,KAAI,SAAUw1N,GACnD,MAAO,CACLxd,IAAKwd,EAAIxd,IACTC,IAAKud,EAAIvd,IACTjsI,WAAYwpJ,EAAIxpJ,WAEpB,KACAgpJ,EAAWpc,EAAK,GAChBqc,EAAUrc,EAAKA,EAAK5wN,OAAS,GAC7B2B,KAAKk7H,QAAQ,oBAAqBovG,GAA0B74I,EAAMs7H,oBAAqBse,EAAS/c,IAAK+c,EAAShd,IAAKid,EAAQhd,IAAMgd,EAAQvuG,SAAUuuG,EAAQjd,IAAMid,EAAQvuG,SAAU0tG,IACnLzqO,KAAKk7H,QAAQ,aAAc,CACzB70H,MAAO4oN,EAAK,GAAGZ,IACf3uI,IAAKuvI,EAAKA,EAAK5wN,OAAS,GAAGgwN,IAAMY,EAAKA,EAAK5wN,OAAS,GAAG0+H,WAGzD/8H,KAAKkrO,UAAU1hI,QAAQ,CACrBqiI,IAAK5c,EAAKjuI,MACV+qI,IAAKt6H,EAAMs6H,IACXD,IAAKr6H,EAAMq6H,MAGb9rN,KAAKkrO,UAAU7sO,OAASiF,KAAKyhG,IAAI,EAAG/kG,KAAKkrO,UAAU7sO,QAEnDqwN,EAAW,GACX1uN,KAAKk7H,QAAQ,sBAAuBzpC,EAAMs7H,qBAC1C/sN,KAAKk7H,QAAQ,oBAAqBzpC,EAAMigI,mBACxC/xE,EAAOxZ,GAAIwZ,KAAKyrE,EAAgB,CAAC35H,IAGjC65H,EAAQ,IAAIvzN,WAAW4nJ,EAAKt9D,WAAa0lI,EAAK1lI,YAE9C+oI,IACAE,EAAM3qN,IAAIg/I,GACV2rE,EAAM3qN,IAAIonN,EAAMpoE,EAAKt9D,YACrBriF,KAAKk7H,QAAQ,OAAQ,CACnBzpC,MAAOA,EACP65H,MAAOA,IAETtrN,KAAKurO,eAELvrO,KAAKk7H,QAAQ,OAAQ,qBACvB,EACAl7H,KAAKO,MAAQ,WACXP,KAAKurO,eACL7c,EAAW,GACX1uN,KAAKkrO,UAAU7sO,OAAS,EACxB2sO,EAAgB3sO,OAAS,EACzB2B,KAAKk7H,QAAQ,QACf,EACAl7H,KAAKurO,aAAe,WAClB9B,GAAgBnY,aAAa7/H,GAG7B1Q,OAASzmF,EACTyxN,OAAMzxN,CACR,EAGA0F,KAAKwrO,iBAAmB,SAAUL,GAChC,IAKEW,EACAC,EACA/c,EACAgd,EACAjuO,EALAkuO,EAAkBppH,IAOpB,IAAK9kH,EAAI,EAAGA,EAAIiC,KAAKkrO,UAAU7sO,OAAQN,IAErCixN,GADAgd,EAAgBhsO,KAAKkrO,UAAUntO,IACJ8tO,IAErBp6I,EAAMs6H,KAAOse,GAAY54I,EAAMs6H,IAAI,GAAIigB,EAAcjgB,IAAI,KAAUt6H,EAAMq6H,KAAOue,GAAY54I,EAAMq6H,IAAI,GAAIkgB,EAAclgB,IAAI,MAI9HkD,EAAWV,IAAM78H,EAAMigI,kBAAkBpD,MAI7Cwd,EAAcX,EAAQ7c,IAAMU,EAAWV,IAAMU,EAAWjyF,YArBrC,KAwBqB+uG,GA1BzB,QA6BRC,GAAiBE,EAAkBH,KACtCC,EAAgBC,EAChBC,EAAkBH,IAIxB,OAAIC,EACKA,EAAcF,IAEhB,IACT,EAGA7rO,KAAK4rO,kBAAoB,SAAU3c,GACjC,IAAIid,EAAYC,EAAUC,EAAOP,EAAKxpJ,EAAYwsI,EAAU9xF,EAAU0uG,EAKtE,IAJAppJ,EAAa4sI,EAAK5sI,WAClBwsI,EAAWI,EAAKJ,SAChB9xF,EAAWkyF,EAAKlyF,SAChBmvG,EAAaC,EAAW,EACjBD,EAAalB,EAAgB3sO,QAAU8tO,EAAWld,EAAK5wN,SAC5D+tO,EAAQpB,EAAgBkB,GACxBL,EAAM5c,EAAKkd,GACPC,EAAM/d,MAAQwd,EAAIxd,MAGlBwd,EAAIxd,IAAM+d,EAAM/d,IAGlB6d,KAKFC,IACA9pJ,GAAcwpJ,EAAIxpJ,WAClBwsI,GAAYgd,EAAIhd,SAChB9xF,GAAY8uG,EAAI9uG,UAElB,OAAiB,IAAbovG,EAEKld,EAELkd,IAAald,EAAK5wN,OAEb,OAETotO,EAAcxc,EAAKj2N,MAAMmzO,IACb9pJ,WAAaA,EACzBopJ,EAAY1uG,SAAWA,EACvB0uG,EAAY5c,SAAWA,EACvB4c,EAAYpd,IAAMod,EAAY,GAAGpd,IACjCod,EAAYnd,IAAMmd,EAAY,GAAGnd,IAC1Bmd,EACT,EAGAzrO,KAAK2rO,gBAAkB,SAAU1c,GAC/B,IAAIid,EAAYC,EAAUC,EAAOP,EAAKQ,EAAeC,EA2BjDC,EAtBJ,IAJAL,EAAalB,EAAgB3sO,OAAS,EACtC8tO,EAAWld,EAAK5wN,OAAS,EACzBguO,EAAgB,KAChBC,GAAa,EACNJ,GAAc,GAAKC,GAAY,GAAG,CAGvC,GAFAC,EAAQpB,EAAgBkB,GACxBL,EAAM5c,EAAKkd,GACPC,EAAM/d,MAAQwd,EAAIxd,IAAK,CACzBie,GAAa,EACb,KACF,CACIF,EAAM/d,IAAMwd,EAAIxd,IAClB6d,KAGEA,IAAelB,EAAgB3sO,OAAS,IAI1CguO,EAAgBF,GAElBA,IACF,CACA,IAAKG,GAAgC,OAAlBD,EACjB,OAAO,KAQT,GAAkB,KAJhBE,EADED,EACUH,EAEAE,GAGZ,OAAOpd,EAET,IAAIwc,EAAcxc,EAAKj2N,MAAMuzO,GACzBxyO,EAAW0xO,EAAYv0O,QAAO,SAAU2xI,EAAOgjG,GAIjD,OAHAhjG,EAAMxmD,YAAcwpJ,EAAIxpJ,WACxBwmD,EAAM9L,UAAY8uG,EAAI9uG,SACtB8L,EAAMgmF,UAAYgd,EAAIhd,SACfhmF,CACT,GAAG,CACDxmD,WAAY,EACZ06C,SAAU,EACV8xF,SAAU,IAOZ,OALA4c,EAAYppJ,WAAatoF,EAASsoF,WAClCopJ,EAAY1uG,SAAWhjI,EAASgjI,SAChC0uG,EAAY5c,SAAW90N,EAAS80N,SAChC4c,EAAYpd,IAAMod,EAAY,GAAGpd,IACjCod,EAAYnd,IAAMmd,EAAY,GAAGnd,IAC1Bmd,CACT,EACAzrO,KAAKwsO,cAAgB,SAAUC,GAC7BzB,EAAkByB,CACpB,CACF,EACAtD,GAAmB/pO,UAAY,IAAI27H,GAUnCuuG,GAAiB,SAAUhwO,EAAS0oO,GAIlChiO,KAAK0sO,eAAiB,EACtB1sO,KAAKgiO,eAAiBA,EAEO,qBAD7B1oO,EAAUA,GAAW,CAAC,GACHqzO,MACjB3sO,KAAK4sO,cAAgBtzO,EAAQqzO,MAE7B3sO,KAAK4sO,aAAc,EAEyB,mBAAnCtzO,EAAQ4qF,uBACjBlkF,KAAKkkF,uBAAyB5qF,EAAQ4qF,uBAEtClkF,KAAKkkF,wBAAyB,EAEhClkF,KAAK6sO,cAAgB,GACrB7sO,KAAK8sO,WAAa,KAClB9sO,KAAK+sO,aAAe,GACpB/sO,KAAKgtO,gBAAkB,GACvBhtO,KAAKitO,gBAAkB,GACvBjtO,KAAKktO,aAAe,EACpBltO,KAAKmtO,cAAgB,EACrB7D,GAAelqO,UAAUooN,KAAK3oN,KAAKmB,MAEnCA,KAAK7G,KAAO,SAAUi0O,GAGpB,OAAIA,EAAO1mF,SAAW0mF,EAAOt0N,KACpB9Y,KAAKgtO,gBAAgB7zO,KAAKi0O,GAG/BA,EAAO7nB,OACFvlN,KAAKitO,gBAAgB9zO,KAAKi0O,IAKnCptO,KAAK6sO,cAAc1zO,KAAKi0O,EAAO37I,OAC/BzxF,KAAKktO,cAAgBE,EAAO9hB,MAAMjpI,WAOR,UAAtB+qJ,EAAO37I,MAAMp6F,OACf2I,KAAK8sO,WAAaM,EAAO37I,MACzBzxF,KAAK+sO,aAAa5zO,KAAKi0O,EAAO9hB,aAEN,UAAtB8hB,EAAO37I,MAAMp6F,OACf2I,KAAKqtO,WAAaD,EAAO37I,MACzBzxF,KAAK+sO,aAAavjI,QAAQ4jI,EAAO9hB,SAErC,CACF,EACAge,GAAelqO,UAAY,IAAI27H,GAC/BuuG,GAAelqO,UAAU+rH,MAAQ,SAAUs8F,GACzC,IAOE6lB,EACA5L,EACAj1F,EAEA1uI,EAXE4a,EAAS,EACX4pF,EAAQ,CACNmvC,SAAU,GACV67F,eAAgB,CAAC,EACjBxzO,SAAU,GACVioJ,KAAM,CAAC,GAKT/9D,EAAmB,EAErB,GAAIjkF,KAAK6sO,cAAcxuO,OAAS2B,KAAK0sO,eAAgB,CACnD,GAAoB,uBAAhBjlB,GAAwD,uBAAhBA,EAI1C,OACK,GAAIznN,KAAK4sO,YAGd,OACK,GAAkC,IAA9B5sO,KAAK6sO,cAAcxuO,OAY5B,OALA2B,KAAKmtO,qBACDntO,KAAKmtO,eAAiBntO,KAAK0sO,iBAC7B1sO,KAAKk7H,QAAQ,QACbl7H,KAAKmtO,cAAgB,GAI3B,CAYA,GAXIntO,KAAK8sO,YACP7oJ,EAAmBjkF,KAAK8sO,WAAWpb,kBAAkBrD,IACrD2b,GAAiBrxO,SAAQ,SAAUk7D,GACjC0uC,EAAMy/C,KAAKnuF,GAAQ7zD,KAAK8sO,WAAWj5K,EACrC,GAAG7zD,OACMA,KAAKqtO,aACdppJ,EAAmBjkF,KAAKqtO,WAAW3b,kBAAkBrD,IACrD0b,GAAiBpxO,SAAQ,SAAUk7D,GACjC0uC,EAAMy/C,KAAKnuF,GAAQ7zD,KAAKqtO,WAAWx5K,EACrC,GAAG7zD,OAEDA,KAAK8sO,YAAc9sO,KAAKqtO,WAAY,CAgBtC,IAfkC,IAA9BrtO,KAAK6sO,cAAcxuO,OACrBkkG,EAAMlrG,KAAO2I,KAAK6sO,cAAc,GAAGx1O,KAEnCkrG,EAAMlrG,KAAO,WAEf2I,KAAKmtO,eAAiBntO,KAAK6sO,cAAcxuO,OACzCouI,EAActG,GAAIsG,YAAYzsI,KAAK6sO,eAEnCtqI,EAAMkqC,YAAc,IAAI10I,WAAW00I,EAAYpqD,YAG/CkgB,EAAMkqC,YAAY9rI,IAAI8rI,GAEtBlqC,EAAM5lG,KAAO,IAAI5E,WAAWiI,KAAKktO,cAE5BnvO,EAAI,EAAGA,EAAIiC,KAAK+sO,aAAa1uO,OAAQN,IACxCwkG,EAAM5lG,KAAKgE,IAAIX,KAAK+sO,aAAahvO,GAAI4a,GACrCA,GAAU3Y,KAAK+sO,aAAahvO,GAAGskF,WAIjC,IAAKtkF,EAAI,EAAGA,EAAIiC,KAAKgtO,gBAAgB3uO,OAAQN,KAC3CuvO,EAAUttO,KAAKgtO,gBAAgBjvO,IACvBu5H,UAAYqyG,GAAM/lJ,oBAAoB0pJ,EAAQlX,SAAUnyI,EAAkBjkF,KAAKkkF,wBACvFopJ,EAAQtxE,QAAU2tE,GAAM/lJ,oBAAoB0pJ,EAAQlT,OAAQn2I,EAAkBjkF,KAAKkkF,wBACnFqe,EAAMgrI,eAAeD,EAAQ1jB,SAAU,EACvCrnH,EAAMmvC,SAASv4I,KAAKm0O,GAItB,IAAKvvO,EAAI,EAAGA,EAAIiC,KAAKitO,gBAAgB5uO,OAAQN,KAC3C2jO,EAAM1hO,KAAKitO,gBAAgBlvO,IACvBunN,QAAUqkB,GAAM/lJ,oBAAoB89I,EAAIrT,IAAKpqI,EAAkBjkF,KAAKkkF,wBACxEqe,EAAMxoG,SAASZ,KAAKuoO,GAoBtB,IAhBAn/H,EAAMxoG,SAAS4nO,aAAe3hO,KAAKgiO,eAAeL,aAElD3hO,KAAK6sO,cAAcxuO,OAAS,EAC5B2B,KAAK8sO,WAAa,KAClB9sO,KAAK+sO,aAAa1uO,OAAS,EAC3B2B,KAAKgtO,gBAAgB3uO,OAAS,EAC9B2B,KAAKktO,aAAe,EACpBltO,KAAKitO,gBAAgB5uO,OAAS,EAI9B2B,KAAKk7H,QAAQ,OAAQ34B,GAKhBxkG,EAAI,EAAGA,EAAIwkG,EAAMmvC,SAASrzI,OAAQN,IACrCuvO,EAAU/qI,EAAMmvC,SAAS3zI,GACzBiC,KAAKk7H,QAAQ,UAAWoyG,GAM1B,IAAKvvO,EAAI,EAAGA,EAAIwkG,EAAMxoG,SAASsE,OAAQN,IACrC2jO,EAAMn/H,EAAMxoG,SAASgE,GACrBiC,KAAKk7H,QAAQ,WAAYwmG,EAE7B,CAEI1hO,KAAKmtO,eAAiBntO,KAAK0sO,iBAC7B1sO,KAAKk7H,QAAQ,QACbl7H,KAAKmtO,cAAgB,EAEzB,EACA7D,GAAelqO,UAAUouO,SAAW,SAAUjoG,GAC5CvlI,KAAK4sO,YAAcrnG,CACrB,GAQA8jG,GAAa,SAAU/vO,GACrB,IAEEwzO,EACAO,EAHE1rJ,EAAO3hF,KACTytO,GAAa,EAGfpE,GAAWjqO,UAAUooN,KAAK3oN,KAAKmB,MAC/B1G,EAAUA,GAAW,CAAC,EACtB0G,KAAK+sN,oBAAsBzzN,EAAQyzN,qBAAuB,EAC1D/sN,KAAK0tO,kBAAoB,CAAC,EAC1B1tO,KAAK2tO,iBAAmB,WACtB,IAAIvD,EAAW,CAAC,EAChBpqO,KAAK0tO,kBAAoBtD,EACzBA,EAAS/yO,KAAO,MAChB+yO,EAASpI,eAAiB,IAAI0H,GAAK5J,eAEnCsK,EAASwD,UAAY,IAAI/D,GACzBO,EAASyD,6BAA+B,IAAInE,GAAK1J,wBAAwB,SACzEoK,EAAS0D,qCAAuC,IAAIpE,GAAK1J,wBAAwB,kBACjFoK,EAAS2D,WAAa,IAAInE,GAC1BQ,EAAS4D,eAAiB,IAAI1E,GAAehwO,EAAS8wO,EAASpI,gBAC/DoI,EAAS6D,eAAiB7D,EAASwD,UACnCxD,EAASwD,UAAUpyG,KAAK4uG,EAASyD,8BAA8BryG,KAAK4uG,EAAS2D,YAC7E3D,EAASwD,UAAUpyG,KAAK4uG,EAAS0D,sCAAsCtyG,KAAK4uG,EAASpI,gBAAgBxmG,KAAK4uG,EAAS4D,gBACnH5D,EAASpI,eAAehnG,GAAG,aAAa,SAAUmzF,GAChDic,EAASwD,UAAU5E,aAAa7a,EAAMxyH,UACxC,IACAyuI,EAASwD,UAAU5yG,GAAG,QAAQ,SAAUr+H,GACpB,mBAAdA,EAAKtF,MAA2C,UAAdsF,EAAKtF,MAAoB+yO,EAAS8D,qBAGxEb,EAAaA,GAAc,CACzB3b,kBAAmB,CACjB3E,oBAAqBprI,EAAKorI,qBAE5BjmF,MAAO,OACPzvI,KAAM,SAGR+yO,EAAS4D,eAAetB,iBACxBtC,EAAS8D,mBAAqB,IAAI9E,GAAmBiE,EAAY/zO,GACjE8wO,EAAS8D,mBAAmBlzG,GAAG,MAAOr5C,EAAKwsJ,eAAe,uBAC1D/D,EAAS8D,mBAAmBlzG,GAAG,aAAcr5C,EAAKu5C,QAAQn8H,KAAK4iF,EAAM,oBAErEyoJ,EAAS2D,WAAWvyG,KAAK4uG,EAAS8D,oBAAoB1yG,KAAK4uG,EAAS4D,gBAEpErsJ,EAAKu5C,QAAQ,YAAa,CACxBkzG,WAAYf,EACZgB,WAAYvB,IAEhB,IAEA1C,EAAS4D,eAAehzG,GAAG,OAAQh7H,KAAKk7H,QAAQn8H,KAAKiB,KAAM,SAE3DoqO,EAAS4D,eAAehzG,GAAG,OAAQh7H,KAAKk7H,QAAQn8H,KAAKiB,KAAM,SAC3DkqO,GAAyBlqO,KAAMoqO,EACjC,EACApqO,KAAKsuO,gBAAkB,WACrB,IAAIlE,EAAW,CAAC,EAChBpqO,KAAK0tO,kBAAoBtD,EACzBA,EAAS/yO,KAAO,KAChB+yO,EAASpI,eAAiB,IAAI0H,GAAK5J,eAEnCsK,EAASmE,aAAe,IAAI7E,GAAK7H,sBACjCuI,EAAShrG,YAAc,IAAIsqG,GAAK5H,qBAChCsI,EAASoE,iBAAmB,IAAI9E,GAAK3H,iBACrCqI,EAASrK,wBAA0B,IAAI2J,GAAK1J,wBAC5CoK,EAAS2D,WAAa,IAAInE,GAC1BQ,EAASqE,WAAa,IAAIrG,GAC1BgC,EAASnL,cAAgB,IAAIyK,GAAKxK,cAAc5lO,GAChD8wO,EAAS4D,eAAiB,IAAI1E,GAAehwO,EAAS8wO,EAASpI,gBAC/DoI,EAAS6D,eAAiB7D,EAASmE,aAEnCnE,EAASmE,aAAa/yG,KAAK4uG,EAAShrG,aAAa5D,KAAK4uG,EAASoE,kBAAkBhzG,KAAK4uG,EAASrK,yBAG/FqK,EAASrK,wBAAwBvkG,KAAK4uG,EAASqE,YAC/CrE,EAASrK,wBAAwBvkG,KAAK4uG,EAAS2D,YAC/C3D,EAASrK,wBAAwBvkG,KAAK4uG,EAASpI,gBAAgBxmG,KAAK4uG,EAAS4D,gBAE7E5D,EAASqE,WAAWjzG,KAAK4uG,EAASnL,eAAezjG,KAAK4uG,EAAS4D,gBAC/D5D,EAASoE,iBAAiBxzG,GAAG,QAAQ,SAAUr+H,GAC7C,IAAIoB,EACJ,GAAkB,aAAdpB,EAAKtF,KAAqB,CAG5B,IAFA0G,EAAIpB,EAAKwiK,OAAO9gK,OAETN,KACA+uO,GAAsC,UAAxBnwO,EAAKwiK,OAAOphK,GAAG1G,KAGtBg2O,GAAsC,UAAxB1wO,EAAKwiK,OAAOphK,GAAG1G,QACvCg2O,EAAa1wO,EAAKwiK,OAAOphK,IACd2zN,kBAAkB3E,oBAAsBprI,EAAKorI,sBAJxD+f,EAAanwO,EAAKwiK,OAAOphK,IACd2zN,kBAAkB3E,oBAAsBprI,EAAKorI,oBAOxD+f,IAAe1C,EAASsE,qBAC1BtE,EAAS4D,eAAetB,iBACxBtC,EAASsE,mBAAqB,IAAIvF,GAAmB2D,EAAYxzO,GACjE8wO,EAASsE,mBAAmB1zG,GAAG,MAAOr5C,EAAKwsJ,eAAe,uBAC1D/D,EAASsE,mBAAmB1zG,GAAG,qBAAqB,SAAU02F,GAKxD2b,IAAe/zO,EAAQ4qF,yBACzBmpJ,EAAW3b,kBAAoBA,EAK/B0Y,EAAS8D,mBAAmBvD,eAAejZ,EAAkBpD,IAAM3sI,EAAKorI,qBAE5E,IACAqd,EAASsE,mBAAmB1zG,GAAG,oBAAqBr5C,EAAKu5C,QAAQn8H,KAAK4iF,EAAM,YAC5EyoJ,EAASsE,mBAAmB1zG,GAAG,oBAAqBr5C,EAAKu5C,QAAQn8H,KAAK4iF,EAAM,2BAC5EyoJ,EAASsE,mBAAmB1zG,GAAG,uBAAuB,SAAU+xF,GAC1DsgB,GACFjD,EAAS8D,mBAAmBrD,4BAA4B9d,EAE5D,IACAqd,EAASsE,mBAAmB1zG,GAAG,aAAcr5C,EAAKu5C,QAAQn8H,KAAK4iF,EAAM,oBAErEyoJ,EAASqE,WAAWjzG,KAAK4uG,EAASsE,oBAAoBlzG,KAAK4uG,EAAS4D,iBAElEX,IAAejD,EAAS8D,qBAE1B9D,EAAS4D,eAAetB,iBACxBtC,EAAS8D,mBAAqB,IAAI9E,GAAmBiE,EAAY/zO,GACjE8wO,EAAS8D,mBAAmBlzG,GAAG,MAAOr5C,EAAKwsJ,eAAe,uBAC1D/D,EAAS8D,mBAAmBlzG,GAAG,aAAcr5C,EAAKu5C,QAAQn8H,KAAK4iF,EAAM,oBACrEyoJ,EAAS8D,mBAAmBlzG,GAAG,oBAAqBr5C,EAAKu5C,QAAQn8H,KAAK4iF,EAAM,2BAE5EyoJ,EAAS2D,WAAWvyG,KAAK4uG,EAAS8D,oBAAoB1yG,KAAK4uG,EAAS4D,iBAGtErsJ,EAAKu5C,QAAQ,YAAa,CACxBkzG,WAAYf,EACZgB,WAAYvB,GAEhB,CACF,IAEA1C,EAAS4D,eAAehzG,GAAG,OAAQh7H,KAAKk7H,QAAQn8H,KAAKiB,KAAM,SAC3DoqO,EAAS4D,eAAehzG,GAAG,YAAY,SAAU2zG,GAC/CA,EAAShN,aAAeyI,EAASpI,eAAeL,aAChDhgJ,EAAKu5C,QAAQ,WAAYyzG,EAC3B,IACAvE,EAAS4D,eAAehzG,GAAG,UAAWh7H,KAAKk7H,QAAQn8H,KAAKiB,KAAM,YAE9DoqO,EAAS4D,eAAehzG,GAAG,OAAQh7H,KAAKk7H,QAAQn8H,KAAKiB,KAAM,SAC3DkqO,GAAyBlqO,KAAMoqO,EACjC,EAEApqO,KAAK4uO,uBAAyB,SAAU7hB,GACtC,IAAIqd,EAAWpqO,KAAK0tO,kBACfp0O,EAAQ4qF,yBACXlkF,KAAK+sN,oBAAsBA,GAEzBsgB,IACFA,EAAW3b,kBAAkBpD,SAAMh0N,EACnC+yO,EAAW3b,kBAAkBrD,SAAM/zN,EACnCmvO,GAAgBnY,aAAa+b,GACzBjD,EAASyD,8BACXzD,EAASyD,6BAA6B/qG,iBAGtCgqG,IACE1C,EAASsE,qBACXtE,EAASsE,mBAAmBxD,UAAY,IAE1C4B,EAAWpb,kBAAkBpD,SAAMh0N,EACnCwyO,EAAWpb,kBAAkBrD,SAAM/zN,EACnCmvO,GAAgBnY,aAAawb,GAC7B1C,EAASnL,cAAc1+N,SAErB6pO,EAASrK,yBACXqK,EAASrK,wBAAwBj9F,eAErC,EACA9iI,KAAK8qO,oBAAsB,SAAU9mJ,GAC/BqpJ,GACFrtO,KAAK0tO,kBAAkBQ,mBAAmBpD,oBAAoB9mJ,EAElE,EACAhkF,KAAKwtO,SAAW,SAAUjoG,GACxB,IAAI6kG,EAAWpqO,KAAK0tO,kBACpBp0O,EAAQqzO,MAAQpnG,EACZ6kG,GAAYA,EAAS4D,gBACvB5D,EAAS4D,eAAeR,SAASjoG,EAErC,EACAvlI,KAAKwsO,cAAgB,SAAUxB,GACzB8B,GAAc9sO,KAAK0tO,kBAAkBgB,oBACvC1uO,KAAK0tO,kBAAkBgB,mBAAmBlC,cAAcxB,EAE5D,EACAhrO,KAAKmuO,eAAiB,SAAUp1O,GAC9B,IAAI4oF,EAAO3hF,KACX,OAAO,SAAUuiG,GACfA,EAAMqnH,OAAS7wN,EACf4oF,EAAKu5C,QAAQ,MAAO34B,EACtB,CACF,EAEAviG,KAAK7G,KAAO,SAAUwD,GACpB,GAAI8wO,EAAY,CACd,IAAIoB,EAAQtG,GAAgB5rO,GACxBkyO,GAAyC,QAAhC7uO,KAAK0tO,kBAAkBr2O,KAClC2I,KAAK2tO,mBACKkB,GAAyC,OAAhC7uO,KAAK0tO,kBAAkBr2O,MAC1C2I,KAAKsuO,kBAEPb,GAAa,CACf,CACAztO,KAAK0tO,kBAAkBO,eAAe90O,KAAKwD,EAC7C,EAEAqD,KAAKmrH,MAAQ,WACXsiH,GAAa,EAEbztO,KAAK0tO,kBAAkBO,eAAe9iH,OACxC,EACAnrH,KAAK2nN,YAAc,WACjB3nN,KAAK0tO,kBAAkBO,eAAetmB,aACxC,EACA3nN,KAAKO,MAAQ,WACPP,KAAK0tO,kBAAkBO,gBACzBjuO,KAAK0tO,kBAAkBO,eAAe1tO,OAE1C,EAEAP,KAAK8uO,cAAgB,WACf9uO,KAAK0tO,kBAAkBzO,eACzBj/N,KAAK0tO,kBAAkBzO,cAAc1+N,OAEzC,CACF,GACWnB,UAAY,IAAI27H,GAC3B,IAmOIr5C,GAokBW41C,GAAmDy3G,GAAWC,GAA6BC,GAvyBtG9E,GAAa,CACfd,WAAYA,GACZF,mBAAoBA,GACpBC,mBAAoBA,GACpBW,iBAAkBA,GAClBC,iBAAkBA,GAElBM,0BAA2BA,IAezB4E,GANe,SAAU53O,GAC3B,OAAOA,IAAU,CACnB,EAgBI63O,GARc,SAAUhtJ,GAC1B,IAAIzpF,EAAS,GAKb,OAJAA,GAAUd,OAAOC,aAAasqF,EAAO,IACrCzpF,GAAUd,OAAOC,aAAasqF,EAAO,IACrCzpF,GAAUd,OAAOC,aAAasqF,EAAO,IACrCzpF,GAAUd,OAAOC,aAAasqF,EAAO,GAEvC,EAEIitJ,GAAeF,GACfG,GAAcF,GACdG,GAAY,SAAU3yO,EAAM48H,GAC9B,IACEx7H,EACAqD,EACA/J,EACAqoF,EACA6vJ,EALEv0F,EAAU,GAMd,IAAKzhB,EAAKl7H,OAER,OAAO,KAET,IAAKN,EAAI,EAAGA,EAAIpB,EAAK0lF,YACnBjhF,EAAOguO,GAAazyO,EAAKoB,IAAM,GAAKpB,EAAKoB,EAAI,IAAM,GAAKpB,EAAKoB,EAAI,IAAM,EAAIpB,EAAKoB,EAAI,IACpF1G,EAAOg4O,GAAY1yO,EAAK4lF,SAASxkF,EAAI,EAAGA,EAAI,IAC5C2hF,EAAMt+E,EAAO,EAAIrD,EAAIqD,EAAOzE,EAAK0lF,WAC7BhrF,IAASkiI,EAAK,KACI,IAAhBA,EAAKl7H,OAGP28I,EAAQ7hJ,KAAKwD,EAAK4lF,SAASxkF,EAAI,EAAG2hF,KAGlC6vJ,EAAaD,GAAU3yO,EAAK4lF,SAASxkF,EAAI,EAAG2hF,GAAM65C,EAAKvgI,MAAM,KAC9CqF,SACb28I,EAAUA,EAAQtzC,OAAO6nI,KAI/BxxO,EAAI2hF,EAGN,OAAOs7D,CACT,EAEIw0F,GAAeN,GACfO,GAAc3lB,EAAQ9nI,UAatB0tJ,GAZO,SAAU/yO,GACnB,IAAIjE,EAAS,CACXid,QAAShZ,EAAK,GACd2lF,MAAO,IAAIvqF,WAAW4E,EAAK4lF,SAAS,EAAG,KAOzC,OALuB,IAAnB7pF,EAAOid,QACTjd,EAAOq0N,oBAAsB0iB,GAAY9yO,EAAK4lF,SAAS,IAEvD7pF,EAAOq0N,oBAAsByiB,GAAa7yO,EAAK,IAAM,GAAKA,EAAK,IAAM,GAAKA,EAAK,IAAM,EAAIA,EAAK,IAEzFjE,CACT,EAcIi3O,GAZqB,SAAUrtJ,GACjC,MAAO,CACLorI,WAAuB,GAAXprI,EAAM,MAAe,EACjCkpI,UAAsB,EAAXlpI,EAAM,GACjBmpI,cAA0B,IAAXnpI,EAAM,MAAe,EACpCopI,eAA2B,GAAXppI,EAAM,MAAe,EACrCqrI,cAA0B,GAAXrrI,EAAM,MAAe,EACpCsrI,gBAA4B,EAAXtrI,EAAM,GACvBurI,oBAAqBvrI,EAAM,IAAM,EAAIA,EAAM,GAE/C,EAmFIstJ,GAhFO,SAAUjzO,GACnB,IAqBE8wN,EArBE/0N,EAAS,CACTid,QAAShZ,EAAK,GACd2lF,MAAO,IAAIvqF,WAAW4E,EAAK4lF,SAAS,EAAG,IACvCgpI,QAAS,IAEXtpI,EAAO,IAAIC,SAASvlF,EAAKwlF,OAAQxlF,EAAKylF,WAAYzlF,EAAK0lF,YAEvDwtJ,EAAsC,EAAlBn3O,EAAO4pF,MAAM,GAEjCwtJ,EAA4C,EAAlBp3O,EAAO4pF,MAAM,GAEvCytJ,EAA0C,EAAlBr3O,EAAO4pF,MAAM,GAErC0tJ,EAAsC,EAAlBt3O,EAAO4pF,MAAM,GAEjC2tJ,EAAuC,EAAlBv3O,EAAO4pF,MAAM,GAElC4tJ,EAAuD,EAAlBx3O,EAAO4pF,MAAM,GAElD0iJ,EAAc/iJ,EAAKS,UAAU,GAC7B/pE,EAAS,EAiCX,IA/BIk3N,IAEFn3O,EAAO01N,WAAansI,EAAKkuJ,SAASx3N,GAClCA,GAAU,GAIRm3N,GAA2B9K,IAC7BvX,EAAS,CACPnrI,MAAOqtJ,GAAiBhzO,EAAK4lF,SAAS5pE,EAAQA,EAAS,KAEzDA,GAAU,EACNo3N,IACFtiB,EAAO1wF,SAAW96C,EAAKS,UAAU/pE,GACjCA,GAAU,GAERq3N,IACFviB,EAAOrsN,KAAO6gF,EAAKS,UAAU/pE,GAC7BA,GAAU,GAERu3N,IACqB,IAAnBx3O,EAAOid,QACT83M,EAAOH,sBAAwBrrI,EAAKkuJ,SAASx3N,GAE7C80M,EAAOH,sBAAwBrrI,EAAKS,UAAU/pE,GAEhDA,GAAU,GAEZjgB,EAAO6yN,QAAQpyN,KAAKs0N,GACpBuX,KAEKA,KACLvX,EAAS,CAAC,EACNsiB,IACFtiB,EAAO1wF,SAAW96C,EAAKS,UAAU/pE,GACjCA,GAAU,GAERq3N,IACFviB,EAAOrsN,KAAO6gF,EAAKS,UAAU/pE,GAC7BA,GAAU,GAERs3N,IACFxiB,EAAOnrI,MAAQqtJ,GAAiBhzO,EAAK4lF,SAAS5pE,EAAQA,EAAS,IAC/DA,GAAU,GAERu3N,IACqB,IAAnBx3O,EAAOid,QACT83M,EAAOH,sBAAwBrrI,EAAKkuJ,SAASx3N,GAE7C80M,EAAOH,sBAAwBrrI,EAAKS,UAAU/pE,GAEhDA,GAAU,GAEZjgB,EAAO6yN,QAAQpyN,KAAKs0N,GAEtB,OAAO/0N,CACT,EAgDI03O,GA9CO,SAAUzzO,GACnB,IAaEoB,EAbEkkF,EAAO,IAAIC,SAASvlF,EAAKwlF,OAAQxlF,EAAKylF,WAAYzlF,EAAK0lF,YACzD3pF,EAAS,CACPid,QAAShZ,EAAK,GACd2lF,MAAO,IAAIvqF,WAAW4E,EAAK4lF,SAAS,EAAG,IACvCqhJ,QAAS3hJ,EAAKS,UAAU,IAE1B2tJ,EAA0C,EAAlB33O,EAAO4pF,MAAM,GACrCguJ,EAAkD,EAAlB53O,EAAO4pF,MAAM,GAC7CiuJ,EAAiD,EAAlB73O,EAAO4pF,MAAM,GAC5CkuJ,EAA6C,GAAlB93O,EAAO4pF,MAAM,GACxCmuJ,EAA8C,GAAlB/3O,EAAO4pF,MAAM,GACzCouJ,EAAoC,MAAlBh4O,EAAO4pF,MAAM,GAC/BquJ,EAAsC,OAAlBj4O,EAAO4pF,MAAM,GA+BnC,OA7BAvkF,EAAI,EACAsyO,IACFtyO,GAAK,EAGLrF,EAAO02N,eAAiBntI,EAAKS,UAAU,IACvC3kF,GAAK,GAEHuyO,IACF53O,EAAOk4O,uBAAyB3uJ,EAAKS,UAAU3kF,GAC/CA,GAAK,GAEHwyO,IACF73O,EAAOm4O,sBAAwB5uJ,EAAKS,UAAU3kF,GAC9CA,GAAK,GAEHyyO,IACF93O,EAAOo4O,kBAAoB7uJ,EAAKS,UAAU3kF,GAC1CA,GAAK,GAEH0yO,IACF/3O,EAAOq4O,mBAAqB9uJ,EAAKS,UAAU3kF,IAEzC2yO,IACFh4O,EAAOg4O,iBAAkB,IAEtBL,GAAyBM,IAC5Bj4O,EAAOs4O,sBAAuB,GAEzBt4O,CACT,EAuBI2lJ,IAnBF38D,GADoB,qBAAXxrF,OACHA,OAC6B,qBAAnBmxN,EACVA,EACmB,qBAAT1lI,KACVA,KAEA,CAAC,EAa6BiwI,GAAoBvzE,iCACtD6gF,GAAgBD,GAAcC,cAC9B+R,GApLY3B,GAqLZ4B,GAAcxB,GACdyB,GAAcvB,GACdwB,GAAchB,GACdiB,GAjBW3vJ,GA6BX4vJ,GAAc,SAAU34N,EAAQ4yM,GAElC,IADA,IAAIgmB,EAAoB54N,EACf5a,EAAI,EAAGA,EAAIwtN,EAAQltN,OAAQN,IAAK,CACvC,IAAI0vN,EAASlC,EAAQxtN,GACrB,GAAIwzO,EAAoB9jB,EAAOrsN,KAC7B,OAAOqsN,EAET8jB,GAAqB9jB,EAAOrsN,IAC9B,CACA,OAAO,IACT,EA6HIowO,GAAmB,SAAUnzG,EAASozG,GAExC,IAAIC,EAAQT,GAAU5yG,EAAS,CAAC,OAAQ,SAEpCszG,EAAQV,GAAU5yG,EAAS,CAAC,SAC5BuzG,EAAc,CAAC,EACfC,EAAgB,GAoCpB,OAlCAF,EAAMh5O,SAAQ,SAAUovN,EAAMlvN,GAC5B,IAAIi5O,EAAeJ,EAAM74O,GACzBg5O,EAAc14O,KAAK,CACjB4uN,KAAMA,EACNa,KAAMkpB,GAEV,IACAD,EAAcl5O,SAAQ,SAAUo5O,GAC9B,IAUIxmB,EACA7yN,EAXAqvN,EAAOgqB,EAAKhqB,KACZa,EAAOmpB,EAAKnpB,KACZgC,EAAOqmB,GAAUroB,EAAM,CAAC,SAExBopB,EAAaZ,GAAYxmB,EAAK,IAC9BgZ,EAAUoO,EAAWpO,QACrBjZ,EAAOsmB,GAAUroB,EAAM,CAAC,SAExBmE,EAAsBpC,EAAKtsN,OAAS,EAAI6yO,GAAYvmB,EAAK,IAAIoC,oBAAsB,EACnFklB,EAAQhB,GAAUroB,EAAM,CAAC,SAIzB6oB,IAAiB7N,GAAWqO,EAAM5zO,OAAS,IAC7CktN,EA3Ea,SAAU0mB,EAAOllB,EAAqBnC,GACvD,IAAIoc,EAAaja,EACb8jB,EAAwBjmB,EAAKimB,uBAAyB,EACtDC,EAAoBlmB,EAAKkmB,mBAAqB,EAC9ClN,EAAUhZ,EAAKgZ,QACfsO,EAAa,GA6BjB,OA5BAD,EAAMt5O,SAAQ,SAAUkyN,GAItB,IACIU,EADW4lB,GAAYtmB,GACJU,QACvBA,EAAQ5yN,SAAQ,SAAU80N,QACAnzN,IAApBmzN,EAAO1wF,WACT0wF,EAAO1wF,SAAW8zG,QAEAv2O,IAAhBmzN,EAAOrsN,OACTqsN,EAAOrsN,KAAO0vO,GAEhBrjB,EAAOmW,QAAUA,EACjBnW,EAAOa,IAAM0Y,OACwB1sO,IAAjCmzN,EAAOH,wBACTG,EAAOH,sBAAwB,GAEP,kBAAf0Z,GACTvZ,EAAOY,IAAM2Y,EAAaqK,GAAS/oG,OAAOmlF,EAAOH,uBACjD0Z,GAAcqK,GAAS/oG,OAAOmlF,EAAO1wF,YAErC0wF,EAAOY,IAAM2Y,EAAavZ,EAAOH,sBACjC0Z,GAAcvZ,EAAO1wF,SAEzB,IACAm1G,EAAaA,EAAWxqI,OAAO6jH,EACjC,IACO2mB,CACT,CAwCgBC,CAAaF,EAAOllB,EAAqBilB,GACnDt5O,EA5IY,SAAU05O,EAAW7mB,EAASqY,GAC9C,IAKEyO,EACAt0O,EACAM,EACAi0O,EAREC,EAAU,IAAIrwJ,SAASkwJ,EAAUjwJ,OAAQiwJ,EAAUhwJ,WAAYgwJ,EAAU/vJ,YAC3E3pF,EAAS,CACP85O,KAAM,GACNC,QAAS,IAMb,IAAK10O,EAAI,EAAGA,EAAI,EAAIq0O,EAAU/zO,OAAQN,GAAKM,EAIzC,GAHAA,EAASk0O,EAAQ7vJ,UAAU3kF,GAC3BA,GAAK,IAEDM,GAAU,GAGd,OAAuB,GAAf+zO,EAAUr0O,IAChB,KAAK,EACH,IAAIpB,EAAOy1O,EAAU7vJ,SAASxkF,EAAI,EAAGA,EAAI,EAAIM,GACzCq0O,EAAiBpB,GAAYvzO,EAAGwtN,GAQpC,GAPA8mB,EAAS,CACPvjB,YAAa,WACb1tN,KAAM/C,EACN1B,KAAMA,EACNu2N,YAAa70E,GAAgC1hJ,GAC7CinO,QAASA,GAEP8O,EACFL,EAAOhkB,IAAMqkB,EAAerkB,IAC5BgkB,EAAO/jB,IAAMokB,EAAepkB,IAC5BgkB,EAAoBI,MACf,KAAIJ,EAKJ,CACL55O,EAAO85O,KAAKr5O,KAAK,CACfsoJ,MAAO,OACPpzI,QAAS,gDAAmDtQ,EAAI,gBAAkB6lO,EAAU,sBAE9F,KACF,CAREyO,EAAOhkB,IAAMikB,EAAkBjkB,IAC/BgkB,EAAO/jB,IAAMgkB,EAAkBhkB,GAOjC,CACA51N,EAAO+5O,QAAQt5O,KAAKk5O,GAI1B,OAAO35O,CACT,CA2Fei6O,CAAY5qB,EAAMwD,EAASqY,GAC/BgO,EAAYhO,KACfgO,EAAYhO,GAAW,CACrB6O,QAAS,GACTD,KAAM,KAGVZ,EAAYhO,GAAS6O,QAAUb,EAAYhO,GAAS6O,QAAQ/qI,OAAOhvG,EAAO+5O,SAC1Eb,EAAYhO,GAAS4O,KAAOZ,EAAYhO,GAAS4O,KAAK9qI,OAAOhvG,EAAO85O,MAExE,IACOZ,CACT,EAmOIgB,GA5LgB,WAClB,IACI3T,EAEA4T,EAEAjP,EAEAjhJ,EAEAmwJ,EAEAC,EAXAC,GAAgB,EAiBpBhzO,KAAKgzO,cAAgB,WACnB,OAAOA,CACT,EAMAhzO,KAAKwnN,KAAO,SAAUluN,GACpB2lO,EAAgB,IAAIC,GACpB8T,GAAgB,EAChBD,IAAiBz5O,GAAUA,EAAQ25O,UAEnChU,EAAcjkG,GAAG,QAAQ,SAAUz4B,GAEjCA,EAAM+0B,UAAY/0B,EAAM6zH,SAAWzzI,EACnC4f,EAAMy5D,QAAUz5D,EAAM63H,OAASz3I,EAC/BmwJ,EAAephG,SAASv4I,KAAKopG,GAC7BuwI,EAAevF,eAAehrI,EAAMqnH,SAAU,CAChD,IACAqV,EAAcjkG,GAAG,OAAO,SAAUhlC,GAChC88I,EAAeN,KAAKr5O,KAAK68F,EAC3B,GACF,EAOAh2F,KAAKkzO,UAAY,SAAUC,EAAeC,GACxC,QAAID,GAA0C,IAAzBA,EAAc90O,QAAgB+0O,GAAoC,kBAAfA,GAA8D,IAAnCj0O,OAAO0M,KAAKunO,GAAY/0O,UAGpHulO,IAAYuP,EAAc,IAAMxwJ,IAAcywJ,EAAWxP,GAClE,EAYA5jO,KAAK/E,MAAQ,SAAUojI,EAAS80G,EAAeC,GAC7C,IAAIC,EACJ,IAAKrzO,KAAKgzO,gBACR,OAAO,KACF,IAAKG,IAAkBC,EAC5B,OAAO,KACF,GAAIpzO,KAAKkzO,UAAUC,EAAeC,GAGvCxP,EAAUuP,EAAc,GACxBxwJ,EAAYywJ,EAAWxP,QAGlB,GAAgB,OAAZA,IAAqBjhJ,EAE9B,OADAkwJ,EAAa15O,KAAKklI,GACX,KAGT,KAAOw0G,EAAax0O,OAAS,GAAG,CAC9B,IAAIi1O,EAAgBT,EAAa75I,QACjCh5F,KAAK/E,MAAMq4O,EAAeH,EAAeC,EAC3C,CAKA,OAJAC,EAzGwB,SAAUh1G,EAASulG,EAASjhJ,GAGtD,GAAgB,OAAZihJ,EACF,OAAO,KAGT,IAAI2P,EADU/B,GAAiBnzG,EAASulG,GACZA,IAAY,CAAC,EACzC,MAAO,CACL6O,QAASc,EAAUd,QACnBD,KAAMe,EAAUf,KAChB7vJ,UAAWA,EAEf,CA4FiB6wJ,CAAsBn1G,EAASulG,EAASjhJ,GACjD0wJ,GAAcA,EAAWb,OAC3BM,EAAeN,KAAOM,EAAeN,KAAK9qI,OAAO2rI,EAAWb,OAE3C,OAAfa,GAAwBA,EAAWZ,SAUvCzyO,KAAKyzO,SAASJ,EAAWZ,SAEzBzyO,KAAKwzN,cACEsf,GAZDA,EAAeN,KAAKn0O,OACf,CACLm0O,KAAMM,EAAeN,KACrB9gG,SAAU,GACV67F,eAAgB,IAGb,IAMX,EAQAvtO,KAAKyzO,SAAW,SAAUC,GACxB,IAAK1zO,KAAKgzO,kBAAoBU,GAAwB,IAAhBA,EAAKr1O,OACzC,OAAO,KAETq1O,EAAK/6O,SAAQ,SAAUg7O,GACrB1U,EAAc9lO,KAAKw6O,EACrB,GACF,EAMA3zO,KAAKwzN,YAAc,WACjB,IAAKxzN,KAAKgzO,gBACR,OAAO,KAEJD,EAGH9T,EAAcvX,eAFduX,EAAc9zG,OAIlB,EAKAnrH,KAAK4zO,oBAAsB,WACzBd,EAAephG,SAAW,GAC1BohG,EAAevF,eAAiB,CAAC,EACjCuF,EAAeN,KAAO,EACxB,EAMAxyO,KAAK6zO,mBAAqB,WACxB,IAAK7zO,KAAKgzO,gBACR,OAAO,KAET/T,EAAc1+N,OAChB,EAOAP,KAAK8zO,iBAAmB,WACtB9zO,KAAK4zO,sBACL5zO,KAAK6zO,oBACP,EAKA7zO,KAAKO,MAAQ,WACXsyO,EAAe,GACfjP,EAAU,KACVjhJ,EAAY,KACPmwJ,EAQH9yO,KAAK4zO,sBAPLd,EAAiB,CACfphG,SAAU,GAEV67F,eAAgB,CAAC,EACjBiF,KAAM,IAKVxyO,KAAK6zO,oBACP,EACA7zO,KAAKO,OACP,EAwBIwzO,GAhBmB,SAAUp3O,GAI/B,IAHA,IAAI9D,EAAQ,EACRm7O,EAAUp8O,OAAOC,aAAa8E,EAAK9D,IACnCo7O,EAAY,GACG,OAAZD,GACLC,GAAaD,EACbn7O,IACAm7O,EAAUp8O,OAAOC,aAAa8E,EAAK9D,IAIrC,OADAo7O,GAAaD,CAEf,EAKIE,GAAcpqB,EAAQ9nI,UA+EtBmyJ,GAAiB,SAAUx+N,EAASy+N,GACtC,IAAIC,EAAmC,OAAvBD,EAAKE,cACjBC,EAA2B,IAAZ5+N,GAAiB6+N,GAAUJ,EAAKK,0BAA4BJ,EAC3EK,EAA2B,IAAZ/+N,GAAiB6+N,GAAUJ,EAAKO,oBAAsBN,EAEzE,QAAS1+N,EAAU,IAAM4+N,GAAgBG,CAC3C,EAEIF,GAAY,SAAU73O,GACxB,YAAgBrC,IAATqC,GAA+B,OAATA,CAC/B,EACIi4O,GAAS,CACXC,aA/EiB,SAAUC,GAE3B,IAEIR,EAAeh9O,EAAOqrF,EAAWgyJ,EAAmBF,EAAyBM,EAAgBr+N,EAF7FiC,EAAS,EACThD,EAAUm/N,EAAQ,GAEtB,GAAgB,IAAZn/N,EAEFgD,IADA27N,EAAgBP,GAAee,EAAQvyJ,SAAS5pE,KACxBta,OAExBsa,IADArhB,EAAQy8O,GAAee,EAAQvyJ,SAAS5pE,KACxBta,OAEhBskF,GADI2B,EAAK,IAAIpC,SAAS4yJ,EAAQ3yJ,SACfO,UAAU/pE,GACzBA,GAAU,EACV87N,EAA0BnwJ,EAAG5B,UAAU/pE,GACvCA,GAAU,EACVo8N,EAAiBzwJ,EAAG5B,UAAU/pE,GAC9BA,GAAU,EACVjC,EAAK4tE,EAAG5B,UAAU/pE,GAClBA,GAAU,OACL,GAAgB,IAAZhD,EAAe,CACxB,IAAI2uE,EACJ3B,GADI2B,EAAK,IAAIpC,SAAS4yJ,EAAQ3yJ,SACfO,UAAU/pE,GACzBA,GAAU,EACVg8N,EAAoBT,GAAYY,EAAQvyJ,SAAS5pE,IACjDA,GAAU,EACVo8N,EAAiBzwJ,EAAG5B,UAAU/pE,GAC9BA,GAAU,EACVjC,EAAK4tE,EAAG5B,UAAU/pE,GAClBA,GAAU,EAEVA,IADA27N,EAAgBP,GAAee,EAAQvyJ,SAAS5pE,KACxBta,OAExBsa,IADArhB,EAAQy8O,GAAee,EAAQvyJ,SAAS5pE,KACxBta,MAClB,CAEA,IAAI22O,EAAU,CACZV,gBACAh9O,QAEAqrF,UAAWA,GAAwB,EACnCgyJ,oBACAF,0BACAM,iBACAr+N,KACAu+N,aAVa,IAAIl9O,WAAW+8O,EAAQvyJ,SAAS5pE,EAAQm8N,EAAQzyJ,cAY/D,OAAO8xJ,GAAex+N,EAASq/N,GAAWA,OAAU16O,CACtD,EAiCE46O,UAvBc,SAAU1oG,EAAkB7pD,EAAWwyJ,EAAWx8N,GAChE,OAAO6zH,GAAyC,IAArBA,EAAyBA,EAAmB7pD,EAAYhqE,EAASw8N,EAAYxyJ,CAC1G,GAgCIyyJ,GAAalG,GACbmG,GA5wBgB,SAAU/9O,GAC5B,OAAQ,KAAOA,EAAM+H,SAAS,KAAKrG,OAAO,EAC5C,EA2wBI6iJ,GA1tBYyzF,GA2tBZgG,GAAcnG,GACdiF,GAAOQ,GACPW,GAAYnF,GACZoF,GAAY5F,GACZ6F,GAAY/F,GACZ1tJ,GAAY8nI,EAAQ9nI,UAEpB+/D,GA3jBWrgE,GA4jBX0/I,GAAiBD,GAASC,eA4D9B9pG,GAAY,SAAU30C,EAAWs3C,GAC/B,IAIIy7G,EAFI75F,GAAQ5hB,EAAU,CAAC,OAAQ,SAEZ/iI,QAAO,SAAUwlI,EAAKksF,GAC3C,IAQI+sB,EARA/qB,EAAO/uE,GAAQ+sE,EAAM,CAAC,SAAS,GAE/BlyM,EAAK0+N,GAAWxqB,EAAK,IAAM,GAAKA,EAAK,IAAM,GAAKA,EAAK,IAAM,EAAIA,EAAK,IAEpEgrB,EAAQjzJ,EAAUjsE,IAAO,IAEzBi0M,EAAO9uE,GAAQ+sE,EAAM,CAAC,SAAS,GAC/BtkI,EAAK,IAAIpC,SAASyoI,EAAKxoI,OAAQwoI,EAAKvoI,WAAYuoI,EAAKtoI,YASzD,IAAIyB,EAYJ,MAXwB,kBANtB6xJ,EADc,IAAZhrB,EAAK,GACI3oI,GAAU2oI,EAAKpoI,SAAS,EAAG,KAE3B+B,EAAG5B,UAAU,IAKxBoB,EAAU6xJ,EAAW5zF,GAASzZ,OAAOstG,GACR,kBAAbD,GAA0BxtJ,MAAMwtJ,KAChD7xJ,EAAU6xJ,EAAWC,GAEnB9xJ,EAAUU,OAAOC,mBACnBX,EAAUU,OAAOV,IAEfA,EAAU44C,IACZA,EAAM54C,GAED44C,CACT,GAAG7Z,KACH,MAA6B,kBAAf6yH,GAA2B9zG,SAAS8zG,GAAcA,EAAa,CAC/E,EAgGA1G,GAA8B,SAAUzmB,GAEtC,IACI1vN,EAAoB,IADV0vN,EAAK,GACS,GAAK,GACjC,OAAO6sB,GAAW7sB,EAAK1vN,IAAU,GAAK0vN,EAAK1vN,EAAQ,IAAM,GAAK0vN,EAAK1vN,EAAQ,IAAM,EAAI0vN,EAAK1vN,EAAQ,GACpG,EAMAk2O,GAAY,SAAUvnB,GACpB,IAAIquB,EAAQh6F,GAAQ2rE,EAAM,CAAC,OAAQ,SAC/BroD,EAAS,GA6Eb,OA5EA02E,EAAMl9O,SAAQ,SAAUyvN,GACtB,IAEInmI,EAAM6zJ,EAFNrkJ,EAAQ,CAAC,EACT42H,EAAOxsE,GAAQusE,EAAM,CAAC,SAAS,GAG/BC,IAEFytB,GADA7zJ,EAAO,IAAIC,SAASmmI,EAAKlmI,OAAQkmI,EAAKjmI,WAAYimI,EAAKhmI,aACpC0zJ,SAAS,GAC5BtkJ,EAAM/6E,GAAqB,IAAhBo/N,EAAoB7zJ,EAAKS,UAAU,IAAMT,EAAKS,UAAU,KAErE,IAAI8lI,EAAO3sE,GAAQusE,EAAM,CAAC,OAAQ,SAAS,GAE3C,GAAII,EAAM,CACR,IAAInxN,EAAOi+O,GAAY9sB,EAAKjmI,SAAS,EAAG,KAEtCkP,EAAMp6F,KADK,SAATA,EACW,QACK,SAATA,EACI,QAEAA,CAEjB,CAEA,IAAIsxN,EAAO9sE,GAAQusE,EAAM,CAAC,OAAQ,OAAQ,OAAQ,SAAS,GAC3D,GAAIO,EAAM,CACR,IAAIqtB,EAAqBrtB,EAAKpmI,SAAS,GAEvCkP,EAAMq1C,MAAQwuG,GAAYU,EAAmBzzJ,SAAS,EAAG,IACzD,IACI0zJ,EADAC,EAAWr6F,GAAQm6F,EAAoB,CAACvkJ,EAAMq1C,QAAQ,GAEtDovG,IAEE,kBAAkBz2O,KAAKgyF,EAAMq1C,QAG/BmvG,EAAcC,EAAS3zJ,SAAS,IAER,SADN+yJ,GAAYW,EAAY1zJ,SAAS,EAAG,KACpB0zJ,EAAY53O,OAAS,IACrDozF,EAAMq1C,OAAS,IAGfr1C,EAAMq1C,OAASuuG,GAAYY,EAAY,IAEvCxkJ,EAAMq1C,OAASuuG,GAAYY,EAAY,KAEvCxkJ,EAAMq1C,OAASuuG,GAAYY,EAAY,MAIvCxkJ,EAAMq1C,MAAQ,eAEP,cAAcrnI,KAAKgyF,EAAMq1C,QAElCmvG,EAAcC,EAAS3zJ,SAAS,IAER,SADN+yJ,GAAYW,EAAY1zJ,SAAS,EAAG,KACpB0zJ,EAAY53O,OAAS,IAA0B,IAApB43O,EAAY,KACvExkJ,EAAMq1C,OAAS,IAAMuuG,GAAYY,EAAY,KAE7CxkJ,EAAMq1C,OAAS,IAAMuuG,GAAYY,EAAY,MAAQ,EAAI,IAAM1wO,QAAQ,KAAM,KAI7EksF,EAAMq1C,MAAQ,aAIhBr1C,EAAMq1C,MAAQr1C,EAAMq1C,MAAM9vI,cAGhC,CACA,IAAIuxN,EAAO1sE,GAAQusE,EAAM,CAAC,OAAQ,SAAS,GACvCG,IACF92H,EAAM9O,UAAYqsJ,GAA4BzmB,IAEhDppD,EAAOhmK,KAAKs4F,EACd,IACO0tE,CACT,EAYA8vE,GAAa,SAAUkH,GAAyB,IAAZx9N,EAAM1O,UAAA5L,OAAA,QAAA/D,IAAA2P,UAAA,GAAAA,UAAA,GAAG,EAE3C,OADgB4xI,GAAQs6F,EAAa,CAAC,SACrB9/N,KAAI1Z,IACnB,IAAIy5O,EAAYhC,GAAKS,aAAa,IAAI98O,WAAW4E,IAC7C05O,EAAkBjV,GAAegV,EAAUnB,cAC/C,MAAO,CACL3vB,QAAS8uB,GAAKc,UAAUkB,EAAUzB,kBAAmByB,EAAUzzJ,UAAWyzJ,EAAU3B,wBAAyB97N,GAC7GokH,SAAUq3G,GAAKc,UAAUkB,EAAUrB,eAAgBqB,EAAUzzJ,WAC7D4iI,OAAQ8wB,EACT,GAEL,EACA,IAAIC,GAKSh/G,GALTg/G,GAQMvH,GARNuH,GAUUrH,GAWVsH,GAAgBpX,GAChBqX,GAAW,SAAU7iB,GACvB,IAAIwP,EAAkB,GAAZxP,EAAO,GAGjB,OAFAwP,IAAQ,EACRA,GAAOxP,EAAO,EAEhB,EACI8iB,GAAiC,SAAU9iB,GAC7C,SAAsB,GAAZA,EAAO,GACnB,EACI+iB,GAAqB,SAAU/iB,GACjC,IAAIh7M,EAAS,EASb,OAHiB,GAAZg7M,EAAO,MAAe,EAAI,IAC7Bh7M,GAAUg7M,EAAO,GAAK,GAEjBh7M,CACT,EAyHIg+N,GAAmB,SAAUt/O,GAC/B,OAAQA,GACN,KAAK,EACH,MAAO,4CACT,KAAK,EACH,MAAO,WACT,KAAK,EACH,MAAO,yBACT,KAAK,EACH,MAAO,yBACT,KAAK,EACH,MAAO,6BACT,QACE,OAAO,KAEb,EA0EIu/O,GAAU,CACZjO,UAlNc,SAAUhV,EAAQqP,GAChC,IAAIG,EAAMqT,GAAS7iB,GACnB,OAAY,IAARwP,EACK,MACEA,IAAQH,EACV,MACEA,EACF,MAEF,IACT,EAyMER,SAxMa,SAAU7O,GACvB,IAAIkjB,EAAOJ,GAA+B9iB,GACtCh7M,EAAS,EAAI+9N,GAAmB/iB,GAIpC,OAHIkjB,IACFl+N,GAAUg7M,EAAOh7M,GAAU,IAEC,GAAtBg7M,EAAOh7M,EAAS,MAAe,EAAIg7M,EAAOh7M,EAAS,GAC7D,EAkME8pN,SAjMa,SAAU9O,GACvB,IAAIgP,EAAkB,CAAC,EACnBkU,EAAOJ,GAA+B9iB,GACtCmjB,EAAgB,EAAIJ,GAAmB/iB,GAS3C,GARIkjB,IACFC,GAAiBnjB,EAAOmjB,GAAiB,GAOT,EAA5BnjB,EAAOmjB,EAAgB,GAA7B,CAGA,IAAmB5T,EAGnBA,EAAW,IADkC,GAA5BvP,EAAOmjB,EAAgB,KAAc,EAAInjB,EAAOmjB,EAAgB,IAClD,EAM/B,IADA,IAAIn+N,EAAS,KAFqC,GAA7Bg7M,EAAOmjB,EAAgB,MAAe,EAAInjB,EAAOmjB,EAAgB,KAG/En+N,EAASuqN,GAAU,CACxB,IAAInlO,EAAI+4O,EAAgBn+N,EAExBgqN,GAAiC,GAAhBhP,EAAO51N,EAAI,KAAc,EAAI41N,EAAO51N,EAAI,IAAM41N,EAAO51N,GAGtE4a,GAA0D,IAA9B,GAAhBg7M,EAAO51N,EAAI,KAAc,EAAI41N,EAAO51N,EAAI,GACtD,CACA,OAAO4kO,CAlBP,CAmBF,EAiKE8T,+BAAgCA,GAChCM,aAjKiB,SAAUpjB,EAAQgP,GAGnC,OADWA,EADD6T,GAAS7iB,KAGjB,KAAK4iB,GAAcnX,iBACjB,MAAO,QACT,KAAKmX,GAAclX,iBACjB,MAAO,QACT,KAAKkX,GAAcjX,qBACjB,MAAO,iBACT,QACE,OAAO,KAEb,EAqJE0X,aApJiB,SAAUrjB,GAE3B,IADW8iB,GAA+B9iB,GAExC,OAAO,KAET,IAAIh7M,EAAS,EAAI+9N,GAAmB/iB,GACpC,GAAIh7M,GAAUg7M,EAAOtxI,WAWnB,OAAO,KAET,IACIyhJ,EADAD,EAAM,KAgCV,OAlBkB,KATlBC,EAAcnQ,EAAOh7M,EAAS,OAU5BkrN,EAAM,CAAC,GAIHxV,KAA4B,GAArBsF,EAAOh7M,EAAS,KAAc,IAA4B,IAAtBg7M,EAAOh7M,EAAS,MAAe,IAA4B,IAAtBg7M,EAAOh7M,EAAS,MAAe,IAA4B,IAAtBg7M,EAAOh7M,EAAS,MAAe,GAA2B,IAAtBg7M,EAAOh7M,EAAS,OAAgB,EAC7LkrN,EAAIxV,KAAO,EAEXwV,EAAIxV,MAA8B,EAAtBsF,EAAOh7M,EAAS,OAAgB,EAE5CkrN,EAAIvV,IAAMuV,EAAIxV,IACI,GAAdyV,IACFD,EAAIvV,KAA6B,GAAtBqF,EAAOh7M,EAAS,MAAe,IAA4B,IAAtBg7M,EAAOh7M,EAAS,MAAe,IAA4B,IAAtBg7M,EAAOh7M,EAAS,MAAe,IAA4B,IAAtBg7M,EAAOh7M,EAAS,MAAe,GAA2B,IAAtBg7M,EAAOh7M,EAAS,OAAgB,EAC9LkrN,EAAIvV,KAAO,EAEXuV,EAAIvV,MAA8B,EAAtBqF,EAAOh7M,EAAS,OAAgB,IAGzCkrN,CACT,EAiGEoT,4BAhFgC,SAAUtjB,GAQ1C,IAPA,IAAIh7M,EAAS,EAAI+9N,GAAmB/iB,GAChCujB,EAAcvjB,EAAOpxI,SAAS5pE,GAC9Bw+N,EAAS,EACTC,EAAiB,EACjBC,GAAgB,EAGbD,EAAiBF,EAAY70J,WAAa,EAAG+0J,IAClD,GAAwC,IAApCF,EAAYE,EAAiB,GAAU,CAEzCD,EAASC,EAAiB,EAC1B,KACF,CAEF,KAAOD,EAASD,EAAY70J,YAG1B,OAAQ60J,EAAYC,IAClB,KAAK,EAEH,GAAgC,IAA5BD,EAAYC,EAAS,GAAU,CACjCA,GAAU,EACV,KACF,CAAO,GAAgC,IAA5BD,EAAYC,EAAS,GAAU,CACxCA,IACA,KACF,CACIC,EAAiB,IAAMD,EAAS,GAElB,8CADNR,GAAmD,GAAlCO,EAAYE,EAAiB,MAEtDC,GAAgB,GAIpB,GACEF,UAC+B,IAAxBD,EAAYC,IAAiBA,EAASD,EAAY74O,QAC3D+4O,EAAiBD,EAAS,EAC1BA,GAAU,EACV,MACF,KAAK,EAEH,GAAgC,IAA5BD,EAAYC,EAAS,IAAwC,IAA5BD,EAAYC,EAAS,GAAU,CAClEA,GAAU,EACV,KACF,CAEgB,8CADNR,GAAmD,GAAlCO,EAAYE,EAAiB,MAEtDC,GAAgB,GAElBD,EAAiBD,EAAS,EAC1BA,GAAU,EACV,MACF,QAGEA,GAAU,EAchB,OAVAD,EAAcA,EAAY30J,SAAS60J,GACnCD,GAAUC,EACVA,EAAiB,EAEbF,GAAeA,EAAY70J,WAAa,GAE1B,8CADNs0J,GAAmD,GAAlCO,EAAYE,EAAiB,MAEtDC,GAAgB,GAGbA,CACT,GAmBIC,GAAcnY,GACdc,GAAiBF,GAAwBE,eACzCsX,GAAQ,CAAC,EACbA,GAAMz3F,GAAK82F,GACXW,GAAMn4F,IAAMy+D,GACZ,IAAIh6H,GAAmBisI,GAAQjsI,iBAC3BwgJ,GAAqB,IAEvBmT,GAAY,GA6CVC,GAAiB,SAAUpvG,EAAO46F,EAAKvqO,GAUzC,IATA,IAEEi7N,EAEA+jB,EACAb,EACAc,EANEv5J,EAAa,EACf8uD,EAAWm3F,GAMTuT,GAAU,EAEP1qG,GAAY7E,EAAMhmD,YAEvB,GAAIgmD,EAAMjqD,KAAgBo5J,IAAcnvG,EAAM6E,KAAcsqG,IAAatqG,IAAa7E,EAAMhmD,WA4B5FjE,IACA8uD,QA7BA,CAIE,GAFAymF,EAAStrF,EAAM9lD,SAASnE,EAAY8uD,GAG7B,QAFAqqG,GAAMz3F,GAAG6oF,UAAUhV,EAAQsP,EAAIE,KAGlCuU,EAAUH,GAAMz3F,GAAGi3F,aAAapjB,EAAQsP,EAAI4U,OAC5ChB,EAAOU,GAAMz3F,GAAG22F,+BAA+B9iB,GAC/B,UAAZ+jB,GAAuBb,IACzBc,EAASJ,GAAMz3F,GAAGk3F,aAAarjB,MAE7BgkB,EAAOtgP,KAAO,QACdqB,EAAO6tI,MAAMptI,KAAKw+O,GAClBC,GAAU,GAKlB,GAAIA,EACF,MAEFx5J,GAAcimJ,GACdn3F,GAAYm3F,EAEd,CAWF,IAFAjmJ,GADA8uD,EAAW7E,EAAMhmD,YACOgiJ,GACxBuT,GAAU,EACHx5J,GAAc,GAEnB,GAAIiqD,EAAMjqD,KAAgBo5J,IAAcnvG,EAAM6E,KAAcsqG,IAAatqG,IAAa7E,EAAMhmD,WA4B5FjE,IACA8uD,QA7BA,CAIE,GAFAymF,EAAStrF,EAAM9lD,SAASnE,EAAY8uD,GAG7B,QAFAqqG,GAAMz3F,GAAG6oF,UAAUhV,EAAQsP,EAAIE,KAGlCuU,EAAUH,GAAMz3F,GAAGi3F,aAAapjB,EAAQsP,EAAI4U,OAC5ChB,EAAOU,GAAMz3F,GAAG22F,+BAA+B9iB,GAC/B,UAAZ+jB,GAAuBb,IACzBc,EAASJ,GAAMz3F,GAAGk3F,aAAarjB,MAE7BgkB,EAAOtgP,KAAO,QACdqB,EAAO6tI,MAAMptI,KAAKw+O,GAClBC,GAAU,GAKlB,GAAIA,EACF,MAEFx5J,GAAcimJ,GACdn3F,GAAYm3F,EAEd,CAOJ,EAOIyT,GAAiB,SAAUzvG,EAAO46F,EAAKvqO,GAiBzC,IAhBA,IAEEi7N,EAEA+jB,EACAb,EACAc,EACAxpB,EACApwN,EACA8lO,EATEzlJ,EAAa,EACf8uD,EAAWm3F,GASTuT,GAAU,EACVhpB,EAAe,CACjBjyN,KAAM,GACNyE,KAAM,GAGD8rI,EAAW7E,EAAMhmD,YAEtB,GAAIgmD,EAAMjqD,KAAgBo5J,IAAanvG,EAAM6E,KAAcsqG,GA2D3Dp5J,IACA8uD,QA5DA,CAIE,GAFAymF,EAAStrF,EAAM9lD,SAASnE,EAAY8uD,GAG7B,QAFAqqG,GAAMz3F,GAAG6oF,UAAUhV,EAAQsP,EAAIE,KAKlC,GAFAuU,EAAUH,GAAMz3F,GAAGi3F,aAAapjB,EAAQsP,EAAI4U,OAC5ChB,EAAOU,GAAMz3F,GAAG22F,+BAA+B9iB,GAC/B,UAAZ+jB,IACEb,IAASe,IACXD,EAASJ,GAAMz3F,GAAGk3F,aAAarjB,MAE7BgkB,EAAOtgP,KAAO,QACdqB,EAAO4tI,MAAMntI,KAAKw+O,GAClBC,GAAU,IAGTl/O,EAAOq/O,eAAe,CACzB,GAAIlB,GACwB,IAAtBjoB,EAAaxtN,KAAY,CAG3B,IAFA+sN,EAAQ,IAAIp2N,WAAW62N,EAAaxtN,MACpCrD,EAAI,EACG6wN,EAAajyN,KAAK0B,QACvBwlO,EAAMjV,EAAajyN,KAAKq8F,QACxBm1H,EAAMxtN,IAAIkjO,EAAK9lO,GACfA,GAAK8lO,EAAIxhJ,WAEX,GAAIk1J,GAAMz3F,GAAGm3F,4BAA4B9oB,GAAQ,CAC/C,IAAI4pB,EAAgBR,GAAMz3F,GAAGk3F,aAAa7oB,GAItC4pB,GACFr/O,EAAOq/O,cAAgBA,EACvBr/O,EAAOq/O,cAAc1gP,KAAO,SAG5B+T,QAAQC,KAAK,8RAEjB,CACAujN,EAAaxtN,KAAO,CACtB,CAEFwtN,EAAajyN,KAAKxD,KAAKw6N,GACvB/E,EAAaxtN,MAAQuyN,EAAOtxI,UAC9B,CAIN,GAAIu1J,GAAWl/O,EAAOq/O,cACpB,MAEF35J,GAAcimJ,GACdn3F,GAAYm3F,EAEd,CAWF,IAFAjmJ,GADA8uD,EAAW7E,EAAMhmD,YACOgiJ,GACxBuT,GAAU,EACHx5J,GAAc,GAEnB,GAAIiqD,EAAMjqD,KAAgBo5J,IAAanvG,EAAM6E,KAAcsqG,GA4B3Dp5J,IACA8uD,QA7BA,CAIE,GAFAymF,EAAStrF,EAAM9lD,SAASnE,EAAY8uD,GAG7B,QAFAqqG,GAAMz3F,GAAG6oF,UAAUhV,EAAQsP,EAAIE,KAGlCuU,EAAUH,GAAMz3F,GAAGi3F,aAAapjB,EAAQsP,EAAI4U,OAC5ChB,EAAOU,GAAMz3F,GAAG22F,+BAA+B9iB,GAC/B,UAAZ+jB,GAAuBb,IACzBc,EAASJ,GAAMz3F,GAAGk3F,aAAarjB,MAE7BgkB,EAAOtgP,KAAO,QACdqB,EAAO4tI,MAAMntI,KAAKw+O,GAClBC,GAAU,GAKlB,GAAIA,EACF,MAEFx5J,GAAcimJ,GACdn3F,GAAYm3F,EAEd,CAOJ,EAiII2T,GAAa,SAAU3vG,GACzB,IAAI46F,EAAM,CACRE,IAAK,KACL0U,MAAO,MAELn/O,EAAS,CAAC,EAEd,IAAK,IAAIyqO,KA5XK,SAAU96F,EAAO46F,GAK/B,IAJA,IAEEtP,EAFEv1I,EAAa,EACf8uD,EAAWm3F,GAGNn3F,EAAW7E,EAAMhmD,YAEtB,GAAIgmD,EAAMjqD,KAAgBo5J,IAAanvG,EAAM6E,KAAcsqG,GAuB3Dp5J,IACA8uD,QAxBA,CAIE,OAFAymF,EAAStrF,EAAM9lD,SAASnE,EAAY8uD,GAC7BqqG,GAAMz3F,GAAG6oF,UAAUhV,EAAQsP,EAAIE,MAEpC,IAAK,MACHF,EAAIE,IAAMoU,GAAMz3F,GAAG0iF,SAAS7O,GAC5B,MACF,IAAK,MACH,IAAIkkB,EAAQN,GAAMz3F,GAAG2iF,SAAS9O,GAC9BsP,EAAI4U,MAAQ5U,EAAI4U,OAAS,CAAC,EAC1B14O,OAAO0M,KAAKgsO,GAAOl/O,SAAQ,SAAUI,GACnCkqO,EAAI4U,MAAM9+O,GAAO8+O,EAAM9+O,EACzB,IAGJqlF,GAAcimJ,GACdn3F,GAAYm3F,EAEd,CAOJ,CA0VE4T,CAAU5vG,EAAO46F,GACDA,EAAI4U,MAAO,CACzB,GAAI5U,EAAI4U,MAAMh6O,eAAeslO,GAE3B,OADWF,EAAI4U,MAAM1U,IAEnB,KAAKmU,GAAYlY,iBACf1mO,EAAO4tI,MAAQ,GACfwxG,GAAezvG,EAAO46F,EAAKvqO,GACC,IAAxBA,EAAO4tI,MAAMjoI,eACR3F,EAAO4tI,MAEhB,MACF,KAAKgxG,GAAYjY,iBACf3mO,EAAO6tI,MAAQ,GACfkxG,GAAepvG,EAAO46F,EAAKvqO,GACC,IAAxBA,EAAO6tI,MAAMloI,eACR3F,EAAO6tI,MAKxB,CACA,OAAO7tI,CACT,EAwBIw/O,GAdU,SAAU7vG,EAAO8vG,GAC7B,IACIz/O,EAMJ,OAJEA,EAHc6+O,GAAMn4F,IAAImpF,gBAAgBlgG,GA3H1B,SAAUA,GAQ1B,IAPA,IAMEsrF,EANEikB,GAAU,EACZQ,EAAa,EACbr0J,EAAa,KACbC,EAAY,KACZq9I,EAAY,EACZ/3F,EAAY,EAEPjB,EAAMhqI,OAASirI,GAAa,GAAG,CAEpC,OADWiuG,GAAMn4F,IAAIupF,UAAUtgG,EAAOiB,IAEpC,IAAK,iBAGH,GAAIjB,EAAMhqI,OAASirI,EAAY,GAAI,CACjCsuG,GAAU,EACV,KACF,CAIA,IAHAvW,EAAYkW,GAAMn4F,IAAIkpF,gBAAgBjgG,EAAOiB,IAG7BjB,EAAMhqI,OAAQ,CAC5Bu5O,GAAU,EACV,KACF,CACkB,OAAd5zJ,IACF2vI,EAAStrF,EAAM9lD,SAAS+mD,EAAWA,EAAY+3F,GAC/Cr9I,EAAYuzJ,GAAMn4F,IAAIypF,kBAAkBlV,IAE1CrqF,GAAa+3F,EACb,MACF,IAAK,QAGH,GAAIh5F,EAAMhqI,OAASirI,EAAY,EAAG,CAChCsuG,GAAU,EACV,KACF,CAIA,IAHAvW,EAAYkW,GAAMn4F,IAAIopF,cAAcngG,EAAOiB,IAG3BjB,EAAMhqI,OAAQ,CAC5Bu5O,GAAU,EACV,KACF,CACmB,OAAf7zJ,IACF4vI,EAAStrF,EAAM9lD,SAAS+mD,EAAWA,EAAY+3F,GAC/Ct9I,EAAawzJ,GAAMn4F,IAAIwpF,gBAAgBjV,IAEzCykB,IACA9uG,GAAa+3F,EACb,MACF,QACE/3F,IAGJ,GAAIsuG,EACF,OAAO,IAEX,CACA,GAAmB,OAAf7zJ,GAAqC,OAAdC,EACzB,OAAO,KAET,IAAIq0J,EAAiBx0J,GAAmBE,EAYxC,MAXa,CACXwiD,MAAO,CAAC,CACNlvI,KAAM,QACNi3N,IAAKtqI,EACLqqI,IAAKrqI,GACJ,CACD3sF,KAAM,QACNi3N,IAAKtqI,EAAyB,KAAbo0J,EAAoBC,EACrChqB,IAAKrqI,EAAyB,KAAbo0J,EAAoBC,IAI3C,CAkDaC,CAAYjwG,GAEZ2vG,GAAW3vG,GAEjB3vI,IAAWA,EAAO6tI,OAAU7tI,EAAO4tI,QA1KnB,SAAU6O,EAAagjG,GAC5C,GAAIhjG,EAAY5O,OAAS4O,EAAY5O,MAAMloI,OAAQ,CACjD,IAAIk6O,EAAqBJ,GACS,qBAAvBI,GAAsCpwJ,MAAMowJ,MACrDA,EAAqBpjG,EAAY5O,MAAM,GAAG+nF,KAE5Cn5E,EAAY5O,MAAM5tI,SAAQ,SAAUqpJ,GAClCA,EAAKssE,IAAM2R,GAAej+E,EAAKssE,IAAKiqB,GACpCv2F,EAAKqsE,IAAM4R,GAAej+E,EAAKqsE,IAAKkqB,GAEpCv2F,EAAKw2F,QAAUx2F,EAAKssE,IAAMzqI,GAC1Bm+D,EAAKy2F,QAAUz2F,EAAKqsE,IAAMxqI,EAC5B,GACF,CACA,GAAIsxD,EAAY7O,OAAS6O,EAAY7O,MAAMjoI,OAAQ,CACjD,IAAIq6O,EAAqBP,EAWzB,IAVkC,qBAAvBO,GAAsCvwJ,MAAMuwJ,MACrDA,EAAqBvjG,EAAY7O,MAAM,GAAGgoF,KAE5Cn5E,EAAY7O,MAAM3tI,SAAQ,SAAUqpJ,GAClCA,EAAKssE,IAAM2R,GAAej+E,EAAKssE,IAAKoqB,GACpC12F,EAAKqsE,IAAM4R,GAAej+E,EAAKqsE,IAAKqqB,GAEpC12F,EAAKw2F,QAAUx2F,EAAKssE,IAAMzqI,GAC1Bm+D,EAAKy2F,QAAUz2F,EAAKqsE,IAAMxqI,EAC5B,IACIsxD,EAAY4iG,cAAe,CAC7B,IAAI5pB,EAAQh5E,EAAY4iG,cACxB5pB,EAAMG,IAAM2R,GAAe9R,EAAMG,IAAKoqB,GACtCvqB,EAAME,IAAM4R,GAAe9R,EAAME,IAAKqqB,GAEtCvqB,EAAMqqB,QAAUrqB,EAAMG,IAAMzqI,GAC5BsqI,EAAMsqB,QAAUtqB,EAAME,IAAMxqI,EAC9B,CACF,CACF,CA0IE80J,CAAiBjgP,EAAQy/O,GAClBz/O,GAHE,IAIX,EA4IA,MAAMkgP,GACJt5O,WAAAA,CAAYqiF,EAAMroF,GAChB0G,KAAK1G,QAAUA,GAAW,CAAC,EAC3B0G,KAAK2hF,KAAOA,EACZ3hF,KAAKwnN,MACP,CAKAA,IAAAA,GACMxnN,KAAKmqO,YACPnqO,KAAKmqO,WAAW5uG,UAElBv7H,KAAKmqO,WAAa,IAAIA,GAAWd,WAAWrpO,KAAK1G,SA3IxB,SAAUqoF,EAAMwoJ,GAC3CA,EAAWnvG,GAAG,QAAQ,SAAUqD,GAK9B,MAAMw6G,EAAYx6G,EAAQoO,YAC1BpO,EAAQoO,YAAc,CACpB9vI,KAAMk8O,EAAU12J,OAChBC,WAAYy2J,EAAUz2J,WACtBC,WAAYw2J,EAAUx2J,YAExB,MAAM69I,EAAa7hG,EAAQ1hI,KAC3B0hI,EAAQ1hI,KAAOujO,EAAW/9I,OAC1BR,EAAKq2C,YAAY,CACf9iB,OAAQ,OACRmpB,UACAj8C,WAAY89I,EAAW99I,WACvBC,WAAY69I,EAAW79I,YACtB,CAACg8C,EAAQ1hI,MACd,IACAwtO,EAAWnvG,GAAG,QAAQ,SAAUr+H,GAC9BglF,EAAKq2C,YAAY,CACf9iB,OAAQ,QAEZ,IACAi1H,EAAWnvG,GAAG,WAAW,SAAU89G,GACjCn3J,EAAKq2C,YAAY,CACf9iB,OAAQ,UACR4jI,WAEJ,IACA3O,EAAWnvG,GAAG,0BAA0B,SAAU+9G,GAChD,MAAMC,EAAyB,CAC7B3yO,MAAO,CACL3O,OAAQo4N,GAAQtsI,iBAAiBu1J,EAAW1yO,MAAMioN,KAClD2qB,aAAcnpB,GAAQtsI,iBAAiBu1J,EAAW1yO,MAAMgoN,MAE1D3uI,IAAK,CACHhoF,OAAQo4N,GAAQtsI,iBAAiBu1J,EAAWr5J,IAAI4uI,KAChD2qB,aAAcnpB,GAAQtsI,iBAAiBu1J,EAAWr5J,IAAI2uI,MAExDtB,oBAAqB+C,GAAQtsI,iBAAiBu1J,EAAWhsB,sBAEvDgsB,EAAWtO,2BACbuO,EAAuBvO,yBAA2B3a,GAAQtsI,iBAAiBu1J,EAAWtO,2BAExF9oJ,EAAKq2C,YAAY,CACf9iB,OAAQ,yBACR8jI,0BAEJ,IACA7O,EAAWnvG,GAAG,0BAA0B,SAAU+9G,GAEhD,MAAMG,EAAyB,CAC7B7yO,MAAO,CACL3O,OAAQo4N,GAAQtsI,iBAAiBu1J,EAAW1yO,MAAMioN,KAClD2qB,aAAcnpB,GAAQtsI,iBAAiBu1J,EAAW1yO,MAAMgoN,MAE1D3uI,IAAK,CACHhoF,OAAQo4N,GAAQtsI,iBAAiBu1J,EAAWr5J,IAAI4uI,KAChD2qB,aAAcnpB,GAAQtsI,iBAAiBu1J,EAAWr5J,IAAI2uI,MAExDtB,oBAAqB+C,GAAQtsI,iBAAiBu1J,EAAWhsB,sBAEvDgsB,EAAWtO,2BACbyO,EAAuBzO,yBAA2B3a,GAAQtsI,iBAAiBu1J,EAAWtO,2BAExF9oJ,EAAKq2C,YAAY,CACf9iB,OAAQ,yBACRgkI,0BAEJ,IACA/O,EAAWnvG,GAAG,YAAY,SAAU2zG,GAClChtJ,EAAKq2C,YAAY,CACf9iB,OAAQ,WACRy5H,YAEJ,IACAxE,EAAWnvG,GAAG,WAAW,SAAUsyG,GACjC3rJ,EAAKq2C,YAAY,CACf9iB,OAAQ,UACRo4H,WAEJ,IACAnD,EAAWnvG,GAAG,aAAa,SAAUm+G,GACnCx3J,EAAKq2C,YAAY,CACf9iB,OAAQ,YACRikI,aAEJ,IACAhP,EAAWnvG,GAAG,mBAAmB,SAAUo+G,GAEzCz3J,EAAKq2C,YAAY,CACf9iB,OAAQ,kBACRkkI,gBAAiB,CACf/yO,MAAOypN,GAAQtsI,iBAAiB41J,EAAgB/yO,OAChDq5E,IAAKowI,GAAQtsI,iBAAiB41J,EAAgB15J,OAGpD,IACAyqJ,EAAWnvG,GAAG,mBAAmB,SAAUojF,GACzCz8H,EAAKq2C,YAAY,CACf9iB,OAAQ,kBACRkpG,gBAAiB,CACf/3M,MAAOypN,GAAQtsI,iBAAiB46H,EAAgB/3M,OAChDq5E,IAAKowI,GAAQtsI,iBAAiB46H,EAAgB1+H,OAGpD,IACAyqJ,EAAWnvG,GAAG,OAAO,SAAUhlC,GAC7BrU,EAAKq2C,YAAY,CACf9iB,OAAQ,MACRlf,OAEJ,GACF,CAwBIqjJ,CAAqBr5O,KAAK2hF,KAAM3hF,KAAKmqO,WACvC,CACAmP,eAAAA,CAAgB38O,GACTqD,KAAK4yO,gBACR5yO,KAAK4yO,cAAgB,IAAIA,GACzB5yO,KAAK4yO,cAAcprB,QAErB,MAAMnpF,EAAU,IAAItmI,WAAW4E,EAAKA,KAAMA,EAAKylF,WAAYzlF,EAAK0lF,YAC1Ds1J,EAAS33O,KAAK4yO,cAAc33O,MAAMojI,EAAS1hI,EAAK48O,SAAU58O,EAAKy2O,YACrEpzO,KAAK2hF,KAAKq2C,YAAY,CACpB9iB,OAAQ,cACRw8B,SAAUimG,GAAUA,EAAOjmG,UAAY,GACvC8gG,KAAMmF,GAAUA,EAAOnF,MAAQ,GAC/B71O,KAAM0hI,EAAQl8C,QACb,CAACk8C,EAAQl8C,QACd,CACAq3J,iBAAAA,CAAiBC,GAGd,IAHe,WAChBrG,EAAU,KACVz2O,GACD88O,EACC,MAAMniH,EAAYg/G,GAAkBlD,EAAYz2O,GAChDqD,KAAK2hF,KAAKq2C,YAAY,CACpB9iB,OAAQ,oBACRoiB,YACA36H,QACC,CAACA,EAAKwlF,QACX,CACAu3J,cAAAA,CAAcC,GAEX,IAFY,KACbh9O,GACDg9O,EACC,MAAMx6E,EAASm3E,GAAe35O,GAC9BqD,KAAK2hF,KAAKq2C,YAAY,CACpB9iB,OAAQ,iBACRiqD,SACAxiK,QACC,CAACA,EAAKwlF,QACX,CAUAy3J,YAAAA,CAAYC,GAGT,IAHU,KACXl9O,EAAI,OACJgc,GACDkhO,EACC,MAAMC,EAAYxD,GAAmB35O,EAAMgc,GAC3C3Y,KAAK2hF,KAAKq2C,YAAY,CACpB9iB,OAAQ,eACR4kI,YACAC,SAAUp9O,GACT,CAACA,EAAKwlF,QACX,CAeA63J,OAAAA,CAAOC,GAGJ,IAHK,KACNt9O,EAAI,cACJu9O,GACDD,EACC,MAAME,EAAuC,kBAAlBD,GAA+B/xJ,MAAM+xJ,QAA4D,EAA3CA,EAAgBpqB,GAAQjsI,iBACnGu2J,EAAWlC,GAAoBv7O,EAAMw9O,GAC3C,IAAIzhP,EAAS,KACT0hP,IACF1hP,EAAS,CAEP21O,SAAU+L,EAAS9zG,OAAmC,IAA1B8zG,EAAS9zG,MAAMjoI,SAAgB,EAC3D+vO,SAAUgM,EAAS7zG,OAAmC,IAA1B6zG,EAAS7zG,MAAMloI,SAAgB,GAEzD3F,EAAO21O,WACT31O,EAAO2hP,WAAaD,EAAS9zG,MAAM,GAAGmyG,SAEpC//O,EAAO01O,WACT11O,EAAO4hP,WAAaF,EAAS7zG,MAAM,GAAGkyG,UAG1Cz4O,KAAK2hF,KAAKq2C,YAAY,CACpB9iB,OAAQ,UACRx8G,SACAiE,QACC,CAACA,EAAKwlF,QACX,CACAo4J,mBAAAA,GACMv6O,KAAK4yO,eACP5yO,KAAK4yO,cAAckB,kBAEvB,CACA0G,sBAAAA,GACMx6O,KAAK4yO,eACP5yO,KAAK4yO,cAAcgB,qBAEvB,CAQAz6O,IAAAA,CAAKwD,GAEH,MAAM0hI,EAAU,IAAItmI,WAAW4E,EAAKA,KAAMA,EAAKylF,WAAYzlF,EAAK0lF,YAChEriF,KAAKmqO,WAAWhxO,KAAKklI,EACvB,CAMA99H,KAAAA,GACEP,KAAKmqO,WAAW5pO,OAClB,CASAk6O,kBAAAA,CAAmB99O,GACjB,MAAM+9O,EAAkB/9O,EAAK+9O,iBAAmB,EAChD16O,KAAKmqO,WAAWyE,uBAAuBtrO,KAAKq1K,MAAMm3C,GAAQxsI,iBAAiBo3J,IAC7E,CACA5P,mBAAAA,CAAoBnuO,GAClBqD,KAAKmqO,WAAWW,oBAAoBxnO,KAAK4+G,KAAK4tG,GAAQxsI,iBAAiB3mF,EAAKg+O,cAC9E,CACAnN,QAAAA,CAAS7wO,GACPqD,KAAKmqO,WAAWqD,SAAS7wO,EAAKgwO,MAChC,CAQAxhH,KAAAA,CAAMxuH,GACJqD,KAAKmqO,WAAWh/G,QAEhBxpC,KAAKq2C,YAAY,CACf9iB,OAAQ,OACR79G,KAAM,cAEV,CACAswN,WAAAA,GACE3nN,KAAKmqO,WAAWxiB,cAGhBhmI,KAAKq2C,YAAY,CACf9iB,OAAQ,gBACR79G,KAAM,cAEV,CACAm1O,aAAAA,CAAc7vO,GACZqD,KAAKmqO,WAAWqC,cAAc7vO,EAAKquO,gBAAgBhyO,QACrD,EAUF2oF,KAAKo2C,UAAY,SAAUx1B,GACC,SAAtBA,EAAM5lG,KAAKu4G,QAAqB3S,EAAM5lG,KAAKrD,QAC7C0G,KAAK46O,gBAAkB,IAAIhC,GAAgBj3J,KAAM4gB,EAAM5lG,KAAKrD,UAGzD0G,KAAK46O,kBACR56O,KAAK46O,gBAAkB,IAAIhC,GAAgBj3J,OAEzC4gB,EAAM5lG,MAAQ4lG,EAAM5lG,KAAKu4G,QAAgC,SAAtB3S,EAAM5lG,KAAKu4G,QAC5Cl1G,KAAK46O,gBAAgBr4I,EAAM5lG,KAAKu4G,SAClCl1G,KAAK46O,gBAAgBr4I,EAAM5lG,KAAKu4G,QAAQ3S,EAAM5lG,MAGpD,CACF,KACA,IAAIk+O,GAAiBt0B,GAAQa,IAG7B,MA8CM0zB,GAAkBxhP,IACtB,MAAM,WACJ6wO,EAAU,MACV9hG,EAAK,iBACL0yG,EAAgB,gBAChB/P,EAAe,MACf2B,EAAK,OACLqO,EAAM,YACNC,EAAW,kBACXC,EAAiB,kBACjBC,EAAiB,yBACjBC,EAAwB,yBACxBC,EAAwB,MACxBC,EAAK,WACLC,EAAU,OACVC,EAAM,gBACNC,EAAe,gBACfC,EAAe,gBACfC,EAAe,QACft9G,EAAO,sBACPu9G,GACEtiP,EACEuiP,EAAiB,CACrB15J,OAAQ,IAEV,IAAI25J,EAA4BH,EA8FhC,GArBAxR,EAAWpyG,UAxEWx1B,IAChB4nI,EAAW4R,kBAAoBziP,IAIT,SAAtBipG,EAAM5lG,KAAKu4G,QA7EC8mI,EAACz5I,EAAOs5I,EAAgBvlP,KAC1C,MAAM,KACJe,EAAI,YACJo1I,EAAW,SACXiF,EAAQ,eACR67F,EAAc,SACdxzO,EAAQ,kBACRkiP,EAAiB,kBACjBC,GACE35I,EAAM5lG,KAAK0hI,QACfw9G,EAAe15J,OAAOhpF,KAAK,CACzBu4I,WACA67F,iBACAxzO,aAEF,MAAMuxN,EAAQ/oH,EAAM5lG,KAAK0hI,QAAQitF,OAAS,CACxC3uN,KAAM4lG,EAAM5lG,KAAK0hI,QAAQ1hI,MAErBjE,EAAS,CACbrB,OAEAsF,KAAM,IAAI5E,WAAWuzN,EAAM3uN,KAAM2uN,EAAM3uN,KAAKylF,WAAYkpI,EAAM3uN,KAAK0lF,YACnEoqD,YAAa,IAAI10I,WAAW00I,EAAY9vI,KAAM8vI,EAAYrqD,WAAYqqD,EAAYpqD,aAEnD,qBAAtB45J,IACTvjP,EAAOujP,kBAAoBA,GAEI,qBAAtBC,IACTxjP,EAAOwjP,kBAAoBA,GAE7B5lP,EAASoC,EAAO,EAgDZsjP,CAAYz5I,EAAOs5I,EAAgBb,GAEX,cAAtBz4I,EAAM5lG,KAAKu4G,QACb+lI,EAAY14I,EAAM5lG,KAAKw8O,WAEC,YAAtB52I,EAAM5lG,KAAKu4G,QAxCIinI,EAAC55I,EAAOs5I,KAC7BA,EAAe/C,QAAUv2I,EAAM5lG,KAAKm8O,OAAO,EAwCvCqD,CAAe55I,EAAOs5I,GAEE,oBAAtBt5I,EAAM5lG,KAAKu4G,QACbgmI,EAAkB34I,EAAM5lG,KAAKy8O,iBAEL,oBAAtB72I,EAAM5lG,KAAKu4G,QACbimI,EAAkB54I,EAAM5lG,KAAKyhN,iBAEL,2BAAtB77G,EAAM5lG,KAAKu4G,QACbkmI,EAAyB74I,EAAM5lG,KAAKq8O,wBAEZ,2BAAtBz2I,EAAM5lG,KAAKu4G,QACbmmI,EAAyB94I,EAAM5lG,KAAKu8O,wBAEZ,aAAtB32I,EAAM5lG,KAAKu4G,QACbomI,EAAM,CAAC/4I,EAAM5lG,KAAKgyO,UAAWpsI,EAAM5lG,KAAKgyO,SAAShN,cAEzB,YAAtBp/H,EAAM5lG,KAAKu4G,QACbqmI,EAAWh5I,EAAM5lG,KAAK2wO,SAEE,kBAAtB/qI,EAAM5lG,KAAKu4G,SACb4mI,GAA4B,EAC5BL,KAEwB,QAAtBl5I,EAAM5lG,KAAKu4G,QACbwmI,EAAgBn5I,EAAM5lG,KAAKq5F,KAGL,eAApBuM,EAAM5lG,KAAKtF,OAOXykP,IAGJ3R,EAAWpyG,UAAY,KA1FPqkH,KAGd,IAHe,eACnBP,EAAc,SACdvlP,GACD8lP,EAGCP,EAAe15J,OAAS,GAGxB7rF,EAASulP,EAAe,EAkFtBQ,CAAY,CACVR,iBACAvlP,SAAUklP,IAIZc,GAAQnS,KAAW,EAgBrBA,EAAWjtO,QAbSq/O,KAClB,MAAMt0O,EAAQ,CACZoG,QAAS,uDACTtU,SAAU,CACR86M,UAAWjJ,GAAQnyM,MAAM8zM,iCACzBp4D,YAAaqnG,GAAmB,CAC9Bn+G,cAINm9G,EAAO,KAAMvzO,EAAM,EAIjB8yO,GACF5Q,EAAWnyG,YAAY,CACrB9iB,OAAQ,sBACRylI,YAAaI,IAIb9hP,MAAMC,QAAQ8xO,IAChBb,EAAWnyG,YAAY,CACrB9iB,OAAQ,gBACR81H,oBAGiB,qBAAV2B,GACTxC,EAAWnyG,YAAY,CACrB9iB,OAAQ,WACRy3H,UAGAtkG,EAAMhmD,WAAY,CACpB,MAAMF,EAASkmD,aAAiB5c,YAAc4c,EAAQA,EAAMlmD,OACtDC,EAAaimD,aAAiB5c,YAAc,EAAI4c,EAAMjmD,WAC5Dw5J,EAAsB,CACpBvkP,KAAM,0BACNgnI,YAEF8rG,EAAWnyG,YAAY,CACrB9iB,OAAQ,OAIRv4G,KAAMwlF,EAGNC,aACAC,WAAYgmD,EAAMhmD,YACjB,CAACF,GACN,CACIw5J,GACFxR,EAAWnyG,YAAY,CACrB9iB,OAAQ,gBAKZi1H,EAAWnyG,YAAY,CACrB9iB,OAAQ,SACR,EAEEonI,GAAUnS,IACdA,EAAW4R,gBAAkB,KACzB5R,EAAWsS,cAAcp+O,SAC3B8rO,EAAW4R,gBAAkB5R,EAAWsS,cAAczjJ,QACZ,oBAA/BmxI,EAAW4R,gBACpB5R,EAAW4R,kBAEXjB,GAAgB3Q,EAAW4R,iBAE/B,EAEIW,GAAgBA,CAACvS,EAAYj1H,KACjCi1H,EAAWnyG,YAAY,CACrB9iB,WAEFonI,GAAQnS,EAAW,EAEfwS,GAAgBA,CAACznI,EAAQi1H,KAC7B,IAAKA,EAAW4R,gBAGd,OAFA5R,EAAW4R,gBAAkB7mI,OAC7BwnI,GAAcvS,EAAYj1H,GAG5Bi1H,EAAWsS,cAActjP,KAAKujP,GAAc39O,KAAK,KAAMorO,EAAYj1H,GAAQ,EAQvE0nI,GAAWtjP,IACf,IAAKA,EAAQ6wO,WAAW4R,gBAGtB,OAFAziP,EAAQ6wO,WAAW4R,gBAAkBziP,OACrCwhP,GAAgBxhP,GAGlBA,EAAQ6wO,WAAWsS,cAActjP,KAAKG,EAAQ,EAkBhD,IAAIujP,GA9BU1S,IACZwS,GAAc,QAASxS,EAAW,EA6BhC0S,GAhBqBvjP,IACvB,MAAM6wO,EAAa,IAAI0Q,GACvB1Q,EAAW4R,gBAAkB,KAC7B5R,EAAWsS,cAAgB,GAC3B,MAAMK,EAAO3S,EAAWljB,UAUxB,OATAkjB,EAAWljB,UAAY,KACrBkjB,EAAW4R,gBAAkB,KAC7B5R,EAAWsS,cAAcp+O,OAAS,EAC3By+O,EAAKj+O,KAAKsrO,IAEnBA,EAAWnyG,YAAY,CACrB9iB,OAAQ,OACR57G,YAEK6wO,CAAU,EAQnB,MAAM4S,GAAiB,SAAUzjP,GAC/B,MAAM6wO,EAAa7wO,EAAQ6wO,WACrB6S,EAAY1jP,EAAQ0jP,WAAa1jP,EAAQ47G,OACzC5+G,EAAWgD,EAAQhD,SACnB+X,EAAUrW,EAAS,CAAC,EAAGsB,EAAS,CACpC0jP,UAAW,KACX7S,WAAY,KACZ7zO,SAAU,OAEN2mP,EAAoB16I,IACpBA,EAAM5lG,KAAKu4G,SAAW8nI,IAG1B7S,EAAWh3I,oBAAoB,UAAW8pJ,GAEtC16I,EAAM5lG,KAAKA,OACb4lG,EAAM5lG,KAAKA,KAAO,IAAI5E,WAAWwqG,EAAM5lG,KAAKA,KAAMrD,EAAQ8oF,YAAc,EAAG9oF,EAAQ+oF,YAAckgB,EAAM5lG,KAAKA,KAAK0lF,YAC7G/oF,EAAQqD,OACVrD,EAAQqD,KAAO4lG,EAAM5lG,KAAKA,OAG9BrG,EAASisG,EAAM5lG,MAAK,EAGtB,GADAwtO,EAAWj3I,iBAAiB,UAAW+pJ,GACnC3jP,EAAQqD,KAAM,CAChB,MAAMugP,EAAgB5jP,EAAQqD,gBAAgB8uH,YAC9Cp9G,EAAQ+zE,WAAa86J,EAAgB,EAAI5jP,EAAQqD,KAAKylF,WACtD/zE,EAAQg0E,WAAa/oF,EAAQqD,KAAK0lF,WAClC,MAAM86J,EAAY,CAACD,EAAgB5jP,EAAQqD,KAAOrD,EAAQqD,KAAKwlF,QAC/DgoJ,EAAWnyG,YAAY3pH,EAAS8uO,EAClC,MACEhT,EAAWnyG,YAAY3pH,EAE3B,EACM+uO,GACK,EADLA,IAEM,IAFNA,IAGM,IAQNC,GAAWC,IACfA,EAAW3kP,SAAQ4B,IACjBA,EAAImD,OAAO,GACX,EA6CE6/O,GAAeA,CAACt1O,EAAOw5L,KAC3B,MAAM,YACJ/nM,GACE+nM,EACE1nM,EAAWw6M,GAAiC,CAChD76M,cACA+nM,UACAx5L,UAEF,OAAIw5L,EAAQqT,SACH,CACL54M,OAAQulM,EAAQvlM,OAChBmS,QAAS,iCAAmCozL,EAAQpoM,IACpDsE,KAAMy/O,GACN7iP,IAAKknM,EACL1nM,YAGA0nM,EAAQlmM,QACH,CACLW,OAAQulM,EAAQvlM,OAChBmS,QAAS,+BAAiCozL,EAAQpoM,IAClDsE,KAAMy/O,GACN7iP,IAAKknM,EACL1nM,YAGAkO,EACK,CACL/L,OAAQulM,EAAQvlM,OAChBmS,QAAS,+BAAiCozL,EAAQpoM,IAClDsE,KAAMy/O,GACN7iP,IAAKknM,EACL1nM,YAGyB,gBAAzB0nM,EAAQhnM,cAAkE,IAAhCgnM,EAAQhrM,SAAS4rF,WACtD,CACLnmF,OAAQulM,EAAQvlM,OAChBmS,QAAS,8BAAgCozL,EAAQpoM,IACjDsE,KAAMy/O,GACN7iP,IAAKknM,EACL1nM,YAGG,IAAI,EAaPyjP,GAAoBA,CAACn/G,EAAS+L,EAASqzG,EAAoB7B,IAA0B,CAAC3zO,EAAOw5L,KACjG,MAAMhrM,EAAWgrM,EAAQhrM,SACnBinP,EAAWH,GAAat1O,EAAOw5L,GACrC,GAAIi8C,EACF,OAAOD,EAAmBC,EAAUr/G,GAEtC,GAA4B,KAAxB5nI,EAAS4rF,WACX,OAAOo7J,EAAmB,CACxBvhP,OAAQulM,EAAQvlM,OAChBmS,QAAS,2BAA6BozL,EAAQpoM,IAC9CsE,KAAMy/O,GACN7iP,IAAKknM,GACJpjE,GAEL,MAAMp8C,EAAO,IAAIC,SAASzrF,GACpB4xI,EAAQ,IAAI1K,YAAY,CAAC17C,EAAKS,UAAU,GAAIT,EAAKS,UAAU,GAAIT,EAAKS,UAAU,GAAIT,EAAKS,UAAU,MACvG,IAAK,IAAI3kF,EAAI,EAAGA,EAAIqsI,EAAQ/rI,OAAQN,IAClCqsI,EAAQrsI,GAAGsqI,MAAQA,EAErB,MAAMs1G,EAAU,CACdtkP,IAAKooM,EAAQpoM,KAOf,OALAuiP,EAAsB,CACpBvkP,KAAM,yBACNgnI,UACAs/G,YAEKF,EAAmB,KAAMp/G,EAAQ,EAEpCu/G,GAAmBA,CAACv/G,EAAS/nI,KACjC,MAAMe,EAAOmpJ,GAAwBniB,EAAQhoH,IAAIgyH,OAGjD,GAAa,QAAThxI,EAAgB,CAClB,MAAMgC,EAAMglI,EAAQhoH,IAAIs0H,aAAetM,EAAQhoH,IAAIhd,IAC7CkuI,EAAYlwI,GAAQ,UAC1B,OAAOf,EAAS,CACd6sN,UAAU,EACV90M,QAAS,qBAAqBk5H,kDAA0DluI,IACxFsE,KAAMy/O,GACNrjP,SAAU,CACRwtI,cAGN,CACAw1G,GAAe,CACb7nI,OAAQ,iBACRv4G,KAAM0hI,EAAQhoH,IAAIgyH,MAClB8hG,WAAY9rG,EAAQ8rG,WACpB7zO,SAAUunP,IAGJ,IAHK,OACT1+E,EAAM,KACNxiK,GACDkhP,EAeC,OAbAx/G,EAAQhoH,IAAIgyH,MAAQ1rI,EACpBwiK,EAAOxmK,SAAQ,SAAU84F,GACvB4sC,EAAQhoH,IAAI8oJ,OAAS9gC,EAAQhoH,IAAI8oJ,QAAU,CAAC,EAExC9gC,EAAQhoH,IAAI8oJ,OAAO1tE,EAAMp6F,QAG7BgnI,EAAQhoH,IAAI8oJ,OAAO1tE,EAAMp6F,MAAQo6F,EACT,kBAAbA,EAAM/6E,IAAmB+6E,EAAM9O,YACxC07C,EAAQhoH,IAAI+8N,WAAa/0G,EAAQhoH,IAAI+8N,YAAc,CAAC,EACpD/0G,EAAQhoH,IAAI+8N,WAAW3hJ,EAAM/6E,IAAM+6E,EAAM9O,WAE7C,IACOrsF,EAAS,KAAK,GAEvB,EAoDEwnP,GAAwBC,IAAA,IAAC,QAC7B1/G,EAAO,mBACPo/G,EAAkB,aAClBhjP,EAAY,sBACZmhP,GACDmC,EAAA,MAAK,CAAC91O,EAAOw5L,KACZ,MAAMi8C,EAAWH,GAAat1O,EAAOw5L,GACrC,GAAIi8C,EACF,OAAOD,EAAmBC,EAAUr/G,GAEtCu9G,EAAsB,CACpBvkP,KAAM,gBACNgnI,YAEF,MAAM2/G,EAMW,gBAAjBvjP,GAAmCgnM,EAAQjnM,aA/6RjBonF,KAC1B,MAAMK,EAAO,IAAIlqF,WAAW,IAAI0zH,YAAY7pC,EAAOvjF,SACnD,IAAK,IAAIN,EAAI,EAAGA,EAAI6jF,EAAOvjF,OAAQN,IACjCkkF,EAAKlkF,GAAK6jF,EAAO1xE,WAAWnS,GAE9B,OAAOkkF,EAAKE,MAAM,EA06R2D87J,CAAoBx8C,EAAQjnM,aAAaqe,UAAUwlH,EAAQ6/G,iBAAmB,IAAjGz8C,EAAQhrM,SAOlE,OANA4nI,EAAQ8/G,MA7Oc18C,KACf,CACLrxD,UAAWqxD,EAAQrxD,UACnBwiE,cAAenR,EAAQmR,eAAiB,EACxC+I,cAAela,EAAQka,eAAiB,IAyO1ByiC,CAAgB38C,GAC5BpjE,EAAQtlI,IACVslI,EAAQggH,eAAiB,IAAItmP,WAAWimP,GAExC3/G,EAAQgK,MAAQ,IAAItwI,WAAWimP,GAE1BP,EAAmB,KAAMp/G,EAAQ,CACzC,EACKigH,GAAoBC,IAepB,IAfqB,QACzBlgH,EAAO,MACPgK,EAAK,YACLm2G,EAAW,aACXC,EAAY,yBACZC,EAAwB,yBACxBC,EAAwB,MACxBC,EAAK,WACLC,EAAU,gBACVlD,EAAe,gBACfmD,EAAe,OACfC,EAAM,OACNC,EAAM,gBACNtD,EAAe,sBACfE,GACD2C,EACC,MAAMU,EAAa5gH,EAAQhoH,KAAOgoH,EAAQhoH,IAAI8oJ,QAAU,CAAC,EACnD+/E,EAAUttG,QAAQqtG,EAAW14G,OAAS04G,EAAW34G,OAIvD,IAAI64G,EAAeV,EAAa1/O,KAAK,KAAMs/H,EAAS,QAAS,SAC7D,MAAM+gH,EAAaX,EAAa1/O,KAAK,KAAMs/H,EAAS,QAAS,OAC7D,IAAIghH,EAAeZ,EAAa1/O,KAAK,KAAMs/H,EAAS,QAAS,SAC7D,MAAMihH,EAAab,EAAa1/O,KAAK,KAAMs/H,EAAS,QAAS,OAyG7D0+G,GAAe,CACb7nI,OAAQ,UACRi1H,WAAY9rG,EAAQ8rG,WACpBxtO,KAAM0rI,EACN6xG,cAAe77G,EAAQ67G,cACvB5jP,SAAUqG,IACR0hI,EAAQgK,MAAQA,EAAQ1rI,EAAKA,KAC7B,MAAM4iP,EAAc5iP,EAAKjE,OACrB6mP,IACFf,EAAYngH,EAAS,CACnB+vG,SAAUmR,EAAYnR,SACtBC,SAAUkR,EAAYlR,SACtB6Q,YAEFV,EAAc,MAtHC5B,GAAS,CAC5Bv0G,QACA8hG,WAAY9rG,EAAQ8rG,WACpB4Q,iBAAkB18G,EAAQ08G,iBAC1B/P,gBAAiB3sG,EAAQ2sG,gBACzB2B,MAAOuS,EACPlE,OAAQtiP,IACNA,EAAOrB,KAAuB,aAAhBqB,EAAOrB,KAAsB,QAAUqB,EAAOrB,KAC5D0nP,EAAO1gH,EAAS3lI,EAAO,EAEzBuiP,YAAa9B,IACPqF,IACEU,IACF/F,EAAU+F,SAAU,GAEtBV,EAAYngH,EAAS86G,GACvB,EAEF+B,kBAAmB9B,IAEb+F,GAAiD,qBAA1B/F,EAAgB/yO,QACzC84O,EAAa/F,EAAgB/yO,OAC7B84O,EAAe,MAGbC,GAA6C,qBAAxBhG,EAAgB15J,KACvC0/J,EAAWhG,EAAgB15J,IAC7B,EAEFy7J,kBAAmB/8B,IAEbihC,GAAiD,qBAA1BjhC,EAAgB/3M,QACzCg5O,EAAajhC,EAAgB/3M,OAC7Bg5O,EAAe,MAGbC,GAA6C,qBAAxBlhC,EAAgB1+H,KACvC4/J,EAAWlhC,EAAgB1+H,IAC7B,EAEF07J,yBAA0BpC,IACxB,MAAMD,EAAa,CACjB1qB,IAAK,CACHhoN,MAAO2yO,EAAuB3yO,MAAM4yO,aACpCv5J,IAAKs5J,EAAuBt5J,IAAIu5J,cAElC3qB,IAAK,CACHjoN,MAAO2yO,EAAuB3yO,MAAM3O,OACpCgoF,IAAKs5J,EAAuBt5J,IAAIhoF,SAGpCkkP,EAAsB,CACpBvkP,KAAM,wCACNgnI,UACA06G,eAEF2F,EAAyB1F,EAAuB,EAElDqC,yBAA0BnC,IACxB,MAAMH,EAAa,CACjB1qB,IAAK,CACHhoN,MAAO6yO,EAAuB7yO,MAAMgoN,IACpC3uI,IAAKw5J,EAAuBx5J,IAAI2uI,KAElCC,IAAK,CACHjoN,MAAO6yO,EAAuB7yO,MAAMioN,IACpC5uI,IAAKw5J,EAAuBx5J,IAAI4uI,MAGpCstB,EAAsB,CACpBvkP,KAAM,wCACNgnI,UACA06G,eAEF4F,EAAyBzF,EAAuB,EAElDoC,MAAOA,CAACxB,EAAWnY,KACjBid,EAAMvgH,EAASy7G,EAAWnY,EAAa,EAEzC4Z,WAAY7pG,IACVmtG,EAAWxgH,EAAS,CAACqT,GAAU,EAEjCiqG,kBACAF,gBAAiBA,KACfqD,GAAiB,EAEnBpD,kBACAF,OAAQA,CAAC9iP,EAAQuP,KACV+2O,IAGLtmP,EAAOrB,KAAuB,aAAhBqB,EAAOrB,KAAsB,QAAUqB,EAAOrB,KAC5DukP,EAAsB,CACpBvkP,KAAM,6BACNgnI,YAEF2gH,EAAO/2O,EAAOo2H,EAAS3lI,GAAO,EAEhC2lI,UACAu9G,yBAqBU,GAEV,EAEE4D,GAAqBC,IAerB,IAfsB,QAC1BphH,EAAO,MACPgK,EAAK,YACLm2G,EAAW,aACXC,EAAY,yBACZC,EAAwB,yBACxBC,EAAwB,MACxBC,EAAK,WACLC,EAAU,gBACVlD,EAAe,gBACfmD,EAAe,OACfC,EAAM,OACNC,EAAM,gBACNtD,EAAe,sBACfE,GACD6D,EACKC,EAAoB,IAAI3nP,WAAWswI,GAMvC,GDz5wCoC,SAAkCA,GACtE,OAAOwT,GAAQxT,EAAO,CAAC,SAAShqI,OAAS,CAC3C,CCu5wCMshP,CAAyBD,GAA7B,CACErhH,EAAQuhH,QAAS,EACjB,MAAM,OACJzgF,GACE9gC,EAAQhoH,IACN8iO,EAAY,CAChByG,QAAQ,EACRvR,WAAYlvE,EAAO74B,MACnB8nG,WAAYjvE,EAAO54B,OAIjB44B,EAAO54B,OAAS44B,EAAO54B,MAAMO,OAAgC,SAAvBq4B,EAAO54B,MAAMO,QACrDqyG,EAAU0G,WAAa1gF,EAAO54B,MAAMO,OAIlCq4B,EAAO74B,OAAS64B,EAAO74B,MAAMQ,OAAgC,SAAvBq4B,EAAO74B,MAAMQ,QACrDqyG,EAAU2G,WAAa3gF,EAAO74B,MAAMQ,OAElCq4B,EAAO74B,OAAS64B,EAAO54B,QACzB4yG,EAAU+F,SAAU,GAItBV,EAAYngH,EAAS86G,GAOrB,MAAM4G,EAAgBA,CAACruG,EAAUooG,KAK/BiF,EAAO1gH,EAAS,CACd1hI,KAAM+iP,EACNroP,KAAM8hP,EAAU/K,WAAa+K,EAAU+F,QAAU,QAAU,UAEzDpF,GAAaA,EAAUz7O,QACzBugP,EAAMvgH,EAASy7G,GAEbpoG,GAAYA,EAASrzI,QACvBwgP,EAAWxgH,EAASqT,GAEtBstG,EAAO,KAAM3gH,EAAS,CAAC,EAAE,EAE3B0+G,GAAe,CACb7nI,OAAQ,oBACRk+H,WAAY/0G,EAAQhoH,IAAI+8N,WACxBz2O,KAAM+iP,EACNvV,WAAY9rG,EAAQ8rG,WACpB7zO,SAAU0pP,IAGJ,IAHK,KACTrjP,EAAI,UACJ26H,GACD0oH,EAEC33G,EAAQ1rI,EAAKwlF,OACbk8C,EAAQgK,MAAQq3G,EAAoB/iP,EAChCw8O,EAAU/K,WAAa+K,EAAU+F,SACnCT,EAAapgH,EAAS,QAAS,QAAS/G,GAEtC6hH,EAAU9K,UACZoQ,EAAapgH,EAAS,QAAS,QAAS/G,GAE1CylH,GAAe,CACb7nI,OAAQ,eACRv4G,KAAM+iP,EACNvV,WAAY9rG,EAAQ8rG,WACpBxxN,OAAQ2+G,EACRhhI,SAAU2pP,IAGJ,IAHK,SACTlG,EAAQ,UACRD,GACDmG,EAEC53G,EAAQ0xG,EAAS53J,OACjBk8C,EAAQgK,MAAQq3G,EAAoB3F,EAG/B56E,EAAO74B,OAAUyzG,EAAS13J,YAAeg8C,EAAQ8rG,WAItD4S,GAAe,CACb7nI,OAAQ,kBACR8nI,UAAW,cACX7S,WAAY9rG,EAAQ8rG,WACpBxtO,KAAM+iP,EACNtM,WAAY/0G,EAAQhoH,IAAI+8N,WACxBmG,SAAU,CAACp6E,EAAO74B,MAAM5vH,IACxBpgB,SAAU+X,IAERg6H,EAAQh6H,EAAQ1R,KAAKwlF,OACrBk8C,EAAQgK,MAAQq3G,EAAoBrxO,EAAQ1R,KAC5C0R,EAAQmkO,KAAK75O,SAAQ,SAAUq9F,GAC7B0lJ,EAAgBxxG,GAAMl0C,EAAK,CACzB4zH,OAAQ,qBAEZ,IACAm2B,EAAc1xO,EAAQqjI,SAAUooG,EAAU,IAnB5CiG,OAAczlP,EAAWw/O,EAqBzB,GAEJ,GAIR,MAEA,GAAKz7G,EAAQ8rG,WAAb,CAOA,GAHiC,qBAAtB9rG,EAAQqJ,YACjBrJ,EAAQqJ,UAAY8Y,GAAwBk/F,IAEpB,OAAtBrhH,EAAQqJ,WAA4C,QAAtBrJ,EAAQqJ,UAMxC,OALA82G,EAAYngH,EAAS,CACnB+vG,UAAU,EACVC,UAAU,SAEZ2Q,EAAO,KAAM3gH,EAAS,CAAC,GAIzBigH,GAAkB,CAChBjgH,UACAgK,QACAm2G,cACAC,eACAC,2BACAC,2BACAC,QACAC,aACAlD,kBACAmD,kBACAC,SACAC,SACAtD,kBACAE,yBA3BF,MAFEoD,EAAO,KAAM3gH,EAAS,CAAC,EA8BvB,EAEE6hH,GAAU,SAAAC,EAOb7pP,GAAU,IAPa,GACxBogB,EAAE,IACF3d,EAAG,eACHslP,EAAc,iBACd+B,EAAgB,QAChB/hH,EAAO,OACP2gH,GACDmB,EACC,MAAME,EAAoB99I,IACxB,GAAIA,EAAM5lG,KAAK6H,SAAWkS,EAAI,CAC5B0pO,EAAiBjtJ,oBAAoB,UAAWktJ,GAChD,MAAMC,EAAY/9I,EAAM5lG,KAAK2jP,UAC7BhqP,EAAS,IAAIyB,WAAWuoP,EAAUj4G,MAAOi4G,EAAUl+J,WAAYk+J,EAAUj+J,YAC3E,GAqBF,IAAIk+J,EAnBJH,EAAiBljP,QAAU,KACzB,MAAMmR,EAAU,6CACV8mI,EAAcqnG,GAAmB,CACrCn+G,YAEImiH,EAAe,CACnBnyO,UACAtU,SAAU,CACRkO,MAAO,IAAIxO,MAAM4U,GACjBwmM,UAAWjJ,GAAQnyM,MAAM6zM,gCACzBn4D,cACAwoG,QAAS,CACPtkP,IAAKglI,EAAQtlI,IAAI4xI,aAAetM,EAAQhoH,IAAItd,IAAI4xI,eAItDq0G,EAAOwB,EAAcniH,EAAQ,EAE/B+hH,EAAiBltJ,iBAAiB,UAAWmtJ,GAG3CE,EADExnP,EAAIsvI,MAAMrvI,MACDD,EAAIsvI,MAAMrvI,QAEV,IAAI2kI,YAAY1kI,MAAMmG,UAAUpG,MAAM6F,KAAK9F,EAAIsvI,QAG5D+3G,EAAiBpoH,YAAYslF,GAA0B,CACrD94M,OAAQkS,EACR+pO,UAAWpC,EACXtlP,IAAKwnP,EACL5+G,GAAI5oI,EAAI4oI,KACN,CAAC08G,EAAel8J,OAAQo+J,EAASp+J,QACvC,EA0GMu+J,GAAoBC,IAepB,IAfqB,WACzBrD,EAAU,iBACV8C,EAAgB,YAChB5B,EAAW,aACXC,EAAY,yBACZC,EAAwB,yBACxBC,EAAwB,MACxBC,EAAK,WACLC,EAAU,gBACVlD,EAAe,gBACfmD,EAAe,OACfC,EAAM,OACNC,EAAM,gBACNtD,EAAe,sBACfE,GACD+E,EACK/nO,EAAQ,EACRgoO,GAAW,EACf,MAAO,CAAC34O,EAAOo2H,KACb,IAAIuiH,EAAJ,CAGA,GAAI34O,EAeF,OAdA24O,GAAW,EAEXvD,GAASC,GAYF0B,EAAO/2O,EAAOo2H,GAGvB,GADAzlH,GAAS,EACLA,IAAU0kO,EAAWj/O,OAAQ,CAC/B,MAAMwiP,EAAgB,WACpB,GAAIxiH,EAAQggH,eACV,MA3HayC,KAejB,IAfkB,iBACtBV,EAAgB,QAChB/hH,EAAO,YACPmgH,EAAW,aACXC,EAAY,yBACZC,EAAwB,yBACxBC,EAAwB,MACxBC,EAAK,WACLC,EAAU,gBACVlD,EAAe,gBACfmD,EAAe,OACfC,EAAM,OACNC,EAAM,gBACNtD,EAAe,sBACfE,GACDkF,EACClF,EAAsB,CACpBvkP,KAAM,2BAER6oP,GAAQ,CACNxpO,GAAI2nH,EAAQ0iH,UACZhoP,IAAKslI,EAAQtlI,IACbslP,eAAgBhgH,EAAQggH,eACxB+B,mBACA/hH,UACA2gH,WACCgC,IACD3iH,EAAQgK,MAAQ24G,EAChBpF,EAAsB,CACpBvkP,KAAM,4BACNgnI,YAEFmhH,GAAmB,CACjBnhH,UACAgK,MAAOhK,EAAQgK,MACfm2G,cACAC,eACAC,2BACAC,2BACAC,QACAC,aACAlD,kBACAmD,kBACAC,SACAC,SACAtD,kBACAE,yBACA,GACF,EA2EaqF,CAAe,CACpBb,mBACA/hH,UACAmgH,cACAC,eACAC,2BACAC,2BACAC,QACAC,aACAlD,kBACAmD,kBACAC,SACAC,SACAtD,kBACAE,0BAIJ4D,GAAmB,CACjBnhH,UACAgK,MAAOhK,EAAQgK,MACfm2G,cACAC,eACAC,2BACAC,2BACAC,QACAC,aACAlD,kBACAmD,kBACAC,SACAC,SACAtD,kBACAE,yBAEJ,EAGA,GADAv9G,EAAQ6iH,iBAAmBtlJ,KAAKC,MAC5BwiC,EAAQhoH,KAAOgoH,EAAQhoH,IAAIgoO,iBAAmBhgH,EAAQhoH,IAAIgyH,MAK5D,OAJAuzG,EAAsB,CACpBvkP,KAAM,yBACNgnI,YAEK6hH,GAAQ,CACbE,mBAIA1pO,GAAI2nH,EAAQ0iH,UAAY,QACxB1C,eAAgBhgH,EAAQhoH,IAAIgoO,eAC5BtlP,IAAKslI,EAAQhoH,IAAItd,IACjBslI,UACA2gH,WACCgC,IACD3iH,EAAQhoH,IAAIgyH,MAAQ24G,EACpBpF,EAAsB,CACpBvkP,KAAM,4BACNgnI,YAEFu/G,GAAiBv/G,GAAS8iH,IACxB,GAAIA,EAEF,OADA9D,GAASC,GACF0B,EAAOmC,EAAY9iH,GAE5BwiH,GAAe,GACf,IAGNA,GACF,CA1FA,CA0FA,CACD,EA8CGO,GAAiBC,IAAA,IAAC,QACtBhjH,EAAO,WACPijH,EAAU,YACV9C,EAAW,aACXC,EAAY,yBACZC,EAAwB,yBACxBC,EAAwB,MACxBC,EAAK,WACLC,EAAU,gBACVlD,EAAe,gBACfmD,EAAe,OACfC,GACDsC,EAAA,OAAK9+I,IAEJ,IADgBA,EAAMh+F,OACVhJ,QAQZ,OALA8iI,EAAQ8/G,MAAQj0G,GAAM7L,EAAQ8/G,MA12BPoD,KACvB,MAAM9/C,EAAU8/C,EAAch9O,OAExB45O,EAAQ,CACZ/tG,UAAWvtB,IACX+vF,cAAe,EACf+I,cAJoB//G,KAAKC,MAAQ4lG,EAAQma,aAIT,GAOlC,OALAuiC,EAAMvrC,cAAgB2uC,EAAc1gC,OAIpCs9B,EAAM/tG,UAAY9sI,KAAK80H,MAAM+lH,EAAMvrC,cAAgBurC,EAAMxiC,cAAgB,EAAI,KACtEwiC,CAAK,EA61ByBqD,CAAiBj/I,KAEjD87B,EAAQ8/G,MAAMsD,sBAAwBpjH,EAAQ8/G,MAAMvrC,gBACvDv0E,EAAQ8/G,MAAMsD,qBAAuB7lJ,KAAKC,OAErCylJ,EAAW/+I,EAAO87B,EAAQ,CAClC,EAsEKqjH,GAAsBC,IAmBtB,IAnBuB,IAC3BpnP,EAAG,WACHqnP,EAAU,iBACVxB,EAAgB,QAChB/hH,EAAO,QACPwjH,EAAO,WACPP,EAAU,YACV9C,EAAW,aACXC,EAAY,yBACZC,EAAwB,yBACxBC,EAAwB,MACxBC,EAAK,WACLC,EAAU,gBACVlD,EAAe,gBACfmD,EAAe,OACfC,EAAM,OACNC,EAAM,gBACNtD,EAAe,sBACfE,GACD+F,EACC,MAAMrE,EAAa,GACbG,EAAqBiD,GAAkB,CAC3CpD,aACA8C,mBACA5B,cACAC,eACAC,2BACAC,2BACAC,QACAC,aACAlD,kBACAmD,kBACAC,SACAC,SACAtD,kBACAE,0BAGF,GAAIv9G,EAAQtlI,MAAQslI,EAAQtlI,IAAIsvI,MAAO,CACrC,MAAM+B,EAAU,CAAC/L,EAAQtlI,KACrBslI,EAAQhoH,MAAQgoH,EAAQhoH,IAAIgyH,OAAShK,EAAQhoH,IAAItd,KAAOslI,EAAQhoH,IAAItd,IAAI4xI,cAAgBtM,EAAQtlI,IAAI4xI,aACtGP,EAAQjxI,KAAKklI,EAAQhoH,IAAItd,KAE3B,MAAM+oP,EAAoB53G,GAAM03G,EAAY,CAC1CvoP,IAAKglI,EAAQtlI,IAAI4xI,YACjBlwI,aAAc,cACdf,YAAa,gBAETqoP,EAAqBvE,GAAkBn/G,EAAS+L,EAASqzG,EAAoB7B,GAInFA,EAAsB,CACpBvkP,KAAM,sBACNgnI,UACAs/G,QANc,CACdtkP,IAAKglI,EAAQtlI,IAAI4xI,eAOnB,MAAMq3G,EAASznP,EAAIunP,EAAmBC,GACtCzE,EAAWnkP,KAAK6oP,EAClB,CAEA,GAAI3jH,EAAQhoH,MAAQgoH,EAAQhoH,IAAIgyH,MAAO,CAErC,GADwBhK,EAAQhoH,IAAItd,OAASslI,EAAQtlI,KAAOslI,EAAQtlI,IAAI4xI,cAAgBtM,EAAQhoH,IAAItd,IAAI4xI,aACnF,CACnB,MAAMs3G,EAAuB/3G,GAAM03G,EAAY,CAC7CvoP,IAAKglI,EAAQhoH,IAAItd,IAAI4xI,YACrBlwI,aAAc,cACdf,YAAa,gBAETwoP,EAAwB1E,GAAkBn/G,EAAS,CAACA,EAAQhoH,IAAItd,KAAM0kP,EAAoB7B,GAIhGA,EAAsB,CACpBvkP,KAAM,sBACNgnI,UACAs/G,QANc,CACdtkP,IAAKglI,EAAQhoH,IAAItd,IAAI4xI,eAOvB,MAAMw3G,EAAY5nP,EAAI0nP,EAAsBC,GAC5C5E,EAAWnkP,KAAKgpP,EAClB,CACA,MAAMC,EAAqBl4G,GAAM03G,EAAY,CAC3CvoP,IAAKglI,EAAQhoH,IAAIs0H,YACjBlwI,aAAc,cACdhD,QAASqlN,GAAkBz+E,EAAQhoH,KACnC3c,YAAa,iCAET2oP,EA52BwBC,KAAA,IAAC,QACjCjkH,EAAO,mBACPo/G,EAAkB,sBAClB7B,GACD0G,EAAA,MAAK,CAACr6O,EAAOw5L,KACZ,MAAMi8C,EAAWH,GAAat1O,EAAOw5L,GACrC,GAAIi8C,EACF,OAAOD,EAAmBC,EAAUr/G,GAEtC,MAAMgK,EAAQ,IAAItwI,WAAW0pM,EAAQhrM,UAOrC,GANAmlP,EAAsB,CACpBvkP,KAAM,gBACNgnI,YAIEA,EAAQhoH,IAAItd,IAEd,OADAslI,EAAQhoH,IAAIgoO,eAAiBh2G,EACtBo1G,EAAmB,KAAMp/G,GAElCA,EAAQhoH,IAAIgyH,MAAQA,EACpBu1G,GAAiBv/G,GAAS,SAAU8iH,GAClC,GAAIA,EAGF,OAFAA,EAAW5mP,IAAMknM,EACjB0/C,EAAWjlP,OAASulM,EAAQvlM,OACrBuhP,EAAmB0D,EAAY9iH,GAExCo/G,EAAmB,KAAMp/G,EAC3B,GAAE,CACH,EA+0BsCkkH,CAA0B,CAC3DlkH,UACAo/G,qBACA7B,0BAEFA,EAAsB,CACpBvkP,KAAM,mBACNgnI,YAEF,MAAMmkH,EAAiBjoP,EAAI6nP,EAAoBC,GAC/C/E,EAAWnkP,KAAKqpP,EAClB,CACA,MAAMC,EAAwBv4G,GAAM03G,EAAY,CAC9CvoP,IAAKglI,EAAQ5uE,MAAQ4uE,EAAQ5uE,KAAKk7E,aAAetM,EAAQsM,YACzDlwI,aAAc,cACdhD,QAASqlN,GAAkBz+E,GAC3B3kI,YAAa,YAETgpP,EAAyB5E,GAAsB,CACnDz/G,UACAo/G,qBACAhjP,aAAcgoP,EAAsBhoP,aACpCmhP,0BAEFA,EAAsB,CACpBvkP,KAAM,mBACNgnI,YAEF,MAAMskH,EAAapoP,EAAIkoP,EAAuBC,GAC9CC,EAAWzvJ,iBAAiB,WAAYkuJ,GAAe,CACrD/iH,UACAijH,aACA9C,cACAC,eACAC,2BACAC,2BACAC,QACAC,aACAlD,kBACAmD,kBACAC,YAEFzB,EAAWnkP,KAAKwpP,GAGhB,MAAMC,EAAe,CAAC,EAOtB,OANAtF,EAAW3kP,SAAQkqP,IACjBA,EAAU3vJ,iBAAiB,UAvQT4vJ,KAAA,IAAC,aACrBF,EAAY,QACZf,GACDiB,EAAA,OAAKvgJ,IACYA,EAAMh+F,OACVhJ,SAAWsmP,IAAYe,EAAaG,gBAC9ClB,IACAe,EAAaG,eAAgB,EAC/B,CACD,EA8PyCC,CAAc,CAClDJ,eACAf,YACC,IAEE,IAAMxE,GAASC,EAAW,EAO7B2F,GAAUn0C,GAAO,cAiBjBo0C,GAASA,CAACniF,EAAM/+B,KACpB,MAAMmhH,EAAkBnhH,EAAM7tH,YAAc,CAAC,EAC7C,OAAO4sJ,GAAQA,EAAKh/B,aAAeg/B,EAAKh/B,YAAYkO,OAASkzG,EAAgBlzG,OAAS8wB,EAAKh/B,YAAYkO,MAAMkzG,EAAgBlzG,MAAM,EAmB/HmzG,GAAkB,SAAUC,GAChC,MAAMj8G,EAAS,CAAC,EAiBhB,OAhBAi8G,EAAU1qP,SAAQ2qP,IAIZ,IAJa,UACjB/7G,EAAS,KACTlwI,EAAI,QACJiwI,GACDg8G,EACCl8G,EAAOG,GAAaH,EAAOG,IAAc,GACzCH,EAAOG,GAAWpuI,KAAK0tI,EAAqB,GAAGxvI,IAAOiwI,KAAW,IAEnEnoI,OAAO0M,KAAKu7H,GAAQzuI,SAAQ,SAAU4uI,GACpC,GAAIH,EAAOG,GAAWlpI,OAAS,EAG7B,OAFA4kP,GAAQ,YAAY17G,iCAAyCH,EAAOG,GAAWxzH,KAAK,6GACpFqzH,EAAOG,GAAa,MAGtBH,EAAOG,GAAaH,EAAOG,GAAW,EACxC,IACOH,CACT,EACMm8G,GAAa,SAAUC,GAC3B,IAAI5qO,EAAQ,EAOZ,OANI4qO,EAASj9G,OACX3tH,IAEE4qO,EAASl9G,OACX1tH,IAEKA,CACT,EAcM6qO,GAAoB,SAAU1iF,EAAM/+B,GACxC,MAAMmhH,EAAkBnhH,EAAM7tH,YAAc,CAAC,EACvCuvO,EAAYN,GA1EF,SAAUphH,GAG1B,MAAMmhH,EAAkBnhH,EAAM7tH,YAAc,CAAC,EAC7C,GAAIgvO,EAAgBhzG,OAClB,OAAOjJ,EAAYi8G,EAAgBhzG,OAEvC,CAmEoCwzG,CAAU3hH,IAAU,IAGtD,GAAIkhH,GAAOniF,EAAM/+B,KAAW0hH,EAAUn9G,QAjExB24G,EAACn+E,EAAM/+B,KACrB,IAAKkhH,GAAOniF,EAAM/+B,GAChB,OAAO,EAET,MAAMmhH,EAAkBnhH,EAAM7tH,YAAc,CAAC,EACvCyvO,EAAa7iF,EAAKh/B,YAAYkO,MAAMkzG,EAAgBlzG,OAC1D,IAAK,MAAMqjE,KAAWswC,EAKpB,IAAKA,EAAWtwC,GAASj6M,MAAQuqP,EAAWtwC,GAASxxE,UACnD,OAAO,EAGX,OAAO,CAAK,EAmDLo9G,CAAQn+E,EAAM/+B,GAAQ,CAIzB,MAAM6hH,EAAgBT,GZ/syCG,SAA2Bz1G,EAAQm2G,GAChE,IAAKn2G,EAAO5L,YAAYkO,QAAU6zG,EAChC,OAAO,KAGT,IAAIF,EAAaj2G,EAAO5L,YAAYkO,MAAM6zG,GAE1C,IAAKF,EACH,OAAO,KAGT,IAAK,IAAIrkP,KAAQqkP,EAAY,CAC3B,IAAIG,EAAYH,EAAWrkP,GAE3B,GAAIwkP,EAAUx5H,SAAWw5H,EAAUjiH,UAEjC,OAAOoF,EAAY68G,EAAUjiH,UAAU,GAAG3tH,WAAWg8H,OAEzD,CAEA,OAAO,IACT,CY0ryC4C6zG,CAAkBjjF,EAAMoiF,EAAgBlzG,QAAU,IACpF4zG,EAAct9G,QAChBm9G,EAAUn9G,MAAQs9G,EAAct9G,MAEpC,CAEF,OAAOm9G,CACT,EACMO,GAAQn1C,GAAO,oBACfo1C,GAAyB,SAAUzrG,GACvC,IAAKA,IAAmBA,EAAe5W,SACrC,OAEF,MAAMA,EAAW4W,EAAe5W,SAChC,OAAO7mI,KAAK8B,UAAU,CACpB4Z,GAAImrH,EAASnrH,GACb05H,UAAWqI,EAAerI,UAC1BxwC,MAAO64C,EAAe74C,MACtBC,OAAQ44C,EAAe54C,OACvBunC,OAAQvF,EAAS1tH,YAAc0tH,EAAS1tH,WAAWg8H,QAAU,IAEjE,EAaMg0G,GAAuB,SAAUz7O,EAAI07O,GACzC,IAAK17O,EACH,MAAO,GAET,MAAMhQ,EAASqpJ,IAAAA,iBAA0Br5I,GACzC,OAAKhQ,EAGEA,EAAO0rP,GAFL,EAGX,EASMC,GAAa,SAAUlmP,EAAOmmP,GAClC,MAAMC,EAAWpmP,EAAMnF,QACvBmF,EAAMivH,MAAK,SAAUvnB,EAAM6wD,GACzB,MAAM8tF,EAAMF,EAAOz+I,EAAM6wD,GACzB,OAAY,IAAR8tF,EACKD,EAASzrP,QAAQ+sG,GAAQ0+I,EAASzrP,QAAQ49J,GAE5C8tF,CACT,GACF,EAYMC,GAA2B,SAAU5+I,EAAM6wD,GAC/C,IAAIguF,EACAC,EASJ,OARI9+I,EAAK1xF,WAAWopH,YAClBmnH,EAAgB7+I,EAAK1xF,WAAWopH,WAElCmnH,EAAgBA,GAAiB3iG,IAAAA,OAAgB8vD,UAC7Cn7C,EAAMviJ,WAAWopH,YACnBonH,EAAiBjuF,EAAMviJ,WAAWopH,WAEpConH,EAAiBA,GAAkB5iG,IAAAA,OAAgB8vD,UAC5C6yC,EAAgBC,CACzB,EAkDA,IAAIC,GAAiB,SAAU7jF,EAAM8jF,EAAiBxsE,EAAaL,EAAc8sE,EAAkCC,GAEjH,IAAKhkF,EACH,OAEF,MAAMznK,EAAU,CACd82I,UAAWy0G,EACXjlJ,MAAOy4E,EACPx4E,OAAQm4E,EACR8sE,oCAEF,IAAIhjH,EAAYi/B,EAAKj/B,UAEjBowE,GAASpgE,YAAYivB,KACvBj/B,EAAYijH,EAAmBC,0BAG/B1rP,EAAQm3I,WAAY,GAGtB,IAAIw0G,EAAqBnjH,EAAUzrH,KAAIwrH,IACrC,IAAIuO,EACJ,MAAMxwC,EAAQiiC,EAAS1tH,YAAc0tH,EAAS1tH,WAAWmpH,YAAcuE,EAAS1tH,WAAWmpH,WAAW19B,MAChGC,EAASgiC,EAAS1tH,YAAc0tH,EAAS1tH,WAAWmpH,YAAcuE,EAAS1tH,WAAWmpH,WAAWz9B,OAGvG,OAFAuwC,EAAYvO,EAAS1tH,YAAc0tH,EAAS1tH,WAAWopH,UACvD6S,EAAYA,GAAa2R,IAAAA,OAAgB8vD,UAClC,CACLzhE,YACAxwC,QACAC,SACAgiC,WACD,IAEHwiH,GAAWY,GAAoB,CAACp/I,EAAM6wD,IAAU7wD,EAAKuqC,UAAYsmB,EAAMtmB,YAGvE60G,EAAqBA,EAAmBt5O,QAAOu5O,IAAQhzC,GAASV,eAAe0zC,EAAIrjH,YAGnF,IAAIsjH,EAAsBF,EAAmBt5O,QAAOu5O,GAAOhzC,GAAST,UAAUyzC,EAAIrjH,YAC7EsjH,EAAoB9mP,SAIvB8mP,EAAsBF,EAAmBt5O,QAAOu5O,IAAQhzC,GAAS/oF,WAAW+7H,EAAIrjH,aAIlF,MAAMujH,EAAwBD,EAAoBx5O,QAAOu5O,GAAOA,EAAI90G,UAAYq1E,GAAOM,mBAAqB8+B,IAC5G,IAAIQ,EAA+BD,EAAsBA,EAAsB/mP,OAAS,GAGxF,MAAMinP,EAAmBF,EAAsBz5O,QAAOu5O,GAAOA,EAAI90G,YAAci1G,EAA6Bj1G,YAAW,GAEvH,IAAyC,IAArC00G,EAA4C,CAC9C,MAAMS,EAAYD,GAAoBH,EAAoB,IAAMF,EAAmB,GACnF,GAAIM,GAAaA,EAAU1jH,SAAU,CACnC,IAAIxqI,EAAO,qBAQX,OAPIiuP,IACFjuP,EAAO,oBAEL8tP,EAAoB,KACtB9tP,EAAO,uBAET4sP,GAAM,YAAYC,GAAuBqB,YAAoBluP,iBAAqBiC,GAC3EisP,EAAU1jH,QACnB,CAEA,OADAoiH,GAAM,2CAA4C3qP,GAC3C,IACT,CAEA,MAAMksP,EAAiBJ,EAAsBz5O,QAAOu5O,GAAOA,EAAItlJ,OAASslJ,EAAIrlJ,SAE5EwkJ,GAAWmB,GAAgB,CAAC3/I,EAAM6wD,IAAU7wD,EAAKjG,MAAQ82D,EAAM92D,QAE/D,MAAM6lJ,EAAwBD,EAAe75O,QAAOu5O,GAAOA,EAAItlJ,QAAUy4E,GAAe6sE,EAAIrlJ,SAAWm4E,IACvGqtE,EAA+BI,EAAsBA,EAAsBpnP,OAAS,GAEpF,MAAMqnP,EAAoBD,EAAsB95O,QAAOu5O,GAAOA,EAAI90G,YAAci1G,EAA6Bj1G,YAAW,GACxH,IAAIu1G,EACAC,EACAC,EAYAC,EAIJ,GAbKJ,IACHC,EAAwBH,EAAe75O,QAAOu5O,GAAOA,EAAItlJ,MAAQy4E,GAAe6sE,EAAIrlJ,OAASm4E,IAE7F4tE,EAA4BD,EAAsBh6O,QAAOu5O,GAAOA,EAAItlJ,QAAU+lJ,EAAsB,GAAG/lJ,OAASslJ,EAAIrlJ,SAAW8lJ,EAAsB,GAAG9lJ,SAGxJwlJ,EAA+BO,EAA0BA,EAA0BvnP,OAAS,GAC5FwnP,EAAuBD,EAA0Bj6O,QAAOu5O,GAAOA,EAAI90G,YAAci1G,EAA6Bj1G,YAAW,IAMvH20G,EAAmBgB,uBAAwB,CAE7C,MAAMC,EAAqBR,EAAenvO,KAAI6uO,IAC5CA,EAAIe,UAAY3iP,KAAK0lI,IAAIk8G,EAAItlJ,MAAQy4E,GAAe/0K,KAAK0lI,IAAIk8G,EAAIrlJ,OAASm4E,GACnEktE,KAGTb,GAAW2B,GAAoB,CAACngJ,EAAM6wD,IAEhC7wD,EAAKogJ,YAAcvvF,EAAMuvF,UACpBvvF,EAAMtmB,UAAYvqC,EAAKuqC,UAEzBvqC,EAAKogJ,UAAYvvF,EAAMuvF,YAEhCH,EAAoBE,EAAmB,EACzC,CAEA,MAAMT,EAAYO,GAAqBD,GAAwBH,GAAqBJ,GAAoBH,EAAoB,IAAMF,EAAmB,GACrJ,GAAIM,GAAaA,EAAU1jH,SAAU,CACnC,IAAIxqI,EAAO,qBAaX,OAZIyuP,EACFzuP,EAAO,oBACEwuP,EACTxuP,EAAO,uBACEquP,EACTruP,EAAO,oBACEiuP,EACTjuP,EAAO,mBACE8tP,EAAoB,KAC7B9tP,EAAO,uBAET4sP,GAAM,YAAYC,GAAuBqB,YAAoBluP,iBAAqBiC,GAC3EisP,EAAU1jH,QACnB,CAEA,OADAoiH,GAAM,2CAA4C3qP,GAC3C,IACT,EAaA,MAAM4sP,GAAwB,WAC5B,IAAIC,EAAanmP,KAAKomP,qBAAsBrkG,IAAAA,kBAAiC,EAI7E,OAHK55D,MAAMnoF,KAAKqmP,oBACdF,EAAanmP,KAAKqmP,kBAEbzB,GAAe5kP,KAAK8hI,UAAUi/B,KAAM/gK,KAAKsmP,gBAAiBhmK,SAAS6jK,GAAqBnkP,KAAK6iK,MAAMn6J,KAAM,SAAU,IAAMy9O,EAAY7lK,SAAS6jK,GAAqBnkP,KAAK6iK,MAAMn6J,KAAM,UAAW,IAAMy9O,EAAYnmP,KAAK8kP,iCAAkC9kP,KAAKumP,oBACtQ,EA8KA,SAASC,GAA6B77G,GACpC,IACE,OAAO,IAAI9P,IAAI8P,GAAa87G,SAASxvP,MAAM,KAAK+B,OAAO,GAAG+a,KAAK,IACjE,CAAE,MAAOpc,GACP,MAAO,EACT,CACF,CAcA,MA2HM+uP,GAAcC,IAKd,IALe,iBACnBC,EAAgB,cAChBxhC,EAAa,gBACbs1B,EAAe,cACfmM,GACDF,EACC,IAAKvhC,EACH,OAEF,MAAM0hC,EAAM/kG,IAAAA,eAA0BA,IAAAA,OAChCglG,EAAgBH,EAAiBI,eACvC,IAAKD,EACH,OAuBF,GArBA3hC,EAAczsN,SAAQoB,IACpB,MAAMooG,EAAOpoG,EAASurN,QAAUo1B,IAKZ,kBAATv4I,GAAqB4/C,IAAAA,MAAe5/C,IAASA,EAAO,IAAOA,EAAO0gB,KAIxE9oH,EAASwrN,QAAWxrN,EAASwrN,OAAOlnN,QAGzCtE,EAASwrN,OAAO5sN,SAAQw1N,IACtB,MAAMpyD,EAAM,IAAI+qF,EAAI3kJ,EAAMA,EAAMgsH,EAAM72N,OAAS62N,EAAMt0N,KAAOs0N,EAAMxxN,MAAQ,IAC1Eo/J,EAAIoyD,MAAQA,EACZpyD,EAAIzkK,MAAQ62N,EA/DM,SAAUpyD,GAChC58J,OAAO2kK,iBAAiB/H,EAAIoyD,MAAO,CACjCz3M,GAAI,CACF5V,IAAGA,KACD8qM,GAAQ51G,IAAI3qF,KAAK,0DACV0wJ,EAAIzkK,MAAMyB,MAGrBzB,MAAO,CACLwJ,IAAGA,KACD8qM,GAAQ51G,IAAI3qF,KAAK,8DACV0wJ,EAAIzkK,MAAMqF,OAGrBukO,YAAa,CACXpgO,IAAGA,KACD8qM,GAAQ51G,IAAI3qF,KAAK,oEACV0wJ,EAAIzkK,MAAMqF,QAIzB,CA2CMsqP,CAAgBlrF,GAChBgrF,EAActqF,OAAOV,EAAI,GACzB,KAECgrF,EAAcjrF,OAASirF,EAAcjrF,KAAKz9J,OAC7C,OAKF,MAAMy9J,EAAOirF,EAAcjrF,KACrBorF,EAAY,GAGlB,IAAK,IAAInpP,EAAI,EAAGA,EAAI+9J,EAAKz9J,OAAQN,IAC3B+9J,EAAK/9J,IACPmpP,EAAU/tP,KAAK2iK,EAAK/9J,IAIxB,MAAMopP,EAAyBD,EAAUhwP,QAAO,CAAC4G,EAAKi+J,KACpD,MAAMqrF,EAAWtpP,EAAIi+J,EAAIzkC,YAAc,GAGvC,OAFA8vH,EAASjuP,KAAK4iK,GACdj+J,EAAIi+J,EAAIzkC,WAAa8vH,EACdtpP,CAAG,GACT,CAAC,GAEEupP,EAAmBloP,OAAO0M,KAAKs7O,GAAwB/5H,MAAK,CAACtuC,EAAG4H,IAAMlC,OAAO1F,GAAK0F,OAAOkC,KAE/F2gK,EAAiB1uP,SAAQ,CAAC2+H,EAAWm8F,KACnC,MAAM6zB,EAAWH,EAAuB7vH,GAClCiwH,EAAiB3lH,SAASilH,GAAiBA,EAAgBvvH,EAC3DkwH,EAAWhjK,OAAO6iK,EAAiB5zB,EAAM,KAAO8zB,EAEtDD,EAAS3uP,SAAQojK,IACfA,EAAIC,QAAUwrF,CAAQ,GACtB,GACF,EAGEC,GAAgB,CACpB/wO,GAAI,KACJkuH,MAAO,QACPJ,UAAW,aACXzH,SAAU,WACVwH,QAAS,WACTI,UAAW,cACXF,gBAAiB,mBACjBijH,UAAW,aACXC,SAAU,aAENC,GAAsB,IAAIhnP,IAAI,CAAC,KAAM,QAAS,YAAa,WAAY,UAAW,YAAa,YAAa,UAAW,qBAiDvHinP,GAAiCA,CAACjB,EAAkBjlB,EAAczlE,KAClE0qF,EAAiBI,iBAGrBJ,EAAiBI,eAAiB9qF,EAAKM,mBAAmB,CACxD4D,KAAM,WACNtyB,MAAO,mBACN,GAAOr8C,MACLm6G,GAAQ1lD,QAAQD,gBACnB2gG,EAAiBI,eAAec,gCAAkCnmB,GACpE,EAWIomB,GAAsB,SAAU1hP,EAAOq5E,EAAK+R,GAChD,IAAI1zF,EACAg+J,EACJ,GAAKtqE,GAGAA,EAAMqqE,KAIX,IADA/9J,EAAI0zF,EAAMqqE,KAAKz9J,OACRN,KACLg+J,EAAMtqE,EAAMqqE,KAAK/9J,GAEbg+J,EAAIzkC,WAAajxH,GAAS01J,EAAIC,SAAWt8E,GAC3C+R,EAAM6yE,UAAUvI,EAGtB,EAqMMisF,GAASh/L,GAAsB,kBAARA,GAAoB44E,SAAS54E,GAIpDi/L,GAAqC,EAAI,GAiDzCC,GAAoB/yG,IACxB,MAAM,eACJgzG,EAAc,SACdprH,EAAQ,QACRsB,EAAO,KACP5uE,EACAoyE,UACEX,cAAeo2F,EAAG,GAClB5gN,EAAE,SACFypH,EAAW,IAEbioH,WAAYvvP,EAAK,UACjB8qI,EAAS,SACTnD,GACE2U,EACEkzG,EAAaloH,EAAS9hI,OAAS,EACrC,IAAIiqP,EAAY,iCACZnzG,EAAYg9D,oBACdm2C,EAAY,wBAAwBnzG,EAAYg9D,uBACvCh9D,EAAYozG,gBACrBD,EAAY,2CAEVnzG,EAAYqzG,cACdF,GAAa,qBAAqBnzG,EAAYqzG,eAEhD,MAAMC,EAAoC,kBAAd9kH,EACtBpkI,EAAO41I,EAAY9W,QAAQhlI,IAAM,UAAY,cAC7CqvP,EAAqBD,EAAet4C,GAAkB,CAC1D1vE,eAAgBpC,IACb,EAAI,EACT,MAAO,GAAG9+H,MAAS+3N,EAAMz+N,KAASy+N,EAAM+wB,MAAiBI,EAAe,UAAU9kH,KAAa+kH,KAAwB,IAAM,uBAAuBrqH,EAAQh4H,YAAYg4H,EAAQ3+C,QAAU+oK,EAAe,oBAAoBh5L,EAAKppD,YAAYopD,EAAKiwB,OAAS,IAAM,oBAAoByoK,KAAoB,cAAcprH,KAAc,cAAcyD,KAAc,iBAAiB8nH,KAAe,cAAc5xO,IAAK,EAEjZiyO,GAA6BphH,GAAa,GAAGA,cAuK7CqhH,GAA8BC,IAM9B,IAN+B,yBACnCC,EAAwB,gBACxBhpH,EAAe,gBACf2T,EAAe,WACfs1G,EAAU,cACVC,GACDH,EACC,GAAI/oH,IAAoB2T,EACtB,OAAO,EAET,GAAmB,UAAfs1G,EAAwB,CAC1B,MAAME,EAAyBH,EAAyBI,mBAAmB,CACzE7xP,KAAM,SAMR,OAAQ4xP,GAA0BA,EAAuBv4F,KAAOjd,CAClE,CAKA,GAAmB,SAAfs1G,GAAyBC,EAAe,CAC1C,MAAMG,EAA6BL,EAAyBM,sBAAsB,CAChF/xP,KAAM,UAoBR,OAAI8xP,GAA8BA,EAA2Bz4F,KAAOjd,CAItE,CACA,OAAO,CAAK,EA2DR41G,GAAuBC,IAC3B,MAAMn0G,EAAcm0G,EAAcC,gBAClC,IAAKp0G,EACH,OASF,GAPiCyzG,GAA4B,CAC3DE,yBAA0BQ,EAAcE,0BACxC1pH,gBAAiBwpH,EAAcG,iBAC/Bh2G,gBAAiB0B,EAAY3U,SAC7BuoH,WAAYO,EAAcI,YAC1BV,cAAeM,EAAcK,kBAnEGb,KAClC,IAAKA,EACH,OAAO,EAET,MAAMK,EAA6BL,EAAyBM,sBAAsB,CAChF/xP,KAAM,UAEFuyP,EAA4Bd,EAAyBM,sBAAsB,CAC/E/xP,KAAM,SAEFwyP,EAA4BV,GAA8BS,EAC1DE,EAA0BD,GAA6BV,EAA2Bz4F,KAAOk5F,EAA0Bl5F,GAEzH,SAD0Cm5F,IAAkE,IAArCV,EAA2B3pP,OAAmD,IAApCoqP,EAA0BpqP,OAClGsqP,EAG7B,EAqDoBC,CAA4BT,EAAcE,2BAA4B,CAEpG,GAAkC,SAA9BF,EAAcU,aA/BQV,KAC5B,MAAMH,EAA6BG,EAAcE,0BAA0BJ,sBAAsB,CAC/F/xP,KAAM,UAEFuyP,EAA4BN,EAAcE,0BAA0BJ,sBAAsB,CAC9F/xP,KAAM,SAGR,OADkC8xP,GAA8BS,GAC5BT,EAA2Bz4F,GAAKk5F,EAA0Bl5F,EAAE,EAuBlDu5F,CAAsBX,GAEhE,YADAA,EAAcE,0BAA0BtuH,QAAQ,uBAhDzBouH,KACtBA,IAGLA,EAAc1rF,QACd0rF,EAAcY,kBACdZ,EAAczkF,OAAM,EA6ClBslF,CAAqBb,EACvB,GA8BIc,GAAiBC,IAGjB,IAHkB,gBACtB/+G,EAAe,YACfg/G,GACDD,EAGC,QAAK/+G,GAcEhoI,KAAKq1K,MAAMrtC,GAAmBg/G,EAAcn7C,EAAiB,EAEhEo7C,GAAuCA,CAACp1G,EAAaq1G,KAGzD,GAAmB,QAAfA,EACF,OAAO,KAET,MAAMl/G,EAxDcm/G,KACpB,IAAIH,EAAc,EAyBlB,MAxBA,CAAC,QAAS,SAAS3xP,SAAQ,SAAUtB,GACnC,MAAMqzP,EAAiBD,EAAY,GAAGpzP,eACtC,IAAKqzP,EACH,OAEF,MAAM,MACJrkP,EAAK,IACLq5E,GACEgrK,EACJ,IAAI3tH,EACiB,kBAAV12H,GAAqC,kBAARq5E,EACtCq9C,EAAWglB,IAAAA,OAAgBriE,GAAOqiE,IAAAA,OAAgB17I,GACxB,kBAAVA,GAAqC,kBAARq5E,IAC7Cq9C,EAAWr9C,EAAMr5E,GAEK,qBAAb02H,GAA4BA,EAAWutH,IAChDA,EAAcvtH,EAElB,IAG2B,kBAAhButH,GAA4BA,EAAc9lK,OAAOC,mBAC1D6lK,EAAc9lK,OAAO8lK,IAEhBA,CAAW,EA8BMK,CAAc,CACpCvR,gBAAiBjkG,EAAYikG,gBAC7Bh7B,gBAAiBjpE,EAAYipE,kBAM/B,IAAK9yE,EACH,OAAO,KAET,MAAMzM,EAAiBsW,EAAYtT,SAAShD,eACtC+rH,EAAsBR,GAAe,CACzC9+G,kBACAg/G,YAA8B,EAAjBzrH,IAETgsH,EAA2BT,GAAe,CAC9C9+G,kBACAg/G,YAAazrH,IAETisH,EAAwB,sBAAsB31G,EAAYizG,4BAAiCjzG,EAAYtT,SAASnrH,wBAA6B40H,mCAAsD6J,EAAYpY,uCAA4C8B,6PACjQ,OAAI+rH,GAAuBC,EAClB,CACLE,SAAUH,EAAsB,OAAS,OACzCv8O,QAASy8O,GAGN,IAAI,EAQPtO,GAAqBwO,IAGrB,IAHsB,KAC1B3zP,EAAI,QACJgnI,GACD2sH,EACC,IAAK3sH,EACH,OAEF,MAAM4sH,EAAcr5G,QAAQvT,EAAQtlI,KAAOslI,EAAQhoH,KAAOgoH,EAAQhoH,IAAIkzF,IAChE2hJ,EAAwBt5G,QAAQvT,EAAQhoH,MAAQgoH,EAAQhoH,IAAIgyH,OAC5DhiI,OAAmC/L,IAA3B+jI,EAAQ8pH,eAA+B9pH,EAAQh4H,MAAQg4H,EAAQ8pH,eAC7E,MAAO,CACL9wP,KAAMA,GAAQgnI,EAAQhnI,KACtBgC,IAAKglI,EAAQsM,aAAetM,EAAQhlI,IACpCgN,QACA02H,SAAUsB,EAAQtB,SAClBkuH,cACAC,wBACD,EAUH,MAAMC,WAAsBv/C,GAAQe,YAClCrtM,WAAAA,CAAY2jK,GAGV,GAFAlnC,SAEKknC,EACH,MAAM,IAAIrjK,UAAU,wCAEtB,GAAoC,oBAAzBqjK,EAASgB,YAClB,MAAM,IAAIrkK,UAAU,mCAEtB,IAAKqjK,EAASmoF,YACZ,MAAM,IAAIxrP,UAAU,4BAGtBI,KAAKowI,UAAY6yB,EAAS7yB,UAC1BpwI,KAAKqrP,WAAa,CAChBzgE,KAAM,EACNhyK,MAAO,GAET5Y,KAAKsrP,UAAY9gI,IACjBxqH,KAAKurP,cACLvrP,KAAKooP,WAAa,KAClBpoP,KAAK2jI,UAAY,KAEjB3jI,KAAKwrP,WAAavoF,EAASwoF,UAC3BzrP,KAAKggL,aAAe/c,EAASgB,YAC7BjkK,KAAK0rP,UAAYzoF,EAASwK,SAC1BztK,KAAK2rP,SAAW1oF,EAASg8B,QACzBj/L,KAAKkoK,UAAYjF,EAASlmC,SAC1B/8H,KAAK4rP,aAAe3oF,EAASmoF,YAC7BprP,KAAKy2M,KAAOxzC,EAASsjC,IACrBvmM,KAAK0pP,YAAczmF,EAAS8lF,WAC5B/oP,KAAK6rP,uBAAoB,EACzB7rP,KAAK8rP,wBAAqB,EAC1B9rP,KAAK+rP,sBAAwB9oF,EAAS+oF,qBACtChsP,KAAKisP,kBAAoBhpF,EAASipF,iBAClClsP,KAAKgqP,YAAc/mF,EAASunF,WAC5BxqP,KAAKmsP,eAAiBlpF,EAASmpF,cAC/BpsP,KAAKqsP,kBAAoBppF,EAAS2jF,iBAClC5mP,KAAKssP,OAAS,OACdtsP,KAAKwpP,0BAA4BvmF,EAAS6lF,yBAC1C9oP,KAAKusP,8BAA+B,EACpCvsP,KAAK0yN,kBAAoBzvD,EAAS0vD,iBAClC3yN,KAAKwsP,0BAA4BvpF,EAASwpF,yBAC1CzsP,KAAK0sP,iBAAmBzpF,EAAStxB,gBACjC3xI,KAAKsyM,qBAAuBrvC,EAASqvC,qBACrCtyM,KAAKsiN,uBAAyBr/C,EAASq/C,uBAEvCtiN,KAAK2sP,oBAAsB,KAC3B3sP,KAAK2oK,YAAS,EACd3oK,KAAKypP,kBAAoB,EACzBzpP,KAAK4sP,wCAAyC,EAC9C5sP,KAAKupP,gBAAkB,KACvBvpP,KAAK6sP,YAAc,KACnB7sP,KAAK8sP,iBAAmB,GACxB9sP,KAAK2pP,gBAAiB,EACtB3pP,KAAK+sP,2BAA4B,EAEjC/sP,KAAKgtP,WAAa,GAClBhtP,KAAKitP,aAAe,EACpBjtP,KAAKktP,aAAc,EACnBltP,KAAKmtP,mBAAqB,CACxB5mH,OAAO,EACPD,OAAO,GAETtmI,KAAKotP,2BAA6B,CAChC7mH,MAAO,KACPD,MAAO,MAETtmI,KAAKqtP,WAAa,GAMlBrtP,KAAKstP,WAAa,GAClBttP,KAAKutP,eAAiB,CACpB7rB,IAAK,GACL4L,QAAS,IAEXttO,KAAKwtP,kBAAmB,EACxBxtP,KAAKytP,gCAAkC,KAEvCztP,KAAK0tP,qBAAuB,KAC5B1tP,KAAK2tP,cAAgB,CAAC,EAEtB3tP,KAAK4tP,qBAAuB3qF,EAAS4qF,oBACrC7tP,KAAK8tP,UAAY,CAAC,EAClB9tP,KAAK+tP,WAAa9qF,EAAS+qF,UAI3BhuP,KAAKiuP,gBAAkBhrF,EAASirF,eAChCluP,KAAKmuP,WAAa,CAChBzqH,aAAc,EACdvhC,KAAM,GAERniG,KAAKouP,YAAcpuP,KAAKquP,oBACxBruP,KAAKsuP,uBAAyB,IAAMtuP,KAAKk7H,QAAQ,kBACjDl7H,KAAKiuP,gBAAgBjzH,GAAG,iBAAkBh7H,KAAKsuP,wBAC/CtuP,KAAK4rP,aAAa14J,iBAAiB,cAAc,KAC1ClzF,KAAKuuP,mBACRvuP,KAAKwuP,QAAS,EAChB,IAGFxuP,KAAKyuP,gBAAiB,EACtBzuP,KAAKw2M,QAAU1H,GAAO,iBAAiB9uM,KAAK0pP,gBAC5CvqP,OAAOka,eAAerZ,KAAM,QAAS,CACnCc,GAAAA,GACE,OAAOd,KAAKssP,MACd,EACA3rP,GAAAA,CAAI+tP,GACEA,IAAa1uP,KAAKssP,SACpBtsP,KAAKw2M,QAAQ,GAAGx2M,KAAKssP,aAAaoC,KAClC1uP,KAAKssP,OAASoC,EACd1uP,KAAKk7H,QAAQ,eAEjB,IAEFl7H,KAAKmsP,eAAenxH,GAAG,SAAS,KAC1Bh7H,KAAK2uP,yBACP3uP,KAAK4uP,oBAELvF,GAAqBrpP,KACvB,IAEFA,KAAKmsP,eAAenxH,GAAG,gBAAgBjhI,IACrCiG,KAAKk7H,QAAQljI,EAAS,CACpBX,KAAM,gBACL0C,GAAU,IAMU,SAArBiG,KAAK0pP,aACP1pP,KAAKwpP,0BAA0BxuH,GAAG,yBAAyB,KACrDh7H,KAAK2uP,yBACP3uP,KAAK4uP,oBAELvF,GAAqBrpP,KACvB,IAMqB,UAArBA,KAAK0pP,aACP1pP,KAAKwpP,0BAA0BxuH,GAAG,kBAAkBjhI,IAClDiG,KAAKk7H,QAAQljI,EAAS,CACpBX,KAAM,kBACL0C,IACCiG,KAAK6uP,uBACP7uP,KAAK8uP,oBAELzF,GAAqBrpP,MAEnBA,KAAK2uP,yBACP3uP,KAAK4uP,oBAELvF,GAAqBrpP,KACvB,GAGN,CAUA,sBAAI+uP,GACF,OAAO/uP,KAAKiuP,gBAAgBe,qBAAqBhvP,KAAK0pP,YACxD,CACA2E,iBAAAA,GACE,OAAOxR,GAAmC,CACxClQ,OAAO,EACPjB,eAAgB1rO,KAAKktP,YACrBhpK,wBAAwB,EACxByuI,iBAAkB3yN,KAAK0yN,kBACvB/gF,gBAAiB3xI,KAAK0sP,kBAE1B,CAOAnB,WAAAA,GACEvrP,KAAKivP,sBAAwB,EAC7BjvP,KAAKkvP,cAAgB,EACrBlvP,KAAKmvP,qBAAuB,EAC5BnvP,KAAKovP,sBAAwB,EAC7BpvP,KAAKqvP,qBAAuB,EAC5BrvP,KAAKsvP,sBAAwB,EAC7BtvP,KAAKuvP,mBAAqB,EAC1BvvP,KAAKwvP,aAAe,CACtB,CAKAj0H,OAAAA,GACEv7H,KAAKk7H,QAAQ,WACbl7H,KAAK25G,MAAQ,WACb35G,KAAK49J,QACL59J,KAAKyvP,SACDzvP,KAAKouP,aACPpuP,KAAKouP,YAAYnnC,YAEnBjnN,KAAKurP,cACDvrP,KAAK2sP,qBACP5qG,IAAAA,aAAsB/hJ,KAAK2sP,qBAEzB3sP,KAAKiuP,iBAAmBjuP,KAAKsuP,wBAC/BtuP,KAAKiuP,gBAAgBhzH,IAAI,iBAAkBj7H,KAAKsuP,wBAElDtuP,KAAKi7H,KACP,CACAy0H,QAAAA,CAASrvP,GACPL,KAAK2pP,gBAAkBtpP,EACnBA,EACFL,KAAKmtP,mBAAmB5mH,OAAQ,EAGhCvmI,KAAKmsP,eAAewD,YAAY,EAAG3vP,KAAKkoK,YAE5C,CAMAxqK,KAAAA,GACqB,YAAfsC,KAAK25G,OAMT35G,KAAKyvP,SAKLzvP,KAAK25G,MAAQ,QAGR35G,KAAK09J,UACR19J,KAAK4vP,kBAdD5vP,KAAKupP,kBACPvpP,KAAKupP,gBAAkB,KAe7B,CAOAkG,MAAAA,GACMzvP,KAAKupP,iBAAmBvpP,KAAKupP,gBAAgBsG,eAC/C7vP,KAAKupP,gBAAgBsG,gBAGvB7vP,KAAKupP,gBAAkB,KACvBvpP,KAAKqtP,WAAa,GAClBrtP,KAAKstP,WAAa,GAClBttP,KAAKutP,eAAe7rB,IAAM,GAC1B1hO,KAAKutP,eAAejgB,QAAU,GAC9BttO,KAAKwpP,0BAA0BsG,2BAA2B9vP,KAAK0pP,aAC/D1pP,KAAKwtP,kBAAmB,EACxBzrG,IAAAA,aAAsB/hJ,KAAKytP,iCAC3BztP,KAAKytP,gCAAkC,IACzC,CACAsC,cAAAA,CAAehP,GAGb,MAAmB,cAAf/gP,KAAK25G,OAA0B35G,KAAKupP,iBAInCvpP,KAAKupP,iBAAmBvpP,KAAKupP,gBAAgBxI,YAAcA,GAH9D/gP,KAAK25G,MAAQ,SACN,EAMX,CAQA1xG,KAAAA,CAAMA,GAMJ,MALqB,qBAAVA,IACTjI,KAAKw2M,QAAQ,kBAAmBvuM,GAChCjI,KAAK2oK,OAAS1gK,GAEhBjI,KAAKupP,gBAAkB,KAChBvpP,KAAK2oK,MACd,CACAqnF,WAAAA,GACEhwP,KAAKwuP,QAAS,EACVxuP,KAAKouP,aAEPvR,GAAwB78O,KAAKouP,aAE/BpuP,KAAKgtP,WAAW3uP,OAAS,EACzB2B,KAAK49J,QACL59J,KAAKk7H,QAAQ,QACf,CAQA+0H,SAAAA,GACE,MAAM9W,EAAYn5O,KAAKkwP,gBACvB,IAAKlwP,KAAKmsP,iBAAmBhT,EAC3B,OAAOt+E,KAET,GAAyB,SAArB76J,KAAK0pP,YAAwB,CAC/B,MAAM,SACJtb,EAAQ,SACRC,EAAQ,QACR6Q,GACE/F,EACJ,GAAI9K,GAAYD,IAAapuO,KAAK2pP,iBAAmBzK,EACnD,OAAOl/O,KAAKmsP,eAAenxF,WAE7B,GAAIqzE,EACF,OAAOruO,KAAKmsP,eAAegE,eAE/B,CAGA,OAAOnwP,KAAKmsP,eAAeiE,eAC7B,CAYAC,iBAAAA,CAAkBh6O,GAAkB,IAAb1V,EAAGsJ,UAAA5L,OAAA,QAAA/D,IAAA2P,UAAA,IAAAA,UAAA,GACxB,IAAKoM,EACH,OAAO,KAET,MAAMK,EAAK8mM,GAAcnnM,GACzB,IAAIi6O,EAAYtwP,KAAK2tP,cAAcj3O,GAUnC,OATI/V,IAAQ2vP,GAAaj6O,EAAIgyH,QAC3BroI,KAAK2tP,cAAcj3O,GAAM45O,EAAY,CACnC3lH,YAAat0H,EAAIs0H,YACjBtN,UAAWhnH,EAAIgnH,UACfgL,MAAOhyH,EAAIgyH,MACX82B,OAAQ9oJ,EAAI8oJ,OACZi0E,WAAY/8N,EAAI+8N,aAGbkd,GAAaj6O,CACtB,CAYAk6O,UAAAA,CAAWx3P,GAAkB,IAAb4H,EAAGsJ,UAAA5L,OAAA,QAAA/D,IAAA2P,UAAA,IAAAA,UAAA,GACjB,IAAKlR,EACH,OAAO,KAET,MAAM2d,EAAK+mM,GAAa1kN,GACxB,IAAIy3P,EAAYxwP,KAAK8tP,UAAUp3O,GAG3B1W,KAAK4tP,sBAAwBjtP,IAAQ6vP,GAAaz3P,EAAIsvI,QACxDroI,KAAK8tP,UAAUp3O,GAAM85O,EAAY,CAC/B7lH,YAAa5xI,EAAI4xI,YACjBtC,MAAOtvI,EAAIsvI,QAGf,MAAM3vI,EAAS,CACbiyI,aAAc6lH,GAAaz3P,GAAK4xI,aAKlC,OAHI6lH,IACF93P,EAAO2vI,MAAQmoH,EAAUnoH,OAEpB3vI,CACT,CAQA+3P,kBAAAA,GACE,OAAOzwP,KAAK0wP,YAAc1wP,KAAK09J,QACjC,CAKAmH,IAAAA,GAKE,GAHA7kK,KAAK4vP,iBAGA5vP,KAAK0wP,UAIV,MAAmB,SAAf1wP,KAAK25G,OAAoB35G,KAAKywP,qBACzBzwP,KAAK2wP,cAIT3wP,KAAKywP,sBAAuC,UAAfzwP,KAAK25G,OAAoC,SAAf35G,KAAK25G,QAGjE35G,KAAK25G,MAAQ,SACf,CASAg3I,KAAAA,GAKE,OAJA3wP,KAAK25G,MAAQ,QAGb35G,KAAKkqP,kBACElqP,KAAK4vP,gBACd,CAOA/tH,QAAAA,CAAS+uH,GAA2B,IAAdt3P,EAAO2Q,UAAA5L,OAAA,QAAA/D,IAAA2P,UAAA,GAAAA,UAAA,GAAG,CAAC,EAC/B,IAAK2mP,EACH,OAEF,MAAMjiH,EAAc3uI,KAAK0wP,UACnBv7G,EAAcn1I,KAAKupP,gBACzBvpP,KAAK0wP,UAAYE,EACjB5wP,KAAK6sP,YAAcvzP,EAQA,SAAf0G,KAAK25G,QACPi3I,EAAYC,SAAW,CACrB3vH,cAAe0vH,EAAY1vH,cAC3B/+B,KAAM,GAUiB,SAArBniG,KAAK0pP,aACP1pP,KAAKiuP,gBAAgB6C,2BAA2BF,IAGpD,IAAIG,EAAQ,KAqBZ,GApBIpiH,IACEA,EAAYj4H,GACdq6O,EAAQpiH,EAAYj4H,GACXi4H,EAAYt1I,MACrB03P,EAAQpiH,EAAYt1I,MAGxB2G,KAAKw2M,QAAQ,oBAAoBu6C,QAAYH,EAAYl6O,IAAMk6O,EAAYv3P,QACvE2G,KAAK+uP,qBACP/uP,KAAK+uP,mBAAmBj6E,OAAO87E,EAAa5wP,KAAKggL,gBACjDhgL,KAAKw2M,QAAQ,kCACJx2M,KAAKggL,gCACL6vB,GAAgB7vM,KAAKiwP,iBACjCjwP,KAAK+uP,mBAAmBiC,cAIvBhxP,KAAKk7H,QAAQ,kBAGM,SAAfl7H,KAAK25G,OAAoB35G,KAAKywP,qBAChC,OAAOzwP,KAAK2wP,QAEd,IAAKhiH,GAAeA,EAAYt1I,MAAQu3P,EAAYv3P,IAAK,CACvD,GAAwB,OAApB2G,KAAKooP,WAAqB,EASXwI,EAAY5vH,SAAqD,kBAAnC4vH,EAAY9xH,mBAEzD9+H,KAAKixP,cAELjxP,KAAKkxP,cAET,CAIA,OAHAlxP,KAAK6rP,uBAAoB,OACzB7rP,KAAKk7H,QAAQ,iBAGf,CAGA,MAAMi2H,EAAoBP,EAAY1vH,cAAgByN,EAAYzN,cAKlE,GAJAlhI,KAAKw2M,QAAQ,sBAAsB26C,MAIX,OAApBnxP,KAAKooP,WAKP,GAJApoP,KAAKooP,YAAc+I,EAIfnxP,KAAKooP,WAAa,EACpBpoP,KAAKooP,WAAa,KAClBpoP,KAAK2jI,UAAY,SACZ,CACL,MAAMtF,EAAUr+H,KAAK0wP,UAAUvwH,SAASngI,KAAKooP,YAI7C,GAAIpoP,KAAK2jI,aAAetF,EAAQjE,QAAUiE,EAAQjE,MAAM/7H,SAAWggI,EAAQjE,MAAMp6H,KAAK2jI,YAAa,CACjG,MAAMykH,EAAapoP,KAAKooP,WACxBpoP,KAAKw2M,QAAQ,oCAAoCx2M,KAAK2jI,gCACtD3jI,KAAKixP,cAILjxP,KAAKooP,WAAaA,CACpB,CACF,CAKEjzG,IACFA,EAAYizG,YAAc+I,EACtBh8G,EAAYizG,WAAa,GAC3BjzG,EAAYizG,WAAa,KACzBjzG,EAAYxR,UAAY,OAKpBwR,EAAYizG,YAAc,IAC5BjzG,EAAY9W,QAAUuyH,EAAYzwH,SAASgV,EAAYizG,aAErDjzG,EAAYxR,WAAa,GAAKwR,EAAY9W,QAAQjE,QACpD+a,EAAY1lF,KAAO0lF,EAAY9W,QAAQjE,MAAM+a,EAAYxR,cAI/D3jI,KAAKiuP,gBAAgBmD,uBAAuBziH,EAAaiiH,EAC3D,CAQAhzF,KAAAA,GACM59J,KAAK2sP,sBACP5qG,IAAAA,aAAsB/hJ,KAAK2sP,qBAC3B3sP,KAAK2sP,oBAAsB,KAE/B,CAOAjvF,MAAAA,GACE,OAAoC,OAA7B19J,KAAK2sP,mBACd,CAQAzC,eAAAA,CAAgBvqP,GACdK,KAAKwuP,QAAS,EACdxuP,KAAK0tP,qBAAuB,KAC5B1tP,KAAKmtP,mBAAqB,CACxB5mH,OAAO,EACPD,OAAO,GAETtmI,KAAKixP,cAILjxP,KAAKuQ,OAAO,EAAGsyG,IAAUljH,GAErBK,KAAKouP,cACPpuP,KAAKouP,YAAYp2H,YAAY,CAC3B9iB,OAAQ,wBAGVl1G,KAAKouP,YAAYp2H,YAAY,CAC3B9iB,OAAQ,UAGd,CAQA+7I,WAAAA,GACEjxP,KAAKyuP,gBAAiB,EAClBzuP,KAAK+uP,oBACP/uP,KAAK+uP,mBAAmBsC,sBAE1BrxP,KAAKkxP,cACP,CAMAA,YAAAA,GACMlxP,KAAKouP,aAEPvR,GAAwB78O,KAAKouP,aAE/BpuP,KAAKooP,WAAa,KAClBpoP,KAAK2jI,UAAY,KACjB3jI,KAAKmuP,WAAa,KAClBnuP,KAAK+sP,2BAA4B,EAGjC,MAAMnN,EAAS5/O,KAAK6rP,mBAAqB7rP,KAAK6rP,kBAAkBjM,OAC3B,QAArB5/O,KAAKgqP,cAA0BpK,IAE7C5/O,KAAK4sP,wCAAyC,GAEhD5sP,KAAKqtP,WAAa,GAClBrtP,KAAKstP,WAAa,GAClBttP,KAAKutP,eAAe7rB,IAAM,GAC1B1hO,KAAKutP,eAAejgB,QAAU,GAC9BttO,KAAKtC,QACDsC,KAAKouP,aACPpuP,KAAKouP,YAAYp2H,YAAY,CAC3B9iB,OAAQ,0BAGd,CAWA3kG,MAAAA,CAAOlK,EAAOq5E,GAAqC,IAAhC//E,EAAIsK,UAAA5L,OAAA,QAAA/D,IAAA2P,UAAA,GAAAA,UAAA,GAAG,OAAUqnP,EAAKrnP,UAAA5L,OAAA,QAAA/D,IAAA2P,UAAA,IAAAA,UAAA,GAUvC,GANIy1E,IAAQmjC,MACVnjC,EAAM1/E,KAAKkoK,aAKTxoF,GAAOr5E,EAET,YADArG,KAAKw2M,QAAQ,2DAGf,IAAKx2M,KAAKmsP,iBAAmBnsP,KAAKkwP,gBAGhC,YAFAlwP,KAAKw2M,QAAQ,oEAKf,IAAI+6C,EAAmB,EACvB,MAAMC,EAAiBA,KACrBD,IACyB,IAArBA,GACF5xP,GACF,GAEE2xP,GAAUtxP,KAAK2pP,iBACjB4H,IACAvxP,KAAKmsP,eAAewD,YAAYtpP,EAAOq5E,EAAK8xK,KAU1CF,GAA8B,SAArBtxP,KAAK0pP,eAChB1pP,KAAKgtP,WAtzCayE,EAACtvK,EAAQ97E,EAAOq5E,EAAKgyK,KAC3C,MAAMt7B,EAAW9yN,KAAK4+G,MAAM77G,EAAQqrP,GAAW7tK,GAAAA,kBACzCu2I,EAAS92N,KAAK4+G,MAAMxiC,EAAMgyK,GAAW7tK,GAAAA,kBACrC8tK,EAAgBxvK,EAAOnpF,QAC7B,IAAI+E,EAAIokF,EAAO9jF,OACf,KAAON,OACDokF,EAAOpkF,GAAGswN,KAAO+L,KAIvB,IAAW,IAAPr8N,EAEF,OAAO4zP,EAET,IAAIhnI,EAAI5sH,EAAI,EACZ,KAAO4sH,OACDxoC,EAAOwoC,GAAG0jG,KAAO+H,KAOvB,OAFAzrG,EAAIrnH,KAAK69E,IAAIwpC,EAAG,GAChBgnI,EAAcvqI,OAAOuD,EAAG5sH,EAAI4sH,EAAI,GACzBgnI,CAAa,EA+xCEF,CAAgBzxP,KAAKgtP,WAAY3mP,EAAOq5E,EAAK1/E,KAAKitP,cACpEsE,IACAvxP,KAAKmsP,eAAeyF,YAAYvrP,EAAOq5E,EAAK8xK,IAG9C,IAAK,MAAM//J,KAASzxF,KAAKqsP,kBACvBtE,GAAoB1hP,EAAOq5E,EAAK1/E,KAAKqsP,kBAAkB56J,IAEzDs2J,GAAoB1hP,EAAOq5E,EAAK1/E,KAAK+rP,uBAErCyF,GACF,CAOA5B,cAAAA,GACM5vP,KAAK2sP,qBACP5qG,IAAAA,aAAsB/hJ,KAAK2sP,qBAE7B3sP,KAAK2sP,oBAAsB5qG,IAAAA,WAAoB/hJ,KAAK6xP,mBAAmB9yP,KAAKiB,MAAO,EACrF,CAQA6xP,kBAAAA,GACqB,UAAf7xP,KAAK25G,OACP35G,KAAK8xP,cAEH9xP,KAAK2sP,qBACP5qG,IAAAA,aAAsB/hJ,KAAK2sP,qBAE7B3sP,KAAK2sP,oBAAsB5qG,IAAAA,WAAoB/hJ,KAAK6xP,mBAAmB9yP,KAAKiB,MA9vCrD,IA+vCzB,CAWA8xP,WAAAA,GAGE,GAAI9xP,KAAKmsP,eAAe4F,WACtB,OAGF,MAAM58G,EAAcn1I,KAAKgyP,qBACzB,IAAK78G,EACH,OAEF,MAAMp7I,EAAW,CACfo7I,YAAaqnG,GAAmB,CAC9BnlP,KAAM2I,KAAK0pP,YACXrrH,QAAS8W,KAGbn1I,KAAKk7H,QAAQ,CACX7jI,KAAM,kBACN0C,aAEyC,kBAAhCo7I,EAAYulG,kBACrB16O,KAAK+sP,2BAA4B,EACjC/sP,KAAKwpP,0BAA0BJ,sBAAsB,CACnD/xP,KAAM2I,KAAK0pP,YACXlqP,KAAMQ,KAAKypP,iBACX/4F,GAAIvb,EAAY3U,YAGpBxgI,KAAKiyP,aAAa98G,EACpB,CAWAo5G,cAAAA,GAAoG,IAArFnG,EAAUn+O,UAAA5L,OAAA,QAAA/D,IAAA2P,UAAA,GAAAA,UAAA,GAAGjK,KAAKooP,WAAYvmH,EAAQ53H,UAAA5L,OAAA,QAAA/D,IAAA2P,UAAA,GAAAA,UAAA,GAAGjK,KAAK0wP,UAAW/sH,EAAS15H,UAAA5L,OAAA,QAAA/D,IAAA2P,UAAA,GAAAA,UAAA,GAAGjK,KAAK2jI,UACvF,IAAK9B,IAAa7hI,KAAK4rP,aACrB,OAAO,EAET,MAAMvtH,EAAgC,kBAAf+pH,GAA2BvmH,EAAS1B,SAASioH,GAE9D8J,EAAsB9J,EAAa,IAAMvmH,EAAS1B,SAAS9hI,OAE3D8zP,GAAoB9zH,IAAYA,EAAQjE,OAASuJ,EAAY,IAAMtF,EAAQjE,MAAM/7H,OAIvF,OAAOwjI,EAASb,SAA4C,SAAjChhI,KAAK4rP,aAAa5uP,YAAyBk1P,GAAuBC,CAC/F,CAOAH,kBAAAA,GACE,MAAMh3F,EAAWh7J,KAAKiwP,YAChB7xE,EAAcyxB,GAAgB70C,IAAa,EAC3Co3F,EAAetiD,GAAY90C,EAAUh7J,KAAKggL,gBAC1CqyE,GAAaryP,KAAKwrP,cAAgB4G,GAAgB,EAClDE,EAAmBF,GAAgBpyP,KAAKisP,oBACxC9rH,EAAWngI,KAAK0wP,UAAUvwH,SAKhC,IAAKA,EAAS9hI,QAAUg0P,GAAaC,EACnC,OAAO,KAETtyP,KAAKmuP,WAAanuP,KAAKmuP,YAAcnuP,KAAKiuP,gBAAgBsE,aAAavyP,KAAK0wP,UAAW1wP,KAAKkoK,YAAaloK,KAAKypP,iBAAkBzpP,KAAKggL,eAAgBhgL,KAAK0pP,aAC1J,MAAM5qP,EAAO,CACX6kI,UAAW,KACXykH,WAAY,KACZD,eAAgB,KAChBtmH,SAAU7hI,KAAK0wP,UACfnI,cAAe32G,SAAS5xI,KAAKmuP,aAE/B,GAAIrvP,EAAKypP,cACPzpP,EAAKspP,WAx3CqB,SAAUtoH,EAAiBK,EAAUqyH,GACnEryH,EAAWA,GAAY,GACvB,MAAMsyH,EAAmB,GACzB,IAAItwJ,EAAO,EACX,IAAK,IAAIpkG,EAAI,EAAGA,EAAIoiI,EAAS9hI,OAAQN,IAAK,CACxC,MAAMsgI,EAAU8B,EAASpiI,GACzB,GAAI+hI,IAAoBzB,EAAQmC,WAC9BiyH,EAAiBt5P,KAAK4E,GACtBokG,GAAQk8B,EAAQtB,SACZ56B,EAAOqwJ,GACT,OAAOz0P,CAGb,CACA,OAAgC,IAA5B00P,EAAiBp0P,OACZ,EAGFo0P,EAAiBA,EAAiBp0P,OAAS,EACpD,CAq2CwBq0P,CAAwB1yP,KAAKypP,iBAAkBtpH,EAAUi+C,GAC3Ep+K,KAAKw2M,QAAQ,0EAA0E13M,EAAKspP,mBACvF,GAAwB,OAApBpoP,KAAKooP,WAAqB,CACnC,MAAM/pH,EAAU8B,EAASngI,KAAKooP,YACxBzkH,EAAsC,kBAAnB3jI,KAAK2jI,UAAyB3jI,KAAK2jI,WAAa,EACzE7kI,EAAKqpP,eAAiB9pH,EAAQ3+C,IAAM2+C,EAAQ3+C,IAAM0+F,EAC9C//C,EAAQjE,OAASiE,EAAQjE,MAAMuJ,EAAY,IAC7C7kI,EAAKspP,WAAapoP,KAAKooP,WACvBtpP,EAAK6kI,UAAYA,EAAY,GAE7B7kI,EAAKspP,WAAapoP,KAAKooP,WAAa,CAExC,KAAO,CACL,IAAI1kH,EACAC,EACArM,EACJ,MAAMk7H,EAAaxyP,KAAKyuP,eAAiBrwE,EAAcp+K,KAAKggL,eAS5D,GARIhgL,KAAK+uP,oBACP/uP,KAAKw2M,QAAQ,qEACHg8C,oBACHxyP,KAAKggL,gCACL5B,uBACIp+K,KAAKyuP,mBACrBzuP,KAAK+uP,mBAAmBiC,aAEjBhxP,KAAK+uP,oBAAsB/uP,KAAK+uP,mBAAmB4D,WAAY,CACjE,MAAM9B,EAAW7wP,KAAK4yP,kCAAkCJ,GACxD,IAAK3B,EAAU,CACb,MAAMxiP,EAAU,qDAUhB,OATArO,KAAKiI,MAAM,CACToG,UACAtU,SAAU,CACR86M,UAAWjJ,GAAQnyM,MAAM4zM,mCACzBplM,MAAO,IAAIxO,MAAM4U,MAGrBrO,KAAKw2M,QAAQ,qEAEN,IACT,CACAx2M,KAAKw2M,QAAQ,8CAA8Cq6C,EAASxqP,gBAAawqP,EAASnxK,QAC1FgkD,EAAemtH,EAASntH,aACxBC,EAAYktH,EAASltH,UACrBrM,EAAYu5H,EAASxqP,KACvB,KAAO,CACLrG,KAAKw2M,QAAQ,iGAEb,MAAMq8C,EAAmB3gD,GAASC,oBAAoB,CACpDG,qBAAsBtyM,KAAKsyM,qBAC3BzwE,SAAU7hI,KAAK0wP,UACfzsF,YAAauuF,EACbngD,kBAAmBryM,KAAKmuP,WAAWxqH,UACnCyuE,qBAAsBpyM,KAAKmuP,WAAWzqH,aACtCpM,UAAWt3H,KAAKmuP,WAAWhsJ,OAE7BuhC,EAAemvH,EAAiBnvH,aAChCC,EAAYkvH,EAAiBlvH,UAC7BrM,EAAYu7H,EAAiBv7H,SAC/B,CACAx4H,EAAKqzM,oBAAsBnyM,KAAKyuP,eAAiB,eAAe+D,IAAe,eAAeA,IAC9F1zP,EAAKspP,WAAa1kH,EAClB5kI,EAAKqpP,eAAiB7wH,EACtBx4H,EAAK6kI,UAAYA,EACjB3jI,KAAKw2M,QAAQ,iFAAiF13M,EAAKspP,cACrG,CACA,MAAM0K,EAAc3yH,EAASrhI,EAAKspP,YAClC,IAAI5wC,EAAWs7C,GAAyC,kBAAnBh0P,EAAK6kI,WAA0BmvH,EAAY14H,OAAS04H,EAAY14H,MAAMt7H,EAAK6kI,WAGhH,IAAKmvH,GAAyC,kBAAnBh0P,EAAK6kI,YAA2B6zE,EACzD,OAAO,KAIqB,kBAAnB14M,EAAK6kI,WAA0BmvH,EAAY14H,QACpDt7H,EAAK6kI,UAAY,EACjB6zE,EAAWs7C,EAAY14H,MAAM,IAK/B,MAAM24H,EAAyB/yP,KAAKy2M,KAAK30E,WAAa9hI,KAAKy2M,KAAK30E,UAAUi/B,MAAQ/gK,KAAKy2M,KAAK30E,UAAUi/B,KAAK97B,qBAAuBjlI,KAAK0wP,UAAUzrH,oBAKjJ,IAAKmtH,GAAgB56C,IAAau7C,IAA2Bv7C,EAASgxC,YACpE,GAAuB,IAAnB1pP,EAAK6kI,UAAiB,CACxB,MAAMusE,EAAc/vE,EAASrhI,EAAKspP,WAAa,GACzC4K,EAAsB9iD,EAAY91E,OAAS81E,EAAY91E,MAAM/7H,QAAU6xM,EAAY91E,MAAM81E,EAAY91E,MAAM/7H,OAAS,GACtH20P,GAAuBA,EAAoBxK,cAC7C1pP,EAAKspP,YAAc,EACnBtpP,EAAK6kI,UAAYusE,EAAY91E,MAAM/7H,OAAS,EAC5CS,EAAK0pP,YAAc,mBAEvB,MAAWsK,EAAY14H,MAAMt7H,EAAK6kI,UAAY,GAAG6kH,cAC/C1pP,EAAK6kI,WAAa,EAClB7kI,EAAK0pP,YAAc,iBAGvB,MAAM76E,EAAQ3tK,KAAK4rP,cAAiD,UAAjC5rP,KAAK4rP,aAAa5uP,WAKrD,OAAI8B,EAAKspP,YAAcjoH,EAAS9hI,OAAS,GAAKsvK,IAAU3tK,KAAK2rP,WACpD,MAEL3rP,KAAK4sP,yCACP5sP,KAAK4sP,wCAAyC,EAC9C9tP,EAAKm0P,sBAAuB,EAC5BjzP,KAAKw2M,QAAQ,oEAERx2M,KAAKkzP,qBAAqBp0P,GACnC,CACA8zP,iCAAAA,CAAkCJ,GAChC,IAAKxyP,KAAK+uP,mBACR,OAAO,KAGT,MAAMoE,EAAkB7vP,KAAK69E,IAAIqxK,EAAYxyP,KAAK+uP,mBAAmB1oP,OACjEmsP,IAAeW,GACjBnzP,KAAKw2M,QAAQ,8DAA8Dg8C,QAAiBW,KAE9F,MAAMC,EAAwBpzP,KAAK+uP,mBAAmBsE,mBAAmBF,GACzE,IAAKC,EAEH,OAAO,KAET,IAAKA,EAAsBE,WAEzB,OAAOF,EAIT,MAAMG,EAA4BvzP,KAAK+uP,mBAAmBsE,mBAAmBD,EAAsB1zK,KACnG,OAAK6zK,GAIDA,EAA0BD,YAC5BtzP,KAAKw2M,QAAQ,6HAGR+8C,GANE,IAOX,CACAL,oBAAAA,CAAqB55P,GACnB,MAAM,YACJkvP,EAAW,SACX3mH,EAAQ,WACRumH,EAAU,eACVD,EAAc,cACdI,EAAa,UACb5kH,EAAS,qBACTsvH,EAAoB,oBACpB9gD,GACE74M,EACE+kI,EAAUwD,EAAS1B,SAASioH,GAC5B34L,EAA4B,kBAAdk0E,GAA0BtF,EAAQjE,MAAMuJ,GACtDwR,EAAc,CAClB4rG,UAAW,kBAAoBz9O,KAAKC,SAEpClK,IAAKo2D,GAAQA,EAAKk7E,aAAetM,EAAQsM,YAEzCy9G,aACAzkH,UAAWl0E,EAAOk0E,EAAY,KAG9B4kH,gBACAJ,iBAEAtmH,WAEAwG,MAAO,KAEPg2G,eAAgB,KAGhB3D,gBAAiB,KAEjBl6G,SAAUnC,EAAQmC,SAElBzD,SAAUttE,GAAQA,EAAKstE,UAAYsB,EAAQtB,SAE3CsB,UACA5uE,OACA4yB,WAAY,EACZ8nJ,WAAYnqO,KAAKouP,YAEjBj8C,sBACAq2C,eAEIgL,EAAgD,qBAAzBP,EAAuCA,EAAuBjzP,KAAK+sP,0BAChG53G,EAAYulG,gBAAkB16O,KAAKyzP,2BAA2B,CAC5DhgH,gBAAiBpV,EAAQmC,SACzBV,gBAAiB9/H,KAAKypP,iBACtBtB,iBACAntF,SAAUh7J,KAAKiwP,YACfuD,kBAEF,MAAME,EAAmB7jD,GAAgB7vM,KAAKmsP,eAAeiE,iBAY7D,MAXgC,kBAArBsD,IAGTv+G,EAAY4lG,iBAAmB2Y,EAAmB1zP,KAAKmsP,eAAewH,wBAEpE3zP,KAAKmsP,eAAegE,gBAAgB9xP,SACtC82I,EAAY61F,gBAzsDU4oB,EAACzxK,EAAQ8hF,EAAaytF,KAChD,GAA2B,qBAAhBztF,GAA+C,OAAhBA,IAAyB9hF,EAAO9jF,OACxE,MAAO,GAGT,MAAMw1P,EAAiBvwP,KAAK4+G,MAAM+hD,EAAcytF,EAAU,GAAK7tK,GAAAA,kBAC/D,IAAI9lF,EACJ,IAAKA,EAAI,EAAGA,EAAIokF,EAAO9jF,UACjB8jF,EAAOpkF,GAAGswN,IAAMwlC,GADS91P,KAK/B,OAAOokF,EAAOnpF,MAAM+E,EAAE,EA6rDY61P,CAAoB5zP,KAAKgtP,WAGvDhtP,KAAKggL,eAAiBhgL,KAAKmsP,eAAe2H,uBAAwB9zP,KAAKitP,eAElE93G,CACT,CAIAs+G,0BAAAA,CAA2Bn6P,GACzB,MA78C8By6P,KAM5B,IAN6B,gBACjCtgH,EAAe,gBACf3T,EAAe,eACfqoH,EAAc,SACdntF,EAAQ,cACRw4F,GACDO,EAOC,OAAKP,GAAiB//G,IAAoB3T,EA2BtC2T,EAAkB3T,EACbqoH,EAOFntF,EAAS38J,OAAS28J,EAASt7E,IAAIs7E,EAAS38J,OAAS,GAAK8pP,EAlCpD,IAkCkE,EA65ClE6L,CAA0B16P,EACnC,CAWA26P,qBAAAA,CAAsB9V,GACpB,GAAIn+O,KAAKy2M,KAAK5zC,MAAMnF,WAInB19J,KAAK6sP,YAAY5yP,UAEjB+F,KAAK0wP,UAAUv8O,WAAWopH,UACzB,OAKF,GAAI3hC,KAAKC,OAASsiJ,EAAMsD,sBAAwB7lJ,KAAKC,OAAS,IAC5D,OAEF,MAAMooE,EAAcjkK,KAAKggL,eACnBk0E,EAAoB/V,EAAM/tG,UAC1B9E,EAAkBtrI,KAAKupP,gBAAgBxsH,SACvCo3H,EAAuBjiD,GAASS,2BAA2BrnE,EAAiB4oH,EAAmBl0P,KAAK0wP,UAAWvS,EAAMvrC,eAIrHwhD,EAnxgBgB,SAAUp5F,EAAUiJ,GAA+B,IAAlB4mB,EAAY5gL,UAAA5L,OAAA,QAAA/D,IAAA2P,UAAA,GAAAA,UAAA,GAAG,EAExE,QADoB+wJ,EAAS38J,OAAS28J,EAASt7E,IAAIs7E,EAAS38J,OAAS,GAAK,GACpD4lK,GAAe4mB,CACvC,CAgxgBgCwpE,CAAkBr0P,KAAKiwP,YAAahsF,EAAajkK,KAAKy2M,KAAK5zC,MAAMgoB,gBAAkB,EAG/G,GAAIspE,GAAwBC,EAC1B,OAEF,MAAME,EAnsE8B,SAAUrxF,GAChD,MAAM,KACJlC,EAAI,YACJkD,EAAW,UACX7zB,EAAS,SACTrT,EAAQ,gBACRuO,EAAe,kBACf+oH,EAAiB,gBACjBv0H,EAAe,eACfouH,GACEjrF,EAGEsxF,EAAsBxzF,EAAKj/B,UAAUn2H,QAAOk2H,IAAaqwE,GAASV,eAAe3vE,KAGvF,IAAI2yH,EAAmBD,EAAoB5oP,OAAOumM,GAAST,WACtD+iD,EAAiBn2P,SAIpBm2P,EAAmBD,EAAoB5oP,QAAOk2H,IAAaqwE,GAAS/oF,WAAW0Y,MAEjF,MACM4yH,EADqBD,EAAiB7oP,OAAOumM,GAASv6L,aAAa5Y,KAAK,KAAM,cACpCsX,KAAIwrH,IAClD,MAGM6yH,EAHYxG,EAAeqE,aAAa1wH,EAAU9E,EAAU+C,EAAiBmkC,GAGnD,EAAI,EAGpC,MAAO,CACLpiC,WACA8yH,kBAJ0BziD,GAASS,2BAA2BrnE,EAAiB8E,EAAWvO,GAC5C6yH,EAAcL,EAI7D,IAEGO,EAAyBH,EAAqB9oP,QAAOkpP,GAAYA,EAASF,mBAAqB,IAGrG,OADAtQ,GAAWuQ,GAAwB,CAAC91K,EAAG4H,IAAM+9J,GAAyB/9J,EAAEm7C,SAAU/iD,EAAE+iD,YAChF+yH,EAAuBv2P,OAClBu2P,EAAuB,IAEhCvQ,GAAWoQ,GAAsB,CAAC31K,EAAG4H,IAAM5H,EAAE61K,kBAAoBjuK,EAAEiuK,oBAC5DF,EAAqB,IAAM,KACpC,CAupE4BK,CAAgC,CACtD/zF,KAAM/gK,KAAKy2M,KAAK30E,UAAUi/B,KAC1BkD,cACA7zB,UAAW8jH,EACXn3H,SAAU/8H,KAAKkoK,YACf58B,kBACA+oH,kBAAmBD,EACnBt0H,gBAAiB9/H,KAAKypP,iBACtByE,eAAgBluP,KAAKiuP,kBAEvB,IAAKqG,EACH,OAEF,MACMS,EADoBZ,EAAuBC,EACAE,EAAgBK,kBACjE,IAAIK,EAAoB,GAIpBZ,GAAuBjlD,KACzB6lD,EAAoB,IAEjBV,EAAgBzyH,UAAYyyH,EAAgBzyH,SAASxoI,MAAQ2G,KAAK0wP,UAAUr3P,KAAO07P,EAAuBC,IAM/Gh1P,KAAKowI,UAAYkkH,EAAgBzyH,SAAS1tH,WAAWopH,UAAYkoF,GAAOM,mBAAqB,EAC7F/lN,KAAKk7H,QAAQ,cACf,CACA+5H,YAAAA,CAAa9/G,GACXn1I,KAAKw2M,QAAQ,YAAY0xC,GAAkB/yG,MAC3Cn1I,KAAKmvP,sBAAwB,CAC/B,CAWA+F,eAAAA,CAAgB3yJ,EAAO4yJ,GACrBn1P,KAAKi0P,sBAAsBkB,EAAchX,OACrCn+O,KAAK+vP,eAAeoF,EAAcpU,YAGtC/gP,KAAKk7H,QAAQ,WACf,CACAk6H,gBAAAA,CAAiBD,EAAehc,GAC9B,MAAM,SACJ/K,EAAQ,SACRC,GACE8K,EACEp/O,EAAW,CACfo7I,YAAaqnG,GAAmB,CAC9BnlP,KAAM2I,KAAK0pP,YACXrrH,QAAS82H,IAEXhc,UAAW,CACT/K,WACAC,aAGJruO,KAAKk7H,QAAQ,CACX7jI,KAAM,uCACN0C,aAEFiG,KAAKi0P,sBAAsBkB,EAAchX,OACrCn+O,KAAK+vP,eAAeoF,EAAcpU,YAGlC/gP,KAAKq1P,2BAA2Blc,KAGpCA,EAAYA,GAAa,CAAC,EApvDT,SAAUr6J,EAAG4H,GAIhC,IAAK5H,IAAM4H,IAAM5H,GAAK4H,GAAK5H,IAAM4H,EAC/B,OAAO,EAGT,GAAI5H,IAAM4H,EACR,OAAO,EAIT,MAAM4uK,EAAQn2P,OAAO0M,KAAKizE,GAAGsuC,OACvBmoI,EAAQp2P,OAAO0M,KAAK66E,GAAG0mC,OAE7B,GAAIkoI,EAAMj3P,SAAWk3P,EAAMl3P,OACzB,OAAO,EAET,IAAK,IAAIN,EAAI,EAAGA,EAAIu3P,EAAMj3P,OAAQN,IAAK,CACrC,MAAMhF,EAAMu8P,EAAMv3P,GAElB,GAAIhF,IAAQw8P,EAAMx3P,GAChB,OAAO,EAGT,GAAI+gF,EAAE/lF,KAAS2tF,EAAE3tF,GACf,OAAO,CAEX,CACA,OAAO,CACT,CAytDSy8P,CAAax1P,KAAK6rP,kBAAmB1S,KACxCn5O,KAAKmtP,mBAAqB,CACxB5mH,OAAO,EACPD,OAAO,GAETtmI,KAAK8rP,mBAAqB3S,EAC1Bn5O,KAAK6rP,kBAAoB1S,EACzBn5O,KAAKw2M,QAAQ,mBAAoB2iC,GACjCn5O,KAAKk7H,QAAQ,cAIXl7H,KAAK+vP,eAAeoF,EAAcpU,aAKtC/gP,KAAKupP,gBAAgBpQ,UAAYA,EAE7Bn5O,KAAK2uP,yBACP3uP,KAAK4uP,oBAELvF,GAAqBrpP,OAEzB,CACAy1P,iBAAAA,CAAkBN,EAAe5tH,EAAWmuH,EAAUvzJ,GAEpD,GADAniG,KAAKi0P,sBAAsBkB,EAAchX,OACrCn+O,KAAK+vP,eAAeoF,EAAcpU,WACpC,OAEF,MAAM5rG,EAAcn1I,KAAKupP,gBACnBoM,EAAqBhN,GAA2BphH,GACtD4N,EAAYwgH,GAAsBxgH,EAAYwgH,IAAuB,CAAC,EACtExgH,EAAYwgH,GAAoBD,GAAYvzJ,EAC5CniG,KAAKw2M,QAAQ,eAAejvE,OAAemuH,OAAcvzJ,KAErDniG,KAAK2uP,yBACP3uP,KAAK4uP,oBAELvF,GAAqBrpP,KAEzB,CACA41P,eAAAA,CAAgBT,EAAeU,GAE7B,GADA71P,KAAKi0P,sBAAsBkB,EAAchX,OACrCn+O,KAAK+vP,eAAeoF,EAAcpU,WACpC,OAIF,GAA2B,IAAvB8U,EAAYx3P,OAEd,YADA2B,KAAKw2M,QAAQ,2DAMf,IAHoBx2M,KAAKupP,gBAGRuM,iBAEf,YADA91P,KAAKutP,eAAejgB,QAAQn0O,KAAK6G,KAAK41P,gBAAgB72P,KAAKiB,KAAMm1P,EAAeU,IAGlF,MAAMnb,EAAiE,OAA/C16O,KAAKmsP,eAAe2H,uBAAkC9zP,KAAKmsP,eAAewH,uBAAyB3zP,KAAKmsP,eAAe2H,uBACzIiC,EAAgB,CAAC,EAEvBF,EAAYl9P,SAAQ20O,IAGlByoB,EAAczoB,EAAQ1jB,QAAUmsC,EAAczoB,EAAQ1jB,SAAW,CAE/DtyF,UAAWzU,IACX6uB,SAAU,GAEVsqB,QAAS,GAEX,MAAMg6F,EAAeD,EAAczoB,EAAQ1jB,QAC3CosC,EAAa1+H,UAAYh0H,KAAKyhG,IAAIixJ,EAAa1+H,UAAWg2G,EAAQh2G,UAAYojH,GAC9Esb,EAAah6F,QAAU14J,KAAK69E,IAAI60K,EAAah6F,QAASsxE,EAAQtxE,QAAU0+E,GACxEsb,EAAatkH,SAASv4I,KAAKm0O,EAAQ,IAErCnuO,OAAO0M,KAAKkqP,GAAep9P,SAAQs9P,IACjC,MAAM,UACJ3+H,EAAS,QACT0kC,EAAO,SACPtqB,GACEqkH,EAAcE,GACZrP,EAAmB5mP,KAAKqsP,kBAC9BrsP,KAAKw2M,QAAQ,oBAAoBl/E,QAAgB0kC,SAAei6F,KAhvE/B,SAAUrP,EAAkB1qF,EAAM+iE,GACvE,IAAK2nB,EAAiB3nB,GAAgB,CACpC/iE,EAAKhhC,QAAQ,CACX7jI,KAAM,QACNkI,KAAM,YAER,IAAIkjI,EAAaw8F,EAEb,UAAUx/N,KAAKw/N,KACjBx8F,EAAa,UAAYw8F,EAAchoO,MAAM,KAAK,IAEpD,MAAMw6F,EAAQyqE,EAAKI,aAAamD,aAAah9B,GAC7C,GAAIhxC,EAIFm1J,EAAiB3nB,GAAiBxtI,MAC7B,CAIL,IAAIq8C,EAAQmxF,EACRz8F,EAAWy8F,EACXn+F,GAAM,EACV,MAAMo1H,GAJkBh6F,EAAKxK,SAAS60C,KAAOrqC,EAAKxK,SAAS60C,IAAI50D,iBAAmB,CAAC,GAI5ClP,GACnCyzH,IACFpoH,EAAQooH,EAAepoH,MACvBtL,EAAW0zH,EAAe1zH,SAC1B1B,EAAMo1H,EAAe3rI,SAIvBq8H,EAAiB3nB,GAAiB/iE,EAAKM,mBAAmB,CACxD4D,KAAM,WACN1pJ,GAAI+rH,EAEJlY,QAASuW,EACTgN,QACAtL,aACC,GAAO/wC,KACZ,CACF,CACF,CAusEM0kK,CAA+BvP,EAAkB5mP,KAAKy2M,KAAK5zC,MAAOozF,GAKlElO,GAAoBzwH,EAAW0kC,EAAS4qF,EAAiBqP,IAjsExC,SAAAG,GAIpB,IAJ8B,iBAC/BxP,EAAgB,aAChByP,EAAY,gBACZ3b,GACD0b,EACC,IAAKC,EACH,OAEF,MAAMvP,EAAM/kG,IAAAA,eAA0BA,IAAAA,OACtCs0G,EAAa19P,SAAQ20O,IACnB,MAAM77I,EAAQ67I,EAAQ1jB,OAGlB0jB,EAAQ5mF,QACV4mF,EAAQ5mF,QAAQ/tJ,SAAQrB,IACtB,MAAMykK,EAAM,IAAI+qF,EAAIxZ,EAAQh2G,UAAYojH,EAAiBpN,EAAQtxE,QAAU0+E,EAAiBpjP,EAAMwhB,MAClGijJ,EAAIt/B,KAAOnlI,EAAMmlI,KACjBs/B,EAAIqwE,MAAQ,OACZrwE,EAAIn2J,SAAWtO,EAAMsO,SACrBm2J,EAAIu6F,cAAgB,YACpB1P,EAAiBn1J,GAAOgrE,OAAOV,EAAI,IAIrC6qF,EAAiBn1J,GAAOgrE,OAAO,IAAIqqF,EAAIxZ,EAAQh2G,UAAYojH,EAAiBpN,EAAQtxE,QAAU0+E,EAAiBpN,EAAQx0N,MACzH,GAEJ,CAuqEMy9O,CAAe,CACbF,aAAc3kH,EACdk1G,mBACAlM,mBACA,IAIA16O,KAAKouP,aACPpuP,KAAKouP,YAAYp2H,YAAY,CAC3B9iB,OAAQ,0BAGd,CACAshJ,UAAAA,CAAWrB,EAAerb,EAAWnY,GAEnC,GADA3hO,KAAKi0P,sBAAsBkB,EAAchX,OACrCn+O,KAAK+vP,eAAeoF,EAAcpU,WACpC,OAEkB/gP,KAAKupP,gBAERuM,iBAIjB91P,KAAKsiN,uBAAuBqf,EAAcmY,EAAW95O,KAAKkoK,aAHxDloK,KAAKutP,eAAe7rB,IAAIvoO,KAAK6G,KAAKw2P,WAAWz3P,KAAKiB,KAAMm1P,EAAerb,EAAWnY,GAItF,CACA80B,qBAAAA,GACEz2P,KAAKutP,eAAe7rB,IAAI/oO,SAAQiP,GAAMA,MACtC5H,KAAKutP,eAAejgB,QAAQ30O,SAAQiP,GAAMA,MAC1C5H,KAAKutP,eAAe7rB,IAAM,GAC1B1hO,KAAKutP,eAAejgB,QAAU,EAChC,CACAshB,iBAAAA,GACE,MAAM8H,EAAY12P,KAAKqtP,WAIvBrtP,KAAKqtP,WAAa,GAClBqJ,EAAU/9P,SAAQg+P,GAAOA,KAC3B,CACA7H,iBAAAA,GACE,MAAM8H,EAAY52P,KAAKstP,WAIvBttP,KAAKstP,WAAa,GAClBsJ,EAAUj+P,SAAQg+P,GAAOA,KAC3B,CAQA9H,oBAAAA,GAGE,GAAyB,UAArB7uP,KAAK0pP,YACP,OAAO,EAET,MAAMv0G,EAAcn1I,KAAKupP,gBAGzB,QAAKp0G,KAOAn1I,KAAK62P,yBAmBVjO,GAA4B,CAC1BE,yBAA0B9oP,KAAKwpP,0BAC/B1pH,gBAAiB9/H,KAAKypP,iBACtBh2G,gBAAiB0B,EAAY3U,SAC7BuoH,WAAY/oP,KAAK0pP,YACjBV,cAAehpP,KAAK2pP,iBAKxB,CACAkN,oBAAAA,GAAyD,IAApC1hH,EAAWlrI,UAAA5L,OAAA,QAAA/D,IAAA2P,UAAA,GAAAA,UAAA,GAAGjK,KAAKupP,gBACtC,OAAOp0G,GAAeA,EAAYgkG,WAAan5O,KAAK6rP,iBACtD,CACAqE,aAAAA,GAAkD,IAApC/6G,EAAWlrI,UAAA5L,OAAA,QAAA/D,IAAA2P,UAAA,GAAAA,UAAA,GAAGjK,KAAKupP,gBAC/B,OAAOvpP,KAAK62P,qBAAqB1hH,IAAgBn1I,KAAK8rP,kBACxD,CACAgL,yBAAAA,GACE,OAAO92P,KAAKupP,gBAAkBvpP,KAAKupP,gBAAgB1nH,SAAW,IAChE,CACA8sH,sBAAAA,GACE,IAAK3uP,KAAKmsP,eAAe96F,QACvB,OAAO,EAIT,GAAIrxJ,KAAKwtP,kBAAoBxtP,KAAKytP,gCAChC,OAAO,EAET,MAAMt4G,EAAcn1I,KAAKupP,gBACnBpQ,EAAYn5O,KAAK62P,uBAIvB,IAAK1hH,IAAgBgkG,EACnB,OAAO,EAET,MAAM,SACJ/K,EAAQ,SACRC,EAAQ,QACR6Q,GACE/F,EACJ,QAAI9K,IAAal5F,EAAYipE,qBAIzBgwB,IAAapuO,KAAK2pP,iBAAmBzK,IAAY/pG,EAAYikG,mBAI7DwP,GAA4B,CAC9BE,yBAA0B9oP,KAAKwpP,0BAC/B1pH,gBAAiB9/H,KAAKypP,iBACtBh2G,gBAAiB0B,EAAY3U,SAC7BuoH,WAAY/oP,KAAK0pP,YACjBV,cAAehpP,KAAK2pP,iBAKxB,CACA3N,WAAAA,CAAYmZ,EAAez8P,GAEzB,GADAsH,KAAKi0P,sBAAsBkB,EAAchX,OACrCn+O,KAAK+vP,eAAeoF,EAAcpU,WACpC,OAIF,GAAI/gP,KAAKqtP,WAAWhvP,SAAW2B,KAAK2uP,yBAGlC,OAFAtF,GAAqBrpP,WACrBA,KAAKqtP,WAAWl0P,KAAK6G,KAAKg8O,YAAYj9O,KAAKiB,KAAMm1P,EAAez8P,IAGlE,MAAMy8I,EAAcn1I,KAAKupP,gBAUzB,GARAvpP,KAAK+2P,gBAAgB5hH,EAAY3U,UAEjCxgI,KAAKg3P,0BAA0B7hH,EAAY1lF,MAAQ0lF,EAAY9W,SAM1B,WAAjCr+H,KAAK4rP,aAAa5uP,WAAtB,CAgBA,GAXIm4P,EAAc9+O,MAChB8+O,EAAc9+O,IAAMrW,KAAKqwP,kBAAkB8E,EAAc9+O,KAAK,GAE9D8+H,EAAY9W,QAAQhoH,IAAM8+O,EAAc9+O,KAGtC8+O,EAAcp8P,KAChBiH,KAAKuwP,WAAW4E,EAAcp8P,KAAK,GAErCo8I,EAAYyqG,OAASuV,EAAcvV,OACnCzqG,EAAY4jG,WAAa5jG,EAAY4jG,YAAc,CAAC,EAChD5jG,EAAYyqG,OACd5/O,KAAKk7H,QAAQ,QACbia,EAAY4jG,WAAW1yO,MAAQ8uI,EAAYwzG,GAA2BjwP,EAAOrB,OAAOgP,UAC/E,CACL,MAAM8yO,EAAYn5O,KAAK62P,uBACjBI,EAA0C,SAArBj3P,KAAK0pP,aAA0BvQ,GAAaA,EAAU9K,SACjF,IAAI6oB,EACAD,IACFC,EAA6B/hH,EAAYipE,gBAAgB/3M,OAK3D8uI,EAAY4jG,WAAW1yO,MAAQrG,KAAKm3P,kBAAkB,CACpDC,aAAcjiH,EAAY4jG,WAAW1yO,MACrCw7H,SAAUsT,EAAYtT,SACtBumH,WAAYjzG,EAAYizG,WACxBiP,4BAA6Br3P,KAAKmsP,eAAe2H,uBACjDmD,qBACAC,6BACA94C,gBAAiBjpE,EAAYipE,gBAC7Bg7B,gBAAiBjkG,EAAYikG,iBAEjC,CAWA,GAPAp5O,KAAKs3P,8BAA8BniH,EAAaz8I,EAAOrB,MAIvD2I,KAAKu3P,mCAAmCpiH,GAGpCA,EAAYozG,cAAe,CAI7BvoP,KAAKw3P,qBAAqBriH,GAC1Bn1I,KAAKiuP,gBAAgBwJ,sBAAsB,CACzCtiH,cACAuiH,0BAAgD,SAArB13P,KAAK0pP,cAElC,MAAM5qP,EAAOkB,KAAKgyP,qBAGlB,GAAIlzP,EAAKspP,aAAejzG,EAAYizG,YAActpP,EAAK6kI,YAAcwR,EAAYxR,UAE/E,YADA3jI,KAAKw2M,QAAQ,6CAIfx2M,KAAKw2M,QAAQ,sCACf,CAKArhE,EAAY2gH,kBAAmB,EAE/B91P,KAAKy2P,wBACLz2P,KAAK23P,YAAYxiH,EAAaz8I,EA1E9B,CA2EF,CACA4+P,6BAAAA,CAA8BniH,EAAa99I,GAEhB,SAArB2I,KAAK0pP,aAAiE,kBAAhCv0G,EAAYulG,iBAGrDvlG,EAAYyiH,yBAGX53P,KAAKmtP,mBAAqB,CACxB5mH,OAAO,EACPD,OAAO,IAGPtmI,KAAKotP,2BAA2B/1P,KAAU89I,EAAYtT,WAGxD7hI,KAAKmtP,mBAAmB91P,IAAQ,EAEpC,CACAwgQ,6BAAAA,CAA6BC,GAK1B,IAL2B,KAC5BzgQ,EAAI,YACJo1I,EAAW,IACXp2H,EAAG,SACHwrH,GACDi2H,EAMC,GAAIzhP,EAAK,CACP,MAAMK,EAAK8mM,GAAcnnM,GACzB,GAAIrW,KAAK0tP,uBAAyBh3O,EAEhC,OAAO,KAMT+1H,EAAczsI,KAAKqwP,kBAAkBh6O,GAAK,GAAMgyH,MAChDroI,KAAK0tP,qBAAuBh3O,CAC9B,CAMA,OAAI+1H,GAAezsI,KAAKmtP,mBAAmB91P,IAIzC2I,KAAKotP,2BAA2B/1P,GAAQwqI,EAExC7hI,KAAKmtP,mBAAmB91P,IAAQ,EAGhC2I,KAAK0tP,qBAAuB,KACrBjhH,GAEF,IACT,CACAsrH,yBAAAA,CAAyBC,EAItB/vP,GAAO,IAJgB,YACxBktI,EAAW,KACX99I,EAAI,MACJgxI,GACD2vH,EACC,MAAM5H,EAAgBpwP,KAAKmsP,eAAeiE,gBACpCD,EAAgBnwP,KAAKmsP,eAAegE,gBAItCC,EAAc/xP,OAAS,GACzB2B,KAAKw2M,QAAQ,0DAA4D7G,GAAkBygD,GAAer8O,KAAK,OAE7Go8O,EAAc9xP,OAAS,GACzB2B,KAAKw2M,QAAQ,0DAA4D7G,GAAkBwgD,GAAep8O,KAAK,OAEjH,MAAMkkP,EAAmB7H,EAAc/xP,OAAS+xP,EAAc/pP,MAAM,GAAK,EACnE6xP,EAAiB9H,EAAc/xP,OAAS+xP,EAAc1wK,IAAI0wK,EAAc/xP,OAAS,GAAK,EACtF85P,EAAmBhI,EAAc9xP,OAAS8xP,EAAc9pP,MAAM,GAAK,EACnE+xP,EAAiBjI,EAAc9xP,OAAS8xP,EAAczwK,IAAIywK,EAAc9xP,OAAS,GAAK,EAC5F,GAAI65P,EAAiBD,GA/lED,GA+lEwCG,EAAiBD,GA/lEzD,EA0mElB,OANAn4P,KAAKw2M,QAA4G,mHAAyBnuE,EAAMhmD,6BAAkCstH,GAAkBygD,GAAer8O,KAAK,wBAA6B47L,GAAkBwgD,GAAep8O,KAAK,WAC3R/T,KAAKiI,MAAM,CACToG,QAAS,kEACTkjM,aAAc1uF,WAEhB7iH,KAAKk7H,QAAQ,SAefl7H,KAAKwtP,kBAAmB,EACxBxtP,KAAKqtP,WAAWl0P,KAAK6G,KAAKq4P,sBAAsBt5P,KAAKiB,KAAM,CACzDm1I,cACA99I,OACAgxI,WAEF,MAGMiwH,EAHct4P,KAAKggL,eA9nEL,EAkoEpBhgL,KAAKw2M,QAAQ,yDAAyD8hD,KACtEt4P,KAAKuQ,OAAO,EAAG+nP,GAAmB,KAChCt4P,KAAKw2M,QAAQ,gDACbx2M,KAAKwtP,kBAAmB,EAGxBxtP,KAAKytP,gCAAkC1rG,IAAAA,YAAoB,KACzD/hJ,KAAKw2M,QAAQ,mDACbx2M,KAAKytP,gCAAkC,KACvCztP,KAAK4uP,mBAAmB,GACvB2J,IAAuB,IACzB,EACL,CACAC,kBAAAA,CAAkBC,EAIfxwP,GAAO,IAJS,YACjBktI,EAAW,KACX99I,EAAI,MACJgxI,GACDowH,EAEMxwP,IAhofkB,KAmofnBA,EAAMtK,MAUVqC,KAAKw2M,QAAQ,4CAA6CvuM,GAM1DjI,KAAKiI,MAAM,CACToG,QAAS,GAAGhX,eAAkBgxI,EAAMhqI,+BAAoC82I,EAAYizG,0BAA0BjzG,EAAYtT,SAASnrH,KACnI3c,SAAU,CACR86M,UAAWjJ,GAAQnyM,MAAM+zM,kCAG7BxtM,KAAKk7H,QAAQ,gBArBXl7H,KAAK+3P,0BAA0B,CAC7B5iH,cACA99I,OACAgxI,UAmBN,CACAgwH,qBAAAA,CAAqBK,GAMlB,IANmB,YACpBvjH,EAAW,KACX99I,EAAI,YACJo1I,EAAW,KACX9vI,EAAI,MACJ0rI,GACDqwH,EAEC,IAAKrwH,EAAO,CACV,MAAMlI,EAAW,CAACxjI,GAClB,IAAI0lF,EAAa1lF,EAAK0lF,WAClBoqD,IAGFtM,EAAS32B,QAAQijC,GACjBpqD,GAAcoqD,EAAYpqD,YAI5BgmD,EAptFiBswH,KACrB,IACIj4C,EADA/nM,EAAS,EAUb,OARIggP,EAAWtwH,QACbq4E,EAAa,IAAI3oN,WAAW4gQ,EAAWtwH,OAEvCswH,EAAWx4H,SAASxnI,SAAQ0lI,IAC1BqiF,EAAW//M,IAAI09H,EAAS1lH,GACxBA,GAAU0lH,EAAQh8C,UAAU,KAGzBq+H,CAAU,EAysFLk4C,CAAe,CACrBvwH,MAAOhmD,EACP89C,YAEJ,CACA,MAAMpmI,EAAW,CACfo7I,YAAaqnG,GAAmB,CAC9BnlP,KAAM2I,KAAK0pP,YACXrrH,QAAS8W,KAGbn1I,KAAKk7H,QAAQ,CACX7jI,KAAM,qBACN0C,aAEFiG,KAAKmsP,eAAe0M,aAAa,CAC/B1jH,cACA99I,OACAgxI,SACCroI,KAAKw4P,mBAAmBz5P,KAAKiB,KAAM,CACpCm1I,cACA99I,OACAgxI,UAEJ,CACAywH,wBAAAA,CAAyBzhQ,EAAM0pP,EAAWgY,GACxC,IAAK/4P,KAAKupP,iBAAmBxI,IAAc/gP,KAAKupP,gBAAgBxI,UAC9D,OAEF,MAAM1iH,EAAUr+H,KAAKupP,gBAAgBlrH,QAC/Bs3H,EAAqB,GAAGt+P,cACzBgnI,EAAQs3H,KACXt3H,EAAQs3H,GAAsB,CAAC,GAEjCt3H,EAAQs3H,GAAoB72C,2BAA6Bi6C,EAAkBtuB,0BAA4B,EACvGpsG,EAAQs3H,GAAoBp3C,4BAA8Bw6C,EAAkB1yP,MAAM4yO,aAClF56G,EAAQs3H,GAAoBqD,sBAAwBD,EAAkB1yP,MAAM3O,OAC5E2mI,EAAQs3H,GAAoBt3C,0BAA4B06C,EAAkBr5K,IAAIu5J,aAC9E56G,EAAQs3H,GAAoBsD,oBAAsBF,EAAkBr5K,IAAIhoF,OAExE2mI,EAAQs3H,GAAoB5oC,oBAAsBgsC,EAAkBhsC,mBACtE,CACA4qC,WAAAA,CAAYxiH,EAAaz8I,GACvB,MAAM,KACJrB,EAAI,KACJsF,GACEjE,EACJ,IAAKiE,IAASA,EAAK0lF,WACjB,OAEF,GAAa,UAAThrF,GAAoB2I,KAAK2pP,eAC3B,OAEF,MAAMl9G,EAAczsI,KAAK63P,8BAA8B,CACrDxgQ,OACAo1I,YAAa/zI,EAAO+zI,YACpB5K,SAAUsT,EAAYtT,SACtBxrH,IAAK8+H,EAAYyqG,OAASzqG,EAAY9W,QAAQhoH,IAAM,OAEtDrW,KAAKq4P,sBAAsB,CACzBljH,cACA99I,OACAo1I,cACA9vI,QAEJ,CAOAs1P,YAAAA,CAAa98G,GAWX,GAVAn1I,KAAK25G,MAAQ,UACb35G,KAAKupP,gBAAkBp0G,EACvBn1I,KAAKk5P,gBAAgB/jH,GACsB,kBAAhCA,EAAYulG,iBACjB16O,KAAKouP,aACPpuP,KAAKouP,YAAYp2H,YAAY,CAC3B9iB,OAAQ,yBAITl1G,KAAK6uP,uBAYR,OAXAxF,GAAqBrpP,WACrBA,KAAKstP,WAAWn0P,MAAK,KAGnB,MAAMG,EAAUtB,EAAS,CAAC,EAAGm9I,EAAa,CACxC89G,sBAAsB,IAExBj7P,EAASm9I,EAAan1I,KAAKkzP,qBAAqB55P,IAChD0G,KAAK+sP,2BAA4B,EACjC/sP,KAAKm5P,mCAAmChkH,EAAY,IAIxDn1I,KAAKm5P,mCAAmChkH,EAC1C,CACAgkH,kCAAAA,CAAmChkH,GAM7Bn1I,KAAKo5P,uCAAuCjkH,EAAYulG,mBAC1D16O,KAAKgtP,WAAW3uP,OAAS,EAEzB82I,EAAY61F,gBAAkB,GAC9BhrO,KAAKitP,aAAe,EAEpBjtP,KAAKouP,YAAYp2H,YAAY,CAC3B9iB,OAAQ,UAEVl1G,KAAKouP,YAAYp2H,YAAY,CAC3B9iB,OAAQ,qBACRwlI,gBAAiBvlG,EAAYulG,mBAGjC,MAAMya,EAAgBn1P,KAAKq5P,4BAA4BlkH,GACjDmkH,EAAgBt5P,KAAKuuP,eAAep5G,EAAYizG,WAAYjzG,EAAYtT,SAAUsT,EAAYxR,WAC9F41H,EAAuC,OAApBv5P,KAAKooP,WACxBoR,EAAkBrkH,EAAY3U,WAAaxgI,KAAKypP,kBAGtDt0G,EAAY3U,SAAW,EACjBm7G,EAAkB2d,GAAiBC,GAAoBC,EAC7Dx5P,KAAKw2M,QAAQ,eACfgwC,GAA6BrxG,EAAY97I,SACzC6uP,GAAkB/yG,MAMZggH,EAAc9+O,MAAQ8+O,EAAc9+O,IAAIgyH,QAC1CroI,KAAKw2M,QAAQ,kCACbx2M,KAAKmtP,mBAAqB,CACxB7mH,OAAO,EACPC,OAAO,IAGX4O,EAAY06G,cAAgBnO,GAAoB,CAC9CnnP,IAAKyF,KAAKy2M,KAAKl8M,IACfqnP,WAAY5hP,KAAK6sP,YACjBzM,iBAAkBpgP,KAAK+tP,WACvB1vH,QAAS82H,EACTtT,QAAS7hP,KAAKi1P,aAAal2P,KAAKiB,KAAMm1I,GACtCmsG,WAAYthP,KAAKk1P,gBAAgBn2P,KAAKiB,MACtCw+O,YAAax+O,KAAKo1P,iBAAiBr2P,KAAKiB,MACxCy+O,aAAcz+O,KAAKy1P,kBAAkB12P,KAAKiB,MAC1C0+O,yBAA0B1+O,KAAK84P,yBAAyB/5P,KAAKiB,KAAM,QAASm1I,EAAY4rG,WACxFpC,yBAA0B3+O,KAAK84P,yBAAyB/5P,KAAKiB,KAAM,QAASm1I,EAAY4rG,WACxFlC,WAAY7+O,KAAK41P,gBAAgB72P,KAAKiB,MACtC27O,kBACAmD,gBAAiBA,KACf9+O,KAAKw2M,QAAQ,kCAAkC,EAEjDooC,MAAO5+O,KAAKw2P,WAAWz3P,KAAKiB,MAC5B++O,OAAQ/+O,KAAKg8O,YAAYj9O,KAAKiB,MAC9Bg/O,OAAQh/O,KAAKy5P,wBAAwB16P,KAAKiB,MAC1C07O,gBAAiBge,IAIX,IAJY,QAChBrrP,EAAO,MACPozI,EAAK,OACLmoE,GACD8vC,EACC15P,KAAKw2M,QAAQ,GAAG0xC,GAAkB/yG,oCAA8Cy0E,UAAenoE,MAAUpzI,IAAU,EAErHutO,sBAAuB+d,IAMjB,IANkB,KACtBtiQ,EAAI,QACJgnI,EAAO,QACPs/G,EAAO,UACPxE,EAAS,WACTJ,GACD4gB,EACC,MAGM5/P,EAAW,CACfo7I,YAJcqnG,GAAmB,CACjCn+G,aAMEs/G,IACF5jP,EAAS4jP,QAAUA,GAEjBxE,IACFp/O,EAASo/O,UAAYA,GAEnBJ,IACFh/O,EAASg/O,WAAaA,GAExB/4O,KAAKk7H,QAAQ,CACX7jI,OACA0C,YACA,GAGR,CAUAm/P,eAAAA,CAAgB/jH,GACd,MAAMykH,EA52EqBC,EAACpsF,EAAUxJ,EAAaplC,KAMrD,IAAIi7H,EAAW71F,EAAcwhD,GAAOG,mBAChCn4C,EAASpvK,SAGXy7P,EAAWx2P,KAAK69E,IAAI24K,EAAUrsF,EAASpnK,MAAM,KAI/C,MAAM0zP,EAAc91F,EAAcplC,EAClC,OAAOv7H,KAAKyhG,IAAIg1J,EAAaD,EAAS,EA61EfD,CAAuB75P,KAAK0rP,YAAa1rP,KAAKggL,eAAgBhgL,KAAK0wP,UAAU7xH,gBAAkB,IAMhH+6H,EAAe,GACjB55P,KAAKuQ,OAAO,EAAGqpP,EAEnB,CAWAP,2BAAAA,CAA4BlkH,GAC1B,MAAM9W,EAAU8W,EAAY9W,QACtB5uE,EAAO0lF,EAAY1lF,KACnBw7L,EAAc91G,EAAY9W,QAAQtlI,KAAOo8I,EAAY9W,QAAQhoH,KAAO8+H,EAAY9W,QAAQhoH,IAAItd,IAC5FmyP,EAAwB/1G,EAAY9W,QAAQhoH,MAAQ8+H,EAAY9W,QAAQhoH,IAAIgyH,MAC5E8sH,EAAgB,CACpBxqH,YAAal7E,EAAOA,EAAKk7E,YAActM,EAAQsM,YAC/CtN,UAAW5tE,EAAOA,EAAK4tE,UAAYgB,EAAQhB,UAC3C0jH,UAAW5rG,EAAY4rG,UACvB5W,WAAYh1F,EAAYg1F,WACxB4Q,iBAAkB5lG,EAAY4lG,iBAC9B/P,gBAAiB71F,EAAY61F,gBAC7Bv7K,KAAM0lF,EAAY1lF,KAClBp4D,KAAM2I,KAAK0pP,YACXrjP,MAAO8uI,EAAYgzG,eACnBprH,SAAUoY,EAAYpY,SACtBkuH,cACAC,yBAEI8O,EAAkB7kH,EAAYtT,SAAS1B,SAASgV,EAAYizG,WAAa,GAgB/E,GAfI4R,GAAmBA,EAAgBx5H,WAAanC,EAAQmC,WAStDw5H,EAAgB57C,gBAClB+2C,EAAcjb,cAAgB8f,EAAgB57C,gBAAgB66C,oBACrDe,EAAgB5gB,kBACzB+b,EAAcjb,cAAgB8f,EAAgB5gB,gBAAgB6f,sBAG9D56H,EAAQtlI,IAAK,CAGf,MAAM4oI,EAAKtD,EAAQtlI,IAAI4oI,IAAM,IAAIhE,YAAY,CAAC,EAAG,EAAG,EAAGwX,EAAYizG,WAAajzG,EAAYtT,SAASX,gBACrGi0H,EAAcp8P,IAAMiH,KAAKuwP,WAAWlyH,EAAQtlI,KAC5Co8P,EAAcp8P,IAAI4oI,GAAKA,CACzB,CAIA,OAHItD,EAAQhoH,MACV8+O,EAAc9+O,IAAMrW,KAAKqwP,kBAAkBhyH,EAAQhoH,MAE9C8+O,CACT,CACA8E,kBAAAA,CAAmB9b,GAGjBn+O,KAAKkvP,eAAiB,EAClB/Q,IACFn+O,KAAKivP,uBAAyB9Q,EAAMvrC,cACpC5yM,KAAKsvP,uBAAyBnR,EAAMxiC,cAExC,CACAu+C,0BAAAA,CAA2Bn9H,EAAUohH,GAKnC,GADAn+O,KAAKupP,gBAAgBlnK,WAAa87J,EAAMvrC,cACpC71E,EAAWkrH,GAEb,YADAjoP,KAAKw2M,QAAQ,wDAAwDz5E,yDAGvE,MAAMhjI,EAAW,CACfogQ,cAAe,CACb36P,KAAMQ,KAAKowI,UACXsgB,GAAIytF,EAAM/tG,YAIdpwI,KAAKk7H,QAAQ,CACX7jI,KAAM,mBACN0C,aAEFiG,KAAKowI,UAAY+tG,EAAM/tG,UACvBpwI,KAAKsrP,UAAYnN,EAAMxiC,aACzB,CACAy+C,cAAAA,GAGEp6P,KAAKovP,uBAAyB,EAC9BpvP,KAAKowI,UAAY,EACjBpwI,KAAKsrP,UAAY9gI,IACjBxqH,KAAKk7H,QAAQ,mBACbl7H,KAAKk7H,QAAQ,UACf,CAQAu+H,uBAAAA,CAAwBxxP,EAAOktP,EAAez8P,GAK5C,GAAIsH,KAAKqtP,WAAWhvP,OAElB,YADA2B,KAAKqtP,WAAWl0P,KAAK6G,KAAKy5P,wBAAwB16P,KAAKiB,KAAMiI,EAAOktP,EAAez8P,IAKrF,GAFAsH,KAAKi6P,mBAAmB9E,EAAchX,QAEjCn+O,KAAKupP,gBACR,OAMF,GAAI4L,EAAcpU,YAAc/gP,KAAKupP,gBAAgBxI,UACnD,OAGF,GAAI94O,EAAO,CAIT,GAHAjI,KAAKupP,gBAAkB,KACvBvpP,KAAK25G,MAAQ,QAET1xG,EAAMtK,OAASy/O,GACjB,OAMF,OAJAp9O,KAAK49J,QAID31J,EAAMtK,OAASy/O,QACjBp9O,KAAKo6P,kBAKPp6P,KAAKqvP,sBAAwB,EAC7BrvP,KAAKiI,MAAMA,QACXjI,KAAKk7H,QAAQ,SAEf,CACA,MAAMia,EAAcn1I,KAAKupP,gBAGzBvpP,KAAKk6P,2BAA2B/kH,EAAYpY,SAAUo4H,EAAchX,OACpEhpG,EAAY+rG,iBAAmBiU,EAAcjU,iBACzCxoP,EAAOogP,UACT94O,KAAKgtP,WArrFaqN,EAACl4K,EAAQ8sI,EAAM1pN,KACrC,IAAK0pN,EAAK5wN,OACR,OAAO8jF,EAET,GAAI58E,EAKF,OAAO0pN,EAAKj2N,QAEd,MAAMqN,EAAQ4oN,EAAK,GAAGZ,IACtB,IAAItwN,EAAI,EACR,KAAQA,EAAIokF,EAAO9jF,UACb8jF,EAAOpkF,GAAGswN,KAAOhoN,GADItI,KAK3B,OAAOokF,EAAOnpF,MAAM,EAAG+E,GAAG2pG,OAAOunH,EAAK,EAmqFhBorC,CAAgBr6P,KAAKgtP,WAAYt0P,EAAOogP,QAAS94O,KAAKktP,cAI1EltP,KAAK25G,MAAQ,YAEb35G,KAAKk7H,QAAQ,aACbl7H,KAAKs6P,0BAA0BnlH,EACjC,CACA4hH,eAAAA,CAAgBv2H,GACd,MAAM+5H,EAAkBv6P,KAAKiuP,gBAAgBuM,mBAAmBh6H,GACxC,OAApB+5H,IACFv6P,KAAKitP,aAAesN,EAExB,CACAvD,yBAAAA,CAA0B34H,GACK,kBAAlBA,EAAQh4H,OAA6C,kBAAhBg4H,EAAQ3+C,IACtD1/E,KAAKuvP,oBAAsBlxH,EAAQ3+C,IAAM2+C,EAAQh4H,MAEjDrG,KAAKuvP,oBAAsBlxH,EAAQtB,QAEvC,CACAq8H,sCAAAA,CAAuC1e,GACrC,OAAwB,OAApBA,IAKqB,SAArB16O,KAAK0pP,aAA0BhP,IAAoB16O,KAAKmsP,eAAe2H,yBAGtE9zP,KAAK2pP,gBAAkBjP,IAAoB16O,KAAKmsP,eAAewH,uBAItE,CACAwD,iBAAAA,CAAiBsD,GASd,IATe,aAChBrD,EAAY,SACZv1H,EAAQ,WACRumH,EAAU,2BACV8O,EAA0B,4BAC1BG,EAA2B,mBAC3BJ,EAAkB,gBAClB74C,EAAe,gBACfg7B,GACDqhB,EACC,GAA4B,qBAAjBrD,EAET,OAAOA,EAET,IAAKH,EACH,OAAO7d,EAAgB/yO,MAEzB,MAAM2zP,EAAkBn4H,EAAS1B,SAASioH,EAAa,GAMvD,OAAmB,IAAfA,GAAqB4R,GAAoD,qBAA1BA,EAAgB3zP,OAAyB2zP,EAAgBt6K,MAAQw3K,EAA6BG,EAG1Ij5C,EAAgB/3M,MAFd6wP,CAGX,CACAoD,yBAAAA,CAA0BnlH,GACxB,MAAMgkG,EAAYn5O,KAAK62P,qBAAqB1hH,GAC5C,IAAKgkG,EAMH,OALAn5O,KAAKiI,MAAM,CACToG,QAAS,yEACT+0M,0BAA2BvgG,WAE7B7iH,KAAKk7H,QAAQ,SAMf,MAAM,SACJkzG,EAAQ,SACRC,EAAQ,QACR6Q,GACE/F,EACEuhB,EAAoC,SAArB16P,KAAK0pP,aAA0Brb,EAC9CssB,GAAgB36P,KAAK2pP,gBAAkBvb,IAAa8Q,EAG1D,GAFA/pG,EAAYylH,iBAAmB,GAE1BzlH,EAAY2gH,iBA0Bf,OAzBK3gH,EAAY4jG,YAAqD,kBAAhC5jG,EAAYulG,kBAShD16O,KAAK+sP,2BAA4B,GAGnC53G,EAAY4jG,WAAa,CACvB1yO,MAAO,GAET8uI,EAAYylH,mBACP56P,KAAK+sP,4BAER/sP,KAAKu3P,mCAAmCpiH,GAGxCn1I,KAAKy2P,8BAGPz2P,KAAK66P,kBAAkB1lH,GAIrBulH,GACFvlH,EAAYylH,mBAEVD,GACFxlH,EAAYylH,mBAEVF,GACF16P,KAAKmsP,eAAe2O,mBAAmB96P,KAAK66P,kBAAkB97P,KAAKiB,KAAMm1I,IAEvEwlH,GACF36P,KAAKmsP,eAAe4O,mBAAmB/6P,KAAK66P,kBAAkB97P,KAAKiB,KAAMm1I,GAE7E,CACA0lH,iBAAAA,CAAkB1lH,GACZn1I,KAAK+vP,eAAe56G,EAAY4rG,aAGpC5rG,EAAYylH,mBACyB,IAAjCzlH,EAAYylH,kBACd56P,KAAKg7P,qBAET,CACA3F,0BAAAA,CAA2Blc,GACzB,MAAM8hB,EA1rFiBC,EAACnS,EAAYoS,EAAehiB,IAGlC,SAAf4P,GAA0BoS,GAAkBhiB,EAG3CA,EAAU/K,UAAa+K,EAAU9K,SAGlC8sB,EAAc9sB,WAAa8K,EAAU9K,SAChC,6LAEJ8sB,EAAc9sB,UAAY8K,EAAU9K,SAChC,kMAEF,KARE,4CAHA,KAsrFyB6sB,CAAmBl7P,KAAK0pP,YAAa1pP,KAAK62P,uBAAwB1d,GAClG,QAAI8hB,IACFj7P,KAAKiI,MAAM,CACToG,QAAS4sP,EACT73C,0BAA2BvgG,MAE7B7iH,KAAKk7H,QAAQ,UACN,EAGX,CACAq8H,kCAAAA,CAAmCpiH,GACjC,GAAoC,OAAhCA,EAAYulG,iBAGwB,kBAAjCvlG,EAAY4jG,WAAW1yO,OAE9B8uI,EAAYyiH,wBAES,SAArB53P,KAAK0pP,YACH,OAEF,IAAI0R,GAAY,EAKhBjmH,EAAYulG,iBAAmB16O,KAAKq7P,kDAAkD,CACpFj9C,gBAAiBjpE,EAAY9W,QAAQ+/E,gBACrCg7B,gBAAiBjkG,EAAY9W,QAAQ+6G,gBACrCL,WAAY5jG,EAAY4jG,aAK1B5jG,EAAYyiH,wBAAyB,EACjCziH,EAAYulG,kBAAoB16O,KAAKmsP,eAAe2H,yBACtD9zP,KAAKmsP,eAAe2H,qBAAqB3+G,EAAYulG,iBACrD0gB,GAAY,GAEVjmH,EAAYulG,kBAAoB16O,KAAKmsP,eAAewH,yBACtD3zP,KAAKmsP,eAAewH,qBAAqBx+G,EAAYulG,iBACrD0gB,GAAY,GAEVA,GACFp7P,KAAKk7H,QAAQ,kBAEjB,CACAmgI,iDAAAA,CAAiDC,GAI9C,IAJ+C,gBAChDl9C,EAAe,gBACfg7B,EAAe,WACfL,GACDuiB,EACC,OAAKt7P,KAAKwsP,0BAGNpuC,GAAoE,kBAA1CA,EAAgB46C,sBACrC56C,EAAgB46C,sBAGrB5f,GAAoE,kBAA1CA,EAAgB4f,sBACrC5f,EAAgB4f,sBAGlBjgB,EAAW1yO,MAVT0yO,EAAW1yO,KAWtB,CACAmxP,oBAAAA,CAAqBriH,GACnBA,EAAY4jG,WAAa5jG,EAAY4jG,YAAc,CAAC,EACpD,MAAMI,EAAYn5O,KAAKkwP,gBAEjBqL,EAD0C,SAArBv7P,KAAK0pP,aAA0BvQ,GAAaA,EAAU9K,UAC7Bl5F,EAAYipE,gBAAkBjpE,EAAYipE,gBAAkBjpE,EAAYikG,gBACvHmiB,IAGLpmH,EAAY4jG,WAAWr5J,IAA2C,kBAA9B67K,EAAsB77K,IAI1D67K,EAAsB77K,IAAM67K,EAAsBl1P,MAAQ8uI,EAAYpY,SACxE,CASAi+H,kBAAAA,GAEE,GAAIh7P,KAAKupP,gBAAiB,CACxB,MAAMxvP,EAAW,CACfo7I,YAAaqnG,GAAmB,CAC9BnlP,KAAM2I,KAAK0pP,YACXrrH,QAASr+H,KAAKupP,mBAGlBvpP,KAAKk7H,QAAQ,CACX7jI,KAAM,cACN0C,YAEJ,CACA,IAAKiG,KAAKupP,gBAOR,OANAvpP,KAAK25G,MAAQ,aAGR35G,KAAK09J,UACR19J,KAAK4vP,kBAIT,MAAMz6G,EAAcn1I,KAAKupP,gBACrBp0G,EAAY1lF,MAAQ0lF,EAAY1lF,KAAKohM,SAEvC17G,EAAY1lF,KAAKohM,SAAS2K,eACjBrmH,EAAY9W,QAAQwyH,UAE7B17G,EAAY9W,QAAQwyH,SAAS2K,eAK/Bx7P,KAAKw3P,qBAAqBriH,GACtBn1I,KAAKusP,8BAkBPvsP,KAAKiuP,gBAAgBwJ,sBAAsB,CACzCtiH,cACAuiH,0BAAgD,SAArB13P,KAAK0pP,cAGpC,MAAM+R,EAAyBlR,GAAqCp1G,EAAan1I,KAAKgqP,aAWtF,GAVIyR,IACsC,SAApCA,EAAuB1Q,SACzBn/C,GAAQ51G,IAAI3qF,KAAKowP,EAAuBptP,SAExCrO,KAAKw2M,QAAQilD,EAAuBptP,UAGxCrO,KAAK07P,kBAAkBvmH,GACvBn1I,KAAKupP,gBAAkB,KACvBvpP,KAAK25G,MAAQ,QACTw7B,EAAYozG,gBACdvoP,KAAKk7H,QAAQ,mBAKRia,EAAY2gH,kBAEf,YADA91P,KAAKw2M,QAAQ,0CAA0C0xC,GAAkB/yG,MAI7En1I,KAAKw2M,QAAQ,YAAY0xC,GAAkB/yG,MAC3Cn1I,KAAK27P,uBAAuBxmH,GAC5Bn1I,KAAKyuP,gBAAiB,EAClBzuP,KAAKypP,mBAAqBt0G,EAAY3U,WACxCxgI,KAAKwpP,0BAA0BN,mBAAmB,CAChD7xP,KAAM2I,KAAK0pP,YACXlqP,KAAMQ,KAAKypP,iBACX/4F,GAAIvb,EAAY3U,WAKO,SAArBxgI,KAAK0pP,aAA2B1pP,KAAK2pP,gBACvC3pP,KAAKwpP,0BAA0BN,mBAAmB,CAChD7xP,KAAM,QACNmI,KAAMQ,KAAKypP,iBACX/4F,GAAIvb,EAAY3U,YAItBxgI,KAAKypP,iBAAmBt0G,EAAY3U,SAKpCxgI,KAAKk7H,QAAQ,kBACb,MAAMmD,EAAU8W,EAAY9W,QACtB5uE,EAAO0lF,EAAY1lF,KACnBmsM,EAAkBv9H,EAAQ3+C,KAAO1/E,KAAKggL,eAAiB3hD,EAAQ3+C,IAA4C,EAAtCy1D,EAAYtT,SAAShD,eAC1Fg9H,EAAepsM,GAAQA,EAAKiwB,KAAO1/E,KAAKggL,eAAiBvwH,EAAKiwB,IAAgD,EAA1Cy1D,EAAYtT,SAAS/C,mBAK/F,GAAI88H,GAAmBC,EAGrB,OAFA77P,KAAKw2M,QAAQ,OAAOolD,EAAkB,UAAY,UAAU1T,GAAkB/yG,WAC9En1I,KAAKkqP,kBAGsC,OAApBlqP,KAAKooP,YAI5BpoP,KAAKk7H,QAAQ,mBAEfl7H,KAAKk7H,QAAQ,YACbl7H,KAAKooP,WAAajzG,EAAYizG,WAC9BpoP,KAAK2jI,UAAYwR,EAAYxR,UAIzB3jI,KAAKuuP,eAAep5G,EAAYizG,WAAYjzG,EAAYtT,SAAUsT,EAAYxR,YAChF3jI,KAAKgwP,cAGPhwP,KAAKk7H,QAAQ,YACTia,EAAY2gH,kBACd91P,KAAKwvP,eAEFxvP,KAAK09J,UACR19J,KAAK4vP,gBAET,CAWA8L,iBAAAA,CAAkBvmH,GAChB,GAAIA,EAAYpY,SAAWkrH,GAEzB,YADAjoP,KAAKw2M,QAAQ,yDAAyDrhE,EAAYpY,gEAGpF,MAAM6tD,EAAO5qL,KAAKqrP,WAAWzgE,KAGvBkxE,EAAwBlgK,KAAKC,MAAQs5C,EAAY+rG,iBAAmB,EAEpE6a,EAA8Bz4P,KAAK80H,MAAM+c,EAAY9yD,WAAay5K,EAAwB,EAAI,KAGpG97P,KAAKqrP,WAAWzgE,OAASmxE,EAA8BnxE,KAAU5qL,KAAKqrP,WAAWzyO,KACnF,CAWA+iP,sBAAAA,CAAuBxmH,GACrB,IAAKn1I,KAAK+rP,sBACR,OAEF,MAAM1tH,EAAU8W,EAAY9W,QACtBh4H,EAAQg4H,EAAQh4H,MAChBq5E,EAAM2+C,EAAQ3+C,IAEpB,IAAKsoK,GAAO3hP,KAAW2hP,GAAOtoK,GAC5B,OAEFqoK,GAAoB1hP,EAAOq5E,EAAK1/E,KAAK+rP,uBACrC,MAAMjF,EAAM/kG,IAAAA,eAA0BA,IAAAA,OAChCzqJ,EAAQ,CACZsuI,OAAQvH,EAAQuH,OAChBnI,eAAgBY,EAAQZ,eACxBD,eAAgBa,EAAQb,eACxByF,gBAAiB5E,EAAQ4E,gBACzBmN,UAAW+E,EAAYtT,SAAS1tH,WAAWopH,UAC3ClB,WAAY8Y,EAAYtT,SAAS1tH,WAAWmpH,WAC5C8J,OAAQ+N,EAAYtT,SAAS1tH,WAAWg8H,OACxC9tD,WAAY8yD,EAAY9yD,WACxBhpF,IAAK87I,EAAY97I,IACjBmnI,SAAU2U,EAAY3U,SACtBqB,SAAUsT,EAAYtT,SAASnrH,GAC/BrQ,QACAq5E,OAGIq8E,EAAM,IAAI+qF,EAAIzgP,EAAOq5E,EADd1kF,KAAK8B,UAAUxF,IAI5BykK,EAAIzkK,MAAQA,EACZ0I,KAAK+rP,sBAAsBtvF,OAAOV,EACpC,EAEF,SAASn8B,KAAQ,CACjB,MAAMuxB,GAAc,SAAUvvE,GAC5B,MAAsB,kBAAXA,EACFA,EAEFA,EAAOr8E,QAAQ,KAAKmjG,GAAKA,EAAEnqG,eACpC,EAKMy9P,GAAc,CAAC,QAAS,SACxBjK,GAAWA,CAAC16P,EAAM+0P,KACtB,MAAM6P,EAAe7P,EAAc,GAAG/0P,WACtC,OAAO4kQ,GAAgBA,EAAalK,UAAY3F,EAAc8P,aAAa7kQ,EAAK,EAgB5E8kQ,GAAaA,CAAC9kQ,EAAM+0P,KACxB,GAAmC,IAA/BA,EAAcv3I,MAAMx2G,OACtB,OAEF,IAAI+9P,EAAa,EACbC,EAAajQ,EAAcv3I,MAAMunJ,GACrC,GAAwB,gBAApBC,EAAWhlQ,MAkBf,GAAa,gBAATA,GAUC+0P,EAAc/6F,SAAoD,WAAzC+6F,EAAchB,YAAYpuP,aAA2B+0P,GAAS16P,EAAM+0P,GAAlG,CAGA,GAAIiQ,EAAWhlQ,OAASA,EAAM,CAE5B,GADA+kQ,EApDyBE,EAACjlQ,EAAMw9G,KAClC,IAAK,IAAI92G,EAAI,EAAGA,EAAI82G,EAAMx2G,OAAQN,IAAK,CACrC,MAAMs+P,EAAaxnJ,EAAM92G,GACzB,GAAwB,gBAApBs+P,EAAWhlQ,KAGb,OAAO,KAET,GAAIglQ,EAAWhlQ,OAASA,EACtB,OAAO0G,CAEX,CACA,OAAO,IAAI,EAwCIu+P,CAAqBjlQ,EAAM+0P,EAAcv3I,OACnC,OAAfunJ,EAIF,OAEFC,EAAajQ,EAAcv3I,MAAMunJ,EACnC,CAWA,OAVAhQ,EAAcv3I,MAAMuS,OAAOg1I,EAAY,GAQvChQ,EAAc8P,aAAa7kQ,GAAQglQ,EACnCA,EAAWnnJ,OAAO79G,EAAM+0P,GACnBiQ,EAAWrd,YAAhB,GAEEoN,EAAc8P,aAAa7kQ,GAAQ,UACnC8kQ,GAAW9kQ,EAAM+0P,GAxBnB,OA7BOA,EAAc2F,YAAuD,WAAzC3F,EAAchB,YAAYpuP,aACzDovP,EAAcv3I,MAAM7b,QACpBqjK,EAAWnnJ,OAAOk3I,GACdiQ,EAAWrd,QACbqd,EAAWrd,SAKbmd,GAAW,QAAS/P,GACpB+P,GAAW,QAAS/P,GA6CxB,EAEImQ,GAAgBA,CAACllQ,EAAM+0P,KAC3B,MAAMjqK,EAASiqK,EAAc,GAAG/0P,WAC1BmlQ,EAAYrrG,GAAY95J,GACzB8qF,IAGLA,EAAOgR,oBAAoB,YAAai5J,EAAc,KAAKoQ,gBAC3Dr6K,EAAOgR,oBAAoB,QAASi5J,EAAc,KAAKoQ,YACvDpQ,EAAchlH,OAAO/vI,GAAQ,KAC7B+0P,EAAc,GAAG/0P,WAAgB,KAAI,EAEjColQ,GAAkBA,CAACrR,EAAa6Q,IAAiB7Q,GAAe6Q,IAA2F,IAA3EhjQ,MAAMmG,UAAUtG,QAAQ+F,KAAKusP,EAAYsR,cAAeT,GACxIU,GACU9D,CAACxwH,EAAO8M,EAAa9hD,IAAY,CAACh8F,EAAM+0P,KACpD,MAAM6P,EAAe7P,EAAc,GAAG/0P,WAGtC,GAAKolQ,GAAgBrQ,EAAchB,YAAa6Q,GAAhD,CAGA7P,EAAc51C,QAAQ,qBAAqBrhE,EAAYizG,gBAAgB//G,EAAMhqI,mBAAmBhH,WAChG,IACE4kQ,EAAapD,aAAaxwH,EAC5B,CAAE,MAAO1wI,GACPy0P,EAAc51C,QAAQ,mBAAmB7+M,EAAEgG,SAjlhBtB,KAilhBiChG,EAAEgG,KAA8B,wBAA0B,IAAM,0BAA0Bw3I,EAAYizG,iBAAiB/wP,WAC7K+0P,EAAc8P,aAAa7kQ,GAAQ,KACnCg8F,EAAQ17F,EACV,CARA,CAQA,EAfEglQ,GAiBIpsP,CAAClK,EAAOq5E,IAAQ,CAACroF,EAAM+0P,KAC7B,MAAM6P,EAAe7P,EAAc,GAAG/0P,WAGtC,GAAKolQ,GAAgBrQ,EAAchB,YAAa6Q,GAAhD,CAGA7P,EAAc51C,QAAQ,YAAYnwM,QAAYq5E,UAAYroF,WAC1D,IACE4kQ,EAAa1rP,OAAOlK,EAAOq5E,EAC7B,CAAE,MAAO/nF,GACPy0P,EAAc51C,QAAQ,UAAUnwM,QAAYq5E,UAAYroF,iBAC1D,CANA,CAMA,EA7BEslQ,GA+BahkP,GAAU,CAACthB,EAAM+0P,KAChC,MAAM6P,EAAe7P,EAAc,GAAG/0P,WAGjColQ,GAAgBrQ,EAAchB,YAAa6Q,KAGhD7P,EAAc51C,QAAQ,WAAWn/M,uBAA0BshB,KAC3DsjP,EAAavhB,gBAAkB/hO,EAAM,EAvCnCgkP,GAyCMrmQ,GAAY,CAACe,EAAM+0P,KAC3B91P,GAAU,EA1CRqmQ,GA4CS10P,GAASmkP,IACpB,GAA6C,SAAzCA,EAAchB,YAAYpuP,WAA9B,CAGAovP,EAAc51C,QAAQ,mCAAmCvuM,GAAS,OAClE,IACEmkP,EAAchB,YAAY4E,YAAY/nP,EACxC,CAAE,MAAOtQ,GACPi0M,GAAQ51G,IAAI3qF,KAAK,0CAA2C1T,EAC9D,CANA,CAMA,EArDEglQ,GAuDM5/H,GAAYqvH,IACpBA,EAAc51C,QAAQ,mCAAmCz5E,KACzD,IACEqvH,EAAchB,YAAYruH,SAAWA,CACvC,CAAE,MAAOplI,GACPi0M,GAAQ51G,IAAI3qF,KAAK,sCAAuC1T,EAC1D,GA7DEglQ,GA+DGj/P,IAAM,CAACrG,EAAM+0P,KAClB,GAA6C,SAAzCA,EAAchB,YAAYpuP,WAC5B,OAEF,MAAMi/P,EAAe7P,EAAc,GAAG/0P,WAGtC,GAAKolQ,GAAgBrQ,EAAchB,YAAa6Q,GAAhD,CAGA7P,EAAc51C,QAAQ,oBAAoBn/M,WAC1C,IACE4kQ,EAAav+P,OACf,CAAE,MAAO/F,GACPi0M,GAAQ51G,IAAI3qF,KAAK,sBAAsBhU,UAAcM,EACvD,CANA,CAMA,EA9EEglQ,GAgFaC,CAACvlQ,EAAMyvI,IAAUslH,IAChC,MAAMoQ,EAAYrrG,GAAY95J,GACxBwlQ,EAAOp1H,EAAgBX,GAC7BslH,EAAc51C,QAAQ,UAAUn/M,sBAAyByvI,oBACzD,MAAMm1H,EAAe7P,EAAchB,YAAYwR,gBAAgBC,GAC/DZ,EAAa/oK,iBAAiB,YAAak5J,EAAc,KAAKoQ,gBAC9DP,EAAa/oK,iBAAiB,QAASk5J,EAAc,KAAKoQ,YAC1DpQ,EAAchlH,OAAO/vI,GAAQyvI,EAC7BslH,EAAc,GAAG/0P,WAAgB4kQ,CAAY,EAxF3CU,GA0FgBtlQ,GAAQ+0P,IAC1B,MAAM6P,EAAe7P,EAAc,GAAG/0P,WAItC,GAHAklQ,GAAcllQ,EAAM+0P,GAGfqQ,GAAgBrQ,EAAchB,YAAa6Q,GAAhD,CAGA7P,EAAc51C,QAAQ,YAAYn/M,sBAAyB+0P,EAAchlH,OAAO/vI,uBAChF,IACE+0P,EAAchB,YAAY0R,mBAAmBb,EAC/C,CAAE,MAAOtkQ,GACPi0M,GAAQ51G,IAAI3qF,KAAK,gCAAgChU,UAAcM,EACjE,CANA,CAMA,EAvGEglQ,GAyGQ71H,GAAS,CAACzvI,EAAM+0P,KAC1B,MAAM6P,EAAe7P,EAAc,GAAG/0P,WAChCwlQ,EAAOp1H,EAAgBX,GAG7B,IAAK21H,GAAgBrQ,EAAchB,YAAa6Q,GAC9C,OAKF,MAAMc,EAAej2H,EAAMjuH,UAAU,EAAGiuH,EAAMhuI,QAAQ,MAChDkkQ,EAAW5Q,EAAchlH,OAAO/vI,GAEtC,GADqB2lQ,EAASnkP,UAAU,EAAGmkP,EAASlkQ,QAAQ,QACvCikQ,EACnB,OAEF,MAAMhjQ,EAAW,CACfkjQ,iBAAkB,CAChBz9P,KAAMw9P,EACNtsG,GAAI5pB,IAGRslH,EAAclxH,QAAQ,CACpB7jI,KAAM,eACN0C,aAEFqyP,EAAc51C,QAAQ,YAAYn/M,sBAAyB2lQ,QAAel2H,KAE1E,IACEm1H,EAAaiB,WAAWL,GACxBzQ,EAAchlH,OAAO/vI,GAAQyvI,CAC/B,CAAE,MAAOnvI,GACPoC,EAAS86M,UAAYjJ,GAAQnyM,MAAMg0M,2BACnC1zM,EAASkO,MAAQtQ,EACjBA,EAAEoC,SAAWA,EACbqyP,EAAczjF,OAAShxK,EACvBy0P,EAAclxH,QAAQ,SACtB0wE,GAAQ51G,IAAI3qF,KAAK,2BAA2BhU,UAAcM,EAC5D,GAGEwlQ,GAAYC,IAMZ,IANa,KACjB/lQ,EAAI,cACJ+0P,EAAa,OACbl3I,EAAM,OACN8pI,EAAM,KACNz/O,GACD69P,EACChR,EAAcv3I,MAAM17G,KAAK,CACvB9B,OACA69G,SACA8pI,SACAz/O,SAEF48P,GAAW9kQ,EAAM+0P,EAAc,EAE3BiR,GAAcA,CAAChmQ,EAAM+0P,IAAkBz0P,IAO3C,MACM2lQ,EAznkBR,SAAgCtiG,GAC9B,GAAwB,IAApBA,EAAS38J,OACX,MAAO,4BAET,IAAIk/P,EAAoB,sBACxB,IAAK,IAAIx/P,EAAI,EAAGA,EAAIi9J,EAAS38J,OAAQN,IAAK,CACxC,MAAMsI,EAAQ20J,EAAS30J,MAAMtI,GACvB2hF,EAAMs7E,EAASt7E,IAAI3hF,GACzBw/P,GAAqB,GAAGl3P,YAAaq5E,gBAAkBA,EAAMr5E,MAC/D,CACA,OAAOk3P,CACT,CA8mkB4BC,CADIpR,EAAc,GAAG/0P,gBAG/C,GADA+0P,EAAc51C,QAAQ,kCAAkCn/M,oBAAwBimQ,GAC5ElR,EAAc8P,aAAa7kQ,GAAO,CACpC,MAAM2nP,EAASoN,EAAc8P,aAAa7kQ,GAAM2nP,OAChDoN,EAAc8P,aAAa7kQ,GAAQ,KAC/B2nP,GAEFA,EAAOoN,EAAc,GAAG/0P,WAE5B,CACA8kQ,GAAW9kQ,EAAM+0P,EAAc,EAajC,MAAMqR,WAAsB7xD,GAAQe,YAClCrtM,WAAAA,CAAY8rP,GACVrvH,QACA/7H,KAAKorP,YAAcA,EACnBprP,KAAK09P,oBAAsB,IAAMvB,GAAW,cAAen8P,MAC3DA,KAAKorP,YAAYl4J,iBAAiB,aAAclzF,KAAK09P,qBACrD19P,KAAKw2M,QAAU1H,GAAO,iBAEtB9uM,KAAK29P,sBAAwB,EAC7B39P,KAAK49P,sBAAwB,EAC7B59P,KAAK60G,MAAQ,GACb70G,KAAKk8P,aAAe,CAClB31H,MAAO,KACPD,MAAO,MAETtmI,KAAK69P,yBAA2B,GAChC79P,KAAK89P,oBAAqB,EAC1B99P,KAAKonI,OAAS,CAAC,EACfpnI,KAAK+9P,kBAAoBV,GAAY,QAASr9P,MAC9CA,KAAKg+P,kBAAoBX,GAAY,QAASr9P,MAC9CA,KAAKi+P,cAAgBtmQ,IAEnBqI,KAAKk+P,YAAcvmQ,CAAC,EAEtBqI,KAAKm+P,cAAgBxmQ,IAEnBqI,KAAKo+P,YAAczmQ,CAAC,EAEtBqI,KAAKq+P,uBAAwB,EAC7Br+P,KAAKs+P,iBAAkB,EACvBt+P,KAAKu+P,iBAAkB,CACzB,CACAC,cAAAA,GACEx+P,KAAKs+P,iBAAkB,EACvBt+P,KAAKq1J,cACP,CACAopG,uBAAAA,GAGE,OAAOz+P,KAAKq+P,qBACd,CACAK,oBAAAA,GACE,OAAO1+P,KAAKs+P,eACd,CACAjtG,KAAAA,GACE,OAAOrxJ,KAAKy+P,2BAA6Bz+P,KAAK0+P,sBAChD,CACAC,mBAAAA,CAAoBv3H,GACdpnI,KAAKy+P,4BAMTz+P,KAAK4+P,yBAAyBx3H,GAC9BpnI,KAAKq+P,uBAAwB,EAC7Br+P,KAAKk7H,QAAQ,wBACbl7H,KAAKq1J,eACP,CACAA,YAAAA,GAOMr1J,KAAKqxJ,UAAYrxJ,KAAKu+P,kBACxBv+P,KAAKu+P,iBAAkB,EACvBv+P,KAAKk7H,QAAQ,SAEjB,CAWA0hI,eAAAA,CAAgBvlQ,EAAMyvI,GACpBq2H,GAAU,CACR9lQ,KAAM,cACN+0P,cAAepsP,KACfk1G,OAAQynJ,GAAwBtlQ,EAAMyvI,GACtCvnI,KAAM,mBAEV,CAQA7B,KAAAA,CAAMrG,GACJ8lQ,GAAU,CACR9lQ,OACA+0P,cAAepsP,KACfk1G,OAAQynJ,GAActlQ,GACtBkI,KAAM,SAEV,CASAu9P,kBAAAA,CAAmBzlQ,GACZ2I,KAAK6+P,wBAIV1B,GAAU,CACR9lQ,KAAM,cACN+0P,cAAepsP,KACfk1G,OAAQynJ,GAA2BtlQ,GACnCkI,KAAM,uBAPNqsM,GAAQ51G,IAAI/tF,MAAM,uCAStB,CASA42P,qBAAAA,GAGE,OAAQjzD,GAAQ1lD,QAAQ/B,YAAcpC,IAAAA,aAAwBA,IAAAA,YAAqB3iJ,WAA0E,oBAAtD2iJ,IAAAA,YAAqB3iJ,UAAU09P,kBACxI,CASA,oBAAOgC,GACL,OAAO/8G,IAAAA,cAAyBA,IAAAA,aAAsB3iJ,WAAmE,oBAA/C2iJ,IAAAA,aAAsB3iJ,UAAU89P,UAC5G,CASA4B,aAAAA,GACE,OAAO9+P,KAAKV,YAAYw/P,eAC1B,CAWA5B,UAAAA,CAAW7lQ,EAAMyvI,GACV9mI,KAAK8+P,gBAIV3B,GAAU,CACR9lQ,OACA+0P,cAAepsP,KACfk1G,OAAQynJ,GAAmB71H,GAC3BvnI,KAAM,eAPNqsM,GAAQ51G,IAAI/tF,MAAM,+BAStB,CASA22P,wBAAAA,CAAyBx3H,GACvB,IAAKA,GAA4B,kBAAXA,GAAsD,IAA/BjoI,OAAO0M,KAAKu7H,GAAQ/oI,OAC/D,MAAM,IAAI5E,MAAM,uDAElB0F,OAAO0M,KAAKu7H,GAAQzuI,SAAQtB,IAC1B,MAAMyvI,EAAQM,EAAO/vI,GACrB,IAAK2I,KAAKy+P,0BACR,OAAOz+P,KAAK48P,gBAAgBvlQ,EAAMyvI,GAEhC9mI,KAAK8+P,iBACP9+P,KAAKk9P,WAAW7lQ,EAAMyvI,EACxB,GAEJ,CASA+xH,YAAAA,CAAav/P,EAAS0lP,GACpB,MAAM,YACJ7pG,EAAW,KACX99I,EAAI,MACJgxI,GACE/uI,EAEJ,GADA0G,KAAK++P,kBAAmB,EACX,UAAT1nQ,GAAoB2I,KAAKg/P,cAAgBh/P,KAAK89P,mBAGhD,OAFA99P,KAAK69P,yBAAyB1kQ,KAAK,CAACG,EAAS0lP,SAC7Ch/O,KAAKw2M,QAAQ,2BAA2BnuE,EAAMhqI,6BAiBhD,GATA8+P,GAAU,CACR9lQ,OACA+0P,cAAepsP,KACfk1G,OAAQynJ,GAAqBt0H,EAAO8M,GAAe,CACjDizG,YAAa,GALDpJ,GAOdA,SACAz/O,KAAM,iBAEK,UAATlI,EAAkB,CAEpB,GADA2I,KAAK89P,oBAAqB,GACrB99P,KAAK69P,yBAAyBx/P,OACjC,OAEF,MAAMw2G,EAAQ70G,KAAK69P,yBAAyB7kQ,QAC5CgH,KAAKw2M,QAAQ,yBAAyB3hG,EAAMx2G,wBAC5C2B,KAAK69P,yBAAyBx/P,OAAS,EACvCw2G,EAAMl8G,SAAQsmQ,IACZj/P,KAAK64P,aAAa/gQ,MAAMkI,KAAMi/P,EAAI,GAEtC,CACF,CAQA7O,aAAAA,GAGE,OAAKqM,GAAgBz8P,KAAKorP,YAAaprP,KAAKk/P,cAGrCl/P,KAAKk/P,YAAYlkG,SAAWh7J,KAAKk/P,YAAYlkG,SAF3CH,IAGX,CAQAs1F,aAAAA,GAGE,OAAKsM,GAAgBz8P,KAAKorP,YAAaprP,KAAKg/P,cAGrCh/P,KAAKg/P,YAAYhkG,SAAWh7J,KAAKg/P,YAAYhkG,SAF3CH,IAGX,CAQAG,QAAAA,GACE,MAAM10B,EAAQm2H,GAAgBz8P,KAAKorP,YAAaprP,KAAKg/P,aAAeh/P,KAAKg/P,YAAc,KACjFz4H,EAAQk2H,GAAgBz8P,KAAKorP,YAAaprP,KAAKk/P,aAAel/P,KAAKk/P,YAAc,KACvF,OAAI34H,IAAUD,EACLtmI,KAAKowP,gBAEV9pH,IAAUC,EACLvmI,KAAKmwP,gBAx1kBS,SAAUgP,EAASC,GAC5C,IAAI/4P,EAAQ,KACRq5E,EAAM,KACN2/K,EAAQ,EACZ,MAAMC,EAAU,GACVz0H,EAAS,GACf,IAAKs0H,IAAYA,EAAQ9gQ,SAAW+gQ,IAAYA,EAAQ/gQ,OACtD,OAAOw8J,KAIT,IAAIjiJ,EAAQumP,EAAQ9gQ,OAEpB,KAAOua,KACL0mP,EAAQnmQ,KAAK,CACXgpG,KAAMg9J,EAAQ94P,MAAMuS,GACpBvhB,KAAM,UAERioQ,EAAQnmQ,KAAK,CACXgpG,KAAMg9J,EAAQz/K,IAAI9mE,GAClBvhB,KAAM,QAIV,IADAuhB,EAAQwmP,EAAQ/gQ,OACTua,KACL0mP,EAAQnmQ,KAAK,CACXgpG,KAAMi9J,EAAQ/4P,MAAMuS,GACpBvhB,KAAM,UAERioQ,EAAQnmQ,KAAK,CACXgpG,KAAMi9J,EAAQ1/K,IAAI9mE,GAClBvhB,KAAM,QASV,IALAioQ,EAAQlyI,MAAK,SAAUtuC,EAAG4H,GACxB,OAAO5H,EAAEqjB,KAAOzb,EAAEyb,IACpB,IAGKvpF,EAAQ,EAAGA,EAAQ0mP,EAAQjhQ,OAAQua,IACV,UAAxB0mP,EAAQ1mP,GAAOvhB,MACjBgoQ,IAGc,IAAVA,IACFh5P,EAAQi5P,EAAQ1mP,GAAOupF,OAEQ,QAAxBm9J,EAAQ1mP,GAAOvhB,OACxBgoQ,IAGc,IAAVA,IACF3/K,EAAM4/K,EAAQ1mP,GAAOupF,OAIX,OAAV97F,GAA0B,OAARq5E,IACpBmrD,EAAO1xI,KAAK,CAACkN,EAAOq5E,IACpBr5E,EAAQ,KACRq5E,EAAM,MAGV,OAAOm7E,GAAiBhwB,EAC1B,CA0xkBW00H,CAAmBv/P,KAAKowP,gBAAiBpwP,KAAKmwP,gBACvD,CAWAqP,WAAAA,CAAYziI,GAAyB,IAAfiiH,EAAM/0O,UAAA5L,OAAA,QAAA/D,IAAA2P,UAAA,GAAAA,UAAA,GAAG21H,GAK7Bu9H,GAAU,CACR9lQ,KAAM,cACN+0P,cAAepsP,KACfk1G,OAAQynJ,GAAiB5/H,GACzBx9H,KAAM,WACNy/O,UAEJ,CAYAgR,WAAAA,GAAyC,IAA7B/nP,EAAKgC,UAAA5L,OAAA,QAAA/D,IAAA2P,UAAA,GAAAA,UAAA,GAAG,KAAM+0O,EAAM/0O,UAAA5L,OAAA,QAAA/D,IAAA2P,UAAA,GAAAA,UAAA,GAAG21H,GACZ,kBAAV33H,IACTA,OAAQ3N,GAMV6iQ,GAAU,CACR9lQ,KAAM,cACN+0P,cAAepsP,KACfk1G,OAAQynJ,GAAoB10P,GAC5B1I,KAAM,cACNy/O,UAEJ,CAWA2Q,WAAAA,CAAYtpP,EAAOq5E,GAAkB,IAAb//E,EAAIsK,UAAA5L,OAAA,QAAA/D,IAAA2P,UAAA,GAAAA,UAAA,GAAG21H,GACxB5/H,KAAKowP,gBAAgB/xP,QAA0C,IAAhC2B,KAAKowP,gBAAgB1wK,IAAI,GAI7Dy9K,GAAU,CACR9lQ,KAAM,QACN+0P,cAAepsP,KACfk1G,OAAQynJ,GAAet2P,EAAOq5E,GAC9Bs/J,OAAQr/O,EACRJ,KAAM,WARNI,GAUJ,CAWAiyP,WAAAA,CAAYvrP,EAAOq5E,GAAkB,IAAb//E,EAAIsK,UAAA5L,OAAA,QAAA/D,IAAA2P,UAAA,GAAAA,UAAA,GAAG21H,GACxB5/H,KAAKmwP,gBAAgB9xP,QAA0C,IAAhC2B,KAAKmwP,gBAAgBzwK,IAAI,GAI7Dy9K,GAAU,CACR9lQ,KAAM,QACN+0P,cAAepsP,KACfk1G,OAAQynJ,GAAet2P,EAAOq5E,GAC9Bs/J,OAAQr/O,EACRJ,KAAM,WARNI,GAUJ,CAOAoyP,QAAAA,GAEE,SAAIA,GAAS,QAAS/xP,QAAS+xP,GAAS,QAAS/xP,MAInD,CAOA2zP,oBAAAA,CAAqBh7O,GAYnB,MAXsB,qBAAXA,GAA0B3Y,KAAKk/P,aAE1Cl/P,KAAK29P,wBAA0BhlP,IAC7BwkP,GAAU,CACR9lQ,KAAM,QACN+0P,cAAepsP,KACfk1G,OAAQynJ,GAAwBhkP,GAChCpZ,KAAM,oBAERS,KAAK29P,sBAAwBhlP,GAExB3Y,KAAK29P,qBACd,CAOA7J,oBAAAA,CAAqBn7O,GAYnB,MAXsB,qBAAXA,GAA0B3Y,KAAKg/P,aAE1Ch/P,KAAK49P,wBAA0BjlP,IAC7BwkP,GAAU,CACR9lQ,KAAM,QACN+0P,cAAepsP,KACfk1G,OAAQynJ,GAAwBhkP,GAChCpZ,KAAM,oBAERS,KAAK49P,sBAAwBjlP,GAExB3Y,KAAK49P,qBACd,CASA7C,kBAAAA,CAAmBzkQ,GACZ0J,KAAKk/P,aAGV/B,GAAU,CACR9lQ,KAAM,QACN+0P,cAAepsP,KACfk1G,OAAQynJ,GAAiBrmQ,GACzBiJ,KAAM,YAEV,CASAu7P,kBAAAA,CAAmBxkQ,GACZ0J,KAAKg/P,aAGV7B,GAAU,CACR9lQ,KAAM,QACN+0P,cAAepsP,KACfk1G,OAAQynJ,GAAiBrmQ,GACzBiJ,KAAM,YAEV,CAKAg8H,OAAAA,GACEv7H,KAAKk7H,QAAQ,WACb8gI,GAAYrjQ,SAAQtB,IAClB2I,KAAKtC,MAAMrG,GACP2I,KAAK6+P,wBACP7+P,KAAK88P,mBAAmBzlQ,GAExB2I,KAAK,GAAG3I,mBAAqB,IAAMklQ,GAAcllQ,EAAM2I,OACzD,IAEFA,KAAK89P,oBAAqB,EAC1B99P,KAAK69P,yBAAyBx/P,OAAS,EACnC2B,KAAK09P,qBACP19P,KAAKorP,YAAYj4J,oBAAoB,aAAcnzF,KAAK09P,qBAE1D19P,KAAKi7H,KACP,EAEF,MAAMwkI,GAAcC,GAAaj6H,mBAAmBjQ,OAAO59H,OAAOC,aAAaC,MAAM,KAAM4nQ,KASrFC,GAAuB,IAAI5nQ,WAAW,OAAOd,MAAM,IAAIof,KAAIizF,GAAQA,EAAKp5F,WAAW,MACzF,MAAM0vP,WAAqBnmQ,MACzB6F,WAAAA,GACEy8H,MAAM,yFACR,EAUF,MAAM8jI,WAAyB1U,GAC7B7rP,WAAAA,CAAY2jK,GACVlnC,MAAMknC,EADqBh5J,UAAA5L,OAAA,QAAA/D,IAAA2P,UAAA,GAAAA,UAAA,GAAG,CAAC,GAI/BjK,KAAK4rP,aAAe,KACpB5rP,KAAK8/P,gBAAkB,KACvB9/P,KAAK+/P,0BAA4B98F,EAASqE,yBAC1CtnK,KAAKggQ,UAAY/8F,EAAS+8F,UAG1BhgQ,KAAKusP,8BAA+B,CACtC,CACA8B,iBAAAA,GAEE,OAAO,IACT,CAQA4B,SAAAA,GACE,IAAKjwP,KAAK8/P,kBAAoB9/P,KAAK8/P,gBAAgBhkG,OAAS97J,KAAK8/P,gBAAgBhkG,KAAKz9J,OACpF,OAAOw8J,KAET,MAAMiB,EAAO97J,KAAK8/P,gBAAgBhkG,KAGlC,OAAOjB,GAAiB,CAAC,CAFXiB,EAAK,GAAGxkC,UACVwkC,EAAKA,EAAKz9J,OAAS,GAAGi5H,YAEpC,CAYA+4H,iBAAAA,CAAkBh6O,GAAkB,IAAb1V,EAAGsJ,UAAA5L,OAAA,QAAA/D,IAAA2P,UAAA,IAAAA,UAAA,GACxB,IAAKoM,EACH,OAAO,KAET,MAAMK,EAAK8mM,GAAcnnM,GACzB,IAAIi6O,EAAYtwP,KAAK2tP,cAAcj3O,GACnC,GAAI/V,IAAQ2vP,GAAaj6O,EAAIgyH,MAAO,CAKlC,MAAM43H,EAAqBN,GAAqBt9K,WAAahsE,EAAIgyH,MAAMhmD,WACjE69K,EAAkB,IAAInoQ,WAAWkoQ,GACvCC,EAAgBv/P,IAAI0V,EAAIgyH,OACxB63H,EAAgBv/P,IAAIg/P,GAAsBtpP,EAAIgyH,MAAMhmD,YACpDriF,KAAK2tP,cAAcj3O,GAAM45O,EAAY,CACnC3lH,YAAat0H,EAAIs0H,YACjBtN,UAAWhnH,EAAIgnH,UACfgL,MAAO63H,EAEX,CACA,OAAO5P,GAAaj6O,CACtB,CAQAo6O,kBAAAA,GACE,OAAOzwP,KAAK0wP,WAAa1wP,KAAK8/P,kBAAoB9/P,KAAK09J,QACzD,CASAizF,KAAAA,GAGE,OAFA3wP,KAAK25G,MAAQ,QACb35G,KAAKkqP,kBACElqP,KAAK4vP,gBACd,CAUAn+J,KAAAA,CAAMA,GACJ,MAAqB,qBAAVA,IAGXzxF,KAAK8/P,gBAAkBruK,EAGJ,SAAfzxF,KAAK25G,OAAoB35G,KAAKywP,sBAChCzwP,KAAK2wP,SANE3wP,KAAK8/P,eAShB,CAQAvvP,MAAAA,CAAOlK,EAAOq5E,GACZqoK,GAAoB1hP,EAAOq5E,EAAK1/E,KAAK8/P,gBACvC,CAWAhO,WAAAA,GAEE,MAAM38G,EAAcn1I,KAAKgyP,qBACzB,GAAK78G,EAAL,CAGA,GAA8E,OAA1En1I,KAAKiuP,gBAAgBkS,2BAA2BhrH,EAAY3U,UAAoB,CAGlF,MAAM4/H,EAAuBA,KAC3BpgQ,KAAK25G,MAAQ,QACR35G,KAAK09J,UAER19J,KAAK4vP,gBACP,EAIF,OAFA5vP,KAAKiuP,gBAAgB9gG,IAAI,kBAAmBizG,QAC5CpgQ,KAAK25G,MAAQ,sBAEf,CACA35G,KAAKiyP,aAAa98G,EAflB,CAgBF,CAEAs+G,0BAAAA,GACE,OAAO,IACT,CACAzB,kBAAAA,GACE,OAAOhyP,KAAKqgQ,mBAAmBtkI,MAAMi2H,qBACvC,CAYAqO,kBAAAA,CAAmBlrH,GACjB,KAAOA,GAAeA,EAAY9W,QAAQ3mG,OAAO,CAE/C,GAAIy9G,EAAYizG,WAAa,GAAKjzG,EAAYtT,SAAS1B,SAAS9hI,OAAQ,CACtE82I,EAAc,KACd,KACF,CACAA,EAAcn1I,KAAKkzP,qBAAqB,CACtCrxH,SAAUsT,EAAYtT,SACtBumH,WAAYjzG,EAAYizG,WAAa,EACrCD,eAAgBhzG,EAAYgzG,eAAiBhzG,EAAYpY,SACzDwrH,cAAepzG,EAAYozG,eAE/B,CACA,OAAOpzG,CACT,CACAmrH,YAAAA,CAAar4P,GACXjI,KAAKiI,MAAMA,GACXjI,KAAK25G,MAAQ,QACb35G,KAAK49J,QACL59J,KAAKk7H,QAAQ,QACf,CAOAu+H,uBAAAA,CAAwBxxP,EAAOktP,EAAez8P,GAC5C,IAAKsH,KAAK8/P,gBAER,YADA9/P,KAAK25G,MAAQ,SAKf,GAFA35G,KAAKi6P,mBAAmB9E,EAAchX,QAEjCn+O,KAAKupP,gBAGR,OAFAvpP,KAAK25G,MAAQ,aACb35G,KAAKmvP,sBAAwB,GAG/B,GAAIlnP,EAUF,OATIA,EAAMtK,OAASy/O,IACjBp9O,KAAKo6P,iBAEHnyP,EAAMtK,OAASy/O,GACjBp9O,KAAKmvP,sBAAwB,EAE7BnvP,KAAKqvP,sBAAwB,OAE/BrvP,KAAKsgQ,aAAar4P,GAGpB,MAAMktI,EAAcn1I,KAAKupP,gBAGzBvpP,KAAKk6P,2BAA2B/kH,EAAYpY,SAAUo4H,EAAchX,OAEhEgX,EAAcp8P,KAChBiH,KAAKuwP,WAAW4E,EAAcp8P,KAAK,GAErCiH,KAAK25G,MAAQ,YAEb35G,KAAKk7H,QAAQ,aACb,MAAMmD,EAAU8W,EAAY9W,QAM5B,GALIA,EAAQhoH,MACVgoH,EAAQhoH,IAAIgyH,MAAQ8sH,EAAc9+O,IAAIgyH,OAExC8M,EAAY9M,MAAQ8sH,EAAc9sH,MAEH,oBAApB0Z,IAAAA,QAA4D,oBAAnB/hJ,KAAKggQ,UAOvD,OANAhgQ,KAAK25G,MAAQ,wBAGb35G,KAAKggQ,YAAYv1J,MAAK,IAAMzqG,KAAKy5P,wBAAwBxxP,EAAOktP,EAAez8P,KAAS,IAAMsH,KAAKsgQ,aAAa,CAC9GjyP,QAAS,2BAIbgwH,EAAQkiI,WAAY,EACpB,IACEvgQ,KAAKwgQ,cAAcrrH,EACrB,CAAE,MAAOx9I,GAQP,YAPAqI,KAAKsgQ,aAAa,CAChBjyP,QAAS1W,EAAE0W,QACXtU,SAAU,CACR86M,UAAWjJ,GAAQnyM,MAAM2zM,wBACzBnlM,MAAOtQ,IAIb,CAaA,GAZAqI,KAAKygQ,mBAAmBtrH,EAAan1I,KAAKiuP,gBAAgByS,UAAUvrH,EAAY3U,UAAWxgI,KAAK0wP,WAC5Fv7G,EAAY2mB,KAAKz9J,OACnB82I,EAAY4jG,WAAa,CACvB1yO,MAAO8uI,EAAY2mB,KAAK,GAAGxkC,UAC3B53C,IAAKy1D,EAAY2mB,KAAK3mB,EAAY2mB,KAAKz9J,OAAS,GAAG29J,SAGrD7mB,EAAY4jG,WAAa,CACvB1yO,MAAO8uI,EAAYgzG,eACnBzoK,IAAKy1D,EAAYgzG,eAAiBhzG,EAAYpY,UAG9CoY,EAAYozG,cAId,OAHAvoP,KAAKk7H,QAAQ,kBACbl7H,KAAKupP,gBAAkB,UACvBvpP,KAAK25G,MAAQ,SAGfw7B,EAAY9yD,WAAa8yD,EAAY9M,MAAMhmD,WAC3CriF,KAAKuvP,oBAAsBlxH,EAAQtB,SAGnCoY,EAAY2mB,KAAKnjK,SAAQojK,IACvB/7J,KAAK8/P,gBAAgBrjG,OAAOz8J,KAAK+/P,0BAA4B,IAAIh+G,IAAAA,QAAgBga,EAAIzkC,UAAWykC,EAAIC,QAASD,EAAIjjJ,MAAQijJ,EAAI,IAnwI9F,SAAUtqE,GAC7C,MAAMqqE,EAAOrqE,EAAMqqE,KACnB,IAAKA,EACH,OAEF,MAAM6kG,EAAa,CAAC,EACpB,IAAK,IAAI5iQ,EAAI+9J,EAAKz9J,OAAS,EAAGN,GAAK,EAAGA,IAAK,CACzC,MAAMg+J,EAAMD,EAAK/9J,GACX6iQ,EAAS,GAAG7kG,EAAIzkC,aAAaykC,EAAIC,WAAWD,EAAIjjJ,OAClD6nP,EAAWC,GACbnvK,EAAM6yE,UAAUvI,GAEhB4kG,EAAWC,GAAU7kG,CAEzB,CACF,CA0vII8kG,CAA6B7gQ,KAAK8/P,iBAClC9/P,KAAKg7P,oBACP,CACAhf,WAAAA,GACE,CAEFwb,oBAAAA,GAAwB,CAYxBgJ,aAAAA,CAAcrrH,GACZ,IAAI2rH,EACAC,GAAsB,EAC1B,GAA+B,oBAApBh/G,IAAAA,OAET,MAAM,IAAI69G,GAEwB,oBAAzB79G,IAAAA,YACT++G,EAAU,IAAI/+G,IAAAA,aAAqB,SAEnC++G,EAAU/+G,IAAAA,OAAgBsgB,gBAC1B0+F,GAAsB,GAExB,MAAMtnH,EAAS,IAAIsI,IAAAA,OAAgB7iB,QAAO6iB,IAAUA,IAAAA,MAAgB++G,GAapE,GAZA3rH,EAAY2mB,KAAO,GACnB3mB,EAAY6rH,aAAe,CACzBC,OAAQ,EACRC,MAAO,GAETznH,EAAO6oB,MAAQntB,EAAY2mB,KAAK3iK,KAAK4F,KAAKo2I,EAAY2mB,MACtDriB,EAAO0nH,eAAiB9qP,IACtB8+H,EAAY6rH,aAAe3qP,CAAG,EAEhCojI,EAAO8oB,eAAiBt6J,IACtB2jM,GAAQ51G,IAAI3qF,KAAK,wCAA0CpD,EAAMoG,QAAQ,EAEvE8mI,EAAY9W,QAAQhoH,IAAK,CAC3B,IAAI+qP,EAAUjsH,EAAY9W,QAAQhoH,IAAIgyH,MAClC04H,IACFK,EAAU3B,GAAY2B,IAExB3nH,EAAOx+I,MAAMmmQ,EACf,CACA,IAAIjrB,EAAchhG,EAAY9M,MAC1B04H,IACF5qB,EAAcspB,GAAYtpB,IAE5B18F,EAAOx+I,MAAMk7O,GACb18F,EAAOtuB,OACT,CAeAs1I,kBAAAA,CAAmBtrH,EAAaksH,EAAYx/H,GAC1C,MAAMxD,EAAU8W,EAAY9W,QAC5B,IAAKgjI,EAIH,OAEF,IAAKlsH,EAAY2mB,KAAKz9J,OAKpB,YADAggI,EAAQ3mG,OAAQ,GAGlB,MAAM,OACJupO,EAAM,MACNC,GACE/rH,EAAY6rH,aAQVM,EADkBL,EAASp9K,GAAAA,iBACFq9K,EAAQG,EAAW3P,QAOlD,GANAv8G,EAAY2mB,KAAKnjK,SAAQojK,IACvB,MAAMh/B,EAAWg/B,EAAIC,QAAUD,EAAIzkC,UAC7BA,EAAuB,IAAX2pI,EAAellG,EAAIzkC,UAAYgqI,EAAOthQ,KAAKuhQ,gBAAgBxlG,EAAIzkC,UAAYgqI,EAAMD,EAAWl/J,MAC9G45D,EAAIzkC,UAAYh0H,KAAK69E,IAAIm2C,EAAW,GACpCykC,EAAIC,QAAU14J,KAAK69E,IAAIm2C,EAAYyF,EAAU,EAAE,KAE5C8E,EAASgvH,SAAU,CACtB,MAAM2Q,EAAarsH,EAAY2mB,KAAK,GAAGxkC,UACjCmqI,EAAYtsH,EAAY2mB,KAAK3mB,EAAY2mB,KAAKz9J,OAAS,GAAGi5H,UAChEuK,EAASgvH,SAAW,CAClB3vH,cAAeW,EAASX,cAAgBiU,EAAYizG,WACpDjmJ,KAAM7+F,KAAKyhG,IAAIy8J,EAAYC,EAAYpjI,EAAQtB,UAEnD,CACF,CAoBAwkI,eAAAA,CAAgBjqQ,EAAO21I,GACrB,GAAkB,OAAdA,EACF,OAAO31I,EAET,IAAIoqQ,EAAepqQ,EAAQusF,GAAAA,iBAC3B,MAAM89K,EAAmB10H,EAAYppD,GAAAA,iBACrC,IAAIlrE,EASJ,IANEA,EAFEgpP,EAAmBD,GAEX,WAGD,WAGJp+P,KAAK0lI,IAAI04H,EAAeC,GAAoB,YACjDD,GAAgB/oP,EAElB,OAAO+oP,EAAe79K,GAAAA,gBACxB,EAmBF,MAAM+9K,GAAY,SAAUnwK,EAAOowK,GACjC,MAAM/lG,EAAOrqE,EAAMqqE,KACnB,IAAK,IAAI/9J,EAAI,EAAGA,EAAI+9J,EAAKz9J,OAAQN,IAAK,CACpC,MAAMg+J,EAAMD,EAAK/9J,GACjB,GAAI8jQ,GAAa9lG,EAAI+lG,aAAeD,GAAa9lG,EAAIgmG,UACnD,OAAOhmG,CAEX,CACA,OAAO,IACT,EAuDA,MAAMimG,GASJ1iQ,WAAAA,CAAW2iQ,GAMR,IANS,MACV57P,EAAK,IACLq5E,EAAG,aACHgkD,EAAY,UACZC,EAAY,KAAI,SAChBu+H,GAAW,GACZD,EACCjiQ,KAAKmiQ,OAAS97P,EACdrG,KAAKoiQ,KAAO1iL,EACZ1/E,KAAKqiQ,cAAgB3+H,EACrB1jI,KAAKsiQ,WAAa3+H,EAClB3jI,KAAKuiQ,UAAYL,CACnB,CACAM,SAAAA,CAAUhQ,GACR,OAAOA,GAAcxyP,KAAKqG,OAASmsP,EAAaxyP,KAAK0/E,GACvD,CACA87K,YAAAA,GACEx7P,KAAKuiQ,WAAY,CACnB,CACAlR,mBAAAA,GACErxP,KAAKuiQ,WAAY,CACnB,CACA,cAAIjP,GACF,OAAOtzP,KAAKuiQ,SACd,CACA,SAAIl8P,GACF,OAAOrG,KAAKmiQ,MACd,CACA,OAAIziL,GACF,OAAO1/E,KAAKoiQ,IACd,CACA,gBAAI1+H,GACF,OAAO1jI,KAAKqiQ,aACd,CACA,aAAI1+H,GACF,OAAO3jI,KAAKsiQ,UACd,EAEF,MAAMG,GAMJnjQ,WAAAA,CAAYojQ,GAAqC,IAApBC,EAAa14P,UAAA5L,OAAA,QAAA/D,IAAA2P,UAAA,GAAAA,UAAA,GAAG,GAC3CjK,KAAK4iQ,iBAAmBF,EACxB1iQ,KAAK6iQ,eAAiBF,CACxB,CACA,mBAAID,GACF,OAAO1iQ,KAAK4iQ,gBACd,CACA,iBAAID,GACF,OAAO3iQ,KAAK6iQ,cACd,CACA,oBAAIC,GACF,OAAO9iQ,KAAK6iQ,eAAexkQ,OAAS,CACtC,CACA0kQ,iBAAAA,GACE/iQ,KAAK4iQ,iBAAiBvR,sBACtBrxP,KAAK6iQ,eAAelqQ,SAAQqqQ,GAAgBA,EAAa3R,uBAC3D,EAEF,MAAM4R,GACJ3jQ,WAAAA,GAKEU,KAAKkjQ,SAAW,IAAIhjQ,IACpBF,KAAKmjQ,aAAe,GACpBnjQ,KAAKojQ,aAAc,EACnBpjQ,KAAKmiQ,QAAUt/I,IACf7iH,KAAKoiQ,KAAOv/I,GACd,CACA,SAAIx8G,GACF,OAAOrG,KAAKmiQ,MACd,CACA,OAAIziL,GACF,OAAO1/E,KAAKoiQ,IACd,CACA,eAAIpR,GACF,OAAOhxP,KAAKmjQ,YACd,CACA,cAAIxQ,GACF,OAAO3yP,KAAKojQ,WACd,CACA/R,mBAAAA,GACErxP,KAAKkjQ,SAASvqQ,SAAQ0qQ,GAAgBA,EAAaN,qBACrD,CAUAjuF,MAAAA,CAAOjzC,EAAUoiC,GACf,MAAM,cACJ/iC,EAAa,SACbf,GACE0B,EAEJ,GADA7hI,KAAKojQ,YAAcpjQ,KAAKsjQ,oBAAoBpiI,EAAef,GACtDngI,KAAKojQ,YAGV,OAAOpjQ,KAAKujQ,eAAepjI,EAAUe,EAAelhI,KAAKwjQ,mBAAmBtiI,EAAe+iC,GAC7F,CAMAovF,kBAAAA,CAAmBb,GACjB,IAAK,MAAM,gBACTkQ,EAAe,cACfC,KACG3iQ,KAAKkjQ,SAASn2I,SAEjB,GAAK41I,EAActkQ,QAMjB,IAAK,MAAM2kQ,KAAgBL,EACzB,GAAIK,EAAaR,UAAUhQ,GACzB,OAAOwQ,OAPX,GAAIN,EAAgBF,UAAUhQ,GAC5B,OAAOkQ,EAWb,OAAO,IACT,CACAe,2BAAAA,CAA4BviI,GAC1B,OAAOlhI,KAAKkjQ,SAASpiQ,IAAIogI,EAC3B,CACAqiI,cAAAA,CAAepjI,EAAUujI,EAAuBC,GAC9C,MAAMC,EAAa,IAAI1jQ,IACvB,IAAI2jQ,EAAiB,KACjBzM,EAAeuM,EACfG,EAAuBJ,EAC3B1jQ,KAAKmiQ,OAAS/K,EACdj3H,EAASxnI,SAAQ,CAAC0lI,EAASqF,KACzB,MAAMqgI,EAAmB/jQ,KAAKkjQ,SAASpiQ,IAAIgjQ,GACrCE,EAAe5M,EACfj5C,EAAa6lD,EAAe3lI,EAAQtB,SACpCknI,EAAoBryH,QAAQmyH,GAAoBA,EAAiBrB,iBAAmBqB,EAAiBrB,gBAAgBpP,YACrHoP,EAAkB,IAAIV,GAAS,CACnC37P,MAAO29P,EACPtkL,IAAKy+H,EACL+jD,SAAU+B,EACVvgI,iBAEFrF,EAAQwyH,SAAW6R,EACnB,IAAIwB,EAAmB9M,EACvB,MAAMuL,GAAiBtkI,EAAQjE,OAAS,IAAI/jH,KAAI,CAACo5C,EAAMk0E,KACrD,MAAMwgI,EAAYD,EACZE,EAAUF,EAAmBz0M,EAAKstE,SAClCsnI,EAAiBzyH,QAAQmyH,GAAoBA,EAAiBpB,eAAiBoB,EAAiBpB,cAAch/H,IAAcogI,EAAiBpB,cAAch/H,GAAW2vH,YACtK0P,EAAe,IAAIhB,GAAS,CAChC37P,MAAO89P,EACPzkL,IAAK0kL,EACLlC,SAAUmC,EACV3gI,eACAC,cAKF,OAHAugI,EAAmBE,EACnBP,GAAkB,mBAAmBC,KAAwBngI,cAAsBwgI,YAAiBC,iBAAuBC,MAC3H50M,EAAKohM,SAAWmS,EACTA,CAAY,IAErBY,EAAWjjQ,IAAImjQ,EAAsB,IAAIrB,GAAaC,EAAiBC,IACvEkB,GAAkB,GAAGrd,GAA6BnoH,EAAQsM,kCAAkCm5H,cAAiCE,YAAoB7lD,iBAA0B8lD,MAC3KH,IACA1M,EAAej5C,CAAU,IAE3Bn+M,KAAKoiQ,KAAOhL,EACZp3P,KAAKkjQ,SAAWU,EAChB5jQ,KAAKmjQ,aAAeU,CACtB,CACAL,kBAAAA,CAAmBtiI,EAAe1jB,GAChC,OAAKx9G,KAAKkjQ,SAAS9hQ,KAIfpB,KAAKkjQ,SAASxiQ,IAAIwgI,GAEblhI,KAAKkjQ,SAASpiQ,IAAIogI,GAAewhI,gBAAgBr8P,MAInDm3G,EARE,CASX,CACA8lJ,mBAAAA,CAAoBpiI,EAAef,GACjC,YAAyB7lI,IAAlB4mI,GAAiD,OAAlBA,GAA0BjoI,MAAMC,QAAQinI,IAAaA,EAAS9hI,MACtG,EAEF,MAAMimQ,WAAmCrB,GACvC3jQ,WAAAA,CAAYoS,GACVqqH,QACA/7H,KAAKukQ,QAAU7yP,CACjB,CACA8xP,kBAAAA,CAAmBtiI,EAAe1jB,GAChC,IAAKx9G,KAAKkjQ,SAAS9hQ,KAAM,CACvB,MAAM4gJ,EAAOhiJ,KAAKukQ,QAAQd,4BAA4BviI,GACtD,OAAI8gB,EACKA,EAAK0gH,gBAAgBr8P,MAEvB,CACT,CACA,OAAO01H,MAAMynI,mBAAmBtiI,EAAe1jB,EACjD,EAWF,MACMgnJ,GAAsB,CAG5B,CACEjlQ,KAAM,MACNklQ,IAAKA,CAACvW,EAAgBrsH,EAAU9E,EAAU+C,EAAiBmkC,KACzD,GAAIlnC,IAAala,IAAU,CAMzB,MALkB,CAChB1gB,KAAM,EACNuhC,aAAc,EACdC,UAAW,KAGf,CACA,OAAO,IAAI,GAEZ,CACDpkI,KAAM,gBAWNklQ,IAAKA,CAACvW,EAAgBrsH,EAAU9E,EAAU+C,EAAiBmkC,EAAa5sK,KACtE,MAAMqtQ,EAAoBxW,EAAec,qBAAqB33P,GAC9D,IAAKqtQ,EACH,OAAO,KAET,IAAKA,EAAkB/R,WACrB,OAAO,KAET,MAAM9B,EAAW6T,EAAkBrR,mBAAmBpvF,GACtD,OAAK4sF,EAGE,CACL1uJ,KAAM0uJ,EAASxqP,MACfs9H,UAAWktH,EAASltH,UACpBD,aAAcmtH,EAASntH,cALhB,IAMR,GAIL,CACEnkI,KAAM,kBACNklQ,IAAKA,CAACvW,EAAgBrsH,EAAU9E,EAAU+C,EAAiBmkC,KACzD,IAAK9kK,OAAO0M,KAAKqiP,EAAeyW,4BAA4BtmQ,OAC1D,OAAO,KAET,IAAIwoO,EAAY,KACZ+9B,EAAe,KACnB,MAAMryD,EAAmBvC,GAAoBnuE,GAC7CoiC,EAAcA,GAAe,EAC7B,IAAK,IAAIlmK,EAAI,EAAGA,EAAIw0M,EAAiBl0M,OAAQN,IAAK,CAGhD,MACMy0M,EAAiBD,EADT1wE,EAASb,SAA2B,IAAhBijC,EAAoBlmK,EAAIw0M,EAAiBl0M,QAAUN,EAAI,IAEnFsgI,EAAUm0E,EAAen0E,QACzBwmI,EAAkB3W,EAAeyW,2BAA2BtmI,EAAQmC,UAC1E,IAAKqkI,IAAoBxmI,EAAQZ,eAC/B,SAGF,IAAIp3H,EADgBg4H,EAAQZ,eAAesF,UAAY,IAC7B8hI,EAE1B,GAAIxmI,EAAQjE,OAA6C,kBAA7Bo4E,EAAe7uE,UACzC,IAAK,IAAI77C,EAAI,EAAGA,EAAI0qH,EAAe7uE,UAAW77C,IAC5CzhF,GAASg4H,EAAQjE,MAAMtyC,GAAGi1C,SAG9B,MAAMm2C,EAAW5vK,KAAK0lI,IAAIi7B,EAAc59J,GAGxC,GAAqB,OAAjBu+P,IAAuC,IAAb1xF,GAAkB0xF,EAAe1xF,GAC7D,MAEF0xF,EAAe1xF,EACf2zD,EAAY,CACV1kI,KAAM97F,EACNq9H,aAAc8uE,EAAe9uE,aAC7BC,UAAW6uE,EAAe7uE,UAE9B,CACA,OAAOkjG,CAAS,GAKpB,CACEtnO,KAAM,UACNklQ,IAAKA,CAACvW,EAAgBrsH,EAAU9E,EAAU+C,EAAiBmkC,KACzD,IAAI4iE,EAAY,KACZ+9B,EAAe,KACnB3gG,EAAcA,GAAe,EAC7B,MAAMsuC,EAAmBvC,GAAoBnuE,GAC7C,IAAK,IAAI9jI,EAAI,EAAGA,EAAIw0M,EAAiBl0M,OAAQN,IAAK,CAGhD,MACMy0M,EAAiBD,EADT1wE,EAASb,SAA2B,IAAhBijC,EAAoBlmK,EAAIw0M,EAAiBl0M,QAAUN,EAAI,IAEnFsgI,EAAUm0E,EAAen0E,QACzBh4H,EAAQmsM,EAAe/iJ,MAAQ+iJ,EAAe/iJ,KAAKppD,OAASg4H,GAAWA,EAAQh4H,MACrF,GAAIg4H,EAAQmC,WAAaV,GAAoC,qBAAVz5H,EAAuB,CACxE,MAAM6sK,EAAW5vK,KAAK0lI,IAAIi7B,EAAc59J,GAGxC,GAAqB,OAAjBu+P,GAAyBA,EAAe1xF,EAC1C,QAEG2zD,GAA8B,OAAjB+9B,GAAyBA,GAAgB1xF,KACzD0xF,EAAe1xF,EACf2zD,EAAY,CACV1kI,KAAM97F,EACNq9H,aAAc8uE,EAAe9uE,aAC7BC,UAAW6uE,EAAe7uE,WAGhC,CACF,CACA,OAAOkjG,CAAS,GAKpB,CACEtnO,KAAM,gBACNklQ,IAAKA,CAACvW,EAAgBrsH,EAAU9E,EAAU+C,EAAiBmkC,KACzD,IAAI4iE,EAAY,KAEhB,GADA5iE,EAAcA,GAAe,EACzBpiC,EAAS7B,qBAAuB6B,EAAS7B,oBAAoB3hI,OAAQ,CACvE,IAAIumQ,EAAe,KACnB,IAAK,IAAI7mQ,EAAI,EAAGA,EAAI8jI,EAAS7B,oBAAoB3hI,OAAQN,IAAK,CAC5D,MAAM2lI,EAAe7B,EAAS7B,oBAAoBjiI,GAC5C+kI,EAAgBjB,EAASV,sBAAwBpjI,EAAI,EACrD+mQ,EAAoB5W,EAAe6W,gBAAgBjiI,GACzD,GAAIgiI,EAAmB,CACrB,MAAM5xF,EAAW5vK,KAAK0lI,IAAIi7B,EAAc6gG,EAAkB3iK,MAG1D,GAAqB,OAAjByiK,GAAyBA,EAAe1xF,EAC1C,QAEG2zD,GAA8B,OAAjB+9B,GAAyBA,GAAgB1xF,KACzD0xF,EAAe1xF,EACf2zD,EAAY,CACV1kI,KAAM2iK,EAAkB3iK,KACxBuhC,eACAC,UAAW,MAGjB,CACF,CACF,CACA,OAAOkjG,CAAS,GAKpB,CACEtnO,KAAM,WACNklQ,IAAKA,CAACvW,EAAgBrsH,EAAU9E,EAAU+C,EAAiBmkC,KACzD,GAAIpiC,EAASgvH,SAAU,CAMrB,MALkB,CAChB1uJ,KAAM0/B,EAASgvH,SAAS1uJ,KACxBuhC,aAAc7B,EAASgvH,SAAS3vH,cAAgBW,EAASX,cACzDyC,UAAW,KAGf,CACA,OAAO,IAAI,IAGf,MAAMqhI,WAAuBp5D,GAAQe,YACnCrtM,WAAAA,GACEy8H,QAEA/7H,KAAK0gQ,UAAY,GACjB1gQ,KAAK+kQ,gBAAkB,GACvB/kQ,KAAK2kQ,2BAA6B,CAAC,EAKnC,MAAM5jG,EAAO,IAAIkiG,GACX18H,EAAQ,IAAI+9H,GAA2BvjG,GACvCqI,EAAM,IAAIk7F,GAA2BvjG,GAC3C/gK,KAAKilQ,sBAAwB,CAC3BlkG,OACAx6B,QACA6iC,OAEFppK,KAAKw2M,QAAU1H,GAAO,iBACxB,CAOAkgD,oBAAAA,CAAqBjG,GACnB,OAAO/oP,KAAKilQ,sBAAsBlc,IAAe,IACnD,CAqBAwJ,YAAAA,CAAa1wH,EAAU9E,EAAU+C,EAAiBmkC,EAAa5sK,GAE7D,GAAI0lI,IAAala,IAAU,CAIzB,OAH6B2hJ,GAAoB//P,MAAKygQ,IAAA,IAAC,KACrD3lQ,GACD2lQ,EAAA,MAAc,QAAT3lQ,CAAc,IACQklQ,IAAIzkQ,KAAM6hI,EAAU9E,EAClD,CACA,MAAMooI,EAAanlQ,KAAKolQ,eAAevjI,EAAU9E,EAAU+C,EAAiBmkC,EAAa5sK,GACzF,IAAK8tQ,EAAW9mQ,OAId,OAAO,KAGT,IAAK,MAAMgnQ,KAAiBF,EAAY,CACtC,MAAM,UACJt+B,EAAS,SACTy+B,GACED,GACE,aACJ3hI,EAAY,KACZvhC,GACE0kI,EACJ,GAAInjG,EAAe,EACjB,SAEF,MACMr9H,EAAQ87F,EACRziB,EAAMr5E,EAFYw7H,EAAS1B,SAASuD,GAEN3G,SAEpC,GADA/8H,KAAKw2M,QAAQ,aAAa8uD,oBAA2BrhG,wBAAkCvgC,aAAwBr9H,QAAYq5E,OACvHukF,GAAe59J,GAAS49J,EAAcvkF,EAExC,OADA1/E,KAAKw2M,QAAQ,sCAAuCqwB,GAC7CA,CAEX,CAIA,OAAO7mO,KAAKulQ,iBAAiBJ,EAAY,CACvCpsQ,IAAK,OACLzB,MAAO2sK,GAEX,CAaAuhG,cAAAA,CAAe3jI,EAAU9E,GACvB,IAAK8E,IAAaA,EAAS1B,SACzB,OAAO,KAET,MAAMglI,EAAanlQ,KAAKolQ,eAAevjI,EAAU9E,EAAU8E,EAASV,sBAAuB,GAE3F,IAAKgkI,EAAW9mQ,OACd,OAAO,KAET,MAAMwoO,EAAY7mO,KAAKulQ,iBAAiBJ,EAAY,CAClDpsQ,IAAK,eACLzB,MAAO,IAOT,OAHIuvO,EAAUnjG,aAAe,IAC3BmjG,EAAU1kI,OAAS,GAEd7+F,KAAK0lI,IAAI69F,EAAU1kI,KAAO2uG,GAAa,CAC5CC,gBAAiBlvE,EAAShD,eAC1BmyE,aAAcnvE,EAAS1B,SACvB/hD,WAAYyoJ,EAAUnjG,aACtBwJ,SAAU,IAEd,CAoBAk4H,cAAAA,CAAevjI,EAAU9E,EAAU+C,EAAiBmkC,EAAa5sK,GAC/D,MAAM8tQ,EAAa,GAEnB,IAAK,IAAIpnQ,EAAI,EAAGA,EAAIymQ,GAAoBnmQ,OAAQN,IAAK,CACnD,MAAMunQ,EAAWd,GAAoBzmQ,GAC/B8oO,EAAYy+B,EAASb,IAAIzkQ,KAAM6hI,EAAU9E,EAAU+C,EAAiBmkC,EAAa5sK,GACnFwvO,IACFA,EAAUy+B,SAAWA,EAAS/lQ,KAC9B4lQ,EAAWhsQ,KAAK,CACdmsQ,SAAUA,EAAS/lQ,KACnBsnO,cAGN,CACA,OAAOs+B,CACT,CAiBAI,gBAAAA,CAAiBJ,EAAY5gQ,GAC3B,IAAIkhQ,EAAgBN,EAAW,GAAGt+B,UAC9B6+B,EAAepiQ,KAAK0lI,IAAIm8H,EAAW,GAAGt+B,UAAUtiO,EAAOxL,KAAOwL,EAAOjN,OACrEquQ,EAAeR,EAAW,GAAGG,SACjC,IAAK,IAAIvnQ,EAAI,EAAGA,EAAIonQ,EAAW9mQ,OAAQN,IAAK,CAC1C,MAAM6nQ,EAActiQ,KAAK0lI,IAAIm8H,EAAWpnQ,GAAG8oO,UAAUtiO,EAAOxL,KAAOwL,EAAOjN,OACtEsuQ,EAAcF,IAChBA,EAAeE,EACfH,EAAgBN,EAAWpnQ,GAAG8oO,UAC9B8+B,EAAeR,EAAWpnQ,GAAGunQ,SAEjC,CAEA,OADAtlQ,KAAKw2M,QAAQ,kBAAkBjyM,EAAOxL,QAAQwL,EAAOjN,gCAAqCquQ,aAAwBF,EAActjK,sBAA2BsjK,EAAc/hI,gBAAqD,kBAA5B+hI,EAAc9hI,UAAyB,cAAc8hI,EAAc9hI,YAAc,IAAM,KAClR8hI,CACT,CAUArU,sBAAAA,CAAuBziH,EAAaiiH,GAClC,MAAMO,EAAoBP,EAAY1vH,cAAgByN,EAAYzN,cAElE,GAAIiwH,EArYiC,MAsYnCvlD,GAAQ51G,IAAI3qF,KAAK,uDAAuD8lP,wBAK1E,IAAK,IAAIpzP,EAAIozP,EAAoB,EAAGpzP,GAAK,EAAGA,IAAK,CAC/C,MAAM8nQ,EAAqBl3H,EAAYxO,SAASpiI,GAChD,GAAI8nQ,GAA0D,qBAA7BA,EAAmBx/P,MAAuB,CACzEuqP,EAAYC,SAAW,CACrB3vH,cAAeyN,EAAYzN,cAAgBnjI,EAC3CokG,KAAM0jK,EAAmBx/P,OAE3BrG,KAAKw2M,QAAQ,gCAAgCo6C,EAAYC,SAAS1uJ,wBAA6ByuJ,EAAYC,SAAS3vH,kBACpHlhI,KAAKk7H,QAAQ,kBACb,KACF,CACF,CACF,CAQA41H,0BAAAA,CAA2BjvH,GAMzB,GADA7hI,KAAK2kQ,2BAA6B,CAAC,EAC/B9iI,EAAS1B,UAAY0B,EAAS1B,SAAS9hI,QAAUwjI,EAAS1B,SAAS,GAAG1C,eAAgB,CACxF,MAAMq2E,EAAejyE,EAAS1B,SAAS,GACjC2lI,EAAoBhyD,EAAar2E,eAAesF,UAAY,IAClE/iI,KAAK2kQ,2BAA2B7wD,EAAatzE,WAAaslI,CAC5D,CACF,CAcArO,qBAAAA,CAAqBsO,GAGlB,IAHmB,YACpB5wH,EAAW,0BACXuiH,GACDqO,EACC,MAAMC,EAAiChmQ,KAAKimQ,6BAA6B9wH,EAAaA,EAAY4jG,WAAY2e,GACxGr5H,EAAU8W,EAAY9W,QACxB2nI,IACFhmQ,KAAKkmQ,2BAA2B/wH,GAG3BA,EAAYtT,SAASgvH,WACxB17G,EAAYtT,SAASgvH,SAAW,CAC9B3vH,cAAeiU,EAAYtT,SAASX,cAAgBiU,EAAYizG,WAChEjmJ,KAAMk8B,EAAQh4H,SAIpB,MAAM8/P,EAAW9nI,EAAQZ,eACrBY,EAAQyE,eAAiB40H,GAA6ByO,IACxDnmQ,KAAK2kQ,2BAA2BtmI,EAAQmC,WAAc2lI,EAASpjI,UAAY,IAE/E,CACAo9H,0BAAAA,CAA2B3/H,GACzB,MAAwC,qBAA7BxgI,KAAK0gQ,UAAUlgI,GACjB,KAEFxgI,KAAK0gQ,UAAUlgI,GAAUr+B,IAClC,CACAq4J,kBAAAA,CAAmBh6H,GACjB,MAAwC,qBAA7BxgI,KAAK0gQ,UAAUlgI,GACjB,KAEFxgI,KAAK0gQ,UAAUlgI,GAAUkxH,OAClC,CAiBAuU,4BAAAA,CAA6B9wH,EAAa4jG,EAAY2e,GAEpD,MAAMr5H,EAAU8W,EAAY9W,QACtB5uE,EAAO0lF,EAAY1lF,KACzB,IACIppD,EACAq5E,EAFA2hL,EAAarhQ,KAAK0gQ,UAAUvrH,EAAY3U,UAG5C,GAA2C,kBAAhC2U,EAAYulG,gBACrB2mB,EAAa,CACXl/J,KAAMgzC,EAAYgzG,eAClBuJ,QAASv8G,EAAYgzG,eAAiBpP,EAAW1yO,OAE/CqxP,IACF13P,KAAK0gQ,UAAUvrH,EAAY3U,UAAY6gI,EACvCrhQ,KAAKk7H,QAAQ,mBACbl7H,KAAKw2M,QAAQ,6BAA6BrhE,EAAY3U,oBAAyB6gI,EAAWl/J,mBAAmBk/J,EAAW3P,aAE1HrrP,EAAQ8uI,EAAYgzG,eACpBzoK,EAAMq5J,EAAWr5J,IAAM2hL,EAAW3P,YAC7B,KAAI2P,EAIT,OAAO,EAHPh7P,EAAQ0yO,EAAW1yO,MAAQg7P,EAAW3P,QACtChyK,EAAMq5J,EAAWr5J,IAAM2hL,EAAW3P,OAGpC,CAcA,OAbIjiM,IACFA,EAAKppD,MAAQA,EACbopD,EAAKiwB,IAAMA,KAOR2+C,EAAQh4H,OAASA,EAAQg4H,EAAQh4H,SACpCg4H,EAAQh4H,MAAQA,GAElBg4H,EAAQ3+C,IAAMA,GACP,CACT,CAUAwmL,0BAAAA,CAA2B/wH,GACzB,MAAMtT,EAAWsT,EAAYtT,SACvBxD,EAAU8W,EAAY9W,QAI5B,GAAIA,EAAQyE,cACV9iI,KAAK+kQ,gBAAgB1mI,EAAQmC,UAAY,CACvCr+B,KAAMk8B,EAAQh4H,MACd+/P,SAAU,QAEP,GAAIvkI,EAAS7B,qBAAuB6B,EAAS7B,oBAAoB3hI,OAGtE,IAAK,IAAIN,EAAI,EAAGA,EAAI8jI,EAAS7B,oBAAoB3hI,OAAQN,IAAK,CAC5D,MAAM2lI,EAAe7B,EAAS7B,oBAAoBjiI,GAC5C+kI,EAAgBjB,EAASV,sBAAwBpjI,EAAI,EACrDsoQ,EAAiB3iI,EAAeyR,EAAYizG,WAC5Cge,EAAW9iQ,KAAK0lI,IAAIq9H,GAC1B,IAAKrmQ,KAAK+kQ,gBAAgBjiI,IAAkB9iI,KAAK+kQ,gBAAgBjiI,GAAesjI,SAAWA,EAAU,CACnG,IAAIjkK,EAEFA,EADEkkK,EAAiB,EACZhoI,EAAQh4H,MAAQyqM,GAAa,CAClCC,gBAAiBlvE,EAAShD,eAC1BmyE,aAAcnvE,EAAS1B,SACvB/hD,WAAY+2D,EAAYizG,WACxBl7G,SAAUxJ,IAGLrF,EAAQ3+C,IAAMoxH,GAAa,CAChCC,gBAAiBlvE,EAAShD,eAC1BmyE,aAAcnvE,EAAS1B,SACvB/hD,WAAY+2D,EAAYizG,WAAa,EACrCl7G,SAAUxJ,IAGd1jI,KAAK+kQ,gBAAgBjiI,GAAiB,CACpC3gC,OACAikK,WAEJ,CACF,CAEJ,CACA7qI,OAAAA,GACEv7H,KAAKk7H,QAAQ,WACbl7H,KAAKi7H,KACP,EAaF,MAAMqrI,WAAiC16D,GAAQe,YAC7CrtM,WAAAA,GACEy8H,QACA/7H,KAAKumQ,wBAA0B,CAAC,EAChCvmQ,KAAKwmQ,qBAAuB,CAAC,CAC/B,CACA1W,0BAAAA,CAA2Bz4P,GACzB2I,KAAKumQ,wBAAwBlvQ,GAAQ,KACrC2I,KAAKk7H,QAAQ,wBACf,CACAkuH,qBAAAA,CAAqBqd,GAIlB,IAJmB,KACpBpvQ,EAAI,KACJmI,EAAI,GACJkxJ,GACD+1G,EASC,MARoB,kBAATjnQ,GAAmC,kBAAPkxJ,IACrC1wJ,KAAKumQ,wBAAwBlvQ,GAAQ,CACnCA,OACAmI,OACAkxJ,MAEF1wJ,KAAKk7H,QAAQ,0BAERl7H,KAAKumQ,wBAAwBlvQ,EACtC,CACA6xP,kBAAAA,CAAkBwd,GAIf,IAJgB,KACjBrvQ,EAAI,KACJmI,EAAI,GACJkxJ,GACDg2G,EACC,GAAoB,kBAATlnQ,GAAmC,kBAAPkxJ,EAAiB,CACtD1wJ,KAAKwmQ,qBAAqBnvQ,GAAQ,CAChCA,OACAmI,OACAkxJ,aAEK1wJ,KAAKumQ,wBAAwBlvQ,GACpC,MAAM0C,EAAW,CACf4sQ,mBAAoB,CAClBnnQ,OACAkxJ,OAGJ1wJ,KAAKk7H,QAAQ,CACX7jI,KAAM,iBACN0C,YAEJ,CACA,OAAOiG,KAAKwmQ,qBAAqBnvQ,EACnC,CACAkkI,OAAAA,GACEv7H,KAAKk7H,QAAQ,WACbl7H,KAAKumQ,wBAA0B,CAAC,EAChCvmQ,KAAKwmQ,qBAAuB,CAAC,EAC7BxmQ,KAAKi7H,KACP,EAIF,MAAM2rI,GAAa99G,GAAUq+D,IAAgB,WAW3C,IAAIpsF,EAAsB,WACxB,SAASA,IACP/6H,KAAKwiG,UAAY,CAAC,CACpB,CASA,IAAIpiG,EAAS26H,EAAO37H,UA+EpB,OA9EAgB,EAAO46H,GAAK,SAAY3jI,EAAMywG,GACvB9nG,KAAKwiG,UAAUnrG,KAClB2I,KAAKwiG,UAAUnrG,GAAQ,IAEzB2I,KAAKwiG,UAAUnrG,GAAM8B,KAAK2uG,EAC5B,EASA1nG,EAAO66H,IAAM,SAAa5jI,EAAMywG,GAC9B,IAAK9nG,KAAKwiG,UAAUnrG,GAClB,OAAO,EAET,IAAIwB,EAAQmH,KAAKwiG,UAAUnrG,GAAMyB,QAAQgvG,GAWzC,OAFA9nG,KAAKwiG,UAAUnrG,GAAQ2I,KAAKwiG,UAAUnrG,GAAM2B,MAAM,GAClDgH,KAAKwiG,UAAUnrG,GAAM+vH,OAAOvuH,EAAO,GAC5BA,GAAS,CAClB,EAOAuH,EAAO86H,QAAU,SAAiB7jI,GAChC,IAAI8jI,EAAYn7H,KAAKwiG,UAAUnrG,GAC/B,GAAK8jI,EAOL,GAAyB,IAArBlxH,UAAU5L,OAEZ,IADA,IAAIA,EAAS88H,EAAU98H,OACdN,EAAI,EAAGA,EAAIM,IAAUN,EAC5Bo9H,EAAUp9H,GAAGc,KAAKmB,KAAMiK,UAAU,SAKpC,IAFA,IAAImxH,EAAOniI,MAAMmG,UAAUpG,MAAM6F,KAAKoL,UAAW,GAC7CoxH,EAAUF,EAAU98H,OACfi9H,EAAK,EAAGA,EAAKD,IAAWC,EAC/BH,EAAUG,GAAIxjI,MAAMkI,KAAMo7H,EAGhC,EAIAh7H,EAAOm7H,QAAU,WACfv7H,KAAKwiG,UAAY,CAAC,CACpB,EASApiG,EAAOo7H,KAAO,SAAcC,GAC1Bz7H,KAAKg7H,GAAG,QAAQ,SAAUr+H,GACxB8+H,EAAYtiI,KAAKwD,EACnB,GACF,EACOo+H,CACT,CA5F0B,GAoM1B,IAAI8rI,EAAY,KAShB,MAAMC,EACJxnQ,WAAAA,CAAYvG,GAoBV,IAAIgF,EACA4sH,EACAo8I,EAPCF,IACHA,EArEa,WACjB,MAAMG,EAAS,CAAC,CAAC,GAAI,GAAI,GAAI,GAAI,IAAK,CAAC,GAAI,GAAI,GAAI,GAAI,KACjDC,EAAWD,EAAO,GAClBE,EAAWF,EAAO,GAClBG,EAAOF,EAAS,GAChBG,EAAUF,EAAS,GACzB,IAAInpQ,EACAyqG,EACA6+J,EACJ,MAAMhgL,EAAI,GACJorB,EAAK,GACX,IAAI60J,EACAC,EACAC,EACAhpL,EACAipL,EACAC,EAEJ,IAAK3pQ,EAAI,EAAGA,EAAI,IAAKA,IACnB00G,GAAIprB,EAAEtpF,GAAKA,GAAK,EAAe,KAAVA,GAAK,IAAYA,GAAKA,EAE7C,IAAKyqG,EAAI6+J,EAAO,GAAIF,EAAK3+J,GAAIA,GAAK8+J,GAAM,EAAGD,EAAO50J,EAAG40J,IAAS,EAU5D,IARA7oL,EAAI6oL,EAAOA,GAAQ,EAAIA,GAAQ,EAAIA,GAAQ,EAAIA,GAAQ,EACvD7oL,EAAIA,GAAK,EAAQ,IAAJA,EAAU,GACvB2oL,EAAK3+J,GAAKhqB,EACV4oL,EAAQ5oL,GAAKgqB,EAEbg/J,EAAKngL,EAAEkgL,EAAKlgL,EAAEigL,EAAKjgL,EAAEmhB,KACrBk/J,EAAY,SAALF,EAAsB,MAALD,EAAoB,IAALD,EAAiB,SAAJ9+J,EACpDi/J,EAAc,IAAPpgL,EAAE7I,GAAiB,SAAJA,EACjBzgF,EAAI,EAAGA,EAAI,EAAGA,IACjBkpQ,EAASlpQ,GAAGyqG,GAAKi/J,EAAOA,GAAQ,GAAKA,IAAS,EAC9CP,EAASnpQ,GAAGygF,GAAKkpL,EAAOA,GAAQ,GAAKA,IAAS,EAIlD,IAAK3pQ,EAAI,EAAGA,EAAI,EAAGA,IACjBkpQ,EAASlpQ,GAAKkpQ,EAASlpQ,GAAG/E,MAAM,GAChCkuQ,EAASnpQ,GAAKmpQ,EAASnpQ,GAAG/E,MAAM,GAElC,OAAOguQ,CACT,CA2BkBW,IAGd3nQ,KAAK4nQ,QAAU,CAAC,CAACf,EAAU,GAAG,GAAG7tQ,QAAS6tQ,EAAU,GAAG,GAAG7tQ,QAAS6tQ,EAAU,GAAG,GAAG7tQ,QAAS6tQ,EAAU,GAAG,GAAG7tQ,QAAS6tQ,EAAU,GAAG,GAAG7tQ,SAAU,CAAC6tQ,EAAU,GAAG,GAAG7tQ,QAAS6tQ,EAAU,GAAG,GAAG7tQ,QAAS6tQ,EAAU,GAAG,GAAG7tQ,QAAS6tQ,EAAU,GAAG,GAAG7tQ,QAAS6tQ,EAAU,GAAG,GAAG7tQ,UAIpQ,MAAMmuQ,EAAOnnQ,KAAK4nQ,QAAQ,GAAG,GACvBV,EAAWlnQ,KAAK4nQ,QAAQ,GACxBC,EAAS9uQ,EAAIsF,OACnB,IAAIypQ,EAAO,EACX,GAAe,IAAXD,GAA2B,IAAXA,GAA2B,IAAXA,EAClC,MAAM,IAAIpuQ,MAAM,wBAElB,MAAMsuQ,EAAShvQ,EAAIC,MAAM,GACnBgvQ,EAAS,GAGf,IAFAhoQ,KAAKqqI,KAAO,CAAC09H,EAAQC,GAEhBjqQ,EAAI8pQ,EAAQ9pQ,EAAI,EAAI8pQ,EAAS,GAAI9pQ,IACpCgpQ,EAAMgB,EAAOhqQ,EAAI,IAEbA,EAAI8pQ,IAAW,GAAgB,IAAXA,GAAgB9pQ,EAAI8pQ,IAAW,KACrDd,EAAMI,EAAKJ,IAAQ,KAAO,GAAKI,EAAKJ,GAAO,GAAK,MAAQ,GAAKI,EAAKJ,GAAO,EAAI,MAAQ,EAAII,EAAW,IAANJ,GAE1FhpQ,EAAI8pQ,IAAW,IACjBd,EAAMA,GAAO,EAAIA,IAAQ,GAAKe,GAAQ,GACtCA,EAAOA,GAAQ,EAAkB,KAAbA,GAAQ,KAGhCC,EAAOhqQ,GAAKgqQ,EAAOhqQ,EAAI8pQ,GAAUd,EAGnC,IAAKp8I,EAAI,EAAG5sH,EAAG4sH,IAAK5sH,IAClBgpQ,EAAMgB,EAAW,EAAJp9I,EAAQ5sH,EAAIA,EAAI,GAE3BiqQ,EAAOr9I,GADL5sH,GAAK,GAAK4sH,EAAI,EACJo8I,EAEAG,EAAS,GAAGC,EAAKJ,IAAQ,KAAOG,EAAS,GAAGC,EAAKJ,GAAO,GAAK,MAAQG,EAAS,GAAGC,EAAKJ,GAAO,EAAI,MAAQG,EAAS,GAAGC,EAAW,IAANJ,GAG5I,CAeA7mB,OAAAA,CAAQ+nB,EAAYC,EAAYC,EAAYC,EAAYC,EAAK1vP,GAC3D,MAAM5f,EAAMiH,KAAKqqI,KAAK,GAEtB,IAIIi+H,EACAC,EACAC,EANA1pL,EAAImpL,EAAalvQ,EAAI,GACrB2tF,EAAI0hL,EAAarvQ,EAAI,GACrBkX,EAAIk4P,EAAapvQ,EAAI,GACrBsuF,EAAI6gL,EAAanvQ,EAAI,GAKzB,MAAM0vQ,EAAe1vQ,EAAIsF,OAAS,EAAI,EACtC,IAAIN,EACA2qQ,EAAS,EACb,MAAM7wB,EAAQ73O,KAAK4nQ,QAAQ,GAErBe,EAAS9wB,EAAM,GACf+wB,EAAS/wB,EAAM,GACfgxB,EAAShxB,EAAM,GACfixB,EAASjxB,EAAM,GACfsvB,EAAOtvB,EAAM,GAEnB,IAAK95O,EAAI,EAAGA,EAAI0qQ,EAAc1qQ,IAC5BuqQ,EAAKK,EAAO7pL,IAAM,IAAM8pL,EAAOliL,GAAK,GAAK,KAAOmiL,EAAO54P,GAAK,EAAI,KAAO64P,EAAW,IAAJzhL,GAAWtuF,EAAI2vQ,GAC7FH,EAAKI,EAAOjiL,IAAM,IAAMkiL,EAAO34P,GAAK,GAAK,KAAO44P,EAAOxhL,GAAK,EAAI,KAAOyhL,EAAW,IAAJhqL,GAAW/lF,EAAI2vQ,EAAS,GACtGF,EAAKG,EAAO14P,IAAM,IAAM24P,EAAOvhL,GAAK,GAAK,KAAOwhL,EAAO/pL,GAAK,EAAI,KAAOgqL,EAAW,IAAJpiL,GAAW3tF,EAAI2vQ,EAAS,GACtGrhL,EAAIshL,EAAOthL,IAAM,IAAMuhL,EAAO9pL,GAAK,GAAK,KAAO+pL,EAAOniL,GAAK,EAAI,KAAOoiL,EAAW,IAAJ74P,GAAWlX,EAAI2vQ,EAAS,GACrGA,GAAU,EACV5pL,EAAIwpL,EACJ5hL,EAAI6hL,EACJt4P,EAAIu4P,EAGN,IAAKzqQ,EAAI,EAAGA,EAAI,EAAGA,IACjBsqQ,GAAK,GAAKtqQ,GAAK4a,GAAUwuP,EAAKroL,IAAM,KAAO,GAAKqoL,EAAKzgL,GAAK,GAAK,MAAQ,GAAKygL,EAAKl3P,GAAK,EAAI,MAAQ,EAAIk3P,EAAS,IAAJ9/K,GAAWtuF,EAAI2vQ,KAC1HJ,EAAKxpL,EACLA,EAAI4H,EACJA,EAAIz2E,EACJA,EAAIo3E,EACJA,EAAIihL,CAER,EAcF,MAAMS,UAAoBhuI,EACxBz7H,WAAAA,GACEy8H,MAAMhB,GACN/6H,KAAKgpQ,KAAO,GACZhpQ,KAAKy4H,MAAQ,EACbz4H,KAAKipQ,SAAW,IAClB,CAOAC,WAAAA,GACElpQ,KAAKgpQ,KAAKhwK,OAAVh5F,GACIA,KAAKgpQ,KAAK3qQ,OACZ2B,KAAKipQ,SAAWntQ,WAAWkE,KAAKkpQ,YAAYnqQ,KAAKiB,MAAOA,KAAKy4H,OAE7Dz4H,KAAKipQ,SAAW,IAEpB,CAOA9vQ,IAAAA,CAAKgwQ,GACHnpQ,KAAKgpQ,KAAK7vQ,KAAKgwQ,GACVnpQ,KAAKipQ,WACRjpQ,KAAKipQ,SAAWntQ,WAAWkE,KAAKkpQ,YAAYnqQ,KAAKiB,MAAOA,KAAKy4H,OAEjE,EAcF,MAAM2wI,EAAO,SAAUC,GACrB,OAAOA,GAAQ,IAAa,MAAPA,IAAkB,GAAY,SAAPA,IAAoB,EAAIA,IAAS,EAC/E,EA6EA,MAAMC,EACJhqQ,WAAAA,CAAYmhP,EAAW1nP,EAAKwwQ,EAAY5pQ,GACtC,MAAMg+M,EAAO2rD,EAAUE,KACjBC,EAAc,IAAIC,WAAWjpB,EAAUt+J,QACvCm+J,EAAY,IAAIvoP,WAAW0oP,EAAUp+J,YAC3C,IAAItkF,EAAI,EAIR,IAHAiC,KAAK2pQ,aAAe,IAAIZ,EAExB/oQ,KAAK2pQ,aAAaxwQ,KAAK6G,KAAK4pQ,cAAcH,EAAYlnL,SAASxkF,EAAGA,EAAI4/M,GAAO5kN,EAAKwwQ,EAAYjpB,IACzFviP,EAAI4/M,EAAM5/M,EAAI0rQ,EAAYprQ,OAAQN,GAAK4/M,EAC1C4rD,EAAa,IAAI5rI,YAAY,CAACyrI,EAAKK,EAAY1rQ,EAAI,IAAKqrQ,EAAKK,EAAY1rQ,EAAI,IAAKqrQ,EAAKK,EAAY1rQ,EAAI,IAAKqrQ,EAAKK,EAAY1rQ,EAAI,MACjIiC,KAAK2pQ,aAAaxwQ,KAAK6G,KAAK4pQ,cAAcH,EAAYlnL,SAASxkF,EAAGA,EAAI4/M,GAAO5kN,EAAKwwQ,EAAYjpB,IAGhGtgP,KAAK2pQ,aAAaxwQ,MAAK,WAhX3B,IAAe0wQ,EAkXTlqQ,EAAK,MAlXIkqQ,EAkXQvpB,GAjXP/9J,SAAS,EAAGsnL,EAAOxnL,WAAawnL,EAAOA,EAAOxnL,WAAa,IAkXvE,GACF,CAOA,eAAWmnL,GAET,OAAO,IACT,CAKAI,aAAAA,CAAcnpB,EAAW1nP,EAAKwwQ,EAAYjpB,GACxC,OAAO,WACL,MAAMj4G,EAjGI,SAAUo4G,EAAW1nP,EAAKwwQ,GAExC,MAAME,EAAc,IAAIC,WAAWjpB,EAAUt+J,OAAQs+J,EAAUr+J,WAAYq+J,EAAUp+J,YAAc,GAC7FynL,EAAW,IAAIhD,EAAI7tQ,MAAMmG,UAAUpG,MAAM6F,KAAK9F,IAE9CunP,EAAY,IAAIvoP,WAAW0oP,EAAUp+J,YACrC0nL,EAAc,IAAIL,WAAWppB,EAAUn+J,QAG7C,IAAI6nL,EACAC,EACAC,EACAC,EACAlC,EACAC,EACAC,EACAC,EAEAgC,EASJ,IANAJ,EAAQT,EAAW,GACnBU,EAAQV,EAAW,GACnBW,EAAQX,EAAW,GACnBY,EAAQZ,EAAW,GAGda,EAAS,EAAGA,EAASX,EAAYprQ,OAAQ+rQ,GAAU,EAGtDnC,EAAamB,EAAKK,EAAYW,IAC9BlC,EAAakB,EAAKK,EAAYW,EAAS,IACvCjC,EAAaiB,EAAKK,EAAYW,EAAS,IACvChC,EAAagB,EAAKK,EAAYW,EAAS,IAEvCN,EAAS5pB,QAAQ+nB,EAAYC,EAAYC,EAAYC,EAAY2B,EAAaK,GAG9EL,EAAYK,GAAUhB,EAAKW,EAAYK,GAAUJ,GACjDD,EAAYK,EAAS,GAAKhB,EAAKW,EAAYK,EAAS,GAAKH,GACzDF,EAAYK,EAAS,GAAKhB,EAAKW,EAAYK,EAAS,GAAKF,GACzDH,EAAYK,EAAS,GAAKhB,EAAKW,EAAYK,EAAS,GAAKD,GAEzDH,EAAQ/B,EACRgC,EAAQ/B,EACRgC,EAAQ/B,EACRgC,EAAQ/B,EAEV,OAAO9nB,CACT,CAgDoBJ,CAAQO,EAAW1nP,EAAKwwQ,GACtCjpB,EAAU3/O,IAAI0nI,EAAOo4G,EAAUr+J,WACjC,CACF,EAEF,IACIV,EADA2lI,EAAuC,qBAAfC,WAA6BA,WAA+B,qBAAXpxN,OAAyBA,OAA2B,qBAAXqrF,EAAAA,EAAyBA,EAAAA,EAAyB,qBAATI,KAAuBA,KAAO,CAAC,EAG5LD,EADoB,qBAAXxrF,OACHA,OAC6B,qBAAnBmxN,EACVA,EACmB,qBAAT1lI,KACVA,KAEA,CAAC,EAET,IAOI2mD,EAPW5mD,EAOO4mD,QAAU9jD,OAC/B8jD,EAAO,OAAQA,EAAO,SAAUA,EAAO,WAAYA,EAAO,aAAcA,EAAO,eAAgBA,EAAO,iBAAkBA,EAAO,mBAAoBA,EAAO,qBAAsBA,EAAO,uBACxL,WACE,IAAIxpD,EAAI,IAAI2pD,YAAY,CAAC,QACrB/hD,EAAI,IAAI3uF,WAAW+mF,EAAEqD,OAAQrD,EAAEsD,WAAYtD,EAAEuD,YACpC,MAATqE,EAAE,IAGFA,EAAE,EAIP,CAVD,GAsBA,MAAM42H,EAA4B,SAAUjvM,GAC1C,MAAMkvM,EAAe,CAAC,EAatB,OAZAp+M,OAAO0M,KAAKwC,GAAS1V,SAAQI,IAC3B,MAAMzB,EAAQ+W,EAAQtV,GAjCF,IAA2B+E,IAkCzBxG,GAjCG,aAAvBm0H,YAAY0c,OACP1c,YAAY0c,OAAOrqI,GAErBA,GAAOA,EAAIqkF,kBAAkBspC,aA+BhC8xF,EAAaxkN,GAAO,CAClBsvI,MAAO/wI,EAAM6qF,OACbC,WAAY9qF,EAAM8qF,WAClBC,WAAY/qF,EAAM+qF,YAGpBk7H,EAAaxkN,GAAOzB,CACtB,IAEKimN,CACT,EASA57H,KAAKo2C,UAAY,SAAUx1B,GACzB,MAAM5lG,EAAO4lG,EAAM5lG,KACb8jP,EAAY,IAAI1oP,WAAW4E,EAAK8jP,UAAUp4G,MAAO1rI,EAAK8jP,UAAUr+J,WAAYzlF,EAAK8jP,UAAUp+J,YAC3FtpF,EAAM,IAAI4kI,YAAYhhI,EAAK5D,IAAIsvI,MAAO1rI,EAAK5D,IAAIqpF,WAAYzlF,EAAK5D,IAAIspF,WAAa,GACjFs/C,EAAK,IAAIhE,YAAYhhI,EAAKglI,GAAG0G,MAAO1rI,EAAKglI,GAAGv/C,WAAYzlF,EAAKglI,GAAGt/C,WAAa,GAGnF,IAAIinL,EAAU7oB,EAAW1nP,EAAK4oI,GAAI,SAAUnrI,EAAK6xI,GAC/C1mD,KAAKq2C,YAAYslF,EAA0B,CACzC94M,OAAQ7H,EAAK6H,OACb87O,UAAWj4G,IACT,CAACA,EAAMlmD,QACb,GAEF,CACF,KACA,IAAImnL,GAAY/iD,GAAQqgD,IASxB,MAAMyD,GAAkBz8H,IACtB,IAAIwyB,EAAOxyB,EAAWrjB,QAAU,OAAS,cAIzC,OAHIqjB,EAAWjL,iBAAmBiL,EAAWjL,gBAAgB7pI,QAAQ,yCAA2C,IAC9GsnK,EAAO,aAEFA,CAAI,EAYPkqG,GAAcA,CAAChhB,EAAe/hH,KAClC+hH,EAAc5rP,QACd4rP,EAAc1rF,QACVr2B,GAAaA,EAAUgjI,uBACzBhjI,EAAUgjI,qBAAqB3sG,QAC/Br2B,EAAUgjI,qBAAuB,KACnC,EAYIC,GAAeA,CAACC,EAAgBljI,KAGpCA,EAAUgjI,qBAAuBE,EACjCA,EAAe5lG,MAAM,EAgKjBxxE,GAAU,CAcd48C,MAAOA,CAAC54I,EAAM4rK,IAAa,KACzB,MACEt8B,YACE,CAACtvI,GAAOkwI,GACT,gBACDmjI,GACEznG,EAEE0nG,EAAcpjI,EAAUojI,cACxBC,EAAcrjI,EAAUqjI,cACxBl0P,GAAMk0P,EAAYj/P,QAAOkiI,GAASA,EAAMtjB,UAAS,IAAMqgJ,EAAY,IAAIl0P,GACvEm0P,EAAetjI,EAAU43B,OAAOzoJ,GACtC,GAAIi0P,IAAgBE,EAApB,CAUAj/D,GAAQ51G,IAAI3qF,KAAK,oFACjB,IAAK,MAAMu4N,KAAWr8F,EAAU43B,OAC9B53B,EAAU43B,OAAOykE,GAAS9sE,QAAUvvB,EAAU43B,OAAOykE,KAAainC,EAEpEtjI,EAAUujI,gBALV,MANEJ,EAAgB,CACdziQ,MAAO,CACLoG,QAAS,yDASW,EAc5B6hI,UAAWA,CAAC74I,EAAM4rK,IAAa,KAC7B,MACEt8B,YACE,CAACtvI,GAAOkwI,IAER07B,EACJ2oC,GAAQ51G,IAAI3qF,KAAK,4EACjB,MAAMomF,EAAQ81C,EAAUojI,cACpBl5K,IACFA,EAAM6c,KAAO,YAEfi5B,EAAUujI,gBAAgB,GAGxBC,GAAiB,CAYrB96H,MAAOA,CAAC54I,EAAMozQ,EAAgBxnG,KAC5B,IAAKwnG,EAEH,OAEF,MAAM,KACJvuG,EAAI,eACJ8uG,EACAC,gBACE,CAAC5zQ,GAAOiyP,IAERrmF,EACJwnG,EAAezvI,GAAG,kBAAkB,KAClC,MAAMgH,EAAQyoI,EAAezoI,QAC7BsnH,EAAcznH,SAASG,EAAOgpI,KAGzB9uG,EAAKwB,UAAY17B,EAAMhB,SAA8B,SAAnBk7B,EAAK85B,YAC1CszD,EAAczkF,MAChB,IAEF4lG,EAAezvI,GAAG,kBAAkB,KAClCsuH,EAAcznH,SAAS4oI,EAAezoI,QAASgpI,GAE1C9uG,EAAKwB,UACR4rF,EAAczkF,MAChB,IAEF4lG,EAAezvI,GAAG,QAAS3nC,GAAQh8F,GAAMA,EAAM4rK,GAAU,EAa3D/yB,UAAWA,CAAC74I,EAAMozQ,EAAgBxnG,KAChC,MAAM,KACJ/G,EAAI,eACJ8uG,EACAC,gBACE,CAAC5zQ,GAAOiyP,GAEV3iH,YACE,CAACtvI,GAAOkwI,IAER07B,EACJwnG,EAAezvI,GAAG,kBAAkB,KAClC,MAAMgH,EAAQyoI,EAAezoI,QAC7BsnH,EAAcznH,SAASG,EAAOgpI,GAC9B1hB,EAAc73J,MAAM81C,EAAUojI,iBAGzBzuG,EAAKwB,UAAY17B,EAAMhB,SAA8B,SAAnBk7B,EAAK85B,YAC1CszD,EAAczkF,MAChB,IAEF4lG,EAAezvI,GAAG,kBAAkB,KAClCsuH,EAAcznH,SAAS4oI,EAAezoI,QAASgpI,GAE1C9uG,EAAKwB,UACR4rF,EAAczkF,MAChB,IAEF4lG,EAAezvI,GAAG,QAAS3nC,GAAQh8F,GAAMA,EAAM4rK,GAAU,GAGvDioG,GAAa,CAUjB,MAASj7H,CAAC54I,EAAM4rK,KACd,MAAM,IACJsjC,EAAG,WACHikD,EACAygB,gBACE,CAAC5zQ,GAAOiyP,GACT,eACD0hB,EACAjqG,MAAM,YACJh/B,GAEF4E,YACE,CAACtvI,IAAO,OACN8zQ,EAAM,OACNhsG,EAAM,QACNq3C,IAEH,mBACD2L,GACEl/C,EACEowC,EAAgBvhE,GAAYqwE,EAAmBphD,MAEhDh/B,EAAY1qI,IAAmD,IAA1C8H,OAAO0M,KAAKk2H,EAAY1qI,IAAOgH,SACvD0jI,EAAY1qI,GAAQ,CAClB0pK,KAAM,CACJx2C,QAAS,CACPA,SAAS,KAIX8oF,IACFtxE,EAAY1qI,GAAM0pK,KAAKx2C,QAAQuX,UAAYqgF,EAAmBphD,KAAKj/B,YAGvE,IAAK,MAAMwxE,KAAWvxE,EAAY1qI,GAAO,CAClC8zQ,EAAO73D,KACV63D,EAAO73D,GAAW,IAEpB,IAAK,MAAM83D,KAAgBrpI,EAAY1qI,GAAMi8M,GAAU,CACrD,IACIm3D,EADA78H,EAAa7L,EAAY1qI,GAAMi8M,GAAS83D,GAyB5C,GAvBI/3D,GACFmD,EAAQ,gBAAgBlD,aAAmB83D,yBAC3Cx9H,EAAWy9H,gBAAiB,EAC5BZ,EAAiB,MAGjBA,EADwB,aAAfjgB,GAA6B58G,EAAW9L,UAChC,IAAIy0E,GAAe3oE,EAAW9L,UAAU,GAAIykE,EAAKykE,GACzDp9H,EAAWjD,YACH,IAAI4rE,GAAe3oE,EAAWjD,YAAa47D,EAAKykE,GAExDp9H,EAAW9L,WAA4B,SAAf0oH,EAChB,IAAIvoC,GAAmBr0E,EAAW9L,UAAU,GAAIykE,EAAKykE,EAAgB7oD,GAIrE,KAEnBv0E,EAAa1D,GAAM,CACjBxzH,GAAI00P,EACJX,kBACC78H,GACHm9H,GAAe1zQ,GAAMA,EAAMu2I,EAAW68H,eAAgBxnG,GACtDkoG,EAAO73D,GAASn6M,KAAKy0I,GACe,qBAAzBuxB,EAAOisG,GAA+B,CAC/C,MAAM35K,EAAQ,IAAIm6G,GAAQ7uD,WAAW,CACnCrmI,GAAI00P,EACJhrG,KAAMiqG,GAAgBz8H,GACtBkpB,SAAS,EACTt0B,SAAUoL,EAAWpL,SACrBjY,QAASqjB,EAAWrjB,QACpBujB,MAAOs9H,IAETjsG,EAAOisG,GAAgB35K,CACzB,CACF,CACF,CAEA63J,EAActuH,GAAG,QAAS3nC,GAAQh8F,GAAMA,EAAM4rK,GAAU,EAW1D,UAAa/yB,CAAC74I,EAAM4rK,KAClB,MAAM,KACJ/G,EAAI,IACJqqC,EAAG,WACHikD,EACAygB,gBACE,CAAC5zQ,GAAOiyP,GACT,eACD0hB,EACAjqG,MAAM,YACJh/B,GAEF4E,YACE,CAACtvI,IAAO,OACN8zQ,EAAM,OACNhsG,IAEH,mBACDgjD,GACEl/C,EACJ,IAAK,MAAMqwC,KAAWvxE,EAAY1qI,GAAO,CAClC8zQ,EAAO73D,KACV63D,EAAO73D,GAAW,IAEpB,IAAK,MAAM83D,KAAgBrpI,EAAY1qI,GAAMi8M,GAAU,CACrD,IAAK/M,EAAI70C,SAAS45G,oBAAsBvpI,EAAY1qI,GAAMi8M,GAAS83D,GAAcvoI,OAS/E,SAEF,IACI4nI,EADA78H,EAAa7L,EAAY1qI,GAAMi8M,GAAS83D,GAE5C,GAAmB,QAAf5gB,EACFigB,EAAiB,IAAIl0D,GAAe3oE,EAAWjD,YAAa47D,EAAKykE,QAC5D,GAAmB,SAAfxgB,EAAuB,CAEhC,IADkB58G,EAAW9L,UAAUn2H,QAAOM,GAAKA,EAAEslM,eAAiB1uF,MACvDxkH,OACb,OAEFosQ,EAAiB,IAAIxoD,GAAmBr0E,EAAW9L,UAAU,GAAIykE,EAAKykE,EAAgB7oD,EACxF,KAA0B,aAAfqoC,IACTigB,EAAiB,IAAIl0D,GAGrB3oE,EAAW9L,UAAY8L,EAAW9L,UAAU,GAAK8L,EAAWjD,YAAa47D,EAAKykE,IAQhF,GANAp9H,EAAa1D,GAAM,CACjBxzH,GAAI00P,EACJX,kBACC78H,GACHm9H,GAAe1zQ,GAAMA,EAAMu2I,EAAW68H,eAAgBxnG,GACtDkoG,EAAO73D,GAASn6M,KAAKy0I,GACe,qBAAzBuxB,EAAOisG,GAA+B,CAC/C,MAAM35K,EAAQyqE,EAAKM,mBAAmB,CACpC9lJ,GAAI00P,EACJhrG,KAAM,YACN71C,QAASqjB,EAAWrjB,SAAWqjB,EAAWvL,WAC1CG,SAAUoL,EAAWpL,SACrBsL,MAAOs9H,IACN,GAAO35K,MACV0tE,EAAOisG,GAAgB35K,CACzB,CACF,CACF,CAEA63J,EAActuH,GAAG,QAAS3nC,GAAQh8F,GAAMA,EAAM4rK,GAAU,EAW1D,kBAAmBsoG,CAACl0Q,EAAM4rK,KACxB,MAAM,KACJ/G,EACA6E,MAAM,YACJh/B,GAEF4E,YACE,CAACtvI,IAAO,OACN8zQ,EAAM,OACNhsG,KAGF8D,EACJ,IAAK,MAAMqwC,KAAWvxE,EAAY1qI,GAAO,CAClC8zQ,EAAO73D,KACV63D,EAAO73D,GAAW,IAEpB,IAAK,MAAM83D,KAAgBrpI,EAAY1qI,GAAMi8M,GAAU,CACrD,MAAM1lE,EAAa7L,EAAY1qI,GAAMi8M,GAAS83D,GAE9C,IAAK,kBAAkB3rQ,KAAKmuI,EAAWnL,YACrC,SAEF,MAAMkP,EAAkBuqB,EAAKxK,SAAS60C,KAAOrqC,EAAKxK,SAAS60C,IAAI50D,iBAAmB,CAAC,EACnF,IAAIopE,EAAW,CACbjtE,MAAOs9H,EACP5oI,SAAUoL,EAAWpL,SACrBC,WAAYmL,EAAWnL,WACvBlY,QAASqjB,EAAWrjB,SAAWqjB,EAAWvL,YAa5C,GAXIsP,EAAgBopE,EAASt4E,cAC3Bs4E,EAAW7wE,GAAM6wE,EAAUppE,EAAgBopE,EAASt4E,mBAE7BnoI,IAArBygN,EAASxwF,gBACJwwF,EAASxwF,QAIlB4gJ,EAAO73D,GAASn6M,KAAK+wI,GAAM,CACzBxzH,GAAI00P,GACHx9H,IACiC,qBAAzBuxB,EAAOisG,GAA+B,CAC/C,MAAM35K,EAAQyqE,EAAKM,mBAAmB,CACpC9lJ,GAAIqkM,EAASt4E,WACb29B,KAAM,WACN71C,QAASwwF,EAASxwF,QAClBiY,SAAUu4E,EAASv4E,SACnBsL,MAAOitE,EAASjtE,QACf,GAAOr8C,MACV0tE,EAAOisG,GAAgB35K,CACzB,CACF,CACF,IAGE+5K,GAAaA,CAAC9mQ,EAAMs9H,KACxB,IAAK,IAAIjkI,EAAI,EAAGA,EAAI2G,EAAKrG,OAAQN,IAAK,CACpC,GAAI+zM,GAAc9vE,EAAOt9H,EAAK3G,IAC5B,OAAO,EAET,GAAI2G,EAAK3G,GAAG+jI,WAAa0pI,GAAW9mQ,EAAK3G,GAAG+jI,UAAWE,GACrD,OAAO,CAEX,CACA,OAAO,CAAK,EAgER2oI,GAAc,CAalB16H,MAAOA,CAAC54I,EAAM4rK,IAAa,KACzB,MACEt8B,YACE,CAACtvI,IAAO,OACN8nK,KAGF8D,EACJ,IAAK,MAAMvsJ,KAAMyoJ,EACf,GAAIA,EAAOzoJ,GAAIogJ,QACb,OAAOqI,EAAOzoJ,GAGlB,OAAO,IAAI,EAcbw5H,UAAWA,CAAC74I,EAAM4rK,IAAa,KAC7B,MACEt8B,YACE,CAACtvI,IAAO,OACN8nK,KAGF8D,EACJ,IAAK,MAAMvsJ,KAAMyoJ,EACf,GAAwB,YAApBA,EAAOzoJ,GAAI43F,MAA0C,WAApB6wD,EAAOzoJ,GAAI43F,KAC9C,OAAO6wD,EAAOzoJ,GAGlB,OAAO,IAAI,GAmCT+0P,GAAmBxoG,IACvB,CAAC,QAAS,YAAa,mBAAmBtqK,SAAQtB,IAChD6zQ,GAAW7zQ,GAAMA,EAAM4rK,EAAS,IAElC,MAAM,WACJt8B,EAAU,mBACVw7E,EAAkB,KAClBjmD,EAAI,IACJqqC,EACA0kE,gBACE,MAAWS,EACX3qG,KAAM4qG,IAEN1oG,EAEJ,CAAC,QAAS,aAAatqK,SAAQtB,IAC7BsvI,EAAWtvI,GAAMuzQ,YAvJDA,EAACvzQ,EAAM4rK,IAAaxxE,IACtC,MAAM,mBACJ0wH,EACAx7E,YACE,CAACtvI,IAAO,OACN8zQ,KAGFloG,EACEjhC,EAAQmgF,EAAmBngF,QACjC,IAAKA,EACH,OAAO,KAET,IAAI4pI,EAAW,KAEX5pI,EAAM7tH,WAAW9c,KACnBu0Q,EAAWT,EAAOnpI,EAAM7tH,WAAW9c,KAErC,MAAMw0Q,EAAY1sQ,OAAO0M,KAAKs/P,GAC9B,IAAKS,EAIH,GAAa,UAATv0Q,GAAoBw0Q,EAAUxtQ,OAAS,GAAKyzI,GAAYmxB,EAASlC,MACnE,IAAK,IAAIhjK,EAAI,EAAGA,EAAI8tQ,EAAUxtQ,OAAQN,IAAK,CACzC,MAAM+tQ,EAAoBX,EAAOU,EAAU9tQ,IAC3C,GAAIytQ,GAAWM,EAAmB9pI,GAAQ,CACxC4pI,EAAWE,EACX,KACF,CACF,MACSX,EAAOpqG,KAChB6qG,EAAWT,EAAOpqG,KACY,IAArB8qG,EAAUxtQ,SACnButQ,EAAWT,EAAOU,EAAU,KAGhC,MAAqB,qBAAVp6K,EACFm6K,EAEK,OAAVn6K,GAAmBm6K,GAKhBA,EAASjgQ,QAAOo5E,GAASA,EAAMruE,KAAO+6E,EAAM/6E,KAAI,IAF9C,IAEwD,EA0GhCk0P,CAAYvzQ,EAAM4rK,GACjDt8B,EAAWtvI,GAAMszQ,YAAcA,GAAYtzQ,GAAMA,EAAM4rK,GACvDt8B,EAAWtvI,GAAM00Q,eArsBEA,EAAC10Q,EAAM4rK,IAAa,KACzC,MACEgoG,gBACE,CAAC5zQ,GAAOiyP,EACRvoF,KAAM4qG,GAERhlI,YACE,CAACtvI,GAAOkwI,IAER07B,EACE0nG,EAAcpjI,EAAUojI,cACxBC,EAAcrjI,EAAUykI,iBACxBC,EAAuB1kI,EAAUgjI,qBACjC2B,EAAY3kI,EAAU4kI,WAExBvB,GAAesB,GAAatB,EAAYl0P,KAAOw1P,EAAUx1P,KAG7D6wH,EAAU4kI,WAAavB,EACvBrjI,EAAU6kI,WAAazB,EACvBL,GAAYhhB,EAAe/hH,GACtBqjI,IAAeA,EAAYS,iBAI3BT,EAAYH,gBAWjBnhB,EAAc4H,eACdsZ,GAAaI,EAAYH,eAAgBljI,IAXnC0kI,GAKFN,EAAkBzhB,mBAM6B,EAgqBf6hB,CAAe10Q,EAAM4rK,GACvDt8B,EAAWtvI,GAAMg1Q,gBA/pBGA,EAACh1Q,EAAM4rK,IAAa,KAC1C,MACEgoG,gBACE,CAAC5zQ,GAAOiyP,GAEV3iH,YACE,CAACtvI,GAAOkwI,IAER07B,EACJ17B,EAAU4kI,WAAa,KACvB7iB,EAAc5rP,QACd4rP,EAAc1rF,OAAO,EAopBgByuG,CAAgBh1Q,EAAM4rK,GACzDt8B,EAAWtvI,GAAMyzQ,eApoBEA,EAACzzQ,EAAM4rK,IAAa,KACzC,MAAM,mBACJk/C,EACA8oD,gBACE,CAAC5zQ,GAAOiyP,EACRvoF,KAAM4qG,GAERhlI,YACE,CAACtvI,GAAOkwI,IAER07B,EACE0nG,EAAcpjI,EAAUojI,cACxBC,EAAcrjI,EAAUykI,iBACxBC,EAAuB1kI,EAAUgjI,qBACjC+B,EAAY/kI,EAAU6kI,WAE5B,KAAIE,IAAa3B,GAAe2B,EAAU51P,KAAOi0P,EAAYj0P,MAG7D6wH,EAAU4kI,WAAavB,EACvBrjI,EAAU6kI,WAAazB,EACvBL,GAAYhhB,EAAe/hH,GACtBqjI,GAAL,CAIA,GAAIA,EAAYS,eAAgB,CAE9B,IAAKV,IAAgB2B,GAAa3B,EAAYj0P,KAAO41P,EAAU51P,GAC7D,OAEF,MAAMo/E,EAAKmtE,EAASsjC,IAAIggD,oBAClBqK,EAAc96J,EAAGy2K,iBAEvB,GAAIz2K,EAAGksC,UAAY4uH,EACjB,OAMF,OAJArpH,EAAUivE,QAAQ,2CAA2C81D,EAAU51P,SAASi0P,EAAYj0P,MAC5FyrM,EAAmBvkD,QACnB+tG,EAAkBzhB,uBAClBp0J,EAAG02K,mBAAmB5b,EAExB,CACA,GAAa,UAATv5P,EAAkB,CACpB,IAAKuzQ,EAAYH,eAQf,OAJAkB,EAAkBjc,UAAS,QAG3Bic,EAAkBzhB,kBAMpBZ,EAAcoG,UAAS,GACvBic,EAAkBjc,UAAS,EAC7B,CACIuc,IAAyBrB,EAAYH,gBAOrCnhB,EAAc73J,OAEhB63J,EAAc73J,MAAMk5K,GAGtBrhB,EAAcY,kBACdsgB,GAAaI,EAAYH,eAAgBljI,IATvCijI,GAAaI,EAAYH,eAAgBljI,EAvC3C,CAgDmD,EA2jBfujI,CAAezzQ,EAAM4rK,GACvDt8B,EAAWtvI,GAAM20Q,eArDEA,EAAC30Q,EAAIo1Q,KAAA,IAAE,WAC5B9lI,GACD8lI,EAAA,MAAK,KACJ,MAAMC,EAAe/lI,EAAWtvI,GAAMszQ,cACtC,OAAK+B,EAGE/lI,EAAWtvI,GAAMuzQ,YAAY8B,GAF3B,IAEwC,CAClD,EA6CqCV,CAAe30Q,EAAM4rK,EAAS,IAIlE,MAAM2gF,EAAaj9G,EAAWsJ,MAAM26H,cACpC,GAAIhnB,EAAY,CACd,MAAMtwC,GAAWswC,EAAWj4O,QAAOkiI,GAASA,EAAMtjB,UAAS,IAAMq5H,EAAW,IAAIltO,GAChFiwH,EAAWsJ,MAAMkvB,OAAOm0C,GAASx8C,SAAU,EAC3CnwB,EAAWsJ,MAAM87H,iBACjBplI,EAAWsJ,MAAM66H,iBACQnkI,EAAWsJ,MAAM+7H,iBAIpBvB,gBAKpBkB,EAAkBjc,UAAS,GAC3Bgc,EAAmBhc,UAAS,IAJ5Bic,EAAkBjc,UAAS,EAM/B,CACAvtC,EAAmBnnF,GAAG,eAAe,KACnC,CAAC,QAAS,aAAariI,SAAQtB,GAAQsvI,EAAWtvI,GAAM00Q,kBAAiB,IAE3E5pD,EAAmBnnF,GAAG,iBAAiB,KACrC,CAAC,QAAS,aAAariI,SAAQtB,GAAQsvI,EAAWtvI,GAAMg1Q,mBAAkB,IAG5E,MAAMM,EAAsBA,KAC1BhmI,EAAWsJ,MAAM66H,iBACjB5uG,EAAKhhC,QAAQ,CACX7jI,KAAM,QACNkI,KAAM,oBACN,EAEJ28J,EAAKouB,cAAcp3F,iBAAiB,SAAUy5K,GAC9CzwG,EAAKqN,mBAAmBr2E,iBAAiB,SAAUyzC,EAAWuJ,UAAU46H,gBACxEvkE,EAAIvrE,GAAG,WAAW,KAChBkhC,EAAKouB,cAAcn3F,oBAAoB,SAAUw5K,GACjDzwG,EAAKqN,mBAAmBp2E,oBAAoB,SAAUwzC,EAAWuJ,UAAU46H,eAAe,IAG5F5uG,EAAKqM,YAAY,SACjB,IAAK,MAAM7xJ,KAAMiwH,EAAWsJ,MAAMkvB,OAChCjD,EAAKouB,cAAcjrB,SAAS14B,EAAWsJ,MAAMkvB,OAAOzoJ,GACtD,EAyCF,MAAMk2P,GACJttQ,WAAAA,GACEU,KAAK6sQ,UAAY,GACjB7sQ,KAAK8sQ,eAAiB,IAAI5sQ,GAC5B,CACA,WAAIyV,CAAQgwE,GAEK,IAAXA,IACF3lF,KAAK+sQ,SAAWpnL,EAEpB,CACA,OAAIqnL,CAAIlpL,GAEN9jF,KAAKitQ,KAAOnpL,GAAW,GACzB,CACA,aAAIopL,CAAU7zQ,GACRA,IAEF2G,KAAKmtQ,WAAaviI,GAAW5qI,KAAKmtQ,WAAY9zQ,GAElD,CACA,YAAIq/F,CAASv6F,GAEPA,GAASA,EAAME,SACjB2B,KAAK6sQ,UAAY1uQ,EAErB,CACA,iBAAIivQ,CAAcjvQ,GAEZA,GAASA,EAAME,SACjB2B,KAAK8sQ,eAAiB,IAAI5sQ,IAAI/B,EAAMkY,KAAIw/K,GAAS,CAACA,EAAM+jB,GAAI/jB,MAEhE,CACA,WAAIlgL,GACF,OAAO3V,KAAK+sQ,QACd,CACA,OAAIC,GACF,OAAOhtQ,KAAKitQ,IACd,CACA,aAAIC,GACF,OAAOltQ,KAAKmtQ,UACd,CACA,YAAIz0K,GACF,OAAO14F,KAAK6sQ,SACd,CACA,iBAAIO,GACF,OAAOptQ,KAAK8sQ,cACd,EAYF,MAAMO,WAAkCzhE,GAAQe,YAC9CrtM,WAAAA,CAAY/E,EAAK61I,GACfrU,QACA/7H,KAAKstQ,eAAiB,KACtBttQ,KAAKutQ,eAAiB,KACtBvtQ,KAAKs5I,kBAAmB,EACxBt5I,KAAKwtQ,mBAAqB,IAAI5sQ,IAC9BZ,KAAKytQ,iBAAmB,IAAIb,GAC5B5sQ,KAAK0tQ,gBAAkB,KACvB1tQ,KAAK2tQ,cAAgB,KACrB3tQ,KAAK4tQ,YAAc,KACnB5tQ,KAAK6tQ,SAAW,KAChB7tQ,KAAK8tQ,qBAAuB,IAAI5tQ,IAChCF,KAAK+tQ,kBAAoB,IAAI7tQ,IAC7BF,KAAKguQ,6BAA+B,IAAIptQ,IACxCZ,KAAKw2M,QAAU1H,GAAO,oBACtB9uM,KAAKiuQ,KAAO1zQ,EACZyF,KAAKkuQ,cAAgB99H,CACvB,CAQA+9H,mBAAAA,CAAoB5zI,EAAS6zI,GAC3BpuQ,KAAK2tQ,cAAgBS,EAAYC,UAAY,MAAQ,OAErD,MAAMC,EAAcF,EAAYC,WAAaD,EAAY/0H,UACzD,IAAKi1H,EAGH,OAFAtuQ,KAAKw2M,QAAQ,4BAA4B83D,6CACzCtuQ,KAAKk7H,QAAQ,SAIXozI,EAAYC,WAAW,SACzBvuQ,KAAKwuQ,uBAAuBF,EAAYz1P,UAAUy1P,EAAYx1Q,QAAQ,KAAO,KAI/EkH,KAAKytQ,iBAAiBP,UAAYtiI,GAAWrQ,EAAS+zI,GAEtDtuQ,KAAKutQ,eAAiBa,EAAYK,WAAaL,EAAYM,uBAE3D1uQ,KAAKs5I,iBAAmB80H,EAAY90H,iBACpCt5I,KAAK0tQ,gBAAkBU,EAAYO,eAI/B3uQ,KAAKutQ,iBAAmBvtQ,KAAKs5I,kBAC/Bt5I,KAAKk7H,QAAQ,oBAEjB,CAUA0zI,uBAAAA,CAAwBvrH,GACtB,MAAM6pH,EAAYltQ,KAAKytQ,iBAAiBP,UACxC,IAAKA,EACH,OAKF,MAAM7zQ,EAAMgqJ,EAAU6pH,EAAYltQ,KAAK6uQ,cAAc3B,GAErD,IAAK7zQ,EAIH,OAHA2G,KAAKw2M,QAAQ,uEACbx2M,KAAKk7H,QAAQ,cACbl7H,KAAKu7H,UAGP,MAAMxhI,EAAW,CACfqgJ,oBAAqB,CACnB/gJ,QAGJ2G,KAAKk7H,QAAQ,CACX7jI,KAAM,2BACN0C,aAEFiG,KAAK6tQ,SAAW7tQ,KAAKiuQ,KAAK,CACxB50Q,MACAK,YAAa,8BACZ,CAACuO,EAAO6mQ,KACT,GAAI7mQ,EAAO,CAKT,GAAyB,MAArB6mQ,EAAU5yQ,OAIZ,OAHA8D,KAAKw2M,QAAQ,wBAAwBvuM,MACrCjI,KAAKw2M,QAAQ,sDAAsDn9M,wBACnE2G,KAAKguQ,6BAA6BjtQ,IAAI1H,GAMxC,GAAyB,MAArBy1Q,EAAU5yQ,OAAgB,CAC5B,MAAM6yQ,EAAeD,EAAUjzD,gBAAgB,eAI/C,OAHA77M,KAAKw2M,QAAQ,wBAAwBvuM,MACrCjI,KAAKw2M,QAAQ,kCAAkCu4D,mBAC/C/uQ,KAAKgvQ,iBAAiB1uL,SAASyuL,EAAc,IAE/C,CAOA,OAFA/uQ,KAAKw2M,QAAQ,2BAA2BvuM,WACxCjI,KAAKgvQ,kBAEP,CAKA,IAAIC,EAJJjvQ,KAAKk7H,QAAQ,CACX7jI,KAAM,8BACN0C,aAGF,IACEk1Q,EAAuBj0Q,KAAKC,MAAM+E,KAAK6tQ,SAASrzQ,aAClD,CAAE,MAAO2mP,GACP,MAAMxsC,EAAgB,CACpBE,UAAWjJ,GAAQnyM,MAAM0zM,oCACzBllM,MAAOk5O,GAETnhP,KAAKk7H,QAAQ,CACX7jI,KAAM,QACN0C,SAAU46M,GAEd,CACA30M,KAAKkvQ,0BAA0BD,GAC/B,MAAME,EAAiB,CACrB/0H,oBAAqBrgJ,EAASqgJ,oBAC9Bg1H,wBAAyB,CACvBz5P,QAAS3V,KAAKytQ,iBAAiB93P,QAC/Bu3P,UAAWltQ,KAAKytQ,iBAAiBP,UACjCx0K,SAAU14F,KAAKytQ,iBAAiB/0K,WAGpC14F,KAAKk7H,QAAQ,CACX7jI,KAAM,wBACN0C,SAAUo1Q,IAEZnvQ,KAAKgvQ,kBAAkB,GAE3B,CAQAK,kBAAAA,CAAmBC,GACjB,MAAMC,EAAoB,IAAIxtH,IAAAA,KAAautH,GACrCE,EAAuB,IAAIztH,IAAAA,KAAa/hJ,KAAK0tQ,iBAEnD,OADA8B,EAAqBlwI,aAAa3+H,IAAI,MAAO8uQ,UAAUF,EAAkBlwQ,aAClEW,KAAK0vQ,mBAAmBF,EAAqBnwQ,WACtD,CAOAmvQ,sBAAAA,CAAuBmB,GACrB,MAAMV,EAAuBj0Q,KAAKC,MAAM8mJ,IAAAA,KAAc4tH,IACtD3vQ,KAAKkvQ,0BAA0BD,EACjC,CAUAS,kBAAAA,CAAmB71Q,GACjB,MAAM+1Q,EAAY,IAAI7tH,IAAAA,KAAaloJ,GAC7B0/H,EAAOv5H,KAAK6vQ,aACZC,EAAoB9vQ,KAAKkuQ,gBAC/B,GAAI30I,EAAM,CACR,MAAMw2I,EAAa,IAAI/vQ,KAAK2tQ,wBAC5BiC,EAAUtwI,aAAa3+H,IAAIovQ,EAAYx2I,EACzC,CACA,GAAIu2I,EAAmB,CACrB,MAAME,EAAgB,IAAIhwQ,KAAK2tQ,2BAC/BiC,EAAUtwI,aAAa3+H,IAAIqvQ,EAAeF,EAC5C,CACA,OAAOF,EAAUvwQ,UACnB,CAOA6vQ,yBAAAA,CAA0Be,GAExB,GADAjwQ,KAAKytQ,iBAAiB93P,QAAUs6P,EAAarlE,SACxC5qM,KAAKytQ,iBAAiB93P,QAGzB,OAFA3V,KAAKw2M,QAAQ,uBAAuBy5D,EAAarlE,yCACjD5qM,KAAKk7H,QAAQ,SAGfl7H,KAAKytQ,iBAAiBT,IAAMiD,EAAaC,IACzClwQ,KAAKytQ,iBAAiBP,UAAY+C,EAAa,cAE/CjwQ,KAAKytQ,iBAAiB/0K,SAAWu3K,EAAa,qBAAuBA,EAAa,6BAGlFjwQ,KAAKytQ,iBAAiBL,cAAgB6C,EAAa,kBACnDjwQ,KAAK+tQ,kBAAoB/tQ,KAAKytQ,iBAAiBL,cAS1CptQ,KAAKwtQ,mBAAmBpsQ,OAC3BpB,KAAKw2M,QAAQ,kFACbx2M,KAAKk7H,QAAQ,SACbl7H,KAAKu7H,WAEP,MASM40I,EAToBC,KACxB,IAAK,MAAM72I,KAAQ62I,EACjB,GAAIpwQ,KAAKwtQ,mBAAmB9sQ,IAAI64H,GAC9B,OAAOA,EAIX,MAAO,IAAIv5H,KAAKwtQ,oBAAoB,EAAE,EAEpB6C,CAAkBrwQ,KAAKytQ,iBAAiB/0K,UACxD14F,KAAKstQ,iBAAmB6C,IAC1BnwQ,KAAKstQ,eAAiB6C,EACtBnwQ,KAAKk7H,QAAQ,oBAEjB,CAOA20I,UAAAA,GACE,OAAO7vQ,KAAKstQ,gBAAkBttQ,KAAKutQ,cACrC,CAUAsB,aAAAA,CAAc3B,GACZ,IAAKA,EACH,OAAO,KAET,MAAM57D,EAAaj4M,GAAO2G,KAAKguQ,6BAA6BttQ,IAAIrH,GAChE,GAAI2G,KAAK0tQ,gBAAiB,CACxB,MAAM4C,EAAWtwQ,KAAKqvQ,mBAAmBnC,GACzC,IAAK57D,EAAWg/D,GACd,OAAOA,CAEX,CACA,MAAMC,EAAcvwQ,KAAK0vQ,mBAAmBxC,GAC5C,OAAK57D,EAAWi/D,GAIT,KAHEA,CAIX,CAQAvB,gBAAAA,GAEE,MAAMwB,EAAc,KAFFvmQ,UAAA5L,OAAA,QAAA/D,IAAA2P,UAAA,GAAAA,UAAA,GAAGjK,KAAKytQ,iBAAiBT,KAG3ChtQ,KAAK4tQ,YAAc7rH,IAAAA,YAAoB,KACrC/hJ,KAAK4uQ,yBAAyB,GAC7B4B,EACL,CAKAC,gBAAAA,GACE1uH,IAAAA,aAAsB/hJ,KAAK4tQ,aAC3B5tQ,KAAK4tQ,YAAc,IACrB,CAKAlwQ,KAAAA,GACMsC,KAAK6tQ,UACP7tQ,KAAK6tQ,SAASnwQ,QAEhBsC,KAAK6tQ,SAAW,IAClB,CAKAtyI,OAAAA,GACEv7H,KAAKi7H,IAAI,oBACTj7H,KAAKi7H,IAAI,SACTj7H,KAAKtC,QACLsC,KAAKywQ,mBACLzwQ,KAAKstQ,eAAiB,KACtBttQ,KAAKutQ,eAAiB,KACtBvtQ,KAAKs5I,iBAAmB,KACxBt5I,KAAK0tQ,gBAAkB,KACvB1tQ,KAAK2tQ,cAAgB,KACrB3tQ,KAAK4tQ,YAAc,KACnB5tQ,KAAK6tQ,SAAW,KAChB7tQ,KAAKguQ,6BAA+B,IAAIptQ,IACxCZ,KAAKwtQ,mBAAqB,IAAI5sQ,IAC9BZ,KAAKytQ,iBAAmB,IAAIb,EAC9B,CAOA8D,mBAAAA,CAAoB/2D,GACdA,GACF35M,KAAKwtQ,mBAAmBzsQ,IAAI44M,EAEhC,CAKAg3D,sBAAAA,GACE3wQ,KAAKwtQ,mBAAmBrsQ,OAC1B,CAKAyvQ,cAAAA,CAAej3D,GACb,OAAO35M,KAAKwtQ,mBAAmBvsQ,OAAO04M,EACxC,CASAk3D,gBAAAA,CAAiB53I,EAAS63I,GACxB,OAAQA,GAAU9wQ,KAAKytQ,iBAAiBP,WAAa4D,IAAWlmI,GAAW3R,EAAS63I,EAAOz3H,aAAer5I,KAAKytQ,iBAAiBP,WAAa4D,EAAOpC,yBAA2B1uQ,KAAKutQ,gBAAkBuD,EAAOx3H,mBAAqBt5I,KAAKs5I,kBAAoBw3H,EAAOnC,iBAAmB3uQ,KAAK0tQ,gBAC5R,CACAqD,oBAAAA,GACE,OAAO/wQ,KAAKwtQ,kBACd,EAGF,IAAIwD,GAGJ,MAAMC,GAAc,CAAC,gBAAiB,uBAAwB,wBAAyB,uBAAwB,wBAAyB,wBAAyB,gBAC3JC,GAAgB,SAAUC,GAC9B,OAAOnxQ,KAAKoxQ,oBAAoBD,GAAQnxQ,KAAKqxQ,mBAAmBF,EAClE,EAqFA,MAAMG,WAA2B1lE,GAAQe,YACvCrtM,WAAAA,CAAYhG,GACVyiI,QACA,MAAM,IACJhwH,EAAG,gBACHtO,EAAe,KACfy+J,EAAI,UACJ9rB,EAAS,UACTmhI,EAAS,WACTC,EAAU,0BACVpuD,EAAyB,yBACzBquD,EAAwB,WACxBjnB,EAAU,oBACVqD,EAAmB,eACnB6jB,EAAc,uBACd3rB,EAAsB,gBACtBp0G,GACEr4I,EACJ,IAAKyS,EACH,MAAM,IAAItS,MAAM,gEAElB,IAAI,mBACFk4Q,GACEr4Q,EACuB,OAAvBq4Q,GAA6D,qBAAvBA,IACxCA,EAAqB9uJ,KAEvBmuJ,GAAQO,EACRvxQ,KAAK0xQ,eAAiB9/H,QAAQ8/H,GAC9B1xQ,KAAK+lP,uBAAyBn0G,QAAQm0G,GACtC/lP,KAAKvC,gBAAkBA,EACvBuC,KAAK6iK,MAAQ3G,EACbl8J,KAAKy2M,KAAOv6C,EAAKqqC,IACjBvmM,KAAKuxJ,QAAUj4J,EAAQi4J,QACvBvxJ,KAAKgqP,YAAcQ,EACnBxqP,KAAK4xQ,YAAcJ,EACnBxxQ,KAAKojN,0BAA4BA,EACjCpjN,KAAK2xQ,mBAAqBA,EAC1B3xQ,KAAKyxQ,yBAA2BA,EAC5BzxQ,KAAK4xQ,cACP5xQ,KAAK6xQ,cAAgB7xQ,KAAK6iK,MAAM+G,aAAa,WAAY,WACzD5pK,KAAK6xQ,cAAc/pB,gCAAkC,IAEvD9nP,KAAK8xQ,gBAAkB,CACrBr0Q,kBACAk0Q,qBACA13Q,QAAS,MAEX+F,KAAKg7H,GAAG,QAASh7H,KAAK+xQ,cACtB/xQ,KAAKgyQ,YA/lBgBC,MACvB,MAAMtrI,EAAa,CAAC,EAepB,MAdA,CAAC,QAAS,YAAa,mBAAmBhuI,SAAQtB,IAChDsvI,EAAWtvI,GAAQ,CACjB8zQ,OAAQ,CAAC,EACThsG,OAAQ,CAAC,EACTorG,qBAAsB,KACtBK,YAAahrI,GACb+qI,YAAa/qI,GACbosI,eAAgBpsI,GAChBmsI,eAAgBnsI,GAChBkrI,eAAgBlrI,GAChBwsI,WAAY,KACZ51D,QAAS1H,GAAO,eAAez3M,MAChC,IAEIsvI,CAAU,EA+kBIsrI,GACnBjyQ,KAAKorP,YAAc,IAAIrpG,IAAAA,aACvB/hJ,KAAKkyQ,sBAAwBlyQ,KAAKkyQ,sBAAsBnzQ,KAAKiB,MAC7DA,KAAKmyQ,kBAAoBnyQ,KAAKmyQ,kBAAkBpzQ,KAAKiB,MACrDA,KAAKoyQ,mBAAqBpyQ,KAAKoyQ,mBAAmBrzQ,KAAKiB,MACvDA,KAAKorP,YAAYl4J,iBAAiB,iBAAkBlzF,KAAKkyQ,uBAEzDlyQ,KAAKorP,YAAYl4J,iBAAiB,aAAclzF,KAAKmyQ,mBACrDnyQ,KAAKorP,YAAYl4J,iBAAiB,cAAelzF,KAAKoyQ,oBAGtDpyQ,KAAK0rP,UAAY7wF,KACjB76J,KAAKwrP,YAAa,EAClBxrP,KAAKiuP,gBAAkB,IAAI+W,GAAe1rQ,GAC1C0G,KAAK+rP,sBAAwB7vF,EAAKM,mBAAmB,CACnD4D,KAAM,WACNtyB,MAAO,qBACN,GAAOr8C,MACVzxF,KAAK+tP,WAAa,IAAIub,GACtBtpQ,KAAKmsP,eAAiB,IAAIsR,GAAcz9P,KAAKorP,aAC7CprP,KAAKqsP,kBAAoB,CAAC,EAC1BrsP,KAAKwpP,0BAA4B,IAAI8c,GACrCtmQ,KAAKqyQ,cAAgB,IAAInyQ,IACzB,MAAMoyQ,EAAwB,CAC5B/rE,IAAKvmM,KAAKy2M,KACVkc,iBAAkBr5N,EAAQq5N,iBAC1B85B,yBAA0BnzP,EAAQmzP,yBAClC96G,kBACAy5G,YAAaprP,KAAKorP,YAClBnnF,YAAajkK,KAAK6iK,MAAMoB,YAAYllK,KAAKiB,KAAK6iK,OAC9C4K,SAAUA,IAAMztK,KAAKytK,WACrBwxB,QAASA,IAAMj/L,KAAK6iK,MAAMo8B,UAC1BliE,SAAUA,IAAM/8H,KAAK+8H,WACrB0uH,UAAWA,IAAMzrP,KAAKwrP,WACtBU,iBAAkBA,IAAMlsP,KAAKksP,mBAC7B97G,YACA89G,eAAgBluP,KAAKiuP,gBACrBD,UAAWhuP,KAAK+tP,WAChBvD,WAAYxqP,KAAKgqP,YACjBpD,iBAAkB5mP,KAAKqsP,kBACvBwB,sBACAzB,cAAepsP,KAAKmsP,eACpBrD,yBAA0B9oP,KAAKwpP,0BAC/Bl3C,qBAAsBh5M,EAAQg5M,qBAC9BgQ,uBAAwBtiN,KAAKsiN,uBAAuBvjN,KAAKiB,OAM3DA,KAAKoiN,oBAA2C,SAArBpiN,KAAKgqP,YAAyB,IAAI/nC,GAAmBl2M,EAAK/L,KAAKy2M,KAAMvsE,GAAMlqI,KAAK8xQ,gBAAiB,CAC1HxvD,uBAAwBtiN,KAAKsiN,uBAAuBvjN,KAAKiB,SACrD,IAAIu2M,GAAexqM,EAAK/L,KAAKy2M,KAAMvsE,GAAMlqI,KAAK8xQ,gBAAiB,CACnEn7D,yBAA0B32M,KAAK02M,0BAA0B33M,KAAKiB,SAEhEA,KAAKuyQ,oCAGLvyQ,KAAKqxQ,mBAAqB,IAAIlmB,GAAcjhH,GAAMooI,EAAuB,CACvEtmB,qBAAsBhsP,KAAK+rP,sBAC3BhD,WAAY,SACVzvP,GAEJ0G,KAAKoxQ,oBAAsB,IAAIjmB,GAAcjhH,GAAMooI,EAAuB,CACxEvpB,WAAY,UACVzvP,GACJ0G,KAAKwyQ,uBAAyB,IAAI3S,GAAiB31H,GAAMooI,EAAuB,CAC9EvpB,WAAY,MACZzhF,yBAA0BtnK,KAAK6iK,MAAMyE,yBACrC04F,UAAWA,IAAM,IAAI31J,SAAQ,CAACG,EAAS4/D,KACrC,SAASqoG,IACPv2G,EAAKjhC,IAAI,aAAc5nC,GACvBmX,GACF,CACA,SAASnX,IACP6oE,EAAKjhC,IAAI,cAAew3I,GACxBroG,GACF,CACAlO,EAAK/O,IAAI,cAAeslH,GACxBv2G,EAAK/O,IAAI,aAAc95D,GAEvB6oE,EAAKiN,kBAAkB,MAEvB7vK,GAIJ0G,KAAK0yQ,2BAA6B,IAAIrF,GAA0BrtQ,KAAKy2M,KAAKl8M,KAHrDo4Q,IACZ3yQ,KAAKqxQ,mBAAmBjhI,YAGjCpwI,KAAK4yQ,+BACD5yQ,KAAK0xQ,iBACP1xQ,KAAKoiN,oBAAoBj1D,IAAI,kBAAkB,IAAMntJ,KAAK6yQ,mBAC1D7yQ,KAAK6iK,MAAM7nC,GAAG,SAAS,IAAMh7H,KAAK8yQ,kBAClC9yQ,KAAK6iK,MAAM7nC,GAAG,QAAQ,IAAMh7H,KAAK6yQ,oBAUnC5B,GAAYt4Q,SAAQw4Q,IAClBnxQ,KAAKmxQ,EAAO,KAAOD,GAAcnyQ,KAAKiB,KAAMmxQ,EAAK,IAEnDnxQ,KAAKw2M,QAAU1H,GAAO,MACtB9uM,KAAK+yQ,oBAAqB,EACG,SAAzB/yQ,KAAK6iK,MAAMmzB,WACbh2L,KAAKgzQ,YAAc,KACjBhzQ,KAAKgzQ,YAAc,KACnBhzQ,KAAKoiN,oBAAoBv9C,MAAM,EAEjC7kK,KAAK6iK,MAAM1V,IAAI,OAAQntJ,KAAKgzQ,cAE5BhzQ,KAAKoiN,oBAAoBv9C,OAE3B7kK,KAAKizQ,oBAAsB,EAC3BjzQ,KAAKkzQ,2BAA6B,EAClClzQ,KAAKmzQ,4BAA8B,EACnC,MAAM5wK,EAAiC,SAAzBviG,KAAK6iK,MAAMmzB,UAAuB,OAAS,YAEzDh2L,KAAK6iK,MAAM1V,IAAI5qD,GAAO,KACpB,MAAM6wK,EAAwBx3K,KAAKC,MACnC77F,KAAK6iK,MAAM1V,IAAI,cAAc,KAC3BntJ,KAAKizQ,mBAAqBr3K,KAAKC,MAAQu3K,EACvCpzQ,KAAKkzQ,0BAA4BlzQ,KAAKqxQ,mBAAmB7hB,aACzDxvP,KAAKmzQ,2BAA6BnzQ,KAAKoxQ,oBAAoB5hB,YAAY,GACvE,GAEN,CACA6jB,wBAAAA,GACE,OAAOrzQ,KAAKkzQ,yBACd,CACAI,yBAAAA,GACE,OAAOtzQ,KAAKmzQ,0BACd,CACAI,oBAAAA,GACE,MAAMxyG,EAAO/gK,KAAKqzQ,2BACZ9sI,EAAQvmI,KAAKszQ,4BACnB,OAAc,IAAVvyG,IAA0B,IAAXx6B,GACT,EAEHw6B,EAAOx6B,CAChB,CACAitI,iBAAAA,GACE,OAAOxzQ,KAAKizQ,kBACd,CAQAQ,SAAAA,GAA0B,IAAhBj6G,EAAMvvJ,UAAA5L,OAAA,QAAA/D,IAAA2P,UAAA,GAAAA,UAAA,GAAG,MACjB,MAAMypQ,EAAe1zQ,KAAKusQ,iBACtBmH,GAAgB1zQ,KAAK2zQ,qBAAqBD,IAC5C1zQ,KAAK4zQ,aAAaF,EAAcl6G,EAEpC,CACAo6G,YAAAA,CAAa/xI,EAAUjrI,EAAO6hI,GAC5B,MAAMi9E,EAAW11M,KAAKgiI,QAChB+uH,EAAQr7C,IAAaA,EAASh/L,IAAMg/L,EAASr8M,KAC7Cw6Q,EAAQhyI,IAAaA,EAASnrH,IAAMmrH,EAASxoI,KACnD,GAAI03P,GAASA,IAAU8iB,EAAO,CAC5B7zQ,KAAKw2M,QAAQ,gBAAgBu6C,QAAY8iB,UAAcj9Q,KACvD,MAAMmD,EAAW,CACf+5Q,cAAe,CACbp9P,GAAIm9P,EACJzjI,UAAWvO,EAAS1tH,WAAWopH,UAC/BlB,WAAYwF,EAAS1tH,WAAWmpH,WAChC8J,OAAQvF,EAAS1tH,WAAWg8H,QAE9Bv5I,SAEFoJ,KAAKk7H,QAAQ,CACX7jI,KAAM,oBACN0C,aAEFiG,KAAK6iK,MAAM3nC,QAAQ,CACjB7jI,KAAM,QACNkI,KAAM,wBAAwB3I,KAElC,CACAoJ,KAAKoiN,oBAAoBpgF,MAAMH,EAAUpJ,EAC3C,CAWAs7I,kCAAAA,GACE,CAAC,QAAS,YAAa,mBAAmBp7Q,SAAQtB,IAChD,MAAMkwI,EAAYvnI,KAAKgyQ,YAAY36Q,GAC7BuzQ,EAAcrjI,EAAYA,EAAUqjI,cAAgB,KACpDjxD,EAAU35M,KAAK0yQ,2BAA2B7C,aAChD,GAAIjF,GAAejxD,EAAS,CAE1B,MACMq6D,GADiBpJ,EAAYvsQ,OAASusQ,EAAY,GAAG9oI,UAAY8oI,EAAY9oI,WACzCn2H,QAAOM,GAAKA,EAAEkI,WAAWm8H,kBAAoBqpE,IAEnFq6D,EAAmB31Q,QACrB2B,KAAKgyQ,YAAY36Q,GAAMkzQ,qBAAqBvoI,MAAMgyI,EAAmB,GAEzE,IAEJ,CAOAnB,cAAAA,GACE7yQ,KAAK8yQ,gBACL9yQ,KAAKi0Q,UAAYlyH,IAAAA,aAAqB,IAAM/hJ,KAAKyzQ,aAAa,IAChE,CAOAX,aAAAA,GAGM9yQ,KAAK6iK,MAAMkG,WAAa/oK,KAAK6iK,MAAMkG,cAGvChnB,IAAAA,cAAuB/hJ,KAAKi0Q,WAC5Bj0Q,KAAKi0Q,UAAY,KACnB,CAOAjvB,uBAAAA,GACE,MAAMjkF,EAAO/gK,KAAK+gK,OACZmzG,EAAmBnzG,GAAQA,EAAKj/B,WAAa,GAInD,IAAKi/B,IAASA,EAAKh/B,cAAgBg/B,EAAKh/B,YAAYkO,MAClD,OAAOikI,EAET,MAAMjkI,EAAQ8wB,EAAKh/B,YAAYkO,MACzB47H,EAAY1sQ,OAAO0M,KAAKokI,GAC9B,IAAIx+C,EAEJ,GAAItyF,OAAO0M,KAAK7L,KAAKgyQ,YAAY/hI,MAAMk7H,QAAQ9sQ,OAC7CozF,EAAQzxF,KAAKgyQ,YAAY/hI,MAAM06H,kBAC1B,CAEL,MAAMwJ,EAAelkI,EAAM8wB,MAAQ8qG,EAAUxtQ,QAAU4xI,EAAM47H,EAAU,IACvE,IAAK,MAAM/9H,KAASqmI,EAClB,GAAIA,EAAarmI,GAAOvjB,QAAS,CAC/B94B,EAAQ,CACNq8C,SAEF,KACF,CAEJ,CAEA,IAAKr8C,EACH,OAAOyiL,EAET,MAAMpyI,EAAY,GAGlB,IAAK,MAAM+L,KAASoC,EAClB,GAAIA,EAAMpC,GAAOp8C,EAAMq8C,OAAQ,CAC7B,MAAMF,EAAaqC,EAAMpC,GAAOp8C,EAAMq8C,OACtC,GAAIF,EAAW9L,WAAa8L,EAAW9L,UAAUzjI,OAC/CyjI,EAAU3oI,KAAKrB,MAAMgqI,EAAW8L,EAAW9L,gBACtC,GAAI8L,EAAWv0I,IACpByoI,EAAU3oI,KAAKy0I,QACV,GAAImzB,EAAKj/B,UAAUzjI,OAIxB,IAAK,IAAIN,EAAI,EAAGA,EAAIgjK,EAAKj/B,UAAUzjI,OAAQN,IAAK,CAC9C,MAAM8jI,EAAWk/B,EAAKj/B,UAAU/jI,GAC5B8jI,EAAS1tH,YAAc0tH,EAAS1tH,WAAW87H,OAASpO,EAAS1tH,WAAW87H,QAAUpC,GACpF/L,EAAU3oI,KAAK0oI,EAEnB,CAEJ,CAEF,OAAKC,EAAUzjI,OAGRyjI,EAFEoyI,CAGX,CAQA3B,iCAAAA,GACEvyQ,KAAKoiN,oBAAoBpnF,GAAG,kBAAkB,KAC5C,MAAMgH,EAAQhiI,KAAKoiN,oBAAoBpgF,QACjCoyI,EAAwC,IAAvBpyI,EAAMnD,eAAuB,IAGhD8yE,GAAyB3xM,KAAKoiN,oBAAoBrhD,KAAM/gK,KAAKoiN,oBAAoBpgF,SACnFhiI,KAAK8xQ,gBAAgB73Q,QAAU,EAE/B+F,KAAK8xQ,gBAAgB73Q,QAAUm6Q,EAI7BpyI,EAAMhB,SAAoC,SAAzBhhI,KAAK6iK,MAAMmzB,YAC9Bh2L,KAAKqxQ,mBAAmBxvI,SAASG,EAAOhiI,KAAK8xQ,iBAC7C9xQ,KAAKqxQ,mBAAmBxsG,QAE1B4mG,GAAiB,CACfjhB,WAAYxqP,KAAKgqP,YACjBihB,eAAgB,CACdh7H,MAAOjwI,KAAKoxQ,oBACZlhI,UAAWlwI,KAAKwyQ,uBAChBzxG,KAAM/gK,KAAKqxQ,oBAEbn1G,KAAMl8J,KAAK6iK,MACXmoG,eAAgBhrQ,KAAK8xQ,gBACrB3vD,mBAAoBniN,KAAKoiN,oBACzB7b,IAAKvmM,KAAKy2M,KACV11C,KAAM/gK,KAAK+gK,OACXp6B,WAAY3mI,KAAKgyQ,YACjBtH,gBAAiB1qQ,KAAK0qQ,gBAAgB3rQ,KAAKiB,QAE7CA,KAAKq0Q,sBAAsBr0Q,KAAK+gK,OAAQ/+B,GACxChiI,KAAKs0Q,kBACAt0Q,KAAKgyQ,YAAY/hI,MAAMs6H,sBAAwBvqQ,KAAKgyQ,YAAY/hI,MAAMs6H,qBAAqBvoI,QAC9FhiI,KAAKk7H,QAAQ,wBAKbl7H,KAAKgyQ,YAAY/hI,MAAMs6H,qBAAqBp9G,IAAI,kBAAkB,KAChEntJ,KAAKk7H,QAAQ,uBAAuB,GAExC,IAEFl7H,KAAKoiN,oBAAoBpnF,GAAG,kBAAkB,KACxCh7H,KAAKgzQ,aACPhzQ,KAAK6iK,MAAM5nC,IAAI,OAAQj7H,KAAKgzQ,aAE9B,IAAI74D,EAAkBn6M,KAAKoiN,oBAAoBpgF,QAC/C,IAAKm4E,EAAiB,CAOpB,IAAIo6D,EAOJ,GAZAv0Q,KAAKw0Q,kCACLx0Q,KAAKy0Q,iCAGLz0Q,KAAK00Q,8BAED10Q,KAAKyxQ,2BACP8C,EAAgBv0Q,KAAK20Q,yBAElBJ,IACHA,EAAgBv0Q,KAAKusQ,mBAElBgI,IAAkBv0Q,KAAK2zQ,qBAAqBY,GAC/C,OAEFv0Q,KAAK40Q,cAAgBL,EACrBv0Q,KAAK4zQ,aAAa5zQ,KAAK40Q,cAAe,WAQtC,KAD4C,aAArB50Q,KAAKgqP,aAA8BhqP,KAAK40Q,cAAcz0I,UAE3E,OAEFg6E,EAAkBn6M,KAAK40Q,aACzB,CACA50Q,KAAK60Q,2BAA2B16D,EAAgB,IAElDn6M,KAAKoiN,oBAAoBpnF,GAAG,SAAS,KACnC,MAAM/yH,EAAQjI,KAAKoiN,oBAAoBn6M,MACvCjI,KAAK0qQ,gBAAgB,CACnBoK,kBAAmB7sQ,EAAM45H,SACzB55H,SACA,IAEJjI,KAAKoiN,oBAAoBpnF,GAAG,iBAAiB,KAC3Ch7H,KAAKqxQ,mBAAmB3zQ,QACxBsC,KAAKqxQ,mBAAmBzzG,OAAO,IAEjC59J,KAAKoiN,oBAAoBpnF,GAAG,eAAe,KACzC,MAAMgH,EAAQhiI,KAAKoiN,oBAAoBpgF,QACjCoyI,EAAwC,IAAvBpyI,EAAMnD,eAAuB,IAGhD8yE,GAAyB3xM,KAAKoiN,oBAAoBrhD,KAAM/gK,KAAKoiN,oBAAoBpgF,SACnFhiI,KAAK8xQ,gBAAgB73Q,QAAU,EAE/B+F,KAAK8xQ,gBAAgB73Q,QAAUm6Q,EAER,SAArBp0Q,KAAKgqP,aAEPhqP,KAAKoiN,oBAAoBv9C,OAM3B7kK,KAAKqxQ,mBAAmBzzG,QACxB59J,KAAKqxQ,mBAAmBxvI,SAASG,EAAOhiI,KAAK8xQ,iBACzC9xQ,KAAK+0Q,uCACP/0Q,KAAKg1Q,wBAELh1Q,KAAKqxQ,mBAAmBxsG,OAE1B7kK,KAAK6iK,MAAM3nC,QAAQ,CACjB7jI,KAAM,cACNokG,SAAS,GACT,IAEJz7F,KAAKoiN,oBAAoBpnF,GAAG,qBAAqB,KAC/C,MAAMm/E,EAAkBn6M,KAAKoiN,oBAAoBpgF,QAIjD,GAA2C,uBAAvCm4E,EAAgB86D,mBAClB,OAEuBj1Q,KAAKk1Q,oBAAoB/6D,KAMhDn6M,KAAK0qQ,gBAAgB,CACnBziQ,MAAO,CACLoG,QAAS,+BACTmrJ,OAAQ,wBAIZx5J,KAAK6iK,MAAM3nC,QAAQ,iBACrB,IAEFl7H,KAAKoiN,oBAAoBpnF,GAAG,qBAAqB,KAC/Ch7H,KAAK6iK,MAAM3nC,QAAQ,CACjB7jI,KAAM,QACNkI,KAAM,0BACN,IAEJS,KAAKoiN,oBAAoBpnF,GAAG,oBAAoB,KAC9Ch7H,KAAK6iK,MAAM3nC,QAAQ,CACjB7jI,KAAM,QACNkI,KAAM,yBACN,IAEyB,CAAC,uBAAwB,0BAA2B,qBAAsB,wBAAyB,uBAAwB,0BAA2B,qBAAsB,wBAAyB,oBAAqB,oBAClO5G,SAAQy8L,IAC3Bp1L,KAAKoiN,oBAAoBpnF,GAAGo6D,GAAWr7L,IAErCiG,KAAKuxJ,QAAQr2B,QAAQljI,EAAS,CAAC,EAAG+B,GAAU,GAC5C,GAEN,CAWA86Q,0BAAAA,CAA2B16D,GACrBn6M,KAAK4xQ,aACP5xQ,KAAKm1Q,cAAch7D,GAMrBn6M,KAAKqxQ,mBAAmBzzG,QACxB59J,KAAKqxQ,mBAAmBxvI,SAASs4E,EAAiBn6M,KAAK8xQ,iBACnD9xQ,KAAK+0Q,wCACP/0Q,KAAKg1Q,wBAEPh1Q,KAAKo1Q,gBAAgBj7D,EAAgBn5E,SAIhChhI,KAAK6iK,MAAMnF,WACd19J,KAAKqxQ,mBAAmBxsG,OACpB7kK,KAAKoxQ,qBACPpxQ,KAAKoxQ,oBAAoBvsG,OAG/B,CAOAwvG,qBAAAA,CAAsBtzG,EAAM/+B,GAC1B,MAAMD,EAAcg/B,EAAKh/B,aAAe,CAAC,EACzC,IAAIszI,GAAiB,EACrB,MAAMC,EAAiBn2Q,OAAO0M,KAAKk2H,EAAYkO,OAC/C,IAAK,MAAMtP,KAAcoB,EAAYkO,MACnC,IAAK,MAAMnC,KAAS/L,EAAYkO,MAAMtP,GAAa,CAC9BoB,EAAYkO,MAAMtP,GAAYmN,GACjCz0I,MACdg8Q,GAAiB,EAErB,CAEEA,GACFr1Q,KAAK6iK,MAAM3nC,QAAQ,CACjB7jI,KAAM,QACNkI,KAAM,gBAGNJ,OAAO0M,KAAKk2H,EAAYmO,WAAW7xI,QACrC2B,KAAK6iK,MAAM3nC,QAAQ,CACjB7jI,KAAM,QACNkI,KAAM,eAGNyxQ,GAAM9+D,SAASQ,MAAM1wE,IACvBhiI,KAAK6iK,MAAM3nC,QAAQ,CACjB7jI,KAAM,QACNkI,KAAM,YAGN+1Q,EAAej3Q,QAAUc,OAAO0M,KAAKk2H,EAAYkO,MAAMqlI,EAAe,KAAKj3Q,OAAS,GACtF2B,KAAK6iK,MAAM3nC,QAAQ,CACjB7jI,KAAM,QACNkI,KAAM,wBAGNS,KAAK4xQ,aACP5xQ,KAAK6iK,MAAM3nC,QAAQ,CACjB7jI,KAAM,QACNkI,KAAM,yBAGZ,CACAo0Q,oBAAAA,CAAqBD,GACnB,MAAM6B,EAAkBv1Q,KAAKoiN,oBAAoBpgF,SAAWhiI,KAAKoiN,oBAAoB1J,cAC/Ez0C,EAAcjkK,KAAK6iK,MAAMoB,cACzBuxG,EAAqBx1Q,KAAKw1Q,qBAC1BC,EAAsBz1Q,KAAKy1Q,sBAEjC,OA3rBwB,SAAAC,GAUzB,IAVmC,gBACpCH,EAAe,SACfv6G,EAAQ,YACRiJ,EAAW,aACXyvG,EAAY,mBACZ8B,EAAkB,oBAClBC,EAAmB,SACnB14I,EAAQ,eACR20I,EAAc,IACd17K,GACD0/K,EAEC,IAAKhC,EAEH,OADA9nE,GAAQ51G,IAAI3qF,KAAK,oEACV,EAET,MAAMsqQ,EAAgB,mBAAmBJ,GAAmBA,EAAgB7+P,IAAM,aAAag9P,EAAah9P,KAC5G,IAAK6+P,EAEH,OADAv/K,EAAI,GAAG2/K,qCACA,EAGT,GAAIjC,EAAah9P,KAAO6+P,EAAgB7+P,GACtC,OAAO,EAGT,MAAMk/P,EAAahkI,QAAQ29D,GAAUv0C,EAAUiJ,GAAa5lK,QAK5D,IAAKk3Q,EAAgBv0I,QAGnB,OAAK40I,GAA4D,kBAAvCL,EAAgBz2I,oBAI1C9oC,EAAI,GAAG2/K,kCACA,IAJL3/K,EAAI,OAAO2/K,4EACJ,GAKX,MAAME,EAAgB/lE,GAAY90C,EAAUiJ,GACtC6xG,EAAwBpE,EAAiBjsD,GAAOS,uCAAyCT,GAAOQ,0BAGtG,GAAIlpF,EAAW+4I,EAEb,OADA9/K,EAAI,GAAG2/K,uCAAmD54I,OAAc+4I,OACjE,EAET,MAAMC,EAAgBrC,EAAav/P,WAAWopH,UACxCy4I,EAAgBT,EAAgBphQ,WAAWopH,UAGjD,GAAIw4I,EAAgBC,KAAmBtE,GAAkBmE,EAAgBJ,GAAsB,CAC7F,IAAIQ,EAAU,GAAGN,4CAAwDI,OAAmBC,KAK5F,OAJItE,IACFuE,GAAW,6CAA6CJ,OAAmBJ,MAE7Ez/K,EAAIigL,IACG,CACT,CAGA,KAAMvE,GAAkBqE,EAAgBC,IAAkBH,GAAiBL,EAAoB,CAC7F,IAAIS,EAAU,GAAGN,6CAAyDE,QAAoBL,KAK9F,OAJI9D,IACFuE,GAAW,4CAA4CF,OAAmBC,MAE5EhgL,EAAIigL,IACG,CACT,CAEA,OADAjgL,EAAI,OAAO2/K,mCACJ,CACT,CAknBWO,CAAoB,CACzBl7G,SAFeh7J,KAAK6iK,MAAM7H,WAG1BiJ,cACAsxG,kBACA7B,eACA8B,qBACAC,sBACA14I,SAAU/8H,KAAK+8H,WACf20I,eAAgB1xQ,KAAK0xQ,eACrB17K,IAAKh2F,KAAKw2M,SAEd,CAQAo8D,4BAAAA,GACE5yQ,KAAKqxQ,mBAAmBr2I,GAAG,mBAAmB,KAG5Ch7H,KAAKyzQ,UAAU,mBACfzzQ,KAAK6iK,MAAM3nC,QAAQ,kBAAkB,IAEvCl7H,KAAKqxQ,mBAAmBr2I,GAAG,WAAW,KAChCh7H,KAAK0xQ,gBAKP1xQ,KAAKqxQ,mBAAmBxsG,MAC1B,IAIG7kK,KAAK0xQ,gBACR1xQ,KAAKqxQ,mBAAmBr2I,GAAG,YAAY,KACrCh7H,KAAKk7H,QAAQ,WAAW,IAG5Bl7H,KAAKqxQ,mBAAmBr2I,GAAG,SAAS,KAClC,MAAM/yH,EAAQjI,KAAKqxQ,mBAAmBppQ,QACtCjI,KAAK0qQ,gBAAgB,CACnBoK,kBAAmB7sQ,EAAM45H,SACzB55H,SACA,IAEJjI,KAAKqxQ,mBAAmBr2I,GAAG,eAAe,KACxCh7H,KAAKiI,MAAQjI,KAAKqxQ,mBAAmB1oG,OACrC3oK,KAAKk7H,QAAQ,QAAQ,IAEvBl7H,KAAKqxQ,mBAAmBr2I,GAAG,kBAAkB,KAC3Ch7H,KAAKm2Q,mBAAmB,IAE1Bn2Q,KAAKqxQ,mBAAmBr2I,GAAG,mBAAmB,KAC5Ch7H,KAAK6iK,MAAM3nC,QAAQ,CACjB7jI,KAAM,QACNkI,KAAM,wBACN,IAEJS,KAAKoxQ,oBAAoBp2I,GAAG,kBAAkB,KAC5Ch7H,KAAKm2Q,mBAAmB,IAE1Bn2Q,KAAKoxQ,oBAAoBp2I,GAAG,eAAe,KACzCh7H,KAAKiI,MAAQjI,KAAKoxQ,oBAAoBzoG,OACtC3oK,KAAKk7H,QAAQ,QAAQ,IAEvBl7H,KAAKqxQ,mBAAmBr2I,GAAG,SAAS,KAClCh7H,KAAKw2M,QAAQ,6BACbx2M,KAAKo2Q,eAAe,IAOG,SAArBp2Q,KAAKgqP,aACPhqP,KAAKwpP,0BAA0BxuH,GAAG,uBAAuB,KACvD,MAAMma,EAAcn1I,KAAKoxQ,oBAAoB7nB,gBAC7C,IAAKp0G,IAAgBA,EAAY9W,UAAY8W,EAAY9W,QAAQwyH,SAC/D,OAKF,MAAM1wE,EAAUhrC,EAAY9W,QAAQwyH,SAASnxK,IAAM,IACnD1/E,KAAK6iK,MAAMmG,eAAemX,EAAQ,IAGtCngL,KAAKqxQ,mBAAmBr2I,GAAG,cAAcz4B,IAEnCviG,KAAK0xQ,iBAGT1xQ,KAAKq2Q,iBAAiB,MAAO,CAAC,UAC9Br2Q,KAAK0qQ,gBAAgB,CACnBziQ,MAAO,CACLoG,QAAS,mGAEX+0M,0BAxyB8B,KAyyB9B,IAEJ,MAAMkzD,EAAeA,KACnB,IAAKt2Q,KAAKmsP,eAAesS,0BACvB,OAAOz+P,KAAKu2Q,4BAEd,MAAMnvI,EAASpnI,KAAKw2Q,sBAEfpvI,GAGLpnI,KAAKmsP,eAAeyS,yBAAyBx3H,EAAO,EAEtDpnI,KAAKqxQ,mBAAmBr2I,GAAG,YAAas7I,GACxCt2Q,KAAKoxQ,oBAAoBp2I,GAAG,YAAas7I,GACzCt2Q,KAAKqxQ,mBAAmBr2I,GAAG,QAAQ,KAC5Bh7H,KAAK+yQ,qBACR/yQ,KAAK6iK,MAAM3nC,QAAQ,CACjB7jI,KAAM,QACNkI,KAAM,aAERS,KAAK+yQ,oBAAqB,EAC5B,IAEF/yQ,KAAKoxQ,oBAAoBp2I,GAAG,QAAQ,KAC7Bh7H,KAAK+yQ,qBACR/yQ,KAAK6iK,MAAM3nC,QAAQ,CACjB7jI,KAAM,QACNkI,KAAM,aAERS,KAAK+yQ,oBAAqB,EAC5B,IAEF/yQ,KAAKoxQ,oBAAoBp2I,GAAG,SAAS,KACnCh7H,KAAKw2M,QAAQ,4BACbx2M,KAAKo2Q,eAAe,IAEM,CAAC,kBAAmB,mBAAoB,gBAAiB,sBAAuB,yBAA0B,yBAA0B,4BAA6B,0BAA2B,6BAA8B,uCAAwC,wCAAyC,qBAAsB,cAAe,mBAAoB,iBAAkB,gBAC9Xz9Q,SAAQy8L,IAC1Bp1L,KAAKqxQ,mBAAmBr2I,GAAGo6D,GAAWr7L,IACpCiG,KAAKuxJ,QAAQr2B,QAAQljI,EAAS,CAAC,EAAG+B,GAAU,IAE9CiG,KAAKoxQ,oBAAoBp2I,GAAGo6D,GAAWr7L,IACrCiG,KAAKuxJ,QAAQr2B,QAAQljI,EAAS,CAAC,EAAG+B,GAAU,IAE9CiG,KAAKwyQ,uBAAuBx3I,GAAGo6D,GAAWr7L,IACxCiG,KAAKuxJ,QAAQr2B,QAAQljI,EAAS,CAAC,EAAG+B,GAAU,GAC5C,GAEN,CACA08Q,mBAAAA,GACE,OAAOnzQ,KAAK69E,IAAInhF,KAAKoxQ,oBAAoB7hB,mBAAqBvvP,KAAKqxQ,mBAAmB9hB,mBACxF,CAKA1qF,IAAAA,GACE7kK,KAAKqxQ,mBAAmBxsG,OACpB7kK,KAAKgyQ,YAAY/hI,MAAMs6H,sBACzBvqQ,KAAKoxQ,oBAAoBvsG,OAEvB7kK,KAAKgyQ,YAAY9hI,UAAUq6H,sBAC7BvqQ,KAAKwyQ,uBAAuB3tG,MAEhC,CAUA2nG,kBAAAA,GAAkD,IAA/BxqI,EAAK/3H,UAAA5L,OAAA,QAAA/D,IAAA2P,UAAA,GAAAA,UAAA,GAAGjK,KAAKusQ,iBAC1BvqI,GAASA,IAAUhiI,KAAKoiN,oBAAoBpgF,QAC9ChiI,KAAKw2M,QAAQ,gEAGfx2M,KAAK4zQ,aAAa5xI,EAAO,gBAGzBhiI,KAAK+0Q,wCAAyC,EAChD,CACAC,qBAAAA,GACEh1Q,KAAK+0Q,wCAAyC,EAE9C/0Q,KAAKqxQ,mBAAmBzzG,QACxB59J,KAAKqxQ,mBAAmBnnB,iBAAgB,KACtClqP,KAAKqxQ,mBAAmBxsG,MAAM,GAElC,CAKAvT,IAAAA,GACE,GAAItxJ,KAAKs0Q,iBACP,OAEEt0Q,KAAK6iK,MAAM8K,SACb3tK,KAAK6iK,MAAMmG,eAAe,GAExBhpK,KAAKwrP,YACPxrP,KAAK6kK,OAEP,MAAM4I,EAAWztK,KAAK6iK,MAAM4K,WAG5B,OAAIztK,KAAK6iK,MAAM9lC,aAAela,KACxB7iH,KAAK6iK,MAAMoB,cAAgBwJ,EAASpnK,MAAM,GACrCrG,KAAK6iK,MAAMmG,eAAeyE,EAAS/tF,IAAI+tF,EAASpvK,OAAS,SAFpE,CAKF,CAMAi2Q,cAAAA,GACE,MAAMtyI,EAAQhiI,KAAKoiN,oBAAoBpgF,QAMvC,IAAKA,GAAShiI,KAAK6iK,MAAMnF,UAAY19J,KAAKwrP,WACxC,OAAO,EAGT,IAAKxpH,EAAMhB,SAAWgB,EAAM37H,MAAO,CACjC,MAAMonK,EAAWztK,KAAKytK,WACtB,IAAKA,EAASpvK,OAGZ,OAAO,EAET,MAAM8/K,EAAc1Q,EAAS/tF,IAAI,GACjC,IAAIg3L,EAAav4F,EACjB,GAAIn8C,EAAM37H,MAAO,CACf,MAAMsS,EAASqpH,EAAM37H,MAAM88H,WAEzBuzI,EADE/9P,EAAS,EACErV,KAAK69E,IAAIg9F,EAAcxlK,EAAQ80J,EAASpnK,MAAM,IAE9C/C,KAAKyhG,IAAIo5E,EAAaxlK,EAEvC,CAEA3Y,KAAKk7H,QAAQ,aAEbl7H,KAAK6iK,MAAMmG,eAAe0tG,EAC5B,CAIA,OAHA12Q,KAAKwrP,YAAa,EAElBxrP,KAAK6kK,QACE,CACT,CAOAstG,iBAAAA,GAQE,GAJAnyQ,KAAKu2Q,4BAIDv2Q,KAAK6iK,MAAMq5B,WAAY,CACzB,MAAM7hB,EAAcr6K,KAAK6iK,MAAMvR,OAGJ,qBAAhB+oB,GAA2D,oBAArBA,EAAY5vE,MAC3D4vE,EAAY5vE,KAAK,MAAM9yG,OAE3B,CACAqI,KAAKk7H,QAAQ,aACf,CAOAk3I,kBAAAA,GACE,IAAKpyQ,KAAKqsP,kBAAkBrF,eAC1B,OAEF,MAAMlrF,EAAO97J,KAAKqsP,kBAAkBrF,eAAelrF,KACnD,IAAKA,IAASA,EAAKz9J,OACjB,OAEF,MAAM0+H,EAAW/8H,KAAK+8H,WACtB++B,EAAKA,EAAKz9J,OAAS,GAAG29J,QAAU7zE,MAAM40C,IAAaz5H,KAAK0lI,IAAIjM,KAAcla,IAAWr+B,OAAOqtH,UAAY90E,CAC1G,CAOAm1I,qBAAAA,GACElyQ,KAAK6iK,MAAM3nC,QAAQ,iBACrB,CAUAk7I,aAAAA,GACE,IAAI9c,EAAgBt5P,KAAKqxQ,mBAAmB7iB,OAC5C,GAAIxuP,KAAKgyQ,YAAY/hI,MAAMs6H,qBAAsB,CAC/C,MAAMoM,EAAgB32Q,KAAKqxQ,mBAAmBxa,uBAM5CyC,GAJGqd,GAAiBA,EAActoC,SAIlBirB,GAAiBt5P,KAAKoxQ,oBAAoB5iB,OAG1CxuP,KAAKoxQ,oBAAoB5iB,MAE7C,CACK8K,IAGLt5P,KAAK8yQ,gBACL9yQ,KAAKmsP,eAAe6D,cACtB,CAQAklB,mBAAAA,CAAoBrzI,GAElB,IADiB7hI,KAAKytK,WACRpvK,OAEZ,OAAO,EAET,MAAMqyM,EAAU1wM,KAAKiuP,gBAAgBuX,eAAe3jI,EAAU7hI,KAAK+8H,YACnE,GAAgB,OAAZ2zE,EACF,OAAO,EAIT,MAAMkmE,EAAsB5F,GAAM9+D,SAAShB,YAAYrvE,EAAU6uE,GAC3DzsC,EAAcjkK,KAAK6iK,MAAMoB,cACzBjJ,EAAWh7J,KAAK6iK,MAAM7H,WAC5B,IAAKA,EAAS38J,OAEZ,OAAOu4Q,EAAsB3yG,GAAemrC,GAE9C,MAAMhxB,EAAcpjB,EAASt7E,IAAIs7E,EAAS38J,OAAS,GAGnD,OAAO+/K,EAAcna,GAAemrC,IAAmBwnE,EAAsBx4F,GAAegxB,EAC9F,CAaAs7D,eAAAA,CAAemM,GAIZ,IAJa,kBACd/B,EAAoB90Q,KAAKoiN,oBAAoBpgF,QAAO,MACpD/5H,EAAQ,CAAC,EAAC,0BACVm7M,GACDyzD,EASC,GAJA/B,EAAoBA,GAAqB90Q,KAAKoiN,oBAAoBpgF,QAClEohF,EAA4BA,GAA6Bn7M,EAAMm7M,2BAA6BpjN,KAAKojN,2BAG5F0xD,EAOH,OANA90Q,KAAKiI,MAAQA,OACuB,SAAhCjI,KAAKorP,YAAYpuP,WACnBgD,KAAKk7H,QAAQ,SAEbl7H,KAAKmsP,eAAe6D,YAAY,YAIpC8kB,EAAkB7hE,kBAClB,MAAMnxE,EAAY9hI,KAAKoiN,oBAAoBrhD,KAAKj/B,UAC1C0yH,EAAmB1yH,EAAUn2H,OAAO8lM,IACpCiS,EAA+C,IAA5B8wC,EAAiBn2P,QAAgBm2P,EAAiB,KAAOsgB,EAGlF,GAAyB,IAArBhzI,EAAUzjI,QAAgB+kN,IAA8BvgG,IAI1D,OAHA+oF,GAAQ51G,IAAI3qF,KAAK,qCAAqCypQ,EAAkBp+P,mDACxE1W,KAAK6iK,MAAM3nC,QAAQ,iBAEZl7H,KAAKoiN,oBAAoBv9C,KAAK6+C,GAEvC,GAAIA,EAAkB,CAEpB,GAAI1jN,KAAK+gK,OAAO37B,gBAAiB,CAC/B,MAAMu0E,EAAU35M,KAAK82Q,kBAAkBhC,GAEjCiC,EAAwE,IAAvD/2Q,KAAK0yQ,2BAA2BjF,iBAAiBT,IAMxE,OALAhtQ,KAAK0yQ,2BAA2B9B,eAAej3D,GAC/C35M,KAAKg3Q,iCACLl7Q,YAAW,KACTkE,KAAK0yQ,2BAA2BhC,oBAAoB/2D,EAAQ,GAC3Do9D,EAEL,CAKA,IAAIE,GAAa,EACjBn1I,EAAUnpI,SAAQkpI,IAEhB,GAAIA,IAAaizI,EACf,OAEF,MAAMvjE,EAAe1vE,EAAS0vE,aAEF,qBAAjBA,GAAgCA,IAAiB1uF,MAC1Do0J,GAAa,SACNp1I,EAAS0vE,aAClB,IAEE0lE,IACFrrE,GAAQ51G,IAAI3qF,KAAK,wGAIjBrL,KAAK6iK,MAAM3nC,QAAQ,iBAEvB,CAEA,IAAIq2E,EAEFA,EADEujE,EAAkB7hE,gBAAkBjzM,KAAK2xQ,mBAC5B9uJ,IAEAjnB,KAAKC,MAAoC,IAA5BunH,EAE9B0xD,EAAkBvjE,aAAeA,EAC7BtpM,EAAMuxJ,SACRs7G,EAAkBG,mBAAqBhtQ,EAAMuxJ,QAE/Cx5J,KAAK6iK,MAAM3nC,QAAQ,mBACnBl7H,KAAK6iK,MAAM3nC,QAAQ,CACjB7jI,KAAM,QACNkI,KAAM,2BAMR,MAAMm0Q,EAAe1zQ,KAAKusQ,iBAC1B,IAAKmH,EAGH,OAFA1zQ,KAAKiI,MAAQ,8EACbjI,KAAKk7H,QAAQ,SAGf,MAAM+oH,EAAQh8O,EAAMk7M,SAAWnjN,KAAKw2M,QAAU5K,GAAQ51G,IAAI3qF,KACpD6rQ,EAAejvQ,EAAMoG,QAAU,IAAMpG,EAAMoG,QAAU,GAC3D41O,EAAM,GAAGh8O,EAAMk7M,SAAW,mBAAqB,uCAAuC2xD,EAAkBp+P,MAAWwgQ,2BAAsCxD,EAAah9P,OAElKg9P,EAAav/P,WAAW87H,QAAU6kI,EAAkB3gQ,WAAW87H,OACjEjwI,KAAKq2Q,iBAAiB,QAAS,CAAC,QAAS,UAGvC3C,EAAav/P,WAAW+7H,YAAc4kI,EAAkB3gQ,WAAW+7H,WACrElwI,KAAKq2Q,iBAAiB,WAAY,CAAC,QAAS,UAE9Cr2Q,KAAKq2Q,iBAAiB,OAAQ,CAAC,QAAS,UACxC,MAAMc,EAAgBzD,EAAa70I,eAAiB,EAAI,KAAQ,IAC1Dq6E,EAAkD,kBAA7Bw6D,EAAaj7D,aAA4B78G,KAAKC,MAAQ63K,EAAaj7D,aAAe0+D,EAE7G,OAAOn3Q,KAAK4zQ,aAAaF,EAAc,UAAWhwD,GAAoBxK,EACxE,CAKA64D,YAAAA,GACE/xQ,KAAKq2Q,iBAAiB,MAAO,CAAC,QAAS,UACvCr2Q,KAAK8yQ,eACP,CAgBAuD,gBAAAA,CAAiB1qQ,EAAQyrQ,GACvB,MAAMC,EAAU,GACVC,EAAgC,QAAX3rQ,GACvB2rQ,GAAiC,SAAX3rQ,IACxB0rQ,EAAQl+Q,KAAK6G,KAAKoiN,qBAEpB,MAAMz7E,EAAa,IACf2wI,GAAiC,UAAX3rQ,IACxBg7H,EAAWxtI,KAAK,UAEdm+Q,GAAiC,aAAX3rQ,KACxBg7H,EAAWxtI,KAAK,mBAChBwtI,EAAWxtI,KAAK,cAElBwtI,EAAWhuI,SAAQ4uI,IACjB,MAAMgwI,EAASv3Q,KAAKgyQ,YAAYzqI,IAAcvnI,KAAKgyQ,YAAYzqI,GAAWgjI,qBACtEgN,GACFF,EAAQl+Q,KAAKo+Q,EACf,IAEF,CAAC,OAAQ,QAAS,YAAY5+Q,SAAQ4G,IACpC,MAAMg4Q,EAASv3Q,KAAK,GAAGT,oBACnBg4Q,GAAW5rQ,IAAWpM,GAAmB,QAAXoM,GAChC0rQ,EAAQl+Q,KAAKo+Q,EACf,IAEFF,EAAQ1+Q,SAAQ4+Q,GAAUH,EAAQz+Q,SAAQ+1J,IACV,oBAAnB6oH,EAAO7oH,IAChB6oH,EAAO7oH,IACT,KAEJ,CAQAsa,cAAAA,CAAe/E,GACb,MAAMjJ,EAAWu0C,GAAUvvM,KAAK6iK,MAAM7H,WAAYiJ,GAClD,OAAMjkK,KAAKoiN,qBAAuBpiN,KAAKoiN,oBAAoBpgF,SAMtDhiI,KAAKoiN,oBAAoBpgF,QAAQ7B,SAIlC66B,GAAYA,EAAS38J,OAChB4lK,GAITjkK,KAAKqxQ,mBAAmBzzG,QACxB59J,KAAKqxQ,mBAAmBnnB,kBACpBlqP,KAAKgyQ,YAAY/hI,MAAMs6H,uBACzBvqQ,KAAKoxQ,oBAAoBxzG,QACzB59J,KAAKoxQ,oBAAoBlnB,mBAEvBlqP,KAAKgyQ,YAAY9hI,UAAUq6H,uBAC7BvqQ,KAAKwyQ,uBAAuB50G,QAC5B59J,KAAKwyQ,uBAAuBtoB,wBAG9BlqP,KAAK6kK,QAxBI,CAyBX,CAOA9nC,QAAAA,GACE,IAAK/8H,KAAKoiN,oBACR,OAAO,EAET,MAAMpgF,EAAQhiI,KAAKoiN,oBAAoBpgF,QACvC,OAAKA,EAcAA,EAAMhB,QAKPhhI,KAAKorP,YACAprP,KAAKorP,YAAYruH,SAEnBi0I,GAAM9+D,SAASn1E,SAASiF,GAPtBnf,IAbA,CAqBX,CAOA4qD,QAAAA,GACE,OAAOztK,KAAK0rP,SACd,CACAyqB,iBAAAA,GACE,IAAIqB,EAoBJ,IAAKx3Q,KAAKoiN,oBACR,OAEF,IAAIpgF,EAAQhiI,KAAKoiN,oBAAoBpgF,QACrC,IAAKA,EACH,OAEF,IAAI0uE,EAAU1wM,KAAKiuP,gBAAgBuX,eAAexjI,EAAOhiI,KAAK+8H,YAC9D,GAAgB,OAAZ2zE,EAEF,OAEF,MAAM3vC,EAAO/gK,KAAKoiN,oBAAoBrhD,KAChC02G,EAAezG,GAAM9+D,SAASzkC,SAASzrC,EAAO0uE,EAASsgE,GAAM9+D,SAAS7B,cAActvC,EAAM/+B,IAChG,GAA4B,IAAxBy1I,EAAap5Q,OACf,OAEF,GAAI2B,KAAKgyQ,YAAY/hI,MAAMs6H,qBAAsB,CAG/C,GAFAvoI,EAAQhiI,KAAKgyQ,YAAY/hI,MAAMs6H,qBAAqBvoI,QACpD0uE,EAAU1wM,KAAKiuP,gBAAgBuX,eAAexjI,EAAOhiI,KAAK+8H,YAC1C,OAAZ2zE,EACF,OAGF,GADA8mE,EAAgBxG,GAAM9+D,SAASzkC,SAASzrC,EAAO0uE,EAASsgE,GAAM9+D,SAAS7B,cAActvC,EAAM/+B,IAC9D,IAAzBw1I,EAAcn5Q,OAChB,MAEJ,CACA,IAAIq5Q,EACAC,EAgBJ,GAfI33Q,KAAK0rP,WAAa1rP,KAAK0rP,UAAUrtP,SACnCq5Q,EAAS13Q,KAAK0rP,UAAUhsK,IAAI,GAC5Bi4L,EAAW33Q,KAAK0rP,UAAUrlP,MAAM,IAE7BmxQ,EAIMA,EAAcnxQ,MAAM,GAAKoxQ,EAAa/3L,IAAI,IAAM+3L,EAAapxQ,MAAM,GAAKmxQ,EAAc93L,IAAI,GAEnG1/E,KAAK0rP,UAAY+rB,EAEjBz3Q,KAAK0rP,UAAY7wF,GAAiB,CAAC,CAAC28G,EAAcnxQ,MAAM,GAAKoxQ,EAAapxQ,MAAM,GAAKmxQ,EAAcnxQ,MAAM,GAAKoxQ,EAAapxQ,MAAM,GAAImxQ,EAAc93L,IAAI,GAAK+3L,EAAa/3L,IAAI,GAAK83L,EAAc93L,IAAI,GAAK+3L,EAAa/3L,IAAI,MAL1N1/E,KAAK0rP,UAAY+rB,EAQfz3Q,KAAK0rP,WAAa1rP,KAAK0rP,UAAUrtP,QAC/B2B,KAAK0rP,UAAUhsK,IAAI,KAAOg4L,GAAU13Q,KAAK0rP,UAAUrlP,MAAM,KAAOsxQ,EAClE,OAGJ33Q,KAAKw2M,QAAQ,qBAAqB/G,GAAezvM,KAAK0rP,eACtD,MAAM3xP,EAAW,CACf69Q,eAAgB53Q,KAAK0rP,WAEvB1rP,KAAKk7H,QAAQ,CACX7jI,KAAM,wBACN0C,aAEFiG,KAAK6iK,MAAM3nC,QAAQ,kBACrB,CAKAk6I,cAAAA,CAAe9jG,GAKb,GAJItxK,KAAK63Q,kBACP73Q,KAAKorP,YAAYj4J,oBAAoB,aAAcnzF,KAAK63Q,iBACxD73Q,KAAK63Q,gBAAkB,MAEW,SAAhC73Q,KAAKorP,YAAYpuP,WAGnB,OAFAgD,KAAK63Q,gBAAkB73Q,KAAKo1Q,eAAer2Q,KAAKiB,KAAMsxK,QACtDtxK,KAAKorP,YAAYl4J,iBAAiB,aAAclzF,KAAK63Q,iBAGvD,GAAIvmG,EAAQ,CACV,MAAM7D,EAAWztK,KAAKytK,WACtB,IAAKA,EAASpvK,OACZ,OA4BF,aAHI8pF,MAAMnoF,KAAKorP,YAAYruH,WAAa/8H,KAAKorP,YAAYruH,SAAW0wC,EAAS/tF,IAAI+tF,EAASpvK,OAAS,KACjG2B,KAAKmsP,eAAeqT,YAAY/xF,EAAS/tF,IAAI+tF,EAASpvK,OAAS,IAGnE,CACA,MAAM28J,EAAWh7J,KAAK6iK,MAAM7H,WAC5B,IAAIj+B,EAAWi0I,GAAM9+D,SAASn1E,SAAS/8H,KAAKoiN,oBAAoBpgF,SAC5Dg5B,EAAS38J,OAAS,IACpB0+H,EAAWz5H,KAAK69E,IAAI47C,EAAUi+B,EAASt7E,IAAIs7E,EAAS38J,OAAS,KAE3D2B,KAAKorP,YAAYruH,WAAaA,GAChC/8H,KAAKmsP,eAAeqT,YAAYziI,EAEpC,CAMAxB,OAAAA,GACEv7H,KAAKk7H,QAAQ,WACbl7H,KAAK+tP,WAAW9mC,YAChBjnN,KAAKoiN,oBAAoB7mF,UACzBv7H,KAAKqxQ,mBAAmB91I,UACxBv7H,KAAK0yQ,2BAA2Bn3I,UAChCv7H,KAAKqyQ,cAAclxQ,QACfnB,KAAKgzQ,aACPhzQ,KAAK6iK,MAAM5nC,IAAI,OAAQj7H,KAAKgzQ,aAE9B,CAAC,QAAS,aAAar6Q,SAAQtB,IAC7B,MAAM8zQ,EAASnrQ,KAAKgyQ,YAAY36Q,GAAM8zQ,OACtC,IAAK,MAAMz0P,KAAMy0P,EACfA,EAAOz0P,GAAI/d,SAAQk1I,IACbA,EAAM48H,gBACR58H,EAAM48H,eAAelvI,SACvB,GAEJ,IAEFv7H,KAAKoxQ,oBAAoB71I,UACzBv7H,KAAKwyQ,uBAAuBj3I,UAC5Bv7H,KAAKmsP,eAAe5wH,UACpBv7H,KAAKwpP,0BAA0BjuH,UAC/Bv7H,KAAK8yQ,gBACD9yQ,KAAK63Q,iBACP73Q,KAAKorP,YAAYj4J,oBAAoB,aAAcnzF,KAAK63Q,iBAE1D73Q,KAAKorP,YAAYj4J,oBAAoB,iBAAkBnzF,KAAKkyQ,uBAE5DlyQ,KAAKorP,YAAYj4J,oBAAoB,aAAcnzF,KAAKmyQ,mBACxDnyQ,KAAKorP,YAAYj4J,oBAAoB,cAAenzF,KAAKoyQ,oBACzDpyQ,KAAKi7H,KACP,CAOA8lC,IAAAA,GACE,OAAO/gK,KAAKoiN,oBAAoBrhD,IAClC,CAOA/+B,KAAAA,GAEE,OAAOhiI,KAAKoiN,oBAAoBpgF,SAAWhiI,KAAK40Q,aAClD,CACAkD,mBAAAA,GACE,MAAMC,IAAqB/3Q,KAAKgyQ,YAAY/hI,MAAMs6H,qBAC5CyN,IAAqBh4Q,KAAKqxQ,mBAAmBxa,uBAG7CohB,GAAqBF,KAA4B/3Q,KAAKoxQ,oBAAoBva,uBAEhF,SAAKmhB,IAAqBC,EAI5B,CAEAzB,mBAAAA,GACE,MAAMx0I,EAAQ,CACZ++B,KAAM/gK,KAAKqxQ,mBAAmBxa,wBAA0B,CAAC,EACzDtwH,MAAOvmI,KAAKoxQ,oBAAoBva,wBAA0B,CAAC,GAEvDh1H,EAAW7hI,KAAKqxQ,mBAAmBva,6BAA+B92P,KAAKgiI,QAE7EA,EAAMsE,MAAQtE,EAAM++B,KACpB,MAAMm3G,EAAiBz0B,GAAkBzjP,KAAK+gK,OAAQl/B,GAChDuF,EAAS,CAAC,EACV2wI,IAAqB/3Q,KAAKgyQ,YAAY/hI,MAAMs6H,qBAalD,GAZIvoI,EAAM++B,KAAKstE,WACbjnG,EAAOd,MAAQ4xI,EAAe5xI,OAAStE,EAAM++B,KAAK++E,YZ7llDvB,eY+llDzB99G,EAAM++B,KAAKm+E,UACb93G,EAAOd,OAAS,IAAI4xI,EAAe3xI,OAASvE,EAAM++B,KAAK8+E,YAAc/3G,MAEnE9F,EAAM++B,KAAKqtE,WAAapsG,EAAM++B,KAAKm+E,SAAWl9G,EAAMuE,MAAM6nG,UAAY2pC,KACxE3wI,EAAOb,MAAQ2xI,EAAe3xI,OAASvE,EAAM++B,KAAK8+E,YAAc79G,EAAMuE,MAAMs5G,YAAc/3G,EAE1F9F,EAAMuE,MAAMq5G,OAAS59G,EAAM++B,KAAKqtE,WAAapsG,EAAM++B,KAAKm+E,QAAUl9G,EAAM++B,KAAK6+E,OAAS59G,EAAMuE,MAAMq5G,SAG/Fx4G,EAAOb,QAAUa,EAAOd,MAQ3B,YAPAtmI,KAAK0qQ,gBAAgB,CACnBoK,kBAAmBjzI,EACnB55H,MAAO,CACLoG,QAAS,4CAEX+0M,0BAA2BvgG,MAK/B,MACMs1J,EAAoB,CAAC,EAC3B,IAAIC,EAWJ,GAVA,CAAC,QAAS,SAASz/Q,SAAQ,SAAUtB,GACnC,GAAI+vI,EAAOvpI,eAAexG,KAJHuoP,EAI6B59G,EAAM3qI,GAAMuoP,OAJjC94G,EAIyCM,EAAO/vI,KAJtCuoP,EAASj4G,EAAqBb,GAASe,EAAmBf,KAIZ,CACrF,MAAMuxI,EAAYr2I,EAAM3qI,GAAMuoP,OAAS,UAAY,QACnDu4B,EAAkBE,GAAaF,EAAkBE,IAAc,GAC/DF,EAAkBE,GAAWl/Q,KAAKiuI,EAAO/vI,IAC5B,UAATA,IACF+gR,EAAmBC,EAEvB,CAXsBC,IAAC14B,EAAQ94G,CAYjC,IACIixI,GAAoBK,GAAoBv2I,EAAS1tH,WAAW87H,MAAO,CACrE,MAAM2zG,EAAa/hH,EAAS1tH,WAAW87H,MACvCjwI,KAAK+gK,OAAOj/B,UAAUnpI,SAAQs5M,KACFA,EAAQ99L,YAAc89L,EAAQ99L,WAAW87H,SACzC2zG,GAAc3xC,IAAYpwE,IAClDowE,EAAQV,aAAe1uF,IACzB,IAEF7iH,KAAKw2M,QAAQ,yBAAyBotC,QAAiBw0B,iCAAgDhxI,EAAOb,SAChH,CAEA,IAAIpnI,OAAO0M,KAAKssQ,GAAmB95Q,OAAnC,CAmBA,GAAI2B,KAAKmsP,eAAesS,4BAA8Bz+P,KAAKmsP,eAAe2S,gBAAiB,CACzF,MAAMyZ,EAAiB,GAQvB,GAPA,CAAC,QAAS,SAAS5/Q,SAAQtB,IACzB,MAAMmhR,GAAYtxI,EAAYlnI,KAAKmsP,eAAe/kH,OAAO/vI,IAAS,IAAI,IAAM,CAAC,GAAGA,KAC1E2lQ,GAAY91H,EAAYE,EAAO/vI,IAAS,IAAI,IAAM,CAAC,GAAGA,KACxDmhR,GAAYxb,GAAYwb,EAASxhR,gBAAkBgmQ,EAAShmQ,eAC9DuhR,EAAep/Q,KAAK,IAAI6G,KAAKmsP,eAAe/kH,OAAO/vI,WAAc+vI,EAAO/vI,MAC1E,IAEEkhR,EAAel6Q,OASjB,YARA2B,KAAK0qQ,gBAAgB,CACnBoK,kBAAmBjzI,EACnB55H,MAAO,CACLoG,QAAS,kCAAkCkqQ,EAAexkQ,KAAK,SAC/DovM,UAAU,GAEZC,0BAA2BvgG,KAIjC,CAGA,OAAOukB,CAzBP,CAjBA,CACE,MAAM/4H,EAAUlP,OAAO0M,KAAKssQ,GAAmBjhR,QAAO,CAACwlI,EAAK27I,KACtD37I,IACFA,GAAO,MAETA,GAAO,GAAG27I,iCAAyCF,EAAkBE,GAAWtkQ,KAAK,UAEpF,IAAM,IACT/T,KAAK0qQ,gBAAgB,CACnBoK,kBAAmBjzI,EACnB55H,MAAO,CACLk7M,UAAU,EACV90M,WAEF+0M,0BAA2BvgG,KAG/B,CA0BF,CAOA0zJ,yBAAAA,GAGE,GAAoC,SAAhCv2Q,KAAKorP,YAAYpuP,YAAyBgD,KAAKmsP,eAAesS,0BAChE,OAEF,IAAKz+P,KAAK83Q,sBACR,OAEF,MAAM1wI,EAASpnI,KAAKw2Q,sBAEpB,IAAKpvI,EACH,OAEFpnI,KAAKmsP,eAAewS,oBAAoBv3H,GACxC,MAAMD,EAAc,CAACC,EAAOd,MAAOc,EAAOb,OAAO56H,OAAOimI,SAAS79H,KAAK,KACtE/T,KAAKy4Q,6BAA6BtxI,EACpC,CAKAutI,2BAAAA,GACE,MAAM5yI,EAAY9hI,KAAK+gK,OAAOj/B,UACxB42I,EAAM,GAGZv5Q,OAAO0M,KAAKi2H,GAAWnpI,SAAQI,IAC7B,MAAMk5M,EAAUnwE,EAAU/oI,GAE1B,IAAiC,IAA7B2/Q,EAAI5/Q,QAAQm5M,EAAQv7L,IACtB,OAEFgiQ,EAAIv/Q,KAAK84M,EAAQv7L,IACjB,MAAM0wH,EAASq8G,GAAkBzjP,KAAK+gK,KAAMkxC,GACtC0mE,EAAc,IAChBvxI,EAAOb,OAAUsB,EAAmBT,EAAOb,QAAWoB,EAAqBP,EAAOb,QACpFoyI,EAAYx/Q,KAAK,eAAeiuI,EAAOb,UAErCa,EAAOd,OAAUuB,EAAmBT,EAAOd,QAAWqB,EAAqBP,EAAOd,QACpFqyI,EAAYx/Q,KAAK,eAAeiuI,EAAOd,SAErCc,EAAOtuH,MAAwB,mBAAhBsuH,EAAOtuH,MACxB6/P,EAAYx/Q,KAAK,cAAciuI,EAAOtuH,QAEpC6/P,EAAYt6Q,SACd4zM,EAAQV,aAAe1uF,IACvB7iH,KAAKw2M,QAAQ,aAAavE,EAAQv7L,uBAAuBiiQ,EAAY5kQ,KAAK,SAC5E,GAEJ,CAgBA0kQ,4BAAAA,CAA6BtxI,GAC3B,MAAMuxI,EAAM,GACN52I,EAAY9hI,KAAK+gK,OAAOj/B,UACxBsF,EAASg8G,GAAgBl8G,EAAYC,IACrCyxI,EAAcr1B,GAAWn8G,GACzByxI,EAAezxI,EAAOd,OAASY,EAAYE,EAAOd,OAAO,IAAM,KAC/DwyI,EAAe1xI,EAAOb,OAASW,EAAYE,EAAOb,OAAO,IAAM,KACrEpnI,OAAO0M,KAAKi2H,GAAWnpI,SAAQI,IAC7B,MAAMk5M,EAAUnwE,EAAU/oI,GAG1B,IAAiC,IAA7B2/Q,EAAI5/Q,QAAQm5M,EAAQv7L,KAAcu7L,EAAQV,eAAiB1uF,IAC7D,OAEF61J,EAAIv/Q,KAAK84M,EAAQv7L,IACjB,MAAMqiQ,EAAmB,GAEnBC,EAAgBv1B,GAAkBzjP,KAAKoiN,oBAAoBrhD,KAAMkxC,GACjEgnE,EAAoB11B,GAAWy1B,GAGrC,GAAKA,EAAczyI,OAAUyyI,EAAc1yI,MAA3C,CAWA,GALI2yI,IAAsBL,GACxBG,EAAiB5/Q,KAAK,gBAAgB8/Q,WAA2BL,OAI9D54Q,KAAKmsP,eAAe2S,gBAAiB,CACxC,MAAMoa,EAAsBF,EAAc1yI,OAASY,EAAY8xI,EAAc1yI,OAAO,IAAM,KACpF6yI,EAAsBH,EAAczyI,OAASW,EAAY8xI,EAAczyI,OAAO,IAAM,KAEtF2yI,GAAuBL,GAAgBK,EAAoB7hR,KAAKL,gBAAkB6hR,EAAaxhR,KAAKL,eACtG+hR,EAAiB5/Q,KAAK,gBAAgB+/Q,EAAoB7hR,cAAcwhR,EAAaxhR,SAGnF8hR,GAAuBL,GAAgBK,EAAoB9hR,KAAKL,gBAAkB8hR,EAAazhR,KAAKL,eACtG+hR,EAAiB5/Q,KAAK,gBAAgBggR,EAAoB9hR,cAAcyhR,EAAazhR,QAEzF,CACI0hR,EAAiB16Q,SACnB4zM,EAAQV,aAAe1uF,IACvB7iH,KAAKw2M,QAAQ,aAAavE,EAAQv7L,OAAOqiQ,EAAiBhlQ,KAAK,WAvBjE,CAwBA,GAEJ,CACAohQ,aAAAA,CAAcnzI,GACZ,IAAIrpH,EAAS,EACb,MAAM80J,EAAWztK,KAAKytK,WAClBA,EAASpvK,SACXsa,EAAS80J,EAASpnK,MAAM,IAvgJT,SAAU27H,EAAOvwC,GAAmB,IAAZ94E,EAAM1O,UAAA5L,OAAA,QAAA/D,IAAA2P,UAAA,GAAAA,UAAA,GAAG,EACpD,IAAK+3H,EAAM7B,SACT,OAEF,IACI47B,EADA8lG,EAAYlpP,EAEhB,IAAK,IAAI5a,EAAI,EAAGA,EAAIikI,EAAM7B,SAAS9hI,OAAQN,IAAK,CAC9C,MAAMsgI,EAAU2D,EAAM7B,SAASpiI,GAQ/B,GAPKg+J,IAKHA,EAAM6lG,GAAUnwK,EAAOowK,EAAYxjI,EAAQtB,SAAW,IAEpDg/B,EAAK,CACP,GAAI,UAAW19B,EAAS,CAEtB09B,EAAIC,QAAU6lG,EACd9lG,EAAIgmG,UAAYF,EAChBA,GAAaxjI,EAAQtB,SACrBg/B,EAAM,KACN,QACF,CACA,GAAI8lG,EAAY9lG,EAAIC,QAAS,CAE3B6lG,GAAaxjI,EAAQtB,SACrB,QACF,CAEAg/B,EAAIC,SAAW39B,EAAQtB,QACzB,MASE,GARI,WAAYsB,IACd09B,EAAM,IAAIha,IAAAA,QAAgB8/G,EAAWA,EAAYxjI,EAAQtB,SAAUsB,EAAQgF,QAC3E04B,EAAI+lG,YAAcD,EAGlB9lG,EAAIgmG,UAAYF,EAAY7kI,WAAWqB,EAAQgF,QAC/C5xC,EAAMgrE,OAAOV,IAEX,eAAgB19B,EAAS,CAI3B,MAAO+6I,EAAUC,GAAWh7I,EAAQiF,WAAWrsI,MAAM,KAAKof,IAAI2mH,YAC9D++B,EAAM,IAAIha,IAAAA,QAAgB8/G,EAAWA,EAAYxjI,EAAQtB,SAAU,IACnEg/B,EAAI+lG,YAAcD,EAAYuX,EAC9Br9G,EAAIgmG,UAAYhmG,EAAI+lG,YAAcuX,EAClC5nL,EAAMgrE,OAAOV,EACf,CAEF8lG,GAAaxjI,EAAQtB,QACvB,CACF,CAo9IIu8I,CAAat3I,EAAOhiI,KAAK6xQ,cAAel5P,EAC1C,CAOAuzO,gBAAAA,GACE,MAAMjoF,EAAcjkK,KAAK6iK,MAAMoB,cACzB5gB,EAAUoiE,GAAOC,mBACjB96B,EAAO66B,GAAOI,wBACd1kI,EAAM79E,KAAK69E,IAAIkiE,EAASoiE,GAAOE,wBACrC,OAAOriN,KAAKyhG,IAAIs+C,EAAU4gB,EAAc2mB,EAAMzpG,EAChD,CAOAq0L,kBAAAA,GACE,MAAMvxG,EAAcjkK,KAAK6iK,MAAMoB,cACzB5gB,EAAUoiE,GAAOO,sBACjBp7B,EAAO66B,GAAOU,2BACdhlI,EAAM79E,KAAK69E,IAAIkiE,EAASoiE,GAAOQ,2BAC/BszD,EAASj2Q,KAAK69E,IAAIkiE,EAASoiE,GAAOS,wCACxC,OAAO5iN,KAAKyhG,IAAIs+C,EAAU4gB,EAAc2mB,EAAM5qL,KAAK0xQ,eAAiB6H,EAASp4L,EAC/E,CACAs0L,mBAAAA,GACE,OAAOhwD,GAAOW,sBAChB,CACA1P,yBAAAA,CAA0Bz2E,GACxB4nH,GAA+B7nP,KAAKqsP,kBAAmB,sBAAuBrsP,KAAK6iK,OA9jS1D22G,KAGvB,IAHwB,iBAC5B5yB,EAAgB,WAChB3mH,GACDu5I,EACC,MAAMzyB,EAAgBH,EAAiBI,eACvC,IAAKD,EACH,OAEF,MAAMD,EAAM/kG,IAAAA,eAA0BA,IAAAA,OACtC9hB,EAAWtnI,SAAQ2rI,IAEjB,IAAK,MAAMvrI,KAAOoG,OAAO0M,KAAKy4H,GAAY,CACxC,GAAIsjH,GAAoBlnP,IAAI3H,GAC1B,SAEF,MAAMgjK,EAAM,IAAI+qF,EAAIxiH,EAAUhN,UAAWgN,EAAU03B,QAAS,IAC5DD,EAAIrlJ,GAAK4tH,EAAU5tH,GACnBqlJ,EAAI1kK,KAAO,0BACX0kK,EAAIzkK,MAAQ,CACVyB,IAAK0uP,GAAc1uP,GACnB4D,KAAM2nI,EAAUvrI,IAEN,cAARA,GAA+B,aAARA,IACzBgjK,EAAIzkK,MAAMqF,KAAO,IAAI5E,WAAWgkK,EAAIzkK,MAAMqF,KAAKiiF,MAAM,iBAAiBuD,QAExE4kK,EAActqF,OAAOV,EACvB,CACAz3B,EAAU4vE,kBAAkB,GAC5B,EAmiSAulE,CAAqB,CACnB7yB,iBAAkB5mP,KAAKqsP,kBACvBpsH,cAEJ,CACAqiF,sBAAAA,CAAuBqf,EAAcvc,EAAeyhC,GAClD,MAAMnM,EAAkB16O,KAAKmsP,eAAe6S,YAAch/P,KAAKmsP,eAAe2H,uBAAyB9zP,KAAKmsP,eAAewH,uBAI3H9L,GAA+B7nP,KAAKqsP,kBAAmB1qB,EAAc3hO,KAAK6iK,OAC1E6jF,GAAY,CACVE,iBAAkB5mP,KAAKqsP,kBACvBjnC,gBACAs1B,kBACAmM,iBAEJ,CAQAiwB,iBAAAA,CAAkBj1I,GAChB,OAAOA,EAAS1tH,WAAW,eAAiB0tH,EAAS1tH,WAAWm8H,eAClE,CAKAmkI,8BAAAA,GACE,MAAM1zG,EAAO/gK,KAAK+gK,OAClB,GAAKA,EAAK37B,gBAAV,CAGA,IAAK,MAAMvD,KAAYk/B,EAAKj/B,UAC1B9hI,KAAK0yQ,2BAA2BhC,oBAAoB1wQ,KAAK82Q,kBAAkBj1I,IAE7E7hI,KAAK0yQ,2BAA2BvE,oBAAoBptG,EAAK1nK,IAAK0nK,EAAK37B,iBAE/DplI,KAAK0yQ,2BAA2Bp5H,iBAElCt5I,KAAK0yQ,2BAA2B9D,yBAAwB,GAI1D5uQ,KAAK6iK,MAAM1V,IAAI,WAAW,KACxBntJ,KAAK0yQ,2BAA2B9D,yBAAyB,GAb3D,CAeF,CAKA8K,+BAAAA,GACE15Q,KAAK0yQ,2BAA2B/B,yBAChC3wQ,KAAK0yQ,2BAA2Bn3I,UAChCv7H,KAAKy0Q,gCACP,CAKAD,+BAAAA,GACEx0Q,KAAK0yQ,2BAA2B13I,GAAG,mBAAoBh7H,KAAKg3Q,0BAA0Bj4Q,KAAKiB,OAC7D,CAAC,2BAA4B,8BAA+B,yBACpErH,SAAQy8L,IAC5Bp1L,KAAK0yQ,2BAA2B13I,GAAGo6D,GAAWr7L,IAC5CiG,KAAKk7H,QAAQljI,EAAS,CAAC,EAAG+B,GAAU,GACpC,IAEqB,SAArBiG,KAAKgqP,aACPhqP,KAAKoiN,oBAAoBpnF,GAAG,kBAAkB,KAC5C,MAAM+lC,EAAO/gK,KAAK+gK,QAEO/gK,KAAK0yQ,2BAA2B7B,iBAAiB9vG,EAAK1nK,IAAK0nK,EAAK37B,kBAC/Du0I,MACxB,MAAMC,EAAoB55Q,KAAK0yQ,2BAA2B3B,uBACpD8I,EAAc,GACpB,IAAK,MAAMh4I,KAAYk/B,EAAKj/B,UAAW,CACrC,MAAMwO,EAAkBzO,EAAS1tH,WAAWm8H,gBAC5C,GAAIA,IACFupI,EAAY1gR,KAAKm3I,IACZspI,EAAkBl5Q,IAAI4vI,IACzB,OAAO,CAGb,CAEA,QAAKupI,EAAYx7Q,SAAUu7Q,EAAkBx4Q,KAGjC,EAEUu4Q,KACtB35Q,KAAK05Q,iCACP,GAGN,CAKA1C,yBAAAA,GACE,MAAM1J,EAAiBttQ,KAAK0yQ,2BAA2B7C,aACvD,IAAKvC,EACH,OAEFttQ,KAAK85Q,uBACL,MACMh4I,EADO9hI,KAAK+gK,OACKj/B,UACjB42I,EAAM,IAAI93Q,IAChB,IAAIm5Q,GAAqB,EACzB56Q,OAAO0M,KAAKi2H,GAAWnpI,SAAQI,IAC7B,MAAMk5M,EAAUnwE,EAAU/oI,GACpB01Q,EAAYzuQ,KAAK82Q,kBAAkB7kE,GACnC+nE,EAAqBvL,GAAanB,IAAmBmB,EACjCx8D,EAAQV,eAAiB1uF,KAA2C,qBAA/BovF,EAAQgjE,qBAC7C+E,WACjB/nE,EAAQV,oBACRU,EAAQgjE,mBACf8E,GAAqB,GAEvB,MAAME,GAAkBhoE,EAAQV,cAAgBU,EAAQV,eAAiB1uF,KAClD61J,EAAIh4Q,IAAIuxM,EAAQv7L,KAAOsjQ,GAAsBC,IAIpEvB,EAAI33Q,IAAIkxM,EAAQv7L,IAChBu7L,EAAQV,aAAe1uF,IACvBovF,EAAQgjE,mBAAqB,mBAE7Bj1Q,KAAKw2M,QAAQ,aAAavE,EAAQv7L,UAAUu7L,EAAQgjE,sBAAqB,IAErB,SAAlDj1Q,KAAK0yQ,2BAA2B/E,eAClCxuQ,OAAO0M,KAAK7L,KAAKgyQ,aAAar5Q,SAAQI,IACpC,MAAM1B,EAAO2I,KAAKgyQ,YAAYj5Q,GAC9B,GAAI1B,EAAKkzQ,qBAAsB,CAC7B,MAAMgL,EAAkBl+Q,EAAKkzQ,qBAAqB5xD,OAE9C48D,GAAmBA,EAAgBphQ,WAAWm8H,kBAAoBg9H,IACpEyM,GAAqB,EAEzB,KAGAA,GACF/5Q,KAAKk6Q,uBAET,CAYAJ,oBAAAA,GACE,MACMh4I,EADO9hI,KAAK+gK,OACKj/B,UACjBgsI,EAAuB9tQ,KAAK0yQ,2BAA2B5E,qBACvDC,EAAoB/tQ,KAAK0yQ,2BAA2B3E,kBAE1D,GADkBD,GAAwBA,EAAqB1sQ,MAAQ2sQ,GAAqBA,EAAkB3sQ,KAC9G,CAGA,IAAK,MAAOsV,EAAIm/K,KAAUi4E,EAAqBqM,UAAW,CACvCpM,EAAkBjtQ,IAAI4V,KAGrC1W,KAAKoiN,oBAAoB3I,oBAAoB5jB,GAC7C71L,KAAK0yQ,2BAA2B9B,eAAel6P,GAEnD,CACA,IAAK,MAAOA,EAAIm/K,KAAUk4E,EAAkBoM,UAAW,CACrD,MAAMC,EAAWtM,EAAqBhtQ,IAAI4V,GAE1C,GAAK0jQ,EAWDp6Q,KAAKq6Q,oBAAoBD,EAAUvkF,KAKvC71L,KAAKoiN,oBAAoB3I,oBAAoB5jB,GAAO,GACpD71L,KAAK0yQ,2BAA2BhC,oBAAoBh6P,QAjBpD,CAC2BorH,EAAUn2H,QAAOM,GACjCA,EAAEkI,WAAW,gBAAkB0hL,EAAM,aAE7Bl9L,SAAQsT,IACvBjM,KAAKoiN,oBAAoB5H,gBAAgB3kB,EAAO5pL,EAAE,IAEpDjM,KAAK0yQ,2BAA2BhC,oBAAoBh6P,EAEtD,CASF,CAEA1W,KAAK0yQ,2BAA2B5E,qBAAuB,IAAI5tQ,IAAIlF,KAAKC,MAAMD,KAAK8B,UAAU,IAAIixQ,KAhC7F,CAiCF,CASAsM,mBAAAA,CAAoBv7L,EAAG4H,GACrB,GAAI5H,EAAE,aAAe4H,EAAE,YAAc5H,EAAE86H,KAAOlzH,EAAEkzH,IAAM96H,EAAE,mBAAmBo8H,OAASx0H,EAAE,mBAAmBw0H,KACvG,OAAO,EAET,MAAMo/D,EAAUx7L,EAAE,mBAAmBq8H,OAC/Bo/D,EAAU7zL,EAAE,mBAAmBy0H,OAGrC,IAAK,MAAMlvM,KAAKquQ,EACd,GAAIA,EAAQruQ,KAAOsuQ,EAAQtuQ,GACzB,OAAO,EAGX,IAAK,MAAMA,KAAKsuQ,EACd,GAAID,EAAQruQ,KAAOsuQ,EAAQtuQ,GACzB,OAAO,EAGX,OAAO,CACT,CAMAiuQ,qBAAAA,GACE,MAAMxG,EAAe1zQ,KAAKusQ,iBAC1BvsQ,KAAK+xQ,eAEiD,SAAlD/xQ,KAAK0yQ,2BAA2B/E,eAClC3tQ,KAAK+zQ,qCAEP/zQ,KAAK4zQ,aAAaF,EAAc,mBAClC,CAOA8G,iCAAAA,GACE,IAAKx6Q,KAAKoiN,sBAAwBpiN,KAAKoiN,oBAAoBrhD,KACzD,OAEF,IAAI05G,EAA0B,EAC9B,MAAMC,EAAa,aACnB16Q,KAAKoiN,oBAAoBrhD,KAAKj/B,UAAUnpI,SAAQkpI,IAC9C,MAAM84I,EAAW36Q,KAAKoiN,oBAAoB/G,YAAYx5E,GAEjD84I,GAAaA,EAASv5Q,MAG3Bu5Q,EAAShiR,SAAQI,IACf,MAAM6hR,EAAS,SACTC,EAAqB76Q,KAAKqyQ,cAAc3xQ,IAAI3H,IAAQiH,KAAKqyQ,cAAcvxQ,IAAI/H,KAAS6hR,EACpFE,EAAqBj5I,EAASozI,qBAAuByF,GAAc74I,EAAS0vE,eAAiB1uF,IAC9Fg4J,EASMA,GAAsBC,WACxBj5I,EAAS0vE,oBACT1vE,EAASozI,mBAChBj1Q,KAAKw2M,QAAQ,qBAAqB30E,EAASnrH,qBAAqB3d,QAAU6hR,OAVtE/4I,EAAS0vE,eAAiB1uF,KAAYgf,EAASozI,qBAAuByF,IACxE74I,EAAS0vE,aAAe1uF,IACxBgf,EAASozI,mBAAqByF,EAC9B16Q,KAAKw2M,QAAQ,sBAAsB30E,EAASnrH,yBAAyB3d,iDAAmD6hR,MAG1HH,IAKF,GACA,IAGAA,GAA2Bz6Q,KAAKoiN,oBAAoBrhD,KAAKj/B,UAAUzjI,QACrE2B,KAAKoiN,oBAAoBrhD,KAAKj/B,UAAUnpI,SAAQkpI,IAC9C,MAAMk5I,EAAUl5I,GAAYA,EAAS1tH,YAAc0tH,EAAS1tH,WAAWmpH,YAAcuE,EAAS1tH,WAAWmpH,WAAWz9B,OAAS,IACvHm7K,EAA0Bn5I,EAAS0vE,eAAiB1uF,KAAYgf,EAASozI,qBAAuByF,EAClGK,GAAWC,WAENn5I,EAAS0vE,aAChB3F,GAAQ51G,IAAI3qF,KAAK,4BAA4Bw2H,EAASnrH,iDAAiDgkQ,aACzG,GAGN,CAQAO,aAAAA,CAAcx5I,EAAOvlI,GACnB,MAEMg/Q,GAF4B,kBAAVz5I,EACUA,EA70KZt/C,KACxB,MAAMg5L,EAAc,IAAIpjR,WAAWoqF,GACnC,OAAOlpF,MAAMuG,KAAK27Q,GAAa9kQ,KAAIyyH,GAAQA,EAAKzpI,SAAS,IAAI+7Q,SAAS,EAAG,OAAMrnQ,KAAK,GAAG,EA20K3CsnQ,CAAkB55I,IAChBzoI,MAAM,EAAG,IAAIhC,cACzDgJ,KAAKw2M,QAAQ,cAAct6M,kBAAuBg/Q,+BAClDl7Q,KAAKqyQ,cAAc1xQ,IAAIu6Q,EAAsBh/Q,EAC/C,CAQAo/Q,yBAAAA,CAA0B75I,EAAOvlI,GAC/B8D,KAAKi7Q,cAAcx5I,EAAOvlI,GACrB8D,KAAK+0Q,wCACR/0Q,KAAKu7Q,sCAGPv7Q,KAAKoiN,oBAAoBnnF,IAAI,iBAAkBj7H,KAAKu7Q,oCAAoCx8Q,KAAKiB,OAC7FA,KAAKoiN,oBAAoBpnF,GAAG,iBAAkBh7H,KAAKu7Q,oCAAoCx8Q,KAAKiB,MAC9F,CACAu7Q,mCAAAA,GACEv7Q,KAAKw6Q,oCACLx6Q,KAAKwsQ,oBACP,EA8DF,MAAMgP,GACJl8Q,WAAAA,CAAYm8Q,EAAY55I,EAAUnrH,GAChC,MACE6vO,oBAAqBzwJ,GACnB2lL,EACEC,EAAwB5lL,EAAG02K,mBAAmBztQ,KAAK+2F,GAEzD,GAAI+rC,EAAS1tH,WAAY,CACvB,MAAMkoH,EAAawF,EAAS1tH,WAAWmpH,WACvCt9H,KAAK4/F,MAAQy8B,GAAcA,EAAWz8B,MACtC5/F,KAAK6/F,OAASw8B,GAAcA,EAAWx8B,OACvC7/F,KAAKowI,UAAYvO,EAAS1tH,WAAWopH,UACrCv9H,KAAKqwI,UAAYxO,EAAS1tH,WAAW,aACvC,CA3DmBwnQ,IAACpE,EAAQqE,EAAYC,EA4DxC77Q,KAAKonI,OAASq8G,GAAkB3tJ,EAAGirE,OAAQl/B,GAC3C7hI,KAAK6hI,SAAWA,EAGhB7hI,KAAK0W,GAAKA,EAGV1W,KAAK82J,SAnEeygH,EAmEUkE,EAAW35I,UAnEb85I,EAmEwB/5I,EAASnrH,GAnErBmlQ,EAmEyBH,EAnEJr7Q,IAC/D,MAAMwhI,EAAW01I,EAAOx2G,KAAKj/B,UAAU85I,GACjCE,EAAetqE,GAAe3vE,GAC9Bk6I,EAAmBtqE,GAAU5vE,GACnC,GAAsB,qBAAXxhI,EACT,OAAO07Q,EAEL17Q,SACKwhI,EAASj1C,SAEhBi1C,EAASj1C,UAAW,EAEtB,MAAM7yF,EAAW,CACf+5Q,cAAe,CACbp9P,GAAIklQ,EACJxrI,UAAWvO,EAAS1tH,WAAWopH,UAC/BlB,WAAYwF,EAAS1tH,WAAWmpH,WAChC8J,OAAQvF,EAAS1tH,WAAWg8H,QAE9Bv5I,MAAO,gBAiBT,OAfIyJ,IAAW07Q,GAAqBD,IAElCD,EAAiBh6I,GACbxhI,EACFk3Q,EAAOr8I,QAAQ,CACb7jI,KAAM,mBACN0C,aAGFw9Q,EAAOr8I,QAAQ,CACb7jI,KAAM,oBACN0C,cAICsG,CAAM,EAgCb,EAUF,MAsBM27Q,GAAoB,CAAC,UAAW,SAAU,QAAS,UAAW,SAKpE,MAAMC,WAAwBrwE,GAAQe,YAOpCrtM,WAAAA,CAAYhG,GACVyiI,QACA/7H,KAAKumP,oBAAsBjtP,EAAQyrP,mBACnC/kP,KAAK6iK,MAAQvpK,EAAQ4iK,KACrBl8J,KAAKytK,SAAWn0K,EAAQm0K,SACxBztK,KAAKk8Q,iCAAmC5iR,EAAQ4iR,iCAChDl8Q,KAAKm8Q,uBAAyB7iR,EAAQ6iR,uBACtCn8Q,KAAKgiI,MAAQ1oI,EAAQ0oI,MACrBhiI,KAAKo8Q,cAAgB,GACrBp8Q,KAAKq8Q,mBAAqB,EAC1Br8Q,KAAKs8Q,iBAAmB,KACxBt8Q,KAAKu8Q,yBAA2B,KAChCv8Q,KAAKw2M,QAAU1H,GAAO,mBACtB9uM,KAAKw2M,QAAQ,cACb,MAAMgmE,EAAcA,IAAMx8Q,KAAKy8Q,sBACzBC,EAAiBA,IAAM18Q,KAAKy8Q,sBAC5BE,EAAiBA,IAAM38Q,KAAK48Q,eAC5BC,EAAqBA,IAAM78Q,KAAK88Q,mBAChChnL,EAAK91F,KAAKumP,oBACVw2B,EAAc,CAAC,OAAQ,WAAY,SACnCC,EAAe,CAAC,EACtBD,EAAYpkR,SAAQtB,IAClB2lR,EAAa3lR,GAAQ,CACnBkJ,MAAOA,IAAMP,KAAKi9Q,uBAAuB5lR,GACzC6lR,UAAWA,IAAMl9Q,KAAKm9Q,uBAAuB9lR,IAE/Cy+F,EAAG,GAAGz+F,mBAAsB2jI,GAAG,cAAegiJ,EAAa3lR,GAAM6lR,WAIjEpnL,EAAG,GAAGz+F,mBAAsB2jI,GAAG,iBAAkBgiJ,EAAa3lR,GAAMkJ,OAKpEP,KAAK6iK,MAAM7nC,GAAG,CAAC,SAAU,WAAYgiJ,EAAa3lR,GAAMkJ,MAAM,IAWhE,MAAM68Q,EAAqBx1Q,IACzB,CAAC,OAAQ,SAASjP,SAAQtB,IACxBy+F,EAAG,GAAGz+F,mBAAsBuQ,GAAI,WAAY5H,KAAKq9Q,oBAAoB,GACrE,EAEJr9Q,KAAKq9Q,oBAAsB,KACrBr9Q,KAAKs9Q,mBACPt9Q,KAAKq8Q,mBAAqB,EAC1Br8Q,KAAKs8Q,iBAAmBt8Q,KAAK6iK,MAAMoB,cACnCm5G,EAAmB,OACrB,EAEFp9Q,KAAKu9Q,yBAA2B,IAAMH,EAAmB,OACzDp9Q,KAAKw9Q,oBAAsB,KACzBx9Q,KAAKu9Q,2BACLH,EAAmB,KAAK,EAE1Bp9Q,KAAK6iK,MAAM7nC,GAAG,SAAUh7H,KAAKu9Q,0BAC7Bv9Q,KAAK6iK,MAAM7nC,GAAG,UAAWh7H,KAAKw9Q,qBAC9Bx9Q,KAAK6iK,MAAM7nC,GAAG,UAAW2hJ,GACzB38Q,KAAK6iK,MAAM7nC,GAAGghJ,GAAmBa,GACjC78Q,KAAK6iK,MAAM7nC,GAAG,UAAW0hJ,GAYzB18Q,KAAK6iK,MAAM1V,IAAI,OAAQqvH,GAEvBx8Q,KAAKu7H,QAAU,KACbv7H,KAAKu9Q,2BACLv9Q,KAAKw2M,QAAQ,WACbx2M,KAAK6iK,MAAM5nC,IAAI,UAAW0hJ,GAC1B38Q,KAAK6iK,MAAM5nC,IAAI+gJ,GAAmBa,GAClC78Q,KAAK6iK,MAAM5nC,IAAI,UAAWyhJ,GAC1B18Q,KAAK6iK,MAAM5nC,IAAI,OAAQuhJ,GACvBx8Q,KAAK6iK,MAAM5nC,IAAI,UAAWj7H,KAAKw9Q,qBAC/Bx9Q,KAAK6iK,MAAM5nC,IAAI,SAAUj7H,KAAKu9Q,0BAC9BR,EAAYpkR,SAAQtB,IAClBy+F,EAAG,GAAGz+F,mBAAsB4jI,IAAI,cAAe+hJ,EAAa3lR,GAAM6lR,WAClEpnL,EAAG,GAAGz+F,mBAAsB4jI,IAAI,iBAAkB+hJ,EAAa3lR,GAAMkJ,OACrEP,KAAK6iK,MAAM5nC,IAAI,CAAC,SAAU,WAAY+hJ,EAAa3lR,GAAMkJ,MAAM,IAE7DP,KAAKu8Q,0BACPx6H,IAAAA,aAAsB/hJ,KAAKu8Q,0BAE7Bv8Q,KAAK88Q,kBAAkB,CAE3B,CAOAL,mBAAAA,GACEz8Q,KAAKy9Q,oBACDz9Q,KAAKu8Q,0BACPx6H,IAAAA,aAAsB/hJ,KAAKu8Q,0BAG7Bv8Q,KAAKu8Q,yBAA2Bx6H,IAAAA,WAAoB/hJ,KAAKy8Q,oBAAoB19Q,KAAKiB,MAAO,IAC3F,CAYAi9Q,sBAAAA,CAAuB5lR,GACrB,MAAMkgR,EAASv3Q,KAAKumP,oBAAoB,GAAGlvP,mBACvC2I,KAAK,GAAG3I,sBAA2B,GACrC2I,KAAKw2M,QAAQ,iDAAiDn/M,YAEhE2I,KAAK,GAAG3I,sBAA2B,EACnC2I,KAAK,GAAG3I,cAAmBkgR,EAAOtnB,WACpC,CAYAktB,sBAAAA,CAAuB9lR,GACrB,MAAMy+F,EAAK91F,KAAKumP,oBACVgxB,EAASzhL,EAAG,GAAGz+F,mBACf2jK,EAAWu8G,EAAOtnB,YAClBytB,EAriwBe,SAAU5+L,EAAG4H,GAEpC,GAAI5H,IAAM4H,EACR,OAAO,EAGT,IAAK5H,GAAK4H,IAAMA,GAAK5H,EACnB,OAAO,EAGT,GAAIA,EAAEzgF,SAAWqoF,EAAEroF,OACjB,OAAO,EAGT,IAAK,IAAIN,EAAI,EAAGA,EAAI+gF,EAAEzgF,OAAQN,IAC5B,GAAI+gF,EAAEz4E,MAAMtI,KAAO2oF,EAAErgF,MAAMtI,IAAM+gF,EAAEY,IAAI3hF,KAAO2oF,EAAEhH,IAAI3hF,GAClD,OAAO,EAKX,OAAO,CACT,CA+gwBgC4/Q,CAAiB39Q,KAAK,GAAG3I,cAAkB2jK,GAKvE,GAJAh7J,KAAK,GAAG3I,cAAmB2jK,EAIvB0iH,EAAqB,CACvB,MAAM3jR,EAAW,CACf6jR,eAAgB5iH,GAOlB,OALAllE,EAAGolC,QAAQ,CACT7jI,KAAM,wBACN0C,kBAEFiG,KAAKi9Q,uBAAuB5lR,EAE9B,CACA2I,KAAK,GAAG3I,wBACR2I,KAAKw2M,QAAQ,UAAUx2M,KAAK,GAAG3I,yBAA4BA,qEAAyE,CAClIqjN,WAAY68D,EAAO7mB,WAAa6mB,EAAO7mB,UAAUh6O,GACjDskJ,SAAU20C,GAAkB30C,KAG1Bh7J,KAAK,GAAG3I,sBAA2B,KAGvC2I,KAAKw2M,QAAQ,GAAGn/M,uCAChB2I,KAAKi9Q,uBAAuB5lR,GAC5B2I,KAAK6iK,MAAM3nC,QAAQ,CACjB7jI,KAAM,QACNkI,KAAM,OAAOlI,yBAEF,aAATA,GAKJy+F,EAAG40K,gBAAgB,CACjBziQ,MAAO,CACLoG,QAAS,aAAahX,mCAExB+rN,0BAA2BvgG,MAE/B,CASA46J,iBAAAA,GACE,GAAIz9Q,KAAK6iK,MAAMnF,UAAY19J,KAAK6iK,MAAMo8B,UACpC,OAEF,MAAMh7B,EAAcjkK,KAAK6iK,MAAMoB,cACzBjJ,EAAWh7J,KAAK6iK,MAAM7H,WAC5B,GAAIh7J,KAAKs8Q,mBAAqBr4G,KAAiBjJ,EAAS38J,QAAU4lK,EAAcmrC,IAAmBp0C,EAASt7E,IAAIs7E,EAAS38J,OAAS,IAMhI,OAAO2B,KAAK48Q,eAEd,GAAI58Q,KAAKq8Q,oBAAsB,GAAKp4G,IAAgBjkK,KAAKs8Q,iBACvDt8Q,KAAKq8Q,qBACLr8Q,KAAK69Q,gBACA,GAAI55G,IAAgBjkK,KAAKs8Q,iBAC9Bt8Q,KAAKq8Q,yBACA,CACLr8Q,KAAKo8Q,cAAcjjR,KAAK0hK,GAAiB,CAAC76J,KAAKs8Q,iBAAkBr4G,KACjE,MAAMlqK,EAAW,CACf+jR,aAAc99Q,KAAKo8Q,eAErBp8Q,KAAKumP,oBAAoBrrH,QAAQ,CAC/B7jI,KAAM,sBACN0C,aAEFiG,KAAKq8Q,mBAAqB,EAC1Br8Q,KAAKs8Q,iBAAmBr4G,CAC1B,CACF,CAOA64G,gBAAAA,GACE98Q,KAAKq8Q,mBAAqB,CAC5B,CAQAiB,cAAAA,GAEE,IADgBt9Q,KAAK6iK,MAAMo8B,UAEzB,OAAO,EAMT,MAAMxxB,EAAWztK,KAAKytK,WAChBxJ,EAAcjkK,KAAK6iK,MAAMoB,cAE/B,IAAIk7C,EACJ,GAF6Bn/M,KAAK+9Q,qBAAqBtwG,EAAUxJ,EAAajkK,KAAKgiI,QAAShiI,KAAKk8Q,kCAEvE,CAGxB/8D,EAFoB1xC,EAAS/tF,IAAI+tF,EAASpvK,OAAS,EAGrD,CACA,GAAI2B,KAAKg+Q,sBAAsBvwG,EAAUxJ,GAAc,CACrD,MAAMgc,EAAgBxS,EAASpnK,MAAM,GAGrC84M,EAASl/B,GAGTA,IAAkBxS,EAAS/tF,IAAI,GAAK,EAAI0vH,GAC1C,CACA,GAAsB,qBAAX+P,EAGT,OAFAn/M,KAAKw2M,QAAQ,8CAA8CvyC,yBAAwCwrC,GAAehiC,kBAA8B0xC,MAChJn/M,KAAK6iK,MAAMmG,eAAem2C,IACnB,EAET,MAAMitC,EAAgBpsP,KAAKumP,oBAAoB4F,eACzCnxF,EAAWh7J,KAAK6iK,MAAM7H,WACtBo1F,EAAgBhE,EAAc8S,YAAc9S,EAAcgE,gBAAkB,KAC5ED,EAAgB/D,EAAc4S,YAAc5S,EAAc+D,gBAAkB,KAC5EnuH,EAAQhiI,KAAKgiI,QAGbi8I,EAAsBj8I,EAAMlD,mBAAqBkD,EAAMlD,mBAAkE,GAA5CkD,EAAMnD,eAAiBswE,IAGpG+uE,EAAkB,CAAC9tB,EAAeD,GACxC,IAAK,IAAIpyP,EAAI,EAAGA,EAAImgR,EAAgB7/Q,OAAQN,IAAK,CAE/C,IAAKmgR,EAAgBngR,GACnB,SAKF,GAHkB+xM,GAAYouE,EAAgBngR,GAAIkmK,GAGlCg6G,EACd,OAAO,CAEX,CACA,MAAME,EAAY3uE,GAAcx0C,EAAUiJ,GAG1C,OAAyB,IAArBk6G,EAAU9/Q,SAGd8gN,EAASg/D,EAAU93Q,MAAM,GAAK+oM,GAC9BpvM,KAAKw2M,QAAQ,2BAA2B2nE,EAAU93Q,MAAM,gCAAqC49J,kBAA4Bk7C,MACzHn/M,KAAK6iK,MAAMmG,eAAem2C,IACnB,EACT,CAOA0+D,QAAAA,GACE,GAAI79Q,KAAK48Q,eACP,OAGF,MAAM34G,EAAcjkK,KAAK6iK,MAAMoB,cACzBjJ,EAAWh7J,KAAK6iK,MAAM7H,WACtBojH,EAAe7uE,GAAUv0C,EAAUiJ,GASzC,OAAIm6G,EAAa//Q,QAAU4lK,EAAc,GAAKm6G,EAAa1+L,IAAI,IAC7D1/E,KAAK88Q,mBACL98Q,KAAK6iK,MAAMmG,eAAe/E,GAC1BjkK,KAAKw2M,QAAQ,cAAcvyC,qCAAoDm6G,EAAa/3Q,MAAM,SAAS+3Q,EAAa1+L,IAAI,2EAE5H1/E,KAAK6iK,MAAM3nC,QAAQ,CACjB7jI,KAAM,QACNkI,KAAM,8BAPV,CAWF,CAUAq9Q,YAAAA,GACE,MAAMnvG,EAAWztK,KAAKytK,WAChBxJ,EAAcjkK,KAAK6iK,MAAMoB,cAC/B,GAAIjkK,KAAK6iK,MAAMo8B,UAEb,OAAO,EAET,GAAIj/L,KAAKg+Q,sBAAsBvwG,EAAUxJ,GAAc,CACrD,MAAMo6G,EAAY5wG,EAAS/tF,IAAI+tF,EAASpvK,OAAS,GASjD,OARA2B,KAAKw2M,QAAQ,mCAAmCvyC,2CAA0Do6G,KAC1Gr+Q,KAAK88Q,mBACL98Q,KAAK6iK,MAAMmG,eAAeq1G,GAE1Br+Q,KAAK6iK,MAAM3nC,QAAQ,CACjB7jI,KAAM,QACNkI,KAAM,qBAED,CACT,CACA,MAAM6sP,EAAgBpsP,KAAK6iK,MAAM0jC,IAAIggD,oBAAoB4F,eACnDnxF,EAAWh7J,KAAK6iK,MAAM7H,WAM5B,GALuBh7J,KAAKs+Q,gBAAgB,CAC1CluB,cAAehE,EAAcgE,gBAC7BD,cAAe/D,EAAc+D,gBAC7BlsF,gBAcA,OAPAjkK,KAAK88Q,mBACL98Q,KAAK6iK,MAAMmG,eAAe/E,GAE1BjkK,KAAK6iK,MAAM3nC,QAAQ,CACjB7jI,KAAM,QACNkI,KAAM,yBAED,EAET,MAAM4+Q,EAAY3uE,GAAcx0C,EAAUiJ,GAE1C,OAAIk6G,EAAU9/Q,OAAS,IACrB2B,KAAKw2M,QAAQ,cAAcvyC,oBAA8Bk6G,EAAU93Q,MAAM,MACzErG,KAAK88Q,mBACL98Q,KAAKu+Q,YAAYt6G,IACV,EAIX,CACA85G,oBAAAA,CAAqBtwG,EAAUxJ,EAAapiC,GAAoD,IAA1Cq6I,EAAgCjyQ,UAAA5L,OAAA,QAAA/D,IAAA2P,UAAA,IAAAA,UAAA,GACpF,IAAKwjK,EAASpvK,OAEZ,OAAO,EAET,IAAImgR,EAAa/wG,EAAS/tF,IAAI+tF,EAASpvK,OAAS,GAAK+wM,GACrD,MAAM99B,GAAUzvC,EAASb,QACnBy9I,EAAiD,kBAAhC58I,EAAS/C,mBAIhC,OAHIwyC,IAAWmtG,GAAWvC,KACxBsC,EAAa/wG,EAAS/tF,IAAI+tF,EAASpvK,OAAS,GAA+B,EAA1BwjI,EAAShD,gBAExDolC,EAAcu6G,CAIpB,CACAR,qBAAAA,CAAsBvwG,EAAUxJ,GAC9B,SAAIwJ,EAASpvK,QAEbovK,EAASpnK,MAAM,GAAK,GAAK49J,EAAcwJ,EAASpnK,MAAM,GAAKrG,KAAKm8Q,uBAIlE,CACAmC,eAAAA,CAAeI,GAIZ,IAKGxgP,GATU,cACdiyN,EAAa,cACbC,EAAa,YACbnsF,GACDy6G,EAEC,GAAKvuB,EAAL,CAKA,GAAIA,EAAc9xP,QAAU+xP,EAAc/xP,OAAQ,CAIhD,MAAMsgR,EAAiBpvE,GAAU4gD,EAAelsF,EAAc,GACxD26G,EAAarvE,GAAU4gD,EAAelsF,GACtC46G,EAAatvE,GAAU6gD,EAAensF,GACxC46G,EAAWxgR,SAAWugR,EAAWvgR,QAAUsgR,EAAetgR,SAC5D6/B,EAAM,CACJ73B,MAAOs4Q,EAAej/L,IAAI,GAC1BA,IAAKm/L,EAAWn/L,IAAI,IAG1B,KAAO,CACa8vH,GAAc2gD,EAAelsF,GAGhC5lK,SACb6/B,EAAMl+B,KAAK8+Q,uBAAuB3uB,EAAelsF,GAErD,CACA,QAAI/lI,IACFl+B,KAAKw2M,QAAQ,mCAAmCt4K,EAAI73B,YAAY63B,EAAIwhD,gCAAqCukF,MAClG,EA1BT,CA6BF,CAQAs6G,WAAAA,CAAYQ,GACV,MAAM/jH,EAAWh7J,KAAK6iK,MAAM7H,WACtBiJ,EAAcjkK,KAAK6iK,MAAMoB,cACzBk6G,EAAY3uE,GAAcx0C,EAAUiJ,GAE1C,GADAjkK,KAAK88Q,mBACoB,IAArBqB,EAAU9/Q,QAAgB4lK,IAAgB86G,EAC5C,OAEF/+Q,KAAKw2M,QAAQ,eAAgB,eAAgBvyC,EAAa,yBAA0B86G,EAAsB,mBAAoBZ,EAAU93Q,MAAM,IAE9IrG,KAAK6iK,MAAMmG,eAAem1G,EAAU93Q,MAAM,GAAK8oM,IAC/C,MAAMp1M,EAAW,CACfilR,QAAS,CACPx/Q,KAAMykK,EACNvT,GAAIytH,EAAU93Q,MAAM,KAGxBrG,KAAKumP,oBAAoBrrH,QAAQ,CAC/B7jI,KAAM,YACN0C,aAEFiG,KAAK6iK,MAAM3nC,QAAQ,CACjB7jI,KAAM,QACNkI,KAAM,gBAEV,CACAu/Q,sBAAAA,CAAuB9jH,EAAUiJ,GAuB/B,MAAMg7G,EArjxBO,SAAUjkH,GACzB,GAAIA,EAAS38J,OAAS,EACpB,OAAOw8J,KAET,MAAMhwB,EAAS,GACf,IAAK,IAAI9sI,EAAI,EAAGA,EAAIi9J,EAAS38J,OAAQN,IAAK,CACxC,MAAMsI,EAAQ20J,EAASt7E,IAAI3hF,EAAI,GACzB2hF,EAAMs7E,EAAS30J,MAAMtI,GAC3B8sI,EAAO1xI,KAAK,CAACkN,EAAOq5E,GACtB,CACA,OAAOm7E,GAAiBhwB,EAC1B,CA0ixBiBq0I,CAASlkH,GACtB,IAAK,IAAIj9J,EAAI,EAAGA,EAAIkhR,EAAK5gR,OAAQN,IAAK,CACpC,MAAMsI,EAAQ44Q,EAAK54Q,MAAMtI,GACnB2hF,EAAMu/L,EAAKv/L,IAAI3hF,GAErB,GAAIkmK,EAAc59J,EAAQ,GAAK49J,EAAc59J,EAAQ,EACnD,MAAO,CACLA,QACAq5E,MAGN,CACA,OAAO,IACT,EAEF,MAAMy/L,GAAiB,CACrBC,cAAe,GACfC,SAAAA,CAAUvgR,GAKR,OAAOA,EAJMkB,KAAKk8J,KAAK,CACrBojH,0BAA0B,IAEL/yG,gBAAkBvsK,KAAKqhM,gBAEhD,GAUIk+E,GAAa,SAAUn0H,EAAQ9xJ,GACnC,IAAIkmR,EAAa,EACbrgE,EAAS,EACb,MAAMsgE,EAAev1I,GAAMi1I,GAAgB7lR,GAC3C8xJ,EAAOiG,OAAM,KACXjG,EAAOlwB,QAAQ,CACb7jI,KAAM,QACNkI,KAAM,gCACN,IASJ,MAAMmgR,EAAwB,WACxBvgE,GACF/zD,EAAO6Y,YAAYk7C,EAEvB,EAQM9yC,EAAY,SAAU60B,GACR,OAAdA,QAAoC5mM,IAAd4mM,IAG1Bie,EAAS/zD,EAAOruB,aAAela,KAAYuoC,EAAO6Y,eAAiB,EACnE7Y,EAAO+B,IAAI,iBAAkBuyH,GAC7Bt0H,EAAOr/I,IAAIm1L,GACX91C,EAAOlwB,QAAQ,CACb7jI,KAAM,QACNkI,KAAM,qBAER6rJ,EAAOkG,OACT,EAQMrqJ,EAAe,WAGnB,GAAI20F,KAAKC,MAAQ2jL,EAA0C,IAA7BC,EAAaL,cACzCh0H,EAAOlwB,QAAQ,CACb7jI,KAAM,QACNkI,KAAM,kCAHV,CAOA,GAAKkgR,EAAaJ,WAA+C,oBAA3BI,EAAaJ,UAKnD,OADAG,EAAa5jL,KAAKC,MACX4jL,EAAaJ,UAAUxgR,KAAKusJ,EAAQihB,GAJzCu/B,GAAQ51G,IAAI/tF,MAAM,wEAFpB,CAOF,EAOM03Q,EAAgB,WACpBv0H,EAAOnwB,IAAI,iBAAkBykJ,GAC7Bt0H,EAAOnwB,IAAI,QAASh0H,GACpBmkJ,EAAOnwB,IAAI,UAAW0kJ,EACxB,EAYAv0H,EAAOpwB,GAAG,QAAS/zH,GACnBmkJ,EAAOpwB,GAAG,UAAW2kJ,GAGrBv0H,EAAOw0H,oBARc,SAAUpjE,GAC7BmjE,IACAJ,GAAWn0H,EAAQoxD,EACrB,CAMF,EAQMojE,GAAsB,SAAUtmR,GACpCimR,GAAWv/Q,KAAM1G,EACnB,EACA,IAAIumR,GAAY,SAKhB,MAAM5jE,GAAM,CACV1F,kBACArE,YACA2L,SACAiiE,2BAA4B55B,GAC5B65B,0BAp8U6C,WAG7C,MAAMj+I,EAAY9hI,KAAK8hI,UAAUi/B,KAAKj/B,UAAUn2H,OAAOumM,GAAST,WAEhE4yC,GAAWviH,GAAW,CAAChjD,EAAG4H,IAAM+9J,GAAyB3lK,EAAG4H,KAO5D,OAD2Bo7C,EAAUn2H,QAAOk2H,KAAc4hH,GAAkBzjP,KAAK8hI,UAAUi/B,KAAMl/B,GAAUyE,QACjF,IAAM,IAClC,EAw7UE4/G,yBACA85B,+BAvjVqC,SAAUC,GAC/C,IAAIC,GAAW,EACXC,GAAuB,EAC3B,GAAIF,EAAQ,GAAKA,EAAQ,EACvB,MAAM,IAAIxmR,MAAM,2DAElB,OAAO,WACL,IAAI0sP,EAAanmP,KAAKomP,qBAAsBrkG,IAAAA,kBAAiC,EAiB7E,OAhBK55D,MAAMnoF,KAAKqmP,oBACdF,EAAanmP,KAAKqmP,kBAEhB65B,EAAU,IACZA,EAAUlgR,KAAKsmP,gBACf65B,EAAsBngR,KAAKsmP,iBAOzBtmP,KAAKsmP,gBAAkB,GAAKtmP,KAAKsmP,kBAAoB65B,IACvDD,EAAUD,EAAQjgR,KAAKsmP,iBAAmB,EAAI25B,GAASC,EACvDC,EAAsBngR,KAAKsmP,iBAEtB1B,GAAe5kP,KAAK8hI,UAAUi/B,KAAMm/G,EAAS5/L,SAAS6jK,GAAqBnkP,KAAK6iK,MAAMn6J,KAAM,SAAU,IAAMy9O,EAAY7lK,SAAS6jK,GAAqBnkP,KAAK6iK,MAAMn6J,KAAM,UAAW,IAAMy9O,EAAYnmP,KAAK8kP,iCAAkC9kP,KAAKumP,oBACzP,CACF,EA8hVE9B,4BACA27B,0BAvwVgC,SAAUv6K,EAAM6wD,GAChD,IAAI2pH,EACAC,EAWJ,OAVIz6K,EAAK1xF,WAAWmpH,YAAcz3B,EAAK1xF,WAAWmpH,WAAW19B,QAC3DygL,EAAYx6K,EAAK1xF,WAAWmpH,WAAW19B,OAEzCygL,EAAYA,GAAat+H,IAAAA,OAAgB8vD,UACrCn7C,EAAMviJ,WAAWmpH,YAAco5B,EAAMviJ,WAAWmpH,WAAW19B,QAC7D0gL,EAAa5pH,EAAMviJ,WAAWmpH,WAAW19B,OAE3C0gL,EAAaA,GAAcv+H,IAAAA,OAAgB8vD,UAGvCwuE,IAAcC,GAAcz6K,EAAK1xF,WAAWopH,WAAam5B,EAAMviJ,WAAWopH,UACrE13B,EAAK1xF,WAAWopH,UAAYm5B,EAAMviJ,WAAWopH,UAE/C8iJ,EAAYC,CACrB,EAuvVE/lR,IAAKuhN,MAGP38M,OAAO0M,KAAK45M,IAAQ9sN,SAAQk7D,IAC1B10D,OAAOka,eAAe4iM,GAAKpoJ,EAAM,CAC/B/yD,IAAGA,KACD8qM,GAAQ51G,IAAI3qF,KAAK,aAAawoD,mDACvB4xJ,GAAO5xJ,IAEhBlzD,GAAAA,CAAIrJ,GACFs0M,GAAQ51G,IAAI3qF,KAAK,aAAawoD,mDACT,kBAAVv8D,GAAsBA,EAAQ,EACvCs0M,GAAQ51G,IAAI3qF,KAAK,gBAAgBwoD,wCAGnC4xJ,GAAO5xJ,GAAQv8D,CACjB,GACA,IAEJ,MAAMipR,GAAoB,cASpBC,GAAuB,SAAUjyE,EAAek8D,GACpD,MAAM7Z,EAAc6Z,EAAezoI,QACnC,IAAI4sD,GAAiB,EACrB,IAAK,IAAI7wL,EAAI,EAAGA,EAAIwwM,EAAclwM,OAAQN,IACxC,GAAIwwM,EAAcxwM,GAAG2Y,KAAOk6O,EAAYl6O,GAAI,CAC1Ck4K,EAAgB7wL,EAChB,KACF,CAEFwwM,EAAcT,eAAiBlf,EAC/B2f,EAAcrzE,QAAQ,CACpB0zD,gBACAv3L,KAAM,UAEV,EAiBA4kN,GAAIlxC,cAAgB,WAClB,OAAO6gC,GAAQ51G,IAAI3qF,KAAK,0EAC1B,EACA,MA6GMo1Q,GAA4BC,IAK5B,IAL6B,OACjCt1H,EAAM,iBACNu1H,EAAgB,WAChBC,EAAU,cACVC,GACDH,EACC,IAAKt1H,EAAO01H,IAAIC,oBACd,OAAO12K,QAAQG,UAUjB,MACMw2K,EA/D4BC,EAACn/I,EAAWo/I,IACvCp/I,EAAU5qI,QAAO,CAACiqR,EAAet/I,KACtC,IAAKA,EAASP,kBACZ,OAAO6/I,EAET,MAAMC,EAAoBF,EAAWhqR,QAAO,CAACmqR,EAAejpI,KAC1D,MAAMkpI,EAAmBz/I,EAASP,kBAAkB8W,GAMpD,OALIkpI,GAAoBA,EAAiB5/I,OACvC2/I,EAAcjpI,GAAa,CACzB1W,KAAM4/I,EAAiB5/I,OAGpB2/I,CAAa,GACnB,CAAC,GAIJ,OAHIliR,OAAO0M,KAAKu1Q,GAAmB/iR,QACjC8iR,EAAchoR,KAAKioR,GAEdD,CAAa,GACnB,IA6C0BF,CADXL,EAAaC,EAAcn5K,OAAO,CAACk5K,IAAeC,EACA1hR,OAAO0M,KAAK80Q,IAC1EY,EAAiC,GACjCC,EAA4B,GA4BlC,OAtBAR,EAAqBroR,SAAQyoR,IAC3BI,EAA0BroR,KAAK,IAAIkxG,SAAQ,CAACG,EAAS4/D,KACnDhf,EAAOyX,MAAM1V,IAAI,oBAAqB3iD,EAAQ,KAEhD+2K,EAA+BpoR,KAAK,IAAIkxG,SAAQ,CAACG,EAAS4/D,KACxDhf,EAAO01H,IAAIC,oBAAoB,CAC7BG,WAAYE,IACX5qR,IACGA,EACF4zK,EAAO5zK,GAGTg0G,GAAS,GACT,IACD,IAQEH,QAAQ/0C,KAAK,CAIpB+0C,QAAQq4C,IAAI6+H,GAEZl3K,QAAQ/0C,KAAKksN,IAA4B,EAoBrCC,GAAkBC,IAKlB,IALmB,OACvBt2H,EAAM,iBACNu1H,EAAgB,MAChB3+I,EAAK,WACL4+I,GACDc,EACC,MAAMC,EA7LcC,EAACN,EAAkBtvI,EAAc6vI,KACrD,IAAKP,EACH,OAAOA,EAET,IAAIl6I,EAAS,CAAC,EACV4K,GAAgBA,EAAa79H,YAAc69H,EAAa79H,WAAWg8H,SACrE/I,EAASg8G,GAAgBl8G,EAAY8K,EAAa79H,WAAWg8H,UAE3D0xI,GAAiBA,EAAc1tQ,YAAc0tQ,EAAc1tQ,WAAWg8H,SACxE/I,EAAOb,MAAQs7I,EAAc1tQ,WAAWg8H,QAE1C,MAAM2xI,EAAmBr6I,EAAgBL,EAAOd,OAC1Cy7I,EAAmBt6I,EAAgBL,EAAOb,OAE1Cy7I,EAAwB,CAAC,EAC/B,IAAK,MAAM5pI,KAAakpI,EACtBU,EAAsB5pI,GAAa,CAAC,EAChC2pI,IACFC,EAAsB5pI,GAAW2pI,iBAAmBA,GAElDD,IACFE,EAAsB5pI,GAAW0pI,iBAAmBA,GAQlD9vI,EAAa1Q,mBAAqB0Q,EAAa1Q,kBAAkB8W,IAAcpG,EAAa1Q,kBAAkB8W,GAAW1W,OAC3HsgJ,EAAsB5pI,GAAW1W,KAAOsQ,EAAa1Q,kBAAkB8W,GAAW1W,MAIzC,kBAAhC4/I,EAAiBlpI,KAC1B4pI,EAAsB5pI,GAAWv+I,IAAMynR,EAAiBlpI,IAG5D,OAAOlO,GAAMo3I,EAAkBU,EAAsB,EAuJ/BJ,CAAcjB,EAAkB3+I,EAAO4+I,GAC7D,QAAKe,IAGLv2H,EAAOi2C,gBAAgB6/E,WAAaS,IAGhCA,IAAkBv2H,EAAO01H,OAC3Bl1E,GAAQ51G,IAAI3qF,KAAK,kEACV,GAEE,EAEP42Q,GAAqBA,KACzB,IAAKlgI,IAAAA,aACH,OAAO,KAET,MAAMmgI,EAAengI,IAAAA,aAAsBgtC,QAAQwxF,IACnD,IAAK2B,EACH,OAAO,KAET,IACE,OAAOlnR,KAAKC,MAAMinR,EACpB,CAAE,MAAOvqR,GAEP,OAAO,IACT,GA8CIwqR,GAAmBA,CAAC5nR,EAAKjE,KACxBiE,EAAI2hN,sBACP3hN,EAAI2hN,oBAAsB,IAAIt7M,KAEhCrG,EAAI2hN,oBAAoBn7M,IAAIzK,EAAS,EASjC8rR,GAAoBA,CAAC7nR,EAAKjE,KACzBiE,EAAI4hN,uBACP5hN,EAAI4hN,qBAAuB,IAAIv7M,KAEjCrG,EAAI4hN,qBAAqBp7M,IAAIzK,EAAS,EASlC+rR,GAAsBA,CAAC9nR,EAAKjE,KAC3BiE,EAAI2hN,sBAGT3hN,EAAI2hN,oBAAoBj7M,OAAO3K,GAC1BiE,EAAI2hN,oBAAoB96M,aACpB7G,EAAI2hN,oBACb,EASIomE,GAAuBA,CAAC/nR,EAAKjE,KAC5BiE,EAAI4hN,uBAGT5hN,EAAI4hN,qBAAqBl7M,OAAO3K,GAC3BiE,EAAI4hN,qBAAqB/6M,aACrB7G,EAAI4hN,qBACb,EAMFF,GAAIsmE,kBAAoB,WACtB,IAAKrhI,MAAeA,IAAAA,cAClB,OAAO,EAET,MAAM5a,EAAQ4a,IAAAA,cAAyB,SAEvC,IAAK0qD,GAAQxgC,QAAQ,SAASj1J,cAC5B,OAAO,EAcT,MAXgB,CAEhB,gCAEA,gBAEA,kBAEA,wBAEA,kBAAmB,gBAAiB,uBACrB+2G,MAAK,SAAUs1J,GAC5B,MAAO,kBAAkB/iR,KAAK6mI,EAAMukC,YAAY23G,GAClD,GACF,CAxBwB,GAyBxBvmE,GAAIwmE,sBACGvhI,KAAeA,IAAAA,eAA6B0qD,GAAQxgC,QAAQ,SAASj1J,gBAGnE,kBAAkB1W,KAAKyhJ,IAAAA,cAAyB,SAAS2pB,YAAY,yBAE9EoxC,GAAIymE,qBAAuBrrR,GACZ,QAATA,EACK4kN,GAAIsmE,kBAEA,SAATlrR,GACK4kN,GAAIwmE,mBASfxmE,GAAI9lM,YAAc,WAChB,OAAOy1L,GAAQ51G,IAAI3qF,KAAK,0EAC1B,EAOA4wM,GAAI1hN,IAAIooR,UAAY,SAAUrsR,GAC5B6rR,GAAiBlmE,GAAI1hN,IAAKjE,EAC5B,EAOA2lN,GAAI1hN,IAAIqoR,WAAa,SAAUtsR,GAC7B8rR,GAAkBnmE,GAAI1hN,IAAKjE,EAC7B,EAOA2lN,GAAI1hN,IAAIsoR,WAAa,SAAUvsR,GAC7B+rR,GAAoBpmE,GAAI1hN,IAAKjE,EAC/B,EAOA2lN,GAAI1hN,IAAIuoR,YAAc,SAAUxsR,GAC9BgsR,GAAqBrmE,GAAI1hN,IAAKjE,EAChC,EACA,MAAMu+H,GAAY+2E,GAAQn3C,aAAa,aAYvC,MAAMsuH,WAAmBluJ,GACvBv1H,WAAAA,CAAYkF,EAAQ03J,EAAM5iK,GAUxB,GATAyiI,MAAMmgC,EAAM5iK,EAAQitM,KAGoB,kBAA7BjtM,EAAQ0pR,mBACjBhjR,KAAK0xJ,SAASthB,UAAY92I,EAAQ0pR,kBAEpChjR,KAAKw2M,QAAU1H,GAAO,cAGlB5yC,EAAKxK,UAAYwK,EAAKxK,SAASqkC,SAAU,CAC3C,MAAMktF,EAAUr3E,GAAQC,UAAU3vC,EAAKxK,SAASqkC,UAChD/1L,KAAKuxJ,QAAU0xH,CACjB,CAMA,GALAjjR,KAAK6iK,MAAQ3G,EACbl8J,KAAKkjR,QAAU1+Q,EACfxE,KAAKm+O,MAAQ,CAAC,EACdn+O,KAAKmjR,yBAA0B,EAC/BnjR,KAAKojR,cACDpjR,KAAK0xJ,SAAS2xH,gBAAkBnnH,EAAKwO,2BAA6BxO,EAAK0O,0BACzE1O,EAAKwO,2BAA0B,GAC/BxO,EAAK0O,2BAA0B,QAC1B,GAAI5qK,KAAK0xJ,SAAS2xH,iBAAmBnnH,EAAKonH,2BAA6BpnH,EAAKuuB,2BAGjF,MAAM,IAAIhxL,MAAM,4EAIlBuG,KAAKg7H,GAAGkmB,IAAY,CAAC,mBAAoB,yBAA0B,sBAAuB,uBAAuB3+C,IAC/G,MAAMkmD,EAAoBvH,IAAAA,mBAAgCA,IAAAA,yBAAsCA,IAAAA,sBAAmCA,IAAAA,oBAC/HuH,GAAqBA,EAAkBvkD,SAASlkG,KAAK6iK,MAAMn6J,MAC7D1I,KAAKumP,oBAAoBimB,qBAKzBxsQ,KAAKumP,oBAAoBktB,WAC3B,IAEFzzQ,KAAKg7H,GAAGh7H,KAAK6iK,MAAO,WAAW,WACzB7iK,KAAKmjR,wBACPnjR,KAAKmjR,yBAA0B,EAGjCnjR,KAAKgpK,eAAehpK,KAAK6iK,MAAMoB,cACjC,IACAjkK,KAAKg7H,GAAGh7H,KAAK6iK,MAAO,SAAS,WAGvB7iK,KAAK6iK,MAAM56J,SAAWjI,KAAKumP,qBAC7BvmP,KAAKumP,oBAAoBwrB,cAE7B,IACA/xQ,KAAKg7H,GAAGh7H,KAAK6iK,MAAO,OAAQ7iK,KAAKsxJ,KACnC,CAQA8xH,WAAAA,GAA0B,IAAd9pR,EAAO2Q,UAAA5L,OAAA,QAAA/D,IAAA2P,UAAA,GAAAA,UAAA,GAAG,CAAC,EAkBrB,GAjBAjK,KAAK0xJ,SAAWxnB,GAAMlqI,KAAK0xJ,SAAUp4J,GAErC0G,KAAK0xJ,SAASj0J,gBAAkBuC,KAAK0xJ,SAASj0J,kBAAmB,EACjEuC,KAAK0xJ,SAASozF,kCAAsF,IAAnD9kP,KAAK0xJ,SAASozF,iCAC/D9kP,KAAK0xJ,SAAS00F,oBAAsBpmP,KAAK0xJ,SAAS00F,sBAAuB,EACzEpmP,KAAK0xJ,SAAS6xH,6BAAoF,qBAA9CvjR,KAAKkjR,QAAQK,6BAA+CvjR,KAAKkjR,QAAQK,6BAA+BvjR,KAAK0xJ,SAAS6xH,+BAAgC,EAC1MvjR,KAAK0xJ,SAAS45G,mBAAqBtrQ,KAAK0xJ,SAAS45G,qBAAsB,EACvEtrQ,KAAK0xJ,SAAS8xH,yBAA2BxjR,KAAK0xJ,SAAS8xH,2BAA4B,EACnFxjR,KAAK0xJ,SAAS+6F,yBAA2BzsP,KAAK0xJ,SAAS+6F,2BAA4B,EACnFzsP,KAAK0xJ,SAASmlD,iBAAmB72M,KAAK0xJ,SAASmlD,kBAAoB,GACnE72M,KAAK0xJ,SAASolD,iBAAmB92M,KAAK0xJ,SAASolD,kBAAoB,GACnE92M,KAAK0xJ,SAASm8F,oBAAsB7tP,KAAK0xJ,SAASm8F,sBAAuB,EACzE7tP,KAAK0xJ,SAASqlD,OAAgC,IAAxB/2M,KAAK0xJ,SAASqlD,MACpC/2M,KAAK0xJ,SAASggH,eAAiB1xQ,KAAK0xJ,SAASggH,iBAAkB,EACR,kBAA5C1xQ,KAAK0xJ,SAAS0xD,4BACvBpjN,KAAK0xJ,SAAS0xD,0BAA4B,IAEL,kBAA5BpjN,KAAK0xJ,SAASthB,WACnBpwI,KAAK0xJ,SAAS6xH,6BAA8B,CAC9C,MAAMrB,EAAeD,KACjBC,GAAgBA,EAAa9xI,YAC/BpwI,KAAK0xJ,SAASthB,UAAY8xI,EAAa9xI,UACvCpwI,KAAK6iK,MAAM3nC,QAAQ,CACjB7jI,KAAM,QACNkI,KAAM,sCAGN2iR,GAAgBA,EAAa72B,aAC/BrrP,KAAK0xJ,SAAS25F,WAAa62B,EAAa72B,WACxCrrP,KAAK6iK,MAAM3nC,QAAQ,CACjB7jI,KAAM,QACNkI,KAAM,sCAGZ,CAIqC,kBAA5BS,KAAK0xJ,SAASthB,YACvBpwI,KAAK0xJ,SAASthB,UAAYq1E,GAAOK,mBAInC9lN,KAAK0xJ,SAAS+/G,yBAA2BzxQ,KAAK0xJ,SAAS+/G,0BAA4BzxQ,KAAK0xJ,SAASthB,YAAcq1E,GAAOK,kBAEtH,CAAC,kBAAmB,sBAAuB,mBAAoB,mCAAoC,YAAa,mBAAoB,mBAAoB,sBAAuB,mBAAoB,0BAA2B,iBAAkB,yBAA0B,QAAS,qBAAsB,2BAA4B,2BAA4B,uBAAwB,0BAA0BntN,SAAQszL,IACrX,qBAAzBjsL,KAAKkjR,QAAQj3F,KACtBjsL,KAAK0xJ,SAASu6B,GAAUjsL,KAAKkjR,QAAQj3F,GACvC,IAEFjsL,KAAK8kP,iCAAmC9kP,KAAK0xJ,SAASozF,iCACtD9kP,KAAKomP,oBAAsBpmP,KAAK0xJ,SAAS00F,oBACzC,MAAMC,EAAmBrmP,KAAK0xJ,SAAS20F,iBAEP,kBAArBA,GAAiCA,GAAoB,IAC9DrmP,KAAKqmP,iBAAmBA,EAE5B,CAEAo9B,UAAAA,GAAyB,IAAdnqR,EAAO2Q,UAAA5L,OAAA,QAAA/D,IAAA2P,UAAA,GAAAA,UAAA,GAAG,CAAC,EACpBjK,KAAKojR,YAAY9pR,EACnB,CAOAyS,GAAAA,CAAIA,EAAK1U,GAEP,IAAK0U,EACH,OA7SgB4jQ,MA+SlB3vQ,KAAKojR,cAELpjR,KAAK0xJ,SAAS3lJ,IAhTgE,KAD5D4jQ,EAiTgB3vQ,KAAKkjR,QAAQn3Q,KAhTrC/U,cAAc8B,QAAQ,0CACzBkC,KAAKC,MAAM00Q,EAAQ92P,UAAU82P,EAAQ72Q,QAAQ,KAAO,IAGtD62Q,EA6SL3vQ,KAAK0xJ,SAASwK,KAAOl8J,KAAK6iK,MAC1B7iK,KAAK0xJ,SAAS6/G,UAAYt1D,GAC1Bj8M,KAAK0xJ,SAAS84F,WAAaviH,EAAyB5wI,GAEpD2I,KAAK0xJ,SAASytD,OAASh9G,IACrBniG,KAAK6iK,MAAMmG,eAAe7mE,EAAK,EAGjCniG,KAAK0xJ,SAASH,QAAUvxJ,KAAKuxJ,QAC7BvxJ,KAAKumP,oBAAsB,IAAI+qB,GAAmBtxQ,KAAK0xJ,UACvD,MAAMgyH,EAAyBx5I,GAAM,CACnCiyI,uBAAwB/sE,IACvBpvM,KAAK0xJ,SAAU,CAChB+b,SAAUA,IAAMztK,KAAKytK,WACrBzrC,MAAOA,IAAMhiI,KAAKumP,oBAAoBvkH,QACtC+iH,mBAAoB/kP,KAAKumP,sBAE3BvmP,KAAK2jR,iBAAmB,IAAI1H,GAAgByH,GAC5C1jR,KAAK4jR,iCACL5jR,KAAKumP,oBAAoBvrH,GAAG,SAAS,KACnC,MAAMowB,EAASwgD,GAAQjyC,QAAQ35J,KAAK6iK,MAAMnR,SAASqkC,UACnD,IAAI9tL,EAAQjI,KAAKumP,oBAAoBt+O,MAChB,kBAAVA,GAAuBA,EAAMtK,KAEZ,kBAAVsK,IAChBA,EAAQ,CACNoG,QAASpG,EACTtK,KAAM,IAJRsK,EAAMtK,KAAO,EAOfytJ,EAAOnjJ,MAAMA,EAAM,IAErB,MAAM47Q,EAAkB7jR,KAAK0xJ,SAASggH,eAAiBz1D,GAAI+jE,+BAA+B,KAAQ/jE,GAAI6jE,2BAGtG9/Q,KAAKumP,oBAAoBgmB,eAAiBvsQ,KAAKusQ,eAAiBvsQ,KAAKusQ,eAAextQ,KAAKiB,MAAQ6jR,EAAgB9kR,KAAKiB,MACtHA,KAAKumP,oBAAoBouB,sBAAwB14D,GAAI8jE,0BAA0BhhR,KAAKiB,MAEpFA,KAAK8hI,UAAY9hI,KAAKumP,oBAAoBnkC,oBAC1CpiN,KAAKorP,YAAcprP,KAAKumP,oBAAoB6E,YAI5CjsP,OAAO2kK,iBAAiB9jK,KAAM,CAC5BusQ,eAAgB,CACdzrQ,GAAAA,GACE,OAAOd,KAAKumP,oBAAoBgmB,cAClC,EACA5rQ,GAAAA,CAAI4rQ,GACFvsQ,KAAKumP,oBAAoBgmB,eAAiBA,EAAextQ,KAAKiB,KAChE,GAEFqrP,WAAY,CACVvqP,GAAAA,GACE,OAAOd,KAAKumP,oBAAoB8qB,mBAAmBhmB,WAAWzgE,IAChE,EACAjqL,GAAAA,CAAI0qP,GACFrrP,KAAKumP,oBAAoB8qB,mBAAmBhmB,WAAWzgE,KAAOygE,EAG9DrrP,KAAKumP,oBAAoB8qB,mBAAmBhmB,WAAWzyO,MAAQ,CACjE,GAEFw3H,UAAW,CACTtvI,GAAAA,GACE,IAAIgjR,EAAqB9jR,KAAKumP,oBAAoB8qB,mBAAmBjhI,UACrE,MAAM2zI,EAAqBhiI,IAAAA,UAAmBiiI,YAAcjiI,IAAAA,UAAmBkiI,eAAiBliI,IAAAA,UAAmBmiI,iBAC7GC,EAAyB,IAC/B,GAAInkR,KAAK0xJ,SAAS8xH,0BAA4BO,EAAoB,CAGhE,MAAMK,EAAkE,IAA9BL,EAAmBM,SAAkB,IAK7EP,EADEM,GAAqCD,GAA0BL,GAAsBK,EAClE7gR,KAAK69E,IAAI2iM,EAAoBM,GAE7BA,CAEzB,CACA,OAAON,CACT,EACAnjR,GAAAA,CAAIyvI,GACFpwI,KAAKumP,oBAAoB8qB,mBAAmBjhI,UAAYA,EAIxDpwI,KAAKumP,oBAAoB8qB,mBAAmBhmB,WAAa,CACvDzgE,KAAM,EACNhyK,MAAO,EAEX,GAWF0tO,gBAAiB,CACfxlP,GAAAA,GACE,MAAMwjR,EAAe,GAAKtkR,KAAKowI,WAAa,GAC5C,IAAIm0I,EAEFA,EADEvkR,KAAKqrP,WAAa,EACJ,EAAIrrP,KAAKqrP,WAET,EAGlB,OADsB/nP,KAAK80H,MAAM,GAAKksJ,EAAeC,GAEvD,EACA5jR,GAAAA,GACEirM,GAAQ51G,IAAI/tF,MAAM,8CACpB,KAGAjI,KAAK0xJ,SAASthB,YAChBpwI,KAAKowI,UAAYpwI,KAAK0xJ,SAASthB,WAE7BpwI,KAAK0xJ,SAAS25F,aAChBrrP,KAAKqrP,WAAarrP,KAAK0xJ,SAAS25F,YAElClsP,OAAO2kK,iBAAiB9jK,KAAKm+O,MAAO,CAClC/tG,UAAW,CACTtvI,IAAKA,IAAMd,KAAKowI,WAAa,EAC7BhlD,YAAY,GAEd8jK,cAAe,CACbpuP,IAAKA,IAAMd,KAAKumP,oBAAoBi+B,kBAAoB,EACxDp5L,YAAY,GAEd+jK,qBAAsB,CACpBruP,IAAKA,IAAMd,KAAKumP,oBAAoBk+B,yBAA2B,EAC/Dr5L,YAAY,GAEdgkK,sBAAuB,CACrBtuP,IAAKA,IAAMd,KAAKumP,oBAAoBm+B,0BAA4B,EAChEt5L,YAAY,GAEdikK,qBAAsB,CACpBvuP,IAAKA,IAAMd,KAAKumP,oBAAoBo+B,yBAA2B,EAC/Dv5L,YAAY,GAEdkkK,sBAAuB,CACrBxuP,IAAKA,IAAMd,KAAKumP,oBAAoBq+B,0BAA4B,EAChEx5L,YAAY,GAEd6jK,sBAAuB,CACrBnuP,IAAKA,IAAMd,KAAKumP,oBAAoBs+B,0BAA4B,EAChEz5L,YAAY,GAEdmkK,mBAAoB,CAClBzuP,IAAKA,IAAMd,KAAKumP,oBAAoBkwB,uBAAyB,EAC7DrrL,YAAY,GAEdokK,aAAc,CACZ1uP,IAAKA,IAAMd,KAAKumP,oBAAoBu+B,iBAAmB,EACvD15L,YAAY,GAEd25L,wBAAyB,CACvBjkR,IAAKA,IAAMd,KAAKumP,oBAAoB8sB,4BAA8B,EAClEjoL,YAAY,GAEd45L,yBAA0B,CACxBlkR,IAAKA,IAAMd,KAAKumP,oBAAoB+sB,6BAA+B,EACnEloL,YAAY,GAEd65L,oBAAqB,CACnBnkR,IAAKA,IAAMd,KAAKumP,oBAAoBgtB,wBAA0B,EAC9DnoL,YAAY,GAEd85L,iBAAkB,CAChBpkR,IAAKA,IAAMd,KAAKumP,oBAAoBitB,qBAAuB,EAC3DpoL,YAAY,GAEd4vE,SAAU,CACRl6J,IAAKA,IAAM6uM,GAAkB3vM,KAAK6iK,MAAM7H,YACxC5vE,YAAY,GAEd64E,YAAa,CACXnjK,IAAKA,IAAMd,KAAK6iK,MAAMoB,cACtB74E,YAAY,GAEdi2G,cAAe,CACbvgM,IAAKA,IAAMd,KAAK6iK,MAAM0J,eACtBnhF,YAAY,GAEd+5L,YAAa,CACXrkR,IAAKA,IAAMd,KAAK6iK,MAAMxU,MACtBjjE,YAAY,GAEd2xC,SAAU,CACRj8H,IAAKA,IAAMd,KAAK6iK,MAAM9lC,WACtB3xC,YAAY,GAEd21E,KAAM,CACJjgK,IAAKA,IAAMd,KAAK8hI,UAAUi/B,KAC1B31E,YAAY,GAEdg6L,iBAAkB,CAChBtkR,IAAKA,IAAMd,KAAK6iK,MAAMxM,oBACtBjrE,YAAY,GAEdqiF,SAAU,CACR3sK,IAAKA,IAAM6uM,GAAkB3vM,KAAK6iK,MAAM4K,YACxCriF,YAAY,GAEdpH,UAAW,CACTljF,IAAKA,IAAM86F,KAAKC,MAChBzQ,YAAY,GAEdmsG,qBAAsB,CACpBz2L,IAAKA,IAAMd,KAAK6iK,MAAMqH,0BACtB9+E,YAAY,KAGhBprF,KAAK6iK,MAAM1V,IAAI,UAAWntJ,KAAKumP,oBAAoB+tB,eAAev1Q,KAAKiB,KAAKumP,sBAC5EvmP,KAAK6iK,MAAM7nC,GAAG,mBAAmB,KAC3Bh7H,KAAK0xJ,SAAS6xH,8BA9iBMjqR,KAC5B,IAAKyoJ,IAAAA,aACH,OAAO,EAET,IAAIsjI,EAAgBpD,KACpBoD,EAAgBA,EAAgBn7I,GAAMm7I,EAAe/rR,GAAWA,EAChE,IACEyoJ,IAAAA,aAAsBitC,QAAQuxF,GAAmBvlR,KAAK8B,UAAUuoR,GAClE,CAAE,MAAO1tR,GAKP,OAAO,CACT,CACoB,EAgiBd2tR,CAAsB,CACpBl1I,UAAWpwI,KAAKowI,UAChBi7G,WAAY/nP,KAAKq1K,MAAM34K,KAAKqrP,aAEhC,IAEFrrP,KAAKumP,oBAAoBvrH,GAAG,wBAAwB,KAphDxB,IAAUygJ,KAshDZz7Q,MAphDjBs4I,gBAAkB,KAC3B,MAAMyoB,EAAO06G,EAAWl1B,oBAAoBxlF,OACtCj/B,EAAYgQ,GAAYivB,GAAQ06G,EAAWl1B,oBAAoBvB,0BAA4BjkF,EAAKj/B,UACtG,OAAKA,EAGEA,EAAUn2H,QAAOq2H,IAAUwvE,GAAexvE,KAAQ3rH,KAAI,CAAC1e,EAAGoG,IAAM,IAAIy9Q,GAAeC,EAAY9jR,EAAGA,EAAE+e,MAFlG,EAEsG,CA8gDhF,IAE/B1W,KAAKumP,oBAAoB4F,eAAenxH,GAAG,wBAAwB,KACjEh7H,KAAKulR,WAAW,IAIlBvlR,KAAKg7H,GAAGh7H,KAAKumP,oBAAqB,YAAY,WAC5CvmP,KAAK6iK,MAAM3nC,QAAQ,WACrB,IAGAl7H,KAAKg7H,GAAGh7H,KAAKumP,oBAAqB,aAAa,WAC7CvmP,KAAKmjR,yBAA0B,CACjC,IACAnjR,KAAKwlR,sBAGAxlR,KAAK6iK,MAAMn6J,OAGhB1I,KAAKylR,gBAAkB1jI,IAAAA,IAAa0kE,gBAAgBzmN,KAAKumP,oBAAoB6E,aAC7EprP,KAAK6iK,MAAM92J,IAAI/L,KAAKylR,iBACtB,CACAC,kBAAAA,GACE,MAAMC,EAAsB3lR,KAAKumP,oBAAoByrB,YAAY/hI,MAAMs6H,qBACvEvqQ,KAAKw2M,QAAQ,wCACbiqE,GAA0B,CACxBr1H,OAAQprJ,KAAKuxJ,QACbovH,iBAAkB3gR,KAAKkjR,QAAQhC,WAC/BN,WAAY+E,GAAuBA,EAAoB3jJ,QACvD6+I,cAAe7gR,KAAK8hI,UAAUi/B,KAAKj/B,YAClCr3B,MAAK,KACNzqG,KAAKw2M,QAAQ,2BACbx2M,KAAKumP,oBAAoB4F,eAAeqS,gBAAgB,IACvD9zJ,OAAMl0G,IACPwJ,KAAKw2M,QAAQ,uCAAwChgN,GACrDwJ,KAAKuxJ,QAAQtpJ,MAAM,CACjBoG,QAAS,0CACT1Q,KAAM,GACN,GAEN,CACAioR,oBAAAA,GASE5lR,KAAKw2M,QAAQ,kEACbx2M,KAAK0lR,oBACP,CAUAH,SAAAA,GACE,MAAMI,EAAsB3lR,KAAKumP,oBAAoByrB,YAAY/hI,MAAMs6H,qBACjEsb,EAAqBpE,GAAgB,CACzCr2H,OAAQprJ,KAAKuxJ,QACbovH,iBAAkB3gR,KAAKkjR,QAAQhC,WAC/Bl/I,MAAOhiI,KAAK8hI,UAAUE,QACtB4+I,WAAY+E,GAAuBA,EAAoB3jJ,UAEzDhiI,KAAKuxJ,QAAQsR,MAAM7nC,GAAG,mBAAmBrjI,IACvCqI,KAAKumP,oBAAoB+0B,0BAA0B3jR,EAAE8pI,MAAO9pI,EAAEuE,OAAO,IAEvE8D,KAAK4lR,qBAAuB5lR,KAAK4lR,qBAAqB7mR,KAAKiB,MAC3DA,KAAKuxJ,QAAQsR,MAAM7nC,GAAG,gBAAiBh7H,KAAK4lR,sBACvCC,EAKL7lR,KAAK0lR,qBAHH1lR,KAAKumP,oBAAoB4F,eAAeqS,gBAI5C,CAQAgnB,mBAAAA,GACE,MAAMp6H,EAASwgD,GAAQjyC,QAAQ35J,KAAK6iK,MAAMnR,SAASqkC,UAG9C3qC,GAAWA,EAAOmjD,gBAAiBvuM,KAAK8lR,iBAG7C9lR,KAAK8lR,eAAiB16H,EAAOmjD,gBAC7BvuM,KAAKumP,oBAAoBvrH,GAAG,wBAAwB,MA93BxB,SAAUuzE,EAAehI,GACvDA,EAAIjuD,kBAAkB3/I,SAAQusP,IAC5B32C,EAAcR,gBAAgBm3C,EAAI,IAEpCs7B,GAAqBjyE,EAAehI,EAAIzkE,UAC1C,CA03BMikJ,CAAwB/lR,KAAK8lR,eAAgB9lR,KAAK,IAEpDA,KAAK8hI,UAAU9G,GAAG,eAAe,KAC/BwlJ,GAAqBxgR,KAAK8lR,eAAgB9lR,KAAK8hI,UAAU,IAE7D,CAKA,cAAOnsH,GACL,MAAO,CACL,0BAA2BkqQ,GAC3B,SA78BU,QA88BV,aA78BU,QA88BV,cA78BU,QA88BV,gBA78BQ,QA+8BZ,CAKAlqQ,OAAAA,GACE,OAAO3V,KAAKV,YAAYqW,SAC1B,CACAmpP,aAAAA,GACE,OAAOrB,GAAcqB,eACvB,CAKAxtG,IAAAA,GACEtxJ,KAAKumP,oBAAoBj1F,MAC3B,CAKA0X,cAAAA,CAAe/E,GACbjkK,KAAKumP,oBAAoBv9E,eAAe/E,EAC1C,CAKAlnC,QAAAA,GACE,OAAO/8H,KAAKumP,oBAAoBxpH,UAClC,CAKA0wC,QAAAA,GACE,OAAOztK,KAAKumP,oBAAoB94E,UAClC,CAKAlyC,OAAAA,GACMv7H,KAAK2jR,kBACP3jR,KAAK2jR,iBAAiBpoJ,UAEpBv7H,KAAKumP,qBACPvmP,KAAKumP,oBAAoBhrH,UAEvBv7H,KAAK8lR,gBACP9lR,KAAK8lR,eAAevqJ,UAElBv7H,KAAK6iK,OAAS7iK,KAAK6iK,MAAM0jC,YACpBvmM,KAAK6iK,MAAM0jC,IAEhBvmM,KAAKylR,iBAAmB1jI,IAAAA,IAAamlE,kBACvCnlE,IAAAA,IAAamlE,gBAAgBlnN,KAAKylR,iBAClCzlR,KAAKylR,gBAAkB,MAErBzlR,KAAK6iK,OACP7iK,KAAK6iK,MAAM5nC,IAAI,gBAAiBj7H,KAAK4lR,sBAEvC7pJ,MAAMR,SACR,CACAyqJ,oBAAAA,CAAqB7jL,EAAM7rG,GACzB,OAAO0nN,GAAe,CACpBn8E,SAAU7hI,KAAKumP,oBAAoBvkH,QACnC7/B,OACA7rG,YAEJ,CAEA2oN,iBAAAA,CAAkBN,EAAaroN,GAAiD,IAAvC8oN,IAAcn1M,UAAA5L,OAAA,QAAA/D,IAAA2P,UAAA,KAAAA,UAAA,GAASi1M,EAAUj1M,UAAA5L,OAAA,QAAA/D,IAAA2P,UAAA,GAAAA,UAAA,GAAG,EAC3E,OAAOg1M,GAAkB,CACvBN,cACA98E,SAAU7hI,KAAKumP,oBAAoBvkH,QACnCk9E,aACAE,iBACAD,OAAQn/M,KAAK0xJ,SAASytD,OACtBjjD,KAAMl8J,KAAK0xJ,SAASwK,KACpB5lK,YAEJ,CAMA2vR,cAAAA,GAMEjmR,KAAKzF,IAAIooR,UAAYrsR,IACnB6rR,GAAiBniR,KAAKzF,IAAKjE,EAAS,EAQtC0J,KAAKzF,IAAIqoR,WAAatsR,IACpB8rR,GAAkBpiR,KAAKzF,IAAKjE,EAAS,EAQvC0J,KAAKzF,IAAIsoR,WAAavsR,IACpB+rR,GAAoBriR,KAAKzF,IAAKjE,EAAS,EAQzC0J,KAAKzF,IAAIuoR,YAAcxsR,IACrBgsR,GAAqBtiR,KAAKzF,IAAKjE,EAAS,EAI1C0J,KAAKuxJ,QAAQr2B,QAAQ,kBACvB,CACA0oJ,8BAAAA,GACmC,CAAC,wBAAyB,wBAAyB,2BAA4B,8BAA+B,yBAGtHjrR,SAAQy8L,IAC/Bp1L,KAAKumP,oBAAoBvrH,GAAGo6D,GAAWr7L,IACrCiG,KAAKuxJ,QAAQr2B,QAAQljI,EAAS,CAAC,EAAG+B,GAAU,GAC5C,IALoB,CAAC,YAAa,uBAOtBpB,SAAQy8L,IACtBp1L,KAAK2jR,iBAAiB3oJ,GAAGo6D,GAAWr7L,IAClCiG,KAAKuxJ,QAAQr2B,QAAQljI,EAAS,CAAC,EAAG+B,GAAU,GAC5C,GAEN,EAUF,MAAMmsR,GAAmB,CACvB3mR,KAAM,yBACNqrM,QAASi1E,GACT3zG,eAAAA,CAAgBlB,GAAsB,IAAd1xK,EAAO2Q,UAAA5L,OAAA,QAAA/D,IAAA2P,UAAA,GAAAA,UAAA,GAAG,CAAC,EACjC,MAAMw1Q,EAAev1I,GAAM0hE,GAAQtyM,QAASA,GAC5C,OAAO4sR,GAAiBr7G,YAAYG,EAAO3zK,KAAMooR,EACnD,EACAjzG,YAAAA,CAAahoK,EAAQ03J,GAAoB,IAAd5iK,EAAO2Q,UAAA5L,OAAA,QAAA/D,IAAA2P,UAAA,GAAAA,UAAA,GAAG,CAAC,EACpC,MAAMw1Q,EAAev1I,GAAM0hE,GAAQtyM,QAASA,GAK5C,OAJA4iK,EAAKqqC,IAAM,IAAIw8E,GAAWv+Q,EAAQ03J,EAAMujH,GACxCvjH,EAAKqqC,IAAIhsM,IAAMuhN,KACf5/C,EAAKqqC,IAAI0/E,iBACT/pH,EAAKqqC,IAAIx6L,IAAIvH,EAAOuH,IAAKvH,EAAOnN,MACzB6kK,EAAKqqC,GACd,EACA17B,WAAAA,CAAYxzK,EAAMiC,GAChB,MAAM6sR,EAAal+I,EAAyB5wI,GAC5C,IAAK8uR,EACH,MAAO,GAET,MAAM9C,EAAiB6C,GAAiBE,kBAAkB9sR,GAG1D,OAF6B2iN,GAAIymE,qBAAqByD,IACH9C,EACxB,QAAU,EACvC,EACA+C,iBAAAA,GAAgC,IAAd9sR,EAAO2Q,UAAA5L,OAAA,QAAA/D,IAAA2P,UAAA,GAAAA,UAAA,GAAG,CAAC,EAC3B,MAAM,IACJs8L,EAAM,CAAC,GACLjtM,EACE+sR,IAA0Bz6E,GAAQ1lD,QAAQD,eAAiB2lD,GAAQ1lD,QAAQF,SAC3E,eACJq9H,EAAiBgD,GACf9/E,EACJ,OAAO88E,CACT,GAUO17I,EAAqB,0BAI5BikE,GAAQxgC,QAAQ,SAASS,sBAAsBq6G,GAAkB,GAEnEt6E,GAAQm3E,WAAaA,GACrBn3E,GAAQs6E,iBAAmBA,GAC3Bt6E,GAAQqQ,IAAMA,GACTrQ,GAAQW,KACXX,GAAQxyC,kBAAkB,MAAO6iD,IAEnCrQ,GAAQtyM,QAAQitM,IAAMqF,GAAQtyM,QAAQitM,KAAO,CAAC,EACzCqF,GAAQ3B,WAAc2B,GAAQ3B,UAAU,wBAC3C2B,GAAQd,eAAe,sBAAuB80E,2FC51qDhD,8RAeM0G,EAAiB,CACrBC,YAAa,CACX,MAAQ,MACR,gBAAiB,MACjB,mBAAoB,OAEtBC,UAAW,CACT9kK,SAAS,EACT5oG,KAAM,SAAS0gC,GACb,MAAO,UAAYA,EAAO1gC,IAC3B,EACDqpF,KAAM,SAAS3oD,GACb,OAAOA,EAAO2oD,IACf,GAEHskL,aAAa,CACX/kK,SAAS,EACTglK,YAAa,EACb5tQ,KAAM,SAAS0gC,GACb,MAAO,kBAAoBA,EAAOmtO,WACnC,EACDh2L,MAAO,CACL,MAAQ,OACR,OAAU,MACV,mBAAoB,kBACpB,MAAS,QACT,YAAa,SAGjBi2L,cAAe,SAASptO,GAAU,EAClCqtO,gBAAiB,SAASrtO,EAAQ3gD,GAAS,EAC3CiuR,QAAS,IAIX,SAASC,IACP,IAAI1/L,GAAI,IAAIuU,MAAOmnC,UAMnB,MALW,uCAAuCx9H,QAAQ,SAAS,SAAC0K,GAClE,IAAI2/F,GAAKvoB,EAAkB,GAAd/jF,KAAKC,UAAa,GAAK,EAEpC,OADA8jF,EAAI/jF,KAAK80H,MAAM/wC,EAAE,KACN,KAAHp3E,EAAS2/F,EAAO,EAAFA,EAAM,GAAMvwG,SAAS,GAC5C,GAEF,CASD,SAAS2nR,EAAmBv7Q,GAC1B,IAAIw7Q,EACEC,EAAsB,CAC1Bn6M,IAAK,EACLzqD,OAAQ,EACRujF,KAAM,EACNjG,MAAO,EACPC,OAAQ,EACR62D,MAAO,GAGT,IACEuwH,EAAkBx7Q,EAAQ+iH,uBAC3B,CAAC,MAAO72H,GACPsvR,EAAkBC,CACnB,CAED,OAAOD,CACR,CAED,IAAME,GAAc,EAEpB,SAASC,EAA6B9tR,GAGpC,IAAK+tR,EAAA98J,QAAQkiF,aAAc,KAChBlpD,EAAT,SAAiBjsJ,GACf,QAASA,GAA0B,YAAjB,qBAAOA,EAAP,YAAAgwR,EAAOhwR,KACE,oBAAzB+H,SAASR,KAAKvH,IACdA,EAAMgI,cAAgBH,MACzB,EACQstM,EAAT,SAASA,EAAa86E,EAAiBC,GAErC,IAAM9uR,EAAS,CAAC,EAkBhB,MAjBgB,CAAC6uR,EAASC,GAClB7uR,SAAQ,SAAA6L,GACTA,GAGLrF,OAAO0M,KAAKrH,GAAQ7L,SAAQ,SAAAI,GAC1B,IAAIzB,EAAQkN,EAAOzL,GACdwqJ,EAAQjsJ,IAIRisJ,EAAQ7qJ,EAAOK,MAClBL,EAAOK,GAAO,CAAC,GAEjBL,EAAOK,GAAO0zM,EAAa/zM,EAAOK,GAAMzB,IANtCoB,EAAOK,GAAOzB,CAOjB,GACF,IACMoB,CACR,EACD2uR,EAAA98J,QAAQkiF,aAAeA,CACxB,CAEI46E,EAAA98J,QAAQk8B,WACX4gI,EAAA98J,QAAQk8B,SAAW,SAASn9I,EAAiBy7E,EAAet8E,GAC1D,IAAMC,EAAK2+Q,EAAA98J,QAAQmvC,OAAOt6J,UAAUqnJ,SAASn9I,EAASy7E,GAMtD,OALMt8E,GACJtJ,OAAO0M,KAAKpD,GAAO9P,SAAQ,SAAAI,GACzB2P,EAAGmP,aAAa9e,EAAK0P,EAAM1P,GAC5B,IAEI2P,CACR,GAOH,IAAI++Q,EAAUJ,EAAA98J,QAAQkiF,aAAa65E,EAAgBhtR,GAC/CouR,EAAqC,CAAC,EACtCC,EAA8B,GAC9BC,EAAsBT,EACtB/7H,EAAeprJ,KACfwmR,EAAe,KACfC,EAAe,KACfoB,EAAeV,EAEnB,SAASW,IAEPH,EAAYv6J,MAAK,SAACtuC,EAAG4H,GACnB,OAAO+gM,EAAQjB,UAAUrkL,KAAKrjB,GAAK2oM,EAAQjB,UAAUrkL,KAAKzb,EAC3D,GACF,CAED,SAASqhM,EAAWC,GAClBA,EAAWrvR,SAAQ,SAAC6gD,GAClBA,EAAOzgD,IAAMguR,IAEb37H,EAAO1iJ,KAAKyrJ,cAAc,wBACvBvtJ,YAAYqhR,EAAgBzuO,IAG/BkuO,EAAWluO,EAAOzgD,KAAOygD,EACzBmuO,EAAYxuR,KAAKqgD,EAClB,IAEDsuO,GACD,CAED,SAASI,EAAY1uO,GACnB,OAAQiuO,EAAQjB,UAAUrkL,KAAK3oD,GAAU4xG,EAAOruB,WAAc,GAC/D,CAED,SAASorJ,EAAmB3uO,EAAgB4uO,GAC1CA,EAAUn3J,UAAV,eAAoCz3E,EAAOorF,OAAS,IAEpDzlI,OAAO0M,KAAK47Q,EAAQlB,aAAa5tR,SAAQ,SAAAI,GACvCqvR,EAAUz3L,MAAM53F,GAAO0uR,EAAQlB,YAAYxtR,EAC5C,IAGD,IAAMm+D,EAAQ1d,EAAO2oD,KAAOipD,EAAOruB,WAOnC,IANI7lE,EAAQ,GAAKA,EAAQ,KACvBkxN,EAAUz3L,MAAM+wB,QAAU,QAI5B0mK,EAAUz3L,MAAMkV,KAAOqiL,EAAY1uO,GAAU,IACzCA,EAAOujF,SACTqrJ,EAAUz3L,MAAMiP,MAASpmD,EAAOujF,SAAWquB,EAAOruB,WAAc,IAAM,IACtEqrJ,EAAUz3L,MAAM03L,WAAa,UACxB,CACL,IAAMC,EAAoBtB,EAAmBoB,GAC7CA,EAAUz3L,MAAM03L,WAAaC,EAAkB1oL,MAAQ,EAAI,IAC5D,CACF,CAED,SAASqoL,EAAgBzuO,GAEvB,IAAI4uO,EAAYf,EAAA98J,QAAQk8B,SAAS,MAAO,CAAC,EAAG,CAC1C,kBAAmBjtG,EAAOzgD,IAC1B,mBAAoB0uR,EAAQjB,UAAUrkL,KAAK3oD,KAuB7C,OApBA2uO,EAAmB3uO,EAAQ4uO,GAG3BA,EAAUl1L,iBAAiB,SAAS,SAASv7F,GAC3C,IAAIqjG,GAAiB,EAMrB,GALqC,oBAA1BysL,EAAQb,gBAEjB5rL,GAAmD,IAAlCysL,EAAQb,cAAcptO,KAGpCwhD,EAAgB,CACnB,IAAIjiG,EAAMiH,KAAK4W,aAAa,mBAC5Bw0I,EAAO6Y,YAAYwjH,EAAQjB,UAAUrkL,KAAKulL,EAAW3uR,IACtD,CACF,IAEG0uR,EAAQjB,UAAU9kK,SACpB6mK,EAAyBH,GAGpBA,CACR,CAED,SAASI,EAAcl3B,GAErBq2B,EAAYhvR,SAAQ,SAAC6gD,GACnB,IAAI4uO,EAAYh9H,EAAO1iJ,KAAKyrJ,cAAc,gCAAkC36G,EAAOzgD,IAAK,MACpF0vR,EAAahB,EAAQjB,UAAUrkL,KAAK3oD,IAEpC83M,GAAS82B,EAAUxxQ,aAAa,sBAAwB6xQ,KAC1DN,EAAmB3uO,EAAQ4uO,GAC3BA,EAAUvwQ,aAAa,mBAAoB4wQ,GAE9C,IACDX,GACD,CAED,SAASY,EAAcC,GAEflC,IACJoB,EAAeV,EACfV,EAAa91L,MAAMi4L,WAAa,UAElChB,EAAqBT,EAErB,IAAI0B,EAAiC,GACrCF,EAAWhwR,SAAQ,SAACE,GAClB,IAAI2gD,EAASmuO,EAAY9uR,GACzB,GAAI2gD,EAAQ,QAEHkuO,EAAWluO,EAAOzgD,KACzB8vR,EAAgB1vR,KAAKN,GAGrB,IAAI6P,EAAK0iJ,EAAO1iJ,KAAKyrJ,cAAc,gCAAkC36G,EAAOzgD,IAAK,MACjF2P,GAAMA,EAAGa,WAAW8I,YAAY3J,EACjC,CACF,IAGDmgR,EAAgBxuJ,UAChBwuJ,EAAgBlwR,SAAQ,SAACmwR,GACvBnB,EAAYvgK,OAAO0hK,EAAa,EACjC,IAGDhB,GACD,CAGD,SAASS,EAAyBH,GAChCA,EAAUl1L,iBAAiB,aAAa,WACtC,IAAI15C,EAASkuO,EAAWU,EAAUxxQ,aAAa,oBAC/C,GAAM4vQ,EAAW,CACfA,EAAUryH,cAAc,kBAAkBtN,UAAY4gI,EAAQjB,UAAU1tQ,KAAK0gC,GAE7EgtO,EAAU71L,MAAMkV,KAAOqiL,EAAY1uO,GAAU,IAC7C,IAAIuvO,EAAoB/B,EAAmBR,GACvC8B,EAAoBtB,EAAmBoB,GAC3C5B,EAAU71L,MAAM03L,YACbrrJ,WAAW+rJ,EAAkBnpL,MAAQ,GAAKo9B,WAAWsrJ,EAAkB1oL,MAAQ,GAAK,KACvF4mL,EAAU71L,MAAMi4L,WAAa,SAC9B,CACF,IAEDR,EAAUl1L,iBAAiB,YAAW,WAC9BszL,IACJA,EAAU71L,MAAMi4L,WAAa,SAEhC,GACF,CAED,SAASI,IACPxC,EAAYa,EAAA98J,QAAQk8B,SAAS,MAAO,CAClCx1B,UAAW,UACXzjC,UAAW,uEAEb49D,EAAO1iJ,KAAKyrJ,cAAc,wBAAwBvtJ,YAAY4/Q,EAC/D,CAGD,SAASyC,IACP,GAAKxB,EAAQhB,aAAa/kK,WAAWkmK,EAAqB,GAA1D,CAIA,IAAI3jH,EAAc7Y,EAAO6Y,cACrBzqH,EAASmuO,EAAYC,GACrBa,EAAahB,EAAQjB,UAAUrkL,KAAK3oD,GAGtCyqH,GAAewkH,GACfxkH,GAAgBwkH,EAAahB,EAAQhB,aAAaC,aAE9CmB,IAAiBD,IACnBC,EAAeD,EACXnB,IACFA,EAAatyH,cAAc,2BAA2B3mE,UAAYi6L,EAAQhB,aAAa3tQ,KAAK0gC,KAI5FitO,IACFA,EAAa91L,MAAMi4L,WAAa,aAGlCf,EAAeV,EACXV,IACFA,EAAa91L,MAAMi4L,WAAa,UAvBnC,CA0BF,CAGD,SAASM,IACPzC,EAAeY,EAAA98J,QAAQk8B,SAAS,MAAO,CACrCx1B,UAAW,oBACXzjC,UAAW,+CAEbruF,OAAO0M,KAAK47Q,EAAQhB,aAAa91L,OAAOh4F,SAAQ,SAAAI,GAC1C0tR,IACFA,EAAa91L,MAAM53F,GAAO0uR,EAAQhB,aAAa91L,MAAM53F,GAExD,IACDqyJ,EAAO1iJ,KAAK9B,YAAY6/Q,GACxBoB,EAAeV,CAChB,CAED,SAASgC,IACPC,IACAH,IACA3vR,EAAQ+vR,+BAAiC/vR,EAAQ+vR,+BAClD,CAED,SAASD,IAMP,GAAKzB,EAAYtpR,OAAjB,CAIA,IAAIirR,EAAoB,SAACzwR,GACvB,OAAIA,EAAQ8uR,EAAYtpR,OAAS,EACxBopR,EAAQjB,UAAUrkL,KAAKwlL,EAAY9uR,EAAQ,IAG7CuyJ,EAAOruB,UACf,EACGknC,EAAc7Y,EAAO6Y,cACrBslH,EAAiBpC,EAErB,GAAIS,IAAuBT,EAAY,CAErC,IAAIqC,EAAiBF,EAAkB1B,GACvC,GACE3jH,GAAewjH,EAAQjB,UAAUrkL,KAAKwlL,EAAYC,KAClD3jH,EAAculH,EAEd,OAIF,GACE5B,IAAuBD,EAAYtpR,OAAS,GAC5C4lK,IAAgB7Y,EAAOruB,WAEvB,MAEH,CAGD,GAAIknC,EAAcwjH,EAAQjB,UAAUrkL,KAAKwlL,EAAY,IACnD4B,EAAiBpC,OAGjB,IAAK,IAAIppR,EAAI,EAAGA,EAAI4pR,EAAYtpR,OAAQN,IAEtC,GADAyrR,EAAiBF,EAAkBvrR,GAEjCkmK,GAAewjH,EAAQjB,UAAUrkL,KAAKwlL,EAAY5pR,KAClDkmK,EAAculH,EACd,CACAD,EAAiBxrR,EACjB,KACD,CAKDwrR,IAAmB3B,IAEjB2B,IAAmBpC,GAAc7tR,EAAQutR,iBAC3CvtR,EAAQutR,gBAAgBc,EAAY4B,GAAiBA,GAEvD3B,EAAqB2B,EAtDtB,CAwDF,CAGD,SAASre,IACHuc,EAAQjB,UAAU9kK,SACpBsnK,IAIF59H,EAAO07H,QAAQ2C,YACf1B,EAAWN,EAAQX,SAEfW,EAAQhB,aAAa/kK,SACvBwnK,IAEFC,IACA/9H,EAAOpwB,GAAG,aAAcmuJ,GACxB/9H,EAAOnwB,IAAI,iBACZ,CAGDmwB,EAAOpwB,GAAG,kBAAkB,WAC1BkwI,GACD,IAGD9/G,EAAO07H,QAAU,CACf4C,WAAY,WACV,OAAO/B,CACR,EACD7oR,KAAO,WAGL,IADA,IAAMmlK,EAAc7Y,EAAO6Y,cAClBlmK,EAAI,EAAGA,EAAI4pR,EAAYtpR,OAAQN,IAAK,CAC3C,IAAI0qR,EAAahB,EAAQjB,UAAUrkL,KAAKwlL,EAAY5pR,IACpD,GAAI0qR,EAAaxkH,EAAa,CAC5B7Y,EAAO6Y,YAAYwkH,GACnB,KACD,CACF,CACF,EACDxyI,KAAO,WAGL,IADA,IAAMguB,EAAc7Y,EAAO6Y,cAClBlmK,EAAI4pR,EAAYtpR,OAAS,EAAGN,GAAK,EAAIA,IAAK,CACjD,IAAI0qR,EAAahB,EAAQjB,UAAUrkL,KAAKwlL,EAAY5pR,IAEpD,GAAI0qR,EAAa,GAAMxkH,EAErB,YADA7Y,EAAO6Y,YAAYwkH,EAGtB,CACF,EACD1nR,IAAM,SAASinR,GAEbD,EAAWC,EACZ,EACDz3Q,OAAQ,SAASo4Q,GAEfD,EAAcC,EACf,EACDc,UAAW,WAET,IADA,IAAId,EAAa,GACR5qR,EAAI,EAAGA,EAAI4pR,EAAYtpR,OAAQN,IACtC4qR,EAAWxvR,KAAK4E,GAElB2qR,EAAcC,EACf,EAED3pG,WAAY,SAASsyE,GAEnBk3B,EAAcl3B,EACf,EACD/wP,MAAO,SAASynR,GAEd58H,EAAO07H,QAAQ2C,YACf1B,EAAWC,EACZ,EACDzxK,QAAS,WAEP60C,EAAO07H,QAAQ2C,YACfhD,GAAgBA,EAAal2Q,SAC7Bi2Q,GAAaA,EAAUj2Q,SACvB66I,EAAOnwB,IAAI,aAAcguJ,UAClB79H,EAAO07H,OACf,EAEJ,CAEDO,EAAA98J,QAAQggF,OAAO,UAAW68E,mDC5e1B,IAAIlxR,EAASC,EAAQ,KAEjBwzR,EAAQvzR,EAAOC,QAAU,CAC3BuzR,OAAQzzR,EAAQ,KAChBiuK,OAAQjuK,EAAQ,KAChB0zR,UAAW1zR,EAAQ,MAGrBD,EAAOyzR,MAAQA,EACfzzR,EAAO0zR,OAASD,EAAMC,OAEtB,IAAIE,EAAUH,EAAMvlH,OAChB2lH,EAAaJ,EAAME,UACnBG,EAAe9zR,EAAOkuK,OACtB6lH,EAAkB/zR,EAAO2zR,UAE7BF,EAAM7kM,KAAO,WACX5uF,EAAOkuK,OAAS0lH,EAChB5zR,EAAO2zR,UAAYE,CACrB,EAEAJ,EAAMO,QAAU,WACdh0R,EAAOkuK,OAAS4lH,EAChB9zR,EAAO2zR,UAAYI,CACrB,EAEK/zR,EAAOkuK,QACVulH,EAAM7kM,sBC9BR,IAAIrD,EAAWtrF,EAAQ,IAEnBg0R,EAAahrR,OAAOm3G,QAAW,WACjC,SAAS3N,IAAK,CACd,OAAO,SAASlqG,GACd,GAAyB,IAArBwL,UAAU5L,OACZ,MAAM,IAAI5E,MAAM,kDAGlB,OADAkvG,EAAEvpG,UAAYX,EACP,IAAIkqG,CACb,CACF,CATmC,GAenC,SAASyhL,EAAaC,EAAWh8Q,GAC/BrO,KAAKT,KAAO,eACZS,KAAKrC,KAAO0sR,EAAU1sR,KACtBqC,KAAKqO,QAAUA,GAAWg8Q,EAAUh8Q,OACtC,CAiBA,SAASi8Q,EAAehlR,GAEtB,SAASilR,EAAergM,EAAGzJ,EAAGjC,EAAGV,GAC/B,OAAiB,MAAL,EAAJoM,GAA0B,IAAL,EAAJzJ,IAAmB,EAAJjC,IAAc,EAAJV,GAAS,GAC7D,CAEA,IAAI2C,EAAIn7E,EAAMs5E,MAAM,wCACpB,OAAK6B,EAIDA,EAAE,GAEG8pM,EAAe9pM,EAAE,GAAIA,EAAE,GAAIA,EAAE,GAAGl7E,QAAQ,IAAK,IAAKk7E,EAAE,IAClDA,EAAE,GAAK,GAGT8pM,EAAe9pM,EAAE,GAAIA,EAAE,GAAI,EAAIA,EAAE,IAGjC8pM,EAAe,EAAG9pM,EAAE,GAAIA,EAAE,GAAIA,EAAE,IAZhC,IAcX,CAIA,SAAS+pM,IACPxqR,KAAK+sH,OAASo9J,EAAW,KAC3B,CAuDA,SAASM,EAAanlR,EAAOhP,EAAUo0R,EAAeC,GACpD,IAAIxf,EAASwf,EAAarlR,EAAMrO,MAAM0zR,GAAc,CAACrlR,GACrD,IAAK,IAAIvH,KAAKotQ,EACZ,GAAyB,kBAAdA,EAAOptQ,GAAlB,CAGA,IAAI6sR,EAAKzf,EAAOptQ,GAAG9G,MAAMyzR,GACzB,GAAkB,IAAdE,EAAGvsR,OAKP/H,EAFQs0R,EAAG,GAAGrzR,OACNqzR,EAAG,GAAGrzR,OANd,CASJ,CAEA,SAASszR,EAASvlR,EAAOy2J,EAAK+uH,GAE5B,IAAIC,EAASzlR,EAEb,SAAS0lR,IACP,IAAIlrI,EAAKwqI,EAAehlR,GACxB,GAAW,OAAPw6I,EACF,MAAM,IAAIsqI,EAAaA,EAAaa,OAAOC,aACrB,wBAA0BH,GAIlD,OADAzlR,EAAQA,EAAMC,QAAQ,iBAAkB,IACjCu6I,CACT,CAqFA,SAASqrI,IACP7lR,EAAQA,EAAMC,QAAQ,OAAQ,GAChC,CAMA,GAHA4lR,IACApvH,EAAIzkC,UAAY0zJ,IAChBG,IAC2B,WAAvB7lR,EAAMgB,OAAO,EAAG,GAClB,MAAM,IAAI8jR,EAAaA,EAAaa,OAAOC,aACpB,qEACAH,GAEzBzlR,EAAQA,EAAMgB,OAAO,GACrB6kR,IACApvH,EAAIC,QAAUgvH,IAGdG,IApGA,SAA4B7lR,EAAOy2J,GACjC,IAAIkH,EAAW,IAAIunH,EAEnBC,EAAanlR,GAAO,SAAU+6E,EAAGrrE,GAC/B,OAAQqrE,GACR,IAAK,SAEH,IAAK,IAAItiF,EAAI+sR,EAAWzsR,OAAS,EAAGN,GAAK,EAAGA,IAC1C,GAAI+sR,EAAW/sR,GAAG2Y,KAAO1B,EAAG,CAC1BiuJ,EAAStiK,IAAI0/E,EAAGyqM,EAAW/sR,GAAGqtR,QAC9B,KACF,CAEF,MACF,IAAK,WACHnoH,EAASmS,IAAI/0F,EAAGrrE,EAAG,CAAC,KAAM,OAC1B,MACF,IAAK,OACH,IAAIq2Q,EAAOr2Q,EAAE/d,MAAM,KACfq0R,EAAQD,EAAK,GACjBpoH,EAASsoH,QAAQlrM,EAAGirM,GACpBroH,EAASob,QAAQh+F,EAAGirM,IAASroH,EAAStiK,IAAI,eAAe,GACzDsiK,EAASmS,IAAI/0F,EAAGirM,EAAO,CAAC,SACJ,IAAhBD,EAAKhtR,QACP4kK,EAASmS,IAAI,YAAai2G,EAAK,GAAI,CAAC,QAAS,SAAU,QAEzD,MACF,IAAK,WACHA,EAAOr2Q,EAAE/d,MAAM,KACfgsK,EAASob,QAAQh+F,EAAGgrM,EAAK,IACL,IAAhBA,EAAKhtR,QACP4kK,EAASmS,IAAI,gBAAiBi2G,EAAK,GAAI,CAAC,QAAS,SAAU,QAE7D,MACF,IAAK,OACHpoH,EAASob,QAAQh+F,EAAGrrE,GACpB,MACF,IAAK,QACHiuJ,EAASmS,IAAI/0F,EAAGrrE,EAAG,CAAC,QAAS,SAAU,MAAO,OAAQ,UAG1D,GAAG,IAAK,MAGR+mJ,EAAIqvH,OAASnoH,EAASniK,IAAI,SAAU,MACpCi7J,EAAIghB,SAAW9Z,EAASniK,IAAI,WAAY,IACxC,IACEi7J,EAAIt/B,KAAOwmC,EAASniK,IAAI,OAAQ,OAClC,CAAE,MAAOnJ,GAAI,CACbokK,EAAIyvH,UAAYvoH,EAASniK,IAAI,YAAa,SAC1Ci7J,EAAI0vH,YAAcxoH,EAASniK,IAAI,eAAe,GAC9Ci7J,EAAI36J,KAAO6hK,EAASniK,IAAI,OAAQ,KAEhC,IACEi7J,EAAIqwE,MAAQnpE,EAASniK,IAAI,QAAS,SACpC,CAAE,MAAOnJ,GACPokK,EAAIqwE,MAAQnpE,EAASniK,IAAI,QAAS,SACpC,CACA,IACEi7J,EAAIn2J,SAAWq9J,EAASniK,IAAI,WAAY,OAC1C,CAAE,MAAOnJ,GACPokK,EAAIn2J,SAAWq9J,EAASniK,IAAI,WAAY,CACtCuF,MAAO,EACPw/F,KAAM,EACN8wD,OAAQ,GACR+xE,OAAQ,GACRhpJ,IAAK,IACLg3E,MAAO,KACNqF,EAAIqwE,MACT,CAGArwE,EAAIu6F,cAAgBrzF,EAASniK,IAAI,gBAAiB,CAChDuF,MAAO,QACPw/F,KAAM,QACN8wD,OAAQ,SACR+xE,OAAQ,SACRhpJ,IAAK,MACLg3E,MAAO,OACNqF,EAAIqwE,MACT,CAqBAs/C,CAAmBpmR,EAAOy2J,EAC5B,CAzOAquH,EAAahrR,UAAY+qR,EAAW1wR,MAAM2F,WAC1CgrR,EAAahrR,UAAUE,YAAc8qR,EAGrCA,EAAaa,OAAS,CACpBU,aAAc,CACZhuR,KAAM,EACN0Q,QAAS,+BAEX68Q,aAAc,CACZvtR,KAAM,EACN0Q,QAAS,0BAmCbm8Q,EAASprR,UAAY,CAEnBuB,IAAK,SAAS0/E,EAAGrrE,GACVhV,KAAKc,IAAIu/E,IAAY,KAANrrE,IAClBhV,KAAK+sH,OAAO1sC,GAAKrrE,EAErB,EAMAlU,IAAK,SAASu/E,EAAGurM,EAAMC,GACrB,OAAIA,EACK7rR,KAAKU,IAAI2/E,GAAKrgF,KAAK+sH,OAAO1sC,GAAKurM,EAAKC,GAEtC7rR,KAAKU,IAAI2/E,GAAKrgF,KAAK+sH,OAAO1sC,GAAKurM,CACxC,EAEAlrR,IAAK,SAAS2/E,GACZ,OAAOA,KAAKrgF,KAAK+sH,MACnB,EAEAqoD,IAAK,SAAS/0F,EAAGrrE,EAAG8pE,GAClB,IAAK,IAAI5/E,EAAI,EAAGA,EAAI4/E,EAAEzgF,SAAUa,EAC9B,GAAI8V,IAAM8pE,EAAE5/E,GAAI,CACdc,KAAKW,IAAI0/E,EAAGrrE,GACZ,KACF,CAEJ,EAEAu2Q,QAAS,SAASlrM,EAAGrrE,GACf,UAAUvV,KAAKuV,IACjBhV,KAAKW,IAAI0/E,EAAGC,SAAStrE,EAAG,IAE5B,EAEAqpK,QAAS,SAASh+F,EAAGrrE,GAEnB,SAASA,EAAE4pE,MAAM,8BACf5pE,EAAIgoH,WAAWhoH,KACN,GAAKA,GAAK,OACjBhV,KAAKW,IAAI0/E,EAAGrrE,IACL,EAIb,GA+IF,IAAI82Q,EAAmBrqM,EAASpqE,eAAiBoqE,EAASpqE,cAAc,YAEpE00Q,EAAW,CACb97Q,EAAG,OACHlS,EAAG,IACH2oF,EAAG,IACH+hB,EAAG,IACHujL,KAAM,OACNC,GAAI,KACJj3Q,EAAG,OACHxO,KAAM,QAKJ0lR,EAAsB,CACxBC,MAAO,sBACPC,KAAM,kBACNC,KAAM,oBACNC,IAAK,kBACLC,OAAQ,oBACRC,QAAS,oBACTC,KAAM,kBACNC,MAAO,iBAGLC,EAAiB,CACnB33Q,EAAG,QACHxO,KAAM,QAGJomR,EAAe,CACjBX,GAAI,QAIN,SAASY,EAAa32R,EAAQoP,GAC5B,SAASwnR,IAEP,IAAKxnR,EACH,OAAO,KAST,IALiB5M,EAKb+nF,EAAIn7E,EAAMs5E,MAAM,uBAGpB,OARiBlmF,EAQF+nF,EAAE,GAAKA,EAAE,GAAKA,EAAE,GAP7Bn7E,EAAQA,EAAMgB,OAAO5N,EAAO2F,QACrB3F,CAOX,CASA,SAASq0R,EAAU1jR,EAASoC,GAC1B,OAAQmhR,EAAanhR,EAAQlD,YACtBqkR,EAAanhR,EAAQlD,aAAec,EAAQd,SACrD,CAGA,SAAS8O,EAAchgB,EAAM21R,GAC3B,IAAI1jR,EAAUyiR,EAAS10R,GACvB,IAAKiS,EACH,OAAO,KAET,IAAImC,EAAUvV,EAAOurF,SAASpqE,cAAc/N,GACxC/J,EAAOotR,EAAet1R,GAI1B,OAHIkI,GAAQytR,IACVvhR,EAAQlM,GAAQytR,EAAWz1R,QAEtBkU,CACT,CAOA,IALA,IAEIY,EA5BcmyE,EA0BdyuM,EAAU/2R,EAAOurF,SAASpqE,cAAc,OACxChO,EAAU4jR,EAEVC,EAAW,GAEc,QAArB7gR,EAAIygR,MACV,GAAa,MAATzgR,EAAE,GA8DNhD,EAAQzC,YAAY1Q,EAAOurF,SAASr3E,gBA9FpBo0E,EA8F4CnyE,EA7F5Dy/Q,EAAiBt+L,UAAYhP,EAC7BA,EAAIstM,EAAiB3+L,YACrB2+L,EAAiB3+L,YAAc,GACxB3O,SA4BP,CACE,GAAa,MAATnyE,EAAE,GAAY,CAEZ6gR,EAAS7uR,QACT6uR,EAASA,EAAS7uR,OAAS,KAAOgO,EAAE/F,OAAO,GAAGf,QAAQ,IAAK,MAC7D2nR,EAASlsM,MACT33E,EAAUA,EAAQE,YAGpB,QACF,CACA,IACI1D,EADAi6I,EAAKwqI,EAAej+Q,EAAE/F,OAAO,EAAG+F,EAAEhO,OAAS,IAE/C,GAAIyhJ,EAAI,CAENj6I,EAAO3P,EAAOurF,SAAS53E,4BAA4B,YAAai2I,GAChEz2I,EAAQzC,YAAYf,GACpB,QACF,CACA,IAAI46E,EAAIp0E,EAAEuyE,MAAM,oDAEhB,IAAK6B,EACH,SAIF,KADA56E,EAAOwR,EAAcopE,EAAE,GAAIA,EAAE,KAE3B,SAIF,IAAKssM,EAAU1jR,EAASxD,GACtB,SAGF,GAAI46E,EAAE,GAAI,CACR,IAAI0sM,EAAU1sM,EAAE,GAAGxpF,MAAM,KAEzBk2R,EAAQx0R,SAAQ,SAAS4wH,GACvB,IAAI6jK,EAAU,OAAO3tR,KAAK8pH,GAEtB8jK,EAAYD,EAAU7jK,EAAGvwH,MAAM,GAAKuwH,EAExC,GAAI2iK,EAAoBruR,eAAewvR,GAAY,CACjD,IAAIroM,EAAWooM,EAAU,mBAAqB,QAC1CE,EAAYpB,EAAoBmB,GAEpCxnR,EAAK8qF,MAAM3L,GAAYsoM,CACzB,CACF,IAEAznR,EAAKorH,UAAYk8J,EAAQp5Q,KAAK,IAChC,CAGAm5Q,EAAS/zR,KAAKsnF,EAAE,IAChBp3E,EAAQzC,YAAYf,GACpBwD,EAAUxD,CAEZ,CAMF,OAAOonR,CACT,CAOA,IAAIM,EAAkB,CAAC,CAAC,KAAO,MAAQ,CAAC,KAAO,MAAQ,CAAC,KAAO,MAAQ,CAAC,KAAO,MAC9E,CAAC,KAAO,MAAQ,CAAC,KAAO,MAAQ,CAAC,KAAO,MAAQ,CAAC,KAAO,MAAQ,CAAC,KAAO,MACxE,CAAC,KAAO,MAAQ,CAAC,KAAO,MAAQ,CAAC,KAAO,MAAQ,CAAC,KAAO,MAAQ,CAAC,KAAO,MACxE,CAAC,KAAO,MAAQ,CAAC,KAAO,MAAQ,CAAC,KAAO,MAAQ,CAAC,KAAO,MAAQ,CAAC,KAAO,MACxE,CAAC,KAAO,MAAQ,CAAC,KAAO,MAAQ,CAAC,KAAO,MAAQ,CAAC,KAAO,MAAQ,CAAC,KAAO,MACxE,CAAC,KAAO,MAAQ,CAAC,KAAO,MAAQ,CAAC,KAAO,MAAQ,CAAC,KAAO,MAAQ,CAAC,KAAO,MACxE,CAAC,KAAO,MAAQ,CAAC,KAAO,MAAQ,CAAC,KAAO,MAAQ,CAAC,KAAQ,MACzD,CAAC,MAAQ,OAAS,CAAC,MAAQ,OAAS,CAAC,MAAQ,OAAS,CAAC,MAAQ,OAC/D,CAAC,MAAQ,OAAS,CAAC,MAAQ,OAAS,CAAC,MAAQ,OAAS,CAAC,MAAQ,OAC/D,CAAC,MAAQ,OAAS,CAAC,MAAQ,OAAS,CAAC,MAAQ,OAAS,CAAC,MAAQ,OAC/D,CAAC,MAAQ,OAAS,CAAC,MAAQ,OAAS,CAAC,MAAS,OAAU,CAAC,MAAS,OAClE,CAAC,MAAS,OAAU,CAAC,MAAS,OAAU,CAAC,MAAS,OAAU,CAAC,MAAS,OACtE,CAAC,MAAS,OAAU,CAAC,MAAS,OAAU,CAAC,MAAS,OAAU,CAAC,MAAS,OACtE,CAAC,MAAS,OAAU,CAAC,MAAS,OAAU,CAAC,MAAS,OAAU,CAAC,MAAS,OACtE,CAAC,MAAS,OAAU,CAAC,MAAS,OAAU,CAAC,MAAS,OAAU,CAAC,MAAS,OACtE,CAAC,MAAS,OAAU,CAAC,MAAS,OAAU,CAAC,MAAS,OAAU,CAAC,MAAS,OACtE,CAAC,MAAS,OAAU,CAAC,MAAS,OAAU,CAAC,OAAS,QAAU,CAAC,OAAS,QACtE,CAAC,OAAS,QAAU,CAAC,OAAS,QAAU,CAAC,OAAS,QAAU,CAAC,OAAS,QACtE,CAAC,OAAS,QAAU,CAAC,OAAS,QAAU,CAAC,OAAS,QAAU,CAAC,OAAS,QACtE,CAAC,OAAS,QAAU,CAAC,OAAS,QAAU,CAAC,OAAS,QAAU,CAAC,OAAS,QACtE,CAAC,OAAS,QAAU,CAAC,OAAS,QAAU,CAAC,OAAS,QAAU,CAAC,OAAS,QACtE,CAAC,OAAS,QAAU,CAAC,OAAS,QAAU,CAAC,OAAS,QAAU,CAAC,OAAS,QACtE,CAAC,OAAS,QAAU,CAAC,OAAS,QAAU,CAAC,OAAS,QAAU,CAAC,OAAS,QACtE,CAAC,OAAS,QAAU,CAAC,OAAS,QAAU,CAAC,OAAS,QAAU,CAAC,OAAS,QACtE,CAAC,OAAS,QAAU,CAAC,OAAS,QAAU,CAAC,OAAS,QAAU,CAAC,QAAU,UAExE,SAASC,EAAgBnzL,GACvB,IAAK,IAAIt8F,EAAI,EAAGA,EAAIwvR,EAAgBlvR,OAAQN,IAAK,CAC/C,IAAIqgR,EAAemP,EAAgBxvR,GACnC,GAAIs8F,GAAY+jL,EAAa,IAAM/jL,GAAY+jL,EAAa,GAC1D,OAAO,CAEX,CAEA,OAAO,CACT,CAEA,SAASqP,EAAcz0G,GACrB,IAAI00G,EAAY,GACZ50Q,EAAO,GAGX,IAAKkgK,IAAWA,EAAOroK,WACrB,MAAO,MAGT,SAASg9Q,EAAUD,EAAW7nR,GAC5B,IAAK,IAAI9H,EAAI8H,EAAK8K,WAAWtS,OAAS,EAAGN,GAAK,EAAGA,IAC/C2vR,EAAUv0R,KAAK0M,EAAK8K,WAAW5S,GAEnC,CAEA,SAAS6vR,EAAaF,GACpB,IAAKA,IAAcA,EAAUrvR,OAC3B,OAAO,KAGT,IAAIwH,EAAO6nR,EAAU1sM,MACjBloE,EAAOjT,EAAKsnF,aAAetnF,EAAKghJ,UACpC,GAAI/tI,EAAM,CAGR,IAAI2nE,EAAI3nE,EAAK8lE,MAAM,cACnB,OAAI6B,GACFitM,EAAUrvR,OAAS,EACZoiF,EAAE,IAEJ3nE,CACT,CACA,MAAqB,SAAjBjT,EAAKyD,QACAskR,EAAaF,GAElB7nR,EAAK8K,YACPg9Q,EAAUD,EAAW7nR,GACd+nR,EAAaF,SAFtB,CAIF,CAGA,IADAC,EAAUD,EAAW10G,GACblgK,EAAO80Q,EAAaF,IAC1B,IAAK,IAAI3vR,EAAI,EAAGA,EAAI+a,EAAKza,OAAQN,IAE/B,GAAIyvR,EADO10Q,EAAK5I,WAAWnS,IAEzB,MAAO,MAIb,MAAO,KACT,CAsBA,SAAS8vR,IACT,CAmBA,SAASC,EAAY53R,EAAQ6lK,EAAKgyH,GAChCF,EAAShvR,KAAKmB,MACdA,KAAK+7J,IAAMA,EAIX/7J,KAAKg5K,OAAS6zG,EAAa32R,EAAQ6lK,EAAIjjJ,MACvC,IAAI0oI,EAAS,CACX5/C,MAAO,yBACPu3E,gBAAkB,qBAClBvzK,SAAU,WACVigG,KAAM,EACN6wD,MAAO,EACP3pF,IAAK,EACLzqD,OAAQ,EACRo/F,QAAS,SACTssK,YAA8B,KAAjBjyH,EAAIghB,SAAkB,gBACiB,OAAjBhhB,EAAIghB,SAAoB,cACA,cAC3DkxG,YAAa,aAGfjuR,KAAKkuR,YAAY1sI,EAAQxhJ,KAAKg5K,QAK9Bh5K,KAAKoxB,IAAMl7B,EAAOurF,SAASpqE,cAAc,OACzCmqI,EAAS,CACPyvB,UAAWw8G,EAAcztR,KAAKg5K,QAC9Bg1G,YAA8B,KAAjBjyH,EAAIghB,SAAkB,gBACiB,OAAjBhhB,EAAIghB,SAAoB,cACA,cAC3DkxG,YAAa,YACbE,UAAyB,WAAdpyH,EAAIqwE,MAAqB,SAAWrwE,EAAIqwE,MACnDgiD,KAAML,EAAaK,KACnBC,WAAY,WACZzoR,SAAU,YAGZ5F,KAAKkuR,YAAY1sI,GACjBxhJ,KAAKoxB,IAAIxqB,YAAY5G,KAAKg5K,QAK1B,IAAIs1G,EAAU,EACd,OAAQvyH,EAAIu6F,eACZ,IAAK,QACL,IAAK,YACHg4B,EAAUvyH,EAAIn2J,SACd,MACF,IAAK,SACH0oR,EAAUvyH,EAAIn2J,SAAYm2J,EAAI36J,KAAO,EACrC,MACF,IAAK,MACL,IAAK,aACHktR,EAAUvyH,EAAIn2J,SAAWm2J,EAAI36J,KAOV,KAAjB26J,EAAIghB,SACN/8K,KAAKkuR,YAAY,CACfroL,KAAO7lG,KAAKuuR,YAAYD,EAAS,KACjC1uL,MAAO5/F,KAAKuuR,YAAYxyH,EAAI36J,KAAM,OAMpCpB,KAAKkuR,YAAY,CACfnhN,IAAK/sE,KAAKuuR,YAAYD,EAAS,KAC/BzuL,OAAQ7/F,KAAKuuR,YAAYxyH,EAAI36J,KAAM,OAIvCpB,KAAKkxK,KAAO,SAAS3nB,GACnBvpJ,KAAKkuR,YAAY,CACfnhN,IAAK/sE,KAAKuuR,YAAYhlI,EAAIx8E,IAAK,MAC/BzqD,OAAQtiB,KAAKuuR,YAAYhlI,EAAIjnI,OAAQ,MACrCujF,KAAM7lG,KAAKuuR,YAAYhlI,EAAI1jD,KAAM,MACjC6wD,MAAO12J,KAAKuuR,YAAYhlI,EAAImN,MAAO,MACnC72D,OAAQ7/F,KAAKuuR,YAAYhlI,EAAI1pD,OAAQ,MACrCD,MAAO5/F,KAAKuuR,YAAYhlI,EAAI3pD,MAAO,OAEvC,CACF,CAOA,SAAS4uL,EAAY1wR,GAKnB,IAAIg0G,EAAIjS,EAAQD,EAAO7yB,EACvB,GAAIjvE,EAAIszB,IAAK,CACXyuE,EAAS/hG,EAAIszB,IAAIm9F,aACjB3uB,EAAQ9hG,EAAIszB,IAAIo3H,YAChBz7E,EAAMjvE,EAAIszB,IAAIu3H,UAEd,IAAI8lI,GAASA,EAAQ3wR,EAAIszB,IAAIzgB,cAAgB89Q,EAAQA,EAAM,KAC/CA,EAAMC,gBAAkBD,EAAMC,iBAC1C5wR,EAAMA,EAAIszB,IAAIo9F,wBAKd1c,EAAK28K,EAAQnrR,KAAK69E,IAAKstM,EAAM,IAAMA,EAAM,GAAG5uL,QAAW,EAAG/hG,EAAI+hG,OAAS4uL,EAAMpwR,QAChE,CAEf,CACA2B,KAAK6lG,KAAO/nG,EAAI+nG,KAChB7lG,KAAK02J,MAAQ54J,EAAI44J,MACjB12J,KAAK+sE,IAAMjvE,EAAIivE,KAAOA,EACtB/sE,KAAK6/F,OAAS/hG,EAAI+hG,QAAUA,EAC5B7/F,KAAKsiB,OAASxkB,EAAIwkB,QAAWyqD,GAAOjvE,EAAI+hG,QAAUA,GAClD7/F,KAAK4/F,MAAQ9hG,EAAI8hG,OAASA,EAC1B5/F,KAAKyvF,gBAAoBn1F,IAAPw3G,EAAmBA,EAAKh0G,EAAI2xF,UAChD,CAqHA,SAASk/L,EAAsBz4R,EAAQ04R,EAAUC,EAAcC,GAmC7D,IAAIC,EAAc,IAAIP,EAAYI,GAC9B7yH,EAAM6yH,EAAS7yH,IACfizH,EA/TN,SAAwBjzH,GACtB,GAAwB,kBAAbA,EAAIt/B,OACVs/B,EAAI0vH,aAAgB1vH,EAAIt/B,MAAQ,GAAKs/B,EAAIt/B,MAAQ,KACpD,OAAOs/B,EAAIt/B,KAEb,IAAKs/B,EAAItqE,QAAUsqE,EAAItqE,MAAMw9L,gBACxBlzH,EAAItqE,MAAMw9L,cAAcC,aAC3B,OAAQ,EAKV,IAHA,IAAIz9L,EAAQsqE,EAAItqE,MACZolF,EAAYplF,EAAMw9L,cAClBr2Q,EAAQ,EACH7a,EAAI,EAAGA,EAAI84K,EAAUx4K,QAAUw4K,EAAU94K,KAAO0zF,EAAO1zF,IACpC,YAAtB84K,EAAU94K,GAAGuwG,MACf11F,IAGJ,OAAkB,IAATA,CACX,CA6SgBu2Q,CAAepzH,GACzBqzH,EAAO,GAGX,GAAIrzH,EAAI0vH,YAAa,CACnB,IAAIrqR,EACJ,OAAQ26J,EAAIghB,UACZ,IAAK,GACHqyG,EAAO,CAAE,KAAM,MACfhuR,EAAO,SACP,MACF,IAAK,KACHguR,EAAO,CAAE,KAAM,MACfhuR,EAAO,QACP,MACF,IAAK,KACHguR,EAAO,CAAE,KAAM,MACfhuR,EAAO,QAIT,IAAIu8M,EAAOoxE,EAAYt/L,WACnB7pF,EAAW+3M,EAAOr6M,KAAKq1K,MAAMq2G,GAC7BK,EAAcR,EAAaztR,GAAQu8M,EACnC2xE,EAAcF,EAAK,GAKnB9rR,KAAK0lI,IAAIpjI,GAAYypR,IACvBzpR,EAAWA,EAAW,GAAK,EAAI,EAC/BA,GAAYtC,KAAK4+G,KAAKmtK,EAAc1xE,GAAQA,GAO1CqxE,EAAU,IACZppR,GAA6B,KAAjBm2J,EAAIghB,SAAkB8xG,EAAahvL,OAASgvL,EAAajvL,MACrEwvL,EAAOA,EAAK/0J,WAKd00J,EAAY79G,KAAKo+G,EAAa1pR,EAEhC,KAAO,CAEL,IAAI2pR,EAAwBR,EAAYt/L,WAAao/L,EAAahvL,OAAU,IAE5E,OAAQk8D,EAAIyvH,WACZ,IAAK,SACHwD,GAAYO,EAAuB,EACnC,MACF,IAAK,MACHP,GAAWO,EAKb,OAAQxzH,EAAIghB,UACZ,IAAK,GACH6xG,EAASV,YAAY,CACnBnhN,IAAK6hN,EAASL,YAAYS,EAAS,OAErC,MACF,IAAK,KACHJ,EAASV,YAAY,CACnBroL,KAAM+oL,EAASL,YAAYS,EAAS,OAEtC,MACF,IAAK,KACHJ,EAASV,YAAY,CACnBx3H,MAAOk4H,EAASL,YAAYS,EAAS,OAKzCI,EAAO,CAAE,KAAM,KAAM,KAAM,MAI3BL,EAAc,IAAIP,EAAYI,EAChC,CAEA,IAAIY,EApHJ,SAA0B9oM,EAAG0oM,GAK3B,IAJA,IAAII,EACAC,EAAoB,IAAIjB,EAAY9nM,GACpCgpM,EAAa,EAER3xR,EAAI,EAAGA,EAAIqxR,EAAK/wR,OAAQN,IAAK,CACpC,KAAO2oF,EAAEipM,qBAAqBd,EAAcO,EAAKrxR,KACzC2oF,EAAEkpM,OAAOf,IAAiBnoM,EAAEmpM,YAAYf,IAC9CpoM,EAAEwqF,KAAKk+G,EAAKrxR,IAId,GAAI2oF,EAAEkpM,OAAOf,GACX,OAAOnoM,EAET,IAAIz6E,EAAIy6E,EAAEopM,oBAAoBjB,GAG1Ba,EAAazjR,IACfujR,EAAe,IAAIhB,EAAY9nM,GAC/BgpM,EAAazjR,GAGfy6E,EAAI,IAAI8nM,EAAYiB,EACtB,CACA,OAAOD,GAAgBC,CACzB,CA0FmBM,CAAiBhB,EAAaK,GACjDR,EAAS19G,KAAKs+G,EAAaQ,kBAAkBnB,GAC/C,CAEA,SAASjF,IACP,CAjYFiE,EAASzuR,UAAU8uR,YAAc,SAAS1sI,EAAQpwH,GAEhD,IAAK,IAAIyiC,KADTziC,EAAMA,GAAOpxB,KAAKoxB,IACDowH,EACXA,EAAO3jJ,eAAeg2D,KACxBziC,EAAIu/D,MAAM98B,GAAQ2tF,EAAO3tF,GAG/B,EAEAg6N,EAASzuR,UAAUmvR,YAAc,SAAShpJ,EAAK0qJ,GAC7C,OAAe,IAAR1qJ,EAAY,EAAIA,EAAM0qJ,CAC/B,EA8FAnC,EAAY1uR,UAAY+qR,EAAW0D,EAASzuR,WAC5C0uR,EAAY1uR,UAAUE,YAAcwuR,EAuCpCU,EAAYpvR,UAAU8xK,KAAO,SAASk+G,EAAMc,GAE1C,OADAA,OAAoB51R,IAAX41R,EAAuBA,EAASlwR,KAAKyvF,WACtC2/L,GACR,IAAK,KACHpvR,KAAK6lG,MAAQqqL,EACblwR,KAAK02J,OAASw5H,EACd,MACF,IAAK,KACHlwR,KAAK6lG,MAAQqqL,EACblwR,KAAK02J,OAASw5H,EACd,MACF,IAAK,KACHlwR,KAAK+sE,KAAOmjN,EACZlwR,KAAKsiB,QAAU4tQ,EACf,MACF,IAAK,KACHlwR,KAAK+sE,KAAOmjN,EACZlwR,KAAKsiB,QAAU4tQ,EAGnB,EAGA1B,EAAYpvR,UAAU+wR,SAAW,SAAS5nB,GACxC,OAAOvoQ,KAAK6lG,KAAO0iK,EAAG7xG,OACf12J,KAAK02J,MAAQ6xG,EAAG1iK,MAChB7lG,KAAK+sE,IAAMw7L,EAAGjmP,QACdtiB,KAAKsiB,OAASimP,EAAGx7L,GAC1B,EAGAyhN,EAAYpvR,UAAUywR,YAAc,SAASvkE,GAC3C,IAAK,IAAIvtN,EAAI,EAAGA,EAAIutN,EAAMjtN,OAAQN,IAChC,GAAIiC,KAAKmwR,SAAS7kE,EAAMvtN,IACtB,OAAO,EAGX,OAAO,CACT,EAGAywR,EAAYpvR,UAAUwwR,OAAS,SAASloJ,GACtC,OAAO1nI,KAAK+sE,KAAO26D,EAAU36D,KACtB/sE,KAAKsiB,QAAUolH,EAAUplH,QACzBtiB,KAAK6lG,MAAQ6hC,EAAU7hC,MACvB7lG,KAAK02J,OAAShvB,EAAUgvB,KACjC,EAMA83H,EAAYpvR,UAAUuwR,qBAAuB,SAASjoJ,EAAW0nJ,GAC/D,OAAQA,GACR,IAAK,KACH,OAAOpvR,KAAK6lG,KAAO6hC,EAAU7hC,KAC/B,IAAK,KACH,OAAO7lG,KAAK02J,MAAQhvB,EAAUgvB,MAChC,IAAK,KACH,OAAO12J,KAAK+sE,IAAM26D,EAAU36D,IAC9B,IAAK,KACH,OAAO/sE,KAAKsiB,OAASolH,EAAUplH,OAEnC,EAIAksQ,EAAYpvR,UAAU0wR,oBAAsB,SAASvnB,GAInD,OAHQjlQ,KAAK69E,IAAI,EAAG79E,KAAKyhG,IAAI/kG,KAAK02J,MAAO6xG,EAAG7xG,OAASpzJ,KAAK69E,IAAInhF,KAAK6lG,KAAM0iK,EAAG1iK,OACpEviG,KAAK69E,IAAI,EAAG79E,KAAKyhG,IAAI/kG,KAAKsiB,OAAQimP,EAAGjmP,QAAUhf,KAAK69E,IAAInhF,KAAK+sE,IAAKw7L,EAAGx7L,OAErD/sE,KAAK6/F,OAAS7/F,KAAK4/F,MAC7C,EAMA4uL,EAAYpvR,UAAU4wR,kBAAoB,SAAS/iJ,GACjD,MAAO,CACLlgE,IAAK/sE,KAAK+sE,IAAMkgE,EAAUlgE,IAC1BzqD,OAAQ2qH,EAAU3qH,OAAStiB,KAAKsiB,OAChCujF,KAAM7lG,KAAK6lG,KAAOonC,EAAUpnC,KAC5B6wD,MAAOzpB,EAAUypB,MAAQ12J,KAAK02J,MAC9B72D,OAAQ7/F,KAAK6/F,OACbD,MAAO5/F,KAAK4/F,MAEhB,EAIA4uL,EAAY4B,qBAAuB,SAAStyR,GAC1C,IAAI+hG,EAAS/hG,EAAIszB,IAAMtzB,EAAIszB,IAAIm9F,aAAezwH,EAAIwL,QAAUxL,EAAIywH,aAAe,EAC3E3uB,EAAQ9hG,EAAIszB,IAAMtzB,EAAIszB,IAAIo3H,YAAc1qJ,EAAIwL,QAAUxL,EAAI0qJ,YAAc,EACxEz7E,EAAMjvE,EAAIszB,IAAMtzB,EAAIszB,IAAIu3H,UAAY7qJ,EAAIwL,QAAUxL,EAAI6qJ,UAAY,EAYtE,MARU,CACR9iD,MAHF/nG,EAAMA,EAAIszB,IAAMtzB,EAAIszB,IAAIo9F,wBACV1wH,EAAIwL,QAAUxL,EAAI0wH,wBAA0B1wH,GAE9C+nG,KACV6wD,MAAO54J,EAAI44J,MACX3pF,IAAKjvE,EAAIivE,KAAOA,EAChB8yB,OAAQ/hG,EAAI+hG,QAAUA,EACtBv9E,OAAQxkB,EAAIwkB,QAAWyqD,GAAOjvE,EAAI+hG,QAAUA,GAC5CD,MAAO9hG,EAAI8hG,OAASA,EAGxB,EAyIAgqL,EAAOvnH,cAAgB,WACrB,MAAO,CACL3qK,OAAQ,SAASiF,GACf,IAAKA,EACH,MAAO,GAET,GAAoB,kBAATA,EACT,MAAM,IAAIlD,MAAM,iCAElB,OAAOgsI,mBAAmB9+C,mBAAmBhqF,GAC/C,EAEJ,EAEAitR,EAAOyG,oBAAsB,SAASn6R,EAAQo6R,GAC5C,OAAKp6R,GAAWo6R,EAGTzD,EAAa32R,EAAQo6R,GAFnB,IAGX,EASA1G,EAAOvyG,YAAc,SAASnhL,EAAQ4lK,EAAMy0H,GAC1C,IAAKr6R,IAAW4lK,IAASy0H,EACvB,OAAO,KAIT,KAAOA,EAAQngR,YACbmgR,EAAQl+Q,YAAYk+Q,EAAQngR,YAG9B,IAAIogR,EAAgBt6R,EAAOurF,SAASpqE,cAAc,OAsBlD,GArBAm5Q,EAAc7/L,MAAM/qF,SAAW,WAC/B4qR,EAAc7/L,MAAMkV,KAAO,IAC3B2qL,EAAc7/L,MAAM+lE,MAAQ,IAC5B85H,EAAc7/L,MAAM5jB,IAAM,IAC1ByjN,EAAc7/L,MAAMruE,OAAS,IAC7BkuQ,EAAc7/L,MAAM8/L,OArBO,OAsB3BF,EAAQ3pR,YAAY4pR,GAKpB,SAAuB10H,GACrB,IAAK,IAAI/9J,EAAI,EAAGA,EAAI+9J,EAAKz9J,OAAQN,IAC/B,GAAI+9J,EAAK/9J,GAAG2yR,eAAiB50H,EAAK/9J,GAAGk7K,aACnC,OAAO,EAGX,OAAO,CACT,CAGK03G,CAAc70H,GAAnB,CAOA,IAAIgzH,EAAe,GACfD,EAAeL,EAAY4B,qBAAqBI,GAEhDzC,EAAe,CACjBK,KAFa9qR,KAAKq1K,MAhDE,IAgDIk2G,EAAahvL,OAA6B,KAAO,IAEnE65E,kBAGR,WAGE,IAFA,IAAIk1G,EAAU7yH,EAELh+J,EAAI,EAAGA,EAAI+9J,EAAKz9J,OAAQN,IAC/Bg+J,EAAMD,EAAK/9J,GAGX6wR,EAAW,IAAId,EAAY53R,EAAQ6lK,EAAKgyH,GACxCyC,EAAc5pR,YAAYgoR,EAASx9P,KAGnCu9P,EAAsBz4R,EAAQ04R,EAAUC,EAAcC,GAItD/yH,EAAIkd,aAAe21G,EAASx9P,IAE5B09P,EAAa31R,KAAKq1R,EAAY4B,qBAAqBxB,GAEtD,CAnBD,EATA,MAJE,IAAK,IAAI7wR,EAAI,EAAGA,EAAI+9J,EAAKz9J,OAAQN,IAC/ByyR,EAAc5pR,YAAYk1J,EAAK/9J,GAAGk7K,aAgCxC,EAEA2wG,EAAO1qJ,OAAS,SAAShpI,EAAQyzR,EAAO7oB,GACjCA,IACHA,EAAU6oB,EACVA,EAAQ,CAAC,GAENA,IACHA,EAAQ,CAAC,GAGX3pR,KAAK9J,OAASA,EACd8J,KAAK2pR,MAAQA,EACb3pR,KAAK25G,MAAQ,UACb35G,KAAKmiF,OAAS,GACdniF,KAAK8gQ,QAAUA,GAAW,IAAIjqQ,YAAY,QAC1CmJ,KAAK8qR,WAAa,EACpB,EAEAlB,EAAO1qJ,OAAO9/H,UAAY,CAGxBwxR,mBAAoB,SAASj5R,GAC3B,KAAIA,aAAayyR,GAGf,MAAMzyR,EAFNqI,KAAKuiK,gBAAkBviK,KAAKuiK,eAAe5qK,EAI/C,EACAsD,MAAO,SAAU0B,GACf,IAAIglF,EAAO3hF,KAUX,SAAS6wR,IAGP,IAFA,IAAI1uM,EAASR,EAAKQ,OACd5C,EAAM,EACHA,EAAM4C,EAAO9jF,QAA0B,OAAhB8jF,EAAO5C,IAAiC,OAAhB4C,EAAO5C,MACzDA,EAEJ,IAAIk9C,EAAOt6C,EAAO77E,OAAO,EAAGi5E,GAS5B,MAPoB,OAAhB4C,EAAO5C,MACPA,EAEgB,OAAhB4C,EAAO5C,MACPA,EAEJoC,EAAKQ,OAASA,EAAO77E,OAAOi5E,GACrBk9C,CACT,CAsFA,SAASq0J,EAAYxrR,GACfA,EAAMs5E,MAAM,mBAEd6rM,EAAanlR,GAAO,SAAS+6E,EAAGrrE,GAC9B,GACK,oBADEqrE,GAzBb,SAA2B/6E,GACzB,IAAI29J,EAAW,IAAIunH,EAEnBC,EAAanlR,GAAO,SAAS+6E,EAAGrrE,GAC9B,OAAOqrE,GACP,IAAK,QACH4iF,EAASsoH,QAAQlrM,EAAI,IAAKrrE,GAC1B,MACF,IAAK,OACHiuJ,EAAStiK,IAAI0/E,EAAI,IAAKiqM,EAAet1Q,IAGzC,GAAG,SAAU,KAEb2sE,EAAKw/K,gBAAkBx/K,EAAKw/K,eAAe,CACzC,OAAUl+F,EAASniK,IAAI,UACvB,MAASmiK,EAASniK,IAAI,UAE1B,CASQiwR,CAAkB/7Q,EAGtB,GAAG,KAEHy1Q,EAAanlR,GAAO,SAAU+6E,EAAGrrE,GAC/B,GACK,WADGqrE,GA/Fd,SAAqB/6E,GACnB,IAAI29J,EAAW,IAAIunH,EAsCnB,GApCAC,EAAanlR,GAAO,SAAU+6E,EAAGrrE,GAC/B,OAAQqrE,GACR,IAAK,KACH4iF,EAAStiK,IAAI0/E,EAAGrrE,GAChB,MACF,IAAK,QACHiuJ,EAASob,QAAQh+F,EAAGrrE,GACpB,MACF,IAAK,QACHiuJ,EAASsoH,QAAQlrM,EAAGrrE,GACpB,MACF,IAAK,eACL,IAAK,iBACH,IAAIg8Q,EAAKh8Q,EAAE/d,MAAM,KACjB,GAAkB,IAAd+5R,EAAG3yR,OACL,MAIF,IAAI4yR,EAAS,IAAIzG,EAGjB,GAFAyG,EAAO5yG,QAAQ,IAAK2yG,EAAG,IACvBC,EAAO5yG,QAAQ,IAAK2yG,EAAG,KAClBC,EAAOvwR,IAAI,OAASuwR,EAAOvwR,IAAI,KAClC,MAEFuiK,EAAStiK,IAAI0/E,EAAI,IAAK4wM,EAAOnwR,IAAI,MACjCmiK,EAAStiK,IAAI0/E,EAAI,IAAK4wM,EAAOnwR,IAAI,MACjC,MACF,IAAK,SACHmiK,EAASmS,IAAI/0F,EAAGrrE,EAAG,CAAC,OAGxB,GAAG,IAAK,MAIJiuJ,EAASviK,IAAI,MAAO,CACtB,IAAI0qR,EAAS,IAAKzpM,EAAKgoM,MAAME,WAAaloM,EAAKzrF,OAAO2zR,WACtDuB,EAAOxrL,MAAQqjE,EAASniK,IAAI,QAAS,KACrCsqR,EAAO8F,MAAQjuH,EAASniK,IAAI,QAAS,GACrCsqR,EAAO+F,cAAgBluH,EAASniK,IAAI,gBAAiB,GACrDsqR,EAAOgG,cAAgBnuH,EAASniK,IAAI,gBAAiB,KACrDsqR,EAAOiG,gBAAkBpuH,EAASniK,IAAI,kBAAmB,GACzDsqR,EAAOkG,gBAAkBruH,EAASniK,IAAI,kBAAmB,KACzDsqR,EAAOmG,OAAStuH,EAASniK,IAAI,SAAU,IAEvC6gF,EAAK6vM,UAAY7vM,EAAK6vM,SAASpG,GAG/BzpM,EAAKmpM,WAAW3xR,KAAK,CACnBud,GAAIusJ,EAASniK,IAAI,MACjBsqR,OAAQA,GAEZ,CACF,CAyCQqG,CAAYz8Q,EAGhB,GAAG,IAGP,CAhIIrY,IAEFglF,EAAKQ,QAAUR,EAAKm/K,QAAQppQ,OAAOiF,EAAM,CAACitN,QAAQ,KAiIpD,IACE,IAAIntF,EACJ,GAAmB,YAAf96C,EAAKg4B,MAAqB,CAE5B,IAAK,UAAUl6G,KAAKkiF,EAAKQ,QACvB,OAAOniF,KAKT,IAAIygF,GAFJg8C,EAAOo0J,KAEMjyM,MAAM,sBACnB,IAAK6B,IAAMA,EAAE,GACX,MAAM,IAAI2pM,EAAaA,EAAaa,OAAOU,cAG7ChqM,EAAKg4B,MAAQ,QACf,CAGA,IADA,IAAI+3K,GAAuB,EACpB/vM,EAAKQ,QAAQ,CAElB,IAAK,UAAU1iF,KAAKkiF,EAAKQ,QACvB,OAAOniF,KAST,OANK0xR,EAGHA,GAAuB,EAFvBj1J,EAAOo0J,IAKDlvM,EAAKg4B,OACb,IAAK,SAEC,IAAIl6G,KAAKg9H,GACXq0J,EAAYr0J,GACFA,IAEV96C,EAAKg4B,MAAQ,MAEf,SACF,IAAK,OAEE8iB,IACH96C,EAAKg4B,MAAQ,MAEf,SACF,IAAK,KAEH,GAAI,iBAAiBl6G,KAAKg9H,GAAO,CAC/B96C,EAAKg4B,MAAQ,OACb,KACF,CAEA,IAAK8iB,EACH,SAEF96C,EAAKo6E,IAAM,IAAKp6E,EAAKgoM,MAAMvlH,QAAUziF,EAAKzrF,OAAOkuK,QAAQ,EAAG,EAAG,IAE/D,IACEziF,EAAKo6E,IAAIqwE,MAAQ,QACnB,CAAE,MAAOz0O,GACPgqF,EAAKo6E,IAAIqwE,MAAQ,QACnB,CAGA,GAFAzqJ,EAAKg4B,MAAQ,OAEgB,IAAzB8iB,EAAK3jI,QAAQ,UAAe,CAC9B6oF,EAAKo6E,IAAIrlJ,GAAK+lH,EACd,QACF,CAGF,IAAK,MAEH,IACEouJ,EAASpuJ,EAAM96C,EAAKo6E,IAAKp6E,EAAKmpM,WAChC,CAAE,MAAOnzR,GACPgqF,EAAKivM,mBAAmBj5R,GAExBgqF,EAAKo6E,IAAM,KACXp6E,EAAKg4B,MAAQ,SACb,QACF,CACAh4B,EAAKg4B,MAAQ,UACb,SACF,IAAK,UACH,IAAIg4K,GAAwC,IAAzBl1J,EAAK3jI,QAAQ,UAKhC,IAAK2jI,GAAQk1J,IAAiBD,GAAuB,GAAO,CAE1D/vM,EAAK2gF,OAAS3gF,EAAK2gF,MAAM3gF,EAAKo6E,KAC9Bp6E,EAAKo6E,IAAM,KACXp6E,EAAKg4B,MAAQ,KACb,QACF,CACIh4B,EAAKo6E,IAAIjjJ,OACX6oE,EAAKo6E,IAAIjjJ,MAAQ,MAEnB6oE,EAAKo6E,IAAIjjJ,MAAQ2jH,EAAKl3H,QAAQ,UAAW,MAAMA,QAAQ,SAAU,MACjE,SACF,IAAK,SAEEk3H,IACH96C,EAAKg4B,MAAQ,MAEf,SAEJ,CACF,CAAE,MAAOhiH,GACPgqF,EAAKivM,mBAAmBj5R,GAGL,YAAfgqF,EAAKg4B,OAAuBh4B,EAAKo6E,KAAOp6E,EAAK2gF,OAC/C3gF,EAAK2gF,MAAM3gF,EAAKo6E,KAElBp6E,EAAKo6E,IAAM,KAGXp6E,EAAKg4B,MAAuB,YAAfh4B,EAAKg4B,MAAsB,YAAc,QACxD,CACA,OAAO35G,IACT,EACAmrH,MAAO,WACL,IAAIxpC,EAAO3hF,KACX,IAWE,GATA2hF,EAAKQ,QAAUR,EAAKm/K,QAAQppQ,UAExBiqF,EAAKo6E,KAAsB,WAAfp6E,EAAKg4B,SACnBh4B,EAAKQ,QAAU,OACfR,EAAK1mF,SAKY,YAAf0mF,EAAKg4B,MACP,MAAM,IAAIywK,EAAaA,EAAaa,OAAOU,aAE/C,CAAE,MAAMh0R,GACNgqF,EAAKivM,mBAAmBj5R,EAC1B,CAEA,OADAgqF,EAAK6gF,SAAW7gF,EAAK6gF,UACdxiK,IACT,GAGF5J,EAAOC,QAAUuzR,WCtzCjB,IACIgI,EAAmB,CACrB,GAAI,EACJ,GAAM,EACN,GAAM,GAEJC,EAAe,CACjB,MAAS,EACT,OAAU,EACV,IAAO,EACP,KAAQ,EACR,MAAS,EACT,KAAQ,EACR,YAAa,EACb,aAAc,GAWhB,SAASC,EAAiBx6R,GACxB,MAAqB,kBAAVA,MAGCu6R,EAAav6R,EAAMN,gBAChBM,EAAMN,cACvB,CAEA,SAASotK,EAAO9sC,EAAW0kC,EAASljJ,GASlC9Y,KAAK0wR,cAAe,EAOpB,IAAIqB,EAAM,GACNC,GAAe,EACfC,EAAa36J,EACb46J,EAAWl2H,EACXm2H,EAAQr5Q,EACRs5Q,EAAU,KACVC,EAAY,GACZC,GAAe,EACfC,EAAQ,OACRC,EAAa,QACbC,EAAY,OACZC,EAAiB,OACjBC,EAAQ,IACRC,EAAS,SAEbzzR,OAAO2kK,iBAAiB9jK,KAAM,CAC5B,GAAM,CACJorF,YAAY,EACZtqF,IAAK,WACH,OAAOixR,CACT,EACApxR,IAAK,SAASrJ,GACZy6R,EAAM,GAAKz6R,CACb,GAGF,YAAe,CACb8zF,YAAY,EACZtqF,IAAK,WACH,OAAOkxR,CACT,EACArxR,IAAK,SAASrJ,GACZ06R,IAAiB16R,CACnB,GAGF,UAAa,CACX8zF,YAAY,EACZtqF,IAAK,WACH,OAAOmxR,CACT,EACAtxR,IAAK,SAASrJ,GACZ,GAAqB,kBAAVA,EACT,MAAM,IAAIsI,UAAU,uCAEtBqyR,EAAa36R,EACb0I,KAAK0wR,cAAe,CACtB,GAGF,QAAW,CACTtlM,YAAY,EACZtqF,IAAK,WACH,OAAOoxR,CACT,EACAvxR,IAAK,SAASrJ,GACZ,GAAqB,kBAAVA,EACT,MAAM,IAAIsI,UAAU,qCAEtBsyR,EAAW56R,EACX0I,KAAK0wR,cAAe,CACtB,GAGF,KAAQ,CACNtlM,YAAY,EACZtqF,IAAK,WACH,OAAOqxR,CACT,EACAxxR,IAAK,SAASrJ,GACZ66R,EAAQ,GAAK76R,EACb0I,KAAK0wR,cAAe,CACtB,GAGF,OAAU,CACRtlM,YAAY,EACZtqF,IAAK,WACH,OAAOsxR,CACT,EACAzxR,IAAK,SAASrJ,GACZ86R,EAAU96R,EACV0I,KAAK0wR,cAAe,CACtB,GAGF,SAAY,CACVtlM,YAAY,EACZtqF,IAAK,WACH,OAAOuxR,CACT,EACA1xR,IAAK,SAASrJ,GACZ,IAAImwR,EA5HZ,SAA8BnwR,GAC5B,MAAqB,kBAAVA,KAGDs6R,EAAiBt6R,EAAMN,gBACpBM,EAAMN,aACrB,CAsHsB67R,CAAqBv7R,GAEnC,IAAgB,IAAZmwR,EACF,MAAM,IAAIqL,YAAY,mEAExBT,EAAY5K,EACZznR,KAAK0wR,cAAe,CACtB,GAGF,YAAe,CACbtlM,YAAY,EACZtqF,IAAK,WACH,OAAOwxR,CACT,EACA3xR,IAAK,SAASrJ,GACZg7R,IAAiBh7R,EACjB0I,KAAK0wR,cAAe,CACtB,GAGF,KAAQ,CACNtlM,YAAY,EACZtqF,IAAK,WACH,OAAOyxR,CACT,EACA5xR,IAAK,SAASrJ,GACZ,GAAqB,kBAAVA,GAxKD,SAwKuBA,EAC/B,MAAM,IAAIw7R,YAAY,4DAExBP,EAAQj7R,EACR0I,KAAK0wR,cAAe,CACtB,GAGF,UAAa,CACXtlM,YAAY,EACZtqF,IAAK,WACH,OAAO0xR,CACT,EACA7xR,IAAK,SAASrJ,GACZ,IAAImwR,EAAUqK,EAAiBx6R,GAC1BmwR,GAGH+K,EAAa/K,EACbznR,KAAK0wR,cAAe,GAHpBtlR,QAAQC,KAAK,yDAKjB,GAGF,SAAY,CACV+/E,YAAY,EACZtqF,IAAK,WACH,OAAO2xR,CACT,EACA9xR,IAAK,SAASrJ,GACZ,GAAIA,EAAQ,GAAKA,EAAQ,IACvB,MAAM,IAAImC,MAAM,uCAElBg5R,EAAYn7R,EACZ0I,KAAK0wR,cAAe,CACtB,GAGF,cAAiB,CACftlM,YAAY,EACZtqF,IAAK,WACH,OAAO4xR,CACT,EACA/xR,IAAK,SAASrJ,GACZ,IAAImwR,EAAUqK,EAAiBx6R,GAC1BmwR,GAGHiL,EAAiBjL,EACjBznR,KAAK0wR,cAAe,GAHpBtlR,QAAQC,KAAK,6DAKjB,GAGF,KAAQ,CACN+/E,YAAY,EACZtqF,IAAK,WACH,OAAO6xR,CACT,EACAhyR,IAAK,SAASrJ,GACZ,GAAIA,EAAQ,GAAKA,EAAQ,IACvB,MAAM,IAAImC,MAAM,mCAElBk5R,EAAQr7R,EACR0I,KAAK0wR,cAAe,CACtB,GAGF,MAAS,CACPtlM,YAAY,EACZtqF,IAAK,WACH,OAAO8xR,CACT,EACAjyR,IAAK,SAASrJ,GACZ,IAAImwR,EAAUqK,EAAiBx6R,GAC/B,IAAKmwR,EACH,MAAM,IAAIqL,YAAY,gEAExBF,EAASnL,EACTznR,KAAK0wR,cAAe,CACtB,KASJ1wR,KAAKi5K,kBAAe3+K,CACtB,CAMA8pK,EAAOhlK,UAAU2zR,aAAe,WAE9B,OAAOnJ,OAAOyG,oBAAoBn6R,OAAQ8J,KAAK8Y,KACjD,EAEA1iB,EAAOC,QAAU+tK,WC7QjB,IAAI4uH,EAAgB,CAClB,IAAI,EACJ,IAAM,GAWR,SAASC,EAAoB37R,GAC3B,MAAwB,kBAAVA,GAAuBA,GAAS,GAAKA,GAAS,GAC9D,CAuGAlB,EAAOC,QApGP,WACE,IAAI68R,EAAS,IACTC,EAAS,EACTC,EAAiB,EACjBC,EAAiB,IACjBC,EAAmB,EACnBC,EAAmB,IACnBC,EAAU,GAEdr0R,OAAO2kK,iBAAiB9jK,KAAM,CAC5B,MAAS,CACPorF,YAAY,EACZtqF,IAAK,WACH,OAAOoyR,CACT,EACAvyR,IAAK,SAASrJ,GACZ,IAAK27R,EAAoB37R,GACvB,MAAM,IAAImC,MAAM,oCAElBy5R,EAAS57R,CACX,GAEF,MAAS,CACP8zF,YAAY,EACZtqF,IAAK,WACH,OAAOqyR,CACT,EACAxyR,IAAK,SAASrJ,GACZ,GAAqB,kBAAVA,EACT,MAAM,IAAIsI,UAAU,kCAEtBuzR,EAAS77R,CACX,GAEF,cAAiB,CACf8zF,YAAY,EACZtqF,IAAK,WACH,OAAOuyR,CACT,EACA1yR,IAAK,SAASrJ,GACZ,IAAK27R,EAAoB37R,GACvB,MAAM,IAAImC,MAAM,4CAElB45R,EAAiB/7R,CACnB,GAEF,cAAiB,CACf8zF,YAAY,EACZtqF,IAAK,WACH,OAAOsyR,CACT,EACAzyR,IAAK,SAASrJ,GACZ,IAAI27R,EAAoB37R,GACtB,MAAM,IAAImC,MAAM,4CAElB25R,EAAiB97R,CACnB,GAEF,gBAAmB,CACjB8zF,YAAY,EACZtqF,IAAK,WACH,OAAOyyR,CACT,EACA5yR,IAAK,SAASrJ,GACZ,IAAK27R,EAAoB37R,GACvB,MAAM,IAAImC,MAAM,8CAElB85R,EAAmBj8R,CACrB,GAEF,gBAAmB,CACjB8zF,YAAY,EACZtqF,IAAK,WACH,OAAOwyR,CACT,EACA3yR,IAAK,SAASrJ,GACZ,IAAK27R,EAAoB37R,GACvB,MAAM,IAAImC,MAAM,8CAElB65R,EAAmBh8R,CACrB,GAEF,OAAU,CACR8zF,YAAY,EACZtqF,IAAK,WACH,OAAO0yR,CACT,EACA7yR,IAAK,SAASrJ,GACZ,IAAImwR,EArGZ,SAA2BnwR,GACzB,MAAqB,kBAAVA,KAGE07R,EAAc17R,EAAMN,gBACjBM,EAAMN,aACxB,CA+FsBy8R,CAAkBn8R,IAEhB,IAAZmwR,EACFr8Q,QAAQC,KAAK,uDAEbmoR,EAAU/L,CAEd,IAGN,sBCpIA,SAASzvR,IACP,OAAO5B,EAAOC,QAAU2B,EAAWmH,OAAOmF,OAASnF,OAAOmF,OAAOvF,OAAS,SAAUG,GAClF,IAAK,IAAIvH,EAAI,EAAGA,EAAIsS,UAAU5L,OAAQ1G,IAAK,CACzC,IAAI0U,EAAIpC,UAAUtS,GAClB,IAAK,IAAIi4G,KAAKvjG,GAAG,CAAG,GAAExO,eAAegB,KAAKwN,EAAGujG,KAAO1wG,EAAE0wG,GAAKvjG,EAAEujG,GAC/D,CACA,OAAO1wG,CACT,EAAG9I,EAAOC,QAAQi0H,YAAa,EAAMl0H,EAAOC,QAAiB,QAAID,EAAOC,QAAS2B,EAASF,MAAM,KAAMmS,UACxG,CACA7T,EAAOC,QAAU2B,EAAU5B,EAAOC,QAAQi0H,YAAa,EAAMl0H,EAAOC,QAAiB,QAAID,EAAOC,UCR5Fq9R,EAA2B,CAAC,EAGhC,SAASC,EAAoBC,GAE5B,IAAIC,EAAeH,EAAyBE,GAC5C,QAAqBt5R,IAAjBu5R,EACH,OAAOA,EAAax9R,QAGrB,IAAID,EAASs9R,EAAyBE,GAAY,CAGjDv9R,QAAS,CAAC,GAOX,OAHAy9R,EAAoBF,GAAU/0R,KAAKzI,EAAOC,QAASD,EAAQA,EAAOC,QAASs9R,GAGpEv9R,EAAOC,OACf,CAGAs9R,EAAoBlzM,EAAIqzM,ECxBxBH,EAAoBz0R,EAAK9I,IACxB,IAAI29R,EAAS39R,GAAUA,EAAOk0H,WAC7B,IAAOl0H,EAAiB,QACxB,IAAM,EAEP,OADAu9R,EAAoBtsM,EAAE0sM,EAAQ,CAAEj1M,EAAGi1M,IAC5BA,CAAM,QCNd,IACIC,EADAC,EAAW90R,OAAOgtH,eAAkBruH,GAASqB,OAAOgtH,eAAeruH,GAASA,GAASA,EAAa,UAQtG61R,EAAoBtnR,EAAI,SAAS/U,EAAOg3G,GAEvC,GADU,EAAPA,IAAUh3G,EAAQ0I,KAAK1I,IAChB,EAAPg3G,EAAU,OAAOh3G,EACpB,GAAoB,kBAAVA,GAAsBA,EAAO,CACtC,GAAW,EAAPg3G,GAAah3G,EAAMgzH,WAAY,OAAOhzH,EAC1C,GAAW,GAAPg3G,GAAoC,oBAAfh3G,EAAMmzG,KAAqB,OAAOnzG,CAC5D,CACA,IAAIoY,EAAKvQ,OAAOm3G,OAAO,MACvBq9K,EAAoB/jL,EAAElgG,GACtB,IAAIoxH,EAAM,CAAC,EACXkzJ,EAAiBA,GAAkB,CAAC,KAAMC,EAAS,CAAC,GAAIA,EAAS,IAAKA,EAASA,IAC/E,IAAI,IAAI5qR,EAAiB,EAAPilG,GAAYh3G,EAAyB,iBAAX+R,KAAyB2qR,EAAel7R,QAAQuQ,GAAUA,EAAU4qR,EAAS5qR,GACxHlK,OAAOwnJ,oBAAoBt9I,GAAS1Q,SAASI,GAAS+nI,EAAI/nI,GAAO,IAAOzB,EAAMyB,KAI/E,OAFA+nI,EAAa,QAAI,IAAM,EACvB6yJ,EAAoBtsM,EAAE33E,EAAIoxH,GACnBpxH,CACR,MCxBAikR,EAAoBtsM,EAAI,CAAChxF,EAAS69R,KACjC,IAAI,IAAIn7R,KAAOm7R,EACXP,EAAoBl1R,EAAEy1R,EAAYn7R,KAAS46R,EAAoBl1R,EAAEpI,EAAS0C,IAC5EoG,OAAOka,eAAehjB,EAAS0C,EAAK,CAAEqyF,YAAY,EAAMtqF,IAAKozR,EAAWn7R,IAE1E,ECND46R,EAAoB71M,EAAI,CAAC,EAGzB61M,EAAoBh8R,EAAKw8R,GACjB9pL,QAAQq4C,IAAIvjJ,OAAO0M,KAAK8nR,EAAoB71M,GAAG5mF,QAAO,CAACk9R,EAAUr7R,KACvE46R,EAAoB71M,EAAE/kF,GAAKo7R,EAASC,GAC7BA,IACL,KCNJT,EAAoBlrL,EAAK0rL,GAEjB,aAAeA,EAAf,qBCFRR,EAAoBU,SAAYF,IAEf,ECHjBR,EAAoBrsM,EAAI,WACvB,GAA0B,kBAAfggI,WAAyB,OAAOA,WAC3C,IACC,OAAOtnN,MAAQ,IAAI0H,SAAS,cAAb,EAChB,CAAE,MAAO/P,GACR,GAAsB,kBAAXzB,OAAqB,OAAOA,MACxC,CACA,CAPuB,GCAxBy9R,EAAoBl1R,EAAI,CAACX,EAAK+1D,IAAU10D,OAAOC,UAAUvB,eAAegB,KAAKf,EAAK+1D,SCAlF,IAAIygO,EAAa,CAAC,EACdC,EAAoB,YAExBZ,EAAoB1tR,EAAI,CAACpM,EAAK8F,EAAM5G,EAAKo7R,KACxC,GAAGG,EAAWz6R,GAAQy6R,EAAWz6R,GAAKV,KAAKwG,OAA3C,CACA,IAAI0pK,EAAQmrH,EACZ,QAAWl6R,IAARvB,EAEF,IADA,IAAI07R,EAAUhzM,SAASjpE,qBAAqB,UACpCza,EAAI,EAAGA,EAAI02R,EAAQp2R,OAAQN,IAAK,CACvC,IAAIygF,EAAIi2M,EAAQ12R,GAChB,GAAGygF,EAAE5nE,aAAa,QAAU/c,GAAO2kF,EAAE5nE,aAAa,iBAAmB29Q,EAAoBx7R,EAAK,CAAEswK,EAAS7qF,EAAG,KAAO,CACpH,CAEG6qF,IACHmrH,GAAa,GACbnrH,EAAS5nF,SAASpqE,cAAc,WAEzBvgB,QAAU,QACjBuyK,EAAOpvK,QAAU,IACb05R,EAAoBe,IACvBrrH,EAAOxxJ,aAAa,QAAS87Q,EAAoBe,IAElDrrH,EAAOxxJ,aAAa,eAAgB08Q,EAAoBx7R,GAExDswK,EAAOt9J,IAAMlS,GAEdy6R,EAAWz6R,GAAO,CAAC8F,GACnB,IAAIg1R,EAAmB,CAAC1+I,EAAM1zC,KAE7B8mE,EAAOnsK,QAAUmsK,EAAOpsK,OAAS,KACjC7B,aAAanB,GACb,IAAI26R,EAAUN,EAAWz6R,GAIzB,UAHOy6R,EAAWz6R,GAClBwvK,EAAO9/J,YAAc8/J,EAAO9/J,WAAW8I,YAAYg3J,GACnDurH,GAAWA,EAAQj8R,SAASiP,GAAQA,EAAG26F,KACpC0zC,EAAM,OAAOA,EAAK1zC,EAAM,EAExBtoG,EAAU6B,WAAW64R,EAAiB51R,KAAK,UAAMzE,EAAW,CAAEjD,KAAM,UAAWkN,OAAQ8kK,IAAW,MACtGA,EAAOnsK,QAAUy3R,EAAiB51R,KAAK,KAAMsqK,EAAOnsK,SACpDmsK,EAAOpsK,OAAS03R,EAAiB51R,KAAK,KAAMsqK,EAAOpsK,QACnDu3R,GAAc/yM,SAAS8oE,KAAK3jJ,YAAYyiK,EApCkB,CAoCX,MCvChDsqH,EAAoB/jL,EAAKv5G,IACH,qBAAXuI,QAA0BA,OAAOyrH,aAC1ClrH,OAAOka,eAAehjB,EAASuI,OAAOyrH,YAAa,CAAE/yH,MAAO,WAE7D6H,OAAOka,eAAehjB,EAAS,aAAc,CAAEiB,OAAO,GAAO,ECL9Dq8R,EAAoB1nR,EAAI,UCKxB,IAAI4oR,EAAkB,CACrB,IAAK,GAGNlB,EAAoB71M,EAAE6sC,EAAI,CAACwpK,EAASC,KAElC,IAAIU,EAAqBnB,EAAoBl1R,EAAEo2R,EAAiBV,GAAWU,EAAgBV,QAAW75R,EACtG,GAA0B,IAAvBw6R,EAGF,GAAGA,EACFV,EAASj7R,KAAK27R,EAAmB,QAC3B,CAGL,IAAIn0F,EAAU,IAAIt2F,SAAQ,CAACG,EAAS4/D,IAAY0qH,EAAqBD,EAAgBV,GAAW,CAAC3pL,EAAS4/D,KAC1GgqH,EAASj7R,KAAK27R,EAAmB,GAAKn0F,GAGtC,IAAI9mM,EAAM85R,EAAoB1nR,EAAI0nR,EAAoBlrL,EAAE0rL,GAEpDlsR,EAAQ,IAAIxO,MAgBhBk6R,EAAoB1tR,EAAEpM,GAfF0oG,IACnB,GAAGoxL,EAAoBl1R,EAAEo2R,EAAiBV,KAEf,KAD1BW,EAAqBD,EAAgBV,MACRU,EAAgBV,QAAW75R,GACrDw6R,GAAoB,CACtB,IAAIjgF,EAAYtyG,IAAyB,SAAfA,EAAMlrG,KAAkB,UAAYkrG,EAAMlrG,MAChE09R,EAAUxyL,GAASA,EAAMh+F,QAAUg+F,EAAMh+F,OAAOwH,IACpD9D,EAAMoG,QAAU,iBAAmB8lR,EAAU,cAAgBt/E,EAAY,KAAOkgF,EAAU,IAC1F9sR,EAAM1I,KAAO,iBACb0I,EAAM5Q,KAAOw9M,EACb5sM,EAAMw5L,QAAUszF,EAChBD,EAAmB,GAAG7sR,EACvB,CACD,GAEwC,SAAWksR,EAASA,EAE/D,CACD,EAcF,IAAIa,EAAuB,CAACC,EAA4Bt4R,KACvD,IAKIi3R,EAAUO,EALVe,EAAWv4R,EAAK,GAChBw4R,EAAcx4R,EAAK,GACnBy4R,EAAUz4R,EAAK,GAGIoB,EAAI,EAC3B,GAAGm3R,EAAShoK,MAAMx2G,GAAgC,IAAxBm+Q,EAAgBn+Q,KAAa,CACtD,IAAIk9Q,KAAYuB,EACZxB,EAAoBl1R,EAAE02R,EAAavB,KACrCD,EAAoBlzM,EAAEmzM,GAAYuB,EAAYvB,IAGhD,GAAGwB,EAAsBA,EAAQzB,EAClC,CAEA,IADGsB,GAA4BA,EAA2Bt4R,GACrDoB,EAAIm3R,EAAS72R,OAAQN,IACzBo2R,EAAUe,EAASn3R,GAChB41R,EAAoBl1R,EAAEo2R,EAAiBV,IAAYU,EAAgBV,IACrEU,EAAgBV,GAAS,KAE1BU,EAAgBV,GAAW,CAC5B,EAIGkB,EAAqB1zM,KAA2B,qBAAIA,KAA2B,sBAAK,GACxF0zM,EAAmB18R,QAAQq8R,EAAqBj2R,KAAK,KAAM,IAC3Ds2R,EAAmBl8R,KAAO67R,EAAqBj2R,KAAK,KAAMs2R,EAAmBl8R,KAAK4F,KAAKs2R,+KChF3EC,uRAAZ,SAAYA,GAQVA,EAAA,UAOAA,EAAA,YAMAA,EAAA,iBACD,CAtBD,CAAYA,IAAAA,EAsBX,KAqKD,MAAMC,EAAoB,WAySV,SAAAC,EAAUl+R,EAAY+W,GACpC,IAAc,IAAV/W,GAA6B,OAAVA,GAAmC,qBAAVA,EAC9C,MAAM,IAAImC,MAAM4U,EAEpB,CAEgB,SAAAlD,EAAQsqR,EAAWpnR,GACjC,IAAKonR,EAAM,CAEc,qBAAZrqR,SAAyBA,QAAQC,KAAKgD,GAEjD,IAME,MAAM,IAAI5U,MAAM4U,EAEjB,CAAC,MAAO1W,GAAI,CACd,CACH,CASA,SAAS+9R,EAAgBxwM,EAAoBrsF,GAC3C,MAAO,CACL88R,IAAKzwM,EAASy0B,MACd5gH,IAAKmsF,EAASnsF,IACd06N,IAAK56N,EAET,CAKM,SAAU+8R,EACdvsR,EACAqnJ,EACA/2C,EACA5gH,GAcA,YAfA,IAAA4gH,IAAAA,EAAa,MAGD3hH,EAAA,CACVyuP,SAA6B,kBAAZp9O,EAAuBA,EAAUA,EAAQo9O,SAC1DxkJ,OAAQ,GACR6oB,KAAM,IACY,kBAAP4lC,EAAkBmlI,EAAUnlI,GAAMA,EAAE,CAC/C/2C,QAKA5gH,IAAM23J,GAAOA,EAAgB33J,KAAQA,GAjChCuK,KAAKC,SAASlE,SAAS,IAAIiH,OAAO,EAAG,IAoC9C,CAKgB,SAAAwvR,EAAUnzR,GAIV,IAJW,SACzB8jP,EAAW,IAAG,OACdxkJ,EAAS,GAAE,KACX6oB,EAAO,IACOnoH,EAKd,OAJIs/F,GAAqB,MAAXA,IACZwkJ,GAAiC,MAArBxkJ,EAAOxjB,OAAO,GAAawjB,EAAS,IAAMA,GACpD6oB,GAAiB,MAATA,IACV27H,GAA+B,MAAnB37H,EAAKrsC,OAAO,GAAaqsC,EAAO,IAAMA,GAC7C27H,CACT,CAKM,SAAUovC,EAAUt8J,GACxB,IAAIw8J,EAA4B,CAAC,EAEjC,GAAIx8J,EAAM,CACR,IAAIy8J,EAAYz8J,EAAKzgI,QAAQ,KACzBk9R,GAAa,IACfD,EAAWjrK,KAAOyO,EAAKjzH,OAAO0vR,GAC9Bz8J,EAAOA,EAAKjzH,OAAO,EAAG0vR,IAGxB,IAAIC,EAAc18J,EAAKzgI,QAAQ,KAC3Bm9R,GAAe,IACjBF,EAAW9zL,OAASs3B,EAAKjzH,OAAO2vR,GAChC18J,EAAOA,EAAKjzH,OAAO,EAAG2vR,IAGpB18J,IACFw8J,EAAWtvC,SAAWltH,EAEzB,CAED,OAAOw8J,CACT,CASA,SAASG,EACPC,EACAC,EACAC,EACA/8R,QAAA,IAAAA,IAAAA,EAA6B,CAAC,GAE9B,IAAI,OAAEpD,EAASurF,SAASujB,YAAY,SAAEsxL,GAAW,GAAUh9R,EACvDi9R,EAAgBrgS,EAAOirJ,QACvBjsC,EAASogL,EAAOkB,IAChB1uL,EAA4B,KAE5BjvG,EAAQ49R,IASZ,SAASA,IAEP,OADYF,EAAc58K,OAAS,CAAE85G,IAAK,OAC7BA,GACf,CAEA,SAASijE,IACPxhL,EAASogL,EAAOkB,IAChB,IAAIG,EAAYF,IACZ3mQ,EAAqB,MAAb6mQ,EAAoB,KAAOA,EAAY99R,EACnDA,EAAQ89R,EACJ7uL,GACFA,EAAS,CAAEoN,SAAQhwB,SAAUi8D,EAAQj8D,SAAUp1D,SAEnD,CA+CA,SAAS8mQ,EAAUlmI,GAIjB,IAAI15I,EACyB,SAA3B9gB,EAAOgvF,SAAS+8E,OACZ/rK,EAAOgvF,SAAS+8E,OAChB/rK,EAAOgvF,SAASqf,KAElBA,EAAqB,kBAAPmsD,EAAkBA,EAAKolI,EAAWplI,GASpD,OALAnsD,EAAOA,EAAKh/F,QAAQ,KAAM,OAC1BiwR,EACEx+Q,EACsE,sEAAAutF,GAEjE,IAAIs2B,IAAIt2B,EAAMvtF,EACvB,CApFa,MAATne,IACFA,EAAQ,EACR09R,EAAcM,aAAY7+R,EAAM,GAAAu+R,EAAc58K,MAAO,CAAA85G,IAAK56N,IAAS,KAoFrE,IAAIsoJ,EAAmB,CACrB,UAAIjsC,GACF,OAAOA,GAET,YAAIhwB,GACF,OAAOixM,EAAYjgS,EAAQqgS,IAE7BxnI,MAAAA,CAAOnnJ,GACL,GAAIkgG,EACF,MAAM,IAAIruG,MAAM,8CAKlB,OAHAvD,EAAOg9F,iBAAiBqiM,EAAmBmB,GAC3C5uL,EAAWlgG,EAEJ,KACL1R,EAAOi9F,oBAAoBoiM,EAAmBmB,GAC9C5uL,EAAW,IAAI,GAGnBsuL,WAAW1lI,GACF0lI,EAAWlgS,EAAQw6J,GAE5BkmI,YACAE,cAAAA,CAAepmI,GAEb,IAAI72J,EAAM+8R,EAAUlmI,GACpB,MAAO,CACL+1F,SAAU5sP,EAAI4sP,SACdxkJ,OAAQpoG,EAAIooG,OACZ6oB,KAAMjxH,EAAIixH,OAGd3xH,KAlGF,SAAcu3J,EAAQ/2C,GACpBzE,EAASogL,EAAOyB,KAChB,IAAI7xM,EAAW0wM,EAAez0I,EAAQj8D,SAAUwrE,EAAI/2C,GAChD08K,GAAkBA,EAAiBnxM,EAAUwrE,GAEjD73J,EAAQ49R,IAAa,EACrB,IAAIO,EAAetB,EAAgBxwM,EAAUrsF,GACzCgB,EAAMsnJ,EAAQi1I,WAAWlxM,GAG7B,IACEqxM,EAAcU,UAAUD,EAAc,GAAIn9R,GAC1C,MAAOoO,GAKP,GAAIA,aAAiBmG,cAA+B,mBAAfnG,EAAM1I,KACzC,MAAM0I,EAIR/R,EAAOgvF,SAAS5gF,OAAOzK,EACxB,CAEGy8R,GAAYxuL,GACdA,EAAS,CAAEoN,SAAQhwB,SAAUi8D,EAAQj8D,SAAUp1D,MAAO,GAE1D,EAuEEvqB,QArEF,SAAiBmrJ,EAAQ/2C,GACvBzE,EAASogL,EAAO4B,QAChB,IAAIhyM,EAAW0wM,EAAez0I,EAAQj8D,SAAUwrE,EAAI/2C,GAChD08K,GAAkBA,EAAiBnxM,EAAUwrE,GAEjD73J,EAAQ49R,IACR,IAAIO,EAAetB,EAAgBxwM,EAAUrsF,GACzCgB,EAAMsnJ,EAAQi1I,WAAWlxM,GAC7BqxM,EAAcM,aAAaG,EAAc,GAAIn9R,GAEzCy8R,GAAYxuL,GACdA,EAAS,CAAEoN,SAAQhwB,SAAUi8D,EAAQj8D,SAAUp1D,MAAO,GAE1D,EAyDEqnQ,GAAGj4R,GACMq3R,EAAcY,GAAGj4R,IAI5B,OAAOiiJ,CACT,CC7tBA,IAAYi2I,GAAZ,SAAYA,GACVA,EAAA,YACAA,EAAA,oBACAA,EAAA,oBACAA,EAAA,aACD,CALD,CAAYA,IAAAA,EAKX,KAmRiC,IAAIx2R,IAAuB,CAC3D,OACA,gBACA,OACA,KACA,QACA,aAoNI,SAAUy2R,EAGdC,EACAC,EACAC,GAEA,YAFQ,IAARA,IAAAA,EAAW,KAEJC,EAAgBH,EAAQC,EAAaC,GAAU,EACxD,CAEM,SAAUC,EAGdH,EACAC,EACAC,EACAE,GAEA,IAGIjxC,EAAWkxC,GAFU,kBAAhBJ,EAA2B1B,EAAU0B,GAAeA,GAEvB9wC,UAAY,IAAK+wC,GAEvD,GAAgB,MAAZ/wC,EACF,OAAO,KAGT,IAAImxC,EAAWC,EAAcP,IAmM/B,SAA2BM,GACzBA,EAASxqK,MAAK,CAACtuC,EAAG4H,IAChB5H,EAAEg5M,QAAUpxM,EAAEoxM,MACVpxM,EAAEoxM,MAAQh5M,EAAEg5M,MAyCpB,SAAwBh5M,EAAa4H,GACnC,IAAIqxM,EACFj5M,EAAEzgF,SAAWqoF,EAAEroF,QAAUygF,EAAE9lF,MAAM,GAAI,GAAGoe,OAAM,CAAClY,EAAGnB,IAAMmB,IAAMwnF,EAAE3oF,KAElE,OAAOg6R,EAKHj5M,EAAEA,EAAEzgF,OAAS,GAAKqoF,EAAEA,EAAEroF,OAAS,GAG/B,CACN,CArDQ25R,CACEl5M,EAAEm5M,WAAW5hR,KAAKk7E,GAASA,EAAK2mM,gBAChCxxM,EAAEuxM,WAAW5hR,KAAKk7E,GAASA,EAAK2mM,kBAG1C,CA3MEC,CAAkBP,GAElB,IAAI1gR,EAAU,KACd,IAAK,IAAInZ,EAAI,EAAc,MAAXmZ,GAAmBnZ,EAAI65R,EAASv5R,SAAUN,EAAG,CAO3D,IAAIq6R,EAAUC,EAAW5xC,GACzBvvO,EAAUohR,EACRV,EAAS75R,GACTq6R,EACAV,EAEH,CAED,OAAOxgR,CACT,CAyCA,SAAS2gR,EAGPP,EACAM,EACAW,EACAC,QAF2C,IAA3CZ,IAAAA,EAA2C,SAC3C,IAAAW,IAAAA,EAA4C,SAClC,IAAVC,IAAAA,EAAa,IAEb,IAAIC,EAAeA,CACjBC,EACA7/R,EACA8/R,KAEA,IAAIpnM,EAAmC,CACrConM,kBACmBr+R,IAAjBq+R,EAA6BD,EAAMn/J,MAAQ,GAAKo/J,EAClDC,eAAuC,IAAxBF,EAAME,cACrBV,cAAer/R,EACf6/R,SAGEnnM,EAAKonM,aAAapqB,WAAW,OAC/BinB,EACEjkM,EAAKonM,aAAapqB,WAAWiqB,GAC7B,wBAAwBjnM,EAAKonM,aAA7B,wBACMH,EADN,4GAKFjnM,EAAKonM,aAAepnM,EAAKonM,aAAa3/R,MAAMw/R,EAAWn6R,SAGzD,IAAIk7H,EAAOs/J,EAAU,CAACL,EAAYjnM,EAAKonM,eACnCV,EAAaM,EAAY7wL,OAAOnW,GAKhCmnM,EAAM3rM,UAAY2rM,EAAM3rM,SAAS1uF,OAAS,IAC5Cm3R,GAGkB,IAAhBkD,EAAM7/R,MACN,4FACuC0gI,EAAI,MAE7Cs+J,EAAca,EAAM3rM,SAAU6qM,EAAUK,EAAY1+J,KAKpC,MAAdm/J,EAAMn/J,MAAiBm/J,EAAM7/R,QAIjC++R,EAASz+R,KAAK,CACZogI,OACAu+J,MAAOgB,EAAav/J,EAAMm/J,EAAM7/R,OAChCo/R,cACA,EAaJ,OAXAX,EAAO3+R,SAAQ,CAAC+/R,EAAO7/R,KAAS,IAAAkgS,EAE9B,GAAmB,KAAfL,EAAMn/J,MAA0B,OAAXw/J,EAACL,EAAMn/J,OAANw/J,EAAY3uM,SAAS,KAG7C,IAAK,IAAI4uM,KAAYC,EAAwBP,EAAMn/J,MACjDk/J,EAAaC,EAAO7/R,EAAOmgS,QAH7BP,EAAaC,EAAO7/R,EAKrB,IAGI++R,CACT,CAgBA,SAASqB,EAAwB1/J,GAC/B,IAAI4G,EAAW5G,EAAKtiI,MAAM,KAC1B,GAAwB,IAApBkpI,EAAS9hI,OAAc,MAAO,GAElC,IAAK66R,KAAUC,GAAQh5J,EAGnBi5J,EAAaF,EAAMG,SAAS,KAE5Bl1J,EAAW+0J,EAAM3zR,QAAQ,MAAO,IAEpC,GAAoB,IAAhB4zR,EAAK96R,OAGP,OAAO+6R,EAAa,CAACj1J,EAAU,IAAM,CAACA,GAGxC,IAAIm1J,EAAeL,EAAwBE,EAAKplR,KAAK,MAEjDrb,EAAmB,GAqBvB,OAZAA,EAAOS,QACFmgS,EAAajjR,KAAKkjR,GACP,KAAZA,EAAiBp1J,EAAW,CAACA,EAAUo1J,GAASxlR,KAAK,QAKrDqlR,GACF1gS,EAAOS,QAAQmgS,GAIV5gS,EAAO2d,KAAK2iR,GACjBz/J,EAAKg1I,WAAW,MAAqB,KAAbyqB,EAAkB,IAAMA,GAEpD,CAaA,MAAMQ,EAAU,YACVC,EAAsB,EACtBC,EAAkB,EAClBC,EAAoB,EACpBC,EAAqB,GACrBC,GAAgB,EAChBC,EAAWt7M,GAAoB,MAANA,EAE/B,SAASs6M,EAAav/J,EAAc1gI,GAClC,IAAIsnI,EAAW5G,EAAKtiI,MAAM,KACtB8iS,EAAe55J,EAAS9hI,OAS5B,OARI8hI,EAASjT,KAAK4sK,KAChBC,GAAgBF,GAGdhhS,IACFkhS,GAAgBL,GAGXv5J,EACJx0H,QAAQ6yE,IAAOs7M,EAAQt7M,KACvBtnF,QACC,CAAC4gS,EAAOz5J,IACNy5J,GACC0B,EAAQ/5R,KAAK4+H,GACVo7J,EACY,KAAZp7J,EACAs7J,EACAC,IACNG,EAEN,CAiBA,SAASzB,EAIP0B,EACAvzC,EACAixC,QAAY,IAAZA,IAAAA,GAAe,GAEf,IAAI,WAAEO,GAAe+B,EAEjBC,EAAgB,CAAC,EACjBC,EAAkB,IAClBhjR,EAA2D,GAC/D,IAAK,IAAInZ,EAAI,EAAGA,EAAIk6R,EAAW55R,SAAUN,EAAG,CAC1C,IAAIwzF,EAAO0mM,EAAWl6R,GAClB2hF,EAAM3hF,IAAMk6R,EAAW55R,OAAS,EAChC87R,EACkB,MAApBD,EACIzzC,EACAA,EAASztP,MAAMkhS,EAAgB77R,SAAW,IAC5CugF,EAAQw7M,EACV,CAAE7gK,KAAMhoC,EAAKonM,aAAcC,cAAernM,EAAKqnM,cAAel5M,OAC9Dy6M,GAGEzB,EAAQnnM,EAAKmnM,MAkBjB,IAfG95M,GACDc,GACAg4M,IACCO,EAAWA,EAAW55R,OAAS,GAAGq6R,MAAM7/R,QAEzC+lF,EAAQw7M,EACN,CACE7gK,KAAMhoC,EAAKonM,aACXC,cAAernM,EAAKqnM,cACpBl5M,KAAK,GAEPy6M,KAICv7M,EACH,OAAO,KAGTz/E,OAAOmF,OAAO21R,EAAer7M,EAAMrlF,QAEnC2d,EAAQ/d,KAAK,CAEXI,OAAQ0gS,EACRxzC,SAAUoyC,EAAU,CAACqB,EAAiBt7M,EAAM6nK,WAC5C4zC,aAAcC,EACZzB,EAAU,CAACqB,EAAiBt7M,EAAMy7M,gBAEpC3B,UAGyB,MAAvB95M,EAAMy7M,eACRH,EAAkBrB,EAAU,CAACqB,EAAiBt7M,EAAMy7M,eAEvD,CAED,OAAOnjR,CACT,CAiHgB,SAAAkjR,EAIdG,EACA9zC,GAEuB,kBAAZ8zC,IACTA,EAAU,CAAEhhK,KAAMghK,EAAS3B,eAAe,EAAOl5M,KAAK,IAGxD,IAAK86M,EAASC,GA4ChB,SACElhK,EACAq/J,EACAl5M,QADa,IAAbk5M,IAAAA,GAAgB,QACb,IAAHl5M,IAAAA,GAAM,GAENv0E,EACW,MAATouH,IAAiBA,EAAK8/J,SAAS,MAAQ9/J,EAAK8/J,SAAS,MACrD,eAAe9/J,EAAf,oCACMA,EAAKh0H,QAAQ,MAAO,MAD1B,qIAGsCg0H,EAAKh0H,QAAQ,MAAO,MAAK,MAGjE,IAAIhM,EAA8B,GAC9BmhS,EACF,IACAnhK,EACGh0H,QAAQ,UAAW,IACnBA,QAAQ,OAAQ,KAChBA,QAAQ,qBAAsB,QAC9BA,QACC,qBACA,CAACmlH,EAAWiwK,EAAmBvB,KAC7B7/R,EAAOJ,KAAK,CAAEwhS,YAAWvB,WAA0B,MAAdA,IAC9BA,EAAa,eAAiB,gBAIzC7/J,EAAK8/J,SAAS,MAChB9/R,EAAOJ,KAAK,CAAEwhS,UAAW,MACzBD,GACW,MAATnhK,GAAyB,OAATA,EACZ,QACA,qBACG75C,EAETg7M,GAAgB,QACE,KAATnhK,GAAwB,MAATA,IAQxBmhK,GAAgB,iBAKlB,IAAIF,EAAU,IAAI78M,OAAO+8M,EAAc9B,OAAgBt+R,EAAY,KAEnE,MAAO,CAACkgS,EAASjhS,EACnB,CAjGkCqhS,CAC9BL,EAAQhhK,KACRghK,EAAQ3B,cACR2B,EAAQ76M,KAGNd,EAAQ6nK,EAAS7nK,MAAM47M,GAC3B,IAAK57M,EAAO,OAAO,KAEnB,IAAIs7M,EAAkBt7M,EAAM,GACxBy7M,EAAeH,EAAgB30R,QAAQ,UAAW,MAClDs1R,EAAgBj8M,EAAM5lF,MAAM,GAuBhC,MAAO,CACLO,OAvBmBkhS,EAAevjS,QAClC,CAAC8/H,EAAIr0H,EAA6B9J,KAAS,IAApC,UAAE8hS,EAAS,WAAEvB,GAAYz2R,EAG9B,GAAkB,MAAdg4R,EAAmB,CACrB,IAAIG,EAAaD,EAAchiS,IAAU,GACzCwhS,EAAeH,EACZlhS,MAAM,EAAGkhS,EAAgB77R,OAASy8R,EAAWz8R,QAC7CkH,QAAQ,UAAW,KACvB,CAED,MAAMjO,EAAQujS,EAAchiS,GAM5B,OAJEm+H,EAAK2jK,GADHvB,IAAe9hS,OACCgD,GAEChD,GAAS,IAAIiO,QAAQ,OAAQ,KAE3CyxH,CAAI,GAEb,CAAC,GAKDyvH,SAAUyzC,EACVG,eACAE,UAEJ,CA2DM,SAAUlC,EAAW/gS,GACzB,IACE,OAAOA,EACJL,MAAM,KACNof,KAAKrB,GAAMywH,mBAAmBzwH,GAAGzP,QAAQ,MAAO,SAChDwO,KAAK,KACR,MAAO9L,GAQP,OAPAkD,GACE,EACA,iBAAiB7T,EAAjB,oHAEe2Q,EAAK,MAGf3Q,CACR,CACH,CAKgB,SAAAqgS,EACdlxC,EACA+wC,GAEA,GAAiB,MAAbA,EAAkB,OAAO/wC,EAE7B,IAAKA,EAASzvP,cAAcu3Q,WAAWipB,EAASxgS,eAC9C,OAAO,KAKT,IAAIonF,EAAao5M,EAAS6B,SAAS,KAC/B7B,EAASn5R,OAAS,EAClBm5R,EAASn5R,OACT08R,EAAWt0C,EAAShoK,OAAOL,GAC/B,OAAI28M,GAAyB,MAAbA,EAEP,KAGFt0C,EAASztP,MAAMolF,IAAe,GACvC,CA2CA,SAAS48M,EACP1xL,EACAwyH,EACA9vN,EACAutH,GAEA,MACE,qBAAqBjwB,EAArB,2CACQwyH,EAAK,YAAa9gO,KAAK8B,UAC7By8H,GAFF,yCAIQvtH,EAJR,2HAOJ,CAyBM,SAAUivR,EAEd/jR,GACA,OAAOA,EAAQvL,QACb,CAACizE,EAAO/lF,IACI,IAAVA,GAAgB+lF,EAAM85M,MAAMn/J,MAAQ36C,EAAM85M,MAAMn/J,KAAKl7H,OAAS,GAEpE,CAIgB,SAAA68R,EAEdhkR,EAAcikR,GACd,IAAIC,EAAcH,EAA2B/jR,GAK7C,OAAIikR,EACKC,EAAY/kR,KAAI,CAACuoE,EAAO60I,IAC7BA,IAAQ2nE,EAAY/8R,OAAS,EAAIugF,EAAM6nK,SAAW7nK,EAAMy7M,eAIrDe,EAAY/kR,KAAKuoE,GAAUA,EAAMy7M,cAC1C,CAKM,SAAUgB,EACdC,EACAC,EACAC,EACAC,GAEA,IAAI/qI,OAFU,IAAd+qI,IAAAA,GAAiB,GAGI,kBAAVH,EACT5qI,EAAKmlI,EAAUyF,IAEf5qI,EAAE14J,EAAQ,GAAAsjS,GAEV9F,GACG9kI,EAAG+1F,WAAa/1F,EAAG+1F,SAASr8J,SAAS,KACtC4wM,EAAoB,IAAK,WAAY,SAAUtqI,IAEjD8kI,GACG9kI,EAAG+1F,WAAa/1F,EAAG+1F,SAASr8J,SAAS,KACtC4wM,EAAoB,IAAK,WAAY,OAAQtqI,IAE/C8kI,GACG9kI,EAAGzuD,SAAWyuD,EAAGzuD,OAAO7X,SAAS,KAClC4wM,EAAoB,IAAK,SAAU,OAAQtqI,KAI/C,IAGIlxJ,EAHAk8R,EAAwB,KAAVJ,GAAgC,KAAhB5qI,EAAG+1F,SACjCk1C,EAAaD,EAAc,IAAMhrI,EAAG+1F,SAaxC,GAAkB,MAAdk1C,EACFn8R,EAAOg8R,MACF,CACL,IAAII,EAAqBL,EAAel9R,OAAS,EAMjD,IAAKo9R,GAAkBE,EAAWptB,WAAW,MAAO,CAClD,IAAIniI,EAAauvJ,EAAW1kS,MAAM,KAElC,KAAyB,OAAlBm1I,EAAW,IAChBA,EAAWpzC,QACX4iM,GAAsB,EAGxBlrI,EAAG+1F,SAAWr6G,EAAWr4H,KAAK,IAC/B,CAEDvU,EAAOo8R,GAAsB,EAAIL,EAAeK,GAAsB,GACvE,CAED,IAAIriK,WAzKsBm3B,EAAQmrI,QAAY,IAAZA,IAAAA,EAAe,KACjD,IACEp1C,SAAUk1C,EAAU,OACpB15L,EAAS,GAAE,KACX6oB,EAAO,IACS,kBAAP4lC,EAAkBmlI,EAAUnlI,GAAMA,EAEzC+1F,EAAWk1C,EACXA,EAAWptB,WAAW,KACpBotB,EAWR,SAAyBhD,EAAsBkD,GAC7C,IAAI17J,EAAW07J,EAAat2R,QAAQ,OAAQ,IAAItO,MAAM,KAYtD,OAXuB0hS,EAAa1hS,MAAM,KAEzB0B,SAAS0lI,IACR,OAAZA,EAEE8B,EAAS9hI,OAAS,GAAG8hI,EAASn/C,MACb,MAAZq9C,GACT8B,EAAShnI,KAAKklI,EACf,IAGI8B,EAAS9hI,OAAS,EAAI8hI,EAASpsH,KAAK,KAAO,GACpD,CAxBQ+nR,CAAgBH,EAAYE,GAC9BA,EAEJ,MAAO,CACLp1C,WACAxkJ,OAAQ85L,EAAgB95L,GACxB6oB,KAAMkxK,EAAclxK,GAExB,CAuJamxK,CAAYvrI,EAAIlxJ,GAGvB08R,EACFP,GAA6B,MAAfA,GAAsBA,EAAWtC,SAAS,KAEtD8C,GACDT,GAA8B,MAAfC,IAAuBH,EAAiBnC,SAAS,KAQnE,OANG9/J,EAAKktH,SAAS4yC,SAAS,OACvB6C,IAA4BC,IAE7B5iK,EAAKktH,UAAY,KAGZltH,CACT,OAiBas/J,EAAa/sK,GACxBA,EAAM/3G,KAAK,KAAKxO,QAAQ,SAAU,KAKvB+0R,EAAqB7zC,GAChCA,EAASlhP,QAAQ,OAAQ,IAAIA,QAAQ,OAAQ,KAKlCw2R,EAAmB95L,GAC7BA,GAAqB,MAAXA,EAEPA,EAAOssK,WAAW,KAClBtsK,EACA,IAAMA,EAHN,GAQO+5L,EAAiBlxK,GAC3BA,GAAiB,MAATA,EAAoBA,EAAKyjJ,WAAW,KAAOzjJ,EAAO,IAAMA,EAAzC,GAqDgBrxH,MAqSpC,SAAU2iS,EAAqBn0R,GACnC,OACW,MAATA,GACwB,kBAAjBA,EAAM/L,QACe,kBAArB+L,EAAMo0R,YACa,mBAAnBp0R,EAAMk7M,UACb,SAAUl7M,CAEd,CCr/BA,MAAMq0R,EAAgD,CACpD,OACA,MACA,QACA,UAMIC,GAJuB,IAAI37R,IAC/B07R,GAG2C,CAC3C,SACGA,IAEuB,IAAI17R,IAAgB27R,GAEpB,IAAI37R,IAAI,CAAC,IAAK,IAAK,IAAK,IAAK,MACf,IAAIA,IAAI,CAAC,IAAK,MAsrFlBhC,OAAO,gPC5yGtC,MAAM49R,EACXC,EAAAA,cAAoD,MAK/C,MAAMC,EAAyBD,EAAAA,cAEpC,MA8CK,MAAME,EAAoBF,EAAAA,cAC/B,MAYK,MAAMG,EAAkBH,EAAAA,cAC7B,YAaWI,EAAeJ,EAAAA,cAAwC,CAClEK,OAAQ,KACR5lR,QAAS,GACT6lR,aAAa,IAOR,MAAMC,EAAoBP,EAAAA,cAAyB,MClFnD,SAASQ,IACd,OAA4C,MAArCR,EAAAA,WAAiBG,EAC1B,CAYO,SAASM,IAQd,OANED,KADFE,GAAU,GAOHV,EAAAA,WAAiBG,GAAiB13M,QAC3C,CAkDA,SAASk4M,GACP9wM,GAEemwM,EAAAA,WAAiBE,GAAmBxxJ,QAKjDsxJ,EAAAA,gBAAsBnwM,EAE1B,CAQO,SAAS+wM,KACd,IAAI,YAAEN,GAAgBN,EAAAA,WAAiBI,GAGvC,OAAOE,EAq4BT,WACE,IAAI,OAAEO,GAAWC,GAAqBC,GAAeC,mBACjD/mR,EAAKgnR,GAAkBC,GAAoBF,mBAE3CG,EAAYnB,EAAAA,QAAa,GAsB7B,OArBAW,IAA0B,KACxBQ,EAAUv0R,SAAU,CAAI,IAGOozR,EAAAA,aAC/B,SAAC/rI,EAAiBp3J,QAAwB,IAAxBA,IAAAA,EAA2B,CAAC,GAKvCskS,EAAUv0R,UAEG,kBAAPqnJ,EACT4sI,EAAOO,SAASntI,GAEhB4sI,EAAOO,SAASntI,EAAE14J,EAAA,CAAI8lS,YAAapnR,GAAOpd,IAE9C,GACA,CAACgkS,EAAQ5mR,GAIb,CAh6BuBqnR,GAGvB,WAEId,KADFE,GAAU,GAOV,IAAIa,EAAoBvB,EAAAA,WAAiBD,IACrC,SAAEhF,EAAQ,OAAEyG,EAAM,UAAExmK,GAAcglK,EAAAA,WAAiBE,IACnD,QAAEzlR,GAAYulR,EAAAA,WAAiBI,IAC7Bp2C,SAAU+0C,GAAqB0B,IAEjCgB,EAAqBljS,KAAK8B,UAC5BqhS,EAAoBjnR,EAAS+mR,EAAO9C,uBAGlCyC,EAAYnB,EAAAA,QAAa,GAqD7B,OApDAW,IAA0B,KACxBQ,EAAUv0R,SAAU,CAAI,IAGOozR,EAAAA,aAC/B,SAAC/rI,EAAiBp3J,GAKhB,QALwC,IAAxBA,IAAAA,EAA2B,CAAC,IAKvCskS,EAAUv0R,QAAS,OAExB,GAAkB,kBAAPqnJ,EAET,YADAj5B,EAAU0/J,GAAGzmI,GAIf,IAAIn3B,EAAO8hK,EACT3qI,EACA11J,KAAKC,MAAMijS,GACX1C,EACqB,SAArBliS,EAAQ8kS,UASe,MAArBJ,GAA0C,MAAbxG,IAC/Bj+J,EAAKktH,SACe,MAAlBltH,EAAKktH,SACD+wC,EACAqB,EAAU,CAACrB,EAAUj+J,EAAKktH,aAG/BntP,EAAQiM,QAAUkyH,EAAUlyH,QAAUkyH,EAAUt+H,MACjDogI,EACAjgI,EAAQqgH,MACRrgH,EAEJ,GACA,CACEk+R,EACA//J,EACAymK,EACA1C,EACAwC,GAKN,CA1E6CK,EAC7C,CA2EA,MAAMC,GAAgB7B,EAAAA,cAA6B,MAiC5C,SAAS8B,KAKd,IAAI,QAAErnR,GAAYulR,EAAAA,WAAiBI,GAC/B2B,EAAatnR,EAAQA,EAAQ7Y,OAAS,GAC1C,OAAOmgS,EAAcA,EAAWjlS,OAAiB,CAAC,CACpD,CAOO,SAASklS,GACd/tI,EAAMxnB,GAEA,IADN,SAAEk1J,QAA8C,IAAAl1J,EAAG,CAAC,EAACA,GAEjD,OAAE+0J,GAAWxB,EAAAA,WAAiBE,IAC9B,QAAEzlR,GAAYulR,EAAAA,WAAiBI,IAC7Bp2C,SAAU+0C,GAAqB0B,IACjCgB,EAAqBljS,KAAK8B,UAC5BqhS,EAAoBjnR,EAAS+mR,EAAO9C,uBAGtC,OAAOsB,EAAAA,SACL,IACEpB,EACE3qI,EACA11J,KAAKC,MAAMijS,GACX1C,EACa,SAAb4C,IAEJ,CAAC1tI,EAAIwtI,EAAoB1C,EAAkB4C,GAE/C,CAkBO,SAASM,GACdpH,EACAC,EACAoH,EACAV,GAGEhB,KADFE,GAAU,GAOV,IAAI,UAAE1lK,GAAcglK,EAAAA,WAAiBE,IAC/BzlR,QAAS0nR,GAAkBnC,EAAAA,WAAiBI,GAC9C2B,EAAaI,EAAcA,EAAcvgS,OAAS,GAClDwgS,EAAeL,EAAaA,EAAWjlS,OAAS,CAAC,EAEjDulS,GADiBN,GAAaA,EAAW/3C,SACpB+3C,EAAaA,EAAWnE,aAAe,KAC9CmE,GAAcA,EAAW9F,MAqC3C,IAEIxzM,EAFA65M,EAAsB7B,IAG1B,GAAI3F,EAAa,KAAAyH,EACf,IAAIC,EACqB,kBAAhB1H,EAA2B1B,EAAU0B,GAAeA,EAGpC,MAAvBuH,IAC4B,OADFE,EACxBC,EAAkBx4C,eAAQ,EAA1Bu4C,EAA4BzwB,WAAWuwB,KAF3C3B,GAAU,GASVj4M,EAAW+5M,CACb,MACE/5M,EAAW65M,EAGb,IAAIt4C,EAAWvhK,EAASuhK,UAAY,IAEhC0zC,EAAoB1zC,EACxB,GAA2B,MAAvBq4C,EAA4B,CAe9B,IAAII,EAAiBJ,EAAmBv5R,QAAQ,MAAO,IAAItO,MAAM,KAEjEkjS,EAAoB,IADL1zC,EAASlhP,QAAQ,MAAO,IAAItO,MAAM,KACd+B,MAAMkmS,EAAe7gS,QAAQ0V,KAAK,IACvE,CAEA,IAAImD,EAAUmgR,EAAYC,EAAQ,CAAE7wC,SAAU0zC,IAmB9C,IAAIgF,EAAkBC,GACpBloR,GACEA,EAAQb,KAAKuoE,GACXz/E,OAAOmF,OAAO,CAAC,EAAGs6E,EAAO,CACvBrlF,OAAQ4F,OAAOmF,OAAO,CAAC,EAAGu6R,EAAcjgN,EAAMrlF,QAC9CktP,SAAUoyC,EAAU,CAClBiG,EAEArnK,EAAUq/J,eACNr/J,EAAUq/J,eAAel4M,EAAM6nK,UAAUA,SACzC7nK,EAAM6nK,WAEZ4zC,aACyB,MAAvBz7M,EAAMy7M,aACFyE,EACAjG,EAAU,CACRiG,EAEArnK,EAAUq/J,eACNr/J,EAAUq/J,eAAel4M,EAAMy7M,cAAc5zC,SAC7C7nK,EAAMy7M,mBAIxBuE,EACAD,EACAV,GAMF,OAAI1G,GAAe4H,EAEf1C,EAAAA,cAACG,EAAgBrmK,SAAQ,CACvBj/H,MAAO,CACL4tF,SAAQltF,EAAA,CACNyuP,SAAU,IACVxkJ,OAAQ,GACR6oB,KAAM,GACNnR,MAAO,KACP5gH,IAAK,WACFmsF,GAELm6M,eAAgB/J,EAAekB,MAGhC2I,GAKAA,CACT,CAEA,SAASG,KACP,IAAIr3R,EA0cC,WAAkC,IAAAs3R,EACvC,IAAIt3R,EAAQw0R,EAAAA,WAAiBO,GACzBrjL,EAAQ6lL,GAAmB7B,GAAoB8B,eAC/CC,EAAUhC,GAAkBC,GAAoB8B,eAIpD,QAAcnlS,IAAV2N,EACF,OAAOA,EAIT,OAAO,OAAPs3R,EAAO5lL,EAAM6wB,aAAN,EAAA+0J,EAAeG,EACxB,CAvdcC,GACRtxR,EAAU+tR,EAAqBn0R,GAC5BA,EAAM/L,OAAU,IAAA+L,EAAMo0R,WACzBp0R,aAAiBxO,MACjBwO,EAAMoG,QACNrT,KAAK8B,UAAUmL,GACf2hF,EAAQ3hF,aAAiBxO,MAAQwO,EAAM2hF,MAAQ,KAC/Cg2M,EAAY,yBACZC,EAAY,CAAEC,QAAS,SAAU3mH,gBAAiBymH,GAsBtD,OACEnD,EAAAA,cAAAA,EAAAA,SAAA,KACEA,EAAAA,cAAI,2CACJA,EAAAA,cAAA,MAAI9rM,MAAO,CAAEgqI,UAAW,WAAatsN,GACpCu7E,EAAQ6yM,EAAAA,cAAA,OAAK9rM,MAAOkvM,GAAYj2M,GAAe,KAvBtC,KA2BhB,CAEA,MAAMm2M,GAAsBtD,EAAAA,cAAC6C,GAAqB,MAgB3C,MAAMU,WAA4BvD,EAAAA,UAIvCn9R,WAAAA,CAAYylF,GACVg3C,MAAMh3C,GACN/kF,KAAK25G,MAAQ,CACXz0B,SAAUH,EAAMG,SAChB+6M,aAAcl7M,EAAMk7M,aACpBh4R,MAAO88E,EAAM98E,MAEjB,CAEA,+BAAO8yG,CAAyB9yG,GAC9B,MAAO,CAAEA,MAAOA,EAClB,CAEA,+BAAOgyG,CACLl1B,EACA40B,GAUA,OACEA,EAAMz0B,WAAaH,EAAMG,UACD,SAAvBy0B,EAAMsmL,cAAkD,SAAvBl7M,EAAMk7M,aAEjC,CACLh4R,MAAO88E,EAAM98E,MACbi9E,SAAUH,EAAMG,SAChB+6M,aAAcl7M,EAAMk7M,cAQjB,CACLh4R,WAAuB3N,IAAhByqF,EAAM98E,MAAsB88E,EAAM98E,MAAQ0xG,EAAM1xG,MACvDi9E,SAAUy0B,EAAMz0B,SAChB+6M,aAAcl7M,EAAMk7M,cAAgBtmL,EAAMsmL,aAE9C,CAEAjlL,iBAAAA,CAAkB/yG,EAAY6mQ,GAC5B1jQ,QAAQnD,MACN,wDACAA,EACA6mQ,EAEJ,CAEAvkL,MAAAA,GACE,YAA4BjwF,IAArB0F,KAAK25G,MAAM1xG,MAChBw0R,EAAAA,cAACI,EAAatmK,SAAQ,CAACj/H,MAAO0I,KAAK+kF,MAAMm7M,cACvCzD,EAAAA,cAACO,EAAkBzmK,SAAQ,CACzBj/H,MAAO0I,KAAK25G,MAAM1xG,MAClB8kF,SAAU/sF,KAAK+kF,MAAMsvE,aAIzBr0J,KAAK+kF,MAAMgI,QAEf,EASF,SAASozM,GAAax9R,GAAwD,IAAvD,aAAEu9R,EAAY,MAAEthN,EAAK,SAAEmO,GAA8BpqF,EACtEq7R,EAAoBvB,EAAAA,WAAiBD,GAazC,OAREwB,GACAA,EAAkB7yJ,QAClB6yJ,EAAkBoC,gBACjBxhN,EAAM85M,MAAM2H,cAAgBzhN,EAAM85M,MAAM4H,iBAEzCtC,EAAkBoC,cAAcG,2BAA6B3hN,EAAM85M,MAAMhiR,IAIzE+lR,EAAAA,cAACI,EAAatmK,SAAQ,CAACj/H,MAAO4oS,GAC3BnzM,EAGP,CAEO,SAASqyM,GACdloR,EACA0nR,EACAD,EACAV,GAC2B,IAAAuC,EAC3B,QAJ2B,IAA3B5B,IAAAA,EAA8B,SACc,IAA5CD,IAAAA,EAA+C,WACX,IAApCV,IAAAA,EAAuC,MAExB,MAAX/mR,EAAiB,KAAAupR,EACnB,IAAK9B,EACH,OAAO,KAGT,GAAIA,EAAgBn0J,OAGlBtzH,EAAUynR,EAAgBznR,YACrB,MACL,OAAAupR,EAAAxC,IAAAwC,EAAQC,qBACiB,IAAzB9B,EAAcvgS,SACbsgS,EAAgBgC,aACjBhC,EAAgBznR,QAAQ7Y,OAAS,GAUjC,OAAO,KAFP6Y,EAAUynR,EAAgBznR,OAG5B,CACF,CAEA,IAAIioR,EAAkBjoR,EAGlBszH,EAAS,OAAHg2J,EAAG7B,QAAA,EAAA6B,EAAiBh2J,OAC9B,GAAc,MAAVA,EAAgB,CAClB,IAAIo2J,EAAazB,EAAgBnyK,WAC9BvsC,GAAMA,EAAEi4M,MAAMhiR,SAA+Bpc,KAAnB,MAANkwI,OAAM,EAANA,EAAS/pD,EAAEi4M,MAAMhiR,OAGtCkqR,GAAc,GADhBzD,GAAU,GAMVgC,EAAkBA,EAAgBnmS,MAChC,EACAsK,KAAKyhG,IAAIo6L,EAAgB9gS,OAAQuiS,EAAa,GAElD,CAIA,IAAIC,GAAiB,EACjBC,GAAiB,EACrB,GAAInC,GAAmBV,GAAUA,EAAOyC,oBACtC,IAAK,IAAI3iS,EAAI,EAAGA,EAAIohS,EAAgB9gS,OAAQN,IAAK,CAC/C,IAAI6gF,EAAQugN,EAAgBphS,GAM5B,IAJI6gF,EAAM85M,MAAMqI,iBAAmBniN,EAAM85M,MAAMsI,0BAC7CF,EAAgB/iS,GAGd6gF,EAAM85M,MAAMhiR,GAAI,CAClB,IAAI,WAAEuqR,EAAU,OAAEz2J,GAAWm0J,EACzBuC,EACFtiN,EAAM85M,MAAMnhB,aACmBj9Q,IAA/B2mS,EAAWriN,EAAM85M,MAAMhiR,OACrB8zH,QAAqClwI,IAA3BkwI,EAAO5rD,EAAM85M,MAAMhiR,KACjC,GAAIkoE,EAAM85M,MAAM3hK,MAAQmqK,EAAkB,CAIxCL,GAAiB,EAEf1B,EADE2B,GAAiB,EACD3B,EAAgBnmS,MAAM,EAAG8nS,EAAgB,GAEzC,CAAC3B,EAAgB,IAErC,KACF,CACF,CACF,CAGF,OAAOA,EAAgBn8J,aAAY,CAAC85J,EAAQl+M,EAAO/lF,KAEjD,IAAIoP,EACAk5R,GAA8B,EAC9Bd,EAAuC,KACvCW,EAAiD,KA0VzD,IAAqBjoS,EAzVb4lS,IACF12R,EAAQuiI,GAAU5rD,EAAM85M,MAAMhiR,GAAK8zH,EAAO5rD,EAAM85M,MAAMhiR,SAAMpc,EAC5D+lS,EAAezhN,EAAM85M,MAAM2H,cAAgBN,GAEvCc,IACEC,EAAgB,GAAe,IAAVjoS,GAoVZE,EAlVT,kBACA,GAkVIqoS,GAAcroS,KAC1BqoS,GAAcroS,IAAO,GAhVfooS,GAA8B,EAC9BH,EAAyB,MAChBF,IAAkBjoS,IAC3BsoS,GAA8B,EAC9BH,EAAyBpiN,EAAM85M,MAAMsI,wBAA0B,QAKrE,IAAI9pR,EAAU0nR,EAAcl3L,OAAOy3L,EAAgBnmS,MAAM,EAAGH,EAAQ,IAChEwoS,EAAcA,KAChB,IAAIt0M,EAkBJ,OAhBEA,EADE9kF,EACSo4R,EACFc,EACEH,EACFpiN,EAAM85M,MAAM7jK,UAOV4nK,EAAAA,cAAC79M,EAAM85M,MAAM7jK,UAAS,MACxBj2C,EAAM85M,MAAMjtR,QACVmzE,EAAM85M,MAAMjtR,QAEZqxR,EAGXL,EAAAA,cAAC0D,GAAa,CACZvhN,MAAOA,EACPshN,aAAc,CACZpD,SACA5lR,UACA6lR,YAAgC,MAAnB4B,GAEf5xM,SAAUA,GACV,EAMN,OAAO4xM,IACJ//M,EAAM85M,MAAM4H,eAAiB1hN,EAAM85M,MAAM2H,cAA0B,IAAVxnS,GAC1D4jS,EAAAA,cAACuD,GAAmB,CAClB96M,SAAUy5M,EAAgBz5M,SAC1B+6M,aAActB,EAAgBsB,aAC9B5rI,UAAWgsI,EACXp4R,MAAOA,EACP8kF,SAAUs0M,IACVnB,aAAc,CAAEpD,OAAQ,KAAM5lR,UAAS6lR,aAAa,KAGtDsE,GACD,GACA,KACL,CAAC,IAEI7D,GAAc,SAAdA,GAAc,OAAdA,EAAc,wBAAdA,EAAc,gCAAdA,EAAc,gCAAdA,CAAc,EAAdA,IAAc,IAMdG,GAAmB,SAAnBA,GAAmB,OAAnBA,EAAmB,wBAAnBA,EAAmB,8BAAnBA,EAAmB,8BAAnBA,EAAmB,8BAAnBA,EAAmB,8BAAnBA,EAAmB,wCAAnBA,EAAmB,wBAAnBA,EAAmB,gCAAnBA,EAAmB,gCAAnBA,EAAmB,wBAAnBA,CAAmB,EAAnBA,IAAmB,IAmBxB,SAASJ,GAAqB+D,GAC5B,IAAI96I,EAAMi2I,EAAAA,WAAiBD,GAE3B,OADUh2I,GAAV22I,GAAU,GACH32I,CACT,CAEA,SAASg5I,GAAmB8B,GAC1B,IAAI3nL,EAAQ8iL,EAAAA,WAAiBC,GAE7B,OADU/iL,GAAVwjL,GAAU,GACHxjL,CACT,CASA,SAAS+jL,GAAkB4D,GACzB,IAAI5I,EARN,WACE,IAAIA,EAAQ+D,EAAAA,WAAiBI,GAE7B,OADUnE,GAAVyE,GAAU,GACHzE,CACT,CAIc6I,GACRC,EAAY9I,EAAMxhR,QAAQwhR,EAAMxhR,QAAQ7Y,OAAS,GAKrD,OAHEmjS,EAAU9I,MAAMhiR,IADlBymR,GAAU,GAIHqE,EAAU9I,MAAMhiR,EACzB,CA4NA,MAAM0qR,GAAyC,CAAC,ECngCpB3E,EAAsB,gBA+L3C,SAASgF,GAAQhzJ,GAKA,IALC,GACvBiiB,EAAE,QACFnrJ,EAAO,MACPo0G,EAAK,SACLykL,GACc3vJ,EAEZwuJ,KADFE,GAAU,GAOV,IAAI,OAAEc,EAAQ9yJ,OAAQu2J,GAAajF,EAAAA,WAAiBE,IAShD,QAAEzlR,GAAYulR,EAAAA,WAAiBI,IAC7Bp2C,SAAU+0C,GAAqB0B,IACjCW,EAAWR,KAIX9jK,EAAO8hK,EACT3qI,EACAytI,EAAoBjnR,EAAS+mR,EAAO9C,sBACpCK,EACa,SAAb4C,GAEEuD,EAAW3mS,KAAK8B,UAAUy8H,GAO9B,OALAkjK,EAAAA,WACE,IAAMoB,EAAS7iS,KAAKC,MAAM0mS,GAAW,CAAEp8R,UAASo0G,QAAOykL,cACvD,CAACP,EAAU8D,EAAUvD,EAAU74R,EAASo0G,IAGnC,IACT,CAWO,SAASioL,GAAO78M,GACrB,ODvDK,SAAmB+rB,GACxB,IAAIgsL,EAASL,EAAAA,WAAiBI,GAAcC,OAC5C,OAAIA,EAEAL,EAAAA,cAAC6B,GAAc/nK,SAAQ,CAACj/H,MAAOw5G,GAAUgsL,GAGtCA,CACT,CC+CS+E,CAAU98M,EAAM+rB,QACzB,CAmDO,SAASgxL,GAAMC,GACpB5E,GAAU,EAKZ,CAqBO,SAAS6E,GAAMtzJ,GAQqB,IAPzC8oJ,SAAUyK,EAAe,IAAG,SAC5Bl1M,EAAW,KACX7H,SAAUg9M,EAAY,eACtB7C,EAAiB/J,EAAekB,IAAG,UACnC/+J,EACA0T,OAAQg3J,GAAa,EAAK,OAC1BlE,GACYvvJ,EAETuuJ,KADHE,GAAU,GAQV,IAAI3F,EAAWyK,EAAa18R,QAAQ,OAAQ,KACxC68R,EAAoB3F,EAAAA,SACtB,KAAM,CACJjF,WACA//J,YACA0T,OAAQg3J,EACRlE,OAAMjmS,EAAA,CACJmjS,sBAAsB,GACnB8C,MAGP,CAACzG,EAAUyG,EAAQxmK,EAAW0qK,IAGJ,kBAAjBD,IACTA,EAAerM,EAAUqM,IAG3B,IAAI,SACFz7C,EAAW,IAAG,OACdxkJ,EAAS,GAAE,KACX6oB,EAAO,GAAE,MACTnR,EAAQ,KAAI,IACZ5gH,EAAM,WACJmpS,EAEAG,EAAkB5F,EAAAA,SAAc,KAClC,IAAI6F,EAAmB3K,EAAclxC,EAAU+wC,GAE/C,OAAwB,MAApB8K,EACK,KAGF,CACLp9M,SAAU,CACRuhK,SAAU67C,EACVrgM,SACA6oB,OACAnR,QACA5gH,OAEFsmS,iBACD,GACA,CAAC7H,EAAU/wC,EAAUxkJ,EAAQ6oB,EAAMnR,EAAO5gH,EAAKsmS,IASlD,OAAuB,MAAnBgD,EACK,KAIP5F,EAAAA,cAACE,EAAkBpmK,SAAQ,CAACj/H,MAAO8qS,GACjC3F,EAAAA,cAACG,EAAgBrmK,SAAQ,CAACxpC,SAAUA,EAAUz1F,MAAO+qS,IAG3D,CAaO,SAASE,GAAMn0J,GAGqB,IAHpB,SACrBrhD,EAAQ,SACR7H,GACYkpD,EACZ,ODnKOswJ,GCmKU8D,GAAyBz1M,GAAW7H,EACvD,CAuC4B,IAAImlB,SAAQ,SAEPoyL,EAAAA,UAkH1B,SAAS+F,GACdz1M,EACAyrM,QAAoB,IAApBA,IAAAA,EAAuB,IAEvB,IAAIlB,EAAwB,GA6D5B,OA3DAmF,EAAAA,SAAe9jS,QAAQo0F,GAAU,CAACthF,EAAS5S,KACzC,IAAK4jS,EAAAA,eAAqBhxR,GAGxB,OAGF,IAAIg3R,EAAW,IAAIjK,EAAY3/R,GAE/B,GAAI4S,EAAQpU,OAASolS,EAAAA,SAMnB,YAJAnF,EAAOn+R,KAAKrB,MACVw/R,EACAkL,GAAyB/2R,EAAQs5E,MAAMgI,SAAU01M,IAMnDh3R,EAAQpU,OAASyqS,IADnB3E,GAAU,GAQP1xR,EAAQs5E,MAAMlsF,OAAU4S,EAAQs5E,MAAMgI,UADzCowM,GAAU,GAKV,IAAIzE,EAAqB,CACvBhiR,GAAIjL,EAAQs5E,MAAMruE,IAAM+rR,EAAS1uR,KAAK,KACtC6kR,cAAentR,EAAQs5E,MAAM6zM,cAC7BntR,QAASA,EAAQs5E,MAAMt5E,QACvBopH,UAAWppH,EAAQs5E,MAAM8vC,UACzBh8H,MAAO4S,EAAQs5E,MAAMlsF,MACrB0gI,KAAM9tH,EAAQs5E,MAAMw0C,KACpBg+I,OAAQ9rQ,EAAQs5E,MAAMwyL,OACtBriK,OAAQzpG,EAAQs5E,MAAMmwB,OACtBmrL,aAAc50R,EAAQs5E,MAAMs7M,aAC5BC,cAAe70R,EAAQs5E,MAAMu7M,cAC7BoC,iBACiC,MAA/Bj3R,EAAQs5E,MAAMu7M,eACgB,MAA9B70R,EAAQs5E,MAAMs7M,aAChBsC,iBAAkBl3R,EAAQs5E,MAAM49M,iBAChCC,OAAQn3R,EAAQs5E,MAAM69M,OACtB7rK,KAAMtrH,EAAQs5E,MAAMgyC,MAGlBtrH,EAAQs5E,MAAMgI,WAChB2rM,EAAM3rM,SAAWy1M,GACf/2R,EAAQs5E,MAAMgI,SACd01M,IAIJnL,EAAOn+R,KAAKu/R,EAAM,IAGbpB,CACT,+WClfgD,IAAI12R,IAAI,CACtD,oCACA,sBACA,+ICaF,IACE1K,OAAO2sS,qBAHT,GAIC,CAAC,MAAOlrS,IACP,CAgJiE,IAAIuI,IAkCvE,MACM4iS,GAAsBrG,EAAsB,gBAE5BsG,EAAmB,UAEvBtG,EAAY,MA4VxB,SAAUuG,GAAav0J,GAKR,IALS,SAC5B+oJ,EAAQ,SACRzqM,EAAQ,OACRkxM,EAAM,OACN/nS,GACmBu4I,EACfw0J,EAAaxG,EAAAA,SP3aH,IACdnjS,EO2a0B,MAAtB2pS,EAAW55R,UACb45R,EAAW55R,cP5ab,KAAA/P,EO4a4C,CAAEpD,SAAQogS,UAAU,MP5ahEh9R,EAAiC,CAAC,GAoB3B48R,GAlBP,SACEhgS,EACAqgS,GAEA,IAAI,SAAE9vC,EAAQ,OAAExkJ,EAAM,KAAE6oB,GAAS50H,EAAOgvF,SACxC,OAAO0wM,EACL,GACA,CAAEnvC,WAAUxkJ,SAAQ6oB,QAEnByrK,EAAc58K,OAAS48K,EAAc58K,MAAMg8K,KAAQ,KACnDY,EAAc58K,OAAS48K,EAAc58K,MAAM5gH,KAAQ,UAExD,IAEA,SAA2B7C,EAAgBw6J,GACzC,MAAqB,kBAAPA,EAAkBA,EAAKolI,EAAWplI,EAClD,GAKE,KACAp3J,KOuZF,IAAI6nJ,EAAU8hJ,EAAW55R,SACpBswG,EAAOupL,GAAgBzG,EAAAA,SAAe,CACzCvnL,OAAQisC,EAAQjsC,OAChBhwB,SAAUi8D,EAAQj8D,YAEhB,mBAAEi+M,GAAuBlF,GAAU,CAAC,EACpCjwK,EAAWyuK,EAAAA,aACZ/tC,IACCy0C,GAAsBL,GAClBA,IAAoB,IAAMI,EAAax0C,KACvCw0C,EAAax0C,EAAS,GAE5B,CAACw0C,EAAcC,IAKjB,OAFA1G,EAAAA,iBAAsB,IAAMt7I,EAAQ4N,OAAO/gC,IAAW,CAACmzB,EAASnzB,IAG9DyuK,EAAAA,cAACuF,GAAM,CACLxK,SAAUA,EACVzqM,SAAUA,EACV7H,SAAUy0B,EAAMz0B,SAChBm6M,eAAgB1lL,EAAMzE,OACtBuiB,UAAW0pB,EACX88I,OAAQA,GAGd,CAqHA,MAAMmF,GACc,qBAAXltS,QACoB,qBAApBA,OAAOurF,UAC2B,qBAAlCvrF,OAAOurF,SAASpqE,cAEnBgsR,GAAqB,gCAKdC,GAAO7G,EAAAA,YAClB,SAAoBpqJ,EAalBtjC,GAAG,IAKCw0L,GAjBJ,QACEpkL,EAAO,SACPi/K,EAAQ,eACRoF,EAAc,QACdj+R,EAAO,MACPo0G,EAAK,OACLp1G,EAAM,GACNmsJ,EAAE,mBACF+yI,EAAkB,wBAClBC,GAEDrxJ,EADI8mJ,EAAIwK,GAAAtxJ,EAAAuxJ,KAIL,SAAEpM,GAAaiF,EAAAA,WAAiBoH,GAIhCC,GAAa,EAEjB,GAAkB,kBAAPpzI,GAAmB2yI,GAAmB5jS,KAAKixJ,KAEpD6yI,EAAe7yI,EAGX0yI,IACF,IACE,IAAIW,EAAa,IAAIlpK,IAAI3kI,OAAOgvF,SAASqf,MACrCy/L,EAAYtzI,EAAG69G,WAAW,MAC1B,IAAI1zI,IAAIkpK,EAAWjpK,SAAW41B,GAC9B,IAAI71B,IAAI61B,GACRn3B,EAAOo+J,EAAcqM,EAAUv9C,SAAU+wC,GAEzCwM,EAAU/hI,SAAW8hI,EAAW9hI,QAAkB,MAAR1oC,EAE5Cm3B,EAAKn3B,EAAOyqK,EAAU/hM,OAAS+hM,EAAUl5K,KAEzCg5K,GAAa,EAEf,MAAOnsS,IAOR,CAKL,IAAI4sG,EH96BD,SACLmsD,EAAMhuJ,GAEE,IADR,SAAE07R,QAA8C,IAAA17R,EAAG,CAAC,EAACA,EAGnDu6R,KADFE,GAAU,GAOV,IAAI,SAAE3F,EAAQ,UAAE//J,GAAcglK,EAAAA,WAAiBE,IAC3C,KAAE7xK,EAAI,SAAE27H,EAAQ,OAAExkJ,GAAWw8L,GAAgB/tI,EAAI,CAAE0tI,aAEnD6F,EAAiBx9C,EAWrB,MALiB,MAAb+wC,IACFyM,EACe,MAAbx9C,EAAmB+wC,EAAWqB,EAAU,CAACrB,EAAU/wC,KAGhDhvH,EAAU2+J,WAAW,CAAE3vC,SAAUw9C,EAAgBhiM,SAAQ6oB,QAClE,CGo5Beo5K,CAAQxzI,EAAI,CAAE0tI,aAErB+F,EAoZF,SACJzzI,EAAMhuJ,GAeA,IAdN,OACE6B,EACAgB,QAAS6+R,EAAW,MACpBzqL,EAAK,mBACL8pL,EAAkB,SAClBrF,EAAQ,wBACRsF,cAQE,CAAC,EAAChhS,EAEFm7R,EAAWR,KACXn4M,EAAWg4M,IACX3jK,EAAOklK,GAAgB/tI,EAAI,CAAE0tI,aAEjC,OAAO3B,EAAAA,aACJl6L,IACC,GDj3CU,SACdA,EACAh+F,GAEA,OACmB,IAAjBg+F,EAAMvF,UACJz4F,GAAqB,UAAXA,KAVhB,SAAyBg+F,GACvB,SAAUA,EAAM1F,SAAW0F,EAAM3F,QAAU2F,EAAM7F,SAAW6F,EAAM5F,SACpE,CASK0nM,CAAgB9hM,EAErB,CCw2CU+hM,CAAuB/hM,EAAOh+F,GAAS,CACzCg+F,EAAMvH,iBAIN,IAAIz1F,OACcjL,IAAhB8pS,EACIA,EACAtO,EAAW5wM,KAAc4wM,EAAWv8J,GAE1CskK,EAASntI,EAAI,CACXnrJ,UACAo0G,QACA8pL,qBACArF,WACAsF,2BAEH,IAEH,CACEx+M,EACA24M,EACAtkK,EACA6qK,EACAzqL,EACAp1G,EACAmsJ,EACA+yI,EACArF,EACAsF,GAGN,CA5c0Ba,CAAoB7zI,EAAI,CAC5CnrJ,UACAo0G,QACAp1G,SACAk/R,qBACArF,WACAsF,4BAWF,OAEEjH,EAAAA,cAAA,IAAAzkS,GAAA,GACMmhS,EAAI,CACR50L,KAAMg/L,GAAgBh/L,EACtB4a,QAAS2kL,GAAcN,EAAiBrkL,EAd5C,SACE5c,GAEI4c,GAASA,EAAQ5c,GAChBA,EAAM1H,kBACTspM,EAAgB5hM,EAEpB,EAQIwM,IAAKA,EACLxqG,OAAQA,IAGd,IAgVF,IAAKi5R,GAQAG,IARL,SAAKH,GACHA,EAAA,4CACAA,EAAA,sBACAA,EAAA,oCACAA,EAAA,wBACAA,EAAA,+CACD,EAND,CAAKA,KAAAA,GAMJ,KAED,SAAKG,GACHA,EAAA,wBACAA,EAAA,0BACAA,EAAA,2CACD,CAJD,CAAKA,KAAAA,GAIJ,KC71Cc,SAAS5+R,GAAK6I,EAAI48R,GAC/B,OAAO,WACL,OAAO58R,EAAG9P,MAAM0sS,EAASv6R,UAC3B,CACF,CCAA,MAAO5K,SAAQA,IAAIF,OAAOC,WACpB,eAAC+sH,IAAkBhtH,OAEnBslS,IAAUv+K,GAGb/mH,OAAOm3G,OAAO,MAHQouL,IACrB,MAAMjmK,EAAMp/H,GAASR,KAAK6lS,GAC1B,OAAOx+K,GAAMuY,KAASvY,GAAMuY,GAAOA,EAAIzlI,MAAM,GAAI,GAAGhC,cAAc,GAFvD,IAACkvH,GAKhB,MAAMy+K,GAActtS,IAClBA,EAAOA,EAAKL,cACJ0tS,GAAUD,GAAOC,KAAWrtS,GAGhCutS,GAAavtS,GAAQqtS,UAAgBA,IAAUrtS,GAS/C,QAAC6B,IAAWD,MASZ4rS,GAAcD,GAAW,aAqB/B,MAAM1nD,GAAgBynD,GAAW,eA2BjC,MAAMG,GAAWF,GAAW,UAQtB3sS,GAAa2sS,GAAW,YASxBG,GAAWH,GAAW,UAStB36J,GAAYy6J,GAAoB,OAAVA,GAAmC,kBAAVA,EAiB/CM,GAAiBz/J,IACrB,GAAoB,WAAhBk/J,GAAOl/J,GACT,OAAO,EAGT,MAAMnmI,EAAY+sH,GAAeoZ,GACjC,OAAsB,OAAdnmI,GAAsBA,IAAcD,OAAOC,WAAkD,OAArCD,OAAOgtH,eAAe/sH,OAA0BR,OAAOyrH,eAAekb,MAAU3mI,OAAOR,YAAYmnI,EAAI,EAUnK0/J,GAASN,GAAW,QASpBO,GAASP,GAAW,QASpBQ,GAASR,GAAW,QASpBS,GAAaT,GAAW,YAsCxBU,GAAoBV,GAAW,oBAE9BW,GAAkBC,GAAWC,GAAYC,IAAa,CAAC,iBAAkB,UAAW,WAAY,WAAWpvR,IAAIsuR,IA2BtH,SAAShsS,GAAQmF,EAAK8J,GAA+B,IAM/C7J,EACAkI,GAPoB,WAACy/R,GAAa,GAAMz7R,UAAA5L,OAAA,QAAA/D,IAAA2P,UAAA,GAAAA,UAAA,GAAG,CAAC,EAEhD,GAAY,OAARnM,GAA+B,qBAARA,EAa3B,GALmB,kBAARA,IAETA,EAAM,CAACA,IAGL5E,GAAQ4E,GAEV,IAAKC,EAAI,EAAGkI,EAAInI,EAAIO,OAAQN,EAAIkI,EAAGlI,IACjC6J,EAAG/I,KAAK,KAAMf,EAAIC,GAAIA,EAAGD,OAEtB,CAEL,MAAM+N,EAAO65R,EAAavmS,OAAOwnJ,oBAAoB7oJ,GAAOqB,OAAO0M,KAAK/N,GAClEgC,EAAM+L,EAAKxN,OACjB,IAAItF,EAEJ,IAAKgF,EAAI,EAAGA,EAAI+B,EAAK/B,IACnBhF,EAAM8S,EAAK9N,GACX6J,EAAG/I,KAAK,KAAMf,EAAI/E,GAAMA,EAAK+E,EAEjC,CACF,CAEA,SAAS6nS,GAAQ7nS,EAAK/E,GACpBA,EAAMA,EAAI/B,cACV,MAAM6U,EAAO1M,OAAO0M,KAAK/N,GACzB,IACIusI,EADAtsI,EAAI8N,EAAKxN,OAEb,KAAON,KAAM,GAEX,GADAssI,EAAOx+H,EAAK9N,GACRhF,IAAQsxI,EAAKrzI,cACf,OAAOqzI,EAGX,OAAO,IACT,CAEA,MAAMu7J,GAEsB,qBAAft+E,WAAmCA,WACvB,qBAAT3lI,KAAuBA,KAA0B,qBAAXzrF,OAAyBA,OAASqrF,OAGlFskN,GAAoB/0L,IAAa+zL,GAAY/zL,IAAYA,IAAY80L,GAoD3E,MA8HMt6K,IAAgBw6K,GAKG,qBAAf/tS,YAA8Bo0H,GAAep0H,YAH9C2sS,GACEoB,IAAcpB,aAAiBoB,IAHrB,IAACA,GAetB,MAiCMC,GAAapB,GAAW,mBAWxB9mS,GAAiB,CAAC8E,IAAA,IAAC,eAAC9E,GAAe8E,EAAA,MAAK,CAAC7E,EAAK+1D,IAASh2D,EAAegB,KAAKf,EAAK+1D,EAAK,EAApE,CAAsE10D,OAAOC,WAS9F4mS,GAAWrB,GAAW,UAEtBsB,GAAoBA,CAACnoS,EAAKooS,KAC9B,MAAM5qJ,EAAcn8I,OAAOgnS,0BAA0BroS,GAC/CsoS,EAAqB,CAAC,EAE5BztS,GAAQ2iJ,GAAa,CAACs3C,EAAYrzL,KAChC,IAAI0zJ,GAC2C,KAA1CA,EAAMizI,EAAQtzG,EAAYrzL,EAAMzB,MACnCsoS,EAAmB7mS,GAAQ0zJ,GAAO2/B,EACpC,IAGFzzL,OAAO2kK,iBAAiBhmK,EAAKsoS,EAAmB,EAsD5CC,GAAQ,6BAERC,GAAQ,aAERC,GAAW,CACfD,SACAD,SACAG,YAAaH,GAAQA,GAAM9nS,cAAgB+nS,IAwB7C,MA+BMG,GAAY9B,GAAW,iBAQvB+B,GAAgB,EAAEC,EAAuBC,KAC7C,OAAID,EACKtvK,aAGFuvK,GAAyBC,EAW7B,SAASvjS,KAAKC,WAXsB43H,EAWV,GAV3ByqK,GAAQ1yM,iBAAiB,WAAWqrC,IAAoB,IAAnB,OAAC/5H,EAAM,KAAE7H,GAAK4hI,EAC7C/5H,IAAWohS,IAAWjpS,IAASkqS,GACjC1rK,EAAU98H,QAAU88H,EAAUniC,OAAVmiC,EACtB,IACC,GAEK7uC,IACN6uC,EAAUhiI,KAAKmzF,GACfs5M,GAAQ5tK,YAAY6uK,EAAO,IAAI,GAECv6M,GAAOxwF,WAAWwwF,GAXxB,IAAEu6M,EAAO1rK,CAYxC,EAjBqB,CAkBI,oBAAjB9D,aACPp/H,GAAW2tS,GAAQ5tK,cAGf8uK,GAAiC,qBAAnBv8L,eAClBA,eAAexrG,KAAK6mS,IAAgC,qBAAZx6K,SAA2BA,QAAQ27K,UAAYL,GAIzF,IACExtS,WACAgkP,iBACA8pD,SAlpBF,SAAkBzhK,GAChB,OAAe,OAARA,IAAiBs/J,GAAYt/J,IAA4B,OAApBA,EAAIjmI,cAAyBulS,GAAYt/J,EAAIjmI,cACpFrH,GAAWstI,EAAIjmI,YAAY0nS,WAAazhK,EAAIjmI,YAAY0nS,SAASzhK,EACxE,EAgpBE0hK,WApgBkBvC,IAClB,IAAItkI,EACJ,OAAOskI,IACgB,oBAAbwC,UAA2BxC,aAAiBwC,UAClDjvS,GAAWysS,EAAM1+G,UACY,cAA1B5lB,EAAOqkI,GAAOC,KAEL,WAATtkI,GAAqBnoK,GAAWysS,EAAMrlS,WAAkC,sBAArBqlS,EAAMrlS,YAG/D,EA2fD6oI,kBA9nBF,SAA2B3C,GACzB,IAAI7sI,EAMJ,OAJEA,EAD0B,qBAAhB+yH,aAAiCA,YAAY0c,OAC9C1c,YAAY0c,OAAO5C,GAElBA,GAASA,EAAIpjD,QAAY+6J,GAAc33G,EAAIpjD,QAEhDzpF,CACT,EAunBEosS,YACAC,YACAoC,UA9kBgBzC,IAAmB,IAAVA,IAA4B,IAAVA,EA+kB3Cz6J,SAAQ,GACR+6J,iBACAM,oBACAC,aACAC,WAAU,GACVC,aACAZ,eACAI,UACAC,UACAC,UACAa,YACA/tS,cACAmvS,SA9hBgB7hK,GAAQ0E,GAAS1E,IAAQttI,GAAWstI,EAAI/J,MA+hBxD6pK,qBACA/5K,gBACA85K,cACAzsS,WACAuxI,MAhaF,SAASA,IACP,MAAM,SAACm9J,GAAYxB,GAAiB7lS,OAASA,MAAQ,CAAC,EAChDtH,EAAS,CAAC,EACV4uS,EAAcA,CAAC/hK,EAAKxsI,KACxB,MAAMwuS,EAAYF,GAAY1B,GAAQjtS,EAAQK,IAAQA,EAClDisS,GAActsS,EAAO6uS,KAAevC,GAAcz/J,GACpD7sI,EAAO6uS,GAAar9J,EAAMxxI,EAAO6uS,GAAYhiK,GACpCy/J,GAAcz/J,GACvB7sI,EAAO6uS,GAAar9J,EAAM,CAAC,EAAG3E,GACrBrsI,GAAQqsI,GACjB7sI,EAAO6uS,GAAahiK,EAAIvsI,QAExBN,EAAO6uS,GAAahiK,CACtB,EAGF,IAAK,IAAIxnI,EAAI,EAAGkI,EAAIgE,UAAU5L,OAAQN,EAAIkI,EAAGlI,IAC3CkM,UAAUlM,IAAMpF,GAAQsR,UAAUlM,GAAIupS,GAExC,OAAO5uS,CACT,EA6YEwsG,OAjYa,SAACpmB,EAAG4H,EAAG89M,GAA8B,IAArB,WAACkB,GAAWz7R,UAAA5L,OAAA,QAAA/D,IAAA2P,UAAA,GAAAA,UAAA,GAAE,CAAC,EAQ5C,OAPAtR,GAAQ+tF,GAAG,CAAC6+C,EAAKxsI,KACXyrS,GAAWvsS,GAAWstI,GACxBzmD,EAAE/lF,GAAOgG,GAAKwmI,EAAKi/J,GAEnB1lN,EAAE/lF,GAAOwsI,CACX,GACC,CAACmgK,eACG5mN,CACT,EAyXEvnF,KA7fYknI,GAAQA,EAAIlnI,KACxBknI,EAAIlnI,OAASknI,EAAIl5H,QAAQ,qCAAsC,IA6f/DiiS,SAjXgB9gJ,IACc,QAA1BA,EAAQx2I,WAAW,KACrBw2I,EAAUA,EAAQ1tJ,MAAM,IAEnB0tJ,GA8WP+gJ,SAlWeA,CAACnoS,EAAaooS,EAAkB3iN,EAAOu2D,KACtDh8I,EAAYF,UAAYD,OAAOm3G,OAAOoxL,EAAiBtoS,UAAWk8I,GAClEh8I,EAAYF,UAAUE,YAAcA,EACpCH,OAAOka,eAAe/Z,EAAa,QAAS,CAC1ChI,MAAOowS,EAAiBtoS,YAE1B2lF,GAAS5lF,OAAOmF,OAAOhF,EAAYF,UAAW2lF,EAAM,EA6VpD4iN,aAjVmBA,CAACzmG,EAAW0mG,EAASj8R,EAAQk8R,KAChD,IAAI9iN,EACAhnF,EACA81D,EACJ,MAAMi0O,EAAS,CAAC,EAIhB,GAFAF,EAAUA,GAAW,CAAC,EAEL,MAAb1mG,EAAmB,OAAO0mG,EAE9B,EAAG,CAGD,IAFA7iN,EAAQ5lF,OAAOwnJ,oBAAoBu6C,GACnCnjM,EAAIgnF,EAAM1mF,OACHN,KAAM,GACX81D,EAAOkxB,EAAMhnF,GACP8pS,IAAcA,EAAWh0O,EAAMqtI,EAAW0mG,IAAcE,EAAOj0O,KACnE+zO,EAAQ/zO,GAAQqtI,EAAUrtI,GAC1Bi0O,EAAOj0O,IAAQ,GAGnBqtI,GAAuB,IAAXv1L,GAAoBwgH,GAAe+0E,EACjD,OAASA,KAAev1L,GAAUA,EAAOu1L,EAAW0mG,KAAa1mG,IAAc/hM,OAAOC,WAEtF,OAAOwoS,CAAO,EA2TdnD,UACAE,cACAtL,SAjTeA,CAAC56J,EAAKspK,EAAcniS,KACnC64H,EAAM7mI,OAAO6mI,SACInkI,IAAbsL,GAA0BA,EAAW64H,EAAIpgI,UAC3CuH,EAAW64H,EAAIpgI,QAEjBuH,GAAYmiS,EAAa1pS,OACzB,MAAMyR,EAAY2uH,EAAI3lI,QAAQivS,EAAcniS,GAC5C,OAAsB,IAAfkK,GAAoBA,IAAclK,CAAQ,EA2SjDgwH,QAhSe8uK,IACf,IAAKA,EAAO,OAAO,KACnB,GAAIxrS,GAAQwrS,GAAQ,OAAOA,EAC3B,IAAI3mS,EAAI2mS,EAAMrmS,OACd,IAAK0mS,GAAShnS,GAAI,OAAO,KACzB,MAAM8B,EAAM,IAAI5G,MAAM8E,GACtB,KAAOA,KAAM,GACX8B,EAAI9B,GAAK2mS,EAAM3mS,GAEjB,OAAO8B,CAAG,EAwRVmoS,aA7PmBA,CAAClqS,EAAK8J,KACzB,MAEMxJ,GAFYN,GAAOA,EAAIc,OAAOR,WAETS,KAAKf,GAEhC,IAAIpF,EAEJ,MAAQA,EAAS0F,EAASU,UAAYpG,EAAOiH,MAAM,CACjD,MAAMoyO,EAAOr5O,EAAOpB,MACpBsQ,EAAG/I,KAAKf,EAAKi0O,EAAK,GAAIA,EAAK,GAC7B,GAoPAk2D,SAzOeA,CAACC,EAAQzpK,KACxB,IAAIvnH,EACJ,MAAMrX,EAAM,GAEZ,KAAwC,QAAhCqX,EAAUgxR,EAAOtoN,KAAK6+C,KAC5B5+H,EAAI1G,KAAK+d,GAGX,OAAOrX,CAAG,EAkOVkmS,cACAloS,eAAc,GACdsqS,WAAYtqS,GACZooS,qBACAmC,cAzLqBtqS,IACrBmoS,GAAkBnoS,GAAK,CAAC80L,EAAYrzL,KAElC,GAAItH,GAAW6F,KAA6D,IAArD,CAAC,YAAa,SAAU,UAAUhF,QAAQyG,GAC/D,OAAO,EAGT,MAAMjI,EAAQwG,EAAIyB,GAEbtH,GAAWX,KAEhBs7L,EAAWxnG,YAAa,EAEpB,aAAcwnG,EAChBA,EAAW5mE,UAAW,EAInB4mE,EAAWjyL,MACdiyL,EAAWjyL,IAAM,KACf,MAAMlH,MAAM,qCAAwC8F,EAAO,IAAK,GAEpE,GACA,EAmKF8oS,YAhKkBA,CAACC,EAAe/mJ,KAClC,MAAMzjJ,EAAM,CAAC,EAEPunI,EAAUxlI,IACdA,EAAIlH,SAAQrB,IACVwG,EAAIxG,IAAS,CAAI,GACjB,EAKJ,OAFA4B,GAAQovS,GAAiBjjK,EAAOijK,GAAiBjjK,EAAOztI,OAAO0wS,GAAerxS,MAAMsqJ,IAE7EzjJ,CAAG,EAsJVyqS,YAlOkB9pK,GACXA,EAAIznI,cAAcuO,QAAQ,yBAC/B,SAAkBk7E,EAAG+nN,EAAIC,GACvB,OAAOD,EAAGjqS,cAAgBkqS,CAC5B,IA+NF7oK,KApJWA,OAqJX8oK,eAnJqBA,CAACpxS,EAAOw0F,IACb,MAATx0F,GAAiBktF,OAAOo9C,SAAStqI,GAASA,GAASA,EAAQw0F,EAmJlE65M,WACApkN,OAAQqkN,GACRC,oBACAU,YACAoC,eA1IqB,WAAgD,IAA/CvnS,EAAI6I,UAAA5L,OAAA,QAAA/D,IAAA2P,UAAA,GAAAA,UAAA,GAAG,GAAI2+R,EAAQ3+R,UAAA5L,OAAA,QAAA/D,IAAA2P,UAAA,GAAAA,UAAA,GAAGs8R,GAASC,YACjD/nK,EAAM,GACV,MAAM,OAACpgI,GAAUuqS,EACjB,KAAOxnS,KACLq9H,GAAOmqK,EAAStlS,KAAKC,SAAWlF,EAAO,GAGzC,OAAOogI,CACT,EAmIEoqK,oBA1HF,SAA6BnE,GAC3B,SAAUA,GAASzsS,GAAWysS,EAAM1+G,SAAyC,aAA9B0+G,EAAM9lS,OAAOyrH,cAA+Bq6K,EAAM9lS,OAAOR,UAC1G,EAyHE0qS,aAvHoBhrS,IACpB,MAAM8rF,EAAQ,IAAI3wF,MAAM,IAElB8vS,EAAQA,CAACvkS,EAAQzG,KAErB,GAAIksI,GAASzlI,GAAS,CACpB,GAAIolF,EAAM9wF,QAAQ0L,IAAW,EAC3B,OAGF,KAAK,WAAYA,GAAS,CACxBolF,EAAM7rF,GAAKyG,EACX,MAAMD,EAASrL,GAAQsL,GAAU,GAAK,CAAC,EASvC,OAPA7L,GAAQ6L,GAAQ,CAAClN,EAAOyB,KACtB,MAAMiwS,EAAeD,EAAMzxS,EAAOyG,EAAI,IACrC8mS,GAAYmE,KAAkBzkS,EAAOxL,GAAOiwS,EAAa,IAG5Dp/M,EAAM7rF,QAAKzD,EAEJiK,CACT,CACF,CAEA,OAAOC,CAAM,EAGf,OAAOukS,EAAMjrS,EAAK,EAAE,EA4FpB2oS,aACAwC,WAxFkBvE,GAClBA,IAAUz6J,GAASy6J,IAAUzsS,GAAWysS,KAAWzsS,GAAWysS,EAAMj6L,OAASxyG,GAAWysS,EAAMh6L,OAwF9F2sB,aAAcqvK,GACdI,SCvuBF,SAASoC,GAAW76R,EAAS1Q,EAAMojF,EAAQ0gH,EAAShrM,GAClDgD,MAAMoF,KAAKmB,MAEPvG,MAAM6U,kBACR7U,MAAM6U,kBAAkBtO,KAAMA,KAAKV,aAEnCU,KAAK4pF,OAAS,IAAInwF,OAASmwF,MAG7B5pF,KAAKqO,QAAUA,EACfrO,KAAKT,KAAO,aACZ5B,IAASqC,KAAKrC,KAAOA,GACrBojF,IAAW/gF,KAAK+gF,OAASA,GACzB0gH,IAAYzhM,KAAKyhM,QAAUA,GACvBhrM,IACFuJ,KAAKvJ,SAAWA,EAChBuJ,KAAK9D,OAASzF,EAASyF,OAASzF,EAASyF,OAAS,KAEtD,CAEA2hN,GAAM4pF,SAASyB,GAAYzvS,MAAO,CAChC4uM,OAAQ,WACN,MAAO,CAELh6L,QAASrO,KAAKqO,QACd9O,KAAMS,KAAKT,KAEX89J,YAAar9J,KAAKq9J,YAClB13E,OAAQ3lF,KAAK2lF,OAEbwjN,SAAUnpS,KAAKmpS,SACfrjS,WAAY9F,KAAK8F,WACjBC,aAAc/F,KAAK+F,aACnB6jF,MAAO5pF,KAAK4pF,MAEZ7I,OAAQ88H,GAAMirF,aAAa9oS,KAAK+gF,QAChCpjF,KAAMqC,KAAKrC,KACXzB,OAAQ8D,KAAK9D,OAEjB,IAGF,MAAMkD,GAAY8pS,GAAW9pS,UACvBk8I,GAAc,CAAC,EAErB,CACE,uBACA,iBACA,eACA,YACA,cACA,4BACA,iBACA,mBACA,kBACA,eACA,kBACA,mBAEA3iJ,SAAQgF,IACR29I,GAAY39I,GAAQ,CAACrG,MAAOqG,EAAK,IAGnCwB,OAAO2kK,iBAAiBolI,GAAY5tJ,IACpCn8I,OAAOka,eAAeja,GAAW,eAAgB,CAAC9H,OAAO,IAGzD4xS,GAAW1pS,KAAO,CAACyI,EAAOtK,EAAMojF,EAAQ0gH,EAAShrM,EAAU2yS,KACzD,MAAMC,EAAalqS,OAAOm3G,OAAOl3G,IAgBjC,OAdAy+M,GAAM8pF,aAAa1/R,EAAOohS,GAAY,SAAgBvrS,GACpD,OAAOA,IAAQrE,MAAM2F,SACvB,IAAGy0D,GACe,iBAATA,IAGTq1O,GAAWrqS,KAAKwqS,EAAYphS,EAAMoG,QAAS1Q,EAAMojF,EAAQ0gH,EAAShrM,GAElE4yS,EAAWzyS,MAAQqR,EAEnBohS,EAAW9pS,KAAO0I,EAAM1I,KAExB6pS,GAAejqS,OAAOmF,OAAO+kS,EAAYD,GAElCC,CAAU,EAGnB,YCxFA,SAASC,GAAY5E,GACnB,OAAO7mF,GAAMmnF,cAAcN,IAAU7mF,GAAM3kN,QAAQwrS,EACrD,CASA,SAAS6E,GAAexwS,GACtB,OAAO8kN,GAAMw7E,SAAStgS,EAAK,MAAQA,EAAIC,MAAM,GAAI,GAAKD,CACxD,CAWA,SAASywS,GAAUjwK,EAAMxgI,EAAK0wS,GAC5B,OAAKlwK,EACEA,EAAK7xB,OAAO3uG,GAAKsd,KAAI,SAAcwwR,EAAO9oS,GAG/C,OADA8oS,EAAQ0C,GAAe1C,IACf4C,GAAQ1rS,EAAI,IAAM8oS,EAAQ,IAAMA,CAC1C,IAAG9yR,KAAK01R,EAAO,IAAM,IALH1wS,CAMpB,CAaA,MAAM2wS,GAAa7rF,GAAM8pF,aAAa9pF,GAAO,CAAC,EAAG,MAAM,SAAgBhqJ,GACrE,MAAO,WAAWp0D,KAAKo0D,EACzB,IA8JA,SArIA,SAAoB/1D,EAAK6rS,EAAUrwS,GACjC,IAAKukN,GAAM5zE,SAASnsI,GAClB,MAAM,IAAI8B,UAAU,4BAItB+pS,EAAWA,GAAY,IAAyBzC,SAYhD,MAAM0C,GATNtwS,EAAUukN,GAAM8pF,aAAaruS,EAAS,CACpCswS,YAAY,EACZH,MAAM,EACNI,SAAS,IACR,GAAO,SAAiB59G,EAAQznL,GAEjC,OAAQq5M,GAAMgnF,YAAYrgS,EAAOynL,GACnC,KAE2B29G,WAErBE,EAAUxwS,EAAQwwS,SAAWC,EAC7BN,EAAOnwS,EAAQmwS,KACfI,EAAUvwS,EAAQuwS,QAElBG,GADQ1wS,EAAQotN,MAAwB,qBAATA,MAAwBA,OACpC7I,GAAMgrF,oBAAoBc,GAEnD,IAAK9rF,GAAM5lN,WAAW6xS,GACpB,MAAM,IAAIlqS,UAAU,8BAGtB,SAASqqS,EAAa3yS,GACpB,GAAc,OAAVA,EAAgB,MAAO,GAE3B,GAAIumN,GAAMonF,OAAO3tS,GACf,OAAOA,EAAM0nN,cAGf,IAAKgrF,GAAWnsF,GAAMsnF,OAAO7tS,GAC3B,MAAM,IAAI4xS,GAAW,gDAGvB,OAAIrrF,GAAMq/B,cAAc5lP,IAAUumN,GAAMvyF,aAAah0H,GAC5C0yS,GAA2B,oBAATtjF,KAAsB,IAAIA,KAAK,CAACpvN,IAAUukI,OAAOr8H,KAAKlI,GAG1EA,CACT,CAYA,SAASyyS,EAAezyS,EAAOyB,EAAKwgI,GAClC,IAAI15H,EAAMvI,EAEV,GAAIA,IAAUiiI,GAAyB,kBAAVjiI,EAC3B,GAAIumN,GAAMw7E,SAAStgS,EAAK,MAEtBA,EAAM6wS,EAAa7wS,EAAMA,EAAIC,MAAM,GAAI,GAEvC1B,EAAQ0D,KAAK8B,UAAUxF,QAClB,GACJumN,GAAM3kN,QAAQ5B,IAnGvB,SAAqBuI,GACnB,OAAOg+M,GAAM3kN,QAAQ2G,KAASA,EAAIqtH,KAAKo8K,GACzC,CAiGiCY,CAAY5yS,KACnCumN,GAAMunF,WAAW9tS,IAAUumN,GAAMw7E,SAAStgS,EAAK,SAAW8G,EAAMg+M,GAAMjoF,QAAQt+H,IAYhF,OATAyB,EAAMwwS,GAAexwS,GAErB8G,EAAIlH,SAAQ,SAAc+P,EAAI7P,IAC1BglN,GAAMgnF,YAAYn8R,IAAc,OAAPA,GAAgBihS,EAAS3jH,QAEtC,IAAZ6jH,EAAmBL,GAAU,CAACzwS,GAAMF,EAAO4wS,GAAqB,OAAZI,EAAmB9wS,EAAMA,EAAM,KACnFkxS,EAAavhS,GAEjB,KACO,EAIX,QAAI4gS,GAAYhyS,KAIhBqyS,EAAS3jH,OAAOwjH,GAAUjwK,EAAMxgI,EAAK0wS,GAAOQ,EAAa3yS,KAElD,EACT,CAEA,MAAMsyF,EAAQ,GAERugN,EAAiBhrS,OAAOmF,OAAOolS,GAAY,CAC/CK,iBACAE,eACAX,iBAyBF,IAAKzrF,GAAM5zE,SAASnsI,GAClB,MAAM,IAAI8B,UAAU,0BAKtB,OA5BA,SAAS+H,EAAMrQ,EAAOiiI,GACpB,IAAIskF,GAAMgnF,YAAYvtS,GAAtB,CAEA,IAA8B,IAA1BsyF,EAAM9wF,QAAQxB,GAChB,MAAMmC,MAAM,kCAAoC8/H,EAAKxlH,KAAK,MAG5D61E,EAAMzwF,KAAK7B,GAEXumN,GAAMllN,QAAQrB,GAAO,SAAcoR,EAAI3P,IAKtB,OAJE8kN,GAAMgnF,YAAYn8R,IAAc,OAAPA,IAAgBohS,EAAQjrS,KAChE8qS,EAAUjhS,EAAIm1M,GAAMinF,SAAS/rS,GAAOA,EAAIxB,OAASwB,EAAKwgI,EAAM4wK,KAI5DxiS,EAAMe,EAAI6wH,EAAOA,EAAK7xB,OAAO3uG,GAAO,CAACA,GAEzC,IAEA6wF,EAAM5I,KAlB8B,CAmBtC,CAMAr5E,CAAM7J,GAEC6rS,CACT,EC5MA,SAASS,GAAO3rK,GACd,MAAM4rK,EAAU,CACd,IAAK,MACL,IAAK,MACL,IAAK,MACL,IAAK,MACL,IAAK,MACL,MAAO,IACP,MAAO,MAET,OAAO1jN,mBAAmB83C,GAAKl5H,QAAQ,oBAAoB,SAAkBq5E,GAC3E,OAAOyrN,EAAQzrN,EACjB,GACF,CAUA,SAAS0rN,GAAqB/wS,EAAQD,GACpC0G,KAAKuqS,OAAS,GAEdhxS,GAAUixS,GAAWjxS,EAAQyG,KAAM1G,EACrC,CAEA,MAAM8F,GAAYkrS,GAAqBlrS,UAEvCA,GAAU4mL,OAAS,SAAgBzmL,EAAMjI,GACvC0I,KAAKuqS,OAAOpxS,KAAK,CAACoG,EAAMjI,GAC1B,EAEA8H,GAAUC,SAAW,SAAkBorS,GACrC,MAAMC,EAAUD,EAAU,SAASnzS,GACjC,OAAOmzS,EAAQ5rS,KAAKmB,KAAM1I,EAAO8yS,GACnC,EAAIA,GAEJ,OAAOpqS,KAAKuqS,OAAOl0R,KAAI,SAAc07N,GACnC,OAAO24D,EAAQ34D,EAAK,IAAM,IAAM24D,EAAQ34D,EAAK,GAC/C,GAAG,IAAIh+N,KAAK,IACd,EAEA,YC5CA,SAASq2R,GAAO7kK,GACd,OAAO5+C,mBAAmB4+C,GACxBhgI,QAAQ,QAAS,KACjBA,QAAQ,OAAQ,KAChBA,QAAQ,QAAS,KACjBA,QAAQ,OAAQ,KAChBA,QAAQ,QAAS,KACjBA,QAAQ,QAAS,IACrB,CAWe,SAASolS,GAAS9wS,EAAKN,EAAQD,GAE5C,IAAKC,EACH,OAAOM,EAGT,MAAM6wS,EAAUpxS,GAAWA,EAAQ8wS,QAAUA,GAEvCQ,EAActxS,GAAWA,EAAQuxS,UAEvC,IAAIC,EAUJ,GAPEA,EADEF,EACiBA,EAAYrxS,EAAQD,GAEpBukN,GAAMwnF,kBAAkB9rS,GACzCA,EAAO8F,WACP,IAAIirS,GAAqB/wS,EAAQD,GAAS+F,SAASqrS,GAGnDI,EAAkB,CACpB,MAAMC,EAAgBlxS,EAAIf,QAAQ,MAEX,IAAnBiyS,IACFlxS,EAAMA,EAAIb,MAAM,EAAG+xS,IAErBlxS,KAA8B,IAAtBA,EAAIf,QAAQ,KAAc,IAAM,KAAOgyS,CACjD,CAEA,OAAOjxS,CACT,CCQA,SAlEA,MACEyF,WAAAA,GACEU,KAAKgsJ,SAAW,EAClB,CAUAugD,GAAAA,CAAIy+F,EAAWC,EAAU3xS,GAOvB,OANA0G,KAAKgsJ,SAAS7yJ,KAAK,CACjB6xS,YACAC,WACAC,cAAa5xS,GAAUA,EAAQ4xS,YAC/BC,QAAS7xS,EAAUA,EAAQ6xS,QAAU,OAEhCnrS,KAAKgsJ,SAAS3tJ,OAAS,CAChC,CASA+sS,KAAAA,CAAM10R,GACA1W,KAAKgsJ,SAASt1I,KAChB1W,KAAKgsJ,SAASt1I,GAAM,KAExB,CAOAvV,KAAAA,GACMnB,KAAKgsJ,WACPhsJ,KAAKgsJ,SAAW,GAEpB,CAYArzJ,OAAAA,CAAQiP,GACNi2M,GAAMllN,QAAQqH,KAAKgsJ,UAAU,SAAwB9hE,GACzC,OAANA,GACFtiF,EAAGsiF,EAEP,GACF,GCjEF,IACEmhN,mBAAmB,EACnBC,mBAAmB,EACnBC,qBAAqB,GCDvB,IACEnI,WAAW,EACXjW,QAAS,CACPqe,gBCJsC,qBAApBA,gBAAkCA,gBAAkBlB,GDKtEpD,SEN+B,qBAAbA,SAA2BA,SAAW,KFOxDxgF,KGP2B,qBAATA,KAAuBA,KAAO,MHSlD+kF,UAAW,CAAC,OAAQ,QAAS,OAAQ,OAAQ,MAAO,SIXhDC,GAAkC,qBAAXx1S,QAA8C,qBAAburF,SAExDkqN,GAAkC,kBAAdl0K,WAA0BA,gBAAan9H,EAmB3DsxS,GAAwBF,MAC1BC,IAAc,CAAC,cAAe,eAAgB,MAAM7yS,QAAQ6yS,GAAWE,SAAW,GAWhFC,GAE2B,qBAAtBC,mBAEPpqN,gBAAgBoqN,mBACc,oBAAvBpqN,KAAKqqN,cAIV/pI,GAASypI,IAAiBx1S,OAAOgvF,SAASqf,MAAQ,mBCvCxD,OACKs5G,KACAp4D,ICyFL,SA9CA,SAAwBkkJ,GACtB,SAASsC,EAAU1yK,EAAMjiI,EAAOiN,EAAQ1L,GACtC,IAAI0G,EAAOg6H,EAAK1gI,KAEhB,GAAa,cAAT0G,EAAsB,OAAO,EAEjC,MAAM2sS,EAAe1nN,OAAOo9C,UAAUriI,GAChC4sS,EAAStzS,GAAS0gI,EAAKl7H,OAG7B,GAFAkB,GAAQA,GAAQs+M,GAAM3kN,QAAQqL,GAAUA,EAAOlG,OAASkB,EAEpD4sS,EAOF,OANItuF,GAAMsqF,WAAW5jS,EAAQhF,GAC3BgF,EAAOhF,GAAQ,CAACgF,EAAOhF,GAAOjI,GAE9BiN,EAAOhF,GAAQjI,GAGT40S,EAGL3nS,EAAOhF,IAAUs+M,GAAM5zE,SAAS1lI,EAAOhF,MAC1CgF,EAAOhF,GAAQ,IASjB,OANe0sS,EAAU1yK,EAAMjiI,EAAOiN,EAAOhF,GAAO1G,IAEtCglN,GAAM3kN,QAAQqL,EAAOhF,MACjCgF,EAAOhF,GA/Cb,SAAuBM,GACrB,MAAM/B,EAAM,CAAC,EACP+N,EAAO1M,OAAO0M,KAAKhM,GACzB,IAAI9B,EACJ,MAAM+B,EAAM+L,EAAKxN,OACjB,IAAItF,EACJ,IAAKgF,EAAI,EAAGA,EAAI+B,EAAK/B,IACnBhF,EAAM8S,EAAK9N,GACXD,EAAI/E,GAAO8G,EAAI9G,GAEjB,OAAO+E,CACT,CAoCqBsuS,CAAc7nS,EAAOhF,MAG9B2sS,CACV,CAEA,GAAIruF,GAAMopF,WAAW0C,IAAa9rF,GAAM5lN,WAAW0xS,EAASxvB,SAAU,CACpE,MAAMr8Q,EAAM,CAAC,EAMb,OAJA+/M,GAAMmqF,aAAa2B,GAAU,CAACpqS,EAAMjI,KAClC20S,EA1EN,SAAuB1sS,GAKrB,OAAOs+M,GAAMoqF,SAAS,gBAAiB1oS,GAAM8W,KAAIuoE,GAC3B,OAAbA,EAAM,GAAc,GAAKA,EAAM,IAAMA,EAAM,IAEtD,CAkEgBytN,CAAc9sS,GAAOjI,EAAOwG,EAAK,EAAE,IAGxCA,CACT,CAEA,OAAO,IACT,ECzDA,MAAMm0L,GAAW,CAEfq6G,aAAcC,GAEdC,QAAS,CAAC,MAAO,OAAQ,SAEzBC,iBAAkB,CAAC,SAA0B9vS,EAAMlF,GACjD,MAAMN,EAAcM,EAAQi1S,kBAAoB,GAC1CC,EAAqBx1S,EAAY2B,QAAQ,qBAAuB,EAChE8zS,EAAkB/uF,GAAM5zE,SAASttI,GAEnCiwS,GAAmB/uF,GAAMkoF,WAAWppS,KACtCA,EAAO,IAAIuqS,SAASvqS,IAKtB,GAFmBkhN,GAAMopF,WAAWtqS,GAGlC,OAAOgwS,EAAqB3xS,KAAK8B,UAAU+vS,GAAelwS,IAASA,EAGrE,GAAIkhN,GAAMq/B,cAAcvgP,IACtBkhN,GAAMmpF,SAASrqS,IACfkhN,GAAMupF,SAASzqS,IACfkhN,GAAMqnF,OAAOvoS,IACbkhN,GAAMsnF,OAAOxoS,IACbkhN,GAAMynF,iBAAiB3oS,GAEvB,OAAOA,EAET,GAAIkhN,GAAM31E,kBAAkBvrI,GAC1B,OAAOA,EAAKwlF,OAEd,GAAI07H,GAAMwnF,kBAAkB1oS,GAE1B,OADAlF,EAAQq1S,eAAe,mDAAmD,GACnEnwS,EAAK0C,WAGd,IAAI+lS,EAEJ,GAAIwH,EAAiB,CACnB,GAAIz1S,EAAY2B,QAAQ,sCAAwC,EAC9D,OCvEO,SAA0B6D,EAAMrD,GAC7C,OAAOkxS,GAAW7tS,EAAM,IAAI8oJ,GAAS0nI,QAAQqe,gBAAmBrsS,OAAOmF,OAAO,CAC5EwlS,QAAS,SAASxyS,EAAOyB,EAAKwgI,EAAMwzK,GAClC,OAAItnJ,GAASunJ,QAAUnvF,GAAMmpF,SAAS1vS,IACpC0I,KAAKgmL,OAAOjtL,EAAKzB,EAAM+H,SAAS,YACzB,GAGF0tS,EAAQhD,eAAejyS,MAAMkI,KAAMiK,UAC5C,GACC3Q,GACL,CD4De2zS,CAAiBtwS,EAAMqD,KAAKktS,gBAAgB7tS,WAGrD,IAAK+lS,EAAavnF,GAAMunF,WAAWzoS,KAAUxF,EAAY2B,QAAQ,wBAA0B,EAAG,CAC5F,MAAMq0S,EAAYntS,KAAKotS,KAAOptS,KAAKotS,IAAIlG,SAEvC,OAAOsD,GACLpF,EAAa,CAAC,UAAWzoS,GAAQA,EACjCwwS,GAAa,IAAIA,EACjBntS,KAAKktS,eAET,CACF,CAEA,OAAIN,GAAmBD,GACrBl1S,EAAQq1S,eAAe,oBAAoB,GAxEjD,SAAyBO,EAAU5zJ,EAAQgxJ,GACzC,GAAI5sF,GAAMinF,SAASuI,GACjB,IAEE,OADC5zJ,GAAUz+I,KAAKC,OAAOoyS,GAChBxvF,GAAMtmN,KAAK81S,EACpB,CAAE,MAAO11S,IACP,GAAe,gBAAXA,GAAE4H,KACJ,MAAM5H,EAEV,CAGF,OAAQ8yS,GAAWzvS,KAAK8B,WAAWuwS,EACrC,CA4DaC,CAAgB3wS,IAGlBA,CACT,GAEA4wS,kBAAmB,CAAC,SAA2B5wS,GAC7C,MAAM2vS,EAAetsS,KAAKssS,cAAgBr6G,GAASq6G,aAC7ChB,EAAoBgB,GAAgBA,EAAahB,kBACjDkC,EAAsC,SAAtBxtS,KAAKvF,aAE3B,GAAIojN,GAAM2nF,WAAW7oS,IAASkhN,GAAMynF,iBAAiB3oS,GACnD,OAAOA,EAGT,GAAIA,GAAQkhN,GAAMinF,SAASnoS,KAAW2uS,IAAsBtrS,KAAKvF,cAAiB+yS,GAAgB,CAChG,MACMC,IADoBnB,GAAgBA,EAAajB,oBACPmC,EAEhD,IACE,OAAOxyS,KAAKC,MAAM0B,EACpB,CAAE,MAAOhF,IACP,GAAI81S,EAAmB,CACrB,GAAe,gBAAX91S,GAAE4H,KACJ,MAAM2pS,GAAW1pS,KAAK7H,GAAGuxS,GAAWwE,iBAAkB1tS,KAAM,KAAMA,KAAKvJ,UAEzE,MAAMkB,EACR,CACF,CACF,CAEA,OAAOgF,CACT,GAMA1C,QAAS,EAET0zS,eAAgB,aAChBC,eAAgB,eAEhBC,kBAAmB,EACnBC,eAAgB,EAEhBV,IAAK,CACHlG,SAAUzhJ,GAAS0nI,QAAQ+Z,SAC3BxgF,KAAMjhE,GAAS0nI,QAAQzmE,MAGzBqnF,eAAgB,SAAwB7xS,GACtC,OAAOA,GAAU,KAAOA,EAAS,GACnC,EAEAzE,QAAS,CACPu2S,OAAQ,CACN,OAAU,oCACV,oBAAgB1zS,KAKtBujN,GAAMllN,QAAQ,CAAC,SAAU,MAAO,OAAQ,OAAQ,MAAO,UAAWyD,IAChE61L,GAASx6L,QAAQ2E,GAAU,CAAC,CAAC,IAG/B,YE1JM6xS,GAAoBpwF,GAAMwqF,YAAY,CAC1C,MAAO,gBAAiB,iBAAkB,eAAgB,OAC1D,UAAW,OAAQ,OAAQ,oBAAqB,sBAChD,gBAAiB,WAAY,eAAgB,sBAC7C,UAAW,cAAe,eCLtB6F,GAAatvS,OAAO,aAE1B,SAASuvS,GAAgB3gF,GACvB,OAAOA,GAAU51N,OAAO41N,GAAQj2N,OAAOP,aACzC,CAEA,SAASo3S,GAAe92S,GACtB,OAAc,IAAVA,GAA4B,MAATA,EACdA,EAGFumN,GAAM3kN,QAAQ5B,GAASA,EAAM+e,IAAI+3R,IAAkBx2S,OAAON,EACnE,CAgBA,SAAS+2S,GAAiBv9L,EAASx5G,EAAOk2N,EAAQ7hN,EAAQ2iS,GACxD,OAAIzwF,GAAM5lN,WAAW0T,GACZA,EAAO9M,KAAKmB,KAAM1I,EAAOk2N,IAG9B8gF,IACFh3S,EAAQk2N,GAGL3P,GAAMinF,SAASxtS,GAEhBumN,GAAMinF,SAASn5R,IACiB,IAA3BrU,EAAMwB,QAAQ6S,GAGnBkyM,GAAMmoF,SAASr6R,GACVA,EAAOlM,KAAKnI,QADrB,OANA,EASF,CAsBA,MAAMi3S,GACJjvS,WAAAA,CAAY7H,GACVA,GAAWuI,KAAKW,IAAIlJ,EACtB,CAEAkJ,GAAAA,CAAI6sN,EAAQghF,EAAgBC,GAC1B,MAAM9sN,EAAO3hF,KAEb,SAAS0uS,EAAUC,EAAQC,EAASC,GAClC,MAAMC,EAAUX,GAAgBS,GAEhC,IAAKE,EACH,MAAM,IAAIr1S,MAAM,0CAGlB,MAAMV,EAAM8kN,GAAM8nF,QAAQhkN,EAAMmtN,KAE5B/1S,QAAqBuB,IAAdqnF,EAAK5oF,KAAmC,IAAb81S,QAAmCv0S,IAAbu0S,IAAwC,IAAdltN,EAAK5oF,MACzF4oF,EAAK5oF,GAAO61S,GAAWR,GAAeO,GAE1C,CAEA,MAAMI,EAAaA,CAACt3S,EAASo3S,IAC3BhxF,GAAMllN,QAAQlB,GAAS,CAACk3S,EAAQC,IAAYF,EAAUC,EAAQC,EAASC,KAEzE,GAAIhxF,GAAMmnF,cAAcx3E,IAAWA,aAAkBxtN,KAAKV,YACxDyvS,EAAWvhF,EAAQghF,QACd,GAAG3wF,GAAMinF,SAASt3E,KAAYA,EAASA,EAAOj2N,UArEtB,iCAAiCkI,KAqEmB+tN,EArEVj2N,QAsEvEw3S,ED1EN,CAAeC,IACb,MAAMr3D,EAAS,CAAC,EAChB,IAAI5+O,EACAwsI,EACAxnI,EAsBJ,OApBAixS,GAAcA,EAAW/3S,MAAM,MAAM0B,SAAQ,SAAgB8jI,GAC3D1+H,EAAI0+H,EAAK3jI,QAAQ,KACjBC,EAAM0jI,EAAK5jH,UAAU,EAAG9a,GAAGxG,OAAOP,cAClCuuI,EAAM9I,EAAK5jH,UAAU9a,EAAI,GAAGxG,QAEvBwB,GAAQ4+O,EAAO5+O,IAAQk1S,GAAkBl1S,KAIlC,eAARA,EACE4+O,EAAO5+O,GACT4+O,EAAO5+O,GAAKI,KAAKosI,GAEjBoyG,EAAO5+O,GAAO,CAACwsI,GAGjBoyG,EAAO5+O,GAAO4+O,EAAO5+O,GAAO4+O,EAAO5+O,GAAO,KAAOwsI,EAAMA,EAE3D,IAEOoyG,CACR,EC+CgBl/O,CAAa+0N,GAASghF,QAC5B,GAAI3wF,GAAM4nF,UAAUj4E,GACzB,IAAK,MAAOz0N,EAAKzB,KAAUk2N,EAAO2sD,UAChCu0B,EAAUp3S,EAAOyB,EAAK01S,QAGd,MAAVjhF,GAAkBkhF,EAAUF,EAAgBhhF,EAAQihF,GAGtD,OAAOzuS,IACT,CAEAc,GAAAA,CAAI0sN,EAAQ/zE,GAGV,GAFA+zE,EAAS2gF,GAAgB3gF,GAEb,CACV,MAAMz0N,EAAM8kN,GAAM8nF,QAAQ3lS,KAAMwtN,GAEhC,GAAIz0N,EAAK,CACP,MAAMzB,EAAQ0I,KAAKjH,GAEnB,IAAK0gJ,EACH,OAAOniJ,EAGT,IAAe,IAAXmiJ,EACF,OA5GV,SAAqBhb,GACnB,MAAMm0B,EAASzzJ,OAAOm3G,OAAO,MACvB24L,EAAW,mCACjB,IAAIrwN,EAEJ,KAAQA,EAAQqwN,EAASrvN,KAAK6+C,IAC5Bm0B,EAAOh0E,EAAM,IAAMA,EAAM,GAG3B,OAAOg0E,CACT,CAkGiBs8I,CAAY53S,GAGrB,GAAIumN,GAAM5lN,WAAWwhJ,GACnB,OAAOA,EAAO56I,KAAKmB,KAAM1I,EAAOyB,GAGlC,GAAI8kN,GAAMmoF,SAASvsJ,GACjB,OAAOA,EAAO75D,KAAKtoF,GAGrB,MAAM,IAAIsI,UAAU,yCACtB,CACF,CACF,CAEAc,GAAAA,CAAI8sN,EAAQgtE,GAGV,GAFAhtE,EAAS2gF,GAAgB3gF,GAEb,CACV,MAAMz0N,EAAM8kN,GAAM8nF,QAAQ3lS,KAAMwtN,GAEhC,SAAUz0N,QAAqBuB,IAAd0F,KAAKjH,IAAwByhS,IAAW6T,GAAiBruS,EAAMA,KAAKjH,GAAMA,EAAKyhS,GAClG,CAEA,OAAO,CACT,CAEAv5R,OAAOusN,EAAQgtE,GACb,MAAM74M,EAAO3hF,KACb,IAAImvS,GAAU,EAEd,SAASC,EAAaR,GAGpB,GAFAA,EAAUT,GAAgBS,GAEb,CACX,MAAM71S,EAAM8kN,GAAM8nF,QAAQhkN,EAAMitN,IAE5B71S,GAASyhS,IAAW6T,GAAiB1sN,EAAMA,EAAK5oF,GAAMA,EAAKyhS,YACtD74M,EAAK5oF,GAEZo2S,GAAU,EAEd,CACF,CAQA,OANItxF,GAAM3kN,QAAQs0N,GAChBA,EAAO70N,QAAQy2S,GAEfA,EAAa5hF,GAGR2hF,CACT,CAEAhuS,KAAAA,CAAMq5R,GACJ,MAAM3uR,EAAO1M,OAAO0M,KAAK7L,MACzB,IAAIjC,EAAI8N,EAAKxN,OACT8wS,GAAU,EAEd,KAAOpxS,KAAK,CACV,MAAMhF,EAAM8S,EAAK9N,GACby8R,IAAW6T,GAAiBruS,EAAMA,KAAKjH,GAAMA,EAAKyhS,GAAS,YACtDx6R,KAAKjH,GACZo2S,GAAU,EAEd,CAEA,OAAOA,CACT,CAEAnnS,SAAAA,CAAUykH,GACR,MAAM9qC,EAAO3hF,KACPvI,EAAU,CAAC,EAsBjB,OApBAomN,GAAMllN,QAAQqH,MAAM,CAAC1I,EAAOk2N,KAC1B,MAAMz0N,EAAM8kN,GAAM8nF,QAAQluS,EAAS+1N,GAEnC,GAAIz0N,EAGF,OAFA4oF,EAAK5oF,GAAOq1S,GAAe92S,eACpBqqF,EAAK6rI,GAId,MAAM6hF,EAAa5iL,EA9JzB,SAAsB+gG,GACpB,OAAOA,EAAOj2N,OACXP,cAAcuO,QAAQ,mBAAmB,CAACmjG,EAAGY,EAAMm1B,IAC3Cn1B,EAAK/qG,cAAgBkgI,GAElC,CAyJkC6wK,CAAa9hF,GAAU51N,OAAO41N,GAAQj2N,OAE9D83S,IAAe7hF,UACV7rI,EAAK6rI,GAGd7rI,EAAK0tN,GAAcjB,GAAe92S,GAElCG,EAAQ43S,IAAc,CAAI,IAGrBrvS,IACT,CAEA0nG,MAAAA,GAAmB,QAAAyiC,EAAAlgI,UAAA5L,OAATkxS,EAAO,IAAAt2S,MAAAkxI,GAAAE,EAAA,EAAAA,EAAAF,EAAAE,IAAPklK,EAAOllK,GAAApgI,UAAAogI,GACf,OAAOrqI,KAAKV,YAAYooG,OAAO1nG,QAASuvS,EAC1C,CAEAlnG,MAAAA,CAAOmnG,GACL,MAAM1xS,EAAMqB,OAAOm3G,OAAO,MAM1B,OAJAunG,GAAMllN,QAAQqH,MAAM,CAAC1I,EAAOk2N,KACjB,MAATl2N,IAA2B,IAAVA,IAAoBwG,EAAI0vN,GAAUgiF,GAAa3xF,GAAM3kN,QAAQ5B,GAASA,EAAMyc,KAAK,MAAQzc,EAAM,IAG3GwG,CACT,CAEA,CAACc,OAAOR,YACN,OAAOe,OAAOg7Q,QAAQn6Q,KAAKqoM,UAAUzpM,OAAOR,WAC9C,CAEAiB,QAAAA,GACE,OAAOF,OAAOg7Q,QAAQn6Q,KAAKqoM,UAAUhyL,KAAI1T,IAAA,IAAE6qN,EAAQl2N,GAAMqL,EAAA,OAAK6qN,EAAS,KAAOl2N,CAAK,IAAEyc,KAAK,KAC5F,CAEA,IAAKnV,OAAOyrH,eACV,MAAO,cACT,CAEA,WAAO7qH,CAAKklS,GACV,OAAOA,aAAiB1kS,KAAO0kS,EAAQ,IAAI1kS,KAAK0kS,EAClD,CAEA,aAAOh9L,CAAOwxL,GACZ,MAAMuW,EAAW,IAAIzvS,KAAKk5R,GAAO,QAAAp2I,EAAA74I,UAAA5L,OADXkxS,EAAO,IAAAt2S,MAAA6pJ,EAAA,EAAAA,EAAA,KAAAC,EAAA,EAAAA,EAAAD,EAAAC,IAAPwsJ,EAAOxsJ,EAAA,GAAA94I,UAAA84I,GAK7B,OAFAwsJ,EAAQ52S,SAAS4L,GAAWkrS,EAAS9uS,IAAI4D,KAElCkrS,CACT,CAEA,eAAOC,CAASliF,GACd,MAIMmiF,GAJY3vS,KAAKkuS,IAAeluS,KAAKkuS,IAAc,CACvDyB,UAAW,CAAC,IAGcA,UACtBvwS,EAAYY,KAAKZ,UAEvB,SAASwwS,EAAehB,GACtB,MAAME,EAAUX,GAAgBS,GAE3Be,EAAUb,MAtNrB,SAAwBhxS,EAAK0vN,GAC3B,MAAMqiF,EAAehyF,GAAM0qF,YAAY,IAAM/6E,GAE7C,CAAC,MAAO,MAAO,OAAO70N,SAAQm3S,IAC5B3wS,OAAOka,eAAevb,EAAKgyS,EAAaD,EAAc,CACpDv4S,MAAO,SAASy4S,EAAMC,EAAMC,GAC1B,OAAOjwS,KAAK8vS,GAAYjxS,KAAKmB,KAAMwtN,EAAQuiF,EAAMC,EAAMC,EACzD,EACA9kN,cAAc,GACd,GAEN,CA4MQ+kN,CAAe9wS,EAAWwvS,GAC1Be,EAAUb,IAAW,EAEzB,CAIA,OAFAjxF,GAAM3kN,QAAQs0N,GAAUA,EAAO70N,QAAQi3S,GAAkBA,EAAepiF,GAEjExtN,IACT,EAGFuuS,GAAamB,SAAS,CAAC,eAAgB,iBAAkB,SAAU,kBAAmB,aAAc,kBAGpG7xF,GAAMooF,kBAAkBsI,GAAanvS,WAAW,CAAAm/H,EAAUxlI,KAAQ,IAAjB,MAACzB,GAAMinI,EAClD4xK,EAASp3S,EAAI,GAAGwF,cAAgBxF,EAAIC,MAAM,GAC9C,MAAO,CACL8H,IAAKA,IAAMxJ,EACXqJ,GAAAA,CAAIyvS,GACFpwS,KAAKmwS,GAAUC,CACjB,EACD,IAGHvyF,GAAMuqF,cAAcmG,IAEpB,YC/Re,SAAS8B,GAAcC,EAAK75S,GACzC,MAAMsqF,EAAS/gF,MAAQiyL,GACjBnhF,EAAUr6G,GAAYsqF,EACtBtpF,EAAU82S,GAAa/uS,KAAKsxG,EAAQr5G,SAC1C,IAAIkF,EAAOm0G,EAAQn0G,KAQnB,OANAkhN,GAAMllN,QAAQ23S,GAAK,SAAmB1oS,GACpCjL,EAAOiL,EAAG/I,KAAKkiF,EAAQpkF,EAAMlF,EAAQuQ,YAAavR,EAAWA,EAASyF,YAAS5B,EACjF,IAEA7C,EAAQuQ,YAEDrL,CACT,CCzBe,SAAS4zS,GAASj5S,GAC/B,SAAUA,IAASA,EAAMk5S,WAC3B,CCUA,SAASC,GAAcpiS,EAAS0yE,EAAQ0gH,GAEtCynG,GAAWrqS,KAAKmB,KAAiB,MAAXqO,EAAkB,WAAaA,EAAS66R,GAAWwH,aAAc3vN,EAAQ0gH,GAC/FzhM,KAAKT,KAAO,eACd,CAEAs+M,GAAM4pF,SAASgJ,GAAevH,GAAY,CACxCsH,YAAY,IAGd,YCXe,SAASG,GAAOnmM,EAAS4/D,EAAQ3zK,GAC9C,MAAMs3S,EAAiBt3S,EAASsqF,OAAOgtN,eAClCt3S,EAASyF,QAAW6xS,IAAkBA,EAAet3S,EAASyF,QAGjEkuK,EAAO,IAAI8+H,GACT,mCAAqCzyS,EAASyF,OAC9C,CAACgtS,GAAW0H,gBAAiB1H,GAAWwE,kBAAkBpqS,KAAK80H,MAAM3hI,EAASyF,OAAS,KAAO,GAC9FzF,EAASsqF,OACTtqF,EAASgrM,QACThrM,IAPF+zG,EAAQ/zG,EAUZ,CC4BA,SA9CA,SAAqBo6S,EAAc9rM,GACjC8rM,EAAeA,GAAgB,GAC/B,MAAMxoK,EAAQ,IAAIpvI,MAAM43S,GAClBC,EAAa,IAAI73S,MAAM43S,GAC7B,IAEIE,EAFAxmJ,EAAO,EACP9rC,EAAO,EAKX,OAFA1Z,OAAczqG,IAARyqG,EAAoBA,EAAM,IAEzB,SAAcisM,GACnB,MAAMn1M,EAAMD,KAAKC,MAEXo1M,EAAYH,EAAWryL,GAExBsyL,IACHA,EAAgBl1M,GAGlBwsC,EAAMkiB,GAAQymJ,EACdF,EAAWvmJ,GAAQ1uD,EAEnB,IAAI99F,EAAI0gH,EACJyyL,EAAa,EAEjB,KAAOnzS,IAAMwsJ,GACX2mJ,GAAc7oK,EAAMtqI,KACpBA,GAAQ8yS,EASV,GANAtmJ,GAAQA,EAAO,GAAKsmJ,EAEhBtmJ,IAAS9rC,IACXA,GAAQA,EAAO,GAAKoyL,GAGlBh1M,EAAMk1M,EAAgBhsM,EACxB,OAGF,MAAMosM,EAASF,GAAap1M,EAAMo1M,EAElC,OAAOE,EAAS7tS,KAAKq1K,MAAmB,IAAbu4H,EAAoBC,QAAU72S,CAC3D,CACF,ECTA,SArCA,SAAkBsN,EAAIwpS,GACpB,IAEIC,EACAC,EAHAttN,EAAY,EACZutN,EAAY,IAAOH,EAIvB,MAAMI,EAAS,SAACp2K,GAA2B,IAArBv/B,EAAG5xF,UAAA5L,OAAA,QAAA/D,IAAA2P,UAAA,GAAAA,UAAA,GAAG2xF,KAAKC,MAC/B7X,EAAY6X,EACZw1M,EAAW,KACPC,IACFl2S,aAAak2S,GACbA,EAAQ,MAEV1pS,EAAG9P,MAAM,KAAMsjI,EACjB,EAoBA,MAAO,CAlBW,WAChB,MAAMv/B,EAAMD,KAAKC,MACXs1M,EAASt1M,EAAM7X,EAAU,QAAAmmD,EAAAlgI,UAAA5L,OAFX+8H,EAAI,IAAAniI,MAAAkxI,GAAAE,EAAA,EAAAA,EAAAF,EAAAE,IAAJjP,EAAIiP,GAAApgI,UAAAogI,GAGnB8mK,GAAUI,EACbC,EAAOp2K,EAAMv/B,IAEbw1M,EAAWj2K,EACNk2K,IACHA,EAAQx1S,YAAW,KACjBw1S,EAAQ,KACRE,EAAOH,EAAS,GACfE,EAAYJ,IAGrB,EAEchmL,IAAMkmL,GAAYG,EAAOH,GAGzC,ECrCaI,GAAuB,SAAC3pM,EAAU4pM,GAA+B,IAAbN,EAAInnS,UAAA5L,OAAA,QAAA/D,IAAA2P,UAAA,GAAAA,UAAA,GAAG,EAClE0nS,EAAgB,EACpB,MAAMC,EAAeC,GAAY,GAAI,KAErC,OAAOrkJ,IAAS71J,IACd,MAAMkpN,EAASlpN,EAAEkpN,OACXh4E,EAAQlxI,EAAEm6S,iBAAmBn6S,EAAEkxI,WAAQvuI,EACvCy3S,EAAgBlxF,EAAS8wF,EACzB/mH,EAAOgnH,EAAaG,GAG1BJ,EAAgB9wF,EAchB/4G,EAZa,CACX+4G,SACAh4E,QACAo0C,SAAUp0C,EAASg4E,EAASh4E,OAASvuI,EACrC+tI,MAAO0pK,EACPnnH,KAAMA,QAActwL,EACpB03S,UAAWpnH,GAAQ/hD,GAVLg4E,GAAUh4E,GAUeA,EAAQg4E,GAAUj2B,OAAOtwL,EAChEioG,MAAO5qG,EACPm6S,iBAA2B,MAATjpK,EAClB,CAAC6oK,EAAmB,WAAa,WAAW,GAGhC,GACbN,EACL,EAEaa,GAAyBA,CAACppK,EAAOqpK,KAC5C,MAAMJ,EAA4B,MAATjpK,EAEzB,MAAO,CAAEg4E,GAAWqxF,EAAU,GAAG,CAC/BJ,mBACAjpK,QACAg4E,WACEqxF,EAAU,GAAG,EAGNC,GAAkBvqS,GAAO,mBAAAuiI,EAAAlgI,UAAA5L,OAAI+8H,EAAI,IAAAniI,MAAAkxI,GAAAE,EAAA,EAAAA,EAAAF,EAAAE,IAAJjP,EAAIiP,GAAApgI,UAAAogI,GAAA,OAAKwzE,GAAMipF,MAAK,IAAMl/R,KAAMwzH,IAAM,ECtChF,GAAeqqB,GAASmmJ,sBAIrB,WACC,MAAMwG,EAAO3sJ,GAAShuB,WAAa,kBAAkBh4H,KAAKgmJ,GAAShuB,UAAUouB,WACvEwsJ,EAAiB5wN,SAASpqE,cAAc,KAC9C,IAAIi7R,EAQJ,SAASC,EAAW14S,GAClB,IAAI0qG,EAAO1qG,EAWX,OATIu4S,IAEFC,EAAex6R,aAAa,OAAQ0sF,GACpCA,EAAO8tM,EAAe9tM,MAGxB8tM,EAAex6R,aAAa,OAAQ0sF,GAG7B,CACLA,KAAM8tM,EAAe9tM,KACrBu2B,SAAUu3K,EAAev3K,SAAWu3K,EAAev3K,SAASv1H,QAAQ,KAAM,IAAM,GAChF8jJ,KAAMgpJ,EAAehpJ,KACrBpnD,OAAQowM,EAAepwM,OAASowM,EAAepwM,OAAO18F,QAAQ,MAAO,IAAM,GAC3EulH,KAAMunL,EAAevnL,KAAOunL,EAAevnL,KAAKvlH,QAAQ,KAAM,IAAM,GACpE01M,SAAUo3F,EAAep3F,SACzBu3F,KAAMH,EAAeG,KACrB/rD,SAAiD,MAAtC4rD,EAAe5rD,SAAShoK,OAAO,GACxC4zN,EAAe5rD,SACf,IAAM4rD,EAAe5rD,SAE3B,CAUA,OARA6rD,EAAYC,EAAWr8S,OAAOgvF,SAASqf,MAQhC,SAAyBkuM,GAC9B,MAAM96D,EAAU95B,GAAMinF,SAAS2N,GAAeF,EAAWE,GAAcA,EACvE,OAAQ96D,EAAO78G,WAAaw3K,EAAUx3K,UAClC68G,EAAOtuF,OAASipJ,EAAUjpJ,IAChC,CACF,CAlDC,GAsDQ,WACL,OAAO,CACT,EC9DJ,GAAe5D,GAASmmJ,sBAGtB,CACE7sH,KAAAA,CAAMx/K,EAAMjI,EAAOo7S,EAASn5K,EAAMo5K,EAAQC,GACxC,MAAMC,EAAS,CAACtzS,EAAO,IAAMonF,mBAAmBrvF,IAEhDumN,GAAMknF,SAAS2N,IAAYG,EAAO15S,KAAK,WAAa,IAAIyiG,KAAK82M,GAASI,eAEtEj1F,GAAMinF,SAASvrK,IAASs5K,EAAO15S,KAAK,QAAUogI,GAE9CskF,GAAMinF,SAAS6N,IAAWE,EAAO15S,KAAK,UAAYw5S,IAEvC,IAAXC,GAAmBC,EAAO15S,KAAK,UAE/BsoF,SAASoxN,OAASA,EAAO9+R,KAAK,KAChC,EAEAg/R,IAAAA,CAAKxzS,GACH,MAAMq/E,EAAQ6C,SAASoxN,OAAOj0N,MAAM,IAAIjB,OAAO,aAAep+E,EAAO,cACrE,OAAQq/E,EAAQ6mD,mBAAmB7mD,EAAM,IAAM,IACjD,EAEAruE,MAAAA,CAAOhR,GACLS,KAAK++K,MAAMx/K,EAAM,GAAIq8F,KAAKC,MAAQ,MACpC,GAMF,CACEkjF,KAAAA,GAAS,EACTg0H,KAAIA,IACK,KAETxiS,MAAAA,GAAU,GCxBC,SAASyiS,GAAc/5K,EAASg6K,GAC7C,OAAIh6K,ICHG,8BAA8Bx5H,KDGPwzS,GENjB,SAAqBh6K,EAASC,GAC3C,OAAOA,EACHD,EAAQ1zH,QAAQ,SAAU,IAAM,IAAM2zH,EAAY3zH,QAAQ,OAAQ,IAClE0zH,CACN,CFGWi6K,CAAYj6K,EAASg6K,GAEvBA,CACT,CGfA,MAAME,GAAmBzO,GAAUA,aAAiB6J,GAAe,IAAK7J,GAAUA,EAWnE,SAAS0O,GAAYC,EAASC,GAE3CA,EAAUA,GAAW,CAAC,EACtB,MAAMvyN,EAAS,CAAC,EAEhB,SAASwyN,EAAehvS,EAAQC,EAAQ6iS,GACtC,OAAIxpF,GAAMmnF,cAAczgS,IAAWs5M,GAAMmnF,cAAcxgS,GAC9Cq5M,GAAM3zE,MAAMrrI,KAAK,CAACwoS,YAAW9iS,EAAQC,GACnCq5M,GAAMmnF,cAAcxgS,GACtBq5M,GAAM3zE,MAAM,CAAC,EAAG1lI,GACdq5M,GAAM3kN,QAAQsL,GAChBA,EAAOxL,QAETwL,CACT,CAGA,SAASgvS,EAAoB10N,EAAG4H,EAAG2gN,GACjC,OAAKxpF,GAAMgnF,YAAYn+M,GAEXm3H,GAAMgnF,YAAY/lN,QAAvB,EACEy0N,OAAej5S,EAAWwkF,EAAGuoN,GAF7BkM,EAAez0N,EAAG4H,EAAG2gN,EAIhC,CAGA,SAASoM,EAAiB30N,EAAG4H,GAC3B,IAAKm3H,GAAMgnF,YAAYn+M,GACrB,OAAO6sN,OAAej5S,EAAWosF,EAErC,CAGA,SAASgtN,EAAiB50N,EAAG4H,GAC3B,OAAKm3H,GAAMgnF,YAAYn+M,GAEXm3H,GAAMgnF,YAAY/lN,QAAvB,EACEy0N,OAAej5S,EAAWwkF,GAF1By0N,OAAej5S,EAAWosF,EAIrC,CAGA,SAASitN,EAAgB70N,EAAG4H,EAAG7yB,GAC7B,OAAIA,KAAQy/O,EACHC,EAAez0N,EAAG4H,GAChB7yB,KAAQw/O,EACVE,OAAej5S,EAAWwkF,QAD5B,CAGT,CAEA,MAAM80N,EAAW,CACf/5S,IAAK45S,EACLr3S,OAAQq3S,EACR92S,KAAM82S,EACNx6K,QAASy6K,EACTjH,iBAAkBiH,EAClBnG,kBAAmBmG,EACnBG,iBAAkBH,EAClBz5S,QAASy5S,EACTI,eAAgBJ,EAChBj2S,gBAAiBi2S,EACjBK,cAAeL,EACflH,QAASkH,EACTj5S,aAAci5S,EACd/F,eAAgB+F,EAChB9F,eAAgB8F,EAChBM,iBAAkBN,EAClBO,mBAAoBP,EACpBQ,WAAYR,EACZ7F,iBAAkB6F,EAClB5F,cAAe4F,EACfS,eAAgBT,EAChBU,UAAWV,EACXW,UAAWX,EACXY,WAAYZ,EACZa,YAAab,EACbc,WAAYd,EACZe,iBAAkBf,EAClB3F,eAAgB4F,EAChBl8S,QAASA,CAACqnF,EAAG4H,IAAM8sN,EAAoBL,GAAgBr0N,GAAIq0N,GAAgBzsN,IAAI,IASjF,OANAm3H,GAAMllN,QAAQwG,OAAO0M,KAAK1M,OAAOmF,OAAO,CAAC,EAAG+uS,EAASC,KAAW,SAA4Bz/O,GAC1F,MAAMq2E,EAAQ0pK,EAAS//O,IAAS2/O,EAC1BkB,EAAcxqK,EAAMmpK,EAAQx/O,GAAOy/O,EAAQz/O,GAAOA,GACvDgqJ,GAAMgnF,YAAY6P,IAAgBxqK,IAAUypK,IAAqB5yN,EAAOltB,GAAQ6gP,EACnF,IAEO3zN,CACT,CChGA,SAAgBA,IACd,MAAM4zN,EAAYvB,GAAY,CAAC,EAAGryN,GAElC,IAaI5pF,GAbA,KAACwF,EAAI,cAAEo3S,EAAa,eAAEnG,EAAc,eAAED,EAAc,QAAEl2S,EAAO,KAAEm9S,GAAQD,EAe3E,GAbAA,EAAUl9S,QAAUA,EAAU82S,GAAa/uS,KAAK/H,GAEhDk9S,EAAU96S,IAAM8wS,GAASqI,GAAc2B,EAAU17K,QAAS07K,EAAU96S,KAAMknF,EAAOxnF,OAAQwnF,EAAO8yN,kBAG5Fe,GACFn9S,EAAQkJ,IAAI,gBAAiB,SAC3Bk0S,MAAMD,EAAKr3S,UAAY,IAAM,KAAOq3S,EAAKp3S,SAAWisI,SAAS9iD,mBAAmBiuN,EAAKp3S,WAAa,MAMlGqgN,GAAMopF,WAAWtqS,GACnB,GAAI8oJ,GAASmmJ,uBAAyBnmJ,GAASqmJ,+BAC7Cr0S,EAAQq1S,oBAAexyS,QAClB,IAAiD,KAA5CnD,EAAcM,EAAQi1S,kBAA6B,CAE7D,MAAOr1S,KAASu7J,GAAUz7J,EAAcA,EAAYF,MAAM,KAAKof,KAAIwwR,GAASA,EAAMtvS,SAAQoU,OAAOimI,SAAW,GAC5Gn6I,EAAQq1S,eAAe,CAACz1S,GAAQ,yBAA0Bu7J,GAAQ7+I,KAAK,MACzE,CAOF,GAAI0xI,GAASmmJ,wBACXmI,GAAiBl2F,GAAM5lN,WAAW87S,KAAmBA,EAAgBA,EAAcY,IAE/EZ,IAAoC,IAAlBA,GAA2Be,GAAgBH,EAAU96S,MAAO,CAEhF,MAAMk7S,EAAYnH,GAAkBD,GAAkBqH,GAAQjC,KAAKpF,GAE/DoH,GACFt9S,EAAQkJ,IAAIitS,EAAgBmH,EAEhC,CAGF,OAAOJ,CACR,EC1CD,GAFwD,qBAAnBj4S,gBAEG,SAAUqkF,GAChD,OAAO,IAAIspB,SAAQ,SAA4BG,EAAS4/D,GACtD,MAAM6qI,EAAUC,GAAcn0N,GAC9B,IAAIo0N,EAAcF,EAAQt4S,KAC1B,MAAMy4S,EAAiB7G,GAAa/uS,KAAKy1S,EAAQx9S,SAASuQ,YAC1D,IACIqtS,EACAC,EAAiBC,EACjBC,EAAaC,GAHb,aAACh7S,EAAY,iBAAEu5S,EAAgB,mBAAEC,GAAsBgB,EAK3D,SAASt1S,IACP61S,GAAeA,IACfC,GAAiBA,IAEjBR,EAAQV,aAAeU,EAAQV,YAAYmB,YAAYL,GAEvDJ,EAAQU,QAAUV,EAAQU,OAAOxiN,oBAAoB,QAASkiN,EAChE,CAEA,IAAI5zG,EAAU,IAAI/kM,eAOlB,SAASk5S,IACP,IAAKn0G,EACH,OAGF,MAAMoa,EAAkB0yF,GAAa/uS,KACnC,0BAA2BiiM,GAAWA,EAAQnlM,yBAahDq0S,IAAO,SAAkBr5S,GACvBkzG,EAAQlzG,GACRqI,GACF,IAAG,SAAiBnJ,GAClB4zK,EAAO5zK,GACPmJ,GACF,GAfiB,CACfhD,KAHoBlC,GAAiC,SAAjBA,GAA4C,SAAjBA,EACxCgnM,EAAQhrM,SAA/BgrM,EAAQjnM,aAGR0B,OAAQulM,EAAQvlM,OAChBmgS,WAAY56F,EAAQ46F,WACpB5kS,QAASokN,EACT96H,SACA0gH,YAYFA,EAAU,IACZ,CAlCAA,EAAQnkM,KAAK23S,EAAQ74S,OAAOmC,cAAe02S,EAAQp7S,KAAK,GAGxD4nM,EAAQxnM,QAAUg7S,EAAQh7S,QAiCtB,cAAewnM,EAEjBA,EAAQm0G,UAAYA,EAGpBn0G,EAAQ1kM,mBAAqB,WACtB0kM,GAAkC,IAAvBA,EAAQzkM,aAQD,IAAnBykM,EAAQvlM,QAAkBulM,EAAQ7lM,aAAwD,IAAzC6lM,EAAQ7lM,YAAY9C,QAAQ,WAKjFgD,WAAW85S,EACb,EAIFn0G,EAAQrkM,QAAU,WACXqkM,IAILr3B,EAAO,IAAI8+H,GAAW,kBAAmBA,GAAW2M,aAAc90N,EAAQ0gH,IAG1EA,EAAU,KACZ,EAGAA,EAAQvkM,QAAU,WAGhBktK,EAAO,IAAI8+H,GAAW,gBAAiBA,GAAW4M,YAAa/0N,EAAQ0gH,IAGvEA,EAAU,IACZ,EAGAA,EAAQpkM,UAAY,WAClB,IAAI04S,EAAsBd,EAAQh7S,QAAU,cAAgBg7S,EAAQh7S,QAAU,cAAgB,mBAC9F,MAAMqyS,EAAe2I,EAAQ3I,cAAgBC,GACzC0I,EAAQc,sBACVA,EAAsBd,EAAQc,qBAEhC3rI,EAAO,IAAI8+H,GACT6M,EACAzJ,EAAaf,oBAAsBrC,GAAW8M,UAAY9M,GAAW2M,aACrE90N,EACA0gH,IAGFA,EAAU,IACZ,OAGgBnnM,IAAhB66S,GAA6BC,EAAetI,eAAe,MAGvD,qBAAsBrrG,GACxBoc,GAAMllN,QAAQy8S,EAAe/sG,UAAU,SAA0B9iE,EAAKxsI,GACpE0oM,EAAQ7jM,iBAAiB7E,EAAKwsI,EAChC,IAIGs4E,GAAMgnF,YAAYoQ,EAAQx3S,mBAC7BgkM,EAAQhkM,kBAAoBw3S,EAAQx3S,iBAIlChD,GAAiC,SAAjBA,IAClBgnM,EAAQhnM,aAAew6S,EAAQx6S,cAI7Bw5S,KACAsB,EAAmBE,GAAiBhE,GAAqBwC,GAAoB,GAC/ExyG,EAAQvuG,iBAAiB,WAAYqiN,IAInCvB,GAAoBvyG,EAAQw0G,UAC5BX,EAAiBE,GAAe/D,GAAqBuC,GAEvDvyG,EAAQw0G,OAAO/iN,iBAAiB,WAAYoiN,GAE5C7zG,EAAQw0G,OAAO/iN,iBAAiB,UAAWsiN,KAGzCP,EAAQV,aAAeU,EAAQU,UAGjCN,EAAanqL,IACNu2E,IAGLr3B,GAAQl/C,GAAUA,EAAO7zH,KAAO,IAAIo5S,GAAc,KAAM1vN,EAAQ0gH,GAAWv2E,GAC3Eu2E,EAAQ/jM,QACR+jM,EAAU,KAAI,EAGhBwzG,EAAQV,aAAeU,EAAQV,YAAY2B,UAAUb,GACjDJ,EAAQU,SACVV,EAAQU,OAAOp6S,QAAU85S,IAAeJ,EAAQU,OAAOziN,iBAAiB,QAASmiN,KAIrF,MAAMv6K,ECvLK,SAAuBjhI,GACpC,MAAM+kF,EAAQ,4BAA4BgB,KAAK/lF,GAC/C,OAAO+kF,GAASA,EAAM,IAAM,EAC9B,CDoLqBu3N,CAAclB,EAAQp7S,KAEnCihI,IAAsD,IAA1C2qB,GAASgmJ,UAAU3yS,QAAQgiI,GACzCsvC,EAAO,IAAI8+H,GAAW,wBAA0BpuK,EAAW,IAAKouK,GAAW0H,gBAAiB7vN,IAM9F0gH,EAAQvjM,KAAKi3S,GAAe,KAC9B,GACF,EErJA,GA3CuBiB,CAACC,EAASp8S,KAC/B,MAAM,OAACoE,GAAWg4S,EAAUA,EAAUA,EAAQ1qS,OAAOimI,SAAW,GAEhE,GAAI33I,GAAWoE,EAAQ,CACrB,IAEI9C,EAFA+6S,EAAa,IAAIC,gBAIrB,MAAMn5S,EAAU,SAAUo8J,GACxB,IAAKj+J,EAAS,CACZA,GAAU,EACVm6S,IACA,MAAMl/S,EAAMgjK,aAAkB//J,MAAQ+/J,EAASx5J,KAAKw5J,OACpD88I,EAAW54S,MAAMlH,aAAe0yS,GAAa1yS,EAAM,IAAIi6S,GAAcj6S,aAAeiD,MAAQjD,EAAI6X,QAAU7X,GAC5G,CACF,EAEA,IAAI86S,EAAQr3S,GAAW6B,YAAW,KAChCw1S,EAAQ,KACRl0S,EAAQ,IAAI8rS,GAAW,WAAWjvS,mBAA0BivS,GAAW8M,WAAW,GACjF/7S,GAEH,MAAMy7S,EAAcA,KACdW,IACF/E,GAASl2S,aAAak2S,GACtBA,EAAQ,KACR+E,EAAQ19S,SAAQg9S,IACdA,EAAOD,YAAcC,EAAOD,YAAYt4S,GAAWu4S,EAAOxiN,oBAAoB,QAAS/1F,EAAQ,IAEjGi5S,EAAU,KACZ,EAGFA,EAAQ19S,SAASg9S,GAAWA,EAAOziN,iBAAiB,QAAS91F,KAE7D,MAAM,OAACu4S,GAAUW,EAIjB,OAFAX,EAAOD,YAAc,IAAM73F,GAAMipF,KAAK4O,GAE/BC,CACT,GC3CWa,GAAc,UAAWvwK,EAAOwwK,GAC3C,IAAI32S,EAAMmmI,EAAM5jD,WAEhB,IAAKo0N,GAAa32S,EAAM22S,EAEtB,kBADMxwK,GAIR,IACIvmD,EADAH,EAAM,EAGV,KAAOA,EAAMz/E,GACX4/E,EAAMH,EAAMk3N,QACNxwK,EAAMjtI,MAAMumF,EAAKG,GACvBH,EAAMG,CAEV,EAQMg3N,GAAaC,gBAAiB/sF,GAClC,GAAIA,EAAOhrN,OAAOg4S,eAEhB,kBADOhtF,GAIT,MAAMitF,EAASjtF,EAAOktF,YACtB,IACE,OAAS,CACP,MAAM,KAACn3S,EAAI,MAAErI,SAAeu/S,EAAO9D,OACnC,GAAIpzS,EACF,YAEIrI,CACR,CACF,CAAE,cACMu/S,EAAO3rL,QACf,CACF,EAEa6rL,GAAcA,CAACntF,EAAQ6sF,EAAWO,EAAYC,KACzD,MAAM74S,EA3BiBu4S,gBAAiBO,EAAUT,GAClD,UAAW,MAAMxwK,KAASywK,GAAWQ,SAC5BV,GAAYvwK,EAAOwwK,EAE9B,CAuBmBU,CAAUvtF,EAAQ6sF,GAEnC,IACI92S,EADA0oI,EAAQ,EAER+uK,EAAaz/S,IACVgI,IACHA,GAAO,EACPs3S,GAAYA,EAASt/S,GACvB,EAGF,OAAO,IAAI0/S,eAAe,CACxB,UAAMC,CAAKhB,GACT,IACE,MAAM,KAAC32S,EAAI,MAAErI,SAAe8G,EAASU,OAErC,GAAIa,EAGF,OAFDy3S,SACCd,EAAWx5I,QAIb,IAAIh9J,EAAMxI,EAAM+qF,WAChB,GAAI20N,EAAY,CACd,IAAIO,EAAclvK,GAASvoI,EAC3Bk3S,EAAWO,EACb,CACAjB,EAAWkB,QAAQ,IAAIz/S,WAAWT,GACpC,CAAE,MAAOd,GAEP,MADA4gT,EAAU5gT,GACJA,CACR,CACF,EACA00H,OAAOsuC,IACL49I,EAAU59I,GACHp7J,EAAS01F,WAEjB,CACD2jN,cAAe,GACf,EC3EEC,GAAoC,oBAAVC,OAA2C,oBAAZC,SAA8C,oBAAbC,SAC1FC,GAA4BJ,IAA8C,oBAAnBL,eAGvDU,GAAaL,KAA4C,oBAAhBM,aACzCvN,GAA0C,IAAIuN,YAAjCv5K,GAAQgsK,GAAQL,OAAO3rK,IACtCk4K,SAAe,IAAI5+S,iBAAiB,IAAI8/S,SAASp5K,GAAKw5K,gBADtD,IAAExN,GAIN,MAAMhrS,GAAO,SAACmI,GACZ,IAAI,QAAAuiI,EAAAlgI,UAAA5L,OADe+8H,EAAI,IAAAniI,MAAAkxI,EAAA,EAAAA,EAAA,KAAAE,EAAA,EAAAA,EAAAF,EAAAE,IAAJjP,EAAIiP,EAAA,GAAApgI,UAAAogI,GAErB,QAASziI,KAAMwzH,EACjB,CAAE,MAAOzjI,IACP,OAAO,CACT,CACF,EAEMugT,GAAwBJ,IAA6Br4S,IAAK,KAC9D,IAAI04S,GAAiB,EAErB,MAAMC,EAAiB,IAAIR,QAAQnyJ,GAASwc,OAAQ,CAClDnoK,KAAM,IAAIu9S,eACVj7S,OAAQ,OACR,UAAIi8S,GAEF,OADAF,GAAiB,EACV,MACT,IACC1gT,QAAQiJ,IAAI,gBAEf,OAAOy3S,IAAmBC,CAAc,IAKpCE,GAAyBR,IAC7Br4S,IAAK,IAAMo+M,GAAMynF,iBAAiB,IAAIuS,SAAS,IAAI/9S,QAG/Cy+S,GAAY,CAChB3uF,OAAQ0uF,IAA0B,CAAEE,GAAQA,EAAI1+S,OAG7B,IAAE0+S,GAAvBd,KAAuBc,GAOpB,IAAIX,SANL,CAAC,OAAQ,cAAe,OAAQ,WAAY,UAAUl/S,SAAQtB,KAC3DkhT,GAAUlhT,KAAUkhT,GAAUlhT,GAAQwmN,GAAM5lN,WAAWugT,GAAInhT,IAAUmhT,GAAQA,EAAInhT,KAChF,CAACqzH,EAAG3pC,KACF,MAAM,IAAImoN,GAAW,kBAAkB7xS,sBAA0B6xS,GAAWuP,gBAAiB13N,EAAO,EACpG,KAIR,MA8BM23N,GAAoB/B,MAAOl/S,EAASqC,KACxC,MAAMuE,EAASw/M,GAAM6qF,eAAejxS,EAAQkhT,oBAE5C,OAAiB,MAAVt6S,EAjCas4S,WACpB,GAAY,MAAR78S,EACF,OAAO,EAGT,GAAG+jN,GAAMsnF,OAAOrrS,GACd,OAAOA,EAAKsH,KAGd,GAAGy8M,GAAMgrF,oBAAoB/uS,GAAO,CAClC,MAAM8+S,EAAW,IAAIhB,QAAQnyJ,GAASwc,OAAQ,CAC5C7lK,OAAQ,OACRtC,SAEF,aAAc8+S,EAASX,eAAe51N,UACxC,CAEA,OAAGw7H,GAAM31E,kBAAkBpuI,IAAS+jN,GAAMq/B,cAAcpjP,GAC/CA,EAAKuoF,YAGXw7H,GAAMwnF,kBAAkBvrS,KACzBA,GAAc,IAGb+jN,GAAMinF,SAAShrS,UACFi+S,GAAWj+S,IAAOuoF,gBADlC,EAEA,EAMwBw2N,CAAc/+S,GAAQuE,CAAM,EAGtD,GAAeq5S,IAAoB,OAACf,IAClC,IAAI,IACF98S,EAAG,OACHuC,EAAM,KACNO,EAAI,OACJg5S,EAAM,YACNpB,EAAW,QACXt6S,EAAO,mBACPg6S,EAAkB,iBAClBD,EAAgB,aAChBv5S,EAAY,QACZhD,EAAO,gBACPgG,EAAkB,cAAa,aAC/Bq7S,GACE5D,GAAcn0N,GAElBtmF,EAAeA,GAAgBA,EAAe,IAAIzD,cAAgB,OAElE,IAEIyqM,EAFAs3G,EAAiB3C,GAAe,CAACT,EAAQpB,GAAeA,EAAYyE,iBAAkB/+S,GAI1F,MAAMy7S,EAAcqD,GAAkBA,EAAerD,aAAe,MAChEqD,EAAerD,aAClB,GAED,IAAIuD,EAEJ,IACE,GACEjF,GAAoBkE,IAAoC,QAAX97S,GAA+B,SAAXA,GACG,KAAnE68S,QAA6BP,GAAkBjhT,EAASkF,IACzD,CACA,IAMI5F,EANA6hT,EAAW,IAAIhB,QAAQ/9S,EAAK,CAC9BuC,OAAQ,OACRtC,KAAM6C,EACN07S,OAAQ,SASV,GAJIx6F,GAAMopF,WAAWtqS,KAAU5F,EAAoB6hT,EAASnhT,QAAQqJ,IAAI,kBACtErJ,EAAQq1S,eAAe/1S,GAGrB6hT,EAAS9+S,KAAM,CACjB,MAAOk9S,EAAY7rL,GAAS8mL,GAC1BgH,EACAxH,GAAqBU,GAAe6B,KAGtCr3S,EAAOo6S,GAAY6B,EAAS9+S,KA1GT,MA0GmCk9S,EAAY7rL,EACpE,CACF,CAEK0yF,GAAMinF,SAASrnS,KAClBA,EAAkBA,EAAkB,UAAY,QAKlD,MAAMy7S,EAAyB,gBAAiBtB,QAAQx4S,UACxDqiM,EAAU,IAAIm2G,QAAQ/9S,EAAK,IACtBi/S,EACHnD,OAAQoD,EACR38S,OAAQA,EAAOmC,cACf9G,QAASA,EAAQuQ,YAAYqgM,SAC7BvuM,KAAM6C,EACN07S,OAAQ,OACRc,YAAaD,EAAyBz7S,OAAkBnD,IAG1D,IAAI7D,QAAiBkhT,MAAMl2G,GAE3B,MAAM23G,EAAmBd,KAA4C,WAAjB79S,GAA8C,aAAjBA,GAEjF,GAAI69S,KAA2BrE,GAAuBmF,GAAoB1D,GAAe,CACvF,MAAMp8S,EAAU,CAAC,EAEjB,CAAC,SAAU,aAAc,WAAWX,SAAQk7D,IAC1Cv6D,EAAQu6D,GAAQp9D,EAASo9D,EAAK,IAGhC,MAAMwlP,EAAwBx7F,GAAM6qF,eAAejyS,EAASgB,QAAQqJ,IAAI,oBAEjEk2S,EAAY7rL,GAAS8oL,GAAsBhC,GAChDoH,EACA5H,GAAqBU,GAAe8B,IAAqB,KACtD,GAELx9S,EAAW,IAAIohT,SACbd,GAAYtgT,EAASqD,KAlJF,MAkJ4Bk9S,GAAY,KACzD7rL,GAASA,IACTuqL,GAAeA,GAAa,IAE9Bp8S,EAEJ,CAEAmB,EAAeA,GAAgB,OAE/B,IAAI6+S,QAAqBf,GAAU16F,GAAM8nF,QAAQ4S,GAAW99S,IAAiB,QAAQhE,EAAUsqF,GAI/F,OAFCq4N,GAAoB1D,GAAeA,UAEvB,IAAIrrM,SAAQ,CAACG,EAAS4/D,KACjCumI,GAAOnmM,EAAS4/D,EAAQ,CACtBztK,KAAM28S,EACN7hT,QAAS82S,GAAa/uS,KAAK/I,EAASgB,SACpCyE,OAAQzF,EAASyF,OACjBmgS,WAAY5lS,EAAS4lS,WACrBt7M,SACA0gH,WACA,GAEN,CAAE,MAAOjrM,GAGP,GAFAk/S,GAAeA,IAEXl/S,GAAoB,cAAbA,EAAI+I,MAAwB,SAASE,KAAKjJ,EAAI6X,SACvD,MAAMlP,OAAOmF,OACX,IAAI4kS,GAAW,gBAAiBA,GAAW4M,YAAa/0N,EAAQ0gH,GAChE,CACE7qM,MAAOJ,EAAII,OAASJ,IAK1B,MAAM0yS,GAAW1pS,KAAKhJ,EAAKA,GAAOA,EAAImH,KAAMojF,EAAQ0gH,EACtD,CACD,GC5NK83G,GAAgB,CACpBC,KCNF,KDOEj/S,IAAKk/S,GACL9B,MAAO+B,IAGT77F,GAAMllN,QAAQ4gT,IAAe,CAAC3xS,EAAItQ,KAChC,GAAIsQ,EAAI,CACN,IACEzI,OAAOka,eAAezR,EAAI,OAAQ,CAACtQ,SACrC,CAAE,MAAOK,IACP,CAEFwH,OAAOka,eAAezR,EAAI,cAAe,CAACtQ,SAC5C,KAGF,MAAMqiT,GAAgBngJ,GAAW,KAAKA,IAEhCogJ,GAAoBpN,GAAY3uF,GAAM5lN,WAAWu0S,IAAwB,OAAZA,IAAgC,IAAZA,EAEvF,GACeqN,IACXA,EAAWh8F,GAAM3kN,QAAQ2gT,GAAYA,EAAW,CAACA,GAEjD,MAAM,OAACx7S,GAAUw7S,EACjB,IAAIC,EACAtN,EAEJ,MAAMuN,EAAkB,CAAC,EAEzB,IAAK,IAAIh8S,EAAI,EAAGA,EAAIM,EAAQN,IAAK,CAE/B,IAAI2Y,EAIJ,GALAojS,EAAgBD,EAAS97S,GAGzByuS,EAAUsN,GAELF,GAAiBE,KACpBtN,EAAU+M,IAAe7iS,EAAK9e,OAAOkiT,IAAgB9iT,oBAErCsD,IAAZkyS,GACF,MAAM,IAAItD,GAAW,oBAAoBxyR,MAI7C,GAAI81R,EACF,MAGFuN,EAAgBrjS,GAAM,IAAM3Y,GAAKyuS,CACnC,CAEA,IAAKA,EAAS,CAEZ,MAAMwN,EAAU76S,OAAOg7Q,QAAQ4/B,GAC5B1jS,KAAI1T,IAAA,IAAE+T,EAAIijG,GAAMh3G,EAAA,MAAK,WAAW+T,OACpB,IAAVijG,EAAkB,sCAAwC,gCAAgC,IAG/F,IAAIn7B,EAAIngF,EACL27S,EAAQ37S,OAAS,EAAI,YAAc27S,EAAQ3jS,IAAIsjS,IAAc5lS,KAAK,MAAQ,IAAM4lS,GAAaK,EAAQ,IACtG,0BAEF,MAAM,IAAI9Q,GACR,wDAA0D1qN,EAC1D,kBAEJ,CAEA,OAAOguN,CAAO,EE3DlB,SAASyN,GAA6Bl5N,GAKpC,GAJIA,EAAOwzN,aACTxzN,EAAOwzN,YAAY2F,mBAGjBn5N,EAAO40N,QAAU50N,EAAO40N,OAAOp6S,QACjC,MAAM,IAAIk1S,GAAc,KAAM1vN,EAElC,CASe,SAASo5N,GAAgBp5N,GACtCk5N,GAA6Bl5N,GAE7BA,EAAOtpF,QAAU82S,GAAa/uS,KAAKuhF,EAAOtpF,SAG1CspF,EAAOpkF,KAAO0zS,GAAcxxS,KAC1BkiF,EACAA,EAAO0rN,mBAGgD,IAArD,CAAC,OAAQ,MAAO,SAAS3zS,QAAQioF,EAAO3kF,SAC1C2kF,EAAOtpF,QAAQq1S,eAAe,qCAAqC,GAKrE,OAFgB+M,GAAoB94N,EAAOyrN,SAAWv6G,GAASu6G,QAExDA,CAAQzrN,GAAQ0pB,MAAK,SAA6Bh0G,GAYvD,OAXAwjT,GAA6Bl5N,GAG7BtqF,EAASkG,KAAO0zS,GAAcxxS,KAC5BkiF,EACAA,EAAOwsN,kBACP92S,GAGFA,EAASgB,QAAU82S,GAAa/uS,KAAK/I,EAASgB,SAEvChB,CACT,IAAG,SAA4B+iK,GAe7B,OAdK+2I,GAAS/2I,KACZygJ,GAA6Bl5N,GAGzBy4E,GAAUA,EAAO/iK,WACnB+iK,EAAO/iK,SAASkG,KAAO0zS,GAAcxxS,KACnCkiF,EACAA,EAAOwsN,kBACP/zI,EAAO/iK,UAET+iK,EAAO/iK,SAASgB,QAAU82S,GAAa/uS,KAAKg6J,EAAO/iK,SAASgB,WAIzD4yG,QAAQ+/D,OAAO5Q,EACxB,GACF,CChFO,MAAMoxC,GAAU,QCKjBwvG,GAAa,CAAC,EAGpB,CAAC,SAAU,UAAW,SAAU,WAAY,SAAU,UAAUzhT,SAAQ,CAACtB,EAAM0G,KAC7Eq8S,GAAW/iT,GAAQ,SAAmBqtS,GACpC,cAAcA,IAAUrtS,GAAQ,KAAO0G,EAAI,EAAI,KAAO,KAAO1G,CAC/D,CAAC,IAGH,MAAMgjT,GAAqB,CAAC,EAW5BD,GAAW9N,aAAe,SAAsBgO,EAAW3kS,EAAStH,GAClE,SAASksS,EAActiK,EAAKkD,GAC1B,MAAO,uCAAoDlD,EAAM,IAAOkD,GAAQ9sI,EAAU,KAAOA,EAAU,GAC7G,CAGA,MAAO,CAAC/W,EAAO2gJ,EAAK9e,KAClB,IAAkB,IAAdmhL,EACF,MAAM,IAAIpR,GACRqR,EAActiK,EAAK,qBAAuBtiI,EAAU,OAASA,EAAU,KACvEuzR,GAAWsR,gBAef,OAXI7kS,IAAY0kS,GAAmBpiK,KACjCoiK,GAAmBpiK,IAAO,EAE1B7sI,QAAQC,KACNkvS,EACEtiK,EACA,+BAAiCtiI,EAAU,8CAK1C2kS,GAAYA,EAAUhjT,EAAO2gJ,EAAK9e,EAAY,CAEzD,EAmCA,UACEshL,cAxBF,SAAuBnhT,EAASohT,EAAQC,GACtC,GAAuB,kBAAZrhT,EACT,MAAM,IAAI4vS,GAAW,4BAA6BA,GAAW0R,sBAE/D,MAAM/uS,EAAO1M,OAAO0M,KAAKvS,GACzB,IAAIyE,EAAI8N,EAAKxN,OACb,KAAON,KAAM,GAAG,CACd,MAAMk6I,EAAMpsI,EAAK9N,GACXu8S,EAAYI,EAAOziK,GACzB,GAAIqiK,EAAJ,CACE,MAAMhjT,EAAQgC,EAAQ2+I,GAChBv/I,OAAmB4B,IAAVhD,GAAuBgjT,EAAUhjT,EAAO2gJ,EAAK3+I,GAC5D,IAAe,IAAXZ,EACF,MAAM,IAAIwwS,GAAW,UAAYjxJ,EAAM,YAAcv/I,EAAQwwS,GAAW0R,qBAG5E,MACA,IAAqB,IAAjBD,EACF,MAAM,IAAIzR,GAAW,kBAAoBjxJ,EAAKixJ,GAAW2R,eAE7D,CACF,EAIET,eC9EIA,GAAaE,GAAUF,WAS7B,MAAMU,GACJx7S,WAAAA,CAAYy7S,GACV/6S,KAAKiyL,SAAW8oH,EAChB/6S,KAAKg7S,aAAe,CAClBv5G,QAAS,IAAIw5G,GACbxkT,SAAU,IAAIwkT,GAElB,CAUA,aAAMx5G,CAAQy5G,EAAan6N,GACzB,IACE,aAAa/gF,KAAK44S,SAASsC,EAAan6N,EAC1C,CAAE,MAAOvqF,GACP,GAAIA,aAAeiD,MAAO,CACxB,IAAIg5L,EAEJh5L,MAAM6U,kBAAoB7U,MAAM6U,kBAAkBmkL,EAAQ,CAAC,GAAMA,EAAQ,IAAIh5L,MAG7E,MAAMmwF,EAAQ6oG,EAAM7oG,MAAQ6oG,EAAM7oG,MAAMrkF,QAAQ,QAAS,IAAM,GAC/D,IACO/O,EAAIozF,MAGEA,IAAUhyF,OAAOpB,EAAIozF,OAAOyvM,SAASzvM,EAAMrkF,QAAQ,YAAa,OACzE/O,EAAIozF,OAAS,KAAOA,GAHpBpzF,EAAIozF,MAAQA,CAKhB,CAAE,MAAOjyF,IACP,CAEJ,CAEA,MAAMnB,CACR,CACF,CAEAoiT,QAAAA,CAASsC,EAAan6N,GAGO,kBAAhBm6N,GACTn6N,EAASA,GAAU,CAAC,GACblnF,IAAMqhT,EAEbn6N,EAASm6N,GAAe,CAAC,EAG3Bn6N,EAASqyN,GAAYpzS,KAAKiyL,SAAUlxG,GAEpC,MAAM,aAACurN,EAAY,iBAAEuH,EAAgB,QAAEp8S,GAAWspF,OAE7BzmF,IAAjBgyS,GACFgO,GAAUG,cAAcnO,EAAc,CACpCjB,kBAAmB+O,GAAW9N,aAAa8N,GAAWe,SACtD7P,kBAAmB8O,GAAW9N,aAAa8N,GAAWe,SACtD5P,oBAAqB6O,GAAW9N,aAAa8N,GAAWe,WACvD,GAGmB,MAApBtH,IACEh2F,GAAM5lN,WAAW47S,GACnB9yN,EAAO8yN,iBAAmB,CACxBhJ,UAAWgJ,GAGbyG,GAAUG,cAAc5G,EAAkB,CACxCzJ,OAAQgQ,GAAWgB,SACnBvQ,UAAWuP,GAAWgB,WACrB,IAKPr6N,EAAO3kF,QAAU2kF,EAAO3kF,QAAU4D,KAAKiyL,SAAS71L,QAAU,OAAOpF,cAGjE,IAAIqkT,EAAiB5jT,GAAWomN,GAAM3zE,MACpCzyI,EAAQu2S,OACRv2S,EAAQspF,EAAO3kF,SAGjB3E,GAAWomN,GAAMllN,QACf,CAAC,SAAU,MAAO,OAAQ,OAAQ,MAAO,QAAS,WACjDyD,WACQ3E,EAAQ2E,EAAO,IAI1B2kF,EAAOtpF,QAAU82S,GAAa7mM,OAAO2zM,EAAgB5jT,GAGrD,MAAM6jT,EAA0B,GAChC,IAAIC,GAAiC,EACrCv7S,KAAKg7S,aAAav5G,QAAQ9oM,SAAQ,SAAoC8H,GACjC,oBAAxBA,EAAY0qS,UAA0D,IAAhC1qS,EAAY0qS,QAAQpqN,KAIrEw6N,EAAiCA,GAAkC96S,EAAYyqS,YAE/EoQ,EAAwB9xM,QAAQ/oG,EAAYuqS,UAAWvqS,EAAYwqS,UACrE,IAEA,MAAMuQ,EAA2B,GAKjC,IAAI76G,EAJJ3gM,KAAKg7S,aAAavkT,SAASkC,SAAQ,SAAkC8H,GACnE+6S,EAAyBriT,KAAKsH,EAAYuqS,UAAWvqS,EAAYwqS,SACnE,IAGA,IACInrS,EADA/B,EAAI,EAGR,IAAKw9S,EAAgC,CACnC,MAAME,EAAQ,CAACtB,GAAgBp7S,KAAKiB,WAAO1F,GAO3C,IANAmhT,EAAMjyM,QAAQ1xG,MAAM2jT,EAAOH,GAC3BG,EAAMtiT,KAAKrB,MAAM2jT,EAAOD,GACxB17S,EAAM27S,EAAMp9S,OAEZsiM,EAAUt2F,QAAQG,QAAQzpB,GAEnBhjF,EAAI+B,GACT6gM,EAAUA,EAAQl2F,KAAKgxM,EAAM19S,KAAM09S,EAAM19S,MAG3C,OAAO4iM,CACT,CAEA7gM,EAAMw7S,EAAwBj9S,OAE9B,IAAIs2S,EAAY5zN,EAIhB,IAFAhjF,EAAI,EAEGA,EAAI+B,GAAK,CACd,MAAM47S,EAAcJ,EAAwBv9S,KACtC49S,EAAaL,EAAwBv9S,KAC3C,IACE42S,EAAY+G,EAAY/G,EAC1B,CAAE,MAAO1sS,GACP0zS,EAAW98S,KAAKmB,KAAMiI,GACtB,KACF,CACF,CAEA,IACE04L,EAAUw5G,GAAgBt7S,KAAKmB,KAAM20S,EACvC,CAAE,MAAO1sS,GACP,OAAOoiG,QAAQ+/D,OAAOniK,EACxB,CAKA,IAHAlK,EAAI,EACJ+B,EAAM07S,EAAyBn9S,OAExBN,EAAI+B,GACT6gM,EAAUA,EAAQl2F,KAAK+wM,EAAyBz9S,KAAMy9S,EAAyBz9S,MAGjF,OAAO4iM,CACT,CAEAi7G,MAAAA,CAAO76N,GAGL,OAAO4pN,GADUqI,IADjBjyN,EAASqyN,GAAYpzS,KAAKiyL,SAAUlxG,IACEk4C,QAASl4C,EAAOlnF,KAC5BknF,EAAOxnF,OAAQwnF,EAAO8yN,iBAClD,EAIFh2F,GAAMllN,QAAQ,CAAC,SAAU,MAAO,OAAQ,YAAY,SAA6ByD,GAE/E0+S,GAAM17S,UAAUhD,GAAU,SAASvC,EAAKknF,GACtC,OAAO/gF,KAAKyhM,QAAQ2xG,GAAYryN,GAAU,CAAC,EAAG,CAC5C3kF,SACAvC,MACA8C,MAAOokF,GAAU,CAAC,GAAGpkF,OAEzB,CACF,IAEAkhN,GAAMllN,QAAQ,CAAC,OAAQ,MAAO,UAAU,SAA+ByD,GAGrE,SAASy/S,EAAmBC,GAC1B,OAAO,SAAoBjiT,EAAK8C,EAAMokF,GACpC,OAAO/gF,KAAKyhM,QAAQ2xG,GAAYryN,GAAU,CAAC,EAAG,CAC5C3kF,SACA3E,QAASqkT,EAAS,CAChB,eAAgB,uBACd,CAAC,EACLjiT,MACA8C,SAEJ,CACF,CAEAm+S,GAAM17S,UAAUhD,GAAUy/S,IAE1Bf,GAAM17S,UAAUhD,EAAS,QAAUy/S,GAAmB,EACxD,IAEA,YCxNA,MAAME,GACJz8S,WAAAA,CAAY08S,GACV,GAAwB,oBAAbA,EACT,MAAM,IAAIp8S,UAAU,gCAGtB,IAAIq8S,EAEJj8S,KAAK2gM,QAAU,IAAIt2F,SAAQ,SAAyBG,GAClDyxM,EAAiBzxM,CACnB,IAEA,MAAMq8L,EAAQ7mS,KAGdA,KAAK2gM,QAAQl2F,MAAKygB,IAChB,IAAK27K,EAAMqV,WAAY,OAEvB,IAAIn+S,EAAI8oS,EAAMqV,WAAW79S,OAEzB,KAAON,KAAM,GACX8oS,EAAMqV,WAAWn+S,GAAGmtH,GAEtB27K,EAAMqV,WAAa,IAAI,IAIzBl8S,KAAK2gM,QAAQl2F,KAAO0xM,IAClB,IAAIC,EAEJ,MAAMz7G,EAAU,IAAIt2F,SAAQG,IAC1Bq8L,EAAMqP,UAAU1rM,GAChB4xM,EAAW5xM,CAAO,IACjBC,KAAK0xM,GAMR,OAJAx7G,EAAQz1E,OAAS,WACf27K,EAAM6O,YAAY0G,EACpB,EAEOz7G,CAAO,EAGhBq7G,GAAS,SAAgB3tS,EAAS0yE,EAAQ0gH,GACpColG,EAAMrtI,SAKVqtI,EAAMrtI,OAAS,IAAIi3I,GAAcpiS,EAAS0yE,EAAQ0gH,GAClDw6G,EAAepV,EAAMrtI,QACvB,GACF,CAKA0gJ,gBAAAA,GACE,GAAIl6S,KAAKw5J,OACP,MAAMx5J,KAAKw5J,MAEf,CAMA08I,SAAAA,CAAUpuM,GACJ9nG,KAAKw5J,OACP1xD,EAAS9nG,KAAKw5J,QAIZx5J,KAAKk8S,WACPl8S,KAAKk8S,WAAW/iT,KAAK2uG,GAErB9nG,KAAKk8S,WAAa,CAACp0M,EAEvB,CAMA4tM,WAAAA,CAAY5tM,GACV,IAAK9nG,KAAKk8S,WACR,OAEF,MAAMrjT,EAAQmH,KAAKk8S,WAAWpjT,QAAQgvG,IACvB,IAAXjvG,GACFmH,KAAKk8S,WAAW90L,OAAOvuH,EAAO,EAElC,CAEAmgT,aAAAA,GACE,MAAM1C,EAAa,IAAIC,gBAEjB74S,EAASlH,IACb8/S,EAAW54S,MAAMlH,EAAI,EAOvB,OAJAwJ,KAAKk2S,UAAUx4S,GAEf44S,EAAWX,OAAOD,YAAc,IAAM11S,KAAK01S,YAAYh4S,GAEhD44S,EAAWX,MACpB,CAMA,aAAOnxS,GACL,IAAI0mH,EACJ,MAAM27K,EAAQ,IAAIkV,IAAY,SAAkB9rS,GAC9Ci7G,EAASj7G,CACX,IACA,MAAO,CACL42R,QACA37K,SAEJ,EAGF,YCtIA,MAAMmxL,GAAiB,CACrBC,SAAU,IACVC,mBAAoB,IACpBC,WAAY,IACZC,WAAY,IACZj4L,GAAI,IACJk4L,QAAS,IACTC,SAAU,IACVC,4BAA6B,IAC7BC,UAAW,IACXC,aAAc,IACdC,eAAgB,IAChBC,YAAa,IACbC,gBAAiB,IACjBC,OAAQ,IACRC,gBAAiB,IACjBC,iBAAkB,IAClBC,MAAO,IACPC,SAAU,IACVC,YAAa,IACbC,SAAU,IACVC,OAAQ,IACRC,kBAAmB,IACnBC,kBAAmB,IACnBC,WAAY,IACZC,aAAc,IACdC,gBAAiB,IACjBC,UAAW,IACXC,SAAU,IACVC,iBAAkB,IAClBC,cAAe,IACfC,4BAA6B,IAC7BC,eAAgB,IAChBC,SAAU,IACVC,KAAM,IACNC,eAAgB,IAChBC,mBAAoB,IACpBC,gBAAiB,IACjBC,WAAY,IACZC,qBAAsB,IACtBC,oBAAqB,IACrBC,kBAAmB,IACnBC,UAAW,IACXC,mBAAoB,IACpBC,oBAAqB,IACrBC,OAAQ,IACRC,iBAAkB,IAClBC,SAAU,IACVC,gBAAiB,IACjBC,qBAAsB,IACtBC,gBAAiB,IACjBC,4BAA6B,IAC7BC,2BAA4B,IAC5BC,oBAAqB,IACrBC,eAAgB,IAChBC,WAAY,IACZC,mBAAoB,IACpBC,eAAgB,IAChBC,wBAAyB,IACzBC,sBAAuB,IACvBC,oBAAqB,IACrBC,aAAc,IACdC,YAAa,IACbC,8BAA+B,KAGjChhT,OAAOg7Q,QAAQkiC,IAAgB1jT,SAAQgK,IAAkB,IAAhB5J,EAAKzB,GAAMqL,EAClD05S,GAAe/kT,GAASyB,CAAG,IAG7B,YCxBA,MAAMqnT,GAnBN,SAASC,EAAeC,GACtB,MAAMxvM,EAAU,IAAIgqM,GAAMwF,GACpBz4M,EAAW9oG,GAAK+7S,GAAM17S,UAAUqiM,QAAS3wF,GAa/C,OAVA+sG,GAAM34G,OAAO2C,EAAUizM,GAAM17S,UAAW0xG,EAAS,CAAC40L,YAAY,IAG9D7nF,GAAM34G,OAAO2C,EAAUiJ,EAAS,KAAM,CAAC40L,YAAY,IAGnD79L,EAASyO,OAAS,SAAgBykM,GAChC,OAAOsF,EAAejN,GAAYkN,EAAevF,GACnD,EAEOlzM,CACT,CAGcw4M,CAAepuH,IAG7BmuH,GAAMtF,MAAQA,GAGdsF,GAAM3P,cAAgBA,GACtB2P,GAAMrE,YAAcA,GACpBqE,GAAM7P,SAAWA,GACjB6P,GAAMx1G,QAAUA,GAChBw1G,GAAM5V,WAAaA,GAGnB4V,GAAMlX,WAAaA,GAGnBkX,GAAMG,OAASH,GAAM3P,cAGrB2P,GAAM19J,IAAM,SAAa0xI,GACvB,OAAO/pL,QAAQq4C,IAAI0xI,EACrB,EAEAgsB,GAAMI,OC9CS,SAAgBlqT,GAC7B,OAAO,SAAcuJ,GACnB,OAAOvJ,EAASwB,MAAM,KAAM+H,EAC9B,CACF,ED6CAugT,GAAMK,aE7DS,SAAsBn/S,GACnC,OAAOu8M,GAAM5zE,SAAS3oI,KAAsC,IAAzBA,EAAQm/S,YAC7C,EF8DAL,GAAMhN,YAAcA,GAEpBgN,GAAM7R,aAAeA,GAErB6R,GAAMM,WAAahc,GAASmI,GAAehvF,GAAMkoF,WAAWrB,GAAS,IAAIwC,SAASxC,GAASA,GAE3F0b,GAAMO,WAAa9G,GAEnBuG,GAAM/D,eAAiBA,GAEvB+D,GAAM71L,QAAU61L,GAGhB,0BGrFA,MAuDA,GAvDuBQ,KACrBC,EAAAA,GAAAA,KAAA,OAAK5vL,UAAU,oBAAmBlkC,UAChC+zN,EAAAA,GAAAA,MAAA,OAAK7vL,UAAU,UAAU,aAAW,6BAA4BlkC,SAAA,EAC5D+zN,EAAAA,GAAAA,MAAA,OAAK7vL,UAAU,iBAAgBlkC,SAAA,EAC3B8zN,EAAAA,GAAAA,KAAA,OAAK5vL,UAAU,qBACf4vL,EAAAA,GAAAA,KAAA,OAAK5vL,UAAU,qBACf4vL,EAAAA,GAAAA,KAAA,OAAK5vL,UAAU,qBACf4vL,EAAAA,GAAAA,KAAA,OAAK5vL,UAAU,qBACf4vL,EAAAA,GAAAA,KAAA,OAAK5vL,UAAU,qBACf4vL,EAAAA,GAAAA,KAAA,OAAK5vL,UAAU,wBAEnB6vL,EAAAA,GAAAA,MAAA,OAAK7vL,UAAU,iBAAgBlkC,SAAA,EAC3B8zN,EAAAA,GAAAA,KAAA,OAAK5vL,UAAU,qBACf4vL,EAAAA,GAAAA,KAAA,OAAK5vL,UAAU,qBACf4vL,EAAAA,GAAAA,KAAA,OAAK5vL,UAAU,qBACf4vL,EAAAA,GAAAA,KAAA,OAAK5vL,UAAU,qBACf4vL,EAAAA,GAAAA,KAAA,OAAK5vL,UAAU,qBACf4vL,EAAAA,GAAAA,KAAA,OAAK5vL,UAAU,wBAEnB6vL,EAAAA,GAAAA,MAAA,OAAK7vL,UAAU,iBAAgBlkC,SAAA,EAC3B8zN,EAAAA,GAAAA,KAAA,OAAK5vL,UAAU,qBACf4vL,EAAAA,GAAAA,KAAA,OAAK5vL,UAAU,qBACf4vL,EAAAA,GAAAA,KAAA,OAAK5vL,UAAU,qBACf4vL,EAAAA,GAAAA,KAAA,OAAK5vL,UAAU,qBACf4vL,EAAAA,GAAAA,KAAA,OAAK5vL,UAAU,qBACf4vL,EAAAA,GAAAA,KAAA,OAAK5vL,UAAU,wBAEnB6vL,EAAAA,GAAAA,MAAA,OAAK7vL,UAAU,iBAAgBlkC,SAAA,EAC3B8zN,EAAAA,GAAAA,KAAA,OAAK5vL,UAAU,qBACf4vL,EAAAA,GAAAA,KAAA,OAAK5vL,UAAU,qBACf4vL,EAAAA,GAAAA,KAAA,OAAK5vL,UAAU,qBACf4vL,EAAAA,GAAAA,KAAA,OAAK5vL,UAAU,qBACf4vL,EAAAA,GAAAA,KAAA,OAAK5vL,UAAU,qBACf4vL,EAAAA,GAAAA,KAAA,OAAK5vL,UAAU,wBAEnB6vL,EAAAA,GAAAA,MAAA,OAAK7vL,UAAU,iBAAgBlkC,SAAA,EAC3B8zN,EAAAA,GAAAA,KAAA,OAAK5vL,UAAU,qBACf4vL,EAAAA,GAAAA,KAAA,OAAK5vL,UAAU,qBACf4vL,EAAAA,GAAAA,KAAA,OAAK5vL,UAAU,qBACf4vL,EAAAA,GAAAA,KAAA,OAAK5vL,UAAU,qBACf4vL,EAAAA,GAAAA,KAAA,OAAK5vL,UAAU,qBACf4vL,EAAAA,GAAAA,KAAA,OAAK5vL,UAAU,wBAEnB6vL,EAAAA,GAAAA,MAAA,OAAK7vL,UAAU,iBAAgBlkC,SAAA,EAC3B8zN,EAAAA,GAAAA,KAAA,OAAK5vL,UAAU,qBACf4vL,EAAAA,GAAAA,KAAA,OAAK5vL,UAAU,qBACf4vL,EAAAA,GAAAA,KAAA,OAAK5vL,UAAU,qBACf4vL,EAAAA,GAAAA,KAAA,OAAK5vL,UAAU,qBACf4vL,EAAAA,GAAAA,KAAA,OAAK5vL,UAAU,qBACf4vL,EAAAA,GAAAA,KAAA,OAAK5vL,UAAU,4BC4D3B,GA9E4BtuH,IAAkB,IAAjB,QAAEo+S,GAASp+S,EACpC,MAAOq+S,EAAWC,IAAiB7oM,EAAAA,EAAAA,WAAS,IA9B5CP,EAAAA,EAAAA,YAAU,KAEN,IAAKp2B,SAAShrE,eAAe,kBAAmB,CAC5C,MAAMyqS,EAAKz/N,SAASpqE,cAAc,UAClC6pS,EAAGxqS,GAAK,iBACRwqS,EAAGn1S,IAAM,4CACT01E,SAAS3nF,KAAK8M,YAAYs6S,EAC9B,CAGAhrT,OAAOirT,YAAc,WACjBjrT,OAAOkrT,GAAG55F,KAAK,CACX65F,MAAO,kBACPxO,QAAQ,EACRyO,OAAO,EACP3rS,QAAS,UAEbzf,OAAOkrT,GAAGG,UAAUC,cACpBp2S,QAAQ4qF,IAAI,2BAChB,EAEI9/F,OAAOkrT,GACPlrT,OAAOirT,cAEP/1S,QAAQ4qF,IAAI,0BAChB,GACD,IAOH,MAAMyrN,GAAY,IAAI7lN,MAAOmnC,UA2D7B,OAAIi+K,GACOH,EAAAA,GAAAA,KAACD,GAAc,KAItBC,EAAAA,GAAAA,KAAA,OAAKnqS,GAAG,UAASq2E,UACb+zN,EAAAA,GAAAA,MAAA,KAAG,0BAAqB7vL,UAAU,mCAAmCtgC,MAAO,CAACwoF,gBAAiB,WAAY50E,KAAK,KAC/GsuB,KAAK,SAAS1T,QAhEFuiM,KAChBT,GAAa,GACb/qT,OAAOkrT,GAAGO,OAAM,SAASlrT,GACrB,GAAIA,EAASmrT,aAAc,CACvBx2S,QAAQ4qF,IAAI,0CAEZ,MAAM,YAAE6rN,GAAgBprT,EAASmrT,aAEjC1rT,OAAOkrT,GAAGU,IAAI,MAAO,CAAEC,OAAQ,eAAgBpL,eAAeqL,GAC1D52S,QAAQ4qF,IAAI,oBAAsBgsN,EAAWziT,KAAO,KAEpD,IACI,MAAM0iT,QAAoB7B,GAAM8B,KAAK,6CAA8C,CAC/Erb,MAAOgb,IAGgB,MAAvBI,EAAY/lT,QACZ6kT,EAAQkB,EAAYtlT,MACpBwlT,aAAanzH,QAAQ,eAAgBizH,EAAYtlT,KAAKkqS,OACtDsb,aAAanzH,QAAQ,QAASizH,EAAYtlT,KAAKolG,OAC/CogN,aAAanzH,QAAQ,YAAaizH,EAAYtlT,KAAKylT,WACnDD,aAAanzH,QAAQ,aAAcyyH,IAEnCr2S,QAAQnD,MAAM,mCAAoCg6S,EAE1D,CAAE,MAAOh6S,GACLmD,QAAQnD,MAAM,8BAA+BA,EACjD,CAAC,QACGg5S,GAAa,EACjB,CACJ,GACJ,MACI71S,QAAQ4qF,IAAI,oDACZirN,GAAa,EAErB,GAAG,CAAEoB,MAAO,wBAAyB,EA6BEt1N,SAAA,EAC/B8zN,EAAAA,GAAAA,KAAA,KAAG5vL,UAAU,kBAAkBtgC,MAZzB,CACd2xN,YAAa,UAWgD,6BAGvD,ECcd,GApH4BC,KAC1B,MAAOxgN,EAAOygN,IAAYpqM,EAAAA,EAAAA,UAAS,KAC5BqqM,EAAWxB,IAAgB7oM,EAAAA,EAAAA,WAAS,IACpC8+J,EAAcwrC,IAAmBtqM,EAAAA,EAAAA,UAAS,IAC3CylL,EAAWR,KA8EjB,OACIwjB,EAAAA,GAAAA,KAAA,OAAK5vL,UAAU,eAAclkC,UAC3B+zN,EAAAA,GAAAA,MAAA,OAAK7vL,UAAU,oBAAmBlkC,SAAA,EAChC8zN,EAAAA,GAAAA,KAAA,OAAK5vL,UAAU,iBAAgBlkC,UAC7B8zN,EAAAA,GAAAA,KAAA,MAAA9zN,SAAI,+BAEN8zN,EAAAA,GAAAA,KAAC8B,GAAmB,CAAC5B,QAVA6B,IAC3B/kB,EAAS,QAAQ,KAUXgjB,EAAAA,GAAAA,KAAA,OAAK5vL,UAAU,YAAWlkC,UACxB8zN,EAAAA,GAAAA,KAAA,QAAA9zN,SAAM,0BAEPmqL,IAAgB2pC,EAAAA,GAAAA,KAAA,OAAK5vL,UAAU,gBAAelkC,SAAEmqL,KACjD4pC,EAAAA,GAAAA,MAAA,QAAM+B,SA7EOlM,UAInB,GAHAp0M,EAAMvH,iBACN0nN,EAAgB,IARI3gN,IAED,6BACDtiG,KAAKsiG,GAOlB+gN,CAAa/gN,GAAlB,CAKAk/M,GAAa,GAGb,WACyBb,GAAMt/S,IAAI,uDAAwDihG,MAG7EplG,KAAKomT,kBACf33S,QAAQ4qF,IAAI,eACZ6nM,EAAS,gBAAgB97L,OAGzB32F,QAAQ4qF,IAAI,mBACZ6nM,EAAS,mBAAmB97L,KAEhC,CAAE,MAAMm1K,GACNwrC,EAAgB,2CAClB,CAAC,QACCzB,GAAa,EACf,CArBA,MAFEyB,EAAgB,sCAuBlB,EAiDmC31N,SAAA,EAC3B8zN,EAAAA,GAAAA,KAAA,OAAK5vL,UAAU,aAAYlkC,UACzB8zN,EAAAA,GAAAA,KAAA,SACExpT,KAAK,QACL45H,UAAU,eACVv6G,GAAG,QACHpf,MAAOyqG,EACP2tB,SA9FantB,IACzBigN,EAASjgN,EAAMh+F,OAAOjN,MAAM,EA8FhB+4H,YAAY,sBACZ8T,UAAQ,OAGZ08K,EAAAA,GAAAA,KAAA,UAAQxpT,KAAK,SAAS45H,UAAU,uBAAuBrkC,SAAU61N,EAAU11N,SACxE01N,EAAY,aAAe,+BAMhC,ECtHJ7iL,GAAOA,OAEb,IAAIojL,GAAU,CAAC,EACXC,GAAY,CAAC,EACbC,GAAqB,KACrBC,GAAe,CACjBC,KAAMxjL,GACNyjL,QAASzjL,IAGX,IACwB,qBAAX1pI,SAAwB8sT,GAAU9sT,QACrB,qBAAburF,WAA0BwhO,GAAYxhO,UACjB,qBAArB6hO,mBAAkCJ,GAAqBI,kBACvC,qBAAhBlsL,cAA6B+rL,GAAe/rL,YACzD,CAAE,MAAOz/H,IAAI,CAEb,MAAM,UACJkuJ,GAAY,IACVm9J,GAAQvrL,WAAa,CAAC,EACpB8rL,GAASP,GACTQ,GAAWP,GACXQ,GAAoBP,GACpBQ,GAAcP,GAEdQ,IADeJ,GAAO9hO,WACX+hO,GAAS5oT,mBAAqB4oT,GAASj5J,MAA6C,oBAA9Bi5J,GAAStwN,kBAAqE,oBAA3BswN,GAASnsS,eAC7HusS,IAAS/9J,GAAU/sJ,QAAQ,UAAY+sJ,GAAU/sJ,QAAQ,YAE/D,IAAIgmF,GAAI,UACJzyE,GAAI,UACJujG,GAAI,QACJnxG,GAAI,gBACJwR,GAAI,CAAC6uE,GAAGzyE,GAAGujG,GAAGnxG,IAoBdolT,GACG,CACHC,IAAK,MACL,SAAU,OAHVD,GAKa,CACbE,KAAM,cACN,iBAAkB,eAqHlBC,GAAK,CACPC,QAAS,CACPn9N,GAAI,QACJo9N,IAAK,QACL,WAAY,QACZC,IAAK,UACL,aAAc,UACdC,IAAK,QACL,WAAY,QACZC,IAAK,OACL,UAAW,OACXC,IAAK,UACL,aAAc,UACdC,IAAK,SACL,YAAa,UAEf1jP,MAAO,CACLimB,GAAI,QACJ09N,KAAM,QACN,WAAY,QACZC,KAAM,UACN,aAAc,UACdC,KAAM,QACN,WAAY,QACZC,KAAM,OACN,UAAW,QAEb,gBAAiB,CACf79N,GAAI,QACJ89N,MAAO,QACP,WAAY,UAIZC,GAAM,CAAC,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,IAClCC,GAAMD,GAAIn9M,OAAO,CAAC,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,KACtDq9M,GAAM,CACRC,MAAO,gBACPC,aAAc,eACdC,QAAS,UACTC,UAAW,aAETC,GAAK,IAAIjmT,OAAO0M,KArFZ,CACNo4S,QAAS,CAAC,MAAO,MAAO,MAAO,OAC/BpjP,MAAO,CAAC,OAAQ,OAAQ,OAAQ,QAChC,gBAAiB,CAAC,WAyET,QAAS,UAAW,QAAS,OAAQ,UAAW,SAStB,MAAO,KAAM,KAAM,KAAM,KAAM,MAAO,OAAQ,SAAU,OAAQ,YAAa,SAAU,YAAa,kBAAmB,gBAAiB,OAAQ,KAAM,UAAW,iBAAkB,cAAe,SAAU,KAAM,YAAa,aAAc,QAAS,aAAc,aAAc,YAAa,YAAa,QAAS,aAAc,eAAgB,OAAQ,WAAY,WAAY,QAAS,KAAMkkP,GAAIC,MAAOD,GAAIE,aAAcF,GAAIG,QAASH,GAAII,WAAWz9M,OAAOm9M,GAAIxuS,KAAI5X,GAAK,GAAGipG,OAAOjpG,EAAG,QAAOipG,OAAOo9M,GAAIzuS,KAAI5X,GAAK,KAAKipG,OAAOjpG,MA2BpiB4mT,GACG,CACHC,IAAK,OAFLD,GAIa,CACb,cAAe,QAInB,MAAME,GAAuB,qBACvBC,GAAgB,GAEhBC,GAA4B,iBAC5BC,GAAgB,gBAChBC,GAAyB,yBAEzBC,GAAc,cACdC,GAAY,YACZC,GAA8B,oBAE9BC,GAAsC,CAAC,OAAQ,OAAQ,QAAS,UAChEC,GAAa,MACjB,IACE,OAAO56L,CACT,CAAE,MAAO66L,GACP,OAAO,CACT,CACD,EANkB,GAObC,GAAW,CAACpnO,GAAG8wB,GAAGnxG,IAExB,SAAS0nT,GAAYroT,GAEnB,OAAO,IAAIsoT,MAAMtoT,EAAK,CACpBgD,IAAGA,CAACyD,EAAQsvD,IACHA,KAAQtvD,EAASA,EAAOsvD,GAAQtvD,EAAOu6E,KAIpD,CAEA,MAAMunO,GAAmB,IAAKrC,IAE9BqC,GAAiBvnO,IAAK,IAAKklO,GAAGllO,OACzB+kO,MACAA,IAEL,MAAMyC,GAAkBH,GAAYE,IAC9BE,GAAmB,CAtIvBtC,QAAS,CACPuC,MAAO,MACPC,QAAS,MACTC,MAAO,MACPC,KAAM,MACNC,QAAS,MACTlhK,OAAQ,OAEV7kF,MAAO,CACL2lP,MAAO,OACPC,QAAS,OACTC,MAAO,OACPC,KAAM,QAER,gBAAiB,CACfH,MAAO,UAyHXD,GAAiBznO,IAAK,IAAKynO,GAAiBznO,OACvCumO,MACAA,IAEL,MAAMwB,GAAkBV,GAAYI,IAC9BO,GAAwB,CAhK5B7C,QAAS,CACPM,IAAK,YACLD,IAAK,aACLF,IAAK,WACLD,IAAK,aACLD,IAAK,WACLG,IAAK,WAEPxjP,MAAO,CACL2jP,KAAM,WACNC,KAAM,aACNC,KAAM,WACNC,KAAM,WAER,gBAAiB,CACfC,MAAO,aAmJXkC,GAAsBhoO,IAAK,IAAKgoO,GAAsBhoO,IA9DlDglO,IAAK,UAiET,MAAMiD,GAAuBZ,GAAYW,IACnCE,GAAwB,CA9L5B/C,QAAS,CACP,YAAa,MACb,aAAc,MACd,WAAY,MACZ,aAAc,MACd,WAAY,MACZ,UAAW,OAEbpjP,MAAO,CACL,WAAY,OACZ,aAAc,OACd,WAAY,OACZ,UAAW,QAEb,gBAAiB,CACf,WAAY,UAiLhBmmP,GAAsBloO,IAAK,IAAKkoO,GAAsBloO,IA5ElD,SAAU,OA+Ed,MAAMmoO,GAAuBd,GAAYa,IACnCE,GAxPG,8CA0PHC,GAAwB,iBACxBC,GA1PG,wGA8PHC,IADwBlB,GAFC,CAxR7BlC,QAAS,CACP,IAAK,MACL,IAAK,MACLqD,OAAQ,MACR,IAAK,MACL,IAAK,OAEPzmP,MAAO,CACL,IAAK,OACL,IAAK,OACL,IAAK,OACL,IAAK,QAEP,gBAAiB,CACf,IAAK,WA6Q+B,CAAC,QAAS,cAAe,YAAa,oBAAqB,iBAC7F0mP,GAAkBxC,GAClByC,GAAW,IAAI5mT,IACrBzB,OAAO0M,KAAKg7S,GAAgB/nO,KAAIzoE,IAAImxS,GAASzmT,IAAIhC,KAAKyoT,KACtDroT,OAAO0M,KAAKg7S,GAAgBj3M,KAAIv5F,IAAImxS,GAASzmT,IAAIhC,KAAKyoT,KACtDroT,OAAO0M,KAAKg7S,GAAgBpoT,KAAI4X,IAAImxS,GAASzmT,IAAIhC,KAAKyoT,KACtD,MAAMC,GAAmB,CAtQf,SAsQ0BrC,IAE9B/hK,GAAUkgK,GAAOmE,mBAAqB,CAAC,EAmB7C,GAAIlE,IAA8C,oBAA3BA,GAASrvJ,cAA8B,CAC9C,CAAC,CAAC,qBAAsB,gBAAiB,CAAC,kBAAmB,aAAc,CAAC,sBAAuB,iBAAkB,CAAC,qBAAsB,gBAAiB,CAAC,yBAA0B,oBAAqB,CAAC,wBAAyB,kBAAmB,CAAC,oBAAqB,cAAe,CAAC,iBAAkB,YAAa,CAAC,8BAA+B,wBAAyB,CAAC,yBAA0B,oBAAqB,CAAC,uBAAwB,kBAAmB,CAAC,4BAA6B,sBAAuB,CAAC,2BAA4B,sBAAuB,CAAC,0BAA2B,qBACjmBx7J,SAAQgK,IACZ,IAAKmG,EAAM/P,GAAO4J,EAClB,MAAM4iI,EAbV,SAAgBA,GAGd,MAAY,KAARA,GACQ,UAARA,IACQ,SAARA,GACGA,EACT,CAMgBoiL,CArBhB,SAAuB7+S,GACrB,IAAI2C,EAAU+3S,GAASrvJ,cAAc,UAAYrrJ,EAAO,KAExD,GAAI2C,EACF,OAAOA,EAAQmL,aAAa9N,EAEhC,CAeuB8+S,CAAc9+S,SAErBxO,IAARirI,GAA6B,OAARA,IACvB8d,GAAQtqJ,GAAOwsI,EACjB,GAEJ,CAEA,MAAMsiL,GAAW,CACfC,aAAc,QACdC,cAAe,UACfC,UAxGyB,KAyGzBC,iBAAkBxC,GAClByC,gBAAgB,EAChBC,YAAY,EACZC,UAAU,EACVC,sBAAsB,EACtBC,kBAAkB,EAClBC,eAAgB,QAChBC,oBAAoB,EACpBC,oBAAoB,EACpBC,kBAAkB,GAGhBrlK,GAAQslK,eACVtlK,GAAQ2kK,UAAY3kK,GAAQslK,cAG9B,MAAM1T,GAAU,IAAK4S,MAChBxkK,IAEA4xJ,GAAQiT,iBAAgBjT,GAAQqT,kBAAmB,GACxD,MAAMvnO,GAAS,CAAC,EAChB5hF,OAAO0M,KAAKg8S,IAAUlvT,SAAQI,IAC5BoG,OAAOka,eAAe0nE,GAAQhoF,EAAK,CACjCqyF,YAAY,EACZzqF,IAAK,SAAU4kI,GACb0vK,GAAQl8S,GAAOwsI,EAEfqjL,GAAYjwT,SAAQ2zF,GAAMA,EAAGvL,KAC/B,EACAjgF,IAAK,WACH,OAAOm0S,GAAQl8S,EACjB,GACA,IAGJoG,OAAOka,eAAe0nE,GAAQ,eAAgB,CAC5CqK,YAAY,EACZzqF,IAAK,SAAU4kI,GACb0vK,GAAQ+S,UAAYziL,EAEpBqjL,GAAYjwT,SAAQ2zF,GAAMA,EAAGvL,KAC/B,EACAjgF,IAAK,WACH,OAAOm0S,GAAQ+S,SACjB,IAEFzE,GAAOmE,kBAAoB3mO,GAC3B,MAAM6nO,GAAc,GASpB,MAAMC,GAAMrD,GACNsD,GAAuB,CAC3B1nT,KAAM,GACNonG,EAAG,EACHqH,EAAG,EACHk5M,OAAQ,EACRC,OAAO,EACPC,OAAO,GA0BT,SAASC,KACP,IAAI9nT,EAAO,GACPsV,EAAK,GAET,KAAOtV,KAAS,GACdsV,GANW,iEAMkB,GAAhBpT,KAAKC,SAAgB,GAGpC,OAAOmT,CACT,CACA,SAASk/G,GAAQ93H,GACf,MAAMK,EAAQ,GAEd,IAAK,IAAIJ,GAAKD,GAAO,IAAIO,SAAW,EAAGN,KACrCI,EAAMJ,GAAKD,EAAIC,GAGjB,OAAOI,CACT,CACA,SAASgrT,GAAWtjT,GAClB,OAAIA,EAAKqhJ,UACAtxB,GAAQ/vH,EAAKqhJ,YAEZrhJ,EAAK+Q,aAAa,UAAY,IAAI3f,MAAM,KAAK0U,QAAO5N,GAAKA,GAErE,CACA,SAASqrT,GAAW3qL,GAClB,MAAO,GAAG/2B,OAAO+2B,GAAKl5H,QAAQ,KAAM,SAASA,QAAQ,KAAM,UAAUA,QAAQ,KAAM,SAASA,QAAQ,KAAM,QAAQA,QAAQ,KAAM,OAClI,CAMA,SAAS8jT,GAAW7nK,GAClB,OAAOriJ,OAAO0M,KAAK21I,GAAU,CAAC,GAAGtqJ,QAAO,CAACwlI,EAAK4sL,IACrC5sL,EAAM,GAAGh1B,OAAO4hN,EAAW,MAAM5hN,OAAO85C,EAAO8nK,GAAW/xT,OAAQ,MACxE,GACL,CACA,SAASgyT,GAAsBzgK,GAC7B,OAAOA,EAAU1nJ,OAAS0nT,GAAqB1nT,MAAQ0nJ,EAAUtgD,IAAMsgN,GAAqBtgN,GAAKsgD,EAAUj5C,IAAMi5M,GAAqBj5M,GAAKi5C,EAAUigK,SAAWD,GAAqBC,QAAUjgK,EAAUkgK,OAASlgK,EAAUmgK,KAC9N,CAiDA,SAASO,KACP,MAAMC,EA7RmB,KA8RnBC,EAAMjE,GACNkE,EAAK5oO,GAAOinO,UACZ9xN,EAAKnV,GAAOknO,iBAClB,IAAIzpO,EAPW,4tYASf,GAAImrO,IAAOF,GAAOvzN,IAAOwzN,EAAK,CAC5B,MAAME,EAAQ,IAAIjsO,OAAO,MAAM+pB,OAAO+hN,EAAK,OAAQ,KAC7CI,EAAiB,IAAIlsO,OAAO,OAAO+pB,OAAO+hN,EAAK,OAAQ,KACvDK,EAAQ,IAAInsO,OAAO,MAAM+pB,OAAOgiN,GAAM,KAC5ClrO,EAAIA,EAAEj5E,QAAQqkT,EAAO,IAAIliN,OAAOiiN,EAAI,MAAMpkT,QAAQskT,EAAgB,KAAKniN,OAAOiiN,EAAI,MAAMpkT,QAAQukT,EAAO,IAAIpiN,OAAOxR,GACpH,CAEA,OAAO1X,CACT,CAEA,IAAIurO,IAAe,EAEnB,SAASC,KACHjpO,GAAOonO,aAAe4B,MAtI5B,SAAmBP,GACjB,IAAKA,IAAQ7F,GACX,OAGF,MAAMhzN,EAAQ6yN,GAASnsS,cAAc,SACrCs5E,EAAM94E,aAAa,OAAQ,YAC3B84E,EAAMnD,UAAYg8N,EAClB,MAAMS,EAAezG,GAASj5J,KAAK55I,WACnC,IAAIu5S,EAAc,KAElB,IAAK,IAAInsT,EAAIksT,EAAa5rT,OAAS,EAAGN,GAAK,EAAGA,IAAK,CACjD,MAAM6S,EAAQq5S,EAAalsT,GACrBuL,GAAWsH,EAAMtH,SAAW,IAAI/K,cAElC,CAAC,QAAS,QAAQzF,QAAQwQ,IAAY,IACxC4gT,EAAct5S,EAElB,CAEA4yS,GAASj5J,KAAK10I,aAAa86E,EAAOu5N,EAEpC,CAiHIC,CAAUX,MACVO,IAAe,EAEnB,CAEA,IAAIK,GAAY,CACdC,OAAMA,KACG,CACLtlT,IAAK,CACHykT,OACAW,UAAWH,MAKjBrpK,MAAKA,KACI,CACL2pK,wBAAAA,GACEN,IACF,EAEAO,WAAAA,GACEP,IACF,KAON,MAAMQ,GAAMjH,IAAU,CAAC,EAClBiH,GAAIjF,MAAuBiF,GAAIjF,IAAwB,CAAC,GACxDiF,GAAIjF,IAAsB/jK,SAAQgpK,GAAIjF,IAAsB/jK,OAAS,CAAC,GACtEgpK,GAAIjF,IAAsB5kK,QAAO6pK,GAAIjF,IAAsB5kK,MAAQ,CAAC,GACpE6pK,GAAIjF,IAAsBkF,QAAOD,GAAIjF,IAAsBkF,MAAQ,IACxE,IAAI52S,GAAY22S,GAAIjF,IAEpB,MAAMmF,GAAY,GAEZ5iN,GAAW,WACf07M,GAASrwN,oBAAoB,mBAAoB2U,IACjD+4G,GAAS,EACT6pG,GAAUr0S,KAAIzO,GAAMA,KACtB,EAEA,IAAIi5M,IAAS,EAYb,SAAS8pG,GAAOC,GACd,MAAM,IACJtgO,EAAG,WACHn2E,EAAa,CAAC,EAAC,SACf44E,EAAW,IACT69N,EAEJ,MAA6B,kBAAlBA,EACFxB,GAAWwB,GAEX,IAAIljN,OAAOpd,EAAK,KAAKod,OArJhC,SAAwBvzF,GACtB,OAAOhV,OAAO0M,KAAKsI,GAAc,CAAC,GAAGjd,QAAO,CAACwlI,EAAKl1C,IACzCk1C,EAAM,GAAGh1B,OAAOlgB,EAAe,MAAOkgB,OAAO0hN,GAAWj1S,EAAWqzE,IAAiB,OAC1F,IAAIjwF,MACT,CAiJuCszT,CAAe12S,GAAa,KAAKuzF,OAAO3a,EAAS12E,IAAIs0S,IAAQ52S,KAAK,IAAK,MAAM2zF,OAAOpd,EAAK,IAEhI,CAEA,SAASwgO,GAAgBp5D,EAASjoP,EAAQmqJ,GACxC,GAAI89F,GAAWA,EAAQjoP,IAAWioP,EAAQjoP,GAAQmqJ,GAChD,MAAO,CACLnqJ,SACAmqJ,WACAm3J,KAAMr5D,EAAQjoP,GAAQmqJ,GAG5B,CAhCI+vJ,KACF9iG,IAAU2iG,GAAS5oT,gBAAgBowT,SAAW,aAAe,iBAAiBvrT,KAAK+jT,GAASxmT,YACvF6jN,IAAQ2iG,GAAStwN,iBAAiB,mBAAoB4U,KAqC7D,IAmBI5wG,GAAS,SAA0B+zT,EAASrjT,EAAIskF,EAAcg/N,GAChE,IAGIntT,EACAhF,EACAL,EALAmT,EAAO1M,OAAO0M,KAAKo/S,GACnB5sT,EAASwN,EAAKxN,OACdD,OAA2B9D,IAAhB4wT,EAtBG,SAAuBxlO,EAAMwlO,GAC/C,OAAO,SAAUpsO,EAAG4H,EAAGz2E,EAAGo3E,GACxB,OAAO3B,EAAK7mF,KAAKqsT,EAAapsO,EAAG4H,EAAGz2E,EAAGo3E,EACzC,CACF,CAkB6C8jO,CAAcvjT,EAAIsjT,GAAetjT,EAa5E,SARqBtN,IAAjB4xF,GACFnuF,EAAI,EACJrF,EAASuyT,EAAQp/S,EAAK,MAEtB9N,EAAI,EACJrF,EAASwzF,GAGJnuF,EAAIM,EAAQN,IAEjBrF,EAAS0F,EAAS1F,EAAQuyT,EAD1BlyT,EAAM8S,EAAK9N,IAC6BhF,EAAKkyT,GAG/C,OAAOvyT,CACT,EAoDA,SAAS0yT,GAAMryF,GACb,MAAMq/D,EA3BR,SAAoBx2M,GAClB,MAAMwrJ,EAAS,GACf,IAAIi+E,EAAU,EACd,MAAMhtT,EAASujF,EAAOvjF,OAEtB,KAAOgtT,EAAUhtT,GAAQ,CACvB,MAAM/G,EAAQsqF,EAAO1xE,WAAWm7S,KAEhC,GAAI/zT,GAAS,OAAUA,GAAS,OAAU+zT,EAAUhtT,EAAQ,CAC1D,MAAMitT,EAAQ1pO,EAAO1xE,WAAWm7S,KAER,QAAX,MAARC,GAEHl+E,EAAOj0O,OAAe,KAAR7B,IAAkB,KAAe,KAARg0T,GAAiB,QAExDl+E,EAAOj0O,KAAK7B,GACZ+zT,IAEJ,MACEj+E,EAAOj0O,KAAK7B,EAEhB,CAEA,OAAO81O,CACT,CAGkBm+E,CAAWxyF,GAC3B,OAA0B,IAAnBq/D,EAAQ/5R,OAAe+5R,EAAQ,GAAG/4R,SAAS,IAAM,IAC1D,CAiBA,SAASmsT,GAAeC,GACtB,OAAOtsT,OAAO0M,KAAK4/S,GAAOv0T,QAAO,CAACwlI,EAAKk3B,KACrC,MAAMm3J,EAAOU,EAAM73J,GASnB,QARmBm3J,EAAKA,KAGtBruL,EAAIquL,EAAKn3J,UAAYm3J,EAAKA,KAE1BruL,EAAIk3B,GAAYm3J,EAGXruL,CAAG,GACT,CAAC,EACN,CAEA,SAASgvL,GAAYjiT,EAAQgiT,GAC3B,IAAIlyT,EAAS0Q,UAAU5L,OAAS,QAAsB/D,IAAjB2P,UAAU,GAAmBA,UAAU,GAAK,CAAC,EAClF,MAAM,UACJ0hT,GAAY,GACVpyT,EACE81S,EAAamc,GAAeC,GAEK,oBAA5B53S,GAAU8sI,MAAMirK,SAA2BD,EAGpD93S,GAAU2tI,OAAO/3I,GAAU,IAAMoK,GAAU2tI,OAAO/3I,IAAW,CAAC,KACzD4lS,GAHLx7R,GAAU8sI,MAAMirK,QAAQniT,EAAQ+hT,GAAeC,IAclC,QAAXhiT,GACFiiT,GAAY,KAAMD,EAEtB,CAEA,MAAM,OACJjqK,GAAM,MACNipK,IACE52S,GACEg4S,GAAa,CACjB,CAAC/sO,IAAI3/E,OAAO4tH,OAAOg6L,GAAqBjoO,KACxC,CAAC8wB,IAAIzwG,OAAO4tH,OAAOg6L,GAAqBn3M,KACxC,CAACnxG,IAAIU,OAAO4tH,OAAOg6L,GAAqBtoT,MAE1C,IAAIqtT,GAAuB,KACvBC,GAAa,CAAC,EACdC,GAAc,CAAC,EACfC,GAAa,CAAC,EACdC,GAAgB,CAAC,EACjBC,GAAW,CAAC,EAChB,MAAMC,GAAW,CACf,CAACttO,IAAI3/E,OAAO0M,KAAKy6S,GAAgBxnO,KACjC,CAAC8wB,IAAIzwG,OAAO0M,KAAKy6S,GAAgB12M,KACjC,CAACnxG,IAAIU,OAAO0M,KAAKy6S,GAAgB7nT,MAOnC,SAAS4tT,GAAYrE,EAAWsE,GAC9B,MAAMlyL,EAAQkyL,EAAIr1T,MAAM,KAClBwS,EAAS2wH,EAAM,GACfw5B,EAAWx5B,EAAMphI,MAAM,GAAG+a,KAAK,KAErC,OAAItK,IAAWu+S,GAA0B,KAAbp0J,IATVr0J,EASyCq0J,GARnD6zJ,GAAiB3uT,QAAQyG,IAWxB,KAFAq0J,EAVX,IAAoBr0J,CAcpB,CACA,MAAMoI,GAAQA,KACZ,MAAM4kT,EAASrmB,GACNhvS,GAAOsqJ,IAAQ,CAACgrK,EAAM77N,EAAOlnF,KAClC+iT,EAAK/iT,GAAUvS,GAAOy5F,EAAOu1M,EAAS,CAAC,GAChCsmB,IACN,CAAC,GAGNT,GAAaQ,GAAO,CAAC7vL,EAAKquL,EAAMn3J,KAK9B,GAJIm3J,EAAK,KACPruL,EAAIquL,EAAK,IAAMn3J,GAGbm3J,EAAK,GAAI,CACKA,EAAK,GAAGp/S,QAAO8gT,GACN,kBAATA,IAER9zT,SAAQ+zT,IACdhwL,EAAIgwL,EAAMrtT,SAAS,KAAOu0J,CAAQ,GAEtC,CAEA,OAAOl3B,CAAG,IAEZsvL,GAAcO,GAAO,CAAC7vL,EAAKquL,EAAMn3J,KAG/B,GAFAl3B,EAAIk3B,GAAYA,EAEZm3J,EAAK,GAAI,CACKA,EAAK,GAAGp/S,QAAO8gT,GACN,kBAATA,IAER9zT,SAAQ+zT,IACdhwL,EAAIgwL,GAAS94J,CAAQ,GAEzB,CAEA,OAAOl3B,CAAG,IAEZyvL,GAAWI,GAAO,CAAC7vL,EAAKquL,EAAMn3J,KAC5B,MAAM+4J,EAAU5B,EAAK,GAKrB,OAJAruL,EAAIk3B,GAAYA,EAChB+4J,EAAQh0T,SAAQ+zT,IACdhwL,EAAIgwL,GAAS94J,CAAQ,IAEhBl3B,CAAG,IAIZ,MAAMkwL,EAAa,QAASprK,IAAUzgE,GAAO8rO,aACvCC,EAAc51T,GAAOuzT,IAAO,CAAC/tL,EAAK53C,KACtC,MAAMioO,EAAwBjoO,EAAK,GACnC,IAAIr7E,EAASq7E,EAAK,GAClB,MAAM8uE,EAAW9uE,EAAK,GAoBtB,MAlBe,QAAXr7E,GAAqBmjT,IACvBnjT,EAAS,OAG0B,kBAA1BsjT,IACTrwL,EAAI82B,MAAMu5J,GAAyB,CACjCtjT,SACAmqJ,aAIiC,kBAA1Bm5J,IACTrwL,EAAIswL,SAASD,EAAsB1tT,SAAS,KAAO,CACjDoK,SACAmqJ,aAIGl3B,CAAG,GACT,CACD82B,MAAO,CAAC,EACRw5J,SAAU,CAAC,IAEbf,GAAaa,EAAYt5J,MACzB04J,GAAgBY,EAAYE,SAC5BlB,GAAuBmB,GAAmBlsO,GAAO+mO,aAAc,CAC7DoF,OAAQnsO,GAAOgnO,eACf,EA9fJ,IAAkBz7N,GAsgBlB,SAAS6gO,GAAU1jT,EAAQsvN,GACzB,OAAQgzF,GAAWtiT,IAAW,CAAC,GAAGsvN,EACpC,CAIA,SAASq0F,GAAQ3jT,EAAQijT,GACvB,OAAQP,GAAS1iT,IAAW,CAAC,GAAGijT,EAClC,CACA,SAASW,GAAU9tT,GACjB,OAAO0sT,GAAW1sT,IAAS,CACzBkK,OAAQ,KACRmqJ,SAAU,KAEd,CAYA,SAAS05J,KACP,OAAOxB,EACT,CAliBkBx/N,GAggBTihO,IACPzB,GAAuBmB,GAAmBM,EAAKzF,aAAc,CAC3DoF,OAAQnsO,GAAOgnO,eACf,EAlgBFa,GAAYzvT,KAAKmzF,IAogBnB3kF,KAqCA,SAASslT,GAAmBO,GAC1B,IAAIj0T,EAAS0Q,UAAU5L,OAAS,QAAsB/D,IAAjB2P,UAAU,GAAmBA,UAAU,GAAK,CAAC,EAClF,MAAM,OACJijT,EAASpuO,IACPvlF,EACEo3F,EAAQ21N,GAAgB4G,GAAQM,GAChC/jT,EAASo9S,GAAgBqG,GAAQM,IAAkB3G,GAAgBqG,GAAQv8N,GAC3E88N,EAAUD,KAAiB35S,GAAU2tI,OAASgsK,EAAgB,KAEpE,OADe/jT,GAAUgkT,GAAW,IAEtC,CACA,MAAMC,GAAsB,CAC1B,CAAC5uO,IAAI3/E,OAAO0M,KAAKk7S,GAAqBjoO,KACtC,CAAC8wB,IAAIzwG,OAAO0M,KAAKk7S,GAAqBn3M,KACtC,CAACnxG,IAAIU,OAAO0M,KAAKk7S,GAAqBtoT,MAExC,SAASkvT,GAAiB5gM,GACxB,IAAIxzH,EAAS0Q,UAAU5L,OAAS,QAAsB/D,IAAjB2P,UAAU,GAAmBA,UAAU,GAAK,CAAC,EAClF,MAAM,YACJ2jT,GAAc,GACZr0T,EACEs0T,EAAW,CACf,CAAC/uO,IAAI,GAAG4oB,OAAO3mB,GAAOinO,UAAW,KAAKtgN,OAAO5oB,IAC7C,CAAC8wB,IAAI,GAAGlI,OAAO3mB,GAAOinO,UAAW,KAAKtgN,OAAOkI,IAC7C,CAACnxG,IAAI,GAAGipG,OAAO3mB,GAAOinO,UAAW,KAAKtgN,OAAOjpG,KAE/C,IAAIqvT,EAAc,KACdZ,EAASpuO,GACb,MAAMivO,EAAsB99S,GAAEtE,QAAOqiT,GAAYA,IAAa3hT,KAC9D0hT,EAAoBp1T,SAAQq1T,KACtBjhM,EAAO3iC,SAASyjO,EAASG,KAAcjhM,EAAOG,MAAK+gM,GAAQP,GAAoBM,GAAU5jO,SAAS6jO,QACpGf,EAASc,EACX,IAEF,MAAME,EAAYnhM,EAAO71H,QAAO,CAACwlI,EAAK4vL,KACpC,MAAM14J,EAAWy4J,GAAYtrO,GAAOinO,UAAWsE,GAiB/C,GAfI9qK,GAAO8qK,IACTA,EAAMT,GAAWqB,GAAQ9iO,SAASkiO,GAAOrF,GAAqBiG,GAAQZ,GAAOA,EAC7EwB,EAAcxB,EACd5vL,EAAIjzH,OAAS6iT,GACJF,GAASc,GAAQp0T,QAAQwzT,IAAQ,GAC1CwB,EAAcxB,EACd5vL,EAAIjzH,OAASwjT,GAAmBX,EAAK,CACnCY,YAEOt5J,EACTl3B,EAAIk3B,SAAWA,EACN04J,IAAQvrO,GAAOknO,kBAAqB8F,EAAoB7gM,MAAKihM,GAAc7B,IAAQuB,EAASM,MACrGzxL,EAAIy8J,KAAKhgS,KAAKmzT,IAGXsB,GAAelxL,EAAIjzH,QAAUizH,EAAIk3B,SAAU,CAC9C,MAAM9uE,EAAuB,OAAhBgpO,EAAuBT,GAAU3wL,EAAIk3B,UAAY,CAAC,EACzDw6J,EAAgBhB,GAAQ1wL,EAAIjzH,OAAQizH,EAAIk3B,UAE1C9uE,EAAKr7E,SACPqkT,EAAc,MAGhBpxL,EAAIk3B,SAAW9uE,EAAK8uE,UAAYw6J,GAAiB1xL,EAAIk3B,SACrDl3B,EAAIjzH,OAASq7E,EAAKr7E,QAAUizH,EAAIjzH,OAEb,QAAfizH,EAAIjzH,QAAqB+3I,GAAY,MAAKA,GAAY,KAAMzgE,GAAO8rO,eAGrEnwL,EAAIjzH,OAAS,MAEjB,CAEA,OAAOizH,CAAG,GA5EL,CACLjzH,OAAQ,KACRmqJ,SAAU,KACVulI,KAAM,KAoGR,OAxBIpsK,EAAO3iC,SAAS,cAAgB2iC,EAAO3iC,SAAS,UAClD8jO,EAAUzkT,OAAS,QAGjBsjH,EAAO3iC,SAAS,eAAiB2iC,EAAO3iC,SAAS,UACnD8jO,EAAUzkT,OAAS,OAGhBykT,EAAUzkT,QAAUyjT,IAAWt9M,KAAM4xC,GAAa,OAAKzgE,GAAO8rO,eACjEqB,EAAUzkT,OAAS,OACnBykT,EAAUt6J,SAAWw5J,GAAQc,EAAUzkT,OAAQykT,EAAUt6J,WAAas6J,EAAUt6J,UAG7Es6J,EAAUzkT,QAAUyjT,IAAWzuT,KAAM+iJ,GAAc,QAAKzgE,GAAO8rO,eAClEqB,EAAUzkT,OAAS,QACnBykT,EAAUt6J,SAAWw5J,GAAQc,EAAUzkT,OAAQykT,EAAUt6J,WAAas6J,EAAUt6J,UAGzD,OAArBs6J,EAAUzkT,QAAmC,OAAhBqkT,IAG/BI,EAAUzkT,OAAS6jT,MAA4B,OAG1CY,CACT,CAyDA,IAAIG,GAAW,GACXC,GAAS,CAAC,EACd,MAAMC,GAAY,CAAC,EACbC,GAAsBrvT,OAAO0M,KAAK0iT,IAiDxC,SAASE,GAAWxiH,EAAMyiH,GACxB,IAAK,IAAIvkL,EAAOlgI,UAAU5L,OAAQ+8H,EAAO,IAAIniI,MAAMkxI,EAAO,EAAIA,EAAO,EAAI,GAAIE,EAAO,EAAGA,EAAOF,EAAME,IAClGjP,EAAKiP,EAAO,GAAKpgI,UAAUogI,GAO7B,OAJgBikL,GAAOriH,IAAS,IACxBtzM,SAAQg2T,IACdD,EAAcC,EAAO72T,MAAM,KAAM,CAAC42T,KAAgBtzL,GAAM,IAEnDszL,CACT,CACA,SAASE,GAAU3iH,GACjB,IAAK,IAAInpD,EAAQ74I,UAAU5L,OAAQ+8H,EAAO,IAAIniI,MAAM6pJ,EAAQ,EAAIA,EAAQ,EAAI,GAAIC,EAAQ,EAAGA,EAAQD,EAAOC,IACxG3nB,EAAK2nB,EAAQ,GAAK94I,UAAU84I,IAGdurK,GAAOriH,IAAS,IACxBtzM,SAAQg2T,IACdA,EAAO72T,MAAM,KAAMsjI,EAAK,GAG5B,CACA,SAASyzL,KACP,MAAM5iH,EAAOhiM,UAAU,GACjBmxH,EAAOniI,MAAMmG,UAAUpG,MAAM6F,KAAKoL,UAAW,GACnD,OAAOskT,GAAUtiH,GAAQsiH,GAAUtiH,GAAMn0M,MAAM,KAAMsjI,QAAQ9gI,CAC/D,CAEA,SAASw0T,GAAmBC,GACA,OAAtBA,EAAWtlT,SACbslT,EAAWtlT,OAAS,OAGtB,IAAI,SACFmqJ,GACEm7J,EACJ,MAAMtlT,EAASslT,EAAWtlT,QAAU6jT,KACpC,GAAK15J,EAEL,OADAA,EAAWw5J,GAAQ3jT,EAAQmqJ,IAAaA,EACjCk3J,GAAgBkE,GAAQnuL,YAAap3H,EAAQmqJ,IAAak3J,GAAgBj3S,GAAU2tI,OAAQ/3I,EAAQmqJ,EAC7G,CACA,MAAMo7J,GAAU,IApJhB,MACE1vT,WAAAA,GACEU,KAAK6gI,YAAc,CAAC,CACtB,CAEA9/H,GAAAA,GACE,IAAK,IAAIopI,EAAOlgI,UAAU5L,OAAQwiI,EAAc,IAAI5nI,MAAMkxI,GAAOE,EAAO,EAAGA,EAAOF,EAAME,IACtFxJ,EAAYwJ,GAAQpgI,UAAUogI,GAGhC,MAAM4kL,EAAYpuL,EAAY3pI,OAAO8I,KAAKkvT,iBAAkB,CAAC,GAC7D/vT,OAAO0M,KAAKojT,GAAWt2T,SAAQI,IAC7BiH,KAAK6gI,YAAY9nI,GAAO,IAAMiH,KAAK6gI,YAAY9nI,IAAQ,CAAC,KACnDk2T,EAAUl2T,IAEf2yT,GAAY3yT,EAAKk2T,EAAUl2T,IAE3B,MAAMo2T,EAAapI,GAAqBjoO,IAAG/lF,GACvCo2T,GAAYzD,GAAYyD,EAAYF,EAAUl2T,IAClD4O,IAAO,GAEX,CAEApH,KAAAA,GACEP,KAAK6gI,YAAc,CAAC,CACtB,CAEAquL,gBAAAA,CAAiBD,EAAW/6B,GAC1B,MAAMmb,EAAanb,EAAWzqR,QAAUyqR,EAAWtgI,UAAYsgI,EAAW62B,KAAO,CAC/E,EAAG72B,GACDA,EAoBJ,OAnBA/0R,OAAO0M,KAAKwjS,GAAYh5R,KAAItd,IAC1B,MAAM,OACJ0Q,EAAM,SACNmqJ,EAAQ,KACRm3J,GACE1b,EAAWt2S,GACT4zT,EAAU5B,EAAK,GAChBkE,EAAUxlT,KAASwlT,EAAUxlT,GAAU,CAAC,GAEzCkjT,EAAQtuT,OAAS,GACnBsuT,EAAQh0T,SAAQ+zT,IACO,kBAAVA,IACTuC,EAAUxlT,GAAQijT,GAAS3B,EAC7B,IAIJkE,EAAUxlT,GAAQmqJ,GAAYm3J,CAAI,IAE7BkE,CACT,GAuGIlqT,GAAM,CACVqqT,MAAO,WACL,IAAI71T,EAAS0Q,UAAU5L,OAAS,QAAsB/D,IAAjB2P,UAAU,GAAmBA,UAAU,GAAK,CAAC,EAElF,OAAI05S,IACFiL,GAAU,cAAer1T,GACzBs1T,GAAa,qBAAsBt1T,GAC5Bs1T,GAAa,QAASt1T,IAEtB8wG,QAAQ+/D,OAAO,IAAI3wK,MAAM,0CAEpC,EACA41T,MAAO,WACL,IAAI91T,EAAS0Q,UAAU5L,OAAS,QAAsB/D,IAAjB2P,UAAU,GAAmBA,UAAU,GAAK,CAAC,EAClF,MAAM,mBACJqlT,GACE/1T,EA5mBR,IAAmBqO,GA8mBe,IAA1Bm5E,GAAOmnO,iBACTnnO,GAAOmnO,gBAAiB,GAG1BnnO,GAAOunO,kBAAmB,EAlnBX1gT,EAmnBN,KACP2nT,GAAY,CACVD,uBAEFV,GAAU,QAASr1T,EAAO,EAtnBzBoqT,KACL9iG,GAAS/kN,WAAW8L,EAAI,GAAK8iT,GAAUvxT,KAAKyO,GAunB5C,GAEI3M,GAAQ,CACZ8vT,KAAMA,IACJ,GAAa,OAATA,EACF,OAAO,KAGT,GAAoB,kBAATA,GAAqBA,EAAKthT,QAAUshT,EAAKn3J,SAClD,MAAO,CACLnqJ,OAAQshT,EAAKthT,OACbmqJ,SAAUw5J,GAAQrC,EAAKthT,OAAQshT,EAAKn3J,WAAam3J,EAAKn3J,UAI1D,GAAI36J,MAAMC,QAAQ6xT,IAAyB,IAAhBA,EAAK1sT,OAAc,CAC5C,MAAMu1J,EAAsC,IAA3Bm3J,EAAK,GAAGjyT,QAAQ,OAAeiyT,EAAK,GAAG/xT,MAAM,GAAK+xT,EAAK,GAClEthT,EAASwjT,GAAmBlC,EAAK,IACvC,MAAO,CACLthT,SACAmqJ,SAAUw5J,GAAQ3jT,EAAQmqJ,IAAaA,EAE3C,CAEA,GAAoB,kBAATm3J,IAAsBA,EAAKjyT,QAAQ,GAAG4uG,OAAO3mB,GAAOinO,UAAW,OAAS,GAAK+C,EAAKnsO,MAAMsoO,KAAiC,CAClI,MAAMsI,EAAgB7B,GAAiB5C,EAAK9zT,MAAM,KAAM,CACtD22T,aAAa,IAEf,MAAO,CACLnkT,OAAQ+lT,EAAc/lT,QAAU6jT,KAChC15J,SAAUw5J,GAAQoC,EAAc/lT,OAAQ+lT,EAAc57J,WAAa47J,EAAc57J,SAErF,CAEA,GAAoB,kBAATm3J,EAAmB,CAC5B,MAAMthT,EAAS6jT,KACf,MAAO,CACL7jT,SACAmqJ,SAAUw5J,GAAQ3jT,EAAQshT,IAASA,EAEvC,IAGEjJ,GAAM,CACV2N,OA9EaA,KACb1uO,GAAOmnO,gBAAiB,EACxBnnO,GAAOunO,kBAAmB,EAC1BsG,GAAU,SAAS,EA4EnB7tO,UACAh8E,OACA9J,SACA+zT,WACAF,sBACAnE,WAGI4E,GAAc,WAClB,IAAIh2T,EAAS0Q,UAAU5L,OAAS,QAAsB/D,IAAjB2P,UAAU,GAAmBA,UAAU,GAAK,CAAC,EAClF,MAAM,mBACJqlT,EAAqB9L,IACnBjqT,GACC4F,OAAO0M,KAAKgI,GAAU2tI,QAAQnjJ,OAAS,GAAK0iF,GAAO8rO,eAAiBlJ,IAAU5iO,GAAOmnO,gBAAgBpG,GAAI/8S,IAAIqqT,MAAM,CACtHvpT,KAAMypT,GAEV,EAEA,SAASI,GAAYnqL,EAAKoqL,GAiBxB,OAhBAxwT,OAAOka,eAAeksH,EAAK,WAAY,CACrCzkI,IAAK6uT,IAEPxwT,OAAOka,eAAeksH,EAAK,OAAQ,CACjCzkI,IAAK,WACH,OAAOykI,EAAIqqL,SAASv5S,KAAIyoE,GAAK6rO,GAAO7rO,IACtC,IAEF3/E,OAAOka,eAAeksH,EAAK,OAAQ,CACjCzkI,IAAK,WACH,IAAK6iT,GAAQ,OACb,MAAMj8K,EAAY87K,GAASnsS,cAAc,OAEzC,OADAqwH,EAAUl6C,UAAY+3C,EAAIsqL,KACnBnoL,EAAU36C,QACnB,IAEKw4C,CACT,CAyDA,SAASuqL,GAAsBv2T,GAC7B,MACEkyT,OAAO,KACL1qJ,EAAI,KACJh3B,GACD,OACDtgI,EAAM,SACNmqJ,EAAQ,UACR9K,EAAS,OACTljE,EAAM,MACNgvC,EAAK,OACLm7L,EAAM,QACNC,EAAO,MACP1E,EAAK,UACL2E,GAAY,GACV12T,GACE,MACJqmG,EAAK,OACLC,GACEkqC,EAAK2rD,MAAQ3rD,EAAOg3B,EAClBmvJ,EAA4B,QAAXzmT,EACjB0mT,EAAY,CAACpvO,GAAOknO,iBAAkBr0J,EAAW,GAAGlsD,OAAO3mB,GAAOinO,UAAW,KAAKtgN,OAAOksD,GAAY,IAAIjoJ,QAAOsE,IAAmC,IAA9Bq7S,EAAMn+B,QAAQr0R,QAAQmX,KAAWtE,QAAOsE,GAAW,KAANA,KAAcA,IAAGy3F,OAAO4jN,EAAMn+B,SAASp5Q,KAAK,KACpN,IAAI2yI,EAAU,CACZ35D,SAAU,GACV54E,WAAY,IAAKm3S,EAAMn3S,WACrB,cAAe1K,EACf,YAAamqJ,EACb,MAASu8J,EACT,KAAQ7E,EAAMn3S,WAAW0+G,MAAQ,MACjC,MAAS,6BACT,QAAW,OAAOnrB,OAAO9H,EAAO,KAAK8H,OAAO7H,KAGhD,MAAMuwN,EAAyBF,KAAoB5E,EAAMn+B,QAAQr0R,QAAQ,SAAW,CAClF8mG,MAAO,GAAG8H,OAAO9H,EAAQC,EAAS,GAAK,MAAQ,OAC7C,CAAC,EAEDowN,IACFvpK,EAAQvyI,WAAWuxS,IAAiB,IAGlC9wL,IACF8xB,EAAQ35D,SAAS5zF,KAAK,CACpBmxF,IAAK,QACLn2E,WAAY,CACVuC,GAAIgwI,EAAQvyI,WAAW,oBAAsB,SAASuzF,OAAOsoN,GAAW9G,OAE1En8N,SAAU,CAAC6nC,YAEN8xB,EAAQvyI,WAAWygH,OAG5B,MAAMwG,EAAO,IAAKsrB,EAChBj9I,SACAmqJ,WACAmN,OACAh3B,OACAgmL,SACAjnK,YACAljE,SACA47D,OAAQ,IAAK4uK,KACR9E,EAAM9pK,UAGP,SACJz0D,EAAQ,WACR54E,GACE41H,EAAK2rD,OAAS30B,EAAK20B,MAAQm5H,GAAa,uBAAwBzzL,IAAS,CAC3EruC,SAAU,GACV54E,WAAY,CAAC,GACX06S,GAAa,uBAAwBzzL,IAAS,CAChDruC,SAAU,GACV54E,WAAY,CAAC,GAKf,OAHAinH,EAAKruC,SAAWA,EAChBquC,EAAKjnH,WAAaA,EAEdyxE,EArGN,SAAmBjjF,GACjB,IAAI,OACF8G,EAAM,SACNmqJ,EAAQ,SACR7mE,EAAQ,WACR54E,EAAU,OACVyxE,GACEjjF,EAEJ,MAAO,CAAC,CACN2nF,IAAK,MACLn2E,WAAY,CACVw8E,MAAO,kBAET5D,SAAU,CAAC,CACTzC,IAAK,SACLn2E,WAAY,IAAKA,EACfuC,IATgB,IAAXkvE,EAAkB,GAAG8hB,OAAOj+F,EAAQ,KAAKi+F,OAAO3mB,GAAOinO,UAAW,KAAKtgN,OAAOksD,GAAYhuE,GAWjGmH,cAGN,CAgFWsjO,CAASj1L,GArIpB,SAAiBz4H,GACf,IAAI,SACFoqF,EAAQ,KACRg0E,EAAI,KACJh3B,EAAI,WACJ51H,EAAU,OACVqtI,EAAM,UACNsH,GACEnmJ,EAEJ,GAAI4mT,GAAsBzgK,IAAciY,EAAK20B,QAAU3rD,EAAK2rD,MAAO,CACjE,MAAM,MACJ91F,EAAK,OACLC,GACEkhE,EACEpoJ,EAAS,CACb6vF,EAAG5I,EAAQC,EAAS,EACpBgQ,EAAG,IAEL17F,EAAkB,MAAIk1S,GAAW,IAAK7nK,EACpC,mBAAoB,GAAG95C,OAAO/uF,EAAO6vF,EAAIsgD,EAAUtgD,EAAI,GAAI,OAAOd,OAAO/uF,EAAOk3F,EAAIi5C,EAAUj5C,EAAI,GAAI,OAE1G,CAEA,MAAO,CAAC,CACNvlB,IAAK,MACLn2E,aACA44E,YAEJ,CA0GWujO,CAAOl1L,EAElB,CACA,SAASm1L,GAAuBh3T,GAC9B,MAAM,QACJmtJ,EAAO,MACP9mD,EAAK,OACLC,EAAM,UACNipD,EAAS,MACTl0B,EAAK,MACL02L,EAAK,UACL2E,GAAY,GACV12T,EACE4a,EAAa,IAAKm3S,EAAMn3S,cACxBygH,EAAQ,CACV,MAASA,GACP,CAAC,EACL,MAAS02L,EAAMn+B,QAAQp5Q,KAAK,MAG1Bk8S,IACF97S,EAAWuxS,IAAiB,IAG9B,MAAMlkK,EAAS,IAAK8pK,EAAM9pK,QAGtB+nK,GAAsBzgK,KACxBtH,EAAkB,UAh9BtB,SAAyBjjB,GACvB,IAAI,UACFuqB,EAAS,MACTlpD,EAAQ4lN,GAAa,OACrB3lN,EAAS2lN,GAAa,cACtBgL,GAAgB,GACdjyL,EACAgH,EAAM,GAYV,OATEA,GADEirL,GAAiB5M,GACZ,aAAal8M,OAAOohD,EAAUtgD,EAAIqgN,GAAMjpN,EAAQ,EAAG,QAAQ8H,OAAOohD,EAAUj5C,EAAIg5M,GAAMhpN,EAAS,EAAG,QAChG2wN,EACF,yBAAyB9oN,OAAOohD,EAAUtgD,EAAIqgN,GAAK,qBAAqBnhN,OAAOohD,EAAUj5C,EAAIg5M,GAAK,SAElG,aAAanhN,OAAOohD,EAAUtgD,EAAIqgN,GAAK,QAAQnhN,OAAOohD,EAAUj5C,EAAIg5M,GAAK,QAGlFtjL,GAAO,SAAS79B,OAAOohD,EAAU1nJ,KAAOynT,IAAO//J,EAAUkgK,OAAS,EAAI,GAAI,MAAMthN,OAAOohD,EAAU1nJ,KAAOynT,IAAO//J,EAAUmgK,OAAS,EAAI,GAAI,MAC1I1jL,GAAO,UAAU79B,OAAOohD,EAAUigK,OAAQ,SACnCxjL,CACT,CA47B0BkrL,CAAgB,CACpC3nK,YACA0nK,eAAe,EACf5wN,QACAC,WAEF2hD,EAAO,qBAAuBA,EAAkB,WAGlD,MAAMkvK,EAAcrH,GAAW7nK,GAE3BkvK,EAAYryT,OAAS,IACvB8V,EAAkB,MAAIu8S,GAGxB,MAAMnrL,EAAM,GAiBZ,OAhBAA,EAAIpsI,KAAK,CACPmxF,IAAK,OACLn2E,aACA44E,SAAU,CAAC25D,KAGT9xB,GACF2Q,EAAIpsI,KAAK,CACPmxF,IAAK,OACLn2E,WAAY,CACVywH,MAAO,WAET73C,SAAU,CAAC6nC,KAIR2Q,CACT,CAuCA,MACEic,OAAQmvK,IACN98S,GACJ,SAAS+8S,GAAY7F,GACnB,MAAMnrN,EAAQmrN,EAAK,GACblrN,EAASkrN,EAAK,IACb8F,GAAc9F,EAAK/xT,MAAM,GAChC,IAAIyS,EAAU,KAkCd,OA/BEA,EADExS,MAAMC,QAAQ23T,GACN,CACRvmO,IAAK,IACLn2E,WAAY,CACVywH,MAAO,GAAGl9B,OAAO3mB,GAAOinO,UAAW,KAAKtgN,OAAO6/M,GAAgBvC,QAEjEj4N,SAAU,CAAC,CACTzC,IAAK,OACLn2E,WAAY,CACVywH,MAAO,GAAGl9B,OAAO3mB,GAAOinO,UAAW,KAAKtgN,OAAO6/M,GAAgBpC,WAC/D3nJ,KAAM,eACNn2E,EAAGwpO,EAAW,KAEf,CACDvmO,IAAK,OACLn2E,WAAY,CACVywH,MAAO,GAAGl9B,OAAO3mB,GAAOinO,UAAW,KAAKtgN,OAAO6/M,GAAgBrC,SAC/D1nJ,KAAM,eACNn2E,EAAGwpO,EAAW,OAKV,CACRvmO,IAAK,OACLn2E,WAAY,CACVqpJ,KAAM,eACNn2E,EAAGwpO,IAKF,CACLn7H,OAAO,EACP91F,QACAC,SACAkrN,KAAMt/S,EAEV,CACA,MAAMqlT,GAA6B,CACjCp7H,OAAO,EACP91F,MAAO,IACPC,OAAQ,KASV,SAASkxN,GAASn9J,EAAUnqJ,GAC1B,IAAIqkT,EAAcrkT,EAMlB,MAJe,OAAXA,GAA2C,OAAxBs3E,GAAO+mO,eAC5Br+S,EAAS6jT,MAGJ,IAAIjjN,SAAQ,CAACG,EAAS4/D,KAC3B,GAAoB,OAAhB0jJ,EAAsB,CACxB,MAAMhpO,EAAOuoO,GAAUz5J,IAAa,CAAC,EACrCA,EAAW9uE,EAAK8uE,UAAYA,EAC5BnqJ,EAASq7E,EAAKr7E,QAAUA,CAC1B,CAEA,GAAImqJ,GAAYnqJ,GAAUknT,GAASlnT,IAAWknT,GAASlnT,GAAQmqJ,GAAW,CAExE,OAAOppD,EAAQomN,GADFD,GAASlnT,GAAQmqJ,IAEhC,EAvBJ,SAA4BA,EAAUnqJ,GAC/Bu8S,IAAejlO,GAAO2nO,mBAAoB90J,GAC7CxoJ,QAAQnD,MAAM,mBAAoBy/F,OAAOksD,EAAU,kBAAoBlsD,OAAOj+F,EAAQ,iBAE1F,CAqBIunT,CAAmBp9J,EAAUnqJ,GAC7B+gG,EAAQ,IAAKsmN,GACX/F,KAAMhqO,GAAO2nO,kBAAoB90J,GAAWi7J,GAAa,wBAA+B,CAAC,GACzF,GAEN,CAEA,MAAMoC,GAASA,OAETC,GAAMnwO,GAAO0nO,oBAAsB/E,IAAeA,GAAYN,MAAQM,GAAYL,QAAUK,GAAc,CAC9GN,KAAM6N,GACN5N,QAAS4N,IAELE,GAAW,aAOXzxO,GAAMngF,IACV2xT,GAAI9N,KAAK,GAAG17M,OAAOypN,GAAU,KAAKzpN,OAAOnoG,EAAM,UAC/C2xT,GAAI7N,QAAQ,GAAG37M,OAAOypN,GAAU,KAAKzpN,OAAOnoG,GAAO,GAAGmoG,OAAOypN,GAAU,KAAKzpN,OAAOnoG,EAAM,WAAY,GAAGmoG,OAAOypN,GAAU,KAAKzpN,OAAOnoG,EAAM,SAAS,EAGtJ,IAAI6xT,GAVU7xT,IACZ2xT,GAAI9N,KAAK,GAAG17M,OAAOypN,GAAU,KAAKzpN,OAAOnoG,EAAM,YACxC,IAAMmgF,GAAIngF,IAanB,MAAM8xT,GAASA,OAEf,SAASC,GAAUzrT,GAEjB,MAAwB,kBADVA,EAAK+Q,aAAe/Q,EAAK+Q,aAAa8uS,IAAiB,KAEvE,CAqBA,SAAS/8S,GAAgB2hF,GACvB,OAAOk5N,GAAS76S,gBAAgB,6BAA8B2hF,EAChE,CAEA,SAASjzE,GAAcizE,GACrB,OAAOk5N,GAASnsS,cAAcizE,EAChC,CAEA,SAASinO,GAAWC,GAClB,IAAIj4T,EAAS0Q,UAAU5L,OAAS,QAAsB/D,IAAjB2P,UAAU,GAAmBA,UAAU,GAAK,CAAC,EAClF,MAAM,KACJwnT,GAA2B,QAApBD,EAAYlnO,IAAgB3hF,GAAkB0O,KACnD9d,EAEJ,GAA2B,kBAAhBi4T,EACT,OAAOhO,GAASp5S,eAAeonT,GAGjC,MAAMlnO,EAAMmnO,EAAKD,EAAYlnO,KAC7BnrF,OAAO0M,KAAK2lT,EAAYr9S,YAAc,IAAIxb,SAAQ,SAAUI,GAC1DuxF,EAAIzyE,aAAa9e,EAAKy4T,EAAYr9S,WAAWpb,GAC/C,IAOA,OANiBy4T,EAAYzkO,UAAY,IAChCp0F,SAAQ,SAAUiY,GACzB05E,EAAI1jF,YAAY2qT,GAAW3gT,EAAO,CAChC6gT,SAEJ,IACOnnO,CACT,CAYA,MAAMonO,GAAW,CACfnsT,QAAS,SAAUosT,GACjB,MAAM9rT,EAAO8rT,EAAS,GAEtB,GAAI9rT,EAAK0D,WAKP,GAJAooT,EAAS,GAAGh5T,SAAQi3T,IAClB/pT,EAAK0D,WAAWsM,aAAa07S,GAAW3B,GAAW/pT,EAAK,IAGjB,OAArCA,EAAK+Q,aAAa8uS,KAA2B3kO,GAAOynO,mBAAoB,CAC1E,IAAIj+S,EAAUi5S,GAAS/4S,cApB/B,SAAuB5E,GACrB,IAAI0E,EAAU,IAAIm9F,OAAO7hG,EAAK+rT,UAAW,KAMzC,OAHArnT,EAAU,GAAGm9F,OAAOn9F,EAAS,iCAGtBA,CACT,CAY6CsnT,CAAchsT,IACnDA,EAAK0D,WAAWwM,aAAaxL,EAAS1E,EACxC,MACEA,EAAK0K,QAGX,EACAuhT,KAAM,SAAUH,GACd,MAAM9rT,EAAO8rT,EAAS,GAChB/B,EAAW+B,EAAS,GAG1B,IAAKxI,GAAWtjT,GAAM/M,QAAQioF,GAAOknO,kBACnC,OAAOyJ,GAASnsT,QAAQosT,GAG1B,MAAMI,EAAS,IAAIp0O,OAAO,GAAG+pB,OAAO3mB,GAAOinO,UAAW,QAGtD,UAFO4H,EAAS,GAAGz7S,WAAWuC,GAE1Bk5S,EAAS,GAAGz7S,WAAWywH,MAAO,CAChC,MAAMotL,EAAepC,EAAS,GAAGz7S,WAAWywH,MAAM3tI,MAAM,KAAKC,QAAO,CAACwlI,EAAK4vL,KACpEA,IAAQvrO,GAAOknO,kBAAoBqE,EAAI1tO,MAAMmzO,GAC/Cr1L,EAAIu1L,MAAM94T,KAAKmzT,GAEf5vL,EAAIw1L,OAAO/4T,KAAKmzT,GAGX5vL,IACN,CACDw1L,OAAQ,GACRD,MAAO,KAETrC,EAAS,GAAGz7S,WAAWywH,MAAQotL,EAAaC,MAAMl+S,KAAK,KAEpB,IAA/Bi+S,EAAaE,OAAO7zT,OACtBwH,EAAKiS,gBAAgB,SAErBjS,EAAKgS,aAAa,QAASm6S,EAAaE,OAAOn+S,KAAK,KAExD,CAEA,MAAMo+S,EAAevC,EAASv5S,KAAIyoE,GAAK6rO,GAAO7rO,KAAI/qE,KAAK,MACvDlO,EAAKgS,aAAa6tS,GAAe,IACjC7/S,EAAK2nF,UAAY2kO,CACnB,GAGF,SAASC,GAAqBC,GAC5BA,GACF,CAEA,SAASC,GAAQC,EAAWj8T,GAC1B,MAAMk8T,EAAuC,oBAAbl8T,EAA0BA,EAAW+6T,GAErE,GAAyB,IAArBkB,EAAUl0T,OACZm0T,QACK,CACL,IAAIrkG,EAAQikG,GAvgDgB,UAygDxBrxO,GAAOwnO,iBACTp6F,EAAQo1F,GAAOtrJ,uBAAyBm6J,IAG1CjkG,GAAM,KACJ,MAAMskG,GA3HoB,IAA1B1xO,GAAOmnO,eACFwJ,GAASnsT,QAGFmsT,GAAS3wO,GAAOmnO,iBACdwJ,GAASnsT,QAuHjB69S,EAAOgO,GAAW,UACxBmB,EAAUl8S,IAAIo8S,GACdrP,IACAoP,GAAkB,GAEtB,CACF,CACA,IAAI5lO,IAAW,EACf,SAAS8lO,KACP9lO,IAAW,CACb,CACA,SAAS+lO,KACP/lO,IAAW,CACb,CACA,IAAIgmO,GAAO,KACX,SAASnjI,GAAQn2L,GACf,IAAKmqT,GACH,OAGF,IAAK1iO,GAAOunO,iBACV,OAGF,MAAM,aACJuK,EAAexB,GAAM,aACrByB,EAAezB,GAAM,uBACrB0B,EAAyB1B,GAAM,qBAC/B2B,EAAuBxP,IACrBlqT,EACJs5T,GAAO,IAAInP,IAAkBr5K,IAC3B,GAAIx9C,GAAU,OACd,MAAMqmO,EAAgB3F,KACtB13L,GAAQwU,GAASzxI,SAAQu6T,IAavB,GAZ4B,cAAxBA,EAAe77T,MAAwB67T,EAAeC,WAAW90T,OAAS,IAAMizT,GAAU4B,EAAeC,WAAW,MAClHpyO,GAAOsnO,sBACT0K,EAAuBG,EAAe3uT,QAGxCsuT,EAAaK,EAAe3uT,SAGF,eAAxB2uT,EAAe77T,MAAyB67T,EAAe3uT,OAAOgF,YAAcw3E,GAAOsnO,sBACrF0K,EAAuBG,EAAe3uT,OAAOgF,YAGnB,eAAxB2pT,EAAe77T,MAAyBi6T,GAAU4B,EAAe3uT,UAAY8iT,GAAgCvuT,QAAQo6T,EAAe1rO,eACtI,GAAqC,UAAjC0rO,EAAe1rO,eAtL3B,SAA0B3hF,GACxB,MAAM4D,EAAS5D,EAAK+Q,aAAe/Q,EAAK+Q,aAAagvS,IAAe,KAC9DmF,EAAOllT,EAAK+Q,aAAe/Q,EAAK+Q,aAAaivS,IAAa,KAChE,OAAOp8S,GAAUshT,CACnB,CAkLwDqI,CAAiBF,EAAe3uT,QAAS,CACvF,MAAM,OACJkF,EAAM,SACNmqJ,GACE+5J,GAAiBxE,GAAW+J,EAAe3uT,SAC/C2uT,EAAe3uT,OAAOsT,aAAa+tS,GAAan8S,GAAUwpT,GACtDr/J,GAAUs/J,EAAe3uT,OAAOsT,aAAaguS,GAAWjyJ,EAC9D,MAvLiB/tJ,EAuLUqtT,EAAe3uT,SAtLjCsB,EAAKqhJ,WAAarhJ,EAAKqhJ,UAAUhjD,UAAYr+F,EAAKqhJ,UAAUhjD,SAASnjB,GAAOknO,mBAuLnF6K,EAAaI,EAAe3uT,QAxLtC,IAAyBsB,CA0LnB,GACA,IAEC89S,IACLiP,GAAKnjI,QAAQujI,EAAsB,CACjCK,WAAW,EACXl/S,YAAY,EACZm/S,eAAe,EACfC,SAAS,GAEb,CA2BA,SAASC,GAAa3tT,GACpB,MAAM4tT,EAAiB5tT,EAAK+Q,aAAa,eACnC88S,EAAmB7tT,EAAK+Q,aAAa,aACrCiwI,OAA+BvsJ,IAAnBuL,EAAKghJ,UAA0BhhJ,EAAKghJ,UAAUtvJ,OAAS,GACzE,IAAIguI,EAAMooL,GAAiBxE,GAAWtjT,IAWtC,OATK0/H,EAAI97H,SACP87H,EAAI97H,OAAS6jT,MAGXmG,GAAkBC,IACpBnuL,EAAI97H,OAASgqT,EACbluL,EAAIquB,SAAW8/J,GAGbnuL,EAAIquB,UAAYruB,EAAI97H,SAIpB87H,EAAI97H,QAAUo9I,EAAUxoJ,OAAS,IACnCknI,EAAIquB,SAv+BR,SAAoBnqJ,EAAQkqT,GAC1B,OAAQ3H,GAAYviT,IAAW,CAAC,GAAGkqT,EACrC,CAq+BmBC,CAAWruL,EAAI97H,OAAQ5D,EAAKghJ,YAAcsmK,GAAU5nL,EAAI97H,OAAQ2hT,GAAMvlT,EAAKghJ,cAGvFthB,EAAIquB,UAAY7yE,GAAO8rO,cAAgBhnT,EAAKuK,YAAcvK,EAAKuK,WAAWc,WAAanB,KAAKtD,YAC/F84H,EAAIquB,SAAW/tJ,EAAKuK,WAAWzT,OARxB4oI,CAYX,CA8CA,SAASsuL,GAAUhuT,GACjB,IAAI4zI,EAASxvI,UAAU5L,OAAS,QAAsB/D,IAAjB2P,UAAU,GAAmBA,UAAU,GAAK,CAC/E6pT,aAAa,GAEf,MAAM,SACJlgK,EAAQ,OACRnqJ,EACA0vR,KAAM46B,GACJP,GAAY3tT,GACVmuT,EArDR,SAA2BnuT,GACzB,MAAMmuT,EAAkBp+L,GAAQ/vH,EAAKsO,YAAYjd,QAAO,CAACwlI,EAAK5zH,KAC3C,UAAb4zH,EAAIn9H,MAAiC,UAAbm9H,EAAIn9H,OAC9Bm9H,EAAI5zH,EAAKvJ,MAAQuJ,EAAKxR,OAGjBolI,IACN,CAAC,GACE9H,EAAQ/uH,EAAK+Q,aAAa,SAC1Bo5S,EAAUnqT,EAAK+Q,aAAa,oBAWlC,OATImqE,GAAOqnO,WACLxzL,EACFo/L,EAAgB,mBAAqB,GAAGtsN,OAAO3mB,GAAOknO,iBAAkB,WAAWvgN,OAAOsoN,GAAW9G,OAErG8K,EAAgB,eAAiB,OACjCA,EAA2B,UAAI,UAI5BA,CACT,CAgC0BC,CAAiBpuT,GACnCquT,EAAazF,GAAW,sBAAuB,CAAC,EAAG5oT,GACzD,IAAIsuT,EAAc16K,EAAOq6K,YA1G3B,SAAsBjuT,GACpB,MAAM8qF,EAAQ9qF,EAAK+Q,aAAa,SAChC,IAAI2uH,EAAM,GAgBV,OAdI50C,IACF40C,EAAM50C,EAAM15F,MAAM,KAAKC,QAAO,CAACwlI,EAAK/rC,KAClC,MAAM6wD,EAAS7wD,EAAM15F,MAAM,KACrB48D,EAAO2tF,EAAO,GACdlqJ,EAAQkqJ,EAAOxoJ,MAAM,GAM3B,OAJI66D,GAAQv8D,EAAM+G,OAAS,IACzBq+H,EAAI7oE,GAAQv8D,EAAMyc,KAAK,KAAKxc,QAGvBmlI,CAAG,GACT,CAAC,IAGC6I,CACT,CAuFyCuuL,CAAYjuT,GAAQ,GAC3D,MAAO,CACL+tJ,WACAh/B,MAAO/uH,EAAK+Q,aAAa,SACzBo5S,QAASnqT,EAAK+Q,aAAa,oBAC3BnN,SACAq/I,UAAWggK,GACX/+K,KAAM,CACJ6pB,SAAU,KACVnqJ,OAAQ,KACR0vR,KAAM,IAER42B,OAAQ,KACRnqO,QAAQ,EACR0lO,MAAO,CACLn+B,QAAS4mC,EACTvyK,OAAQ2yK,EACRhgT,WAAY6/S,MAEXE,EAEP,CAEA,MACE1yK,OAAQ4yK,IACNvgT,GAEJ,SAASwgT,GAAiBxuT,GACxB,MAAMyuT,EAAqC,SAA1BvzO,GAAOmnO,eAA4B2L,GAAUhuT,EAAM,CAClEiuT,aAAa,IACVD,GAAUhuT,GAEf,OAAKyuT,EAAShJ,MAAMn+B,QAAQr0R,QAAQquT,IAC3B0H,GAAa,qBAAsBhpT,EAAMyuT,GAEzCzF,GAAa,iCAAkChpT,EAAMyuT,EAEhE,CAEA,IAAIC,GAAgB,IAAI3zT,IASxB,SAAS4zT,GAAO5+S,GACd,IAAItf,EAAW2T,UAAU5L,OAAS,QAAsB/D,IAAjB2P,UAAU,GAAmBA,UAAU,GAAK,KACnF,IAAK05S,GAAQ,OAAOt5M,QAAQG,UAC5B,MAAMiqN,EAAgBjR,GAAS5oT,gBAAgBssJ,UAEzCwtK,EAASC,GAAUF,EAAc1zT,IAAI,GAAG2mG,OAAOo+M,GAA6B,KAAKp+M,OAAOitN,IAExFC,EAAYD,GAAUF,EAAclkT,OAAO,GAAGm3F,OAAOo+M,GAA6B,KAAKp+M,OAAOitN,IAE9FnN,EAAWzmO,GAAO8rO,aAAe0H,GAAgBrO,GAAS7vS,KAAIw+S,GAAQ,MAAMntN,OAAOmtN,KAAOntN,OAAOvoG,OAAO0M,KAAKuoT,KAE9G5M,EAASp9N,SAAS,OACrBo9N,EAASruT,KAAK,MAGhB,MAAM27T,EAAmB,CAAC,IAAIptN,OAAOy/M,GAAuB,UAAUz/M,OAAOg+M,GAAe,OAAOh+M,OAAO8/M,EAASnxS,KAAI0+S,GAAQ,IAAIrtN,OAAOqtN,EAAM,UAAUrtN,OAAOg+M,GAAe,SAAQ3xS,KAAK,MAE7L,GAAgC,IAA5B+gT,EAAiBz2T,OACnB,OAAOgsG,QAAQG,UAGjB,IAAIioE,EAAa,GAEjB,IACEA,EAAa78C,GAAQhgH,EAAKyxG,iBAAiBytM,GAC7C,CAAE,MAAO7O,GAAO,CAGhB,KAAIxzI,EAAWp0K,OAAS,GAItB,OAAOgsG,QAAQG,UAHfkqN,EAAO,WACPE,EAAU,YAKZ,MAAMxR,EAAOgO,GAAW,UAClBmB,EAAY9/I,EAAWv7K,QAAO,CAACwlI,EAAK72H,KACxC,IACE,MAAM8rT,EAAW0C,GAAiBxuT,GAE9B8rT,GACFj1L,EAAIvjI,KAAKw4T,EAEb,CAAE,MAAO1L,GACFD,IACe,gBAAdC,EAAK1mT,MACP6L,QAAQnD,MAAMg+S,EAGpB,CAEA,OAAOvpL,CAAG,GACT,IACH,OAAO,IAAIryB,SAAQ,CAACG,EAAS4/D,KAC3B//D,QAAQq4C,IAAI6vK,GAAW9nN,MAAKuqN,IAC1B1C,GAAQ0C,GAAmB,KACzBN,EAAO,UACPA,EAAO,YACPE,EAAU,WACc,oBAAbt+T,GAAyBA,IACpC8sT,IACA54M,GAAS,GACT,IACDE,OAAMu7M,IACP7C,IACAh5I,EAAO67I,EAAK,GACZ,GAEN,CAEA,SAASgP,GAAOpvT,GACd,IAAIvP,EAAW2T,UAAU5L,OAAS,QAAsB/D,IAAjB2P,UAAU,GAAmBA,UAAU,GAAK,KACnFoqT,GAAiBxuT,GAAM4kG,MAAKknN,IACtBA,GACFW,GAAQ,CAACX,GAAWr7T,EACtB,GAEJ,CArFA4vT,GAAS7vS,KAAI62S,IACXqH,GAAcxzT,IAAI,MAAM2mG,OAAOwlN,GAAQ,IAEzC/tT,OAAO0M,KAAKy6S,GAAgBxnO,KAAIzoE,IAAIk+S,GAAcxzT,IAAIhC,KAAKw1T,KAC3Dp1T,OAAO0M,KAAKy6S,GAAgB12M,KAAIv5F,IAAIk+S,GAAcxzT,IAAIhC,KAAKw1T,KAC3Dp1T,OAAO0M,KAAKy6S,GAAgB7nT,KAAI4X,IAAIk+S,GAAcxzT,IAAIhC,KAAKw1T,KAC3DA,GAAgB,IAAIA,IAmGpB,MAAMhqO,GAAS,SAAU2qO,GACvB,IAAI37T,EAAS0Q,UAAU5L,OAAS,QAAsB/D,IAAjB2P,UAAU,GAAmBA,UAAU,GAAK,CAAC,EAClF,MAAM,UACJ6+I,EAAYggK,GAAoB,OAChCljO,GAAS,EAAK,KACdmkD,EAAO,KAAI,OACXgmL,EAAS,KAAI,MACbn7L,EAAQ,KAAI,QACZo7L,EAAU,KAAI,QACd7iC,EAAU,GAAE,WACZh5Q,EAAa,CAAC,EAAC,OACfqtI,EAAS,CAAC,GACRjoJ,EACJ,IAAK27T,EAAgB,OACrB,MAAM,OACJzrT,EAAM,SACNmqJ,EAAQ,KACRm3J,GACEmK,EACJ,OAAOxF,GAAY,CACjBr4T,KAAM,UACH69T,IACF,KACDtG,GAAU,2BAA4B,CACpCsG,iBACA37T,WAGEwnF,GAAOqnO,WACLxzL,EACFzgH,EAAW,mBAAqB,GAAGuzF,OAAO3mB,GAAOknO,iBAAkB,WAAWvgN,OAAOsoN,GAAW9G,OAEhG/0S,EAAW,eAAiB,OAC5BA,EAAsB,UAAI,UAIvB27S,GAAsB,CAC3BrE,MAAO,CACL1qJ,KAAM6vJ,GAAY7F,GAClBhhL,KAAMA,EAAO6mL,GAAY7mL,EAAKghL,MAAQ,CACpCr1H,OAAO,EACP91F,MAAO,KACPC,OAAQ,KACRkrN,KAAM,CAAC,IAGXthT,SACAmqJ,WACA9K,UAAW,IAAKggK,MACXhgK,GAELljE,SACAgvC,QACAm7L,SACAC,UACA1E,MAAO,CACLn3S,aACAqtI,SACA2rI,eAIR,EACA,IAAIgoC,GAAkB,CACpB9K,MAAAA,GACE,MAAO,CACLU,MArFgBjsT,EAqFGyrF,GApFhB,SAAU6qO,GACf,IAAI77T,EAAS0Q,UAAU5L,OAAS,QAAsB/D,IAAjB2P,UAAU,GAAmBA,UAAU,GAAK,CAAC,EAClF,MAAMirT,GAAkBE,GAAuB,CAAC,GAAGrK,KAAOqK,EAAsBtG,GAAmBsG,GAAuB,CAAC,GAC3H,IAAI,KACFrrL,GACExwI,EAMJ,OAJIwwI,IACFA,GAAQA,GAAQ,CAAC,GAAGghL,KAAOhhL,EAAO+kL,GAAmB/kL,GAAQ,CAAC,IAGzDjrI,EAAKo2T,EAAgB,IAAK37T,EAC/BwwI,QAEJ,IAfF,IAAsBjrI,CAuFpB,EAEA6hJ,MAAKA,KACI,CACL00K,0BAA0B3G,IACxBA,EAAYmE,aAAe2B,GAC3B9F,EAAYoE,aAAemC,GACpBvG,KAMb4G,QAAAA,CAASC,GACPA,EAAanG,MAAQ,SAAU71T,GAC7B,MAAM,KACJsM,EAAO29S,GAAQ,SACfltT,EAAWA,QACTiD,EACJ,OAAOi7T,GAAO3uT,EAAMvP,EACtB,EAEAi/T,EAAaC,+BAAiC,SAAU3vT,EAAMyuT,GAC5D,MAAM,SACJ1gK,EAAQ,MACRh/B,EAAK,QACLo7L,EAAO,OACPvmT,EAAM,UACNq/I,EAAS,OACTljE,EAAM,KACNmkD,EAAI,OACJgmL,EAAM,MACNzE,GACEgJ,EACJ,OAAO,IAAIjqN,SAAQ,CAACG,EAAS4/D,KAC3B//D,QAAQq4C,IAAI,CAACquK,GAASn9J,EAAUnqJ,GAASsgI,EAAK6pB,SAAWm9J,GAAShnL,EAAK6pB,SAAU7pB,EAAKtgI,QAAU4gG,QAAQG,QAAQ,CAC9GkrF,OAAO,EACP91F,MAAO,IACPC,OAAQ,IACRkrN,KAAM,CAAC,MACJtgN,MAAK9nG,IACR,IAAKo+J,EAAMh3B,GAAQpnI,EACnB6nG,EAAQ,CAAC3kG,EAAMiqT,GAAsB,CACnCrE,MAAO,CACL1qJ,OACAh3B,QAEFtgI,SACAmqJ,WACA9K,YACAljE,SACAmqO,SACAn7L,QACAo7L,UACA1E,QACA2E,WAAW,KACT,IACHvlN,MAAM0/D,EAAO,GAEpB,EAEAmrJ,EAAaE,qBAAuB,SAAUl3L,GAC5C,IAAI,SACFxxC,EAAQ,WACR54E,EAAU,KACV4sJ,EAAI,UACJjY,EAAS,OACTtH,GACEjjB,EACJ,MAAMmyL,EAAcrH,GAAW7nK,GAM/B,IAAIk0K,EAYJ,OAhBIhF,EAAYryT,OAAS,IACvB8V,EAAkB,MAAIu8S,GAKpBnH,GAAsBzgK,KACxB4sK,EAAY7G,GAAa,oCAAqC,CAC5D9tJ,OACAjY,YACA6sK,eAAgB50J,EAAKnhE,MACrBg2N,UAAW70J,EAAKnhE,SAIpB7S,EAAS5zF,KAAKu8T,GAAa30J,EAAKgqJ,MACzB,CACLh+N,WACA54E,aAEJ,CACF,GAIE0hT,GAAS,CACXxL,OAAMA,KACG,CACLyL,KAAAA,CAAMC,GACJ,IAAIx8T,EAAS0Q,UAAU5L,OAAS,QAAsB/D,IAAjB2P,UAAU,GAAmBA,UAAU,GAAK,CAAC,EAClF,MAAM,QACJkjR,EAAU,IACR5zR,EACJ,OAAOm2T,GAAY,CACjBr4T,KAAM,UACL,KACDu3T,GAAU,2BAA4B,CACpCmH,YACAx8T,WAEF,IAAIwzF,EAAW,GAMf,OALAgpO,GAAU36L,IACRniI,MAAMC,QAAQkiI,GAAQA,EAAK/kH,KAAIyoE,IAC7BiO,EAAWA,EAAS2a,OAAO5oB,EAAE8wO,SAAS,IACnC7iO,EAAWA,EAAS2a,OAAO0zB,EAAKw0L,SAAS,IAEzC,CAAC,CACNtlO,IAAK,OACLn2E,WAAY,CACVywH,MAAO,CAAC,GAAGl9B,OAAO3mB,GAAOinO,UAAW,cAAe76B,GAASp5Q,KAAK,MAEnEg5E,YACA,GAEN,KAOFipO,GAAgB,CAClB3L,OAAMA,KACG,CACLgB,OAAAA,CAAQ3kK,GACN,IAAIntJ,EAAS0Q,UAAU5L,OAAS,QAAsB/D,IAAjB2P,UAAU,GAAmBA,UAAU,GAAK,CAAC,EAClF,MAAM,MACJ2qH,EAAQ,KAAI,QACZu4J,EAAU,GAAE,WACZh5Q,EAAa,CAAC,EAAC,OACfqtI,EAAS,CAAC,GACRjoJ,EACJ,OAAOm2T,GAAY,CACjBr4T,KAAM,UACNqvJ,YACC,KACDkoK,GAAU,2BAA4B,CACpCloK,UACAntJ,WA/zBZ,SAAmCA,GACjC,MAAM,QACJmtJ,EAAO,MACP9xB,EAAK,MACL02L,GACE/xT,EACE4a,EAAa,IAAKm3S,EAAMn3S,cACxBygH,EAAQ,CACV,MAASA,GACP,CAAC,EACL,MAAS02L,EAAMn+B,QAAQp5Q,KAAK,MAExB28S,EAAcrH,GAAWiC,EAAM9pK,QAEjCkvK,EAAYryT,OAAS,IACvB8V,EAAkB,MAAIu8S,GAGxB,MAAMnrL,EAAM,GAiBZ,OAhBAA,EAAIpsI,KAAK,CACPmxF,IAAK,OACLn2E,aACA44E,SAAU,CAAC25D,KAGT9xB,GACF2Q,EAAIpsI,KAAK,CACPmxF,IAAK,OACLn2E,WAAY,CACVywH,MAAO,WAET73C,SAAU,CAAC6nC,KAIR2Q,CACT,CA6xBiB0wL,CAA0B,CAC/BvvK,QAASA,EAAQrnJ,WACjBu1H,QACA02L,MAAO,CACLn3S,aACAqtI,SACA2rI,QAAS,CAAC,GAAGzlL,OAAO3mB,GAAOinO,UAAW,sBAAuB76B,QAIrE,KAOF+oC,GAAa,CACf7L,OAAMA,KACG,CACLvxS,IAAAA,CAAK4tI,GACH,IAAIntJ,EAAS0Q,UAAU5L,OAAS,QAAsB/D,IAAjB2P,UAAU,GAAmBA,UAAU,GAAK,CAAC,EAClF,MAAM,UACJ6+I,EAAYggK,GAAoB,MAChCl0L,EAAQ,KAAI,QACZu4J,EAAU,GAAE,WACZh5Q,EAAa,CAAC,EAAC,OACfqtI,EAAS,CAAC,GACRjoJ,EACJ,OAAOm2T,GAAY,CACjBr4T,KAAM,OACNqvJ,YACC,KACDkoK,GAAU,2BAA4B,CACpCloK,UACAntJ,WAEKg3T,GAAuB,CAC5B7pK,UACAoC,UAAW,IAAKggK,MACXhgK,GAELl0B,QACA02L,MAAO,CACLn3S,aACAqtI,SACA2rI,QAAS,CAAC,GAAGzlL,OAAO3mB,GAAOinO,UAAW,mBAAoB76B,QAIlE,IAKJmoC,QAAAA,CAASC,GACPA,EAAaY,mBAAqB,SAAUtwT,EAAMyuT,GAChD,MAAM,MACJ1/L,EAAK,UACLk0B,EAAS,MACTwiK,GACEgJ,EACJ,IAAI10N,EAAQ,KACRC,EAAS,KAEb,GAAI+jN,GAAO,CACT,MAAMwS,EAAmB91O,SAAS+1O,iBAAiBxwT,GAAM6zK,SAAU,IAC7DjjB,EAAqB5wJ,EAAK2oH,wBAChC5uB,EAAQ62D,EAAmB72D,MAAQw2N,EACnCv2N,EAAS42D,EAAmB52D,OAASu2N,CACvC,CAMA,OAJIr1O,GAAOqnO,WAAaxzL,IACtB02L,EAAMn3S,WAAW,eAAiB,QAG7Bk2F,QAAQG,QAAQ,CAAC3kG,EAAM0qT,GAAuB,CACnD7pK,QAAS7gJ,EAAK2nF,UACdoS,QACAC,SACAipD,YACAl0B,QACA02L,QACA2E,WAAW,KAEf,CACF,GAIF,MAAMqG,GAAwB,IAAI34O,OAAO,IAAU,MAC7C44O,GAA0B,CAAC,QAAS,SACpCC,GAAgC,CAClCC,YAAa,CACXnP,OAAQ,MACR,IAAK,OAj0ET,sBAAuB,CACrB,IAAK,MACL,IAAK,OAEP,qBAAsB,CACpB,IAAK,MACL,IAAK,MACLA,OAAQ,MACR,IAAK,MACL,IAAK,OAEP,wBAAyB,CACvB,IAAK,MACLA,OAAQ,OAEV,yBAA0B,CACxB,IAAK,OAEP,uBAAwB,CACtB,IAAK,OACL,IAAK,OACLA,OAAQ,OACR,IAAK,OACL,IAAK,QAEP,+BAAgC,CAC9B,IAAK,SA7CP,sBAAuB,CACrB,IAAK,MACL,IAAK,OAEP,qBAAsB,CACpB,IAAK,MACL,IAAK,MACLA,OAAQ,MACR,IAAK,OAEP,wBAAyB,CACvB,IAAK,MACLA,OAAQ,OAEV,yBAA0B,CACxB,IAAK,OA2IP,mBAAoB,CAClB,IAAK,MACLA,OAAQ,OAEV,2BAA4B,CAC1B,IAAK,OACLA,OAAQ,SA2rENoP,GAA+Bv3T,OAAO0M,KAAK2qT,IAA+Bt/T,QAAO,CAACwlI,EAAK3jI,KAC3F2jI,EAAI3jI,EAAI/B,eAAiBw/T,GAA8Bz9T,GAChD2jI,IACN,CAAC,GACEi6L,GAA8Bx3T,OAAO0M,KAAK6qT,IAA8Bx/T,QAAO,CAACwlI,EAAKi9C,KACzF,MAAMi9I,EAAUF,GAA6B/8I,GAE7C,OADAj9C,EAAIi9C,GAAci9I,EAAQ,MAAQ,IAAIz3T,OAAOg7Q,QAAQy8C,IAAU,GAAG,GAC3Dl6L,CAAG,GACT,CAAC,GAkBJ,SAASm6L,GAAmBhxT,EAAMD,GAChC,MAAMkxT,EAAmB,GAAGpvN,OAprES,kCAorE8BA,OAAO9hG,EAASL,QAAQ,IAAK,MAChG,OAAO,IAAI8kG,SAAQ,CAACG,EAAS4/D,KAC3B,GAA4C,OAAxCvkK,EAAK+Q,aAAakgT,GAEpB,OAAOtsN,IAGT,MACMusN,EADWnhM,GAAQ/vH,EAAKknF,UACiBphF,QAAOsE,GAAKA,EAAE2G,aAAa+uS,MAA4B//S,IAAU,GAC1G47I,EAAS+hK,GAAO8S,iBAAiBxwT,EAAMD,GACvC+zK,EAAan4B,EAAOyI,iBAAiB,eACrC+sK,EAAkBr9I,EAAW/6F,MAAMwoO,IACnC73N,EAAaiyD,EAAOyI,iBAAiB,eACrCvD,EAAUlF,EAAOyI,iBAAiB,WAExC,GAAI8sK,IAAkCC,EAKpC,OADAnxT,EAAKwM,YAAY0kT,GACVvsN,IACF,GAAIwsN,GAA+B,SAAZtwK,GAAkC,KAAZA,EAAgB,CAClE,MAAMA,EAAUlF,EAAOyI,iBAAiB,WACxC,IAAIxgJ,EA/BV,SAAmBkwK,EAAYpqF,GAC7B,MAAM0nO,EAAsBt9I,EAAWp0K,QAAQ,eAAgB,IAAIvO,cAC7DkgU,EAAoB52O,SAASiP,GAC7B4nO,EAAsBhvO,MAAM+uO,GAAqB,SAAWA,EAClE,OAAQR,GAA6BO,IAAwB,CAAC,GAAGE,IAAwBR,GAA4BM,EACvH,CA0BmBG,CAAUz9I,EAAYpqF,GACnC,MACEj4F,MAAO+/T,EAAQ,YACfC,GA5CR,SAA6B5wK,GAC3B,MAAM6wK,EAAU7wK,EAAQnhJ,QAAQ+wT,GAAuB,IACjDkB,EAhsDR,SAAqB51O,EAAQ/oF,GAC3B,MAAMuI,EAAOwgF,EAAOvjF,OACpB,IACIy3I,EADAojJ,EAAQt3M,EAAO1xE,WAAWrX,GAG9B,OAAIqgS,GAAS,OAAUA,GAAS,OAAU93R,EAAOvI,EAAQ,IACvDi9I,EAASl0D,EAAO1xE,WAAWrX,EAAQ,GAE/Bi9I,GAAU,OAAUA,GAAU,OACN,MAAlBojJ,EAAQ,OAAkBpjJ,EAAS,MAAS,MAIjDojJ,CACT,CAkrDoBu+B,CAAYF,EAAS,GACjCG,EAAeF,GAAajB,GAAwB,IAAMiB,GAAajB,GAAwB,GAC/FoB,EAA+B,IAAnBJ,EAAQl5T,QAAek5T,EAAQ,KAAOA,EAAQ,GAChE,MAAO,CACLjgU,MAAmB8zT,GAAZuM,EAAkBJ,EAAQ,GAAYA,GAC7CD,YAAaI,GAAgBC,EAEjC,CAoCUC,CAAoBlxK,GAClBmxK,EAAOb,EAAgB,GAAGzoD,WAAW,eAC3C,IAAI36G,EAAWu5J,GAAU1jT,EAAQ4tT,GAC7BS,EAAiBlkK,EAErB,GAAIikK,EAAM,CACR,MAAME,EA3iDd,SAAsBh/F,GACpB,MAAMi/F,EAAa9L,GAAcnzF,GAC3Bk/F,EAAa9K,GAAU,MAAOp0F,GACpC,OAAOi/F,IAAeC,EAAa,CACjCxuT,OAAQ,MACRmqJ,SAAUqkK,GACR,OAAS,CACXxuT,OAAQ,KACRmqJ,SAAU,KAEd,CAiiD0BskK,CAAab,GAE3BU,EAAUnkK,UAAYmkK,EAAUtuT,SAClCmqJ,EAAWmkK,EAAUnkK,SACrBnqJ,EAASsuT,EAAUtuT,OAEvB,CAIA,IAAImqJ,GAAa0jK,GAAiBP,GAAiCA,EAA8BngT,aAAagvS,MAAiBn8S,GAAUstT,EAA8BngT,aAAaivS,MAAeiS,EAqCjMttN,QArCkN,CAClN3kG,EAAKgS,aAAai/S,EAAkBgB,GAEhCf,GAEFlxT,EAAKwM,YAAY0kT,GAGnB,MAAMxlO,EAhkBL,CACLqiE,SAAU,KACVh/B,MAAO,KACPo7L,QAAS,KACTvmT,OAAQ,KACRq/I,UAAWggK,GACXljO,QAAQ,EACRmkD,KAAM,CACJ6pB,SAAU,KACVnqJ,OAAQ,KACR0vR,KAAM,IAER42B,OAAQ,KACRzE,MAAO,CACLn+B,QAAS,GACT3rI,OAAQ,CAAC,EACTrtI,WAAY,CAAC,KAijBL,MACJm3S,GACE/5N,EACJ+5N,EAAMn3S,WAAWwxS,IAA0B//S,EAC3CmrT,GAASn9J,EAAUnqJ,GAAQghG,MAAKs2D,IAC9B,MAAM6uJ,EAAWE,GAAsB,IAAKv+N,EAC1Ck6N,MAAO,CACL1qJ,OACAh3B,KAvjDL,CACLtgI,OAAQ,KACRmqJ,SAAU,KACVulI,KAAM,KAsjDE1vR,SACAmqJ,SAAUkkK,EACVxM,QACA2E,WAAW,IAEPxkT,EAAU+3S,GAAS76S,gBAAgB,6BAA8B,OAEtD,aAAb/C,EACFC,EAAKgQ,aAAapK,EAAS5F,EAAKuK,YAEhCvK,EAAKe,YAAY6E,GAGnBA,EAAQmmT,UAAYhC,EAASv5S,KAAIyoE,GAAK6rO,GAAO7rO,KAAI/qE,KAAK,MACtDlO,EAAKiS,gBAAgBg/S,GACrBtsN,GAAS,IACRE,MAAM0/D,EACX,CAGF,MACE5/D,GACF,GAEJ,CAEA,SAASjlG,GAAQM,GACf,OAAOwkG,QAAQq4C,IAAI,CAACm0K,GAAmBhxT,EAAM,YAAagxT,GAAmBhxT,EAAM,YACrF,CAEA,SAASsyT,GAAYtyT,GACnB,OAAOA,EAAK0D,aAAek4E,SAAS8oE,QAAUw7J,GAAoCjtT,QAAQ+M,EAAKyD,QAAQ/K,iBAAmBsH,EAAK+Q,aAAa+uS,OAA6B9/S,EAAK0D,YAA0C,QAA5B1D,EAAK0D,WAAWD,QAC9M,CAEA,SAAS++S,GAAqBzyS,GAC5B,GAAK+tS,GACL,OAAO,IAAIt5M,SAAQ,CAACG,EAAS4/D,KAC3B,MAAMguJ,EAAaxiM,GAAQhgH,EAAKyxG,iBAAiB,MAAM17G,OAAOwsT,IAAa9hT,IAAI9Q,IACzEm6E,EAAM0xO,GAAW,wBACvBsB,KACAroN,QAAQq4C,IAAI01K,GAAY3tN,MAAK,KAC3B/qB,IACAizO,KACAnoN,GAAS,IACRE,OAAM,KACPhrB,IACAizO,KACAvoJ,GAAQ,GACR,GAEN,CAEA,IAAIiuJ,GAAiB,CACnB13K,MAAKA,KACI,CACL00K,0BAA0B3G,IACxBA,EAAYqE,uBAAyB1K,GAC9BqG,KAMb4G,QAAAA,CAAS/G,GACPA,EAAU+J,mBAAqB,SAAU/+T,GACvC,MAAM,KACJsM,EAAO29S,IACLjqT,EAEAwnF,GAAOsnO,sBACTA,GAAqBxiT,EAEzB,CACF,GAIF,IAAI0yT,IAAa,EACjB,IAAIC,GAAqB,CACvBnO,OAAMA,KACG,CACLtlT,IAAK,CACH0zT,OAAAA,GACE/F,KACA6F,IAAa,CACf,KAMN53K,MAAKA,KACI,CACL+3K,SAAAA,GACEjpI,GAAQg/H,GAAW,4BAA6B,CAAC,GACnD,EAEAgB,MAAAA,GA3vBCmD,IACLA,GAAKhjI,YA4vBD,EAEAy/H,KAAAA,CAAM91T,GACJ,MAAM,qBACJy5T,GACEz5T,EAEAg/T,GACF5F,KAEAljI,GAAQg/H,GAAW,4BAA6B,CAC9CuE,yBAGN,KAON,MAAM2F,GAAuBC,GASpBA,EAAgB5hU,cAAcC,MAAM,KAAKC,QAAO,CAACwlI,EAAKx9H,KAC3D,MAAMk7H,EAAQl7H,EAAElI,cAAcC,MAAM,KAC9BiiS,EAAQ9+J,EAAM,GACpB,IAAI++J,EAAO/+J,EAAMphI,MAAM,GAAG+a,KAAK,KAE/B,GAAImlR,GAAkB,MAATC,EAEX,OADAz8J,EAAIssL,OAAQ,EACLtsL,EAGT,GAAIw8J,GAAkB,MAATC,EAEX,OADAz8J,EAAIusL,OAAQ,EACLvsL,EAKT,GAFAy8J,EAAOn8J,WAAWm8J,GAEdhxM,MAAMgxM,GACR,OAAOz8J,EAGT,OAAQw8J,GACN,IAAK,OACHx8J,EAAIt7H,KAAOs7H,EAAIt7H,KAAO+3R,EACtB,MAEF,IAAK,SACHz8J,EAAIt7H,KAAOs7H,EAAIt7H,KAAO+3R,EACtB,MAEF,IAAK,OACHz8J,EAAIl0B,EAAIk0B,EAAIl0B,EAAI2wL,EAChB,MAEF,IAAK,QACHz8J,EAAIl0B,EAAIk0B,EAAIl0B,EAAI2wL,EAChB,MAEF,IAAK,KACHz8J,EAAI7sB,EAAI6sB,EAAI7sB,EAAIspL,EAChB,MAEF,IAAK,OACHz8J,EAAI7sB,EAAI6sB,EAAI7sB,EAAIspL,EAChB,MAEF,IAAK,SACHz8J,EAAIqsL,OAASrsL,EAAIqsL,OAAS5vB,EAI9B,OAAOz8J,CAAG,GA3DI,CACdt7H,KAAM,GACNonG,EAAG,EACHqH,EAAG,EACHm5M,OAAO,EACPC,OAAO,EACPF,OAAQ,IAwDZ,IAAI8P,GAAkB,CACpBxO,OAAMA,KACG,CACLpvT,MAAO,CACL6tJ,UAAW8vK,GACFD,GAAqBC,MAMpCj4K,MAAKA,KACI,CACLm4K,mBAAAA,CAAoBpK,EAAa7oT,GAC/B,MAAM+yT,EAAkB/yT,EAAK+Q,aAAa,qBAM1C,OAJIgiT,IACFlK,EAAY5lK,UAAY6vK,GAAqBC,IAGxClK,CACT,IAKJ4G,QAAAA,CAAS/G,GACPA,EAAUwK,kCAAoC,SAAUp2T,GACtD,IAAI,KACFo+J,EAAI,UACJjY,EAAS,eACT6sK,EAAc,UACdC,GACEjzT,EACJ,MAAMq2T,EAAQ,CACZlwK,UAAW,aAAaphD,OAAOiuN,EAAiB,EAAG,UAE/CsD,EAAiB,aAAavxN,OAAqB,GAAdohD,EAAUtgD,EAAQ,MAAMd,OAAqB,GAAdohD,EAAUj5C,EAAQ,MACtFqpN,EAAa,SAASxxN,OAAOohD,EAAU1nJ,KAAO,IAAM0nJ,EAAUkgK,OAAS,EAAI,GAAI,MAAMthN,OAAOohD,EAAU1nJ,KAAO,IAAM0nJ,EAAUmgK,OAAS,EAAI,GAAI,MAC9IkQ,EAAc,UAAUzxN,OAAOohD,EAAUigK,OAAQ,SACjDqQ,EAAQ,CACZtwK,UAAW,GAAGphD,OAAOuxN,EAAgB,KAAKvxN,OAAOwxN,EAAY,KAAKxxN,OAAOyxN,IAKrEf,EAHO,CACXtvK,UAAW,aAAaphD,OAAOkuN,EAAY,GAAK,EAAG,WAOrD,MAAO,CACLtrO,IAAK,IACLn2E,WAAY,IANZ6kT,GAQAjsO,SAAU,CAAC,CACTzC,IAAK,IACLn2E,WAAY,IATdilT,GAWErsO,SAAU,CAAC,CACTzC,IAAKy2E,EAAKgqJ,KAAKzgO,IACfyC,SAAUg0E,EAAKgqJ,KAAKh+N,SACpB54E,WAAY,IAAK4sJ,EAAKgqJ,KAAK52S,cACtBikT,OAKb,CACF,GAIF,MAAMiB,GAAY,CAChB7wN,EAAG,EACHqH,EAAG,EACHjQ,MAAO,OACPC,OAAQ,QAGV,SAASy5N,GAAU1J,GACjB,IAAIt+D,IAAQrnP,UAAU5L,OAAS,QAAsB/D,IAAjB2P,UAAU,KAAmBA,UAAU,GAM3E,OAJI2lT,EAASz7S,aAAey7S,EAASz7S,WAAWqpJ,MAAQ8zF,KACtDs+D,EAASz7S,WAAWqpJ,KAAO,SAGtBoyJ,CACT,CAUA,IAAI2J,GAAQ,CACV54K,MAAKA,KACI,CACLm4K,mBAAAA,CAAoBpK,EAAa7oT,GAC/B,MAAM2zT,EAAW3zT,EAAK+Q,aAAa,gBAC7BmzH,EAAQyvL,EAAkC7L,GAAiB6L,EAASviU,MAAM,KAAKof,KAAItY,GAAKA,EAAExG,UAv1D/F,CACLkS,OAAQ,KACRmqJ,SAAU,KACVulI,KAAM,IA41DF,OANKpvJ,EAAKtgI,SACRsgI,EAAKtgI,OAAS6jT,MAGhBoB,EAAY3kL,KAAOA,EACnB2kL,EAAYqB,OAASlqT,EAAK+Q,aAAa,mBAChC83S,CACT,IAKJ4G,QAAAA,CAAS/G,GACPA,EAAUkL,qBAAuB,SAAU92T,GACzC,IAAI,SACFoqF,EAAQ,WACR54E,EAAU,KACV4sJ,EAAI,KACJh3B,EACAgmL,OAAQ2J,EAAc,UACtB5wK,GACEnmJ,EACJ,MACEi9F,MAAO+5N,EACP5O,KAAM6O,GACJ74J,GAEFnhE,MAAOi6N,EACP9O,KAAM+O,GACJ/vL,EACEgwL,EAx0EZ,SAAyBp3T,GACvB,IAAI,UACFmmJ,EAAS,eACT6sK,EAAc,UACdC,GACEjzT,EACJ,MAAMq2T,EAAQ,CACZlwK,UAAW,aAAaphD,OAAOiuN,EAAiB,EAAG,UAE/CsD,EAAiB,aAAavxN,OAAqB,GAAdohD,EAAUtgD,EAAQ,MAAMd,OAAqB,GAAdohD,EAAUj5C,EAAQ,MACtFqpN,EAAa,SAASxxN,OAAOohD,EAAU1nJ,KAAO,IAAM0nJ,EAAUkgK,OAAS,EAAI,GAAI,MAAMthN,OAAOohD,EAAU1nJ,KAAO,IAAM0nJ,EAAUmgK,OAAS,EAAI,GAAI,MAC9IkQ,EAAc,UAAUzxN,OAAOohD,EAAUigK,OAAQ,SAOvD,MAAO,CACLiQ,QACAI,MARY,CACZtwK,UAAW,GAAGphD,OAAOuxN,EAAgB,KAAKvxN,OAAOwxN,EAAY,KAAKxxN,OAAOyxN,IAQzE5/L,KANW,CACXuvB,UAAW,aAAaphD,OAAOkuN,EAAY,GAAK,EAAG,WAOvD,CAizEoBoE,CAAgB,CAC5BlxK,YACA6sK,eAAgBkE,EAChBjE,UAAW+D,IAEPM,EAAW,CACf3vO,IAAK,OACLn2E,WAAY,IAAKklT,GACf77J,KAAM,UAGJ08J,EAA8BN,EAAS7sO,SAAW,CACtDA,SAAU6sO,EAAS7sO,SAAS12E,IAAIijT,KAC9B,CAAC,EACCa,EAAiB,CACrB7vO,IAAK,IACLn2E,WAAY,IAAK4lT,EAAMX,OAEvBrsO,SAAU,CAACusO,GAAU,CACnBhvO,IAAKsvO,EAAStvO,IACdn2E,WAAY,IAAKylT,EAASzlT,cACrB4lT,EAAMxgM,SAER2gM,MAGDE,EAAiB,CACrB9vO,IAAK,IACLn2E,WAAY,IAAK4lT,EAAMf,OAEvBjsO,SAAU,CAACotO,IAEPpK,EAAS,QAAQroN,OAAOgyN,GAAkBxQ,MAC1CmR,EAAS,QAAQ3yN,OAAOgyN,GAAkBxQ,MAC1CoR,EAAU,CACdhwO,IAAK,OACLn2E,WAAY,IAAKklT,GACf3iT,GAAIq5S,EACJwK,UAAW,iBACXC,iBAAkB,kBAEpBztO,SAAU,CAACktO,EAAUG,IAEjBK,EAAO,CACXnwO,IAAK,OACLyC,SAAU,CAAC,CACTzC,IAAK,WACLn2E,WAAY,CACVuC,GAAI2jT,GAENttO,UA/FO6iO,EA+FWkK,EA9FL,MAAjBlK,EAAStlO,IACJslO,EAAS7iO,SAET,CAAC6iO,KA4FD0K,IAhGX,IAAiB1K,EA2GX,OATA7iO,EAAS5zF,KAAKshU,EAAM,CAClBnwO,IAAK,OACLn2E,WAAY,CACVqpJ,KAAM,eACN,YAAa,QAAQ91D,OAAO2yN,EAAQ,KACpCtwL,KAAM,QAAQriC,OAAOqoN,EAAQ,QAC1BsJ,MAGA,CACLtsO,WACA54E,aAEJ,CACF,GAIEumT,GAAuB,CACzBpF,QAAAA,CAAS/G,GACP,IAAIoM,GAAe,EAEfpX,GAAOqX,aACTD,EAAepX,GAAOqX,WAAW,oCAAoC1jT,SAGvEq3S,EAAUsM,oBAAsB,WAC9B,MAAMC,EAAY,GACZC,EAAO,CACXv9J,KAAM,gBAEFw9J,EAAiB,CACrBC,cAAe,MACfC,YAAa,aACbC,IAAK,MAGPL,EAAU3hU,KAAK,CACbmxF,IAAK,OACLn2E,WAAY,IAAK4mT,EACf1zO,EAAG,s4CAGP,MAAM+zO,EAAkB,IAAKJ,EAC3BxzO,cAAe,WAEXx1D,EAAM,CACVs4D,IAAK,SACLn2E,WAAY,IAAK4mT,EACfM,GAAI,MACJC,GAAI,MACJ1rN,EAAG,MAEL7iB,SAAU,IAkDZ,OA/CK4tO,GACH3oS,EAAI+6D,SAAS5zF,KAAK,CAChBmxF,IAAK,UACLn2E,WAAY,IAAK6mT,EACfxzO,cAAe,IACfulC,OAAQ,uBAET,CACDziC,IAAK,UACLn2E,WAAY,IAAKinT,EACfruM,OAAQ,kBAKd+tM,EAAU3hU,KAAK64B,GACf8oS,EAAU3hU,KAAK,CACbmxF,IAAK,OACLn2E,WAAY,IAAK4mT,EACfrrO,QAAS,IACTrI,EAAG,wSAEL0F,SAAU4tO,EAAe,GAAK,CAAC,CAC7BrwO,IAAK,UACLn2E,WAAY,IAAKinT,EACfruM,OAAQ,oBAKT4tM,GAEHG,EAAU3hU,KAAK,CACbmxF,IAAK,OACLn2E,WAAY,IAAK4mT,EACfrrO,QAAS,IACTrI,EAAG,+IAEL0F,SAAU,CAAC,CACTzC,IAAK,UACLn2E,WAAY,IAAKinT,EACfruM,OAAQ,oBAMT,CACLziC,IAAK,IACLn2E,WAAY,CACV,MAAS,WAEX44E,SAAU+tO,EAEd,CACF,IAt3DF,SAAyBS,EAAa54T,GACpC,IACE64T,UAAW19T,GACT6E,EACJ0rT,GAAWkN,EACXjN,GAAS,CAAC,EACVnvT,OAAO0M,KAAK0iT,IAAW51T,SAAQ0nF,KACW,IAApCmuO,GAAoB11T,QAAQunF,WACvBkuO,GAAUluO,EACnB,IAGFguO,GAAS11T,SAAQ4xM,IACf,MAAM8/G,EAAS9/G,EAAO8/G,OAAS9/G,EAAO8/G,SAAW,CAAC,EAiBlD,GAhBAlrT,OAAO0M,KAAKw+S,GAAQ1xT,SAAQiqH,IACA,oBAAfynM,EAAOznM,KAChB9kH,EAAI8kH,GAAMynM,EAAOznM,IAGO,kBAAfynM,EAAOznM,IAChBzjH,OAAO0M,KAAKw+S,EAAOznM,IAAKjqH,SAAQgqH,IACzB7kH,EAAI8kH,KACP9kH,EAAI8kH,GAAM,CAAC,GAGb9kH,EAAI8kH,GAAID,GAAM0nM,EAAOznM,GAAID,EAAG,GAEhC,IAGE4nF,EAAO5pD,MAAO,CAChB,MAAMA,EAAQ4pD,EAAO5pD,QACrBxhJ,OAAO0M,KAAK80I,GAAOhoJ,SAAQszM,IACpBqiH,GAAOriH,KACVqiH,GAAOriH,GAAQ,IAGjBqiH,GAAOriH,GAAM9yM,KAAKwnJ,EAAMsrD,GAAM,GAElC,CAEI1B,EAAO+qH,UACT/qH,EAAO+qH,SAAS/G,GAClB,GAIJ,CA41DAkN,CAFc,CAACrR,GAAW+K,GAAiBU,GAAQG,GAAeE,GAAYmC,GAAgBG,GAAoBK,GAAiBU,GAAOmB,GAfzH,CACf/5K,MAAKA,KACI,CACLm4K,mBAAAA,CAAoBpK,EAAa7oT,GAC/B,MAAM61T,EAAa71T,EAAK+Q,aAAa,kBAC/BgvE,EAAwB,OAAf81O,IAA6C,KAAfA,GAA2BA,GAExE,OADAhN,EAAoB,OAAI9oO,EACjB8oO,CACT,MASmB,CACvB8M,UAAW1Z,KAEb,MAIM6Z,GAAU7Z,GAAI7mT,MAGd8vT,GAAOjJ,GAAIiJ,8BCn/FjB,SAAS6Q,GAAQn4T,EAAQo4T,GACvB,IAAIhwT,EAAO1M,OAAO0M,KAAKpI,GAEvB,GAAItE,OAAOutH,sBAAuB,CAChC,IAAIovM,EAAU38T,OAAOutH,sBAAsBjpH,GAC3Co4T,IAAmBC,EAAUA,EAAQnwT,QAAO,SAAUowT,GACpD,OAAO58T,OAAO+rF,yBAAyBznF,EAAQs4T,GAAK3wO,UACtD,KAAKv/E,EAAK1S,KAAKrB,MAAM+T,EAAMiwT,EAC7B,CAEA,OAAOjwT,CACT,CAEA,SAASmwT,GAAez3T,GACtB,IAAK,IAAIxG,EAAI,EAAGA,EAAIkM,UAAU5L,OAAQN,IAAK,CACzC,IAAIyG,EAAS,MAAQyF,UAAUlM,GAAKkM,UAAUlM,GAAK,CAAC,EACpDA,EAAI,EAAI69T,GAAQz8T,OAAOqF,IAAS,GAAI7L,SAAQ,SAAUI,GACpDkjU,GAAgB13T,EAAQxL,EAAKyL,EAAOzL,GACtC,IAAKoG,OAAOgnS,0BAA4BhnS,OAAO2kK,iBAAiBv/J,EAAQpF,OAAOgnS,0BAA0B3hS,IAAWo3T,GAAQz8T,OAAOqF,IAAS7L,SAAQ,SAAUI,GAC5JoG,OAAOka,eAAe9U,EAAQxL,EAAKoG,OAAO+rF,yBAAyB1mF,EAAQzL,GAC7E,GACF,CAEA,OAAOwL,CACT,CAEA,SAAS+iR,GAAQxpR,GAGf,OAAOwpR,GAAU,mBAAqB1oR,QAAU,iBAAmBA,OAAOR,SAAW,SAAUN,GAC7F,cAAcA,CAChB,EAAI,SAAUA,GACZ,OAAOA,GAAO,mBAAqBc,QAAUd,EAAIwB,cAAgBV,QAAUd,IAAQc,OAAOQ,UAAY,gBAAkBtB,CAC1H,EAAGwpR,GAAQxpR,EACb,CAEA,SAASm+T,GAAgBn+T,EAAK/E,EAAKzB,GAYjC,OAXIyB,KAAO+E,EACTqB,OAAOka,eAAevb,EAAK/E,EAAK,CAC9BzB,MAAOA,EACP8zF,YAAY,EACZD,cAAc,EACd6gC,UAAU,IAGZluH,EAAI/E,GAAOzB,EAGNwG,CACT,CAiBA,SAASo+T,GAAyB13T,EAAQktM,GACxC,GAAc,MAAVltM,EAAgB,MAAO,CAAC,EAE5B,IAEIzL,EAAKgF,EAFLwG,EAlBN,SAAuCC,EAAQktM,GAC7C,GAAc,MAAVltM,EAAgB,MAAO,CAAC,EAC5B,IAEIzL,EAAKgF,EAFLwG,EAAS,CAAC,EACV43T,EAAah9T,OAAO0M,KAAKrH,GAG7B,IAAKzG,EAAI,EAAGA,EAAIo+T,EAAW99T,OAAQN,IACjChF,EAAMojU,EAAWp+T,GACb2zM,EAAS54M,QAAQC,IAAQ,IAC7BwL,EAAOxL,GAAOyL,EAAOzL,IAGvB,OAAOwL,CACT,CAKeo/R,CAA8Bn/R,EAAQktM,GAInD,GAAIvyM,OAAOutH,sBAAuB,CAChC,IAAI0vM,EAAmBj9T,OAAOutH,sBAAsBloH,GAEpD,IAAKzG,EAAI,EAAGA,EAAIq+T,EAAiB/9T,OAAQN,IACvChF,EAAMqjU,EAAiBr+T,GACnB2zM,EAAS54M,QAAQC,IAAQ,GACxBoG,OAAOC,UAAUosH,qBAAqB3sH,KAAK2F,EAAQzL,KACxDwL,EAAOxL,GAAOyL,EAAOzL,GAEzB,CAEA,OAAOwL,CACT,CAEA,SAAS83T,GAAmBx8T,GAC1B,OAGF,SAA4BA,GAC1B,GAAI5G,MAAMC,QAAQ2G,GAAM,OAAOZ,GAAkBY,EACnD,CALSy8T,CAAmBz8T,IAO5B,SAA0B08T,GACxB,GAAsB,qBAAX39T,QAAmD,MAAzB29T,EAAK39T,OAAOR,WAA2C,MAAtBm+T,EAAK,cAAuB,OAAOtjU,MAAMuG,KAAK+8T,EACtH,CAToCC,CAAiB38T,IAWrD,SAAqCpB,EAAGO,GACtC,IAAKP,EAAG,OACR,GAAiB,kBAANA,EAAgB,OAAOQ,GAAkBR,EAAGO,GACvD,IAAIE,EAAIC,OAAOC,UAAUC,SAASR,KAAKJ,GAAGzF,MAAM,GAAI,GAC1C,WAANkG,GAAkBT,EAAEa,cAAaJ,EAAIT,EAAEa,YAAYC,MACvD,GAAU,QAANL,GAAqB,QAANA,EAAa,OAAOjG,MAAMuG,KAAKf,GAClD,GAAU,cAANS,GAAqB,2CAA2CO,KAAKP,GAAI,OAAOD,GAAkBR,EAAGO,EAC3G,CAlB6DU,CAA4BG,IA4BzF,WACE,MAAM,IAAID,UAAU,uIACtB,CA9BiG68T,EACjG,CAmBA,SAASx9T,GAAkBY,EAAKC,IACnB,MAAPA,GAAeA,EAAMD,EAAIxB,UAAQyB,EAAMD,EAAIxB,QAE/C,IAAK,IAAIN,EAAI,EAAGgC,EAAO,IAAI9G,MAAM6G,GAAM/B,EAAI+B,EAAK/B,IAAKgC,EAAKhC,GAAK8B,EAAI9B,GAEnE,OAAOgC,CACT,CAmEA,SAAS28T,GAAS96O,GAChB,OAPoB9jF,EAOH8jF,GANjB9jF,GAAY,KAEGA,EAKN8jF,GAITA,EAASA,EAAOr8E,QAAQ,iBAAiB,SAAUq5E,EAAO+9O,GACxD,OAAOA,EAAMA,EAAIp+T,cAAgB,EACnC,KAEc+H,OAAO,EAAG,GAAGtP,cAAgB4qF,EAAOt7E,OAAO,GAhB3D,IAAsBxI,CAiBtB,CAEA,IAAI8lS,GAAY,CAAC,SAqEjB,IAAIoiB,IAAa,EAEjB,IACEA,IAAa56L,CACf,CAAE,MAAOzzH,IAAI,CAUb,SAASilU,GAAkB7R,GAGzB,OAAIA,GAA0B,WAAlBzjC,GAAQyjC,IAAsBA,EAAKthT,QAAUshT,EAAKn3J,UAAYm3J,EAAKA,KACtEA,EAGL9vT,GAAM8vT,KACD9vT,GAAM8vT,KAAKA,GAIP,OAATA,EACK,KAILA,GAA0B,WAAlBzjC,GAAQyjC,IAAsBA,EAAKthT,QAAUshT,EAAKn3J,SACrDm3J,EAIL9xT,MAAMC,QAAQ6xT,IAAyB,IAAhBA,EAAK1sT,OAEvB,CACLoL,OAAQshT,EAAK,GACbn3J,SAAUm3J,EAAK,IAKC,kBAATA,EACF,CACLthT,OAAQ,MACRmqJ,SAAUm3J,QAHd,CAMF,CAKA,SAAS8R,GAAc9jU,EAAKzB,GAK1B,OAAO2B,MAAMC,QAAQ5B,IAAUA,EAAM+G,OAAS,IAAMpF,MAAMC,QAAQ5B,IAAUA,EAAQ2kU,GAAgB,CAAC,EAAGljU,EAAKzB,GAAS,CAAC,CACzH,CAEA,IAAIwhH,GAAe,CACjBgkN,QAAQ,EACR7rM,UAAW,GACX8Y,KAAM,KACNgmL,OAAQ,KACRgN,YAAY,EACZC,SAAS,EACTC,MAAM,EACNlS,KAAM,KACNmS,UAAU,EACV5lB,KAAM,KACN6lB,OAAO,EACPC,SAAU,KACVh8T,KAAM,KACNi8T,MAAM,EACNC,WAAW,EACXC,aAAa,EACbC,MAAM,EACNC,MAAM,EACNC,UAAU,EACVC,QAAQ,EACRC,OAAO,EACPh4O,QAAQ,EACRgvC,MAAO,GACPo7L,QAAS,KACTlnK,UAAW,KACX+0K,aAAa,GAEXC,GAA+BrhC,EAAAA,YAAiB,SAAU13M,EAAOgqB,GACnE,IAAIgvN,EAAW/B,GAAeA,GAAe,CAAC,EAAGljN,IAAe/zB,GAE5Di5O,EAAWD,EAAShT,KACpBkT,EAAWF,EAASh0L,KACpBnkD,EAASm4O,EAASn4O,OAClBqrC,EAAY8sM,EAAS9sM,UACrB2D,EAAQmpM,EAASnpM,MACjBo7L,EAAU+N,EAAS/N,QACnBD,EAASgO,EAAShO,OAClBhB,EAAa6N,GAAkBoB,GAC/B7wC,EAAU0vC,GAAc,UAAW,GAAGn1N,OAAO20N,GArPnD,SAAmBt3O,GACjB,IAAIm5O,EAEAV,EAAOz4O,EAAMy4O,KACbC,EAAO14O,EAAM04O,KACbC,EAAW34O,EAAM24O,SACjBC,EAAS54O,EAAM44O,OACfC,EAAQ74O,EAAM64O,MACdO,EAAQp5O,EAAMo5O,MACdd,EAAOt4O,EAAMs4O,KACbC,EAAYv4O,EAAMu4O,UAClBC,EAAcx4O,EAAMw4O,YACpBJ,EAAQp4O,EAAMo4O,MACdJ,EAAah4O,EAAMg4O,WACnBC,EAAUj4O,EAAMi4O,QAChBF,EAAS/3O,EAAM+3O,OACfI,EAAWn4O,EAAMm4O,SACjBD,EAAOl4O,EAAMk4O,KACb77T,EAAO2jF,EAAM3jF,KACbg8T,EAAWr4O,EAAMq4O,SACjB9lB,EAAOvyN,EAAMuyN,KAEbnqB,GAkBD8uC,GAlBYiC,EAAW,CACxB,UAAWV,EACX,UAAWC,EACX,eAAgBC,EAChB,YAAaC,EACb,WAAYC,EACZ,WAAYO,EACZ,UAAWd,EACX,kBAAmBE,EACnB,gBAAiBD,EACjB,WAAYH,EACZ,QAASJ,EACT,aAAcC,EACd,YAAaF,EACb,QAASI,EACT,WAAoB,IAATD,EACX,qBAA+B,eAATA,GAAkC,SAATA,EAC/C,mBAA6B,aAATA,GAAgC,SAATA,GAChB,MAAMv1N,OAAOtmG,GAAuB,qBAATA,GAAiC,OAATA,GAAgB66T,GAAgBiC,EAAU,aAAax2N,OAAO01N,GAA+B,qBAAbA,GAAyC,OAAbA,GAAkC,IAAbA,GAAiBnB,GAAgBiC,EAAU,WAAWx2N,OAAO4vM,GAAuB,qBAATA,GAAiC,OAATA,GAAgB2kB,GAAgBiC,EAAU,kBAAmBn5O,EAAM84O,aAAcK,GAGrY,OAAO/+T,OAAO0M,KAAKshR,GAAS92Q,KAAI,SAAUtd,GACxC,OAAOo0R,EAAQp0R,GAAOA,EAAM,IAC9B,IAAG4S,QAAO,SAAU5S,GAClB,OAAOA,CACT,GACF,CAqMsEmuJ,CAAU62K,IAAY1B,IAAoBprM,GAAa,IAAIh6H,MAAM,QACjI6xJ,EAAY+zK,GAAc,YAA2C,kBAAvBkB,EAASj1K,UAAyB7tJ,GAAM6tJ,UAAUi1K,EAASj1K,WAAai1K,EAASj1K,WAC/H/e,EAAO8yL,GAAc,OAAQD,GAAkBqB,IAC/CG,EAAerT,GAAKgE,EAAYiN,GAAeA,GAAeA,GAAeA,GAAe,CAAC,EAAG7uC,GAAUrkI,GAAY/e,GAAO,CAAC,EAAG,CACnInkD,OAAQA,EACRgvC,MAAOA,EACPo7L,QAASA,EACTD,OAAQA,KAGV,IAAKqO,EAEH,OA7GJ,WAEI,IAAIC,GADDrY,IAAc56S,SAAoC,oBAAlBA,QAAQnD,QAG1Co2T,EAAWjzT,SAASnD,MAAMnQ,MAAMumU,EAAUp0T,UAE/C,CAsGI+rF,CAAI,sBAAuB+4N,GACpB,KAGT,IAAIa,EAAWwO,EAAaxO,SACxB0O,EAAa,CACfvvN,IAAKA,GAQP,OANA5vG,OAAO0M,KAAKkyT,GAAUplU,SAAQ,SAAUI,GAEjC+/G,GAAaj7G,eAAe9E,KAC/BulU,EAAWvlU,GAAOglU,EAAShlU,GAE/B,IACOwlU,GAAa3O,EAAS,GAAI0O,EACnC,IACAR,GAAgB3zO,YAAc,kBAC9B2zO,GAAgBU,UAAY,CAC1BhB,KAAMj3O,KAAAA,KACNu2O,OAAQv2O,KAAAA,KACRm3O,SAAUn3O,KAAAA,KACVo3O,OAAQp3O,KAAAA,KACR0qC,UAAW1qC,KAAAA,OACXk3O,KAAMl3O,KAAAA,KACN43O,MAAO53O,KAAAA,KACPwjD,KAAMxjD,KAAAA,UAAoB,CAACA,KAAAA,OAAkBA,KAAAA,MAAiBA,KAAAA,SAC9DwpO,OAAQxpO,KAAAA,OACRw2O,WAAYx2O,KAAAA,KACZy2O,QAASz2O,KAAAA,KACT02O,KAAM12O,KAAAA,MAAgB,EAAC,GAAM,EAAO,aAAc,WAAY,SAC9DwkO,KAAMxkO,KAAAA,UAAoB,CAACA,KAAAA,OAAkBA,KAAAA,MAAiBA,KAAAA,SAC9D22O,SAAU32O,KAAAA,KACV+wN,KAAM/wN,KAAAA,MAAgB,CAAC,QAAS,SAChC42O,MAAO52O,KAAAA,KACP62O,SAAU72O,KAAAA,MAAgB,CAAC,EAAG,GAAI,IAAK,MACvCq3O,MAAOr3O,KAAAA,KACPnlF,KAAMmlF,KAAAA,MAAgB,CAAC,MAAO,KAAM,KAAM,KAAM,KAAM,MAAO,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,QACnH82O,KAAM92O,KAAAA,KACN+2O,UAAW/2O,KAAAA,KACXg3O,YAAah3O,KAAAA,KACbX,OAAQW,KAAAA,UAAoB,CAACA,KAAAA,KAAgBA,KAAAA,SAC7CquC,MAAOruC,KAAAA,OACPypO,QAASzpO,KAAAA,OACTuiE,UAAWviE,KAAAA,UAAoB,CAACA,KAAAA,OAAkBA,KAAAA,SAClDs3O,YAAat3O,KAAAA,MAEf,IAAIg4O,GAjNJ,SAASE,EAAQpnT,EAAe5L,GAC9B,IAAI6yT,EAAar0T,UAAU5L,OAAS,QAAsB/D,IAAjB2P,UAAU,GAAmBA,UAAU,GAAK,CAAC,EAEtF,GAAuB,kBAAZwB,EACT,OAAOA,EAGT,IAAIshF,GAAYthF,EAAQshF,UAAY,IAAI12E,KAAI,SAAUzF,GACpD,OAAO6tT,EAAQpnT,EAAezG,EAChC,IAGI8tT,EAASv/T,OAAO0M,KAAKJ,EAAQ0I,YAAc,CAAC,GAAGjd,QAAO,SAAUwlI,EAAK3jI,GACvE,IAAIwsI,EAAM95H,EAAQ0I,WAAWpb,GAE7B,OAAQA,GACN,IAAK,QACH2jI,EAAIj0H,MAAiB,UAAI88H,SAClB95H,EAAQ0I,WAAkB,MACjC,MAEF,IAAK,QACHuoH,EAAIj0H,MAAa,MAAkB88H,EAnC5BtuI,MAAM,KAAKof,KAAI,SAAUmoE,GACpC,OAAOA,EAAEjnF,MACX,IAAGoU,QAAO,SAAU6yE,GAClB,OAAOA,CACT,IAAGtnF,QAAO,SAAUwlI,EAAKq1G,GACvB,IAVgBxsG,EAUZxnI,EAAIg0O,EAAKj5O,QAAQ,KACjB+6D,EAAO6oQ,GAAS3qF,EAAK/4O,MAAM,EAAG+E,IAC9BzG,EAAQy6O,EAAK/4O,MAAM+E,EAAI,GAAGxG,OAE9B,OADAs8D,EAAK06M,WAAW,UAAY7xI,GAbZ6I,EAa2B1xE,EAZtC0xE,EAAI9mD,OAAO,GAAGlgF,cAAgBgnI,EAAIvsI,MAAM,KAYO1B,EAAQolI,EAAI7oE,GAAQv8D,EACjEolI,CACT,GAAG,CAAC,GA0BE,MAEF,QAC+B,IAAzB3jI,EAAID,QAAQ,UAA2C,IAAzBC,EAAID,QAAQ,SAC5C4jI,EAAIj0H,MAAM1P,EAAI/B,eAAiBuuI,EAE/B7I,EAAIj0H,MAAMi0T,GAAS3jU,IAAQwsI,EAKjC,OAAO7I,CACT,GAAG,CACDj0H,MAAO,CAAC,IAGNk2T,EAAoBL,EAAW3tO,MAC/BiuO,OAAsC,IAAtBD,EAA+B,CAAC,EAAIA,EACpDE,EAAY3C,GAAyBoC,EAAY16B,IAKrD,OAHA86B,EAAOj2T,MAAa,MAAIuzT,GAAeA,GAAe,CAAC,EAAG0C,EAAOj2T,MAAa,OAAIm2T,GAG3EvnT,EAAcvf,WAAM,EAAQ,CAAC2T,EAAQ6+E,IAAK0xO,GAAeA,GAAe,CAAC,EAAG0C,EAAOj2T,OAAQo2T,IAAYn3N,OAAO20N,GAAmBtvO,IAC1I,EAkK2BhuF,KAAK,KAAM09R,EAAAA,eC3atC,MA+nJMqiC,GAAiB,CACrBr1T,OAAQ,MACRmqJ,SAAU,gBACVm3J,KAAM,CAAC,IAAK,IAAK,CAAC,OAAQ,iBAAkB,OAAQ,iZAEhDgU,GAAiBD,GC7nJvB,MAAME,GAAeA,KAEnB7c,aAAalzH,WAAW,gBACxBkzH,aAAalzH,WAAW,SACxBkzH,aAAalzH,WAAW,aACxBkzH,aAAalzH,WAAW,aAAa,EAyDvC,GArDegwI,KAEXpe,EAAAA,GAAAA,KAAA,UAAQ5vL,UAAU,SAAQlkC,UAExB+zN,EAAAA,GAAAA,MAAA,OAAK7vL,UAAU,uCAAsClkC,SAAA,EAEnD+zN,EAAAA,GAAAA,MAAA,KAAG7vL,UAAU,eAAe1sB,KAAK,QAAOxX,SAAA,EACtC8zN,EAAAA,GAAAA,KAAA,OAAK90S,IAAI,uBAAuBqpK,IAAI,oBAAoBnkD,UAAU,SAAS,mBAG7E4vL,EAAAA,GAAAA,KAAA,UAAQ5vL,UAAU,iBAAiB55H,KAAK,SAAS,cAAY,WAAW,cAAY,aAAa,gBAAc,YAAY,gBAAc,QAAQ,aAAW,oBAAmB01F,UAC7K8zN,EAAAA,GAAAA,KAAA,QAAM5vL,UAAU,2BAGlB4vL,EAAAA,GAAAA,KAAA,OAAK5vL,UAAU,2BAA2Bv6G,GAAG,YAAWq2E,UACtD+zN,EAAAA,GAAAA,MAAA,MAAI7vL,UAAU,qBAAoBlkC,SAAA,EAEhC8zN,EAAAA,GAAAA,KAAA,MAAI5vL,UAAU,WAAUlkC,UACtB8zN,EAAAA,GAAAA,KAAA,KAAG5vL,UAAU,WAAW1sB,KAAK,QAAOxX,SAAC,YAGvC8zN,EAAAA,GAAAA,KAAA,MAAI5vL,UAAU,WAAUlkC,UACtB8zN,EAAAA,GAAAA,KAAA,KAAG5vL,UAAU,WAAW1sB,KAAK,WAAUxX,SAAC,eAG1C8zN,EAAAA,GAAAA,KAAA,MAAI5vL,UAAU,WAAUlkC,UACtB8zN,EAAAA,GAAAA,KAAA,KAAG5vL,UAAU,WAAW1sB,KAAK,aAAYxX,SAAC,iBAG5C8zN,EAAAA,GAAAA,KAAA,MAAI5vL,UAAU,WAAUlkC,UACtB8zN,EAAAA,GAAAA,KAAA,KAAG5vL,UAAU,WAAW1sB,KAAK,UAASxX,SAAC,cAGzC8zN,EAAAA,GAAAA,KAAA,MAAI5vL,UAAU,WAAUlkC,UACtB8zN,EAAAA,GAAAA,KAAA,KAAG5vL,UAAU,WAAW1sB,KAAK,WAAUxX,SAAC,eAG1C8zN,EAAAA,GAAAA,KAAA,MAAI5vL,UAAU,WAAUlkC,UACtB+zN,EAAAA,GAAAA,MAACxd,GAAI,CAACryK,UAAU,eAAey/B,GAAG,QAAO3jE,SAAA,EACvC8zN,EAAAA,GAAAA,KAACid,GAAe,CAAC/S,KAAMgU,KAAkB,cAI7Cle,EAAAA,GAAAA,KAAA,MAAI5vL,UAAU,WAAUlkC,UACtB8zN,EAAAA,GAAAA,KAACvd,GAAI,CAACryK,UAAU,kBAAkBy/B,GAAG,IAAIvxC,QAAS6/M,GAAajyO,SAAC,yBCR9E,GA/BoBmyO,KAClB,MAAM,gBAAEC,EAAe,SAAEC,GAlBXC,MACd,MAAOF,EAAiBG,IAAsBlnN,EAAAA,EAAAA,WAAS,IAChDgnN,EAAUG,IAAennN,EAAAA,EAAAA,UAAS,IAYzC,OAVAP,EAAAA,EAAAA,YAAU,KACR,MAAMgvL,EAAQsb,aAAapzH,QAAQ,gBAC7BhtF,EAAQogN,aAAapzH,QAAQ,SAC7BywI,EAAiBrd,aAAapzH,QAAQ,aACxC83G,GAAS9kM,IACXu9N,GAAmB,GACnBC,EAAYC,GAAkB,IAChC,GACC,IAEI,CAAEL,kBAAiBC,WAAU,EAIEC,GAEtC,OACExe,EAAAA,GAAAA,KAAA,WAAS5vL,UAAU,eAAclkC,UAC/B8zN,EAAAA,GAAAA,KAAA,OAAK5vL,UAAU,YAAWlkC,SAEvBoyO,GACCre,EAAAA,GAAAA,MAAA2e,GAAAA,SAAA,CAAA1yO,SAAA,EACE+zN,EAAAA,GAAAA,MAAA,MAAI7vL,UAAU,mCAAmCtgC,MAAO,CAAE+uO,cAAe,aAAc3yO,SAAA,CAAC,wCAChFqyO,EAAS/gU,OAAS,IAAKwiT,EAAAA,GAAAA,KAAA,OAAK5vL,UAAU,YAAWlkC,SAAEqyO,IAAkBA,MAE7Eve,EAAAA,GAAAA,KAAA,KAAA9zN,SAAG,iEACH8zN,EAAAA,GAAAA,KAAA,OAAK5vL,UAAU,eAAclkC,UAC3B8zN,EAAAA,GAAAA,KAAA,KAAG5vL,UAAU,mBAAmB1sB,KAAK,WAAUxX,SAAC,wBAIpD+zN,EAAAA,GAAAA,MAAA2e,GAAAA,SAAA,CAAA1yO,SAAA,EACE8zN,EAAAA,GAAAA,KAAA,MAAI5vL,UAAU,mCAAkClkC,SAAC,wBACjD8zN,EAAAA,GAAAA,KAAA,KAAA9zN,SAAG,gDACH8zN,EAAAA,GAAAA,KAAA,OAAK5vL,UAAU,eAAclkC,UAC3B8zN,EAAAA,GAAAA,KAAA,KAAG5vL,UAAU,mBAAmB1sB,KAAK,WAAUxX,SAAC,uBAKhD,EC8Fd,GA1IiB4yO,MACb9nN,EAAAA,EAAAA,YAAU,KACN,MAAM+nN,EAAeA,KACFn+O,SAAS4lC,iBAAiB,mBAClC1uH,SAAS8S,IACZA,EAAQ+iH,wBAAwBzhD,IAAM72E,OAAO2pU,YAC/Cp0T,EAAQy7I,UAAUnmJ,IAAI,kBAEtB0K,EAAQy7I,UAAU32I,OAAO,iBAC3B,GACA,EAIJ,OADAra,OAAOg9F,iBAAiB,SAAU0sO,GAC3B,KACL1pU,OAAOi9F,oBAAoB,SAAUysO,EAAa,CACnD,GACA,KAED9e,EAAAA,GAAAA,MAAA,WAAS7vL,UAAU,yCAAwClkC,SAAA,EACvD+zN,EAAAA,GAAAA,MAAA,OAAK7vL,UAAU,YAAWlkC,SAAA,EACtB8zN,EAAAA,GAAAA,KAAA,MAAI5vL,UAAU,wBAAwBtgC,MAAO,CAAEw9L,UAAW,UAAWphM,SAAC,oBACtE+zN,EAAAA,GAAAA,MAAA,OAAK7vL,UAAU,6IAA6I,WAAS,UAASlkC,SAAA,EAC1K8zN,EAAAA,GAAAA,KAAA,OAAK5vL,UAAU,WAAUlkC,UACrB8zN,EAAAA,GAAAA,KAAA,OAAK5vL,UAAU,wCAAuClkC,UAClD+zN,EAAAA,GAAAA,MAAA,OAAK7vL,UAAU,YAAWlkC,SAAA,EACtB8zN,EAAAA,GAAAA,KAAA,OAAK5vL,UAAU,oBAAmBlkC,UAC1B8zN,EAAAA,GAAAA,KAAA,OAAK90S,IAAI,8EAA8E6zF,MAAM,MAAMC,OAAO,MAAMu1E,IAAI,kBAE5HyrI,EAAAA,GAAAA,KAAA,MAAI5vL,UAAU,wBAAuBlkC,SAAC,gBACtC8zN,EAAAA,GAAAA,KAAA,KAAG5vL,UAAU,kBAAiBlkC,SAAC,4EAI3C8zN,EAAAA,GAAAA,KAAA,OAAK5vL,UAAU,WAAUlkC,UACrB8zN,EAAAA,GAAAA,KAAA,OAAK5vL,UAAU,wCAAuClkC,UAClD+zN,EAAAA,GAAAA,MAAA,OAAK7vL,UAAU,YAAWlkC,SAAA,EACtB8zN,EAAAA,GAAAA,KAAA,OAAK5vL,UAAU,oBAAmBlkC,UAC9B8zN,EAAAA,GAAAA,KAAA,OAAK90S,IAAI,yEAAyE6zF,MAAM,MAAMC,OAAO,MAAMu1E,IAAI,aAEnHyrI,EAAAA,GAAAA,KAAA,MAAI5vL,UAAU,wBAAuBlkC,SAAC,6BACtC8zN,EAAAA,GAAAA,KAAA,KAAG5vL,UAAU,kBAAiBlkC,SAAC,qFAI3C8zN,EAAAA,GAAAA,KAAA,OAAK5vL,UAAU,WAAUlkC,UACrB8zN,EAAAA,GAAAA,KAAA,OAAK5vL,UAAU,wCAAuClkC,UAClD+zN,EAAAA,GAAAA,MAAA,OAAK7vL,UAAU,YAAWlkC,SAAA,EACtB8zN,EAAAA,GAAAA,KAAA,OAAK5vL,UAAU,oBAAmBlkC,UAC9B8zN,EAAAA,GAAAA,KAAA,OAAK5vL,UAAU,SAASllH,IAAI,oFAAoF6zF,MAAM,MAAMC,OAAO,MAAMu1E,IAAI,cAEjJyrI,EAAAA,GAAAA,KAAA,MAAI5vL,UAAU,wBAAuBlkC,SAAC,sBACtC8zN,EAAAA,GAAAA,KAAA,KAAG5vL,UAAU,kBAAiBlkC,SAAC,yEAMnD+zN,EAAAA,GAAAA,MAAA,OAAK7vL,UAAU,YAAWlkC,SAAA,EACtB8zN,EAAAA,GAAAA,KAAA,MAAI5vL,UAAU,wBAAwBtgC,MAAO,CAAEw9L,UAAW,UAAWphM,SAAC,uBACtE+zN,EAAAA,GAAAA,MAAA,OAAK7vL,UAAU,6IAA6I,WAAS,UAASlkC,SAAA,EAC1K8zN,EAAAA,GAAAA,KAAA,OAAK5vL,UAAU,WAAUlkC,UACrB8zN,EAAAA,GAAAA,KAAA,OAAK5vL,UAAU,wCAAuClkC,UAClD+zN,EAAAA,GAAAA,MAAA,OAAK7vL,UAAU,YAAWlkC,SAAA,EACtB8zN,EAAAA,GAAAA,KAAA,OAAK5vL,UAAU,oBAAmBlkC,UAC1B8zN,EAAAA,GAAAA,KAAA,OAAK90S,IAAI,uFAAuF6zF,MAAM,MAAMC,OAAO,MAAMu1E,IAAI,iBAErIyrI,EAAAA,GAAAA,KAAA,MAAI5vL,UAAU,wBAAuBlkC,SAAC,yBACtC+zN,EAAAA,GAAAA,MAAA,KAAG7vL,UAAU,kBAAiBlkC,SAAA,CAAC,oEAAgE8zN,EAAAA,GAAAA,KAAA,SAAS,0BAIpHA,EAAAA,GAAAA,KAAA,OAAK5vL,UAAU,WAAUlkC,UACrB8zN,EAAAA,GAAAA,KAAA,OAAK5vL,UAAU,wCAAuClkC,UAClD+zN,EAAAA,GAAAA,MAAA,OAAK7vL,UAAU,YAAWlkC,SAAA,EACtB8zN,EAAAA,GAAAA,KAAA,OAAK5vL,UAAU,oBAAmBlkC,UAC9B8zN,EAAAA,GAAAA,KAAA,OAAK90S,IAAI,uFAAuF6zF,MAAM,MAAMC,OAAO,MAAMu1E,IAAI,eAEjIyrI,EAAAA,GAAAA,KAAA,MAAI5vL,UAAU,wBAAuBlkC,SAAC,yBACtC8zN,EAAAA,GAAAA,KAAA,KAAG5vL,UAAU,kBAAiBlkC,SAAC,qHAI3C8zN,EAAAA,GAAAA,KAAA,OAAK5vL,UAAU,WAAUlkC,UACrB8zN,EAAAA,GAAAA,KAAA,OAAK5vL,UAAU,wCAAuClkC,UAClD+zN,EAAAA,GAAAA,MAAA,OAAK7vL,UAAU,YAAWlkC,SAAA,EACtB8zN,EAAAA,GAAAA,KAAA,OAAK5vL,UAAU,oBAAmBlkC,UAC9B8zN,EAAAA,GAAAA,KAAA,OAAK5vL,UAAU,SAASllH,IAAI,gFAAgF6zF,MAAM,MAAMC,OAAO,MAAMu1E,IAAI,YAE7IyrI,EAAAA,GAAAA,KAAA,MAAI5vL,UAAU,wBAAuBlkC,SAAC,kBACtC8zN,EAAAA,GAAAA,KAAA,KAAG5vL,UAAU,kBAAiBlkC,SAAC,kHAMnD+zN,EAAAA,GAAAA,MAAA,OAAK7vL,UAAU,YAAWlkC,SAAA,EACtB8zN,EAAAA,GAAAA,KAAA,MAAI5vL,UAAU,wBAAwBtgC,MAAO,CAAEw9L,UAAW,UAAWphM,SAAC,oBACtE+zN,EAAAA,GAAAA,MAAA,OAAK7vL,UAAU,6IAA6I,WAAS,UAASlkC,SAAA,EAC1K8zN,EAAAA,GAAAA,KAAA,OAAK5vL,UAAU,WAAUlkC,UACrB8zN,EAAAA,GAAAA,KAAA,OAAK5vL,UAAU,wCAAuClkC,UAClD+zN,EAAAA,GAAAA,MAAA,OAAK7vL,UAAU,YAAWlkC,SAAA,EACtB8zN,EAAAA,GAAAA,KAAA,OAAK5vL,UAAU,oBAAmBlkC,UAC1B8zN,EAAAA,GAAAA,KAAA,OAAK90S,IAAI,gFAAgF6zF,MAAM,MAAMC,OAAO,MAAMu1E,IAAI,oBAE9HyrI,EAAAA,GAAAA,KAAA,MAAI5vL,UAAU,wBAAuBlkC,SAAC,0BACtC8zN,EAAAA,GAAAA,KAAA,KAAG5vL,UAAU,kBAAiBlkC,SAAC,6EAI3C8zN,EAAAA,GAAAA,KAAA,OAAK5vL,UAAU,WAAUlkC,UACrB8zN,EAAAA,GAAAA,KAAA,OAAK5vL,UAAU,wCAAuClkC,UAClD+zN,EAAAA,GAAAA,MAAA,OAAK7vL,UAAU,YAAWlkC,SAAA,EACtB8zN,EAAAA,GAAAA,KAAA,OAAK5vL,UAAU,oBAAmBlkC,UAC9B8zN,EAAAA,GAAAA,KAAA,OAAK90S,IAAI,wFAAwF6zF,MAAM,MAAMC,OAAO,MAAMu1E,IAAI,sBAElIyrI,EAAAA,GAAAA,KAAA,MAAI5vL,UAAU,wBAAuBlkC,SAAC,0BACtC8zN,EAAAA,GAAAA,KAAA,KAAG5vL,UAAU,kBAAiBlkC,SAAC,wEAI3C8zN,EAAAA,GAAAA,KAAA,OAAK5vL,UAAU,WAAUlkC,UACrB8zN,EAAAA,GAAAA,KAAA,OAAK5vL,UAAU,wCAAuClkC,UAClD+zN,EAAAA,GAAAA,MAAA,OAAK7vL,UAAU,YAAWlkC,SAAA,EACtB8zN,EAAAA,GAAAA,KAAA,OAAK5vL,UAAU,oBAAmBlkC,UAC9B8zN,EAAAA,GAAAA,KAAA,OAAK5vL,UAAU,SAASllH,IAAI,+EAA+E6zF,MAAM,MAAMC,OAAO,MAAMu1E,IAAI,cAE5IyrI,EAAAA,GAAAA,KAAA,MAAI5vL,UAAU,wBAAuBlkC,SAAC,yBACtC8zN,EAAAA,GAAAA,KAAA,KAAG5vL,UAAU,kBAAiBlkC,SAAC,6EChG/D,GAjCe+yO,KAEXjf,EAAAA,GAAAA,KAAA,UAAQ5vL,UAAU,SAAQlkC,UACxB8zN,EAAAA,GAAAA,KAAA,OAAK5vL,UAAU,YAAWlkC,UACxB+zN,EAAAA,GAAAA,MAAA,OAAK7vL,UAAU,MAAKlkC,SAAA,EAClB+zN,EAAAA,GAAAA,MAAA,OAAK7vL,UAAU,WAAUlkC,SAAA,EACvB8zN,EAAAA,GAAAA,KAAA,MAAA9zN,SAAI,kBACJ+zN,EAAAA,GAAAA,MAAA,MAAA/zN,SAAA,EACE8zN,EAAAA,GAAAA,KAAA,MAAA9zN,UAAI8zN,EAAAA,GAAAA,KAAA,KAAGt8M,KAAK,iBAAgBxX,SAAC,sBAC7B8zN,EAAAA,GAAAA,KAAA,MAAA9zN,UAAI8zN,EAAAA,GAAAA,KAAA,KAAGt8M,KAAK,mBAAkBxX,SAAC,+BAEjC8zN,EAAAA,GAAAA,KAAA,KAAGlwN,MAAO,CAACiR,MAAM,WAAW7U,SAAC,oDAE/B+zN,EAAAA,GAAAA,MAAA,OAAK7vL,UAAU,WAAUlkC,SAAA,EACvB8zN,EAAAA,GAAAA,KAAA,MAAA9zN,SAAI,iBACJ+zN,EAAAA,GAAAA,MAAA,MAAA/zN,SAAA,EACE8zN,EAAAA,GAAAA,KAAA,MAAA9zN,UAAI8zN,EAAAA,GAAAA,KAAA,KAAGt8M,KAAK,QAAOxX,SAAC,YACpB8zN,EAAAA,GAAAA,KAAA,MAAA9zN,UAAI8zN,EAAAA,GAAAA,KAAA,KAAGt8M,KAAK,WAAUxX,SAAC,gBACvB8zN,EAAAA,GAAAA,KAAA,MAAA9zN,UAAI8zN,EAAAA,GAAAA,KAAA,KAAGt8M,KAAK,6CAA4CxX,SAAC,qBAG7D+zN,EAAAA,GAAAA,MAAA,OAAK7vL,UAAU,WAAUlkC,SAAA,EACvB8zN,EAAAA,GAAAA,KAAA,MAAA9zN,SAAI,gBACJ+zN,EAAAA,GAAAA,MAAA,KAAA/zN,SAAA,CAAG,gCAA4B8zN,EAAAA,GAAAA,KAAA,SAAS,oCAAgCA,EAAAA,GAAAA,KAAA,SAAS,oCAAgCA,EAAAA,GAAAA,KAAA,UAASA,EAAAA,GAAAA,KAAA,UAAA9zN,SAAQ,WAAe,yBACjJ8zN,EAAAA,GAAAA,KAAA,KAAGlwN,MAAO,CAACiR,MAAM,WAAW7U,SAAC,2CCyBzC,GAlCoBgzO,KAClB,MAAM,gBAAEZ,GAfME,MACd,MAAOF,EAAiBG,IAAsBlnN,EAAAA,EAAAA,WAAS,GAUvD,OARAP,EAAAA,EAAAA,YAAU,KACR,MAAMgvL,EAAQsb,aAAapzH,QAAQ,gBAC7BhtF,EAAQogN,aAAapzH,QAAQ,SAC/B83G,GAAS9kM,GACXu9N,GAAmB,EACrB,GACC,IAEI,CAAEH,kBAAiB,EAIEE,GAC5B,OACExe,EAAAA,GAAAA,KAAA,WAAS5vL,UAAU,4CAA2ClkC,UAC5D8zN,EAAAA,GAAAA,KAAA,OAAK5vL,UAAU,YAAWlkC,UACxB+zN,EAAAA,GAAAA,MAAA,OAAK7vL,UAAU,yBAAwBlkC,SAAA,EACrC8zN,EAAAA,GAAAA,KAAA,OAAK5vL,UAAU,6DAA4DlkC,UACzE8zN,EAAAA,GAAAA,KAAA,OACE90S,IAAI,iBACJqpK,IAAI,aACJnkD,UAAU,yBAGd6vL,EAAAA,GAAAA,MAAA,OAAK7vL,UAAU,gDAA+ClkC,SAAA,EAC5D8zN,EAAAA,GAAAA,KAAA,MAAA9zN,SAAI,uBACJ8zN,EAAAA,GAAAA,KAAA,KAAA9zN,SAAG,0HAGFoyO,GACDte,EAAAA,GAAAA,KAAA,KAAGt8M,KAAK,WAAW0sB,UAAU,4BAA2BlkC,SAAC,2BAIvD8zN,EAAAA,GAAAA,KAAA,KAAGt8M,KAAK,WAAW0sB,UAAU,kBAAiBlkC,SAAC,gCAO/C,ECpCd,SAASk9C,GAASnsI,GAChB,OAAe,OAARA,GAA+B,kBAARA,GAAoB,gBAAiBA,GAAOA,EAAIwB,cAAgBH,MAChG,CACA,SAAS+lG,GAAO3gG,EAAQwH,QACP,IAAXxH,IACFA,EAAS,CAAC,QAEA,IAARwH,IACFA,EAAM,CAAC,GAET5M,OAAO0M,KAAKE,GAAKpT,SAAQI,IACI,qBAAhBwL,EAAOxL,GAAsBwL,EAAOxL,GAAOgT,EAAIhT,GAAckxI,GAASl+H,EAAIhT,KAASkxI,GAAS1lI,EAAOxL,KAASoG,OAAO0M,KAAKE,EAAIhT,IAAMsF,OAAS,GACpJ6mG,GAAO3gG,EAAOxL,GAAMgT,EAAIhT,GAC1B,GAEJ,CACA,MAAMinU,GAAc,CAClBlmU,KAAM,CAAC,EACPo5F,gBAAAA,GAAoB,EACpBC,mBAAAA,GAAuB,EACvBxH,cAAe,CACbylC,IAAAA,GAAQ,EACRv2H,SAAU,IAEZs5J,cAAaA,IACJ,KAET9sC,iBAAgBA,IACP,GAET5wG,eAAcA,IACL,KAETwpT,YAAWA,KACF,CACLx3I,SAAAA,GAAa,IAGjBpxK,cAAaA,KACJ,CACL01E,SAAU,GACVp8E,WAAY,GACZggF,MAAO,CAAC,EACR94E,YAAAA,GAAgB,EAChBW,qBAAoBA,IACX,KAIb7P,gBAAeA,KACN,CAAC,GAEViM,WAAUA,IACD,KAETswE,SAAU,CACR4lC,KAAM,GACNu+B,KAAM,GACN4xD,SAAU,GACV12G,KAAM,GACN09D,OAAQ,GACRwkF,SAAU,GACV3rH,SAAU,GACV74B,OAAQ,KAGZ,SAASi+N,KACP,MAAMr5T,EAA0B,qBAAb46E,SAA2BA,SAAW,CAAC,EAE1D,OADAyjB,GAAOr+F,EAAKm5T,IACLn5T,CACT,CACA,MAAMs5T,GAAY,CAChB1+O,SAAUu+O,GACVvoM,UAAW,CACTouB,UAAW,IAEb3gE,SAAU,CACR4lC,KAAM,GACNu+B,KAAM,GACN4xD,SAAU,GACV12G,KAAM,GACN09D,OAAQ,GACRwkF,SAAU,GACV3rH,SAAU,GACV74B,OAAQ,IAEVk/C,QAAS,CACP01I,YAAAA,GAAgB,EAChBI,SAAAA,GAAa,EACbE,EAAAA,GAAM,EACNnnH,IAAAA,GAAQ,GAEVowJ,YAAa,WACX,OAAOpgU,IACT,EACAkzF,gBAAAA,GAAoB,EACpBC,mBAAAA,GAAuB,EACvBkjO,iBAAgBA,KACP,CACLpsK,iBAAgBA,IACP,KAIbo2K,KAAAA,GAAS,EACTzkO,IAAAA,GAAQ,EACR0kO,OAAQ,CAAC,EACTxkU,UAAAA,GAAc,EACdV,YAAAA,GAAgB,EAChBw/T,WAAUA,KACD,CAAC,GAEV3iK,sBAAsB3hK,GACM,qBAAfwF,YACTxF,IACO,MAEFwF,WAAWxF,EAAU,GAE9B8hK,oBAAAA,CAAqB1hJ,GACO,qBAAf5a,YAGXV,aAAasb,EACf,GAEF,SAAS6pT,KACP,MAAM7+O,EAAwB,qBAAXxrF,OAAyBA,OAAS,CAAC,EAEtD,OADAgvG,GAAOxjB,EAAKy+O,IACLz+O,CACT,CCtHA,SAASqlN,GAASzwS,EAAUmiI,GAI1B,YAHc,IAAVA,IACFA,EAAQ,GAEH38H,WAAWxF,EAAUmiI,EAC9B,CACA,SAAS58B,KACP,OAAOD,KAAKC,KACd,CAeA,SAAS2kO,GAAa93T,EAAI0mR,QACX,IAATA,IACFA,EAAO,KAET,MAAMl5R,EAASqqU,KACf,IAAIr3K,EACAu3K,EACAC,EACJ,MAAMC,EAtBR,SAA0Bj4T,GACxB,MAAMxS,EAASqqU,KACf,IAAI5vO,EAUJ,OATIz6F,EAAOmgU,mBACT1lO,EAAQz6F,EAAOmgU,iBAAiB3tT,EAAI,QAEjCioF,GAASjoF,EAAGk4T,eACfjwO,EAAQjoF,EAAGk4T,cAERjwO,IACHA,EAAQjoF,EAAGioF,OAENA,CACT,CASmB0lO,CAAiB3tT,GA6BlC,OA5BIxS,EAAO2qU,iBACTJ,EAAeE,EAAS73K,WAAa63K,EAASG,gBAC1CL,EAAaxpU,MAAM,KAAKoH,OAAS,IACnCoiU,EAAeA,EAAaxpU,MAAM,MAAMof,KAAIyoE,GAAKA,EAAEv5E,QAAQ,IAAK,OAAMwO,KAAK,OAI7E2sT,EAAkB,IAAIxqU,EAAO2qU,gBAAiC,SAAjBJ,EAA0B,GAAKA,KAE5EC,EAAkBC,EAASI,cAAgBJ,EAASK,YAAcL,EAASM,aAAeN,EAASO,aAAeP,EAAS73K,WAAa63K,EAAS12K,iBAAiB,aAAa1kJ,QAAQ,aAAc,sBACrM2jJ,EAASw3K,EAAgBrhU,WAAWpI,MAAM,MAE/B,MAATm4R,IAE0BqxC,EAAxBvqU,EAAO2qU,gBAAgCH,EAAgBv3K,IAEhC,KAAlBD,EAAO7qJ,OAA8B2+H,WAAWksB,EAAO,KAE5ClsB,WAAWksB,EAAO,KAE3B,MAATkmI,IAE0BqxC,EAAxBvqU,EAAO2qU,gBAAgCH,EAAgBt3K,IAEhC,KAAlBF,EAAO7qJ,OAA8B2+H,WAAWksB,EAAO,KAE5ClsB,WAAWksB,EAAO,KAEjCu3K,GAAgB,CACzB,CACA,SAASx2L,GAASxrI,GAChB,MAAoB,kBAANA,GAAwB,OAANA,GAAcA,EAAEa,aAAkE,WAAnDH,OAAOC,UAAUC,SAASR,KAAKJ,GAAGzF,MAAM,GAAI,EAC7G,CAQA,SAASksG,KACP,MAAMwrD,EAAKvxJ,OAAO8K,UAAU5L,QAAU,OAAI/D,EAAY2P,UAAU,IAC1Dk3T,EAAW,CAAC,YAAa,cAAe,aAC9C,IAAK,IAAIpjU,EAAI,EAAGA,EAAIkM,UAAU5L,OAAQN,GAAK,EAAG,CAC5C,MAAMqjU,EAAarjU,EAAI,GAAKkM,UAAU5L,QAAUN,OAAIzD,EAAY2P,UAAUlM,GAC1E,QAAmBzD,IAAf8mU,GAA2C,OAAfA,IAZpBv7T,EAYmDu7T,IAV3C,qBAAXlrU,QAAwD,qBAAvBA,OAAOmrU,YAC1Cx7T,aAAgBw7T,YAElBx7T,IAA2B,IAAlBA,EAAKqL,UAAoC,KAAlBrL,EAAKqL,YAOkC,CAC1E,MAAMowT,EAAYniU,OAAO0M,KAAK1M,OAAOiiU,IAAaz1T,QAAO5S,GAAOooU,EAASroU,QAAQC,GAAO,IACxF,IAAK,IAAI49R,EAAY,EAAG72R,EAAMwhU,EAAUjjU,OAAQs4R,EAAY72R,EAAK62R,GAAa,EAAG,CAC/E,MAAM4qC,EAAUD,EAAU3qC,GACpBx7I,EAAOh8I,OAAO+rF,yBAAyBk2O,EAAYG,QAC5CjnU,IAAT6gJ,GAAsBA,EAAK/vD,aACzB6+C,GAASymB,EAAG6wK,KAAat3L,GAASm3L,EAAWG,IAC3CH,EAAWG,GAASC,WACtB9wK,EAAG6wK,GAAWH,EAAWG,GAEzBr8N,GAAOwrD,EAAG6wK,GAAUH,EAAWG,KAEvBt3L,GAASymB,EAAG6wK,KAAat3L,GAASm3L,EAAWG,KACvD7wK,EAAG6wK,GAAW,CAAC,EACXH,EAAWG,GAASC,WACtB9wK,EAAG6wK,GAAWH,EAAWG,GAEzBr8N,GAAOwrD,EAAG6wK,GAAUH,EAAWG,KAGjC7wK,EAAG6wK,GAAWH,EAAWG,GAG/B,CACF,CACF,CArCF,IAAgB17T,EAsCd,OAAO6qJ,CACT,CACA,SAAS+wK,GAAe/4T,EAAIg5T,EAASC,GACnCj5T,EAAGioF,MAAMC,YAAY8wO,EAASC,EAChC,CACA,SAASC,GAAqBj/T,GAC5B,IAAI,OACFk/T,EAAM,eACNC,EAAc,KACdC,GACEp/T,EACJ,MAAMzM,EAASqqU,KACTyB,GAAiBH,EAAOI,UAC9B,IACI9/N,EADAm1B,EAAY,KAEhB,MAAMyF,EAAW8kM,EAAOtoU,OAAO2oU,MAC/BL,EAAOM,UAAUxxO,MAAMyxO,eAAiB,OACxClsU,EAAOkiK,qBAAqBypK,EAAOQ,gBACnC,MAAMroJ,EAAM8nJ,EAAiBE,EAAgB,OAAS,OAChDM,EAAeA,CAACj5T,EAAS9E,IACd,SAARy1K,GAAkB3wK,GAAW9E,GAAkB,SAARy1K,GAAkB3wK,GAAW9E,EAEvEg+T,EAAUA,KACdpgO,GAAO,IAAIvG,MAAOmnC,UACA,OAAdzL,IACFA,EAAYn1B,GAEd,MAAM86E,EAAW35K,KAAK69E,IAAI79E,KAAKyhG,KAAK5C,EAAOm1B,GAAayF,EAAU,GAAI,GAChEylM,EAAe,GAAMl/T,KAAKm/T,IAAIxlJ,EAAW35K,KAAKo/T,IAAM,EAC1D,IAAIC,EAAkBX,EAAgBQ,GAAgBV,EAAiBE,GAOvE,GANIM,EAAaK,EAAiBb,KAChCa,EAAkBb,GAEpBD,EAAOM,UAAU9zM,SAAS,CACxB,CAAC0zM,GAAOY,IAENL,EAAaK,EAAiBb,GAUhC,OATAD,EAAOM,UAAUxxO,MAAMud,SAAW,SAClC2zN,EAAOM,UAAUxxO,MAAMyxO,eAAiB,GACxCtmU,YAAW,KACT+lU,EAAOM,UAAUxxO,MAAMud,SAAW,GAClC2zN,EAAOM,UAAU9zM,SAAS,CACxB,CAAC0zM,GAAOY,GACR,SAEJzsU,EAAOkiK,qBAAqBypK,EAAOQ,gBAGrCR,EAAOQ,eAAiBnsU,EAAO+hK,sBAAsBsqK,EAAQ,EAE/DA,GACF,CAIA,SAASK,GAAgBn3T,EAAS86I,QACf,IAAbA,IACFA,EAAW,IAEb,MAAMx5D,EAAW,IAAIthF,EAAQshF,UAI7B,OAHIthF,aAAmBo3T,iBACrB91O,EAAS5zF,QAAQsS,EAAQq3T,oBAEtBv8K,EAGEx5D,EAASphF,QAAOjD,GAAMA,EAAGwO,QAAQqvI,KAF/Bx5D,CAGX,CASA,SAASg2O,GAAYjqT,GACnB,IAEE,YADA1N,QAAQC,KAAKyN,EAEf,CAAE,MAAOtiB,GACP,CAEJ,CACA,SAAS6gB,GAAcizE,EAAK6iM,QACV,IAAZA,IACFA,EAAU,IAEZ,MAAMzkR,EAAK+4E,SAASpqE,cAAcizE,GAElC,OADA5hF,EAAGw+I,UAAUnmJ,OAAQ9H,MAAMC,QAAQi0R,GAAWA,EAtNhD,SAAyBA,GAIvB,YAHgB,IAAZA,IACFA,EAAU,IAELA,EAAQ51R,OAAON,MAAM,KAAK0U,QAAOsE,KAAOA,EAAE1Y,QACnD,CAiN0DyrU,CAAgB71C,IACjEzkR,CACT,CAqCA,SAASmwJ,GAAanwJ,EAAImrD,GAExB,OADe0sQ,KACDlK,iBAAiB3tT,EAAI,MAAMuhJ,iBAAiBp2F,EAC5D,CACA,SAASovQ,GAAav6T,GACpB,IACI3K,EADA6S,EAAQlI,EAEZ,GAAIkI,EAAO,CAGT,IAFA7S,EAAI,EAEuC,QAAnC6S,EAAQA,EAAMG,kBACG,IAAnBH,EAAMM,WAAgBnT,GAAK,GAEjC,OAAOA,CACT,CAEF,CACA,SAASmlU,GAAex6T,EAAI69I,GAC1B,MAAM48K,EAAU,GAChB,IAAIzxT,EAAShJ,EAAGsgJ,cAChB,KAAOt3I,GACD60I,EACE70I,EAAOwF,QAAQqvI,IAAW48K,EAAQhqU,KAAKuY,GAE3CyxT,EAAQhqU,KAAKuY,GAEfA,EAASA,EAAOs3I,cAElB,OAAOm6K,CACT,CAWA,SAASC,GAAiB16T,EAAItH,EAAMiiU,GAClC,MAAMntU,EAASqqU,KACf,OAAI8C,EACK36T,EAAY,UAATtH,EAAmB,cAAgB,gBAAkB47H,WAAW9mI,EAAOmgU,iBAAiB3tT,EAAI,MAAMuhJ,iBAA0B,UAAT7oJ,EAAmB,eAAiB,eAAiB47H,WAAW9mI,EAAOmgU,iBAAiB3tT,EAAI,MAAMuhJ,iBAA0B,UAAT7oJ,EAAmB,cAAgB,kBAE9QsH,EAAG8/I,WACZ,CACA,SAAS86K,GAAkB56T,GACzB,OAAQzP,MAAMC,QAAQwP,GAAMA,EAAK,CAACA,IAAKiD,QAAOhU,KAAOA,GACvD,CC7SA,IAAI4rU,GAgBAC,GAqDAt9K,GA5DJ,SAASu9K,KAIP,OAHKF,KACHA,GAVJ,WACE,MAAMrtU,EAASqqU,KACT9+O,EAAWy+O,KACjB,MAAO,CACLwD,aAAcjiP,EAAS7mF,iBAAmB6mF,EAAS7mF,gBAAgB+1F,OAAS,mBAAoBlP,EAAS7mF,gBAAgB+1F,MACzHgzO,SAAU,iBAAkBztU,GAAUA,EAAO0tU,eAAiBniP,aAAoBvrF,EAAO0tU,eAE7F,CAGcC,IAELN,EACT,CA6CA,SAASO,GAAUjrJ,GAOjB,YANkB,IAAdA,IACFA,EAAY,CAAC,GAEV2qJ,KACHA,GA/CJ,SAAoB9gU,GAClB,IAAI,UACFmjJ,QACY,IAAVnjJ,EAAmB,CAAC,EAAIA,EAC5B,MAAM6gU,EAAUE,KACVvtU,EAASqqU,KACT96K,EAAWvvJ,EAAOuhI,UAAUguB,SAC5Bl9D,EAAKs9D,GAAa3vJ,EAAOuhI,UAAUouB,UACnCk+K,EAAS,CACbC,KAAK,EACLC,SAAS,GAELC,EAAchuU,EAAOoqU,OAAO1gO,MAC5BukO,EAAejuU,EAAOoqU,OAAOzgO,OAC7BokO,EAAU17O,EAAG3J,MAAM,+BACzB,IAAIwlP,EAAO77O,EAAG3J,MAAM,wBACpB,MAAMylP,EAAO97O,EAAG3J,MAAM,2BAChB0lP,GAAUF,GAAQ77O,EAAG3J,MAAM,8BAC3Bs3I,EAAuB,UAAbzwE,EAChB,IAAI8+K,EAAqB,aAAb9+K,EAqBZ,OAjBK2+K,GAAQG,GAAShB,EAAQI,OADV,CAAC,YAAa,YAAa,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,YACxG7qU,QAAQ,GAAGorU,KAAeC,MAAmB,IAC9FC,EAAO77O,EAAG3J,MAAM,uBACXwlP,IAAMA,EAAO,CAAC,EAAG,EAAG,WACzBG,GAAQ,GAINN,IAAY/tG,IACd6tG,EAAOS,GAAK,UACZT,EAAOE,SAAU,IAEfG,GAAQE,GAAUD,KACpBN,EAAOS,GAAK,MACZT,EAAOC,KAAM,GAIRD,CACT,CAMmBU,CAAW5rJ,IAErB2qJ,EACT,CA4BA,SAASkB,KAIP,OAHKx+K,KACHA,GA3BJ,WACE,MAAMhwJ,EAASqqU,KACTwD,EAASD,KACf,IAAIa,GAAqB,EACzB,SAASC,IACP,MAAMr8O,EAAKryF,EAAOuhI,UAAUouB,UAAU7uJ,cACtC,OAAOuxF,EAAGzvF,QAAQ,WAAa,GAAKyvF,EAAGzvF,QAAQ,UAAY,GAAKyvF,EAAGzvF,QAAQ,WAAa,CAC1F,CACA,GAAI8rU,IAAY,CACd,MAAMr8O,EAAK3wF,OAAO1B,EAAOuhI,UAAUouB,WACnC,GAAIt9D,EAAG6B,SAAS,YAAa,CAC3B,MAAO07D,EAAOC,GAASx9D,EAAGtxF,MAAM,YAAY,GAAGA,MAAM,KAAK,GAAGA,MAAM,KAAKof,KAAI2yC,GAAOw7B,OAAOx7B,KAC1F27Q,EAAqB7+K,EAAQ,IAAgB,KAAVA,GAAgBC,EAAQ,CAC7D,CACF,CACA,MAAM8+K,EAAY,+CAA+CplU,KAAKvJ,EAAOuhI,UAAUouB,WACjFi/K,EAAkBF,IAExB,MAAO,CACLA,SAAUD,GAAsBG,EAChCH,qBACAI,UAJgBD,GAAmBD,GAAad,EAAOC,IAKvDa,YAEJ,CAGcG,IAEL9+K,EACT,CAiJA,IAAI++K,GAAgB,CAClBjqM,EAAAA,CAAGkqM,EAAQp5J,EAASpzE,GAClB,MAAM/W,EAAO3hF,KACb,IAAK2hF,EAAKwjP,iBAAmBxjP,EAAKyjP,UAAW,OAAOzjP,EACpD,GAAuB,oBAAZmqF,EAAwB,OAAOnqF,EAC1C,MAAMvlF,EAASs8F,EAAW,UAAY,OAKtC,OAJAwsO,EAAOjuU,MAAM,KAAK0B,SAAQ4pG,IACnB5gB,EAAKwjP,gBAAgB5iO,KAAQ5gB,EAAKwjP,gBAAgB5iO,GAAS,IAChE5gB,EAAKwjP,gBAAgB5iO,GAAOnmG,GAAQ0vK,EAAQ,IAEvCnqF,CACT,EACA0jP,IAAAA,CAAKH,EAAQp5J,EAASpzE,GACpB,MAAM/W,EAAO3hF,KACb,IAAK2hF,EAAKwjP,iBAAmBxjP,EAAKyjP,UAAW,OAAOzjP,EACpD,GAAuB,oBAAZmqF,EAAwB,OAAOnqF,EAC1C,SAAS2jP,IACP3jP,EAAKs5C,IAAIiqM,EAAQI,GACbA,EAAYC,uBACPD,EAAYC,eAErB,IAAK,IAAIp7L,EAAOlgI,UAAU5L,OAAQ+8H,EAAO,IAAIniI,MAAMkxI,GAAOE,EAAO,EAAGA,EAAOF,EAAME,IAC/EjP,EAAKiP,GAAQpgI,UAAUogI,GAEzByhC,EAAQh0K,MAAM6pF,EAAMy5C,EACtB,CAEA,OADAkqM,EAAYC,eAAiBz5J,EACtBnqF,EAAKq5C,GAAGkqM,EAAQI,EAAa5sO,EACtC,EACA8sO,KAAAA,CAAM15J,EAASpzE,GACb,MAAM/W,EAAO3hF,KACb,IAAK2hF,EAAKwjP,iBAAmBxjP,EAAKyjP,UAAW,OAAOzjP,EACpD,GAAuB,oBAAZmqF,EAAwB,OAAOnqF,EAC1C,MAAMvlF,EAASs8F,EAAW,UAAY,OAItC,OAHI/W,EAAK8jP,mBAAmB3sU,QAAQgzK,GAAW,GAC7CnqF,EAAK8jP,mBAAmBrpU,GAAQ0vK,GAE3BnqF,CACT,EACA+jP,MAAAA,CAAO55J,GACL,MAAMnqF,EAAO3hF,KACb,IAAK2hF,EAAKwjP,iBAAmBxjP,EAAKyjP,UAAW,OAAOzjP,EACpD,IAAKA,EAAK8jP,mBAAoB,OAAO9jP,EACrC,MAAM9oF,EAAQ8oF,EAAK8jP,mBAAmB3sU,QAAQgzK,GAI9C,OAHIjzK,GAAS,GACX8oF,EAAK8jP,mBAAmBr+M,OAAOvuH,EAAO,GAEjC8oF,CACT,EACAs5C,GAAAA,CAAIiqM,EAAQp5J,GACV,MAAMnqF,EAAO3hF,KACb,OAAK2hF,EAAKwjP,iBAAmBxjP,EAAKyjP,UAAkBzjP,EAC/CA,EAAKwjP,iBACVD,EAAOjuU,MAAM,KAAK0B,SAAQ4pG,IACD,qBAAZupE,EACTnqF,EAAKwjP,gBAAgB5iO,GAAS,GACrB5gB,EAAKwjP,gBAAgB5iO,IAC9B5gB,EAAKwjP,gBAAgB5iO,GAAO5pG,SAAQ,CAACwgJ,EAActgJ,MAC7CsgJ,IAAiB2yB,GAAW3yB,EAAaosL,gBAAkBpsL,EAAaosL,iBAAmBz5J,IAC7FnqF,EAAKwjP,gBAAgB5iO,GAAO6kB,OAAOvuH,EAAO,EAC5C,GAEJ,IAEK8oF,GAZ2BA,CAapC,EACAgkP,IAAAA,GACE,MAAMhkP,EAAO3hF,KACb,IAAK2hF,EAAKwjP,iBAAmBxjP,EAAKyjP,UAAW,OAAOzjP,EACpD,IAAKA,EAAKwjP,gBAAiB,OAAOxjP,EAClC,IAAIujP,EACAvoU,EACAm0G,EACJ,IAAK,IAAIgyC,EAAQ74I,UAAU5L,OAAQ+8H,EAAO,IAAIniI,MAAM6pJ,GAAQC,EAAQ,EAAGA,EAAQD,EAAOC,IACpF3nB,EAAK2nB,GAAS94I,UAAU84I,GAEH,kBAAZ3nB,EAAK,IAAmBniI,MAAMC,QAAQkiI,EAAK,KACpD8pM,EAAS9pM,EAAK,GACdz+H,EAAOy+H,EAAKpiI,MAAM,EAAGoiI,EAAK/8H,QAC1ByyG,EAAUnvB,IAEVujP,EAAS9pM,EAAK,GAAG8pM,OACjBvoU,EAAOy+H,EAAK,GAAGz+H,KACfm0G,EAAUsqB,EAAK,GAAGtqB,SAAWnvB,GAE/BhlF,EAAK6sG,QAAQsH,GAcb,OAboB73G,MAAMC,QAAQgsU,GAAUA,EAASA,EAAOjuU,MAAM,MACtD0B,SAAQ4pG,IACd5gB,EAAK8jP,oBAAsB9jP,EAAK8jP,mBAAmBpnU,QACrDsjF,EAAK8jP,mBAAmB9sU,SAAQwgJ,IAC9BA,EAAarhJ,MAAMg5G,EAAS,CAACvO,KAAU5lG,GAAM,IAG7CglF,EAAKwjP,iBAAmBxjP,EAAKwjP,gBAAgB5iO,IAC/C5gB,EAAKwjP,gBAAgB5iO,GAAO5pG,SAAQwgJ,IAClCA,EAAarhJ,MAAMg5G,EAASn0G,EAAK,GAErC,IAEKglF,CACT,GA6WF,MAAMikP,GAAuBA,CAACC,EAASC,EAAW70M,KAC5C60M,IAAcD,EAAQ3+K,UAAUhjD,SAAS+sB,GAC3C40M,EAAQ3+K,UAAUnmJ,IAAIkwH,IACZ60M,GAAaD,EAAQ3+K,UAAUhjD,SAAS+sB,IAClD40M,EAAQ3+K,UAAU32I,OAAO0gH,EAC3B,EA+GF,MAAM80M,GAAqBA,CAACF,EAASC,EAAW70M,KAC1C60M,IAAcD,EAAQ3+K,UAAUhjD,SAAS+sB,GAC3C40M,EAAQ3+K,UAAUnmJ,IAAIkwH,IACZ60M,GAAaD,EAAQ3+K,UAAUhjD,SAAS+sB,IAClD40M,EAAQ3+K,UAAU32I,OAAO0gH,EAC3B,EA2DF,MAAM+0M,GAAuBA,CAACnE,EAAQoE,KACpC,IAAKpE,GAAUA,EAAOuD,YAAcvD,EAAOtoU,OAAQ,OACnD,MACMssU,EAAUI,EAAQp0J,QADIgwJ,EAAOqE,UAAY,eAAiB,IAAIrE,EAAOtoU,OAAO4sU,cAElF,GAAIN,EAAS,CACX,IAAIO,EAASP,EAAQ1xK,cAAc,IAAI0tK,EAAOtoU,OAAO8sU,uBAChDD,GAAUvE,EAAOqE,YAChBL,EAAQS,WACVF,EAASP,EAAQS,WAAWnyK,cAAc,IAAI0tK,EAAOtoU,OAAO8sU,sBAG5DpuK,uBAAsB,KAChB4tK,EAAQS,aACVF,EAASP,EAAQS,WAAWnyK,cAAc,IAAI0tK,EAAOtoU,OAAO8sU,sBACxDD,GAAQA,EAAO71T,SACrB,KAIF61T,GAAQA,EAAO71T,QACrB,GAEIg2T,GAASA,CAAC1E,EAAQhpU,KACtB,IAAKgpU,EAAO2E,OAAO3tU,GAAQ,OAC3B,MAAMotU,EAAUpE,EAAO2E,OAAO3tU,GAAOs7J,cAAc,oBAC/C8xK,GAASA,EAAQnuT,gBAAgB,UAAU,EAE3Ck+K,GAAU6rI,IACd,IAAKA,GAAUA,EAAOuD,YAAcvD,EAAOtoU,OAAQ,OACnD,IAAIktU,EAAS5E,EAAOtoU,OAAOmtU,oBAC3B,MAAM5mU,EAAM+hU,EAAO2E,OAAOnoU,OAC1B,IAAKyB,IAAQ2mU,GAAUA,EAAS,EAAG,OACnCA,EAASnjU,KAAKyhG,IAAI0hO,EAAQ3mU,GAC1B,MAAM6mU,EAAgD,SAAhC9E,EAAOtoU,OAAOotU,cAA2B9E,EAAO+E,uBAAyBtjU,KAAK4+G,KAAK2/M,EAAOtoU,OAAOotU,eACjHE,EAAchF,EAAOgF,YAC3B,GAAIhF,EAAOtoU,OAAOutU,MAAQjF,EAAOtoU,OAAOutU,KAAKrxG,KAAO,EAAG,CACrD,MAAMsxG,EAAeF,EACfG,EAAiB,CAACD,EAAeN,GASvC,OARAO,EAAe7tU,QAAQF,MAAMuG,KAAK,CAChCnB,OAAQooU,IACPpwT,KAAI,CAACq0G,EAAG3sH,IACFgpU,EAAeJ,EAAgB5oU,UAExC8jU,EAAO2E,OAAO7tU,SAAQ,CAACktU,EAAS9nU,KAC1BipU,EAAe58O,SAASy7O,EAAQtqG,SAASgrG,GAAO1E,EAAQ9jU,EAAE,GAGlE,CACA,MAAMkpU,EAAuBJ,EAAcF,EAAgB,EAC3D,GAAI9E,EAAOtoU,OAAO2tU,QAAUrF,EAAOtoU,OAAOolM,KACxC,IAAK,IAAI5gM,EAAI8oU,EAAcJ,EAAQ1oU,GAAKkpU,EAAuBR,EAAQ1oU,GAAK,EAAG,CAC7E,MAAMopU,GAAappU,EAAI+B,EAAMA,GAAOA,GAChCqnU,EAAYN,GAAeM,EAAYF,IAAsBV,GAAO1E,EAAQsF,EAClF,MAEA,IAAK,IAAIppU,EAAIuF,KAAK69E,IAAI0lP,EAAcJ,EAAQ,GAAI1oU,GAAKuF,KAAKyhG,IAAIkiO,EAAuBR,EAAQ3mU,EAAM,GAAI/B,GAAK,EACtGA,IAAM8oU,IAAgB9oU,EAAIkpU,GAAwBlpU,EAAI8oU,IACxDN,GAAO1E,EAAQ9jU,EAGrB,EAyJF,IAAI+2K,GAAS,CACXsyJ,WApvBF,WACE,MAAMvF,EAAS7hU,KACf,IAAI4/F,EACAC,EACJ,MAAMn3F,EAAKm5T,EAAOn5T,GAEhBk3F,EADiC,qBAAxBiiO,EAAOtoU,OAAOqmG,OAAiD,OAAxBiiO,EAAOtoU,OAAOqmG,MACtDiiO,EAAOtoU,OAAOqmG,MAEdl3F,EAAGswJ,YAGXn5D,EADkC,qBAAzBgiO,EAAOtoU,OAAOsmG,QAAmD,OAAzBgiO,EAAOtoU,OAAOsmG,OACtDgiO,EAAOtoU,OAAOsmG,OAEdn3F,EAAGuwJ,aAEA,IAAVr5D,GAAeiiO,EAAOwF,gBAA6B,IAAXxnO,GAAgBgiO,EAAOyF,eAKnE1nO,EAAQA,EAAQtf,SAASu4E,GAAanwJ,EAAI,iBAAmB,EAAG,IAAM43E,SAASu4E,GAAanwJ,EAAI,kBAAoB,EAAG,IACvHm3F,EAASA,EAASvf,SAASu4E,GAAanwJ,EAAI,gBAAkB,EAAG,IAAM43E,SAASu4E,GAAanwJ,EAAI,mBAAqB,EAAG,IACrH87E,OAAO2D,MAAMyX,KAAQA,EAAQ,GAC7Bpb,OAAO2D,MAAM0X,KAASA,EAAS,GACnC1gG,OAAOmF,OAAOu9T,EAAQ,CACpBjiO,QACAC,SACAz+F,KAAMygU,EAAOwF,eAAiBznO,EAAQC,IAE1C,EAwtBE0nO,aAttBF,WACE,MAAM1F,EAAS7hU,KACf,SAASwnU,EAA0B3hU,EAAMioI,GACvC,OAAO9Q,WAAWn3H,EAAKokJ,iBAAiB43K,EAAO4F,kBAAkB35L,KAAW,EAC9E,CACA,MAAMv0I,EAASsoU,EAAOtoU,QAChB,UACJ4oU,EAAS,SACTuF,EACAtmU,KAAMumU,EACNC,aAAcC,EAAG,SACjBC,GACEjG,EACEkG,EAAYlG,EAAOmG,SAAWzuU,EAAOyuU,QAAQlxK,QAC7CmxK,EAAuBF,EAAYlG,EAAOmG,QAAQxB,OAAOnoU,OAASwjU,EAAO2E,OAAOnoU,OAChFmoU,EAAS5D,GAAgB8E,EAAU,IAAI7F,EAAOtoU,OAAO4sU,4BACrD+B,EAAeH,EAAYlG,EAAOmG,QAAQxB,OAAOnoU,OAASmoU,EAAOnoU,OACvE,IAAI8pU,EAAW,GACf,MAAMC,EAAa,GACbC,EAAkB,GACxB,IAAIC,EAAe/uU,EAAOgvU,mBACE,oBAAjBD,IACTA,EAAe/uU,EAAOgvU,mBAAmB1pU,KAAKgjU,IAEhD,IAAI2G,EAAcjvU,EAAOkvU,kBACE,oBAAhBD,IACTA,EAAcjvU,EAAOkvU,kBAAkB5pU,KAAKgjU,IAE9C,MAAM6G,EAAyB7G,EAAOsG,SAAS9pU,OACzCsqU,EAA2B9G,EAAOuG,WAAW/pU,OACnD,IAAIuqU,EAAervU,EAAOqvU,aACtBC,GAAiBP,EACjBQ,EAAgB,EAChBjwU,EAAQ,EACZ,GAA0B,qBAAf8uU,EACT,OAE0B,kBAAjBiB,GAA6BA,EAAa9vU,QAAQ,MAAQ,EACnE8vU,EAAe5rM,WAAW4rM,EAAarjU,QAAQ,IAAK,KAAO,IAAMoiU,EAChC,kBAAjBiB,IAChBA,EAAe5rM,WAAW4rM,IAE5B/G,EAAOkH,aAAeH,EAGtBpC,EAAO7tU,SAAQktU,IACTgC,EACFhC,EAAQl1O,MAAM03L,WAAa,GAE3Bw9C,EAAQl1O,MAAM2xN,YAAc,GAE9BujB,EAAQl1O,MAAMq4O,aAAe,GAC7BnD,EAAQl1O,MAAMs4O,UAAY,EAAE,IAI1B1vU,EAAO2vU,gBAAkB3vU,EAAO4vU,UAClC1H,GAAeU,EAAW,kCAAmC,IAC7DV,GAAeU,EAAW,iCAAkC,KAE9D,MAAMiH,EAAc7vU,EAAOutU,MAAQvtU,EAAOutU,KAAKrxG,KAAO,GAAKosG,EAAOiF,KAQlE,IAAIuC,EAPAD,EACFvH,EAAOiF,KAAKwC,WAAW9C,GACd3E,EAAOiF,MAChBjF,EAAOiF,KAAKyC,cAKd,MAAMC,EAAgD,SAAzBjwU,EAAOotU,eAA4BptU,EAAOsjM,aAAe19L,OAAO0M,KAAKtS,EAAOsjM,aAAalxL,QAAO5S,GACnE,qBAA1CQ,EAAOsjM,YAAY9jM,GAAK4tU,gBACrCtoU,OAAS,EACZ,IAAK,IAAIN,EAAI,EAAGA,EAAImqU,EAAcnqU,GAAK,EAAG,CAExC,IAAI0rU,EAKJ,GANAJ,EAAY,EAER7C,EAAOzoU,KAAI0rU,EAAQjD,EAAOzoU,IAC1BqrU,GACFvH,EAAOiF,KAAK4C,YAAY3rU,EAAG0rU,EAAOjD,IAEhCA,EAAOzoU,IAAyC,SAAnC86J,GAAa4wK,EAAO,WAArC,CAEA,GAA6B,SAAzBlwU,EAAOotU,cAA0B,CAC/B6C,IACFhD,EAAOzoU,GAAG4yF,MAAMkxO,EAAO4F,kBAAkB,UAAY,IAEvD,MAAMkC,EAActT,iBAAiBoT,GAC/BG,EAAmBH,EAAM94O,MAAMm4D,UAC/B+gL,EAAyBJ,EAAM94O,MAAMmwO,gBAO3C,GANI8I,IACFH,EAAM94O,MAAMm4D,UAAY,QAEtB+gL,IACFJ,EAAM94O,MAAMmwO,gBAAkB,QAE5BvnU,EAAOuwU,aACTT,EAAYxH,EAAOwF,eAAiBjE,GAAiBqG,EAAO,SAAS,GAAQrG,GAAiBqG,EAAO,UAAU,OAC1G,CAEL,MAAM7pO,EAAQ4nO,EAA0BmC,EAAa,SAC/CI,EAAcvC,EAA0BmC,EAAa,gBACrDK,EAAexC,EAA0BmC,EAAa,iBACtDthD,EAAam/C,EAA0BmC,EAAa,eACpDrnB,EAAcklB,EAA0BmC,EAAa,gBACrDM,EAAYN,EAAY1/K,iBAAiB,cAC/C,GAAIggL,GAA2B,eAAdA,EACfZ,EAAYzpO,EAAQyoL,EAAai6B,MAC5B,CACL,MAAM,YACJtpJ,EAAW,YACXxQ,GACEihL,EACJJ,EAAYzpO,EAAQmqO,EAAcC,EAAe3hD,EAAai6B,GAAe95J,EAAcwQ,EAC7F,CACF,CACI4wK,IACFH,EAAM94O,MAAMm4D,UAAY8gL,GAEtBC,IACFJ,EAAM94O,MAAMmwO,gBAAkB+I,GAE5BtwU,EAAOuwU,eAAcT,EAAY/lU,KAAK80H,MAAMixM,GAClD,MACEA,GAAa1B,GAAcpuU,EAAOotU,cAAgB,GAAKiC,GAAgBrvU,EAAOotU,cAC1EptU,EAAOuwU,eAAcT,EAAY/lU,KAAK80H,MAAMixM,IAC5C7C,EAAOzoU,KACTyoU,EAAOzoU,GAAG4yF,MAAMkxO,EAAO4F,kBAAkB,UAAY,GAAG4B,OAGxD7C,EAAOzoU,KACTyoU,EAAOzoU,GAAGmsU,gBAAkBb,GAE9BhB,EAAgBlvU,KAAKkwU,GACjB9vU,EAAO2vU,gBACTL,EAAgBA,EAAgBQ,EAAY,EAAIP,EAAgB,EAAIF,EAC9C,IAAlBE,GAA6B,IAAN/qU,IAAS8qU,EAAgBA,EAAgBlB,EAAa,EAAIiB,GAC3E,IAAN7qU,IAAS8qU,EAAgBA,EAAgBlB,EAAa,EAAIiB,GAC1DtlU,KAAK0lI,IAAI6/L,GAAiB,OAAUA,EAAgB,GACpDtvU,EAAOuwU,eAAcjB,EAAgBvlU,KAAK80H,MAAMywM,IAChDhwU,EAAQU,EAAO4wU,iBAAmB,GAAGhC,EAAShvU,KAAK0vU,GACvDT,EAAWjvU,KAAK0vU,KAEZtvU,EAAOuwU,eAAcjB,EAAgBvlU,KAAK80H,MAAMywM,KAC/ChwU,EAAQyK,KAAKyhG,IAAI88N,EAAOtoU,OAAO6wU,mBAAoBvxU,IAAUgpU,EAAOtoU,OAAO4wU,iBAAmB,GAAGhC,EAAShvU,KAAK0vU,GACpHT,EAAWjvU,KAAK0vU,GAChBA,EAAgBA,EAAgBQ,EAAYT,GAE9C/G,EAAOkH,aAAeM,EAAYT,EAClCE,EAAgBO,EAChBxwU,GAAS,CArE2D,CAsEtE,CAaA,GAZAgpU,EAAOkH,YAAczlU,KAAK69E,IAAI0gP,EAAOkH,YAAapB,GAAca,EAC5DX,GAAOC,IAA+B,UAAlBvuU,EAAO8wU,QAAwC,cAAlB9wU,EAAO8wU,UAC1DlI,EAAUxxO,MAAMiP,MAAQ,GAAGiiO,EAAOkH,YAAcH,OAE9CrvU,EAAO+wU,iBACTnI,EAAUxxO,MAAMkxO,EAAO4F,kBAAkB,UAAY,GAAG5F,EAAOkH,YAAcH,OAE3EQ,GACFvH,EAAOiF,KAAKyD,kBAAkBlB,EAAWlB,IAItC5uU,EAAO2vU,eAAgB,CAC1B,MAAMsB,EAAgB,GACtB,IAAK,IAAIzsU,EAAI,EAAGA,EAAIoqU,EAAS9pU,OAAQN,GAAK,EAAG,CAC3C,IAAI0sU,EAAiBtC,EAASpqU,GAC1BxE,EAAOuwU,eAAcW,EAAiBnnU,KAAK80H,MAAMqyM,IACjDtC,EAASpqU,IAAM8jU,EAAOkH,YAAcpB,GACtC6C,EAAcrxU,KAAKsxU,EAEvB,CACAtC,EAAWqC,EACPlnU,KAAK80H,MAAMypM,EAAOkH,YAAcpB,GAAcrkU,KAAK80H,MAAM+vM,EAASA,EAAS9pU,OAAS,IAAM,GAC5F8pU,EAAShvU,KAAK0oU,EAAOkH,YAAcpB,EAEvC,CACA,GAAII,GAAaxuU,EAAOolM,KAAM,CAC5B,MAAMv9L,EAAOinU,EAAgB,GAAKO,EAClC,GAAIrvU,EAAO4wU,eAAiB,EAAG,CAC7B,MAAMh/D,EAAS7nQ,KAAK4+G,MAAM2/M,EAAOmG,QAAQ0C,aAAe7I,EAAOmG,QAAQ2C,aAAepxU,EAAO4wU,gBACvFS,EAAYxpU,EAAO7H,EAAO4wU,eAChC,IAAK,IAAIpsU,EAAI,EAAGA,EAAIotQ,EAAQptQ,GAAK,EAC/BoqU,EAAShvU,KAAKgvU,EAASA,EAAS9pU,OAAS,GAAKusU,EAElD,CACA,IAAK,IAAI7sU,EAAI,EAAGA,EAAI8jU,EAAOmG,QAAQ0C,aAAe7I,EAAOmG,QAAQ2C,YAAa5sU,GAAK,EACnD,IAA1BxE,EAAO4wU,gBACThC,EAAShvU,KAAKgvU,EAASA,EAAS9pU,OAAS,GAAK+C,GAEhDgnU,EAAWjvU,KAAKivU,EAAWA,EAAW/pU,OAAS,GAAK+C,GACpDygU,EAAOkH,aAAe3nU,CAE1B,CAEA,GADwB,IAApB+mU,EAAS9pU,SAAc8pU,EAAW,CAAC,IAClB,IAAjBS,EAAoB,CACtB,MAAM7vU,EAAM8oU,EAAOwF,gBAAkBQ,EAAM,aAAehG,EAAO4F,kBAAkB,eACnFjB,EAAO76T,QAAO,CAAC++G,EAAGmgN,MACXtxU,EAAO4vU,UAAW5vU,EAAOolM,OAC1BksI,IAAerE,EAAOnoU,OAAS,IAIlC1F,SAAQktU,IACTA,EAAQl1O,MAAM53F,GAAO,GAAG6vU,KAAgB,GAE5C,CACA,GAAIrvU,EAAO2vU,gBAAkB3vU,EAAOuxU,qBAAsB,CACxD,IAAIC,EAAgB,EACpB1C,EAAgB1vU,SAAQqyU,IACtBD,GAAiBC,GAAkBpC,GAAgB,EAAE,IAEvDmC,GAAiBnC,EACjB,MAAMqC,EAAUF,EAAgBpD,EAAaoD,EAAgBpD,EAAa,EAC1EQ,EAAWA,EAAS9xT,KAAI60T,GAClBA,GAAQ,GAAW5C,EACnB4C,EAAOD,EAAgBA,EAAUzC,EAC9B0C,GAEX,CACA,GAAI3xU,EAAO4xU,yBAA0B,CACnC,IAAIJ,EAAgB,EACpB1C,EAAgB1vU,SAAQqyU,IACtBD,GAAiBC,GAAkBpC,GAAgB,EAAE,IAEvDmC,GAAiBnC,EACjB,MAAMwC,GAAc7xU,EAAOgvU,oBAAsB,IAAMhvU,EAAOkvU,mBAAqB,GACnF,GAAIsC,EAAgBK,EAAazD,EAAY,CAC3C,MAAM0D,GAAmB1D,EAAaoD,EAAgBK,GAAc,EACpEjD,EAASxvU,SAAQ,CAACuyU,EAAMI,KACtBnD,EAASmD,GAAaJ,EAAOG,CAAe,IAE9CjD,EAAWzvU,SAAQ,CAACuyU,EAAMI,KACxBlD,EAAWkD,GAAaJ,EAAOG,CAAe,GAElD,CACF,CAOA,GANAlsU,OAAOmF,OAAOu9T,EAAQ,CACpB2E,SACA2B,WACAC,aACAC,oBAEE9uU,EAAO2vU,gBAAkB3vU,EAAO4vU,UAAY5vU,EAAOuxU,qBAAsB,CAC3ErJ,GAAeU,EAAW,mCAAuCgG,EAAS,GAAb,MAC7D1G,GAAeU,EAAW,iCAAqCN,EAAOzgU,KAAO,EAAIinU,EAAgBA,EAAgBhqU,OAAS,GAAK,EAAnE,MAC5D,MAAMktU,GAAiB1J,EAAOsG,SAAS,GACjCqD,GAAmB3J,EAAOuG,WAAW,GAC3CvG,EAAOsG,SAAWtG,EAAOsG,SAAS9xT,KAAIrB,GAAKA,EAAIu2T,IAC/C1J,EAAOuG,WAAavG,EAAOuG,WAAW/xT,KAAIrB,GAAKA,EAAIw2T,GACrD,CAeA,GAdItD,IAAiBD,GACnBpG,EAAO8D,KAAK,sBAEVwC,EAAS9pU,SAAWqqU,IAClB7G,EAAOtoU,OAAOkyU,eAAe5J,EAAO6J,gBACxC7J,EAAO8D,KAAK,yBAEVyC,EAAW/pU,SAAWsqU,GACxB9G,EAAO8D,KAAK,0BAEVpsU,EAAOoyU,qBACT9J,EAAO+J,qBAET/J,EAAO8D,KAAK,kBACPoC,IAAcxuU,EAAO4vU,UAA8B,UAAlB5vU,EAAO8wU,QAAwC,SAAlB9wU,EAAO8wU,QAAoB,CAC5F,MAAMwB,EAAsB,GAAGtyU,EAAOuyU,wCAChCC,EAA6BlK,EAAOn5T,GAAGw+I,UAAUhjD,SAAS2nO,GAC5D3D,GAAgB3uU,EAAOyyU,wBACpBD,GAA4BlK,EAAOn5T,GAAGw+I,UAAUnmJ,IAAI8qU,GAChDE,GACTlK,EAAOn5T,GAAGw+I,UAAU32I,OAAOs7T,EAE/B,CACF,EAscEI,iBApcF,SAA0B/J,GACxB,MAAML,EAAS7hU,KACTksU,EAAe,GACfnE,EAAYlG,EAAOmG,SAAWnG,EAAOtoU,OAAOyuU,QAAQlxK,QAC1D,IACI/4J,EADAouU,EAAY,EAEK,kBAAVjK,EACTL,EAAOuK,cAAclK,IACF,IAAVA,GACTL,EAAOuK,cAAcvK,EAAOtoU,OAAO2oU,OAErC,MAAMmK,EAAkBxzU,GAClBkvU,EACKlG,EAAO2E,OAAO3E,EAAOyK,oBAAoBzzU,IAE3CgpU,EAAO2E,OAAO3tU,GAGvB,GAAoC,SAAhCgpU,EAAOtoU,OAAOotU,eAA4B9E,EAAOtoU,OAAOotU,cAAgB,EAC1E,GAAI9E,EAAOtoU,OAAO2vU,gBACfrH,EAAO0K,eAAiB,IAAI5zU,SAAQ8wU,IACnCyC,EAAa/yU,KAAKswU,EAAM,SAG1B,IAAK1rU,EAAI,EAAGA,EAAIuF,KAAK4+G,KAAK2/M,EAAOtoU,OAAOotU,eAAgB5oU,GAAK,EAAG,CAC9D,MAAMlF,EAAQgpU,EAAOgF,YAAc9oU,EACnC,GAAIlF,EAAQgpU,EAAO2E,OAAOnoU,SAAW0pU,EAAW,MAChDmE,EAAa/yU,KAAKkzU,EAAgBxzU,GACpC,MAGFqzU,EAAa/yU,KAAKkzU,EAAgBxK,EAAOgF,cAI3C,IAAK9oU,EAAI,EAAGA,EAAImuU,EAAa7tU,OAAQN,GAAK,EACxC,GAA+B,qBAApBmuU,EAAanuU,GAAoB,CAC1C,MAAM8hG,EAASqsO,EAAanuU,GAAGwwH,aAC/B49M,EAAYtsO,EAASssO,EAAYtsO,EAASssO,CAC5C,EAIEA,GAA2B,IAAdA,KAAiBtK,EAAOM,UAAUxxO,MAAMkP,OAAS,GAAGssO,MACvE,EAyZEP,mBAvZF,WACE,MAAM/J,EAAS7hU,KACTwmU,EAAS3E,EAAO2E,OAEhBgG,EAAc3K,EAAOqE,UAAYrE,EAAOwF,eAAiBxF,EAAOM,UAAUz5K,WAAam5K,EAAOM,UAAUx5K,UAAY,EAC1H,IAAK,IAAI5qJ,EAAI,EAAGA,EAAIyoU,EAAOnoU,OAAQN,GAAK,EACtCyoU,EAAOzoU,GAAG0uU,mBAAqB5K,EAAOwF,eAAiBb,EAAOzoU,GAAG2qJ,WAAa89K,EAAOzoU,GAAG4qJ,WAAa6jL,EAAc3K,EAAO6K,uBAE9H,EAgZEC,qBAvYF,SAA8B1K,QACV,IAAdA,IACFA,EAAYjiU,MAAQA,KAAKiiU,WAAa,GAExC,MAAMJ,EAAS7hU,KACTzG,EAASsoU,EAAOtoU,QAChB,OACJitU,EACAoB,aAAcC,EAAG,SACjBM,GACEtG,EACJ,GAAsB,IAAlB2E,EAAOnoU,OAAc,OACkB,qBAAhCmoU,EAAO,GAAGiG,mBAAmC5K,EAAO+J,qBAC/D,IAAIgB,GAAgB3K,EAChB4F,IAAK+E,EAAe3K,GACxBJ,EAAOgL,qBAAuB,GAC9BhL,EAAO0K,cAAgB,GACvB,IAAI3D,EAAervU,EAAOqvU,aACE,kBAAjBA,GAA6BA,EAAa9vU,QAAQ,MAAQ,EACnE8vU,EAAe5rM,WAAW4rM,EAAarjU,QAAQ,IAAK,KAAO,IAAMs8T,EAAOzgU,KACvC,kBAAjBwnU,IAChBA,EAAe5rM,WAAW4rM,IAE5B,IAAK,IAAI7qU,EAAI,EAAGA,EAAIyoU,EAAOnoU,OAAQN,GAAK,EAAG,CACzC,MAAM0rU,EAAQjD,EAAOzoU,GACrB,IAAI+uU,EAAcrD,EAAMgD,kBACpBlzU,EAAO4vU,SAAW5vU,EAAO2vU,iBAC3B4D,GAAetG,EAAO,GAAGiG,mBAE3B,MAAMM,GAAiBH,GAAgBrzU,EAAO2vU,eAAiBrH,EAAOmL,eAAiB,GAAKF,IAAgBrD,EAAMS,gBAAkBtB,GAC9HqE,GAAyBL,EAAezE,EAAS,IAAM5uU,EAAO2vU,eAAiBrH,EAAOmL,eAAiB,GAAKF,IAAgBrD,EAAMS,gBAAkBtB,GACpJsE,IAAgBN,EAAeE,GAC/BK,EAAaD,EAAcrL,EAAOwG,gBAAgBtqU,GAClDqvU,EAAiBF,GAAe,GAAKA,GAAerL,EAAOzgU,KAAOygU,EAAOwG,gBAAgBtqU,GACzFo7J,EAAY+zK,GAAe,GAAKA,EAAcrL,EAAOzgU,KAAO,GAAK+rU,EAAa,GAAKA,GAActL,EAAOzgU,MAAQ8rU,GAAe,GAAKC,GAActL,EAAOzgU,KAC3J+3J,IACF0oK,EAAO0K,cAAcpzU,KAAKswU,GAC1B5H,EAAOgL,qBAAqB1zU,KAAK4E,IAEnC6nU,GAAqB6D,EAAOtwK,EAAW5/J,EAAO8zU,mBAC9CzH,GAAqB6D,EAAO2D,EAAgB7zU,EAAO+zU,wBACnD7D,EAAMxsJ,SAAW4qJ,GAAOkF,EAAgBA,EACxCtD,EAAM8D,iBAAmB1F,GAAOoF,EAAwBA,CAC1D,CACF,EA4VEO,eA1VF,SAAwBvL,GACtB,MAAMJ,EAAS7hU,KACf,GAAyB,qBAAdiiU,EAA2B,CACpC,MAAMwL,EAAa5L,EAAO+F,cAAgB,EAAI,EAE9C3F,EAAYJ,GAAUA,EAAOI,WAAaJ,EAAOI,UAAYwL,GAAc,CAC7E,CACA,MAAMl0U,EAASsoU,EAAOtoU,OAChBm0U,EAAiB7L,EAAO8L,eAAiB9L,EAAOmL,eACtD,IAAI,SACF/vJ,EAAQ,YACR2wJ,EAAW,MACXC,EAAK,aACLC,GACEjM,EACJ,MAAMkM,EAAeH,EACfI,EAASH,EACf,GAAuB,IAAnBH,EACFzwJ,EAAW,EACX2wJ,GAAc,EACdC,GAAQ,MACH,CACL5wJ,GAAYglJ,EAAYJ,EAAOmL,gBAAkBU,EACjD,MAAMO,EAAqB3qU,KAAK0lI,IAAIi5L,EAAYJ,EAAOmL,gBAAkB,EACnEkB,EAAe5qU,KAAK0lI,IAAIi5L,EAAYJ,EAAO8L,gBAAkB,EACnEC,EAAcK,GAAsBhxJ,GAAY,EAChD4wJ,EAAQK,GAAgBjxJ,GAAY,EAChCgxJ,IAAoBhxJ,EAAW,GAC/BixJ,IAAcjxJ,EAAW,EAC/B,CACA,GAAI1jL,EAAOolM,KAAM,CACf,MAAMwvI,EAAkBtM,EAAOyK,oBAAoB,GAC7C8B,EAAiBvM,EAAOyK,oBAAoBzK,EAAO2E,OAAOnoU,OAAS,GACnEgwU,EAAsBxM,EAAOuG,WAAW+F,GACxCG,EAAqBzM,EAAOuG,WAAWgG,GACvCG,EAAe1M,EAAOuG,WAAWvG,EAAOuG,WAAW/pU,OAAS,GAC5DmwU,EAAelrU,KAAK0lI,IAAIi5L,GAE5B6L,EADEU,GAAgBH,GACFG,EAAeH,GAAuBE,GAEtCC,EAAeD,EAAeD,GAAsBC,EAElET,EAAe,IAAGA,GAAgB,EACxC,CACA3uU,OAAOmF,OAAOu9T,EAAQ,CACpB5kJ,WACA6wJ,eACAF,cACAC,WAEEt0U,EAAOoyU,qBAAuBpyU,EAAO2vU,gBAAkB3vU,EAAOk1U,aAAY5M,EAAO8K,qBAAqB1K,GACtG2L,IAAgBG,GAClBlM,EAAO8D,KAAK,yBAEVkI,IAAUG,GACZnM,EAAO8D,KAAK,oBAEVoI,IAAiBH,GAAeI,IAAWH,IAC7ChM,EAAO8D,KAAK,YAEd9D,EAAO8D,KAAK,WAAY1oJ,EAC1B,EA8REyxJ,oBArRF,WACE,MAAM7M,EAAS7hU,MACT,OACJwmU,EAAM,OACNjtU,EAAM,SACNmuU,EAAQ,YACRb,GACEhF,EACEkG,EAAYlG,EAAOmG,SAAWzuU,EAAOyuU,QAAQlxK,QAC7CsyK,EAAcvH,EAAOiF,MAAQvtU,EAAOutU,MAAQvtU,EAAOutU,KAAKrxG,KAAO,EAC/Dk5G,EAAmBpoL,GAChBq8K,GAAgB8E,EAAU,IAAInuU,EAAO4sU,aAAa5/K,kBAAyBA,KAAY,GAEhG,IAAIqoL,EACAC,EACAC,EACJ,GAAI/G,EACF,GAAIxuU,EAAOolM,KAAM,CACf,IAAIksI,EAAahE,EAAchF,EAAOmG,QAAQ0C,aAC1CG,EAAa,IAAGA,EAAahJ,EAAOmG,QAAQxB,OAAOnoU,OAASwsU,GAC5DA,GAAchJ,EAAOmG,QAAQxB,OAAOnoU,SAAQwsU,GAAchJ,EAAOmG,QAAQxB,OAAOnoU,QACpFuwU,EAAcD,EAAiB,6BAA6B9D,MAC9D,MACE+D,EAAcD,EAAiB,6BAA6B9H,YAG1DuC,GACFwF,EAAcpI,EAAO76T,QAAOk6T,GAAWA,EAAQtqG,SAAWsrG,IAAa,GACvEiI,EAAYtI,EAAO76T,QAAOk6T,GAAWA,EAAQtqG,SAAWsrG,EAAc,IAAG,GACzEgI,EAAYrI,EAAO76T,QAAOk6T,GAAWA,EAAQtqG,SAAWsrG,EAAc,IAAG,IAEzE+H,EAAcpI,EAAOK,GAGrB+H,IACGxF,IAEH0F,EDrnBN,SAAwBpmU,EAAI69I,GAC1B,MAAMwoL,EAAU,GAChB,KAAOrmU,EAAGsmU,oBAAoB,CAC5B,MAAMlwU,EAAO4J,EAAGsmU,mBACZzoL,EACEznJ,EAAKoY,QAAQqvI,IAAWwoL,EAAQ51U,KAAK2F,GACpCiwU,EAAQ51U,KAAK2F,GACpB4J,EAAK5J,CACP,CACA,OAAOiwU,CACT,CC2mBkBE,CAAeL,EAAa,IAAIr1U,EAAO4sU,4BAA4B,GAC3E5sU,EAAOolM,OAASmwI,IAClBA,EAAYtI,EAAO,IAIrBqI,EDtoBN,SAAwBnmU,EAAI69I,GAC1B,MAAM2oL,EAAU,GAChB,KAAOxmU,EAAGymU,wBAAwB,CAChC,MAAMl5L,EAAOvtI,EAAGymU,uBACZ5oL,EACEtQ,EAAK/+H,QAAQqvI,IAAW2oL,EAAQ/1U,KAAK88I,GACpCi5L,EAAQ/1U,KAAK88I,GACpBvtI,EAAKutI,CACP,CACA,OAAOi5L,CACT,CC4nBkBE,CAAeR,EAAa,IAAIr1U,EAAO4sU,4BAA4B,GAC3E5sU,EAAOolM,MAAuB,KAAdkwI,IAClBA,EAAYrI,EAAOA,EAAOnoU,OAAS,MAIzCmoU,EAAO7tU,SAAQktU,IACbE,GAAmBF,EAASA,IAAY+I,EAAar1U,EAAO81U,kBAC5DtJ,GAAmBF,EAASA,IAAYiJ,EAAWv1U,EAAO+1U,gBAC1DvJ,GAAmBF,EAASA,IAAYgJ,EAAWt1U,EAAOg2U,eAAe,IAE3E1N,EAAO2N,mBACT,EA+NEC,kBAtIF,SAA2BC,GACzB,MAAM7N,EAAS7hU,KACTiiU,EAAYJ,EAAO+F,aAAe/F,EAAOI,WAAaJ,EAAOI,WAC7D,SACJkG,EAAQ,OACR5uU,EACAstU,YAAa8I,EACbxI,UAAWyI,EACXtE,UAAWuE,GACThO,EACJ,IACIyJ,EADAzE,EAAc6I,EAElB,MAAMI,EAAsBC,IAC1B,IAAI5I,EAAY4I,EAASlO,EAAOmG,QAAQ0C,aAOxC,OANIvD,EAAY,IACdA,EAAYtF,EAAOmG,QAAQxB,OAAOnoU,OAAS8oU,GAEzCA,GAAatF,EAAOmG,QAAQxB,OAAOnoU,SACrC8oU,GAAatF,EAAOmG,QAAQxB,OAAOnoU,QAE9B8oU,CAAS,EAKlB,GAH2B,qBAAhBN,IACTA,EA/CJ,SAAmChF,GACjC,MAAM,WACJuG,EAAU,OACV7uU,GACEsoU,EACEI,EAAYJ,EAAO+F,aAAe/F,EAAOI,WAAaJ,EAAOI,UACnE,IAAI4E,EACJ,IAAK,IAAI9oU,EAAI,EAAGA,EAAIqqU,EAAW/pU,OAAQN,GAAK,EACT,qBAAtBqqU,EAAWrqU,EAAI,GACpBkkU,GAAamG,EAAWrqU,IAAMkkU,EAAYmG,EAAWrqU,EAAI,IAAMqqU,EAAWrqU,EAAI,GAAKqqU,EAAWrqU,IAAM,EACtG8oU,EAAc9oU,EACLkkU,GAAamG,EAAWrqU,IAAMkkU,EAAYmG,EAAWrqU,EAAI,KAClE8oU,EAAc9oU,EAAI,GAEXkkU,GAAamG,EAAWrqU,KACjC8oU,EAAc9oU,GAOlB,OAHIxE,EAAOy2U,sBACLnJ,EAAc,GAA4B,qBAAhBA,KAA6BA,EAAc,GAEpEA,CACT,CAwBkBoJ,CAA0BpO,IAEtCsG,EAASrvU,QAAQmpU,IAAc,EACjCqJ,EAAYnD,EAASrvU,QAAQmpU,OACxB,CACL,MAAMz+L,EAAOlgI,KAAKyhG,IAAIxrG,EAAO6wU,mBAAoBvD,GACjDyE,EAAY9nM,EAAOlgI,KAAK80H,OAAOyuM,EAAcrjM,GAAQjqI,EAAO4wU,eAC9D,CAEA,GADImB,GAAanD,EAAS9pU,SAAQitU,EAAYnD,EAAS9pU,OAAS,GAC5DwoU,IAAgB8I,IAAkB9N,EAAOtoU,OAAOolM,KAKlD,YAJI2sI,IAAcuE,IAChBhO,EAAOyJ,UAAYA,EACnBzJ,EAAO8D,KAAK,qBAIhB,GAAIkB,IAAgB8I,GAAiB9N,EAAOtoU,OAAOolM,MAAQkjI,EAAOmG,SAAWnG,EAAOtoU,OAAOyuU,QAAQlxK,QAEjG,YADA+qK,EAAOsF,UAAY2I,EAAoBjJ,IAGzC,MAAMuC,EAAcvH,EAAOiF,MAAQvtU,EAAOutU,MAAQvtU,EAAOutU,KAAKrxG,KAAO,EAGrE,IAAI0xG,EACJ,GAAItF,EAAOmG,SAAWzuU,EAAOyuU,QAAQlxK,SAAWv9J,EAAOolM,KACrDwoI,EAAY2I,EAAoBjJ,QAC3B,GAAIuC,EAAa,CACtB,MAAM8G,EAAqBrO,EAAO2E,OAAO76T,QAAOk6T,GAAWA,EAAQtqG,SAAWsrG,IAAa,GAC3F,IAAIsJ,EAAmB7vP,SAAS4vP,EAAmBt5T,aAAa,2BAA4B,IACxF4tE,OAAO2D,MAAMgoP,KACfA,EAAmB7sU,KAAK69E,IAAI0gP,EAAO2E,OAAO1tU,QAAQo3U,GAAqB,IAEzE/I,EAAY7jU,KAAK80H,MAAM+3M,EAAmB52U,EAAOutU,KAAKrxG,KACxD,MAAO,GAAIosG,EAAO2E,OAAOK,GAAc,CACrC,MAAMgE,EAAahJ,EAAO2E,OAAOK,GAAajwT,aAAa,2BAEzDuwT,EADE0D,EACUvqP,SAASuqP,EAAY,IAErBhE,CAEhB,MACEM,EAAYN,EAEd1nU,OAAOmF,OAAOu9T,EAAQ,CACpBgO,oBACAvE,YACAsE,oBACAzI,YACAwI,gBACA9I,gBAEEhF,EAAOlhC,aACT3qG,GAAQ6rI,GAEVA,EAAO8D,KAAK,qBACZ9D,EAAO8D,KAAK,oBACR9D,EAAOlhC,aAAekhC,EAAOtoU,OAAO62U,sBAClCR,IAAsBzI,GACxBtF,EAAO8D,KAAK,mBAEd9D,EAAO8D,KAAK,eAEhB,EAkDE0K,mBAhDF,SAA4B3nU,EAAI6wH,GAC9B,MAAMsoM,EAAS7hU,KACTzG,EAASsoU,EAAOtoU,OACtB,IAAIkwU,EAAQ/gU,EAAGmpK,QAAQ,IAAIt4K,EAAO4sU,6BAC7BsD,GAAS5H,EAAOqE,WAAa3sM,GAAQA,EAAKl7H,OAAS,GAAKk7H,EAAKnvC,SAAS1hF,IACzE,IAAI6wH,EAAKvgI,MAAMugI,EAAKzgI,QAAQ4P,GAAM,EAAG6wH,EAAKl7H,SAAS1F,SAAQ23U,KACpD7G,GAAS6G,EAAOp5T,SAAWo5T,EAAOp5T,QAAQ,IAAI3d,EAAO4sU,8BACxDsD,EAAQ6G,EACV,IAGJ,IACIzF,EADA0F,GAAa,EAEjB,GAAI9G,EACF,IAAK,IAAI1rU,EAAI,EAAGA,EAAI8jU,EAAO2E,OAAOnoU,OAAQN,GAAK,EAC7C,GAAI8jU,EAAO2E,OAAOzoU,KAAO0rU,EAAO,CAC9B8G,GAAa,EACb1F,EAAa9sU,EACb,KACF,CAGJ,IAAI0rU,IAAS8G,EAUX,OAFA1O,EAAO2O,kBAAel2U,OACtBunU,EAAO4O,kBAAen2U,GARtBunU,EAAO2O,aAAe/G,EAClB5H,EAAOmG,SAAWnG,EAAOtoU,OAAOyuU,QAAQlxK,QAC1C+qK,EAAO4O,aAAenwP,SAASmpP,EAAM7yT,aAAa,2BAA4B,IAE9EirT,EAAO4O,aAAe5F,EAOtBtxU,EAAOm3U,0BAA+Cp2U,IAAxBunU,EAAO4O,cAA8B5O,EAAO4O,eAAiB5O,EAAOgF,aACpGhF,EAAO6O,qBAEX,GA+KA,IAAIzO,GAAY,CACdzB,aAlKF,SAA4BpxC,QACb,IAATA,IACFA,EAAOpvR,KAAKqnU,eAAiB,IAAM,KAErC,MACM,OACJ9tU,EACAquU,aAAcC,EAAG,UACjB5F,EAAS,UACTE,GALaniU,KAOf,GAAIzG,EAAOo3U,iBACT,OAAO9I,GAAO5F,EAAYA,EAE5B,GAAI1oU,EAAO4vU,QACT,OAAOlH,EAET,IAAI2O,EAAmBpQ,GAAa2B,EAAW/yC,GAG/C,OAFAwhD,GAde5wU,KAcY0sU,wBACvB7E,IAAK+I,GAAoBA,GACtBA,GAAoB,CAC7B,EA8IEC,aA5IF,SAAsB5O,EAAW6O,GAC/B,MAAMjP,EAAS7hU,MAEb4nU,aAAcC,EAAG,OACjBtuU,EAAM,UACN4oU,EAAS,SACTllJ,GACE4kJ,EACJ,IA0BIkP,EA1BAvoO,EAAI,EACJqH,EAAI,EAEJgyN,EAAOwF,eACT7+N,EAAIq/N,GAAO5F,EAAYA,EAEvBpyN,EAAIoyN,EAEF1oU,EAAOuwU,eACTthO,EAAIllG,KAAK80H,MAAM5vB,GACfqH,EAAIvsG,KAAK80H,MAAMvoB,IAEjBgyN,EAAOmP,kBAAoBnP,EAAOI,UAClCJ,EAAOI,UAAYJ,EAAOwF,eAAiB7+N,EAAIqH,EAC3Ct2G,EAAO4vU,QACThH,EAAUN,EAAOwF,eAAiB,aAAe,aAAexF,EAAOwF,gBAAkB7+N,GAAKqH,EACpFt2G,EAAOo3U,mBACb9O,EAAOwF,eACT7+N,GAAKq5N,EAAO6K,wBAEZ78N,GAAKgyN,EAAO6K,wBAEdvK,EAAUxxO,MAAMm4D,UAAY,eAAetgD,QAAQqH,aAKrD,MAAM69N,EAAiB7L,EAAO8L,eAAiB9L,EAAOmL,eAEpD+D,EADqB,IAAnBrD,EACY,GAECzL,EAAYJ,EAAOmL,gBAAkBU,EAElDqD,IAAgB9zJ,GAClB4kJ,EAAO2L,eAAevL,GAExBJ,EAAO8D,KAAK,eAAgB9D,EAAOI,UAAW6O,EAChD,EAgGE9D,aA9FF,WACE,OAAQhtU,KAAKmoU,SAAS,EACxB,EA6FEwF,aA3FF,WACE,OAAQ3tU,KAAKmoU,SAASnoU,KAAKmoU,SAAS9pU,OAAS,EAC/C,EA0FE4yU,YAxFF,SAAqBhP,EAAWC,EAAOgP,EAAcC,EAAiBhuH,QAClD,IAAd8+G,IACFA,EAAY,QAEA,IAAVC,IACFA,EAAQliU,KAAKzG,OAAO2oU,YAED,IAAjBgP,IACFA,GAAe,QAEO,IAApBC,IACFA,GAAkB,GAEpB,MAAMtP,EAAS7hU,MACT,OACJzG,EAAM,UACN4oU,GACEN,EACJ,GAAIA,EAAOuP,WAAa73U,EAAO83U,+BAC7B,OAAO,EAET,MAAMrE,EAAenL,EAAOmL,eACtBW,EAAe9L,EAAO8L,eAC5B,IAAI2D,EAKJ,GAJiDA,EAA7CH,GAAmBlP,EAAY+K,EAA6BA,EAAsBmE,GAAmBlP,EAAY0L,EAA6BA,EAAiC1L,EAGnLJ,EAAO2L,eAAe8D,GAClB/3U,EAAO4vU,QAAS,CAClB,MAAMoI,EAAM1P,EAAOwF,eACnB,GAAc,IAAVnF,EACFC,EAAUoP,EAAM,aAAe,cAAgBD,MAC1C,CACL,IAAKzP,EAAO0B,QAAQG,aAMlB,OALA9B,GAAqB,CACnBC,SACAC,gBAAiBwP,EACjBvP,KAAMwP,EAAM,OAAS,SAEhB,EAETpP,EAAU9zM,SAAS,CACjB,CAACkjN,EAAM,OAAS,QAASD,EACzBE,SAAU,UAEd,CACA,OAAO,CACT,CAiCA,OAhCc,IAAVtP,GACFL,EAAOuK,cAAc,GACrBvK,EAAOgP,aAAaS,GAChBJ,IACFrP,EAAO8D,KAAK,wBAAyBzD,EAAO/+G,GAC5C0+G,EAAO8D,KAAK,oBAGd9D,EAAOuK,cAAclK,GACrBL,EAAOgP,aAAaS,GAChBJ,IACFrP,EAAO8D,KAAK,wBAAyBzD,EAAO/+G,GAC5C0+G,EAAO8D,KAAK,oBAET9D,EAAOuP,YACVvP,EAAOuP,WAAY,EACdvP,EAAO4P,oCACV5P,EAAO4P,kCAAoC,SAAuB95U,GAC3DkqU,IAAUA,EAAOuD,WAClBztU,EAAE4M,SAAWvE,OACjB6hU,EAAOM,UAAUhvO,oBAAoB,gBAAiB0uO,EAAO4P,mCAC7D5P,EAAO4P,kCAAoC,YACpC5P,EAAO4P,kCACd5P,EAAOuP,WAAY,EACfF,GACFrP,EAAO8D,KAAK,iBAEhB,GAEF9D,EAAOM,UAAUjvO,iBAAiB,gBAAiB2uO,EAAO4P,sCAGvD,CACT,GAmBA,SAASC,GAAe/uU,GACtB,IAAI,OACFk/T,EAAM,aACNqP,EAAY,UACZjgK,EAAS,KACT0sC,GACEh7M,EACJ,MAAM,YACJkkU,EAAW,cACX8I,GACE9N,EACJ,IAAI7nJ,EAAM/I,EAKV,GAJK+I,IAC8BA,EAA7B6sJ,EAAc8I,EAAqB,OAAgB9I,EAAc8I,EAAqB,OAAkB,SAE9G9N,EAAO8D,KAAK,aAAahoH,KACrBuzH,GAAgBrK,IAAgB8I,EAAe,CACjD,GAAY,UAAR31J,EAEF,YADA6nJ,EAAO8D,KAAK,uBAAuBhoH,KAGrCkkH,EAAO8D,KAAK,wBAAwBhoH,KACxB,SAAR3jC,EACF6nJ,EAAO8D,KAAK,sBAAsBhoH,KAElCkkH,EAAO8D,KAAK,sBAAsBhoH,IAEtC,CACF,CAyCA,IAAInkH,GAAa,CACf4yO,cA/EF,SAAuBrvM,EAAU+zM,GAC/B,MAAMjP,EAAS7hU,KACV6hU,EAAOtoU,OAAO4vU,UACjBtH,EAAOM,UAAUxxO,MAAMghP,mBAAqB,GAAG50M,MAC/C8kM,EAAOM,UAAUxxO,MAAMihP,gBAA+B,IAAb70M,EAAiB,MAAQ,IAEpE8kM,EAAO8D,KAAK,gBAAiB5oM,EAAU+zM,EACzC,EAyEEe,gBAzCF,SAAyBX,EAAcjgK,QAChB,IAAjBigK,IACFA,GAAe,GAEjB,MAAMrP,EAAS7hU,MACT,OACJzG,GACEsoU,EACAtoU,EAAO4vU,UACP5vU,EAAOk1U,YACT5M,EAAOoK,mBAETyF,GAAe,CACb7P,SACAqP,eACAjgK,YACA0sC,KAAM,UAEV,EAwBEm0H,cAtBF,SAAuBZ,EAAcjgK,QACd,IAAjBigK,IACFA,GAAe,GAEjB,MAAMrP,EAAS7hU,MACT,OACJzG,GACEsoU,EACJA,EAAOuP,WAAY,EACf73U,EAAO4vU,UACXtH,EAAOuK,cAAc,GACrBsF,GAAe,CACb7P,SACAqP,eACAjgK,YACA0sC,KAAM,QAEV,GAibA,IAAI8rH,GAAQ,CACVsI,QA1aF,SAAiBl5U,EAAOqpU,EAAOgP,EAAc/tH,EAAU9/D,QACvC,IAAVxqJ,IACFA,EAAQ,QAEW,IAAjBq4U,IACFA,GAAe,GAEI,kBAAVr4U,IACTA,EAAQynF,SAASznF,EAAO,KAE1B,MAAMgpU,EAAS7hU,KACf,IAAI6qU,EAAahyU,EACbgyU,EAAa,IAAGA,EAAa,GACjC,MAAM,OACJtxU,EAAM,SACN4uU,EAAQ,WACRC,EAAU,cACVuH,EAAa,YACb9I,EACAe,aAAcC,EAAG,UACjB1F,EAAS,QACTrrK,GACE+qK,EACJ,IAAK/qK,IAAYqsD,IAAa9/D,GAAWw+K,EAAOuD,WAAavD,EAAOuP,WAAa73U,EAAO83U,+BACtF,OAAO,EAEY,qBAAVnP,IACTA,EAAQL,EAAOtoU,OAAO2oU,OAExB,MAAM1+L,EAAOlgI,KAAKyhG,IAAI88N,EAAOtoU,OAAO6wU,mBAAoBS,GACxD,IAAIS,EAAY9nM,EAAOlgI,KAAK80H,OAAOyyM,EAAarnM,GAAQq+L,EAAOtoU,OAAO4wU,gBAClEmB,GAAanD,EAAS9pU,SAAQitU,EAAYnD,EAAS9pU,OAAS,GAChE,MAAM4jU,GAAakG,EAASmD,GAE5B,GAAI/xU,EAAOy2U,oBACT,IAAK,IAAIjyU,EAAI,EAAGA,EAAIqqU,EAAW/pU,OAAQN,GAAK,EAAG,CAC7C,MAAMi0U,GAAuB1uU,KAAK80H,MAAkB,IAAZ6pM,GAClCgQ,EAAiB3uU,KAAK80H,MAAsB,IAAhBgwM,EAAWrqU,IACvCm0U,EAAqB5uU,KAAK80H,MAA0B,IAApBgwM,EAAWrqU,EAAI,IACpB,qBAAtBqqU,EAAWrqU,EAAI,GACpBi0U,GAAuBC,GAAkBD,EAAsBE,GAAsBA,EAAqBD,GAAkB,EAC9HpH,EAAa9sU,EACJi0U,GAAuBC,GAAkBD,EAAsBE,IACxErH,EAAa9sU,EAAI,GAEVi0U,GAAuBC,IAChCpH,EAAa9sU,EAEjB,CAGF,GAAI8jU,EAAOlhC,aAAekqC,IAAehE,EAAa,CACpD,IAAKhF,EAAOsQ,iBAAmBtK,EAAM5F,EAAYJ,EAAOI,WAAaA,EAAYJ,EAAOmL,eAAiB/K,EAAYJ,EAAOI,WAAaA,EAAYJ,EAAOmL,gBAC1J,OAAO,EAET,IAAKnL,EAAOuQ,gBAAkBnQ,EAAYJ,EAAOI,WAAaA,EAAYJ,EAAO8L,iBAC1E9G,GAAe,KAAOgE,EACzB,OAAO,CAGb,CAOA,IAAI55J,EANA45J,KAAgB8E,GAAiB,IAAMuB,GACzCrP,EAAO8D,KAAK,0BAId9D,EAAO2L,eAAevL,GAEQhxJ,EAA1B45J,EAAahE,EAAyB,OAAgBgE,EAAahE,EAAyB,OAAwB,QAGxH,MAAMkB,EAAYlG,EAAOmG,SAAWnG,EAAOtoU,OAAOyuU,QAAQlxK,QAG1D,KAFyBixK,GAAa1kL,KAEZwkL,IAAQ5F,IAAcJ,EAAOI,YAAc4F,GAAO5F,IAAcJ,EAAOI,WAc/F,OAbAJ,EAAO4N,kBAAkB5E,GAErBtxU,EAAOk1U,YACT5M,EAAOoK,mBAETpK,EAAO6M,sBACe,UAAlBn1U,EAAO8wU,QACTxI,EAAOgP,aAAa5O,GAEJ,UAAdhxJ,IACF4wJ,EAAOgQ,gBAAgBX,EAAcjgK,GACrC4wJ,EAAOiQ,cAAcZ,EAAcjgK,KAE9B,EAET,GAAI13K,EAAO4vU,QAAS,CAClB,MAAMoI,EAAM1P,EAAOwF,eACbh7T,EAAIw7T,EAAM5F,GAAaA,EAC7B,GAAc,IAAVC,EACE6F,IACFlG,EAAOM,UAAUxxO,MAAMyxO,eAAiB,OACxCP,EAAOwQ,mBAAoB,GAEzBtK,IAAclG,EAAOyQ,2BAA6BzQ,EAAOtoU,OAAOg5U,aAAe,GACjF1Q,EAAOyQ,2BAA4B,EACnCr6K,uBAAsB,KACpBkqK,EAAUoP,EAAM,aAAe,aAAellU,CAAC,KAGjD81T,EAAUoP,EAAM,aAAe,aAAellU,EAE5C07T,GACF9vK,uBAAsB,KACpB4pK,EAAOM,UAAUxxO,MAAMyxO,eAAiB,GACxCP,EAAOwQ,mBAAoB,CAAK,QAG/B,CACL,IAAKxQ,EAAO0B,QAAQG,aAMlB,OALA9B,GAAqB,CACnBC,SACAC,eAAgBz1T,EAChB01T,KAAMwP,EAAM,OAAS,SAEhB,EAETpP,EAAU9zM,SAAS,CACjB,CAACkjN,EAAM,OAAS,OAAQllU,EACxBmlU,SAAU,UAEd,CACA,OAAO,CACT,CAuBA,OAtBA3P,EAAOuK,cAAclK,GACrBL,EAAOgP,aAAa5O,GACpBJ,EAAO4N,kBAAkB5E,GACzBhJ,EAAO6M,sBACP7M,EAAO8D,KAAK,wBAAyBzD,EAAO/+G,GAC5C0+G,EAAOgQ,gBAAgBX,EAAcjgK,GACvB,IAAVixJ,EACFL,EAAOiQ,cAAcZ,EAAcjgK,GACzB4wJ,EAAOuP,YACjBvP,EAAOuP,WAAY,EACdvP,EAAO2Q,gCACV3Q,EAAO2Q,8BAAgC,SAAuB76U,GACvDkqU,IAAUA,EAAOuD,WAClBztU,EAAE4M,SAAWvE,OACjB6hU,EAAOM,UAAUhvO,oBAAoB,gBAAiB0uO,EAAO2Q,+BAC7D3Q,EAAO2Q,8BAAgC,YAChC3Q,EAAO2Q,8BACd3Q,EAAOiQ,cAAcZ,EAAcjgK,GACrC,GAEF4wJ,EAAOM,UAAUjvO,iBAAiB,gBAAiB2uO,EAAO2Q,iCAErD,CACT,EAoREC,YAlRF,SAAqB55U,EAAOqpU,EAAOgP,EAAc/tH,GAO/C,QANc,IAAVtqN,IACFA,EAAQ,QAEW,IAAjBq4U,IACFA,GAAe,GAEI,kBAAVr4U,EAAoB,CAE7BA,EADsBynF,SAASznF,EAAO,GAExC,CACA,MAAMgpU,EAAS7hU,KACf,GAAI6hU,EAAOuD,UAAW,OACD,qBAAVlD,IACTA,EAAQL,EAAOtoU,OAAO2oU,OAExB,MAAMkH,EAAcvH,EAAOiF,MAAQjF,EAAOtoU,OAAOutU,MAAQjF,EAAOtoU,OAAOutU,KAAKrxG,KAAO,EACnF,IAAIzf,EAAWn9M,EACf,GAAIgpU,EAAOtoU,OAAOolM,KAChB,GAAIkjI,EAAOmG,SAAWnG,EAAOtoU,OAAOyuU,QAAQlxK,QAE1Ck/C,GAAsB6rH,EAAOmG,QAAQ0C,iBAChC,CACL,IAAIgI,EACJ,GAAItJ,EAAa,CACf,MAAMyB,EAAa70H,EAAW6rH,EAAOtoU,OAAOutU,KAAKrxG,KACjDi9G,EAAmB7Q,EAAO2E,OAAO76T,QAAOk6T,GAA6D,EAAlDA,EAAQjvT,aAAa,6BAAmCi0T,IAAY,GAAGtvG,MAC5H,MACEm3G,EAAmB7Q,EAAOyK,oBAAoBt2H,GAEhD,MAAM28H,EAAOvJ,EAAc9lU,KAAK4+G,KAAK2/M,EAAO2E,OAAOnoU,OAASwjU,EAAOtoU,OAAOutU,KAAKrxG,MAAQosG,EAAO2E,OAAOnoU,QAC/F,eACJ6qU,GACErH,EAAOtoU,OACX,IAAIotU,EAAgB9E,EAAOtoU,OAAOotU,cACZ,SAAlBA,EACFA,EAAgB9E,EAAO+E,wBAEvBD,EAAgBrjU,KAAK4+G,KAAK8a,WAAW6kM,EAAOtoU,OAAOotU,cAAe,KAC9DuC,GAAkBvC,EAAgB,IAAM,IAC1CA,GAAgC,IAGpC,IAAIiM,EAAcD,EAAOD,EAAmB/L,EAO5C,GANIuC,IACF0J,EAAcA,GAAeF,EAAmBpvU,KAAK4+G,KAAKykN,EAAgB,IAExExjH,GAAY+lH,GAAkD,SAAhCrH,EAAOtoU,OAAOotU,gBAA6ByC,IAC3EwJ,GAAc,GAEZA,EAAa,CACf,MAAM3hK,EAAYi4J,EAAiBwJ,EAAmB7Q,EAAOgF,YAAc,OAAS,OAAS6L,EAAmB7Q,EAAOgF,YAAc,EAAIhF,EAAOtoU,OAAOotU,cAAgB,OAAS,OAChL9E,EAAOgR,QAAQ,CACb5hK,YACA8gK,SAAS,EACT5B,iBAAgC,SAAdl/J,EAAuByhK,EAAmB,EAAIA,EAAmBC,EAAO,EAC1FG,eAA8B,SAAd7hK,EAAuB4wJ,EAAOsF,eAAY7sU,GAE9D,CACA,GAAI8uU,EAAa,CACf,MAAMyB,EAAa70H,EAAW6rH,EAAOtoU,OAAOutU,KAAKrxG,KACjDzf,EAAW6rH,EAAO2E,OAAO76T,QAAOk6T,GAA6D,EAAlDA,EAAQjvT,aAAa,6BAAmCi0T,IAAY,GAAGtvG,MACpH,MACEvlB,EAAW6rH,EAAOyK,oBAAoBt2H,EAE1C,CAKF,OAHA/9C,uBAAsB,KACpB4pK,EAAOkQ,QAAQ/7H,EAAUksH,EAAOgP,EAAc/tH,EAAS,IAElD0+G,CACT,EA4MEkR,UAzMF,SAAmB7Q,EAAOgP,EAAc/tH,QACjB,IAAjB+tH,IACFA,GAAe,GAEjB,MAAMrP,EAAS7hU,MACT,QACJ82J,EAAO,OACPv9J,EAAM,UACN63U,GACEvP,EACJ,IAAK/qK,GAAW+qK,EAAOuD,UAAW,OAAOvD,EACpB,qBAAVK,IACTA,EAAQL,EAAOtoU,OAAO2oU,OAExB,IAAI8Q,EAAWz5U,EAAO4wU,eACO,SAAzB5wU,EAAOotU,eAAsD,IAA1BptU,EAAO4wU,gBAAwB5wU,EAAO05U,qBAC3ED,EAAW1vU,KAAK69E,IAAI0gP,EAAO+E,qBAAqB,WAAW,GAAO,IAEpE,MAAMsM,EAAYrR,EAAOgF,YAActtU,EAAO6wU,mBAAqB,EAAI4I,EACjEjL,EAAYlG,EAAOmG,SAAWzuU,EAAOyuU,QAAQlxK,QACnD,GAAIv9J,EAAOolM,KAAM,CACf,GAAIyyI,IAAcrJ,GAAaxuU,EAAO45U,oBAAqB,OAAO,EAMlE,GALAtR,EAAOgR,QAAQ,CACb5hK,UAAW,SAGb4wJ,EAAOuR,YAAcvR,EAAOM,UAAUz1K,WAClCm1K,EAAOgF,cAAgBhF,EAAO2E,OAAOnoU,OAAS,GAAK9E,EAAO4vU,QAI5D,OAHAlxK,uBAAsB,KACpB4pK,EAAOkQ,QAAQlQ,EAAOgF,YAAcqM,EAAWhR,EAAOgP,EAAc/tH,EAAS,KAExE,CAEX,CACA,OAAI5pN,EAAO2tU,QAAUrF,EAAOgM,MACnBhM,EAAOkQ,QAAQ,EAAG7P,EAAOgP,EAAc/tH,GAEzC0+G,EAAOkQ,QAAQlQ,EAAOgF,YAAcqM,EAAWhR,EAAOgP,EAAc/tH,EAC7E,EAoKEkwH,UAjKF,SAAmBnR,EAAOgP,EAAc/tH,QACjB,IAAjB+tH,IACFA,GAAe,GAEjB,MAAMrP,EAAS7hU,MACT,OACJzG,EAAM,SACN4uU,EAAQ,WACRC,EAAU,aACVR,EAAY,QACZ9wK,EAAO,UACPs6K,GACEvP,EACJ,IAAK/qK,GAAW+qK,EAAOuD,UAAW,OAAOvD,EACpB,qBAAVK,IACTA,EAAQL,EAAOtoU,OAAO2oU,OAExB,MAAM6F,EAAYlG,EAAOmG,SAAWzuU,EAAOyuU,QAAQlxK,QACnD,GAAIv9J,EAAOolM,KAAM,CACf,GAAIyyI,IAAcrJ,GAAaxuU,EAAO45U,oBAAqB,OAAO,EAClEtR,EAAOgR,QAAQ,CACb5hK,UAAW,SAGb4wJ,EAAOuR,YAAcvR,EAAOM,UAAUz1K,UACxC,CAEA,SAAS1kJ,EAAUu9H,GACjB,OAAIA,EAAM,GAAWjiI,KAAK80H,MAAM90H,KAAK0lI,IAAIzD,IAClCjiI,KAAK80H,MAAMmN,EACpB,CACA,MAAMysM,EAAsBhqU,EALV4/T,EAAe/F,EAAOI,WAAaJ,EAAOI,WAMtDqR,EAAqBnL,EAAS9xT,KAAIkvH,GAAOv9H,EAAUu9H,KACzD,IAAIguM,EAAWpL,EAASmL,EAAmBx6U,QAAQk5U,GAAuB,GAC1E,GAAwB,qBAAbuB,GAA4Bh6U,EAAO4vU,QAAS,CACrD,IAAIqK,EACJrL,EAASxvU,SAAQ,CAACuyU,EAAMI,KAClB0G,GAAuB9G,IAEzBsI,EAAgBlI,EAClB,IAE2B,qBAAlBkI,IACTD,EAAWpL,EAASqL,EAAgB,EAAIA,EAAgB,EAAIA,GAEhE,CACA,IAAIC,EAAY,EAShB,GARwB,qBAAbF,IACTE,EAAYrL,EAAWtvU,QAAQy6U,GAC3BE,EAAY,IAAGA,EAAY5R,EAAOgF,YAAc,GACvB,SAAzBttU,EAAOotU,eAAsD,IAA1BptU,EAAO4wU,gBAAwB5wU,EAAO05U,qBAC3EQ,EAAYA,EAAY5R,EAAO+E,qBAAqB,YAAY,GAAQ,EACxE6M,EAAYnwU,KAAK69E,IAAIsyP,EAAW,KAGhCl6U,EAAO2tU,QAAUrF,EAAO+L,YAAa,CACvC,MAAM99T,EAAY+xT,EAAOtoU,OAAOyuU,SAAWnG,EAAOtoU,OAAOyuU,QAAQlxK,SAAW+qK,EAAOmG,QAAUnG,EAAOmG,QAAQxB,OAAOnoU,OAAS,EAAIwjU,EAAO2E,OAAOnoU,OAAS,EACvJ,OAAOwjU,EAAOkQ,QAAQjiU,EAAWoyT,EAAOgP,EAAc/tH,EACxD,CAAO,OAAI5pN,EAAOolM,MAA+B,IAAvBkjI,EAAOgF,aAAqBttU,EAAO4vU,SAC3DlxK,uBAAsB,KACpB4pK,EAAOkQ,QAAQ0B,EAAWvR,EAAOgP,EAAc/tH,EAAS,KAEnD,GAEF0+G,EAAOkQ,QAAQ0B,EAAWvR,EAAOgP,EAAc/tH,EACxD,EAiGEuwH,WA9FF,SAAoBxR,EAAOgP,EAAc/tH,QAClB,IAAjB+tH,IACFA,GAAe,GAEjB,MAAMrP,EAAS7hU,KACf,IAAI6hU,EAAOuD,UAIX,MAHqB,qBAAVlD,IACTA,EAAQL,EAAOtoU,OAAO2oU,OAEjBL,EAAOkQ,QAAQlQ,EAAOgF,YAAa3E,EAAOgP,EAAc/tH,EACjE,EAqFEwwH,eAlFF,SAAwBzR,EAAOgP,EAAc/tH,EAAUouF,QAChC,IAAjB2/B,IACFA,GAAe,QAEC,IAAd3/B,IACFA,EAAY,IAEd,MAAMswB,EAAS7hU,KACf,GAAI6hU,EAAOuD,UAAW,OACD,qBAAVlD,IACTA,EAAQL,EAAOtoU,OAAO2oU,OAExB,IAAIrpU,EAAQgpU,EAAOgF,YACnB,MAAMrjM,EAAOlgI,KAAKyhG,IAAI88N,EAAOtoU,OAAO6wU,mBAAoBvxU,GAClDyyU,EAAY9nM,EAAOlgI,KAAK80H,OAAOv/H,EAAQ2qI,GAAQq+L,EAAOtoU,OAAO4wU,gBAC7DlI,EAAYJ,EAAO+F,aAAe/F,EAAOI,WAAaJ,EAAOI,UACnE,GAAIA,GAAaJ,EAAOsG,SAASmD,GAAY,CAG3C,MAAMsI,EAAc/R,EAAOsG,SAASmD,GAEhCrJ,EAAY2R,GADC/R,EAAOsG,SAASmD,EAAY,GACHsI,GAAeriC,IACvD14S,GAASgpU,EAAOtoU,OAAO4wU,eAE3B,KAAO,CAGL,MAAMoJ,EAAW1R,EAAOsG,SAASmD,EAAY,GAEzCrJ,EAAYsR,IADI1R,EAAOsG,SAASmD,GACOiI,GAAYhiC,IACrD14S,GAASgpU,EAAOtoU,OAAO4wU,eAE3B,CAGA,OAFAtxU,EAAQyK,KAAK69E,IAAItoF,EAAO,GACxBA,EAAQyK,KAAKyhG,IAAIlsG,EAAOgpU,EAAOuG,WAAW/pU,OAAS,GAC5CwjU,EAAOkQ,QAAQl5U,EAAOqpU,EAAOgP,EAAc/tH,EACpD,EA+CEutH,oBA7CF,WACE,MAAM7O,EAAS7hU,KACf,GAAI6hU,EAAOuD,UAAW,OACtB,MAAM,OACJ7rU,EAAM,SACNmuU,GACE7F,EACE8E,EAAyC,SAAzBptU,EAAOotU,cAA2B9E,EAAO+E,uBAAyBrtU,EAAOotU,cAC/F,IACIQ,EADA0M,EAAehS,EAAO4O,aAE1B,MAAMqD,EAAgBjS,EAAOqE,UAAY,eAAiB,IAAI3sU,EAAO4sU,aACrE,GAAI5sU,EAAOolM,KAAM,CACf,GAAIkjI,EAAOuP,UAAW,OACtBjK,EAAY7mP,SAASuhP,EAAO2O,aAAa55T,aAAa,2BAA4B,IAC9Erd,EAAO2vU,eACL2K,EAAehS,EAAOkS,aAAepN,EAAgB,GAAKkN,EAAehS,EAAO2E,OAAOnoU,OAASwjU,EAAOkS,aAAepN,EAAgB,GACxI9E,EAAOgR,UACPgB,EAAehS,EAAOmS,cAAcpR,GAAgB8E,EAAU,GAAGoM,8BAA0C3M,OAAe,IAC1HpgC,IAAS,KACP86B,EAAOkQ,QAAQ8B,EAAa,KAG9BhS,EAAOkQ,QAAQ8B,GAERA,EAAehS,EAAO2E,OAAOnoU,OAASsoU,GAC/C9E,EAAOgR,UACPgB,EAAehS,EAAOmS,cAAcpR,GAAgB8E,EAAU,GAAGoM,8BAA0C3M,OAAe,IAC1HpgC,IAAS,KACP86B,EAAOkQ,QAAQ8B,EAAa,KAG9BhS,EAAOkQ,QAAQ8B,EAEnB,MACEhS,EAAOkQ,QAAQ8B,EAEnB,GAoSA,IAAIl1I,GAAO,CACTs1I,WAzRF,SAAoBnB,GAClB,MAAMjR,EAAS7hU,MACT,OACJzG,EAAM,SACNmuU,GACE7F,EACJ,IAAKtoU,EAAOolM,MAAQkjI,EAAOmG,SAAWnG,EAAOtoU,OAAOyuU,QAAQlxK,QAAS,OACrE,MAAMwyK,EAAaA,KACF1G,GAAgB8E,EAAU,IAAInuU,EAAO4sU,4BAC7CxtU,SAAQ,CAAC+P,EAAI7P,KAClB6P,EAAGmP,aAAa,0BAA2Bhf,EAAM,GACjD,EAEEuwU,EAAcvH,EAAOiF,MAAQvtU,EAAOutU,MAAQvtU,EAAOutU,KAAKrxG,KAAO,EAC/D00G,EAAiB5wU,EAAO4wU,gBAAkBf,EAAc7vU,EAAOutU,KAAKrxG,KAAO,GAC3Ey+G,EAAkBrS,EAAO2E,OAAOnoU,OAAS8rU,IAAmB,EAC5DgK,EAAiB/K,GAAevH,EAAO2E,OAAOnoU,OAAS9E,EAAOutU,KAAKrxG,OAAS,EAC5E2+G,EAAiBC,IACrB,IAAK,IAAIt2U,EAAI,EAAGA,EAAIs2U,EAAgBt2U,GAAK,EAAG,CAC1C,MAAM8nU,EAAUhE,EAAOqE,UAAY7uT,GAAc,eAAgB,CAAC9d,EAAO+6U,kBAAoBj9T,GAAc,MAAO,CAAC9d,EAAO4sU,WAAY5sU,EAAO+6U,kBAC7IzS,EAAO6F,SAAS1hJ,OAAO6/I,EACzB,GAEF,GAAIqO,EAAiB,CACnB,GAAI36U,EAAOg7U,mBAAoB,CAE7BH,EADoBjK,EAAiBtI,EAAO2E,OAAOnoU,OAAS8rU,GAE5DtI,EAAO2S,eACP3S,EAAO0F,cACT,MACExE,GAAY,mLAEduG,GACF,MAAO,GAAI6K,EAAgB,CACzB,GAAI56U,EAAOg7U,mBAAoB,CAE7BH,EADoB76U,EAAOutU,KAAKrxG,KAAOosG,EAAO2E,OAAOnoU,OAAS9E,EAAOutU,KAAKrxG,MAE1EosG,EAAO2S,eACP3S,EAAO0F,cACT,MACExE,GAAY,8KAEduG,GACF,MACEA,IAEFzH,EAAOgR,QAAQ,CACbC,iBACA7hK,UAAW13K,EAAO2vU,oBAAiB5uU,EAAY,QAEnD,EAwOEu4U,QAtOF,SAAiBnwU,GACf,IAAI,eACFowU,EAAc,QACdf,GAAU,EAAI,UACd9gK,EAAS,aACT4/J,EAAY,iBACZV,EAAgB,aAChBW,EAAY,aACZ2D,QACY,IAAV/xU,EAAmB,CAAC,EAAIA,EAC5B,MAAMm/T,EAAS7hU,KACf,IAAK6hU,EAAOtoU,OAAOolM,KAAM,OACzBkjI,EAAO8D,KAAK,iBACZ,MAAM,OACJa,EAAM,eACN4L,EAAc,eACdD,EAAc,SACdzK,EAAQ,OACRnuU,GACEsoU,GACE,eACJqH,GACE3vU,EAGJ,GAFAsoU,EAAOuQ,gBAAiB,EACxBvQ,EAAOsQ,gBAAiB,EACpBtQ,EAAOmG,SAAWzuU,EAAOyuU,QAAQlxK,QAanC,OAZIi7K,IACGx4U,EAAO2vU,gBAAuC,IAArBrH,EAAOyJ,UAE1B/xU,EAAO2vU,gBAAkBrH,EAAOyJ,UAAY/xU,EAAOotU,cAC5D9E,EAAOkQ,QAAQlQ,EAAOmG,QAAQxB,OAAOnoU,OAASwjU,EAAOyJ,UAAW,GAAG,GAAO,GACjEzJ,EAAOyJ,YAAczJ,EAAOsG,SAAS9pU,OAAS,GACvDwjU,EAAOkQ,QAAQlQ,EAAOmG,QAAQ0C,aAAc,GAAG,GAAO,GAJtD7I,EAAOkQ,QAAQlQ,EAAOmG,QAAQxB,OAAOnoU,OAAQ,GAAG,GAAO,IAO3DwjU,EAAOuQ,eAAiBA,EACxBvQ,EAAOsQ,eAAiBA,OACxBtQ,EAAO8D,KAAK,WAGd,IAAIgB,EAAgBptU,EAAOotU,cACL,SAAlBA,EACFA,EAAgB9E,EAAO+E,wBAEvBD,EAAgBrjU,KAAK4+G,KAAK8a,WAAWzjI,EAAOotU,cAAe,KACvDuC,GAAkBvC,EAAgB,IAAM,IAC1CA,GAAgC,IAGpC,MAAMwD,EAAiB5wU,EAAO05U,mBAAqBtM,EAAgBptU,EAAO4wU,eAC1E,IAAI4J,EAAe5J,EACf4J,EAAe5J,IAAmB,IACpC4J,GAAgB5J,EAAiB4J,EAAe5J,GAElD4J,GAAgBx6U,EAAOm7U,qBACvB7S,EAAOkS,aAAeA,EACtB,MAAM3K,EAAcvH,EAAOiF,MAAQvtU,EAAOutU,MAAQvtU,EAAOutU,KAAKrxG,KAAO,EACjE+wG,EAAOnoU,OAASsoU,EAAgBoN,EAClChR,GAAY,6OACHqG,GAAoC,QAArB7vU,EAAOutU,KAAKtpK,MACpCulK,GAAY,2EAEd,MAAM4R,EAAuB,GACvBC,EAAsB,GAC5B,IAAI/N,EAAchF,EAAOgF,YACO,qBAArBsJ,EACTA,EAAmBtO,EAAOmS,cAAcxN,EAAO76T,QAAOjD,GAAMA,EAAGw+I,UAAUhjD,SAAS3qG,EAAO81U,oBAAmB,IAE5GxI,EAAcsJ,EAEhB,MAAM0E,EAAuB,SAAd5jK,IAAyBA,EAClC6jK,EAAuB,SAAd7jK,IAAyBA,EACxC,IAAI8jK,EAAkB,EAClBC,EAAiB,EACrB,MAAMrC,EAAOvJ,EAAc9lU,KAAK4+G,KAAKskN,EAAOnoU,OAAS9E,EAAOutU,KAAKrxG,MAAQ+wG,EAAOnoU,OAE1E42U,GADiB7L,EAAc5C,EAAO2J,GAAkB50G,OAAS40G,IACrBjH,GAA0C,qBAAjB2H,GAAgClK,EAAgB,EAAI,GAAM,GAErI,GAAIsO,EAA0BlB,EAAc,CAC1CgB,EAAkBzxU,KAAK69E,IAAI4yP,EAAekB,EAAyB9K,GACnE,IAAK,IAAIpsU,EAAI,EAAGA,EAAIg2U,EAAekB,EAAyBl3U,GAAK,EAAG,CAClE,MAAMlF,EAAQkF,EAAIuF,KAAK80H,MAAMr6H,EAAI40U,GAAQA,EACzC,GAAIvJ,EAAa,CACf,MAAM8L,EAAoBvC,EAAO95U,EAAQ,EACzC,IAAK,IAAIkF,EAAIyoU,EAAOnoU,OAAS,EAAGN,GAAK,EAAGA,GAAK,EACvCyoU,EAAOzoU,GAAGw9N,SAAW25G,GAAmBP,EAAqBx7U,KAAK4E,EAK1E,MACE42U,EAAqBx7U,KAAKw5U,EAAO95U,EAAQ,EAE7C,CACF,MAAO,GAAIo8U,EAA0BtO,EAAgBgM,EAAOoB,EAAc,CACxEiB,EAAiB1xU,KAAK69E,IAAI8zP,GAA2BtC,EAAsB,EAAfoB,GAAmB5J,GAC/E,IAAK,IAAIpsU,EAAI,EAAGA,EAAIi3U,EAAgBj3U,GAAK,EAAG,CAC1C,MAAMlF,EAAQkF,EAAIuF,KAAK80H,MAAMr6H,EAAI40U,GAAQA,EACrCvJ,EACF5C,EAAO7tU,SAAQ,CAAC8wU,EAAOoB,KACjBpB,EAAMluG,SAAW1iO,GAAO+7U,EAAoBz7U,KAAK0xU,EAAW,IAGlE+J,EAAoBz7U,KAAKN,EAE7B,CACF,CA8BA,GA7BAgpU,EAAOsT,qBAAsB,EAC7Bl9K,uBAAsB,KACpB4pK,EAAOsT,qBAAsB,CAAK,IAEhCL,GACFH,EAAqBh8U,SAAQE,IAC3B2tU,EAAO3tU,GAAOu8U,mBAAoB,EAClC1N,EAAS2N,QAAQ7O,EAAO3tU,IACxB2tU,EAAO3tU,GAAOu8U,mBAAoB,CAAK,IAGvCP,GACFD,EAAoBj8U,SAAQE,IAC1B2tU,EAAO3tU,GAAOu8U,mBAAoB,EAClC1N,EAAS1hJ,OAAOwgJ,EAAO3tU,IACvB2tU,EAAO3tU,GAAOu8U,mBAAoB,CAAK,IAG3CvT,EAAO2S,eACsB,SAAzBj7U,EAAOotU,cACT9E,EAAO0F,eACE6B,IAAgBuL,EAAqBt2U,OAAS,GAAKy2U,GAAUF,EAAoBv2U,OAAS,GAAKw2U,IACxGhT,EAAO2E,OAAO7tU,SAAQ,CAAC8wU,EAAOoB,KAC5BhJ,EAAOiF,KAAK4C,YAAYmB,EAAYpB,EAAO5H,EAAO2E,OAAO,IAGzDjtU,EAAOoyU,qBACT9J,EAAO+J,qBAELmG,EACF,GAAI4C,EAAqBt2U,OAAS,GAAKy2U,GACrC,GAA8B,qBAAnBhC,EAAgC,CACzC,MAAMwC,EAAwBzT,EAAOuG,WAAWvB,GAE1CvlE,EADoBugE,EAAOuG,WAAWvB,EAAckO,GACzBO,EAC7Bb,EACF5S,EAAOgP,aAAahP,EAAOI,UAAY3gE,IAEvCugE,EAAOkQ,QAAQlL,EAAcvjU,KAAK4+G,KAAK6yN,GAAkB,GAAG,GAAO,GAC/DlE,IACFhP,EAAO0T,gBAAgBC,eAAiB3T,EAAO0T,gBAAgBC,eAAiBl0E,EAChFugE,EAAO0T,gBAAgB3E,iBAAmB/O,EAAO0T,gBAAgB3E,iBAAmBtvE,GAG1F,MACE,GAAIuvE,EAAc,CAChB,MAAM73O,EAAQowO,EAAcuL,EAAqBt2U,OAAS9E,EAAOutU,KAAKrxG,KAAOk/G,EAAqBt2U,OAClGwjU,EAAOkQ,QAAQlQ,EAAOgF,YAAc7tO,EAAO,GAAG,GAAO,GACrD6oO,EAAO0T,gBAAgB3E,iBAAmB/O,EAAOI,SACnD,OAEG,GAAI2S,EAAoBv2U,OAAS,GAAKw2U,EAC3C,GAA8B,qBAAnB/B,EAAgC,CACzC,MAAMwC,EAAwBzT,EAAOuG,WAAWvB,GAE1CvlE,EADoBugE,EAAOuG,WAAWvB,EAAcmO,GACzBM,EAC7Bb,EACF5S,EAAOgP,aAAahP,EAAOI,UAAY3gE,IAEvCugE,EAAOkQ,QAAQlL,EAAcmO,EAAgB,GAAG,GAAO,GACnDnE,IACFhP,EAAO0T,gBAAgBC,eAAiB3T,EAAO0T,gBAAgBC,eAAiBl0E,EAChFugE,EAAO0T,gBAAgB3E,iBAAmB/O,EAAO0T,gBAAgB3E,iBAAmBtvE,GAG1F,KAAO,CACL,MAAMtoK,EAAQowO,EAAcwL,EAAoBv2U,OAAS9E,EAAOutU,KAAKrxG,KAAOm/G,EAAoBv2U,OAChGwjU,EAAOkQ,QAAQlQ,EAAOgF,YAAc7tO,EAAO,GAAG,GAAO,EACvD,CAKJ,GAFA6oO,EAAOuQ,eAAiBA,EACxBvQ,EAAOsQ,eAAiBA,EACpBtQ,EAAOvrB,YAAcurB,EAAOvrB,WAAWm/B,UAAY3E,EAAc,CACnE,MAAM4E,EAAa,CACjB5C,iBACA7hK,YACA4/J,eACAV,mBACAW,cAAc,GAEZ73U,MAAMC,QAAQ2oU,EAAOvrB,WAAWm/B,SAClC5T,EAAOvrB,WAAWm/B,QAAQ98U,SAAQsX,KAC3BA,EAAEm1T,WAAan1T,EAAE1W,OAAOolM,MAAM1uL,EAAE4iU,QAAQ,IACxC6C,EACH3D,QAAS9hU,EAAE1W,OAAOotU,gBAAkBptU,EAAOotU,eAAgBoL,GAC3D,IAEKlQ,EAAOvrB,WAAWm/B,mBAAmB5T,EAAOviU,aAAeuiU,EAAOvrB,WAAWm/B,QAAQl8U,OAAOolM,MACrGkjI,EAAOvrB,WAAWm/B,QAAQ5C,QAAQ,IAC7B6C,EACH3D,QAASlQ,EAAOvrB,WAAWm/B,QAAQl8U,OAAOotU,gBAAkBptU,EAAOotU,eAAgBoL,GAGzF,CACAlQ,EAAO8D,KAAK,UACd,EA4BEgQ,YA1BF,WACE,MAAM9T,EAAS7hU,MACT,OACJzG,EAAM,SACNmuU,GACE7F,EACJ,IAAKtoU,EAAOolM,MAAQkjI,EAAOmG,SAAWnG,EAAOtoU,OAAOyuU,QAAQlxK,QAAS,OACrE+qK,EAAO2S,eACP,MAAMoB,EAAiB,GACvB/T,EAAO2E,OAAO7tU,SAAQktU,IACpB,MAAMhtU,EAA4C,qBAA7BgtU,EAAQgQ,iBAAqF,EAAlDhQ,EAAQjvT,aAAa,2BAAiCivT,EAAQgQ,iBAC9HD,EAAe/8U,GAASgtU,CAAO,IAEjChE,EAAO2E,OAAO7tU,SAAQktU,IACpBA,EAAQ/tT,gBAAgB,0BAA0B,IAEpD89T,EAAej9U,SAAQktU,IACrB6B,EAAS1hJ,OAAO6/I,EAAQ,IAE1BhE,EAAO2S,eACP3S,EAAOkQ,QAAQlQ,EAAOsF,UAAW,EACnC,GAwCA,IAAI2O,GAAa,CACfC,cAjCF,SAAuBC,GACrB,MAAMnU,EAAS7hU,KACf,IAAK6hU,EAAOtoU,OAAO08U,eAAiBpU,EAAOtoU,OAAOkyU,eAAiB5J,EAAOqU,UAAYrU,EAAOtoU,OAAO4vU,QAAS,OAC7G,MAAMzgU,EAAyC,cAApCm5T,EAAOtoU,OAAO48U,kBAAoCtU,EAAOn5T,GAAKm5T,EAAOM,UAC5EN,EAAOqE,YACTrE,EAAOsT,qBAAsB,GAE/BzsU,EAAGioF,MAAMylP,OAAS,OAClB1tU,EAAGioF,MAAMylP,OAASJ,EAAS,WAAa,OACpCnU,EAAOqE,WACTjuK,uBAAsB,KACpB4pK,EAAOsT,qBAAsB,CAAK,GAGxC,EAoBEkB,gBAlBF,WACE,MAAMxU,EAAS7hU,KACX6hU,EAAOtoU,OAAOkyU,eAAiB5J,EAAOqU,UAAYrU,EAAOtoU,OAAO4vU,UAGhEtH,EAAOqE,YACTrE,EAAOsT,qBAAsB,GAE/BtT,EAA2C,cAApCA,EAAOtoU,OAAO48U,kBAAoC,KAAO,aAAaxlP,MAAMylP,OAAS,GACxFvU,EAAOqE,WACTjuK,uBAAsB,KACpB4pK,EAAOsT,qBAAsB,CAAK,IAGxC,GAuBA,SAASmB,GAAiBzU,EAAQt/N,EAAOg0O,GACvC,MAAMrgV,EAASqqU,MACT,OACJhnU,GACEsoU,EACE2U,EAAqBj9U,EAAOi9U,mBAC5BC,EAAqBl9U,EAAOk9U,mBAClC,OAAID,KAAuBD,GAAUE,GAAsBF,GAAUrgV,EAAOwgV,WAAaD,IAC5D,YAAvBD,IACFj0O,EAAMvH,kBACC,EAKb,CACA,SAAS27O,GAAap0O,GACpB,MAAMs/N,EAAS7hU,KACTyhF,EAAWy+O,KACjB,IAAIvoU,EAAI4qG,EACJ5qG,EAAEknK,gBAAelnK,EAAIA,EAAEknK,eAC3B,MAAMliK,EAAOklU,EAAO0T,gBACpB,GAAe,gBAAX59U,EAAEN,KAAwB,CAC5B,GAAuB,OAAnBsF,EAAKs7F,WAAsBt7F,EAAKs7F,YAActgG,EAAEsgG,UAClD,OAEFt7F,EAAKs7F,UAAYtgG,EAAEsgG,SACrB,KAAsB,eAAXtgG,EAAEN,MAAoD,IAA3BM,EAAE4oG,cAAcliG,SACpD1B,EAAKi6U,QAAUj/U,EAAE4oG,cAAc,GAAGwlC,YAEpC,GAAe,eAAXpuI,EAAEN,KAGJ,YADAi/U,GAAiBzU,EAAQlqU,EAAGA,EAAE4oG,cAAc,GAAG/D,OAGjD,MAAM,OACJjjG,EAAM,QACN+mG,EAAO,QACPw2D,GACE+qK,EACJ,IAAK/qK,EAAS,OACd,IAAKv9J,EAAO08U,eAAmC,UAAlBt+U,EAAEwoG,YAAyB,OACxD,GAAI0hO,EAAOuP,WAAa73U,EAAO83U,+BAC7B,QAEGxP,EAAOuP,WAAa73U,EAAO4vU,SAAW5vU,EAAOolM,MAChDkjI,EAAOgR,UAET,IAAIgE,EAAWl/U,EAAE4M,OACjB,GAAiC,YAA7BhL,EAAO48U,oBD/8Db,SAA0BztU,EAAIgJ,GAC5B,MAAMolU,EAAUplU,EAAOwyF,SAASx7F,GAChC,IAAKouU,GAAWplU,aAAkBmxT,gBAEhC,MADiB,IAAInxT,EAAOoxT,oBACZ14O,SAAS1hF,GAE3B,OAAOouU,CACT,CCy8DSC,CAAiBF,EAAUhV,EAAOM,WAAY,OAErD,GAAI,UAAWxqU,GAAiB,IAAZA,EAAE8nG,MAAa,OACnC,GAAI,WAAY9nG,GAAKA,EAAEqlG,OAAS,EAAG,OACnC,GAAIrgG,EAAKq6U,WAAar6U,EAAKs6U,QAAS,OAGpC,MAAMC,IAAyB39U,EAAO49U,gBAA4C,KAA1B59U,EAAO49U,eAEzDC,EAAYz/U,EAAE0/U,aAAe1/U,EAAE0/U,eAAiB1/U,EAAE4hI,KACpD29M,GAAwBv/U,EAAE4M,QAAU5M,EAAE4M,OAAO+hU,YAAc8Q,IAC7DP,EAAWO,EAAU,IAEvB,MAAME,EAAoB/9U,EAAO+9U,kBAAoB/9U,EAAO+9U,kBAAoB,IAAI/9U,EAAO49U,iBACrFI,KAAoB5/U,EAAE4M,SAAU5M,EAAE4M,OAAO+hU,YAG/C,GAAI/sU,EAAOi+U,YAAcD,EAlF3B,SAAwBhxL,EAAUvvI,GAahC,YAZa,IAATA,IACFA,EAAOhX,MAET,SAASy3U,EAAc/uU,GACrB,IAAKA,GAAMA,IAAOw3T,MAAiBx3T,IAAO63T,KAAa,OAAO,KAC1D73T,EAAGqgJ,eAAcrgJ,EAAKA,EAAGqgJ,cAC7B,MAAM2sC,EAAQhtL,EAAGmpK,QAAQtrB,GACzB,OAAKmvC,GAAUhtL,EAAGqjM,YAGXrW,GAAS+hJ,EAAc/uU,EAAGqjM,cAAc1iD,MAFtC,IAGX,CACOouL,CAAczgU,EACvB,CAoE4C0gU,CAAeJ,EAAmBT,GAAYA,EAAShlK,QAAQylK,IAEvG,YADAzV,EAAO8V,YAAa,GAGtB,GAAIp+U,EAAOq+U,eACJf,EAAShlK,QAAQt4K,EAAOq+U,cAAe,OAE9Ct3O,EAAQu3O,SAAWlgV,EAAE6kG,MACrB8D,EAAQw3O,SAAWngV,EAAE8kG,MACrB,MAAM85O,EAASj2O,EAAQu3O,SACjBE,EAASz3O,EAAQw3O,SAIvB,IAAKxB,GAAiBzU,EAAQlqU,EAAG4+U,GAC/B,OAEFp3U,OAAOmF,OAAO3H,EAAM,CAClBq6U,WAAW,EACXC,SAAS,EACTe,qBAAqB,EACrBC,iBAAa39U,EACb49U,iBAAa59U,IAEfgmG,EAAQi2O,OAASA,EACjBj2O,EAAQy3O,OAASA,EACjBp7U,EAAKw7U,eAAiBt8O,KACtBgmO,EAAO8V,YAAa,EACpB9V,EAAOuF,aACPvF,EAAOuW,oBAAiB99U,EACpBf,EAAOg4S,UAAY,IAAG50S,EAAK07U,oBAAqB,GACpD,IAAIr9O,GAAiB,EACjB67O,EAAS3/T,QAAQva,EAAK27U,qBACxBt9O,GAAiB,EACS,WAAtB67O,EAASh8U,WACX8B,EAAKq6U,WAAY,IAGjBv1P,EAASkK,eAAiBlK,EAASkK,cAAcz0E,QAAQva,EAAK27U,oBAAsB72P,EAASkK,gBAAkBkrP,IAA+B,UAAlBl/U,EAAEwoG,aAA6C,UAAlBxoG,EAAEwoG,cAA4B02O,EAAS3/T,QAAQva,EAAK27U,qBAC/M72P,EAASkK,cAAcylC,OAEzB,MAAMmnN,EAAuBv9O,GAAkB6mO,EAAO2W,gBAAkBj/U,EAAOk/U,0BAC1El/U,EAAOm/U,gCAAiCH,GAA0B1B,EAASlyI,mBAC9EhtM,EAAEqjG,iBAEAzhG,EAAOo/U,UAAYp/U,EAAOo/U,SAAS7hL,SAAW+qK,EAAO8W,UAAY9W,EAAOuP,YAAc73U,EAAO4vU,SAC/FtH,EAAO8W,SAAShC,eAElB9U,EAAO8D,KAAK,aAAchuU,EAC5B,CAEA,SAASihV,GAAYr2O,GACnB,MAAM9gB,EAAWy+O,KACX2B,EAAS7hU,KACTrD,EAAOklU,EAAO0T,iBACd,OACJh8U,EAAM,QACN+mG,EACAsnO,aAAcC,EAAG,QACjB/wK,GACE+qK,EACJ,IAAK/qK,EAAS,OACd,IAAKv9J,EAAO08U,eAAuC,UAAtB1zO,EAAMpC,YAAyB,OAC5D,IAOI04O,EAPAlhV,EAAI4qG,EAER,GADI5qG,EAAEknK,gBAAelnK,EAAIA,EAAEknK,eACZ,gBAAXlnK,EAAEN,KAAwB,CAC5B,GAAqB,OAAjBsF,EAAKi6U,QAAkB,OAE3B,GADWj/U,EAAEsgG,YACFt7F,EAAKs7F,UAAW,MAC7B,CAEA,GAAe,cAAXtgG,EAAEN,MAEJ,GADAwhV,EAAc,IAAIlhV,EAAE6oG,gBAAgB70F,QAAOU,GAAKA,EAAE05H,aAAeppI,EAAKi6U,UAAS,IAC1EiC,GAAeA,EAAY9yM,aAAeppI,EAAKi6U,QAAS,YAE7DiC,EAAclhV,EAEhB,IAAKgF,EAAKq6U,UAIR,YAHIr6U,EAAKu7U,aAAev7U,EAAKs7U,aAC3BpW,EAAO8D,KAAK,oBAAqBhuU,IAIrC,MAAM6kG,EAAQq8O,EAAYr8O,MACpBC,EAAQo8O,EAAYp8O,MAC1B,GAAI9kG,EAAEmhV,wBAGJ,OAFAx4O,EAAQi2O,OAAS/5O,OACjB8D,EAAQy3O,OAASt7O,GAGnB,IAAKolO,EAAO2W,eAaV,OAZK7gV,EAAE4M,OAAO2S,QAAQva,EAAK27U,qBACzBzW,EAAO8V,YAAa,QAElBh7U,EAAKq6U,YACP73U,OAAOmF,OAAOg8F,EAAS,CACrBi2O,OAAQ/5O,EACRu7O,OAAQt7O,EACRo7O,SAAUr7O,EACVs7O,SAAUr7O,IAEZ9/F,EAAKw7U,eAAiBt8O,OAI1B,GAAItiG,EAAOw/U,sBAAwBx/U,EAAOolM,KACxC,GAAIkjI,EAAOyF,cAET,GAAI7qO,EAAQ6D,EAAQy3O,QAAUlW,EAAOI,WAAaJ,EAAO8L,gBAAkBlxO,EAAQ6D,EAAQy3O,QAAUlW,EAAOI,WAAaJ,EAAOmL,eAG9H,OAFArwU,EAAKq6U,WAAY,OACjBr6U,EAAKs6U,SAAU,QAGZ,GAAIz6O,EAAQ8D,EAAQi2O,QAAU1U,EAAOI,WAAaJ,EAAO8L,gBAAkBnxO,EAAQ8D,EAAQi2O,QAAU1U,EAAOI,WAAaJ,EAAOmL,eACrI,OAMJ,GAHIvrP,EAASkK,eAAiBlK,EAASkK,cAAcz0E,QAAQva,EAAK27U,oBAAsB72P,EAASkK,gBAAkBh0F,EAAE4M,QAA4B,UAAlB5M,EAAEwoG,aAC/H1e,EAASkK,cAAcylC,OAErB3vC,EAASkK,eACPh0F,EAAE4M,SAAWk9E,EAASkK,eAAiBh0F,EAAE4M,OAAO2S,QAAQva,EAAK27U,mBAG/D,OAFA37U,EAAKs6U,SAAU,OACfpV,EAAO8V,YAAa,GAIpBh7U,EAAKq7U,qBACPnW,EAAO8D,KAAK,YAAahuU,GAE3B2oG,EAAQ04O,UAAY14O,EAAQu3O,SAC5Bv3O,EAAQ24O,UAAY34O,EAAQw3O,SAC5Bx3O,EAAQu3O,SAAWr7O,EACnB8D,EAAQw3O,SAAWr7O,EACnB,MAAMy8O,EAAQ54O,EAAQu3O,SAAWv3O,EAAQi2O,OACnC4C,EAAQ74O,EAAQw3O,SAAWx3O,EAAQy3O,OACzC,GAAIlW,EAAOtoU,OAAOg4S,WAAajuS,KAAKg0J,KAAK4hL,GAAS,EAAIC,GAAS,GAAKtX,EAAOtoU,OAAOg4S,UAAW,OAC7F,GAAgC,qBAArB50S,EAAKs7U,YAA6B,CAC3C,IAAImB,EACAvX,EAAOwF,gBAAkB/mO,EAAQw3O,WAAax3O,EAAQy3O,QAAUlW,EAAOyF,cAAgBhnO,EAAQu3O,WAAav3O,EAAQi2O,OACtH55U,EAAKs7U,aAAc,EAGfiB,EAAQA,EAAQC,EAAQA,GAAS,KACnCC,EAA4D,IAA/C91U,KAAK+1U,MAAM/1U,KAAK0lI,IAAImwM,GAAQ71U,KAAK0lI,IAAIkwM,IAAgB51U,KAAKo/T,GACvE/lU,EAAKs7U,YAAcpW,EAAOwF,eAAiB+R,EAAa7/U,EAAO6/U,WAAa,GAAKA,EAAa7/U,EAAO6/U,WAG3G,CASA,GARIz8U,EAAKs7U,aACPpW,EAAO8D,KAAK,oBAAqBhuU,GAEH,qBAArBgF,EAAKu7U,cACV53O,EAAQu3O,WAAav3O,EAAQi2O,QAAUj2O,EAAQw3O,WAAax3O,EAAQy3O,SACtEp7U,EAAKu7U,aAAc,IAGnBv7U,EAAKs7U,aAA0B,cAAXtgV,EAAEN,MAAwBsF,EAAK28U,gCAErD,YADA38U,EAAKq6U,WAAY,GAGnB,IAAKr6U,EAAKu7U,YACR,OAEFrW,EAAO8V,YAAa,GACfp+U,EAAO4vU,SAAWxxU,EAAE+jG,YACvB/jG,EAAEqjG,iBAEAzhG,EAAOggV,2BAA6BhgV,EAAOigV,QAC7C7hV,EAAEkiG,kBAEJ,IAAIynK,EAAOugE,EAAOwF,eAAiB6R,EAAQC,EACvCM,EAAc5X,EAAOwF,eAAiB/mO,EAAQu3O,SAAWv3O,EAAQ04O,UAAY14O,EAAQw3O,SAAWx3O,EAAQ24O,UACxG1/U,EAAOmgV,iBACTp4E,EAAOh+P,KAAK0lI,IAAIs4H,IAASumE,EAAM,GAAK,GACpC4R,EAAcn2U,KAAK0lI,IAAIywM,IAAgB5R,EAAM,GAAK,IAEpDvnO,EAAQghK,KAAOA,EACfA,GAAQ/nQ,EAAOogV,WACX9R,IACFvmE,GAAQA,EACRm4E,GAAeA,GAEjB,MAAMG,EAAuB/X,EAAOgY,iBACpChY,EAAOuW,eAAiB92E,EAAO,EAAI,OAAS,OAC5CugE,EAAOgY,iBAAmBJ,EAAc,EAAI,OAAS,OACrD,MAAMK,EAASjY,EAAOtoU,OAAOolM,OAASplM,EAAO4vU,QACvC4Q,EAA2C,SAA5BlY,EAAOgY,kBAA+BhY,EAAOsQ,gBAA8C,SAA5BtQ,EAAOgY,kBAA+BhY,EAAOuQ,eACjI,IAAKz1U,EAAKs6U,QAAS,CAQjB,GAPI6C,GAAUC,GACZlY,EAAOgR,QAAQ,CACb5hK,UAAW4wJ,EAAOuW,iBAGtBz7U,EAAK64U,eAAiB3T,EAAOrB,eAC7BqB,EAAOuK,cAAc,GACjBvK,EAAOuP,UAAW,CACpB,MAAMj2U,EAAM,IAAIjF,OAAOkqU,YAAY,gBAAiB,CAClD3kO,SAAS,EACTC,YAAY,EACZO,OAAQ,CACN+9O,mBAAmB,KAGvBnY,EAAOM,UAAUppO,cAAc59F,EACjC,CACAwB,EAAKs9U,qBAAsB,GAEvB1gV,EAAOu8U,aAAyC,IAA1BjU,EAAOsQ,iBAAqD,IAA1BtQ,EAAOuQ,gBACjEvQ,EAAOkU,eAAc,GAEvBlU,EAAO8D,KAAK,kBAAmBhuU,EACjC,CAGA,IADA,IAAIikG,MAAOmnC,UACPpmI,EAAKs6U,SAAWt6U,EAAK07U,oBAAsBuB,IAAyB/X,EAAOgY,kBAAoBC,GAAUC,GAAgBz2U,KAAK0lI,IAAIs4H,IAAS,EAU7I,OATAniQ,OAAOmF,OAAOg8F,EAAS,CACrBi2O,OAAQ/5O,EACRu7O,OAAQt7O,EACRo7O,SAAUr7O,EACVs7O,SAAUr7O,EACV+4O,eAAgB74U,EAAKi0U,mBAEvBj0U,EAAKu9U,eAAgB,OACrBv9U,EAAK64U,eAAiB74U,EAAKi0U,kBAG7B/O,EAAO8D,KAAK,aAAchuU,GAC1BgF,EAAKs6U,SAAU,EACft6U,EAAKi0U,iBAAmBtvE,EAAO3kQ,EAAK64U,eACpC,IAAI2E,GAAsB,EACtBC,EAAkB7gV,EAAO6gV,gBAiD7B,GAhDI7gV,EAAOw/U,sBACTqB,EAAkB,GAEhB94E,EAAO,GACLw4E,GAAUC,GAA8Bp9U,EAAK07U,oBAAsB17U,EAAKi0U,kBAAoBr3U,EAAO2vU,eAAiBrH,EAAOmL,eAAiBnL,EAAOwG,gBAAgBxG,EAAOgF,YAAc,IAA+B,SAAzBttU,EAAOotU,eAA4B9E,EAAO2E,OAAOnoU,OAAS9E,EAAOotU,eAAiB,EAAI9E,EAAOwG,gBAAgBxG,EAAOgF,YAAc,GAAKhF,EAAOtoU,OAAOqvU,aAAe,GAAK/G,EAAOtoU,OAAOqvU,aAAe/G,EAAOmL,iBAC7YnL,EAAOgR,QAAQ,CACb5hK,UAAW,OACX4/J,cAAc,EACdV,iBAAkB,IAGlBxzU,EAAKi0U,iBAAmB/O,EAAOmL,iBACjCmN,GAAsB,EAClB5gV,EAAO8gV,aACT19U,EAAKi0U,iBAAmB/O,EAAOmL,eAAiB,IAAMnL,EAAOmL,eAAiBrwU,EAAK64U,eAAiBl0E,IAAS84E,KAGxG94E,EAAO,IACZw4E,GAAUC,GAA8Bp9U,EAAK07U,oBAAsB17U,EAAKi0U,kBAAoBr3U,EAAO2vU,eAAiBrH,EAAO8L,eAAiB9L,EAAOwG,gBAAgBxG,EAAOwG,gBAAgBhqU,OAAS,GAAKwjU,EAAOtoU,OAAOqvU,cAAyC,SAAzBrvU,EAAOotU,eAA4B9E,EAAO2E,OAAOnoU,OAAS9E,EAAOotU,eAAiB,EAAI9E,EAAOwG,gBAAgBxG,EAAOwG,gBAAgBhqU,OAAS,GAAKwjU,EAAOtoU,OAAOqvU,aAAe,GAAK/G,EAAO8L,iBACna9L,EAAOgR,QAAQ,CACb5hK,UAAW,OACX4/J,cAAc,EACdV,iBAAkBtO,EAAO2E,OAAOnoU,QAAmC,SAAzB9E,EAAOotU,cAA2B9E,EAAO+E,uBAAyBtjU,KAAK4+G,KAAK8a,WAAWzjI,EAAOotU,cAAe,QAGvJhqU,EAAKi0U,iBAAmB/O,EAAO8L,iBACjCwM,GAAsB,EAClB5gV,EAAO8gV,aACT19U,EAAKi0U,iBAAmB/O,EAAO8L,eAAiB,GAAK9L,EAAO8L,eAAiBhxU,EAAK64U,eAAiBl0E,IAAS84E,KAI9GD,IACFxiV,EAAEmhV,yBAA0B,IAIzBjX,EAAOsQ,gBAA4C,SAA1BtQ,EAAOuW,gBAA6Bz7U,EAAKi0U,iBAAmBj0U,EAAK64U,iBAC7F74U,EAAKi0U,iBAAmBj0U,EAAK64U,iBAE1B3T,EAAOuQ,gBAA4C,SAA1BvQ,EAAOuW,gBAA6Bz7U,EAAKi0U,iBAAmBj0U,EAAK64U,iBAC7F74U,EAAKi0U,iBAAmBj0U,EAAK64U,gBAE1B3T,EAAOuQ,gBAAmBvQ,EAAOsQ,iBACpCx1U,EAAKi0U,iBAAmBj0U,EAAK64U,gBAI3Bj8U,EAAOg4S,UAAY,EAAG,CACxB,KAAIjuS,KAAK0lI,IAAIs4H,GAAQ/nQ,EAAOg4S,WAAa50S,EAAK07U,oBAW5C,YADA17U,EAAKi0U,iBAAmBj0U,EAAK64U,gBAT7B,IAAK74U,EAAK07U,mBAMR,OALA17U,EAAK07U,oBAAqB,EAC1B/3O,EAAQi2O,OAASj2O,EAAQu3O,SACzBv3O,EAAQy3O,OAASz3O,EAAQw3O,SACzBn7U,EAAKi0U,iBAAmBj0U,EAAK64U,oBAC7Bl1O,EAAQghK,KAAOugE,EAAOwF,eAAiB/mO,EAAQu3O,SAAWv3O,EAAQi2O,OAASj2O,EAAQw3O,SAAWx3O,EAAQy3O,OAO5G,CACKx+U,EAAO+gV,eAAgB/gV,EAAO4vU,WAG/B5vU,EAAOo/U,UAAYp/U,EAAOo/U,SAAS7hL,SAAW+qK,EAAO8W,UAAYp/U,EAAOoyU,uBAC1E9J,EAAO4N,oBACP5N,EAAO6M,uBAELn1U,EAAOo/U,UAAYp/U,EAAOo/U,SAAS7hL,SAAW+qK,EAAO8W,UACvD9W,EAAO8W,SAASC,cAGlB/W,EAAO2L,eAAe7wU,EAAKi0U,kBAE3B/O,EAAOgP,aAAal0U,EAAKi0U,kBAC3B,CAEA,SAAS2J,GAAWh4O,GAClB,MAAMs/N,EAAS7hU,KACTrD,EAAOklU,EAAO0T,gBACpB,IAEIsD,EAFAlhV,EAAI4qG,EACJ5qG,EAAEknK,gBAAelnK,EAAIA,EAAEknK,eAG3B,GADgC,aAAXlnK,EAAEN,MAAkC,gBAAXM,EAAEN,MAO9C,GADAwhV,EAAc,IAAIlhV,EAAE6oG,gBAAgB70F,QAAOU,GAAKA,EAAE05H,aAAeppI,EAAKi6U,UAAS,IAC1EiC,GAAeA,EAAY9yM,aAAeppI,EAAKi6U,QAAS,WAN5C,CACjB,GAAqB,OAAjBj6U,EAAKi6U,QAAkB,OAC3B,GAAIj/U,EAAEsgG,YAAct7F,EAAKs7F,UAAW,OACpC4gP,EAAclhV,CAChB,CAIA,GAAI,CAAC,gBAAiB,aAAc,eAAgB,eAAeyyF,SAASzyF,EAAEN,MAAO,CAEnF,KADgB,CAAC,gBAAiB,eAAe+yF,SAASzyF,EAAEN,QAAUwqU,EAAO37K,QAAQ0+K,UAAY/C,EAAO37K,QAAQ2+K,YAE9G,MAEJ,CACAloU,EAAKs7F,UAAY,KACjBt7F,EAAKi6U,QAAU,KACf,MAAM,OACJr9U,EAAM,QACN+mG,EACAsnO,aAAcC,EAAG,WACjBO,EAAU,QACVtxK,GACE+qK,EACJ,IAAK/qK,EAAS,OACd,IAAKv9J,EAAO08U,eAAmC,UAAlBt+U,EAAEwoG,YAAyB,OAKxD,GAJIxjG,EAAKq7U,qBACPnW,EAAO8D,KAAK,WAAYhuU,GAE1BgF,EAAKq7U,qBAAsB,GACtBr7U,EAAKq6U,UAMR,OALIr6U,EAAKs6U,SAAW19U,EAAOu8U,YACzBjU,EAAOkU,eAAc,GAEvBp5U,EAAKs6U,SAAU,OACft6U,EAAKu7U,aAAc,GAKjB3+U,EAAOu8U,YAAcn5U,EAAKs6U,SAAWt6U,EAAKq6U,aAAwC,IAA1BnV,EAAOsQ,iBAAqD,IAA1BtQ,EAAOuQ,iBACnGvQ,EAAOkU,eAAc,GAIvB,MAAMyE,EAAe3+O,KACf01F,EAAWipJ,EAAe79U,EAAKw7U,eAGrC,GAAItW,EAAO8V,WAAY,CACrB,MAAM8C,EAAW9iV,EAAE4hI,MAAQ5hI,EAAE0/U,cAAgB1/U,EAAE0/U,eAC/CxV,EAAOwO,mBAAmBoK,GAAYA,EAAS,IAAM9iV,EAAE4M,OAAQk2U,GAC/D5Y,EAAO8D,KAAK,YAAahuU,GACrB45L,EAAW,KAAOipJ,EAAe79U,EAAK+9U,cAAgB,KACxD7Y,EAAO8D,KAAK,wBAAyBhuU,EAEzC,CAKA,GAJAgF,EAAK+9U,cAAgB7+O,KACrBkrM,IAAS,KACF86B,EAAOuD,YAAWvD,EAAO8V,YAAa,EAAI,KAE5Ch7U,EAAKq6U,YAAcr6U,EAAKs6U,UAAYpV,EAAOuW,gBAAmC,IAAjB93O,EAAQghK,OAAe3kQ,EAAKu9U,eAAiBv9U,EAAKi0U,mBAAqBj0U,EAAK64U,iBAAmB74U,EAAKu9U,cAIpK,OAHAv9U,EAAKq6U,WAAY,EACjBr6U,EAAKs6U,SAAU,OACft6U,EAAKu7U,aAAc,GAMrB,IAAIyC,EAMJ,GATAh+U,EAAKq6U,WAAY,EACjBr6U,EAAKs6U,SAAU,EACft6U,EAAKu7U,aAAc,EAGjByC,EADEphV,EAAO+gV,aACIzS,EAAMhG,EAAOI,WAAaJ,EAAOI,WAEhCtlU,EAAKi0U,iBAEjBr3U,EAAO4vU,QACT,OAEF,GAAI5vU,EAAOo/U,UAAYp/U,EAAOo/U,SAAS7hL,QAIrC,YAHA+qK,EAAO8W,SAAS4B,WAAW,CACzBI,eAMJ,MAAMC,EAAcD,IAAe9Y,EAAO8L,iBAAmB9L,EAAOtoU,OAAOolM,KAC3E,IAAIk8I,EAAY,EACZjQ,EAAY/I,EAAOwG,gBAAgB,GACvC,IAAK,IAAItqU,EAAI,EAAGA,EAAIqqU,EAAW/pU,OAAQN,GAAKA,EAAIxE,EAAO6wU,mBAAqB,EAAI7wU,EAAO4wU,eAAgB,CACrG,MAAM+I,EAAYn1U,EAAIxE,EAAO6wU,mBAAqB,EAAI,EAAI7wU,EAAO4wU,eACxB,qBAA9B/B,EAAWrqU,EAAIm1U,IACpB0H,GAAeD,GAAcvS,EAAWrqU,IAAM48U,EAAavS,EAAWrqU,EAAIm1U,MAC5E2H,EAAY98U,EACZ6sU,EAAYxC,EAAWrqU,EAAIm1U,GAAa9K,EAAWrqU,KAE5C68U,GAAeD,GAAcvS,EAAWrqU,MACjD88U,EAAY98U,EACZ6sU,EAAYxC,EAAWA,EAAW/pU,OAAS,GAAK+pU,EAAWA,EAAW/pU,OAAS,GAEnF,CACA,IAAIy8U,EAAmB,KACnBC,EAAkB,KAClBxhV,EAAO2tU,SACLrF,EAAO+L,YACTmN,EAAkBxhV,EAAOyuU,SAAWzuU,EAAOyuU,QAAQlxK,SAAW+qK,EAAOmG,QAAUnG,EAAOmG,QAAQxB,OAAOnoU,OAAS,EAAIwjU,EAAO2E,OAAOnoU,OAAS,EAChIwjU,EAAOgM,QAChBiN,EAAmB,IAIvB,MAAM5jR,GAASyjR,EAAavS,EAAWyS,IAAcjQ,EAC/CsI,EAAY2H,EAAYthV,EAAO6wU,mBAAqB,EAAI,EAAI7wU,EAAO4wU,eACzE,GAAI54I,EAAWh4L,EAAOyhV,aAAc,CAElC,IAAKzhV,EAAO0hV,WAEV,YADApZ,EAAOkQ,QAAQlQ,EAAOgF,aAGM,SAA1BhF,EAAOuW,iBACLlhR,GAAS39D,EAAO2hV,gBAAiBrZ,EAAOkQ,QAAQx4U,EAAO2tU,QAAUrF,EAAOgM,MAAQiN,EAAmBD,EAAY3H,GAAgBrR,EAAOkQ,QAAQ8I,IAEtH,SAA1BhZ,EAAOuW,iBACLlhR,EAAQ,EAAI39D,EAAO2hV,gBACrBrZ,EAAOkQ,QAAQ8I,EAAY3H,GACE,OAApB6H,GAA4B7jR,EAAQ,GAAK5zD,KAAK0lI,IAAI9xE,GAAS39D,EAAO2hV,gBAC3ErZ,EAAOkQ,QAAQgJ,GAEflZ,EAAOkQ,QAAQ8I,GAGrB,KAAO,CAEL,IAAKthV,EAAO4hV,YAEV,YADAtZ,EAAOkQ,QAAQlQ,EAAOgF,aAGEhF,EAAOuZ,aAAezjV,EAAE4M,SAAWs9T,EAAOuZ,WAAWC,QAAU1jV,EAAE4M,SAAWs9T,EAAOuZ,WAAWE,QAQ7G3jV,EAAE4M,SAAWs9T,EAAOuZ,WAAWC,OACxCxZ,EAAOkQ,QAAQ8I,EAAY3H,GAE3BrR,EAAOkQ,QAAQ8I,IATe,SAA1BhZ,EAAOuW,gBACTvW,EAAOkQ,QAA6B,OAArB+I,EAA4BA,EAAmBD,EAAY3H,GAE9C,SAA1BrR,EAAOuW,gBACTvW,EAAOkQ,QAA4B,OAApBgJ,EAA2BA,EAAkBF,GAOlE,CACF,CAEA,SAASU,KACP,MAAM1Z,EAAS7hU,MACT,OACJzG,EAAM,GACNmP,GACEm5T,EACJ,GAAIn5T,GAAyB,IAAnBA,EAAG8/I,YAAmB,OAG5BjvJ,EAAOsjM,aACTglI,EAAO2Z,gBAIT,MAAM,eACJrJ,EAAc,eACdC,EAAc,SACdjK,GACEtG,EACEkG,EAAYlG,EAAOmG,SAAWnG,EAAOtoU,OAAOyuU,QAAQlxK,QAG1D+qK,EAAOsQ,gBAAiB,EACxBtQ,EAAOuQ,gBAAiB,EACxBvQ,EAAOuF,aACPvF,EAAO0F,eACP1F,EAAO6M,sBACP,MAAM+M,EAAgB1T,GAAaxuU,EAAOolM,OACZ,SAAzBplM,EAAOotU,eAA4BptU,EAAOotU,cAAgB,KAAM9E,EAAOgM,OAAUhM,EAAO+L,aAAgB/L,EAAOtoU,OAAO2vU,gBAAmBuS,EAGxI5Z,EAAOtoU,OAAOolM,OAASopI,EACzBlG,EAAO4Q,YAAY5Q,EAAOsF,UAAW,GAAG,GAAO,GAE/CtF,EAAOkQ,QAAQlQ,EAAOgF,YAAa,GAAG,GAAO,GAL/ChF,EAAOkQ,QAAQlQ,EAAO2E,OAAOnoU,OAAS,EAAG,GAAG,GAAO,GAQjDwjU,EAAO3lI,UAAY2lI,EAAO3lI,SAASw/I,SAAW7Z,EAAO3lI,SAASx+B,SAChEtiK,aAAaymU,EAAO3lI,SAASy/I,eAC7B9Z,EAAO3lI,SAASy/I,cAAgB7/U,YAAW,KACrC+lU,EAAO3lI,UAAY2lI,EAAO3lI,SAASw/I,SAAW7Z,EAAO3lI,SAASx+B,QAChEmkK,EAAO3lI,SAAS1qB,QAClB,GACC,MAGLqwJ,EAAOuQ,eAAiBA,EACxBvQ,EAAOsQ,eAAiBA,EACpBtQ,EAAOtoU,OAAOkyU,eAAiBtD,IAAatG,EAAOsG,UACrDtG,EAAO6J,eAEX,CAEA,SAASvsN,GAAQxnH,GACf,MAAMkqU,EAAS7hU,KACV6hU,EAAO/qK,UACP+qK,EAAO8V,aACN9V,EAAOtoU,OAAOqiV,eAAejkV,EAAEqjG,iBAC/B6mO,EAAOtoU,OAAOsiV,0BAA4Bha,EAAOuP,YACnDz5U,EAAEkiG,kBACFliG,EAAE80J,6BAGR,CAEA,SAASqvL,KACP,MAAMja,EAAS7hU,MACT,UACJmiU,EAAS,aACTyF,EAAY,QACZ9wK,GACE+qK,EACJ,IAAK/qK,EAAS,OAWd,IAAIi6K,EAVJlP,EAAOmP,kBAAoBnP,EAAOI,UAC9BJ,EAAOwF,eACTxF,EAAOI,WAAaE,EAAUr8N,WAE9B+7N,EAAOI,WAAaE,EAAUp8N,UAGP,IAArB87N,EAAOI,YAAiBJ,EAAOI,UAAY,GAC/CJ,EAAO4N,oBACP5N,EAAO6M,sBAEP,MAAMhB,EAAiB7L,EAAO8L,eAAiB9L,EAAOmL,eAEpD+D,EADqB,IAAnBrD,EACY,GAEC7L,EAAOI,UAAYJ,EAAOmL,gBAAkBU,EAEzDqD,IAAgBlP,EAAO5kJ,UACzB4kJ,EAAO2L,eAAe5F,GAAgB/F,EAAOI,UAAYJ,EAAOI,WAElEJ,EAAO8D,KAAK,eAAgB9D,EAAOI,WAAW,EAChD,CAEA,SAASxvD,GAAO96Q,GACd,MAAMkqU,EAAS7hU,KACfgmU,GAAqBnE,EAAQlqU,EAAE4M,QAC3Bs9T,EAAOtoU,OAAO4vU,SAA2C,SAAhCtH,EAAOtoU,OAAOotU,gBAA6B9E,EAAOtoU,OAAOk1U,YAGtF5M,EAAO/sJ,QACT,CAEA,SAASinK,KACP,MAAMla,EAAS7hU,KACX6hU,EAAOma,gCACXna,EAAOma,+BAAgC,EACnCna,EAAOtoU,OAAOw/U,sBAChBlX,EAAOn5T,GAAGioF,MAAMsrP,YAAc,QAElC,CAEA,MAAM/W,GAASA,CAACrD,EAAQzlU,KACtB,MAAMqlF,EAAWy+O,MACX,OACJ3mU,EAAM,GACNmP,EAAE,UACFy5T,EAAS,OACT4B,GACElC,EACEx5N,IAAY9uG,EAAOigV,OACnB0C,EAAuB,OAAX9/U,EAAkB,mBAAqB,sBACnD+/U,EAAe//U,EAChBsM,GAAoB,kBAAPA,IAGlB+4E,EAASy6P,GAAW,aAAcra,EAAOka,qBAAsB,CAC7DzzO,SAAS,EACTD,YAEF3/F,EAAGwzU,GAAW,aAAcra,EAAO8U,aAAc,CAC/CruO,SAAS,IAEX5/F,EAAGwzU,GAAW,cAAera,EAAO8U,aAAc,CAChDruO,SAAS,IAEX7mB,EAASy6P,GAAW,YAAara,EAAO+W,YAAa,CACnDtwO,SAAS,EACTD,YAEF5mB,EAASy6P,GAAW,cAAera,EAAO+W,YAAa,CACrDtwO,SAAS,EACTD,YAEF5mB,EAASy6P,GAAW,WAAYra,EAAO0Y,WAAY,CACjDjyO,SAAS,IAEX7mB,EAASy6P,GAAW,YAAara,EAAO0Y,WAAY,CAClDjyO,SAAS,IAEX7mB,EAASy6P,GAAW,gBAAiBra,EAAO0Y,WAAY,CACtDjyO,SAAS,IAEX7mB,EAASy6P,GAAW,cAAera,EAAO0Y,WAAY,CACpDjyO,SAAS,IAEX7mB,EAASy6P,GAAW,aAAcra,EAAO0Y,WAAY,CACnDjyO,SAAS,IAEX7mB,EAASy6P,GAAW,eAAgBra,EAAO0Y,WAAY,CACrDjyO,SAAS,IAEX7mB,EAASy6P,GAAW,cAAera,EAAO0Y,WAAY,CACpDjyO,SAAS,KAIP/uG,EAAOqiV,eAAiBriV,EAAOsiV,2BACjCnzU,EAAGwzU,GAAW,QAASra,EAAO1iN,SAAS,GAErC5lH,EAAO4vU,SACThH,EAAU+Z,GAAW,SAAUra,EAAOia,UAIpCviV,EAAO6iV,qBACTva,EAAOsa,GAAcpY,EAAOC,KAAOD,EAAOE,QAAU,0CAA4C,wBAAyBsX,IAAU,GAEnI1Z,EAAOsa,GAAc,iBAAkBZ,IAAU,GAInD7yU,EAAGwzU,GAAW,OAAQra,EAAOpvD,OAAQ,CACnCpqK,SAAS,IACT,EAsBJ,IAAIg0O,GAAW,CACbC,aArBF,WACE,MAAMza,EAAS7hU,MACT,OACJzG,GACEsoU,EACJA,EAAO8U,aAAeA,GAAa53U,KAAK8iU,GACxCA,EAAO+W,YAAcA,GAAY75U,KAAK8iU,GACtCA,EAAO0Y,WAAaA,GAAWx7U,KAAK8iU,GACpCA,EAAOka,qBAAuBA,GAAqBh9U,KAAK8iU,GACpDtoU,EAAO4vU,UACTtH,EAAOia,SAAWA,GAAS/8U,KAAK8iU,IAElCA,EAAO1iN,QAAUA,GAAQpgH,KAAK8iU,GAC9BA,EAAOpvD,OAASA,GAAO1zQ,KAAK8iU,GAC5BqD,GAAOrD,EAAQ,KACjB,EAOE0a,aANF,WAEErX,GADellU,KACA,MACjB,GAMA,MAAMw8U,GAAgBA,CAAC3a,EAAQtoU,IACtBsoU,EAAOiF,MAAQvtU,EAAOutU,MAAQvtU,EAAOutU,KAAKrxG,KAAO,EA8H1D,IAAI54B,GAAc,CAChB2+I,cA7HF,WACE,MAAM3Z,EAAS7hU,MACT,UACJmnU,EAAS,YACTxmC,EAAW,OACXpnS,EAAM,GACNmP,GACEm5T,EACEhlI,EAActjM,EAAOsjM,YAC3B,IAAKA,GAAeA,GAAmD,IAApC19L,OAAO0M,KAAKgxL,GAAax+L,OAAc,OAG1E,MAAMo+U,EAAa5a,EAAO6a,cAAc7/I,EAAaglI,EAAOtoU,OAAOojV,gBAAiB9a,EAAOn5T,IAC3F,IAAK+zU,GAAc5a,EAAOr5H,oBAAsBi0I,EAAY,OAC5D,MACMG,GADuBH,KAAc5/I,EAAcA,EAAY4/I,QAAcniV,IAClCunU,EAAOgb,eAClDC,EAAcN,GAAc3a,EAAQtoU,GACpCwjV,EAAaP,GAAc3a,EAAQ+a,GACnCI,EAAgBnb,EAAOtoU,OAAOu8U,WAC9BmH,EAAeL,EAAiB9G,WAChCoH,EAAa3jV,EAAOu9J,QACtBgmL,IAAgBC,GAClBr0U,EAAGw+I,UAAU32I,OAAO,GAAGhX,EAAOuyU,6BAA8B,GAAGvyU,EAAOuyU,qCACtEjK,EAAOsb,yBACGL,GAAeC,IACzBr0U,EAAGw+I,UAAUnmJ,IAAI,GAAGxH,EAAOuyU,+BACvB8Q,EAAiB9V,KAAKtpK,MAAuC,WAA/Bo/K,EAAiB9V,KAAKtpK,OAAsBo/K,EAAiB9V,KAAKtpK,MAA6B,WAArBjkK,EAAOutU,KAAKtpK,OACtH90J,EAAGw+I,UAAUnmJ,IAAI,GAAGxH,EAAOuyU,qCAE7BjK,EAAOsb,wBAELH,IAAkBC,EACpBpb,EAAOwU,mBACG2G,GAAiBC,GAC3Bpb,EAAOkU,gBAIT,CAAC,aAAc,aAAc,aAAap9U,SAAQk7D,IAChD,GAAsC,qBAA3B+oR,EAAiB/oR,GAAuB,OACnD,MAAMupR,EAAmB7jV,EAAOs6D,IAASt6D,EAAOs6D,GAAMijG,QAChDumL,EAAkBT,EAAiB/oR,IAAS+oR,EAAiB/oR,GAAMijG,QACrEsmL,IAAqBC,GACvBxb,EAAOhuQ,GAAMvzD,WAEV88U,GAAoBC,GACvBxb,EAAOhuQ,GAAMxzD,QACf,IAEF,MAAMi9U,EAAmBV,EAAiB3rK,WAAa2rK,EAAiB3rK,YAAc13K,EAAO03K,UACvFssK,EAAchkV,EAAOolM,OAASi+I,EAAiBjW,gBAAkBptU,EAAOotU,eAAiB2W,GACzFE,EAAUjkV,EAAOolM,KACnB2+I,GAAoB38C,GACtBkhC,EAAO4b,kBAETv4O,GAAO28N,EAAOtoU,OAAQqjV,GACtB,MAAMnrI,EAAYowH,EAAOtoU,OAAOu9J,QAC1B4mL,EAAU7b,EAAOtoU,OAAOolM,KAC9Bx/L,OAAOmF,OAAOu9T,EAAQ,CACpB2W,eAAgB3W,EAAOtoU,OAAOi/U,eAC9BrG,eAAgBtQ,EAAOtoU,OAAO44U,eAC9BC,eAAgBvQ,EAAOtoU,OAAO64U,iBAE5B8K,IAAezrI,EACjBowH,EAAOvhU,WACG48U,GAAczrI,GACxBowH,EAAOxhU,SAETwhU,EAAOr5H,kBAAoBi0I,EAC3B5a,EAAO8D,KAAK,oBAAqBiX,GAC7Bj8C,IACE48C,GACF1b,EAAO8T,cACP9T,EAAOoS,WAAW9M,GAClBtF,EAAO0F,iBACGiW,GAAWE,GACrB7b,EAAOoS,WAAW9M,GAClBtF,EAAO0F,gBACEiW,IAAYE,GACrB7b,EAAO8T,eAGX9T,EAAO8D,KAAK,aAAciX,EAC5B,EA2CEF,cAzCF,SAAuB7/I,EAAa7lL,EAAM2mU,GAIxC,QAHa,IAAT3mU,IACFA,EAAO,WAEJ6lL,GAAwB,cAAT7lL,IAAyB2mU,EAAa,OAC1D,IAAIlB,GAAa,EACjB,MAAMvmV,EAASqqU,KACThqK,EAAyB,WAATv/I,EAAoB9gB,EAAO2pU,YAAc8d,EAAY1kL,aACrE2kL,EAASz+U,OAAO0M,KAAKgxL,GAAaxmL,KAAIwnU,IAC1C,GAAqB,kBAAVA,GAA6C,IAAvBA,EAAM/kV,QAAQ,KAAY,CACzD,MAAMglV,EAAW9gN,WAAW6gN,EAAMv3U,OAAO,IAEzC,MAAO,CACLhP,MAFYi/J,EAAgBunL,EAG5BD,QAEJ,CACA,MAAO,CACLvmV,MAAOumV,EACPA,QACD,IAEHD,EAAOxwN,MAAK,CAACtuC,EAAG4H,IAAMpG,SAASxB,EAAExnF,MAAO,IAAMgpF,SAASoG,EAAEpvF,MAAO,MAChE,IAAK,IAAIyG,EAAI,EAAGA,EAAI6/U,EAAOv/U,OAAQN,GAAK,EAAG,CACzC,MAAM,MACJ8/U,EAAK,MACLvmV,GACEsmV,EAAO7/U,GACE,WAATiZ,EACE9gB,EAAO0kU,WAAW,eAAetjU,QAAY4f,UAC/CulU,EAAaoB,GAENvmV,GAASqmV,EAAY3kL,cAC9ByjL,EAAaoB,EAEjB,CACA,OAAOpB,GAAc,KACvB,GAqEA,IAAItvD,GAAU,CACZ4wD,WAhDF,WACE,MAAMlc,EAAS7hU,MACT,WACJ8W,EAAU,OACVvd,EAAM,IACNsuU,EAAG,GACHn/T,EAAE,OACFq7T,GACElC,EAEEmc,EAzBR,SAAwB7jE,EAAS1wQ,GAC/B,MAAMw0U,EAAgB,GAYtB,OAXA9jE,EAAQxhR,SAAQkM,IACM,kBAATA,EACT1F,OAAO0M,KAAKhH,GAAMlM,SAAQme,IACpBjS,EAAKiS,IACPmnU,EAAc9kV,KAAKsQ,EAASqN,EAC9B,IAEuB,kBAATjS,GAChBo5U,EAAc9kV,KAAKsQ,EAAS5E,EAC9B,IAEKo5U,CACT,CAWmBC,CAAe,CAAC,cAAe3kV,EAAO03K,UAAW,CAChE,YAAa4wJ,EAAOtoU,OAAOo/U,UAAYp/U,EAAOo/U,SAAS7hL,SACtD,CACD,WAAcv9J,EAAOk1U,YACpB,CACD,IAAO5G,GACN,CACD,KAAQtuU,EAAOutU,MAAQvtU,EAAOutU,KAAKrxG,KAAO,GACzC,CACD,cAAel8N,EAAOutU,MAAQvtU,EAAOutU,KAAKrxG,KAAO,GAA0B,WAArBl8N,EAAOutU,KAAKtpK,MACjE,CACD,QAAWumK,EAAOE,SACjB,CACD,IAAOF,EAAOC,KACb,CACD,WAAYzqU,EAAO4vU,SAClB,CACD,SAAY5vU,EAAO4vU,SAAW5vU,EAAO2vU,gBACpC,CACD,iBAAkB3vU,EAAOoyU,sBACvBpyU,EAAOuyU,wBACXh1T,EAAW3d,QAAQ6kV,GACnBt1U,EAAGw+I,UAAUnmJ,OAAO+V,GACpB+qT,EAAOsb,sBACT,EAeEgB,cAbF,WACE,MACM,GACJz1U,EAAE,WACFoO,GAHa9W,KAKV0I,GAAoB,kBAAPA,IAClBA,EAAGw+I,UAAU32I,UAAUuG,GANR9W,KAORm9U,uBACT,GAoCA,IAAIiB,GAAkB,CACpB1S,cA9BF,WACE,MAAM7J,EAAS7hU,MAEbk2U,SAAUmI,EAAS,OACnB9kV,GACEsoU,GACE,mBACJ0G,GACEhvU,EACJ,GAAIgvU,EAAoB,CACtB,MAAM6F,EAAiBvM,EAAO2E,OAAOnoU,OAAS,EACxCigV,EAAqBzc,EAAOuG,WAAWgG,GAAkBvM,EAAOwG,gBAAgB+F,GAAuC,EAArB7F,EACxG1G,EAAOqU,SAAWrU,EAAOzgU,KAAOk9U,CAClC,MACEzc,EAAOqU,SAAsC,IAA3BrU,EAAOsG,SAAS9pU,QAEN,IAA1B9E,EAAO44U,iBACTtQ,EAAOsQ,gBAAkBtQ,EAAOqU,WAEJ,IAA1B38U,EAAO64U,iBACTvQ,EAAOuQ,gBAAkBvQ,EAAOqU,UAE9BmI,GAAaA,IAAcxc,EAAOqU,WACpCrU,EAAOgM,OAAQ,GAEbwQ,IAAcxc,EAAOqU,UACvBrU,EAAO8D,KAAK9D,EAAOqU,SAAW,OAAS,SAE3C,GAKIjkJ,GAAW,CACbu1B,MAAM,EACNv2C,UAAW,aACXyoK,gBAAgB,EAChB6E,sBAAuB,mBACvBpI,kBAAmB,UACnB5D,aAAc,EACdrQ,MAAO,IACPiH,SAAS,EACTiT,sBAAsB,EACtBvsJ,gBAAgB,EAChB2pJ,QAAQ,EACRgF,gBAAgB,EAChBC,aAAc,SACd3nL,SAAS,EACTwhL,kBAAmB,wDAEnB14O,MAAO,KACPC,OAAQ,KAERwxO,gCAAgC,EAEhCxrL,UAAW,KACXhsJ,IAAK,KAEL28U,oBAAoB,EACpBC,mBAAoB,GAEpBhI,YAAY,EAEZnE,gBAAgB,EAEhBqG,kBAAkB,EAElBtG,OAAQ,QAIRxtI,iBAAaviM,EACbqiV,gBAAiB,SAEjB/T,aAAc,EACdjC,cAAe,EACfwD,eAAgB,EAChBC,mBAAoB,EACpB6I,oBAAoB,EACpB/J,gBAAgB,EAChB4B,sBAAsB,EACtBvC,mBAAoB,EAEpBE,kBAAmB,EAEnBuH,qBAAqB,EACrB7E,0BAA0B,EAE1BM,eAAe,EAEf3B,cAAc,EAEd6P,WAAY,EACZP,WAAY,GACZnD,eAAe,EACfkF,aAAa,EACbF,YAAY,EACZC,gBAAiB,GACjBF,aAAc,IACdV,cAAc,EACd9B,gBAAgB,EAChBjnC,UAAW,EACXgoC,0BAA0B,EAC1Bd,0BAA0B,EAC1BC,+BAA+B,EAC/BK,qBAAqB,EAErB2F,mBAAmB,EAEnBrE,YAAY,EACZD,gBAAiB,IAEjBzO,qBAAqB,EAErBmK,YAAY,EAEZ8F,eAAe,EACfC,0BAA0B,EAC1BnL,qBAAqB,EAErB/xI,MAAM,EACN41I,oBAAoB,EACpBG,qBAAsB,EACtBvB,qBAAqB,EAErBjM,QAAQ,EAERkL,gBAAgB,EAChBD,gBAAgB,EAChByF,aAAc,KAEdJ,WAAW,EACXL,eAAgB,oBAChBG,kBAAmB,KAEnBqH,kBAAkB,EAClB3S,wBAAyB,GAEzBF,uBAAwB,UAExB3F,WAAY,eACZmO,gBAAiB,qBACjBjF,iBAAkB,sBAClBhC,kBAAmB,uBACnBC,uBAAwB,6BACxBgC,eAAgB,oBAChBC,eAAgB,oBAChBqP,aAAc,iBACdvY,mBAAoB,wBACpBK,oBAAqB,EAErB0J,oBAAoB,EAEpByO,cAAc,GAGhB,SAASC,GAAmBvlV,EAAQwlV,GAClC,OAAO,SAAsBjhV,QACf,IAARA,IACFA,EAAM,CAAC,GAET,MAAMkhV,EAAkB7/U,OAAO0M,KAAK/N,GAAK,GACnCmhV,EAAenhV,EAAIkhV,GACG,kBAAjBC,GAA8C,OAAjBA,IAIR,IAA5B1lV,EAAOylV,KACTzlV,EAAOylV,GAAmB,CACxBloL,SAAS,IAGW,eAApBkoL,GAAoCzlV,EAAOylV,IAAoBzlV,EAAOylV,GAAiBloL,UAAYv9J,EAAOylV,GAAiB1D,SAAW/hV,EAAOylV,GAAiB3D,SAChK9hV,EAAOylV,GAAiBE,MAAO,GAE7B,CAAC,aAAc,aAAapmV,QAAQkmV,IAAoB,GAAKzlV,EAAOylV,IAAoBzlV,EAAOylV,GAAiBloL,UAAYv9J,EAAOylV,GAAiBt2U,KACtJnP,EAAOylV,GAAiBE,MAAO,GAE3BF,KAAmBzlV,GAAU,YAAa0lV,GAIT,kBAA5B1lV,EAAOylV,IAAmC,YAAazlV,EAAOylV,KACvEzlV,EAAOylV,GAAiBloL,SAAU,GAE/Bv9J,EAAOylV,KAAkBzlV,EAAOylV,GAAmB,CACtDloL,SAAS,IAEX5xD,GAAO65O,EAAkBjhV,IATvBonG,GAAO65O,EAAkBjhV,IAfzBonG,GAAO65O,EAAkBjhV,EAyB7B,CACF,CAGA,MAAMqhV,GAAa,CACjBla,iBACAnwJ,UACAmtJ,aACAzoO,cACAiwO,SACA9qI,QACAm3I,cACA5Q,OAAQmX,GACRx/I,eACA6uI,cAAe0S,GACfjxD,YAEIiyD,GAAmB,CAAC,EAC1B,MAAMC,GACJ//U,WAAAA,GACE,IAAIoJ,EACAnP,EACJ,IAAK,IAAI4wI,EAAOlgI,UAAU5L,OAAQ+8H,EAAO,IAAIniI,MAAMkxI,GAAOE,EAAO,EAAGA,EAAOF,EAAME,IAC/EjP,EAAKiP,GAAQpgI,UAAUogI,GAEL,IAAhBjP,EAAK/8H,QAAgB+8H,EAAK,GAAG97H,aAAwE,WAAzDH,OAAOC,UAAUC,SAASR,KAAKu8H,EAAK,IAAIpiI,MAAM,GAAI,GAChGO,EAAS6hI,EAAK,IAEb1yH,EAAInP,GAAU6hI,EAEZ7hI,IAAQA,EAAS,CAAC,GACvBA,EAAS2rG,GAAO,CAAC,EAAG3rG,GAChBmP,IAAOnP,EAAOmP,KAAInP,EAAOmP,GAAKA,GAClC,MAAM+4E,EAAWy+O,KACjB,GAAI3mU,EAAOmP,IAA2B,kBAAdnP,EAAOmP,IAAmB+4E,EAAS4lC,iBAAiB9tH,EAAOmP,IAAIrK,OAAS,EAAG,CACjG,MAAMihV,EAAU,GAQhB,OAPA79P,EAAS4lC,iBAAiB9tH,EAAOmP,IAAI/P,SAAQglV,IAC3C,MAAM4B,EAAYr6O,GAAO,CAAC,EAAG3rG,EAAQ,CACnCmP,GAAIi1U,IAEN2B,EAAQnmV,KAAK,IAAIkmV,GAAOE,GAAW,IAG9BD,CACT,CAGA,MAAMzd,EAAS7hU,KACf6hU,EAAOL,YAAa,EACpBK,EAAO0B,QAAUE,KACjB5B,EAAOkC,OAASD,GAAU,CACxBj+K,UAAWtsJ,EAAOssJ,YAEpBg8K,EAAO37K,QAAUw+K,KACjB7C,EAAOsD,gBAAkB,CAAC,EAC1BtD,EAAO4D,mBAAqB,GAC5B5D,EAAO2d,QAAU,IAAI3d,EAAO4d,aACxBlmV,EAAOimV,SAAWvmV,MAAMC,QAAQK,EAAOimV,UACzC3d,EAAO2d,QAAQrmV,QAAQI,EAAOimV,SAEhC,MAAMT,EAAmB,CAAC,EAC1Bld,EAAO2d,QAAQ7mV,SAAQ+mV,IACrBA,EAAI,CACFnmV,SACAsoU,SACA8d,aAAcb,GAAmBvlV,EAAQwlV,GACzC/jN,GAAI6mM,EAAO7mM,GAAGj8H,KAAK8iU,GACnBwD,KAAMxD,EAAOwD,KAAKtmU,KAAK8iU,GACvB5mM,IAAK4mM,EAAO5mM,IAAIl8H,KAAK8iU,GACrB8D,KAAM9D,EAAO8D,KAAK5mU,KAAK8iU,IACvB,IAIJ,MAAM+d,EAAe16O,GAAO,CAAC,EAAG+sF,GAAU8sJ,GAqG1C,OAlGAld,EAAOtoU,OAAS2rG,GAAO,CAAC,EAAG06O,EAAcR,GAAkB7lV,GAC3DsoU,EAAOgb,eAAiB33O,GAAO,CAAC,EAAG28N,EAAOtoU,QAC1CsoU,EAAOge,aAAe36O,GAAO,CAAC,EAAG3rG,GAG7BsoU,EAAOtoU,QAAUsoU,EAAOtoU,OAAOyhI,IACjC77H,OAAO0M,KAAKg2T,EAAOtoU,OAAOyhI,IAAIriI,SAAQy8L,IACpCysI,EAAO7mM,GAAGo6D,EAAWysI,EAAOtoU,OAAOyhI,GAAGo6D,GAAW,IAGjDysI,EAAOtoU,QAAUsoU,EAAOtoU,OAAOisU,OACjC3D,EAAO2D,MAAM3D,EAAOtoU,OAAOisU,OAI7BrmU,OAAOmF,OAAOu9T,EAAQ,CACpB/qK,QAAS+qK,EAAOtoU,OAAOu9J,QACvBpuJ,KAEAoO,WAAY,GAEZ0vT,OAAQ,GACR4B,WAAY,GACZD,SAAU,GACVE,gBAAiB,GAEjBhB,aAAYA,IACyB,eAA5BxF,EAAOtoU,OAAO03K,UAEvBq2J,WAAUA,IAC2B,aAA5BzF,EAAOtoU,OAAO03K,UAGvB41J,YAAa,EACbM,UAAW,EAEXyG,aAAa,EACbC,OAAO,EAEP5L,UAAW,EACX+O,kBAAmB,EACnB/zJ,SAAU,EACV6iK,SAAU,EACV1O,WAAW,EACX1E,qBAAAA,GAGE,OAAOppU,KAAKy8U,MAAM//U,KAAKiiU,UAAY,GAAK,IAAM,GAAK,EACrD,EAEAkQ,eAAgBtQ,EAAOtoU,OAAO44U,eAC9BC,eAAgBvQ,EAAOtoU,OAAO64U,eAE9BmD,gBAAiB,CACfyB,eAAW18U,EACX28U,aAAS38U,EACT09U,yBAAqB19U,EACrB69U,oBAAgB79U,EAChB29U,iBAAa39U,EACbs2U,sBAAkBt2U,EAClBk7U,oBAAgBl7U,EAChB+9U,wBAAoB/9U,EAEpBg+U,kBAAmBzW,EAAOtoU,OAAO++U,kBAEjCoC,cAAe,EACfsF,kBAAc1lV,EAEd2lV,WAAY,GACZhG,yBAAqB3/U,EACrB49U,iBAAa59U,EACb29F,UAAW,KACX2+O,QAAS,MAGXe,YAAY,EAEZa,eAAgB3W,EAAOtoU,OAAOi/U,eAC9Bl4O,QAAS,CACPi2O,OAAQ,EACRwB,OAAQ,EACRF,SAAU,EACVC,SAAU,EACVx2E,KAAM,GAGR4+E,aAAc,GACdC,aAAc,IAEhBte,EAAO8D,KAAK,WAGR9D,EAAOtoU,OAAOiuN,MAChBq6G,EAAOr6G,OAKFq6G,CACT,CACA4F,iBAAAA,CAAkBrjF,GAChB,OAAIpkP,KAAKqnU,eACAjjF,EAGF,CACL,MAAS,SACT,aAAc,cACd,iBAAkB,eAClB,cAAe,aACf,eAAgB,gBAChB,eAAgB,cAChB,gBAAiB,iBACjB,YAAe,gBACfA,EACJ,CACA4vF,aAAAA,CAAcnO,GACZ,MAAM,SACJ6B,EAAQ,OACRnuU,GACEyG,KAEEmuU,EAAkBlL,GADTL,GAAgB8E,EAAU,IAAInuU,EAAO4sU,4BACR,IAC5C,OAAOlD,GAAa4C,GAAWsI,CACjC,CACA7B,mBAAAA,CAAoBzzU,GAClB,OAAOmH,KAAKg0U,cAAch0U,KAAKwmU,OAAO76T,QAAOk6T,GAA6D,EAAlDA,EAAQjvT,aAAa,6BAAmC/d,IAAO,GACzH,CACA27U,YAAAA,GACE,MACM,SACJ9M,EAAQ,OACRnuU,GAHayG,UAKRwmU,OAAS5D,GAAgB8E,EAAU,IAAInuU,EAAO4sU,2BACvD,CACA9lU,MAAAA,GACE,MAAMwhU,EAAS7hU,KACX6hU,EAAO/qK,UACX+qK,EAAO/qK,SAAU,EACb+qK,EAAOtoU,OAAOu8U,YAChBjU,EAAOkU,gBAETlU,EAAO8D,KAAK,UACd,CACArlU,OAAAA,GACE,MAAMuhU,EAAS7hU,KACV6hU,EAAO/qK,UACZ+qK,EAAO/qK,SAAU,EACb+qK,EAAOtoU,OAAOu8U,YAChBjU,EAAOwU,kBAETxU,EAAO8D,KAAK,WACd,CACAya,WAAAA,CAAYnjK,EAAUilJ,GACpB,MAAML,EAAS7hU,KACfi9K,EAAW35K,KAAKyhG,IAAIzhG,KAAK69E,IAAI87F,EAAU,GAAI,GAC3C,MAAMl4E,EAAM88N,EAAOmL,eAEb3jU,GADMw4T,EAAO8L,eACI5oO,GAAOk4E,EAAWl4E,EACzC88N,EAAOoP,YAAY5nU,EAA0B,qBAAV64T,EAAwB,EAAIA,GAC/DL,EAAO4N,oBACP5N,EAAO6M,qBACT,CACAyO,oBAAAA,GACE,MAAMtb,EAAS7hU,KACf,IAAK6hU,EAAOtoU,OAAOslV,eAAiBhd,EAAOn5T,GAAI,OAC/C,MAAM4jT,EAAMuV,EAAOn5T,GAAGuoH,UAAUh6H,MAAM,KAAK0U,QAAOslH,GACT,IAAhCA,EAAUn4H,QAAQ,WAA+E,IAA5Dm4H,EAAUn4H,QAAQ+oU,EAAOtoU,OAAOuyU,0BAE9EjK,EAAO8D,KAAK,oBAAqBrZ,EAAIv4S,KAAK,KAC5C,CACAssU,eAAAA,CAAgBxa,GACd,MAAMhE,EAAS7hU,KACf,OAAI6hU,EAAOuD,UAAkB,GACtBS,EAAQ50M,UAAUh6H,MAAM,KAAK0U,QAAOslH,GACI,IAAtCA,EAAUn4H,QAAQ,iBAAyE,IAAhDm4H,EAAUn4H,QAAQ+oU,EAAOtoU,OAAO4sU,cACjFpyT,KAAK,IACV,CACAy7T,iBAAAA,GACE,MAAM3N,EAAS7hU,KACf,IAAK6hU,EAAOtoU,OAAOslV,eAAiBhd,EAAOn5T,GAAI,OAC/C,MAAM43U,EAAU,GAChBze,EAAO2E,OAAO7tU,SAAQktU,IACpB,MAAM/uT,EAAa+qT,EAAOwe,gBAAgBxa,GAC1Cya,EAAQnnV,KAAK,CACX0sU,UACA/uT,eAEF+qT,EAAO8D,KAAK,cAAeE,EAAS/uT,EAAW,IAEjD+qT,EAAO8D,KAAK,gBAAiB2a,EAC/B,CACA1Z,oBAAAA,CAAqB3kP,EAAMoE,QACZ,IAATpE,IACFA,EAAO,gBAEK,IAAVoE,IACFA,GAAQ,GAEV,MACM,OACJ9sF,EAAM,OACNitU,EAAM,WACN4B,EAAU,gBACVC,EACAjnU,KAAMumU,EAAU,YAChBd,GAPa7mU,KASf,IAAIugV,EAAM,EACV,GAAoC,kBAAzBhnV,EAAOotU,cAA4B,OAAOptU,EAAOotU,cAC5D,GAAIptU,EAAO2vU,eAAgB,CACzB,IACIsX,EADAnX,EAAY7C,EAAOK,GAAevjU,KAAK4+G,KAAKskN,EAAOK,GAAaqD,iBAAmB,EAEvF,IAAK,IAAInsU,EAAI8oU,EAAc,EAAG9oU,EAAIyoU,EAAOnoU,OAAQN,GAAK,EAChDyoU,EAAOzoU,KAAOyiV,IAChBnX,GAAa/lU,KAAK4+G,KAAKskN,EAAOzoU,GAAGmsU,iBACjCqW,GAAO,EACHlX,EAAY1B,IAAY6Y,GAAY,IAG5C,IAAK,IAAIziV,EAAI8oU,EAAc,EAAG9oU,GAAK,EAAGA,GAAK,EACrCyoU,EAAOzoU,KAAOyiV,IAChBnX,GAAa7C,EAAOzoU,GAAGmsU,gBACvBqW,GAAO,EACHlX,EAAY1B,IAAY6Y,GAAY,GAG9C,MAEE,GAAa,YAATv+P,EACF,IAAK,IAAIlkF,EAAI8oU,EAAc,EAAG9oU,EAAIyoU,EAAOnoU,OAAQN,GAAK,EAAG,EACnCsoF,EAAQ+hP,EAAWrqU,GAAKsqU,EAAgBtqU,GAAKqqU,EAAWvB,GAAec,EAAaS,EAAWrqU,GAAKqqU,EAAWvB,GAAec,KAEhJ4Y,GAAO,EAEX,MAGA,IAAK,IAAIxiV,EAAI8oU,EAAc,EAAG9oU,GAAK,EAAGA,GAAK,EAAG,CACxBqqU,EAAWvB,GAAeuB,EAAWrqU,GAAK4pU,IAE5D4Y,GAAO,EAEX,CAGJ,OAAOA,CACT,CACAzrK,MAAAA,GACE,MAAM+sJ,EAAS7hU,KACf,IAAK6hU,GAAUA,EAAOuD,UAAW,OACjC,MAAM,SACJ+C,EAAQ,OACR5uU,GACEsoU,EAcJ,SAASgP,IACP,MAAM4P,EAAiB5e,EAAO+F,cAAmC,EAApB/F,EAAOI,UAAiBJ,EAAOI,UACtEqP,EAAehuU,KAAKyhG,IAAIzhG,KAAK69E,IAAIs/P,EAAgB5e,EAAO8L,gBAAiB9L,EAAOmL,gBACtFnL,EAAOgP,aAAaS,GACpBzP,EAAO4N,oBACP5N,EAAO6M,qBACT,CACA,IAAI7lL,EACJ,GApBItvJ,EAAOsjM,aACTglI,EAAO2Z,gBAET,IAAI3Z,EAAOn5T,GAAG2+G,iBAAiB,qBAAqB1uH,SAAQstU,IACtDA,EAAQnqL,UACVkqL,GAAqBnE,EAAQoE,EAC/B,IAEFpE,EAAOuF,aACPvF,EAAO0F,eACP1F,EAAO2L,iBACP3L,EAAO6M,sBASHn1U,EAAOo/U,UAAYp/U,EAAOo/U,SAAS7hL,UAAYv9J,EAAO4vU,QACxD0H,IACIt3U,EAAOk1U,YACT5M,EAAOoK,uBAEJ,CACL,IAA8B,SAAzB1yU,EAAOotU,eAA4BptU,EAAOotU,cAAgB,IAAM9E,EAAOgM,QAAUt0U,EAAO2vU,eAAgB,CAC3G,MAAM1C,EAAS3E,EAAOmG,SAAWzuU,EAAOyuU,QAAQlxK,QAAU+qK,EAAOmG,QAAQxB,OAAS3E,EAAO2E,OACzF39K,EAAag5K,EAAOkQ,QAAQvL,EAAOnoU,OAAS,EAAG,GAAG,GAAO,EAC3D,MACEwqJ,EAAag5K,EAAOkQ,QAAQlQ,EAAOgF,YAAa,GAAG,GAAO,GAEvDh+K,GACHgoL,GAEJ,CACIt3U,EAAOkyU,eAAiBtD,IAAatG,EAAOsG,UAC9CtG,EAAO6J,gBAET7J,EAAO8D,KAAK,SACd,CACA8X,eAAAA,CAAgBiD,EAAcC,QACT,IAAfA,IACFA,GAAa,GAEf,MAAM9e,EAAS7hU,KACT4gV,EAAmB/e,EAAOtoU,OAAO03K,UAKvC,OAJKyvK,IAEHA,EAAoC,eAArBE,EAAoC,WAAa,cAE9DF,IAAiBE,GAAqC,eAAjBF,GAAkD,aAAjBA,IAG1E7e,EAAOn5T,GAAGw+I,UAAU32I,OAAO,GAAGsxT,EAAOtoU,OAAOuyU,yBAAyB8U,KACrE/e,EAAOn5T,GAAGw+I,UAAUnmJ,IAAI,GAAG8gU,EAAOtoU,OAAOuyU,yBAAyB4U,KAClE7e,EAAOsb,uBACPtb,EAAOtoU,OAAO03K,UAAYyvK,EAC1B7e,EAAO2E,OAAO7tU,SAAQktU,IACC,aAAjB6a,EACF7a,EAAQl1O,MAAMiP,MAAQ,GAEtBimO,EAAQl1O,MAAMkP,OAAS,EACzB,IAEFgiO,EAAO8D,KAAK,mBACRgb,GAAY9e,EAAO/sJ,UAdd+sJ,CAgBX,CACAgf,uBAAAA,CAAwB5vK,GACtB,MAAM4wJ,EAAS7hU,KACX6hU,EAAOgG,KAAqB,QAAd52J,IAAwB4wJ,EAAOgG,KAAqB,QAAd52J,IACxD4wJ,EAAOgG,IAAoB,QAAd52J,EACb4wJ,EAAO+F,aAA2C,eAA5B/F,EAAOtoU,OAAO03K,WAA8B4wJ,EAAOgG,IACrEhG,EAAOgG,KACThG,EAAOn5T,GAAGw+I,UAAUnmJ,IAAI,GAAG8gU,EAAOtoU,OAAOuyU,6BACzCjK,EAAOn5T,GAAGsxK,IAAM,QAEhB6nJ,EAAOn5T,GAAGw+I,UAAU32I,OAAO,GAAGsxT,EAAOtoU,OAAOuyU,6BAC5CjK,EAAOn5T,GAAGsxK,IAAM,OAElB6nJ,EAAO/sJ,SACT,CACAgsK,KAAAA,CAAMr1U,GACJ,MAAMo2T,EAAS7hU,KACf,GAAI6hU,EAAOkf,QAAS,OAAO,EAG3B,IAAIr4U,EAAK+C,GAAWo2T,EAAOtoU,OAAOmP,GAIlC,GAHkB,kBAAPA,IACTA,EAAK+4E,SAAS0yE,cAAczrJ,KAEzBA,EACH,OAAO,EAETA,EAAGm5T,OAASA,EACRn5T,EAAGa,YAAcb,EAAGa,WAAW8/I,MAAQ3gJ,EAAGa,WAAW8/I,KAAKxuJ,WAAagnU,EAAOtoU,OAAOglV,sBAAsBhgV,gBAC7GsjU,EAAOqE,WAAY,GAErB,MAAM8a,EAAqBA,IAClB,KAAKnf,EAAOtoU,OAAOqlV,cAAgB,IAAIrnV,OAAON,MAAM,KAAK8c,KAAK,OAWvE,IAAIouT,EATe8e,MACjB,GAAIv4U,GAAMA,EAAG49T,YAAc59T,EAAG49T,WAAWnyK,cAAe,CAGtD,OAFYzrJ,EAAG49T,WAAWnyK,cAAc6sL,IAG1C,CACA,OAAOpe,GAAgBl6T,EAAIs4U,KAAsB,EAAE,EAGrCC,GAmBhB,OAlBK9e,GAAaN,EAAOtoU,OAAOilV,iBAC9Brc,EAAY9qT,GAAc,MAAOwqT,EAAOtoU,OAAOqlV,cAC/Cl2U,EAAGs9K,OAAOm8I,GACVS,GAAgBl6T,EAAI,IAAIm5T,EAAOtoU,OAAO4sU,cAAcxtU,SAAQktU,IAC1D1D,EAAUn8I,OAAO6/I,EAAQ,KAG7B1mU,OAAOmF,OAAOu9T,EAAQ,CACpBn5T,KACAy5T,YACAuF,SAAU7F,EAAOqE,YAAcx9T,EAAGa,WAAW8/I,KAAK63L,WAAax4U,EAAGa,WAAW8/I,KAAO84K,EACpFgf,OAAQtf,EAAOqE,UAAYx9T,EAAGa,WAAW8/I,KAAO3gJ,EAChDq4U,SAAS,EAETlZ,IAA8B,QAAzBn/T,EAAGsxK,IAAIhjL,eAA6D,QAAlC6hK,GAAanwJ,EAAI,aACxDk/T,aAA0C,eAA5B/F,EAAOtoU,OAAO03K,YAAwD,QAAzBvoK,EAAGsxK,IAAIhjL,eAA6D,QAAlC6hK,GAAanwJ,EAAI,cAC9Go/T,SAAiD,gBAAvCjvK,GAAaspK,EAAW,cAE7B,CACT,CACA36G,IAAAA,CAAK9+M,GACH,MAAMm5T,EAAS7hU,KACf,GAAI6hU,EAAOlhC,YAAa,OAAOkhC,EAE/B,IAAgB,IADAA,EAAOif,MAAMp4U,GACN,OAAOm5T,EAC9BA,EAAO8D,KAAK,cAGR9D,EAAOtoU,OAAOsjM,aAChBglI,EAAO2Z,gBAIT3Z,EAAOkc,aAGPlc,EAAOuF,aAGPvF,EAAO0F,eACH1F,EAAOtoU,OAAOkyU,eAChB5J,EAAO6J,gBAIL7J,EAAOtoU,OAAOu8U,YAAcjU,EAAO/qK,SACrC+qK,EAAOkU,gBAILlU,EAAOtoU,OAAOolM,MAAQkjI,EAAOmG,SAAWnG,EAAOtoU,OAAOyuU,QAAQlxK,QAChE+qK,EAAOkQ,QAAQlQ,EAAOtoU,OAAOg5U,aAAe1Q,EAAOmG,QAAQ0C,aAAc,EAAG7I,EAAOtoU,OAAO62U,oBAAoB,GAAO,GAErHvO,EAAOkQ,QAAQlQ,EAAOtoU,OAAOg5U,aAAc,EAAG1Q,EAAOtoU,OAAO62U,oBAAoB,GAAO,GAIrFvO,EAAOtoU,OAAOolM,MAChBkjI,EAAOoS,aAITpS,EAAOya,eACP,MAAM8E,EAAe,IAAIvf,EAAOn5T,GAAG2+G,iBAAiB,qBAsBpD,OArBIw6M,EAAOqE,WACTkb,EAAajoV,QAAQ0oU,EAAOsf,OAAO95N,iBAAiB,qBAEtD+5N,EAAazoV,SAAQstU,IACfA,EAAQnqL,SACVkqL,GAAqBnE,EAAQoE,GAE7BA,EAAQ/yO,iBAAiB,QAAQv7F,IAC/BquU,GAAqBnE,EAAQlqU,EAAE4M,OAAO,GAE1C,IAEFyxL,GAAQ6rI,GAGRA,EAAOlhC,aAAc,EACrB3qG,GAAQ6rI,GAGRA,EAAO8D,KAAK,QACZ9D,EAAO8D,KAAK,aACL9D,CACT,CACAtrN,OAAAA,CAAQ8qO,EAAgBC,QACC,IAAnBD,IACFA,GAAiB,QAEC,IAAhBC,IACFA,GAAc,GAEhB,MAAMzf,EAAS7hU,MACT,OACJzG,EAAM,GACNmP,EAAE,UACFy5T,EAAS,OACTqE,GACE3E,EACJ,MAA6B,qBAAlBA,EAAOtoU,QAA0BsoU,EAAOuD,YAGnDvD,EAAO8D,KAAK,iBAGZ9D,EAAOlhC,aAAc,EAGrBkhC,EAAO0a,eAGHhjV,EAAOolM,MACTkjI,EAAO8T,cAIL2L,IACFzf,EAAOsc,gBACHz1U,GAAoB,kBAAPA,GACfA,EAAGoP,gBAAgB,SAEjBqqT,GACFA,EAAUrqT,gBAAgB,SAExB0uT,GAAUA,EAAOnoU,QACnBmoU,EAAO7tU,SAAQktU,IACbA,EAAQ3+K,UAAU32I,OAAOhX,EAAO8zU,kBAAmB9zU,EAAO+zU,uBAAwB/zU,EAAO81U,iBAAkB91U,EAAO+1U,eAAgB/1U,EAAOg2U,gBACzI1J,EAAQ/tT,gBAAgB,SACxB+tT,EAAQ/tT,gBAAgB,0BAA0B,KAIxD+pT,EAAO8D,KAAK,WAGZxmU,OAAO0M,KAAKg2T,EAAOsD,iBAAiBxsU,SAAQy8L,IAC1CysI,EAAO5mM,IAAIm6D,EAAU,KAEA,IAAnBisJ,IACExf,EAAOn5T,IAA2B,kBAAdm5T,EAAOn5T,KAC7Bm5T,EAAOn5T,GAAGm5T,OAAS,MDvxH3B,SAAqB/jU,GACnB,MAAM2F,EAAS3F,EACfqB,OAAO0M,KAAKpI,GAAQ9K,SAAQI,IAC1B,IACE0K,EAAO1K,GAAO,IAChB,CAAE,MAAOpB,IACP,CAEF,WACS8L,EAAO1K,EAChB,CAAE,MAAOpB,IACP,IAGN,CC2wHM4pV,CAAY1f,IAEdA,EAAOuD,WAAY,GA5CV,IA8CX,CACA,qBAAOoc,CAAeC,GACpBv8O,GAAOk6O,GAAkBqC,EAC3B,CACA,2BAAWrC,GACT,OAAOA,EACT,CACA,mBAAWntJ,GACT,OAAOA,EACT,CACA,oBAAOyvJ,CAAchC,GACdL,GAAOjgV,UAAUqgV,cAAaJ,GAAOjgV,UAAUqgV,YAAc,IAClE,MAAMD,EAAUH,GAAOjgV,UAAUqgV,YACd,oBAARC,GAAsBF,EAAQ1mV,QAAQ4mV,GAAO,GACtDF,EAAQrmV,KAAKumV,EAEjB,CACA,UAAOnzI,CAAIn2M,GACT,OAAI6C,MAAMC,QAAQ9C,IAChBA,EAAOuC,SAAQ8nF,GAAK4+P,GAAOqC,cAAcjhQ,KAClC4+P,KAETA,GAAOqC,cAActrV,GACdipV,GACT,EAEFlgV,OAAO0M,KAAKszU,IAAYxmV,SAAQgpV,IAC9BxiV,OAAO0M,KAAKszU,GAAWwC,IAAiBhpV,SAAQipV,IAC9CvC,GAAOjgV,UAAUwiV,GAAezC,GAAWwC,GAAgBC,EAAY,GACvE,IAEJvC,GAAO9yI,IAAI,CA5tHX,SAAgB5pM,GACd,IAAI,OACFk/T,EAAM,GACN7mM,EAAE,KACF2qM,GACEhjU,EACJ,MAAMzM,EAASqqU,KACf,IAAIshB,EAAW,KACXC,EAAiB,KACrB,MAAMtyJ,EAAgBA,KACfqyI,IAAUA,EAAOuD,WAAcvD,EAAOlhC,cAC3CglC,EAAK,gBACLA,EAAK,UAAS,EAsCVoc,EAA2BA,KAC1BlgB,IAAUA,EAAOuD,WAAcvD,EAAOlhC,aAC3CglC,EAAK,oBAAoB,EAE3B3qM,EAAG,QAAQ,KACL6mM,EAAOtoU,OAAOs2L,gBAAmD,qBAA1B35L,EAAOk5L,eAxC7CyyI,IAAUA,EAAOuD,WAAcvD,EAAOlhC,cAC3CkhD,EAAW,IAAIzyJ,gBAAe+qF,IAC5B2nE,EAAiB5rV,EAAO+hK,uBAAsB,KAC5C,MAAM,MACJr4D,EAAK,OACLC,GACEgiO,EACJ,IAAImgB,EAAWpiP,EACXusO,EAAYtsO,EAChBs6K,EAAQxhR,SAAQ4lI,IACd,IAAI,eACF0jN,EAAc,YACdC,EAAW,OACX39U,GACEg6H,EACAh6H,GAAUA,IAAWs9T,EAAOn5T,KAChCs5U,EAAWE,EAAcA,EAAYtiP,OAASqiP,EAAe,IAAMA,GAAgBE,WACnFhW,EAAY+V,EAAcA,EAAYriP,QAAUoiP,EAAe,IAAMA,GAAgB5qH,UAAS,IAE5F2qH,IAAapiP,GAASusO,IAActsO,GACtC2vF,GACF,GACA,IAEJqyJ,EAASpyJ,QAAQoyI,EAAOn5T,MAoBxBxS,EAAOg9F,iBAAiB,SAAUs8F,GAClCt5L,EAAOg9F,iBAAiB,oBAAqB6uP,GAAyB,IAExE/mN,EAAG,WAAW,KApBR8mN,GACF5rV,EAAOkiK,qBAAqB0pL,GAE1BD,GAAYA,EAASlyJ,WAAakyI,EAAOn5T,KAC3Cm5U,EAASlyJ,UAAUkyI,EAAOn5T,IAC1Bm5U,EAAW,MAiBb3rV,EAAOi9F,oBAAoB,SAAUq8F,GACrCt5L,EAAOi9F,oBAAoB,oBAAqB4uP,EAAyB,GAE7E,EAEA,SAAkBp/U,GAChB,IAAI,OACFk/T,EAAM,aACN8d,EAAY,GACZ3kN,EAAE,KACF2qM,GACEhjU,EACJ,MAAMy/U,EAAY,GACZlsV,EAASqqU,KACT8hB,EAAS,SAAU99U,EAAQjL,QACf,IAAZA,IACFA,EAAU,CAAC,GAEb,MACMuoV,EAAW,IADI3rV,EAAOotT,kBAAoBptT,EAAOosV,yBACrB/vB,IAIhC,GAAIsP,EAAOsT,oBAAqB,OAChC,GAAyB,IAArB5iB,EAAUl0T,OAEZ,YADAsnU,EAAK,iBAAkBpT,EAAU,IAGnC,MAAMgwB,EAAiB,WACrB5c,EAAK,iBAAkBpT,EAAU,GACnC,EACIr8T,EAAO+hK,sBACT/hK,EAAO+hK,sBAAsBsqL,GAE7BrsV,EAAO4F,WAAWymV,EAAgB,EACpC,IAEFV,EAASpyJ,QAAQlrL,EAAQ,CACvB4P,WAA0C,qBAAvB7a,EAAQ6a,YAAoC7a,EAAQ6a,WACvEk/S,UAAWwO,EAAOqE,YAA2C,qBAAtB5sU,EAAQ+5T,WAAmC/5T,GAAS+5T,UAC3FC,cAAgD,qBAA1Bh6T,EAAQg6T,eAAuCh6T,EAAQg6T,gBAE/E8uB,EAAUjpV,KAAK0oV,EACjB,EAyBAlC,EAAa,CACXkC,UAAU,EACVW,gBAAgB,EAChBC,sBAAsB,IAExBznN,EAAG,QA7BUwsF,KACX,GAAKq6G,EAAOtoU,OAAOsoV,SAAnB,CACA,GAAIhgB,EAAOtoU,OAAOipV,eAAgB,CAChC,MAAME,EAAmBxf,GAAerB,EAAOsf,QAC/C,IAAK,IAAIpjV,EAAI,EAAGA,EAAI2kV,EAAiBrkV,OAAQN,GAAK,EAChDskV,EAAOK,EAAiB3kV,GAE5B,CAEAskV,EAAOxgB,EAAOsf,OAAQ,CACpB9tB,UAAWwO,EAAOtoU,OAAOkpV,uBAI3BJ,EAAOxgB,EAAOM,UAAW,CACvBhuT,YAAY,GAdqB,CAejC,IAcJ6mH,EAAG,WAZazkB,KACd6rO,EAAUzpV,SAAQkpV,IAChBA,EAASjyJ,YAAY,IAEvBwyJ,EAAUh7N,OAAO,EAAGg7N,EAAU/jV,OAAO,GASzC,ICnPA,MAAMskV,GAAa,CAAC,eAAgB,eAAgB,mBAAoB,UAAW,OAAQ,aAAc,iBAAkB,wBAAyB,oBAAqB,eAAgB,SAAU,UAAW,uBAAwB,iBAAkB,SAAU,oBAAqB,WAAY,SAAU,UAAW,iCAAkC,YAAa,MAAO,sBAAuB,sBAAuB,YAAa,cAAe,iBAAkB,mBAAoB,UAAW,cAAe,kBAAmB,gBAAiB,iBAAkB,0BAA2B,QAAS,kBAAmB,sBAAuB,sBAAuB,kBAAmB,wBAAyB,sBAAuB,qBAAsB,sBAAuB,4BAA6B,iBAAkB,eAAgB,aAAc,aAAc,gBAAiB,eAAgB,cAAe,kBAAmB,eAAgB,gBAAiB,iBAAkB,aAAc,2BAA4B,2BAA4B,gCAAiC,sBAAuB,oBAAqB,cAAe,mBAAoB,uBAAwB,cAAe,gBAAiB,2BAA4B,uBAAwB,QAAS,uBAAwB,qBAAsB,sBAAuB,UAAW,kBAAmB,kBAAmB,gBAAiB,aAAc,iBAAkB,oBAAqB,mBAAoB,yBAA0B,aAAc,mBAAoB,oBAAqB,yBAA0B,iBAAkB,iBAAkB,kBAAmB,eAAgB,qBAAsB,sBAAuB,qBAAsB,WAAY,iBAAkB,uBAEluD,OAAQ,YAAa,cAAe,kBAAmB,aAAc,aAAc,aAAc,iBAAkB,cAAe,iBAAkB,UAAW,WAAY,aAAc,cAAe,cAAe,WAAY,aAAc,UAAW,UAAW,OAAQ,WAE/Q,SAAS14M,GAASxrI,GAChB,MAAoB,kBAANA,GAAwB,OAANA,GAAcA,EAAEa,aAAkE,WAAnDH,OAAOC,UAAUC,SAASR,KAAKJ,GAAGzF,MAAM,GAAI,KAAoByF,EAAE+iU,UACnI,CACA,SAASt8N,GAAO3gG,EAAQwH,GACtB,MAAMo1T,EAAW,CAAC,YAAa,cAAe,aAC9ChiU,OAAO0M,KAAKE,GAAKJ,QAAO5S,GAAOooU,EAASroU,QAAQC,GAAO,IAAGJ,SAAQI,IACrC,qBAAhBwL,EAAOxL,GAAsBwL,EAAOxL,GAAOgT,EAAIhT,GAAckxI,GAASl+H,EAAIhT,KAASkxI,GAAS1lI,EAAOxL,KAASoG,OAAO0M,KAAKE,EAAIhT,IAAMsF,OAAS,EAChJ0N,EAAIhT,GAAKyoU,WAAYj9T,EAAOxL,GAAOgT,EAAIhT,GAAUmsG,GAAO3gG,EAAOxL,GAAMgT,EAAIhT,IAE7EwL,EAAOxL,GAAOgT,EAAIhT,EACpB,GAEJ,CACA,SAAS6pV,GAAgBrpV,GAIvB,YAHe,IAAXA,IACFA,EAAS,CAAC,GAELA,EAAO6hV,YAAkD,qBAA7B7hV,EAAO6hV,WAAWC,QAA8D,qBAA7B9hV,EAAO6hV,WAAWE,MAC1G,CACA,SAASuH,GAAgBtpV,GAIvB,YAHe,IAAXA,IACFA,EAAS,CAAC,GAELA,EAAOupV,YAA8C,qBAAzBvpV,EAAOupV,WAAWp6U,EACvD,CACA,SAASq6U,GAAexpV,GAItB,YAHe,IAAXA,IACFA,EAAS,CAAC,GAELA,EAAOypV,WAA4C,qBAAxBzpV,EAAOypV,UAAUt6U,EACrD,CACA,SAASu6U,GAAcnsU,QACF,IAAfA,IACFA,EAAa,IAEf,MAAMq2Q,EAAUr2Q,EAAW7f,MAAM,KAAKof,KAAIpG,GAAKA,EAAE1Y,SAAQoU,QAAOsE,KAAOA,IACjEizU,EAAS,GAIf,OAHA/1D,EAAQx0R,SAAQsX,IACVizU,EAAOpqV,QAAQmX,GAAK,GAAGizU,EAAO/pV,KAAK8W,EAAE,IAEpCizU,EAAOnvU,KAAK,IACrB,CAOA,SAAS6qU,GAAa3tN,GAIpB,YAHkB,IAAdA,IACFA,EAAY,IAETA,EACAA,EAAU7mC,SAAS,kBACjB6mC,EAD2C,kBAAkBA,IAD7C,gBAGzB,CC3CA,SAASj5H,KAYP,OAXAA,GAAWmH,OAAOmF,OAASnF,OAAOmF,OAAOvF,OAAS,SAAUwF,GAC1D,IAAK,IAAIxG,EAAI,EAAGA,EAAIkM,UAAU5L,OAAQN,IAAK,CACzC,IAAIyG,EAASyF,UAAUlM,GACvB,IAAK,IAAIhF,KAAOyL,EACVrF,OAAOC,UAAUvB,eAAegB,KAAK2F,EAAQzL,KAC/CwL,EAAOxL,GAAOyL,EAAOzL,GAG3B,CACA,OAAOwL,CACT,EACOvM,GAASF,MAAMkI,KAAMiK,UAC9B,CAEA,SAASk5U,GAAmBvyU,GAC1B,OAAOA,EAAMvZ,MAAQuZ,EAAMvZ,KAAK8yF,aAAev5E,EAAMvZ,KAAK8yF,YAAYC,SAAS,cACjF,CACA,SAASg5P,GAAgBnzU,GACvB,MAAMu2T,EAAS,GAQf,OAPA/pC,EAAAA,SAAe7mK,QAAQ3lH,GAAGtX,SAAQiY,IAC5BuyU,GAAmBvyU,GACrB41T,EAAOrtU,KAAKyX,GACHA,EAAMm0E,OAASn0E,EAAMm0E,MAAMgI,UACpCq2P,GAAgBxyU,EAAMm0E,MAAMgI,UAAUp0F,SAAQ8wU,GAASjD,EAAOrtU,KAAKswU,IACrE,IAEKjD,CACT,CACA,SAASnlC,GAAYpxR,GACnB,MAAMu2T,EAAS,GACT6c,EAAQ,CACZ,kBAAmB,GACnB,gBAAiB,GACjB,gBAAiB,GACjB,cAAe,IAkBjB,OAhBA5mD,EAAAA,SAAe7mK,QAAQ3lH,GAAGtX,SAAQiY,IAChC,GAAIuyU,GAAmBvyU,GACrB41T,EAAOrtU,KAAKyX,QACP,GAAIA,EAAMm0E,OAASn0E,EAAMm0E,MAAMu+P,MAAQD,EAAMzyU,EAAMm0E,MAAMu+P,MAC9DD,EAAMzyU,EAAMm0E,MAAMu+P,MAAMnqV,KAAKyX,QACxB,GAAIA,EAAMm0E,OAASn0E,EAAMm0E,MAAMgI,SAAU,CAC9C,MAAMw2P,EAAcH,GAAgBxyU,EAAMm0E,MAAMgI,UAC5Cw2P,EAAYllV,OAAS,EACvBklV,EAAY5qV,SAAQ8wU,GAASjD,EAAOrtU,KAAKswU,KAEzC4Z,EAAM,iBAAiBlqV,KAAKyX,EAEhC,MACEyyU,EAAM,iBAAiBlqV,KAAKyX,EAC9B,IAEK,CACL41T,SACA6c,QAEJ,CAwCA,SAASjmD,GAA0B9mS,EAAUkgH,GAE3C,MAAsB,qBAAXtgH,QAA+B2hH,EAAAA,EAAAA,WAAUvhH,EAAUkgH,IACvDwB,EAAAA,EAAAA,iBAAgB1hH,EAAUkgH,EACnC,CAEA,MAAMgtO,IAAkCptN,EAAAA,EAAAA,eAAc,MAIhDqtN,IAA6BrtN,EAAAA,EAAAA,eAAc,MAK3CipN,IAAsBxoN,EAAAA,EAAAA,aAAW,SAAUn0H,EAAOghV,GACtD,IAAI,UACFzyN,EACA3mC,IAAKq5P,EAAM,MACXC,WAAYC,EAAa,MAAK,SAC9B92P,EAAQ,SACR+2P,KACG3qD,QACS,IAAVz2R,EAAmB,CAAC,EAAIA,EACxBqhV,GAAiB,EACrB,MAAOC,EAAkBC,IAAuB7rO,EAAAA,EAAAA,UAAS,WAClD8rO,EAAaC,IAAkB/rO,EAAAA,EAAAA,UAAS,OACxCgsO,EAAmBC,IAAwBjsO,EAAAA,EAAAA,WAAS,GACrDksO,GAAiBnsO,EAAAA,EAAAA,SAAO,GACxBosO,GAAcpsO,EAAAA,EAAAA,QAAO,MACrBqsO,GAAYrsO,EAAAA,EAAAA,QAAO,MACnBssO,GAAqBtsO,EAAAA,EAAAA,QAAO,MAC5BusO,GAAYvsO,EAAAA,EAAAA,QAAO,MACnBwsO,GAAYxsO,EAAAA,EAAAA,QAAO,MACnBysO,GAAYzsO,EAAAA,EAAAA,QAAO,MACnB0sO,GAAkB1sO,EAAAA,EAAAA,QAAO,MACzB2sO,GAAiB3sO,EAAAA,EAAAA,QAAO,OAE5B5+G,OAAQqmV,EAAY,aACpBC,EACA1mD,KAAM4rD,EAAS,OACf7f,GCxJJ,SAAmBpnU,EAAKknV,QACV,IAARlnV,IACFA,EAAM,CAAC,QAEW,IAAhBknV,IACFA,GAAc,GAEhB,MAAMzrV,EAAS,CACbyhI,GAAI,CAAC,GAEDkqM,EAAS,CAAC,EACV2a,EAAe,CAAC,EACtB36O,GAAO3rG,EAAQ04L,IACf14L,EAAOslV,cAAe,EACtBtlV,EAAOiuN,MAAO,EACd,MAAM2xE,EAAO,CAAC,EACR8rD,EAAgBtC,GAAWtsU,KAAItd,GAAOA,EAAIwM,QAAQ,IAAK,MACvD2/U,EAAW/lV,OAAOmF,OAAO,CAAC,EAAGxG,GA2BnC,OA1BAqB,OAAO0M,KAAKq5U,GAAUvsV,SAAQI,IACJ,qBAAb+E,EAAI/E,KACXksV,EAAcnsV,QAAQC,IAAQ,EAC5BkxI,GAASnsI,EAAI/E,KACfQ,EAAOR,GAAO,CAAC,EACf8mV,EAAa9mV,GAAO,CAAC,EACrBmsG,GAAO3rG,EAAOR,GAAM+E,EAAI/E,IACxBmsG,GAAO26O,EAAa9mV,GAAM+E,EAAI/E,MAE9BQ,EAAOR,GAAO+E,EAAI/E,GAClB8mV,EAAa9mV,GAAO+E,EAAI/E,IAES,IAA1BA,EAAIkpG,OAAO,YAAwC,oBAAbnkG,EAAI/E,GAC/CisV,EACF9f,EAAO,GAAGnsU,EAAI,GAAG/B,gBAAgB+B,EAAIuN,OAAO,MAAQxI,EAAI/E,GAExDQ,EAAOyhI,GAAG,GAAGjiI,EAAI,GAAG/B,gBAAgB+B,EAAIuN,OAAO,MAAQxI,EAAI/E,GAG7DogS,EAAKpgS,GAAO+E,EAAI/E,GAClB,IAEF,CAAC,aAAc,aAAc,aAAaJ,SAAQI,KAC5B,IAAhBQ,EAAOR,KAAeQ,EAAOR,GAAO,CAAC,IACrB,IAAhBQ,EAAOR,WAAuBQ,EAAOR,EAAI,IAExC,CACLQ,SACAsmV,eACA1mD,OACA+rC,SAEJ,CDuGMigB,CAAUhsD,IACR,OACJqtC,EAAM,MACN6c,GACEhiD,GAAYt0M,GACVq4P,EAAqBA,KACzBf,GAAsBD,EAAkB,EAE1CjlV,OAAOmF,OAAOs7U,EAAa5kN,GAAI,CAC7BqqN,iBAAAA,CAAkBxjB,EAAQ10C,GACxB82D,EAAoB92D,EACtB,IAEF,MAAMm4D,EAAaA,KAEjBnmV,OAAOmF,OAAOs7U,EAAa5kN,GAAIkqM,GAC/B6e,GAAiB,EACjB,MAAMwB,EAAa,IACd3F,GAIL,UAFO2F,EAAW3G,aAClB4F,EAAUn7U,QAAU,IAAIm8U,GAASD,GAC7Bf,EAAUn7U,QAAQ2+T,SAAWwc,EAAUn7U,QAAQ9P,OAAOyuU,QAAQlxK,QAAS,CACzE0tL,EAAUn7U,QAAQ2+T,QAAQxB,OAASA,EACnC,MAAMif,EAAa,CACjBv/N,OAAO,EACPsgN,SACAkf,eAAgBvB,EAChBwB,sBAAsB,GAExBzgP,GAAOs/O,EAAUn7U,QAAQ9P,OAAOyuU,QAASyd,GACzCvgP,GAAOs/O,EAAUn7U,QAAQwzU,eAAe7U,QAASyd,EACnD,GAEGlB,EAAYl7U,SACfi8U,IAIEd,EAAUn7U,SACZm7U,EAAUn7U,QAAQ2xH,GAAG,oBAAqBoqN,GA8F5C,OAhFAvtO,EAAAA,EAAAA,YAAU,IACD,KACD2sO,EAAUn7U,SAASm7U,EAAUn7U,QAAQ4xH,IAAI,oBAAqBmqN,EAAmB,KAKzFvtO,EAAAA,EAAAA,YAAU,MACHysO,EAAej7U,SAAWm7U,EAAUn7U,UACvCm7U,EAAUn7U,QAAQmmU,oBAClB8U,EAAej7U,SAAU,EAC3B,IAIF+zR,IAA0B,KAIxB,GAHIsmD,IACFA,EAAcr6U,QAAUk7U,EAAYl7U,SAEjCk7U,EAAYl7U,QAcjB,OAbIm7U,EAAUn7U,QAAQ+7T,WACpBkgB,IChLN,SAAqB3iV,EAAMi9U,GACzB,IAAI,GACFl3U,EAAE,OACF2yU,EAAM,OACNC,EAAM,aACNsK,EAAY,YACZC,EAAW,OACXhkB,GACEl/T,EACAigV,GAAgBhD,IAAiBvE,GAAUC,IAC7CzZ,EAAOtoU,OAAO6hV,WAAWC,OAASA,EAClCxZ,EAAOgb,eAAezB,WAAWC,OAASA,EAC1CxZ,EAAOtoU,OAAO6hV,WAAWE,OAASA,EAClCzZ,EAAOgb,eAAezB,WAAWE,OAASA,GAExCuH,GAAgBjD,IAAiBgG,IACnC/jB,EAAOtoU,OAAOupV,WAAWp6U,GAAKk9U,EAC9B/jB,EAAOgb,eAAeiG,WAAWp6U,GAAKk9U,GAEpC7C,GAAenD,IAAiBiG,IAClChkB,EAAOtoU,OAAOypV,UAAUt6U,GAAKm9U,EAC7BhkB,EAAOgb,eAAemG,UAAUt6U,GAAKm9U,GAEvChkB,EAAOr6G,KAAK9+M,EACd,CD0JIo9U,CAAY,CACVp9U,GAAI67U,EAAYl7U,QAChBgyU,OAAQsJ,EAAUt7U,QAClBiyU,OAAQsJ,EAAUv7U,QAClBu8U,aAAcf,EAAgBx7U,QAC9Bw8U,YAAaf,EAAez7U,QAC5Bw4T,OAAQ2iB,EAAUn7U,SACjBu2U,GACCkE,IAAaU,EAAUn7U,QAAQ+7T,WAAW0e,EAASU,EAAUn7U,SAE1D,KACDm7U,EAAUn7U,UAAYm7U,EAAUn7U,QAAQ+7T,WAC1Cof,EAAUn7U,QAAQktG,SAAQ,GAAM,EAClC,CACD,GACA,IAGH6mL,IAA0B,MApDpB2mD,GAAmB7e,GAAWsf,EAAUn7U,SAC5ClK,OAAO0M,KAAKq5T,GAAQvsU,SAAQy8L,IAC1BovJ,EAAUn7U,QAAQ2xH,GAAGo6D,EAAW8vI,EAAO9vI,GAAW,IAoDpD,MAAM2wJ,EC5KV,SAA0BnG,EAAcoG,EAAWj5P,EAAUk5P,EAAaC,GACxE,MAAMr6U,EAAO,GACb,IAAKm6U,EAAW,OAAOn6U,EACvB,MAAMs6U,EAASptV,IACT8S,EAAK/S,QAAQC,GAAO,GAAG8S,EAAK1S,KAAKJ,EAAI,EAE3C,GAAIg0F,GAAYk5P,EAAa,CAC3B,MAAMG,EAAkBH,EAAY5vU,IAAI6vU,GAClCG,EAAet5P,EAAS12E,IAAI6vU,GAC9BE,EAAgBryU,KAAK,MAAQsyU,EAAatyU,KAAK,KAAKoyU,EAAO,YAC3DF,EAAY5nV,SAAW0uF,EAAS1uF,QAAQ8nV,EAAO,WACrD,CAwBA,OAvBoBxD,GAAWh3U,QAAO5S,GAAkB,MAAXA,EAAI,KAAYsd,KAAItd,GAAOA,EAAIwM,QAAQ,IAAK,MAC7E5M,SAAQI,IAClB,GAAIA,KAAO6mV,GAAgB7mV,KAAOitV,EAChC,GAAI/7M,GAAS21M,EAAa7mV,KAASkxI,GAAS+7M,EAAUjtV,IAAO,CAC3D,MAAMutV,EAAUnnV,OAAO0M,KAAK+zU,EAAa7mV,IACnCwtV,EAAUpnV,OAAO0M,KAAKm6U,EAAUjtV,IAClCutV,EAAQjoV,SAAWkoV,EAAQloV,OAC7B8nV,EAAOptV,IAEPutV,EAAQ3tV,SAAQ6tV,IACV5G,EAAa7mV,GAAKytV,KAAYR,EAAUjtV,GAAKytV,IAC/CL,EAAOptV,EACT,IAEFwtV,EAAQ5tV,SAAQ8tV,IACV7G,EAAa7mV,GAAK0tV,KAAYT,EAAUjtV,GAAK0tV,IAASN,EAAOptV,EAAI,IAG3E,MAAW6mV,EAAa7mV,KAASitV,EAAUjtV,IACzCotV,EAAOptV,EAEX,IAEK8S,CACT,CDwI0B66U,CAAiB7G,EAAc4E,EAAmBp7U,QAASm9T,EAAQke,EAAUr7U,SAAS4G,GAAKA,EAAElX,MAenH,OAdA0rV,EAAmBp7U,QAAUw2U,EAC7B6E,EAAUr7U,QAAUm9T,EAChBuf,EAAc1nV,QAAUmmV,EAAUn7U,UAAYm7U,EAAUn7U,QAAQ+7T,WDlMxE,SAAsBziU,GACpB,IAAI,OACFk/T,EAAM,OACN2E,EAAM,aACNqZ,EAAY,cACZkG,EAAa,OACb1K,EAAM,OACNC,EAAM,YACNuK,EAAW,aACXD,GACEjjV,EACJ,MAAMgkV,EAAeZ,EAAcp6U,QAAO5S,GAAe,aAARA,GAA8B,cAARA,GAA+B,iBAARA,KAE5FQ,OAAQqtV,EAAa,WACrB9D,EAAU,WACV1H,EAAU,UACV4H,EAAS,QACThb,EAAO,OACP6e,GACEhlB,EACJ,IAAIilB,EACAC,EACAC,EACAC,EACAC,EACAC,EACAC,EACAC,EACAtB,EAAc37P,SAAS,WAAay1P,EAAagH,QAAUhH,EAAagH,OAAOhlB,QAAU+kB,EAAcC,SAAWD,EAAcC,OAAOhlB,SACzIilB,GAAiB,GAEff,EAAc37P,SAAS,eAAiBy1P,EAAavpC,YAAcupC,EAAavpC,WAAWm/B,SAAWmR,EAActwC,aAAeswC,EAActwC,WAAWm/B,UAC9JsR,GAAqB,GAEnBhB,EAAc37P,SAAS,eAAiBy1P,EAAaiD,aAAejD,EAAaiD,WAAWp6U,IAAMk9U,KAAkBgB,EAAc9D,aAA2C,IAA7B8D,EAAc9D,aAAyBA,IAAeA,EAAWp6U,KACnNs+U,GAAqB,GAEnBjB,EAAc37P,SAAS,cAAgBy1P,EAAamD,YAAcnD,EAAamD,UAAUt6U,IAAMm9U,KAAiBe,EAAc5D,YAAyC,IAA5B4D,EAAc5D,YAAwBA,IAAcA,EAAUt6U,KAC3Mu+U,GAAoB,GAElBlB,EAAc37P,SAAS,eAAiBy1P,EAAazE,aAAeyE,EAAazE,WAAWE,QAAUA,KAAYuE,EAAazE,WAAWC,QAAUA,KAAYuL,EAAcxL,aAA2C,IAA7BwL,EAAcxL,aAAyBA,IAAeA,EAAWE,SAAWF,EAAWC,SACrR6L,GAAqB,GAEvB,MAAMI,EAAgB5H,IACf7d,EAAO6d,KACZ7d,EAAO6d,GAAKnpO,UACA,eAARmpO,GACE7d,EAAOqE,YACTrE,EAAO6d,GAAKpE,OAAO/qU,SACnBsxT,EAAO6d,GAAKrE,OAAO9qU,UAErBq2U,EAAclH,GAAKpE,YAAShhV,EAC5BssV,EAAclH,GAAKrE,YAAS/gV,EAC5BunU,EAAO6d,GAAKpE,YAAShhV,EACrBunU,EAAO6d,GAAKrE,YAAS/gV,IAEjBunU,EAAOqE,WACTrE,EAAO6d,GAAKh3U,GAAG6H,SAEjBq2U,EAAclH,GAAKh3U,QAAKpO,EACxBunU,EAAO6d,GAAKh3U,QAAKpO,GACnB,EAEEyrV,EAAc37P,SAAS,SAAWy3O,EAAOqE,YACvC0gB,EAAcjoJ,OAASkhJ,EAAalhJ,KACtCwoJ,GAAkB,GACRP,EAAcjoJ,MAAQkhJ,EAAalhJ,KAC7CyoJ,GAAiB,EAEjBC,GAAiB,GAGrBV,EAAahuV,SAAQI,IACnB,GAAIkxI,GAAS28M,EAAc7tV,KAASkxI,GAAS41M,EAAa9mV,IACxDoG,OAAOmF,OAAOsiV,EAAc7tV,GAAM8mV,EAAa9mV,IAClC,eAARA,GAAgC,eAARA,GAAgC,cAARA,KAAwB,YAAa8mV,EAAa9mV,KAAS8mV,EAAa9mV,GAAK+9J,SAChIwwL,EAAcvuV,OAEX,CACL,MAAMwuV,EAAW1H,EAAa9mV,IACZ,IAAbwuV,IAAkC,IAAbA,GAAgC,eAARxuV,GAAgC,eAARA,GAAgC,cAARA,EAKhG6tV,EAAc7tV,GAAO8mV,EAAa9mV,IAJjB,IAAbwuV,GACFD,EAAcvuV,EAKpB,KAEE4tV,EAAav8P,SAAS,gBAAkB28P,GAAsBllB,EAAOvrB,YAAcurB,EAAOvrB,WAAWm/B,SAAWmR,EAActwC,YAAcswC,EAActwC,WAAWm/B,UACvK5T,EAAOvrB,WAAWm/B,QAAUmR,EAActwC,WAAWm/B,SAEnDsQ,EAAc37P,SAAS,aAAeo8O,GAAUwB,GAAW4e,EAAc5e,QAAQlxK,SACnFkxK,EAAQxB,OAASA,EACjBwB,EAAQlzJ,QAAO,IACNixK,EAAc37P,SAAS,YAAc49O,GAAW4e,EAAc5e,QAAQlxK,UAC3E0vK,IAAQwB,EAAQxB,OAASA,GAC7BwB,EAAQlzJ,QAAO,IAEbixK,EAAc37P,SAAS,aAAeo8O,GAAUogB,EAAcjoJ,OAChE0oJ,GAAiB,GAEfP,GACkBD,EAAOr/H,QACVq/H,EAAO/xK,QAAO,GAE7BiyK,IACFllB,EAAOvrB,WAAWm/B,QAAUmR,EAActwC,WAAWm/B,SAEnDuR,KACEnlB,EAAOqE,WAAe0f,GAAwC,kBAAjBA,IAC/CA,EAAenkQ,SAASpqE,cAAc,OACtCuuU,EAAa1+L,UAAUnmJ,IAAI,qBAC3B6kV,EAAan2R,KAAK1uD,IAAI,cACtB8gU,EAAOn5T,GAAG9B,YAAYg/U,IAEpBA,IAAcgB,EAAc9D,WAAWp6U,GAAKk9U,GAChD9C,EAAWt7H,OACXs7H,EAAWv4P,SACXu4P,EAAWhuK,UAETmyK,KACEplB,EAAOqE,WAAe2f,GAAsC,kBAAhBA,IAC9CA,EAAcpkQ,SAASpqE,cAAc,OACrCwuU,EAAY3+L,UAAUnmJ,IAAI,oBAC1B8kV,EAAYp2R,KAAK1uD,IAAI,aACrB8gU,EAAOn5T,GAAG9B,YAAYi/U,IAEpBA,IAAae,EAAc5D,UAAUt6U,GAAKm9U,GAC9C7C,EAAUx7H,OACVw7H,EAAU5b,aACV4b,EAAUnS,gBAERqW,IACErlB,EAAOqE,YACJmV,GAA4B,kBAAXA,IACpBA,EAAS55P,SAASpqE,cAAc,OAChCgkU,EAAOn0L,UAAUnmJ,IAAI,sBACrBs6U,EAAO7tP,UAAYq0O,EAAOsf,OAAO7hV,YAAYkoV,cAC7CnM,EAAO5rR,KAAK1uD,IAAI,eAChB8gU,EAAOn5T,GAAG9B,YAAYy0U,IAEnBC,GAA4B,kBAAXA,IACpBA,EAAS75P,SAASpqE,cAAc,OAChCikU,EAAOp0L,UAAUnmJ,IAAI,sBACrBu6U,EAAO9tP,UAAYq0O,EAAOsf,OAAO7hV,YAAYmoV,cAC7CnM,EAAO7rR,KAAK1uD,IAAI,eAChB8gU,EAAOn5T,GAAG9B,YAAY00U,KAGtBD,IAAQuL,EAAcxL,WAAWC,OAASA,GAC1CC,IAAQsL,EAAcxL,WAAWE,OAASA,GAC9CF,EAAW5zH,OACX4zH,EAAWtmK,UAETixK,EAAc37P,SAAS,oBACzBy3O,EAAOsQ,eAAiB0N,EAAa1N,gBAEnC4T,EAAc37P,SAAS,oBACzBy3O,EAAOuQ,eAAiByN,EAAazN,gBAEnC2T,EAAc37P,SAAS,cACzBy3O,EAAO4b,gBAAgBoC,EAAa5uK,WAAW,IAE7Ck2K,GAAmBE,IACrBxlB,EAAO8T,eAELyR,GAAkBC,IACpBxlB,EAAOoS,aAETpS,EAAO/sJ,QACT,CCwBM4yK,CAAa,CACX7lB,OAAQ2iB,EAAUn7U,QAClBm9T,SACAqZ,eACAkG,gBACA1K,OAAQsJ,EAAUt7U,QAClBiyU,OAAQsJ,EAAUv7U,QAClBw8U,YAAaf,EAAez7U,QAC5Bu8U,aAAcf,EAAgBx7U,UAG3B,KA/DF67T,GAAWsf,EAAUn7U,SAC1BlK,OAAO0M,KAAKq5T,GAAQvsU,SAAQy8L,IAC1BovJ,EAAUn7U,QAAQ4xH,IAAIm6D,EAAW8vI,EAAO9vI,GAAW,GA8DrC,CACf,IAIHgoG,IAA0B,KC3JAykC,MACrBA,GAAUA,EAAOuD,YAAcvD,EAAOtoU,OAAOyuU,SAAWnG,EAAOtoU,OAAOyuU,UAAYnG,EAAOtoU,OAAOyuU,QAAQlxK,UAC7G+qK,EAAO0F,eACP1F,EAAO2L,iBACP3L,EAAO6M,sBACH7M,EAAO8lB,UAAY9lB,EAAOtoU,OAAOouV,UAAY9lB,EAAOtoU,OAAOouV,SAAS7wL,SACtE+qK,EAAO8lB,SAAS9W,eAClB,EDqJE+W,CAAoBpD,EAAUn7U,QAAQ,GACrC,CAAC66U,IAcgBznD,EAAAA,cAAoBknD,EAAK3rV,GAAS,CACpD+2G,IAAKw1O,EACLtzN,UAAWgyN,GAAc,GAAGe,IAAmB/yN,EAAY,IAAIA,IAAc,OAC5E8zN,GAAyBtoD,EAAAA,cAAoBgnD,GAAcltN,SAAU,CACtEj/H,MAAOktV,EAAUn7U,SAChBg6U,EAAM,mBAAiC5mD,EAAAA,cAAoBonD,EAAY,CACxE5yN,UAAW2tN,GAAagB,EAAahB,eACpCyE,EAAM,iBAjBHzD,EAAa5X,QA5MrB,SAAuBnG,EAAQ2E,EAAQ0d,GACrC,IAAKA,EAAa,OAAO,KACzB,MAAMlQ,EAAgBn7U,IACpB,IAAIgyU,EAAahyU,EAOjB,OANIA,EAAQ,EACVgyU,EAAarE,EAAOnoU,OAASxF,EACpBgyU,GAAcrE,EAAOnoU,SAE9BwsU,GAA0BrE,EAAOnoU,QAE5BwsU,CAAU,EAEbl6O,EAAQkxO,EAAOwF,eAAiB,CACpC,CAACxF,EAAO+F,aAAe,QAAU,QAAS,GAAGsc,EAAYvrU,YACvD,CACFo0D,IAAK,GAAGm3Q,EAAYvrU,aAEhB,KACJnZ,EAAI,GACJkxJ,GACEwzL,EACE2D,EAAWhmB,EAAOtoU,OAAOolM,MAAQ6nI,EAAOnoU,OAAS,EACjDypV,EAASjmB,EAAOtoU,OAAOolM,KAAuB,EAAhB6nI,EAAOnoU,OAAamoU,EAAOnoU,OACzD0pV,EAAiB,GACvB,IAAK,IAAIhqV,EAAI8pV,EAAU9pV,EAAI+pV,EAAQ/pV,GAAK,EAClCA,GAAKyB,GAAQzB,GAAK2yJ,GACpBq3L,EAAe5uV,KAAKqtU,EAAOwN,EAAcj2U,KAG7C,OAAOgqV,EAAe1xU,KAAI,CAACzF,EAAO/X,IACZ4jS,EAAAA,aAAmB7rR,EAAO,CAC5CixT,SACAlxO,QACA53F,IAAK6X,EAAMm0E,MAAMijQ,cAAgBp3U,EAAM7X,KAAO,SAASF,OAG7D,CAyKaovV,CAAczD,EAAUn7U,QAASm9T,EAAQ0d,GAE3C1d,EAAOnwT,KAAI,CAACzF,EAAO/X,IACJ4jS,EAAAA,aAAmB7rR,EAAO,CAC5CixT,OAAQ2iB,EAAUn7U,QAClBwsU,iBAAkBh9U,MAWmBwqV,EAAM,gBAAiBT,GAAgBhD,IAA8BnjD,EAAAA,cAAoBA,EAAAA,SAAgB,KAAmBA,EAAAA,cAAoB,MAAO,CAChM1tL,IAAK61O,EACL3zN,UAAW,uBACIwrK,EAAAA,cAAoB,MAAO,CAC1C1tL,IAAK41O,EACL1zN,UAAW,wBACR8xN,GAAenD,IAA8BnjD,EAAAA,cAAoB,MAAO,CAC3E1tL,IAAK+1O,EACL7zN,UAAW,qBACT4xN,GAAgBjD,IAA8BnjD,EAAAA,cAAoB,MAAO,CAC3E1tL,IAAK81O,EACL5zN,UAAW,sBACToyN,EAAM,kBACZ,IACAhE,GAAOl1P,YAAc,SAErB,MAAM+9P,IAA2BrxN,EAAAA,EAAAA,aAAW,SAAUn0H,EAAOylV,GAC3D,IACE79P,IAAKq5P,EAAM,MAAK,SAChB52P,EAAQ,UACRkkC,EAAY,GAAE,OACd4wM,EAAM,KACN9xO,EAAI,KACJgnC,EAAI,aACJixN,EAAY,iBACZnS,KACG18C,QACS,IAAVz2R,EAAmB,CAAC,EAAIA,EAC5B,MAAM0lV,GAAajwO,EAAAA,EAAAA,QAAO,OACnBkwO,EAAcC,IAAmBlwO,EAAAA,EAAAA,UAAS,iBAC1CmwO,EAAYC,IAAiBpwO,EAAAA,EAAAA,WAAS,GAC7C,SAASqwO,EAAcC,EAAIhgV,EAAIoO,GACzBpO,IAAO0/U,EAAW/+U,SACpBi/U,EAAgBxxU,EAEpB,CACAsmR,IAA0B,KAOxB,GANgC,qBAArBy4C,IACTuS,EAAW/+U,QAAQwsU,iBAAmBA,GAEpCsS,IACFA,EAAY9+U,QAAU++U,EAAW/+U,SAE9B++U,EAAW/+U,SAAYw4T,EAA5B,CAGA,IAAIA,EAAOuD,UAQX,OAFAvD,EAAO7mM,GAAG,cAAeytN,GAElB,KACA5mB,GACLA,EAAO5mM,IAAI,cAAewtN,EAAc,EATnB,iBAAjBJ,GACFC,EAAgB,eAHpB,CAYC,IAEHlrD,IAA0B,KACpBykC,GAAUumB,EAAW/+U,UAAYw4T,EAAOuD,WAC1CkjB,EAAgBzmB,EAAOwe,gBAAgB+H,EAAW/+U,SACpD,GACC,CAACw4T,IACJ,MAAM8mB,EAAY,CAChBC,SAAUP,EAAavvV,QAAQ,wBAA0B,EACzDqgK,UAAWkvL,EAAavvV,QAAQ,yBAA2B,EAC3Dg8U,OAAQuT,EAAavvV,QAAQ,sBAAwB,EACrD+7U,OAAQwT,EAAavvV,QAAQ,sBAAwB,GAEjD+vV,EAAiBA,IACM,oBAAb97P,EAA0BA,EAAS47P,GAAa57P,EAKhE,OAAoB0vM,EAAAA,cAAoBknD,EAAK3rV,GAAS,CACpD+2G,IAAKq5O,EACLn3N,UAAWgyN,GAAc,GAAGoF,IAAep3N,EAAY,IAAIA,IAAc,MACzE,0BAA2B+2N,EAC3Bv1E,OAPaA,KACb+1E,GAAc,EAAK,GAOlBrvD,GAAOppM,GAAqB0sM,EAAAA,cAAoB+mD,GAAmBjtN,SAAU,CAC9Ej/H,MAAOqxV,GACOlsD,EAAAA,cAAoB,MAAO,CACzCxrK,UAAW,wBACX,mBAAoC,kBAATlhC,EAAoBA,OAAOz1F,GACrDuuV,IAAkB9xN,IAASwxN,GAA2B9rD,EAAAA,cAAoB,MAAO,CAClFxrK,UAAW,6BACNlhC,GAAqB0sM,EAAAA,cAAoB+mD,GAAmBjtN,SAAU,CAC3Ej/H,MAAOqxV,GACNE,IAAkB9xN,IAASwxN,GAA2B9rD,EAAAA,cAAoB,MAAO,CAClFxrK,UAAW,2BAEf,IEtYA,SAAS63N,GAAkB37D,GAIzB,YAHgB,IAAZA,IACFA,EAAU,IAEL,IAAIA,EAAQ51R,OAAOgO,QAAQ,eAAgB,QACjDA,QAAQ,KAAM,MACjB,CCFA,SAASwjV,GAAWpmV,GAClB,IAAI,OACFk/T,EAAM,aACN8d,EAAY,GACZ3kN,EAAE,KACF2qM,GACEhjU,EACJ,MAAMqmV,EAAM,oBAqCZ,IAAIC,EApCJtJ,EAAa,CACXmD,WAAY,CACVp6U,GAAI,KACJwgV,cAAe,OACfC,WAAW,EACXC,aAAa,EACbC,aAAc,KACdC,kBAAmB,KACnBC,eAAgB,KAChBC,aAAc,KACdC,qBAAqB,EACrBpyV,KAAM,UAENqyV,gBAAgB,EAChBC,mBAAoB,EACpBC,sBAAuBjkQ,GAAUA,EACjCkkQ,oBAAqBlkQ,GAAUA,EAC/BmkQ,YAAa,GAAGd,WAChBe,kBAAmB,GAAGf,kBACtBgB,cAAe,GAAGhB,KAClBiB,aAAc,GAAGjB,YACjBkB,WAAY,GAAGlB,UACfmB,YAAa,GAAGnB,WAChBoB,qBAAsB,GAAGpB,qBACzBqB,yBAA0B,GAAGrB,yBAC7BsB,eAAgB,GAAGtB,cACnBuB,UAAW,GAAGvB,SACdwB,gBAAiB,GAAGxB,eACpByB,cAAe,GAAGzB,aAClB0B,wBAAyB,GAAG1B,gBAGhCnnB,EAAOihB,WAAa,CAClBp6U,GAAI,KACJiiV,QAAS,IAGX,IAAIC,EAAqB,EACzB,SAASC,IACP,OAAQhpB,EAAOtoU,OAAOupV,WAAWp6U,KAAOm5T,EAAOihB,WAAWp6U,IAAMzP,MAAMC,QAAQ2oU,EAAOihB,WAAWp6U,KAAuC,IAAhCm5T,EAAOihB,WAAWp6U,GAAGrK,MAC9H,CACA,SAASysV,EAAeC,EAAUnlV,GAChC,MAAM,kBACJmkV,GACEloB,EAAOtoU,OAAOupV,WACbiI,IACLA,EAAWA,GAAyB,SAAbnlV,EAAsB,WAAa,QAAtC,qBAElBmlV,EAAS7jM,UAAUnmJ,IAAI,GAAGgpV,KAAqBnkV,MAC/CmlV,EAAWA,GAAyB,SAAbnlV,EAAsB,WAAa,QAAtC,oBAElBmlV,EAAS7jM,UAAUnmJ,IAAI,GAAGgpV,KAAqBnkV,KAAYA,KAGjE,CAWA,SAASolV,EAAcrzV,GACrB,MAAMozV,EAAWpzV,EAAE4M,OAAOstK,QAAQi3K,GAAkBjnB,EAAOtoU,OAAOupV,WAAWgH,cAC7E,IAAKiB,EACH,OAEFpzV,EAAEqjG,iBACF,MAAMniG,EAAQoqU,GAAa8nB,GAAYlpB,EAAOtoU,OAAO4wU,eACrD,GAAItI,EAAOtoU,OAAOolM,KAAM,CACtB,GAAIkjI,EAAOsF,YAActuU,EAAO,OAChC,MAAMoyV,GAnBgBxX,EAmBiB5R,EAAOsF,UAnBbxwC,EAmBwB99R,EAnBbwF,EAmBoBwjU,EAAO2E,OAAOnoU,QAjBhFs4R,GAAwBt4R,KACM,GAF9Bo1U,GAAwBp1U,GAGf,OACEs4R,IAAc88C,EAAY,EAC5B,gBADF,GAeiB,SAAlBwX,EACFppB,EAAOkR,YACoB,aAAlBkY,EACTppB,EAAOwR,YAEPxR,EAAO4Q,YAAY55U,EAEvB,MACEgpU,EAAOkQ,QAAQl5U,GA5BnB,IAA0B46U,EAAW98C,EAAWt4R,CA8BhD,CACA,SAASy2K,IAEP,MAAM+yJ,EAAMhG,EAAOgG,IACbtuU,EAASsoU,EAAOtoU,OAAOupV,WAC7B,GAAI+H,IAAwB,OAC5B,IAGIxhV,EACAsmU,EAJAjnU,EAAKm5T,EAAOihB,WAAWp6U,GAC3BA,EAAK46T,GAAkB56T,GAIvB,MAAMw/T,EAAerG,EAAOmG,SAAWnG,EAAOtoU,OAAOyuU,QAAQlxK,QAAU+qK,EAAOmG,QAAQxB,OAAOnoU,OAASwjU,EAAO2E,OAAOnoU,OAC9GwqI,EAAQg5L,EAAOtoU,OAAOolM,KAAOr7L,KAAK4+G,KAAKgmN,EAAerG,EAAOtoU,OAAO4wU,gBAAkBtI,EAAOsG,SAAS9pU,OAY5G,GAXIwjU,EAAOtoU,OAAOolM,MAChBgxI,EAAgB9N,EAAO+N,mBAAqB,EAC5CvmU,EAAUw4T,EAAOtoU,OAAO4wU,eAAiB,EAAI7mU,KAAK80H,MAAMypM,EAAOsF,UAAYtF,EAAOtoU,OAAO4wU,gBAAkBtI,EAAOsF,WAC7E,qBAArBtF,EAAOyJ,WACvBjiU,EAAUw4T,EAAOyJ,UACjBqE,EAAgB9N,EAAOgO,oBAEvBF,EAAgB9N,EAAO8N,eAAiB,EACxCtmU,EAAUw4T,EAAOgF,aAAe,GAGd,YAAhBttU,EAAOlC,MAAsBwqU,EAAOihB,WAAW6H,SAAW9oB,EAAOihB,WAAW6H,QAAQtsV,OAAS,EAAG,CAClG,MAAMssV,EAAU9oB,EAAOihB,WAAW6H,QAClC,IAAIO,EACAp7U,EACAq7U,EAsBJ,GArBI5xV,EAAOmwV,iBACTT,EAAa7lB,GAAiBunB,EAAQ,GAAI9oB,EAAOwF,eAAiB,QAAU,UAAU,GACtF3+T,EAAG/P,SAAQyyV,IACTA,EAAMz6P,MAAMkxO,EAAOwF,eAAiB,QAAU,UAAe4hB,GAAc1vV,EAAOowV,mBAAqB,GAA7C,IAAmD,IAE3GpwV,EAAOowV,mBAAqB,QAAuBrvV,IAAlBq1U,IACnCib,GAAsBvhV,GAAWsmU,GAAiB,GAC9Cib,EAAqBrxV,EAAOowV,mBAAqB,EACnDiB,EAAqBrxV,EAAOowV,mBAAqB,EACxCiB,EAAqB,IAC9BA,EAAqB,IAGzBM,EAAa5nV,KAAK69E,IAAI93E,EAAUuhV,EAAoB,GACpD96U,EAAYo7U,GAAc5nV,KAAKyhG,IAAI4lP,EAAQtsV,OAAQ9E,EAAOowV,oBAAsB,GAChFwB,GAAYr7U,EAAYo7U,GAAc,GAExCP,EAAQhyV,SAAQoyV,IACd,MAAMtjM,EAAkB,IAAI,CAAC,GAAI,QAAS,aAAc,QAAS,aAAc,SAASpxI,KAAIs+S,GAAU,GAAGp7T,EAAOwwV,oBAAoBp1B,OAAWt+S,KAAImoE,GAAkB,kBAANA,GAAkBA,EAAE4L,SAAS,KAAO5L,EAAEvnF,MAAM,KAAOunF,IAAG1iD,OACrNivT,EAAS7jM,UAAU32I,UAAUk3I,EAAgB,IAE3C/+I,EAAGrK,OAAS,EACdssV,EAAQhyV,SAAQstB,IACd,MAAMolU,EAAcpoB,GAAah9S,GAC7BolU,IAAgBhiV,EAClB4c,EAAOihI,UAAUnmJ,OAAOxH,EAAOwwV,kBAAkB9yV,MAAM,MAC9C4qU,EAAOqE,WAChBjgT,EAAOpO,aAAa,OAAQ,UAE1Bte,EAAOmwV,iBACL2B,GAAeH,GAAcG,GAAev7U,GAC9CmW,EAAOihI,UAAUnmJ,OAAO,GAAGxH,EAAOwwV,yBAAyB9yV,MAAM,MAE/Do0V,IAAgBH,GAClBJ,EAAe7kU,EAAQ,QAErBolU,IAAgBv7U,GAClBg7U,EAAe7kU,EAAQ,QAE3B,QAEG,CACL,MAAMA,EAAS0kU,EAAQthV,GASvB,GARI4c,GACFA,EAAOihI,UAAUnmJ,OAAOxH,EAAOwwV,kBAAkB9yV,MAAM,MAErD4qU,EAAOqE,WACTykB,EAAQhyV,SAAQ,CAACoyV,EAAUM,KACzBN,EAASlzU,aAAa,OAAQwzU,IAAgBhiV,EAAU,gBAAkB,SAAS,IAGnF9P,EAAOmwV,eAAgB,CACzB,MAAM4B,EAAuBX,EAAQO,GAC/BK,EAAsBZ,EAAQ76U,GACpC,IAAK,IAAI/R,EAAImtV,EAAYntV,GAAK+R,EAAW/R,GAAK,EACxC4sV,EAAQ5sV,IACV4sV,EAAQ5sV,GAAGmpJ,UAAUnmJ,OAAO,GAAGxH,EAAOwwV,yBAAyB9yV,MAAM,MAGzE6zV,EAAeQ,EAAsB,QACrCR,EAAeS,EAAqB,OACtC,CACF,CACA,GAAIhyV,EAAOmwV,eAAgB,CACzB,MAAM8B,EAAuBloV,KAAKyhG,IAAI4lP,EAAQtsV,OAAQ9E,EAAOowV,mBAAqB,GAC5E8B,GAAiBxC,EAAauC,EAAuBvC,GAAc,EAAIkC,EAAWlC,EAClFyC,EAAa7jB,EAAM,QAAU,OACnC8iB,EAAQhyV,SAAQstB,IACdA,EAAO0qE,MAAMkxO,EAAOwF,eAAiBqkB,EAAa,OAAS,GAAGD,KAAiB,GAEnF,CACF,CACA/iV,EAAG/P,SAAQ,CAACyyV,EAAOO,KASjB,GARoB,aAAhBpyV,EAAOlC,OACT+zV,EAAM/jO,iBAAiByhO,GAAkBvvV,EAAO0wV,eAAetxV,SAAQizV,IACrEA,EAAWz+P,YAAc5zF,EAAOqwV,sBAAsBvgV,EAAU,EAAE,IAEpE+hV,EAAM/jO,iBAAiByhO,GAAkBvvV,EAAO2wV,aAAavxV,SAAQkzV,IACnEA,EAAQ1+P,YAAc5zF,EAAOswV,oBAAoBhhN,EAAM,KAGvC,gBAAhBtvI,EAAOlC,KAAwB,CACjC,IAAIy0V,EAEFA,EADEvyV,EAAOkwV,oBACc5nB,EAAOwF,eAAiB,WAAa,aAErCxF,EAAOwF,eAAiB,aAAe,WAEhE,MAAMzxF,GAASvsO,EAAU,GAAKw/H,EAC9B,IAAIkjN,EAAS,EACTC,EAAS,EACgB,eAAzBF,EACFC,EAASn2G,EAETo2G,EAASp2G,EAEXw1G,EAAM/jO,iBAAiByhO,GAAkBvvV,EAAO6wV,uBAAuBzxV,SAAQszV,IAC7EA,EAAWt7P,MAAMm4D,UAAY,6BAA6BijM,aAAkBC,KAC5EC,EAAWt7P,MAAMghP,mBAAqB,GAAG9P,EAAOtoU,OAAO2oU,SAAS,GAEpE,CACoB,WAAhB3oU,EAAOlC,MAAqBkC,EAAOiwV,cACrC4B,EAAM59P,UAAYj0F,EAAOiwV,aAAa3nB,EAAQx4T,EAAU,EAAGw/H,GACxC,IAAf8iN,GAAkBhmB,EAAK,mBAAoBylB,KAE5B,IAAfO,GAAkBhmB,EAAK,mBAAoBylB,GAC/CzlB,EAAK,mBAAoBylB,IAEvBvpB,EAAOtoU,OAAOkyU,eAAiB5J,EAAO/qK,SACxCs0L,EAAMlkM,UAAU26K,EAAOqU,SAAW,MAAQ,UAAU38U,EAAOgxV,UAC7D,GAEJ,CACA,SAAShgQ,IAEP,MAAMhxF,EAASsoU,EAAOtoU,OAAOupV,WAC7B,GAAI+H,IAAwB,OAC5B,MAAM3iB,EAAerG,EAAOmG,SAAWnG,EAAOtoU,OAAOyuU,QAAQlxK,QAAU+qK,EAAOmG,QAAQxB,OAAOnoU,OAASwjU,EAAOiF,MAAQjF,EAAOtoU,OAAOutU,KAAKrxG,KAAO,EAAIosG,EAAO2E,OAAOnoU,OAASiF,KAAK4+G,KAAK2/M,EAAOtoU,OAAOutU,KAAKrxG,MAAQosG,EAAO2E,OAAOnoU,OAC7N,IAAIqK,EAAKm5T,EAAOihB,WAAWp6U,GAC3BA,EAAK46T,GAAkB56T,GACvB,IAAIwjV,EAAiB,GACrB,GAAoB,YAAhB3yV,EAAOlC,KAAoB,CAC7B,IAAI80V,EAAkBtqB,EAAOtoU,OAAOolM,KAAOr7L,KAAK4+G,KAAKgmN,EAAerG,EAAOtoU,OAAO4wU,gBAAkBtI,EAAOsG,SAAS9pU,OAChHwjU,EAAOtoU,OAAOo/U,UAAY9W,EAAOtoU,OAAOo/U,SAAS7hL,SAAWq1L,EAAkBjkB,IAChFikB,EAAkBjkB,GAEpB,IAAK,IAAInqU,EAAI,EAAGA,EAAIouV,EAAiBpuV,GAAK,EACpCxE,EAAO8vV,aACT6C,GAAkB3yV,EAAO8vV,aAAaxqV,KAAKgjU,EAAQ9jU,EAAGxE,EAAOuwV,aAG7DoC,GAAkB,IAAI3yV,EAAO2vV,iBAAiBrnB,EAAOqE,UAAY,gBAAkB,aAAa3sU,EAAOuwV,kBAAkBvwV,EAAO2vV,gBAGtI,CACoB,aAAhB3vV,EAAOlC,OAEP60V,EADE3yV,EAAOgwV,eACQhwV,EAAOgwV,eAAe1qV,KAAKgjU,EAAQtoU,EAAO0wV,aAAc1wV,EAAO2wV,YAE/D,gBAAgB3wV,EAAO0wV,wCAAkD1wV,EAAO2wV,uBAGjF,gBAAhB3wV,EAAOlC,OAEP60V,EADE3yV,EAAO+vV,kBACQ/vV,EAAO+vV,kBAAkBzqV,KAAKgjU,EAAQtoU,EAAO6wV,sBAE7C,gBAAgB7wV,EAAO6wV,iCAG5CvoB,EAAOihB,WAAW6H,QAAU,GAC5BjiV,EAAG/P,SAAQyyV,IACW,WAAhB7xV,EAAOlC,OACT+zV,EAAM59P,UAAY0+P,GAAkB,IAElB,YAAhB3yV,EAAOlC,MACTwqU,EAAOihB,WAAW6H,QAAQxxV,QAAQiyV,EAAM/jO,iBAAiByhO,GAAkBvvV,EAAOuwV,cACpF,IAEkB,WAAhBvwV,EAAOlC,MACTsuU,EAAK,mBAAoBj9T,EAAG,GAEhC,CACA,SAAS8+M,IACPq6G,EAAOtoU,OAAOupV,WC/RlB,SAAmCjhB,EAAQgb,EAAgBtjV,EAAQ6yV,GAejE,OAdIvqB,EAAOtoU,OAAOilV,gBAChBr/U,OAAO0M,KAAKugV,GAAYzzV,SAAQI,IAC9B,IAAKQ,EAAOR,KAAwB,IAAhBQ,EAAO2lV,KAAe,CACxC,IAAIzzU,EAAUm3T,GAAgBf,EAAOn5T,GAAI,IAAI0jV,EAAWrzV,MAAQ,GAC3D0S,IACHA,EAAU4L,GAAc,MAAO+0U,EAAWrzV,IAC1C0S,EAAQwlH,UAAYm7N,EAAWrzV,GAC/B8oU,EAAOn5T,GAAGs9K,OAAOv6K,IAEnBlS,EAAOR,GAAO0S,EACdoxU,EAAe9jV,GAAO0S,CACxB,KAGGlS,CACT,CD+Q+B8yV,CAA0BxqB,EAAQA,EAAOgb,eAAeiG,WAAYjhB,EAAOtoU,OAAOupV,WAAY,CACvHp6U,GAAI,sBAEN,MAAMnP,EAASsoU,EAAOtoU,OAAOupV,WAC7B,IAAKvpV,EAAOmP,GAAI,OAChB,IAAIA,EACqB,kBAAdnP,EAAOmP,IAAmBm5T,EAAOqE,YAC1Cx9T,EAAKm5T,EAAOn5T,GAAGyrJ,cAAc56J,EAAOmP,KAEjCA,GAA2B,kBAAdnP,EAAOmP,KACvBA,EAAK,IAAI+4E,SAAS4lC,iBAAiB9tH,EAAOmP,MAEvCA,IACHA,EAAKnP,EAAOmP,IAETA,GAAoB,IAAdA,EAAGrK,SACVwjU,EAAOtoU,OAAOmlV,mBAA0C,kBAAdnlV,EAAOmP,IAAmBzP,MAAMC,QAAQwP,IAAOA,EAAGrK,OAAS,IACvGqK,EAAK,IAAIm5T,EAAOn5T,GAAG2+G,iBAAiB9tH,EAAOmP,KAEvCA,EAAGrK,OAAS,IACdqK,EAAKA,EAAGiD,QAAOy/U,GACTloB,GAAekoB,EAAO,WAAW,KAAOvpB,EAAOn5T,KAElD,KAGHzP,MAAMC,QAAQwP,IAAqB,IAAdA,EAAGrK,SAAcqK,EAAKA,EAAG,IAClDvJ,OAAOmF,OAAOu9T,EAAOihB,WAAY,CAC/Bp6U,OAEFA,EAAK46T,GAAkB56T,GACvBA,EAAG/P,SAAQyyV,IACW,YAAhB7xV,EAAOlC,MAAsBkC,EAAO4vV,WACtCiC,EAAMlkM,UAAUnmJ,QAAQxH,EAAO+wV,gBAAkB,IAAIrzV,MAAM,MAE7Dm0V,EAAMlkM,UAAUnmJ,IAAIxH,EAAOywV,cAAgBzwV,EAAOlC,MAClD+zV,EAAMlkM,UAAUnmJ,IAAI8gU,EAAOwF,eAAiB9tU,EAAOixV,gBAAkBjxV,EAAOkxV,eACxD,YAAhBlxV,EAAOlC,MAAsBkC,EAAOmwV,iBACtC0B,EAAMlkM,UAAUnmJ,IAAI,GAAGxH,EAAOywV,gBAAgBzwV,EAAOlC,gBACrDuzV,EAAqB,EACjBrxV,EAAOowV,mBAAqB,IAC9BpwV,EAAOowV,mBAAqB,IAGZ,gBAAhBpwV,EAAOlC,MAA0BkC,EAAOkwV,qBAC1C2B,EAAMlkM,UAAUnmJ,IAAIxH,EAAO8wV,0BAEzB9wV,EAAO4vV,WACTiC,EAAMl4P,iBAAiB,QAAS83P,GAE7BnpB,EAAO/qK,SACVs0L,EAAMlkM,UAAUnmJ,IAAIxH,EAAOgxV,UAC7B,IAEJ,CACA,SAASh0O,IACP,MAAMh9G,EAASsoU,EAAOtoU,OAAOupV,WAC7B,GAAI+H,IAAwB,OAC5B,IAAIniV,EAAKm5T,EAAOihB,WAAWp6U,GACvBA,IACFA,EAAK46T,GAAkB56T,GACvBA,EAAG/P,SAAQyyV,IACTA,EAAMlkM,UAAU32I,OAAOhX,EAAO4wV,aAC9BiB,EAAMlkM,UAAU32I,OAAOhX,EAAOywV,cAAgBzwV,EAAOlC,MACrD+zV,EAAMlkM,UAAU32I,OAAOsxT,EAAOwF,eAAiB9tU,EAAOixV,gBAAkBjxV,EAAOkxV,eAC3ElxV,EAAO4vV,YACTiC,EAAMlkM,UAAU32I,WAAWhX,EAAO+wV,gBAAkB,IAAIrzV,MAAM,MAC9Dm0V,EAAMj4P,oBAAoB,QAAS63P,GACrC,KAGAnpB,EAAOihB,WAAW6H,SAAS9oB,EAAOihB,WAAW6H,QAAQhyV,SAAQyyV,GAASA,EAAMlkM,UAAU32I,UAAUhX,EAAOwwV,kBAAkB9yV,MAAM,OACrI,CACA+jI,EAAG,mBAAmB,KACpB,IAAK6mM,EAAOihB,aAAejhB,EAAOihB,WAAWp6U,GAAI,OACjD,MAAMnP,EAASsoU,EAAOtoU,OAAOupV,WAC7B,IAAI,GACFp6U,GACEm5T,EAAOihB,WACXp6U,EAAK46T,GAAkB56T,GACvBA,EAAG/P,SAAQyyV,IACTA,EAAMlkM,UAAU32I,OAAOhX,EAAOixV,gBAAiBjxV,EAAOkxV,eACtDW,EAAMlkM,UAAUnmJ,IAAI8gU,EAAOwF,eAAiB9tU,EAAOixV,gBAAkBjxV,EAAOkxV,cAAc,GAC1F,IAEJzvN,EAAG,QAAQ,MACgC,IAArC6mM,EAAOtoU,OAAOupV,WAAWhsL,QAE3Bx2J,KAEAknN,IACAj9H,IACAuqF,IACF,IAEF95C,EAAG,qBAAqB,KACU,qBAArB6mM,EAAOyJ,WAChBx2J,GACF,IAEF95C,EAAG,mBAAmB,KACpB85C,GAAQ,IAEV95C,EAAG,wBAAwB,KACzBzwC,IACAuqF,GAAQ,IAEV95C,EAAG,WAAW,KACZzkB,GAAS,IAEXykB,EAAG,kBAAkB,KACnB,IAAI,GACFtyH,GACEm5T,EAAOihB,WACPp6U,IACFA,EAAK46T,GAAkB56T,GACvBA,EAAG/P,SAAQyyV,GAASA,EAAMlkM,UAAU26K,EAAO/qK,QAAU,SAAW,OAAO+qK,EAAOtoU,OAAOupV,WAAWyH,aAClG,IAEFvvN,EAAG,eAAe,KAChB85C,GAAQ,IAEV95C,EAAG,SAAS,CAAC0tN,EAAI/wV,KACf,MAAMk/U,EAAWl/U,EAAE4M,OACbmE,EAAK46T,GAAkBzB,EAAOihB,WAAWp6U,IAC/C,GAAIm5T,EAAOtoU,OAAOupV,WAAWp6U,IAAMm5T,EAAOtoU,OAAOupV,WAAWsG,aAAe1gV,GAAMA,EAAGrK,OAAS,IAAMw4U,EAAS3vL,UAAUhjD,SAAS29N,EAAOtoU,OAAOupV,WAAWgH,aAAc,CACpK,GAAIjoB,EAAOuZ,aAAevZ,EAAOuZ,WAAWC,QAAUxE,IAAahV,EAAOuZ,WAAWC,QAAUxZ,EAAOuZ,WAAWE,QAAUzE,IAAahV,EAAOuZ,WAAWE,QAAS,OACnK,MAAM/5N,EAAW74G,EAAG,GAAGw+I,UAAUhjD,SAAS29N,EAAOtoU,OAAOupV,WAAWqH,aAEjExkB,GADe,IAAbpkN,EACG,iBAEA,kBAEP74G,EAAG/P,SAAQyyV,GAASA,EAAMlkM,UAAUW,OAAOg6K,EAAOtoU,OAAOupV,WAAWqH,cACtE,KAEF,MAaM7pV,EAAUA,KACduhU,EAAOn5T,GAAGw+I,UAAUnmJ,IAAI8gU,EAAOtoU,OAAOupV,WAAW4H,yBACjD,IAAI,GACFhiV,GACEm5T,EAAOihB,WACPp6U,IACFA,EAAK46T,GAAkB56T,GACvBA,EAAG/P,SAAQyyV,GAASA,EAAMlkM,UAAUnmJ,IAAI8gU,EAAOtoU,OAAOupV,WAAW4H,4BAEnEn0O,GAAS,EAEXp3G,OAAOmF,OAAOu9T,EAAOihB,WAAY,CAC/BziV,OAzBaA,KACbwhU,EAAOn5T,GAAGw+I,UAAU32I,OAAOsxT,EAAOtoU,OAAOupV,WAAW4H,yBACpD,IAAI,GACFhiV,GACEm5T,EAAOihB,WACPp6U,IACFA,EAAK46T,GAAkB56T,GACvBA,EAAG/P,SAAQyyV,GAASA,EAAMlkM,UAAU32I,OAAOsxT,EAAOtoU,OAAOupV,WAAW4H,4BAEtEljI,IACAj9H,IACAuqF,GAAQ,EAeRx0K,UACAiqF,SACAuqF,SACA0yC,OACAjxG,WAEJ,CErcA,SAAS+1O,GAAS3pV,GAChB,IAuBI1I,EACAsyV,GAxBA,OACF1qB,EAAM,aACN8d,EAAY,GACZ3kN,EAAE,KACF2qM,EAAI,OACJpsU,GACEoJ,EACJk/T,EAAO3lI,SAAW,CAChBw/I,SAAS,EACTh+K,QAAQ,EACR8uL,SAAU,GAEZ7M,EAAa,CACXzjJ,SAAU,CACRplC,SAAS,EACTr+B,MAAO,IACPg0N,mBAAmB,EACnBC,sBAAsB,EACtBC,iBAAiB,EACjBC,kBAAkB,EAClBC,mBAAmB,KAKvB,IAEIC,EAEAC,EACA/V,EACAgW,EACAC,EACAC,EACAC,EACAC,EAVAC,EAAqB9zV,GAAUA,EAAO2iM,SAAW3iM,EAAO2iM,SAASzjE,MAAQ,IACzE60N,EAAuB/zV,GAAUA,EAAO2iM,SAAW3iM,EAAO2iM,SAASzjE,MAAQ,IAE3E80N,GAAoB,IAAI3xP,MAAOmnC,UAQnC,SAASyqN,EAAgB71V,GAClBkqU,IAAUA,EAAOuD,WAAcvD,EAAOM,WACvCxqU,EAAE4M,SAAWs9T,EAAOM,YACxBN,EAAOM,UAAUhvO,oBAAoB,gBAAiBq6P,GAClDJ,GAAwBz1V,EAAEskG,QAAUtkG,EAAEskG,OAAO+9O,mBAGjDxoK,IACF,CACA,MAAMi8K,EAAeA,KACnB,GAAI5rB,EAAOuD,YAAcvD,EAAO3lI,SAASw/I,QAAS,OAC9C7Z,EAAO3lI,SAASx+B,OAClBqvL,GAAY,EACHA,IACTO,EAAuBR,EACvBC,GAAY,GAEd,MAAMP,EAAW3qB,EAAO3lI,SAASx+B,OAASovL,EAAmBS,EAAoBD,GAAuB,IAAI1xP,MAAOmnC,UACnH8+L,EAAO3lI,SAASswJ,SAAWA,EAC3B7mB,EAAK,mBAAoB6mB,EAAUA,EAAWa,GAC9Cd,EAAMt0L,uBAAsB,KAC1Bw1L,GAAc,GACd,EAaEhpF,EAAMipF,IACV,GAAI7rB,EAAOuD,YAAcvD,EAAO3lI,SAASw/I,QAAS,OAClDtjL,qBAAqBm0L,GACrBkB,IACA,IAAIh1N,EAA8B,qBAAfi1N,EAA6B7rB,EAAOtoU,OAAO2iM,SAASzjE,MAAQi1N,EAC/EL,EAAqBxrB,EAAOtoU,OAAO2iM,SAASzjE,MAC5C60N,EAAuBzrB,EAAOtoU,OAAO2iM,SAASzjE,MAC9C,MAAMk1N,EAlBcC,MACpB,IAAIC,EAMJ,GAJEA,EADEhsB,EAAOmG,SAAWnG,EAAOtoU,OAAOyuU,QAAQlxK,QAC1B+qK,EAAO2E,OAAO76T,QAAOk6T,GAAWA,EAAQ3+K,UAAUhjD,SAAS,yBAAwB,GAEnF29N,EAAO2E,OAAO3E,EAAOgF,cAElCgnB,EAAe,OAEpB,OAD0BvtQ,SAASutQ,EAAcj3U,aAAa,wBAAyB,GAC/D,EASEg3U,IACrBppQ,OAAO2D,MAAMwlQ,IAAsBA,EAAoB,GAA2B,qBAAfD,IACtEj1N,EAAQk1N,EACRN,EAAqBM,EACrBL,EAAuBK,GAEzBb,EAAmBr0N,EACnB,MAAMypM,EAAQL,EAAOtoU,OAAO2oU,MACtB4rB,EAAUA,KACTjsB,IAAUA,EAAOuD,YAClBvD,EAAOtoU,OAAO2iM,SAAS0wJ,kBACpB/qB,EAAO+L,aAAe/L,EAAOtoU,OAAOolM,MAAQkjI,EAAOtoU,OAAO2tU,QAC7DrF,EAAOwR,UAAUnR,GAAO,GAAM,GAC9ByD,EAAK,aACK9D,EAAOtoU,OAAO2iM,SAASywJ,kBACjC9qB,EAAOkQ,QAAQlQ,EAAO2E,OAAOnoU,OAAS,EAAG6jU,GAAO,GAAM,GACtDyD,EAAK,cAGF9D,EAAOgM,OAAShM,EAAOtoU,OAAOolM,MAAQkjI,EAAOtoU,OAAO2tU,QACvDrF,EAAOkR,UAAU7Q,GAAO,GAAM,GAC9ByD,EAAK,aACK9D,EAAOtoU,OAAO2iM,SAASywJ,kBACjC9qB,EAAOkQ,QAAQ,EAAG7P,GAAO,GAAM,GAC/ByD,EAAK,aAGL9D,EAAOtoU,OAAO4vU,UAChBokB,GAAoB,IAAI3xP,MAAOmnC,UAC/Bk1B,uBAAsB,KACpBwsG,GAAK,KAET,EAcF,OAZIhsI,EAAQ,GACVr9H,aAAanB,GACbA,EAAU6B,YAAW,KACnBgyV,GAAS,GACRr1N,IAEHw/B,uBAAsB,KACpB61L,GAAS,IAKNr1N,CAAK,EAERpyH,EAAQA,KACZknV,GAAoB,IAAI3xP,MAAOmnC,UAC/B8+L,EAAO3lI,SAASw/I,SAAU,EAC1Bj3E,IACAkhE,EAAK,gBAAgB,EAEjB50J,EAAOA,KACX8wJ,EAAO3lI,SAASw/I,SAAU,EAC1BtgV,aAAanB,GACbm+J,qBAAqBm0L,GACrB5mB,EAAK,eAAe,EAEhB/nK,EAAQA,CAACulD,EAAU5iN,KACvB,GAAIshU,EAAOuD,YAAcvD,EAAO3lI,SAASw/I,QAAS,OAClDtgV,aAAanB,GACRkpN,IACHgqI,GAAsB,GAExB,MAAMW,EAAUA,KACdnoB,EAAK,iBACD9D,EAAOtoU,OAAO2iM,SAASuwJ,kBACzB5qB,EAAOM,UAAUjvO,iBAAiB,gBAAiBs6P,GAEnDh8K,GACF,EAGF,GADAqwJ,EAAO3lI,SAASx+B,QAAS,EACrBn9J,EAMF,OALI2sV,IACFJ,EAAmBjrB,EAAOtoU,OAAO2iM,SAASzjE,OAE5Cy0N,GAAe,OACfY,IAGF,MAAMr1N,EAAQq0N,GAAoBjrB,EAAOtoU,OAAO2iM,SAASzjE,MACzDq0N,EAAmBr0N,IAAS,IAAI78B,MAAOmnC,UAAYwqN,GAC/C1rB,EAAOgM,OAASif,EAAmB,IAAMjrB,EAAOtoU,OAAOolM,OACvDmuJ,EAAmB,IAAGA,EAAmB,GAC7CgB,IAAS,EAELt8K,EAASA,KACTqwJ,EAAOgM,OAASif,EAAmB,IAAMjrB,EAAOtoU,OAAOolM,MAAQkjI,EAAOuD,YAAcvD,EAAO3lI,SAASw/I,UACxG6R,GAAoB,IAAI3xP,MAAOmnC,UAC3BoqN,GACFA,GAAsB,EACtB1oF,EAAIqoF,IAEJroF,IAEFo9D,EAAO3lI,SAASx+B,QAAS,EACzBioK,EAAK,kBAAiB,EAElBooB,EAAqBA,KACzB,GAAIlsB,EAAOuD,YAAcvD,EAAO3lI,SAASw/I,QAAS,OAClD,MAAMj6P,EAAWy+O,KACgB,WAA7Bz+O,EAASusQ,kBACXb,GAAsB,EACtBvvL,GAAM,IAEyB,YAA7Bn8E,EAASusQ,iBACXx8K,GACF,EAEIy8K,EAAiBt2V,IACC,UAAlBA,EAAEwoG,cACNgtP,GAAsB,EACtBC,GAAuB,EACnBvrB,EAAOuP,WAAavP,EAAO3lI,SAASx+B,QACxCE,GAAM,GAAK,EAEPswL,EAAiBv2V,IACC,UAAlBA,EAAEwoG,cACNitP,GAAuB,EACnBvrB,EAAO3lI,SAASx+B,QAClB8T,IACF,EAsBFx2C,EAAG,QAAQ,KACL6mM,EAAOtoU,OAAO2iM,SAASplC,UApBvB+qK,EAAOtoU,OAAO2iM,SAAS2wJ,oBACzBhrB,EAAOn5T,GAAGwqF,iBAAiB,eAAgB+6P,GAC3CpsB,EAAOn5T,GAAGwqF,iBAAiB,eAAgBg7P,IAU5BhuB,KACRhtO,iBAAiB,mBAAoB66P,GAU5C1nV,IACF,IAEF20H,EAAG,WAAW,KApBR6mM,EAAOn5T,IAA2B,kBAAdm5T,EAAOn5T,KAC7Bm5T,EAAOn5T,GAAGyqF,oBAAoB,eAAgB86P,GAC9CpsB,EAAOn5T,GAAGyqF,oBAAoB,eAAgB+6P,IAQ/BhuB,KACR/sO,oBAAoB,mBAAoB46P,GAY7ClsB,EAAO3lI,SAASw/I,SAClB3qK,GACF,IAEF/1C,EAAG,0BAA0B,MACvBgyN,GAAiBG,IACnB37K,GACF,IAEFx2C,EAAG,8BAA8B,KAC1B6mM,EAAOtoU,OAAO2iM,SAASwwJ,qBAG1B37K,IAFAnT,GAAM,GAAM,EAGd,IAEF5iC,EAAG,yBAAyB,CAAC0tN,EAAIxmB,EAAO/+G,MAClC0+G,EAAOuD,WAAcvD,EAAO3lI,SAASw/I,UACrCv4H,IAAa0+G,EAAOtoU,OAAO2iM,SAASwwJ,qBACtC9uL,GAAM,GAAM,GAEZmT,IACF,IAEF/1C,EAAG,mBAAmB,MAChB6mM,EAAOuD,WAAcvD,EAAO3lI,SAASw/I,UACrC7Z,EAAOtoU,OAAO2iM,SAASwwJ,qBACzB37K,KAGFimK,GAAY,EACZgW,GAAgB,EAChBG,GAAsB,EACtBF,EAAoBnxV,YAAW,KAC7BqxV,GAAsB,EACtBH,GAAgB,EAChBpvL,GAAM,EAAK,GACV,MAAI,IAET5iC,EAAG,YAAY,KACb,IAAI6mM,EAAOuD,WAAcvD,EAAO3lI,SAASw/I,SAAY1E,EAArD,CAGA,GAFA57U,aAAa6xV,GACb7xV,aAAanB,GACT4nU,EAAOtoU,OAAO2iM,SAASwwJ,qBAGzB,OAFAM,GAAgB,OAChBhW,GAAY,GAGVgW,GAAiBnrB,EAAOtoU,OAAO4vU,SAAS33J,IAC5Cw7K,GAAgB,EAChBhW,GAAY,CAV0D,CAUrD,IAEnBh8M,EAAG,eAAe,MACZ6mM,EAAOuD,WAAcvD,EAAO3lI,SAASw/I,UACzCwR,GAAe,EAAI,IAErB/tV,OAAOmF,OAAOu9T,EAAO3lI,SAAU,CAC7B71L,QACA0qK,OACAnT,QACA4T,UAEJ,CL0FA02K,GAAY/9P,YAAc,cM9X1B,MAqIA,GArIyBgkQ,MACvBt2O,EAAAA,EAAAA,YAAU,KACR,MAAM+nN,EAAeA,KACFn+O,SAAS4lC,iBAAiB,mBAClC1uH,SAAS8S,IACZA,EAAQ+iH,wBAAwBzhD,IAAM72E,OAAO2pU,YAC/Cp0T,EAAQy7I,UAAUnmJ,IAAI,kBAEtB0K,EAAQy7I,UAAU32I,OAAO,iBAC3B,GACA,EAIJ,OADAra,OAAOg9F,iBAAiB,SAAU0sO,GAC3B,KACL1pU,OAAOi9F,oBAAoB,SAAUysO,EAAa,CACnD,GACA,KAGD/e,EAAAA,GAAAA,KAAA,WAAS5vL,UAAU,4CAA2ClkC,UAC5D+zN,EAAAA,GAAAA,MAAA,OAAK7vL,UAAU,YAAWlkC,SAAA,EAC1B8zN,EAAAA,GAAAA,KAAA,MAAI5vL,UAAU,wBAAwBtgC,MAAO,CAAEw9L,UAAW,UAAWphM,SAAC,uBACpE8zN,EAAAA,GAAAA,KAAA,OAAK5vL,UAAU,MAAKlkC,UAChB+zN,EAAAA,GAAAA,MAACu+B,GAAM,CACLzW,aAAc,GACdM,gBAAgB,EAChBhtI,SAAU,CACRzjE,MAAO,IACPi0N,sBAAsB,GAExB5J,WAAY,CAAEqG,WAAW,GACzB3J,QAAS,CAAC8M,GAAUvD,IACpB93N,UAAU,WAAUlkC,SAAA,EAEpB8zN,EAAAA,GAAAA,KAACqnC,GAAW,CAAAn7P,UACV+zN,EAAAA,GAAAA,MAAA,OAAK7vL,UAAU,cAAalkC,SAAA,EAC1B8zN,EAAAA,GAAAA,KAAA,OAAK5vL,UAAU,MAAKlkC,UAClB8zN,EAAAA,GAAAA,KAAA,OACE90S,IAAI,iFACJqpK,IAAI,qBAGRyrI,EAAAA,GAAAA,KAAA,OAAK5vL,UAAU,sBAAqBlkC,UAClC8zN,EAAAA,GAAAA,KAAA,KAAA9zN,SAAG,yPAEL+zN,EAAAA,GAAAA,MAAA,OAAK7vL,UAAU,oBAAmBlkC,SAAA,EAChC8zN,EAAAA,GAAAA,KAAA,MAAA9zN,SAAI,mBACJ8zN,EAAAA,GAAAA,KAAA,UACAA,EAAAA,GAAAA,KAAA,SAAA9zN,SAAO,uCAIb8zN,EAAAA,GAAAA,KAACqnC,GAAW,CAAAn7P,UACV+zN,EAAAA,GAAAA,MAAA,OAAK7vL,UAAU,cAAalkC,SAAA,EAC1B8zN,EAAAA,GAAAA,KAAA,OAAK5vL,UAAU,MAAKlkC,UAClB8zN,EAAAA,GAAAA,KAAA,OACE90S,IAAI,mFACJqpK,IAAI,uBAGRyrI,EAAAA,GAAAA,KAAA,OAAK5vL,UAAU,sBAAqBlkC,UAClC8zN,EAAAA,GAAAA,KAAA,KAAA9zN,SAAG,oTAEL+zN,EAAAA,GAAAA,MAAA,OAAK7vL,UAAU,oBAAmBlkC,SAAA,EAChC8zN,EAAAA,GAAAA,KAAA,MAAA9zN,SAAI,mBACJ8zN,EAAAA,GAAAA,KAAA,UACAA,EAAAA,GAAAA,KAAA,SAAA9zN,SAAO,6BAIb8zN,EAAAA,GAAAA,KAACqnC,GAAW,CAAAn7P,UACV+zN,EAAAA,GAAAA,MAAA,OAAK7vL,UAAU,cAAalkC,SAAA,EAC1B8zN,EAAAA,GAAAA,KAAA,OAAK5vL,UAAU,MAAKlkC,UAClB8zN,EAAAA,GAAAA,KAAA,OACE90S,IAAI,kFACJqpK,IAAI,qBAGRyrI,EAAAA,GAAAA,KAAA,OAAK5vL,UAAU,sBAAqBlkC,UAClC8zN,EAAAA,GAAAA,KAAA,KAAA9zN,SAAG,4SAEL+zN,EAAAA,GAAAA,MAAA,OAAK7vL,UAAU,oBAAmBlkC,SAAA,EAChC8zN,EAAAA,GAAAA,KAAA,MAAA9zN,SAAI,mBACJ8zN,EAAAA,GAAAA,KAAA,UACAA,EAAAA,GAAAA,KAAA,SAAA9zN,SAAO,mCAIb8zN,EAAAA,GAAAA,KAACqnC,GAAW,CAAAn7P,UACV+zN,EAAAA,GAAAA,MAAA,OAAK7vL,UAAU,cAAalkC,SAAA,EAC1B8zN,EAAAA,GAAAA,KAAA,OAAK5vL,UAAU,MAAKlkC,UAClB8zN,EAAAA,GAAAA,KAAA,OACE90S,IAAI,iFACJqpK,IAAI,oBAGRyrI,EAAAA,GAAAA,KAAA,OAAK5vL,UAAU,sBAAqBlkC,UAClC8zN,EAAAA,GAAAA,KAAA,KAAA9zN,SAAG,uNAEL+zN,EAAAA,GAAAA,MAAA,OAAK7vL,UAAU,oBAAmBlkC,SAAA,EAChC8zN,EAAAA,GAAAA,KAAA,MAAA9zN,SAAI,kBACJ8zN,EAAAA,GAAAA,KAAA,UACAA,EAAAA,GAAAA,KAAA,SAAA9zN,SAAO,6CAIb8zN,EAAAA,GAAAA,KAACqnC,GAAW,CAAAn7P,UACV+zN,EAAAA,GAAAA,MAAA,OAAK7vL,UAAU,cAAalkC,SAAA,EAC1B8zN,EAAAA,GAAAA,KAAA,OAAK5vL,UAAU,MAAKlkC,UAClB8zN,EAAAA,GAAAA,KAAA,OACE90S,IAAI,qFACJqpK,IAAI,wBAGRyrI,EAAAA,GAAAA,KAAA,OAAK5vL,UAAU,sBAAqBlkC,UAClC8zN,EAAAA,GAAAA,KAAA,KAAA9zN,SAAG,24DAGL+zN,EAAAA,GAAAA,MAAA,OAAK7vL,UAAU,oBAAmBlkC,SAAA,EAChC8zN,EAAAA,GAAAA,KAAA,MAAA9zN,SAAI,sBACJ8zN,EAAAA,GAAAA,KAAA,UACAA,EAAAA,GAAAA,KAAA,SAAA9zN,SAAO,+DC7F3B,GAlBaqhQ,MAVTv2O,EAAAA,EAAAA,YAAU,KACMsqM,aAAapzH,QAAQ,gBACrBozH,aAAapzH,QAAQ,QAGjC,GAED,KAOH+xH,EAAAA,GAAAA,MAAA,OAAA/zN,SAAA,EACE8zN,EAAAA,GAAAA,KAACoe,GAAM,KACPpe,EAAAA,GAAAA,KAACqe,GAAW,KACZre,EAAAA,GAAAA,KAACkf,GAAW,KACZlf,EAAAA,GAAAA,KAAC8e,GAAQ,KAET9e,EAAAA,GAAAA,KAAA,OAAK5vL,UAAU,iBAAgBlkC,UAC7B8zN,EAAAA,GAAAA,KAACstC,GAAgB,OAEnBttC,EAAAA,GAAAA,KAACif,GAAM,QCmEb,GA9FkBuuB,KACd,MAAOtsP,EAAOygN,IAAYpqM,EAAAA,EAAAA,UAAS,KAC5B56G,EAAU8wV,IAAel2O,EAAAA,EAAAA,UAAS,KAClCqqM,EAAWxB,IAAgB7oM,EAAAA,EAAAA,WAAS,IACpC8+J,EAAcwrC,IAAmBtqM,EAAAA,EAAAA,UAAS,IAE3ClzB,EAAWg4M,IACXW,EAAWR,KAEXokB,GAAY,IAAI7lN,MAAOmnC,WAE7BlrB,EAAAA,EAAAA,YAAU,KACN,MACM02O,EADS,IAAI/iD,gBAAgBtmN,EAAS+c,QAClBnhG,IAAI,SAC1BytV,GACA/rC,EAAS+rC,EACb,GACD,CAACrpQ,IAoCJ,OACI27N,EAAAA,GAAAA,KAAA,OAAK5vL,UAAU,aAAYlkC,UAC3B+zN,EAAAA,GAAAA,MAAA,OAAK7vL,UAAU,kBAAiBlkC,SAAA,EAC9B+zN,EAAAA,GAAAA,MAAA,OAAK7vL,UAAU,eAAclkC,SAAA,EAC3B8zN,EAAAA,GAAAA,KAAA,MAAA9zN,SAAI,eACJ8zN,EAAAA,GAAAA,KAAA,KAAA9zN,SAAG,qCAEJmqL,IAAgB2pC,EAAAA,GAAAA,KAAA,OAAK5vL,UAAU,gBAAelkC,SAAEmqL,KACjD4pC,EAAAA,GAAAA,MAAA,QAAM+B,SAtCSlM,UACjBp0M,EAAMvH,iBACNimN,GAAa,GACbyB,EAAgB,IAEhB,IACI,MAAMjsT,QAAiB2pT,GAAM8B,KAAK,0CAA2C,CACzEngN,MAAOA,EACPvkG,SAAUA,IAEX/G,EAASkG,KAAK6xV,cACfpjV,QAAQ4qF,IAAI,iBACZmsN,aAAanzH,QAAQ,eAAgBv4L,EAASkG,KAAK6xV,cACnDrsC,aAAanzH,QAAQ,QAASv4L,EAASkG,KAAKolG,OAC5CogN,aAAanzH,QAAQ,YAAav4L,EAASkG,KAAKylT,WAChDD,aAAanzH,QAAQ,aAAcyyH,GACnC5jB,EAAS,UAGT6kB,EAAgB,0DAEpB,CAAE,MAAMxrC,GACNwrC,EAAgB,0DAClB,CAAC,QACCzB,GAAa,EACf,CAEFA,GAAa,EAAM,EAWYl0N,SAAA,EAC3B8zN,EAAAA,GAAAA,KAAA,OAAK5vL,UAAU,aAAYlkC,UACzB8zN,EAAAA,GAAAA,KAAA,SACExpT,KAAK,QACL45H,UAAU,eACVv6G,GAAG,QACHpf,MAAOyqG,EACP0sP,UAAQ,OAGZ5tC,EAAAA,GAAAA,KAAA,OAAK5vL,UAAU,aAAYlkC,UACvB8zN,EAAAA,GAAAA,KAAA,SACIxpT,KAAK,WACL45H,UAAU,eACVv6G,GAAG,WACHpf,MAAOkG,EACPkyH,SA1DcntB,IAC1B+rP,EAAY/rP,EAAMh+F,OAAOjN,MAAM,EA0DnB+4H,YAAY,sBACZ8T,UAAQ,OAGhB08K,EAAAA,GAAAA,KAAA,OAAK5vL,UAAU,wBAAuBlkC,UACpC8zN,EAAAA,GAAAA,KAAA,KAAGt8M,KAAK,mBAAmB0sB,UAAU,kBAAiBlkC,SAAC,wBAEzD8zN,EAAAA,GAAAA,KAAA,UAAQxpT,KAAK,SAAS45H,UAAU,kBAAkBrkC,SAAU61N,EAAU11N,SACnE01N,EAAY,aAAe,iBAI9B,2BCzFZ,MA6IA,GA7IqBisC,KACjB,MAAO3sP,EAAOygN,IAAYpqM,EAAAA,EAAAA,UAAS,KAC5B56G,EAAU8wV,IAAel2O,EAAAA,EAAAA,UAAS,KAClCqqM,EAAWxB,IAAgB7oM,EAAAA,EAAAA,WAAS,IACpC8+J,EAAcwrC,IAAmBtqM,EAAAA,EAAAA,UAAS,KAC1CgnN,EAAUG,IAAennN,EAAAA,EAAAA,UAAS,KAClCu2O,EAAcC,IAAmBx2O,EAAAA,EAAAA,UAAS,IAE3ClzB,EAAWg4M,IACXW,EAAWR,KAEXokB,GAAY,IAAI7lN,MAAOmnC,WAE7BlrB,EAAAA,EAAAA,YAAU,KACN,MACM02O,EADS,IAAI/iD,gBAAgBtmN,EAAS+c,QAClBnhG,IAAI,SAC3BytV,GACC/rC,EAAS+rC,EACb,GACD,CAACrpQ,IAuDJ,OACI27N,EAAAA,GAAAA,KAAA,OAAK5vL,UAAU,gBAAelkC,UAC1B+zN,EAAAA,GAAAA,MAAA,OAAK7vL,UAAU,qBAAoBlkC,SAAA,EAC/B+zN,EAAAA,GAAAA,MAAA,OAAK7vL,UAAU,kBAAiBlkC,SAAA,EAC5B8zN,EAAAA,GAAAA,KAAA,MAAA9zN,SAAI,iBACJ8zN,EAAAA,GAAAA,KAAA,KAAA9zN,SAAG,8BAENmqL,IAAgB2pC,EAAAA,GAAAA,KAAA,OAAK5vL,UAAU,gBAAelkC,SAAEmqL,KACjD4pC,EAAAA,GAAAA,MAAA,QAAM+B,SAjDGlM,UAMjB,GALAp0M,EAAMvH,iBACNimN,GAAa,GACbyB,EAAgB,IAGZllT,EAASa,OAAS,EAGlB,OAFAqkT,EAAgB,qDAChBzB,GAAa,GAIjB,IACI,MAAMxqT,QAAiB2pT,GAAM8B,KAAK,6CAA8C,CAC5EngN,MAAOA,EACPvkG,SAAUA,EACV4kT,UAAWgd,EACXyvB,cAAeF,KAEhBl4V,EAASkG,KAAKmyV,WAAa,WAC5B1jV,QAAQ4qF,IAAI,iBACZmsN,aAAanzH,QAAQ,eAAgBv4L,EAASkG,KAAK6xV,cACnDrsC,aAAanzH,QAAQ,QAASv4L,EAASkG,KAAKolG,OAC5CogN,aAAanzH,QAAQ,YAAav4L,EAASkG,KAAKylT,WAChDD,aAAanzH,QAAQ,gBAAiB2/J,GACtCxsC,aAAanzH,QAAQ,aAAcyyH,GACnC5jB,EAAS,WAGTzyR,QAAQ4qF,IAAI,eACZ6nM,EAAS,gBAAgB97L,KAE7B,CAAE,MAAMm1K,GACNwrC,EAAgB,8CAClB,CAAC,QACCzB,GAAa,EACf,CAEFA,GAAa,EAAM,EAWkBl0N,SAAA,EACzB8zN,EAAAA,GAAAA,KAAA,OAAK5vL,UAAU,aAAYlkC,UACvB8zN,EAAAA,GAAAA,KAAA,SACIxpT,KAAK,QACL45H,UAAU,eACVv6G,GAAG,QACHpf,MAAOyqG,EACP0sP,UAAQ,OAGhB5tC,EAAAA,GAAAA,KAAA,OAAK5vL,UAAU,aAAYlkC,UACvB8zN,EAAAA,GAAAA,KAAA,SACI5vL,UAAU,eACVv6G,GAAG,WACHpf,MAAO8nU,EACP1vM,SA5EMntB,IAC1Bg9N,EAAYh9N,EAAMh+F,OAAOjN,MAAM,EA4EX+4H,YAAY,uBACZ8T,UAAQ,OAGhB08K,EAAAA,GAAAA,KAAA,OAAK5vL,UAAU,aAAYlkC,UAEvB8zN,EAAAA,GAAAA,KAACkuC,KACG,CACAz3V,MAAOq3V,EACPt+N,YAAY,oBACZX,SA/EIp4H,IACxBs3V,EAAgBt3V,EAAM,EA+EF88H,WAAW,eACXM,WAAY,CACRn1H,KAAM,SACN4kI,UAAU,GAEdA,UAAQ,OAGhB08K,EAAAA,GAAAA,KAAA,OAAK5vL,UAAU,aAAYlkC,UACvB8zN,EAAAA,GAAAA,KAAA,SACIxpT,KAAK,WACL45H,UAAU,eACVv6G,GAAG,WACHpf,MAAOkG,EACPkyH,SAlGMntB,IAC1B+rP,EAAY/rP,EAAMh+F,OAAOjN,MAAM,EAkGX+4H,YAAY,sBACZ8T,UAAQ,OAOhB08K,EAAAA,GAAAA,KAAA,UAAQxpT,KAAK,SAAS45H,UAAU,kBAAkBrkC,SAAU61N,EAAU11N,SACjE01N,EAAY,aAAe,6BAItC,ECvGd,GArCewc,KAEXpe,EAAAA,GAAAA,KAAA,UAAQ5vL,UAAU,SAAQlkC,UACxB+zN,EAAAA,GAAAA,MAAA,OAAK7vL,UAAU,uCAAsClkC,SAAA,EACrD+zN,EAAAA,GAAAA,MAAA,KAAG7vL,UAAU,eAAe1sB,KAAK,QAAOxX,SAAA,EACpC8zN,EAAAA,GAAAA,KAAA,OAAK90S,IAAI,uBAAuBqpK,IAAI,oBAAoBnkD,UAAU,SAAS,mBAE7E4vL,EAAAA,GAAAA,KAAA,UAAQ5vL,UAAU,iBAAiB55H,KAAK,SAAS,cAAY,WAAW,cAAY,aAAa,gBAAc,YAAY,gBAAc,QAAQ,aAAW,oBAAmB01F,UAC7K8zN,EAAAA,GAAAA,KAAA,QAAM5vL,UAAU,2BAElB4vL,EAAAA,GAAAA,KAAA,OAAK5vL,UAAU,2BAA2Bv6G,GAAG,YAAWq2E,UACtD+zN,EAAAA,GAAAA,MAAA,MAAI7vL,UAAU,qBAAoBlkC,SAAA,EAChC8zN,EAAAA,GAAAA,KAAA,MAAI5vL,UAAU,WAAUlkC,UACtB8zN,EAAAA,GAAAA,KAAA,KAAG5vL,UAAU,WAAW1sB,KAAK,IAAGxX,SAAC,YAEnC8zN,EAAAA,GAAAA,KAAA,MAAI5vL,UAAU,WAAUlkC,UACtB8zN,EAAAA,GAAAA,KAAA,KAAG5vL,UAAU,WAAW1sB,KAAK,WAAUxX,SAAC,eAE1C8zN,EAAAA,GAAAA,KAAA,MAAI5vL,UAAU,WAAUlkC,UACtB8zN,EAAAA,GAAAA,KAAA,KAAG5vL,UAAU,WAAW1sB,KAAK,aAAYxX,SAAC,iBAE5C8zN,EAAAA,GAAAA,KAAA,MAAI5vL,UAAU,WAAUlkC,UACtB8zN,EAAAA,GAAAA,KAAA,KAAG5vL,UAAU,WAAW1sB,KAAK,UAASxX,SAAC,cAEzC8zN,EAAAA,GAAAA,KAAA,MAAI5vL,UAAU,WAAUlkC,UACtB8zN,EAAAA,GAAAA,KAACvd,GAAI,CAACryK,UAAU,WAAWy/B,GAAG,WAAU3jE,SAAC,aAE3C8zN,EAAAA,GAAAA,KAAA,MAAI5vL,UAAU,WAAUlkC,UACtB8zN,EAAAA,GAAAA,KAACvd,GAAI,CAACryK,UAAU,kBAAkBy/B,GAAG,WAAU3jE,SAAC,wBCM9D,GA3BoBiiQ,MAClBn3O,EAAAA,EAAAA,YAAU,KACR,MACMo3O,EADS,IAAIzjD,gBAAgBt1S,OAAOgvF,SAAS+c,QACvBnhG,IAAI,YAE5BmuV,GAEF9sC,aAAanzH,QAAQ,gBAAiBigK,EACxC,GACC,KAGDnuC,EAAAA,GAAAA,MAAA,OAAA/zN,SAAA,EACE8zN,EAAAA,GAAAA,KAACquC,GAAQ,KACTruC,EAAAA,GAAAA,KAACqe,GAAW,KACZre,EAAAA,GAAAA,KAACkf,GAAW,KACZlf,EAAAA,GAAAA,KAAC8e,GAAQ,KAGT9e,EAAAA,GAAAA,KAAA,OAAK5vL,UAAU,iBAAgBlkC,UAC7B8zN,EAAAA,GAAAA,KAACstC,GAAgB,OAEnBttC,EAAAA,GAAAA,KAACif,GAAM,QChBb,GAdqBqvB,IACKC,MACtB,MAAMvoD,EAAQsb,aAAapzH,QAAQ,gBAC7BsgK,EAAOltC,aAAapzH,QAAQ,SAElC,SAAK83G,IAAUwoD,EAGJ,EAGND,IAAoBvuC,EAAAA,GAAAA,KAACjf,GAAM,KAAMif,EAAAA,GAAAA,KAACpf,GAAQ,CAAC/wI,GAAG,IAAInrJ,SAAO,ICGlE,GAdoB+pV,IACQF,MACpB,MAAMvoD,EAAQsb,aAAapzH,QAAQ,gBAC7BsgK,EAAOltC,aAAapzH,QAAQ,SAElC,SAAK83G,IAAUwoD,EAGA,EAGZD,IAAoBvuC,EAAAA,GAAAA,KAACpf,GAAQ,CAAC/wI,GAAG,QAAQnrJ,SAAO,KAAMs7S,EAAAA,GAAAA,KAACjf,GAAM,ICuCxE,GA/CmBj/R,IAAiB,IAAhB,OAAE4sV,GAAQ5sV,EAC1B,OACEk+S,EAAAA,GAAAA,KAAA,OAAK5vL,UAAU,gBAAelkC,UAC5B+zN,EAAAA,GAAAA,MAAA,OAAK7vL,UAAU,yBAAwBlkC,SAAA,CAEX,uBAAvBwiQ,EAAOC,cACJ3uC,EAAAA,GAAAA,KAAA,OAAK5vL,UAAU,iEAAiEtgC,MAAO,CAAC8+P,WAAY,WAAW1iQ,SAAC,qBAI5F,aAAvBwiQ,EAAOC,cACJ3uC,EAAAA,GAAAA,KAAA,OAAK5vL,UAAU,iEAAiEtgC,MAAO,CAAC8+P,WAAY,WAAW1iQ,SAAC,qBAKpH8zN,EAAAA,GAAAA,KAAA,OAAK90S,IAAKwjV,EAAOG,cAAez+N,UAAU,6BAA6BmkD,IAAKm6K,EAAO36N,SACnFksL,EAAAA,GAAAA,MAAA,OAAK7vL,UAAU,YAAWlkC,SAAA,EAEtB8zN,EAAAA,GAAAA,KAAA,MAAI5vL,UAAU,aAAYlkC,SAAEwiQ,EAAO36N,SAEnCisL,EAAAA,GAAAA,KAAA,KAAG5vL,UAAU,YAAWlkC,SAAEwiQ,EAAOlyL,cAEf,gBAAjBkyL,EAAOI,OACJ9uC,EAAAA,GAAAA,KAAA,MAAIlwN,MAAO,CAACiR,MAAO,WAAW7U,UAAC8zN,EAAAA,GAAAA,KAAA,UAAA9zN,SAAQ,mBAEvC+zN,EAAAA,GAAAA,MAAA2e,GAAAA,SAAA,CAAA1yO,SAAA,EACI8zN,EAAAA,GAAAA,KAAA,KAAG5vL,UAAU,YAAYtgC,MAAO,CAACiR,MAAM,WAAW7U,UAC9C+zN,EAAAA,GAAAA,MAAA,UAAA/zN,SAAA,CAAQ,8BACmBwiQ,EAAOI,MAAM,WAG5C7uC,EAAAA,GAAAA,MAAA,KAAG7vL,UAAU,YAAYtgC,MAAO,CAAEi/P,eAAgB,eAAgBhuP,MAAO,QAAS7U,SAAA,CAAC,0BAC5DwiQ,EAAOM,eAAe,SAG7ChvC,EAAAA,GAAAA,KAAA,OAAK5vL,UAAU,eAAclkC,UACzB8zN,EAAAA,GAAAA,KAACvd,GAAI,CAAC5yI,GAAI,YAAY6+L,EAAOC,cAAcziQ,SAAC,4BAM9D,ECYV,GAtDmB+iQ,KAEf,MAAOC,EAASC,IAAc53O,EAAAA,EAAAA,UAAS,KAGhCqqM,EAAWxB,IAAgB7oM,EAAAA,EAAAA,WAAS,GAqB3C,OAlBAP,EAAAA,EAAAA,YAAU,KAENuoM,GAAMt/S,IAAI,6CACL2pG,MAAKh0G,IAEFu5V,EAAWv5V,EAASkG,MAEpBskT,GAAa,EAAM,IAEtBv2M,OAAMziG,IAEHmD,QAAQnD,MAAM,uBAAwBA,GAEtCg5S,GAAa,EAAK,GACpB,GACP,IAGCwB,GAAkB5B,EAAAA,GAAAA,KAACD,GAAc,KAIjCC,EAAAA,GAAAA,KAAA,OAAK5vL,UAAU,cAAalkC,UACxB+zN,EAAAA,GAAAA,MAAA,OAAK7vL,UAAU,YAAWlkC,SAAA,EACtB8zN,EAAAA,GAAAA,KAAA,OAAK5vL,UAAU,MAAKlkC,UAChB+zN,EAAAA,GAAAA,MAAA,OAAK7vL,UAAU,SAAQlkC,SAAA,EAEnB8zN,EAAAA,GAAAA,KAAA,KAAGt8M,KAAK,QAAQ0sB,UAAU,YAAWlkC,SAAC,YACtC8zN,EAAAA,GAAAA,KAAA,MAAI5vL,UAAU,mBAAmBtgC,MAAO,CAACiR,MAAO,WAAW7U,SAAC,iBAE5D8zN,EAAAA,GAAAA,KAAA,MAAI5vL,UAAU,mBAAkBlkC,SAAC,sTAKzC8zN,EAAAA,GAAAA,KAAA,OAAK5vL,UAAU,MAAKlkC,SAEfgjQ,EAAQ15U,KAAIk5U,IACT1uC,EAAAA,GAAAA,KAACovC,GAAU,CAAkBV,OAAQA,GAApBA,EAAOx9D,aAIlC,ECpBd,GAduBm+D,KACrB,MAAM,gBAAE/wB,EAAe,UAAE1c,GAjBX4c,MACd,MAAOF,EAAiBG,IAAsBlnN,EAAAA,EAAAA,WAAS,IAChDqqM,EAAWxB,IAAgB7oM,EAAAA,EAAAA,WAAS,GAW3C,OATAP,EAAAA,EAAAA,YAAU,KACR,MAAMgvL,EAAQsb,aAAapzH,QAAQ,gBAC7BhtF,EAAQogN,aAAapzH,QAAQ,SAC/B83G,GAAS9kM,GACXu9N,GAAmB,GAErBre,GAAa,EAAM,GAClB,IAEI,CAAEke,kBAAiB1c,YAAW,EAIE4c,GAEvC,OAAI5c,GAAkB5B,EAAAA,GAAAA,KAACD,GAAc,KAGnCE,EAAAA,GAAAA,MAAA,OAAK7vL,UAAU,iBAAgBlkC,SAAA,CAC5BoyO,GAAkBte,EAAAA,GAAAA,KAACoe,GAAM,KAAMpe,EAAAA,GAAAA,KAACquC,GAAQ,KACzCruC,EAAAA,GAAAA,KAACivC,GAAU,KACXjvC,EAAAA,GAAAA,KAACif,GAAM,MACH,sBC3BH,MAoEP,GApEwB/6O,IACtB,MAAMorQ,GAAWh4O,EAAAA,EAAAA,QAAO,MAClBi4O,GAAYj4O,EAAAA,EAAAA,QAAO,OACnB,QAAE7+G,EAAO,WAAEw3S,EAAU,QAAEu/C,GAAYtrQ,EA0DzC,OAxDA8yB,EAAAA,EAAAA,YAAU,KACR,GAAKu4O,EAAU/mV,QAqCR,CACL,MAAM+hJ,EAASglM,EAAU/mV,QACzB+hJ,EAAO8wC,SAAS5iM,EAAQ4iM,UACxB9wC,EAAOr/I,IAAIzS,EAAQoqJ,QACrB,KAzCwB,CACtB,MAAM4sM,EAAe7uQ,SAASpqE,cAAc,YAC5Ci5U,EAAappM,UAAUnmJ,IAAI,yBAC3BovV,EAAS9mV,QAAQzC,YAAY0pV,GAE7B,MAAMllM,EAAUglM,EAAU/mV,SAAUuiM,EAAAA,GAAAA,SAAQ0kJ,EAAch3V,GAAS,KACjE+2V,GAAWA,EAAQjlM,GAEnB,MAAMmlM,EAAW,SAASj3V,EAAQoqJ,QAAQ,GAAG33I,MACvCykV,EAAYruC,aAAapzH,QAAQwhK,GACnCC,GACFplM,EAAO6Y,YAAYjnC,WAAWwzN,IAGhCplM,EAAOpwB,GAAG,cAAc,KACtB,MAAMipC,EAAc7Y,EAAO6Y,cAC3Bk+I,aAAanzH,QAAQuhK,EAAUtsL,EAAY,IAG7CqsL,EAAap9P,iBAAiB,eAAgBv7F,IAC5CA,EAAEqjG,gBAAgB,IAGhB81M,GAAcA,EAAWzyS,OAAS,GACpC+sJ,EAAO07H,QAAQ,CACbP,YAAa,CACX3mL,MAAO,OACPu5E,gBAAiB,WAEnB2tG,QAASgqB,EAAWz6R,KAAI1T,IAAA,IAAC,KAAEw/F,EAAI,MAAE2rC,GAAOnrI,EAAA,MAAM,CAC5Cw/F,OACArpF,KAAMg1H,EACNlJ,MAAO,eACR,KAEL,GAEJ,CAIA,GACC,CAACtrI,EAAS+2V,EAASv/C,KAEtBj5L,EAAAA,EAAAA,YAAU,KACR,MAAMuzC,EAASglM,EAAU/mV,QAEzB,MAAO,KACD+hJ,IAAWA,EAAOsH,eACpBtH,EAAO7vB,UACP60N,EAAU/mV,QAAU,KACtB,CACD,GACA,KAGDw3S,EAAAA,GAAAA,KAAA,OAAK,qBAAe9zN,UAClB8zN,EAAAA,GAAAA,KAAA,OAAK9xM,IAAKohP,KACN,ECiBV,GAlFyBxtV,IAA6C,IAA5C,SAAE8tV,EAAQ,MAAE5pD,EAAK,kBAAE6pD,GAAmB/tV,EAE5D,MAAOguV,EAAQC,IAAax4O,EAAAA,EAAAA,UAAS,IAG9B7tG,EAASsmV,IAAcz4O,EAAAA,EAAAA,UAAS,KAGhC04O,EAAkBC,IAAuB34O,EAAAA,EAAAA,UAAS,IAqCzD,OACI0oM,EAAAA,GAAAA,MAAA,OAAK7vL,UAAU,cAAalkC,SAAA,EACxB8zN,EAAAA,GAAAA,KAAA,MAAA9zN,SAAI,mBAEH+jQ,IAAoBjwC,EAAAA,GAAAA,KAAA,KAAA9zN,SAAI+jQ,KACzBhwC,EAAAA,GAAAA,MAAA,QAAM+B,SA/BOlM,UACjBh/S,EAAEqjG,iBACF,UAEUolN,GAAM8B,KACR,oDACA,CACI,UAAauuC,EACb,OAAUE,EACV,QAAWpmV,GAEf,CAAE9S,QAAS,CAAEu5V,cAAe,UAAUnqD,OAG1CkqD,EAAoB,kCACpBL,IACAE,EAAU,GACVC,EAAW,GACf,CAAE,MAAO5oV,GAELmD,QAAQnD,MAAM,0BAA2BA,GACzC8oV,EAAoB,6CACxB,GASiChkQ,SAAA,EACzB+zN,EAAAA,GAAAA,MAAA,OAAK7vL,UAAU,aAAYlkC,SAAA,EACvB8zN,EAAAA,GAAAA,KAAA,SAAA9zN,SAAO,aACP8zN,EAAAA,GAAAA,KAAA,OAAK5vL,UAAU,cAAalkC,SAEvB,CAAC,EAAG,EAAG,EAAG,EAAG,GAAG12E,KAAKsvD,IAClBk7O,EAAAA,GAAAA,KAAA,QAEI5vL,UAAW,SAAQtrD,GAAQgrR,EAAS,SAAW,IAC/CxxO,QAASA,KA/CjCyxO,EA+C0DjrR,EAAM,EAAAonB,SAC3C,UAHQpnB,WAmBrBk7O,EAAAA,GAAAA,KAAA,UAAQxpT,KAAK,SAAS45H,UAAU,kBAAiBlkC,SAAC,uBAEpD,ECSd,GAxFoBpqF,IAAmB,IAAlB,SAAE8tV,GAAU9tV,EAC7B,MAAOsuV,EAASC,IAAc94O,EAAAA,EAAAA,UAAS,KAChC+4O,EAAYC,IAAiBh5O,EAAAA,EAAAA,UAAS,KACtCi5O,EAAeC,IAAoBl5O,EAAAA,EAAAA,UAAS,IAC5Cm5O,EAAcC,IAAmBp5O,EAAAA,EAAAA,UAAS,CAAC,IAclDP,EAAAA,EAAAA,YAAU,KAZW8+L,WACjB,IACI,MAAMlgT,QAAiB2pT,GAAMt/S,IAAI,6CAA6C2vV,aAC9ES,EAAWz6V,EAASkG,KAAKs0V,SAAW,IACpCK,EAAiB76V,EAASkG,KAAK80V,gBAAkB,GACjDD,EAAgB/6V,EAASkG,KAAK+0V,eAAiB,CAAC,EACpD,CAAE,MAAOzpV,GACLmD,QAAQnD,MAAM,0BAA2BA,GACzCmpV,EAAc,6CAClB,GAIAO,EAAc,GACf,CAAClB,IAQJ,OACI3vC,EAAAA,GAAAA,MAAA,OAAK7vL,UAAU,yBAAwBlkC,SAAA,EACnC8zN,EAAAA,GAAAA,KAAA,MAAI5vL,UAAU,wBAAwBtgC,MAAO,CAAEw9L,UAAW,UAAWphM,SAAC,mBACrEokQ,IAActwC,EAAAA,GAAAA,KAAA,KAAG5vL,UAAU,QAAOlkC,SAAEokQ,KAgBrCtwC,EAAAA,GAAAA,KAAA,OAAK5vL,UAAU,qBAAoBlkC,UAC/B8zN,EAAAA,GAAAA,KAAA,OAAK5vL,UAAU,wBAAuBlkC,UAClC+zN,EAAAA,GAAAA,MAAA,OAAK7vL,UAAU,oBAAmBlkC,SAAA,EAC9B8zN,EAAAA,GAAAA,KAAA,OAAK5vL,UAAU,OAAMlkC,UACjB+zN,EAAAA,GAAAA,MAAA,MAAI7vL,UAAU,kBAAiBlkC,SAAA,CAAC,mBAAiBskQ,EAAch0K,QAAQ,SAE3EwjI,EAAAA,GAAAA,KAAA,OAAK5vL,UAAU,qCAAoClkC,UAC/C8zN,EAAAA,GAAAA,KAAA,OAAK5vL,UAAU,QAAOlkC,UAClB8zN,EAAAA,GAAAA,KAAA,OAAK5vL,UAAU,2BAA0BlkC,UAjChD4jQ,EAkCwBrtV,KAAKq1K,MAAM04K,GAjC7C,IAAIp4V,MAAM,IAAIod,KAAI,CAACsvD,EAAM9sE,KAC5BgoT,EAAAA,GAAAA,KAAA,QAAkB5vL,UAAW,SAAQp4H,EAAQ83V,EAAS,SAAW,IAAK5jQ,SAAC,UAA5Dl0F,sBAFE83V,KA8DX,ECqQd,GAnVsBhuV,IAAqB,IAApB,OAAE4sV,EAAM,GAAE74U,GAAI/T,EAEjC,MAAOivV,EAAkBC,IAAuBz5O,EAAAA,EAAAA,UAAS,KAElD05O,EAAYC,IAAiB35O,EAAAA,EAAAA,WAAS,IAEtC45O,EAAcC,IAAmB75O,EAAAA,EAAAA,UAAS,CAAC,IAE3C85O,EAAeC,IAAoB/5O,EAAAA,EAAAA,WAAS,IAE5Cg6O,EAAeC,IAAoBj6O,EAAAA,EAAAA,WAAS,IAG7C,WAAEk6O,GAAe/zD,KAGjBsI,EAAQsb,aAAapzH,QAAQ,gBAC7BhtF,EAAQogN,aAAapzH,QAAQ,SAE7B8uG,EAAWR,KA2CXk1D,EAAsB57C,UACxB,GAAKm7C,EACL,IACI,MAIM70K,SAJiBmjI,GAAMt/S,IAAI,oDAAoD4V,IAAM,CACvFjf,QAAS,CAAEu5V,cAAe,UAAUnqD,QAGdlqS,KAAKzF,QAAO,CAACwlI,EAAK73H,KACxC63H,EAAI73H,EAAK2tV,YAAc3tV,EAAKo4K,SACrBvgD,IACR,CAAC,GACJu1N,EAAgBh1K,EACpB,CAAE,MAAOh1K,GACDA,EAAMxR,UAAsC,MAA1BwR,EAAMxR,SAASyF,OACjCkP,QAAQ4qF,IAAI,oEAEZ5qF,QAAQ4qF,IAAI,+DAEpB,IAIJ6hB,EAAAA,EAAAA,YAAU,KA9DoB8+L,WAC1B,GAAK9P,EAGL,WAC2BuZ,GAAMt/S,IAAI,iDAAkD,CAC/EvH,OAAQ,CAAEk5V,WAAY1wP,EAAO2wP,UAAWh8U,GACxCjf,QAAS,CAAEu5V,cAAe,UAAUnqD,QAE3BlqS,KAAKm1V,YACdC,GAAc,EAEtB,CAAE,MAAO9pV,GACLmD,QAAQnD,MAAM,oCAAqCA,EACvD,GAiDA0qV,GA7CuBh8C,WACvB,GAAK9P,EAGL,IAK4B,aAJDuZ,GAAMt/S,IAAI,kEAAmE,CAChGvH,OAAQ,CAAEm5V,UAAWh8U,GACrBjf,QAAS,CAAEu5V,cAAe,UAAUnqD,QAE3B3qS,QACTm2V,GAAiB,EAEzB,CAAE,MAAOpqV,GACL,GAAIA,EAAMxR,UAAsC,MAA1BwR,EAAMxR,SAASyF,OACjC,OAEAkP,QAAQ4qF,IAAI,+DAEpB,GA4BA48P,EAAoB,GACrB,KAGH/6O,EAAAA,EAAAA,YAAU,KACFi6O,GACAS,GACJ,GACD,CAACT,IAGJ,MAAMe,EAAqBl8C,UACnBm7C,QACMS,IAENV,EAAoB,gDACxB,EAIEiB,EAAkBn8C,UACpB,MAAMo8C,EAAa,CAAEL,UAAWh8U,EAAIi5U,MAAOJ,EAAOI,MAAO/6N,MAAO26N,EAAO36N,MAAO86N,cAAeH,EAAOG,cAAeF,YAAaD,EAAOC,aAEvI,IAAK3oD,EAAO,CAER,MAAMmsD,EAAYh4V,KAAKC,MAAMknT,aAAapzH,QAAQ,UAAY,GAK9D,OAJAikK,EAAU75V,KAAK45V,GACf5wC,aAAanzH,QAAQ,OAAQh0L,KAAK8B,UAAUk2V,IAC5Cb,GAAiB,QACjBN,EAAoB,wBAExB,CAEA,IAO4B,aALDzxC,GAAM8B,KACzB,mDACA6wC,EACA,CAAEt7V,QAAS,CAAEu5V,cAAe,UAAUnqD,IAAS,eAAgB,uBAEtD3qS,SACTi2V,GAAiB,GACjBN,EAAoB,yBAE5B,CAAE,MAAO5pV,GACL4pV,EAAoB,wDACpBzmV,QAAQnD,MAAM,+BAAgCA,EAClD,GAIEgrV,EAAgBt8C,UAClB9Y,EAAS,QAAQ,EAIfq1D,EAAev8C,UACjB,GAAK9P,EAKL,IAW4B,aAVDuZ,GAAM8B,KAAK,2CAA4C,CAC1EwwC,UAAWh8U,EACX+7U,WAAY1wP,GAEZ,CACItqG,QAAS,CACLu5V,cAAe,UAAUnqD,QAIxB3qS,SACT21V,EAAoB,yFACpBE,GAAc,GAEtB,CAAE,MAAO9pV,GACL4pV,EAAoB,4EACxB,MArBIA,EAAoB,yCAqBxB,EAIE/4U,EAAO,CAACy2U,EAAOlyL,YAAakyL,EAAO4D,UAAW5D,EAAO6D,KACrDC,EAAW,CAAC,eAAgB,aAAc,QAoB1CjD,EAAY3zD,EAAAA,OAAa,MAGzB62D,EAAiB,CACnBp3J,UAAU,EACVp+B,UAAU,EACVg/B,YAAY,EACZQ,OAAO,EACPjS,cAAe,CAAC,GAAK,EAAG,IAAK,GAC7B3nC,QAAS,CAAC,CACN33I,IAAKwjV,EAAOgE,OAAO,GAAG15V,IACtBxC,KAAM,2BA0Bd,OACIwpT,EAAAA,GAAAA,KAAA,OAAK5vL,UAAU,2BAA0BlkC,UACrC+zN,EAAAA,GAAAA,MAAA,OAAK7vL,UAAU,iBAAgBlkC,SAAA,EAC3B+zN,EAAAA,GAAAA,MAAA,OAAK7vL,UAAU,MAAKlkC,SAAA,EAChB+zN,EAAAA,GAAAA,MAAA,OAAK7vL,UAAU,WAAUlkC,SAAA,EACrB8zN,EAAAA,GAAAA,KAAA,MAAA9zN,SAAKwiQ,EAAO36N,SAEZisL,EAAAA,GAAAA,KAAC2yC,GAAO,CAACl6V,QAASg6V,EAAgBjD,QA5B3BjlM,IACvBglM,EAAU/mV,QAAU+hJ,EAEpBA,EAAOpwB,GAAG,WAAW,KACjB5vH,QAAQ4qF,IAAI,oBAAoB,IAGpCo1D,EAAOpwB,GAAG,WAAW,KACjB5vH,QAAQ4qF,IAAI,sBAAsB,GACpC,KAoBc6qN,EAAAA,GAAAA,KAAA,aAEJA,EAAAA,GAAAA,KAAA,OAAK5vL,UAAU,WAAUlkC,UACrB8zN,EAAAA,GAAAA,KAAA,OAAK5vL,UAAU,wBAAuBlkC,UAClC+zN,EAAAA,GAAAA,MAAA,OAAK7vL,UAAU,YAAWlkC,SAAA,EAlE3B0mQ,EAoEoB36U,EAnEhC26U,EAAUp9U,KAAI,CAACqwI,EAAS7tJ,KAC3BioT,EAAAA,GAAAA,MAAA,OAAiB7vL,UAAU,YAAWlkC,SAAA,EAClC8zN,EAAAA,GAAAA,KAAA,MAAI5vL,UAAU,eAAclkC,SAAEsmQ,EAASx6V,MACvCgoT,EAAAA,GAAAA,KAAA,KAAA9zN,SACK25D,EAAQzvJ,MAAM,MAAMof,KAAI,CAAComH,EAAMg3F,KAC5BqtF,EAAAA,GAAAA,MAAA,QAAA/zN,SAAA,CACK0vC,GACDokL,EAAAA,GAAAA,KAAA,WAFOptF,SAJb56N,OAmEUgoT,EAAAA,GAAAA,KAAA,MAAA9zN,SAAK6kQ,IAAoB/wC,EAAAA,GAAAA,KAAA,KAAA9zN,SAAI6kQ,OAC3BE,IACEhxC,EAAAA,GAAAA,MAAA,OAAA/zN,SAAA,EACI8zN,EAAAA,GAAAA,KAAA,MAAIlwN,MAAO,CAACiR,MAAO,WAAW7U,UAAC+zN,EAAAA,GAAAA,MAAA,UAAA/zN,SAAA,CAAQ,6BAAsBwiQ,EAAOI,MAAM,WAC1E9uC,EAAAA,GAAAA,KAAA,KAAA9zN,SAAG,qBACH+zN,EAAAA,GAAAA,MAAA,KAAG7vL,UAAU,YAAYtgC,MAAO,CAAEi/P,eAAgB,eAAgBhuP,MAAO,QAAS7U,SAAA,CAAC,0BAC5DwiQ,EAAOM,eAAe,QAE3CuC,GAcEvxC,EAAAA,GAAAA,KAAA,UAAQ5vL,UAAU,kBAAkB9R,QAAS+zO,EAAanmQ,SAAC,eAb3D+zN,EAAAA,GAAAA,MAAA,OAAA/zN,SAAA,EACI8zN,EAAAA,GAAAA,KAAA,MAAI5vL,UAAU,aAAYlkC,SAAC,0BACzBmlQ,GAKErxC,EAAAA,GAAAA,KAAA,UAAQ5vL,UAAU,cAAc9R,QAAS8zO,EAAclmQ,SAAC,wBAJxD8zN,EAAAA,GAAAA,KAAA,UAAQ5vL,UAAU,kBAAkB9R,QAAS2zO,EAAgB/lQ,SAAC,gCAoBlG8zN,EAAAA,GAAAA,KAAA,OAAK5vL,UAAU,MAAKlkC,UAChB+zN,EAAAA,GAAAA,MAAA,OAAK7vL,UAAU,eAAclkC,SAAA,EAC7B8zN,EAAAA,GAAAA,KAAA,MAAI5vL,UAAU,wBAAwBtgC,MAAO,CAAEw9L,UAAW,UAAWphM,SAAC,cAClE8zN,EAAAA,GAAAA,KAAA,MAAI5vL,UAAU,8BAA6BlkC,SAEtCwiQ,EAAOmE,SAASr9U,KAAI,CAACs9U,EAAS96V,KAC3BioT,EAAAA,GAAAA,MAAA,MAAgB7vL,UAAU,oEAAmElkC,SAAA,CACxF+kQ,GACGjxC,EAAAA,GAAAA,KAACvd,GAAI,CAAC5yI,GAAI,YAAY4hM,aAAsBqB,EAAQj9U,KAAMu6G,UAAU,UAAUtgC,MAAO,CAACiR,MAAM,QAASud,QAASA,IAAM0zO,EAAmBc,EAAQj9U,IAAIq2E,SAC9I4mQ,EAAQC,WAGb/yC,EAAAA,GAAAA,KAAA,QAAM5vL,UAAU,UAASlkC,SAAE4mQ,EAAQC,UAEtC9B,IAAchxC,EAAAA,GAAAA,MAAA,KAAA/zN,SAAA,CAAG,aAAWilQ,EAAa2B,EAAQj9U,KAAO,EAAE,SARtD7d,aAezBgoT,EAAAA,GAAAA,KAACstC,GAAgB,KACf2D,IACEjxC,EAAAA,GAAAA,KAAA,OAAA9zN,SACMqlQ,GAkBEvxC,EAAAA,GAAAA,KAAA,OAAK5vL,UAAU,6BAA4BlkC,UACvC8zN,EAAAA,GAAAA,KAAA,UAAQ5vL,UAAU,kBAAkB9R,QAAS+zO,EAAanmQ,SAAC,iBAlB/D+zN,EAAAA,GAAAA,MAAA,OAAK7vL,UAAU,cAAalkC,SAAA,EACxB8zN,EAAAA,GAAAA,KAAA,MAAI5vL,UAAU,UAASlkC,SAAC,0BACtBmlQ,GAOErxC,EAAAA,GAAAA,KAAA,OAAK5vL,UAAU,6BAA4BlkC,UACvC8zN,EAAAA,GAAAA,KAAA,UAAQ5vL,UAAU,yBAAyB9R,QAAS8zO,EAAclmQ,SAAC,0BAPvE8zN,EAAAA,GAAAA,KAAA,OAAK5vL,UAAU,6BAA4BlkC,UACvC8zN,EAAAA,GAAAA,KAAA,UAAQ5vL,UAAU,wBAAwB9R,QAAS2zO,EAAgB/lQ,SAAC,uBAqB5F8zN,EAAAA,GAAAA,KAAA,OAAK5vL,UAAU,WAAUlkC,UACrB+zN,EAAAA,GAAAA,MAAA,OAAK7vL,UAAU,SAAQlkC,SAAA,CAElB+kQ,IACGjxC,EAAAA,GAAAA,KAACgzC,GAAgB,CAACpD,SAAU/5U,EAAImwR,MAAOA,EAAO6pD,kBAAmB6B,KAErE1xC,EAAAA,GAAAA,KAACizC,GAAiB,CAACrD,SAAU/5U,cA7J1B+8U,KAiKb,ECzRd,GAtC0BM,KACtB,MAAM,WAAEzB,GAAe/zD,MAChBgxD,EAAQyE,IAAa57O,EAAAA,EAAAA,UAAS,OAC9B1hG,EAAIu9U,IAAS77O,EAAAA,EAAAA,UAAS,OACtBqqM,EAAWxB,IAAgB7oM,EAAAA,EAAAA,WAAS,GACrC+mN,EApBME,MACZ,MAAOF,EAAiBG,IAAsBlnN,EAAAA,EAAAA,WAAS,GAUvD,OARAP,EAAAA,EAAAA,YAAU,KACR,MAAMgvL,EAAQsb,aAAapzH,QAAQ,gBAC7BhtF,EAAQogN,aAAapzH,QAAQ,SAC/B83G,GAAS9kM,GACXu9N,GAAmB,EACrB,GACC,IAEIH,CAAe,EASEE,GAsBxB,OApBAxnN,EAAAA,EAAAA,YAAU,KAC0B8+L,WAC5B,IAEI,MAAMlgT,QAAiB2pT,GAAMt/S,IAAI,6CAA6CwxV,aACxE7B,EAAWh6V,EAASkG,KAAK+Z,GAC/Bu9U,EAAMx9V,EAASkG,KAAK+Z,IAEpB,MAAMw9U,QAAuB9zC,GAAMt/S,IAAI,6CAA6C2vV,KACpFuD,EAAUE,EAAev3V,MACzBskT,GAAa,EACjB,CAAE,MAAOh5S,GACLmD,QAAQnD,MAAM,yCAA0CA,GACxDg5S,GAAa,EACjB,GAGJkzC,EAAyB,GAC1B,CAAC7B,IAEA7vC,GAAkB5B,EAAAA,GAAAA,KAACD,GAAc,KAGjCE,EAAAA,GAAAA,MAAA,OAAA/zN,SAAA,CACKoyO,GAAkBte,EAAAA,GAAAA,KAACoe,GAAM,KAAMpe,EAAAA,GAAAA,KAACquC,GAAQ,KACzCruC,EAAAA,GAAAA,KAACuzC,GAAa,CAAC7E,OAAQA,EAAQ74U,GAAIA,KACnCmqS,EAAAA,GAAAA,KAACif,GAAM,MACL,EC6Hd,GAjLuBu0B,KAErB,MAAM,WAAE/B,EAAU,UAAEgC,GAAc/1D,MAE3B7nR,EAAIu9U,IAAS77O,EAAAA,EAAAA,UAAS,OAEtBm3O,EAAQyE,IAAa57O,EAAAA,EAAAA,UAAS,OAE9Bk7O,EAAgBiB,IAAqBn8O,EAAAA,EAAAA,UAAS,OAE9C04L,EAAY0jD,IAAiBp8O,EAAAA,EAAAA,UAAS,KAEtCqqM,EAAWxB,IAAgB7oM,EAAAA,EAAAA,WAAS,GAErCg4O,EAAY3zD,EAAAA,OAAa,OAG/B5kL,EAAAA,EAAAA,YAAU,KACwB8+L,WAC9B,IAEE,MAAMlgT,QAAiB2pT,GAAMt/S,IAAI,6CAA6CwxV,aACxE7B,EAAWh6V,EAASkG,KAAK+Z,GAC/Bu9U,EAAMx9V,EAASkG,KAAK+Z,IAEpB,MAAMw9U,QAAuB9zC,GAAMt/S,IAAI,6CAA6C2vV,KACpFuD,EAAUE,EAAev3V,MACzBskT,GAAa,EACf,CAAE,MAAOh5S,GACPmD,QAAQnD,MAAM,yCAA0CA,GACxDg5S,GAAa,EACf,GAGFkzC,EAAyB,GACxB,CAAC7B,KAGJz6O,EAAAA,EAAAA,YAAU,KACR,GAAI03O,EAAQ,CAEV,MAAMoE,EAAUpE,EAAOmE,SAASjvV,MAAKkvV,GAAWA,EAAQj9U,KAAO49U,IAC/D,GAAIX,EAAS,CAEXY,EAAkB,CAChBr4J,UAAU,EACVp+B,UAAU,EACVg/B,YAAY,EACZQ,OAAO,EACPjS,cAAe,CAAC,GAAK,EAAG,IAAK,GAC7B3nC,QAAS,CAAC,CACR33I,IAAK4nV,EAAQJ,OAAO,GAAG15V,IACvBxC,KAAM,4BAKV,MACMo9V,EADmBd,EAAQt2L,YAAYpmK,MAAM,MACTof,KAAIomH,IAC5C,MAAMrC,EAAQqC,EAAKxlI,MAAM,KACnBy9V,EAAYt6N,EAAM,GAAGnjI,MAAM,KAGjC,MAAO,CACLkrG,KAHiD,GAA7B7hB,SAASo0Q,EAAU,GAAI,IAAWp0Q,SAASo0Q,EAAU,GAAI,IAI7E5mN,MAHY1T,EAAMphI,MAAM,GAAG+a,KAAK,KAIjC,IAGHygV,EAAcC,EAChB,CACF,IACC,CAAClF,EAAQ+E,IAGZ,MAAMztD,EAAQsb,aAAapzH,QAAQ,gBACrBozH,aAAapzH,QAAQ,SAGnC,IAAK83G,EACH,OAAOga,EAAAA,GAAAA,KAAA,OAAK5vL,UAAU,2BAA0BlkC,SAAC,uBAInD,GAAI01N,EACF,OAAO5B,EAAAA,GAAAA,KAACD,GAAc,IAIxB,MAAM+yC,EAAUpE,EAAOmE,SAASjvV,MAAKkvV,GAAWA,EAAQj9U,KAAO49U,IAG/D,IAAKX,EACH,OAAO9yC,EAAAA,GAAAA,KAAA,OAAK5vL,UAAU,2BAA0BlkC,SAAC,sBAInD,MAAM4nQ,EAAwBh+C,UAC5B,UACQyJ,GAAMw0C,IAAI,oDAAoDl+U,KAAM49U,IAAa,CACrFr3K,SAAUA,EACV4pH,MAAOA,GAEX,CAAE,MAAO5+R,GACPmD,QAAQnD,MAAM,oCAAqCA,EACrD,GAsBI6Q,EAAO,CAAC66U,EAAQt2L,aAiBtB,OACEwjJ,EAAAA,GAAAA,KAAA,OAAK5vL,UAAU,2BAA0BlkC,UACvC+zN,EAAAA,GAAAA,MAAA,OAAK7vL,UAAU,iBAAgBlkC,SAAA,EAE7B8zN,EAAAA,GAAAA,KAAA,MAAI5vL,UAAU,yBAAwBlkC,SAAE4mQ,EAAQC,WAEhD/yC,EAAAA,GAAAA,KAAA,MAAA9zN,SAAI,yBACJ8zN,EAAAA,GAAAA,KAAA,KAAA9zN,SAAI4mQ,EAAQP,OACZvyC,EAAAA,GAAAA,KAAA,OAAK5vL,UAAU,0BAAyBlkC,SAErCumQ,IACCzyC,EAAAA,GAAAA,KAAC2yC,GAAO,CACNl6V,QAASg6V,EACTxiD,WAAYA,EACZu/C,QAjDejlM,IACzBglM,EAAU/mV,QAAU+hJ,EAGpBA,EAAOpwB,GAAG,SAAS,KACjB,MAAMipC,EAAc7Y,EAAO6Y,cACrBlnC,EAAWquB,EAAOruB,WAExB43N,EADkB1wL,EAAclnC,EAAY,IACb,IAIjCquB,EAAOpwB,GAAG,SAAS,KACjB25N,EAAsB,IAAI,GAC1B,EAoCQ/vN,MAAM,+BAIZk8K,EAAAA,GAAAA,MAAA,OAAK7vL,UAAU,kBAAiBlkC,SAAA,EAE9B8zN,EAAAA,GAAAA,KAAA,MAAA9zN,SAAI,qBACJ8zN,EAAAA,GAAAA,KAAA,OAAA9zN,UAtCe0mQ,EAsCK36U,EArCnB26U,EAAUp9U,KAAKqwI,IACpBm6J,EAAAA,GAAAA,KAAA,OAAA9zN,UACE8zN,EAAAA,GAAAA,KAAA,KAAA9zN,SAEG25D,EAAQzvJ,MAAM,MAAMof,KAAI,CAAComH,EAAMg3F,KAC9BqtF,EAAAA,GAAAA,MAAA,QAAA/zN,SAAA,CACG0vC,GACDokL,EAAAA,GAAAA,KAAA,WAFSptF,kBAmCfotF,EAAAA,GAAAA,KAAA,OAAK5vL,UAAU,iBAAgBlkC,UAC7B8zN,EAAAA,GAAAA,KAAA,KAAGt8M,KAAM,YAAY+tP,IAAavlQ,SAAC,kCA1CpB0mQ,KA6Cf,ECnJV,GAX0BoB,KACtB,MAAM11B,EAfME,MACZ,MAAOF,EAAiBG,IAAsBlnN,EAAAA,EAAAA,WAAS,GAUvD,OARAP,EAAAA,EAAAA,YAAU,KACR,MAAMgvL,EAAQsb,aAAapzH,QAAQ,gBAC7BhtF,EAAQogN,aAAapzH,QAAQ,SAC/B83G,GAAS9kM,GACXu9N,GAAmB,EACrB,GACC,IAEIH,CAAe,EAIEE,GACxB,OACAve,EAAAA,GAAAA,MAAA,OAAA/zN,SAAA,CACKoyO,GAAkBte,EAAAA,GAAAA,KAACoe,GAAM,KAAMpe,EAAAA,GAAAA,KAACquC,GAAQ,KACzCruC,EAAAA,GAAAA,KAACwzC,GAAc,KACfxzC,EAAAA,GAAAA,KAACif,GAAM,MACL,ECmEV,GA3FqBg1B,KACjB,MAAOnG,EAAcC,IAAmBx2O,EAAAA,EAAAA,UAAS,KAC1C/pG,EAAS0mV,IAAc38O,EAAAA,EAAAA,UAAS,KAChCnwG,EAAO+sV,IAAY58O,EAAAA,EAAAA,UAAS,KAC5BqqM,EAAWxB,IAAgB7oM,EAAAA,EAAAA,WAAS,IACpC68O,EAAqBC,IAA0B98O,EAAAA,EAAAA,UAAS,IAEzDyuL,EAAQsb,aAAapzH,QAAQ,gBAC7BhtF,EAAQogN,aAAapzH,QAAQ,UAEnCl3E,EAAAA,EAAAA,YAAU,KACoB8+L,WACtB,GAAK9P,EAIL,IACI,MAAMpwS,QAAiB2pT,GAAMt/S,IAAI,6CAA8C,CAC3ErJ,QAAS,CAAEu5V,cAAe,UAAUnqD,OAEhB,MAApBpwS,EAASyF,QACTg5V,EAAuBz+V,EAASkG,KAAKkyV,cAE7C,CAAE,MAAO5mV,GACL+sV,EAAS,kDACb,MAZIA,EAAS,yBAYb,EAGJG,EAAmB,GACpB,CAACtuD,IA4BJ,OACIga,EAAAA,GAAAA,KAAA,OAAK5vL,UAAU,mBAAkBlkC,UAC7B+zN,EAAAA,GAAAA,MAAA,OAAK7vL,UAAU,yBAAwBlkC,SAAA,EACnC8zN,EAAAA,GAAAA,KAAA,MAAA9zN,SAAI,0BACJ+zN,EAAAA,GAAAA,MAAA,KAAA/zN,SAAA,CAAG,UAAQgV,KAEPkzP,GACIn0C,EAAAA,GAAAA,MAAA,KAAA/zN,SAAA,CAAG,mBAAiBkoQ,MAEpBp0C,EAAAA,GAAAA,KAAA,KAAA9zN,SAAG,8BAGV1+E,IAAWwyS,EAAAA,GAAAA,KAAA,KAAG5vL,UAAU,kBAAiBlkC,SAAE1+E,IAC3CpG,IAAS44S,EAAAA,GAAAA,KAAA,KAAG5vL,UAAU,gBAAelkC,SAAE9kF,IACvCw6S,GAAY5B,EAAAA,GAAAA,KAACD,GAAc,KACxBE,EAAAA,GAAAA,MAAA,QAAM+B,SAzCKlM,UAGvB,GAFAh/S,EAAEqjG,iBACFimN,GAAa,GACRpa,EAKL,IAK4B,aAJDuZ,GAAMw0C,IAAI,oDAAqD,CAClF/tD,MAAOA,EACPuuD,WAAYzG,KAEHzyV,SACT64V,EAAW,uCACXG,EAAuBvG,GACvB1tC,GAAa,GACb+zC,EAAS,IAEjB,CAAE,MAAO/sV,GACL+sV,EAAS,mDACT/zC,GAAa,GACb8zC,EAAW,GACf,MAnBIC,EAAS,yBAmBb,EAkB+CjoQ,SAAA,EAC/B8zN,EAAAA,GAAAA,KAAA,OAAK5vL,UAAU,aAAYlkC,UACvB8zN,EAAAA,GAAAA,KAAA,SACIxpT,KAAK,OACL45H,UAAU,eACVZ,YAAY,2BACZ/4H,MAAOq3V,EACPj/N,SAAW/3H,GAAMi3V,EAAgBj3V,EAAE4M,OAAOjN,OAC1C6sI,UAAQ,OAGhB08K,EAAAA,GAAAA,KAAA,UAAQxpT,KAAK,SAAS45H,UAAU,0BAAyBlkC,SAAC,yBAIpE,ECfd,GAxEuBsoQ,KACnB,MAAOC,EAAiBC,IAAsBn9O,EAAAA,EAAAA,UAAS,KAChDo9O,EAAaC,IAAkBr9O,EAAAA,EAAAA,UAAS,KACxC/pG,EAAS0mV,IAAc38O,EAAAA,EAAAA,UAAS,KAChCnwG,EAAO+sV,IAAY58O,EAAAA,EAAAA,UAAS,KAC5BqqM,EAAWxB,IAAgB7oM,EAAAA,EAAAA,WAAS,GAErCyuL,EAAQsb,aAAapzH,QAAQ,gBAC7BhtF,EAAQogN,aAAapzH,QAAQ,SA2BnC,OACI8xH,EAAAA,GAAAA,KAAA,OAAK5vL,UAAU,mBAAkBlkC,UAC7B+zN,EAAAA,GAAAA,MAAA,OAAK7vL,UAAU,yBAAwBlkC,SAAA,EACnC8zN,EAAAA,GAAAA,KAAA,MAAA9zN,SAAI,qBACJ+zN,EAAAA,GAAAA,MAAA,KAAA/zN,SAAA,CAAG,UAAQgV,KACV1zF,IAAWwyS,EAAAA,GAAAA,KAAA,KAAG5vL,UAAU,kBAAiBlkC,SAAE1+E,IAC3CpG,IAAS44S,EAAAA,GAAAA,KAAA,KAAG5vL,UAAU,gBAAelkC,SAAE9kF,IACvCw6S,GAAY5B,EAAAA,GAAAA,KAACD,GAAc,KAC5BE,EAAAA,GAAAA,MAAA,QAAM+B,SAjCWlM,UAGzB,GAFAh/S,EAAEqjG,iBACFimN,GAAa,GACRpa,EAKL,IAMwB,aALGuZ,GAAMw0C,IAAI,sDAAuD,CACpF/tD,MAAOA,EACP6uD,iBAAkBJ,EAClBK,aAAcH,KAETt5V,SACT64V,EAAW,kCACXC,EAAS,IACT/zC,GAAa,GAEjB,CAAC,MAAMh5S,GACH+sV,EAAS,8CACTD,EAAW,IACX9zC,GAAa,EACjB,MAnBI+zC,EAAS,yBAmBb,EAU6CjoQ,SAAA,EACjC8zN,EAAAA,GAAAA,KAAA,OAAK5vL,UAAU,aAAYlkC,UACvB8zN,EAAAA,GAAAA,KAAA,SACIxpT,KAAK,WACL45H,UAAU,eACVZ,YAAY,mBACZ/4H,MAAOg+V,EACP5lO,SAAW/3H,GAAM49V,EAAmB59V,EAAE4M,OAAOjN,OAC7C6sI,UAAQ,OAGhB08K,EAAAA,GAAAA,KAAA,OAAK5vL,UAAU,aAAYlkC,UACvB8zN,EAAAA,GAAAA,KAAA,SACIxpT,KAAK,WACL45H,UAAU,eACVZ,YAAY,eACZ/4H,MAAOk+V,EACP9lO,SAAW/3H,GAAM89V,EAAe99V,EAAE4M,OAAOjN,OACzC6sI,UAAQ,OAGhB08K,EAAAA,GAAAA,KAAA,UAAQxpT,KAAK,SAAS45H,UAAU,0BAAyBlkC,SAAC,2BAIhE,ECNd,GA7DoB6oQ,KAClB,MAAOnzC,EAAWxB,IAAgB7oM,EAAAA,EAAAA,WAAS,IACpC23O,EAASC,IAAc53O,EAAAA,EAAAA,UAAS,OAChCnwG,EAAO+sV,IAAY58O,EAAAA,EAAAA,UAAS,IAE7ByuL,EAAQsb,aAAapzH,QAAQ,gBA0BnC,OAxBAl3E,EAAAA,EAAAA,YAAU,KACa8+L,WACnB,IACE,MAAMlgT,QAAiB2pT,GAAMt/S,IAAI,qDAAsD,CACrFrJ,QAAS,CACPu5V,cAAe,UAAUnqD,OAGA,yBAA1BpwS,EAASkG,KAAK0R,QACf2mV,EAAS,yEAGThF,EAAWv5V,EAASkG,KAExB,CAAE,MAAOnG,GACPw+V,EAAS,6CACX,CAAC,QACC/zC,GAAa,EACf,GAGF40C,EAAc,GACb,CAAChvD,IAEA4b,GAAkB5B,EAAAA,GAAAA,KAACD,GAAc,IACjC34S,GAAc44S,EAAAA,GAAAA,KAAA,OAAK5vL,UAAU,eAAclkC,UAC/C+zN,EAAAA,GAAAA,MAAA,OAAK7vL,UAAU,gBAAelkC,SAAA,CAAE9kF,GAC5B44S,EAAAA,GAAAA,KAAA,OAAK5vL,UAAU,eAAclkC,UAC7B8zN,EAAAA,GAAAA,KAACvd,GAAI,CAAC5yI,GAAI,YAAY3jE,SAAC,yBAMzB8zN,EAAAA,GAAAA,KAAA,OAAK5vL,UAAU,eAAclkC,SAC1B9kF,GACC44S,EAAAA,GAAAA,KAAA,KAAA9zN,SAAG,+CAEH8zN,EAAAA,GAAAA,KAAA,OAAK5vL,UAAU,cAAalkC,SACzBgjQ,EAAQ15U,KAAKk5U,IACZzuC,EAAAA,GAAAA,MAAA,OAAsB7vL,UAAU,cAAalkC,SAAA,EAC3C8zN,EAAAA,GAAAA,KAAA,MAAA9zN,SAAKwiQ,EAAO36N,SACZisL,EAAAA,GAAAA,KAAA,KAAA9zN,SAAIwiQ,EAAOlyL,eACXwjJ,EAAAA,GAAAA,KAAA,OAAK5vL,UAAU,eAAclkC,UAC3B8zN,EAAAA,GAAAA,KAACvd,GAAI,CAAC5yI,GAAI,YAAY6+L,EAAOC,cAAcziQ,SAAC,oBAJtCwiQ,EAAOx9D,UAUnB,EC0BV,GAjEwB+jE,KACpB,MAAOC,EAAkBC,IAAuB59O,EAAAA,EAAAA,WAAS,IAClD69O,EAAoBC,IAAyB99O,EAAAA,EAAAA,WAAS,IACtD+9O,EAAiBC,IAAsBh+O,EAAAA,EAAAA,WAAS,IACjD,gBAAE+mN,EAAe,SAAEC,GArBbC,MACZ,MAAOF,EAAiBG,IAAsBlnN,EAAAA,EAAAA,WAAS,IAChDgnN,EAAUG,IAAennN,EAAAA,EAAAA,UAAS,IAYzC,OAVAP,EAAAA,EAAAA,YAAU,KACR,MAAMgvL,EAAQsb,aAAapzH,QAAQ,gBAC7BhtF,EAAQogN,aAAapzH,QAAQ,SAC7BywI,EAAiBrd,aAAapzH,QAAQ,aACxC83G,GAAS9kM,IACXu9N,GAAmB,GACnBC,EAAYC,GAAkB,IAChC,GACC,IAEI,CAAEL,kBAAiBC,WAAU,EAOEC,IAC/BhxT,EAAS0mV,IAAc38O,EAAAA,EAAAA,UAAS,IAgBvC,OACI0oM,EAAAA,GAAAA,MAAA,OAAK7vL,UAAU,eAAclkC,SAAA,EACzB8zN,EAAAA,GAAAA,KAACoe,GAAM,IACNE,GACGre,EAAAA,GAAAA,MAAA,OAAK7vL,UAAU,iBAAgBlkC,SAAA,EAC3B8zN,EAAAA,GAAAA,KAAA,OAAK5vL,UAAU,eAAclkC,UACzB+zN,EAAAA,GAAAA,MAAA,OAAA/zN,SAAA,EACI8zN,EAAAA,GAAAA,KAAA,MAAI5vL,UAAU,eAAclkC,SAAEqyO,KAC9Bte,EAAAA,GAAAA,MAAA,KAAG7vL,UAAU,mBAAkBlkC,SAAA,CAAC,IAAEqyO,EAASpoU,cAAcuO,QAAQ,MAAO,aAGhFs7S,EAAAA,GAAAA,KAAA,UAAQ5vL,UAAU,mBAAmB9R,QAf7Bk3O,KACpBD,GAAmB,EAAK,EAckDrpQ,SAAC,mBAKnE+zN,EAAAA,GAAAA,MAAA,OAAK7vL,UAAU,iBAAgBlkC,SAAA,EAC3B8zN,EAAAA,GAAAA,KAAA,MAAA9zN,SAAI,6BACJ8zN,EAAAA,GAAAA,KAAA,KAAA9zN,SAAG,oEAIX8zN,EAAAA,GAAAA,KAAA,OAAK5vL,UAAU,iBAAgBlkC,SAC1BoyO,IACGre,EAAAA,GAAAA,MAAA2e,GAAAA,SAAA,CAAA1yO,SAAA,CACK1+E,IAAWwyS,EAAAA,GAAAA,KAAA,KAAG5vL,UAAU,kBAAiBlkC,SAAE1+E,IAC3C8nV,IAAmBt1C,EAAAA,GAAAA,KAAC+0C,GAAW,KAChC90C,EAAAA,GAAAA,MAAA,OAAK7vL,UAAU,iBAAgBlkC,SAAA,EAC3B8zN,EAAAA,GAAAA,KAAA,UAAQ5vL,UAAU,aAAa9R,QA1CxBm3O,KAC3BN,GAAoB,GACpBE,GAAsB,EAAM,EAwCuDnpQ,SAAC,0BAGhE8zN,EAAAA,GAAAA,KAAA,UAAQ5vL,UAAU,aAAa9R,QAxCtBo3O,KAC7BL,GAAsB,GACtBF,GAAoB,EAAM,EAsC2DjpQ,SAAC,uBAIrEgpQ,IAAoBl1C,EAAAA,GAAAA,KAACi0C,GAAY,IACjCmB,IAAsBp1C,EAAAA,GAAAA,KAACw0C,GAAc,WAIhD,EClBd,GAhEkB1yV,IAAoB,IAAnB,UAAE6zV,GAAW7zV,EAC5B,MAAOo/F,EAAOygN,IAAYpqM,EAAAA,EAAAA,UAAS,KAC5B56G,EAAU8wV,IAAel2O,EAAAA,EAAAA,UAAS,KAClCqqM,EAAWxB,IAAgB7oM,EAAAA,EAAAA,WAAS,IACpC8+J,EAAcwrC,IAAmBtqM,EAAAA,EAAAA,UAAS,IAE3CqpM,GAAY,IAAI7lN,MAAOmnC,UA6B7B,OACI+9K,EAAAA,GAAAA,MAAA,QAAM+B,SA5BWlM,UACjBp0M,EAAMvH,iBACNimN,GAAa,GACbyB,EAAgB,IAEhB,IACI,MAAMjsT,QAAiB2pT,GAAM8B,KAAK,0CAA2C,CACzEngN,MAAOA,EACPvkG,SAAUA,IAEV/G,EAASkG,KAAK6xV,cACdpjV,QAAQ4qF,IAAI,iBACZmsN,aAAanzH,QAAQ,eAAgBv4L,EAASkG,KAAK6xV,cACnDrsC,aAAanzH,QAAQ,QAASv4L,EAASkG,KAAKolG,OAC5CogN,aAAanzH,QAAQ,YAAav4L,EAASkG,KAAKylT,WAChDD,aAAanzH,QAAQ,aAAcyyH,GACnC+0C,KAEA9zC,EAAgB,4BAExB,CAAE,MAAOz6S,GACLy6S,EAAgB,8DACpB,CAAC,QACGzB,GAAa,EACjB,GAI6Bl0N,SAAA,EACzB8zN,EAAAA,GAAAA,KAAA,OAAK5vL,UAAU,aAAYlkC,UACvB8zN,EAAAA,GAAAA,KAAA,SACIxpT,KAAK,QACLg5H,YAAY,QACZ/4H,MAAOyqG,EACP2tB,SAAW/3H,GAAM6qT,EAAS7qT,EAAE4M,OAAOjN,OACnC6sI,UAAQ,OAGhB08K,EAAAA,GAAAA,KAAA,OAAK5vL,UAAU,aAAYlkC,UACvB8zN,EAAAA,GAAAA,KAAA,SACIxpT,KAAK,WACLg5H,YAAY,WACZ/4H,MAAOkG,EACPkyH,SAAW/3H,GAAM22V,EAAY32V,EAAE4M,OAAOjN,OACtC6sI,UAAQ,OAGhB08K,EAAAA,GAAAA,KAAA,UAAQxpT,KAAK,SAAS45H,UAAU,kBAAkBrkC,SAAU61N,EAAU11N,SACjE01N,EAAY,aAAe,UAG/BvrC,IAAgB2pC,EAAAA,GAAAA,KAAA,KAAGlwN,MAAO,CAAEiR,MAAO,MAAOqnO,UAAW,QAASl8O,SAAEmqL,MAC9D,EC8Cf,GAzGqBv0Q,IAAoB,IAAnB,UAAE6zV,GAAW7zV,EAC/B,MAAOo/F,EAAOygN,IAAYpqM,EAAAA,EAAAA,UAAS,KAC5B56G,EAAU8wV,IAAel2O,EAAAA,EAAAA,UAAS,KAClCqqM,EAAWxB,IAAgB7oM,EAAAA,EAAAA,WAAS,IACpC8+J,EAAcwrC,IAAmBtqM,EAAAA,EAAAA,UAAS,KAC1CgnN,EAAUG,IAAennN,EAAAA,EAAAA,UAAS,KAClCu2O,EAAcC,IAAmBx2O,EAAAA,EAAAA,UAAS,IAE3CqpM,GAAY,IAAI7lN,MAAOmnC,UA6C7B,OACI+9K,EAAAA,GAAAA,MAAA,QAAM+B,SAxCWlM,UAMjB,GALAp0M,EAAMvH,iBACNimN,GAAa,GACbyB,EAAgB,IAGZllT,EAASa,OAAS,EAGlB,OAFAqkT,EAAgB,qDAChBzB,GAAa,GAIjB,IACI,MAAMxqT,QAAiB2pT,GAAM8B,KAAK,6CAA8C,CAC5EngN,MAAOA,EACPvkG,SAAUA,EACV4kT,UAAWgd,EACXyvB,cAAeF,IAEa,WAA7Bl4V,EAASkG,KAAKmyV,YACf3sC,aAAanzH,QAAQ,eAAgBv4L,EAASkG,KAAK6xV,cACnDrsC,aAAanzH,QAAQ,QAASv4L,EAASkG,KAAKolG,OAC5CogN,aAAanzH,QAAQ,YAAav4L,EAASkG,KAAKylT,WAChDD,aAAanzH,QAAQ,gBAAiB2/J,GACtCxsC,aAAanzH,QAAQ,aAAcyyH,GACnC+0C,KAGE9zC,EAAgB,8CAEtB,CAAE,MAAMxrC,GACNwrC,EAAgB,8CAClB,CAAC,QACCzB,GAAa,EACf,CAEFA,GAAa,EAAM,EAIUl0N,SAAA,EACzB8zN,EAAAA,GAAAA,KAAA,OAAK5vL,UAAU,aAAYlkC,UACvB8zN,EAAAA,GAAAA,KAAA,SACIxpT,KAAK,OACLg5H,YAAY,YACZ/4H,MAAO8nU,EACP1vM,SAAW/3H,GAAM4nU,EAAY5nU,EAAE4M,OAAOjN,OACtC6sI,UAAQ,OAGhB08K,EAAAA,GAAAA,KAAA,OAAK5vL,UAAU,aAAYlkC,UACvB8zN,EAAAA,GAAAA,KAAA,SACIxpT,KAAK,QACLg5H,YAAY,QACZ/4H,MAAOyqG,EACP2tB,SAAW/3H,GAAM6qT,EAAS7qT,EAAE4M,OAAOjN,OACnC6sI,UAAQ,OAGhB08K,EAAAA,GAAAA,KAAA,OAAK5vL,UAAU,aAAYlkC,UAEvB8zN,EAAAA,GAAAA,KAACkuC,KAAU,CACPl/N,QAAS,KACTv4H,MAAOq3V,EACPj/N,SApEYp4H,IACxBs3V,EAAgBt3V,EAAM,EAoEV88H,WAAW,eACXM,WAAY,CACRn1H,KAAM,SACN4kI,UAAU,GAEdA,UAAQ,OAGhB08K,EAAAA,GAAAA,KAAA,OAAK5vL,UAAU,aAAYlkC,UACvB8zN,EAAAA,GAAAA,KAAA,SACIxpT,KAAK,WACLg5H,YAAY,WACZ/4H,MAAOkG,EACPkyH,SAAW/3H,GAAM22V,EAAY32V,EAAE4M,OAAOjN,OACtC6sI,UAAQ,OAGhB08K,EAAAA,GAAAA,KAAA,UAAQxpT,KAAK,SAAS45H,UAAU,kBAAkBrkC,SAAU61N,EAAU11N,SACjE01N,EAAY,aAAe,sBAG/BvrC,IAAgB2pC,EAAAA,GAAAA,KAAA,KAAGlwN,MAAO,CAAEiR,MAAO,MAAOqnO,UAAW,QAASl8O,SAAEmqL,MAC9D,ECxCf,GA3D2Bv0Q,IAAkD,IAAjD,UAAE8zV,EAAS,aAAEC,EAAY,eAAEC,GAAgBh0V,EACnE,MAAOi0V,EAASC,IAAcz+O,EAAAA,EAAAA,WAAS,GAoBvC,OACIyoM,EAAAA,GAAAA,KAAA4e,GAAAA,SAAA,CAAA1yO,SACK0pQ,IACG51C,EAAAA,GAAAA,KAAA,OAAK5vL,UAAU,gBAAelkC,UAC1B+zN,EAAAA,GAAAA,MAAA,OAAK7vL,UAAU,gBAAelkC,SAAA,EAC1B8zN,EAAAA,GAAAA,KAAA,QAAM5vL,UAAU,YAAY9R,QAvBvB23O,KACrBJ,GAAa,EAAM,EAsBmD3pQ,SAAC,UACvD8zN,EAAAA,GAAAA,KAAA,OAAK5vL,UAAU,eAAclkC,UACzB8zN,EAAAA,GAAAA,KAAA,MAAA9zN,SAAK6pQ,EAAU,WAAa,aAGhC/1C,EAAAA,GAAAA,KAAA,UACAA,EAAAA,GAAAA,KAAA,OAAK5vL,UAAU,aAAYlkC,SACtB6pQ,GACG/1C,EAAAA,GAAAA,KAACk2C,GAAY,CAACP,UAAWG,KAEzB91C,EAAAA,GAAAA,KAACm2C,GAAS,CAACR,UAAWG,OAG9B91C,EAAAA,GAAAA,KAAA,OAAK5vL,UAAU,eAAclkC,SACxB6pQ,GACG91C,EAAAA,GAAAA,MAAA,KAAA/zN,SAAA,CAAG,2BACsB,KACzB8zN,EAAAA,GAAAA,KAAA,QAAM1hM,QAhCZ83O,KAClBJ,GAAW,EAAM,EA+BqC5lO,UAAU,cAAalkC,SAAC,mBAGtD+zN,EAAAA,GAAAA,MAAA,KAAA/zN,SAAA,CAAG,yBACoB,KACvB8zN,EAAAA,GAAAA,KAAA,QAAM1hM,QAzCT+3O,KACrBL,GAAW,EAAK,EAwCyC5lO,UAAU,cAAalkC,SAAC,6BAO9E,EC7CX,GAbcpqF,IAAiC,IAAhC,KAAEgzJ,EAAI,QAAEtnJ,EAAO,QAAE8oV,GAASx0V,EACvC,OAAKgzJ,GAGHkrJ,EAAAA,GAAAA,KAAA,OAAK5vL,UAAU,sBAAsB9R,QAASg4O,EAAQpqQ,UACpD+zN,EAAAA,GAAAA,MAAA,OAAK7vL,UAAU,sBAAsB9R,QAAUxnH,GAAMA,EAAEkiG,kBAAkB9M,SAAA,EACvE8zN,EAAAA,GAAAA,KAAA,MAAA9zN,SAAK1+E,KACLwyS,EAAAA,GAAAA,KAAA,UAAQ5vL,UAAU,kBAAkB9R,QAASg4O,EAAQpqQ,SAAC,eAN1C,IAQV,EC8dV,GAjeaqqQ,KAET,MAAOC,EAAWC,IAAgBl/O,EAAAA,EAAAA,UAAS,KAGpC+8D,EAASoiL,IAAcn/O,EAAAA,EAAAA,WAAS,IAGhCq+O,EAAWC,IAAgBt+O,EAAAA,EAAAA,WAAS,IAGpCo/O,EAAgBC,IAAqBr/O,EAAAA,EAAAA,WAAS,IAE9Cs/O,EAAcC,IAAmBv/O,EAAAA,EAAAA,UAAS,IAG3CylL,EAAWR,KAGXwJ,EAAQsb,aAAapzH,QAAQ,gBAC7BhtF,EAAQogN,aAAapzH,QAAQ,UAMnCl3E,EAAAA,EAAAA,YAAU,KACiB8+L,WACnB,IAAK9P,EAAO,CAER,MAAMmsD,EAAYh4V,KAAKC,MAAMknT,aAAapzH,QAAQ,UAAY,GAG9D,OAFAuoK,EAAatE,QACbuE,GAAW,EAEf,CAEA,IACI,MAAM9gW,QAAiB2pT,GAAMt/S,IAAI,+CAAgD,CAC7ErJ,QAAS,CAAEu5V,cAAe,UAAUnqD,OAExCywD,EAAa7gW,EAASkG,MACtB46V,GAAW,EACf,CAAE,MAAOtvV,GACLmD,QAAQnD,MAAM,6BAA8BA,GAC5CsvV,GAAW,EACf,GAGJK,EAAgB,GACjB,IAGH,MAAMC,EAAmBlhD,eAAOmhD,GAAgC,IAAxBC,EAAU9tV,UAAA5L,OAAA,QAAA/D,IAAA2P,UAAA,IAAAA,UAAA,GAC9C,IAAK48R,EAAO,CAER,MACMmxD,GADYh9V,KAAKC,MAAMknT,aAAapzH,QAAQ,UAAY,IAChCpjL,QAAO9G,GACjCkzV,EAAalzV,EAAKozV,cAAgBH,EAASjzV,EAAK6tV,YAAcoF,IAIlE,OAFA31C,aAAanzH,QAAQ,OAAQh0L,KAAK8B,UAAUk7V,SAC5CV,EAAaU,EAEjB,CAEA,IACI,MAAM12V,EAAUy2V,EAAa,CAAEE,YAAaH,GAAW,CAAEpF,UAAWoF,GAW5C,aATD13C,GAAM8B,KACzB,sDACA5gT,EACA,CACI7J,QAAS,CAAEu5V,cAAe,UAAUnqD,QAK/B3qS,QACTo7V,EACID,EAAU1rV,QAAO9G,GACbkzV,EAAalzV,EAAKozV,cAAgBH,EAASjzV,EAAK6tV,YAAcoF,IAI9E,CAAE,MAAO7vV,GAELmD,QAAQnD,MAAM,iCAAkCA,EACpD,CACJ,EAIMiwV,EAAYvhD,UACd,IAAK9P,EAID,OAFAsb,aAAalzH,WAAW,aACxBqoK,EAAa,IAIjB,IAO4B,aANDl3C,GAAMn/S,OAAO,qDAChC,CACIxJ,QAAS,CAAEu5V,cAAe,UAAUnqD,QAI/B3qS,QACTo7V,EAAa,GAErB,CAAE,MAAOrvV,GAELmD,QAAQnD,MAAM,uBAAwBA,EAC1C,GAIJ,GAAIktK,EACA,OAAO0rI,EAAAA,GAAAA,KAACD,GAAc,IAI1B,GAAyB,IAArBy2C,EAAUh5V,OACV,OACIyiT,EAAAA,GAAAA,MAAA,OAAK7vL,UAAU,uCAAsClkC,SAAA,EACjD8zN,EAAAA,GAAAA,KAAA,MAAI5vL,UAAU,eAAetgC,MAAO,CAAEiR,MAAO,WAAY7U,SAAC,wBAC1D+zN,EAAAA,GAAAA,MAAA,KAAG7vL,UAAU,OAAOtgC,MAAO,CAAE+oF,SAAU,SAAU93E,MAAO,QAAS7U,SAAA,CAAC,yCACzB8zN,EAAAA,GAAAA,KAAA,UAAA9zN,SAAQ,cAAkB,oDAEnE8zN,EAAAA,GAAAA,KAAA,KAAG5vL,UAAU,OAAOtgC,MAAO,CAAE+oF,SAAU,SAAU93E,MAAO,QAAS7U,SAAC,2GAGlE+zN,EAAAA,GAAAA,MAAA,OAAK7vL,UAAU,sCAAqClkC,SAAA,EAChD8zN,EAAAA,GAAAA,KAAA,OAAK5vL,UAAU,eAAclkC,UACzB8zN,EAAAA,GAAAA,KAAA,KAAGt8M,KAAK,WAAUxX,SAAC,oBAEvB8zN,EAAAA,GAAAA,KAAA,OAAK5vL,UAAU,eAAclkC,UACzB8zN,EAAAA,GAAAA,KAAA,KAAGt8M,KAAK,aAAYxX,SAAC,2BASzC,MAAMorQ,EAAkBd,GACbA,EAAUngW,QAAO,CAAC2xI,EAAOuvN,IAKrBvvN,GAHWuvN,EAASH,YA7Hb,EA8HRj7N,WAAWo7N,EAASzI,OACpB3yN,WAAWo7N,EAASzI,SAE3B,GAAGtyK,QAAQ,GA+BZg7K,EAAsB,SAACC,GACzB,MACMC,EAAYD,GAAe,GAFYruV,UAAA5L,OAAA,QAAA/D,IAAA2P,UAAA,GAAAA,UAAA,GAAG,IACnB,KAEvBuuV,EAAYF,EAAcC,EAEhC,MAAO,CACHD,YAAaC,EAAUl7K,QAAQ,GAC/Bo7K,IAAKD,EAAUn7K,QAAQ,GAE/B,EAGMq7K,EAvCe,SAACrB,GAA6B,IAAlBsB,EAAO1uV,UAAA5L,OAAA,QAAA/D,IAAA2P,UAAA,GAAAA,UAAA,GAAG,GACvC,MAAMyuV,EAAarB,EAAUhhV,KAAKxR,IAC9B,MAAM8qV,EAAQ9qV,EAAKozV,YAvIL,EAwIRj7N,WAAWn4H,EAAK8qV,OAChB3yN,WAAWn4H,EAAK8qV,OACtB,OAAO0I,EAAoB1I,EAAOgJ,EAAQ,IAIxCC,EAAWF,EAAWxhW,QAAO,CAAC2xI,EAAOvB,IAAYuB,EAAQ7L,WAAWsK,EAAQmxN,MAAM,GAAGp7K,QAAQ,GAC7Fw7K,EAAwBH,EAAWxhW,QAAO,CAAC2xI,EAAOvB,IAAYuB,EAAQ7L,WAAWsK,EAAQgxN,cAAc,GAAGj7K,QAAQ,GASxH,MAAO,CACHx0C,MARUwuN,EAAUngW,QAAO,CAACgxE,EAAKrjE,IAI1BqjE,GAHWrjE,EAAKozV,YAlJT,EAmJRj7N,WAAWn4H,EAAK8qV,OAChB3yN,WAAWn4H,EAAK8qV,SAEvB,GAAGtyK,QAAQ,GAIVy7K,iBAAkBD,EAClBJ,IAAKG,EAEb,CAemBG,CAAa1B,IAC1B,MAAExuN,EAAK,iBAAEiwN,EAAgB,IAAEL,GAAQC,EAGnCM,EAAe3B,EAAUhhV,KAAIxR,GAAQA,EAAK+vH,QAyHhD,OACIksL,EAAAA,GAAAA,MAAA,OAAK7vL,UAAU,YAAWlkC,SAAA,EACtB+zN,EAAAA,GAAAA,MAAA,OAAK7vL,UAAU,YAAWlkC,SAAA,EACtB8zN,EAAAA,GAAAA,KAAA,MAAI5vL,UAAU,sBAAqBlkC,SAAC,eACpC+zN,EAAAA,GAAAA,MAAA,OAAK7vL,UAAU,MAAKlkC,SAAA,CAEfsqQ,EAAUhhV,KAAKxR,IACZg8S,EAAAA,GAAAA,KAAA,OAAK5vL,UAAU,WAAUlkC,UACrB8zN,EAAAA,GAAAA,KAAA,OAAK5vL,UAAU,0BAAyBlkC,UACpC+zN,EAAAA,GAAAA,MAAA,OAAK7vL,UAAU,YAAWlkC,SAAA,EACtB+zN,EAAAA,GAAAA,MAAA,OAAK7vL,UAAU,8CAA6ClkC,SAAA,EACxD8zN,EAAAA,GAAAA,KAAA,OAAK5vL,UAAU,OAAMlkC,UACjB8zN,EAAAA,GAAAA,KAAA,OACI90S,IAAKlH,EAAK6qV,cACVt6K,IAAI,uBACJnkD,UAAU,yBAGlB4vL,EAAAA,GAAAA,KAAA,OAAK5vL,UAAU,gDAA+ClkC,UAC1D8zN,EAAAA,GAAAA,KAAA,OAAA9zN,UACI8zN,EAAAA,GAAAA,KAAA,MAAI5vL,UAAU,6BAA4BlkC,SAAEloF,EAAK+vH,gBAI7DisL,EAAAA,GAAAA,KAAA,OAAA9zN,UACI+zN,EAAAA,GAAAA,MAAA,OAAK7vL,UAAU,MAAKlkC,SAAA,EAChB8zN,EAAAA,GAAAA,KAAA,OAAK5vL,UAAU,WAAUlkC,UACrB+zN,EAAAA,GAAAA,MAAA,OAAK7vL,UAAU,OAAMlkC,SAAA,EACjB8zN,EAAAA,GAAAA,KAAA,KAAG5vL,UAAU,kBAAiBlkC,SACzBloF,EAAKozV,YAAc,uBAAyB,WAEjDn3C,EAAAA,GAAAA,MAAA,MAAA/zN,SAAA,CAAI,SACE,IACDloF,EAAKozV,aA1UpC,EA2UqCpzV,EAAK8qV,OAAuBtyK,QAAQ,GACrCx4K,EAAK8qV,eAIvB9uC,EAAAA,GAAAA,KAAA,OAAK5vL,UAAU,WAAUlkC,SACpBloF,EAAK6tV,WAEF5xC,EAAAA,GAAAA,MAAA,OAAA/zN,SAAA,EACI8zN,EAAAA,GAAAA,KAAA,OAAK5vL,UAAU,eAAclkC,UACzB8zN,EAAAA,GAAAA,KAACvd,GAAI,CAAC5yI,GAAI,YAAY7rJ,EAAK2qV,cAAcziQ,SAAC,mBAE9C8zN,EAAAA,GAAAA,KAAA,UACI5vL,UAAU,iBACV9R,QAASA,IAAM04O,EAAiBhzV,EAAK6tV,WAAW,GAAO3lQ,SAC1D,mBAILloF,EAAKozV,aAELn3C,EAAAA,GAAAA,MAAA,OAAA/zN,SAAA,EACI8zN,EAAAA,GAAAA,KAAA,OAAK5vL,UAAU,eAAclkC,UACzB8zN,EAAAA,GAAAA,KAACvd,GAAI,CAAC5yI,GAAI,aAAa3jE,SAAC,qBAE5B8zN,EAAAA,GAAAA,KAAA,UACI5vL,UAAU,iBACV9R,QAASA,IAAM04O,EAAiBhzV,EAAKozV,aAAa,GAAMlrQ,SAC3D,oBAML8zN,EAAAA,GAAAA,KAAA,KAAG5vL,UAAU,aAAYlkC,SAAC,mCA7DvBloF,EAAK6tV,WAAa7tV,EAAKozV,gBAsE1Dp3C,EAAAA,GAAAA,KAAA,OAAK5vL,UAAU,WAAUlkC,UACrB8zN,EAAAA,GAAAA,KAAA,OAAK5vL,UAAU,eAAclkC,UACzB+zN,EAAAA,GAAAA,MAAA,OAAK7vL,UAAU,0BAAyBlkC,SAAA,EACpC8zN,EAAAA,GAAAA,KAAA,OAAK5vL,UAAU,qDAAoDlkC,UAC/D8zN,EAAAA,GAAAA,KAAA,MAAI5vL,UAAU,oBAAmBlkC,SAAC,qBAEtC+zN,EAAAA,GAAAA,MAAA,OAAK7vL,UAAU,qBAAoBlkC,SAAA,EAC/B8zN,EAAAA,GAAAA,KAAA,OAAK5vL,UAAU,mBAAkBlkC,UAC7B8zN,EAAAA,GAAAA,KAAA,SAAO5vL,UAAU,aAAYlkC,UACzB+zN,EAAAA,GAAAA,MAAA,SAAA/zN,SAAA,EACI+zN,EAAAA,GAAAA,MAAA,MAAA/zN,SAAA,EACI8zN,EAAAA,GAAAA,KAAA,MAAA9zN,SAAI,4BACJ8zN,EAAAA,GAAAA,KAAA,MAAI5vL,UAAU,WAAUlkC,UACpB+zN,EAAAA,GAAAA,MAAA,QAAM7vL,UAAU,UAASlkC,SAAA,CAAC,UAAG+rQ,WAGrCh4C,EAAAA,GAAAA,MAAA,MAAA/zN,SAAA,EACI8zN,EAAAA,GAAAA,KAAA,MAAA9zN,SAAI,gBACJ8zN,EAAAA,GAAAA,KAAA,MAAI5vL,UAAU,WAAUlkC,UACpB+zN,EAAAA,GAAAA,MAAA,QAAM7vL,UAAU,UAASlkC,SAAA,CAAC,UAAG0rQ,WAGrC33C,EAAAA,GAAAA,MAAA,MAAI7vL,UAAU,WAAUlkC,SAAA,EACpB8zN,EAAAA,GAAAA,KAAA,MAAA9zN,SAAI,YACJ8zN,EAAAA,GAAAA,KAAA,MAAI5vL,UAAU,WAAUlkC,UACpB+zN,EAAAA,GAAAA,MAAA,QAAM7vL,UAAU,UAASlkC,SAAA,CAAC,UAAG87C,kBAMjDi4K,EAAAA,GAAAA,MAAA,OAAK7vL,UAAU,WAAUlkC,SAAA,EACrB8zN,EAAAA,GAAAA,KAAA,OAAK5vL,UAAU,WAAUlkC,UACrB+zN,EAAAA,GAAAA,MAAA,KAAGv8M,KAAK,WAAW0sB,UAAU,0BAAyBlkC,SAAA,EAClD8zN,EAAAA,GAAAA,KAAA,KAAG5vL,UAAU,4BAA8B,yBAGnD4vL,EAAAA,GAAAA,KAAA,OAAK5vL,UAAU,WAAUlkC,UACrB8zN,EAAAA,GAAAA,KAAA,OAAK5vL,UAAU,2BAA0BlkC,SAG1B,SAAV87C,GACGi4K,EAAAA,GAAAA,MAAA,UACI7vL,UAAU,kBACV9R,QAnK/Bw3L,UACjB,IAAK9P,EAED,YADA6vD,GAAa,GAGjB,MAAMp1V,EAAU,CACZmxV,WAAY1wP,EACZk2P,YAAa,4BAEjB,IACI,MAAMxhW,QAAiB2pT,GAAM8B,KACzB,oDACA5gT,EACA,CACI7J,QAAS,CAAEu5V,cAAe,UAAUnqD,OAM5C,OAHA8wD,EAAgB,+CAChBF,GAAkB,GAClBS,IACOzhW,EAASkG,IACpB,CAAE,MAAOsL,GACgB,IAADgxV,EAApB,GAAIhxV,EAAMxR,UAEN,GAAoC,+CAAb,QAAnBwiW,EAAAhxV,EAAMxR,SAASkG,YAAI,IAAAs8V,OAAA,EAAnBA,EAAqBh9P,QAIrB,OAFA07P,EAAgB,mDAChBF,GAAkB,QAGfxvV,EAAMw5L,QAEbr2L,QAAQnD,MAAM,2BAA4BA,EAAMw5L,SAGhDr2L,QAAQnD,MAAM,4BAA6BA,EAAMoG,QAEzD,GA8HsE0+E,SAAA,EAEvB8zN,EAAAA,GAAAA,KAAA,KAAG5vL,UAAU,8BAAgC,kBAGhD6vL,EAAAA,GAAAA,MAAA,UACI3hM,QArP7Bw3L,UACnB,GAAK9P,EAKL,IAEI,MAAMqyD,EAAY7B,EAAU1rV,QAAO9G,GAAQA,EAAK6tV,YAAWr8U,KAAIxR,GAAQA,EAAK6tV,YACtEyG,EAAc9B,EAAU1rV,QAAO9G,GAAQA,EAAKozV,cAAa5hV,KAAIxR,GAAQA,EAAKozV,cAG1E32V,EAAU,CACZmlU,OAAQ0xB,EAAed,GACvB+B,SAAU,SACNF,EAAU76V,OAAS,GAAK,CAAEq0V,UAAWwG,MACrCC,EAAY96V,OAAS,GAAK,CAAE45V,YAAakB,IAG3C1iW,QAAiB2pT,GAAM8B,KACzB,0DACA5gT,EACA,CACI7J,QAAS,CAAEu5V,cAAe,UAAUnqD,OAK5C,GAAwB,MAApBpwS,EAASyF,OAAgB,CACzB,MAAM,SAAEm9V,GAAa5iW,EAASkG,KACxB8pU,EAAS0xB,EAAed,GAI9Bx5D,EAAS,YAAa,CAClBlkL,MAAO,CAAE0/O,WAAU5yB,SAAQ2yB,SAJd,MAIwBE,YAHrBN,IAKxB,MACI5tV,QAAQnD,MAAM,gCAAiCxR,EAASyF,OAEhE,CAAE,MAAO+L,GAELmD,QAAQnD,MAAM,gCAAiCA,EACnD,MAzCIyuV,GAAa,EAyCjB,EA2MgDzlO,UAAU,kBAAiBlkC,SAAA,EAE3B8zN,EAAAA,GAAAA,KAAA,KAAG5vL,UAAU,8BAAgC,iCAUjF4vL,EAAAA,GAAAA,KAAA,OAAK5vL,UAAU,WAAUlkC,UACrB8zN,EAAAA,GAAAA,KAAA,UAAQ5vL,UAAU,iBAAiB9R,QAASA,IAAM+4O,IAAYnrQ,SAAC,wBAM3E8zN,EAAAA,GAAAA,KAAC04C,GAAkB,CACf9C,UAAWA,EACXC,aAAcA,EACdS,QAASA,IAAMT,GAAa,GAC5BC,eA9NehgD,UACvB+/C,GAAa,GAEb,MAAM8C,EAAYr3C,aAAapzH,QAAQ,gBAEjCikK,EAAYh4V,KAAKC,MAAMknT,aAAapzH,QAAQ,UAAY,GAE9D,GAAIikK,EAAU30V,OAAS,EACnB,IAEI,IAAK,MAAMwG,KAAQmuV,QACT5yC,GAAM8B,KACR,mDACAr9S,EACA,CAAEpN,QAAS,CAAEu5V,cAAe,UAAUwI,IAAa,eAAgB,sBAK3Er3C,aAAalzH,WAAW,OAC5B,CAAE,MAAOhnL,GACLmD,QAAQnD,MAAM,wCAAyCA,EAC3D,CAIJ/R,OAAOgvF,SAASu0Q,QAAQ,KAsMpB54C,EAAAA,GAAAA,KAAC64C,GAAK,CAAC/jM,KAAM6hM,EACTnpV,QAASqpV,EACTP,QAASA,IAAMM,GAAkB,OAEnC,ECxcd,GAXgBkC,KACd,MAAMx6B,EAfQE,MACd,MAAOF,EAAiBG,IAAsBlnN,EAAAA,EAAAA,WAAS,GAUvD,OARAP,EAAAA,EAAAA,YAAU,KACR,MAAMgvL,EAAQsb,aAAapzH,QAAQ,gBAC7BhtF,EAAQogN,aAAapzH,QAAQ,SAC/B83G,GAAS9kM,GACXu9N,GAAmB,EACrB,GACC,IAEIH,CAAe,EAIEE,GACxB,OACEve,EAAAA,GAAAA,MAAA,OAAK7vL,UAAU,WAAUlkC,SAAA,CACtBoyO,GAAkBte,EAAAA,GAAAA,KAACoe,GAAM,KAAMpe,EAAAA,GAAAA,KAACquC,GAAQ,KACzCruC,EAAAA,GAAAA,KAACu2C,GAAI,MAED,EC6GV,GAnH0BwC,KACtB,MAAMz6B,EAfME,MACZ,MAAOF,EAAiBG,IAAsBlnN,EAAAA,EAAAA,WAAS,GAUvD,OARAP,EAAAA,EAAAA,YAAU,KACR,MAAMgvL,EAAQsb,aAAapzH,QAAQ,gBAC7BhtF,EAAQogN,aAAapzH,QAAQ,SAC/B83G,GAAS9kM,GACXu9N,GAAmB,EACrB,GACC,IAEIH,CAAe,EAIEE,GACxB,OACAve,EAAAA,GAAAA,MAAA,OAAA/zN,SAAA,CACKoyO,GAAkBte,EAAAA,GAAAA,KAACoe,GAAM,KAAMpe,EAAAA,GAAAA,KAACquC,GAAQ,KACzCpuC,EAAAA,GAAAA,MAAA,WAAS7vL,UAAU,iBAAiBtgC,MAAO,CAAEgpF,WAAY,sBAAuB5sF,SAAA,EAChF8zN,EAAAA,GAAAA,KAAA,MAAA9zN,SAAI,oBACJ8zN,EAAAA,GAAAA,KAAA,KAAA9zN,SAAG,sCAEH8zN,EAAAA,GAAAA,KAAA,MAAA9zN,SAAI,qBACJ8zN,EAAAA,GAAAA,KAAA,KAAA9zN,SAAG,iRAEH8zN,EAAAA,GAAAA,KAAA,MAAA9zN,SAAI,+BACJ8zN,EAAAA,GAAAA,KAAA,KAAA9zN,SAAG,4WACH+zN,EAAAA,GAAAA,MAAA,MAAA/zN,SAAA,EACI8zN,EAAAA,GAAAA,KAAA,MAAA9zN,SAAI,8IACJ8zN,EAAAA,GAAAA,KAAA,MAAA9zN,SAAI,qIACJ8zN,EAAAA,GAAAA,KAAA,MAAA9zN,SAAI,qOAGR8zN,EAAAA,GAAAA,KAAA,MAAA9zN,SAAI,oCACJ8zN,EAAAA,GAAAA,KAAA,KAAA9zN,SAAG,qVACH+zN,EAAAA,GAAAA,MAAA,MAAA/zN,SAAA,EACI8zN,EAAAA,GAAAA,KAAA,MAAA9zN,SAAI,uDACJ8zN,EAAAA,GAAAA,KAAA,MAAA9zN,SAAI,8HACJ8zN,EAAAA,GAAAA,KAAA,MAAA9zN,SAAI,mGACJ8zN,EAAAA,GAAAA,KAAA,MAAA9zN,SAAI,mGAGR8zN,EAAAA,GAAAA,KAAA,MAAA9zN,SAAI,iCACJ8zN,EAAAA,GAAAA,KAAA,KAAA9zN,SAAG,8EACH+zN,EAAAA,GAAAA,MAAA,MAAA/zN,SAAA,EACI8zN,EAAAA,GAAAA,KAAA,MAAA9zN,SAAI,wNACJ8zN,EAAAA,GAAAA,KAAA,MAAA9zN,SAAI,wOACJ8zN,EAAAA,GAAAA,KAAA,MAAA9zN,SAAI,8GAGR8zN,EAAAA,GAAAA,KAAA,MAAA9zN,SAAI,qCACJ8zN,EAAAA,GAAAA,KAAA,KAAA9zN,SAAG,+YAEH8zN,EAAAA,GAAAA,KAAA,MAAA9zN,SAAI,4BACJ8zN,EAAAA,GAAAA,KAAA,KAAA9zN,SAAG,+dAEH8zN,EAAAA,GAAAA,KAAA,MAAA9zN,SAAI,uBACJ+zN,EAAAA,GAAAA,MAAA,MAAA/zN,SAAA,EACE+zN,EAAAA,GAAAA,MAAA,MAAA/zN,SAAA,EAAI8zN,EAAAA,GAAAA,KAAA,UAAA9zN,SAAQ,iBACV+zN,EAAAA,GAAAA,MAAA,MAAA/zN,SAAA,EACE8zN,EAAAA,GAAAA,KAAA,MAAA9zN,SAAI,mEACJ8zN,EAAAA,GAAAA,KAAA,MAAA9zN,SAAI,2JACJ8zN,EAAAA,GAAAA,KAAA,MAAA9zN,SAAI,mGAIR+zN,EAAAA,GAAAA,MAAA,MAAA/zN,SAAA,EAAI8zN,EAAAA,GAAAA,KAAA,UAAA9zN,SAAQ,sBACV8zN,EAAAA,GAAAA,KAAA,MAAA9zN,UACE8zN,EAAAA,GAAAA,KAAA,MAAA9zN,SAAI,+RAIR+zN,EAAAA,GAAAA,MAAA,MAAA/zN,SAAA,EAAI8zN,EAAAA,GAAAA,KAAA,UAAA9zN,SAAQ,uBACV8zN,EAAAA,GAAAA,KAAA,MAAA9zN,UACE8zN,EAAAA,GAAAA,KAAA,MAAA9zN,SAAI,gJAIR+zN,EAAAA,GAAAA,MAAA,MAAA/zN,SAAA,EAAI8zN,EAAAA,GAAAA,KAAA,UAAA9zN,SAAQ,6BACV8zN,EAAAA,GAAAA,KAAA,MAAA9zN,UACE8zN,EAAAA,GAAAA,KAAA,MAAA9zN,SAAI,yIAKV8zN,EAAAA,GAAAA,KAAA,MAAA9zN,SAAI,4BACJ+zN,EAAAA,GAAAA,MAAA,MAAA/zN,SAAA,EACE+zN,EAAAA,GAAAA,MAAA,MAAA/zN,SAAA,EAAI8zN,EAAAA,GAAAA,KAAA,UAAA9zN,SAAQ,0BACV8zN,EAAAA,GAAAA,KAAA,MAAA9zN,UACE8zN,EAAAA,GAAAA,KAAA,MAAA9zN,SAAI,qQAIR+zN,EAAAA,GAAAA,MAAA,MAAA/zN,SAAA,EAAI8zN,EAAAA,GAAAA,KAAA,UAAA9zN,SAAQ,2BACV8zN,EAAAA,GAAAA,KAAA,MAAA9zN,UACE8zN,EAAAA,GAAAA,KAAA,MAAA9zN,SAAI,0SAIR+zN,EAAAA,GAAAA,MAAA,MAAA/zN,SAAA,EAAI8zN,EAAAA,GAAAA,KAAA,UAAA9zN,SAAQ,2DACV8zN,EAAAA,GAAAA,KAAA,MAAA9zN,UACE8zN,EAAAA,GAAAA,KAAA,MAAA9zN,SAAI,0OAKV8zN,EAAAA,GAAAA,KAAA,MAAA9zN,SAAI,6CACJ+zN,EAAAA,GAAAA,MAAA,KAAA/zN,SAAA,CAAG,qFAED8zN,EAAAA,GAAAA,KAAA,KAAGt8M,KAAK,+BAA8BxX,SAAC,2BAA0B,wHAGnE8zN,EAAAA,GAAAA,KAAA,MAAA9zN,SAAI,mBACJ8zN,EAAAA,GAAAA,KAAA,KAAA9zN,SAAG,oGAEH8zN,EAAAA,GAAAA,KAAA,MAAA9zN,SAAI,sBACJ+zN,EAAAA,GAAAA,MAAA,KAAA/zN,SAAA,CAAG,gCAA4B8zN,EAAAA,GAAAA,KAAA,SAAS,sCACNA,EAAAA,GAAAA,KAAA,SAAS,oBAC3BA,EAAAA,GAAAA,KAAA,SAAS,mBACVA,EAAAA,GAAAA,KAAA,SAAS,0BAIxBA,EAAAA,GAAAA,KAACif,GAAM,MACL,ECxEV,GAvC+B+5B,KAC/B,MAAM16B,EAfUE,MACZ,MAAOF,EAAiBG,IAAsBlnN,EAAAA,EAAAA,WAAS,GAUvD,OARAP,EAAAA,EAAAA,YAAU,KACR,MAAMgvL,EAAQsb,aAAapzH,QAAQ,gBAC7BhtF,EAAQogN,aAAapzH,QAAQ,SAC/B83G,GAAS9kM,GACXu9N,GAAmB,EACrB,GACC,IAEIH,CAAe,EAIFE,GACtB,OACEve,EAAAA,GAAAA,MAAA,OAAA/zN,SAAA,CACKoyO,GAAkBte,EAAAA,GAAAA,KAACoe,GAAM,KAAMpe,EAAAA,GAAAA,KAACquC,GAAQ,KACzCpuC,EAAAA,GAAAA,MAAA,WAAS7vL,UAAU,kBAAkBtgC,MAAO,CAAEgpF,WAAY,sBAAuB5sF,SAAA,EACjF8zN,EAAAA,GAAAA,KAAA,MAAA9zN,SAAI,0BACJ8zN,EAAAA,GAAAA,KAAA,KAAA9zN,SAAG,8BACH8zN,EAAAA,GAAAA,KAAA,KAAA9zN,SAAG,oIACH8zN,EAAAA,GAAAA,KAAA,KAAA9zN,SAAG,qMAEH8zN,EAAAA,GAAAA,KAAA,MAAA9zN,SAAI,aACJ8zN,EAAAA,GAAAA,KAAA,KAAA9zN,SAAG,6IAEH8zN,EAAAA,GAAAA,KAAA,MAAA9zN,SAAI,aACJ8zN,EAAAA,GAAAA,KAAA,KAAA9zN,SAAG,mTAEH8zN,EAAAA,GAAAA,KAAA,MAAA9zN,SAAI,uBACJ8zN,EAAAA,GAAAA,KAAA,KAAA9zN,SAAG,0KAEH8zN,EAAAA,GAAAA,KAAA,MAAA9zN,SAAI,2BACJ8zN,EAAAA,GAAAA,KAAA,KAAA9zN,SAAG,+KAEH8zN,EAAAA,GAAAA,KAAA,MAAA9zN,SAAI,uCACJ8zN,EAAAA,GAAAA,KAAA,KAAA9zN,SAAG,wOAEH8zN,EAAAA,GAAAA,KAAA,MAAA9zN,SAAI,gBACJ8zN,EAAAA,GAAAA,KAAA,KAAA9zN,SAAG,uKAEH8zN,EAAAA,GAAAA,KAAA,MAAA9zN,SAAI,2CACJ8zN,EAAAA,GAAAA,KAAA,KAAA9zN,SAAG,uJAEH8zN,EAAAA,GAAAA,KAAA,KAAA9zN,SAAG,uEAEH8zN,EAAAA,GAAAA,KAACif,GAAM,MACL,ECoBV,GApE2Bg6B,KACvB,MAAO/3P,EAAOygN,IAAYpqM,EAAAA,EAAAA,UAAS,KAC5BqqM,EAAWxB,IAAgB7oM,EAAAA,EAAAA,WAAS,IACpC8+J,EAAcwrC,IAAmBtqM,EAAAA,EAAAA,UAAS,KAC1Cl8G,EAAQ69V,IAAa3hP,EAAAA,EAAAA,UAAS,IAG/BylL,GADWX,IACAG,MA4BjB,OACEwjB,EAAAA,GAAAA,KAAA,OAAK5vL,UAAU,aAAYlkC,SAC1B01N,GACC5B,EAAAA,GAAAA,KAACD,GAAc,KAEfE,EAAAA,GAAAA,MAAA,OAAK7vL,UAAU,kBAAiBlkC,SAAA,EAC9B+zN,EAAAA,GAAAA,MAAA,OAAK7vL,UAAU,eAAclkC,SAAA,EAC3B8zN,EAAAA,GAAAA,KAAA,MAAA9zN,SAAI,2BACJ+zN,EAAAA,GAAAA,MAAA,KAAA/zN,SAAA,CAAG,2CAAuC8zN,EAAAA,GAAAA,KAAA,SAAM,iCAEjD3pC,IAAgB2pC,EAAAA,GAAAA,KAAA,OAAK5vL,UAAU,gBAAelkC,SAAEmqL,IAChDh7Q,IAAU2kT,EAAAA,GAAAA,KAAA,OAAK5vL,UAAU,gBAAelkC,SAAE7wF,KAC3C4kT,EAAAA,GAAAA,MAAA,QAAM+B,SAtCSlM,UACjBp0M,EAAMvH,iBACNimN,GAAa,GACbyB,EAAgB,IAEhB,IAI2B,aAHAtC,GAAM8B,KAAK,oDAAqD,CACnFngN,MAAOA,KAEC7lG,QACVkP,QAAQ4qF,IAAI,6BACZ+jQ,EAAU,6BAGV3uV,QAAQ4qF,IAAI,mBACZ6nM,EAAS,mBAAmB97L,KAEhC,CAAE,MAAMm1K,GACNwrC,EAAgB,sDAClB,CAAC,QACCzB,GAAa,EACf,CAEFA,GAAa,EAAM,EAeYl0N,SAAA,EAC3B+zN,EAAAA,GAAAA,MAAA,OAAK7vL,UAAU,aAAYlkC,SAAA,EACzB8zN,EAAAA,GAAAA,KAAA,SAAOm5C,QAAQ,QAAOjtQ,SAAC,WACvB8zN,EAAAA,GAAAA,KAAA,SACExpT,KAAK,QACL45H,UAAU,eACVv6G,GAAG,QACHpf,MAAOyqG,EACP2tB,SAAW/3H,GAAM6qT,EAAS7qT,EAAE4M,OAAOjN,aAGvCupT,EAAAA,GAAAA,KAAA,UAAQxpT,KAAK,SAAS45H,UAAU,kBAAkBrkC,SAAU61N,EAAU11N,SACnE01N,EAAY,aAAe,4BAKhC,ECoCV,GArG0Bw3C,KACtB,MAAOl4P,EAAOygN,IAAYpqM,EAAAA,EAAAA,UAAS,KAC5B8hP,EAAYC,IAAiB/hP,EAAAA,EAAAA,UAAS,KACtCo9O,EAAaC,IAAkBr9O,EAAAA,EAAAA,UAAS,KACxCqqM,EAAWxB,IAAgB7oM,EAAAA,EAAAA,WAAS,IACpC8+J,EAAcwrC,IAAmBtqM,EAAAA,EAAAA,UAAS,IAE3ClzB,EAAWg4M,IACXW,EAAWR,MAEjBxlL,EAAAA,EAAAA,YAAU,KACN,MAAMt+G,EAAS,IAAIiyS,gBAAgBtmN,EAAS+c,QACtCssP,EAAah1V,EAAOuH,IAAI,SACxBo5V,EAAa3gW,EAAOuH,IAAI,SACdo5V,IACZ13C,EAAS+rC,GACT4L,EAAcD,GAClB,GACD,CAACh1Q,IA8BJ,OACI27N,EAAAA,GAAAA,KAAA,OAAK5vL,UAAU,aAAYlkC,UAC3B+zN,EAAAA,GAAAA,MAAA,OAAK7vL,UAAU,kBAAiBlkC,SAAA,EAC9B8zN,EAAAA,GAAAA,KAAA,OAAK5vL,UAAU,eAAclkC,UAC3B8zN,EAAAA,GAAAA,KAAA,MAAA9zN,SAAI,+BAGLmqL,IAAgB2pC,EAAAA,GAAAA,KAAA,OAAK5vL,UAAU,gBAAelkC,SAAEmqL,KACjD4pC,EAAAA,GAAAA,MAAA,QAAM+B,SAnCSlM,UACjBp0M,EAAMvH,iBACNimN,GAAa,GACbyB,EAAgB,IAEhB,IAKiC,qCAJNtC,GAAM8B,KAAK,mDAAoD,CAClFrb,MAAOqzD,EACPvE,aAAcH,KAEN74V,KAAK0R,SACfjD,QAAQ4qF,IAAI,6BACZ6nM,EAAS,gBAAgB97L,OAGzB32F,QAAQ4qF,IAAI,mBACZ6nM,EAAS,mBAAmB97L,KAEhC,CAAE,MAAMm1K,GACNwrC,EAAgB,kDAClB,CAAC,QACCzB,GAAa,EACf,CAEFA,GAAa,EAAM,EAWYl0N,SAAA,EAC3B+zN,EAAAA,GAAAA,MAAA,OAAK7vL,UAAU,aAAYlkC,SAAA,EACzB8zN,EAAAA,GAAAA,KAAA,SAAOm5C,QAAQ,QAAOjtQ,SAAC,WACvB8zN,EAAAA,GAAAA,KAAA,SACExpT,KAAK,QACL45H,UAAU,eACVv6G,GAAG,QACHpf,MAAOyqG,EACP0sP,UAAQ,KAcZ3tC,EAAAA,GAAAA,MAAA,OAAK7vL,UAAU,aAAYlkC,SAAA,EACvB8zN,EAAAA,GAAAA,KAAA,SAAOm5C,QAAQ,eAAcjtQ,SAAC,kBAC9B8zN,EAAAA,GAAAA,KAAA,SACIxpT,KAAK,eACL45H,UAAU,eACVv6G,GAAG,eACHpf,MAAOk+V,EACP9lO,SAAW/3H,GAAM89V,EAAe99V,EAAE4M,OAAOjN,OACzC+4H,YAAY,0BACZ8T,UAAQ,WAKhB08K,EAAAA,GAAAA,KAAA,UAAQxpT,KAAK,SAAS45H,UAAU,kBAAkBrkC,SAAU61N,EAAU11N,SACnE01N,EAAY,aAAe,0BAI9B,ECoEZ,GApKiB23C,KACb,MAAMl1Q,EAAWg4M,KACX,SAAEm8D,EAAQ,OAAE5yB,EAAM,SAAE2yB,EAAQ,YAAEE,GAAgBp0Q,EAASy0B,OAAS,CAAC,GAChE8oM,EAAWxB,IAAgB7oM,EAAAA,EAAAA,WAAS,GACrCylL,EAAWR,MACV+hC,EAAUG,IAAennN,EAAAA,EAAAA,UAAS,KAClCiiP,EAAQC,IAAaliP,EAAAA,EAAAA,UAAS,IAE/ByuL,EAAQsb,aAAapzH,QAAQ,gBAC7BhtF,EAAQogN,aAAapzH,QAAQ,UAEnCl3E,EAAAA,EAAAA,YAAU,KACNopM,GAAa,GACb,MAAM53I,EAAS5nF,SAASpqE,cAAc,UAQtC,OAPAgyJ,EAAOt9J,IAAM,+CACbs9J,EAAOstI,OAAQ,EACfttI,EAAOpsK,OAAS,KACZmO,QAAQ4qF,IAAI,yBAAyB,EAEzCvU,SAAS3nF,KAAK8M,YAAYyiK,GAEnB,KACH5nF,SAAS3nF,KAAKuY,YAAYg3J,EAAO,CACpC,GACF,IAEH,MAwEM6uL,EAAYvhD,UACd,IAM4B,aALDyJ,GAAMn/S,OAAO,qDAChC,CACIxJ,QAAS,CAAEu5V,cAAe,UAAUnqD,QAG/B3qS,QACTkP,QAAQ4qF,IAAI,eAEpB,CAAE,MAAO/tF,GACLmD,QAAQnD,MAAM,uBAAwBA,EAC1C,GAGJ,OAAIw6S,GAAkB5B,EAAAA,GAAAA,KAACD,GAAc,KAGjCC,EAAAA,GAAAA,KAAA,OAAK5vL,UAAU,qBAAoBlkC,UAC/B8zN,EAAAA,GAAAA,KAAA,OAAK5vL,UAAU,kBAAiBlkC,UAC5B8zN,EAAAA,GAAAA,KAAA,OAAK5vL,UAAU,oCAAmClkC,UAC9C8zN,EAAAA,GAAAA,KAAA,OAAK5vL,UAAU,YAAWlkC,UACtB+zN,EAAAA,GAAAA,MAAA,OAAK7vL,UAAU,uBAAsBlkC,SAAA,EACjC8zN,EAAAA,GAAAA,KAAA,KAAG5vL,UAAU,kBAAiBlkC,SAAC,qBAC/B8zN,EAAAA,GAAAA,KAAA,QAAM5vL,UAAU,kBAAiBlkC,UAC7B+zN,EAAAA,GAAAA,MAAA,OAAK7vL,UAAU,aAAYlkC,SAAA,EACvB8zN,EAAAA,GAAAA,KAAA,KAAG5vL,UAAU,oBAAmBlkC,SAAC,mBACjC8zN,EAAAA,GAAAA,KAACkuC,KAAU,CACPl/N,QAAS,KACTv4H,MAAO+iW,EACP3qO,SAnGNp4H,IAC1BgjW,EAAUhjW,EAAM,EAmGgB88H,WAAW,eACXM,WAAY,CACRn1H,KAAM,SACN4kI,UAAU,EACV9kB,WAAW,GAEf8kB,UAAQ,KAEZ08K,EAAAA,GAAAA,KAAA,KAAG5vL,UAAU,oBAAmBlkC,SAAC,mBACjC8zN,EAAAA,GAAAA,KAAA,SACIxpT,KAAK,QACL45H,UAAU,eACVv6G,GAAG,QACHpf,MAAOyqG,EACP0sP,UAAQ,UAIpB3tC,EAAAA,GAAAA,MAAA,UAAQ7vL,UAAU,kBAAkB9R,QAlHtC8zO,KAGlB,IAAKoG,IAAa5yB,IAAW2yB,IAAaE,EAEtC,YADAz3Q,MAAM,2BAKV,MAAMvoF,EAAU,CACZP,IAAK,0BACL0tU,OAAQA,EACR2yB,SAAUA,EACV75V,KAAM,wBACN89J,YAAa,qBACbv2H,MAAO,sBACPuyT,SAAUA,EACVvtL,QAAS6qI,eAAgBlgT,GACrBwqT,GAAa,GAEb,IASuB,aAPDb,GAAM8B,KAAK,4DAA6D,CACtFq4C,oBAAqB9jW,EAAS8jW,oBAC9BC,kBAAmB/jW,EAAS+jW,kBAC5BC,mBAAoBhkW,EAASgkW,sBAIzBv+V,cAEEg8V,IACNr6D,EAAS,WAGTh8M,MAAM,gCACNg8M,EAAS,SAEjB,CAAE,MAAO51R,GACLmD,QAAQnD,MAAM,2BAA4BA,GAC1C45E,MAAM,gCACNo/N,GAAa,GACbpjB,EAAS,QACb,CAAC,QACGojB,GAAa,EACjB,CACJ,EACAy5C,QAAS,CACLn7V,KAAM6/T,EACNr9N,MAAOA,EACP44P,QAASN,GAEbO,MAAO,CACHC,QAAS,qHAEbC,MAAO,CACHl5P,MAAO,YAKF,IAAI1rG,OAAO6kW,SAASzhW,GAC5BgE,MAAM,EAoDoEyvF,SAAA,CAAC,kBAAW05O,MACvE3lB,EAAAA,GAAAA,MAAA,KAAGnwN,MAAO,CAAEiR,MAAO,WAAY7U,SAAA,CAAC,cAE5B8zN,EAAAA,GAAAA,KAAA,OACI90S,IAAI,qBACJqpK,IAAI,WACJzkF,MAAO,CAAEkP,OAAQ,OAAQwoL,WAAY,sBAO3D,ECxBd,GA3HoB2yE,KAChB,MAAM77B,EAfME,MACZ,MAAOF,EAAiBG,IAAsBlnN,EAAAA,EAAAA,WAAS,GAUvD,OARAP,EAAAA,EAAAA,YAAU,KACR,MAAMgvL,EAAQsb,aAAapzH,QAAQ,gBAC7BhtF,EAAQogN,aAAapzH,QAAQ,SAC/B83G,GAAS9kM,GACXu9N,GAAmB,EACrB,GACC,IAEIH,CAAe,EAIEE,GACxB,OACAve,EAAAA,GAAAA,MAAA,OAAA/zN,SAAA,CACKoyO,GAAkBte,EAAAA,GAAAA,KAACoe,GAAM,KAAMpe,EAAAA,GAAAA,KAACquC,GAAQ,KACzCpuC,EAAAA,GAAAA,MAAA,WAAS7vL,UAAU,WAAWtgC,MAAO,CAAEgpF,WAAY,sBAAuB5sF,SAAA,EAC1E8zN,EAAAA,GAAAA,KAAA,MAAA9zN,SAAI,cACJ+zN,EAAAA,GAAAA,MAAA,MAAA/zN,SAAA,CAAI,uDAAmD8zN,EAAAA,GAAAA,KAAA,KAAA9zN,SAAG,qBAC1D8zN,EAAAA,GAAAA,KAAA,SAAS,4JAC+IA,EAAAA,GAAAA,KAAA,KAAA9zN,SAAG,iBAAgB,8FAC3K8zN,EAAAA,GAAAA,KAAA,UACAA,EAAAA,GAAAA,KAAA,UACAA,EAAAA,GAAAA,KAAA,MAAA9zN,SAAI,gBAAgB,OACjB8zN,EAAAA,GAAAA,KAAA,KAAA9zN,SAAG,iBAAiB,wSACvB8zN,EAAAA,GAAAA,KAAA,UACAA,EAAAA,GAAAA,KAAA,MAAI5vL,UAAU,YAAWlkC,SAAC,6CAA6C,iPAEvE8zN,EAAAA,GAAAA,KAAA,UACAA,EAAAA,GAAAA,KAAA,UACAA,EAAAA,GAAAA,KAAA,MAAA9zN,SAAI,mBAAmB,iMAEvB8zN,EAAAA,GAAAA,KAAA,UACAC,EAAAA,GAAAA,MAAA,MAAI7vL,UAAU,YAAWlkC,SAAA,CAAC,eAAW8zN,EAAAA,GAAAA,KAAA,KAAA9zN,SAAG,iBAAgB,kBACxD+zN,EAAAA,GAAAA,MAAA,MAAA/zN,SAAA,EACA+zN,EAAAA,GAAAA,MAAA,MAAA/zN,SAAA,EAAI8zN,EAAAA,GAAAA,KAAA,KAAA9zN,SAAG,wBAAuB,sFAC9B+zN,EAAAA,GAAAA,MAAA,MAAA/zN,SAAA,EAAI8zN,EAAAA,GAAAA,KAAA,KAAA9zN,SAAG,wBAAuB,iHAC9B+zN,EAAAA,GAAAA,MAAA,MAAA/zN,SAAA,EAAI8zN,EAAAA,GAAAA,KAAA,KAAA9zN,SAAG,iBAAgB,2GACvB8zN,EAAAA,GAAAA,KAAA,MAAI5vL,UAAU,YAAWlkC,SAAC,oBAC1B+zN,EAAAA,GAAAA,MAAA,MAAA/zN,SAAA,EACA+zN,EAAAA,GAAAA,MAAA,MAAA/zN,SAAA,EAAI8zN,EAAAA,GAAAA,KAAA,KAAA9zN,SAAG,yBAAwB,yEAC/B+zN,EAAAA,GAAAA,MAAA,MAAA/zN,SAAA,EAAI8zN,EAAAA,GAAAA,KAAA,KAAA9zN,SAAG,yBAAwB,yBAAqB8zN,EAAAA,GAAAA,KAAA,KAAA9zN,SAAG,wBAAuB,SAAK8zN,EAAAA,GAAAA,KAAA,KAAA9zN,SAAG,oBAAmB,QACzG+zN,EAAAA,GAAAA,MAAA,MAAA/zN,SAAA,EAAI8zN,EAAAA,GAAAA,KAAA,KAAA9zN,SAAG,wBAAuB,yGAC9B+zN,EAAAA,GAAAA,MAAA,MAAA/zN,SAAA,EAAI8zN,EAAAA,GAAAA,KAAA,KAAA9zN,SAAG,kBAAiB,kIACxB8zN,EAAAA,GAAAA,KAAA,UACAC,EAAAA,GAAAA,MAAA,MAAI7vL,UAAU,YAAWlkC,SAAA,CAAC,eAAW8zN,EAAAA,GAAAA,KAAA,KAAA9zN,SAAG,iBAAgB,kGAExD+zN,EAAAA,GAAAA,MAAA,WAASpqS,GAAG,OAAOu6G,UAAU,kBAAiBlkC,SAAA,EAC5C8zN,EAAAA,GAAAA,KAAA,MAAI5vL,UAAU,aAAYlkC,SAAC,cAG3B8zN,EAAAA,GAAAA,KAAA,OAAK5vL,UAAU,YAAWlkC,UACxB+zN,EAAAA,GAAAA,MAAA,OAAK7vL,UAAU,MAAKlkC,SAAA,EAClB8zN,EAAAA,GAAAA,KAAA,OAAK5vL,UAAU,oBAAmBlkC,UAC9B+zN,EAAAA,GAAAA,MAAA,OAAK7vL,UAAU,WAAUlkC,SAAA,EACrB8zN,EAAAA,GAAAA,KAAA,OAAK90S,IAAI,iFAAiFqpK,IAAI,oBAC9FyrI,EAAAA,GAAAA,KAAA,MAAI5vL,UAAU,QAAOlkC,SAAC,yBAI9B8zN,EAAAA,GAAAA,KAAA,OAAK5vL,UAAU,oBAAmBlkC,UAC9B+zN,EAAAA,GAAAA,MAAA,OAAK7vL,UAAU,WAAUlkC,SAAA,EACzB8zN,EAAAA,GAAAA,KAAA,OAAK90S,IAAI,iFAAiFqpK,IAAI,sBAC9FyrI,EAAAA,GAAAA,KAAA,MAAI5vL,UAAU,QAAOlkC,SAAC,2BAI1B8zN,EAAAA,GAAAA,KAAA,OAAK5vL,UAAU,oBAAmBlkC,UAC9B+zN,EAAAA,GAAAA,MAAA,OAAK7vL,UAAU,WAAUlkC,SAAA,EACzB8zN,EAAAA,GAAAA,KAAA,OAAK90S,IAAI,+EAA+EqpK,IAAI,kBAC5FyrI,EAAAA,GAAAA,KAAA,MAAI5vL,UAAU,QAAOlkC,SAAC,uBAI1B8zN,EAAAA,GAAAA,KAAA,OAAK5vL,UAAU,oBAAmBlkC,UAC9B+zN,EAAAA,GAAAA,MAAA,OAAK7vL,UAAU,WAAUlkC,SAAA,EACzB8zN,EAAAA,GAAAA,KAAA,OAAK90S,IAAI,8EAA8EqpK,IAAI,mBAC3FyrI,EAAAA,GAAAA,KAAA,MAAI5vL,UAAU,QAAOlkC,SAAC,wBAI1B8zN,EAAAA,GAAAA,KAAA,OAAK5vL,UAAU,oBAAmBlkC,UAC9B+zN,EAAAA,GAAAA,MAAA,OAAK7vL,UAAU,WAAUlkC,SAAA,EACzB8zN,EAAAA,GAAAA,KAAA,OAAK90S,IAAI,+EAA+EqpK,IAAI,kBAC5FyrI,EAAAA,GAAAA,KAAA,MAAI5vL,UAAU,QAAOlkC,SAAC,+BAI1B8zN,EAAAA,GAAAA,KAAA,OAAK5vL,UAAU,oBAAmBlkC,UAC9B+zN,EAAAA,GAAAA,MAAA,OAAK7vL,UAAU,WAAUlkC,SAAA,EACzB8zN,EAAAA,GAAAA,KAAA,OAAK90S,IAAI,gFAAgFqpK,IAAI,kBAC7FyrI,EAAAA,GAAAA,KAAA,MAAI5vL,UAAU,QAAOlkC,SAAC,+BAMhC+zN,EAAAA,GAAAA,MAAA,WAASpqS,GAAG,sBAAsBu6G,UAAU,sBAAqBlkC,SAAA,EACjE8zN,EAAAA,GAAAA,KAAA,MAAI5vL,UAAU,gBAAelkC,SAAC,gCAC5B8zN,EAAAA,GAAAA,KAAA,OAAK5vL,UAAU,YAAWlkC,UACxB+zN,EAAAA,GAAAA,MAAA,OAAK7vL,UAAU,MAAKlkC,SAAA,EAClB8zN,EAAAA,GAAAA,KAAA,OAAK5vL,UAAU,WAAUlkC,UACvB+zN,EAAAA,GAAAA,MAAA,OAAK7vL,UAAU,oBAAmBlkC,SAAA,EAChC8zN,EAAAA,GAAAA,KAAA,MAAI5vL,UAAU,eAAclkC,SAAC,WAC7B8zN,EAAAA,GAAAA,KAAA,KAAA9zN,UAAG8zN,EAAAA,GAAAA,KAAA,UAAA9zN,SAAQ,iGACX8zN,EAAAA,GAAAA,KAAA,KAAA9zN,SAAG,kHAGP8zN,EAAAA,GAAAA,KAAA,OAAK5vL,UAAU,WAAUlkC,UACvB+zN,EAAAA,GAAAA,MAAA,OAAK7vL,UAAU,6BAA4BlkC,SAAA,EACzC8zN,EAAAA,GAAAA,KAAA,MAAI5vL,UAAU,eAAclkC,SAAC,oBAC7B8zN,EAAAA,GAAAA,KAAA,KAAA9zN,SAAG,kIAGP8zN,EAAAA,GAAAA,KAAA,OAAK5vL,UAAU,WAAUlkC,UACvB+zN,EAAAA,GAAAA,MAAA,OAAK7vL,UAAU,2BAA0BlkC,SAAA,EACvC8zN,EAAAA,GAAAA,KAAA,MAAI5vL,UAAU,eAAclkC,SAAC,kBAC7B8zN,EAAAA,GAAAA,KAAA,KAAA9zN,SAAG,gIAGP8zN,EAAAA,GAAAA,KAAA,OAAK5vL,UAAU,WAAUlkC,UACvB+zN,EAAAA,GAAAA,MAAA,OAAK7vL,UAAU,yBAAwBlkC,SAAA,EACrC8zN,EAAAA,GAAAA,KAAA,MAAI5vL,UAAU,eAAclkC,SAAC,gBAC7B8zN,EAAAA,GAAAA,KAAA,KAAA9zN,SAAG,0HAMb8zN,EAAAA,GAAAA,KAACif,GAAM,MACL,ECfV,GAtHkBm7B,KAEhB,MAAOC,EAAWC,IAAgB/iP,EAAAA,EAAAA,UAAS,KAEpCgjP,EAAcC,IAAmBjjP,EAAAA,EAAAA,UAAS,CAAC,IAE3CqqM,EAAWxB,IAAgB7oM,EAAAA,EAAAA,WAAS,IAG3CP,EAAAA,EAAAA,YAAU,KAEe8+L,WACrB,IAEE,MAAMlgT,QAAiB2pT,GAAMt/S,IAAI,8CAEjCq6V,EAAa1kW,EAASkG,MAEtBskT,GAAa,EACf,CAAE,MAAOh5S,GAEPmD,QAAQnD,MAAM,4BAA6BA,EAC7C,GAIFqzV,GAGA,MAAMC,EAAevgW,KAAKC,MAAMknT,aAAapzH,QAAQ,kBAAoB,CAAC,EAE1EssK,EAAgBE,EAAa,GAC5B,IAyBH,GAAI94C,EAAW,OAAO5B,EAAAA,GAAAA,KAACD,GAAc,IAsBrC,OACEC,EAAAA,GAAAA,KAAA,WAAS5vL,UAAU,QAAOlkC,UACxB+zN,EAAAA,GAAAA,MAAA,OAAK7vL,UAAU,iBAAgBlkC,SAAA,EAE7B8zN,EAAAA,GAAAA,KAAA,OAAK5vL,UAAU,iBAAiBv6G,GAAG,kBAAiBq2E,SAAC,cAEpDmuQ,EAAU7kV,KAAImlV,IACb16C,SAAAA,GAAAA,MAAA,OAAK7vL,UAAU,WAAUlkC,SAAA,EAEvB8zN,EAAAA,GAAAA,KAAA,OAAK5vL,UAAU,eAAellH,IAAKyvV,EAASC,UAAWrmL,IAAKomL,EAASE,iBACrE56C,EAAAA,GAAAA,MAAA,OAAK7vL,UAAU,gBAAelkC,SAAA,EAE5B8zN,EAAAA,GAAAA,KAAA,MAAI5vL,UAAU,yBAAwBlkC,SAAEyuQ,EAASE,iBAEjD76C,EAAAA,GAAAA,KAAA,OAAK5vL,UAAU,kBAjCJn4G,EAmCI0iV,EAASG,kBAjChC96C,EAAAA,GAAAA,KAAA,OAAK5vL,UAAU,mBAAkBlkC,UAC/B8zN,EAAAA,GAAAA,KAAA,KAAA9zN,SAEGj0E,EAAK7hB,MAAM,WAAWof,KAAI,CAACgoH,EAASo1F,KACnCqtF,EAAAA,GAAAA,MAAA,QAAA/zN,SAAA,CAEGsxC,EAEY,MAAZA,GAA+B,OAAZA,GAAmBwiL,EAAAA,GAAAA,KAAA,SAAS,KAJvCptF,WA+BTotF,EAAAA,GAAAA,KAAA,OAAK5vL,UAAU,kBAEf6vL,EAAAA,GAAAA,MAAA,MAAI7vL,UAAU,0BAAyBlkC,SAAA,CAAE,yBAAuByuQ,EAASI,mBAEzE/6C,EAAAA,GAAAA,KAAA,UACE5vL,UAAU,aACV9R,QAASA,IApEFw3L,WAEnB,GAAKykD,EAAaS,GAehBzwV,QAAQnD,MAAM,oDAdd,UAEQm4S,GAAM8B,KAAK,8CAA8C25C,YAE/D,MAAMC,EAAsB,IAAKV,EAAc,CAACS,IAAa,GAC7DR,EAAgBS,GAEhB35C,aAAanzH,QAAQ,eAAgBh0L,KAAK8B,UAAUg/V,GACtD,CAAE,MAAO7zV,GAEPmD,QAAQnD,MAAM,wBAAyBA,EACzC,CAIF,EAkD2B8zV,CAAaP,EAASzpE,KACrCnlM,SAAUwuQ,EAAaI,EAASzpE,KAAMhlM,SAGrCquQ,EAAaI,EAASzpE,KAAO,uBAAyB,kBArB9BypE,EAASzpE,KA1BzBj5Q,KAmDhB,QAEK,ECpFd,GA9B6BnW,IAAiB,IAAhB,OAAE4sV,GAAQ5sV,EACtC,OACEk+S,EAAAA,GAAAA,KAAA,OAAK5vL,UAAU,iBAAgBlkC,UAE3B+zN,EAAAA,GAAAA,MAAA,OAAK7vL,UAAU,wBAAuBlkC,SAAA,EAElC8zN,EAAAA,GAAAA,KAAA,MAAI5vL,UAAU,UAAUtgC,MAAO,CAACw9L,UAAW,UAAUphM,SAAC,wBAGtD+zN,EAAAA,GAAAA,MAAA,OAAK7vL,UAAU,6BAA4BlkC,SAAA,EAEvC8zN,EAAAA,GAAAA,KAAA,OAAK90S,IAAKwjV,EAAOkM,UAAWrmL,IAAKm6K,EAAO36N,MAAO3D,UAAU,iCAGzD6vL,EAAAA,GAAAA,MAAA,OAAK7vL,UAAU,6BAA4BlkC,SAAA,EAEvC8zN,EAAAA,GAAAA,KAAA,MAAIlwN,MAAO,CAACw9L,UAAW,SAAUvsL,MAAO,WAAW7U,SAAEwiQ,EAAO36N,SAE5DisL,EAAAA,GAAAA,KAAA,MAAIlwN,MAAO,CAACw9L,UAAW,SAAUvsL,MAAO,WAAW7U,SAAEwiQ,EAAOlyL,eAE5DwjJ,EAAAA,GAAAA,KAAA,OAAK5vL,UAAU,eAAclkC,UACzB8zN,EAAAA,GAAAA,KAACvd,GAAI,CAAC5yI,GAAI,8BAA8B3jE,SAAC,4BAKvD,ECVFwiQ,GAAS,CACb36N,MAAO,0DACPyoC,YAAa,wGACbo+L,UAAW,wEACXtI,UAAW,oIAef,GAZqB6I,KACjB,MAAM78B,EAtBME,MACZ,MAAOF,EAAiBG,IAAsBlnN,EAAAA,EAAAA,WAAS,GAUvD,OARAP,EAAAA,EAAAA,YAAU,KACR,MAAMgvL,EAAQsb,aAAapzH,QAAQ,gBAC7BhtF,EAAQogN,aAAapzH,QAAQ,SAC/B83G,GAAS9kM,GACXu9N,GAAmB,EACrB,GACC,IAEIH,CAAe,EAWEE,GACxB,OACAve,EAAAA,GAAAA,MAAA,OAAA/zN,SAAA,CACKoyO,GAAkBte,EAAAA,GAAAA,KAACoe,GAAM,KAAMpe,EAAAA,GAAAA,KAACquC,GAAQ,KACzCruC,EAAAA,GAAAA,KAACo6C,GAAS,KACVp6C,EAAAA,GAAAA,KAACo7C,GAAoB,CAAC1M,OAAQA,OAE5B,ECDV,GAjCgC2M,KAE5B,MASMC,EAAuBA,KACzB,MAAM16C,EAAYU,aAAapzH,QAAQ,cAEvC,GAAI0yH,EAAW,CACX,MAAM26C,EAAiB97Q,SAASmhO,EAAW,KACvB,IAAI7lN,MAAOmnC,UACGq5N,EAClB,SAftBj6C,aAAalzH,WAAW,gBACxBkzH,aAAalzH,WAAW,SACxBkzH,aAAalzH,WAAW,aACxBkzH,aAAalzH,WAAW,cACxB/4L,OAAOgvF,SAASqf,KAAO,WAiBrB,IAIJsT,EAAAA,EAAAA,YAAU,KACRskP,GAAsB,GACrB,GAAG,EC0BV,GAtDqBx5V,IAAwD,IAAvD,SAAE05V,EAAQ,gBAAEvJ,EAAe,mBAAEwJ,GAAoB35V,EACnE,MAAM45V,EAAcD,EAAmBlyQ,SAASiyQ,EAAStqE,KAEzD,OACI8uB,EAAAA,GAAAA,KAAA,OAAK5vL,UAAU,gBAAelkC,UAC1B+zN,EAAAA,GAAAA,MAAA,OAAK7vL,UAAU,gBAAelkC,SAAA,EAE1B8zN,EAAAA,GAAAA,KAAA,OAAK5vL,UAAU,iBAAgBlkC,UAC3B8zN,EAAAA,GAAAA,KAAA,OAAK90S,IAAKswV,EAAS3M,cAAet6K,IAAKinL,EAASznO,WAGpDksL,EAAAA,GAAAA,MAAA,OAAK7vL,UAAU,mBAAkBlkC,SAAA,EAC7B8zN,EAAAA,GAAAA,KAAA,MAAI5vL,UAAU,iBAAgBlkC,SAAEsvQ,EAASznO,SACzCksL,EAAAA,GAAAA,MAAA,OAAK7vL,UAAU,kBAAiBlkC,SAAA,EAC5B+zN,EAAAA,GAAAA,MAAA,KAAG7vL,UAAU,oBAAmBlkC,SAAA,CAAC,QAAMsvQ,EAASG,QAChD37C,EAAAA,GAAAA,KAAA,OAAK5vL,UAAU,eAAclkC,SAAC,uBAElC8zN,EAAAA,GAAAA,KAAA,KAAG5vL,UAAU,uBAAsBlkC,SAAEsvQ,EAASh/L,cAC1B,gBAAnBg/L,EAAS1M,OACN9uC,EAAAA,GAAAA,KAAA,MAAIlwN,MAAO,CAAEiR,MAAO,WAAY7U,UAC5B8zN,EAAAA,GAAAA,KAAA,UAAA9zN,SAAQ,kBAEO,yBAAnBsvQ,EAAS1M,OACT9uC,EAAAA,GAAAA,KAAA,MAAIlwN,MAAO,CAAEiR,MAAO,OAAQ7U,UACxB8zN,EAAAA,GAAAA,KAAA,UAAA9zN,SAAQ,4BAGZ+zN,EAAAA,GAAAA,MAAA2e,GAAAA,SAAA,CAAA1yO,SAAA,EACI8zN,EAAAA,GAAAA,KAAA,KAAG5vL,UAAU,iBAAgBlkC,UACzB+zN,EAAAA,GAAAA,MAAA,UAAA/zN,SAAA,CAAQ,iBAAUsvQ,EAAS1M,MAAM,gBAGnC4M,GAUE17C,EAAAA,GAAAA,KAAA,KAAG5vL,UAAU,eAAclkC,UACvB8zN,EAAAA,GAAAA,KAAA,UAAA9zN,SAAQ,yBAVZ8zN,EAAAA,GAAAA,KAAA,OAAK5vL,UAAU,kBAAiBlkC,UAC5B8zN,EAAAA,GAAAA,KAAA,UACI5vL,UAAU,aACV9R,QAASA,IAAM2zO,EAAgBuJ,GAAUtvQ,SAC5C,4BAavB,ECmGd,GAjJqB0vQ,KACjB,MAAOC,EAAWC,IAAgBvkP,EAAAA,EAAAA,UAAS,KACpCqqM,EAAWxB,IAAgB7oM,EAAAA,EAAAA,WAAS,GACrCyuL,EAAQsb,aAAapzH,QAAQ,iBAC5B6iK,EAAkBC,IAAuBz5O,EAAAA,EAAAA,UAAS,KAClDkkP,EAAoBM,IAAyBxkP,EAAAA,EAAAA,UAAS,IAEvDylL,EAAWR,MAGjBxlL,EAAAA,EAAAA,YAAU,KACNuoM,GACKt/S,IAAI,+CACJ2pG,MAAMh0G,IACHkmW,EAAalmW,EAASkG,MACtBskT,GAAa,EAAM,IAEtBv2M,OAAOziG,IACJmD,QAAQnD,MAAM,uBAAwBA,GACtCg5S,GAAa,EAAM,GACrB,GACP,KAEHppM,EAAAA,EAAAA,YAAU,KAEN,IAAKgvL,EAAO,OACoB8P,WAC5B,IACI,MAAMlgT,QAAiB2pT,GAAMt/S,IAAI,2EAA4E,CACzGrJ,QAAS,CAAEu5V,cAAe,UAAUnqD,OAEhB,MAApBpwS,EAASyF,QACT0gW,EAAsBnmW,EAASkG,KAAKkgW,aAE5C,CAAE,MAAO50V,GACLmD,QAAQnD,MAAM,sCAAuCA,EACzD,GAEJ60V,EAAyB,GAC1B,CAACj2D,IAGJ,MAAMisD,EAAkBn8C,UACpB,MAAMomD,EAAe,CACjB9E,YAAaoE,EAAStqE,IACtB49D,MAAO0M,EAAS1M,MAChB/6N,MAAOynO,EAASznO,MAChB86N,cAAe2M,EAAS3M,cACxBF,YAAa6M,EAAS7M,aAG1B,IAAK3oD,EAAO,CAER,MAAMmsD,EAAYh4V,KAAKC,MAAMknT,aAAapzH,QAAQ,UAAY,GAK9D,OAJAikK,EAAU75V,KAAK4jW,GACf56C,aAAanzH,QAAQ,OAAQh0L,KAAK8B,UAAUk2V,IAC5CnB,EAAoB,gCACpBh0D,EAAS,QAEb,CAEA,IAY4B,aAVDuiB,GAAM8B,KACzB,mDACA66C,EACA,CACItlW,QAAS,CACLu5V,cAAe,UAAUnqD,IACzB,eAAgB,uBAIf3qS,SACT21V,EAAoB,2BACpBh0D,EAAS,SAEjB,CAAE,MAAO51R,GACL4pV,EAAoB,0DACpBzmV,QAAQnD,MAAM,iCAAkCA,EACpD,GAIJ,GAAIw6S,EAAW,OAAO5B,EAAAA,GAAAA,KAACD,GAAc,IAGrC,MAAMo8C,EAAmBN,EAAUxlW,QAAO,CAACwlI,EAAK2/N,KAC5C,MAAM73N,EAAY,IAAI5oC,KAAKygQ,EAASY,MAAM,IAAIC,mBAAmB,QAAS,CACtEvnN,IAAK,UACL3zC,MAAO,OACP0zC,KAAM,YAEJnR,EAAU,IAAI3oC,KAAKygQ,EAASY,MAAM,IAAIC,mBAAmB,QAAS,CACpEvnN,IAAK,UACL3zC,MAAO,OACP0zC,KAAM,YAEJpR,EAAYE,IAAcD,EAAUC,EAAY,GAAGA,OAAeD,IAIxE,OAFK7H,EAAI4H,KAAY5H,EAAI4H,GAAa,IACtC5H,EAAI4H,GAAWnrI,KAAKkjW,GACb3/N,CAAG,GACX,CAAC,GAEJ,OACImkL,EAAAA,GAAAA,KAAA,OAAK5vL,UAAU,cAAalkC,UACxB+zN,EAAAA,GAAAA,MAAA,OAAK7vL,UAAU,YAAWlkC,SAAA,EACtB8zN,EAAAA,GAAAA,KAAA,OAAK5vL,UAAU,MAAKlkC,UAChB+zN,EAAAA,GAAAA,MAAA,OAAK7vL,UAAU,SAAQlkC,SAAA,EACnB8zN,EAAAA,GAAAA,KAAA,KAAGt8M,KAAK,QAAQ0sB,UAAU,YAAWlkC,SAAC,YACtC8zN,EAAAA,GAAAA,KAAA,MAAI5vL,UAAU,mBAAmBtgC,MAAO,CAAEiR,MAAO,WAAY7U,SAAC,mBAG9D8zN,EAAAA,GAAAA,KAAA,MAAI5vL,UAAU,mBAAkBlkC,SAAC,6SAGhC6kQ,IACG/wC,EAAAA,GAAAA,KAAA,OAAK5vL,UAAU,+BAA8BlkC,SAAE6kQ,SAK1DzyV,OAAO0M,KAAKmxV,GAAkB3mV,KAAI,CAACiuH,EAAWzrI,KAC3CioT,EAAAA,GAAAA,MAAA,OAAiB7vL,UAAU,OAAMlkC,SAAA,EAE7B8zN,EAAAA,GAAAA,KAAA,MAAI5vL,UAAU,mBAAmBtgC,MAAO,CAACiR,MAAO,WAAW7U,SAAEu3C,KAE7Du8K,EAAAA,GAAAA,KAAA,OAAK5vL,UAAU,MAAKlkC,SACfiwQ,EAAiB14N,GAAWjuH,KAAKgmV,IAC9Bx7C,EAAAA,GAAAA,KAACs8C,GAAY,CAETd,SAAUA,EACVvJ,gBAAiBA,EACjBwJ,mBAAoBA,GAHfD,EAAStqE,WAPpBl5R,SAiBhB,EChHd,GAdyBukW,KACvB,MAAM,gBAAEj+B,EAAe,UAAE1c,GAjBX4c,MACd,MAAOF,EAAiBG,IAAsBlnN,EAAAA,EAAAA,WAAS,IAChDqqM,EAAWxB,IAAgB7oM,EAAAA,EAAAA,WAAS,GAW3C,OATAP,EAAAA,EAAAA,YAAU,KACR,MAAMgvL,EAAQsb,aAAapzH,QAAQ,gBAC7BhtF,EAAQogN,aAAapzH,QAAQ,SAC/B83G,GAAS9kM,GACXu9N,GAAmB,GAErBre,GAAa,EAAM,GAClB,IAEI,CAAEke,kBAAiB1c,YAAW,EAIE4c,GAEvC,OAAI5c,GAAkB5B,EAAAA,GAAAA,KAACD,GAAc,KAGnCE,EAAAA,GAAAA,MAAA,OAAK7vL,UAAU,iBAAgBlkC,SAAA,CAC5BoyO,GAAkBte,EAAAA,GAAAA,KAACoe,GAAM,KAAMpe,EAAAA,GAAAA,KAACquC,GAAQ,KACzCruC,EAAAA,GAAAA,KAAC47C,GAAY,MAET,ECkCV,SAzCA,WAIE,OAFAP,MAGEr7C,EAAAA,GAAAA,KAAA,OAAK5vL,UAAU,MAAKlkC,UAClB8zN,EAAAA,GAAAA,KAAC7e,GAAM,CAAAj1M,UACL+zN,EAAAA,GAAAA,MAACve,GAAM,CAAAx1M,SAAA,EAEL+zN,EAAAA,GAAAA,MAAChf,GAAK,CAACvoK,KAAK,IAAI9tH,SAASo1S,EAAAA,GAAAA,KAACyuC,GAAW,IAAIviQ,SAAA,EACvC8zN,EAAAA,GAAAA,KAAC/e,GAAK,CAACjpS,OAAK,EAAC4S,SAASo1S,EAAAA,GAAAA,KAACmuC,GAAW,OAClCnuC,EAAAA,GAAAA,KAAC/e,GAAK,CAACvoK,KAAK,UAAU9tH,SAASo1S,EAAAA,GAAAA,KAAC0B,GAAmB,OACnD1B,EAAAA,GAAAA,KAAC/e,GAAK,CAACvoK,KAAK,QAAQ9tH,SAASo1S,EAAAA,GAAAA,KAACwtC,GAAS,OACvCxtC,EAAAA,GAAAA,KAAC/e,GAAK,CAACvoK,KAAK,WAAW9tH,SAASo1S,EAAAA,GAAAA,KAAC6tC,GAAY,OAC7C7tC,EAAAA,GAAAA,KAAC/e,GAAK,CAACvoK,KAAK,kBAAkB9tH,SAASo1S,EAAAA,GAAAA,KAACi5C,GAAkB,OAC1Dj5C,EAAAA,GAAAA,KAAC/e,GAAK,CAACvoK,KAAK,iBAAiB9tH,SAASo1S,EAAAA,GAAAA,KAACo5C,GAAiB,UAG1Dn5C,EAAAA,GAAAA,MAAChf,GAAK,CAACvoK,KAAK,IAAI9tH,SAASo1S,EAAAA,GAAAA,KAACsuC,GAAY,IAAIpiQ,SAAA,EACxC8zN,EAAAA,GAAAA,KAAC/e,GAAK,CAACvoK,KAAK,OAAO9tH,SAASo1S,EAAAA,GAAAA,KAACutC,GAAI,OACjCvtC,EAAAA,GAAAA,KAAC/e,GAAK,CAACvoK,KAAK,UAAU9tH,SAASo1S,EAAAA,GAAAA,KAACi1C,GAAe,OAC/Cj1C,EAAAA,GAAAA,KAAC/e,GAAK,CAACvoK,KAAK,yCAAyC9tH,SAASo1S,EAAAA,GAAAA,KAACw8C,GAAkB,OACjFx8C,EAAAA,GAAAA,KAAC/e,GAAK,CAACvoK,KAAK,WAAW9tH,SAASo1S,EAAAA,GAAAA,KAACu5C,GAAQ,UAG3Cv5C,EAAAA,GAAAA,KAAC/e,GAAK,CAACvoK,KAAK,UAAU9tH,SAASo1S,EAAAA,GAAAA,KAACqvC,GAAc,OAC9CrvC,EAAAA,GAAAA,KAAC/e,GAAK,CAACvoK,KAAK,wBAAwB9tH,SAASo1S,EAAAA,GAAAA,KAACkzC,GAAiB,OAC/DlzC,EAAAA,GAAAA,KAAC/e,GAAK,CAACvoK,KAAK,OAAO9tH,SAASo1S,EAAAA,GAAAA,KAAC84C,GAAQ,OACrC94C,EAAAA,GAAAA,KAAC/e,GAAK,CAACvoK,KAAK,gBAAgB9tH,SAASo1S,EAAAA,GAAAA,KAAC+4C,GAAiB,OACvD/4C,EAAAA,GAAAA,KAAC/e,GAAK,CAACvoK,KAAK,kBAAkB9tH,SAASo1S,EAAAA,GAAAA,KAACg5C,GAAsB,OAC9Dh5C,EAAAA,GAAAA,KAAC/e,GAAK,CAACvoK,KAAK,UAAU9tH,SAASo1S,EAAAA,GAAAA,KAACm6C,GAAW,OAC3Cn6C,EAAAA,GAAAA,KAAC/e,GAAK,CAACvoK,KAAK,SAAS9tH,SAASo1S,EAAAA,GAAAA,KAACm7C,GAAY,OAC3Cn7C,EAAAA,GAAAA,KAAC/e,GAAK,CAACvoK,KAAK,YAAY9tH,SAASo1S,EAAAA,GAAAA,KAACu8C,GAAgB,YAO5D,ECrDA,GAZwBE,IAClBA,GAAeA,aAAuB51V,UACxC,6BAAqB+iG,MAAK9nG,IAAkD,IAAjD,OAAE46V,EAAM,OAAEC,EAAM,OAAEC,EAAM,OAAEC,EAAM,QAAEC,GAASh7V,EACpE46V,EAAOD,GACPE,EAAOF,GACPG,EAAOH,GACPI,EAAOJ,GACPK,EAAQL,EAAY,GAExB,ECFWv6D,EAAAA,WAAoBthN,SAAShrE,eAAe,SACpD8zE,QACHs2N,EAAAA,GAAAA,KAACpkB,EAAAA,WAAgB,CAAA1vM,UACf8zN,EAAAA,GAAAA,KAAC+8C,GAAG,OAORC","sources":["../node_modules/@videojs/xhr/lib/http-handler.js","../node_modules/@videojs/xhr/lib/index.js","../node_modules/@videojs/xhr/lib/interceptors.js","../node_modules/@videojs/xhr/lib/retry.js","../node_modules/@xmldom/xmldom/lib/conventions.js","../node_modules/@xmldom/xmldom/lib/dom-parser.js","../node_modules/@xmldom/xmldom/lib/dom.js","../node_modules/@xmldom/xmldom/lib/entities.js","../node_modules/@xmldom/xmldom/lib/index.js","../node_modules/@xmldom/xmldom/lib/sax.js","../node_modules/global/document.js","../node_modules/global/window.js","../node_modules/is-function/index.js","../node_modules/mux.js/lib/tools/parse-sidx.js","../node_modules/mux.js/lib/utils/clock.js","../node_modules/mux.js/lib/utils/numbers.js","../node_modules/prop-types/factoryWithThrowingShims.js","../node_modules/prop-types/index.js","../node_modules/prop-types/lib/ReactPropTypesSecret.js","../node_modules/react-dom/cjs/react-dom.production.min.js","../node_modules/react-dom/client.js","../node_modules/react-dom/index.js","../node_modules/react-phone-input-2/lib/lib.js","../node_modules/react/cjs/react-jsx-runtime.production.min.js","../node_modules/react/cjs/react.production.min.js","../node_modules/react/index.js","../node_modules/react/jsx-runtime.js","../node_modules/scheduler/cjs/scheduler.production.min.js","../node_modules/scheduler/index.js","../node_modules/url-toolkit/src/url-toolkit.js","../node_modules/@babel/runtime/helpers/esm/extends.js","../node_modules/@videojs/vhs-utils/es/resolve-url.js","../node_modules/m3u8-parser/node_modules/@videojs/vhs-utils/es/stream.js","../node_modules/m3u8-parser/node_modules/@videojs/vhs-utils/es/decode-b64-to-uint8-array.js","../node_modules/m3u8-parser/dist/m3u8-parser.es.js","../node_modules/@videojs/vhs-utils/es/codecs.js","../node_modules/@videojs/vhs-utils/es/media-types.js","../node_modules/@videojs/vhs-utils/es/byte-helpers.js","../node_modules/@videojs/vhs-utils/es/decode-b64-to-uint8-array.js","../node_modules/mpd-parser/dist/mpd-parser.es.js","../node_modules/@videojs/vhs-utils/es/media-groups.js","../node_modules/@videojs/vhs-utils/es/mp4-helpers.js","../node_modules/@videojs/vhs-utils/es/id3-helpers.js","../node_modules/@videojs/vhs-utils/es/opus-helpers.js","../node_modules/@videojs/vhs-utils/es/ebml-helpers.js","../node_modules/@videojs/vhs-utils/es/nal-helpers.js","../node_modules/@videojs/vhs-utils/es/containers.js","../node_modules/video.js/dist/video.es.js","../node_modules/videojs-markers/dist/videojs-markers.js","../node_modules/videojs-vtt.js/lib/browser-index.js","../node_modules/videojs-vtt.js/lib/vtt.js","../node_modules/videojs-vtt.js/lib/vttcue.js","../node_modules/videojs-vtt.js/lib/vttregion.js","../node_modules/@babel/runtime/helpers/extends.js","../webpack/bootstrap","../webpack/runtime/compat get default export","../webpack/runtime/create fake namespace object","../webpack/runtime/define property getters","../webpack/runtime/ensure chunk","../webpack/runtime/get javascript chunk filename","../webpack/runtime/get mini-css chunk filename","../webpack/runtime/global","../webpack/runtime/hasOwnProperty shorthand","../webpack/runtime/load script","../webpack/runtime/make namespace object","../webpack/runtime/publicPath","../webpack/runtime/jsonp chunk loading","../node_modules/@remix-run/router/history.ts","../node_modules/@remix-run/router/utils.ts","../node_modules/@remix-run/router/router.ts","../node_modules/react-router/lib/context.ts","../node_modules/react-router/lib/hooks.tsx","../node_modules/react-router/lib/components.tsx","../node_modules/react-router-dom/dom.ts","../node_modules/react-router-dom/index.tsx","../node_modules/axios/lib/helpers/bind.js","../node_modules/axios/lib/utils.js","../node_modules/axios/lib/core/AxiosError.js","../node_modules/axios/lib/helpers/toFormData.js","../node_modules/axios/lib/helpers/AxiosURLSearchParams.js","../node_modules/axios/lib/helpers/buildURL.js","../node_modules/axios/lib/core/InterceptorManager.js","../node_modules/axios/lib/defaults/transitional.js","../node_modules/axios/lib/platform/browser/index.js","../node_modules/axios/lib/platform/browser/classes/URLSearchParams.js","../node_modules/axios/lib/platform/browser/classes/FormData.js","../node_modules/axios/lib/platform/browser/classes/Blob.js","../node_modules/axios/lib/platform/common/utils.js","../node_modules/axios/lib/platform/index.js","../node_modules/axios/lib/helpers/formDataToJSON.js","../node_modules/axios/lib/defaults/index.js","../node_modules/axios/lib/helpers/toURLEncodedForm.js","../node_modules/axios/lib/helpers/parseHeaders.js","../node_modules/axios/lib/core/AxiosHeaders.js","../node_modules/axios/lib/core/transformData.js","../node_modules/axios/lib/cancel/isCancel.js","../node_modules/axios/lib/cancel/CanceledError.js","../node_modules/axios/lib/core/settle.js","../node_modules/axios/lib/helpers/speedometer.js","../node_modules/axios/lib/helpers/throttle.js","../node_modules/axios/lib/helpers/progressEventReducer.js","../node_modules/axios/lib/helpers/isURLSameOrigin.js","../node_modules/axios/lib/helpers/cookies.js","../node_modules/axios/lib/core/buildFullPath.js","../node_modules/axios/lib/helpers/isAbsoluteURL.js","../node_modules/axios/lib/helpers/combineURLs.js","../node_modules/axios/lib/core/mergeConfig.js","../node_modules/axios/lib/helpers/resolveConfig.js","../node_modules/axios/lib/adapters/xhr.js","../node_modules/axios/lib/helpers/parseProtocol.js","../node_modules/axios/lib/helpers/composeSignals.js","../node_modules/axios/lib/helpers/trackStream.js","../node_modules/axios/lib/adapters/fetch.js","../node_modules/axios/lib/adapters/adapters.js","../node_modules/axios/lib/helpers/null.js","../node_modules/axios/lib/core/dispatchRequest.js","../node_modules/axios/lib/env/data.js","../node_modules/axios/lib/helpers/validator.js","../node_modules/axios/lib/core/Axios.js","../node_modules/axios/lib/cancel/CancelToken.js","../node_modules/axios/lib/helpers/HttpStatusCode.js","../node_modules/axios/lib/axios.js","../node_modules/axios/lib/helpers/spread.js","../node_modules/axios/lib/helpers/isAxiosError.js","components/Loading.js","components/FBLoginButton.js","pages/LoginOrRegisterPage.js","../node_modules/@fortawesome/fontawesome-svg-core/index.mjs","../node_modules/@fortawesome/react-fontawesome/index.es.js","../node_modules/@fortawesome/free-solid-svg-icons/index.mjs","components/Header.js","components/HeroSection.js","components/Features.js","components/Footer.js","components/HomeCourses.js","../node_modules/swiper/shared/ssr-window.esm.mjs","../node_modules/swiper/shared/utils.mjs","../node_modules/swiper/shared/swiper-core.mjs","../node_modules/swiper/shared/update-swiper.mjs","../node_modules/swiper/swiper-react.mjs","../node_modules/swiper/shared/update-on-virtual-data.mjs","../node_modules/swiper/shared/classes-to-selector.mjs","../node_modules/swiper/modules/pagination.mjs","../node_modules/swiper/shared/create-element-if-not-defined.mjs","../node_modules/swiper/modules/autoplay.mjs","components/UserTestimonials.js","pages/Home.js","pages/LoginPage.js","pages/RegisterPage.js","components/LPHeader.js","pages/LandingPage.js","components/PrivateRoute.js","components/PublicRoute.js","components/CourseCard.js","components/AllCourses.js","pages/AllCoursesPage.js","components/VideoJS.js","components/CourseReviewForm.js","components/CourseReviewsList.js","components/CourseDetails.js","pages/CourseDetailsPage.js","components/CourseSections.js","pages/CourseSectionPage.js","components/UpdateMobile.js","components/UpdatePassword.js","components/UserCourses.js","pages/UserProfilePage.js","components/modal/LoginForm.js","components/modal/RegisterForm.js","components/modal/LoginRegisterModal.js","components/modal/Alert.js","components/Cart.js","pages/Cartpage.js","pages/PrivacyPolicyPage.js","pages/TermsAndConditionsPage.js","pages/ForgotPasswordPage.js","pages/ResetPasswordPage.js","components/Payments.js","pages/AboutUsPage.js","components/Campaigns.js","components/CourseRecommendation.js","pages/CampaignPage.js","hooks/useCheckLoginExpiration.js","components/workshops/WorkshopCard.js","components/workshops/AllWorkshops.js","pages/AllWorkshopsPage.js","App.js","reportWebVitals.js","index.js"],"sourcesContent":["\"use strict\";\n\nvar window = require('global/window');\n\nvar httpResponseHandler = function httpResponseHandler(callback, decodeResponseBody) {\n if (decodeResponseBody === void 0) {\n decodeResponseBody = false;\n }\n\n return function (err, response, responseBody) {\n // if the XHR failed, return that error\n if (err) {\n callback(err);\n return;\n } // if the HTTP status code is 4xx or 5xx, the request also failed\n\n\n if (response.statusCode >= 400 && response.statusCode <= 599) {\n var cause = responseBody;\n\n if (decodeResponseBody) {\n if (window.TextDecoder) {\n var charset = getCharset(response.headers && response.headers['content-type']);\n\n try {\n cause = new TextDecoder(charset).decode(responseBody);\n } catch (e) {}\n } else {\n cause = String.fromCharCode.apply(null, new Uint8Array(responseBody));\n }\n }\n\n callback({\n cause: cause\n });\n return;\n } // otherwise, request succeeded\n\n\n callback(null, responseBody);\n };\n};\n\nfunction getCharset(contentTypeHeader) {\n if (contentTypeHeader === void 0) {\n contentTypeHeader = '';\n }\n\n return contentTypeHeader.toLowerCase().split(';').reduce(function (charset, contentType) {\n var _contentType$split = contentType.split('='),\n type = _contentType$split[0],\n value = _contentType$split[1];\n\n if (type.trim() === 'charset') {\n return value.trim();\n }\n\n return charset;\n }, 'utf-8');\n}\n\nmodule.exports = httpResponseHandler;","\"use strict\";\n\nvar window = require(\"global/window\");\n\nvar _extends = require(\"@babel/runtime/helpers/extends\");\n\nvar isFunction = require('is-function');\n\nvar InterceptorsStorage = require('./interceptors.js');\n\nvar RetryManager = require(\"./retry.js\");\n\ncreateXHR.httpHandler = require('./http-handler.js');\ncreateXHR.requestInterceptorsStorage = new InterceptorsStorage();\ncreateXHR.responseInterceptorsStorage = new InterceptorsStorage();\ncreateXHR.retryManager = new RetryManager();\n/**\n * @license\n * slighly modified parse-headers 2.0.2 \n * Copyright (c) 2014 David Björklund\n * Available under the MIT license\n * \n */\n\nvar parseHeaders = function parseHeaders(headers) {\n var result = {};\n\n if (!headers) {\n return result;\n }\n\n headers.trim().split('\\n').forEach(function (row) {\n var index = row.indexOf(':');\n var key = row.slice(0, index).trim().toLowerCase();\n var value = row.slice(index + 1).trim();\n\n if (typeof result[key] === 'undefined') {\n result[key] = value;\n } else if (Array.isArray(result[key])) {\n result[key].push(value);\n } else {\n result[key] = [result[key], value];\n }\n });\n return result;\n};\n\nmodule.exports = createXHR; // Allow use of default import syntax in TypeScript\n\nmodule.exports.default = createXHR;\ncreateXHR.XMLHttpRequest = window.XMLHttpRequest || noop;\ncreateXHR.XDomainRequest = \"withCredentials\" in new createXHR.XMLHttpRequest() ? createXHR.XMLHttpRequest : window.XDomainRequest;\nforEachArray([\"get\", \"put\", \"post\", \"patch\", \"head\", \"delete\"], function (method) {\n createXHR[method === \"delete\" ? \"del\" : method] = function (uri, options, callback) {\n options = initParams(uri, options, callback);\n options.method = method.toUpperCase();\n return _createXHR(options);\n };\n});\n\nfunction forEachArray(array, iterator) {\n for (var i = 0; i < array.length; i++) {\n iterator(array[i]);\n }\n}\n\nfunction isEmpty(obj) {\n for (var i in obj) {\n if (obj.hasOwnProperty(i)) return false;\n }\n\n return true;\n}\n\nfunction initParams(uri, options, callback) {\n var params = uri;\n\n if (isFunction(options)) {\n callback = options;\n\n if (typeof uri === \"string\") {\n params = {\n uri: uri\n };\n }\n } else {\n params = _extends({}, options, {\n uri: uri\n });\n }\n\n params.callback = callback;\n return params;\n}\n\nfunction createXHR(uri, options, callback) {\n options = initParams(uri, options, callback);\n return _createXHR(options);\n}\n\nfunction _createXHR(options) {\n if (typeof options.callback === \"undefined\") {\n throw new Error(\"callback argument missing\");\n } // call all registered request interceptors for a given request type:\n\n\n if (options.requestType && createXHR.requestInterceptorsStorage.getIsEnabled()) {\n var requestInterceptorPayload = {\n uri: options.uri || options.url,\n headers: options.headers || {},\n body: options.body,\n metadata: options.metadata || {},\n retry: options.retry,\n timeout: options.timeout\n };\n var updatedPayload = createXHR.requestInterceptorsStorage.execute(options.requestType, requestInterceptorPayload);\n options.uri = updatedPayload.uri;\n options.headers = updatedPayload.headers;\n options.body = updatedPayload.body;\n options.metadata = updatedPayload.metadata;\n options.retry = updatedPayload.retry;\n options.timeout = updatedPayload.timeout;\n }\n\n var called = false;\n\n var callback = function cbOnce(err, response, body) {\n if (!called) {\n called = true;\n options.callback(err, response, body);\n }\n };\n\n function readystatechange() {\n // do not call load 2 times when response interceptors are enabled\n // why do we even need this 2nd load?\n if (xhr.readyState === 4 && !createXHR.responseInterceptorsStorage.getIsEnabled()) {\n setTimeout(loadFunc, 0);\n }\n }\n\n function getBody() {\n // Chrome with requestType=blob throws errors arround when even testing access to responseText\n var body = undefined;\n\n if (xhr.response) {\n body = xhr.response;\n } else {\n body = xhr.responseText || getXml(xhr);\n }\n\n if (isJson) {\n try {\n body = JSON.parse(body);\n } catch (e) {}\n }\n\n return body;\n }\n\n function errorFunc(evt) {\n clearTimeout(timeoutTimer);\n clearTimeout(options.retryTimeout);\n\n if (!(evt instanceof Error)) {\n evt = new Error(\"\" + (evt || \"Unknown XMLHttpRequest Error\"));\n }\n\n evt.statusCode = 0; // we would like to retry on error:\n\n if (!aborted && createXHR.retryManager.getIsEnabled() && options.retry && options.retry.shouldRetry()) {\n options.retryTimeout = setTimeout(function () {\n options.retry.moveToNextAttempt(); // we want to re-use the same options and the same xhr object:\n\n options.xhr = xhr;\n\n _createXHR(options);\n }, options.retry.getCurrentFuzzedDelay());\n return;\n } // call all registered response interceptors for a given request type:\n\n\n if (options.requestType && createXHR.responseInterceptorsStorage.getIsEnabled()) {\n var responseInterceptorPayload = {\n headers: failureResponse.headers || {},\n body: failureResponse.body,\n responseUrl: xhr.responseURL,\n responseType: xhr.responseType\n };\n\n var _updatedPayload = createXHR.responseInterceptorsStorage.execute(options.requestType, responseInterceptorPayload);\n\n failureResponse.body = _updatedPayload.body;\n failureResponse.headers = _updatedPayload.headers;\n }\n\n return callback(evt, failureResponse);\n } // will load the data & process the response in a special response object\n\n\n function loadFunc() {\n if (aborted) return;\n var status;\n clearTimeout(timeoutTimer);\n clearTimeout(options.retryTimeout);\n\n if (options.useXDR && xhr.status === undefined) {\n //IE8 CORS GET successful response doesn't have a status field, but body is fine\n status = 200;\n } else {\n status = xhr.status === 1223 ? 204 : xhr.status;\n }\n\n var response = failureResponse;\n var err = null;\n\n if (status !== 0) {\n response = {\n body: getBody(),\n statusCode: status,\n method: method,\n headers: {},\n url: uri,\n rawRequest: xhr\n };\n\n if (xhr.getAllResponseHeaders) {\n //remember xhr can in fact be XDR for CORS in IE\n response.headers = parseHeaders(xhr.getAllResponseHeaders());\n }\n } else {\n err = new Error(\"Internal XMLHttpRequest Error\");\n } // call all registered response interceptors for a given request type:\n\n\n if (options.requestType && createXHR.responseInterceptorsStorage.getIsEnabled()) {\n var responseInterceptorPayload = {\n headers: response.headers || {},\n body: response.body,\n responseUrl: xhr.responseURL,\n responseType: xhr.responseType\n };\n\n var _updatedPayload2 = createXHR.responseInterceptorsStorage.execute(options.requestType, responseInterceptorPayload);\n\n response.body = _updatedPayload2.body;\n response.headers = _updatedPayload2.headers;\n }\n\n return callback(err, response, response.body);\n }\n\n var xhr = options.xhr || null;\n\n if (!xhr) {\n if (options.cors || options.useXDR) {\n xhr = new createXHR.XDomainRequest();\n } else {\n xhr = new createXHR.XMLHttpRequest();\n }\n }\n\n var key;\n var aborted;\n var uri = xhr.url = options.uri || options.url;\n var method = xhr.method = options.method || \"GET\";\n var body = options.body || options.data;\n var headers = xhr.headers = options.headers || {};\n var sync = !!options.sync;\n var isJson = false;\n var timeoutTimer;\n var failureResponse = {\n body: undefined,\n headers: {},\n statusCode: 0,\n method: method,\n url: uri,\n rawRequest: xhr\n };\n\n if (\"json\" in options && options.json !== false) {\n isJson = true;\n headers[\"accept\"] || headers[\"Accept\"] || (headers[\"Accept\"] = \"application/json\"); //Don't override existing accept header declared by user\n\n if (method !== \"GET\" && method !== \"HEAD\") {\n headers[\"content-type\"] || headers[\"Content-Type\"] || (headers[\"Content-Type\"] = \"application/json\"); //Don't override existing accept header declared by user\n\n body = JSON.stringify(options.json === true ? body : options.json);\n }\n }\n\n xhr.onreadystatechange = readystatechange;\n xhr.onload = loadFunc;\n xhr.onerror = errorFunc; // IE9 must have onprogress be set to a unique function.\n\n xhr.onprogress = function () {// IE must die\n };\n\n xhr.onabort = function () {\n aborted = true;\n clearTimeout(options.retryTimeout);\n };\n\n xhr.ontimeout = errorFunc;\n xhr.open(method, uri, !sync, options.username, options.password); //has to be after open\n\n if (!sync) {\n xhr.withCredentials = !!options.withCredentials;\n } // Cannot set timeout with sync request\n // not setting timeout on the xhr object, because of old webkits etc. not handling that correctly\n // both npm's request and jquery 1.x use this kind of timeout, so this is being consistent\n\n\n if (!sync && options.timeout > 0) {\n timeoutTimer = setTimeout(function () {\n if (aborted) return;\n aborted = true; //IE9 may still call readystatechange\n\n xhr.abort(\"timeout\");\n var e = new Error(\"XMLHttpRequest timeout\");\n e.code = \"ETIMEDOUT\";\n errorFunc(e);\n }, options.timeout);\n }\n\n if (xhr.setRequestHeader) {\n for (key in headers) {\n if (headers.hasOwnProperty(key)) {\n xhr.setRequestHeader(key, headers[key]);\n }\n }\n } else if (options.headers && !isEmpty(options.headers)) {\n throw new Error(\"Headers cannot be set on an XDomainRequest object\");\n }\n\n if (\"responseType\" in options) {\n xhr.responseType = options.responseType;\n }\n\n if (\"beforeSend\" in options && typeof options.beforeSend === \"function\") {\n options.beforeSend(xhr);\n } // Microsoft Edge browser sends \"undefined\" when send is called with undefined value.\n // XMLHttpRequest spec says to pass null as body to indicate no body\n // See https://github.com/naugtur/xhr/issues/100.\n\n\n xhr.send(body || null);\n return xhr;\n}\n\nfunction getXml(xhr) {\n // xhr.responseXML will throw Exception \"InvalidStateError\" or \"DOMException\"\n // See https://developer.mozilla.org/en-US/docs/Web/API/XMLHttpRequest/responseXML.\n try {\n if (xhr.responseType === \"document\") {\n return xhr.responseXML;\n }\n\n var firefoxBugTakenEffect = xhr.responseXML && xhr.responseXML.documentElement.nodeName === \"parsererror\";\n\n if (xhr.responseType === \"\" && !firefoxBugTakenEffect) {\n return xhr.responseXML;\n }\n } catch (e) {}\n\n return null;\n}\n\nfunction noop() {}","\"use strict\";\n\nfunction _createForOfIteratorHelperLoose(o, allowArrayLike) { var it = typeof Symbol !== \"undefined\" && o[Symbol.iterator] || o[\"@@iterator\"]; if (it) return (it = it.call(o)).next.bind(it); if (Array.isArray(o) || (it = _unsupportedIterableToArray(o)) || allowArrayLike && o && typeof o.length === \"number\") { if (it) o = it; var i = 0; return function () { if (i >= o.length) return { done: true }; return { done: false, value: o[i++] }; }; } throw new TypeError(\"Invalid attempt to iterate non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\"); }\n\nfunction _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === \"string\") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === \"Object\" && o.constructor) n = o.constructor.name; if (n === \"Map\" || n === \"Set\") return Array.from(o); if (n === \"Arguments\" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); }\n\nfunction _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) { arr2[i] = arr[i]; } return arr2; }\n\nvar InterceptorsStorage = /*#__PURE__*/function () {\n function InterceptorsStorage() {\n this.typeToInterceptorsMap_ = new Map();\n this.enabled_ = false;\n }\n\n var _proto = InterceptorsStorage.prototype;\n\n _proto.getIsEnabled = function getIsEnabled() {\n return this.enabled_;\n };\n\n _proto.enable = function enable() {\n this.enabled_ = true;\n };\n\n _proto.disable = function disable() {\n this.enabled_ = false;\n };\n\n _proto.reset = function reset() {\n this.typeToInterceptorsMap_ = new Map();\n this.enabled_ = false;\n };\n\n _proto.addInterceptor = function addInterceptor(type, interceptor) {\n if (!this.typeToInterceptorsMap_.has(type)) {\n this.typeToInterceptorsMap_.set(type, new Set());\n }\n\n var interceptorsSet = this.typeToInterceptorsMap_.get(type);\n\n if (interceptorsSet.has(interceptor)) {\n // already have this interceptor\n return false;\n }\n\n interceptorsSet.add(interceptor);\n return true;\n };\n\n _proto.removeInterceptor = function removeInterceptor(type, interceptor) {\n var interceptorsSet = this.typeToInterceptorsMap_.get(type);\n\n if (interceptorsSet && interceptorsSet.has(interceptor)) {\n interceptorsSet.delete(interceptor);\n return true;\n }\n\n return false;\n };\n\n _proto.clearInterceptorsByType = function clearInterceptorsByType(type) {\n var interceptorsSet = this.typeToInterceptorsMap_.get(type);\n\n if (!interceptorsSet) {\n return false;\n }\n\n this.typeToInterceptorsMap_.delete(type);\n this.typeToInterceptorsMap_.set(type, new Set());\n return true;\n };\n\n _proto.clear = function clear() {\n if (!this.typeToInterceptorsMap_.size) {\n return false;\n }\n\n this.typeToInterceptorsMap_ = new Map();\n return true;\n };\n\n _proto.getForType = function getForType(type) {\n return this.typeToInterceptorsMap_.get(type) || new Set();\n };\n\n _proto.execute = function execute(type, payload) {\n var interceptors = this.getForType(type);\n\n for (var _iterator = _createForOfIteratorHelperLoose(interceptors), _step; !(_step = _iterator()).done;) {\n var interceptor = _step.value;\n\n try {\n payload = interceptor(payload);\n } catch (e) {//ignore\n }\n }\n\n return payload;\n };\n\n return InterceptorsStorage;\n}();\n\nmodule.exports = InterceptorsStorage;","\"use strict\";\n\nvar RetryManager = /*#__PURE__*/function () {\n function RetryManager() {\n this.maxAttempts_ = 1;\n this.delayFactor_ = 0.1;\n this.fuzzFactor_ = 0.1;\n this.initialDelay_ = 1000;\n this.enabled_ = false;\n }\n\n var _proto = RetryManager.prototype;\n\n _proto.getIsEnabled = function getIsEnabled() {\n return this.enabled_;\n };\n\n _proto.enable = function enable() {\n this.enabled_ = true;\n };\n\n _proto.disable = function disable() {\n this.enabled_ = false;\n };\n\n _proto.reset = function reset() {\n this.maxAttempts_ = 1;\n this.delayFactor_ = 0.1;\n this.fuzzFactor_ = 0.1;\n this.initialDelay_ = 1000;\n this.enabled_ = false;\n };\n\n _proto.getMaxAttempts = function getMaxAttempts() {\n return this.maxAttempts_;\n };\n\n _proto.setMaxAttempts = function setMaxAttempts(maxAttempts) {\n this.maxAttempts_ = maxAttempts;\n };\n\n _proto.getDelayFactor = function getDelayFactor() {\n return this.delayFactor_;\n };\n\n _proto.setDelayFactor = function setDelayFactor(delayFactor) {\n this.delayFactor_ = delayFactor;\n };\n\n _proto.getFuzzFactor = function getFuzzFactor() {\n return this.fuzzFactor_;\n };\n\n _proto.setFuzzFactor = function setFuzzFactor(fuzzFactor) {\n this.fuzzFactor_ = fuzzFactor;\n };\n\n _proto.getInitialDelay = function getInitialDelay() {\n return this.initialDelay_;\n };\n\n _proto.setInitialDelay = function setInitialDelay(initialDelay) {\n this.initialDelay_ = initialDelay;\n };\n\n _proto.createRetry = function createRetry(_temp) {\n var _ref = _temp === void 0 ? {} : _temp,\n maxAttempts = _ref.maxAttempts,\n delayFactor = _ref.delayFactor,\n fuzzFactor = _ref.fuzzFactor,\n initialDelay = _ref.initialDelay;\n\n return new Retry({\n maxAttempts: maxAttempts || this.maxAttempts_,\n delayFactor: delayFactor || this.delayFactor_,\n fuzzFactor: fuzzFactor || this.fuzzFactor_,\n initialDelay: initialDelay || this.initialDelay_\n });\n };\n\n return RetryManager;\n}();\n\nvar Retry = /*#__PURE__*/function () {\n function Retry(options) {\n this.maxAttempts_ = options.maxAttempts;\n this.delayFactor_ = options.delayFactor;\n this.fuzzFactor_ = options.fuzzFactor;\n this.currentDelay_ = options.initialDelay;\n this.currentAttempt_ = 1;\n }\n\n var _proto2 = Retry.prototype;\n\n _proto2.moveToNextAttempt = function moveToNextAttempt() {\n this.currentAttempt_++;\n var delayDelta = this.currentDelay_ * this.delayFactor_;\n this.currentDelay_ = this.currentDelay_ + delayDelta;\n };\n\n _proto2.shouldRetry = function shouldRetry() {\n return this.currentAttempt_ < this.maxAttempts_;\n };\n\n _proto2.getCurrentDelay = function getCurrentDelay() {\n return this.currentDelay_;\n };\n\n _proto2.getCurrentMinPossibleDelay = function getCurrentMinPossibleDelay() {\n return (1 - this.fuzzFactor_) * this.currentDelay_;\n };\n\n _proto2.getCurrentMaxPossibleDelay = function getCurrentMaxPossibleDelay() {\n return (1 + this.fuzzFactor_) * this.currentDelay_;\n }\n /**\n * For example fuzzFactor is 0.1\n * This means ±10% deviation\n * So if we have delay as 1000\n * This function can generate any value from 900 to 1100\n */\n ;\n\n _proto2.getCurrentFuzzedDelay = function getCurrentFuzzedDelay() {\n var lowValue = this.getCurrentMinPossibleDelay();\n var highValue = this.getCurrentMaxPossibleDelay();\n return lowValue + Math.random() * (highValue - lowValue);\n };\n\n return Retry;\n}();\n\nmodule.exports = RetryManager;","'use strict'\n\n/**\n * Ponyfill for `Array.prototype.find` which is only available in ES6 runtimes.\n *\n * Works with anything that has a `length` property and index access properties, including NodeList.\n *\n * @template {unknown} T\n * @param {Array | ({length:number, [number]: T})} list\n * @param {function (item: T, index: number, list:Array | ({length:number, [number]: T})):boolean} predicate\n * @param {Partial>?} ac `Array.prototype` by default,\n * \t\t\t\tallows injecting a custom implementation in tests\n * @returns {T | undefined}\n *\n * @see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/find\n * @see https://tc39.es/ecma262/multipage/indexed-collections.html#sec-array.prototype.find\n */\nfunction find(list, predicate, ac) {\n\tif (ac === undefined) {\n\t\tac = Array.prototype;\n\t}\n\tif (list && typeof ac.find === 'function') {\n\t\treturn ac.find.call(list, predicate);\n\t}\n\tfor (var i = 0; i < list.length; i++) {\n\t\tif (Object.prototype.hasOwnProperty.call(list, i)) {\n\t\t\tvar item = list[i];\n\t\t\tif (predicate.call(undefined, item, i, list)) {\n\t\t\t\treturn item;\n\t\t\t}\n\t\t}\n\t}\n}\n\n/**\n * \"Shallow freezes\" an object to render it immutable.\n * Uses `Object.freeze` if available,\n * otherwise the immutability is only in the type.\n *\n * Is used to create \"enum like\" objects.\n *\n * @template T\n * @param {T} object the object to freeze\n * @param {Pick = Object} oc `Object` by default,\n * \t\t\t\tallows to inject custom object constructor for tests\n * @returns {Readonly}\n *\n * @see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/freeze\n */\nfunction freeze(object, oc) {\n\tif (oc === undefined) {\n\t\toc = Object\n\t}\n\treturn oc && typeof oc.freeze === 'function' ? oc.freeze(object) : object\n}\n\n/**\n * Since we can not rely on `Object.assign` we provide a simplified version\n * that is sufficient for our needs.\n *\n * @param {Object} target\n * @param {Object | null | undefined} source\n *\n * @returns {Object} target\n * @throws TypeError if target is not an object\n *\n * @see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/assign\n * @see https://tc39.es/ecma262/multipage/fundamental-objects.html#sec-object.assign\n */\nfunction assign(target, source) {\n\tif (target === null || typeof target !== 'object') {\n\t\tthrow new TypeError('target is not an object')\n\t}\n\tfor (var key in source) {\n\t\tif (Object.prototype.hasOwnProperty.call(source, key)) {\n\t\t\ttarget[key] = source[key]\n\t\t}\n\t}\n\treturn target\n}\n\n/**\n * All mime types that are allowed as input to `DOMParser.parseFromString`\n *\n * @see https://developer.mozilla.org/en-US/docs/Web/API/DOMParser/parseFromString#Argument02 MDN\n * @see https://html.spec.whatwg.org/multipage/dynamic-markup-insertion.html#domparsersupportedtype WHATWG HTML Spec\n * @see DOMParser.prototype.parseFromString\n */\nvar MIME_TYPE = freeze({\n\t/**\n\t * `text/html`, the only mime type that triggers treating an XML document as HTML.\n\t *\n\t * @see DOMParser.SupportedType.isHTML\n\t * @see https://www.iana.org/assignments/media-types/text/html IANA MimeType registration\n\t * @see https://en.wikipedia.org/wiki/HTML Wikipedia\n\t * @see https://developer.mozilla.org/en-US/docs/Web/API/DOMParser/parseFromString MDN\n\t * @see https://html.spec.whatwg.org/multipage/dynamic-markup-insertion.html#dom-domparser-parsefromstring WHATWG HTML Spec\n\t */\n\tHTML: 'text/html',\n\n\t/**\n\t * Helper method to check a mime type if it indicates an HTML document\n\t *\n\t * @param {string} [value]\n\t * @returns {boolean}\n\t *\n\t * @see https://www.iana.org/assignments/media-types/text/html IANA MimeType registration\n\t * @see https://en.wikipedia.org/wiki/HTML Wikipedia\n\t * @see https://developer.mozilla.org/en-US/docs/Web/API/DOMParser/parseFromString MDN\n\t * @see https://html.spec.whatwg.org/multipage/dynamic-markup-insertion.html#dom-domparser-parsefromstring \t */\n\tisHTML: function (value) {\n\t\treturn value === MIME_TYPE.HTML\n\t},\n\n\t/**\n\t * `application/xml`, the standard mime type for XML documents.\n\t *\n\t * @see https://www.iana.org/assignments/media-types/application/xml IANA MimeType registration\n\t * @see https://tools.ietf.org/html/rfc7303#section-9.1 RFC 7303\n\t * @see https://en.wikipedia.org/wiki/XML_and_MIME Wikipedia\n\t */\n\tXML_APPLICATION: 'application/xml',\n\n\t/**\n\t * `text/html`, an alias for `application/xml`.\n\t *\n\t * @see https://tools.ietf.org/html/rfc7303#section-9.2 RFC 7303\n\t * @see https://www.iana.org/assignments/media-types/text/xml IANA MimeType registration\n\t * @see https://en.wikipedia.org/wiki/XML_and_MIME Wikipedia\n\t */\n\tXML_TEXT: 'text/xml',\n\n\t/**\n\t * `application/xhtml+xml`, indicates an XML document that has the default HTML namespace,\n\t * but is parsed as an XML document.\n\t *\n\t * @see https://www.iana.org/assignments/media-types/application/xhtml+xml IANA MimeType registration\n\t * @see https://dom.spec.whatwg.org/#dom-domimplementation-createdocument WHATWG DOM Spec\n\t * @see https://en.wikipedia.org/wiki/XHTML Wikipedia\n\t */\n\tXML_XHTML_APPLICATION: 'application/xhtml+xml',\n\n\t/**\n\t * `image/svg+xml`,\n\t *\n\t * @see https://www.iana.org/assignments/media-types/image/svg+xml IANA MimeType registration\n\t * @see https://www.w3.org/TR/SVG11/ W3C SVG 1.1\n\t * @see https://en.wikipedia.org/wiki/Scalable_Vector_Graphics Wikipedia\n\t */\n\tXML_SVG_IMAGE: 'image/svg+xml',\n})\n\n/**\n * Namespaces that are used in this code base.\n *\n * @see http://www.w3.org/TR/REC-xml-names\n */\nvar NAMESPACE = freeze({\n\t/**\n\t * The XHTML namespace.\n\t *\n\t * @see http://www.w3.org/1999/xhtml\n\t */\n\tHTML: 'http://www.w3.org/1999/xhtml',\n\n\t/**\n\t * Checks if `uri` equals `NAMESPACE.HTML`.\n\t *\n\t * @param {string} [uri]\n\t *\n\t * @see NAMESPACE.HTML\n\t */\n\tisHTML: function (uri) {\n\t\treturn uri === NAMESPACE.HTML\n\t},\n\n\t/**\n\t * The SVG namespace.\n\t *\n\t * @see http://www.w3.org/2000/svg\n\t */\n\tSVG: 'http://www.w3.org/2000/svg',\n\n\t/**\n\t * The `xml:` namespace.\n\t *\n\t * @see http://www.w3.org/XML/1998/namespace\n\t */\n\tXML: 'http://www.w3.org/XML/1998/namespace',\n\n\t/**\n\t * The `xmlns:` namespace\n\t *\n\t * @see https://www.w3.org/2000/xmlns/\n\t */\n\tXMLNS: 'http://www.w3.org/2000/xmlns/',\n})\n\nexports.assign = assign;\nexports.find = find;\nexports.freeze = freeze;\nexports.MIME_TYPE = MIME_TYPE;\nexports.NAMESPACE = NAMESPACE;\n","var conventions = require(\"./conventions\");\nvar dom = require('./dom')\nvar entities = require('./entities');\nvar sax = require('./sax');\n\nvar DOMImplementation = dom.DOMImplementation;\n\nvar NAMESPACE = conventions.NAMESPACE;\n\nvar ParseError = sax.ParseError;\nvar XMLReader = sax.XMLReader;\n\n/**\n * Normalizes line ending according to https://www.w3.org/TR/xml11/#sec-line-ends:\n *\n * > XML parsed entities are often stored in computer files which,\n * > for editing convenience, are organized into lines.\n * > These lines are typically separated by some combination\n * > of the characters CARRIAGE RETURN (#xD) and LINE FEED (#xA).\n * >\n * > To simplify the tasks of applications, the XML processor must behave\n * > as if it normalized all line breaks in external parsed entities (including the document entity)\n * > on input, before parsing, by translating all of the following to a single #xA character:\n * >\n * > 1. the two-character sequence #xD #xA\n * > 2. the two-character sequence #xD #x85\n * > 3. the single character #x85\n * > 4. the single character #x2028\n * > 5. any #xD character that is not immediately followed by #xA or #x85.\n *\n * @param {string} input\n * @returns {string}\n */\nfunction normalizeLineEndings(input) {\n\treturn input\n\t\t.replace(/\\r[\\n\\u0085]/g, '\\n')\n\t\t.replace(/[\\r\\u0085\\u2028]/g, '\\n')\n}\n\n/**\n * @typedef Locator\n * @property {number} [columnNumber]\n * @property {number} [lineNumber]\n */\n\n/**\n * @typedef DOMParserOptions\n * @property {DOMHandler} [domBuilder]\n * @property {Function} [errorHandler]\n * @property {(string) => string} [normalizeLineEndings] used to replace line endings before parsing\n * \t\t\t\t\t\tdefaults to `normalizeLineEndings`\n * @property {Locator} [locator]\n * @property {Record} [xmlns]\n *\n * @see normalizeLineEndings\n */\n\n/**\n * The DOMParser interface provides the ability to parse XML or HTML source code\n * from a string into a DOM `Document`.\n *\n * _xmldom is different from the spec in that it allows an `options` parameter,\n * to override the default behavior._\n *\n * @param {DOMParserOptions} [options]\n * @constructor\n *\n * @see https://developer.mozilla.org/en-US/docs/Web/API/DOMParser\n * @see https://html.spec.whatwg.org/multipage/dynamic-markup-insertion.html#dom-parsing-and-serialization\n */\nfunction DOMParser(options){\n\tthis.options = options ||{locator:{}};\n}\n\nDOMParser.prototype.parseFromString = function(source,mimeType){\n\tvar options = this.options;\n\tvar sax = new XMLReader();\n\tvar domBuilder = options.domBuilder || new DOMHandler();//contentHandler and LexicalHandler\n\tvar errorHandler = options.errorHandler;\n\tvar locator = options.locator;\n\tvar defaultNSMap = options.xmlns||{};\n\tvar isHTML = /\\/x?html?$/.test(mimeType);//mimeType.toLowerCase().indexOf('html') > -1;\n \tvar entityMap = isHTML ? entities.HTML_ENTITIES : entities.XML_ENTITIES;\n\tif(locator){\n\t\tdomBuilder.setDocumentLocator(locator)\n\t}\n\n\tsax.errorHandler = buildErrorHandler(errorHandler,domBuilder,locator);\n\tsax.domBuilder = options.domBuilder || domBuilder;\n\tif(isHTML){\n\t\tdefaultNSMap[''] = NAMESPACE.HTML;\n\t}\n\tdefaultNSMap.xml = defaultNSMap.xml || NAMESPACE.XML;\n\tvar normalize = options.normalizeLineEndings || normalizeLineEndings;\n\tif (source && typeof source === 'string') {\n\t\tsax.parse(\n\t\t\tnormalize(source),\n\t\t\tdefaultNSMap,\n\t\t\tentityMap\n\t\t)\n\t} else {\n\t\tsax.errorHandler.error('invalid doc source')\n\t}\n\treturn domBuilder.doc;\n}\nfunction buildErrorHandler(errorImpl,domBuilder,locator){\n\tif(!errorImpl){\n\t\tif(domBuilder instanceof DOMHandler){\n\t\t\treturn domBuilder;\n\t\t}\n\t\terrorImpl = domBuilder ;\n\t}\n\tvar errorHandler = {}\n\tvar isCallback = errorImpl instanceof Function;\n\tlocator = locator||{}\n\tfunction build(key){\n\t\tvar fn = errorImpl[key];\n\t\tif(!fn && isCallback){\n\t\t\tfn = errorImpl.length == 2?function(msg){errorImpl(key,msg)}:errorImpl;\n\t\t}\n\t\terrorHandler[key] = fn && function(msg){\n\t\t\tfn('[xmldom '+key+']\\t'+msg+_locator(locator));\n\t\t}||function(){};\n\t}\n\tbuild('warning');\n\tbuild('error');\n\tbuild('fatalError');\n\treturn errorHandler;\n}\n\n//console.log('#\\n\\n\\n\\n\\n\\n\\n####')\n/**\n * +ContentHandler+ErrorHandler\n * +LexicalHandler+EntityResolver2\n * -DeclHandler-DTDHandler\n *\n * DefaultHandler:EntityResolver, DTDHandler, ContentHandler, ErrorHandler\n * DefaultHandler2:DefaultHandler,LexicalHandler, DeclHandler, EntityResolver2\n * @link http://www.saxproject.org/apidoc/org/xml/sax/helpers/DefaultHandler.html\n */\nfunction DOMHandler() {\n this.cdata = false;\n}\nfunction position(locator,node){\n\tnode.lineNumber = locator.lineNumber;\n\tnode.columnNumber = locator.columnNumber;\n}\n/**\n * @see org.xml.sax.ContentHandler#startDocument\n * @link http://www.saxproject.org/apidoc/org/xml/sax/ContentHandler.html\n */\nDOMHandler.prototype = {\n\tstartDocument : function() {\n \tthis.doc = new DOMImplementation().createDocument(null, null, null);\n \tif (this.locator) {\n \tthis.doc.documentURI = this.locator.systemId;\n \t}\n\t},\n\tstartElement:function(namespaceURI, localName, qName, attrs) {\n\t\tvar doc = this.doc;\n\t var el = doc.createElementNS(namespaceURI, qName||localName);\n\t var len = attrs.length;\n\t appendElement(this, el);\n\t this.currentElement = el;\n\n\t\tthis.locator && position(this.locator,el)\n\t for (var i = 0 ; i < len; i++) {\n\t var namespaceURI = attrs.getURI(i);\n\t var value = attrs.getValue(i);\n\t var qName = attrs.getQName(i);\n\t\t\tvar attr = doc.createAttributeNS(namespaceURI, qName);\n\t\t\tthis.locator &&position(attrs.getLocator(i),attr);\n\t\t\tattr.value = attr.nodeValue = value;\n\t\t\tel.setAttributeNode(attr)\n\t }\n\t},\n\tendElement:function(namespaceURI, localName, qName) {\n\t\tvar current = this.currentElement\n\t\tvar tagName = current.tagName;\n\t\tthis.currentElement = current.parentNode;\n\t},\n\tstartPrefixMapping:function(prefix, uri) {\n\t},\n\tendPrefixMapping:function(prefix) {\n\t},\n\tprocessingInstruction:function(target, data) {\n\t var ins = this.doc.createProcessingInstruction(target, data);\n\t this.locator && position(this.locator,ins)\n\t appendElement(this, ins);\n\t},\n\tignorableWhitespace:function(ch, start, length) {\n\t},\n\tcharacters:function(chars, start, length) {\n\t\tchars = _toString.apply(this,arguments)\n\t\t//console.log(chars)\n\t\tif(chars){\n\t\t\tif (this.cdata) {\n\t\t\t\tvar charNode = this.doc.createCDATASection(chars);\n\t\t\t} else {\n\t\t\t\tvar charNode = this.doc.createTextNode(chars);\n\t\t\t}\n\t\t\tif(this.currentElement){\n\t\t\t\tthis.currentElement.appendChild(charNode);\n\t\t\t}else if(/^\\s*$/.test(chars)){\n\t\t\t\tthis.doc.appendChild(charNode);\n\t\t\t\t//process xml\n\t\t\t}\n\t\t\tthis.locator && position(this.locator,charNode)\n\t\t}\n\t},\n\tskippedEntity:function(name) {\n\t},\n\tendDocument:function() {\n\t\tthis.doc.normalize();\n\t},\n\tsetDocumentLocator:function (locator) {\n\t if(this.locator = locator){// && !('lineNumber' in locator)){\n\t \tlocator.lineNumber = 0;\n\t }\n\t},\n\t//LexicalHandler\n\tcomment:function(chars, start, length) {\n\t\tchars = _toString.apply(this,arguments)\n\t var comm = this.doc.createComment(chars);\n\t this.locator && position(this.locator,comm)\n\t appendElement(this, comm);\n\t},\n\n\tstartCDATA:function() {\n\t //used in characters() methods\n\t this.cdata = true;\n\t},\n\tendCDATA:function() {\n\t this.cdata = false;\n\t},\n\n\tstartDTD:function(name, publicId, systemId) {\n\t\tvar impl = this.doc.implementation;\n\t if (impl && impl.createDocumentType) {\n\t var dt = impl.createDocumentType(name, publicId, systemId);\n\t this.locator && position(this.locator,dt)\n\t appendElement(this, dt);\n\t\t\t\t\tthis.doc.doctype = dt;\n\t }\n\t},\n\t/**\n\t * @see org.xml.sax.ErrorHandler\n\t * @link http://www.saxproject.org/apidoc/org/xml/sax/ErrorHandler.html\n\t */\n\twarning:function(error) {\n\t\tconsole.warn('[xmldom warning]\\t'+error,_locator(this.locator));\n\t},\n\terror:function(error) {\n\t\tconsole.error('[xmldom error]\\t'+error,_locator(this.locator));\n\t},\n\tfatalError:function(error) {\n\t\tthrow new ParseError(error, this.locator);\n\t}\n}\nfunction _locator(l){\n\tif(l){\n\t\treturn '\\n@'+(l.systemId ||'')+'#[line:'+l.lineNumber+',col:'+l.columnNumber+']'\n\t}\n}\nfunction _toString(chars,start,length){\n\tif(typeof chars == 'string'){\n\t\treturn chars.substr(start,length)\n\t}else{//java sax connect width xmldom on rhino(what about: \"? && !(chars instanceof String)\")\n\t\tif(chars.length >= start+length || start){\n\t\t\treturn new java.lang.String(chars,start,length)+'';\n\t\t}\n\t\treturn chars;\n\t}\n}\n\n/*\n * @link http://www.saxproject.org/apidoc/org/xml/sax/ext/LexicalHandler.html\n * used method of org.xml.sax.ext.LexicalHandler:\n * #comment(chars, start, length)\n * #startCDATA()\n * #endCDATA()\n * #startDTD(name, publicId, systemId)\n *\n *\n * IGNORED method of org.xml.sax.ext.LexicalHandler:\n * #endDTD()\n * #startEntity(name)\n * #endEntity(name)\n *\n *\n * @link http://www.saxproject.org/apidoc/org/xml/sax/ext/DeclHandler.html\n * IGNORED method of org.xml.sax.ext.DeclHandler\n * \t#attributeDecl(eName, aName, type, mode, value)\n * #elementDecl(name, model)\n * #externalEntityDecl(name, publicId, systemId)\n * #internalEntityDecl(name, value)\n * @link http://www.saxproject.org/apidoc/org/xml/sax/ext/EntityResolver2.html\n * IGNORED method of org.xml.sax.EntityResolver2\n * #resolveEntity(String name,String publicId,String baseURI,String systemId)\n * #resolveEntity(publicId, systemId)\n * #getExternalSubset(name, baseURI)\n * @link http://www.saxproject.org/apidoc/org/xml/sax/DTDHandler.html\n * IGNORED method of org.xml.sax.DTDHandler\n * #notationDecl(name, publicId, systemId) {};\n * #unparsedEntityDecl(name, publicId, systemId, notationName) {};\n */\n\"endDTD,startEntity,endEntity,attributeDecl,elementDecl,externalEntityDecl,internalEntityDecl,resolveEntity,getExternalSubset,notationDecl,unparsedEntityDecl\".replace(/\\w+/g,function(key){\n\tDOMHandler.prototype[key] = function(){return null}\n})\n\n/* Private static helpers treated below as private instance methods, so don't need to add these to the public API; we might use a Relator to also get rid of non-standard public properties */\nfunction appendElement (hander,node) {\n if (!hander.currentElement) {\n hander.doc.appendChild(node);\n } else {\n hander.currentElement.appendChild(node);\n }\n}//appendChild and setAttributeNS are preformance key\n\nexports.__DOMHandler = DOMHandler;\nexports.normalizeLineEndings = normalizeLineEndings;\nexports.DOMParser = DOMParser;\n","var conventions = require(\"./conventions\");\n\nvar find = conventions.find;\nvar NAMESPACE = conventions.NAMESPACE;\n\n/**\n * A prerequisite for `[].filter`, to drop elements that are empty\n * @param {string} input\n * @returns {boolean}\n */\nfunction notEmptyString (input) {\n\treturn input !== ''\n}\n/**\n * @see https://infra.spec.whatwg.org/#split-on-ascii-whitespace\n * @see https://infra.spec.whatwg.org/#ascii-whitespace\n *\n * @param {string} input\n * @returns {string[]} (can be empty)\n */\nfunction splitOnASCIIWhitespace(input) {\n\t// U+0009 TAB, U+000A LF, U+000C FF, U+000D CR, U+0020 SPACE\n\treturn input ? input.split(/[\\t\\n\\f\\r ]+/).filter(notEmptyString) : []\n}\n\n/**\n * Adds element as a key to current if it is not already present.\n *\n * @param {Record} current\n * @param {string} element\n * @returns {Record}\n */\nfunction orderedSetReducer (current, element) {\n\tif (!current.hasOwnProperty(element)) {\n\t\tcurrent[element] = true;\n\t}\n\treturn current;\n}\n\n/**\n * @see https://infra.spec.whatwg.org/#ordered-set\n * @param {string} input\n * @returns {string[]}\n */\nfunction toOrderedSet(input) {\n\tif (!input) return [];\n\tvar list = splitOnASCIIWhitespace(input);\n\treturn Object.keys(list.reduce(orderedSetReducer, {}))\n}\n\n/**\n * Uses `list.indexOf` to implement something like `Array.prototype.includes`,\n * which we can not rely on being available.\n *\n * @param {any[]} list\n * @returns {function(any): boolean}\n */\nfunction arrayIncludes (list) {\n\treturn function(element) {\n\t\treturn list && list.indexOf(element) !== -1;\n\t}\n}\n\nfunction copy(src,dest){\n\tfor(var p in src){\n\t\tif (Object.prototype.hasOwnProperty.call(src, p)) {\n\t\t\tdest[p] = src[p];\n\t\t}\n\t}\n}\n\n/**\n^\\w+\\.prototype\\.([_\\w]+)\\s*=\\s*((?:.*\\{\\s*?[\\r\\n][\\s\\S]*?^})|\\S.*?(?=[;\\r\\n]));?\n^\\w+\\.prototype\\.([_\\w]+)\\s*=\\s*(\\S.*?(?=[;\\r\\n]));?\n */\nfunction _extends(Class,Super){\n\tvar pt = Class.prototype;\n\tif(!(pt instanceof Super)){\n\t\tfunction t(){};\n\t\tt.prototype = Super.prototype;\n\t\tt = new t();\n\t\tcopy(pt,t);\n\t\tClass.prototype = pt = t;\n\t}\n\tif(pt.constructor != Class){\n\t\tif(typeof Class != 'function'){\n\t\t\tconsole.error(\"unknown Class:\"+Class)\n\t\t}\n\t\tpt.constructor = Class\n\t}\n}\n\n// Node Types\nvar NodeType = {}\nvar ELEMENT_NODE = NodeType.ELEMENT_NODE = 1;\nvar ATTRIBUTE_NODE = NodeType.ATTRIBUTE_NODE = 2;\nvar TEXT_NODE = NodeType.TEXT_NODE = 3;\nvar CDATA_SECTION_NODE = NodeType.CDATA_SECTION_NODE = 4;\nvar ENTITY_REFERENCE_NODE = NodeType.ENTITY_REFERENCE_NODE = 5;\nvar ENTITY_NODE = NodeType.ENTITY_NODE = 6;\nvar PROCESSING_INSTRUCTION_NODE = NodeType.PROCESSING_INSTRUCTION_NODE = 7;\nvar COMMENT_NODE = NodeType.COMMENT_NODE = 8;\nvar DOCUMENT_NODE = NodeType.DOCUMENT_NODE = 9;\nvar DOCUMENT_TYPE_NODE = NodeType.DOCUMENT_TYPE_NODE = 10;\nvar DOCUMENT_FRAGMENT_NODE = NodeType.DOCUMENT_FRAGMENT_NODE = 11;\nvar NOTATION_NODE = NodeType.NOTATION_NODE = 12;\n\n// ExceptionCode\nvar ExceptionCode = {}\nvar ExceptionMessage = {};\nvar INDEX_SIZE_ERR = ExceptionCode.INDEX_SIZE_ERR = ((ExceptionMessage[1]=\"Index size error\"),1);\nvar DOMSTRING_SIZE_ERR = ExceptionCode.DOMSTRING_SIZE_ERR = ((ExceptionMessage[2]=\"DOMString size error\"),2);\nvar HIERARCHY_REQUEST_ERR = ExceptionCode.HIERARCHY_REQUEST_ERR = ((ExceptionMessage[3]=\"Hierarchy request error\"),3);\nvar WRONG_DOCUMENT_ERR = ExceptionCode.WRONG_DOCUMENT_ERR = ((ExceptionMessage[4]=\"Wrong document\"),4);\nvar INVALID_CHARACTER_ERR = ExceptionCode.INVALID_CHARACTER_ERR = ((ExceptionMessage[5]=\"Invalid character\"),5);\nvar NO_DATA_ALLOWED_ERR = ExceptionCode.NO_DATA_ALLOWED_ERR = ((ExceptionMessage[6]=\"No data allowed\"),6);\nvar NO_MODIFICATION_ALLOWED_ERR = ExceptionCode.NO_MODIFICATION_ALLOWED_ERR = ((ExceptionMessage[7]=\"No modification allowed\"),7);\nvar NOT_FOUND_ERR = ExceptionCode.NOT_FOUND_ERR = ((ExceptionMessage[8]=\"Not found\"),8);\nvar NOT_SUPPORTED_ERR = ExceptionCode.NOT_SUPPORTED_ERR = ((ExceptionMessage[9]=\"Not supported\"),9);\nvar INUSE_ATTRIBUTE_ERR = ExceptionCode.INUSE_ATTRIBUTE_ERR = ((ExceptionMessage[10]=\"Attribute in use\"),10);\n//level2\nvar INVALID_STATE_ERR \t= ExceptionCode.INVALID_STATE_ERR \t= ((ExceptionMessage[11]=\"Invalid state\"),11);\nvar SYNTAX_ERR \t= ExceptionCode.SYNTAX_ERR \t= ((ExceptionMessage[12]=\"Syntax error\"),12);\nvar INVALID_MODIFICATION_ERR \t= ExceptionCode.INVALID_MODIFICATION_ERR \t= ((ExceptionMessage[13]=\"Invalid modification\"),13);\nvar NAMESPACE_ERR \t= ExceptionCode.NAMESPACE_ERR \t= ((ExceptionMessage[14]=\"Invalid namespace\"),14);\nvar INVALID_ACCESS_ERR \t= ExceptionCode.INVALID_ACCESS_ERR \t= ((ExceptionMessage[15]=\"Invalid access\"),15);\n\n/**\n * DOM Level 2\n * Object DOMException\n * @see http://www.w3.org/TR/2000/REC-DOM-Level-2-Core-20001113/ecma-script-binding.html\n * @see http://www.w3.org/TR/REC-DOM-Level-1/ecma-script-language-binding.html\n */\nfunction DOMException(code, message) {\n\tif(message instanceof Error){\n\t\tvar error = message;\n\t}else{\n\t\terror = this;\n\t\tError.call(this, ExceptionMessage[code]);\n\t\tthis.message = ExceptionMessage[code];\n\t\tif(Error.captureStackTrace) Error.captureStackTrace(this, DOMException);\n\t}\n\terror.code = code;\n\tif(message) this.message = this.message + \": \" + message;\n\treturn error;\n};\nDOMException.prototype = Error.prototype;\ncopy(ExceptionCode,DOMException)\n\n/**\n * @see http://www.w3.org/TR/2000/REC-DOM-Level-2-Core-20001113/core.html#ID-536297177\n * The NodeList interface provides the abstraction of an ordered collection of nodes, without defining or constraining how this collection is implemented. NodeList objects in the DOM are live.\n * The items in the NodeList are accessible via an integral index, starting from 0.\n */\nfunction NodeList() {\n};\nNodeList.prototype = {\n\t/**\n\t * The number of nodes in the list. The range of valid child node indices is 0 to length-1 inclusive.\n\t * @standard level1\n\t */\n\tlength:0,\n\t/**\n\t * Returns the indexth item in the collection. If index is greater than or equal to the number of nodes in the list, this returns null.\n\t * @standard level1\n\t * @param index unsigned long\n\t * Index into the collection.\n\t * @return Node\n\t * \tThe node at the indexth position in the NodeList, or null if that is not a valid index.\n\t */\n\titem: function(index) {\n\t\treturn index >= 0 && index < this.length ? this[index] : null;\n\t},\n\ttoString:function(isHTML,nodeFilter){\n\t\tfor(var buf = [], i = 0;i=0){\n\t\tvar lastIndex = list.length-1\n\t\twhile(i0 || key == 'xmlns'){\n//\t\t\treturn null;\n//\t\t}\n\t\t//console.log()\n\t\tvar i = this.length;\n\t\twhile(i--){\n\t\t\tvar attr = this[i];\n\t\t\t//console.log(attr.nodeName,key)\n\t\t\tif(attr.nodeName == key){\n\t\t\t\treturn attr;\n\t\t\t}\n\t\t}\n\t},\n\tsetNamedItem: function(attr) {\n\t\tvar el = attr.ownerElement;\n\t\tif(el && el!=this._ownerElement){\n\t\t\tthrow new DOMException(INUSE_ATTRIBUTE_ERR);\n\t\t}\n\t\tvar oldAttr = this.getNamedItem(attr.nodeName);\n\t\t_addNamedNode(this._ownerElement,this,attr,oldAttr);\n\t\treturn oldAttr;\n\t},\n\t/* returns Node */\n\tsetNamedItemNS: function(attr) {// raises: WRONG_DOCUMENT_ERR,NO_MODIFICATION_ALLOWED_ERR,INUSE_ATTRIBUTE_ERR\n\t\tvar el = attr.ownerElement, oldAttr;\n\t\tif(el && el!=this._ownerElement){\n\t\t\tthrow new DOMException(INUSE_ATTRIBUTE_ERR);\n\t\t}\n\t\toldAttr = this.getNamedItemNS(attr.namespaceURI,attr.localName);\n\t\t_addNamedNode(this._ownerElement,this,attr,oldAttr);\n\t\treturn oldAttr;\n\t},\n\n\t/* returns Node */\n\tremoveNamedItem: function(key) {\n\t\tvar attr = this.getNamedItem(key);\n\t\t_removeNamedNode(this._ownerElement,this,attr);\n\t\treturn attr;\n\n\n\t},// raises: NOT_FOUND_ERR,NO_MODIFICATION_ALLOWED_ERR\n\n\t//for level2\n\tremoveNamedItemNS:function(namespaceURI,localName){\n\t\tvar attr = this.getNamedItemNS(namespaceURI,localName);\n\t\t_removeNamedNode(this._ownerElement,this,attr);\n\t\treturn attr;\n\t},\n\tgetNamedItemNS: function(namespaceURI, localName) {\n\t\tvar i = this.length;\n\t\twhile(i--){\n\t\t\tvar node = this[i];\n\t\t\tif(node.localName == localName && node.namespaceURI == namespaceURI){\n\t\t\t\treturn node;\n\t\t\t}\n\t\t}\n\t\treturn null;\n\t}\n};\n\n/**\n * The DOMImplementation interface represents an object providing methods\n * which are not dependent on any particular document.\n * Such an object is returned by the `Document.implementation` property.\n *\n * __The individual methods describe the differences compared to the specs.__\n *\n * @constructor\n *\n * @see https://developer.mozilla.org/en-US/docs/Web/API/DOMImplementation MDN\n * @see https://www.w3.org/TR/REC-DOM-Level-1/level-one-core.html#ID-102161490 DOM Level 1 Core (Initial)\n * @see https://www.w3.org/TR/DOM-Level-2-Core/core.html#ID-102161490 DOM Level 2 Core\n * @see https://www.w3.org/TR/DOM-Level-3-Core/core.html#ID-102161490 DOM Level 3 Core\n * @see https://dom.spec.whatwg.org/#domimplementation DOM Living Standard\n */\nfunction DOMImplementation() {\n}\n\nDOMImplementation.prototype = {\n\t/**\n\t * The DOMImplementation.hasFeature() method returns a Boolean flag indicating if a given feature is supported.\n\t * The different implementations fairly diverged in what kind of features were reported.\n\t * The latest version of the spec settled to force this method to always return true, where the functionality was accurate and in use.\n\t *\n\t * @deprecated It is deprecated and modern browsers return true in all cases.\n\t *\n\t * @param {string} feature\n\t * @param {string} [version]\n\t * @returns {boolean} always true\n\t *\n\t * @see https://developer.mozilla.org/en-US/docs/Web/API/DOMImplementation/hasFeature MDN\n\t * @see https://www.w3.org/TR/REC-DOM-Level-1/level-one-core.html#ID-5CED94D7 DOM Level 1 Core\n\t * @see https://dom.spec.whatwg.org/#dom-domimplementation-hasfeature DOM Living Standard\n\t */\n\thasFeature: function(feature, version) {\n\t\t\treturn true;\n\t},\n\t/**\n\t * Creates an XML Document object of the specified type with its document element.\n\t *\n\t * __It behaves slightly different from the description in the living standard__:\n\t * - There is no interface/class `XMLDocument`, it returns a `Document` instance.\n\t * - `contentType`, `encoding`, `mode`, `origin`, `url` fields are currently not declared.\n\t * - this implementation is not validating names or qualified names\n\t * (when parsing XML strings, the SAX parser takes care of that)\n\t *\n\t * @param {string|null} namespaceURI\n\t * @param {string} qualifiedName\n\t * @param {DocumentType=null} doctype\n\t * @returns {Document}\n\t *\n\t * @see https://developer.mozilla.org/en-US/docs/Web/API/DOMImplementation/createDocument MDN\n\t * @see https://www.w3.org/TR/DOM-Level-2-Core/core.html#Level-2-Core-DOM-createDocument DOM Level 2 Core (initial)\n\t * @see https://dom.spec.whatwg.org/#dom-domimplementation-createdocument DOM Level 2 Core\n\t *\n\t * @see https://dom.spec.whatwg.org/#validate-and-extract DOM: Validate and extract\n\t * @see https://www.w3.org/TR/xml/#NT-NameStartChar XML Spec: Names\n\t * @see https://www.w3.org/TR/xml-names/#ns-qualnames XML Namespaces: Qualified names\n\t */\n\tcreateDocument: function(namespaceURI, qualifiedName, doctype){\n\t\tvar doc = new Document();\n\t\tdoc.implementation = this;\n\t\tdoc.childNodes = new NodeList();\n\t\tdoc.doctype = doctype || null;\n\t\tif (doctype){\n\t\t\tdoc.appendChild(doctype);\n\t\t}\n\t\tif (qualifiedName){\n\t\t\tvar root = doc.createElementNS(namespaceURI, qualifiedName);\n\t\t\tdoc.appendChild(root);\n\t\t}\n\t\treturn doc;\n\t},\n\t/**\n\t * Returns a doctype, with the given `qualifiedName`, `publicId`, and `systemId`.\n\t *\n\t * __This behavior is slightly different from the in the specs__:\n\t * - this implementation is not validating names or qualified names\n\t * (when parsing XML strings, the SAX parser takes care of that)\n\t *\n\t * @param {string} qualifiedName\n\t * @param {string} [publicId]\n\t * @param {string} [systemId]\n\t * @returns {DocumentType} which can either be used with `DOMImplementation.createDocument` upon document creation\n\t * \t\t\t\t or can be put into the document via methods like `Node.insertBefore()` or `Node.replaceChild()`\n\t *\n\t * @see https://developer.mozilla.org/en-US/docs/Web/API/DOMImplementation/createDocumentType MDN\n\t * @see https://www.w3.org/TR/DOM-Level-2-Core/core.html#Level-2-Core-DOM-createDocType DOM Level 2 Core\n\t * @see https://dom.spec.whatwg.org/#dom-domimplementation-createdocumenttype DOM Living Standard\n\t *\n\t * @see https://dom.spec.whatwg.org/#validate-and-extract DOM: Validate and extract\n\t * @see https://www.w3.org/TR/xml/#NT-NameStartChar XML Spec: Names\n\t * @see https://www.w3.org/TR/xml-names/#ns-qualnames XML Namespaces: Qualified names\n\t */\n\tcreateDocumentType: function(qualifiedName, publicId, systemId){\n\t\tvar node = new DocumentType();\n\t\tnode.name = qualifiedName;\n\t\tnode.nodeName = qualifiedName;\n\t\tnode.publicId = publicId || '';\n\t\tnode.systemId = systemId || '';\n\n\t\treturn node;\n\t}\n};\n\n\n/**\n * @see http://www.w3.org/TR/2000/REC-DOM-Level-2-Core-20001113/core.html#ID-1950641247\n */\n\nfunction Node() {\n};\n\nNode.prototype = {\n\tfirstChild : null,\n\tlastChild : null,\n\tpreviousSibling : null,\n\tnextSibling : null,\n\tattributes : null,\n\tparentNode : null,\n\tchildNodes : null,\n\townerDocument : null,\n\tnodeValue : null,\n\tnamespaceURI : null,\n\tprefix : null,\n\tlocalName : null,\n\t// Modified in DOM Level 2:\n\tinsertBefore:function(newChild, refChild){//raises\n\t\treturn _insertBefore(this,newChild,refChild);\n\t},\n\treplaceChild:function(newChild, oldChild){//raises\n\t\t_insertBefore(this, newChild,oldChild, assertPreReplacementValidityInDocument);\n\t\tif(oldChild){\n\t\t\tthis.removeChild(oldChild);\n\t\t}\n\t},\n\tremoveChild:function(oldChild){\n\t\treturn _removeChild(this,oldChild);\n\t},\n\tappendChild:function(newChild){\n\t\treturn this.insertBefore(newChild,null);\n\t},\n\thasChildNodes:function(){\n\t\treturn this.firstChild != null;\n\t},\n\tcloneNode:function(deep){\n\t\treturn cloneNode(this.ownerDocument||this,this,deep);\n\t},\n\t// Modified in DOM Level 2:\n\tnormalize:function(){\n\t\tvar child = this.firstChild;\n\t\twhile(child){\n\t\t\tvar next = child.nextSibling;\n\t\t\tif(next && next.nodeType == TEXT_NODE && child.nodeType == TEXT_NODE){\n\t\t\t\tthis.removeChild(next);\n\t\t\t\tchild.appendData(next.data);\n\t\t\t}else{\n\t\t\t\tchild.normalize();\n\t\t\t\tchild = next;\n\t\t\t}\n\t\t}\n\t},\n \t// Introduced in DOM Level 2:\n\tisSupported:function(feature, version){\n\t\treturn this.ownerDocument.implementation.hasFeature(feature,version);\n\t},\n // Introduced in DOM Level 2:\n hasAttributes:function(){\n \treturn this.attributes.length>0;\n },\n\t/**\n\t * Look up the prefix associated to the given namespace URI, starting from this node.\n\t * **The default namespace declarations are ignored by this method.**\n\t * See Namespace Prefix Lookup for details on the algorithm used by this method.\n\t *\n\t * _Note: The implementation seems to be incomplete when compared to the algorithm described in the specs._\n\t *\n\t * @param {string | null} namespaceURI\n\t * @returns {string | null}\n\t * @see https://www.w3.org/TR/DOM-Level-3-Core/core.html#Node3-lookupNamespacePrefix\n\t * @see https://www.w3.org/TR/DOM-Level-3-Core/namespaces-algorithms.html#lookupNamespacePrefixAlgo\n\t * @see https://dom.spec.whatwg.org/#dom-node-lookupprefix\n\t * @see https://github.com/xmldom/xmldom/issues/322\n\t */\n lookupPrefix:function(namespaceURI){\n \tvar el = this;\n \twhile(el){\n \t\tvar map = el._nsMap;\n \t\t//console.dir(map)\n \t\tif(map){\n \t\t\tfor(var n in map){\n\t\t\t\t\t\tif (Object.prototype.hasOwnProperty.call(map, n) && map[n] === namespaceURI) {\n\t\t\t\t\t\t\treturn n;\n\t\t\t\t\t\t}\n \t\t\t}\n \t\t}\n \t\tel = el.nodeType == ATTRIBUTE_NODE?el.ownerDocument : el.parentNode;\n \t}\n \treturn null;\n },\n // Introduced in DOM Level 3:\n lookupNamespaceURI:function(prefix){\n \tvar el = this;\n \twhile(el){\n \t\tvar map = el._nsMap;\n \t\t//console.dir(map)\n \t\tif(map){\n \t\t\tif(Object.prototype.hasOwnProperty.call(map, prefix)){\n \t\t\t\treturn map[prefix] ;\n \t\t\t}\n \t\t}\n \t\tel = el.nodeType == ATTRIBUTE_NODE?el.ownerDocument : el.parentNode;\n \t}\n \treturn null;\n },\n // Introduced in DOM Level 3:\n isDefaultNamespace:function(namespaceURI){\n \tvar prefix = this.lookupPrefix(namespaceURI);\n \treturn prefix == null;\n }\n};\n\n\nfunction _xmlEncoder(c){\n\treturn c == '<' && '<' ||\n c == '>' && '>' ||\n c == '&' && '&' ||\n c == '\"' && '"' ||\n '&#'+c.charCodeAt()+';'\n}\n\n\ncopy(NodeType,Node);\ncopy(NodeType,Node.prototype);\n\n/**\n * @param callback return true for continue,false for break\n * @return boolean true: break visit;\n */\nfunction _visitNode(node,callback){\n\tif(callback(node)){\n\t\treturn true;\n\t}\n\tif(node = node.firstChild){\n\t\tdo{\n\t\t\tif(_visitNode(node,callback)){return true}\n }while(node=node.nextSibling)\n }\n}\n\n\n\nfunction Document(){\n\tthis.ownerDocument = this;\n}\n\nfunction _onAddAttribute(doc,el,newAttr){\n\tdoc && doc._inc++;\n\tvar ns = newAttr.namespaceURI ;\n\tif(ns === NAMESPACE.XMLNS){\n\t\t//update namespace\n\t\tel._nsMap[newAttr.prefix?newAttr.localName:''] = newAttr.value\n\t}\n}\n\nfunction _onRemoveAttribute(doc,el,newAttr,remove){\n\tdoc && doc._inc++;\n\tvar ns = newAttr.namespaceURI ;\n\tif(ns === NAMESPACE.XMLNS){\n\t\t//update namespace\n\t\tdelete el._nsMap[newAttr.prefix?newAttr.localName:'']\n\t}\n}\n\n/**\n * Updates `el.childNodes`, updating the indexed items and it's `length`.\n * Passing `newChild` means it will be appended.\n * Otherwise it's assumed that an item has been removed,\n * and `el.firstNode` and it's `.nextSibling` are used\n * to walk the current list of child nodes.\n *\n * @param {Document} doc\n * @param {Node} el\n * @param {Node} [newChild]\n * @private\n */\nfunction _onUpdateChild (doc, el, newChild) {\n\tif(doc && doc._inc){\n\t\tdoc._inc++;\n\t\t//update childNodes\n\t\tvar cs = el.childNodes;\n\t\tif (newChild) {\n\t\t\tcs[cs.length++] = newChild;\n\t\t} else {\n\t\t\tvar child = el.firstChild;\n\t\t\tvar i = 0;\n\t\t\twhile (child) {\n\t\t\t\tcs[i++] = child;\n\t\t\t\tchild = child.nextSibling;\n\t\t\t}\n\t\t\tcs.length = i;\n\t\t\tdelete cs[cs.length];\n\t\t}\n\t}\n}\n\n/**\n * Removes the connections between `parentNode` and `child`\n * and any existing `child.previousSibling` or `child.nextSibling`.\n *\n * @see https://github.com/xmldom/xmldom/issues/135\n * @see https://github.com/xmldom/xmldom/issues/145\n *\n * @param {Node} parentNode\n * @param {Node} child\n * @returns {Node} the child that was removed.\n * @private\n */\nfunction _removeChild (parentNode, child) {\n\tvar previous = child.previousSibling;\n\tvar next = child.nextSibling;\n\tif (previous) {\n\t\tprevious.nextSibling = next;\n\t} else {\n\t\tparentNode.firstChild = next;\n\t}\n\tif (next) {\n\t\tnext.previousSibling = previous;\n\t} else {\n\t\tparentNode.lastChild = previous;\n\t}\n\tchild.parentNode = null;\n\tchild.previousSibling = null;\n\tchild.nextSibling = null;\n\t_onUpdateChild(parentNode.ownerDocument, parentNode);\n\treturn child;\n}\n\n/**\n * Returns `true` if `node` can be a parent for insertion.\n * @param {Node} node\n * @returns {boolean}\n */\nfunction hasValidParentNodeType(node) {\n\treturn (\n\t\tnode &&\n\t\t(node.nodeType === Node.DOCUMENT_NODE || node.nodeType === Node.DOCUMENT_FRAGMENT_NODE || node.nodeType === Node.ELEMENT_NODE)\n\t);\n}\n\n/**\n * Returns `true` if `node` can be inserted according to it's `nodeType`.\n * @param {Node} node\n * @returns {boolean}\n */\nfunction hasInsertableNodeType(node) {\n\treturn (\n\t\tnode &&\n\t\t(isElementNode(node) ||\n\t\t\tisTextNode(node) ||\n\t\t\tisDocTypeNode(node) ||\n\t\t\tnode.nodeType === Node.DOCUMENT_FRAGMENT_NODE ||\n\t\t\tnode.nodeType === Node.COMMENT_NODE ||\n\t\t\tnode.nodeType === Node.PROCESSING_INSTRUCTION_NODE)\n\t);\n}\n\n/**\n * Returns true if `node` is a DOCTYPE node\n * @param {Node} node\n * @returns {boolean}\n */\nfunction isDocTypeNode(node) {\n\treturn node && node.nodeType === Node.DOCUMENT_TYPE_NODE;\n}\n\n/**\n * Returns true if the node is an element\n * @param {Node} node\n * @returns {boolean}\n */\nfunction isElementNode(node) {\n\treturn node && node.nodeType === Node.ELEMENT_NODE;\n}\n/**\n * Returns true if `node` is a text node\n * @param {Node} node\n * @returns {boolean}\n */\nfunction isTextNode(node) {\n\treturn node && node.nodeType === Node.TEXT_NODE;\n}\n\n/**\n * Check if en element node can be inserted before `child`, or at the end if child is falsy,\n * according to the presence and position of a doctype node on the same level.\n *\n * @param {Document} doc The document node\n * @param {Node} child the node that would become the nextSibling if the element would be inserted\n * @returns {boolean} `true` if an element can be inserted before child\n * @private\n * https://dom.spec.whatwg.org/#concept-node-ensure-pre-insertion-validity\n */\nfunction isElementInsertionPossible(doc, child) {\n\tvar parentChildNodes = doc.childNodes || [];\n\tif (find(parentChildNodes, isElementNode) || isDocTypeNode(child)) {\n\t\treturn false;\n\t}\n\tvar docTypeNode = find(parentChildNodes, isDocTypeNode);\n\treturn !(child && docTypeNode && parentChildNodes.indexOf(docTypeNode) > parentChildNodes.indexOf(child));\n}\n\n/**\n * Check if en element node can be inserted before `child`, or at the end if child is falsy,\n * according to the presence and position of a doctype node on the same level.\n *\n * @param {Node} doc The document node\n * @param {Node} child the node that would become the nextSibling if the element would be inserted\n * @returns {boolean} `true` if an element can be inserted before child\n * @private\n * https://dom.spec.whatwg.org/#concept-node-ensure-pre-insertion-validity\n */\nfunction isElementReplacementPossible(doc, child) {\n\tvar parentChildNodes = doc.childNodes || [];\n\n\tfunction hasElementChildThatIsNotChild(node) {\n\t\treturn isElementNode(node) && node !== child;\n\t}\n\n\tif (find(parentChildNodes, hasElementChildThatIsNotChild)) {\n\t\treturn false;\n\t}\n\tvar docTypeNode = find(parentChildNodes, isDocTypeNode);\n\treturn !(child && docTypeNode && parentChildNodes.indexOf(docTypeNode) > parentChildNodes.indexOf(child));\n}\n\n/**\n * @private\n * Steps 1-5 of the checks before inserting and before replacing a child are the same.\n *\n * @param {Node} parent the parent node to insert `node` into\n * @param {Node} node the node to insert\n * @param {Node=} child the node that should become the `nextSibling` of `node`\n * @returns {Node}\n * @throws DOMException for several node combinations that would create a DOM that is not well-formed.\n * @throws DOMException if `child` is provided but is not a child of `parent`.\n * @see https://dom.spec.whatwg.org/#concept-node-ensure-pre-insertion-validity\n * @see https://dom.spec.whatwg.org/#concept-node-replace\n */\nfunction assertPreInsertionValidity1to5(parent, node, child) {\n\t// 1. If `parent` is not a Document, DocumentFragment, or Element node, then throw a \"HierarchyRequestError\" DOMException.\n\tif (!hasValidParentNodeType(parent)) {\n\t\tthrow new DOMException(HIERARCHY_REQUEST_ERR, 'Unexpected parent node type ' + parent.nodeType);\n\t}\n\t// 2. If `node` is a host-including inclusive ancestor of `parent`, then throw a \"HierarchyRequestError\" DOMException.\n\t// not implemented!\n\t// 3. If `child` is non-null and its parent is not `parent`, then throw a \"NotFoundError\" DOMException.\n\tif (child && child.parentNode !== parent) {\n\t\tthrow new DOMException(NOT_FOUND_ERR, 'child not in parent');\n\t}\n\tif (\n\t\t// 4. If `node` is not a DocumentFragment, DocumentType, Element, or CharacterData node, then throw a \"HierarchyRequestError\" DOMException.\n\t\t!hasInsertableNodeType(node) ||\n\t\t// 5. If either `node` is a Text node and `parent` is a document,\n\t\t// the sax parser currently adds top level text nodes, this will be fixed in 0.9.0\n\t\t// || (node.nodeType === Node.TEXT_NODE && parent.nodeType === Node.DOCUMENT_NODE)\n\t\t// or `node` is a doctype and `parent` is not a document, then throw a \"HierarchyRequestError\" DOMException.\n\t\t(isDocTypeNode(node) && parent.nodeType !== Node.DOCUMENT_NODE)\n\t) {\n\t\tthrow new DOMException(\n\t\t\tHIERARCHY_REQUEST_ERR,\n\t\t\t'Unexpected node type ' + node.nodeType + ' for parent node type ' + parent.nodeType\n\t\t);\n\t}\n}\n\n/**\n * @private\n * Step 6 of the checks before inserting and before replacing a child are different.\n *\n * @param {Document} parent the parent node to insert `node` into\n * @param {Node} node the node to insert\n * @param {Node | undefined} child the node that should become the `nextSibling` of `node`\n * @returns {Node}\n * @throws DOMException for several node combinations that would create a DOM that is not well-formed.\n * @throws DOMException if `child` is provided but is not a child of `parent`.\n * @see https://dom.spec.whatwg.org/#concept-node-ensure-pre-insertion-validity\n * @see https://dom.spec.whatwg.org/#concept-node-replace\n */\nfunction assertPreInsertionValidityInDocument(parent, node, child) {\n\tvar parentChildNodes = parent.childNodes || [];\n\tvar nodeChildNodes = node.childNodes || [];\n\n\t// DocumentFragment\n\tif (node.nodeType === Node.DOCUMENT_FRAGMENT_NODE) {\n\t\tvar nodeChildElements = nodeChildNodes.filter(isElementNode);\n\t\t// If node has more than one element child or has a Text node child.\n\t\tif (nodeChildElements.length > 1 || find(nodeChildNodes, isTextNode)) {\n\t\t\tthrow new DOMException(HIERARCHY_REQUEST_ERR, 'More than one element or text in fragment');\n\t\t}\n\t\t// Otherwise, if `node` has one element child and either `parent` has an element child,\n\t\t// `child` is a doctype, or `child` is non-null and a doctype is following `child`.\n\t\tif (nodeChildElements.length === 1 && !isElementInsertionPossible(parent, child)) {\n\t\t\tthrow new DOMException(HIERARCHY_REQUEST_ERR, 'Element in fragment can not be inserted before doctype');\n\t\t}\n\t}\n\t// Element\n\tif (isElementNode(node)) {\n\t\t// `parent` has an element child, `child` is a doctype,\n\t\t// or `child` is non-null and a doctype is following `child`.\n\t\tif (!isElementInsertionPossible(parent, child)) {\n\t\t\tthrow new DOMException(HIERARCHY_REQUEST_ERR, 'Only one element can be added and only after doctype');\n\t\t}\n\t}\n\t// DocumentType\n\tif (isDocTypeNode(node)) {\n\t\t// `parent` has a doctype child,\n\t\tif (find(parentChildNodes, isDocTypeNode)) {\n\t\t\tthrow new DOMException(HIERARCHY_REQUEST_ERR, 'Only one doctype is allowed');\n\t\t}\n\t\tvar parentElementChild = find(parentChildNodes, isElementNode);\n\t\t// `child` is non-null and an element is preceding `child`,\n\t\tif (child && parentChildNodes.indexOf(parentElementChild) < parentChildNodes.indexOf(child)) {\n\t\t\tthrow new DOMException(HIERARCHY_REQUEST_ERR, 'Doctype can only be inserted before an element');\n\t\t}\n\t\t// or `child` is null and `parent` has an element child.\n\t\tif (!child && parentElementChild) {\n\t\t\tthrow new DOMException(HIERARCHY_REQUEST_ERR, 'Doctype can not be appended since element is present');\n\t\t}\n\t}\n}\n\n/**\n * @private\n * Step 6 of the checks before inserting and before replacing a child are different.\n *\n * @param {Document} parent the parent node to insert `node` into\n * @param {Node} node the node to insert\n * @param {Node | undefined} child the node that should become the `nextSibling` of `node`\n * @returns {Node}\n * @throws DOMException for several node combinations that would create a DOM that is not well-formed.\n * @throws DOMException if `child` is provided but is not a child of `parent`.\n * @see https://dom.spec.whatwg.org/#concept-node-ensure-pre-insertion-validity\n * @see https://dom.spec.whatwg.org/#concept-node-replace\n */\nfunction assertPreReplacementValidityInDocument(parent, node, child) {\n\tvar parentChildNodes = parent.childNodes || [];\n\tvar nodeChildNodes = node.childNodes || [];\n\n\t// DocumentFragment\n\tif (node.nodeType === Node.DOCUMENT_FRAGMENT_NODE) {\n\t\tvar nodeChildElements = nodeChildNodes.filter(isElementNode);\n\t\t// If `node` has more than one element child or has a Text node child.\n\t\tif (nodeChildElements.length > 1 || find(nodeChildNodes, isTextNode)) {\n\t\t\tthrow new DOMException(HIERARCHY_REQUEST_ERR, 'More than one element or text in fragment');\n\t\t}\n\t\t// Otherwise, if `node` has one element child and either `parent` has an element child that is not `child` or a doctype is following `child`.\n\t\tif (nodeChildElements.length === 1 && !isElementReplacementPossible(parent, child)) {\n\t\t\tthrow new DOMException(HIERARCHY_REQUEST_ERR, 'Element in fragment can not be inserted before doctype');\n\t\t}\n\t}\n\t// Element\n\tif (isElementNode(node)) {\n\t\t// `parent` has an element child that is not `child` or a doctype is following `child`.\n\t\tif (!isElementReplacementPossible(parent, child)) {\n\t\t\tthrow new DOMException(HIERARCHY_REQUEST_ERR, 'Only one element can be added and only after doctype');\n\t\t}\n\t}\n\t// DocumentType\n\tif (isDocTypeNode(node)) {\n\t\tfunction hasDoctypeChildThatIsNotChild(node) {\n\t\t\treturn isDocTypeNode(node) && node !== child;\n\t\t}\n\n\t\t// `parent` has a doctype child that is not `child`,\n\t\tif (find(parentChildNodes, hasDoctypeChildThatIsNotChild)) {\n\t\t\tthrow new DOMException(HIERARCHY_REQUEST_ERR, 'Only one doctype is allowed');\n\t\t}\n\t\tvar parentElementChild = find(parentChildNodes, isElementNode);\n\t\t// or an element is preceding `child`.\n\t\tif (child && parentChildNodes.indexOf(parentElementChild) < parentChildNodes.indexOf(child)) {\n\t\t\tthrow new DOMException(HIERARCHY_REQUEST_ERR, 'Doctype can only be inserted before an element');\n\t\t}\n\t}\n}\n\n/**\n * @private\n * @param {Node} parent the parent node to insert `node` into\n * @param {Node} node the node to insert\n * @param {Node=} child the node that should become the `nextSibling` of `node`\n * @returns {Node}\n * @throws DOMException for several node combinations that would create a DOM that is not well-formed.\n * @throws DOMException if `child` is provided but is not a child of `parent`.\n * @see https://dom.spec.whatwg.org/#concept-node-ensure-pre-insertion-validity\n */\nfunction _insertBefore(parent, node, child, _inDocumentAssertion) {\n\t// To ensure pre-insertion validity of a node into a parent before a child, run these steps:\n\tassertPreInsertionValidity1to5(parent, node, child);\n\n\t// If parent is a document, and any of the statements below, switched on the interface node implements,\n\t// are true, then throw a \"HierarchyRequestError\" DOMException.\n\tif (parent.nodeType === Node.DOCUMENT_NODE) {\n\t\t(_inDocumentAssertion || assertPreInsertionValidityInDocument)(parent, node, child);\n\t}\n\n\tvar cp = node.parentNode;\n\tif(cp){\n\t\tcp.removeChild(node);//remove and update\n\t}\n\tif(node.nodeType === DOCUMENT_FRAGMENT_NODE){\n\t\tvar newFirst = node.firstChild;\n\t\tif (newFirst == null) {\n\t\t\treturn node;\n\t\t}\n\t\tvar newLast = node.lastChild;\n\t}else{\n\t\tnewFirst = newLast = node;\n\t}\n\tvar pre = child ? child.previousSibling : parent.lastChild;\n\n\tnewFirst.previousSibling = pre;\n\tnewLast.nextSibling = child;\n\n\n\tif(pre){\n\t\tpre.nextSibling = newFirst;\n\t}else{\n\t\tparent.firstChild = newFirst;\n\t}\n\tif(child == null){\n\t\tparent.lastChild = newLast;\n\t}else{\n\t\tchild.previousSibling = newLast;\n\t}\n\tdo{\n\t\tnewFirst.parentNode = parent;\n\t}while(newFirst !== newLast && (newFirst= newFirst.nextSibling))\n\t_onUpdateChild(parent.ownerDocument||parent, parent);\n\t//console.log(parent.lastChild.nextSibling == null)\n\tif (node.nodeType == DOCUMENT_FRAGMENT_NODE) {\n\t\tnode.firstChild = node.lastChild = null;\n\t}\n\treturn node;\n}\n\n/**\n * Appends `newChild` to `parentNode`.\n * If `newChild` is already connected to a `parentNode` it is first removed from it.\n *\n * @see https://github.com/xmldom/xmldom/issues/135\n * @see https://github.com/xmldom/xmldom/issues/145\n * @param {Node} parentNode\n * @param {Node} newChild\n * @returns {Node}\n * @private\n */\nfunction _appendSingleChild (parentNode, newChild) {\n\tif (newChild.parentNode) {\n\t\tnewChild.parentNode.removeChild(newChild);\n\t}\n\tnewChild.parentNode = parentNode;\n\tnewChild.previousSibling = parentNode.lastChild;\n\tnewChild.nextSibling = null;\n\tif (newChild.previousSibling) {\n\t\tnewChild.previousSibling.nextSibling = newChild;\n\t} else {\n\t\tparentNode.firstChild = newChild;\n\t}\n\tparentNode.lastChild = newChild;\n\t_onUpdateChild(parentNode.ownerDocument, parentNode, newChild);\n\treturn newChild;\n}\n\nDocument.prototype = {\n\t//implementation : null,\n\tnodeName : '#document',\n\tnodeType : DOCUMENT_NODE,\n\t/**\n\t * The DocumentType node of the document.\n\t *\n\t * @readonly\n\t * @type DocumentType\n\t */\n\tdoctype : null,\n\tdocumentElement : null,\n\t_inc : 1,\n\n\tinsertBefore : function(newChild, refChild){//raises\n\t\tif(newChild.nodeType == DOCUMENT_FRAGMENT_NODE){\n\t\t\tvar child = newChild.firstChild;\n\t\t\twhile(child){\n\t\t\t\tvar next = child.nextSibling;\n\t\t\t\tthis.insertBefore(child,refChild);\n\t\t\t\tchild = next;\n\t\t\t}\n\t\t\treturn newChild;\n\t\t}\n\t\t_insertBefore(this, newChild, refChild);\n\t\tnewChild.ownerDocument = this;\n\t\tif (this.documentElement === null && newChild.nodeType === ELEMENT_NODE) {\n\t\t\tthis.documentElement = newChild;\n\t\t}\n\n\t\treturn newChild;\n\t},\n\tremoveChild : function(oldChild){\n\t\tif(this.documentElement == oldChild){\n\t\t\tthis.documentElement = null;\n\t\t}\n\t\treturn _removeChild(this,oldChild);\n\t},\n\treplaceChild: function (newChild, oldChild) {\n\t\t//raises\n\t\t_insertBefore(this, newChild, oldChild, assertPreReplacementValidityInDocument);\n\t\tnewChild.ownerDocument = this;\n\t\tif (oldChild) {\n\t\t\tthis.removeChild(oldChild);\n\t\t}\n\t\tif (isElementNode(newChild)) {\n\t\t\tthis.documentElement = newChild;\n\t\t}\n\t},\n\t// Introduced in DOM Level 2:\n\timportNode : function(importedNode,deep){\n\t\treturn importNode(this,importedNode,deep);\n\t},\n\t// Introduced in DOM Level 2:\n\tgetElementById :\tfunction(id){\n\t\tvar rtv = null;\n\t\t_visitNode(this.documentElement,function(node){\n\t\t\tif(node.nodeType == ELEMENT_NODE){\n\t\t\t\tif(node.getAttribute('id') == id){\n\t\t\t\t\trtv = node;\n\t\t\t\t\treturn true;\n\t\t\t\t}\n\t\t\t}\n\t\t})\n\t\treturn rtv;\n\t},\n\n\t/**\n\t * The `getElementsByClassName` method of `Document` interface returns an array-like object\n\t * of all child elements which have **all** of the given class name(s).\n\t *\n\t * Returns an empty list if `classeNames` is an empty string or only contains HTML white space characters.\n\t *\n\t *\n\t * Warning: This is a live LiveNodeList.\n\t * Changes in the DOM will reflect in the array as the changes occur.\n\t * If an element selected by this array no longer qualifies for the selector,\n\t * it will automatically be removed. Be aware of this for iteration purposes.\n\t *\n\t * @param {string} classNames is a string representing the class name(s) to match; multiple class names are separated by (ASCII-)whitespace\n\t *\n\t * @see https://developer.mozilla.org/en-US/docs/Web/API/Document/getElementsByClassName\n\t * @see https://dom.spec.whatwg.org/#concept-getelementsbyclassname\n\t */\n\tgetElementsByClassName: function(classNames) {\n\t\tvar classNamesSet = toOrderedSet(classNames)\n\t\treturn new LiveNodeList(this, function(base) {\n\t\t\tvar ls = [];\n\t\t\tif (classNamesSet.length > 0) {\n\t\t\t\t_visitNode(base.documentElement, function(node) {\n\t\t\t\t\tif(node !== base && node.nodeType === ELEMENT_NODE) {\n\t\t\t\t\t\tvar nodeClassNames = node.getAttribute('class')\n\t\t\t\t\t\t// can be null if the attribute does not exist\n\t\t\t\t\t\tif (nodeClassNames) {\n\t\t\t\t\t\t\t// before splitting and iterating just compare them for the most common case\n\t\t\t\t\t\t\tvar matches = classNames === nodeClassNames;\n\t\t\t\t\t\t\tif (!matches) {\n\t\t\t\t\t\t\t\tvar nodeClassNamesSet = toOrderedSet(nodeClassNames)\n\t\t\t\t\t\t\t\tmatches = classNamesSet.every(arrayIncludes(nodeClassNamesSet))\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tif(matches) {\n\t\t\t\t\t\t\t\tls.push(node);\n\t\t\t\t\t\t\t}\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\treturn ls;\n\t\t});\n\t},\n\n\t//document factory method:\n\tcreateElement :\tfunction(tagName){\n\t\tvar node = new Element();\n\t\tnode.ownerDocument = this;\n\t\tnode.nodeName = tagName;\n\t\tnode.tagName = tagName;\n\t\tnode.localName = tagName;\n\t\tnode.childNodes = new NodeList();\n\t\tvar attrs\t= node.attributes = new NamedNodeMap();\n\t\tattrs._ownerElement = node;\n\t\treturn node;\n\t},\n\tcreateDocumentFragment :\tfunction(){\n\t\tvar node = new DocumentFragment();\n\t\tnode.ownerDocument = this;\n\t\tnode.childNodes = new NodeList();\n\t\treturn node;\n\t},\n\tcreateTextNode :\tfunction(data){\n\t\tvar node = new Text();\n\t\tnode.ownerDocument = this;\n\t\tnode.appendData(data)\n\t\treturn node;\n\t},\n\tcreateComment :\tfunction(data){\n\t\tvar node = new Comment();\n\t\tnode.ownerDocument = this;\n\t\tnode.appendData(data)\n\t\treturn node;\n\t},\n\tcreateCDATASection :\tfunction(data){\n\t\tvar node = new CDATASection();\n\t\tnode.ownerDocument = this;\n\t\tnode.appendData(data)\n\t\treturn node;\n\t},\n\tcreateProcessingInstruction :\tfunction(target,data){\n\t\tvar node = new ProcessingInstruction();\n\t\tnode.ownerDocument = this;\n\t\tnode.tagName = node.nodeName = node.target = target;\n\t\tnode.nodeValue = node.data = data;\n\t\treturn node;\n\t},\n\tcreateAttribute :\tfunction(name){\n\t\tvar node = new Attr();\n\t\tnode.ownerDocument\t= this;\n\t\tnode.name = name;\n\t\tnode.nodeName\t= name;\n\t\tnode.localName = name;\n\t\tnode.specified = true;\n\t\treturn node;\n\t},\n\tcreateEntityReference :\tfunction(name){\n\t\tvar node = new EntityReference();\n\t\tnode.ownerDocument\t= this;\n\t\tnode.nodeName\t= name;\n\t\treturn node;\n\t},\n\t// Introduced in DOM Level 2:\n\tcreateElementNS :\tfunction(namespaceURI,qualifiedName){\n\t\tvar node = new Element();\n\t\tvar pl = qualifiedName.split(':');\n\t\tvar attrs\t= node.attributes = new NamedNodeMap();\n\t\tnode.childNodes = new NodeList();\n\t\tnode.ownerDocument = this;\n\t\tnode.nodeName = qualifiedName;\n\t\tnode.tagName = qualifiedName;\n\t\tnode.namespaceURI = namespaceURI;\n\t\tif(pl.length == 2){\n\t\t\tnode.prefix = pl[0];\n\t\t\tnode.localName = pl[1];\n\t\t}else{\n\t\t\t//el.prefix = null;\n\t\t\tnode.localName = qualifiedName;\n\t\t}\n\t\tattrs._ownerElement = node;\n\t\treturn node;\n\t},\n\t// Introduced in DOM Level 2:\n\tcreateAttributeNS :\tfunction(namespaceURI,qualifiedName){\n\t\tvar node = new Attr();\n\t\tvar pl = qualifiedName.split(':');\n\t\tnode.ownerDocument = this;\n\t\tnode.nodeName = qualifiedName;\n\t\tnode.name = qualifiedName;\n\t\tnode.namespaceURI = namespaceURI;\n\t\tnode.specified = true;\n\t\tif(pl.length == 2){\n\t\t\tnode.prefix = pl[0];\n\t\t\tnode.localName = pl[1];\n\t\t}else{\n\t\t\t//el.prefix = null;\n\t\t\tnode.localName = qualifiedName;\n\t\t}\n\t\treturn node;\n\t}\n};\n_extends(Document,Node);\n\n\nfunction Element() {\n\tthis._nsMap = {};\n};\nElement.prototype = {\n\tnodeType : ELEMENT_NODE,\n\thasAttribute : function(name){\n\t\treturn this.getAttributeNode(name)!=null;\n\t},\n\tgetAttribute : function(name){\n\t\tvar attr = this.getAttributeNode(name);\n\t\treturn attr && attr.value || '';\n\t},\n\tgetAttributeNode : function(name){\n\t\treturn this.attributes.getNamedItem(name);\n\t},\n\tsetAttribute : function(name, value){\n\t\tvar attr = this.ownerDocument.createAttribute(name);\n\t\tattr.value = attr.nodeValue = \"\" + value;\n\t\tthis.setAttributeNode(attr)\n\t},\n\tremoveAttribute : function(name){\n\t\tvar attr = this.getAttributeNode(name)\n\t\tattr && this.removeAttributeNode(attr);\n\t},\n\n\t//four real opeartion method\n\tappendChild:function(newChild){\n\t\tif(newChild.nodeType === DOCUMENT_FRAGMENT_NODE){\n\t\t\treturn this.insertBefore(newChild,null);\n\t\t}else{\n\t\t\treturn _appendSingleChild(this,newChild);\n\t\t}\n\t},\n\tsetAttributeNode : function(newAttr){\n\t\treturn this.attributes.setNamedItem(newAttr);\n\t},\n\tsetAttributeNodeNS : function(newAttr){\n\t\treturn this.attributes.setNamedItemNS(newAttr);\n\t},\n\tremoveAttributeNode : function(oldAttr){\n\t\t//console.log(this == oldAttr.ownerElement)\n\t\treturn this.attributes.removeNamedItem(oldAttr.nodeName);\n\t},\n\t//get real attribute name,and remove it by removeAttributeNode\n\tremoveAttributeNS : function(namespaceURI, localName){\n\t\tvar old = this.getAttributeNodeNS(namespaceURI, localName);\n\t\told && this.removeAttributeNode(old);\n\t},\n\n\thasAttributeNS : function(namespaceURI, localName){\n\t\treturn this.getAttributeNodeNS(namespaceURI, localName)!=null;\n\t},\n\tgetAttributeNS : function(namespaceURI, localName){\n\t\tvar attr = this.getAttributeNodeNS(namespaceURI, localName);\n\t\treturn attr && attr.value || '';\n\t},\n\tsetAttributeNS : function(namespaceURI, qualifiedName, value){\n\t\tvar attr = this.ownerDocument.createAttributeNS(namespaceURI, qualifiedName);\n\t\tattr.value = attr.nodeValue = \"\" + value;\n\t\tthis.setAttributeNode(attr)\n\t},\n\tgetAttributeNodeNS : function(namespaceURI, localName){\n\t\treturn this.attributes.getNamedItemNS(namespaceURI, localName);\n\t},\n\n\tgetElementsByTagName : function(tagName){\n\t\treturn new LiveNodeList(this,function(base){\n\t\t\tvar ls = [];\n\t\t\t_visitNode(base,function(node){\n\t\t\t\tif(node !== base && node.nodeType == ELEMENT_NODE && (tagName === '*' || node.tagName == tagName)){\n\t\t\t\t\tls.push(node);\n\t\t\t\t}\n\t\t\t});\n\t\t\treturn ls;\n\t\t});\n\t},\n\tgetElementsByTagNameNS : function(namespaceURI, localName){\n\t\treturn new LiveNodeList(this,function(base){\n\t\t\tvar ls = [];\n\t\t\t_visitNode(base,function(node){\n\t\t\t\tif(node !== base && node.nodeType === ELEMENT_NODE && (namespaceURI === '*' || node.namespaceURI === namespaceURI) && (localName === '*' || node.localName == localName)){\n\t\t\t\t\tls.push(node);\n\t\t\t\t}\n\t\t\t});\n\t\t\treturn ls;\n\n\t\t});\n\t}\n};\nDocument.prototype.getElementsByTagName = Element.prototype.getElementsByTagName;\nDocument.prototype.getElementsByTagNameNS = Element.prototype.getElementsByTagNameNS;\n\n\n_extends(Element,Node);\nfunction Attr() {\n};\nAttr.prototype.nodeType = ATTRIBUTE_NODE;\n_extends(Attr,Node);\n\n\nfunction CharacterData() {\n};\nCharacterData.prototype = {\n\tdata : '',\n\tsubstringData : function(offset, count) {\n\t\treturn this.data.substring(offset, offset+count);\n\t},\n\tappendData: function(text) {\n\t\ttext = this.data+text;\n\t\tthis.nodeValue = this.data = text;\n\t\tthis.length = text.length;\n\t},\n\tinsertData: function(offset,text) {\n\t\tthis.replaceData(offset,0,text);\n\n\t},\n\tappendChild:function(newChild){\n\t\tthrow new Error(ExceptionMessage[HIERARCHY_REQUEST_ERR])\n\t},\n\tdeleteData: function(offset, count) {\n\t\tthis.replaceData(offset,count,\"\");\n\t},\n\treplaceData: function(offset, count, text) {\n\t\tvar start = this.data.substring(0,offset);\n\t\tvar end = this.data.substring(offset+count);\n\t\ttext = start + text + end;\n\t\tthis.nodeValue = this.data = text;\n\t\tthis.length = text.length;\n\t}\n}\n_extends(CharacterData,Node);\nfunction Text() {\n};\nText.prototype = {\n\tnodeName : \"#text\",\n\tnodeType : TEXT_NODE,\n\tsplitText : function(offset) {\n\t\tvar text = this.data;\n\t\tvar newText = text.substring(offset);\n\t\ttext = text.substring(0, offset);\n\t\tthis.data = this.nodeValue = text;\n\t\tthis.length = text.length;\n\t\tvar newNode = this.ownerDocument.createTextNode(newText);\n\t\tif(this.parentNode){\n\t\t\tthis.parentNode.insertBefore(newNode, this.nextSibling);\n\t\t}\n\t\treturn newNode;\n\t}\n}\n_extends(Text,CharacterData);\nfunction Comment() {\n};\nComment.prototype = {\n\tnodeName : \"#comment\",\n\tnodeType : COMMENT_NODE\n}\n_extends(Comment,CharacterData);\n\nfunction CDATASection() {\n};\nCDATASection.prototype = {\n\tnodeName : \"#cdata-section\",\n\tnodeType : CDATA_SECTION_NODE\n}\n_extends(CDATASection,CharacterData);\n\n\nfunction DocumentType() {\n};\nDocumentType.prototype.nodeType = DOCUMENT_TYPE_NODE;\n_extends(DocumentType,Node);\n\nfunction Notation() {\n};\nNotation.prototype.nodeType = NOTATION_NODE;\n_extends(Notation,Node);\n\nfunction Entity() {\n};\nEntity.prototype.nodeType = ENTITY_NODE;\n_extends(Entity,Node);\n\nfunction EntityReference() {\n};\nEntityReference.prototype.nodeType = ENTITY_REFERENCE_NODE;\n_extends(EntityReference,Node);\n\nfunction DocumentFragment() {\n};\nDocumentFragment.prototype.nodeName =\t\"#document-fragment\";\nDocumentFragment.prototype.nodeType =\tDOCUMENT_FRAGMENT_NODE;\n_extends(DocumentFragment,Node);\n\n\nfunction ProcessingInstruction() {\n}\nProcessingInstruction.prototype.nodeType = PROCESSING_INSTRUCTION_NODE;\n_extends(ProcessingInstruction,Node);\nfunction XMLSerializer(){}\nXMLSerializer.prototype.serializeToString = function(node,isHtml,nodeFilter){\n\treturn nodeSerializeToString.call(node,isHtml,nodeFilter);\n}\nNode.prototype.toString = nodeSerializeToString;\nfunction nodeSerializeToString(isHtml,nodeFilter){\n\tvar buf = [];\n\tvar refNode = this.nodeType == 9 && this.documentElement || this;\n\tvar prefix = refNode.prefix;\n\tvar uri = refNode.namespaceURI;\n\n\tif(uri && prefix == null){\n\t\t//console.log(prefix)\n\t\tvar prefix = refNode.lookupPrefix(uri);\n\t\tif(prefix == null){\n\t\t\t//isHTML = true;\n\t\t\tvar visibleNamespaces=[\n\t\t\t{namespace:uri,prefix:null}\n\t\t\t//{namespace:uri,prefix:''}\n\t\t\t]\n\t\t}\n\t}\n\tserializeToString(this,buf,isHtml,nodeFilter,visibleNamespaces);\n\t//console.log('###',this.nodeType,uri,prefix,buf.join(''))\n\treturn buf.join('');\n}\n\nfunction needNamespaceDefine(node, isHTML, visibleNamespaces) {\n\tvar prefix = node.prefix || '';\n\tvar uri = node.namespaceURI;\n\t// According to [Namespaces in XML 1.0](https://www.w3.org/TR/REC-xml-names/#ns-using) ,\n\t// and more specifically https://www.w3.org/TR/REC-xml-names/#nsc-NoPrefixUndecl :\n\t// > In a namespace declaration for a prefix [...], the attribute value MUST NOT be empty.\n\t// in a similar manner [Namespaces in XML 1.1](https://www.w3.org/TR/xml-names11/#ns-using)\n\t// and more specifically https://www.w3.org/TR/xml-names11/#nsc-NSDeclared :\n\t// > [...] Furthermore, the attribute value [...] must not be an empty string.\n\t// so serializing empty namespace value like xmlns:ds=\"\" would produce an invalid XML document.\n\tif (!uri) {\n\t\treturn false;\n\t}\n\tif (prefix === \"xml\" && uri === NAMESPACE.XML || uri === NAMESPACE.XMLNS) {\n\t\treturn false;\n\t}\n\n\tvar i = visibleNamespaces.length\n\twhile (i--) {\n\t\tvar ns = visibleNamespaces[i];\n\t\t// get namespace prefix\n\t\tif (ns.prefix === prefix) {\n\t\t\treturn ns.namespace !== uri;\n\t\t}\n\t}\n\treturn true;\n}\n/**\n * Well-formed constraint: No < in Attribute Values\n * > The replacement text of any entity referred to directly or indirectly\n * > in an attribute value must not contain a <.\n * @see https://www.w3.org/TR/xml11/#CleanAttrVals\n * @see https://www.w3.org/TR/xml11/#NT-AttValue\n *\n * Literal whitespace other than space that appear in attribute values\n * are serialized as their entity references, so they will be preserved.\n * (In contrast to whitespace literals in the input which are normalized to spaces)\n * @see https://www.w3.org/TR/xml11/#AVNormalize\n * @see https://w3c.github.io/DOM-Parsing/#serializing-an-element-s-attributes\n */\nfunction addSerializedAttribute(buf, qualifiedName, value) {\n\tbuf.push(' ', qualifiedName, '=\"', value.replace(/[<>&\"\\t\\n\\r]/g, _xmlEncoder), '\"')\n}\n\nfunction serializeToString(node,buf,isHTML,nodeFilter,visibleNamespaces){\n\tif (!visibleNamespaces) {\n\t\tvisibleNamespaces = [];\n\t}\n\n\tif(nodeFilter){\n\t\tnode = nodeFilter(node);\n\t\tif(node){\n\t\t\tif(typeof node == 'string'){\n\t\t\t\tbuf.push(node);\n\t\t\t\treturn;\n\t\t\t}\n\t\t}else{\n\t\t\treturn;\n\t\t}\n\t\t//buf.sort.apply(attrs, attributeSorter);\n\t}\n\n\tswitch(node.nodeType){\n\tcase ELEMENT_NODE:\n\t\tvar attrs = node.attributes;\n\t\tvar len = attrs.length;\n\t\tvar child = node.firstChild;\n\t\tvar nodeName = node.tagName;\n\n\t\tisHTML = NAMESPACE.isHTML(node.namespaceURI) || isHTML\n\n\t\tvar prefixedNodeName = nodeName\n\t\tif (!isHTML && !node.prefix && node.namespaceURI) {\n\t\t\tvar defaultNS\n\t\t\t// lookup current default ns from `xmlns` attribute\n\t\t\tfor (var ai = 0; ai < attrs.length; ai++) {\n\t\t\t\tif (attrs.item(ai).name === 'xmlns') {\n\t\t\t\t\tdefaultNS = attrs.item(ai).value\n\t\t\t\t\tbreak\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (!defaultNS) {\n\t\t\t\t// lookup current default ns in visibleNamespaces\n\t\t\t\tfor (var nsi = visibleNamespaces.length - 1; nsi >= 0; nsi--) {\n\t\t\t\t\tvar namespace = visibleNamespaces[nsi]\n\t\t\t\t\tif (namespace.prefix === '' && namespace.namespace === node.namespaceURI) {\n\t\t\t\t\t\tdefaultNS = namespace.namespace\n\t\t\t\t\t\tbreak\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (defaultNS !== node.namespaceURI) {\n\t\t\t\tfor (var nsi = visibleNamespaces.length - 1; nsi >= 0; nsi--) {\n\t\t\t\t\tvar namespace = visibleNamespaces[nsi]\n\t\t\t\t\tif (namespace.namespace === node.namespaceURI) {\n\t\t\t\t\t\tif (namespace.prefix) {\n\t\t\t\t\t\t\tprefixedNodeName = namespace.prefix + ':' + nodeName\n\t\t\t\t\t\t}\n\t\t\t\t\t\tbreak\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tbuf.push('<', prefixedNodeName);\n\n\t\tfor(var i=0;i');\n\t\t\t//if is cdata child node\n\t\t\tif(isHTML && /^script$/i.test(nodeName)){\n\t\t\t\twhile(child){\n\t\t\t\t\tif(child.data){\n\t\t\t\t\t\tbuf.push(child.data);\n\t\t\t\t\t}else{\n\t\t\t\t\t\tserializeToString(child, buf, isHTML, nodeFilter, visibleNamespaces.slice());\n\t\t\t\t\t}\n\t\t\t\t\tchild = child.nextSibling;\n\t\t\t\t}\n\t\t\t}else\n\t\t\t{\n\t\t\t\twhile(child){\n\t\t\t\t\tserializeToString(child, buf, isHTML, nodeFilter, visibleNamespaces.slice());\n\t\t\t\t\tchild = child.nextSibling;\n\t\t\t\t}\n\t\t\t}\n\t\t\tbuf.push('');\n\t\t}else{\n\t\t\tbuf.push('/>');\n\t\t}\n\t\t// remove added visible namespaces\n\t\t//visibleNamespaces.length = startVisibleNamespaces;\n\t\treturn;\n\tcase DOCUMENT_NODE:\n\tcase DOCUMENT_FRAGMENT_NODE:\n\t\tvar child = node.firstChild;\n\t\twhile(child){\n\t\t\tserializeToString(child, buf, isHTML, nodeFilter, visibleNamespaces.slice());\n\t\t\tchild = child.nextSibling;\n\t\t}\n\t\treturn;\n\tcase ATTRIBUTE_NODE:\n\t\treturn addSerializedAttribute(buf, node.name, node.value);\n\tcase TEXT_NODE:\n\t\t/**\n\t\t * The ampersand character (&) and the left angle bracket (<) must not appear in their literal form,\n\t\t * except when used as markup delimiters, or within a comment, a processing instruction, or a CDATA section.\n\t\t * If they are needed elsewhere, they must be escaped using either numeric character references or the strings\n\t\t * `&` and `<` respectively.\n\t\t * The right angle bracket (>) may be represented using the string \" > \", and must, for compatibility,\n\t\t * be escaped using either `>` or a character reference when it appears in the string `]]>` in content,\n\t\t * when that string is not marking the end of a CDATA section.\n\t\t *\n\t\t * In the content of elements, character data is any string of characters\n\t\t * which does not contain the start-delimiter of any markup\n\t\t * and does not include the CDATA-section-close delimiter, `]]>`.\n\t\t *\n\t\t * @see https://www.w3.org/TR/xml/#NT-CharData\n\t\t * @see https://w3c.github.io/DOM-Parsing/#xml-serializing-a-text-node\n\t\t */\n\t\treturn buf.push(node.data\n\t\t\t.replace(/[<&>]/g,_xmlEncoder)\n\t\t);\n\tcase CDATA_SECTION_NODE:\n\t\treturn buf.push( '');\n\tcase COMMENT_NODE:\n\t\treturn buf.push( \"\");\n\tcase DOCUMENT_TYPE_NODE:\n\t\tvar pubid = node.publicId;\n\t\tvar sysid = node.systemId;\n\t\tbuf.push('');\n\t\t}else if(sysid && sysid!='.'){\n\t\t\tbuf.push(' SYSTEM ', sysid, '>');\n\t\t}else{\n\t\t\tvar sub = node.internalSubset;\n\t\t\tif(sub){\n\t\t\t\tbuf.push(\" [\",sub,\"]\");\n\t\t\t}\n\t\t\tbuf.push(\">\");\n\t\t}\n\t\treturn;\n\tcase PROCESSING_INSTRUCTION_NODE:\n\t\treturn buf.push( \"\");\n\tcase ENTITY_REFERENCE_NODE:\n\t\treturn buf.push( '&',node.nodeName,';');\n\t//case ENTITY_NODE:\n\t//case NOTATION_NODE:\n\tdefault:\n\t\tbuf.push('??',node.nodeName);\n\t}\n}\nfunction importNode(doc,node,deep){\n\tvar node2;\n\tswitch (node.nodeType) {\n\tcase ELEMENT_NODE:\n\t\tnode2 = node.cloneNode(false);\n\t\tnode2.ownerDocument = doc;\n\t\t//var attrs = node2.attributes;\n\t\t//var len = attrs.length;\n\t\t//for(var i=0;i',\n\tlt: '<',\n\tquot: '\"',\n});\n\n/**\n * A map of all entities that are detected in an HTML document.\n * They contain all entries from `XML_ENTITIES`.\n *\n * @see XML_ENTITIES\n * @see DOMParser.parseFromString\n * @see DOMImplementation.prototype.createHTMLDocument\n * @see https://html.spec.whatwg.org/#named-character-references WHATWG HTML(5) Spec\n * @see https://html.spec.whatwg.org/entities.json JSON\n * @see https://www.w3.org/TR/xml-entity-names/ W3C XML Entity Names\n * @see https://www.w3.org/TR/html4/sgml/entities.html W3C HTML4/SGML\n * @see https://en.wikipedia.org/wiki/List_of_XML_and_HTML_character_entity_references#Character_entity_references_in_HTML Wikipedia (HTML)\n * @see https://en.wikipedia.org/wiki/List_of_XML_and_HTML_character_entity_references#Entities_representing_special_characters_in_XHTML Wikpedia (XHTML)\n */\nexports.HTML_ENTITIES = freeze({\n\tAacute: '\\u00C1',\n\taacute: '\\u00E1',\n\tAbreve: '\\u0102',\n\tabreve: '\\u0103',\n\tac: '\\u223E',\n\tacd: '\\u223F',\n\tacE: '\\u223E\\u0333',\n\tAcirc: '\\u00C2',\n\tacirc: '\\u00E2',\n\tacute: '\\u00B4',\n\tAcy: '\\u0410',\n\tacy: '\\u0430',\n\tAElig: '\\u00C6',\n\taelig: '\\u00E6',\n\taf: '\\u2061',\n\tAfr: '\\uD835\\uDD04',\n\tafr: '\\uD835\\uDD1E',\n\tAgrave: '\\u00C0',\n\tagrave: '\\u00E0',\n\talefsym: '\\u2135',\n\taleph: '\\u2135',\n\tAlpha: '\\u0391',\n\talpha: '\\u03B1',\n\tAmacr: '\\u0100',\n\tamacr: '\\u0101',\n\tamalg: '\\u2A3F',\n\tAMP: '\\u0026',\n\tamp: '\\u0026',\n\tAnd: '\\u2A53',\n\tand: '\\u2227',\n\tandand: '\\u2A55',\n\tandd: '\\u2A5C',\n\tandslope: '\\u2A58',\n\tandv: '\\u2A5A',\n\tang: '\\u2220',\n\tange: '\\u29A4',\n\tangle: '\\u2220',\n\tangmsd: '\\u2221',\n\tangmsdaa: '\\u29A8',\n\tangmsdab: '\\u29A9',\n\tangmsdac: '\\u29AA',\n\tangmsdad: '\\u29AB',\n\tangmsdae: '\\u29AC',\n\tangmsdaf: '\\u29AD',\n\tangmsdag: '\\u29AE',\n\tangmsdah: '\\u29AF',\n\tangrt: '\\u221F',\n\tangrtvb: '\\u22BE',\n\tangrtvbd: '\\u299D',\n\tangsph: '\\u2222',\n\tangst: '\\u00C5',\n\tangzarr: '\\u237C',\n\tAogon: '\\u0104',\n\taogon: '\\u0105',\n\tAopf: '\\uD835\\uDD38',\n\taopf: '\\uD835\\uDD52',\n\tap: '\\u2248',\n\tapacir: '\\u2A6F',\n\tapE: '\\u2A70',\n\tape: '\\u224A',\n\tapid: '\\u224B',\n\tapos: '\\u0027',\n\tApplyFunction: '\\u2061',\n\tapprox: '\\u2248',\n\tapproxeq: '\\u224A',\n\tAring: '\\u00C5',\n\taring: '\\u00E5',\n\tAscr: '\\uD835\\uDC9C',\n\tascr: '\\uD835\\uDCB6',\n\tAssign: '\\u2254',\n\tast: '\\u002A',\n\tasymp: '\\u2248',\n\tasympeq: '\\u224D',\n\tAtilde: '\\u00C3',\n\tatilde: '\\u00E3',\n\tAuml: '\\u00C4',\n\tauml: '\\u00E4',\n\tawconint: '\\u2233',\n\tawint: '\\u2A11',\n\tbackcong: '\\u224C',\n\tbackepsilon: '\\u03F6',\n\tbackprime: '\\u2035',\n\tbacksim: '\\u223D',\n\tbacksimeq: '\\u22CD',\n\tBackslash: '\\u2216',\n\tBarv: '\\u2AE7',\n\tbarvee: '\\u22BD',\n\tBarwed: '\\u2306',\n\tbarwed: '\\u2305',\n\tbarwedge: '\\u2305',\n\tbbrk: '\\u23B5',\n\tbbrktbrk: '\\u23B6',\n\tbcong: '\\u224C',\n\tBcy: '\\u0411',\n\tbcy: '\\u0431',\n\tbdquo: '\\u201E',\n\tbecaus: '\\u2235',\n\tBecause: '\\u2235',\n\tbecause: '\\u2235',\n\tbemptyv: '\\u29B0',\n\tbepsi: '\\u03F6',\n\tbernou: '\\u212C',\n\tBernoullis: '\\u212C',\n\tBeta: '\\u0392',\n\tbeta: '\\u03B2',\n\tbeth: '\\u2136',\n\tbetween: '\\u226C',\n\tBfr: '\\uD835\\uDD05',\n\tbfr: '\\uD835\\uDD1F',\n\tbigcap: '\\u22C2',\n\tbigcirc: '\\u25EF',\n\tbigcup: '\\u22C3',\n\tbigodot: '\\u2A00',\n\tbigoplus: '\\u2A01',\n\tbigotimes: '\\u2A02',\n\tbigsqcup: '\\u2A06',\n\tbigstar: '\\u2605',\n\tbigtriangledown: '\\u25BD',\n\tbigtriangleup: '\\u25B3',\n\tbiguplus: '\\u2A04',\n\tbigvee: '\\u22C1',\n\tbigwedge: '\\u22C0',\n\tbkarow: '\\u290D',\n\tblacklozenge: '\\u29EB',\n\tblacksquare: '\\u25AA',\n\tblacktriangle: '\\u25B4',\n\tblacktriangledown: '\\u25BE',\n\tblacktriangleleft: '\\u25C2',\n\tblacktriangleright: '\\u25B8',\n\tblank: '\\u2423',\n\tblk12: '\\u2592',\n\tblk14: '\\u2591',\n\tblk34: '\\u2593',\n\tblock: '\\u2588',\n\tbne: '\\u003D\\u20E5',\n\tbnequiv: '\\u2261\\u20E5',\n\tbNot: '\\u2AED',\n\tbnot: '\\u2310',\n\tBopf: '\\uD835\\uDD39',\n\tbopf: '\\uD835\\uDD53',\n\tbot: '\\u22A5',\n\tbottom: '\\u22A5',\n\tbowtie: '\\u22C8',\n\tboxbox: '\\u29C9',\n\tboxDL: '\\u2557',\n\tboxDl: '\\u2556',\n\tboxdL: '\\u2555',\n\tboxdl: '\\u2510',\n\tboxDR: '\\u2554',\n\tboxDr: '\\u2553',\n\tboxdR: '\\u2552',\n\tboxdr: '\\u250C',\n\tboxH: '\\u2550',\n\tboxh: '\\u2500',\n\tboxHD: '\\u2566',\n\tboxHd: '\\u2564',\n\tboxhD: '\\u2565',\n\tboxhd: '\\u252C',\n\tboxHU: '\\u2569',\n\tboxHu: '\\u2567',\n\tboxhU: '\\u2568',\n\tboxhu: '\\u2534',\n\tboxminus: '\\u229F',\n\tboxplus: '\\u229E',\n\tboxtimes: '\\u22A0',\n\tboxUL: '\\u255D',\n\tboxUl: '\\u255C',\n\tboxuL: '\\u255B',\n\tboxul: '\\u2518',\n\tboxUR: '\\u255A',\n\tboxUr: '\\u2559',\n\tboxuR: '\\u2558',\n\tboxur: '\\u2514',\n\tboxV: '\\u2551',\n\tboxv: '\\u2502',\n\tboxVH: '\\u256C',\n\tboxVh: '\\u256B',\n\tboxvH: '\\u256A',\n\tboxvh: '\\u253C',\n\tboxVL: '\\u2563',\n\tboxVl: '\\u2562',\n\tboxvL: '\\u2561',\n\tboxvl: '\\u2524',\n\tboxVR: '\\u2560',\n\tboxVr: '\\u255F',\n\tboxvR: '\\u255E',\n\tboxvr: '\\u251C',\n\tbprime: '\\u2035',\n\tBreve: '\\u02D8',\n\tbreve: '\\u02D8',\n\tbrvbar: '\\u00A6',\n\tBscr: '\\u212C',\n\tbscr: '\\uD835\\uDCB7',\n\tbsemi: '\\u204F',\n\tbsim: '\\u223D',\n\tbsime: '\\u22CD',\n\tbsol: '\\u005C',\n\tbsolb: '\\u29C5',\n\tbsolhsub: '\\u27C8',\n\tbull: '\\u2022',\n\tbullet: '\\u2022',\n\tbump: '\\u224E',\n\tbumpE: '\\u2AAE',\n\tbumpe: '\\u224F',\n\tBumpeq: '\\u224E',\n\tbumpeq: '\\u224F',\n\tCacute: '\\u0106',\n\tcacute: '\\u0107',\n\tCap: '\\u22D2',\n\tcap: '\\u2229',\n\tcapand: '\\u2A44',\n\tcapbrcup: '\\u2A49',\n\tcapcap: '\\u2A4B',\n\tcapcup: '\\u2A47',\n\tcapdot: '\\u2A40',\n\tCapitalDifferentialD: '\\u2145',\n\tcaps: '\\u2229\\uFE00',\n\tcaret: '\\u2041',\n\tcaron: '\\u02C7',\n\tCayleys: '\\u212D',\n\tccaps: '\\u2A4D',\n\tCcaron: '\\u010C',\n\tccaron: '\\u010D',\n\tCcedil: '\\u00C7',\n\tccedil: '\\u00E7',\n\tCcirc: '\\u0108',\n\tccirc: '\\u0109',\n\tCconint: '\\u2230',\n\tccups: '\\u2A4C',\n\tccupssm: '\\u2A50',\n\tCdot: '\\u010A',\n\tcdot: '\\u010B',\n\tcedil: '\\u00B8',\n\tCedilla: '\\u00B8',\n\tcemptyv: '\\u29B2',\n\tcent: '\\u00A2',\n\tCenterDot: '\\u00B7',\n\tcenterdot: '\\u00B7',\n\tCfr: '\\u212D',\n\tcfr: '\\uD835\\uDD20',\n\tCHcy: '\\u0427',\n\tchcy: '\\u0447',\n\tcheck: '\\u2713',\n\tcheckmark: '\\u2713',\n\tChi: '\\u03A7',\n\tchi: '\\u03C7',\n\tcir: '\\u25CB',\n\tcirc: '\\u02C6',\n\tcirceq: '\\u2257',\n\tcirclearrowleft: '\\u21BA',\n\tcirclearrowright: '\\u21BB',\n\tcircledast: '\\u229B',\n\tcircledcirc: '\\u229A',\n\tcircleddash: '\\u229D',\n\tCircleDot: '\\u2299',\n\tcircledR: '\\u00AE',\n\tcircledS: '\\u24C8',\n\tCircleMinus: '\\u2296',\n\tCirclePlus: '\\u2295',\n\tCircleTimes: '\\u2297',\n\tcirE: '\\u29C3',\n\tcire: '\\u2257',\n\tcirfnint: '\\u2A10',\n\tcirmid: '\\u2AEF',\n\tcirscir: '\\u29C2',\n\tClockwiseContourIntegral: '\\u2232',\n\tCloseCurlyDoubleQuote: '\\u201D',\n\tCloseCurlyQuote: '\\u2019',\n\tclubs: '\\u2663',\n\tclubsuit: '\\u2663',\n\tColon: '\\u2237',\n\tcolon: '\\u003A',\n\tColone: '\\u2A74',\n\tcolone: '\\u2254',\n\tcoloneq: '\\u2254',\n\tcomma: '\\u002C',\n\tcommat: '\\u0040',\n\tcomp: '\\u2201',\n\tcompfn: '\\u2218',\n\tcomplement: '\\u2201',\n\tcomplexes: '\\u2102',\n\tcong: '\\u2245',\n\tcongdot: '\\u2A6D',\n\tCongruent: '\\u2261',\n\tConint: '\\u222F',\n\tconint: '\\u222E',\n\tContourIntegral: '\\u222E',\n\tCopf: '\\u2102',\n\tcopf: '\\uD835\\uDD54',\n\tcoprod: '\\u2210',\n\tCoproduct: '\\u2210',\n\tCOPY: '\\u00A9',\n\tcopy: '\\u00A9',\n\tcopysr: '\\u2117',\n\tCounterClockwiseContourIntegral: '\\u2233',\n\tcrarr: '\\u21B5',\n\tCross: '\\u2A2F',\n\tcross: '\\u2717',\n\tCscr: '\\uD835\\uDC9E',\n\tcscr: '\\uD835\\uDCB8',\n\tcsub: '\\u2ACF',\n\tcsube: '\\u2AD1',\n\tcsup: '\\u2AD0',\n\tcsupe: '\\u2AD2',\n\tctdot: '\\u22EF',\n\tcudarrl: '\\u2938',\n\tcudarrr: '\\u2935',\n\tcuepr: '\\u22DE',\n\tcuesc: '\\u22DF',\n\tcularr: '\\u21B6',\n\tcularrp: '\\u293D',\n\tCup: '\\u22D3',\n\tcup: '\\u222A',\n\tcupbrcap: '\\u2A48',\n\tCupCap: '\\u224D',\n\tcupcap: '\\u2A46',\n\tcupcup: '\\u2A4A',\n\tcupdot: '\\u228D',\n\tcupor: '\\u2A45',\n\tcups: '\\u222A\\uFE00',\n\tcurarr: '\\u21B7',\n\tcurarrm: '\\u293C',\n\tcurlyeqprec: '\\u22DE',\n\tcurlyeqsucc: '\\u22DF',\n\tcurlyvee: '\\u22CE',\n\tcurlywedge: '\\u22CF',\n\tcurren: '\\u00A4',\n\tcurvearrowleft: '\\u21B6',\n\tcurvearrowright: '\\u21B7',\n\tcuvee: '\\u22CE',\n\tcuwed: '\\u22CF',\n\tcwconint: '\\u2232',\n\tcwint: '\\u2231',\n\tcylcty: '\\u232D',\n\tDagger: '\\u2021',\n\tdagger: '\\u2020',\n\tdaleth: '\\u2138',\n\tDarr: '\\u21A1',\n\tdArr: '\\u21D3',\n\tdarr: '\\u2193',\n\tdash: '\\u2010',\n\tDashv: '\\u2AE4',\n\tdashv: '\\u22A3',\n\tdbkarow: '\\u290F',\n\tdblac: '\\u02DD',\n\tDcaron: '\\u010E',\n\tdcaron: '\\u010F',\n\tDcy: '\\u0414',\n\tdcy: '\\u0434',\n\tDD: '\\u2145',\n\tdd: '\\u2146',\n\tddagger: '\\u2021',\n\tddarr: '\\u21CA',\n\tDDotrahd: '\\u2911',\n\tddotseq: '\\u2A77',\n\tdeg: '\\u00B0',\n\tDel: '\\u2207',\n\tDelta: '\\u0394',\n\tdelta: '\\u03B4',\n\tdemptyv: '\\u29B1',\n\tdfisht: '\\u297F',\n\tDfr: '\\uD835\\uDD07',\n\tdfr: '\\uD835\\uDD21',\n\tdHar: '\\u2965',\n\tdharl: '\\u21C3',\n\tdharr: '\\u21C2',\n\tDiacriticalAcute: '\\u00B4',\n\tDiacriticalDot: '\\u02D9',\n\tDiacriticalDoubleAcute: '\\u02DD',\n\tDiacriticalGrave: '\\u0060',\n\tDiacriticalTilde: '\\u02DC',\n\tdiam: '\\u22C4',\n\tDiamond: '\\u22C4',\n\tdiamond: '\\u22C4',\n\tdiamondsuit: '\\u2666',\n\tdiams: '\\u2666',\n\tdie: '\\u00A8',\n\tDifferentialD: '\\u2146',\n\tdigamma: '\\u03DD',\n\tdisin: '\\u22F2',\n\tdiv: '\\u00F7',\n\tdivide: '\\u00F7',\n\tdivideontimes: '\\u22C7',\n\tdivonx: '\\u22C7',\n\tDJcy: '\\u0402',\n\tdjcy: '\\u0452',\n\tdlcorn: '\\u231E',\n\tdlcrop: '\\u230D',\n\tdollar: '\\u0024',\n\tDopf: '\\uD835\\uDD3B',\n\tdopf: '\\uD835\\uDD55',\n\tDot: '\\u00A8',\n\tdot: '\\u02D9',\n\tDotDot: '\\u20DC',\n\tdoteq: '\\u2250',\n\tdoteqdot: '\\u2251',\n\tDotEqual: '\\u2250',\n\tdotminus: '\\u2238',\n\tdotplus: '\\u2214',\n\tdotsquare: '\\u22A1',\n\tdoublebarwedge: '\\u2306',\n\tDoubleContourIntegral: '\\u222F',\n\tDoubleDot: '\\u00A8',\n\tDoubleDownArrow: '\\u21D3',\n\tDoubleLeftArrow: '\\u21D0',\n\tDoubleLeftRightArrow: '\\u21D4',\n\tDoubleLeftTee: '\\u2AE4',\n\tDoubleLongLeftArrow: '\\u27F8',\n\tDoubleLongLeftRightArrow: '\\u27FA',\n\tDoubleLongRightArrow: '\\u27F9',\n\tDoubleRightArrow: '\\u21D2',\n\tDoubleRightTee: '\\u22A8',\n\tDoubleUpArrow: '\\u21D1',\n\tDoubleUpDownArrow: '\\u21D5',\n\tDoubleVerticalBar: '\\u2225',\n\tDownArrow: '\\u2193',\n\tDownarrow: '\\u21D3',\n\tdownarrow: '\\u2193',\n\tDownArrowBar: '\\u2913',\n\tDownArrowUpArrow: '\\u21F5',\n\tDownBreve: '\\u0311',\n\tdowndownarrows: '\\u21CA',\n\tdownharpoonleft: '\\u21C3',\n\tdownharpoonright: '\\u21C2',\n\tDownLeftRightVector: '\\u2950',\n\tDownLeftTeeVector: '\\u295E',\n\tDownLeftVector: '\\u21BD',\n\tDownLeftVectorBar: '\\u2956',\n\tDownRightTeeVector: '\\u295F',\n\tDownRightVector: '\\u21C1',\n\tDownRightVectorBar: '\\u2957',\n\tDownTee: '\\u22A4',\n\tDownTeeArrow: '\\u21A7',\n\tdrbkarow: '\\u2910',\n\tdrcorn: '\\u231F',\n\tdrcrop: '\\u230C',\n\tDscr: '\\uD835\\uDC9F',\n\tdscr: '\\uD835\\uDCB9',\n\tDScy: '\\u0405',\n\tdscy: '\\u0455',\n\tdsol: '\\u29F6',\n\tDstrok: '\\u0110',\n\tdstrok: '\\u0111',\n\tdtdot: '\\u22F1',\n\tdtri: '\\u25BF',\n\tdtrif: '\\u25BE',\n\tduarr: '\\u21F5',\n\tduhar: '\\u296F',\n\tdwangle: '\\u29A6',\n\tDZcy: '\\u040F',\n\tdzcy: '\\u045F',\n\tdzigrarr: '\\u27FF',\n\tEacute: '\\u00C9',\n\teacute: '\\u00E9',\n\teaster: '\\u2A6E',\n\tEcaron: '\\u011A',\n\tecaron: '\\u011B',\n\tecir: '\\u2256',\n\tEcirc: '\\u00CA',\n\tecirc: '\\u00EA',\n\tecolon: '\\u2255',\n\tEcy: '\\u042D',\n\tecy: '\\u044D',\n\teDDot: '\\u2A77',\n\tEdot: '\\u0116',\n\teDot: '\\u2251',\n\tedot: '\\u0117',\n\tee: '\\u2147',\n\tefDot: '\\u2252',\n\tEfr: '\\uD835\\uDD08',\n\tefr: '\\uD835\\uDD22',\n\teg: '\\u2A9A',\n\tEgrave: '\\u00C8',\n\tegrave: '\\u00E8',\n\tegs: '\\u2A96',\n\tegsdot: '\\u2A98',\n\tel: '\\u2A99',\n\tElement: '\\u2208',\n\telinters: '\\u23E7',\n\tell: '\\u2113',\n\tels: '\\u2A95',\n\telsdot: '\\u2A97',\n\tEmacr: '\\u0112',\n\temacr: '\\u0113',\n\tempty: '\\u2205',\n\temptyset: '\\u2205',\n\tEmptySmallSquare: '\\u25FB',\n\temptyv: '\\u2205',\n\tEmptyVerySmallSquare: '\\u25AB',\n\temsp: '\\u2003',\n\temsp13: '\\u2004',\n\temsp14: '\\u2005',\n\tENG: '\\u014A',\n\teng: '\\u014B',\n\tensp: '\\u2002',\n\tEogon: '\\u0118',\n\teogon: '\\u0119',\n\tEopf: '\\uD835\\uDD3C',\n\teopf: '\\uD835\\uDD56',\n\tepar: '\\u22D5',\n\teparsl: '\\u29E3',\n\teplus: '\\u2A71',\n\tepsi: '\\u03B5',\n\tEpsilon: '\\u0395',\n\tepsilon: '\\u03B5',\n\tepsiv: '\\u03F5',\n\teqcirc: '\\u2256',\n\teqcolon: '\\u2255',\n\teqsim: '\\u2242',\n\teqslantgtr: '\\u2A96',\n\teqslantless: '\\u2A95',\n\tEqual: '\\u2A75',\n\tequals: '\\u003D',\n\tEqualTilde: '\\u2242',\n\tequest: '\\u225F',\n\tEquilibrium: '\\u21CC',\n\tequiv: '\\u2261',\n\tequivDD: '\\u2A78',\n\teqvparsl: '\\u29E5',\n\terarr: '\\u2971',\n\terDot: '\\u2253',\n\tEscr: '\\u2130',\n\tescr: '\\u212F',\n\tesdot: '\\u2250',\n\tEsim: '\\u2A73',\n\tesim: '\\u2242',\n\tEta: '\\u0397',\n\teta: '\\u03B7',\n\tETH: '\\u00D0',\n\teth: '\\u00F0',\n\tEuml: '\\u00CB',\n\teuml: '\\u00EB',\n\teuro: '\\u20AC',\n\texcl: '\\u0021',\n\texist: '\\u2203',\n\tExists: '\\u2203',\n\texpectation: '\\u2130',\n\tExponentialE: '\\u2147',\n\texponentiale: '\\u2147',\n\tfallingdotseq: '\\u2252',\n\tFcy: '\\u0424',\n\tfcy: '\\u0444',\n\tfemale: '\\u2640',\n\tffilig: '\\uFB03',\n\tfflig: '\\uFB00',\n\tffllig: '\\uFB04',\n\tFfr: '\\uD835\\uDD09',\n\tffr: '\\uD835\\uDD23',\n\tfilig: '\\uFB01',\n\tFilledSmallSquare: '\\u25FC',\n\tFilledVerySmallSquare: '\\u25AA',\n\tfjlig: '\\u0066\\u006A',\n\tflat: '\\u266D',\n\tfllig: '\\uFB02',\n\tfltns: '\\u25B1',\n\tfnof: '\\u0192',\n\tFopf: '\\uD835\\uDD3D',\n\tfopf: '\\uD835\\uDD57',\n\tForAll: '\\u2200',\n\tforall: '\\u2200',\n\tfork: '\\u22D4',\n\tforkv: '\\u2AD9',\n\tFouriertrf: '\\u2131',\n\tfpartint: '\\u2A0D',\n\tfrac12: '\\u00BD',\n\tfrac13: '\\u2153',\n\tfrac14: '\\u00BC',\n\tfrac15: '\\u2155',\n\tfrac16: '\\u2159',\n\tfrac18: '\\u215B',\n\tfrac23: '\\u2154',\n\tfrac25: '\\u2156',\n\tfrac34: '\\u00BE',\n\tfrac35: '\\u2157',\n\tfrac38: '\\u215C',\n\tfrac45: '\\u2158',\n\tfrac56: '\\u215A',\n\tfrac58: '\\u215D',\n\tfrac78: '\\u215E',\n\tfrasl: '\\u2044',\n\tfrown: '\\u2322',\n\tFscr: '\\u2131',\n\tfscr: '\\uD835\\uDCBB',\n\tgacute: '\\u01F5',\n\tGamma: '\\u0393',\n\tgamma: '\\u03B3',\n\tGammad: '\\u03DC',\n\tgammad: '\\u03DD',\n\tgap: '\\u2A86',\n\tGbreve: '\\u011E',\n\tgbreve: '\\u011F',\n\tGcedil: '\\u0122',\n\tGcirc: '\\u011C',\n\tgcirc: '\\u011D',\n\tGcy: '\\u0413',\n\tgcy: '\\u0433',\n\tGdot: '\\u0120',\n\tgdot: '\\u0121',\n\tgE: '\\u2267',\n\tge: '\\u2265',\n\tgEl: '\\u2A8C',\n\tgel: '\\u22DB',\n\tgeq: '\\u2265',\n\tgeqq: '\\u2267',\n\tgeqslant: '\\u2A7E',\n\tges: '\\u2A7E',\n\tgescc: '\\u2AA9',\n\tgesdot: '\\u2A80',\n\tgesdoto: '\\u2A82',\n\tgesdotol: '\\u2A84',\n\tgesl: '\\u22DB\\uFE00',\n\tgesles: '\\u2A94',\n\tGfr: '\\uD835\\uDD0A',\n\tgfr: '\\uD835\\uDD24',\n\tGg: '\\u22D9',\n\tgg: '\\u226B',\n\tggg: '\\u22D9',\n\tgimel: '\\u2137',\n\tGJcy: '\\u0403',\n\tgjcy: '\\u0453',\n\tgl: '\\u2277',\n\tgla: '\\u2AA5',\n\tglE: '\\u2A92',\n\tglj: '\\u2AA4',\n\tgnap: '\\u2A8A',\n\tgnapprox: '\\u2A8A',\n\tgnE: '\\u2269',\n\tgne: '\\u2A88',\n\tgneq: '\\u2A88',\n\tgneqq: '\\u2269',\n\tgnsim: '\\u22E7',\n\tGopf: '\\uD835\\uDD3E',\n\tgopf: '\\uD835\\uDD58',\n\tgrave: '\\u0060',\n\tGreaterEqual: '\\u2265',\n\tGreaterEqualLess: '\\u22DB',\n\tGreaterFullEqual: '\\u2267',\n\tGreaterGreater: '\\u2AA2',\n\tGreaterLess: '\\u2277',\n\tGreaterSlantEqual: '\\u2A7E',\n\tGreaterTilde: '\\u2273',\n\tGscr: '\\uD835\\uDCA2',\n\tgscr: '\\u210A',\n\tgsim: '\\u2273',\n\tgsime: '\\u2A8E',\n\tgsiml: '\\u2A90',\n\tGt: '\\u226B',\n\tGT: '\\u003E',\n\tgt: '\\u003E',\n\tgtcc: '\\u2AA7',\n\tgtcir: '\\u2A7A',\n\tgtdot: '\\u22D7',\n\tgtlPar: '\\u2995',\n\tgtquest: '\\u2A7C',\n\tgtrapprox: '\\u2A86',\n\tgtrarr: '\\u2978',\n\tgtrdot: '\\u22D7',\n\tgtreqless: '\\u22DB',\n\tgtreqqless: '\\u2A8C',\n\tgtrless: '\\u2277',\n\tgtrsim: '\\u2273',\n\tgvertneqq: '\\u2269\\uFE00',\n\tgvnE: '\\u2269\\uFE00',\n\tHacek: '\\u02C7',\n\thairsp: '\\u200A',\n\thalf: '\\u00BD',\n\thamilt: '\\u210B',\n\tHARDcy: '\\u042A',\n\thardcy: '\\u044A',\n\thArr: '\\u21D4',\n\tharr: '\\u2194',\n\tharrcir: '\\u2948',\n\tharrw: '\\u21AD',\n\tHat: '\\u005E',\n\thbar: '\\u210F',\n\tHcirc: '\\u0124',\n\thcirc: '\\u0125',\n\thearts: '\\u2665',\n\theartsuit: '\\u2665',\n\thellip: '\\u2026',\n\thercon: '\\u22B9',\n\tHfr: '\\u210C',\n\thfr: '\\uD835\\uDD25',\n\tHilbertSpace: '\\u210B',\n\thksearow: '\\u2925',\n\thkswarow: '\\u2926',\n\thoarr: '\\u21FF',\n\thomtht: '\\u223B',\n\thookleftarrow: '\\u21A9',\n\thookrightarrow: '\\u21AA',\n\tHopf: '\\u210D',\n\thopf: '\\uD835\\uDD59',\n\thorbar: '\\u2015',\n\tHorizontalLine: '\\u2500',\n\tHscr: '\\u210B',\n\thscr: '\\uD835\\uDCBD',\n\thslash: '\\u210F',\n\tHstrok: '\\u0126',\n\thstrok: '\\u0127',\n\tHumpDownHump: '\\u224E',\n\tHumpEqual: '\\u224F',\n\thybull: '\\u2043',\n\thyphen: '\\u2010',\n\tIacute: '\\u00CD',\n\tiacute: '\\u00ED',\n\tic: '\\u2063',\n\tIcirc: '\\u00CE',\n\ticirc: '\\u00EE',\n\tIcy: '\\u0418',\n\ticy: '\\u0438',\n\tIdot: '\\u0130',\n\tIEcy: '\\u0415',\n\tiecy: '\\u0435',\n\tiexcl: '\\u00A1',\n\tiff: '\\u21D4',\n\tIfr: '\\u2111',\n\tifr: '\\uD835\\uDD26',\n\tIgrave: '\\u00CC',\n\tigrave: '\\u00EC',\n\tii: '\\u2148',\n\tiiiint: '\\u2A0C',\n\tiiint: '\\u222D',\n\tiinfin: '\\u29DC',\n\tiiota: '\\u2129',\n\tIJlig: '\\u0132',\n\tijlig: '\\u0133',\n\tIm: '\\u2111',\n\tImacr: '\\u012A',\n\timacr: '\\u012B',\n\timage: '\\u2111',\n\tImaginaryI: '\\u2148',\n\timagline: '\\u2110',\n\timagpart: '\\u2111',\n\timath: '\\u0131',\n\timof: '\\u22B7',\n\timped: '\\u01B5',\n\tImplies: '\\u21D2',\n\tin: '\\u2208',\n\tincare: '\\u2105',\n\tinfin: '\\u221E',\n\tinfintie: '\\u29DD',\n\tinodot: '\\u0131',\n\tInt: '\\u222C',\n\tint: '\\u222B',\n\tintcal: '\\u22BA',\n\tintegers: '\\u2124',\n\tIntegral: '\\u222B',\n\tintercal: '\\u22BA',\n\tIntersection: '\\u22C2',\n\tintlarhk: '\\u2A17',\n\tintprod: '\\u2A3C',\n\tInvisibleComma: '\\u2063',\n\tInvisibleTimes: '\\u2062',\n\tIOcy: '\\u0401',\n\tiocy: '\\u0451',\n\tIogon: '\\u012E',\n\tiogon: '\\u012F',\n\tIopf: '\\uD835\\uDD40',\n\tiopf: '\\uD835\\uDD5A',\n\tIota: '\\u0399',\n\tiota: '\\u03B9',\n\tiprod: '\\u2A3C',\n\tiquest: '\\u00BF',\n\tIscr: '\\u2110',\n\tiscr: '\\uD835\\uDCBE',\n\tisin: '\\u2208',\n\tisindot: '\\u22F5',\n\tisinE: '\\u22F9',\n\tisins: '\\u22F4',\n\tisinsv: '\\u22F3',\n\tisinv: '\\u2208',\n\tit: '\\u2062',\n\tItilde: '\\u0128',\n\titilde: '\\u0129',\n\tIukcy: '\\u0406',\n\tiukcy: '\\u0456',\n\tIuml: '\\u00CF',\n\tiuml: '\\u00EF',\n\tJcirc: '\\u0134',\n\tjcirc: '\\u0135',\n\tJcy: '\\u0419',\n\tjcy: '\\u0439',\n\tJfr: '\\uD835\\uDD0D',\n\tjfr: '\\uD835\\uDD27',\n\tjmath: '\\u0237',\n\tJopf: '\\uD835\\uDD41',\n\tjopf: '\\uD835\\uDD5B',\n\tJscr: '\\uD835\\uDCA5',\n\tjscr: '\\uD835\\uDCBF',\n\tJsercy: '\\u0408',\n\tjsercy: '\\u0458',\n\tJukcy: '\\u0404',\n\tjukcy: '\\u0454',\n\tKappa: '\\u039A',\n\tkappa: '\\u03BA',\n\tkappav: '\\u03F0',\n\tKcedil: '\\u0136',\n\tkcedil: '\\u0137',\n\tKcy: '\\u041A',\n\tkcy: '\\u043A',\n\tKfr: '\\uD835\\uDD0E',\n\tkfr: '\\uD835\\uDD28',\n\tkgreen: '\\u0138',\n\tKHcy: '\\u0425',\n\tkhcy: '\\u0445',\n\tKJcy: '\\u040C',\n\tkjcy: '\\u045C',\n\tKopf: '\\uD835\\uDD42',\n\tkopf: '\\uD835\\uDD5C',\n\tKscr: '\\uD835\\uDCA6',\n\tkscr: '\\uD835\\uDCC0',\n\tlAarr: '\\u21DA',\n\tLacute: '\\u0139',\n\tlacute: '\\u013A',\n\tlaemptyv: '\\u29B4',\n\tlagran: '\\u2112',\n\tLambda: '\\u039B',\n\tlambda: '\\u03BB',\n\tLang: '\\u27EA',\n\tlang: '\\u27E8',\n\tlangd: '\\u2991',\n\tlangle: '\\u27E8',\n\tlap: '\\u2A85',\n\tLaplacetrf: '\\u2112',\n\tlaquo: '\\u00AB',\n\tLarr: '\\u219E',\n\tlArr: '\\u21D0',\n\tlarr: '\\u2190',\n\tlarrb: '\\u21E4',\n\tlarrbfs: '\\u291F',\n\tlarrfs: '\\u291D',\n\tlarrhk: '\\u21A9',\n\tlarrlp: '\\u21AB',\n\tlarrpl: '\\u2939',\n\tlarrsim: '\\u2973',\n\tlarrtl: '\\u21A2',\n\tlat: '\\u2AAB',\n\tlAtail: '\\u291B',\n\tlatail: '\\u2919',\n\tlate: '\\u2AAD',\n\tlates: '\\u2AAD\\uFE00',\n\tlBarr: '\\u290E',\n\tlbarr: '\\u290C',\n\tlbbrk: '\\u2772',\n\tlbrace: '\\u007B',\n\tlbrack: '\\u005B',\n\tlbrke: '\\u298B',\n\tlbrksld: '\\u298F',\n\tlbrkslu: '\\u298D',\n\tLcaron: '\\u013D',\n\tlcaron: '\\u013E',\n\tLcedil: '\\u013B',\n\tlcedil: '\\u013C',\n\tlceil: '\\u2308',\n\tlcub: '\\u007B',\n\tLcy: '\\u041B',\n\tlcy: '\\u043B',\n\tldca: '\\u2936',\n\tldquo: '\\u201C',\n\tldquor: '\\u201E',\n\tldrdhar: '\\u2967',\n\tldrushar: '\\u294B',\n\tldsh: '\\u21B2',\n\tlE: '\\u2266',\n\tle: '\\u2264',\n\tLeftAngleBracket: '\\u27E8',\n\tLeftArrow: '\\u2190',\n\tLeftarrow: '\\u21D0',\n\tleftarrow: '\\u2190',\n\tLeftArrowBar: '\\u21E4',\n\tLeftArrowRightArrow: '\\u21C6',\n\tleftarrowtail: '\\u21A2',\n\tLeftCeiling: '\\u2308',\n\tLeftDoubleBracket: '\\u27E6',\n\tLeftDownTeeVector: '\\u2961',\n\tLeftDownVector: '\\u21C3',\n\tLeftDownVectorBar: '\\u2959',\n\tLeftFloor: '\\u230A',\n\tleftharpoondown: '\\u21BD',\n\tleftharpoonup: '\\u21BC',\n\tleftleftarrows: '\\u21C7',\n\tLeftRightArrow: '\\u2194',\n\tLeftrightarrow: '\\u21D4',\n\tleftrightarrow: '\\u2194',\n\tleftrightarrows: '\\u21C6',\n\tleftrightharpoons: '\\u21CB',\n\tleftrightsquigarrow: '\\u21AD',\n\tLeftRightVector: '\\u294E',\n\tLeftTee: '\\u22A3',\n\tLeftTeeArrow: '\\u21A4',\n\tLeftTeeVector: '\\u295A',\n\tleftthreetimes: '\\u22CB',\n\tLeftTriangle: '\\u22B2',\n\tLeftTriangleBar: '\\u29CF',\n\tLeftTriangleEqual: '\\u22B4',\n\tLeftUpDownVector: '\\u2951',\n\tLeftUpTeeVector: '\\u2960',\n\tLeftUpVector: '\\u21BF',\n\tLeftUpVectorBar: '\\u2958',\n\tLeftVector: '\\u21BC',\n\tLeftVectorBar: '\\u2952',\n\tlEg: '\\u2A8B',\n\tleg: '\\u22DA',\n\tleq: '\\u2264',\n\tleqq: '\\u2266',\n\tleqslant: '\\u2A7D',\n\tles: '\\u2A7D',\n\tlescc: '\\u2AA8',\n\tlesdot: '\\u2A7F',\n\tlesdoto: '\\u2A81',\n\tlesdotor: '\\u2A83',\n\tlesg: '\\u22DA\\uFE00',\n\tlesges: '\\u2A93',\n\tlessapprox: '\\u2A85',\n\tlessdot: '\\u22D6',\n\tlesseqgtr: '\\u22DA',\n\tlesseqqgtr: '\\u2A8B',\n\tLessEqualGreater: '\\u22DA',\n\tLessFullEqual: '\\u2266',\n\tLessGreater: '\\u2276',\n\tlessgtr: '\\u2276',\n\tLessLess: '\\u2AA1',\n\tlesssim: '\\u2272',\n\tLessSlantEqual: '\\u2A7D',\n\tLessTilde: '\\u2272',\n\tlfisht: '\\u297C',\n\tlfloor: '\\u230A',\n\tLfr: '\\uD835\\uDD0F',\n\tlfr: '\\uD835\\uDD29',\n\tlg: '\\u2276',\n\tlgE: '\\u2A91',\n\tlHar: '\\u2962',\n\tlhard: '\\u21BD',\n\tlharu: '\\u21BC',\n\tlharul: '\\u296A',\n\tlhblk: '\\u2584',\n\tLJcy: '\\u0409',\n\tljcy: '\\u0459',\n\tLl: '\\u22D8',\n\tll: '\\u226A',\n\tllarr: '\\u21C7',\n\tllcorner: '\\u231E',\n\tLleftarrow: '\\u21DA',\n\tllhard: '\\u296B',\n\tlltri: '\\u25FA',\n\tLmidot: '\\u013F',\n\tlmidot: '\\u0140',\n\tlmoust: '\\u23B0',\n\tlmoustache: '\\u23B0',\n\tlnap: '\\u2A89',\n\tlnapprox: '\\u2A89',\n\tlnE: '\\u2268',\n\tlne: '\\u2A87',\n\tlneq: '\\u2A87',\n\tlneqq: '\\u2268',\n\tlnsim: '\\u22E6',\n\tloang: '\\u27EC',\n\tloarr: '\\u21FD',\n\tlobrk: '\\u27E6',\n\tLongLeftArrow: '\\u27F5',\n\tLongleftarrow: '\\u27F8',\n\tlongleftarrow: '\\u27F5',\n\tLongLeftRightArrow: '\\u27F7',\n\tLongleftrightarrow: '\\u27FA',\n\tlongleftrightarrow: '\\u27F7',\n\tlongmapsto: '\\u27FC',\n\tLongRightArrow: '\\u27F6',\n\tLongrightarrow: '\\u27F9',\n\tlongrightarrow: '\\u27F6',\n\tlooparrowleft: '\\u21AB',\n\tlooparrowright: '\\u21AC',\n\tlopar: '\\u2985',\n\tLopf: '\\uD835\\uDD43',\n\tlopf: '\\uD835\\uDD5D',\n\tloplus: '\\u2A2D',\n\tlotimes: '\\u2A34',\n\tlowast: '\\u2217',\n\tlowbar: '\\u005F',\n\tLowerLeftArrow: '\\u2199',\n\tLowerRightArrow: '\\u2198',\n\tloz: '\\u25CA',\n\tlozenge: '\\u25CA',\n\tlozf: '\\u29EB',\n\tlpar: '\\u0028',\n\tlparlt: '\\u2993',\n\tlrarr: '\\u21C6',\n\tlrcorner: '\\u231F',\n\tlrhar: '\\u21CB',\n\tlrhard: '\\u296D',\n\tlrm: '\\u200E',\n\tlrtri: '\\u22BF',\n\tlsaquo: '\\u2039',\n\tLscr: '\\u2112',\n\tlscr: '\\uD835\\uDCC1',\n\tLsh: '\\u21B0',\n\tlsh: '\\u21B0',\n\tlsim: '\\u2272',\n\tlsime: '\\u2A8D',\n\tlsimg: '\\u2A8F',\n\tlsqb: '\\u005B',\n\tlsquo: '\\u2018',\n\tlsquor: '\\u201A',\n\tLstrok: '\\u0141',\n\tlstrok: '\\u0142',\n\tLt: '\\u226A',\n\tLT: '\\u003C',\n\tlt: '\\u003C',\n\tltcc: '\\u2AA6',\n\tltcir: '\\u2A79',\n\tltdot: '\\u22D6',\n\tlthree: '\\u22CB',\n\tltimes: '\\u22C9',\n\tltlarr: '\\u2976',\n\tltquest: '\\u2A7B',\n\tltri: '\\u25C3',\n\tltrie: '\\u22B4',\n\tltrif: '\\u25C2',\n\tltrPar: '\\u2996',\n\tlurdshar: '\\u294A',\n\tluruhar: '\\u2966',\n\tlvertneqq: '\\u2268\\uFE00',\n\tlvnE: '\\u2268\\uFE00',\n\tmacr: '\\u00AF',\n\tmale: '\\u2642',\n\tmalt: '\\u2720',\n\tmaltese: '\\u2720',\n\tMap: '\\u2905',\n\tmap: '\\u21A6',\n\tmapsto: '\\u21A6',\n\tmapstodown: '\\u21A7',\n\tmapstoleft: '\\u21A4',\n\tmapstoup: '\\u21A5',\n\tmarker: '\\u25AE',\n\tmcomma: '\\u2A29',\n\tMcy: '\\u041C',\n\tmcy: '\\u043C',\n\tmdash: '\\u2014',\n\tmDDot: '\\u223A',\n\tmeasuredangle: '\\u2221',\n\tMediumSpace: '\\u205F',\n\tMellintrf: '\\u2133',\n\tMfr: '\\uD835\\uDD10',\n\tmfr: '\\uD835\\uDD2A',\n\tmho: '\\u2127',\n\tmicro: '\\u00B5',\n\tmid: '\\u2223',\n\tmidast: '\\u002A',\n\tmidcir: '\\u2AF0',\n\tmiddot: '\\u00B7',\n\tminus: '\\u2212',\n\tminusb: '\\u229F',\n\tminusd: '\\u2238',\n\tminusdu: '\\u2A2A',\n\tMinusPlus: '\\u2213',\n\tmlcp: '\\u2ADB',\n\tmldr: '\\u2026',\n\tmnplus: '\\u2213',\n\tmodels: '\\u22A7',\n\tMopf: '\\uD835\\uDD44',\n\tmopf: '\\uD835\\uDD5E',\n\tmp: '\\u2213',\n\tMscr: '\\u2133',\n\tmscr: '\\uD835\\uDCC2',\n\tmstpos: '\\u223E',\n\tMu: '\\u039C',\n\tmu: '\\u03BC',\n\tmultimap: '\\u22B8',\n\tmumap: '\\u22B8',\n\tnabla: '\\u2207',\n\tNacute: '\\u0143',\n\tnacute: '\\u0144',\n\tnang: '\\u2220\\u20D2',\n\tnap: '\\u2249',\n\tnapE: '\\u2A70\\u0338',\n\tnapid: '\\u224B\\u0338',\n\tnapos: '\\u0149',\n\tnapprox: '\\u2249',\n\tnatur: '\\u266E',\n\tnatural: '\\u266E',\n\tnaturals: '\\u2115',\n\tnbsp: '\\u00A0',\n\tnbump: '\\u224E\\u0338',\n\tnbumpe: '\\u224F\\u0338',\n\tncap: '\\u2A43',\n\tNcaron: '\\u0147',\n\tncaron: '\\u0148',\n\tNcedil: '\\u0145',\n\tncedil: '\\u0146',\n\tncong: '\\u2247',\n\tncongdot: '\\u2A6D\\u0338',\n\tncup: '\\u2A42',\n\tNcy: '\\u041D',\n\tncy: '\\u043D',\n\tndash: '\\u2013',\n\tne: '\\u2260',\n\tnearhk: '\\u2924',\n\tneArr: '\\u21D7',\n\tnearr: '\\u2197',\n\tnearrow: '\\u2197',\n\tnedot: '\\u2250\\u0338',\n\tNegativeMediumSpace: '\\u200B',\n\tNegativeThickSpace: '\\u200B',\n\tNegativeThinSpace: '\\u200B',\n\tNegativeVeryThinSpace: '\\u200B',\n\tnequiv: '\\u2262',\n\tnesear: '\\u2928',\n\tnesim: '\\u2242\\u0338',\n\tNestedGreaterGreater: '\\u226B',\n\tNestedLessLess: '\\u226A',\n\tNewLine: '\\u000A',\n\tnexist: '\\u2204',\n\tnexists: '\\u2204',\n\tNfr: '\\uD835\\uDD11',\n\tnfr: '\\uD835\\uDD2B',\n\tngE: '\\u2267\\u0338',\n\tnge: '\\u2271',\n\tngeq: '\\u2271',\n\tngeqq: '\\u2267\\u0338',\n\tngeqslant: '\\u2A7E\\u0338',\n\tnges: '\\u2A7E\\u0338',\n\tnGg: '\\u22D9\\u0338',\n\tngsim: '\\u2275',\n\tnGt: '\\u226B\\u20D2',\n\tngt: '\\u226F',\n\tngtr: '\\u226F',\n\tnGtv: '\\u226B\\u0338',\n\tnhArr: '\\u21CE',\n\tnharr: '\\u21AE',\n\tnhpar: '\\u2AF2',\n\tni: '\\u220B',\n\tnis: '\\u22FC',\n\tnisd: '\\u22FA',\n\tniv: '\\u220B',\n\tNJcy: '\\u040A',\n\tnjcy: '\\u045A',\n\tnlArr: '\\u21CD',\n\tnlarr: '\\u219A',\n\tnldr: '\\u2025',\n\tnlE: '\\u2266\\u0338',\n\tnle: '\\u2270',\n\tnLeftarrow: '\\u21CD',\n\tnleftarrow: '\\u219A',\n\tnLeftrightarrow: '\\u21CE',\n\tnleftrightarrow: '\\u21AE',\n\tnleq: '\\u2270',\n\tnleqq: '\\u2266\\u0338',\n\tnleqslant: '\\u2A7D\\u0338',\n\tnles: '\\u2A7D\\u0338',\n\tnless: '\\u226E',\n\tnLl: '\\u22D8\\u0338',\n\tnlsim: '\\u2274',\n\tnLt: '\\u226A\\u20D2',\n\tnlt: '\\u226E',\n\tnltri: '\\u22EA',\n\tnltrie: '\\u22EC',\n\tnLtv: '\\u226A\\u0338',\n\tnmid: '\\u2224',\n\tNoBreak: '\\u2060',\n\tNonBreakingSpace: '\\u00A0',\n\tNopf: '\\u2115',\n\tnopf: '\\uD835\\uDD5F',\n\tNot: '\\u2AEC',\n\tnot: '\\u00AC',\n\tNotCongruent: '\\u2262',\n\tNotCupCap: '\\u226D',\n\tNotDoubleVerticalBar: '\\u2226',\n\tNotElement: '\\u2209',\n\tNotEqual: '\\u2260',\n\tNotEqualTilde: '\\u2242\\u0338',\n\tNotExists: '\\u2204',\n\tNotGreater: '\\u226F',\n\tNotGreaterEqual: '\\u2271',\n\tNotGreaterFullEqual: '\\u2267\\u0338',\n\tNotGreaterGreater: '\\u226B\\u0338',\n\tNotGreaterLess: '\\u2279',\n\tNotGreaterSlantEqual: '\\u2A7E\\u0338',\n\tNotGreaterTilde: '\\u2275',\n\tNotHumpDownHump: '\\u224E\\u0338',\n\tNotHumpEqual: '\\u224F\\u0338',\n\tnotin: '\\u2209',\n\tnotindot: '\\u22F5\\u0338',\n\tnotinE: '\\u22F9\\u0338',\n\tnotinva: '\\u2209',\n\tnotinvb: '\\u22F7',\n\tnotinvc: '\\u22F6',\n\tNotLeftTriangle: '\\u22EA',\n\tNotLeftTriangleBar: '\\u29CF\\u0338',\n\tNotLeftTriangleEqual: '\\u22EC',\n\tNotLess: '\\u226E',\n\tNotLessEqual: '\\u2270',\n\tNotLessGreater: '\\u2278',\n\tNotLessLess: '\\u226A\\u0338',\n\tNotLessSlantEqual: '\\u2A7D\\u0338',\n\tNotLessTilde: '\\u2274',\n\tNotNestedGreaterGreater: '\\u2AA2\\u0338',\n\tNotNestedLessLess: '\\u2AA1\\u0338',\n\tnotni: '\\u220C',\n\tnotniva: '\\u220C',\n\tnotnivb: '\\u22FE',\n\tnotnivc: '\\u22FD',\n\tNotPrecedes: '\\u2280',\n\tNotPrecedesEqual: '\\u2AAF\\u0338',\n\tNotPrecedesSlantEqual: '\\u22E0',\n\tNotReverseElement: '\\u220C',\n\tNotRightTriangle: '\\u22EB',\n\tNotRightTriangleBar: '\\u29D0\\u0338',\n\tNotRightTriangleEqual: '\\u22ED',\n\tNotSquareSubset: '\\u228F\\u0338',\n\tNotSquareSubsetEqual: '\\u22E2',\n\tNotSquareSuperset: '\\u2290\\u0338',\n\tNotSquareSupersetEqual: '\\u22E3',\n\tNotSubset: '\\u2282\\u20D2',\n\tNotSubsetEqual: '\\u2288',\n\tNotSucceeds: '\\u2281',\n\tNotSucceedsEqual: '\\u2AB0\\u0338',\n\tNotSucceedsSlantEqual: '\\u22E1',\n\tNotSucceedsTilde: '\\u227F\\u0338',\n\tNotSuperset: '\\u2283\\u20D2',\n\tNotSupersetEqual: '\\u2289',\n\tNotTilde: '\\u2241',\n\tNotTildeEqual: '\\u2244',\n\tNotTildeFullEqual: '\\u2247',\n\tNotTildeTilde: '\\u2249',\n\tNotVerticalBar: '\\u2224',\n\tnpar: '\\u2226',\n\tnparallel: '\\u2226',\n\tnparsl: '\\u2AFD\\u20E5',\n\tnpart: '\\u2202\\u0338',\n\tnpolint: '\\u2A14',\n\tnpr: '\\u2280',\n\tnprcue: '\\u22E0',\n\tnpre: '\\u2AAF\\u0338',\n\tnprec: '\\u2280',\n\tnpreceq: '\\u2AAF\\u0338',\n\tnrArr: '\\u21CF',\n\tnrarr: '\\u219B',\n\tnrarrc: '\\u2933\\u0338',\n\tnrarrw: '\\u219D\\u0338',\n\tnRightarrow: '\\u21CF',\n\tnrightarrow: '\\u219B',\n\tnrtri: '\\u22EB',\n\tnrtrie: '\\u22ED',\n\tnsc: '\\u2281',\n\tnsccue: '\\u22E1',\n\tnsce: '\\u2AB0\\u0338',\n\tNscr: '\\uD835\\uDCA9',\n\tnscr: '\\uD835\\uDCC3',\n\tnshortmid: '\\u2224',\n\tnshortparallel: '\\u2226',\n\tnsim: '\\u2241',\n\tnsime: '\\u2244',\n\tnsimeq: '\\u2244',\n\tnsmid: '\\u2224',\n\tnspar: '\\u2226',\n\tnsqsube: '\\u22E2',\n\tnsqsupe: '\\u22E3',\n\tnsub: '\\u2284',\n\tnsubE: '\\u2AC5\\u0338',\n\tnsube: '\\u2288',\n\tnsubset: '\\u2282\\u20D2',\n\tnsubseteq: '\\u2288',\n\tnsubseteqq: '\\u2AC5\\u0338',\n\tnsucc: '\\u2281',\n\tnsucceq: '\\u2AB0\\u0338',\n\tnsup: '\\u2285',\n\tnsupE: '\\u2AC6\\u0338',\n\tnsupe: '\\u2289',\n\tnsupset: '\\u2283\\u20D2',\n\tnsupseteq: '\\u2289',\n\tnsupseteqq: '\\u2AC6\\u0338',\n\tntgl: '\\u2279',\n\tNtilde: '\\u00D1',\n\tntilde: '\\u00F1',\n\tntlg: '\\u2278',\n\tntriangleleft: '\\u22EA',\n\tntrianglelefteq: '\\u22EC',\n\tntriangleright: '\\u22EB',\n\tntrianglerighteq: '\\u22ED',\n\tNu: '\\u039D',\n\tnu: '\\u03BD',\n\tnum: '\\u0023',\n\tnumero: '\\u2116',\n\tnumsp: '\\u2007',\n\tnvap: '\\u224D\\u20D2',\n\tnVDash: '\\u22AF',\n\tnVdash: '\\u22AE',\n\tnvDash: '\\u22AD',\n\tnvdash: '\\u22AC',\n\tnvge: '\\u2265\\u20D2',\n\tnvgt: '\\u003E\\u20D2',\n\tnvHarr: '\\u2904',\n\tnvinfin: '\\u29DE',\n\tnvlArr: '\\u2902',\n\tnvle: '\\u2264\\u20D2',\n\tnvlt: '\\u003C\\u20D2',\n\tnvltrie: '\\u22B4\\u20D2',\n\tnvrArr: '\\u2903',\n\tnvrtrie: '\\u22B5\\u20D2',\n\tnvsim: '\\u223C\\u20D2',\n\tnwarhk: '\\u2923',\n\tnwArr: '\\u21D6',\n\tnwarr: '\\u2196',\n\tnwarrow: '\\u2196',\n\tnwnear: '\\u2927',\n\tOacute: '\\u00D3',\n\toacute: '\\u00F3',\n\toast: '\\u229B',\n\tocir: '\\u229A',\n\tOcirc: '\\u00D4',\n\tocirc: '\\u00F4',\n\tOcy: '\\u041E',\n\tocy: '\\u043E',\n\todash: '\\u229D',\n\tOdblac: '\\u0150',\n\todblac: '\\u0151',\n\todiv: '\\u2A38',\n\todot: '\\u2299',\n\todsold: '\\u29BC',\n\tOElig: '\\u0152',\n\toelig: '\\u0153',\n\tofcir: '\\u29BF',\n\tOfr: '\\uD835\\uDD12',\n\tofr: '\\uD835\\uDD2C',\n\togon: '\\u02DB',\n\tOgrave: '\\u00D2',\n\tograve: '\\u00F2',\n\togt: '\\u29C1',\n\tohbar: '\\u29B5',\n\tohm: '\\u03A9',\n\toint: '\\u222E',\n\tolarr: '\\u21BA',\n\tolcir: '\\u29BE',\n\tolcross: '\\u29BB',\n\toline: '\\u203E',\n\tolt: '\\u29C0',\n\tOmacr: '\\u014C',\n\tomacr: '\\u014D',\n\tOmega: '\\u03A9',\n\tomega: '\\u03C9',\n\tOmicron: '\\u039F',\n\tomicron: '\\u03BF',\n\tomid: '\\u29B6',\n\tominus: '\\u2296',\n\tOopf: '\\uD835\\uDD46',\n\toopf: '\\uD835\\uDD60',\n\topar: '\\u29B7',\n\tOpenCurlyDoubleQuote: '\\u201C',\n\tOpenCurlyQuote: '\\u2018',\n\toperp: '\\u29B9',\n\toplus: '\\u2295',\n\tOr: '\\u2A54',\n\tor: '\\u2228',\n\torarr: '\\u21BB',\n\tord: '\\u2A5D',\n\torder: '\\u2134',\n\torderof: '\\u2134',\n\tordf: '\\u00AA',\n\tordm: '\\u00BA',\n\torigof: '\\u22B6',\n\toror: '\\u2A56',\n\torslope: '\\u2A57',\n\torv: '\\u2A5B',\n\toS: '\\u24C8',\n\tOscr: '\\uD835\\uDCAA',\n\toscr: '\\u2134',\n\tOslash: '\\u00D8',\n\toslash: '\\u00F8',\n\tosol: '\\u2298',\n\tOtilde: '\\u00D5',\n\totilde: '\\u00F5',\n\tOtimes: '\\u2A37',\n\totimes: '\\u2297',\n\totimesas: '\\u2A36',\n\tOuml: '\\u00D6',\n\touml: '\\u00F6',\n\tovbar: '\\u233D',\n\tOverBar: '\\u203E',\n\tOverBrace: '\\u23DE',\n\tOverBracket: '\\u23B4',\n\tOverParenthesis: '\\u23DC',\n\tpar: '\\u2225',\n\tpara: '\\u00B6',\n\tparallel: '\\u2225',\n\tparsim: '\\u2AF3',\n\tparsl: '\\u2AFD',\n\tpart: '\\u2202',\n\tPartialD: '\\u2202',\n\tPcy: '\\u041F',\n\tpcy: '\\u043F',\n\tpercnt: '\\u0025',\n\tperiod: '\\u002E',\n\tpermil: '\\u2030',\n\tperp: '\\u22A5',\n\tpertenk: '\\u2031',\n\tPfr: '\\uD835\\uDD13',\n\tpfr: '\\uD835\\uDD2D',\n\tPhi: '\\u03A6',\n\tphi: '\\u03C6',\n\tphiv: '\\u03D5',\n\tphmmat: '\\u2133',\n\tphone: '\\u260E',\n\tPi: '\\u03A0',\n\tpi: '\\u03C0',\n\tpitchfork: '\\u22D4',\n\tpiv: '\\u03D6',\n\tplanck: '\\u210F',\n\tplanckh: '\\u210E',\n\tplankv: '\\u210F',\n\tplus: '\\u002B',\n\tplusacir: '\\u2A23',\n\tplusb: '\\u229E',\n\tpluscir: '\\u2A22',\n\tplusdo: '\\u2214',\n\tplusdu: '\\u2A25',\n\tpluse: '\\u2A72',\n\tPlusMinus: '\\u00B1',\n\tplusmn: '\\u00B1',\n\tplussim: '\\u2A26',\n\tplustwo: '\\u2A27',\n\tpm: '\\u00B1',\n\tPoincareplane: '\\u210C',\n\tpointint: '\\u2A15',\n\tPopf: '\\u2119',\n\tpopf: '\\uD835\\uDD61',\n\tpound: '\\u00A3',\n\tPr: '\\u2ABB',\n\tpr: '\\u227A',\n\tprap: '\\u2AB7',\n\tprcue: '\\u227C',\n\tprE: '\\u2AB3',\n\tpre: '\\u2AAF',\n\tprec: '\\u227A',\n\tprecapprox: '\\u2AB7',\n\tpreccurlyeq: '\\u227C',\n\tPrecedes: '\\u227A',\n\tPrecedesEqual: '\\u2AAF',\n\tPrecedesSlantEqual: '\\u227C',\n\tPrecedesTilde: '\\u227E',\n\tpreceq: '\\u2AAF',\n\tprecnapprox: '\\u2AB9',\n\tprecneqq: '\\u2AB5',\n\tprecnsim: '\\u22E8',\n\tprecsim: '\\u227E',\n\tPrime: '\\u2033',\n\tprime: '\\u2032',\n\tprimes: '\\u2119',\n\tprnap: '\\u2AB9',\n\tprnE: '\\u2AB5',\n\tprnsim: '\\u22E8',\n\tprod: '\\u220F',\n\tProduct: '\\u220F',\n\tprofalar: '\\u232E',\n\tprofline: '\\u2312',\n\tprofsurf: '\\u2313',\n\tprop: '\\u221D',\n\tProportion: '\\u2237',\n\tProportional: '\\u221D',\n\tpropto: '\\u221D',\n\tprsim: '\\u227E',\n\tprurel: '\\u22B0',\n\tPscr: '\\uD835\\uDCAB',\n\tpscr: '\\uD835\\uDCC5',\n\tPsi: '\\u03A8',\n\tpsi: '\\u03C8',\n\tpuncsp: '\\u2008',\n\tQfr: '\\uD835\\uDD14',\n\tqfr: '\\uD835\\uDD2E',\n\tqint: '\\u2A0C',\n\tQopf: '\\u211A',\n\tqopf: '\\uD835\\uDD62',\n\tqprime: '\\u2057',\n\tQscr: '\\uD835\\uDCAC',\n\tqscr: '\\uD835\\uDCC6',\n\tquaternions: '\\u210D',\n\tquatint: '\\u2A16',\n\tquest: '\\u003F',\n\tquesteq: '\\u225F',\n\tQUOT: '\\u0022',\n\tquot: '\\u0022',\n\trAarr: '\\u21DB',\n\trace: '\\u223D\\u0331',\n\tRacute: '\\u0154',\n\tracute: '\\u0155',\n\tradic: '\\u221A',\n\traemptyv: '\\u29B3',\n\tRang: '\\u27EB',\n\trang: '\\u27E9',\n\trangd: '\\u2992',\n\trange: '\\u29A5',\n\trangle: '\\u27E9',\n\traquo: '\\u00BB',\n\tRarr: '\\u21A0',\n\trArr: '\\u21D2',\n\trarr: '\\u2192',\n\trarrap: '\\u2975',\n\trarrb: '\\u21E5',\n\trarrbfs: '\\u2920',\n\trarrc: '\\u2933',\n\trarrfs: '\\u291E',\n\trarrhk: '\\u21AA',\n\trarrlp: '\\u21AC',\n\trarrpl: '\\u2945',\n\trarrsim: '\\u2974',\n\tRarrtl: '\\u2916',\n\trarrtl: '\\u21A3',\n\trarrw: '\\u219D',\n\trAtail: '\\u291C',\n\tratail: '\\u291A',\n\tratio: '\\u2236',\n\trationals: '\\u211A',\n\tRBarr: '\\u2910',\n\trBarr: '\\u290F',\n\trbarr: '\\u290D',\n\trbbrk: '\\u2773',\n\trbrace: '\\u007D',\n\trbrack: '\\u005D',\n\trbrke: '\\u298C',\n\trbrksld: '\\u298E',\n\trbrkslu: '\\u2990',\n\tRcaron: '\\u0158',\n\trcaron: '\\u0159',\n\tRcedil: '\\u0156',\n\trcedil: '\\u0157',\n\trceil: '\\u2309',\n\trcub: '\\u007D',\n\tRcy: '\\u0420',\n\trcy: '\\u0440',\n\trdca: '\\u2937',\n\trdldhar: '\\u2969',\n\trdquo: '\\u201D',\n\trdquor: '\\u201D',\n\trdsh: '\\u21B3',\n\tRe: '\\u211C',\n\treal: '\\u211C',\n\trealine: '\\u211B',\n\trealpart: '\\u211C',\n\treals: '\\u211D',\n\trect: '\\u25AD',\n\tREG: '\\u00AE',\n\treg: '\\u00AE',\n\tReverseElement: '\\u220B',\n\tReverseEquilibrium: '\\u21CB',\n\tReverseUpEquilibrium: '\\u296F',\n\trfisht: '\\u297D',\n\trfloor: '\\u230B',\n\tRfr: '\\u211C',\n\trfr: '\\uD835\\uDD2F',\n\trHar: '\\u2964',\n\trhard: '\\u21C1',\n\trharu: '\\u21C0',\n\trharul: '\\u296C',\n\tRho: '\\u03A1',\n\trho: '\\u03C1',\n\trhov: '\\u03F1',\n\tRightAngleBracket: '\\u27E9',\n\tRightArrow: '\\u2192',\n\tRightarrow: '\\u21D2',\n\trightarrow: '\\u2192',\n\tRightArrowBar: '\\u21E5',\n\tRightArrowLeftArrow: '\\u21C4',\n\trightarrowtail: '\\u21A3',\n\tRightCeiling: '\\u2309',\n\tRightDoubleBracket: '\\u27E7',\n\tRightDownTeeVector: '\\u295D',\n\tRightDownVector: '\\u21C2',\n\tRightDownVectorBar: '\\u2955',\n\tRightFloor: '\\u230B',\n\trightharpoondown: '\\u21C1',\n\trightharpoonup: '\\u21C0',\n\trightleftarrows: '\\u21C4',\n\trightleftharpoons: '\\u21CC',\n\trightrightarrows: '\\u21C9',\n\trightsquigarrow: '\\u219D',\n\tRightTee: '\\u22A2',\n\tRightTeeArrow: '\\u21A6',\n\tRightTeeVector: '\\u295B',\n\trightthreetimes: '\\u22CC',\n\tRightTriangle: '\\u22B3',\n\tRightTriangleBar: '\\u29D0',\n\tRightTriangleEqual: '\\u22B5',\n\tRightUpDownVector: '\\u294F',\n\tRightUpTeeVector: '\\u295C',\n\tRightUpVector: '\\u21BE',\n\tRightUpVectorBar: '\\u2954',\n\tRightVector: '\\u21C0',\n\tRightVectorBar: '\\u2953',\n\tring: '\\u02DA',\n\trisingdotseq: '\\u2253',\n\trlarr: '\\u21C4',\n\trlhar: '\\u21CC',\n\trlm: '\\u200F',\n\trmoust: '\\u23B1',\n\trmoustache: '\\u23B1',\n\trnmid: '\\u2AEE',\n\troang: '\\u27ED',\n\troarr: '\\u21FE',\n\trobrk: '\\u27E7',\n\tropar: '\\u2986',\n\tRopf: '\\u211D',\n\tropf: '\\uD835\\uDD63',\n\troplus: '\\u2A2E',\n\trotimes: '\\u2A35',\n\tRoundImplies: '\\u2970',\n\trpar: '\\u0029',\n\trpargt: '\\u2994',\n\trppolint: '\\u2A12',\n\trrarr: '\\u21C9',\n\tRrightarrow: '\\u21DB',\n\trsaquo: '\\u203A',\n\tRscr: '\\u211B',\n\trscr: '\\uD835\\uDCC7',\n\tRsh: '\\u21B1',\n\trsh: '\\u21B1',\n\trsqb: '\\u005D',\n\trsquo: '\\u2019',\n\trsquor: '\\u2019',\n\trthree: '\\u22CC',\n\trtimes: '\\u22CA',\n\trtri: '\\u25B9',\n\trtrie: '\\u22B5',\n\trtrif: '\\u25B8',\n\trtriltri: '\\u29CE',\n\tRuleDelayed: '\\u29F4',\n\truluhar: '\\u2968',\n\trx: '\\u211E',\n\tSacute: '\\u015A',\n\tsacute: '\\u015B',\n\tsbquo: '\\u201A',\n\tSc: '\\u2ABC',\n\tsc: '\\u227B',\n\tscap: '\\u2AB8',\n\tScaron: '\\u0160',\n\tscaron: '\\u0161',\n\tsccue: '\\u227D',\n\tscE: '\\u2AB4',\n\tsce: '\\u2AB0',\n\tScedil: '\\u015E',\n\tscedil: '\\u015F',\n\tScirc: '\\u015C',\n\tscirc: '\\u015D',\n\tscnap: '\\u2ABA',\n\tscnE: '\\u2AB6',\n\tscnsim: '\\u22E9',\n\tscpolint: '\\u2A13',\n\tscsim: '\\u227F',\n\tScy: '\\u0421',\n\tscy: '\\u0441',\n\tsdot: '\\u22C5',\n\tsdotb: '\\u22A1',\n\tsdote: '\\u2A66',\n\tsearhk: '\\u2925',\n\tseArr: '\\u21D8',\n\tsearr: '\\u2198',\n\tsearrow: '\\u2198',\n\tsect: '\\u00A7',\n\tsemi: '\\u003B',\n\tseswar: '\\u2929',\n\tsetminus: '\\u2216',\n\tsetmn: '\\u2216',\n\tsext: '\\u2736',\n\tSfr: '\\uD835\\uDD16',\n\tsfr: '\\uD835\\uDD30',\n\tsfrown: '\\u2322',\n\tsharp: '\\u266F',\n\tSHCHcy: '\\u0429',\n\tshchcy: '\\u0449',\n\tSHcy: '\\u0428',\n\tshcy: '\\u0448',\n\tShortDownArrow: '\\u2193',\n\tShortLeftArrow: '\\u2190',\n\tshortmid: '\\u2223',\n\tshortparallel: '\\u2225',\n\tShortRightArrow: '\\u2192',\n\tShortUpArrow: '\\u2191',\n\tshy: '\\u00AD',\n\tSigma: '\\u03A3',\n\tsigma: '\\u03C3',\n\tsigmaf: '\\u03C2',\n\tsigmav: '\\u03C2',\n\tsim: '\\u223C',\n\tsimdot: '\\u2A6A',\n\tsime: '\\u2243',\n\tsimeq: '\\u2243',\n\tsimg: '\\u2A9E',\n\tsimgE: '\\u2AA0',\n\tsiml: '\\u2A9D',\n\tsimlE: '\\u2A9F',\n\tsimne: '\\u2246',\n\tsimplus: '\\u2A24',\n\tsimrarr: '\\u2972',\n\tslarr: '\\u2190',\n\tSmallCircle: '\\u2218',\n\tsmallsetminus: '\\u2216',\n\tsmashp: '\\u2A33',\n\tsmeparsl: '\\u29E4',\n\tsmid: '\\u2223',\n\tsmile: '\\u2323',\n\tsmt: '\\u2AAA',\n\tsmte: '\\u2AAC',\n\tsmtes: '\\u2AAC\\uFE00',\n\tSOFTcy: '\\u042C',\n\tsoftcy: '\\u044C',\n\tsol: '\\u002F',\n\tsolb: '\\u29C4',\n\tsolbar: '\\u233F',\n\tSopf: '\\uD835\\uDD4A',\n\tsopf: '\\uD835\\uDD64',\n\tspades: '\\u2660',\n\tspadesuit: '\\u2660',\n\tspar: '\\u2225',\n\tsqcap: '\\u2293',\n\tsqcaps: '\\u2293\\uFE00',\n\tsqcup: '\\u2294',\n\tsqcups: '\\u2294\\uFE00',\n\tSqrt: '\\u221A',\n\tsqsub: '\\u228F',\n\tsqsube: '\\u2291',\n\tsqsubset: '\\u228F',\n\tsqsubseteq: '\\u2291',\n\tsqsup: '\\u2290',\n\tsqsupe: '\\u2292',\n\tsqsupset: '\\u2290',\n\tsqsupseteq: '\\u2292',\n\tsqu: '\\u25A1',\n\tSquare: '\\u25A1',\n\tsquare: '\\u25A1',\n\tSquareIntersection: '\\u2293',\n\tSquareSubset: '\\u228F',\n\tSquareSubsetEqual: '\\u2291',\n\tSquareSuperset: '\\u2290',\n\tSquareSupersetEqual: '\\u2292',\n\tSquareUnion: '\\u2294',\n\tsquarf: '\\u25AA',\n\tsquf: '\\u25AA',\n\tsrarr: '\\u2192',\n\tSscr: '\\uD835\\uDCAE',\n\tsscr: '\\uD835\\uDCC8',\n\tssetmn: '\\u2216',\n\tssmile: '\\u2323',\n\tsstarf: '\\u22C6',\n\tStar: '\\u22C6',\n\tstar: '\\u2606',\n\tstarf: '\\u2605',\n\tstraightepsilon: '\\u03F5',\n\tstraightphi: '\\u03D5',\n\tstrns: '\\u00AF',\n\tSub: '\\u22D0',\n\tsub: '\\u2282',\n\tsubdot: '\\u2ABD',\n\tsubE: '\\u2AC5',\n\tsube: '\\u2286',\n\tsubedot: '\\u2AC3',\n\tsubmult: '\\u2AC1',\n\tsubnE: '\\u2ACB',\n\tsubne: '\\u228A',\n\tsubplus: '\\u2ABF',\n\tsubrarr: '\\u2979',\n\tSubset: '\\u22D0',\n\tsubset: '\\u2282',\n\tsubseteq: '\\u2286',\n\tsubseteqq: '\\u2AC5',\n\tSubsetEqual: '\\u2286',\n\tsubsetneq: '\\u228A',\n\tsubsetneqq: '\\u2ACB',\n\tsubsim: '\\u2AC7',\n\tsubsub: '\\u2AD5',\n\tsubsup: '\\u2AD3',\n\tsucc: '\\u227B',\n\tsuccapprox: '\\u2AB8',\n\tsucccurlyeq: '\\u227D',\n\tSucceeds: '\\u227B',\n\tSucceedsEqual: '\\u2AB0',\n\tSucceedsSlantEqual: '\\u227D',\n\tSucceedsTilde: '\\u227F',\n\tsucceq: '\\u2AB0',\n\tsuccnapprox: '\\u2ABA',\n\tsuccneqq: '\\u2AB6',\n\tsuccnsim: '\\u22E9',\n\tsuccsim: '\\u227F',\n\tSuchThat: '\\u220B',\n\tSum: '\\u2211',\n\tsum: '\\u2211',\n\tsung: '\\u266A',\n\tSup: '\\u22D1',\n\tsup: '\\u2283',\n\tsup1: '\\u00B9',\n\tsup2: '\\u00B2',\n\tsup3: '\\u00B3',\n\tsupdot: '\\u2ABE',\n\tsupdsub: '\\u2AD8',\n\tsupE: '\\u2AC6',\n\tsupe: '\\u2287',\n\tsupedot: '\\u2AC4',\n\tSuperset: '\\u2283',\n\tSupersetEqual: '\\u2287',\n\tsuphsol: '\\u27C9',\n\tsuphsub: '\\u2AD7',\n\tsuplarr: '\\u297B',\n\tsupmult: '\\u2AC2',\n\tsupnE: '\\u2ACC',\n\tsupne: '\\u228B',\n\tsupplus: '\\u2AC0',\n\tSupset: '\\u22D1',\n\tsupset: '\\u2283',\n\tsupseteq: '\\u2287',\n\tsupseteqq: '\\u2AC6',\n\tsupsetneq: '\\u228B',\n\tsupsetneqq: '\\u2ACC',\n\tsupsim: '\\u2AC8',\n\tsupsub: '\\u2AD4',\n\tsupsup: '\\u2AD6',\n\tswarhk: '\\u2926',\n\tswArr: '\\u21D9',\n\tswarr: '\\u2199',\n\tswarrow: '\\u2199',\n\tswnwar: '\\u292A',\n\tszlig: '\\u00DF',\n\tTab: '\\u0009',\n\ttarget: '\\u2316',\n\tTau: '\\u03A4',\n\ttau: '\\u03C4',\n\ttbrk: '\\u23B4',\n\tTcaron: '\\u0164',\n\ttcaron: '\\u0165',\n\tTcedil: '\\u0162',\n\ttcedil: '\\u0163',\n\tTcy: '\\u0422',\n\ttcy: '\\u0442',\n\ttdot: '\\u20DB',\n\ttelrec: '\\u2315',\n\tTfr: '\\uD835\\uDD17',\n\ttfr: '\\uD835\\uDD31',\n\tthere4: '\\u2234',\n\tTherefore: '\\u2234',\n\ttherefore: '\\u2234',\n\tTheta: '\\u0398',\n\ttheta: '\\u03B8',\n\tthetasym: '\\u03D1',\n\tthetav: '\\u03D1',\n\tthickapprox: '\\u2248',\n\tthicksim: '\\u223C',\n\tThickSpace: '\\u205F\\u200A',\n\tthinsp: '\\u2009',\n\tThinSpace: '\\u2009',\n\tthkap: '\\u2248',\n\tthksim: '\\u223C',\n\tTHORN: '\\u00DE',\n\tthorn: '\\u00FE',\n\tTilde: '\\u223C',\n\ttilde: '\\u02DC',\n\tTildeEqual: '\\u2243',\n\tTildeFullEqual: '\\u2245',\n\tTildeTilde: '\\u2248',\n\ttimes: '\\u00D7',\n\ttimesb: '\\u22A0',\n\ttimesbar: '\\u2A31',\n\ttimesd: '\\u2A30',\n\ttint: '\\u222D',\n\ttoea: '\\u2928',\n\ttop: '\\u22A4',\n\ttopbot: '\\u2336',\n\ttopcir: '\\u2AF1',\n\tTopf: '\\uD835\\uDD4B',\n\ttopf: '\\uD835\\uDD65',\n\ttopfork: '\\u2ADA',\n\ttosa: '\\u2929',\n\ttprime: '\\u2034',\n\tTRADE: '\\u2122',\n\ttrade: '\\u2122',\n\ttriangle: '\\u25B5',\n\ttriangledown: '\\u25BF',\n\ttriangleleft: '\\u25C3',\n\ttrianglelefteq: '\\u22B4',\n\ttriangleq: '\\u225C',\n\ttriangleright: '\\u25B9',\n\ttrianglerighteq: '\\u22B5',\n\ttridot: '\\u25EC',\n\ttrie: '\\u225C',\n\ttriminus: '\\u2A3A',\n\tTripleDot: '\\u20DB',\n\ttriplus: '\\u2A39',\n\ttrisb: '\\u29CD',\n\ttritime: '\\u2A3B',\n\ttrpezium: '\\u23E2',\n\tTscr: '\\uD835\\uDCAF',\n\ttscr: '\\uD835\\uDCC9',\n\tTScy: '\\u0426',\n\ttscy: '\\u0446',\n\tTSHcy: '\\u040B',\n\ttshcy: '\\u045B',\n\tTstrok: '\\u0166',\n\ttstrok: '\\u0167',\n\ttwixt: '\\u226C',\n\ttwoheadleftarrow: '\\u219E',\n\ttwoheadrightarrow: '\\u21A0',\n\tUacute: '\\u00DA',\n\tuacute: '\\u00FA',\n\tUarr: '\\u219F',\n\tuArr: '\\u21D1',\n\tuarr: '\\u2191',\n\tUarrocir: '\\u2949',\n\tUbrcy: '\\u040E',\n\tubrcy: '\\u045E',\n\tUbreve: '\\u016C',\n\tubreve: '\\u016D',\n\tUcirc: '\\u00DB',\n\tucirc: '\\u00FB',\n\tUcy: '\\u0423',\n\tucy: '\\u0443',\n\tudarr: '\\u21C5',\n\tUdblac: '\\u0170',\n\tudblac: '\\u0171',\n\tudhar: '\\u296E',\n\tufisht: '\\u297E',\n\tUfr: '\\uD835\\uDD18',\n\tufr: '\\uD835\\uDD32',\n\tUgrave: '\\u00D9',\n\tugrave: '\\u00F9',\n\tuHar: '\\u2963',\n\tuharl: '\\u21BF',\n\tuharr: '\\u21BE',\n\tuhblk: '\\u2580',\n\tulcorn: '\\u231C',\n\tulcorner: '\\u231C',\n\tulcrop: '\\u230F',\n\tultri: '\\u25F8',\n\tUmacr: '\\u016A',\n\tumacr: '\\u016B',\n\tuml: '\\u00A8',\n\tUnderBar: '\\u005F',\n\tUnderBrace: '\\u23DF',\n\tUnderBracket: '\\u23B5',\n\tUnderParenthesis: '\\u23DD',\n\tUnion: '\\u22C3',\n\tUnionPlus: '\\u228E',\n\tUogon: '\\u0172',\n\tuogon: '\\u0173',\n\tUopf: '\\uD835\\uDD4C',\n\tuopf: '\\uD835\\uDD66',\n\tUpArrow: '\\u2191',\n\tUparrow: '\\u21D1',\n\tuparrow: '\\u2191',\n\tUpArrowBar: '\\u2912',\n\tUpArrowDownArrow: '\\u21C5',\n\tUpDownArrow: '\\u2195',\n\tUpdownarrow: '\\u21D5',\n\tupdownarrow: '\\u2195',\n\tUpEquilibrium: '\\u296E',\n\tupharpoonleft: '\\u21BF',\n\tupharpoonright: '\\u21BE',\n\tuplus: '\\u228E',\n\tUpperLeftArrow: '\\u2196',\n\tUpperRightArrow: '\\u2197',\n\tUpsi: '\\u03D2',\n\tupsi: '\\u03C5',\n\tupsih: '\\u03D2',\n\tUpsilon: '\\u03A5',\n\tupsilon: '\\u03C5',\n\tUpTee: '\\u22A5',\n\tUpTeeArrow: '\\u21A5',\n\tupuparrows: '\\u21C8',\n\turcorn: '\\u231D',\n\turcorner: '\\u231D',\n\turcrop: '\\u230E',\n\tUring: '\\u016E',\n\turing: '\\u016F',\n\turtri: '\\u25F9',\n\tUscr: '\\uD835\\uDCB0',\n\tuscr: '\\uD835\\uDCCA',\n\tutdot: '\\u22F0',\n\tUtilde: '\\u0168',\n\tutilde: '\\u0169',\n\tutri: '\\u25B5',\n\tutrif: '\\u25B4',\n\tuuarr: '\\u21C8',\n\tUuml: '\\u00DC',\n\tuuml: '\\u00FC',\n\tuwangle: '\\u29A7',\n\tvangrt: '\\u299C',\n\tvarepsilon: '\\u03F5',\n\tvarkappa: '\\u03F0',\n\tvarnothing: '\\u2205',\n\tvarphi: '\\u03D5',\n\tvarpi: '\\u03D6',\n\tvarpropto: '\\u221D',\n\tvArr: '\\u21D5',\n\tvarr: '\\u2195',\n\tvarrho: '\\u03F1',\n\tvarsigma: '\\u03C2',\n\tvarsubsetneq: '\\u228A\\uFE00',\n\tvarsubsetneqq: '\\u2ACB\\uFE00',\n\tvarsupsetneq: '\\u228B\\uFE00',\n\tvarsupsetneqq: '\\u2ACC\\uFE00',\n\tvartheta: '\\u03D1',\n\tvartriangleleft: '\\u22B2',\n\tvartriangleright: '\\u22B3',\n\tVbar: '\\u2AEB',\n\tvBar: '\\u2AE8',\n\tvBarv: '\\u2AE9',\n\tVcy: '\\u0412',\n\tvcy: '\\u0432',\n\tVDash: '\\u22AB',\n\tVdash: '\\u22A9',\n\tvDash: '\\u22A8',\n\tvdash: '\\u22A2',\n\tVdashl: '\\u2AE6',\n\tVee: '\\u22C1',\n\tvee: '\\u2228',\n\tveebar: '\\u22BB',\n\tveeeq: '\\u225A',\n\tvellip: '\\u22EE',\n\tVerbar: '\\u2016',\n\tverbar: '\\u007C',\n\tVert: '\\u2016',\n\tvert: '\\u007C',\n\tVerticalBar: '\\u2223',\n\tVerticalLine: '\\u007C',\n\tVerticalSeparator: '\\u2758',\n\tVerticalTilde: '\\u2240',\n\tVeryThinSpace: '\\u200A',\n\tVfr: '\\uD835\\uDD19',\n\tvfr: '\\uD835\\uDD33',\n\tvltri: '\\u22B2',\n\tvnsub: '\\u2282\\u20D2',\n\tvnsup: '\\u2283\\u20D2',\n\tVopf: '\\uD835\\uDD4D',\n\tvopf: '\\uD835\\uDD67',\n\tvprop: '\\u221D',\n\tvrtri: '\\u22B3',\n\tVscr: '\\uD835\\uDCB1',\n\tvscr: '\\uD835\\uDCCB',\n\tvsubnE: '\\u2ACB\\uFE00',\n\tvsubne: '\\u228A\\uFE00',\n\tvsupnE: '\\u2ACC\\uFE00',\n\tvsupne: '\\u228B\\uFE00',\n\tVvdash: '\\u22AA',\n\tvzigzag: '\\u299A',\n\tWcirc: '\\u0174',\n\twcirc: '\\u0175',\n\twedbar: '\\u2A5F',\n\tWedge: '\\u22C0',\n\twedge: '\\u2227',\n\twedgeq: '\\u2259',\n\tweierp: '\\u2118',\n\tWfr: '\\uD835\\uDD1A',\n\twfr: '\\uD835\\uDD34',\n\tWopf: '\\uD835\\uDD4E',\n\twopf: '\\uD835\\uDD68',\n\twp: '\\u2118',\n\twr: '\\u2240',\n\twreath: '\\u2240',\n\tWscr: '\\uD835\\uDCB2',\n\twscr: '\\uD835\\uDCCC',\n\txcap: '\\u22C2',\n\txcirc: '\\u25EF',\n\txcup: '\\u22C3',\n\txdtri: '\\u25BD',\n\tXfr: '\\uD835\\uDD1B',\n\txfr: '\\uD835\\uDD35',\n\txhArr: '\\u27FA',\n\txharr: '\\u27F7',\n\tXi: '\\u039E',\n\txi: '\\u03BE',\n\txlArr: '\\u27F8',\n\txlarr: '\\u27F5',\n\txmap: '\\u27FC',\n\txnis: '\\u22FB',\n\txodot: '\\u2A00',\n\tXopf: '\\uD835\\uDD4F',\n\txopf: '\\uD835\\uDD69',\n\txoplus: '\\u2A01',\n\txotime: '\\u2A02',\n\txrArr: '\\u27F9',\n\txrarr: '\\u27F6',\n\tXscr: '\\uD835\\uDCB3',\n\txscr: '\\uD835\\uDCCD',\n\txsqcup: '\\u2A06',\n\txuplus: '\\u2A04',\n\txutri: '\\u25B3',\n\txvee: '\\u22C1',\n\txwedge: '\\u22C0',\n\tYacute: '\\u00DD',\n\tyacute: '\\u00FD',\n\tYAcy: '\\u042F',\n\tyacy: '\\u044F',\n\tYcirc: '\\u0176',\n\tycirc: '\\u0177',\n\tYcy: '\\u042B',\n\tycy: '\\u044B',\n\tyen: '\\u00A5',\n\tYfr: '\\uD835\\uDD1C',\n\tyfr: '\\uD835\\uDD36',\n\tYIcy: '\\u0407',\n\tyicy: '\\u0457',\n\tYopf: '\\uD835\\uDD50',\n\tyopf: '\\uD835\\uDD6A',\n\tYscr: '\\uD835\\uDCB4',\n\tyscr: '\\uD835\\uDCCE',\n\tYUcy: '\\u042E',\n\tyucy: '\\u044E',\n\tYuml: '\\u0178',\n\tyuml: '\\u00FF',\n\tZacute: '\\u0179',\n\tzacute: '\\u017A',\n\tZcaron: '\\u017D',\n\tzcaron: '\\u017E',\n\tZcy: '\\u0417',\n\tzcy: '\\u0437',\n\tZdot: '\\u017B',\n\tzdot: '\\u017C',\n\tzeetrf: '\\u2128',\n\tZeroWidthSpace: '\\u200B',\n\tZeta: '\\u0396',\n\tzeta: '\\u03B6',\n\tZfr: '\\u2128',\n\tzfr: '\\uD835\\uDD37',\n\tZHcy: '\\u0416',\n\tzhcy: '\\u0436',\n\tzigrarr: '\\u21DD',\n\tZopf: '\\u2124',\n\tzopf: '\\uD835\\uDD6B',\n\tZscr: '\\uD835\\uDCB5',\n\tzscr: '\\uD835\\uDCCF',\n\tzwj: '\\u200D',\n\tzwnj: '\\u200C',\n});\n\n/**\n * @deprecated use `HTML_ENTITIES` instead\n * @see HTML_ENTITIES\n */\nexports.entityMap = exports.HTML_ENTITIES;\n","var dom = require('./dom')\nexports.DOMImplementation = dom.DOMImplementation\nexports.XMLSerializer = dom.XMLSerializer\nexports.DOMParser = require('./dom-parser').DOMParser\n","var NAMESPACE = require(\"./conventions\").NAMESPACE;\n\n//[4] \tNameStartChar\t ::= \t\":\" | [A-Z] | \"_\" | [a-z] | [#xC0-#xD6] | [#xD8-#xF6] | [#xF8-#x2FF] | [#x370-#x37D] | [#x37F-#x1FFF] | [#x200C-#x200D] | [#x2070-#x218F] | [#x2C00-#x2FEF] | [#x3001-#xD7FF] | [#xF900-#xFDCF] | [#xFDF0-#xFFFD] | [#x10000-#xEFFFF]\n//[4a] \tNameChar\t ::= \tNameStartChar | \"-\" | \".\" | [0-9] | #xB7 | [#x0300-#x036F] | [#x203F-#x2040]\n//[5] \tName\t ::= \tNameStartChar (NameChar)*\nvar nameStartChar = /[A-Z_a-z\\xC0-\\xD6\\xD8-\\xF6\\u00F8-\\u02FF\\u0370-\\u037D\\u037F-\\u1FFF\\u200C-\\u200D\\u2070-\\u218F\\u2C00-\\u2FEF\\u3001-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFFD]///\\u10000-\\uEFFFF\nvar nameChar = new RegExp(\"[\\\\-\\\\.0-9\"+nameStartChar.source.slice(1,-1)+\"\\\\u00B7\\\\u0300-\\\\u036F\\\\u203F-\\\\u2040]\");\nvar tagNamePattern = new RegExp('^'+nameStartChar.source+nameChar.source+'*(?:\\:'+nameStartChar.source+nameChar.source+'*)?$');\n//var tagNamePattern = /^[a-zA-Z_][\\w\\-\\.]*(?:\\:[a-zA-Z_][\\w\\-\\.]*)?$/\n//var handlers = 'resolveEntity,getExternalSubset,characters,endDocument,endElement,endPrefixMapping,ignorableWhitespace,processingInstruction,setDocumentLocator,skippedEntity,startDocument,startElement,startPrefixMapping,notationDecl,unparsedEntityDecl,error,fatalError,warning,attributeDecl,elementDecl,externalEntityDecl,internalEntityDecl,comment,endCDATA,endDTD,endEntity,startCDATA,startDTD,startEntity'.split(',')\n\n//S_TAG,\tS_ATTR,\tS_EQ,\tS_ATTR_NOQUOT_VALUE\n//S_ATTR_SPACE,\tS_ATTR_END,\tS_TAG_SPACE, S_TAG_CLOSE\nvar S_TAG = 0;//tag name offerring\nvar S_ATTR = 1;//attr name offerring\nvar S_ATTR_SPACE=2;//attr name end and space offer\nvar S_EQ = 3;//=space?\nvar S_ATTR_NOQUOT_VALUE = 4;//attr value(no quot value only)\nvar S_ATTR_END = 5;//attr value end and no space(quot end)\nvar S_TAG_SPACE = 6;//(attr value end || tag end ) && (space offer)\nvar S_TAG_CLOSE = 7;//closed el\n\n/**\n * Creates an error that will not be caught by XMLReader aka the SAX parser.\n *\n * @param {string} message\n * @param {any?} locator Optional, can provide details about the location in the source\n * @constructor\n */\nfunction ParseError(message, locator) {\n\tthis.message = message\n\tthis.locator = locator\n\tif(Error.captureStackTrace) Error.captureStackTrace(this, ParseError);\n}\nParseError.prototype = new Error();\nParseError.prototype.name = ParseError.name\n\nfunction XMLReader(){\n\n}\n\nXMLReader.prototype = {\n\tparse:function(source,defaultNSMap,entityMap){\n\t\tvar domBuilder = this.domBuilder;\n\t\tdomBuilder.startDocument();\n\t\t_copy(defaultNSMap ,defaultNSMap = {})\n\t\tparse(source,defaultNSMap,entityMap,\n\t\t\t\tdomBuilder,this.errorHandler);\n\t\tdomBuilder.endDocument();\n\t}\n}\nfunction parse(source,defaultNSMapCopy,entityMap,domBuilder,errorHandler){\n\tfunction fixedFromCharCode(code) {\n\t\t// String.prototype.fromCharCode does not supports\n\t\t// > 2 bytes unicode chars directly\n\t\tif (code > 0xffff) {\n\t\t\tcode -= 0x10000;\n\t\t\tvar surrogate1 = 0xd800 + (code >> 10)\n\t\t\t\t, surrogate2 = 0xdc00 + (code & 0x3ff);\n\n\t\t\treturn String.fromCharCode(surrogate1, surrogate2);\n\t\t} else {\n\t\t\treturn String.fromCharCode(code);\n\t\t}\n\t}\n\tfunction entityReplacer(a){\n\t\tvar k = a.slice(1,-1);\n\t\tif (Object.hasOwnProperty.call(entityMap, k)) {\n\t\t\treturn entityMap[k];\n\t\t}else if(k.charAt(0) === '#'){\n\t\t\treturn fixedFromCharCode(parseInt(k.substr(1).replace('x','0x')))\n\t\t}else{\n\t\t\terrorHandler.error('entity not found:'+a);\n\t\t\treturn a;\n\t\t}\n\t}\n\tfunction appendText(end){//has some bugs\n\t\tif(end>start){\n\t\t\tvar xt = source.substring(start,end).replace(/&#?\\w+;/g,entityReplacer);\n\t\t\tlocator&&position(start);\n\t\t\tdomBuilder.characters(xt,0,end-start);\n\t\t\tstart = end\n\t\t}\n\t}\n\tfunction position(p,m){\n\t\twhile(p>=lineEnd && (m = linePattern.exec(source))){\n\t\t\tlineStart = m.index;\n\t\t\tlineEnd = lineStart + m[0].length;\n\t\t\tlocator.lineNumber++;\n\t\t\t//console.log('line++:',locator,startPos,endPos)\n\t\t}\n\t\tlocator.columnNumber = p-lineStart+1;\n\t}\n\tvar lineStart = 0;\n\tvar lineEnd = 0;\n\tvar linePattern = /.*(?:\\r\\n?|\\n)|.*$/g\n\tvar locator = domBuilder.locator;\n\n\tvar parseStack = [{currentNSMap:defaultNSMapCopy}]\n\tvar closeMap = {};\n\tvar start = 0;\n\twhile(true){\n\t\ttry{\n\t\t\tvar tagStart = source.indexOf('<',start);\n\t\t\tif(tagStart<0){\n\t\t\t\tif(!source.substr(start).match(/^\\s*$/)){\n\t\t\t\t\tvar doc = domBuilder.doc;\n\t \t\t\tvar text = doc.createTextNode(source.substr(start));\n\t \t\t\tdoc.appendChild(text);\n\t \t\t\tdomBuilder.currentElement = text;\n\t\t\t\t}\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tif(tagStart>start){\n\t\t\t\tappendText(tagStart);\n\t\t\t}\n\t\t\tswitch(source.charAt(tagStart+1)){\n\t\t\tcase '/':\n\t\t\t\tvar end = source.indexOf('>',tagStart+3);\n\t\t\t\tvar tagName = source.substring(tagStart + 2, end).replace(/[ \\t\\n\\r]+$/g, '');\n\t\t\t\tvar config = parseStack.pop();\n\t\t\t\tif(end<0){\n\n\t \t\ttagName = source.substring(tagStart+2).replace(/[\\s<].*/,'');\n\t \t\terrorHandler.error(\"end tag name: \"+tagName+' is not complete:'+config.tagName);\n\t \t\tend = tagStart+1+tagName.length;\n\t \t}else if(tagName.match(/\\s\n\t\t\t\tlocator&&position(tagStart);\n\t\t\t\tend = parseInstruction(source,tagStart,domBuilder);\n\t\t\t\tbreak;\n\t\t\tcase '!':// start){\n\t\t\tstart = end;\n\t\t}else{\n\t\t\t//TODO: 这里有可能sax回退,有位置错误风险\n\t\t\tappendText(Math.max(tagStart,start)+1);\n\t\t}\n\t}\n}\nfunction copyLocator(f,t){\n\tt.lineNumber = f.lineNumber;\n\tt.columnNumber = f.columnNumber;\n\treturn t;\n}\n\n/**\n * @see #appendElement(source,elStartEnd,el,selfClosed,entityReplacer,domBuilder,parseStack);\n * @return end of the elementStartPart(end of elementEndPart for selfClosed el)\n */\nfunction parseElementStartPart(source,start,el,currentNSMap,entityReplacer,errorHandler){\n\n\t/**\n\t * @param {string} qname\n\t * @param {string} value\n\t * @param {number} startIndex\n\t */\n\tfunction addAttribute(qname, value, startIndex) {\n\t\tif (el.attributeNames.hasOwnProperty(qname)) {\n\t\t\terrorHandler.fatalError('Attribute ' + qname + ' redefined')\n\t\t}\n\t\tel.addValue(\n\t\t\tqname,\n\t\t\t// @see https://www.w3.org/TR/xml/#AVNormalize\n\t\t\t// since the xmldom sax parser does not \"interpret\" DTD the following is not implemented:\n\t\t\t// - recursive replacement of (DTD) entity references\n\t\t\t// - trimming and collapsing multiple spaces into a single one for attributes that are not of type CDATA\n\t\t\tvalue.replace(/[\\t\\n\\r]/g, ' ').replace(/&#?\\w+;/g, entityReplacer),\n\t\t\tstartIndex\n\t\t)\n\t}\n\tvar attrName;\n\tvar value;\n\tvar p = ++start;\n\tvar s = S_TAG;//status\n\twhile(true){\n\t\tvar c = source.charAt(p);\n\t\tswitch(c){\n\t\tcase '=':\n\t\t\tif(s === S_ATTR){//attrName\n\t\t\t\tattrName = source.slice(start,p);\n\t\t\t\ts = S_EQ;\n\t\t\t}else if(s === S_ATTR_SPACE){\n\t\t\t\ts = S_EQ;\n\t\t\t}else{\n\t\t\t\t//fatalError: equal must after attrName or space after attrName\n\t\t\t\tthrow new Error('attribute equal must after attrName'); // No known test case\n\t\t\t}\n\t\t\tbreak;\n\t\tcase '\\'':\n\t\tcase '\"':\n\t\t\tif(s === S_EQ || s === S_ATTR //|| s == S_ATTR_SPACE\n\t\t\t\t){//equal\n\t\t\t\tif(s === S_ATTR){\n\t\t\t\t\terrorHandler.warning('attribute value must after \"=\"')\n\t\t\t\t\tattrName = source.slice(start,p)\n\t\t\t\t}\n\t\t\t\tstart = p+1;\n\t\t\t\tp = source.indexOf(c,start)\n\t\t\t\tif(p>0){\n\t\t\t\t\tvalue = source.slice(start, p);\n\t\t\t\t\taddAttribute(attrName, value, start-1);\n\t\t\t\t\ts = S_ATTR_END;\n\t\t\t\t}else{\n\t\t\t\t\t//fatalError: no end quot match\n\t\t\t\t\tthrow new Error('attribute value no end \\''+c+'\\' match');\n\t\t\t\t}\n\t\t\t}else if(s == S_ATTR_NOQUOT_VALUE){\n\t\t\t\tvalue = source.slice(start, p);\n\t\t\t\taddAttribute(attrName, value, start);\n\t\t\t\terrorHandler.warning('attribute \"'+attrName+'\" missed start quot('+c+')!!');\n\t\t\t\tstart = p+1;\n\t\t\t\ts = S_ATTR_END\n\t\t\t}else{\n\t\t\t\t//fatalError: no equal before\n\t\t\t\tthrow new Error('attribute value must after \"=\"'); // No known test case\n\t\t\t}\n\t\t\tbreak;\n\t\tcase '/':\n\t\t\tswitch(s){\n\t\t\tcase S_TAG:\n\t\t\t\tel.setTagName(source.slice(start,p));\n\t\t\tcase S_ATTR_END:\n\t\t\tcase S_TAG_SPACE:\n\t\t\tcase S_TAG_CLOSE:\n\t\t\t\ts =S_TAG_CLOSE;\n\t\t\t\tel.closed = true;\n\t\t\tcase S_ATTR_NOQUOT_VALUE:\n\t\t\tcase S_ATTR:\n\t\t\t\tbreak;\n\t\t\t\tcase S_ATTR_SPACE:\n\t\t\t\t\tel.closed = true;\n\t\t\t\tbreak;\n\t\t\t//case S_EQ:\n\t\t\tdefault:\n\t\t\t\tthrow new Error(\"attribute invalid close char('/')\") // No known test case\n\t\t\t}\n\t\t\tbreak;\n\t\tcase ''://end document\n\t\t\terrorHandler.error('unexpected end of input');\n\t\t\tif(s == S_TAG){\n\t\t\t\tel.setTagName(source.slice(start,p));\n\t\t\t}\n\t\t\treturn p;\n\t\tcase '>':\n\t\t\tswitch(s){\n\t\t\tcase S_TAG:\n\t\t\t\tel.setTagName(source.slice(start,p));\n\t\t\tcase S_ATTR_END:\n\t\t\tcase S_TAG_SPACE:\n\t\t\tcase S_TAG_CLOSE:\n\t\t\t\tbreak;//normal\n\t\t\tcase S_ATTR_NOQUOT_VALUE://Compatible state\n\t\t\tcase S_ATTR:\n\t\t\t\tvalue = source.slice(start,p);\n\t\t\t\tif(value.slice(-1) === '/'){\n\t\t\t\t\tel.closed = true;\n\t\t\t\t\tvalue = value.slice(0,-1)\n\t\t\t\t}\n\t\t\tcase S_ATTR_SPACE:\n\t\t\t\tif(s === S_ATTR_SPACE){\n\t\t\t\t\tvalue = attrName;\n\t\t\t\t}\n\t\t\t\tif(s == S_ATTR_NOQUOT_VALUE){\n\t\t\t\t\terrorHandler.warning('attribute \"'+value+'\" missed quot(\")!');\n\t\t\t\t\taddAttribute(attrName, value, start)\n\t\t\t\t}else{\n\t\t\t\t\tif(!NAMESPACE.isHTML(currentNSMap['']) || !value.match(/^(?:disabled|checked|selected)$/i)){\n\t\t\t\t\t\terrorHandler.warning('attribute \"'+value+'\" missed value!! \"'+value+'\" instead!!')\n\t\t\t\t\t}\n\t\t\t\t\taddAttribute(value, value, start)\n\t\t\t\t}\n\t\t\t\tbreak;\n\t\t\tcase S_EQ:\n\t\t\t\tthrow new Error('attribute value missed!!');\n\t\t\t}\n//\t\t\tconsole.log(tagName,tagNamePattern,tagNamePattern.test(tagName))\n\t\t\treturn p;\n\t\t/*xml space '\\x20' | #x9 | #xD | #xA; */\n\t\tcase '\\u0080':\n\t\t\tc = ' ';\n\t\tdefault:\n\t\t\tif(c<= ' '){//space\n\t\t\t\tswitch(s){\n\t\t\t\tcase S_TAG:\n\t\t\t\t\tel.setTagName(source.slice(start,p));//tagName\n\t\t\t\t\ts = S_TAG_SPACE;\n\t\t\t\t\tbreak;\n\t\t\t\tcase S_ATTR:\n\t\t\t\t\tattrName = source.slice(start,p)\n\t\t\t\t\ts = S_ATTR_SPACE;\n\t\t\t\t\tbreak;\n\t\t\t\tcase S_ATTR_NOQUOT_VALUE:\n\t\t\t\t\tvar value = source.slice(start, p);\n\t\t\t\t\terrorHandler.warning('attribute \"'+value+'\" missed quot(\")!!');\n\t\t\t\t\taddAttribute(attrName, value, start)\n\t\t\t\tcase S_ATTR_END:\n\t\t\t\t\ts = S_TAG_SPACE;\n\t\t\t\t\tbreak;\n\t\t\t\t//case S_TAG_SPACE:\n\t\t\t\t//case S_EQ:\n\t\t\t\t//case S_ATTR_SPACE:\n\t\t\t\t//\tvoid();break;\n\t\t\t\t//case S_TAG_CLOSE:\n\t\t\t\t\t//ignore warning\n\t\t\t\t}\n\t\t\t}else{//not space\n//S_TAG,\tS_ATTR,\tS_EQ,\tS_ATTR_NOQUOT_VALUE\n//S_ATTR_SPACE,\tS_ATTR_END,\tS_TAG_SPACE, S_TAG_CLOSE\n\t\t\t\tswitch(s){\n\t\t\t\t//case S_TAG:void();break;\n\t\t\t\t//case S_ATTR:void();break;\n\t\t\t\t//case S_ATTR_NOQUOT_VALUE:void();break;\n\t\t\t\tcase S_ATTR_SPACE:\n\t\t\t\t\tvar tagName = el.tagName;\n\t\t\t\t\tif (!NAMESPACE.isHTML(currentNSMap['']) || !attrName.match(/^(?:disabled|checked|selected)$/i)) {\n\t\t\t\t\t\terrorHandler.warning('attribute \"'+attrName+'\" missed value!! \"'+attrName+'\" instead2!!')\n\t\t\t\t\t}\n\t\t\t\t\taddAttribute(attrName, attrName, start);\n\t\t\t\t\tstart = p;\n\t\t\t\t\ts = S_ATTR;\n\t\t\t\t\tbreak;\n\t\t\t\tcase S_ATTR_END:\n\t\t\t\t\terrorHandler.warning('attribute space is required\"'+attrName+'\"!!')\n\t\t\t\tcase S_TAG_SPACE:\n\t\t\t\t\ts = S_ATTR;\n\t\t\t\t\tstart = p;\n\t\t\t\t\tbreak;\n\t\t\t\tcase S_EQ:\n\t\t\t\t\ts = S_ATTR_NOQUOT_VALUE;\n\t\t\t\t\tstart = p;\n\t\t\t\t\tbreak;\n\t\t\t\tcase S_TAG_CLOSE:\n\t\t\t\t\tthrow new Error(\"elements closed character '/' and '>' must be connected to\");\n\t\t\t\t}\n\t\t\t}\n\t\t}//end outer switch\n\t\t//console.log('p++',p)\n\t\tp++;\n\t}\n}\n/**\n * @return true if has new namespace define\n */\nfunction appendElement(el,domBuilder,currentNSMap){\n\tvar tagName = el.tagName;\n\tvar localNSMap = null;\n\t//var currentNSMap = parseStack[parseStack.length-1].currentNSMap;\n\tvar i = el.length;\n\twhile(i--){\n\t\tvar a = el[i];\n\t\tvar qName = a.qName;\n\t\tvar value = a.value;\n\t\tvar nsp = qName.indexOf(':');\n\t\tif(nsp>0){\n\t\t\tvar prefix = a.prefix = qName.slice(0,nsp);\n\t\t\tvar localName = qName.slice(nsp+1);\n\t\t\tvar nsPrefix = prefix === 'xmlns' && localName\n\t\t}else{\n\t\t\tlocalName = qName;\n\t\t\tprefix = null\n\t\t\tnsPrefix = qName === 'xmlns' && ''\n\t\t}\n\t\t//can not set prefix,because prefix !== ''\n\t\ta.localName = localName ;\n\t\t//prefix == null for no ns prefix attribute\n\t\tif(nsPrefix !== false){//hack!!\n\t\t\tif(localNSMap == null){\n\t\t\t\tlocalNSMap = {}\n\t\t\t\t//console.log(currentNSMap,0)\n\t\t\t\t_copy(currentNSMap,currentNSMap={})\n\t\t\t\t//console.log(currentNSMap,1)\n\t\t\t}\n\t\t\tcurrentNSMap[nsPrefix] = localNSMap[nsPrefix] = value;\n\t\t\ta.uri = NAMESPACE.XMLNS\n\t\t\tdomBuilder.startPrefixMapping(nsPrefix, value)\n\t\t}\n\t}\n\tvar i = el.length;\n\twhile(i--){\n\t\ta = el[i];\n\t\tvar prefix = a.prefix;\n\t\tif(prefix){//no prefix attribute has no namespace\n\t\t\tif(prefix === 'xml'){\n\t\t\t\ta.uri = NAMESPACE.XML;\n\t\t\t}if(prefix !== 'xmlns'){\n\t\t\t\ta.uri = currentNSMap[prefix || '']\n\n\t\t\t\t//{console.log('###'+a.qName,domBuilder.locator.systemId+'',currentNSMap,a.uri)}\n\t\t\t}\n\t\t}\n\t}\n\tvar nsp = tagName.indexOf(':');\n\tif(nsp>0){\n\t\tprefix = el.prefix = tagName.slice(0,nsp);\n\t\tlocalName = el.localName = tagName.slice(nsp+1);\n\t}else{\n\t\tprefix = null;//important!!\n\t\tlocalName = el.localName = tagName;\n\t}\n\t//no prefix element has default namespace\n\tvar ns = el.uri = currentNSMap[prefix || ''];\n\tdomBuilder.startElement(ns,localName,tagName,el);\n\t//endPrefixMapping and startPrefixMapping have not any help for dom builder\n\t//localNSMap = null\n\tif(el.closed){\n\t\tdomBuilder.endElement(ns,localName,tagName);\n\t\tif(localNSMap){\n\t\t\tfor (prefix in localNSMap) {\n\t\t\t\tif (Object.prototype.hasOwnProperty.call(localNSMap, prefix)) {\n\t\t\t\t\tdomBuilder.endPrefixMapping(prefix);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}else{\n\t\tel.currentNSMap = currentNSMap;\n\t\tel.localNSMap = localNSMap;\n\t\t//parseStack.push(el);\n\t\treturn true;\n\t}\n}\nfunction parseHtmlSpecialContent(source,elStartEnd,tagName,entityReplacer,domBuilder){\n\tif(/^(?:script|textarea)$/i.test(tagName)){\n\t\tvar elEndStart = source.indexOf('',elStartEnd);\n\t\tvar text = source.substring(elStartEnd+1,elEndStart);\n\t\tif(/[&<]/.test(text)){\n\t\t\tif(/^script$/i.test(tagName)){\n\t\t\t\t//if(!/\\]\\]>/.test(text)){\n\t\t\t\t\t//lexHandler.startCDATA();\n\t\t\t\t\tdomBuilder.characters(text,0,text.length);\n\t\t\t\t\t//lexHandler.endCDATA();\n\t\t\t\t\treturn elEndStart;\n\t\t\t\t//}\n\t\t\t}//}else{//text area\n\t\t\t\ttext = text.replace(/&#?\\w+;/g,entityReplacer);\n\t\t\t\tdomBuilder.characters(text,0,text.length);\n\t\t\t\treturn elEndStart;\n\t\t\t//}\n\n\t\t}\n\t}\n\treturn elStartEnd+1;\n}\nfunction fixSelfClosed(source,elStartEnd,tagName,closeMap){\n\t//if(tagName in closeMap){\n\tvar pos = closeMap[tagName];\n\tif(pos == null){\n\t\t//console.log(tagName)\n\t\tpos = source.lastIndexOf('')\n\t\tif(pos',start+4);\n\t\t\t//append comment source.substring(4,end)// ${end}. Duration (${end - start})\\n`;\n }\n return bufferedRangesStr;\n}\n\n/**\n * ranges\n *\n * Utilities for working with TimeRanges.\n *\n */\n\nconst TIME_FUDGE_FACTOR = 1 / 30; // Comparisons between time values such as current time and the end of the buffered range\n// can be misleading because of precision differences or when the current media has poorly\n// aligned audio and video, which can cause values to be slightly off from what you would\n// expect. This value is what we consider to be safe to use in such comparisons to account\n// for these scenarios.\n\nconst SAFE_TIME_DELTA = TIME_FUDGE_FACTOR * 3;\nconst filterRanges = function (timeRanges, predicate) {\n const results = [];\n let i;\n if (timeRanges && timeRanges.length) {\n // Search for ranges that match the predicate\n for (i = 0; i < timeRanges.length; i++) {\n if (predicate(timeRanges.start(i), timeRanges.end(i))) {\n results.push([timeRanges.start(i), timeRanges.end(i)]);\n }\n }\n }\n return createTimeRanges(results);\n};\n/**\n * Attempts to find the buffered TimeRange that contains the specified\n * time.\n *\n * @param {TimeRanges} buffered - the TimeRanges object to query\n * @param {number} time - the time to filter on.\n * @return {TimeRanges} a new TimeRanges object\n */\n\nconst findRange = function (buffered, time) {\n return filterRanges(buffered, function (start, end) {\n return start - SAFE_TIME_DELTA <= time && end + SAFE_TIME_DELTA >= time;\n });\n};\n/**\n * Returns the TimeRanges that begin later than the specified time.\n *\n * @param {TimeRanges} timeRanges - the TimeRanges object to query\n * @param {number} time - the time to filter on.\n * @return {TimeRanges} a new TimeRanges object.\n */\n\nconst findNextRange = function (timeRanges, time) {\n return filterRanges(timeRanges, function (start) {\n return start - TIME_FUDGE_FACTOR >= time;\n });\n};\n/**\n * Returns gaps within a list of TimeRanges\n *\n * @param {TimeRanges} buffered - the TimeRanges object\n * @return {TimeRanges} a TimeRanges object of gaps\n */\n\nconst findGaps = function (buffered) {\n if (buffered.length < 2) {\n return createTimeRanges();\n }\n const ranges = [];\n for (let i = 1; i < buffered.length; i++) {\n const start = buffered.end(i - 1);\n const end = buffered.start(i);\n ranges.push([start, end]);\n }\n return createTimeRanges(ranges);\n};\n/**\n * Calculate the intersection of two TimeRanges\n *\n * @param {TimeRanges} bufferA\n * @param {TimeRanges} bufferB\n * @return {TimeRanges} The interesection of `bufferA` with `bufferB`\n */\n\nconst bufferIntersection = function (bufferA, bufferB) {\n let start = null;\n let end = null;\n let arity = 0;\n const extents = [];\n const ranges = [];\n if (!bufferA || !bufferA.length || !bufferB || !bufferB.length) {\n return createTimeRanges();\n } // Handle the case where we have both buffers and create an\n // intersection of the two\n\n let count = bufferA.length; // A) Gather up all start and end times\n\n while (count--) {\n extents.push({\n time: bufferA.start(count),\n type: 'start'\n });\n extents.push({\n time: bufferA.end(count),\n type: 'end'\n });\n }\n count = bufferB.length;\n while (count--) {\n extents.push({\n time: bufferB.start(count),\n type: 'start'\n });\n extents.push({\n time: bufferB.end(count),\n type: 'end'\n });\n } // B) Sort them by time\n\n extents.sort(function (a, b) {\n return a.time - b.time;\n }); // C) Go along one by one incrementing arity for start and decrementing\n // arity for ends\n\n for (count = 0; count < extents.length; count++) {\n if (extents[count].type === 'start') {\n arity++; // D) If arity is ever incremented to 2 we are entering an\n // overlapping range\n\n if (arity === 2) {\n start = extents[count].time;\n }\n } else if (extents[count].type === 'end') {\n arity--; // E) If arity is ever decremented to 1 we leaving an\n // overlapping range\n\n if (arity === 1) {\n end = extents[count].time;\n }\n } // F) Record overlapping ranges\n\n if (start !== null && end !== null) {\n ranges.push([start, end]);\n start = null;\n end = null;\n }\n }\n return createTimeRanges(ranges);\n};\n/**\n * Gets a human readable string for a TimeRange\n *\n * @param {TimeRange} range\n * @return {string} a human readable string\n */\n\nconst printableRange = range => {\n const strArr = [];\n if (!range || !range.length) {\n return '';\n }\n for (let i = 0; i < range.length; i++) {\n strArr.push(range.start(i) + ' => ' + range.end(i));\n }\n return strArr.join(', ');\n};\n/**\n * Calculates the amount of time left in seconds until the player hits the end of the\n * buffer and causes a rebuffer\n *\n * @param {TimeRange} buffered\n * The state of the buffer\n * @param {Numnber} currentTime\n * The current time of the player\n * @param {number} playbackRate\n * The current playback rate of the player. Defaults to 1.\n * @return {number}\n * Time until the player has to start rebuffering in seconds.\n * @function timeUntilRebuffer\n */\n\nconst timeUntilRebuffer = function (buffered, currentTime, playbackRate = 1) {\n const bufferedEnd = buffered.length ? buffered.end(buffered.length - 1) : 0;\n return (bufferedEnd - currentTime) / playbackRate;\n};\n/**\n * Converts a TimeRanges object into an array representation\n *\n * @param {TimeRanges} timeRanges\n * @return {Array}\n */\n\nconst timeRangesToArray = timeRanges => {\n const timeRangesList = [];\n for (let i = 0; i < timeRanges.length; i++) {\n timeRangesList.push({\n start: timeRanges.start(i),\n end: timeRanges.end(i)\n });\n }\n return timeRangesList;\n};\n/**\n * Determines if two time range objects are different.\n *\n * @param {TimeRange} a\n * the first time range object to check\n *\n * @param {TimeRange} b\n * the second time range object to check\n *\n * @return {Boolean}\n * Whether the time range objects differ\n */\n\nconst isRangeDifferent = function (a, b) {\n // same object\n if (a === b) {\n return false;\n } // one or the other is undefined\n\n if (!a && b || !b && a) {\n return true;\n } // length is different\n\n if (a.length !== b.length) {\n return true;\n } // see if any start/end pair is different\n\n for (let i = 0; i < a.length; i++) {\n if (a.start(i) !== b.start(i) || a.end(i) !== b.end(i)) {\n return true;\n }\n } // if the length and every pair is the same\n // this is the same time range\n\n return false;\n};\nconst lastBufferedEnd = function (a) {\n if (!a || !a.length || !a.end) {\n return;\n }\n return a.end(a.length - 1);\n};\n/**\n * A utility function to add up the amount of time in a timeRange\n * after a specified startTime.\n * ie:[[0, 10], [20, 40], [50, 60]] with a startTime 0\n * would return 40 as there are 40s seconds after 0 in the timeRange\n *\n * @param {TimeRange} range\n * The range to check against\n * @param {number} startTime\n * The time in the time range that you should start counting from\n *\n * @return {number}\n * The number of seconds in the buffer passed the specified time.\n */\n\nconst timeAheadOf = function (range, startTime) {\n let time = 0;\n if (!range || !range.length) {\n return time;\n }\n for (let i = 0; i < range.length; i++) {\n const start = range.start(i);\n const end = range.end(i); // startTime is after this range entirely\n\n if (startTime > end) {\n continue;\n } // startTime is within this range\n\n if (startTime > start && startTime <= end) {\n time += end - startTime;\n continue;\n } // startTime is before this range.\n\n time += end - start;\n }\n return time;\n};\n\n/**\n * @file playlist.js\n *\n * Playlist related utilities.\n */\n/**\n * Get the duration of a segment, with special cases for\n * llhls segments that do not have a duration yet.\n *\n * @param {Object} playlist\n * the playlist that the segment belongs to.\n * @param {Object} segment\n * the segment to get a duration for.\n *\n * @return {number}\n * the segment duration\n */\n\nconst segmentDurationWithParts = (playlist, segment) => {\n // if this isn't a preload segment\n // then we will have a segment duration that is accurate.\n if (!segment.preload) {\n return segment.duration;\n } // otherwise we have to add up parts and preload hints\n // to get an up to date duration.\n\n let result = 0;\n (segment.parts || []).forEach(function (p) {\n result += p.duration;\n }); // for preload hints we have to use partTargetDuration\n // as they won't even have a duration yet.\n\n (segment.preloadHints || []).forEach(function (p) {\n if (p.type === 'PART') {\n result += playlist.partTargetDuration;\n }\n });\n return result;\n};\n/**\n * A function to get a combined list of parts and segments with durations\n * and indexes.\n *\n * @param {Playlist} playlist the playlist to get the list for.\n *\n * @return {Array} The part/segment list.\n */\n\nconst getPartsAndSegments = playlist => (playlist.segments || []).reduce((acc, segment, si) => {\n if (segment.parts) {\n segment.parts.forEach(function (part, pi) {\n acc.push({\n duration: part.duration,\n segmentIndex: si,\n partIndex: pi,\n part,\n segment\n });\n });\n } else {\n acc.push({\n duration: segment.duration,\n segmentIndex: si,\n partIndex: null,\n segment,\n part: null\n });\n }\n return acc;\n}, []);\nconst getLastParts = media => {\n const lastSegment = media.segments && media.segments.length && media.segments[media.segments.length - 1];\n return lastSegment && lastSegment.parts || [];\n};\nconst getKnownPartCount = ({\n preloadSegment\n}) => {\n if (!preloadSegment) {\n return;\n }\n const {\n parts,\n preloadHints\n } = preloadSegment;\n let partCount = (preloadHints || []).reduce((count, hint) => count + (hint.type === 'PART' ? 1 : 0), 0);\n partCount += parts && parts.length ? parts.length : 0;\n return partCount;\n};\n/**\n * Get the number of seconds to delay from the end of a\n * live playlist.\n *\n * @param {Playlist} main the main playlist\n * @param {Playlist} media the media playlist\n * @return {number} the hold back in seconds.\n */\n\nconst liveEdgeDelay = (main, media) => {\n if (media.endList) {\n return 0;\n } // dash suggestedPresentationDelay trumps everything\n\n if (main && main.suggestedPresentationDelay) {\n return main.suggestedPresentationDelay;\n }\n const hasParts = getLastParts(media).length > 0; // look for \"part\" delays from ll-hls first\n\n if (hasParts && media.serverControl && media.serverControl.partHoldBack) {\n return media.serverControl.partHoldBack;\n } else if (hasParts && media.partTargetDuration) {\n return media.partTargetDuration * 3; // finally look for full segment delays\n } else if (media.serverControl && media.serverControl.holdBack) {\n return media.serverControl.holdBack;\n } else if (media.targetDuration) {\n return media.targetDuration * 3;\n }\n return 0;\n};\n/**\n * walk backward until we find a duration we can use\n * or return a failure\n *\n * @param {Playlist} playlist the playlist to walk through\n * @param {Number} endSequence the mediaSequence to stop walking on\n */\n\nconst backwardDuration = function (playlist, endSequence) {\n let result = 0;\n let i = endSequence - playlist.mediaSequence; // if a start time is available for segment immediately following\n // the interval, use it\n\n let segment = playlist.segments[i]; // Walk backward until we find the latest segment with timeline\n // information that is earlier than endSequence\n\n if (segment) {\n if (typeof segment.start !== 'undefined') {\n return {\n result: segment.start,\n precise: true\n };\n }\n if (typeof segment.end !== 'undefined') {\n return {\n result: segment.end - segment.duration,\n precise: true\n };\n }\n }\n while (i--) {\n segment = playlist.segments[i];\n if (typeof segment.end !== 'undefined') {\n return {\n result: result + segment.end,\n precise: true\n };\n }\n result += segmentDurationWithParts(playlist, segment);\n if (typeof segment.start !== 'undefined') {\n return {\n result: result + segment.start,\n precise: true\n };\n }\n }\n return {\n result,\n precise: false\n };\n};\n/**\n * walk forward until we find a duration we can use\n * or return a failure\n *\n * @param {Playlist} playlist the playlist to walk through\n * @param {number} endSequence the mediaSequence to stop walking on\n */\n\nconst forwardDuration = function (playlist, endSequence) {\n let result = 0;\n let segment;\n let i = endSequence - playlist.mediaSequence; // Walk forward until we find the earliest segment with timeline\n // information\n\n for (; i < playlist.segments.length; i++) {\n segment = playlist.segments[i];\n if (typeof segment.start !== 'undefined') {\n return {\n result: segment.start - result,\n precise: true\n };\n }\n result += segmentDurationWithParts(playlist, segment);\n if (typeof segment.end !== 'undefined') {\n return {\n result: segment.end - result,\n precise: true\n };\n }\n } // indicate we didn't find a useful duration estimate\n\n return {\n result: -1,\n precise: false\n };\n};\n/**\n * Calculate the media duration from the segments associated with a\n * playlist. The duration of a subinterval of the available segments\n * may be calculated by specifying an end index.\n *\n * @param {Object} playlist a media playlist object\n * @param {number=} endSequence an exclusive upper boundary\n * for the playlist. Defaults to playlist length.\n * @param {number} expired the amount of time that has dropped\n * off the front of the playlist in a live scenario\n * @return {number} the duration between the first available segment\n * and end index.\n */\n\nconst intervalDuration = function (playlist, endSequence, expired) {\n if (typeof endSequence === 'undefined') {\n endSequence = playlist.mediaSequence + playlist.segments.length;\n }\n if (endSequence < playlist.mediaSequence) {\n return 0;\n } // do a backward walk to estimate the duration\n\n const backward = backwardDuration(playlist, endSequence);\n if (backward.precise) {\n // if we were able to base our duration estimate on timing\n // information provided directly from the Media Source, return\n // it\n return backward.result;\n } // walk forward to see if a precise duration estimate can be made\n // that way\n\n const forward = forwardDuration(playlist, endSequence);\n if (forward.precise) {\n // we found a segment that has been buffered and so it's\n // position is known precisely\n return forward.result;\n } // return the less-precise, playlist-based duration estimate\n\n return backward.result + expired;\n};\n/**\n * Calculates the duration of a playlist. If a start and end index\n * are specified, the duration will be for the subset of the media\n * timeline between those two indices. The total duration for live\n * playlists is always Infinity.\n *\n * @param {Object} playlist a media playlist object\n * @param {number=} endSequence an exclusive upper\n * boundary for the playlist. Defaults to the playlist media\n * sequence number plus its length.\n * @param {number=} expired the amount of time that has\n * dropped off the front of the playlist in a live scenario\n * @return {number} the duration between the start index and end\n * index.\n */\n\nconst duration = function (playlist, endSequence, expired) {\n if (!playlist) {\n return 0;\n }\n if (typeof expired !== 'number') {\n expired = 0;\n } // if a slice of the total duration is not requested, use\n // playlist-level duration indicators when they're present\n\n if (typeof endSequence === 'undefined') {\n // if present, use the duration specified in the playlist\n if (playlist.totalDuration) {\n return playlist.totalDuration;\n } // duration should be Infinity for live playlists\n\n if (!playlist.endList) {\n return window$1.Infinity;\n }\n } // calculate the total duration based on the segment durations\n\n return intervalDuration(playlist, endSequence, expired);\n};\n/**\n * Calculate the time between two indexes in the current playlist\n * neight the start- nor the end-index need to be within the current\n * playlist in which case, the targetDuration of the playlist is used\n * to approximate the durations of the segments\n *\n * @param {Array} options.durationList list to iterate over for durations.\n * @param {number} options.defaultDuration duration to use for elements before or after the durationList\n * @param {number} options.startIndex partsAndSegments index to start\n * @param {number} options.endIndex partsAndSegments index to end.\n * @return {number} the number of seconds between startIndex and endIndex\n */\n\nconst sumDurations = function ({\n defaultDuration,\n durationList,\n startIndex,\n endIndex\n}) {\n let durations = 0;\n if (startIndex > endIndex) {\n [startIndex, endIndex] = [endIndex, startIndex];\n }\n if (startIndex < 0) {\n for (let i = startIndex; i < Math.min(0, endIndex); i++) {\n durations += defaultDuration;\n }\n startIndex = 0;\n }\n for (let i = startIndex; i < endIndex; i++) {\n durations += durationList[i].duration;\n }\n return durations;\n};\n/**\n * Calculates the playlist end time\n *\n * @param {Object} playlist a media playlist object\n * @param {number=} expired the amount of time that has\n * dropped off the front of the playlist in a live scenario\n * @param {boolean|false} useSafeLiveEnd a boolean value indicating whether or not the\n * playlist end calculation should consider the safe live end\n * (truncate the playlist end by three segments). This is normally\n * used for calculating the end of the playlist's seekable range.\n * This takes into account the value of liveEdgePadding.\n * Setting liveEdgePadding to 0 is equivalent to setting this to false.\n * @param {number} liveEdgePadding a number indicating how far from the end of the playlist we should be in seconds.\n * If this is provided, it is used in the safe live end calculation.\n * Setting useSafeLiveEnd=false or liveEdgePadding=0 are equivalent.\n * Corresponds to suggestedPresentationDelay in DASH manifests.\n * @return {number} the end time of playlist\n * @function playlistEnd\n */\n\nconst playlistEnd = function (playlist, expired, useSafeLiveEnd, liveEdgePadding) {\n if (!playlist || !playlist.segments) {\n return null;\n }\n if (playlist.endList) {\n return duration(playlist);\n }\n if (expired === null) {\n return null;\n }\n expired = expired || 0;\n let lastSegmentEndTime = intervalDuration(playlist, playlist.mediaSequence + playlist.segments.length, expired);\n if (useSafeLiveEnd) {\n liveEdgePadding = typeof liveEdgePadding === 'number' ? liveEdgePadding : liveEdgeDelay(null, playlist);\n lastSegmentEndTime -= liveEdgePadding;\n } // don't return a time less than zero\n\n return Math.max(0, lastSegmentEndTime);\n};\n/**\n * Calculates the interval of time that is currently seekable in a\n * playlist. The returned time ranges are relative to the earliest\n * moment in the specified playlist that is still available. A full\n * seekable implementation for live streams would need to offset\n * these values by the duration of content that has expired from the\n * stream.\n *\n * @param {Object} playlist a media playlist object\n * dropped off the front of the playlist in a live scenario\n * @param {number=} expired the amount of time that has\n * dropped off the front of the playlist in a live scenario\n * @param {number} liveEdgePadding how far from the end of the playlist we should be in seconds.\n * Corresponds to suggestedPresentationDelay in DASH manifests.\n * @return {TimeRanges} the periods of time that are valid targets\n * for seeking\n */\n\nconst seekable = function (playlist, expired, liveEdgePadding) {\n const useSafeLiveEnd = true;\n const seekableStart = expired || 0;\n let seekableEnd = playlistEnd(playlist, expired, useSafeLiveEnd, liveEdgePadding);\n if (seekableEnd === null) {\n return createTimeRanges();\n } // Clamp seekable end since it can not be less than the seekable start\n\n if (seekableEnd < seekableStart) {\n seekableEnd = seekableStart;\n }\n return createTimeRanges(seekableStart, seekableEnd);\n};\n/**\n * Determine the index and estimated starting time of the segment that\n * contains a specified playback position in a media playlist.\n *\n * @param {Object} options.playlist the media playlist to query\n * @param {number} options.currentTime The number of seconds since the earliest\n * possible position to determine the containing segment for\n * @param {number} options.startTime the time when the segment/part starts\n * @param {number} options.startingSegmentIndex the segment index to start looking at.\n * @param {number?} [options.startingPartIndex] the part index to look at within the segment.\n *\n * @return {Object} an object with partIndex, segmentIndex, and startTime.\n */\n\nconst getMediaInfoForTime = function ({\n playlist,\n currentTime,\n startingSegmentIndex,\n startingPartIndex,\n startTime,\n exactManifestTimings\n}) {\n let time = currentTime - startTime;\n const partsAndSegments = getPartsAndSegments(playlist);\n let startIndex = 0;\n for (let i = 0; i < partsAndSegments.length; i++) {\n const partAndSegment = partsAndSegments[i];\n if (startingSegmentIndex !== partAndSegment.segmentIndex) {\n continue;\n } // skip this if part index does not match.\n\n if (typeof startingPartIndex === 'number' && typeof partAndSegment.partIndex === 'number' && startingPartIndex !== partAndSegment.partIndex) {\n continue;\n }\n startIndex = i;\n break;\n }\n if (time < 0) {\n // Walk backward from startIndex in the playlist, adding durations\n // until we find a segment that contains `time` and return it\n if (startIndex > 0) {\n for (let i = startIndex - 1; i >= 0; i--) {\n const partAndSegment = partsAndSegments[i];\n time += partAndSegment.duration;\n if (exactManifestTimings) {\n if (time < 0) {\n continue;\n }\n } else if (time + TIME_FUDGE_FACTOR <= 0) {\n continue;\n }\n return {\n partIndex: partAndSegment.partIndex,\n segmentIndex: partAndSegment.segmentIndex,\n startTime: startTime - sumDurations({\n defaultDuration: playlist.targetDuration,\n durationList: partsAndSegments,\n startIndex,\n endIndex: i\n })\n };\n }\n } // We were unable to find a good segment within the playlist\n // so select the first segment\n\n return {\n partIndex: partsAndSegments[0] && partsAndSegments[0].partIndex || null,\n segmentIndex: partsAndSegments[0] && partsAndSegments[0].segmentIndex || 0,\n startTime: currentTime\n };\n } // When startIndex is negative, we first walk forward to first segment\n // adding target durations. If we \"run out of time\" before getting to\n // the first segment, return the first segment\n\n if (startIndex < 0) {\n for (let i = startIndex; i < 0; i++) {\n time -= playlist.targetDuration;\n if (time < 0) {\n return {\n partIndex: partsAndSegments[0] && partsAndSegments[0].partIndex || null,\n segmentIndex: partsAndSegments[0] && partsAndSegments[0].segmentIndex || 0,\n startTime: currentTime\n };\n }\n }\n startIndex = 0;\n } // Walk forward from startIndex in the playlist, subtracting durations\n // until we find a segment that contains `time` and return it\n\n for (let i = startIndex; i < partsAndSegments.length; i++) {\n const partAndSegment = partsAndSegments[i];\n time -= partAndSegment.duration;\n const canUseFudgeFactor = partAndSegment.duration > TIME_FUDGE_FACTOR;\n const isExactlyAtTheEnd = time === 0;\n const isExtremelyCloseToTheEnd = canUseFudgeFactor && time + TIME_FUDGE_FACTOR >= 0;\n if (isExactlyAtTheEnd || isExtremelyCloseToTheEnd) {\n // 1) We are exactly at the end of the current segment.\n // 2) We are extremely close to the end of the current segment (The difference is less than 1 / 30).\n // We may encounter this situation when\n // we don't have exact match between segment duration info in the manifest and the actual duration of the segment\n // For example:\n // We appended 3 segments 10 seconds each, meaning we should have 30 sec buffered,\n // but we the actual buffered is 29.99999\n //\n // In both cases:\n // if we passed current time -> it means that we already played current segment\n // if we passed buffered.end -> it means that this segment is already loaded and buffered\n // we should select the next segment if we have one:\n if (i !== partsAndSegments.length - 1) {\n continue;\n }\n }\n if (exactManifestTimings) {\n if (time > 0) {\n continue;\n }\n } else if (time - TIME_FUDGE_FACTOR >= 0) {\n continue;\n }\n return {\n partIndex: partAndSegment.partIndex,\n segmentIndex: partAndSegment.segmentIndex,\n startTime: startTime + sumDurations({\n defaultDuration: playlist.targetDuration,\n durationList: partsAndSegments,\n startIndex,\n endIndex: i\n })\n };\n } // We are out of possible candidates so load the last one...\n\n return {\n segmentIndex: partsAndSegments[partsAndSegments.length - 1].segmentIndex,\n partIndex: partsAndSegments[partsAndSegments.length - 1].partIndex,\n startTime: currentTime\n };\n};\n/**\n * Check whether the playlist is excluded or not.\n *\n * @param {Object} playlist the media playlist object\n * @return {boolean} whether the playlist is excluded or not\n * @function isExcluded\n */\n\nconst isExcluded = function (playlist) {\n return playlist.excludeUntil && playlist.excludeUntil > Date.now();\n};\n/**\n * Check whether the playlist is compatible with current playback configuration or has\n * been excluded permanently for being incompatible.\n *\n * @param {Object} playlist the media playlist object\n * @return {boolean} whether the playlist is incompatible or not\n * @function isIncompatible\n */\n\nconst isIncompatible = function (playlist) {\n return playlist.excludeUntil && playlist.excludeUntil === Infinity;\n};\n/**\n * Check whether the playlist is enabled or not.\n *\n * @param {Object} playlist the media playlist object\n * @return {boolean} whether the playlist is enabled or not\n * @function isEnabled\n */\n\nconst isEnabled = function (playlist) {\n const excluded = isExcluded(playlist);\n return !playlist.disabled && !excluded;\n};\n/**\n * Check whether the playlist has been manually disabled through the representations api.\n *\n * @param {Object} playlist the media playlist object\n * @return {boolean} whether the playlist is disabled manually or not\n * @function isDisabled\n */\n\nconst isDisabled = function (playlist) {\n return playlist.disabled;\n};\n/**\n * Returns whether the current playlist is an AES encrypted HLS stream\n *\n * @return {boolean} true if it's an AES encrypted HLS stream\n */\n\nconst isAes = function (media) {\n for (let i = 0; i < media.segments.length; i++) {\n if (media.segments[i].key) {\n return true;\n }\n }\n return false;\n};\n/**\n * Checks if the playlist has a value for the specified attribute\n *\n * @param {string} attr\n * Attribute to check for\n * @param {Object} playlist\n * The media playlist object\n * @return {boolean}\n * Whether the playlist contains a value for the attribute or not\n * @function hasAttribute\n */\n\nconst hasAttribute = function (attr, playlist) {\n return playlist.attributes && playlist.attributes[attr];\n};\n/**\n * Estimates the time required to complete a segment download from the specified playlist\n *\n * @param {number} segmentDuration\n * Duration of requested segment\n * @param {number} bandwidth\n * Current measured bandwidth of the player\n * @param {Object} playlist\n * The media playlist object\n * @param {number=} bytesReceived\n * Number of bytes already received for the request. Defaults to 0\n * @return {number|NaN}\n * The estimated time to request the segment. NaN if bandwidth information for\n * the given playlist is unavailable\n * @function estimateSegmentRequestTime\n */\n\nconst estimateSegmentRequestTime = function (segmentDuration, bandwidth, playlist, bytesReceived = 0) {\n if (!hasAttribute('BANDWIDTH', playlist)) {\n return NaN;\n }\n const size = segmentDuration * playlist.attributes.BANDWIDTH;\n return (size - bytesReceived * 8) / bandwidth;\n};\n/*\n * Returns whether the current playlist is the lowest rendition\n *\n * @return {Boolean} true if on lowest rendition\n */\n\nconst isLowestEnabledRendition = (main, media) => {\n if (main.playlists.length === 1) {\n return true;\n }\n const currentBandwidth = media.attributes.BANDWIDTH || Number.MAX_VALUE;\n return main.playlists.filter(playlist => {\n if (!isEnabled(playlist)) {\n return false;\n }\n return (playlist.attributes.BANDWIDTH || 0) < currentBandwidth;\n }).length === 0;\n};\nconst playlistMatch = (a, b) => {\n // both playlits are null\n // or only one playlist is non-null\n // no match\n if (!a && !b || !a && b || a && !b) {\n return false;\n } // playlist objects are the same, match\n\n if (a === b) {\n return true;\n } // first try to use id as it should be the most\n // accurate\n\n if (a.id && b.id && a.id === b.id) {\n return true;\n } // next try to use reslovedUri as it should be the\n // second most accurate.\n\n if (a.resolvedUri && b.resolvedUri && a.resolvedUri === b.resolvedUri) {\n return true;\n } // finally try to use uri as it should be accurate\n // but might miss a few cases for relative uris\n\n if (a.uri && b.uri && a.uri === b.uri) {\n return true;\n }\n return false;\n};\nconst someAudioVariant = function (main, callback) {\n const AUDIO = main && main.mediaGroups && main.mediaGroups.AUDIO || {};\n let found = false;\n for (const groupName in AUDIO) {\n for (const label in AUDIO[groupName]) {\n found = callback(AUDIO[groupName][label]);\n if (found) {\n break;\n }\n }\n if (found) {\n break;\n }\n }\n return !!found;\n};\nconst isAudioOnly = main => {\n // we are audio only if we have no main playlists but do\n // have media group playlists.\n if (!main || !main.playlists || !main.playlists.length) {\n // without audio variants or playlists this\n // is not an audio only main.\n const found = someAudioVariant(main, variant => variant.playlists && variant.playlists.length || variant.uri);\n return found;\n } // if every playlist has only an audio codec it is audio only\n\n for (let i = 0; i < main.playlists.length; i++) {\n const playlist = main.playlists[i];\n const CODECS = playlist.attributes && playlist.attributes.CODECS; // all codecs are audio, this is an audio playlist.\n\n if (CODECS && CODECS.split(',').every(c => isAudioCodec(c))) {\n continue;\n } // playlist is in an audio group it is audio only\n\n const found = someAudioVariant(main, variant => playlistMatch(playlist, variant));\n if (found) {\n continue;\n } // if we make it here this playlist isn't audio and we\n // are not audio only\n\n return false;\n } // if we make it past every playlist without returning, then\n // this is an audio only playlist.\n\n return true;\n}; // exports\n\nvar Playlist = {\n liveEdgeDelay,\n duration,\n seekable,\n getMediaInfoForTime,\n isEnabled,\n isDisabled,\n isExcluded,\n isIncompatible,\n playlistEnd,\n isAes,\n hasAttribute,\n estimateSegmentRequestTime,\n isLowestEnabledRendition,\n isAudioOnly,\n playlistMatch,\n segmentDurationWithParts\n};\nconst {\n log\n} = videojs;\nconst createPlaylistID = (index, uri) => {\n return `${index}-${uri}`;\n}; // default function for creating a group id\n\nconst groupID = (type, group, label) => {\n return `placeholder-uri-${type}-${group}-${label}`;\n};\n/**\n * Parses a given m3u8 playlist\n *\n * @param {Function} [onwarn]\n * a function to call when the parser triggers a warning event.\n * @param {Function} [oninfo]\n * a function to call when the parser triggers an info event.\n * @param {string} manifestString\n * The downloaded manifest string\n * @param {Object[]} [customTagParsers]\n * An array of custom tag parsers for the m3u8-parser instance\n * @param {Object[]} [customTagMappers]\n * An array of custom tag mappers for the m3u8-parser instance\n * @param {boolean} [llhls]\n * Whether to keep ll-hls features in the manifest after parsing.\n * @return {Object}\n * The manifest object\n */\n\nconst parseManifest = ({\n onwarn,\n oninfo,\n manifestString,\n customTagParsers = [],\n customTagMappers = [],\n llhls\n}) => {\n const parser = new Parser();\n if (onwarn) {\n parser.on('warn', onwarn);\n }\n if (oninfo) {\n parser.on('info', oninfo);\n }\n customTagParsers.forEach(customParser => parser.addParser(customParser));\n customTagMappers.forEach(mapper => parser.addTagMapper(mapper));\n parser.push(manifestString);\n parser.end();\n const manifest = parser.manifest; // remove llhls features from the parsed manifest\n // if we don't want llhls support.\n\n if (!llhls) {\n ['preloadSegment', 'skip', 'serverControl', 'renditionReports', 'partInf', 'partTargetDuration'].forEach(function (k) {\n if (manifest.hasOwnProperty(k)) {\n delete manifest[k];\n }\n });\n if (manifest.segments) {\n manifest.segments.forEach(function (segment) {\n ['parts', 'preloadHints'].forEach(function (k) {\n if (segment.hasOwnProperty(k)) {\n delete segment[k];\n }\n });\n });\n }\n }\n if (!manifest.targetDuration) {\n let targetDuration = 10;\n if (manifest.segments && manifest.segments.length) {\n targetDuration = manifest.segments.reduce((acc, s) => Math.max(acc, s.duration), 0);\n }\n if (onwarn) {\n onwarn({\n message: `manifest has no targetDuration defaulting to ${targetDuration}`\n });\n }\n manifest.targetDuration = targetDuration;\n }\n const parts = getLastParts(manifest);\n if (parts.length && !manifest.partTargetDuration) {\n const partTargetDuration = parts.reduce((acc, p) => Math.max(acc, p.duration), 0);\n if (onwarn) {\n onwarn({\n message: `manifest has no partTargetDuration defaulting to ${partTargetDuration}`\n });\n log.error('LL-HLS manifest has parts but lacks required #EXT-X-PART-INF:PART-TARGET value. See https://datatracker.ietf.org/doc/html/draft-pantos-hls-rfc8216bis-09#section-4.4.3.7. Playback is not guaranteed.');\n }\n manifest.partTargetDuration = partTargetDuration;\n }\n return manifest;\n};\n/**\n * Loops through all supported media groups in main and calls the provided\n * callback for each group\n *\n * @param {Object} main\n * The parsed main manifest object\n * @param {Function} callback\n * Callback to call for each media group\n */\n\nconst forEachMediaGroup = (main, callback) => {\n if (!main.mediaGroups) {\n return;\n }\n ['AUDIO', 'SUBTITLES'].forEach(mediaType => {\n if (!main.mediaGroups[mediaType]) {\n return;\n }\n for (const groupKey in main.mediaGroups[mediaType]) {\n for (const labelKey in main.mediaGroups[mediaType][groupKey]) {\n const mediaProperties = main.mediaGroups[mediaType][groupKey][labelKey];\n callback(mediaProperties, mediaType, groupKey, labelKey);\n }\n }\n });\n};\n/**\n * Adds properties and attributes to the playlist to keep consistent functionality for\n * playlists throughout VHS.\n *\n * @param {Object} config\n * Arguments object\n * @param {Object} config.playlist\n * The media playlist\n * @param {string} [config.uri]\n * The uri to the media playlist (if media playlist is not from within a main\n * playlist)\n * @param {string} id\n * ID to use for the playlist\n */\n\nconst setupMediaPlaylist = ({\n playlist,\n uri,\n id\n}) => {\n playlist.id = id;\n playlist.playlistErrors_ = 0;\n if (uri) {\n // For media playlists, m3u8-parser does not have access to a URI, as HLS media\n // playlists do not contain their own source URI, but one is needed for consistency in\n // VHS.\n playlist.uri = uri;\n } // For HLS main playlists, even though certain attributes MUST be defined, the\n // stream may still be played without them.\n // For HLS media playlists, m3u8-parser does not attach an attributes object to the\n // manifest.\n //\n // To avoid undefined reference errors through the project, and make the code easier\n // to write/read, add an empty attributes object for these cases.\n\n playlist.attributes = playlist.attributes || {};\n};\n/**\n * Adds ID, resolvedUri, and attributes properties to each playlist of the main, where\n * necessary. In addition, creates playlist IDs for each playlist and adds playlist ID to\n * playlist references to the playlists array.\n *\n * @param {Object} main\n * The main playlist\n */\n\nconst setupMediaPlaylists = main => {\n let i = main.playlists.length;\n while (i--) {\n const playlist = main.playlists[i];\n setupMediaPlaylist({\n playlist,\n id: createPlaylistID(i, playlist.uri)\n });\n playlist.resolvedUri = resolveUrl(main.uri, playlist.uri);\n main.playlists[playlist.id] = playlist; // URI reference added for backwards compatibility\n\n main.playlists[playlist.uri] = playlist; // Although the spec states an #EXT-X-STREAM-INF tag MUST have a BANDWIDTH attribute,\n // the stream can be played without it. Although an attributes property may have been\n // added to the playlist to prevent undefined references, issue a warning to fix the\n // manifest.\n\n if (!playlist.attributes.BANDWIDTH) {\n log.warn('Invalid playlist STREAM-INF detected. Missing BANDWIDTH attribute.');\n }\n }\n};\n/**\n * Adds resolvedUri properties to each media group.\n *\n * @param {Object} main\n * The main playlist\n */\n\nconst resolveMediaGroupUris = main => {\n forEachMediaGroup(main, properties => {\n if (properties.uri) {\n properties.resolvedUri = resolveUrl(main.uri, properties.uri);\n }\n });\n};\n/**\n * Creates a main playlist wrapper to insert a sole media playlist into.\n *\n * @param {Object} media\n * Media playlist\n * @param {string} uri\n * The media URI\n *\n * @return {Object}\n * main playlist\n */\n\nconst mainForMedia = (media, uri) => {\n const id = createPlaylistID(0, uri);\n const main = {\n mediaGroups: {\n 'AUDIO': {},\n 'VIDEO': {},\n 'CLOSED-CAPTIONS': {},\n 'SUBTITLES': {}\n },\n uri: window$1.location.href,\n resolvedUri: window$1.location.href,\n playlists: [{\n uri,\n id,\n resolvedUri: uri,\n // m3u8-parser does not attach an attributes property to media playlists so make\n // sure that the property is attached to avoid undefined reference errors\n attributes: {}\n }]\n }; // set up ID reference\n\n main.playlists[id] = main.playlists[0]; // URI reference added for backwards compatibility\n\n main.playlists[uri] = main.playlists[0];\n return main;\n};\n/**\n * Does an in-place update of the main manifest to add updated playlist URI references\n * as well as other properties needed by VHS that aren't included by the parser.\n *\n * @param {Object} main\n * main manifest object\n * @param {string} uri\n * The source URI\n * @param {function} createGroupID\n * A function to determine how to create the groupID for mediaGroups\n */\n\nconst addPropertiesToMain = (main, uri, createGroupID = groupID) => {\n main.uri = uri;\n for (let i = 0; i < main.playlists.length; i++) {\n if (!main.playlists[i].uri) {\n // Set up phony URIs for the playlists since playlists are referenced by their URIs\n // throughout VHS, but some formats (e.g., DASH) don't have external URIs\n // TODO: consider adding dummy URIs in mpd-parser\n const phonyUri = `placeholder-uri-${i}`;\n main.playlists[i].uri = phonyUri;\n }\n }\n const audioOnlyMain = isAudioOnly(main);\n forEachMediaGroup(main, (properties, mediaType, groupKey, labelKey) => {\n // add a playlist array under properties\n if (!properties.playlists || !properties.playlists.length) {\n // If the manifest is audio only and this media group does not have a uri, check\n // if the media group is located in the main list of playlists. If it is, don't add\n // placeholder properties as it shouldn't be considered an alternate audio track.\n if (audioOnlyMain && mediaType === 'AUDIO' && !properties.uri) {\n for (let i = 0; i < main.playlists.length; i++) {\n const p = main.playlists[i];\n if (p.attributes && p.attributes.AUDIO && p.attributes.AUDIO === groupKey) {\n return;\n }\n }\n }\n properties.playlists = [_extends({}, properties)];\n }\n properties.playlists.forEach(function (p, i) {\n const groupId = createGroupID(mediaType, groupKey, labelKey, p);\n const id = createPlaylistID(i, groupId);\n if (p.uri) {\n p.resolvedUri = p.resolvedUri || resolveUrl(main.uri, p.uri);\n } else {\n // DEPRECATED, this has been added to prevent a breaking change.\n // previously we only ever had a single media group playlist, so\n // we mark the first playlist uri without prepending the index as we used to\n // ideally we would do all of the playlists the same way.\n p.uri = i === 0 ? groupId : id; // don't resolve a placeholder uri to an absolute url, just use\n // the placeholder again\n\n p.resolvedUri = p.uri;\n }\n p.id = p.id || id; // add an empty attributes object, all playlists are\n // expected to have this.\n\n p.attributes = p.attributes || {}; // setup ID and URI references (URI for backwards compatibility)\n\n main.playlists[p.id] = p;\n main.playlists[p.uri] = p;\n });\n });\n setupMediaPlaylists(main);\n resolveMediaGroupUris(main);\n};\nclass DateRangesStorage {\n constructor() {\n this.offset_ = null;\n this.pendingDateRanges_ = new Map();\n this.processedDateRanges_ = new Map();\n }\n setOffset(segments = []) {\n // already set\n if (this.offset_ !== null) {\n return;\n } // no segment to process\n\n if (!segments.length) {\n return;\n }\n const [firstSegment] = segments; // no program date time\n\n if (firstSegment.programDateTime === undefined) {\n return;\n } // Set offset as ProgramDateTime for the very first segment of the very first playlist load:\n\n this.offset_ = firstSegment.programDateTime / 1000;\n }\n setPendingDateRanges(dateRanges = []) {\n if (!dateRanges.length) {\n return;\n }\n const [dateRange] = dateRanges;\n const startTime = dateRange.startDate.getTime();\n this.trimProcessedDateRanges_(startTime);\n this.pendingDateRanges_ = dateRanges.reduce((map, pendingDateRange) => {\n map.set(pendingDateRange.id, pendingDateRange);\n return map;\n }, new Map());\n }\n processDateRange(dateRange) {\n this.pendingDateRanges_.delete(dateRange.id);\n this.processedDateRanges_.set(dateRange.id, dateRange);\n }\n getDateRangesToProcess() {\n if (this.offset_ === null) {\n return [];\n }\n const dateRangeClasses = {};\n const dateRangesToProcess = [];\n this.pendingDateRanges_.forEach((dateRange, id) => {\n if (this.processedDateRanges_.has(id)) {\n return;\n }\n dateRange.startTime = dateRange.startDate.getTime() / 1000 - this.offset_;\n dateRange.processDateRange = () => this.processDateRange(dateRange);\n dateRangesToProcess.push(dateRange);\n if (!dateRange.class) {\n return;\n }\n if (dateRangeClasses[dateRange.class]) {\n const length = dateRangeClasses[dateRange.class].push(dateRange);\n dateRange.classListIndex = length - 1;\n } else {\n dateRangeClasses[dateRange.class] = [dateRange];\n dateRange.classListIndex = 0;\n }\n });\n for (const dateRange of dateRangesToProcess) {\n const classList = dateRangeClasses[dateRange.class] || [];\n if (dateRange.endDate) {\n dateRange.endTime = dateRange.endDate.getTime() / 1000 - this.offset_;\n } else if (dateRange.endOnNext && classList[dateRange.classListIndex + 1]) {\n dateRange.endTime = classList[dateRange.classListIndex + 1].startTime;\n } else if (dateRange.duration) {\n dateRange.endTime = dateRange.startTime + dateRange.duration;\n } else if (dateRange.plannedDuration) {\n dateRange.endTime = dateRange.startTime + dateRange.plannedDuration;\n } else {\n dateRange.endTime = dateRange.startTime;\n }\n }\n return dateRangesToProcess;\n }\n trimProcessedDateRanges_(startTime) {\n const copy = new Map(this.processedDateRanges_);\n copy.forEach((dateRange, id) => {\n if (dateRange.startDate.getTime() < startTime) {\n this.processedDateRanges_.delete(id);\n }\n });\n }\n}\nconst QUOTA_EXCEEDED_ERR = 22;\nconst getStreamingNetworkErrorMetadata = ({\n requestType,\n request,\n error,\n parseFailure\n}) => {\n const isBadStatus = request.status < 200 || request.status > 299;\n const isFailure = request.status >= 400 && request.status <= 499;\n const errorMetadata = {\n uri: request.uri,\n requestType\n };\n const isBadStatusOrParseFailure = isBadStatus && !isFailure || parseFailure;\n if (error && isFailure) {\n // copy original error and add to the metadata.\n errorMetadata.error = _extends({}, error);\n errorMetadata.errorType = videojs.Error.NetworkRequestFailed;\n } else if (request.aborted) {\n errorMetadata.errorType = videojs.Error.NetworkRequestAborted;\n } else if (request.timedout) {\n errorMetadata.erroType = videojs.Error.NetworkRequestTimeout;\n } else if (isBadStatusOrParseFailure) {\n const errorType = parseFailure ? videojs.Error.NetworkBodyParserFailed : videojs.Error.NetworkBadStatus;\n errorMetadata.errorType = errorType;\n errorMetadata.status = request.status;\n errorMetadata.headers = request.headers;\n }\n return errorMetadata;\n};\nconst {\n EventTarget: EventTarget$1\n} = videojs;\nconst addLLHLSQueryDirectives = (uri, media) => {\n if (media.endList || !media.serverControl) {\n return uri;\n }\n const parameters = {};\n if (media.serverControl.canBlockReload) {\n const {\n preloadSegment\n } = media; // next msn is a zero based value, length is not.\n\n let nextMSN = media.mediaSequence + media.segments.length; // If preload segment has parts then it is likely\n // that we are going to request a part of that preload segment.\n // the logic below is used to determine that.\n\n if (preloadSegment) {\n const parts = preloadSegment.parts || []; // _HLS_part is a zero based index\n\n const nextPart = getKnownPartCount(media) - 1; // if nextPart is > -1 and not equal to just the\n // length of parts, then we know we had part preload hints\n // and we need to add the _HLS_part= query\n\n if (nextPart > -1 && nextPart !== parts.length - 1) {\n // add existing parts to our preload hints\n // eslint-disable-next-line\n parameters._HLS_part = nextPart;\n } // this if statement makes sure that we request the msn\n // of the preload segment if:\n // 1. the preload segment had parts (and was not yet a full segment)\n // but was added to our segments array\n // 2. the preload segment had preload hints for parts that are not in\n // the manifest yet.\n // in all other cases we want the segment after the preload segment\n // which will be given by using media.segments.length because it is 1 based\n // rather than 0 based.\n\n if (nextPart > -1 || parts.length) {\n nextMSN--;\n }\n } // add _HLS_msn= in front of any _HLS_part query\n // eslint-disable-next-line\n\n parameters._HLS_msn = nextMSN;\n }\n if (media.serverControl && media.serverControl.canSkipUntil) {\n // add _HLS_skip= infront of all other queries.\n // eslint-disable-next-line\n parameters._HLS_skip = media.serverControl.canSkipDateranges ? 'v2' : 'YES';\n }\n if (Object.keys(parameters).length) {\n const parsedUri = new window$1.URL(uri);\n ['_HLS_skip', '_HLS_msn', '_HLS_part'].forEach(function (name) {\n if (!parameters.hasOwnProperty(name)) {\n return;\n }\n parsedUri.searchParams.set(name, parameters[name]);\n });\n uri = parsedUri.toString();\n }\n return uri;\n};\n/**\n * Returns a new segment object with properties and\n * the parts array merged.\n *\n * @param {Object} a the old segment\n * @param {Object} b the new segment\n *\n * @return {Object} the merged segment\n */\n\nconst updateSegment = (a, b) => {\n if (!a) {\n return b;\n }\n const result = merge(a, b); // if only the old segment has preload hints\n // and the new one does not, remove preload hints.\n\n if (a.preloadHints && !b.preloadHints) {\n delete result.preloadHints;\n } // if only the old segment has parts\n // then the parts are no longer valid\n\n if (a.parts && !b.parts) {\n delete result.parts; // if both segments have parts\n // copy part propeties from the old segment\n // to the new one.\n } else if (a.parts && b.parts) {\n for (let i = 0; i < b.parts.length; i++) {\n if (a.parts && a.parts[i]) {\n result.parts[i] = merge(a.parts[i], b.parts[i]);\n }\n }\n } // set skipped to false for segments that have\n // have had information merged from the old segment.\n\n if (!a.skipped && b.skipped) {\n result.skipped = false;\n } // set preload to false for segments that have\n // had information added in the new segment.\n\n if (a.preload && !b.preload) {\n result.preload = false;\n }\n return result;\n};\n/**\n * Returns a new array of segments that is the result of merging\n * properties from an older list of segments onto an updated\n * list. No properties on the updated playlist will be ovewritten.\n *\n * @param {Array} original the outdated list of segments\n * @param {Array} update the updated list of segments\n * @param {number=} offset the index of the first update\n * segment in the original segment list. For non-live playlists,\n * this should always be zero and does not need to be\n * specified. For live playlists, it should be the difference\n * between the media sequence numbers in the original and updated\n * playlists.\n * @return {Array} a list of merged segment objects\n */\n\nconst updateSegments = (original, update, offset) => {\n const oldSegments = original.slice();\n const newSegments = update.slice();\n offset = offset || 0;\n const result = [];\n let currentMap;\n for (let newIndex = 0; newIndex < newSegments.length; newIndex++) {\n const oldSegment = oldSegments[newIndex + offset];\n const newSegment = newSegments[newIndex];\n if (oldSegment) {\n currentMap = oldSegment.map || currentMap;\n result.push(updateSegment(oldSegment, newSegment));\n } else {\n // carry over map to new segment if it is missing\n if (currentMap && !newSegment.map) {\n newSegment.map = currentMap;\n }\n result.push(newSegment);\n }\n }\n return result;\n};\nconst resolveSegmentUris = (segment, baseUri) => {\n // preloadSegment will not have a uri at all\n // as the segment isn't actually in the manifest yet, only parts\n if (!segment.resolvedUri && segment.uri) {\n segment.resolvedUri = resolveUrl(baseUri, segment.uri);\n }\n if (segment.key && !segment.key.resolvedUri) {\n segment.key.resolvedUri = resolveUrl(baseUri, segment.key.uri);\n }\n if (segment.map && !segment.map.resolvedUri) {\n segment.map.resolvedUri = resolveUrl(baseUri, segment.map.uri);\n }\n if (segment.map && segment.map.key && !segment.map.key.resolvedUri) {\n segment.map.key.resolvedUri = resolveUrl(baseUri, segment.map.key.uri);\n }\n if (segment.parts && segment.parts.length) {\n segment.parts.forEach(p => {\n if (p.resolvedUri) {\n return;\n }\n p.resolvedUri = resolveUrl(baseUri, p.uri);\n });\n }\n if (segment.preloadHints && segment.preloadHints.length) {\n segment.preloadHints.forEach(p => {\n if (p.resolvedUri) {\n return;\n }\n p.resolvedUri = resolveUrl(baseUri, p.uri);\n });\n }\n};\nconst getAllSegments = function (media) {\n const segments = media.segments || [];\n const preloadSegment = media.preloadSegment; // a preloadSegment with only preloadHints is not currently\n // a usable segment, only include a preloadSegment that has\n // parts.\n\n if (preloadSegment && preloadSegment.parts && preloadSegment.parts.length) {\n // if preloadHints has a MAP that means that the\n // init segment is going to change. We cannot use any of the parts\n // from this preload segment.\n if (preloadSegment.preloadHints) {\n for (let i = 0; i < preloadSegment.preloadHints.length; i++) {\n if (preloadSegment.preloadHints[i].type === 'MAP') {\n return segments;\n }\n }\n } // set the duration for our preload segment to target duration.\n\n preloadSegment.duration = media.targetDuration;\n preloadSegment.preload = true;\n segments.push(preloadSegment);\n }\n return segments;\n}; // consider the playlist unchanged if the playlist object is the same or\n// the number of segments is equal, the media sequence number is unchanged,\n// and this playlist hasn't become the end of the playlist\n\nconst isPlaylistUnchanged = (a, b) => a === b || a.segments && b.segments && a.segments.length === b.segments.length && a.endList === b.endList && a.mediaSequence === b.mediaSequence && a.preloadSegment === b.preloadSegment;\n/**\n * Returns a new main playlist that is the result of merging an\n * updated media playlist into the original version. If the\n * updated media playlist does not match any of the playlist\n * entries in the original main playlist, null is returned.\n *\n * @param {Object} main a parsed main M3U8 object\n * @param {Object} media a parsed media M3U8 object\n * @return {Object} a new object that represents the original\n * main playlist with the updated media playlist merged in, or\n * null if the merge produced no change.\n */\n\nconst updateMain$1 = (main, newMedia, unchangedCheck = isPlaylistUnchanged) => {\n const result = merge(main, {});\n const oldMedia = result.playlists[newMedia.id];\n if (!oldMedia) {\n return null;\n }\n if (unchangedCheck(oldMedia, newMedia)) {\n return null;\n }\n newMedia.segments = getAllSegments(newMedia);\n const mergedPlaylist = merge(oldMedia, newMedia); // always use the new media's preload segment\n\n if (mergedPlaylist.preloadSegment && !newMedia.preloadSegment) {\n delete mergedPlaylist.preloadSegment;\n } // if the update could overlap existing segment information, merge the two segment lists\n\n if (oldMedia.segments) {\n if (newMedia.skip) {\n newMedia.segments = newMedia.segments || []; // add back in objects for skipped segments, so that we merge\n // old properties into the new segments\n\n for (let i = 0; i < newMedia.skip.skippedSegments; i++) {\n newMedia.segments.unshift({\n skipped: true\n });\n }\n }\n mergedPlaylist.segments = updateSegments(oldMedia.segments, newMedia.segments, newMedia.mediaSequence - oldMedia.mediaSequence);\n } // resolve any segment URIs to prevent us from having to do it later\n\n mergedPlaylist.segments.forEach(segment => {\n resolveSegmentUris(segment, mergedPlaylist.resolvedUri);\n }); // TODO Right now in the playlists array there are two references to each playlist, one\n // that is referenced by index, and one by URI. The index reference may no longer be\n // necessary.\n\n for (let i = 0; i < result.playlists.length; i++) {\n if (result.playlists[i].id === newMedia.id) {\n result.playlists[i] = mergedPlaylist;\n }\n }\n result.playlists[newMedia.id] = mergedPlaylist; // URI reference added for backwards compatibility\n\n result.playlists[newMedia.uri] = mergedPlaylist; // update media group playlist references.\n\n forEachMediaGroup(main, (properties, mediaType, groupKey, labelKey) => {\n if (!properties.playlists) {\n return;\n }\n for (let i = 0; i < properties.playlists.length; i++) {\n if (newMedia.id === properties.playlists[i].id) {\n properties.playlists[i] = mergedPlaylist;\n }\n }\n });\n return result;\n};\n/**\n * Calculates the time to wait before refreshing a live playlist\n *\n * @param {Object} media\n * The current media\n * @param {boolean} update\n * True if there were any updates from the last refresh, false otherwise\n * @return {number}\n * The time in ms to wait before refreshing the live playlist\n */\n\nconst refreshDelay = (media, update) => {\n const segments = media.segments || [];\n const lastSegment = segments[segments.length - 1];\n const lastPart = lastSegment && lastSegment.parts && lastSegment.parts[lastSegment.parts.length - 1];\n const lastDuration = lastPart && lastPart.duration || lastSegment && lastSegment.duration;\n if (update && lastDuration) {\n return lastDuration * 1000;\n } // if the playlist is unchanged since the last reload or last segment duration\n // cannot be determined, try again after half the target duration\n\n return (media.partTargetDuration || media.targetDuration || 10) * 500;\n};\nconst playlistMetadataPayload = (playlists, type, isLive) => {\n if (!playlists) {\n return;\n }\n const renditions = [];\n playlists.forEach(playlist => {\n // we need attributes to populate rendition data.\n if (!playlist.attributes) {\n return;\n }\n const {\n BANDWIDTH,\n RESOLUTION,\n CODECS\n } = playlist.attributes;\n renditions.push({\n id: playlist.id,\n bandwidth: BANDWIDTH,\n resolution: RESOLUTION,\n codecs: CODECS\n });\n });\n return {\n type,\n isLive,\n renditions\n };\n};\n/**\n * Load a playlist from a remote location\n *\n * @class PlaylistLoader\n * @extends Stream\n * @param {string|Object} src url or object of manifest\n * @param {boolean} withCredentials the withCredentials xhr option\n * @class\n */\n\nclass PlaylistLoader extends EventTarget$1 {\n constructor(src, vhs, options = {}) {\n super();\n if (!src) {\n throw new Error('A non-empty playlist URL or object is required');\n }\n this.logger_ = logger('PlaylistLoader');\n const {\n withCredentials = false\n } = options;\n this.src = src;\n this.vhs_ = vhs;\n this.withCredentials = withCredentials;\n this.addDateRangesToTextTrack_ = options.addDateRangesToTextTrack;\n const vhsOptions = vhs.options_;\n this.customTagParsers = vhsOptions && vhsOptions.customTagParsers || [];\n this.customTagMappers = vhsOptions && vhsOptions.customTagMappers || [];\n this.llhls = vhsOptions && vhsOptions.llhls;\n this.dateRangesStorage_ = new DateRangesStorage(); // initialize the loader state\n\n this.state = 'HAVE_NOTHING'; // live playlist staleness timeout\n\n this.handleMediaupdatetimeout_ = this.handleMediaupdatetimeout_.bind(this);\n this.on('mediaupdatetimeout', this.handleMediaupdatetimeout_);\n this.on('loadedplaylist', this.handleLoadedPlaylist_.bind(this));\n }\n handleLoadedPlaylist_() {\n const mediaPlaylist = this.media();\n if (!mediaPlaylist) {\n return;\n }\n this.dateRangesStorage_.setOffset(mediaPlaylist.segments);\n this.dateRangesStorage_.setPendingDateRanges(mediaPlaylist.dateRanges);\n const availableDateRanges = this.dateRangesStorage_.getDateRangesToProcess();\n if (!availableDateRanges.length || !this.addDateRangesToTextTrack_) {\n return;\n }\n this.addDateRangesToTextTrack_(availableDateRanges);\n }\n handleMediaupdatetimeout_() {\n if (this.state !== 'HAVE_METADATA') {\n // only refresh the media playlist if no other activity is going on\n return;\n }\n const media = this.media();\n let uri = resolveUrl(this.main.uri, media.uri);\n if (this.llhls) {\n uri = addLLHLSQueryDirectives(uri, media);\n }\n this.state = 'HAVE_CURRENT_METADATA';\n this.request = this.vhs_.xhr({\n uri,\n withCredentials: this.withCredentials,\n requestType: 'hls-playlist'\n }, (error, req) => {\n // disposed\n if (!this.request) {\n return;\n }\n if (error) {\n return this.playlistRequestError(this.request, this.media(), 'HAVE_METADATA');\n }\n this.haveMetadata({\n playlistString: this.request.responseText,\n url: this.media().uri,\n id: this.media().id\n });\n });\n }\n playlistRequestError(xhr, playlist, startingState) {\n const {\n uri,\n id\n } = playlist; // any in-flight request is now finished\n\n this.request = null;\n if (startingState) {\n this.state = startingState;\n }\n this.error = {\n playlist: this.main.playlists[id],\n status: xhr.status,\n message: `HLS playlist request error at URL: ${uri}.`,\n responseText: xhr.responseText,\n code: xhr.status >= 500 ? 4 : 2,\n metadata: getStreamingNetworkErrorMetadata({\n requestType: xhr.requestType,\n request: xhr,\n error: xhr.error\n })\n };\n this.trigger('error');\n }\n parseManifest_({\n url,\n manifestString\n }) {\n try {\n return parseManifest({\n onwarn: ({\n message\n }) => this.logger_(`m3u8-parser warn for ${url}: ${message}`),\n oninfo: ({\n message\n }) => this.logger_(`m3u8-parser info for ${url}: ${message}`),\n manifestString,\n customTagParsers: this.customTagParsers,\n customTagMappers: this.customTagMappers,\n llhls: this.llhls\n });\n } catch (error) {\n this.error = error;\n this.error.metadata = {\n errorType: videojs.Error.StreamingHlsPlaylistParserError,\n error\n };\n }\n }\n /**\n * Update the playlist loader's state in response to a new or updated playlist.\n *\n * @param {string} [playlistString]\n * Playlist string (if playlistObject is not provided)\n * @param {Object} [playlistObject]\n * Playlist object (if playlistString is not provided)\n * @param {string} url\n * URL of playlist\n * @param {string} id\n * ID to use for playlist\n */\n\n haveMetadata({\n playlistString,\n playlistObject,\n url,\n id\n }) {\n // any in-flight request is now finished\n this.request = null;\n this.state = 'HAVE_METADATA';\n const metadata = {\n playlistInfo: {\n type: 'media',\n uri: url\n }\n };\n this.trigger({\n type: 'playlistparsestart',\n metadata\n });\n const playlist = playlistObject || this.parseManifest_({\n url,\n manifestString: playlistString\n });\n playlist.lastRequest = Date.now();\n setupMediaPlaylist({\n playlist,\n uri: url,\n id\n }); // merge this playlist into the main manifest\n\n const update = updateMain$1(this.main, playlist);\n this.targetDuration = playlist.partTargetDuration || playlist.targetDuration;\n this.pendingMedia_ = null;\n if (update) {\n this.main = update;\n this.media_ = this.main.playlists[id];\n } else {\n this.trigger('playlistunchanged');\n }\n this.updateMediaUpdateTimeout_(refreshDelay(this.media(), !!update));\n metadata.parsedPlaylist = playlistMetadataPayload(this.main.playlists, metadata.playlistInfo.type, !this.media_.endList);\n this.trigger({\n type: 'playlistparsecomplete',\n metadata\n });\n this.trigger('loadedplaylist');\n }\n /**\n * Abort any outstanding work and clean up.\n */\n\n dispose() {\n this.trigger('dispose');\n this.stopRequest();\n window$1.clearTimeout(this.mediaUpdateTimeout);\n window$1.clearTimeout(this.finalRenditionTimeout);\n this.dateRangesStorage_ = new DateRangesStorage();\n this.off();\n }\n stopRequest() {\n if (this.request) {\n const oldRequest = this.request;\n this.request = null;\n oldRequest.onreadystatechange = null;\n oldRequest.abort();\n }\n }\n /**\n * When called without any arguments, returns the currently\n * active media playlist. When called with a single argument,\n * triggers the playlist loader to asynchronously switch to the\n * specified media playlist. Calling this method while the\n * loader is in the HAVE_NOTHING causes an error to be emitted\n * but otherwise has no effect.\n *\n * @param {Object=} playlist the parsed media playlist\n * object to switch to\n * @param {boolean=} shouldDelay whether we should delay the request by half target duration\n *\n * @return {Playlist} the current loaded media\n */\n\n media(playlist, shouldDelay) {\n // getter\n if (!playlist) {\n return this.media_;\n } // setter\n\n if (this.state === 'HAVE_NOTHING') {\n throw new Error('Cannot switch media playlist from ' + this.state);\n } // find the playlist object if the target playlist has been\n // specified by URI\n\n if (typeof playlist === 'string') {\n if (!this.main.playlists[playlist]) {\n throw new Error('Unknown playlist URI: ' + playlist);\n }\n playlist = this.main.playlists[playlist];\n }\n window$1.clearTimeout(this.finalRenditionTimeout);\n if (shouldDelay) {\n const delay = (playlist.partTargetDuration || playlist.targetDuration) / 2 * 1000 || 5 * 1000;\n this.finalRenditionTimeout = window$1.setTimeout(this.media.bind(this, playlist, false), delay);\n return;\n }\n const startingState = this.state;\n const mediaChange = !this.media_ || playlist.id !== this.media_.id;\n const mainPlaylistRef = this.main.playlists[playlist.id]; // switch to fully loaded playlists immediately\n\n if (mainPlaylistRef && mainPlaylistRef.endList ||\n // handle the case of a playlist object (e.g., if using vhs-json with a resolved\n // media playlist or, for the case of demuxed audio, a resolved audio media group)\n playlist.endList && playlist.segments.length) {\n // abort outstanding playlist requests\n if (this.request) {\n this.request.onreadystatechange = null;\n this.request.abort();\n this.request = null;\n }\n this.state = 'HAVE_METADATA';\n this.media_ = playlist; // trigger media change if the active media has been updated\n\n if (mediaChange) {\n this.trigger('mediachanging');\n if (startingState === 'HAVE_MAIN_MANIFEST') {\n // The initial playlist was a main manifest, and the first media selected was\n // also provided (in the form of a resolved playlist object) as part of the\n // source object (rather than just a URL). Therefore, since the media playlist\n // doesn't need to be requested, loadedmetadata won't trigger as part of the\n // normal flow, and needs an explicit trigger here.\n this.trigger('loadedmetadata');\n } else {\n this.trigger('mediachange');\n }\n }\n return;\n } // We update/set the timeout here so that live playlists\n // that are not a media change will \"start\" the loader as expected.\n // We expect that this function will start the media update timeout\n // cycle again. This also prevents a playlist switch failure from\n // causing us to stall during live.\n\n this.updateMediaUpdateTimeout_(refreshDelay(playlist, true)); // switching to the active playlist is a no-op\n\n if (!mediaChange) {\n return;\n }\n this.state = 'SWITCHING_MEDIA'; // there is already an outstanding playlist request\n\n if (this.request) {\n if (playlist.resolvedUri === this.request.url) {\n // requesting to switch to the same playlist multiple times\n // has no effect after the first\n return;\n }\n this.request.onreadystatechange = null;\n this.request.abort();\n this.request = null;\n } // request the new playlist\n\n if (this.media_) {\n this.trigger('mediachanging');\n }\n this.pendingMedia_ = playlist;\n const metadata = {\n playlistInfo: {\n type: 'media',\n uri: playlist.uri\n }\n };\n this.trigger({\n type: 'playlistrequeststart',\n metadata\n });\n this.request = this.vhs_.xhr({\n uri: playlist.resolvedUri,\n withCredentials: this.withCredentials,\n requestType: 'hls-playlist'\n }, (error, req) => {\n // disposed\n if (!this.request) {\n return;\n }\n playlist.lastRequest = Date.now();\n playlist.resolvedUri = resolveManifestRedirect(playlist.resolvedUri, req);\n if (error) {\n return this.playlistRequestError(this.request, playlist, startingState);\n }\n this.trigger({\n type: 'playlistrequestcomplete',\n metadata\n });\n this.haveMetadata({\n playlistString: req.responseText,\n url: playlist.uri,\n id: playlist.id\n }); // fire loadedmetadata the first time a media playlist is loaded\n\n if (startingState === 'HAVE_MAIN_MANIFEST') {\n this.trigger('loadedmetadata');\n } else {\n this.trigger('mediachange');\n }\n });\n }\n /**\n * pause loading of the playlist\n */\n\n pause() {\n if (this.mediaUpdateTimeout) {\n window$1.clearTimeout(this.mediaUpdateTimeout);\n this.mediaUpdateTimeout = null;\n }\n this.stopRequest();\n if (this.state === 'HAVE_NOTHING') {\n // If we pause the loader before any data has been retrieved, its as if we never\n // started, so reset to an unstarted state.\n this.started = false;\n } // Need to restore state now that no activity is happening\n\n if (this.state === 'SWITCHING_MEDIA') {\n // if the loader was in the process of switching media, it should either return to\n // HAVE_MAIN_MANIFEST or HAVE_METADATA depending on if the loader has loaded a media\n // playlist yet. This is determined by the existence of loader.media_\n if (this.media_) {\n this.state = 'HAVE_METADATA';\n } else {\n this.state = 'HAVE_MAIN_MANIFEST';\n }\n } else if (this.state === 'HAVE_CURRENT_METADATA') {\n this.state = 'HAVE_METADATA';\n }\n }\n /**\n * start loading of the playlist\n */\n\n load(shouldDelay) {\n if (this.mediaUpdateTimeout) {\n window$1.clearTimeout(this.mediaUpdateTimeout);\n this.mediaUpdateTimeout = null;\n }\n const media = this.media();\n if (shouldDelay) {\n const delay = media ? (media.partTargetDuration || media.targetDuration) / 2 * 1000 : 5 * 1000;\n this.mediaUpdateTimeout = window$1.setTimeout(() => {\n this.mediaUpdateTimeout = null;\n this.load();\n }, delay);\n return;\n }\n if (!this.started) {\n this.start();\n return;\n }\n if (media && !media.endList) {\n this.trigger('mediaupdatetimeout');\n } else {\n this.trigger('loadedplaylist');\n }\n }\n updateMediaUpdateTimeout_(delay) {\n if (this.mediaUpdateTimeout) {\n window$1.clearTimeout(this.mediaUpdateTimeout);\n this.mediaUpdateTimeout = null;\n } // we only have use mediaupdatetimeout for live playlists.\n\n if (!this.media() || this.media().endList) {\n return;\n }\n this.mediaUpdateTimeout = window$1.setTimeout(() => {\n this.mediaUpdateTimeout = null;\n this.trigger('mediaupdatetimeout');\n this.updateMediaUpdateTimeout_(delay);\n }, delay);\n }\n /**\n * start loading of the playlist\n */\n\n start() {\n this.started = true;\n if (typeof this.src === 'object') {\n // in the case of an entirely constructed manifest object (meaning there's no actual\n // manifest on a server), default the uri to the page's href\n if (!this.src.uri) {\n this.src.uri = window$1.location.href;\n } // resolvedUri is added on internally after the initial request. Since there's no\n // request for pre-resolved manifests, add on resolvedUri here.\n\n this.src.resolvedUri = this.src.uri; // Since a manifest object was passed in as the source (instead of a URL), the first\n // request can be skipped (since the top level of the manifest, at a minimum, is\n // already available as a parsed manifest object). However, if the manifest object\n // represents a main playlist, some media playlists may need to be resolved before\n // the starting segment list is available. Therefore, go directly to setup of the\n // initial playlist, and let the normal flow continue from there.\n //\n // Note that the call to setup is asynchronous, as other sections of VHS may assume\n // that the first request is asynchronous.\n\n setTimeout(() => {\n this.setupInitialPlaylist(this.src);\n }, 0);\n return;\n }\n const metadata = {\n playlistInfo: {\n type: 'multivariant',\n uri: this.src\n }\n };\n this.trigger({\n type: 'playlistrequeststart',\n metadata\n }); // request the specified URL\n\n this.request = this.vhs_.xhr({\n uri: this.src,\n withCredentials: this.withCredentials,\n requestType: 'hls-playlist'\n }, (error, req) => {\n // disposed\n if (!this.request) {\n return;\n } // clear the loader's request reference\n\n this.request = null;\n if (error) {\n this.error = {\n status: req.status,\n message: `HLS playlist request error at URL: ${this.src}.`,\n responseText: req.responseText,\n // MEDIA_ERR_NETWORK\n code: 2,\n metadata: getStreamingNetworkErrorMetadata({\n requestType: req.requestType,\n request: req,\n error\n })\n };\n if (this.state === 'HAVE_NOTHING') {\n this.started = false;\n }\n return this.trigger('error');\n }\n this.trigger({\n type: 'playlistrequestcomplete',\n metadata\n });\n this.src = resolveManifestRedirect(this.src, req);\n this.trigger({\n type: 'playlistparsestart',\n metadata\n });\n const manifest = this.parseManifest_({\n manifestString: req.responseText,\n url: this.src\n }); // we haven't loaded any variant playlists here so we default to false for isLive.\n\n metadata.parsedPlaylist = playlistMetadataPayload(manifest.playlists, metadata.playlistInfo.type, false);\n this.trigger({\n type: 'playlistparsecomplete',\n metadata\n });\n this.setupInitialPlaylist(manifest);\n });\n }\n srcUri() {\n return typeof this.src === 'string' ? this.src : this.src.uri;\n }\n /**\n * Given a manifest object that's either a main or media playlist, trigger the proper\n * events and set the state of the playlist loader.\n *\n * If the manifest object represents a main playlist, `loadedplaylist` will be\n * triggered to allow listeners to select a playlist. If none is selected, the loader\n * will default to the first one in the playlists array.\n *\n * If the manifest object represents a media playlist, `loadedplaylist` will be\n * triggered followed by `loadedmetadata`, as the only available playlist is loaded.\n *\n * In the case of a media playlist, a main playlist object wrapper with one playlist\n * will be created so that all logic can handle playlists in the same fashion (as an\n * assumed manifest object schema).\n *\n * @param {Object} manifest\n * The parsed manifest object\n */\n\n setupInitialPlaylist(manifest) {\n this.state = 'HAVE_MAIN_MANIFEST';\n if (manifest.playlists) {\n this.main = manifest;\n addPropertiesToMain(this.main, this.srcUri()); // If the initial main playlist has playlists wtih segments already resolved,\n // then resolve URIs in advance, as they are usually done after a playlist request,\n // which may not happen if the playlist is resolved.\n\n manifest.playlists.forEach(playlist => {\n playlist.segments = getAllSegments(playlist);\n playlist.segments.forEach(segment => {\n resolveSegmentUris(segment, playlist.resolvedUri);\n });\n });\n this.trigger('loadedplaylist');\n if (!this.request) {\n // no media playlist was specifically selected so start\n // from the first listed one\n this.media(this.main.playlists[0]);\n }\n return;\n } // In order to support media playlists passed in as vhs-json, the case where the uri\n // is not provided as part of the manifest should be considered, and an appropriate\n // default used.\n\n const uri = this.srcUri() || window$1.location.href;\n this.main = mainForMedia(manifest, uri);\n this.haveMetadata({\n playlistObject: manifest,\n url: uri,\n id: this.main.playlists[0].id\n });\n this.trigger('loadedmetadata');\n }\n /**\n * Updates or deletes a preexisting pathway clone.\n * Ensures that all playlists related to the old pathway clone are\n * either updated or deleted.\n *\n * @param {Object} clone On update, the pathway clone object for the newly updated pathway clone.\n * On delete, the old pathway clone object to be deleted.\n * @param {boolean} isUpdate True if the pathway is to be updated,\n * false if it is meant to be deleted.\n */\n\n updateOrDeleteClone(clone, isUpdate) {\n const main = this.main;\n const pathway = clone.ID;\n let i = main.playlists.length; // Iterate backwards through the playlist so we can remove playlists if necessary.\n\n while (i--) {\n const p = main.playlists[i];\n if (p.attributes['PATHWAY-ID'] === pathway) {\n const oldPlaylistUri = p.resolvedUri;\n const oldPlaylistId = p.id; // update the indexed playlist and add new playlists by ID and URI\n\n if (isUpdate) {\n const newPlaylistUri = this.createCloneURI_(p.resolvedUri, clone);\n const newPlaylistId = createPlaylistID(pathway, newPlaylistUri);\n const attributes = this.createCloneAttributes_(pathway, p.attributes);\n const updatedPlaylist = this.createClonePlaylist_(p, newPlaylistId, clone, attributes);\n main.playlists[i] = updatedPlaylist;\n main.playlists[newPlaylistId] = updatedPlaylist;\n main.playlists[newPlaylistUri] = updatedPlaylist;\n } else {\n // Remove the indexed playlist.\n main.playlists.splice(i, 1);\n } // Remove playlists by the old ID and URI.\n\n delete main.playlists[oldPlaylistId];\n delete main.playlists[oldPlaylistUri];\n }\n }\n this.updateOrDeleteCloneMedia(clone, isUpdate);\n }\n /**\n * Updates or deletes media data based on the pathway clone object.\n * Due to the complexity of the media groups and playlists, in all cases\n * we remove all of the old media groups and playlists.\n * On updates, we then create new media groups and playlists based on the\n * new pathway clone object.\n *\n * @param {Object} clone The pathway clone object for the newly updated pathway clone.\n * @param {boolean} isUpdate True if the pathway is to be updated,\n * false if it is meant to be deleted.\n */\n\n updateOrDeleteCloneMedia(clone, isUpdate) {\n const main = this.main;\n const id = clone.ID;\n ['AUDIO', 'SUBTITLES', 'CLOSED-CAPTIONS'].forEach(mediaType => {\n if (!main.mediaGroups[mediaType] || !main.mediaGroups[mediaType][id]) {\n return;\n }\n for (const groupKey in main.mediaGroups[mediaType]) {\n // Remove all media playlists for the media group for this pathway clone.\n if (groupKey === id) {\n for (const labelKey in main.mediaGroups[mediaType][groupKey]) {\n const oldMedia = main.mediaGroups[mediaType][groupKey][labelKey];\n oldMedia.playlists.forEach((p, i) => {\n const oldMediaPlaylist = main.playlists[p.id];\n const oldPlaylistId = oldMediaPlaylist.id;\n const oldPlaylistUri = oldMediaPlaylist.resolvedUri;\n delete main.playlists[oldPlaylistId];\n delete main.playlists[oldPlaylistUri];\n });\n } // Delete the old media group.\n\n delete main.mediaGroups[mediaType][groupKey];\n }\n }\n }); // Create the new media groups and playlists if there is an update.\n\n if (isUpdate) {\n this.createClonedMediaGroups_(clone);\n }\n }\n /**\n * Given a pathway clone object, clones all necessary playlists.\n *\n * @param {Object} clone The pathway clone object.\n * @param {Object} basePlaylist The original playlist to clone from.\n */\n\n addClonePathway(clone, basePlaylist = {}) {\n const main = this.main;\n const index = main.playlists.length;\n const uri = this.createCloneURI_(basePlaylist.resolvedUri, clone);\n const playlistId = createPlaylistID(clone.ID, uri);\n const attributes = this.createCloneAttributes_(clone.ID, basePlaylist.attributes);\n const playlist = this.createClonePlaylist_(basePlaylist, playlistId, clone, attributes);\n main.playlists[index] = playlist; // add playlist by ID and URI\n\n main.playlists[playlistId] = playlist;\n main.playlists[uri] = playlist;\n this.createClonedMediaGroups_(clone);\n }\n /**\n * Given a pathway clone object we create clones of all media.\n * In this function, all necessary information and updated playlists\n * are added to the `mediaGroup` object.\n * Playlists are also added to the `playlists` array so the media groups\n * will be properly linked.\n *\n * @param {Object} clone The pathway clone object.\n */\n\n createClonedMediaGroups_(clone) {\n const id = clone.ID;\n const baseID = clone['BASE-ID'];\n const main = this.main;\n ['AUDIO', 'SUBTITLES', 'CLOSED-CAPTIONS'].forEach(mediaType => {\n // If the media type doesn't exist, or there is already a clone, skip\n // to the next media type.\n if (!main.mediaGroups[mediaType] || main.mediaGroups[mediaType][id]) {\n return;\n }\n for (const groupKey in main.mediaGroups[mediaType]) {\n if (groupKey === baseID) {\n // Create the group.\n main.mediaGroups[mediaType][id] = {};\n } else {\n // There is no need to iterate over label keys in this case.\n continue;\n }\n for (const labelKey in main.mediaGroups[mediaType][groupKey]) {\n const oldMedia = main.mediaGroups[mediaType][groupKey][labelKey];\n main.mediaGroups[mediaType][id][labelKey] = _extends({}, oldMedia);\n const newMedia = main.mediaGroups[mediaType][id][labelKey]; // update URIs on the media\n\n const newUri = this.createCloneURI_(oldMedia.resolvedUri, clone);\n newMedia.resolvedUri = newUri;\n newMedia.uri = newUri; // Reset playlists in the new media group.\n\n newMedia.playlists = []; // Create new playlists in the newly cloned media group.\n\n oldMedia.playlists.forEach((p, i) => {\n const oldMediaPlaylist = main.playlists[p.id];\n const group = groupID(mediaType, id, labelKey);\n const newPlaylistID = createPlaylistID(id, group); // Check to see if it already exists\n\n if (oldMediaPlaylist && !main.playlists[newPlaylistID]) {\n const newMediaPlaylist = this.createClonePlaylist_(oldMediaPlaylist, newPlaylistID, clone);\n const newPlaylistUri = newMediaPlaylist.resolvedUri;\n main.playlists[newPlaylistID] = newMediaPlaylist;\n main.playlists[newPlaylistUri] = newMediaPlaylist;\n }\n newMedia.playlists[i] = this.createClonePlaylist_(p, newPlaylistID, clone);\n });\n }\n }\n });\n }\n /**\n * Using the original playlist to be cloned, and the pathway clone object\n * information, we create a new playlist.\n *\n * @param {Object} basePlaylist The original playlist to be cloned from.\n * @param {string} id The desired id of the newly cloned playlist.\n * @param {Object} clone The pathway clone object.\n * @param {Object} attributes An optional object to populate the `attributes` property in the playlist.\n *\n * @return {Object} The combined cloned playlist.\n */\n\n createClonePlaylist_(basePlaylist, id, clone, attributes) {\n const uri = this.createCloneURI_(basePlaylist.resolvedUri, clone);\n const newProps = {\n resolvedUri: uri,\n uri,\n id\n }; // Remove all segments from previous playlist in the clone.\n\n if (basePlaylist.segments) {\n newProps.segments = [];\n }\n if (attributes) {\n newProps.attributes = attributes;\n }\n return merge(basePlaylist, newProps);\n }\n /**\n * Generates an updated URI for a cloned pathway based on the original\n * pathway's URI and the paramaters from the pathway clone object in the\n * content steering server response.\n *\n * @param {string} baseUri URI to be updated in the cloned pathway.\n * @param {Object} clone The pathway clone object.\n *\n * @return {string} The updated URI for the cloned pathway.\n */\n\n createCloneURI_(baseURI, clone) {\n const uri = new URL(baseURI);\n uri.hostname = clone['URI-REPLACEMENT'].HOST;\n const params = clone['URI-REPLACEMENT'].PARAMS; // Add params to the cloned URL.\n\n for (const key of Object.keys(params)) {\n uri.searchParams.set(key, params[key]);\n }\n return uri.href;\n }\n /**\n * Helper function to create the attributes needed for the new clone.\n * This mainly adds the necessary media attributes.\n *\n * @param {string} id The pathway clone object ID.\n * @param {Object} oldAttributes The old attributes to compare to.\n * @return {Object} The new attributes to add to the playlist.\n */\n\n createCloneAttributes_(id, oldAttributes) {\n const attributes = {\n ['PATHWAY-ID']: id\n };\n ['AUDIO', 'SUBTITLES', 'CLOSED-CAPTIONS'].forEach(mediaType => {\n if (oldAttributes[mediaType]) {\n attributes[mediaType] = id;\n }\n });\n return attributes;\n }\n /**\n * Returns the key ID set from a playlist\n *\n * @param {playlist} playlist to fetch the key ID set from.\n * @return a Set of 32 digit hex strings that represent the unique keyIds for that playlist.\n */\n\n getKeyIdSet(playlist) {\n if (playlist.contentProtection) {\n const keyIds = new Set();\n for (const keysystem in playlist.contentProtection) {\n const keyId = playlist.contentProtection[keysystem].attributes.keyId;\n if (keyId) {\n keyIds.add(keyId.toLowerCase());\n }\n }\n return keyIds;\n }\n }\n}\n\n/**\n * @file xhr.js\n */\n\nconst callbackWrapper = function (request, error, response, callback) {\n const reqResponse = request.responseType === 'arraybuffer' ? request.response : request.responseText;\n if (!error && reqResponse) {\n request.responseTime = Date.now();\n request.roundTripTime = request.responseTime - request.requestTime;\n request.bytesReceived = reqResponse.byteLength || reqResponse.length;\n if (!request.bandwidth) {\n request.bandwidth = Math.floor(request.bytesReceived / request.roundTripTime * 8 * 1000);\n }\n }\n if (response.headers) {\n request.responseHeaders = response.headers;\n } // videojs.xhr now uses a specific code on the error\n // object to signal that a request has timed out instead\n // of setting a boolean on the request object\n\n if (error && error.code === 'ETIMEDOUT') {\n request.timedout = true;\n } // videojs.xhr no longer considers status codes outside of 200 and 0\n // (for file uris) to be errors, but the old XHR did, so emulate that\n // behavior. Status 206 may be used in response to byterange requests.\n\n if (!error && !request.aborted && response.statusCode !== 200 && response.statusCode !== 206 && response.statusCode !== 0) {\n error = new Error('XHR Failed with a response of: ' + (request && (reqResponse || request.responseText)));\n }\n callback(error, request);\n};\n/**\n * Iterates over the request hooks Set and calls them in order\n *\n * @param {Set} hooks the hook Set to iterate over\n * @param {Object} options the request options to pass to the xhr wrapper\n * @return the callback hook function return value, the modified or new options Object.\n */\n\nconst callAllRequestHooks = (requestSet, options) => {\n if (!requestSet || !requestSet.size) {\n return;\n }\n let newOptions = options;\n requestSet.forEach(requestCallback => {\n newOptions = requestCallback(newOptions);\n });\n return newOptions;\n};\n/**\n * Iterates over the response hooks Set and calls them in order.\n *\n * @param {Set} hooks the hook Set to iterate over\n * @param {Object} request the xhr request object\n * @param {Object} error the xhr error object\n * @param {Object} response the xhr response object\n */\n\nconst callAllResponseHooks = (responseSet, request, error, response) => {\n if (!responseSet || !responseSet.size) {\n return;\n }\n responseSet.forEach(responseCallback => {\n responseCallback(request, error, response);\n });\n};\nconst xhrFactory = function () {\n const xhr = function XhrFunction(options, callback) {\n // Add a default timeout\n options = merge({\n timeout: 45e3\n }, options); // Allow an optional user-specified function to modify the option\n // object before we construct the xhr request\n // TODO: Remove beforeRequest in the next major release.\n\n const beforeRequest = XhrFunction.beforeRequest || videojs.Vhs.xhr.beforeRequest; // onRequest and onResponse hooks as a Set, at either the player or global level.\n // TODO: new Set added here for beforeRequest alias. Remove this when beforeRequest is removed.\n\n const _requestCallbackSet = XhrFunction._requestCallbackSet || videojs.Vhs.xhr._requestCallbackSet || new Set();\n const _responseCallbackSet = XhrFunction._responseCallbackSet || videojs.Vhs.xhr._responseCallbackSet;\n if (beforeRequest && typeof beforeRequest === 'function') {\n videojs.log.warn('beforeRequest is deprecated, use onRequest instead.');\n _requestCallbackSet.add(beforeRequest);\n } // Use the standard videojs.xhr() method unless `videojs.Vhs.xhr` has been overriden\n // TODO: switch back to videojs.Vhs.xhr.name === 'XhrFunction' when we drop IE11\n\n const xhrMethod = videojs.Vhs.xhr.original === true ? videojs.xhr : videojs.Vhs.xhr; // call all registered onRequest hooks, assign new options.\n\n const beforeRequestOptions = callAllRequestHooks(_requestCallbackSet, options); // Remove the beforeRequest function from the hooks set so stale beforeRequest functions are not called.\n\n _requestCallbackSet.delete(beforeRequest); // xhrMethod will call XMLHttpRequest.open and XMLHttpRequest.send\n\n const request = xhrMethod(beforeRequestOptions || options, function (error, response) {\n // call all registered onResponse hooks\n callAllResponseHooks(_responseCallbackSet, request, error, response);\n return callbackWrapper(request, error, response, callback);\n });\n const originalAbort = request.abort;\n request.abort = function () {\n request.aborted = true;\n return originalAbort.apply(request, arguments);\n };\n request.uri = options.uri;\n request.requestType = options.requestType;\n request.requestTime = Date.now();\n return request;\n };\n xhr.original = true;\n return xhr;\n};\n/**\n * Turns segment byterange into a string suitable for use in\n * HTTP Range requests\n *\n * @param {Object} byterange - an object with two values defining the start and end\n * of a byte-range\n */\n\nconst byterangeStr = function (byterange) {\n // `byterangeEnd` is one less than `offset + length` because the HTTP range\n // header uses inclusive ranges\n let byterangeEnd;\n const byterangeStart = byterange.offset;\n if (typeof byterange.offset === 'bigint' || typeof byterange.length === 'bigint') {\n byterangeEnd = window$1.BigInt(byterange.offset) + window$1.BigInt(byterange.length) - window$1.BigInt(1);\n } else {\n byterangeEnd = byterange.offset + byterange.length - 1;\n }\n return 'bytes=' + byterangeStart + '-' + byterangeEnd;\n};\n/**\n * Defines headers for use in the xhr request for a particular segment.\n *\n * @param {Object} segment - a simplified copy of the segmentInfo object\n * from SegmentLoader\n */\n\nconst segmentXhrHeaders = function (segment) {\n const headers = {};\n if (segment.byterange) {\n headers.Range = byterangeStr(segment.byterange);\n }\n return headers;\n};\n\n/**\n * @file bin-utils.js\n */\n\n/**\n * convert a TimeRange to text\n *\n * @param {TimeRange} range the timerange to use for conversion\n * @param {number} i the iterator on the range to convert\n * @return {string} the range in string format\n */\n\nconst textRange = function (range, i) {\n return range.start(i) + '-' + range.end(i);\n};\n/**\n * format a number as hex string\n *\n * @param {number} e The number\n * @param {number} i the iterator\n * @return {string} the hex formatted number as a string\n */\n\nconst formatHexString = function (e, i) {\n const value = e.toString(16);\n return '00'.substring(0, 2 - value.length) + value + (i % 2 ? ' ' : '');\n};\nconst formatAsciiString = function (e) {\n if (e >= 0x20 && e < 0x7e) {\n return String.fromCharCode(e);\n }\n return '.';\n};\n/**\n * Creates an object for sending to a web worker modifying properties that are TypedArrays\n * into a new object with seperated properties for the buffer, byteOffset, and byteLength.\n *\n * @param {Object} message\n * Object of properties and values to send to the web worker\n * @return {Object}\n * Modified message with TypedArray values expanded\n * @function createTransferableMessage\n */\n\nconst createTransferableMessage = function (message) {\n const transferable = {};\n Object.keys(message).forEach(key => {\n const value = message[key];\n if (isArrayBufferView(value)) {\n transferable[key] = {\n bytes: value.buffer,\n byteOffset: value.byteOffset,\n byteLength: value.byteLength\n };\n } else {\n transferable[key] = value;\n }\n });\n return transferable;\n};\n/**\n * Returns a unique string identifier for a media initialization\n * segment.\n *\n * @param {Object} initSegment\n * the init segment object.\n *\n * @return {string} the generated init segment id\n */\n\nconst initSegmentId = function (initSegment) {\n const byterange = initSegment.byterange || {\n length: Infinity,\n offset: 0\n };\n return [byterange.length, byterange.offset, initSegment.resolvedUri].join(',');\n};\n/**\n * Returns a unique string identifier for a media segment key.\n *\n * @param {Object} key the encryption key\n * @return {string} the unique id for the media segment key.\n */\n\nconst segmentKeyId = function (key) {\n return key.resolvedUri;\n};\n/**\n * utils to help dump binary data to the console\n *\n * @param {Array|TypedArray} data\n * data to dump to a string\n *\n * @return {string} the data as a hex string.\n */\n\nconst hexDump = data => {\n const bytes = Array.prototype.slice.call(data);\n const step = 16;\n let result = '';\n let hex;\n let ascii;\n for (let j = 0; j < bytes.length / step; j++) {\n hex = bytes.slice(j * step, j * step + step).map(formatHexString).join('');\n ascii = bytes.slice(j * step, j * step + step).map(formatAsciiString).join('');\n result += hex + ' ' + ascii + '\\n';\n }\n return result;\n};\nconst tagDump = ({\n bytes\n}) => hexDump(bytes);\nconst textRanges = ranges => {\n let result = '';\n let i;\n for (i = 0; i < ranges.length; i++) {\n result += textRange(ranges, i) + ' ';\n }\n return result;\n};\nvar utils = /*#__PURE__*/Object.freeze({\n __proto__: null,\n createTransferableMessage: createTransferableMessage,\n initSegmentId: initSegmentId,\n segmentKeyId: segmentKeyId,\n hexDump: hexDump,\n tagDump: tagDump,\n textRanges: textRanges\n});\n\n// TODO handle fmp4 case where the timing info is accurate and doesn't involve transmux\n// 25% was arbitrarily chosen, and may need to be refined over time.\n\nconst SEGMENT_END_FUDGE_PERCENT = 0.25;\n/**\n * Converts a player time (any time that can be gotten/set from player.currentTime(),\n * e.g., any time within player.seekable().start(0) to player.seekable().end(0)) to a\n * program time (any time referencing the real world (e.g., EXT-X-PROGRAM-DATE-TIME)).\n *\n * The containing segment is required as the EXT-X-PROGRAM-DATE-TIME serves as an \"anchor\n * point\" (a point where we have a mapping from program time to player time, with player\n * time being the post transmux start of the segment).\n *\n * For more details, see [this doc](../../docs/program-time-from-player-time.md).\n *\n * @param {number} playerTime the player time\n * @param {Object} segment the segment which contains the player time\n * @return {Date} program time\n */\n\nconst playerTimeToProgramTime = (playerTime, segment) => {\n if (!segment.dateTimeObject) {\n // Can't convert without an \"anchor point\" for the program time (i.e., a time that can\n // be used to map the start of a segment with a real world time).\n return null;\n }\n const transmuxerPrependedSeconds = segment.videoTimingInfo.transmuxerPrependedSeconds;\n const transmuxedStart = segment.videoTimingInfo.transmuxedPresentationStart; // get the start of the content from before old content is prepended\n\n const startOfSegment = transmuxedStart + transmuxerPrependedSeconds;\n const offsetFromSegmentStart = playerTime - startOfSegment;\n return new Date(segment.dateTimeObject.getTime() + offsetFromSegmentStart * 1000);\n};\nconst originalSegmentVideoDuration = videoTimingInfo => {\n return videoTimingInfo.transmuxedPresentationEnd - videoTimingInfo.transmuxedPresentationStart - videoTimingInfo.transmuxerPrependedSeconds;\n};\n/**\n * Finds a segment that contains the time requested given as an ISO-8601 string. The\n * returned segment might be an estimate or an accurate match.\n *\n * @param {string} programTime The ISO-8601 programTime to find a match for\n * @param {Object} playlist A playlist object to search within\n */\n\nconst findSegmentForProgramTime = (programTime, playlist) => {\n // Assumptions:\n // - verifyProgramDateTimeTags has already been run\n // - live streams have been started\n let dateTimeObject;\n try {\n dateTimeObject = new Date(programTime);\n } catch (e) {\n return null;\n }\n if (!playlist || !playlist.segments || playlist.segments.length === 0) {\n return null;\n }\n let segment = playlist.segments[0];\n if (dateTimeObject < new Date(segment.dateTimeObject)) {\n // Requested time is before stream start.\n return null;\n }\n for (let i = 0; i < playlist.segments.length - 1; i++) {\n segment = playlist.segments[i];\n const nextSegmentStart = new Date(playlist.segments[i + 1].dateTimeObject);\n if (dateTimeObject < nextSegmentStart) {\n break;\n }\n }\n const lastSegment = playlist.segments[playlist.segments.length - 1];\n const lastSegmentStart = lastSegment.dateTimeObject;\n const lastSegmentDuration = lastSegment.videoTimingInfo ? originalSegmentVideoDuration(lastSegment.videoTimingInfo) : lastSegment.duration + lastSegment.duration * SEGMENT_END_FUDGE_PERCENT;\n const lastSegmentEnd = new Date(lastSegmentStart.getTime() + lastSegmentDuration * 1000);\n if (dateTimeObject > lastSegmentEnd) {\n // Beyond the end of the stream, or our best guess of the end of the stream.\n return null;\n }\n if (dateTimeObject > new Date(lastSegmentStart)) {\n segment = lastSegment;\n }\n return {\n segment,\n estimatedStart: segment.videoTimingInfo ? segment.videoTimingInfo.transmuxedPresentationStart : Playlist.duration(playlist, playlist.mediaSequence + playlist.segments.indexOf(segment)),\n // Although, given that all segments have accurate date time objects, the segment\n // selected should be accurate, unless the video has been transmuxed at some point\n // (determined by the presence of the videoTimingInfo object), the segment's \"player\n // time\" (the start time in the player) can't be considered accurate.\n type: segment.videoTimingInfo ? 'accurate' : 'estimate'\n };\n};\n/**\n * Finds a segment that contains the given player time(in seconds).\n *\n * @param {number} time The player time to find a match for\n * @param {Object} playlist A playlist object to search within\n */\n\nconst findSegmentForPlayerTime = (time, playlist) => {\n // Assumptions:\n // - there will always be a segment.duration\n // - we can start from zero\n // - segments are in time order\n if (!playlist || !playlist.segments || playlist.segments.length === 0) {\n return null;\n }\n let segmentEnd = 0;\n let segment;\n for (let i = 0; i < playlist.segments.length; i++) {\n segment = playlist.segments[i]; // videoTimingInfo is set after the segment is downloaded and transmuxed, and\n // should contain the most accurate values we have for the segment's player times.\n //\n // Use the accurate transmuxedPresentationEnd value if it is available, otherwise fall\n // back to an estimate based on the manifest derived (inaccurate) segment.duration, to\n // calculate an end value.\n\n segmentEnd = segment.videoTimingInfo ? segment.videoTimingInfo.transmuxedPresentationEnd : segmentEnd + segment.duration;\n if (time <= segmentEnd) {\n break;\n }\n }\n const lastSegment = playlist.segments[playlist.segments.length - 1];\n if (lastSegment.videoTimingInfo && lastSegment.videoTimingInfo.transmuxedPresentationEnd < time) {\n // The time requested is beyond the stream end.\n return null;\n }\n if (time > segmentEnd) {\n // The time is within or beyond the last segment.\n //\n // Check to see if the time is beyond a reasonable guess of the end of the stream.\n if (time > segmentEnd + lastSegment.duration * SEGMENT_END_FUDGE_PERCENT) {\n // Technically, because the duration value is only an estimate, the time may still\n // exist in the last segment, however, there isn't enough information to make even\n // a reasonable estimate.\n return null;\n }\n segment = lastSegment;\n }\n return {\n segment,\n estimatedStart: segment.videoTimingInfo ? segment.videoTimingInfo.transmuxedPresentationStart : segmentEnd - segment.duration,\n // Because videoTimingInfo is only set after transmux, it is the only way to get\n // accurate timing values.\n type: segment.videoTimingInfo ? 'accurate' : 'estimate'\n };\n};\n/**\n * Gives the offset of the comparisonTimestamp from the programTime timestamp in seconds.\n * If the offset returned is positive, the programTime occurs after the\n * comparisonTimestamp.\n * If the offset is negative, the programTime occurs before the comparisonTimestamp.\n *\n * @param {string} comparisonTimeStamp An ISO-8601 timestamp to compare against\n * @param {string} programTime The programTime as an ISO-8601 string\n * @return {number} offset\n */\n\nconst getOffsetFromTimestamp = (comparisonTimeStamp, programTime) => {\n let segmentDateTime;\n let programDateTime;\n try {\n segmentDateTime = new Date(comparisonTimeStamp);\n programDateTime = new Date(programTime);\n } catch (e) {// TODO handle error\n }\n const segmentTimeEpoch = segmentDateTime.getTime();\n const programTimeEpoch = programDateTime.getTime();\n return (programTimeEpoch - segmentTimeEpoch) / 1000;\n};\n/**\n * Checks that all segments in this playlist have programDateTime tags.\n *\n * @param {Object} playlist A playlist object\n */\n\nconst verifyProgramDateTimeTags = playlist => {\n if (!playlist.segments || playlist.segments.length === 0) {\n return false;\n }\n for (let i = 0; i < playlist.segments.length; i++) {\n const segment = playlist.segments[i];\n if (!segment.dateTimeObject) {\n return false;\n }\n }\n return true;\n};\n/**\n * Returns the programTime of the media given a playlist and a playerTime.\n * The playlist must have programDateTime tags for a programDateTime tag to be returned.\n * If the segments containing the time requested have not been buffered yet, an estimate\n * may be returned to the callback.\n *\n * @param {Object} args\n * @param {Object} args.playlist A playlist object to search within\n * @param {number} time A playerTime in seconds\n * @param {Function} callback(err, programTime)\n * @return {string} err.message A detailed error message\n * @return {Object} programTime\n * @return {number} programTime.mediaSeconds The streamTime in seconds\n * @return {string} programTime.programDateTime The programTime as an ISO-8601 String\n */\n\nconst getProgramTime = ({\n playlist,\n time = undefined,\n callback\n}) => {\n if (!callback) {\n throw new Error('getProgramTime: callback must be provided');\n }\n if (!playlist || time === undefined) {\n return callback({\n message: 'getProgramTime: playlist and time must be provided'\n });\n }\n const matchedSegment = findSegmentForPlayerTime(time, playlist);\n if (!matchedSegment) {\n return callback({\n message: 'valid programTime was not found'\n });\n }\n if (matchedSegment.type === 'estimate') {\n return callback({\n message: 'Accurate programTime could not be determined.' + ' Please seek to e.seekTime and try again',\n seekTime: matchedSegment.estimatedStart\n });\n }\n const programTimeObject = {\n mediaSeconds: time\n };\n const programTime = playerTimeToProgramTime(time, matchedSegment.segment);\n if (programTime) {\n programTimeObject.programDateTime = programTime.toISOString();\n }\n return callback(null, programTimeObject);\n};\n/**\n * Seeks in the player to a time that matches the given programTime ISO-8601 string.\n *\n * @param {Object} args\n * @param {string} args.programTime A programTime to seek to as an ISO-8601 String\n * @param {Object} args.playlist A playlist to look within\n * @param {number} args.retryCount The number of times to try for an accurate seek. Default is 2.\n * @param {Function} args.seekTo A method to perform a seek\n * @param {boolean} args.pauseAfterSeek Whether to end in a paused state after seeking. Default is true.\n * @param {Object} args.tech The tech to seek on\n * @param {Function} args.callback(err, newTime) A callback to return the new time to\n * @return {string} err.message A detailed error message\n * @return {number} newTime The exact time that was seeked to in seconds\n */\n\nconst seekToProgramTime = ({\n programTime,\n playlist,\n retryCount = 2,\n seekTo,\n pauseAfterSeek = true,\n tech,\n callback\n}) => {\n if (!callback) {\n throw new Error('seekToProgramTime: callback must be provided');\n }\n if (typeof programTime === 'undefined' || !playlist || !seekTo) {\n return callback({\n message: 'seekToProgramTime: programTime, seekTo and playlist must be provided'\n });\n }\n if (!playlist.endList && !tech.hasStarted_) {\n return callback({\n message: 'player must be playing a live stream to start buffering'\n });\n }\n if (!verifyProgramDateTimeTags(playlist)) {\n return callback({\n message: 'programDateTime tags must be provided in the manifest ' + playlist.resolvedUri\n });\n }\n const matchedSegment = findSegmentForProgramTime(programTime, playlist); // no match\n\n if (!matchedSegment) {\n return callback({\n message: `${programTime} was not found in the stream`\n });\n }\n const segment = matchedSegment.segment;\n const mediaOffset = getOffsetFromTimestamp(segment.dateTimeObject, programTime);\n if (matchedSegment.type === 'estimate') {\n // we've run out of retries\n if (retryCount === 0) {\n return callback({\n message: `${programTime} is not buffered yet. Try again`\n });\n }\n seekTo(matchedSegment.estimatedStart + mediaOffset);\n tech.one('seeked', () => {\n seekToProgramTime({\n programTime,\n playlist,\n retryCount: retryCount - 1,\n seekTo,\n pauseAfterSeek,\n tech,\n callback\n });\n });\n return;\n } // Since the segment.start value is determined from the buffered end or ending time\n // of the prior segment, the seekToTime doesn't need to account for any transmuxer\n // modifications.\n\n const seekToTime = segment.start + mediaOffset;\n const seekedCallback = () => {\n return callback(null, tech.currentTime());\n }; // listen for seeked event\n\n tech.one('seeked', seekedCallback); // pause before seeking as video.js will restore this state\n\n if (pauseAfterSeek) {\n tech.pause();\n }\n seekTo(seekToTime);\n};\n\n// which will only happen if the request is complete.\n\nconst callbackOnCompleted = (request, cb) => {\n if (request.readyState === 4) {\n return cb();\n }\n return;\n};\nconst containerRequest = (uri, xhr, cb, requestType) => {\n let bytes = [];\n let id3Offset;\n let finished = false;\n const endRequestAndCallback = function (err, req, type, _bytes) {\n req.abort();\n finished = true;\n return cb(err, req, type, _bytes);\n };\n const progressListener = function (error, request) {\n if (finished) {\n return;\n }\n if (error) {\n error.metadata = getStreamingNetworkErrorMetadata({\n requestType,\n request,\n error\n });\n return endRequestAndCallback(error, request, '', bytes);\n } // grap the new part of content that was just downloaded\n\n const newPart = request.responseText.substring(bytes && bytes.byteLength || 0, request.responseText.length); // add that onto bytes\n\n bytes = concatTypedArrays(bytes, stringToBytes(newPart, true));\n id3Offset = id3Offset || getId3Offset(bytes); // we need at least 10 bytes to determine a type\n // or we need at least two bytes after an id3Offset\n\n if (bytes.length < 10 || id3Offset && bytes.length < id3Offset + 2) {\n return callbackOnCompleted(request, () => endRequestAndCallback(error, request, '', bytes));\n }\n const type = detectContainerForBytes(bytes); // if this looks like a ts segment but we don't have enough data\n // to see the second sync byte, wait until we have enough data\n // before declaring it ts\n\n if (type === 'ts' && bytes.length < 188) {\n return callbackOnCompleted(request, () => endRequestAndCallback(error, request, '', bytes));\n } // this may be an unsynced ts segment\n // wait for 376 bytes before detecting no container\n\n if (!type && bytes.length < 376) {\n return callbackOnCompleted(request, () => endRequestAndCallback(error, request, '', bytes));\n }\n return endRequestAndCallback(null, request, type, bytes);\n };\n const options = {\n uri,\n beforeSend(request) {\n // this forces the browser to pass the bytes to us unprocessed\n request.overrideMimeType('text/plain; charset=x-user-defined');\n request.addEventListener('progress', function ({\n total,\n loaded\n }) {\n return callbackWrapper(request, null, {\n statusCode: request.status\n }, progressListener);\n });\n }\n };\n const request = xhr(options, function (error, response) {\n return callbackWrapper(request, error, response, progressListener);\n });\n return request;\n};\nconst {\n EventTarget\n} = videojs;\nconst dashPlaylistUnchanged = function (a, b) {\n if (!isPlaylistUnchanged(a, b)) {\n return false;\n } // for dash the above check will often return true in scenarios where\n // the playlist actually has changed because mediaSequence isn't a\n // dash thing, and we often set it to 1. So if the playlists have the same amount\n // of segments we return true.\n // So for dash we need to make sure that the underlying segments are different.\n // if sidx changed then the playlists are different.\n\n if (a.sidx && b.sidx && (a.sidx.offset !== b.sidx.offset || a.sidx.length !== b.sidx.length)) {\n return false;\n } else if (!a.sidx && b.sidx || a.sidx && !b.sidx) {\n return false;\n } // one or the other does not have segments\n // there was a change.\n\n if (a.segments && !b.segments || !a.segments && b.segments) {\n return false;\n } // neither has segments nothing changed\n\n if (!a.segments && !b.segments) {\n return true;\n } // check segments themselves\n\n for (let i = 0; i < a.segments.length; i++) {\n const aSegment = a.segments[i];\n const bSegment = b.segments[i]; // if uris are different between segments there was a change\n\n if (aSegment.uri !== bSegment.uri) {\n return false;\n } // neither segment has a byterange, there will be no byterange change.\n\n if (!aSegment.byterange && !bSegment.byterange) {\n continue;\n }\n const aByterange = aSegment.byterange;\n const bByterange = bSegment.byterange; // if byterange only exists on one of the segments, there was a change.\n\n if (aByterange && !bByterange || !aByterange && bByterange) {\n return false;\n } // if both segments have byterange with different offsets, there was a change.\n\n if (aByterange.offset !== bByterange.offset || aByterange.length !== bByterange.length) {\n return false;\n }\n } // if everything was the same with segments, this is the same playlist.\n\n return true;\n};\n/**\n * Use the representation IDs from the mpd object to create groupIDs, the NAME is set to mandatory representation\n * ID in the parser. This allows for continuous playout across periods with the same representation IDs\n * (continuous periods as defined in DASH-IF 3.2.12). This is assumed in the mpd-parser as well. If we want to support\n * periods without continuous playback this function may need modification as well as the parser.\n */\n\nconst dashGroupId = (type, group, label, playlist) => {\n // If the manifest somehow does not have an ID (non-dash compliant), use the label.\n const playlistId = playlist.attributes.NAME || label;\n return `placeholder-uri-${type}-${group}-${playlistId}`;\n};\n/**\n * Parses the main XML string and updates playlist URI references.\n *\n * @param {Object} config\n * Object of arguments\n * @param {string} config.mainXml\n * The mpd XML\n * @param {string} config.srcUrl\n * The mpd URL\n * @param {Date} config.clientOffset\n * A time difference between server and client\n * @param {Object} config.sidxMapping\n * SIDX mappings for moof/mdat URIs and byte ranges\n * @return {Object}\n * The parsed mpd manifest object\n */\n\nconst parseMainXml = ({\n mainXml,\n srcUrl,\n clientOffset,\n sidxMapping,\n previousManifest\n}) => {\n const manifest = parse(mainXml, {\n manifestUri: srcUrl,\n clientOffset,\n sidxMapping,\n previousManifest\n });\n addPropertiesToMain(manifest, srcUrl, dashGroupId);\n return manifest;\n};\n/**\n * Removes any mediaGroup labels that no longer exist in the newMain\n *\n * @param {Object} update\n * The previous mpd object being updated\n * @param {Object} newMain\n * The new mpd object\n */\n\nconst removeOldMediaGroupLabels = (update, newMain) => {\n forEachMediaGroup(update, (properties, type, group, label) => {\n if (!(label in newMain.mediaGroups[type][group])) {\n delete update.mediaGroups[type][group][label];\n }\n });\n};\n/**\n * Returns a new main manifest that is the result of merging an updated main manifest\n * into the original version.\n *\n * @param {Object} oldMain\n * The old parsed mpd object\n * @param {Object} newMain\n * The updated parsed mpd object\n * @return {Object}\n * A new object representing the original main manifest with the updated media\n * playlists merged in\n */\n\nconst updateMain = (oldMain, newMain, sidxMapping) => {\n let noChanges = true;\n let update = merge(oldMain, {\n // These are top level properties that can be updated\n duration: newMain.duration,\n minimumUpdatePeriod: newMain.minimumUpdatePeriod,\n timelineStarts: newMain.timelineStarts\n }); // First update the playlists in playlist list\n\n for (let i = 0; i < newMain.playlists.length; i++) {\n const playlist = newMain.playlists[i];\n if (playlist.sidx) {\n const sidxKey = generateSidxKey(playlist.sidx); // add sidx segments to the playlist if we have all the sidx info already\n\n if (sidxMapping && sidxMapping[sidxKey] && sidxMapping[sidxKey].sidx) {\n addSidxSegmentsToPlaylist(playlist, sidxMapping[sidxKey].sidx, playlist.sidx.resolvedUri);\n }\n }\n const playlistUpdate = updateMain$1(update, playlist, dashPlaylistUnchanged);\n if (playlistUpdate) {\n update = playlistUpdate;\n noChanges = false;\n }\n } // Then update media group playlists\n\n forEachMediaGroup(newMain, (properties, type, group, label) => {\n if (properties.playlists && properties.playlists.length) {\n const id = properties.playlists[0].id;\n const playlistUpdate = updateMain$1(update, properties.playlists[0], dashPlaylistUnchanged);\n if (playlistUpdate) {\n update = playlistUpdate; // add new mediaGroup label if it doesn't exist and assign the new mediaGroup.\n\n if (!(label in update.mediaGroups[type][group])) {\n update.mediaGroups[type][group][label] = properties;\n } // update the playlist reference within media groups\n\n update.mediaGroups[type][group][label].playlists[0] = update.playlists[id];\n noChanges = false;\n }\n }\n }); // remove mediaGroup labels and references that no longer exist in the newMain\n\n removeOldMediaGroupLabels(update, newMain);\n if (newMain.minimumUpdatePeriod !== oldMain.minimumUpdatePeriod) {\n noChanges = false;\n }\n if (noChanges) {\n return null;\n }\n return update;\n}; // SIDX should be equivalent if the URI and byteranges of the SIDX match.\n// If the SIDXs have maps, the two maps should match,\n// both `a` and `b` missing SIDXs is considered matching.\n// If `a` or `b` but not both have a map, they aren't matching.\n\nconst equivalentSidx = (a, b) => {\n const neitherMap = Boolean(!a.map && !b.map);\n const equivalentMap = neitherMap || Boolean(a.map && b.map && a.map.byterange.offset === b.map.byterange.offset && a.map.byterange.length === b.map.byterange.length);\n return equivalentMap && a.uri === b.uri && a.byterange.offset === b.byterange.offset && a.byterange.length === b.byterange.length;\n}; // exported for testing\n\nconst compareSidxEntry = (playlists, oldSidxMapping) => {\n const newSidxMapping = {};\n for (const id in playlists) {\n const playlist = playlists[id];\n const currentSidxInfo = playlist.sidx;\n if (currentSidxInfo) {\n const key = generateSidxKey(currentSidxInfo);\n if (!oldSidxMapping[key]) {\n break;\n }\n const savedSidxInfo = oldSidxMapping[key].sidxInfo;\n if (equivalentSidx(savedSidxInfo, currentSidxInfo)) {\n newSidxMapping[key] = oldSidxMapping[key];\n }\n }\n }\n return newSidxMapping;\n};\n/**\n * A function that filters out changed items as they need to be requested separately.\n *\n * The method is exported for testing\n *\n * @param {Object} main the parsed mpd XML returned via mpd-parser\n * @param {Object} oldSidxMapping the SIDX to compare against\n */\n\nconst filterChangedSidxMappings = (main, oldSidxMapping) => {\n const videoSidx = compareSidxEntry(main.playlists, oldSidxMapping);\n let mediaGroupSidx = videoSidx;\n forEachMediaGroup(main, (properties, mediaType, groupKey, labelKey) => {\n if (properties.playlists && properties.playlists.length) {\n const playlists = properties.playlists;\n mediaGroupSidx = merge(mediaGroupSidx, compareSidxEntry(playlists, oldSidxMapping));\n }\n });\n return mediaGroupSidx;\n};\nclass DashPlaylistLoader extends EventTarget {\n // DashPlaylistLoader must accept either a src url or a playlist because subsequent\n // playlist loader setups from media groups will expect to be able to pass a playlist\n // (since there aren't external URLs to media playlists with DASH)\n constructor(srcUrlOrPlaylist, vhs, options = {}, mainPlaylistLoader) {\n super();\n this.mainPlaylistLoader_ = mainPlaylistLoader || this;\n if (!mainPlaylistLoader) {\n this.isMain_ = true;\n }\n const {\n withCredentials = false\n } = options;\n this.vhs_ = vhs;\n this.withCredentials = withCredentials;\n this.addMetadataToTextTrack = options.addMetadataToTextTrack;\n if (!srcUrlOrPlaylist) {\n throw new Error('A non-empty playlist URL or object is required');\n } // event naming?\n\n this.on('minimumUpdatePeriod', () => {\n this.refreshXml_();\n }); // live playlist staleness timeout\n\n this.on('mediaupdatetimeout', () => {\n this.refreshMedia_(this.media().id);\n });\n this.state = 'HAVE_NOTHING';\n this.loadedPlaylists_ = {};\n this.logger_ = logger('DashPlaylistLoader'); // initialize the loader state\n // The mainPlaylistLoader will be created with a string\n\n if (this.isMain_) {\n this.mainPlaylistLoader_.srcUrl = srcUrlOrPlaylist; // TODO: reset sidxMapping between period changes\n // once multi-period is refactored\n\n this.mainPlaylistLoader_.sidxMapping_ = {};\n } else {\n this.childPlaylist_ = srcUrlOrPlaylist;\n }\n }\n requestErrored_(err, request, startingState) {\n // disposed\n if (!this.request) {\n return true;\n } // pending request is cleared\n\n this.request = null;\n if (err) {\n // use the provided error object or create one\n // based on the request/response\n this.error = typeof err === 'object' && !(err instanceof Error) ? err : {\n status: request.status,\n message: 'DASH request error at URL: ' + request.uri,\n response: request.response,\n // MEDIA_ERR_NETWORK\n code: 2,\n metadata: err.metadata\n };\n if (startingState) {\n this.state = startingState;\n }\n this.trigger('error');\n return true;\n }\n }\n /**\n * Verify that the container of the sidx segment can be parsed\n * and if it can, get and parse that segment.\n */\n\n addSidxSegments_(playlist, startingState, cb) {\n const sidxKey = playlist.sidx && generateSidxKey(playlist.sidx); // playlist lacks sidx or sidx segments were added to this playlist already.\n\n if (!playlist.sidx || !sidxKey || this.mainPlaylistLoader_.sidxMapping_[sidxKey]) {\n // keep this function async\n this.mediaRequest_ = window$1.setTimeout(() => cb(false), 0);\n return;\n } // resolve the segment URL relative to the playlist\n\n const uri = resolveManifestRedirect(playlist.sidx.resolvedUri);\n const fin = (err, request) => {\n if (this.requestErrored_(err, request, startingState)) {\n return;\n }\n const sidxMapping = this.mainPlaylistLoader_.sidxMapping_;\n const {\n requestType\n } = request;\n let sidx;\n try {\n sidx = parseSidx(toUint8(request.response).subarray(8));\n } catch (e) {\n e.metadata = getStreamingNetworkErrorMetadata({\n requestType,\n request,\n parseFailure: true\n }); // sidx parsing failed.\n\n this.requestErrored_(e, request, startingState);\n return;\n }\n sidxMapping[sidxKey] = {\n sidxInfo: playlist.sidx,\n sidx\n };\n addSidxSegmentsToPlaylist(playlist, sidx, playlist.sidx.resolvedUri);\n return cb(true);\n };\n const REQUEST_TYPE = 'dash-sidx';\n this.request = containerRequest(uri, this.vhs_.xhr, (err, request, container, bytes) => {\n if (err) {\n return fin(err, request);\n }\n if (!container || container !== 'mp4') {\n const sidxContainer = container || 'unknown';\n return fin({\n status: request.status,\n message: `Unsupported ${sidxContainer} container type for sidx segment at URL: ${uri}`,\n // response is just bytes in this case\n // but we really don't want to return that.\n response: '',\n playlist,\n internal: true,\n playlistExclusionDuration: Infinity,\n // MEDIA_ERR_NETWORK\n code: 2\n }, request);\n } // if we already downloaded the sidx bytes in the container request, use them\n\n const {\n offset,\n length\n } = playlist.sidx.byterange;\n if (bytes.length >= length + offset) {\n return fin(err, {\n response: bytes.subarray(offset, offset + length),\n status: request.status,\n uri: request.uri\n });\n } // otherwise request sidx bytes\n\n this.request = this.vhs_.xhr({\n uri,\n responseType: 'arraybuffer',\n requestType: 'dash-sidx',\n headers: segmentXhrHeaders({\n byterange: playlist.sidx.byterange\n })\n }, fin);\n }, REQUEST_TYPE);\n }\n dispose() {\n this.trigger('dispose');\n this.stopRequest();\n this.loadedPlaylists_ = {};\n window$1.clearTimeout(this.minimumUpdatePeriodTimeout_);\n window$1.clearTimeout(this.mediaRequest_);\n window$1.clearTimeout(this.mediaUpdateTimeout);\n this.mediaUpdateTimeout = null;\n this.mediaRequest_ = null;\n this.minimumUpdatePeriodTimeout_ = null;\n if (this.mainPlaylistLoader_.createMupOnMedia_) {\n this.off('loadedmetadata', this.mainPlaylistLoader_.createMupOnMedia_);\n this.mainPlaylistLoader_.createMupOnMedia_ = null;\n }\n this.off();\n }\n hasPendingRequest() {\n return this.request || this.mediaRequest_;\n }\n stopRequest() {\n if (this.request) {\n const oldRequest = this.request;\n this.request = null;\n oldRequest.onreadystatechange = null;\n oldRequest.abort();\n }\n }\n media(playlist) {\n // getter\n if (!playlist) {\n return this.media_;\n } // setter\n\n if (this.state === 'HAVE_NOTHING') {\n throw new Error('Cannot switch media playlist from ' + this.state);\n }\n const startingState = this.state; // find the playlist object if the target playlist has been specified by URI\n\n if (typeof playlist === 'string') {\n if (!this.mainPlaylistLoader_.main.playlists[playlist]) {\n throw new Error('Unknown playlist URI: ' + playlist);\n }\n playlist = this.mainPlaylistLoader_.main.playlists[playlist];\n }\n const mediaChange = !this.media_ || playlist.id !== this.media_.id; // switch to previously loaded playlists immediately\n\n if (mediaChange && this.loadedPlaylists_[playlist.id] && this.loadedPlaylists_[playlist.id].endList) {\n this.state = 'HAVE_METADATA';\n this.media_ = playlist; // trigger media change if the active media has been updated\n\n if (mediaChange) {\n this.trigger('mediachanging');\n this.trigger('mediachange');\n }\n return;\n } // switching to the active playlist is a no-op\n\n if (!mediaChange) {\n return;\n } // switching from an already loaded playlist\n\n if (this.media_) {\n this.trigger('mediachanging');\n }\n this.addSidxSegments_(playlist, startingState, sidxChanged => {\n // everything is ready just continue to haveMetadata\n this.haveMetadata({\n startingState,\n playlist\n });\n });\n }\n haveMetadata({\n startingState,\n playlist\n }) {\n this.state = 'HAVE_METADATA';\n this.loadedPlaylists_[playlist.id] = playlist;\n this.mediaRequest_ = null; // This will trigger loadedplaylist\n\n this.refreshMedia_(playlist.id); // fire loadedmetadata the first time a media playlist is loaded\n // to resolve setup of media groups\n\n if (startingState === 'HAVE_MAIN_MANIFEST') {\n this.trigger('loadedmetadata');\n } else {\n // trigger media change if the active media has been updated\n this.trigger('mediachange');\n }\n }\n pause() {\n if (this.mainPlaylistLoader_.createMupOnMedia_) {\n this.off('loadedmetadata', this.mainPlaylistLoader_.createMupOnMedia_);\n this.mainPlaylistLoader_.createMupOnMedia_ = null;\n }\n this.stopRequest();\n window$1.clearTimeout(this.mediaUpdateTimeout);\n this.mediaUpdateTimeout = null;\n if (this.isMain_) {\n window$1.clearTimeout(this.mainPlaylistLoader_.minimumUpdatePeriodTimeout_);\n this.mainPlaylistLoader_.minimumUpdatePeriodTimeout_ = null;\n }\n if (this.state === 'HAVE_NOTHING') {\n // If we pause the loader before any data has been retrieved, its as if we never\n // started, so reset to an unstarted state.\n this.started = false;\n }\n }\n load(isFinalRendition) {\n window$1.clearTimeout(this.mediaUpdateTimeout);\n this.mediaUpdateTimeout = null;\n const media = this.media();\n if (isFinalRendition) {\n const delay = media ? media.targetDuration / 2 * 1000 : 5 * 1000;\n this.mediaUpdateTimeout = window$1.setTimeout(() => this.load(), delay);\n return;\n } // because the playlists are internal to the manifest, load should either load the\n // main manifest, or do nothing but trigger an event\n\n if (!this.started) {\n this.start();\n return;\n }\n if (media && !media.endList) {\n // Check to see if this is the main loader and the MUP was cleared (this happens\n // when the loader was paused). `media` should be set at this point since one is always\n // set during `start()`.\n if (this.isMain_ && !this.minimumUpdatePeriodTimeout_) {\n // Trigger minimumUpdatePeriod to refresh the main manifest\n this.trigger('minimumUpdatePeriod'); // Since there was no prior minimumUpdatePeriodTimeout it should be recreated\n\n this.updateMinimumUpdatePeriodTimeout_();\n }\n this.trigger('mediaupdatetimeout');\n } else {\n this.trigger('loadedplaylist');\n }\n }\n start() {\n this.started = true; // We don't need to request the main manifest again\n // Call this asynchronously to match the xhr request behavior below\n\n if (!this.isMain_) {\n this.mediaRequest_ = window$1.setTimeout(() => this.haveMain_(), 0);\n return;\n }\n this.requestMain_((req, mainChanged) => {\n this.haveMain_();\n if (!this.hasPendingRequest() && !this.media_) {\n this.media(this.mainPlaylistLoader_.main.playlists[0]);\n }\n });\n }\n requestMain_(cb) {\n const metadata = {\n manifestInfo: {\n uri: this.mainPlaylistLoader_.srcUrl\n }\n };\n this.trigger({\n type: 'manifestrequeststart',\n metadata\n });\n this.request = this.vhs_.xhr({\n uri: this.mainPlaylistLoader_.srcUrl,\n withCredentials: this.withCredentials,\n requestType: 'dash-manifest'\n }, (error, req) => {\n if (error) {\n const {\n requestType\n } = req;\n error.metadata = getStreamingNetworkErrorMetadata({\n requestType,\n request: req,\n error\n });\n }\n if (this.requestErrored_(error, req)) {\n if (this.state === 'HAVE_NOTHING') {\n this.started = false;\n }\n return;\n }\n this.trigger({\n type: 'manifestrequestcomplete',\n metadata\n });\n const mainChanged = req.responseText !== this.mainPlaylistLoader_.mainXml_;\n this.mainPlaylistLoader_.mainXml_ = req.responseText;\n if (req.responseHeaders && req.responseHeaders.date) {\n this.mainLoaded_ = Date.parse(req.responseHeaders.date);\n } else {\n this.mainLoaded_ = Date.now();\n }\n this.mainPlaylistLoader_.srcUrl = resolveManifestRedirect(this.mainPlaylistLoader_.srcUrl, req);\n if (mainChanged) {\n this.handleMain_();\n this.syncClientServerClock_(() => {\n return cb(req, mainChanged);\n });\n return;\n }\n return cb(req, mainChanged);\n });\n }\n /**\n * Parses the main xml for UTCTiming node to sync the client clock to the server\n * clock. If the UTCTiming node requires a HEAD or GET request, that request is made.\n *\n * @param {Function} done\n * Function to call when clock sync has completed\n */\n\n syncClientServerClock_(done) {\n const utcTiming = parseUTCTiming(this.mainPlaylistLoader_.mainXml_); // No UTCTiming element found in the mpd. Use Date header from mpd request as the\n // server clock\n\n if (utcTiming === null) {\n this.mainPlaylistLoader_.clientOffset_ = this.mainLoaded_ - Date.now();\n return done();\n }\n if (utcTiming.method === 'DIRECT') {\n this.mainPlaylistLoader_.clientOffset_ = utcTiming.value - Date.now();\n return done();\n }\n this.request = this.vhs_.xhr({\n uri: resolveUrl(this.mainPlaylistLoader_.srcUrl, utcTiming.value),\n method: utcTiming.method,\n withCredentials: this.withCredentials,\n requestType: 'dash-clock-sync'\n }, (error, req) => {\n // disposed\n if (!this.request) {\n return;\n }\n if (error) {\n const {\n requestType\n } = req;\n this.error.metadata = getStreamingNetworkErrorMetadata({\n requestType,\n request: req,\n error\n }); // sync request failed, fall back to using date header from mpd\n // TODO: log warning\n\n this.mainPlaylistLoader_.clientOffset_ = this.mainLoaded_ - Date.now();\n return done();\n }\n let serverTime;\n if (utcTiming.method === 'HEAD') {\n if (!req.responseHeaders || !req.responseHeaders.date) {\n // expected date header not preset, fall back to using date header from mpd\n // TODO: log warning\n serverTime = this.mainLoaded_;\n } else {\n serverTime = Date.parse(req.responseHeaders.date);\n }\n } else {\n serverTime = Date.parse(req.responseText);\n }\n this.mainPlaylistLoader_.clientOffset_ = serverTime - Date.now();\n done();\n });\n }\n haveMain_() {\n this.state = 'HAVE_MAIN_MANIFEST';\n if (this.isMain_) {\n // We have the main playlist at this point, so\n // trigger this to allow PlaylistController\n // to make an initial playlist selection\n this.trigger('loadedplaylist');\n } else if (!this.media_) {\n // no media playlist was specifically selected so select\n // the one the child playlist loader was created with\n this.media(this.childPlaylist_);\n }\n }\n handleMain_() {\n // clear media request\n this.mediaRequest_ = null;\n const oldMain = this.mainPlaylistLoader_.main;\n const metadata = {\n manifestInfo: {\n uri: this.mainPlaylistLoader_.srcUrl\n }\n };\n this.trigger({\n type: 'manifestparsestart',\n metadata\n });\n let newMain;\n try {\n newMain = parseMainXml({\n mainXml: this.mainPlaylistLoader_.mainXml_,\n srcUrl: this.mainPlaylistLoader_.srcUrl,\n clientOffset: this.mainPlaylistLoader_.clientOffset_,\n sidxMapping: this.mainPlaylistLoader_.sidxMapping_,\n previousManifest: oldMain\n });\n } catch (error) {\n this.error = error;\n this.error.metadata = {\n errorType: videojs.Error.StreamingDashManifestParserError,\n error\n };\n this.trigger('error');\n } // if we have an old main to compare the new main against\n\n if (oldMain) {\n newMain = updateMain(oldMain, newMain, this.mainPlaylistLoader_.sidxMapping_);\n } // only update main if we have a new main\n\n this.mainPlaylistLoader_.main = newMain ? newMain : oldMain;\n const location = this.mainPlaylistLoader_.main.locations && this.mainPlaylistLoader_.main.locations[0];\n if (location && location !== this.mainPlaylistLoader_.srcUrl) {\n this.mainPlaylistLoader_.srcUrl = location;\n }\n if (!oldMain || newMain && newMain.minimumUpdatePeriod !== oldMain.minimumUpdatePeriod) {\n this.updateMinimumUpdatePeriodTimeout_();\n }\n this.addEventStreamToMetadataTrack_(newMain);\n if (newMain) {\n const {\n duration,\n endList\n } = newMain;\n const renditions = [];\n newMain.playlists.forEach(playlist => {\n renditions.push({\n id: playlist.id,\n bandwidth: playlist.attributes.BANDWIDTH,\n resolution: playlist.attributes.RESOLUTION,\n codecs: playlist.attributes.CODECS\n });\n });\n const parsedManifest = {\n duration,\n isLive: !endList,\n renditions\n };\n metadata.parsedManifest = parsedManifest;\n this.trigger({\n type: 'manifestparsecomplete',\n metadata\n });\n }\n return Boolean(newMain);\n }\n updateMinimumUpdatePeriodTimeout_() {\n const mpl = this.mainPlaylistLoader_; // cancel any pending creation of mup on media\n // a new one will be added if needed.\n\n if (mpl.createMupOnMedia_) {\n mpl.off('loadedmetadata', mpl.createMupOnMedia_);\n mpl.createMupOnMedia_ = null;\n } // clear any pending timeouts\n\n if (mpl.minimumUpdatePeriodTimeout_) {\n window$1.clearTimeout(mpl.minimumUpdatePeriodTimeout_);\n mpl.minimumUpdatePeriodTimeout_ = null;\n }\n let mup = mpl.main && mpl.main.minimumUpdatePeriod; // If the minimumUpdatePeriod has a value of 0, that indicates that the current\n // MPD has no future validity, so a new one will need to be acquired when new\n // media segments are to be made available. Thus, we use the target duration\n // in this case\n\n if (mup === 0) {\n if (mpl.media()) {\n mup = mpl.media().targetDuration * 1000;\n } else {\n mpl.createMupOnMedia_ = mpl.updateMinimumUpdatePeriodTimeout_;\n mpl.one('loadedmetadata', mpl.createMupOnMedia_);\n }\n } // if minimumUpdatePeriod is invalid or <= zero, which\n // can happen when a live video becomes VOD. skip timeout\n // creation.\n\n if (typeof mup !== 'number' || mup <= 0) {\n if (mup < 0) {\n this.logger_(`found invalid minimumUpdatePeriod of ${mup}, not setting a timeout`);\n }\n return;\n }\n this.createMUPTimeout_(mup);\n }\n createMUPTimeout_(mup) {\n const mpl = this.mainPlaylistLoader_;\n mpl.minimumUpdatePeriodTimeout_ = window$1.setTimeout(() => {\n mpl.minimumUpdatePeriodTimeout_ = null;\n mpl.trigger('minimumUpdatePeriod');\n mpl.createMUPTimeout_(mup);\n }, mup);\n }\n /**\n * Sends request to refresh the main xml and updates the parsed main manifest\n */\n\n refreshXml_() {\n this.requestMain_((req, mainChanged) => {\n if (!mainChanged) {\n return;\n }\n if (this.media_) {\n this.media_ = this.mainPlaylistLoader_.main.playlists[this.media_.id];\n } // This will filter out updated sidx info from the mapping\n\n this.mainPlaylistLoader_.sidxMapping_ = filterChangedSidxMappings(this.mainPlaylistLoader_.main, this.mainPlaylistLoader_.sidxMapping_);\n this.addSidxSegments_(this.media(), this.state, sidxChanged => {\n // TODO: do we need to reload the current playlist?\n this.refreshMedia_(this.media().id);\n });\n });\n }\n /**\n * Refreshes the media playlist by re-parsing the main xml and updating playlist\n * references. If this is an alternate loader, the updated parsed manifest is retrieved\n * from the main loader.\n */\n\n refreshMedia_(mediaID) {\n if (!mediaID) {\n throw new Error('refreshMedia_ must take a media id');\n } // for main we have to reparse the main xml\n // to re-create segments based on current timing values\n // which may change media. We only skip updating the main manifest\n // if this is the first time this.media_ is being set.\n // as main was just parsed in that case.\n\n if (this.media_ && this.isMain_) {\n this.handleMain_();\n }\n const playlists = this.mainPlaylistLoader_.main.playlists;\n const mediaChanged = !this.media_ || this.media_ !== playlists[mediaID];\n if (mediaChanged) {\n this.media_ = playlists[mediaID];\n } else {\n this.trigger('playlistunchanged');\n }\n if (!this.mediaUpdateTimeout) {\n const createMediaUpdateTimeout = () => {\n if (this.media().endList) {\n return;\n }\n this.mediaUpdateTimeout = window$1.setTimeout(() => {\n this.trigger('mediaupdatetimeout');\n createMediaUpdateTimeout();\n }, refreshDelay(this.media(), Boolean(mediaChanged)));\n };\n createMediaUpdateTimeout();\n }\n this.trigger('loadedplaylist');\n }\n /**\n * Takes eventstream data from a parsed DASH manifest and adds it to the metadata text track.\n *\n * @param {manifest} newMain the newly parsed manifest\n */\n\n addEventStreamToMetadataTrack_(newMain) {\n // Only add new event stream metadata if we have a new manifest.\n if (newMain && this.mainPlaylistLoader_.main.eventStream) {\n // convert EventStream to ID3-like data.\n const metadataArray = this.mainPlaylistLoader_.main.eventStream.map(eventStreamNode => {\n return {\n cueTime: eventStreamNode.start,\n frames: [{\n data: eventStreamNode.messageData\n }]\n };\n });\n this.addMetadataToTextTrack('EventStream', metadataArray, this.mainPlaylistLoader_.main.duration);\n }\n }\n /**\n * Returns the key ID set from a playlist\n *\n * @param {playlist} playlist to fetch the key ID set from.\n * @return a Set of 32 digit hex strings that represent the unique keyIds for that playlist.\n */\n\n getKeyIdSet(playlist) {\n if (playlist.contentProtection) {\n const keyIds = new Set();\n for (const keysystem in playlist.contentProtection) {\n const defaultKID = playlist.contentProtection[keysystem].attributes['cenc:default_KID'];\n if (defaultKID) {\n // DASH keyIds are separated by dashes.\n keyIds.add(defaultKID.replace(/-/g, '').toLowerCase());\n }\n }\n return keyIds;\n }\n }\n}\nvar Config = {\n GOAL_BUFFER_LENGTH: 30,\n MAX_GOAL_BUFFER_LENGTH: 60,\n BACK_BUFFER_LENGTH: 30,\n GOAL_BUFFER_LENGTH_RATE: 1,\n // 0.5 MB/s\n INITIAL_BANDWIDTH: 4194304,\n // A fudge factor to apply to advertised playlist bitrates to account for\n // temporary flucations in client bandwidth\n BANDWIDTH_VARIANCE: 1.2,\n // How much of the buffer must be filled before we consider upswitching\n BUFFER_LOW_WATER_LINE: 0,\n MAX_BUFFER_LOW_WATER_LINE: 30,\n // TODO: Remove this when experimentalBufferBasedABR is removed\n EXPERIMENTAL_MAX_BUFFER_LOW_WATER_LINE: 16,\n BUFFER_LOW_WATER_LINE_RATE: 1,\n // If the buffer is greater than the high water line, we won't switch down\n BUFFER_HIGH_WATER_LINE: 30\n};\nconst stringToArrayBuffer = string => {\n const view = new Uint8Array(new ArrayBuffer(string.length));\n for (let i = 0; i < string.length; i++) {\n view[i] = string.charCodeAt(i);\n }\n return view.buffer;\n};\n\n/* global Blob, BlobBuilder, Worker */\n// unify worker interface\nconst browserWorkerPolyFill = function (workerObj) {\n // node only supports on/off\n workerObj.on = workerObj.addEventListener;\n workerObj.off = workerObj.removeEventListener;\n return workerObj;\n};\nconst createObjectURL = function (str) {\n try {\n return URL.createObjectURL(new Blob([str], {\n type: 'application/javascript'\n }));\n } catch (e) {\n const blob = new BlobBuilder();\n blob.append(str);\n return URL.createObjectURL(blob.getBlob());\n }\n};\nconst factory = function (code) {\n return function () {\n const objectUrl = createObjectURL(code);\n const worker = browserWorkerPolyFill(new Worker(objectUrl));\n worker.objURL = objectUrl;\n const terminate = worker.terminate;\n worker.on = worker.addEventListener;\n worker.off = worker.removeEventListener;\n worker.terminate = function () {\n URL.revokeObjectURL(objectUrl);\n return terminate.call(this);\n };\n return worker;\n };\n};\nconst transform = function (code) {\n return `var browserWorkerPolyFill = ${browserWorkerPolyFill.toString()};\\n` + 'browserWorkerPolyFill(self);\\n' + code;\n};\nconst getWorkerString = function (fn) {\n return fn.toString().replace(/^function.+?{/, '').slice(0, -1);\n};\n\n/* rollup-plugin-worker-factory start for worker!/home/runner/work/http-streaming/http-streaming/src/transmuxer-worker.js */\nconst workerCode$1 = transform(getWorkerString(function () {\n var commonjsGlobal = typeof globalThis !== 'undefined' ? globalThis : typeof window !== 'undefined' ? window : typeof global !== 'undefined' ? global : typeof self !== 'undefined' ? self : {};\n /**\n * mux.js\n *\n * Copyright (c) Brightcove\n * Licensed Apache-2.0 https://github.com/videojs/mux.js/blob/master/LICENSE\n *\n * A lightweight readable stream implemention that handles event dispatching.\n * Objects that inherit from streams should call init in their constructors.\n */\n\n var Stream$8 = function () {\n this.init = function () {\n var listeners = {};\n /**\n * Add a listener for a specified event type.\n * @param type {string} the event name\n * @param listener {function} the callback to be invoked when an event of\n * the specified type occurs\n */\n\n this.on = function (type, listener) {\n if (!listeners[type]) {\n listeners[type] = [];\n }\n listeners[type] = listeners[type].concat(listener);\n };\n /**\n * Remove a listener for a specified event type.\n * @param type {string} the event name\n * @param listener {function} a function previously registered for this\n * type of event through `on`\n */\n\n this.off = function (type, listener) {\n var index;\n if (!listeners[type]) {\n return false;\n }\n index = listeners[type].indexOf(listener);\n listeners[type] = listeners[type].slice();\n listeners[type].splice(index, 1);\n return index > -1;\n };\n /**\n * Trigger an event of the specified type on this stream. Any additional\n * arguments to this function are passed as parameters to event listeners.\n * @param type {string} the event name\n */\n\n this.trigger = function (type) {\n var callbacks, i, length, args;\n callbacks = listeners[type];\n if (!callbacks) {\n return;\n } // Slicing the arguments on every invocation of this method\n // can add a significant amount of overhead. Avoid the\n // intermediate object creation for the common case of a\n // single callback argument\n\n if (arguments.length === 2) {\n length = callbacks.length;\n for (i = 0; i < length; ++i) {\n callbacks[i].call(this, arguments[1]);\n }\n } else {\n args = [];\n i = arguments.length;\n for (i = 1; i < arguments.length; ++i) {\n args.push(arguments[i]);\n }\n length = callbacks.length;\n for (i = 0; i < length; ++i) {\n callbacks[i].apply(this, args);\n }\n }\n };\n /**\n * Destroys the stream and cleans up.\n */\n\n this.dispose = function () {\n listeners = {};\n };\n };\n };\n /**\n * Forwards all `data` events on this stream to the destination stream. The\n * destination stream should provide a method `push` to receive the data\n * events as they arrive.\n * @param destination {stream} the stream that will receive all `data` events\n * @param autoFlush {boolean} if false, we will not call `flush` on the destination\n * when the current stream emits a 'done' event\n * @see http://nodejs.org/api/stream.html#stream_readable_pipe_destination_options\n */\n\n Stream$8.prototype.pipe = function (destination) {\n this.on('data', function (data) {\n destination.push(data);\n });\n this.on('done', function (flushSource) {\n destination.flush(flushSource);\n });\n this.on('partialdone', function (flushSource) {\n destination.partialFlush(flushSource);\n });\n this.on('endedtimeline', function (flushSource) {\n destination.endTimeline(flushSource);\n });\n this.on('reset', function (flushSource) {\n destination.reset(flushSource);\n });\n return destination;\n }; // Default stream functions that are expected to be overridden to perform\n // actual work. These are provided by the prototype as a sort of no-op\n // implementation so that we don't have to check for their existence in the\n // `pipe` function above.\n\n Stream$8.prototype.push = function (data) {\n this.trigger('data', data);\n };\n Stream$8.prototype.flush = function (flushSource) {\n this.trigger('done', flushSource);\n };\n Stream$8.prototype.partialFlush = function (flushSource) {\n this.trigger('partialdone', flushSource);\n };\n Stream$8.prototype.endTimeline = function (flushSource) {\n this.trigger('endedtimeline', flushSource);\n };\n Stream$8.prototype.reset = function (flushSource) {\n this.trigger('reset', flushSource);\n };\n var stream = Stream$8;\n var MAX_UINT32$1 = Math.pow(2, 32);\n var getUint64$3 = function (uint8) {\n var dv = new DataView(uint8.buffer, uint8.byteOffset, uint8.byteLength);\n var value;\n if (dv.getBigUint64) {\n value = dv.getBigUint64(0);\n if (value < Number.MAX_SAFE_INTEGER) {\n return Number(value);\n }\n return value;\n }\n return dv.getUint32(0) * MAX_UINT32$1 + dv.getUint32(4);\n };\n var numbers = {\n getUint64: getUint64$3,\n MAX_UINT32: MAX_UINT32$1\n };\n /**\n * mux.js\n *\n * Copyright (c) Brightcove\n * Licensed Apache-2.0 https://github.com/videojs/mux.js/blob/master/LICENSE\n *\n * Functions that generate fragmented MP4s suitable for use with Media\n * Source Extensions.\n */\n\n var MAX_UINT32 = numbers.MAX_UINT32;\n var box, dinf, esds, ftyp, mdat, mfhd, minf, moof, moov, mvex, mvhd, trak, tkhd, mdia, mdhd, hdlr, sdtp, stbl, stsd, traf, trex, trun$1, types, MAJOR_BRAND, MINOR_VERSION, AVC1_BRAND, VIDEO_HDLR, AUDIO_HDLR, HDLR_TYPES, VMHD, SMHD, DREF, STCO, STSC, STSZ, STTS; // pre-calculate constants\n\n (function () {\n var i;\n types = {\n avc1: [],\n // codingname\n avcC: [],\n btrt: [],\n dinf: [],\n dref: [],\n esds: [],\n ftyp: [],\n hdlr: [],\n mdat: [],\n mdhd: [],\n mdia: [],\n mfhd: [],\n minf: [],\n moof: [],\n moov: [],\n mp4a: [],\n // codingname\n mvex: [],\n mvhd: [],\n pasp: [],\n sdtp: [],\n smhd: [],\n stbl: [],\n stco: [],\n stsc: [],\n stsd: [],\n stsz: [],\n stts: [],\n styp: [],\n tfdt: [],\n tfhd: [],\n traf: [],\n trak: [],\n trun: [],\n trex: [],\n tkhd: [],\n vmhd: []\n }; // In environments where Uint8Array is undefined (e.g., IE8), skip set up so that we\n // don't throw an error\n\n if (typeof Uint8Array === 'undefined') {\n return;\n }\n for (i in types) {\n if (types.hasOwnProperty(i)) {\n types[i] = [i.charCodeAt(0), i.charCodeAt(1), i.charCodeAt(2), i.charCodeAt(3)];\n }\n }\n MAJOR_BRAND = new Uint8Array(['i'.charCodeAt(0), 's'.charCodeAt(0), 'o'.charCodeAt(0), 'm'.charCodeAt(0)]);\n AVC1_BRAND = new Uint8Array(['a'.charCodeAt(0), 'v'.charCodeAt(0), 'c'.charCodeAt(0), '1'.charCodeAt(0)]);\n MINOR_VERSION = new Uint8Array([0, 0, 0, 1]);\n VIDEO_HDLR = new Uint8Array([0x00,\n // version 0\n 0x00, 0x00, 0x00,\n // flags\n 0x00, 0x00, 0x00, 0x00,\n // pre_defined\n 0x76, 0x69, 0x64, 0x65,\n // handler_type: 'vide'\n 0x00, 0x00, 0x00, 0x00,\n // reserved\n 0x00, 0x00, 0x00, 0x00,\n // reserved\n 0x00, 0x00, 0x00, 0x00,\n // reserved\n 0x56, 0x69, 0x64, 0x65, 0x6f, 0x48, 0x61, 0x6e, 0x64, 0x6c, 0x65, 0x72, 0x00 // name: 'VideoHandler'\n ]);\n AUDIO_HDLR = new Uint8Array([0x00,\n // version 0\n 0x00, 0x00, 0x00,\n // flags\n 0x00, 0x00, 0x00, 0x00,\n // pre_defined\n 0x73, 0x6f, 0x75, 0x6e,\n // handler_type: 'soun'\n 0x00, 0x00, 0x00, 0x00,\n // reserved\n 0x00, 0x00, 0x00, 0x00,\n // reserved\n 0x00, 0x00, 0x00, 0x00,\n // reserved\n 0x53, 0x6f, 0x75, 0x6e, 0x64, 0x48, 0x61, 0x6e, 0x64, 0x6c, 0x65, 0x72, 0x00 // name: 'SoundHandler'\n ]);\n HDLR_TYPES = {\n video: VIDEO_HDLR,\n audio: AUDIO_HDLR\n };\n DREF = new Uint8Array([0x00,\n // version 0\n 0x00, 0x00, 0x00,\n // flags\n 0x00, 0x00, 0x00, 0x01,\n // entry_count\n 0x00, 0x00, 0x00, 0x0c,\n // entry_size\n 0x75, 0x72, 0x6c, 0x20,\n // 'url' type\n 0x00,\n // version 0\n 0x00, 0x00, 0x01 // entry_flags\n ]);\n SMHD = new Uint8Array([0x00,\n // version\n 0x00, 0x00, 0x00,\n // flags\n 0x00, 0x00,\n // balance, 0 means centered\n 0x00, 0x00 // reserved\n ]);\n STCO = new Uint8Array([0x00,\n // version\n 0x00, 0x00, 0x00,\n // flags\n 0x00, 0x00, 0x00, 0x00 // entry_count\n ]);\n STSC = STCO;\n STSZ = new Uint8Array([0x00,\n // version\n 0x00, 0x00, 0x00,\n // flags\n 0x00, 0x00, 0x00, 0x00,\n // sample_size\n 0x00, 0x00, 0x00, 0x00 // sample_count\n ]);\n STTS = STCO;\n VMHD = new Uint8Array([0x00,\n // version\n 0x00, 0x00, 0x01,\n // flags\n 0x00, 0x00,\n // graphicsmode\n 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 // opcolor\n ]);\n })();\n box = function (type) {\n var payload = [],\n size = 0,\n i,\n result,\n view;\n for (i = 1; i < arguments.length; i++) {\n payload.push(arguments[i]);\n }\n i = payload.length; // calculate the total size we need to allocate\n\n while (i--) {\n size += payload[i].byteLength;\n }\n result = new Uint8Array(size + 8);\n view = new DataView(result.buffer, result.byteOffset, result.byteLength);\n view.setUint32(0, result.byteLength);\n result.set(type, 4); // copy the payload into the result\n\n for (i = 0, size = 8; i < payload.length; i++) {\n result.set(payload[i], size);\n size += payload[i].byteLength;\n }\n return result;\n };\n dinf = function () {\n return box(types.dinf, box(types.dref, DREF));\n };\n esds = function (track) {\n return box(types.esds, new Uint8Array([0x00,\n // version\n 0x00, 0x00, 0x00,\n // flags\n // ES_Descriptor\n 0x03,\n // tag, ES_DescrTag\n 0x19,\n // length\n 0x00, 0x00,\n // ES_ID\n 0x00,\n // streamDependenceFlag, URL_flag, reserved, streamPriority\n // DecoderConfigDescriptor\n 0x04,\n // tag, DecoderConfigDescrTag\n 0x11,\n // length\n 0x40,\n // object type\n 0x15,\n // streamType\n 0x00, 0x06, 0x00,\n // bufferSizeDB\n 0x00, 0x00, 0xda, 0xc0,\n // maxBitrate\n 0x00, 0x00, 0xda, 0xc0,\n // avgBitrate\n // DecoderSpecificInfo\n 0x05,\n // tag, DecoderSpecificInfoTag\n 0x02,\n // length\n // ISO/IEC 14496-3, AudioSpecificConfig\n // for samplingFrequencyIndex see ISO/IEC 13818-7:2006, 8.1.3.2.2, Table 35\n track.audioobjecttype << 3 | track.samplingfrequencyindex >>> 1, track.samplingfrequencyindex << 7 | track.channelcount << 3, 0x06, 0x01, 0x02 // GASpecificConfig\n ]));\n };\n ftyp = function () {\n return box(types.ftyp, MAJOR_BRAND, MINOR_VERSION, MAJOR_BRAND, AVC1_BRAND);\n };\n hdlr = function (type) {\n return box(types.hdlr, HDLR_TYPES[type]);\n };\n mdat = function (data) {\n return box(types.mdat, data);\n };\n mdhd = function (track) {\n var result = new Uint8Array([0x00,\n // version 0\n 0x00, 0x00, 0x00,\n // flags\n 0x00, 0x00, 0x00, 0x02,\n // creation_time\n 0x00, 0x00, 0x00, 0x03,\n // modification_time\n 0x00, 0x01, 0x5f, 0x90,\n // timescale, 90,000 \"ticks\" per second\n track.duration >>> 24 & 0xFF, track.duration >>> 16 & 0xFF, track.duration >>> 8 & 0xFF, track.duration & 0xFF,\n // duration\n 0x55, 0xc4,\n // 'und' language (undetermined)\n 0x00, 0x00]); // Use the sample rate from the track metadata, when it is\n // defined. The sample rate can be parsed out of an ADTS header, for\n // instance.\n\n if (track.samplerate) {\n result[12] = track.samplerate >>> 24 & 0xFF;\n result[13] = track.samplerate >>> 16 & 0xFF;\n result[14] = track.samplerate >>> 8 & 0xFF;\n result[15] = track.samplerate & 0xFF;\n }\n return box(types.mdhd, result);\n };\n mdia = function (track) {\n return box(types.mdia, mdhd(track), hdlr(track.type), minf(track));\n };\n mfhd = function (sequenceNumber) {\n return box(types.mfhd, new Uint8Array([0x00, 0x00, 0x00, 0x00,\n // flags\n (sequenceNumber & 0xFF000000) >> 24, (sequenceNumber & 0xFF0000) >> 16, (sequenceNumber & 0xFF00) >> 8, sequenceNumber & 0xFF // sequence_number\n ]));\n };\n minf = function (track) {\n return box(types.minf, track.type === 'video' ? box(types.vmhd, VMHD) : box(types.smhd, SMHD), dinf(), stbl(track));\n };\n moof = function (sequenceNumber, tracks) {\n var trackFragments = [],\n i = tracks.length; // build traf boxes for each track fragment\n\n while (i--) {\n trackFragments[i] = traf(tracks[i]);\n }\n return box.apply(null, [types.moof, mfhd(sequenceNumber)].concat(trackFragments));\n };\n /**\n * Returns a movie box.\n * @param tracks {array} the tracks associated with this movie\n * @see ISO/IEC 14496-12:2012(E), section 8.2.1\n */\n\n moov = function (tracks) {\n var i = tracks.length,\n boxes = [];\n while (i--) {\n boxes[i] = trak(tracks[i]);\n }\n return box.apply(null, [types.moov, mvhd(0xffffffff)].concat(boxes).concat(mvex(tracks)));\n };\n mvex = function (tracks) {\n var i = tracks.length,\n boxes = [];\n while (i--) {\n boxes[i] = trex(tracks[i]);\n }\n return box.apply(null, [types.mvex].concat(boxes));\n };\n mvhd = function (duration) {\n var bytes = new Uint8Array([0x00,\n // version 0\n 0x00, 0x00, 0x00,\n // flags\n 0x00, 0x00, 0x00, 0x01,\n // creation_time\n 0x00, 0x00, 0x00, 0x02,\n // modification_time\n 0x00, 0x01, 0x5f, 0x90,\n // timescale, 90,000 \"ticks\" per second\n (duration & 0xFF000000) >> 24, (duration & 0xFF0000) >> 16, (duration & 0xFF00) >> 8, duration & 0xFF,\n // duration\n 0x00, 0x01, 0x00, 0x00,\n // 1.0 rate\n 0x01, 0x00,\n // 1.0 volume\n 0x00, 0x00,\n // reserved\n 0x00, 0x00, 0x00, 0x00,\n // reserved\n 0x00, 0x00, 0x00, 0x00,\n // reserved\n 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x00, 0x00, 0x00,\n // transformation: unity matrix\n 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,\n // pre_defined\n 0xff, 0xff, 0xff, 0xff // next_track_ID\n ]);\n return box(types.mvhd, bytes);\n };\n sdtp = function (track) {\n var samples = track.samples || [],\n bytes = new Uint8Array(4 + samples.length),\n flags,\n i; // leave the full box header (4 bytes) all zero\n // write the sample table\n\n for (i = 0; i < samples.length; i++) {\n flags = samples[i].flags;\n bytes[i + 4] = flags.dependsOn << 4 | flags.isDependedOn << 2 | flags.hasRedundancy;\n }\n return box(types.sdtp, bytes);\n };\n stbl = function (track) {\n return box(types.stbl, stsd(track), box(types.stts, STTS), box(types.stsc, STSC), box(types.stsz, STSZ), box(types.stco, STCO));\n };\n (function () {\n var videoSample, audioSample;\n stsd = function (track) {\n return box(types.stsd, new Uint8Array([0x00,\n // version 0\n 0x00, 0x00, 0x00,\n // flags\n 0x00, 0x00, 0x00, 0x01]), track.type === 'video' ? videoSample(track) : audioSample(track));\n };\n videoSample = function (track) {\n var sps = track.sps || [],\n pps = track.pps || [],\n sequenceParameterSets = [],\n pictureParameterSets = [],\n i,\n avc1Box; // assemble the SPSs\n\n for (i = 0; i < sps.length; i++) {\n sequenceParameterSets.push((sps[i].byteLength & 0xFF00) >>> 8);\n sequenceParameterSets.push(sps[i].byteLength & 0xFF); // sequenceParameterSetLength\n\n sequenceParameterSets = sequenceParameterSets.concat(Array.prototype.slice.call(sps[i])); // SPS\n } // assemble the PPSs\n\n for (i = 0; i < pps.length; i++) {\n pictureParameterSets.push((pps[i].byteLength & 0xFF00) >>> 8);\n pictureParameterSets.push(pps[i].byteLength & 0xFF);\n pictureParameterSets = pictureParameterSets.concat(Array.prototype.slice.call(pps[i]));\n }\n avc1Box = [types.avc1, new Uint8Array([0x00, 0x00, 0x00, 0x00, 0x00, 0x00,\n // reserved\n 0x00, 0x01,\n // data_reference_index\n 0x00, 0x00,\n // pre_defined\n 0x00, 0x00,\n // reserved\n 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,\n // pre_defined\n (track.width & 0xff00) >> 8, track.width & 0xff,\n // width\n (track.height & 0xff00) >> 8, track.height & 0xff,\n // height\n 0x00, 0x48, 0x00, 0x00,\n // horizresolution\n 0x00, 0x48, 0x00, 0x00,\n // vertresolution\n 0x00, 0x00, 0x00, 0x00,\n // reserved\n 0x00, 0x01,\n // frame_count\n 0x13, 0x76, 0x69, 0x64, 0x65, 0x6f, 0x6a, 0x73, 0x2d, 0x63, 0x6f, 0x6e, 0x74, 0x72, 0x69, 0x62, 0x2d, 0x68, 0x6c, 0x73, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,\n // compressorname\n 0x00, 0x18,\n // depth = 24\n 0x11, 0x11 // pre_defined = -1\n ]), box(types.avcC, new Uint8Array([0x01,\n // configurationVersion\n track.profileIdc,\n // AVCProfileIndication\n track.profileCompatibility,\n // profile_compatibility\n track.levelIdc,\n // AVCLevelIndication\n 0xff // lengthSizeMinusOne, hard-coded to 4 bytes\n ].concat([sps.length],\n // numOfSequenceParameterSets\n sequenceParameterSets,\n // \"SPS\"\n [pps.length],\n // numOfPictureParameterSets\n pictureParameterSets // \"PPS\"\n ))), box(types.btrt, new Uint8Array([0x00, 0x1c, 0x9c, 0x80,\n // bufferSizeDB\n 0x00, 0x2d, 0xc6, 0xc0,\n // maxBitrate\n 0x00, 0x2d, 0xc6, 0xc0 // avgBitrate\n ]))];\n if (track.sarRatio) {\n var hSpacing = track.sarRatio[0],\n vSpacing = track.sarRatio[1];\n avc1Box.push(box(types.pasp, new Uint8Array([(hSpacing & 0xFF000000) >> 24, (hSpacing & 0xFF0000) >> 16, (hSpacing & 0xFF00) >> 8, hSpacing & 0xFF, (vSpacing & 0xFF000000) >> 24, (vSpacing & 0xFF0000) >> 16, (vSpacing & 0xFF00) >> 8, vSpacing & 0xFF])));\n }\n return box.apply(null, avc1Box);\n };\n audioSample = function (track) {\n return box(types.mp4a, new Uint8Array([\n // SampleEntry, ISO/IEC 14496-12\n 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,\n // reserved\n 0x00, 0x01,\n // data_reference_index\n // AudioSampleEntry, ISO/IEC 14496-12\n 0x00, 0x00, 0x00, 0x00,\n // reserved\n 0x00, 0x00, 0x00, 0x00,\n // reserved\n (track.channelcount & 0xff00) >> 8, track.channelcount & 0xff,\n // channelcount\n (track.samplesize & 0xff00) >> 8, track.samplesize & 0xff,\n // samplesize\n 0x00, 0x00,\n // pre_defined\n 0x00, 0x00,\n // reserved\n (track.samplerate & 0xff00) >> 8, track.samplerate & 0xff, 0x00, 0x00 // samplerate, 16.16\n // MP4AudioSampleEntry, ISO/IEC 14496-14\n ]), esds(track));\n };\n })();\n tkhd = function (track) {\n var result = new Uint8Array([0x00,\n // version 0\n 0x00, 0x00, 0x07,\n // flags\n 0x00, 0x00, 0x00, 0x00,\n // creation_time\n 0x00, 0x00, 0x00, 0x00,\n // modification_time\n (track.id & 0xFF000000) >> 24, (track.id & 0xFF0000) >> 16, (track.id & 0xFF00) >> 8, track.id & 0xFF,\n // track_ID\n 0x00, 0x00, 0x00, 0x00,\n // reserved\n (track.duration & 0xFF000000) >> 24, (track.duration & 0xFF0000) >> 16, (track.duration & 0xFF00) >> 8, track.duration & 0xFF,\n // duration\n 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,\n // reserved\n 0x00, 0x00,\n // layer\n 0x00, 0x00,\n // alternate_group\n 0x01, 0x00,\n // non-audio track volume\n 0x00, 0x00,\n // reserved\n 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x00, 0x00, 0x00,\n // transformation: unity matrix\n (track.width & 0xFF00) >> 8, track.width & 0xFF, 0x00, 0x00,\n // width\n (track.height & 0xFF00) >> 8, track.height & 0xFF, 0x00, 0x00 // height\n ]);\n return box(types.tkhd, result);\n };\n /**\n * Generate a track fragment (traf) box. A traf box collects metadata\n * about tracks in a movie fragment (moof) box.\n */\n\n traf = function (track) {\n var trackFragmentHeader, trackFragmentDecodeTime, trackFragmentRun, sampleDependencyTable, dataOffset, upperWordBaseMediaDecodeTime, lowerWordBaseMediaDecodeTime;\n trackFragmentHeader = box(types.tfhd, new Uint8Array([0x00,\n // version 0\n 0x00, 0x00, 0x3a,\n // flags\n (track.id & 0xFF000000) >> 24, (track.id & 0xFF0000) >> 16, (track.id & 0xFF00) >> 8, track.id & 0xFF,\n // track_ID\n 0x00, 0x00, 0x00, 0x01,\n // sample_description_index\n 0x00, 0x00, 0x00, 0x00,\n // default_sample_duration\n 0x00, 0x00, 0x00, 0x00,\n // default_sample_size\n 0x00, 0x00, 0x00, 0x00 // default_sample_flags\n ]));\n upperWordBaseMediaDecodeTime = Math.floor(track.baseMediaDecodeTime / MAX_UINT32);\n lowerWordBaseMediaDecodeTime = Math.floor(track.baseMediaDecodeTime % MAX_UINT32);\n trackFragmentDecodeTime = box(types.tfdt, new Uint8Array([0x01,\n // version 1\n 0x00, 0x00, 0x00,\n // flags\n // baseMediaDecodeTime\n upperWordBaseMediaDecodeTime >>> 24 & 0xFF, upperWordBaseMediaDecodeTime >>> 16 & 0xFF, upperWordBaseMediaDecodeTime >>> 8 & 0xFF, upperWordBaseMediaDecodeTime & 0xFF, lowerWordBaseMediaDecodeTime >>> 24 & 0xFF, lowerWordBaseMediaDecodeTime >>> 16 & 0xFF, lowerWordBaseMediaDecodeTime >>> 8 & 0xFF, lowerWordBaseMediaDecodeTime & 0xFF])); // the data offset specifies the number of bytes from the start of\n // the containing moof to the first payload byte of the associated\n // mdat\n\n dataOffset = 32 +\n // tfhd\n 20 +\n // tfdt\n 8 +\n // traf header\n 16 +\n // mfhd\n 8 +\n // moof header\n 8; // mdat header\n // audio tracks require less metadata\n\n if (track.type === 'audio') {\n trackFragmentRun = trun$1(track, dataOffset);\n return box(types.traf, trackFragmentHeader, trackFragmentDecodeTime, trackFragmentRun);\n } // video tracks should contain an independent and disposable samples\n // box (sdtp)\n // generate one and adjust offsets to match\n\n sampleDependencyTable = sdtp(track);\n trackFragmentRun = trun$1(track, sampleDependencyTable.length + dataOffset);\n return box(types.traf, trackFragmentHeader, trackFragmentDecodeTime, trackFragmentRun, sampleDependencyTable);\n };\n /**\n * Generate a track box.\n * @param track {object} a track definition\n * @return {Uint8Array} the track box\n */\n\n trak = function (track) {\n track.duration = track.duration || 0xffffffff;\n return box(types.trak, tkhd(track), mdia(track));\n };\n trex = function (track) {\n var result = new Uint8Array([0x00,\n // version 0\n 0x00, 0x00, 0x00,\n // flags\n (track.id & 0xFF000000) >> 24, (track.id & 0xFF0000) >> 16, (track.id & 0xFF00) >> 8, track.id & 0xFF,\n // track_ID\n 0x00, 0x00, 0x00, 0x01,\n // default_sample_description_index\n 0x00, 0x00, 0x00, 0x00,\n // default_sample_duration\n 0x00, 0x00, 0x00, 0x00,\n // default_sample_size\n 0x00, 0x01, 0x00, 0x01 // default_sample_flags\n ]); // the last two bytes of default_sample_flags is the sample\n // degradation priority, a hint about the importance of this sample\n // relative to others. Lower the degradation priority for all sample\n // types other than video.\n\n if (track.type !== 'video') {\n result[result.length - 1] = 0x00;\n }\n return box(types.trex, result);\n };\n (function () {\n var audioTrun, videoTrun, trunHeader; // This method assumes all samples are uniform. That is, if a\n // duration is present for the first sample, it will be present for\n // all subsequent samples.\n // see ISO/IEC 14496-12:2012, Section 8.8.8.1\n\n trunHeader = function (samples, offset) {\n var durationPresent = 0,\n sizePresent = 0,\n flagsPresent = 0,\n compositionTimeOffset = 0; // trun flag constants\n\n if (samples.length) {\n if (samples[0].duration !== undefined) {\n durationPresent = 0x1;\n }\n if (samples[0].size !== undefined) {\n sizePresent = 0x2;\n }\n if (samples[0].flags !== undefined) {\n flagsPresent = 0x4;\n }\n if (samples[0].compositionTimeOffset !== undefined) {\n compositionTimeOffset = 0x8;\n }\n }\n return [0x00,\n // version 0\n 0x00, durationPresent | sizePresent | flagsPresent | compositionTimeOffset, 0x01,\n // flags\n (samples.length & 0xFF000000) >>> 24, (samples.length & 0xFF0000) >>> 16, (samples.length & 0xFF00) >>> 8, samples.length & 0xFF,\n // sample_count\n (offset & 0xFF000000) >>> 24, (offset & 0xFF0000) >>> 16, (offset & 0xFF00) >>> 8, offset & 0xFF // data_offset\n ];\n };\n videoTrun = function (track, offset) {\n var bytesOffest, bytes, header, samples, sample, i;\n samples = track.samples || [];\n offset += 8 + 12 + 16 * samples.length;\n header = trunHeader(samples, offset);\n bytes = new Uint8Array(header.length + samples.length * 16);\n bytes.set(header);\n bytesOffest = header.length;\n for (i = 0; i < samples.length; i++) {\n sample = samples[i];\n bytes[bytesOffest++] = (sample.duration & 0xFF000000) >>> 24;\n bytes[bytesOffest++] = (sample.duration & 0xFF0000) >>> 16;\n bytes[bytesOffest++] = (sample.duration & 0xFF00) >>> 8;\n bytes[bytesOffest++] = sample.duration & 0xFF; // sample_duration\n\n bytes[bytesOffest++] = (sample.size & 0xFF000000) >>> 24;\n bytes[bytesOffest++] = (sample.size & 0xFF0000) >>> 16;\n bytes[bytesOffest++] = (sample.size & 0xFF00) >>> 8;\n bytes[bytesOffest++] = sample.size & 0xFF; // sample_size\n\n bytes[bytesOffest++] = sample.flags.isLeading << 2 | sample.flags.dependsOn;\n bytes[bytesOffest++] = sample.flags.isDependedOn << 6 | sample.flags.hasRedundancy << 4 | sample.flags.paddingValue << 1 | sample.flags.isNonSyncSample;\n bytes[bytesOffest++] = sample.flags.degradationPriority & 0xF0 << 8;\n bytes[bytesOffest++] = sample.flags.degradationPriority & 0x0F; // sample_flags\n\n bytes[bytesOffest++] = (sample.compositionTimeOffset & 0xFF000000) >>> 24;\n bytes[bytesOffest++] = (sample.compositionTimeOffset & 0xFF0000) >>> 16;\n bytes[bytesOffest++] = (sample.compositionTimeOffset & 0xFF00) >>> 8;\n bytes[bytesOffest++] = sample.compositionTimeOffset & 0xFF; // sample_composition_time_offset\n }\n return box(types.trun, bytes);\n };\n audioTrun = function (track, offset) {\n var bytes, bytesOffest, header, samples, sample, i;\n samples = track.samples || [];\n offset += 8 + 12 + 8 * samples.length;\n header = trunHeader(samples, offset);\n bytes = new Uint8Array(header.length + samples.length * 8);\n bytes.set(header);\n bytesOffest = header.length;\n for (i = 0; i < samples.length; i++) {\n sample = samples[i];\n bytes[bytesOffest++] = (sample.duration & 0xFF000000) >>> 24;\n bytes[bytesOffest++] = (sample.duration & 0xFF0000) >>> 16;\n bytes[bytesOffest++] = (sample.duration & 0xFF00) >>> 8;\n bytes[bytesOffest++] = sample.duration & 0xFF; // sample_duration\n\n bytes[bytesOffest++] = (sample.size & 0xFF000000) >>> 24;\n bytes[bytesOffest++] = (sample.size & 0xFF0000) >>> 16;\n bytes[bytesOffest++] = (sample.size & 0xFF00) >>> 8;\n bytes[bytesOffest++] = sample.size & 0xFF; // sample_size\n }\n return box(types.trun, bytes);\n };\n trun$1 = function (track, offset) {\n if (track.type === 'audio') {\n return audioTrun(track, offset);\n }\n return videoTrun(track, offset);\n };\n })();\n var mp4Generator = {\n ftyp: ftyp,\n mdat: mdat,\n moof: moof,\n moov: moov,\n initSegment: function (tracks) {\n var fileType = ftyp(),\n movie = moov(tracks),\n result;\n result = new Uint8Array(fileType.byteLength + movie.byteLength);\n result.set(fileType);\n result.set(movie, fileType.byteLength);\n return result;\n }\n };\n /**\n * mux.js\n *\n * Copyright (c) Brightcove\n * Licensed Apache-2.0 https://github.com/videojs/mux.js/blob/master/LICENSE\n */\n // composed of the nal units that make up that frame\n // Also keep track of cummulative data about the frame from the nal units such\n // as the frame duration, starting pts, etc.\n\n var groupNalsIntoFrames = function (nalUnits) {\n var i,\n currentNal,\n currentFrame = [],\n frames = []; // TODO added for LHLS, make sure this is OK\n\n frames.byteLength = 0;\n frames.nalCount = 0;\n frames.duration = 0;\n currentFrame.byteLength = 0;\n for (i = 0; i < nalUnits.length; i++) {\n currentNal = nalUnits[i]; // Split on 'aud'-type nal units\n\n if (currentNal.nalUnitType === 'access_unit_delimiter_rbsp') {\n // Since the very first nal unit is expected to be an AUD\n // only push to the frames array when currentFrame is not empty\n if (currentFrame.length) {\n currentFrame.duration = currentNal.dts - currentFrame.dts; // TODO added for LHLS, make sure this is OK\n\n frames.byteLength += currentFrame.byteLength;\n frames.nalCount += currentFrame.length;\n frames.duration += currentFrame.duration;\n frames.push(currentFrame);\n }\n currentFrame = [currentNal];\n currentFrame.byteLength = currentNal.data.byteLength;\n currentFrame.pts = currentNal.pts;\n currentFrame.dts = currentNal.dts;\n } else {\n // Specifically flag key frames for ease of use later\n if (currentNal.nalUnitType === 'slice_layer_without_partitioning_rbsp_idr') {\n currentFrame.keyFrame = true;\n }\n currentFrame.duration = currentNal.dts - currentFrame.dts;\n currentFrame.byteLength += currentNal.data.byteLength;\n currentFrame.push(currentNal);\n }\n } // For the last frame, use the duration of the previous frame if we\n // have nothing better to go on\n\n if (frames.length && (!currentFrame.duration || currentFrame.duration <= 0)) {\n currentFrame.duration = frames[frames.length - 1].duration;\n } // Push the final frame\n // TODO added for LHLS, make sure this is OK\n\n frames.byteLength += currentFrame.byteLength;\n frames.nalCount += currentFrame.length;\n frames.duration += currentFrame.duration;\n frames.push(currentFrame);\n return frames;\n }; // Convert an array of frames into an array of Gop with each Gop being composed\n // of the frames that make up that Gop\n // Also keep track of cummulative data about the Gop from the frames such as the\n // Gop duration, starting pts, etc.\n\n var groupFramesIntoGops = function (frames) {\n var i,\n currentFrame,\n currentGop = [],\n gops = []; // We must pre-set some of the values on the Gop since we\n // keep running totals of these values\n\n currentGop.byteLength = 0;\n currentGop.nalCount = 0;\n currentGop.duration = 0;\n currentGop.pts = frames[0].pts;\n currentGop.dts = frames[0].dts; // store some metadata about all the Gops\n\n gops.byteLength = 0;\n gops.nalCount = 0;\n gops.duration = 0;\n gops.pts = frames[0].pts;\n gops.dts = frames[0].dts;\n for (i = 0; i < frames.length; i++) {\n currentFrame = frames[i];\n if (currentFrame.keyFrame) {\n // Since the very first frame is expected to be an keyframe\n // only push to the gops array when currentGop is not empty\n if (currentGop.length) {\n gops.push(currentGop);\n gops.byteLength += currentGop.byteLength;\n gops.nalCount += currentGop.nalCount;\n gops.duration += currentGop.duration;\n }\n currentGop = [currentFrame];\n currentGop.nalCount = currentFrame.length;\n currentGop.byteLength = currentFrame.byteLength;\n currentGop.pts = currentFrame.pts;\n currentGop.dts = currentFrame.dts;\n currentGop.duration = currentFrame.duration;\n } else {\n currentGop.duration += currentFrame.duration;\n currentGop.nalCount += currentFrame.length;\n currentGop.byteLength += currentFrame.byteLength;\n currentGop.push(currentFrame);\n }\n }\n if (gops.length && currentGop.duration <= 0) {\n currentGop.duration = gops[gops.length - 1].duration;\n }\n gops.byteLength += currentGop.byteLength;\n gops.nalCount += currentGop.nalCount;\n gops.duration += currentGop.duration; // push the final Gop\n\n gops.push(currentGop);\n return gops;\n };\n /*\n * Search for the first keyframe in the GOPs and throw away all frames\n * until that keyframe. Then extend the duration of the pulled keyframe\n * and pull the PTS and DTS of the keyframe so that it covers the time\n * range of the frames that were disposed.\n *\n * @param {Array} gops video GOPs\n * @returns {Array} modified video GOPs\n */\n\n var extendFirstKeyFrame = function (gops) {\n var currentGop;\n if (!gops[0][0].keyFrame && gops.length > 1) {\n // Remove the first GOP\n currentGop = gops.shift();\n gops.byteLength -= currentGop.byteLength;\n gops.nalCount -= currentGop.nalCount; // Extend the first frame of what is now the\n // first gop to cover the time period of the\n // frames we just removed\n\n gops[0][0].dts = currentGop.dts;\n gops[0][0].pts = currentGop.pts;\n gops[0][0].duration += currentGop.duration;\n }\n return gops;\n };\n /**\n * Default sample object\n * see ISO/IEC 14496-12:2012, section 8.6.4.3\n */\n\n var createDefaultSample = function () {\n return {\n size: 0,\n flags: {\n isLeading: 0,\n dependsOn: 1,\n isDependedOn: 0,\n hasRedundancy: 0,\n degradationPriority: 0,\n isNonSyncSample: 1\n }\n };\n };\n /*\n * Collates information from a video frame into an object for eventual\n * entry into an MP4 sample table.\n *\n * @param {Object} frame the video frame\n * @param {Number} dataOffset the byte offset to position the sample\n * @return {Object} object containing sample table info for a frame\n */\n\n var sampleForFrame = function (frame, dataOffset) {\n var sample = createDefaultSample();\n sample.dataOffset = dataOffset;\n sample.compositionTimeOffset = frame.pts - frame.dts;\n sample.duration = frame.duration;\n sample.size = 4 * frame.length; // Space for nal unit size\n\n sample.size += frame.byteLength;\n if (frame.keyFrame) {\n sample.flags.dependsOn = 2;\n sample.flags.isNonSyncSample = 0;\n }\n return sample;\n }; // generate the track's sample table from an array of gops\n\n var generateSampleTable$1 = function (gops, baseDataOffset) {\n var h,\n i,\n sample,\n currentGop,\n currentFrame,\n dataOffset = baseDataOffset || 0,\n samples = [];\n for (h = 0; h < gops.length; h++) {\n currentGop = gops[h];\n for (i = 0; i < currentGop.length; i++) {\n currentFrame = currentGop[i];\n sample = sampleForFrame(currentFrame, dataOffset);\n dataOffset += sample.size;\n samples.push(sample);\n }\n }\n return samples;\n }; // generate the track's raw mdat data from an array of gops\n\n var concatenateNalData = function (gops) {\n var h,\n i,\n j,\n currentGop,\n currentFrame,\n currentNal,\n dataOffset = 0,\n nalsByteLength = gops.byteLength,\n numberOfNals = gops.nalCount,\n totalByteLength = nalsByteLength + 4 * numberOfNals,\n data = new Uint8Array(totalByteLength),\n view = new DataView(data.buffer); // For each Gop..\n\n for (h = 0; h < gops.length; h++) {\n currentGop = gops[h]; // For each Frame..\n\n for (i = 0; i < currentGop.length; i++) {\n currentFrame = currentGop[i]; // For each NAL..\n\n for (j = 0; j < currentFrame.length; j++) {\n currentNal = currentFrame[j];\n view.setUint32(dataOffset, currentNal.data.byteLength);\n dataOffset += 4;\n data.set(currentNal.data, dataOffset);\n dataOffset += currentNal.data.byteLength;\n }\n }\n }\n return data;\n }; // generate the track's sample table from a frame\n\n var generateSampleTableForFrame = function (frame, baseDataOffset) {\n var sample,\n dataOffset = baseDataOffset || 0,\n samples = [];\n sample = sampleForFrame(frame, dataOffset);\n samples.push(sample);\n return samples;\n }; // generate the track's raw mdat data from a frame\n\n var concatenateNalDataForFrame = function (frame) {\n var i,\n currentNal,\n dataOffset = 0,\n nalsByteLength = frame.byteLength,\n numberOfNals = frame.length,\n totalByteLength = nalsByteLength + 4 * numberOfNals,\n data = new Uint8Array(totalByteLength),\n view = new DataView(data.buffer); // For each NAL..\n\n for (i = 0; i < frame.length; i++) {\n currentNal = frame[i];\n view.setUint32(dataOffset, currentNal.data.byteLength);\n dataOffset += 4;\n data.set(currentNal.data, dataOffset);\n dataOffset += currentNal.data.byteLength;\n }\n return data;\n };\n var frameUtils$1 = {\n groupNalsIntoFrames: groupNalsIntoFrames,\n groupFramesIntoGops: groupFramesIntoGops,\n extendFirstKeyFrame: extendFirstKeyFrame,\n generateSampleTable: generateSampleTable$1,\n concatenateNalData: concatenateNalData,\n generateSampleTableForFrame: generateSampleTableForFrame,\n concatenateNalDataForFrame: concatenateNalDataForFrame\n };\n /**\n * mux.js\n *\n * Copyright (c) Brightcove\n * Licensed Apache-2.0 https://github.com/videojs/mux.js/blob/master/LICENSE\n */\n\n var highPrefix = [33, 16, 5, 32, 164, 27];\n var lowPrefix = [33, 65, 108, 84, 1, 2, 4, 8, 168, 2, 4, 8, 17, 191, 252];\n var zeroFill = function (count) {\n var a = [];\n while (count--) {\n a.push(0);\n }\n return a;\n };\n var makeTable = function (metaTable) {\n return Object.keys(metaTable).reduce(function (obj, key) {\n obj[key] = new Uint8Array(metaTable[key].reduce(function (arr, part) {\n return arr.concat(part);\n }, []));\n return obj;\n }, {});\n };\n var silence;\n var silence_1 = function () {\n if (!silence) {\n // Frames-of-silence to use for filling in missing AAC frames\n var coneOfSilence = {\n 96000: [highPrefix, [227, 64], zeroFill(154), [56]],\n 88200: [highPrefix, [231], zeroFill(170), [56]],\n 64000: [highPrefix, [248, 192], zeroFill(240), [56]],\n 48000: [highPrefix, [255, 192], zeroFill(268), [55, 148, 128], zeroFill(54), [112]],\n 44100: [highPrefix, [255, 192], zeroFill(268), [55, 163, 128], zeroFill(84), [112]],\n 32000: [highPrefix, [255, 192], zeroFill(268), [55, 234], zeroFill(226), [112]],\n 24000: [highPrefix, [255, 192], zeroFill(268), [55, 255, 128], zeroFill(268), [111, 112], zeroFill(126), [224]],\n 16000: [highPrefix, [255, 192], zeroFill(268), [55, 255, 128], zeroFill(268), [111, 255], zeroFill(269), [223, 108], zeroFill(195), [1, 192]],\n 12000: [lowPrefix, zeroFill(268), [3, 127, 248], zeroFill(268), [6, 255, 240], zeroFill(268), [13, 255, 224], zeroFill(268), [27, 253, 128], zeroFill(259), [56]],\n 11025: [lowPrefix, zeroFill(268), [3, 127, 248], zeroFill(268), [6, 255, 240], zeroFill(268), [13, 255, 224], zeroFill(268), [27, 255, 192], zeroFill(268), [55, 175, 128], zeroFill(108), [112]],\n 8000: [lowPrefix, zeroFill(268), [3, 121, 16], zeroFill(47), [7]]\n };\n silence = makeTable(coneOfSilence);\n }\n return silence;\n };\n /**\n * mux.js\n *\n * Copyright (c) Brightcove\n * Licensed Apache-2.0 https://github.com/videojs/mux.js/blob/master/LICENSE\n */\n\n var ONE_SECOND_IN_TS$4 = 90000,\n // 90kHz clock\n secondsToVideoTs,\n secondsToAudioTs,\n videoTsToSeconds,\n audioTsToSeconds,\n audioTsToVideoTs,\n videoTsToAudioTs,\n metadataTsToSeconds;\n secondsToVideoTs = function (seconds) {\n return seconds * ONE_SECOND_IN_TS$4;\n };\n secondsToAudioTs = function (seconds, sampleRate) {\n return seconds * sampleRate;\n };\n videoTsToSeconds = function (timestamp) {\n return timestamp / ONE_SECOND_IN_TS$4;\n };\n audioTsToSeconds = function (timestamp, sampleRate) {\n return timestamp / sampleRate;\n };\n audioTsToVideoTs = function (timestamp, sampleRate) {\n return secondsToVideoTs(audioTsToSeconds(timestamp, sampleRate));\n };\n videoTsToAudioTs = function (timestamp, sampleRate) {\n return secondsToAudioTs(videoTsToSeconds(timestamp), sampleRate);\n };\n /**\n * Adjust ID3 tag or caption timing information by the timeline pts values\n * (if keepOriginalTimestamps is false) and convert to seconds\n */\n\n metadataTsToSeconds = function (timestamp, timelineStartPts, keepOriginalTimestamps) {\n return videoTsToSeconds(keepOriginalTimestamps ? timestamp : timestamp - timelineStartPts);\n };\n var clock$2 = {\n ONE_SECOND_IN_TS: ONE_SECOND_IN_TS$4,\n secondsToVideoTs: secondsToVideoTs,\n secondsToAudioTs: secondsToAudioTs,\n videoTsToSeconds: videoTsToSeconds,\n audioTsToSeconds: audioTsToSeconds,\n audioTsToVideoTs: audioTsToVideoTs,\n videoTsToAudioTs: videoTsToAudioTs,\n metadataTsToSeconds: metadataTsToSeconds\n };\n /**\n * mux.js\n *\n * Copyright (c) Brightcove\n * Licensed Apache-2.0 https://github.com/videojs/mux.js/blob/master/LICENSE\n */\n\n var coneOfSilence = silence_1;\n var clock$1 = clock$2;\n /**\n * Sum the `byteLength` properties of the data in each AAC frame\n */\n\n var sumFrameByteLengths = function (array) {\n var i,\n currentObj,\n sum = 0; // sum the byteLength's all each nal unit in the frame\n\n for (i = 0; i < array.length; i++) {\n currentObj = array[i];\n sum += currentObj.data.byteLength;\n }\n return sum;\n }; // Possibly pad (prefix) the audio track with silence if appending this track\n // would lead to the introduction of a gap in the audio buffer\n\n var prefixWithSilence = function (track, frames, audioAppendStartTs, videoBaseMediaDecodeTime) {\n var baseMediaDecodeTimeTs,\n frameDuration = 0,\n audioGapDuration = 0,\n audioFillFrameCount = 0,\n audioFillDuration = 0,\n silentFrame,\n i,\n firstFrame;\n if (!frames.length) {\n return;\n }\n baseMediaDecodeTimeTs = clock$1.audioTsToVideoTs(track.baseMediaDecodeTime, track.samplerate); // determine frame clock duration based on sample rate, round up to avoid overfills\n\n frameDuration = Math.ceil(clock$1.ONE_SECOND_IN_TS / (track.samplerate / 1024));\n if (audioAppendStartTs && videoBaseMediaDecodeTime) {\n // insert the shortest possible amount (audio gap or audio to video gap)\n audioGapDuration = baseMediaDecodeTimeTs - Math.max(audioAppendStartTs, videoBaseMediaDecodeTime); // number of full frames in the audio gap\n\n audioFillFrameCount = Math.floor(audioGapDuration / frameDuration);\n audioFillDuration = audioFillFrameCount * frameDuration;\n } // don't attempt to fill gaps smaller than a single frame or larger\n // than a half second\n\n if (audioFillFrameCount < 1 || audioFillDuration > clock$1.ONE_SECOND_IN_TS / 2) {\n return;\n }\n silentFrame = coneOfSilence()[track.samplerate];\n if (!silentFrame) {\n // we don't have a silent frame pregenerated for the sample rate, so use a frame\n // from the content instead\n silentFrame = frames[0].data;\n }\n for (i = 0; i < audioFillFrameCount; i++) {\n firstFrame = frames[0];\n frames.splice(0, 0, {\n data: silentFrame,\n dts: firstFrame.dts - frameDuration,\n pts: firstFrame.pts - frameDuration\n });\n }\n track.baseMediaDecodeTime -= Math.floor(clock$1.videoTsToAudioTs(audioFillDuration, track.samplerate));\n return audioFillDuration;\n }; // If the audio segment extends before the earliest allowed dts\n // value, remove AAC frames until starts at or after the earliest\n // allowed DTS so that we don't end up with a negative baseMedia-\n // DecodeTime for the audio track\n\n var trimAdtsFramesByEarliestDts = function (adtsFrames, track, earliestAllowedDts) {\n if (track.minSegmentDts >= earliestAllowedDts) {\n return adtsFrames;\n } // We will need to recalculate the earliest segment Dts\n\n track.minSegmentDts = Infinity;\n return adtsFrames.filter(function (currentFrame) {\n // If this is an allowed frame, keep it and record it's Dts\n if (currentFrame.dts >= earliestAllowedDts) {\n track.minSegmentDts = Math.min(track.minSegmentDts, currentFrame.dts);\n track.minSegmentPts = track.minSegmentDts;\n return true;\n } // Otherwise, discard it\n\n return false;\n });\n }; // generate the track's raw mdat data from an array of frames\n\n var generateSampleTable = function (frames) {\n var i,\n currentFrame,\n samples = [];\n for (i = 0; i < frames.length; i++) {\n currentFrame = frames[i];\n samples.push({\n size: currentFrame.data.byteLength,\n duration: 1024 // For AAC audio, all samples contain 1024 samples\n });\n }\n return samples;\n }; // generate the track's sample table from an array of frames\n\n var concatenateFrameData = function (frames) {\n var i,\n currentFrame,\n dataOffset = 0,\n data = new Uint8Array(sumFrameByteLengths(frames));\n for (i = 0; i < frames.length; i++) {\n currentFrame = frames[i];\n data.set(currentFrame.data, dataOffset);\n dataOffset += currentFrame.data.byteLength;\n }\n return data;\n };\n var audioFrameUtils$1 = {\n prefixWithSilence: prefixWithSilence,\n trimAdtsFramesByEarliestDts: trimAdtsFramesByEarliestDts,\n generateSampleTable: generateSampleTable,\n concatenateFrameData: concatenateFrameData\n };\n /**\n * mux.js\n *\n * Copyright (c) Brightcove\n * Licensed Apache-2.0 https://github.com/videojs/mux.js/blob/master/LICENSE\n */\n\n var ONE_SECOND_IN_TS$3 = clock$2.ONE_SECOND_IN_TS;\n /**\n * Store information about the start and end of the track and the\n * duration for each frame/sample we process in order to calculate\n * the baseMediaDecodeTime\n */\n\n var collectDtsInfo = function (track, data) {\n if (typeof data.pts === 'number') {\n if (track.timelineStartInfo.pts === undefined) {\n track.timelineStartInfo.pts = data.pts;\n }\n if (track.minSegmentPts === undefined) {\n track.minSegmentPts = data.pts;\n } else {\n track.minSegmentPts = Math.min(track.minSegmentPts, data.pts);\n }\n if (track.maxSegmentPts === undefined) {\n track.maxSegmentPts = data.pts;\n } else {\n track.maxSegmentPts = Math.max(track.maxSegmentPts, data.pts);\n }\n }\n if (typeof data.dts === 'number') {\n if (track.timelineStartInfo.dts === undefined) {\n track.timelineStartInfo.dts = data.dts;\n }\n if (track.minSegmentDts === undefined) {\n track.minSegmentDts = data.dts;\n } else {\n track.minSegmentDts = Math.min(track.minSegmentDts, data.dts);\n }\n if (track.maxSegmentDts === undefined) {\n track.maxSegmentDts = data.dts;\n } else {\n track.maxSegmentDts = Math.max(track.maxSegmentDts, data.dts);\n }\n }\n };\n /**\n * Clear values used to calculate the baseMediaDecodeTime between\n * tracks\n */\n\n var clearDtsInfo = function (track) {\n delete track.minSegmentDts;\n delete track.maxSegmentDts;\n delete track.minSegmentPts;\n delete track.maxSegmentPts;\n };\n /**\n * Calculate the track's baseMediaDecodeTime based on the earliest\n * DTS the transmuxer has ever seen and the minimum DTS for the\n * current track\n * @param track {object} track metadata configuration\n * @param keepOriginalTimestamps {boolean} If true, keep the timestamps\n * in the source; false to adjust the first segment to start at 0.\n */\n\n var calculateTrackBaseMediaDecodeTime = function (track, keepOriginalTimestamps) {\n var baseMediaDecodeTime,\n scale,\n minSegmentDts = track.minSegmentDts; // Optionally adjust the time so the first segment starts at zero.\n\n if (!keepOriginalTimestamps) {\n minSegmentDts -= track.timelineStartInfo.dts;\n } // track.timelineStartInfo.baseMediaDecodeTime is the location, in time, where\n // we want the start of the first segment to be placed\n\n baseMediaDecodeTime = track.timelineStartInfo.baseMediaDecodeTime; // Add to that the distance this segment is from the very first\n\n baseMediaDecodeTime += minSegmentDts; // baseMediaDecodeTime must not become negative\n\n baseMediaDecodeTime = Math.max(0, baseMediaDecodeTime);\n if (track.type === 'audio') {\n // Audio has a different clock equal to the sampling_rate so we need to\n // scale the PTS values into the clock rate of the track\n scale = track.samplerate / ONE_SECOND_IN_TS$3;\n baseMediaDecodeTime *= scale;\n baseMediaDecodeTime = Math.floor(baseMediaDecodeTime);\n }\n return baseMediaDecodeTime;\n };\n var trackDecodeInfo$1 = {\n clearDtsInfo: clearDtsInfo,\n calculateTrackBaseMediaDecodeTime: calculateTrackBaseMediaDecodeTime,\n collectDtsInfo: collectDtsInfo\n };\n /**\n * mux.js\n *\n * Copyright (c) Brightcove\n * Licensed Apache-2.0 https://github.com/videojs/mux.js/blob/master/LICENSE\n *\n * Reads in-band caption information from a video elementary\n * stream. Captions must follow the CEA-708 standard for injection\n * into an MPEG-2 transport streams.\n * @see https://en.wikipedia.org/wiki/CEA-708\n * @see https://www.gpo.gov/fdsys/pkg/CFR-2007-title47-vol1/pdf/CFR-2007-title47-vol1-sec15-119.pdf\n */\n // payload type field to indicate how they are to be\n // interpreted. CEAS-708 caption content is always transmitted with\n // payload type 0x04.\n\n var USER_DATA_REGISTERED_ITU_T_T35 = 4,\n RBSP_TRAILING_BITS = 128;\n /**\n * Parse a supplemental enhancement information (SEI) NAL unit.\n * Stops parsing once a message of type ITU T T35 has been found.\n *\n * @param bytes {Uint8Array} the bytes of a SEI NAL unit\n * @return {object} the parsed SEI payload\n * @see Rec. ITU-T H.264, 7.3.2.3.1\n */\n\n var parseSei = function (bytes) {\n var i = 0,\n result = {\n payloadType: -1,\n payloadSize: 0\n },\n payloadType = 0,\n payloadSize = 0; // go through the sei_rbsp parsing each each individual sei_message\n\n while (i < bytes.byteLength) {\n // stop once we have hit the end of the sei_rbsp\n if (bytes[i] === RBSP_TRAILING_BITS) {\n break;\n } // Parse payload type\n\n while (bytes[i] === 0xFF) {\n payloadType += 255;\n i++;\n }\n payloadType += bytes[i++]; // Parse payload size\n\n while (bytes[i] === 0xFF) {\n payloadSize += 255;\n i++;\n }\n payloadSize += bytes[i++]; // this sei_message is a 608/708 caption so save it and break\n // there can only ever be one caption message in a frame's sei\n\n if (!result.payload && payloadType === USER_DATA_REGISTERED_ITU_T_T35) {\n var userIdentifier = String.fromCharCode(bytes[i + 3], bytes[i + 4], bytes[i + 5], bytes[i + 6]);\n if (userIdentifier === 'GA94') {\n result.payloadType = payloadType;\n result.payloadSize = payloadSize;\n result.payload = bytes.subarray(i, i + payloadSize);\n break;\n } else {\n result.payload = void 0;\n }\n } // skip the payload and parse the next message\n\n i += payloadSize;\n payloadType = 0;\n payloadSize = 0;\n }\n return result;\n }; // see ANSI/SCTE 128-1 (2013), section 8.1\n\n var parseUserData = function (sei) {\n // itu_t_t35_contry_code must be 181 (United States) for\n // captions\n if (sei.payload[0] !== 181) {\n return null;\n } // itu_t_t35_provider_code should be 49 (ATSC) for captions\n\n if ((sei.payload[1] << 8 | sei.payload[2]) !== 49) {\n return null;\n } // the user_identifier should be \"GA94\" to indicate ATSC1 data\n\n if (String.fromCharCode(sei.payload[3], sei.payload[4], sei.payload[5], sei.payload[6]) !== 'GA94') {\n return null;\n } // finally, user_data_type_code should be 0x03 for caption data\n\n if (sei.payload[7] !== 0x03) {\n return null;\n } // return the user_data_type_structure and strip the trailing\n // marker bits\n\n return sei.payload.subarray(8, sei.payload.length - 1);\n }; // see CEA-708-D, section 4.4\n\n var parseCaptionPackets = function (pts, userData) {\n var results = [],\n i,\n count,\n offset,\n data; // if this is just filler, return immediately\n\n if (!(userData[0] & 0x40)) {\n return results;\n } // parse out the cc_data_1 and cc_data_2 fields\n\n count = userData[0] & 0x1f;\n for (i = 0; i < count; i++) {\n offset = i * 3;\n data = {\n type: userData[offset + 2] & 0x03,\n pts: pts\n }; // capture cc data when cc_valid is 1\n\n if (userData[offset + 2] & 0x04) {\n data.ccData = userData[offset + 3] << 8 | userData[offset + 4];\n results.push(data);\n }\n }\n return results;\n };\n var discardEmulationPreventionBytes$1 = function (data) {\n var length = data.byteLength,\n emulationPreventionBytesPositions = [],\n i = 1,\n newLength,\n newData; // Find all `Emulation Prevention Bytes`\n\n while (i < length - 2) {\n if (data[i] === 0 && data[i + 1] === 0 && data[i + 2] === 0x03) {\n emulationPreventionBytesPositions.push(i + 2);\n i += 2;\n } else {\n i++;\n }\n } // If no Emulation Prevention Bytes were found just return the original\n // array\n\n if (emulationPreventionBytesPositions.length === 0) {\n return data;\n } // Create a new array to hold the NAL unit data\n\n newLength = length - emulationPreventionBytesPositions.length;\n newData = new Uint8Array(newLength);\n var sourceIndex = 0;\n for (i = 0; i < newLength; sourceIndex++, i++) {\n if (sourceIndex === emulationPreventionBytesPositions[0]) {\n // Skip this byte\n sourceIndex++; // Remove this position index\n\n emulationPreventionBytesPositions.shift();\n }\n newData[i] = data[sourceIndex];\n }\n return newData;\n }; // exports\n\n var captionPacketParser = {\n parseSei: parseSei,\n parseUserData: parseUserData,\n parseCaptionPackets: parseCaptionPackets,\n discardEmulationPreventionBytes: discardEmulationPreventionBytes$1,\n USER_DATA_REGISTERED_ITU_T_T35: USER_DATA_REGISTERED_ITU_T_T35\n };\n /**\n * mux.js\n *\n * Copyright (c) Brightcove\n * Licensed Apache-2.0 https://github.com/videojs/mux.js/blob/master/LICENSE\n *\n * Reads in-band caption information from a video elementary\n * stream. Captions must follow the CEA-708 standard for injection\n * into an MPEG-2 transport streams.\n * @see https://en.wikipedia.org/wiki/CEA-708\n * @see https://www.gpo.gov/fdsys/pkg/CFR-2007-title47-vol1/pdf/CFR-2007-title47-vol1-sec15-119.pdf\n */\n // Link To Transport\n // -----------------\n\n var Stream$7 = stream;\n var cea708Parser = captionPacketParser;\n var CaptionStream$2 = function (options) {\n options = options || {};\n CaptionStream$2.prototype.init.call(this); // parse708captions flag, default to true\n\n this.parse708captions_ = typeof options.parse708captions === 'boolean' ? options.parse708captions : true;\n this.captionPackets_ = [];\n this.ccStreams_ = [new Cea608Stream(0, 0),\n // eslint-disable-line no-use-before-define\n new Cea608Stream(0, 1),\n // eslint-disable-line no-use-before-define\n new Cea608Stream(1, 0),\n // eslint-disable-line no-use-before-define\n new Cea608Stream(1, 1) // eslint-disable-line no-use-before-define\n ];\n if (this.parse708captions_) {\n this.cc708Stream_ = new Cea708Stream({\n captionServices: options.captionServices\n }); // eslint-disable-line no-use-before-define\n }\n this.reset(); // forward data and done events from CCs to this CaptionStream\n\n this.ccStreams_.forEach(function (cc) {\n cc.on('data', this.trigger.bind(this, 'data'));\n cc.on('partialdone', this.trigger.bind(this, 'partialdone'));\n cc.on('done', this.trigger.bind(this, 'done'));\n }, this);\n if (this.parse708captions_) {\n this.cc708Stream_.on('data', this.trigger.bind(this, 'data'));\n this.cc708Stream_.on('partialdone', this.trigger.bind(this, 'partialdone'));\n this.cc708Stream_.on('done', this.trigger.bind(this, 'done'));\n }\n };\n CaptionStream$2.prototype = new Stream$7();\n CaptionStream$2.prototype.push = function (event) {\n var sei, userData, newCaptionPackets; // only examine SEI NALs\n\n if (event.nalUnitType !== 'sei_rbsp') {\n return;\n } // parse the sei\n\n sei = cea708Parser.parseSei(event.escapedRBSP); // no payload data, skip\n\n if (!sei.payload) {\n return;\n } // ignore everything but user_data_registered_itu_t_t35\n\n if (sei.payloadType !== cea708Parser.USER_DATA_REGISTERED_ITU_T_T35) {\n return;\n } // parse out the user data payload\n\n userData = cea708Parser.parseUserData(sei); // ignore unrecognized userData\n\n if (!userData) {\n return;\n } // Sometimes, the same segment # will be downloaded twice. To stop the\n // caption data from being processed twice, we track the latest dts we've\n // received and ignore everything with a dts before that. However, since\n // data for a specific dts can be split across packets on either side of\n // a segment boundary, we need to make sure we *don't* ignore the packets\n // from the *next* segment that have dts === this.latestDts_. By constantly\n // tracking the number of packets received with dts === this.latestDts_, we\n // know how many should be ignored once we start receiving duplicates.\n\n if (event.dts < this.latestDts_) {\n // We've started getting older data, so set the flag.\n this.ignoreNextEqualDts_ = true;\n return;\n } else if (event.dts === this.latestDts_ && this.ignoreNextEqualDts_) {\n this.numSameDts_--;\n if (!this.numSameDts_) {\n // We've received the last duplicate packet, time to start processing again\n this.ignoreNextEqualDts_ = false;\n }\n return;\n } // parse out CC data packets and save them for later\n\n newCaptionPackets = cea708Parser.parseCaptionPackets(event.pts, userData);\n this.captionPackets_ = this.captionPackets_.concat(newCaptionPackets);\n if (this.latestDts_ !== event.dts) {\n this.numSameDts_ = 0;\n }\n this.numSameDts_++;\n this.latestDts_ = event.dts;\n };\n CaptionStream$2.prototype.flushCCStreams = function (flushType) {\n this.ccStreams_.forEach(function (cc) {\n return flushType === 'flush' ? cc.flush() : cc.partialFlush();\n }, this);\n };\n CaptionStream$2.prototype.flushStream = function (flushType) {\n // make sure we actually parsed captions before proceeding\n if (!this.captionPackets_.length) {\n this.flushCCStreams(flushType);\n return;\n } // In Chrome, the Array#sort function is not stable so add a\n // presortIndex that we can use to ensure we get a stable-sort\n\n this.captionPackets_.forEach(function (elem, idx) {\n elem.presortIndex = idx;\n }); // sort caption byte-pairs based on their PTS values\n\n this.captionPackets_.sort(function (a, b) {\n if (a.pts === b.pts) {\n return a.presortIndex - b.presortIndex;\n }\n return a.pts - b.pts;\n });\n this.captionPackets_.forEach(function (packet) {\n if (packet.type < 2) {\n // Dispatch packet to the right Cea608Stream\n this.dispatchCea608Packet(packet);\n } else {\n // Dispatch packet to the Cea708Stream\n this.dispatchCea708Packet(packet);\n }\n }, this);\n this.captionPackets_.length = 0;\n this.flushCCStreams(flushType);\n };\n CaptionStream$2.prototype.flush = function () {\n return this.flushStream('flush');\n }; // Only called if handling partial data\n\n CaptionStream$2.prototype.partialFlush = function () {\n return this.flushStream('partialFlush');\n };\n CaptionStream$2.prototype.reset = function () {\n this.latestDts_ = null;\n this.ignoreNextEqualDts_ = false;\n this.numSameDts_ = 0;\n this.activeCea608Channel_ = [null, null];\n this.ccStreams_.forEach(function (ccStream) {\n ccStream.reset();\n });\n }; // From the CEA-608 spec:\n\n /*\n * When XDS sub-packets are interleaved with other services, the end of each sub-packet shall be followed\n * by a control pair to change to a different service. When any of the control codes from 0x10 to 0x1F is\n * used to begin a control code pair, it indicates the return to captioning or Text data. The control code pair\n * and subsequent data should then be processed according to the FCC rules. It may be necessary for the\n * line 21 data encoder to automatically insert a control code pair (i.e. RCL, RU2, RU3, RU4, RDC, or RTD)\n * to switch to captioning or Text.\n */\n // With that in mind, we ignore any data between an XDS control code and a\n // subsequent closed-captioning control code.\n\n CaptionStream$2.prototype.dispatchCea608Packet = function (packet) {\n // NOTE: packet.type is the CEA608 field\n if (this.setsTextOrXDSActive(packet)) {\n this.activeCea608Channel_[packet.type] = null;\n } else if (this.setsChannel1Active(packet)) {\n this.activeCea608Channel_[packet.type] = 0;\n } else if (this.setsChannel2Active(packet)) {\n this.activeCea608Channel_[packet.type] = 1;\n }\n if (this.activeCea608Channel_[packet.type] === null) {\n // If we haven't received anything to set the active channel, or the\n // packets are Text/XDS data, discard the data; we don't want jumbled\n // captions\n return;\n }\n this.ccStreams_[(packet.type << 1) + this.activeCea608Channel_[packet.type]].push(packet);\n };\n CaptionStream$2.prototype.setsChannel1Active = function (packet) {\n return (packet.ccData & 0x7800) === 0x1000;\n };\n CaptionStream$2.prototype.setsChannel2Active = function (packet) {\n return (packet.ccData & 0x7800) === 0x1800;\n };\n CaptionStream$2.prototype.setsTextOrXDSActive = function (packet) {\n return (packet.ccData & 0x7100) === 0x0100 || (packet.ccData & 0x78fe) === 0x102a || (packet.ccData & 0x78fe) === 0x182a;\n };\n CaptionStream$2.prototype.dispatchCea708Packet = function (packet) {\n if (this.parse708captions_) {\n this.cc708Stream_.push(packet);\n }\n }; // ----------------------\n // Session to Application\n // ----------------------\n // This hash maps special and extended character codes to their\n // proper Unicode equivalent. The first one-byte key is just a\n // non-standard character code. The two-byte keys that follow are\n // the extended CEA708 character codes, along with the preceding\n // 0x10 extended character byte to distinguish these codes from\n // non-extended character codes. Every CEA708 character code that\n // is not in this object maps directly to a standard unicode\n // character code.\n // The transparent space and non-breaking transparent space are\n // technically not fully supported since there is no code to\n // make them transparent, so they have normal non-transparent\n // stand-ins.\n // The special closed caption (CC) character isn't a standard\n // unicode character, so a fairly similar unicode character was\n // chosen in it's place.\n\n var CHARACTER_TRANSLATION_708 = {\n 0x7f: 0x266a,\n // ♪\n 0x1020: 0x20,\n // Transparent Space\n 0x1021: 0xa0,\n // Nob-breaking Transparent Space\n 0x1025: 0x2026,\n // …\n 0x102a: 0x0160,\n // Š\n 0x102c: 0x0152,\n // Œ\n 0x1030: 0x2588,\n // █\n 0x1031: 0x2018,\n // ‘\n 0x1032: 0x2019,\n // ’\n 0x1033: 0x201c,\n // “\n 0x1034: 0x201d,\n // ”\n 0x1035: 0x2022,\n // •\n 0x1039: 0x2122,\n // ™\n 0x103a: 0x0161,\n // š\n 0x103c: 0x0153,\n // œ\n 0x103d: 0x2120,\n // ℠\n 0x103f: 0x0178,\n // Ÿ\n 0x1076: 0x215b,\n // ⅛\n 0x1077: 0x215c,\n // ⅜\n 0x1078: 0x215d,\n // ⅝\n 0x1079: 0x215e,\n // ⅞\n 0x107a: 0x23d0,\n // ⏐\n 0x107b: 0x23a4,\n // ⎤\n 0x107c: 0x23a3,\n // ⎣\n 0x107d: 0x23af,\n // ⎯\n 0x107e: 0x23a6,\n // ⎦\n 0x107f: 0x23a1,\n // ⎡\n 0x10a0: 0x3138 // ㄸ (CC char)\n };\n var get708CharFromCode = function (code) {\n var newCode = CHARACTER_TRANSLATION_708[code] || code;\n if (code & 0x1000 && code === newCode) {\n // Invalid extended code\n return '';\n }\n return String.fromCharCode(newCode);\n };\n var within708TextBlock = function (b) {\n return 0x20 <= b && b <= 0x7f || 0xa0 <= b && b <= 0xff;\n };\n var Cea708Window = function (windowNum) {\n this.windowNum = windowNum;\n this.reset();\n };\n Cea708Window.prototype.reset = function () {\n this.clearText();\n this.pendingNewLine = false;\n this.winAttr = {};\n this.penAttr = {};\n this.penLoc = {};\n this.penColor = {}; // These default values are arbitrary,\n // defineWindow will usually override them\n\n this.visible = 0;\n this.rowLock = 0;\n this.columnLock = 0;\n this.priority = 0;\n this.relativePositioning = 0;\n this.anchorVertical = 0;\n this.anchorHorizontal = 0;\n this.anchorPoint = 0;\n this.rowCount = 1;\n this.virtualRowCount = this.rowCount + 1;\n this.columnCount = 41;\n this.windowStyle = 0;\n this.penStyle = 0;\n };\n Cea708Window.prototype.getText = function () {\n return this.rows.join('\\n');\n };\n Cea708Window.prototype.clearText = function () {\n this.rows = [''];\n this.rowIdx = 0;\n };\n Cea708Window.prototype.newLine = function (pts) {\n if (this.rows.length >= this.virtualRowCount && typeof this.beforeRowOverflow === 'function') {\n this.beforeRowOverflow(pts);\n }\n if (this.rows.length > 0) {\n this.rows.push('');\n this.rowIdx++;\n } // Show all virtual rows since there's no visible scrolling\n\n while (this.rows.length > this.virtualRowCount) {\n this.rows.shift();\n this.rowIdx--;\n }\n };\n Cea708Window.prototype.isEmpty = function () {\n if (this.rows.length === 0) {\n return true;\n } else if (this.rows.length === 1) {\n return this.rows[0] === '';\n }\n return false;\n };\n Cea708Window.prototype.addText = function (text) {\n this.rows[this.rowIdx] += text;\n };\n Cea708Window.prototype.backspace = function () {\n if (!this.isEmpty()) {\n var row = this.rows[this.rowIdx];\n this.rows[this.rowIdx] = row.substr(0, row.length - 1);\n }\n };\n var Cea708Service = function (serviceNum, encoding, stream) {\n this.serviceNum = serviceNum;\n this.text = '';\n this.currentWindow = new Cea708Window(-1);\n this.windows = [];\n this.stream = stream; // Try to setup a TextDecoder if an `encoding` value was provided\n\n if (typeof encoding === 'string') {\n this.createTextDecoder(encoding);\n }\n };\n /**\n * Initialize service windows\n * Must be run before service use\n *\n * @param {Integer} pts PTS value\n * @param {Function} beforeRowOverflow Function to execute before row overflow of a window\n */\n\n Cea708Service.prototype.init = function (pts, beforeRowOverflow) {\n this.startPts = pts;\n for (var win = 0; win < 8; win++) {\n this.windows[win] = new Cea708Window(win);\n if (typeof beforeRowOverflow === 'function') {\n this.windows[win].beforeRowOverflow = beforeRowOverflow;\n }\n }\n };\n /**\n * Set current window of service to be affected by commands\n *\n * @param {Integer} windowNum Window number\n */\n\n Cea708Service.prototype.setCurrentWindow = function (windowNum) {\n this.currentWindow = this.windows[windowNum];\n };\n /**\n * Try to create a TextDecoder if it is natively supported\n */\n\n Cea708Service.prototype.createTextDecoder = function (encoding) {\n if (typeof TextDecoder === 'undefined') {\n this.stream.trigger('log', {\n level: 'warn',\n message: 'The `encoding` option is unsupported without TextDecoder support'\n });\n } else {\n try {\n this.textDecoder_ = new TextDecoder(encoding);\n } catch (error) {\n this.stream.trigger('log', {\n level: 'warn',\n message: 'TextDecoder could not be created with ' + encoding + ' encoding. ' + error\n });\n }\n }\n };\n var Cea708Stream = function (options) {\n options = options || {};\n Cea708Stream.prototype.init.call(this);\n var self = this;\n var captionServices = options.captionServices || {};\n var captionServiceEncodings = {};\n var serviceProps; // Get service encodings from captionServices option block\n\n Object.keys(captionServices).forEach(serviceName => {\n serviceProps = captionServices[serviceName];\n if (/^SERVICE/.test(serviceName)) {\n captionServiceEncodings[serviceName] = serviceProps.encoding;\n }\n });\n this.serviceEncodings = captionServiceEncodings;\n this.current708Packet = null;\n this.services = {};\n this.push = function (packet) {\n if (packet.type === 3) {\n // 708 packet start\n self.new708Packet();\n self.add708Bytes(packet);\n } else {\n if (self.current708Packet === null) {\n // This should only happen at the start of a file if there's no packet start.\n self.new708Packet();\n }\n self.add708Bytes(packet);\n }\n };\n };\n Cea708Stream.prototype = new Stream$7();\n /**\n * Push current 708 packet, create new 708 packet.\n */\n\n Cea708Stream.prototype.new708Packet = function () {\n if (this.current708Packet !== null) {\n this.push708Packet();\n }\n this.current708Packet = {\n data: [],\n ptsVals: []\n };\n };\n /**\n * Add pts and both bytes from packet into current 708 packet.\n */\n\n Cea708Stream.prototype.add708Bytes = function (packet) {\n var data = packet.ccData;\n var byte0 = data >>> 8;\n var byte1 = data & 0xff; // I would just keep a list of packets instead of bytes, but it isn't clear in the spec\n // that service blocks will always line up with byte pairs.\n\n this.current708Packet.ptsVals.push(packet.pts);\n this.current708Packet.data.push(byte0);\n this.current708Packet.data.push(byte1);\n };\n /**\n * Parse completed 708 packet into service blocks and push each service block.\n */\n\n Cea708Stream.prototype.push708Packet = function () {\n var packet708 = this.current708Packet;\n var packetData = packet708.data;\n var serviceNum = null;\n var blockSize = null;\n var i = 0;\n var b = packetData[i++];\n packet708.seq = b >> 6;\n packet708.sizeCode = b & 0x3f; // 0b00111111;\n\n for (; i < packetData.length; i++) {\n b = packetData[i++];\n serviceNum = b >> 5;\n blockSize = b & 0x1f; // 0b00011111\n\n if (serviceNum === 7 && blockSize > 0) {\n // Extended service num\n b = packetData[i++];\n serviceNum = b;\n }\n this.pushServiceBlock(serviceNum, i, blockSize);\n if (blockSize > 0) {\n i += blockSize - 1;\n }\n }\n };\n /**\n * Parse service block, execute commands, read text.\n *\n * Note: While many of these commands serve important purposes,\n * many others just parse out the parameters or attributes, but\n * nothing is done with them because this is not a full and complete\n * implementation of the entire 708 spec.\n *\n * @param {Integer} serviceNum Service number\n * @param {Integer} start Start index of the 708 packet data\n * @param {Integer} size Block size\n */\n\n Cea708Stream.prototype.pushServiceBlock = function (serviceNum, start, size) {\n var b;\n var i = start;\n var packetData = this.current708Packet.data;\n var service = this.services[serviceNum];\n if (!service) {\n service = this.initService(serviceNum, i);\n }\n for (; i < start + size && i < packetData.length; i++) {\n b = packetData[i];\n if (within708TextBlock(b)) {\n i = this.handleText(i, service);\n } else if (b === 0x18) {\n i = this.multiByteCharacter(i, service);\n } else if (b === 0x10) {\n i = this.extendedCommands(i, service);\n } else if (0x80 <= b && b <= 0x87) {\n i = this.setCurrentWindow(i, service);\n } else if (0x98 <= b && b <= 0x9f) {\n i = this.defineWindow(i, service);\n } else if (b === 0x88) {\n i = this.clearWindows(i, service);\n } else if (b === 0x8c) {\n i = this.deleteWindows(i, service);\n } else if (b === 0x89) {\n i = this.displayWindows(i, service);\n } else if (b === 0x8a) {\n i = this.hideWindows(i, service);\n } else if (b === 0x8b) {\n i = this.toggleWindows(i, service);\n } else if (b === 0x97) {\n i = this.setWindowAttributes(i, service);\n } else if (b === 0x90) {\n i = this.setPenAttributes(i, service);\n } else if (b === 0x91) {\n i = this.setPenColor(i, service);\n } else if (b === 0x92) {\n i = this.setPenLocation(i, service);\n } else if (b === 0x8f) {\n service = this.reset(i, service);\n } else if (b === 0x08) {\n // BS: Backspace\n service.currentWindow.backspace();\n } else if (b === 0x0c) {\n // FF: Form feed\n service.currentWindow.clearText();\n } else if (b === 0x0d) {\n // CR: Carriage return\n service.currentWindow.pendingNewLine = true;\n } else if (b === 0x0e) {\n // HCR: Horizontal carriage return\n service.currentWindow.clearText();\n } else if (b === 0x8d) {\n // DLY: Delay, nothing to do\n i++;\n } else ;\n }\n };\n /**\n * Execute an extended command\n *\n * @param {Integer} i Current index in the 708 packet\n * @param {Service} service The service object to be affected\n * @return {Integer} New index after parsing\n */\n\n Cea708Stream.prototype.extendedCommands = function (i, service) {\n var packetData = this.current708Packet.data;\n var b = packetData[++i];\n if (within708TextBlock(b)) {\n i = this.handleText(i, service, {\n isExtended: true\n });\n }\n return i;\n };\n /**\n * Get PTS value of a given byte index\n *\n * @param {Integer} byteIndex Index of the byte\n * @return {Integer} PTS\n */\n\n Cea708Stream.prototype.getPts = function (byteIndex) {\n // There's 1 pts value per 2 bytes\n return this.current708Packet.ptsVals[Math.floor(byteIndex / 2)];\n };\n /**\n * Initializes a service\n *\n * @param {Integer} serviceNum Service number\n * @return {Service} Initialized service object\n */\n\n Cea708Stream.prototype.initService = function (serviceNum, i) {\n var serviceName = 'SERVICE' + serviceNum;\n var self = this;\n var serviceName;\n var encoding;\n if (serviceName in this.serviceEncodings) {\n encoding = this.serviceEncodings[serviceName];\n }\n this.services[serviceNum] = new Cea708Service(serviceNum, encoding, self);\n this.services[serviceNum].init(this.getPts(i), function (pts) {\n self.flushDisplayed(pts, self.services[serviceNum]);\n });\n return this.services[serviceNum];\n };\n /**\n * Execute text writing to current window\n *\n * @param {Integer} i Current index in the 708 packet\n * @param {Service} service The service object to be affected\n * @return {Integer} New index after parsing\n */\n\n Cea708Stream.prototype.handleText = function (i, service, options) {\n var isExtended = options && options.isExtended;\n var isMultiByte = options && options.isMultiByte;\n var packetData = this.current708Packet.data;\n var extended = isExtended ? 0x1000 : 0x0000;\n var currentByte = packetData[i];\n var nextByte = packetData[i + 1];\n var win = service.currentWindow;\n var char;\n var charCodeArray; // Converts an array of bytes to a unicode hex string.\n\n function toHexString(byteArray) {\n return byteArray.map(byte => {\n return ('0' + (byte & 0xFF).toString(16)).slice(-2);\n }).join('');\n }\n if (isMultiByte) {\n charCodeArray = [currentByte, nextByte];\n i++;\n } else {\n charCodeArray = [currentByte];\n } // Use the TextDecoder if one was created for this service\n\n if (service.textDecoder_ && !isExtended) {\n char = service.textDecoder_.decode(new Uint8Array(charCodeArray));\n } else {\n // We assume any multi-byte char without a decoder is unicode.\n if (isMultiByte) {\n const unicode = toHexString(charCodeArray); // Takes a unicode hex string and creates a single character.\n\n char = String.fromCharCode(parseInt(unicode, 16));\n } else {\n char = get708CharFromCode(extended | currentByte);\n }\n }\n if (win.pendingNewLine && !win.isEmpty()) {\n win.newLine(this.getPts(i));\n }\n win.pendingNewLine = false;\n win.addText(char);\n return i;\n };\n /**\n * Handle decoding of multibyte character\n *\n * @param {Integer} i Current index in the 708 packet\n * @param {Service} service The service object to be affected\n * @return {Integer} New index after parsing\n */\n\n Cea708Stream.prototype.multiByteCharacter = function (i, service) {\n var packetData = this.current708Packet.data;\n var firstByte = packetData[i + 1];\n var secondByte = packetData[i + 2];\n if (within708TextBlock(firstByte) && within708TextBlock(secondByte)) {\n i = this.handleText(++i, service, {\n isMultiByte: true\n });\n }\n return i;\n };\n /**\n * Parse and execute the CW# command.\n *\n * Set the current window.\n *\n * @param {Integer} i Current index in the 708 packet\n * @param {Service} service The service object to be affected\n * @return {Integer} New index after parsing\n */\n\n Cea708Stream.prototype.setCurrentWindow = function (i, service) {\n var packetData = this.current708Packet.data;\n var b = packetData[i];\n var windowNum = b & 0x07;\n service.setCurrentWindow(windowNum);\n return i;\n };\n /**\n * Parse and execute the DF# command.\n *\n * Define a window and set it as the current window.\n *\n * @param {Integer} i Current index in the 708 packet\n * @param {Service} service The service object to be affected\n * @return {Integer} New index after parsing\n */\n\n Cea708Stream.prototype.defineWindow = function (i, service) {\n var packetData = this.current708Packet.data;\n var b = packetData[i];\n var windowNum = b & 0x07;\n service.setCurrentWindow(windowNum);\n var win = service.currentWindow;\n b = packetData[++i];\n win.visible = (b & 0x20) >> 5; // v\n\n win.rowLock = (b & 0x10) >> 4; // rl\n\n win.columnLock = (b & 0x08) >> 3; // cl\n\n win.priority = b & 0x07; // p\n\n b = packetData[++i];\n win.relativePositioning = (b & 0x80) >> 7; // rp\n\n win.anchorVertical = b & 0x7f; // av\n\n b = packetData[++i];\n win.anchorHorizontal = b; // ah\n\n b = packetData[++i];\n win.anchorPoint = (b & 0xf0) >> 4; // ap\n\n win.rowCount = b & 0x0f; // rc\n\n b = packetData[++i];\n win.columnCount = b & 0x3f; // cc\n\n b = packetData[++i];\n win.windowStyle = (b & 0x38) >> 3; // ws\n\n win.penStyle = b & 0x07; // ps\n // The spec says there are (rowCount+1) \"virtual rows\"\n\n win.virtualRowCount = win.rowCount + 1;\n return i;\n };\n /**\n * Parse and execute the SWA command.\n *\n * Set attributes of the current window.\n *\n * @param {Integer} i Current index in the 708 packet\n * @param {Service} service The service object to be affected\n * @return {Integer} New index after parsing\n */\n\n Cea708Stream.prototype.setWindowAttributes = function (i, service) {\n var packetData = this.current708Packet.data;\n var b = packetData[i];\n var winAttr = service.currentWindow.winAttr;\n b = packetData[++i];\n winAttr.fillOpacity = (b & 0xc0) >> 6; // fo\n\n winAttr.fillRed = (b & 0x30) >> 4; // fr\n\n winAttr.fillGreen = (b & 0x0c) >> 2; // fg\n\n winAttr.fillBlue = b & 0x03; // fb\n\n b = packetData[++i];\n winAttr.borderType = (b & 0xc0) >> 6; // bt\n\n winAttr.borderRed = (b & 0x30) >> 4; // br\n\n winAttr.borderGreen = (b & 0x0c) >> 2; // bg\n\n winAttr.borderBlue = b & 0x03; // bb\n\n b = packetData[++i];\n winAttr.borderType += (b & 0x80) >> 5; // bt\n\n winAttr.wordWrap = (b & 0x40) >> 6; // ww\n\n winAttr.printDirection = (b & 0x30) >> 4; // pd\n\n winAttr.scrollDirection = (b & 0x0c) >> 2; // sd\n\n winAttr.justify = b & 0x03; // j\n\n b = packetData[++i];\n winAttr.effectSpeed = (b & 0xf0) >> 4; // es\n\n winAttr.effectDirection = (b & 0x0c) >> 2; // ed\n\n winAttr.displayEffect = b & 0x03; // de\n\n return i;\n };\n /**\n * Gather text from all displayed windows and push a caption to output.\n *\n * @param {Integer} i Current index in the 708 packet\n * @param {Service} service The service object to be affected\n */\n\n Cea708Stream.prototype.flushDisplayed = function (pts, service) {\n var displayedText = []; // TODO: Positioning not supported, displaying multiple windows will not necessarily\n // display text in the correct order, but sample files so far have not shown any issue.\n\n for (var winId = 0; winId < 8; winId++) {\n if (service.windows[winId].visible && !service.windows[winId].isEmpty()) {\n displayedText.push(service.windows[winId].getText());\n }\n }\n service.endPts = pts;\n service.text = displayedText.join('\\n\\n');\n this.pushCaption(service);\n service.startPts = pts;\n };\n /**\n * Push a caption to output if the caption contains text.\n *\n * @param {Service} service The service object to be affected\n */\n\n Cea708Stream.prototype.pushCaption = function (service) {\n if (service.text !== '') {\n this.trigger('data', {\n startPts: service.startPts,\n endPts: service.endPts,\n text: service.text,\n stream: 'cc708_' + service.serviceNum\n });\n service.text = '';\n service.startPts = service.endPts;\n }\n };\n /**\n * Parse and execute the DSW command.\n *\n * Set visible property of windows based on the parsed bitmask.\n *\n * @param {Integer} i Current index in the 708 packet\n * @param {Service} service The service object to be affected\n * @return {Integer} New index after parsing\n */\n\n Cea708Stream.prototype.displayWindows = function (i, service) {\n var packetData = this.current708Packet.data;\n var b = packetData[++i];\n var pts = this.getPts(i);\n this.flushDisplayed(pts, service);\n for (var winId = 0; winId < 8; winId++) {\n if (b & 0x01 << winId) {\n service.windows[winId].visible = 1;\n }\n }\n return i;\n };\n /**\n * Parse and execute the HDW command.\n *\n * Set visible property of windows based on the parsed bitmask.\n *\n * @param {Integer} i Current index in the 708 packet\n * @param {Service} service The service object to be affected\n * @return {Integer} New index after parsing\n */\n\n Cea708Stream.prototype.hideWindows = function (i, service) {\n var packetData = this.current708Packet.data;\n var b = packetData[++i];\n var pts = this.getPts(i);\n this.flushDisplayed(pts, service);\n for (var winId = 0; winId < 8; winId++) {\n if (b & 0x01 << winId) {\n service.windows[winId].visible = 0;\n }\n }\n return i;\n };\n /**\n * Parse and execute the TGW command.\n *\n * Set visible property of windows based on the parsed bitmask.\n *\n * @param {Integer} i Current index in the 708 packet\n * @param {Service} service The service object to be affected\n * @return {Integer} New index after parsing\n */\n\n Cea708Stream.prototype.toggleWindows = function (i, service) {\n var packetData = this.current708Packet.data;\n var b = packetData[++i];\n var pts = this.getPts(i);\n this.flushDisplayed(pts, service);\n for (var winId = 0; winId < 8; winId++) {\n if (b & 0x01 << winId) {\n service.windows[winId].visible ^= 1;\n }\n }\n return i;\n };\n /**\n * Parse and execute the CLW command.\n *\n * Clear text of windows based on the parsed bitmask.\n *\n * @param {Integer} i Current index in the 708 packet\n * @param {Service} service The service object to be affected\n * @return {Integer} New index after parsing\n */\n\n Cea708Stream.prototype.clearWindows = function (i, service) {\n var packetData = this.current708Packet.data;\n var b = packetData[++i];\n var pts = this.getPts(i);\n this.flushDisplayed(pts, service);\n for (var winId = 0; winId < 8; winId++) {\n if (b & 0x01 << winId) {\n service.windows[winId].clearText();\n }\n }\n return i;\n };\n /**\n * Parse and execute the DLW command.\n *\n * Re-initialize windows based on the parsed bitmask.\n *\n * @param {Integer} i Current index in the 708 packet\n * @param {Service} service The service object to be affected\n * @return {Integer} New index after parsing\n */\n\n Cea708Stream.prototype.deleteWindows = function (i, service) {\n var packetData = this.current708Packet.data;\n var b = packetData[++i];\n var pts = this.getPts(i);\n this.flushDisplayed(pts, service);\n for (var winId = 0; winId < 8; winId++) {\n if (b & 0x01 << winId) {\n service.windows[winId].reset();\n }\n }\n return i;\n };\n /**\n * Parse and execute the SPA command.\n *\n * Set pen attributes of the current window.\n *\n * @param {Integer} i Current index in the 708 packet\n * @param {Service} service The service object to be affected\n * @return {Integer} New index after parsing\n */\n\n Cea708Stream.prototype.setPenAttributes = function (i, service) {\n var packetData = this.current708Packet.data;\n var b = packetData[i];\n var penAttr = service.currentWindow.penAttr;\n b = packetData[++i];\n penAttr.textTag = (b & 0xf0) >> 4; // tt\n\n penAttr.offset = (b & 0x0c) >> 2; // o\n\n penAttr.penSize = b & 0x03; // s\n\n b = packetData[++i];\n penAttr.italics = (b & 0x80) >> 7; // i\n\n penAttr.underline = (b & 0x40) >> 6; // u\n\n penAttr.edgeType = (b & 0x38) >> 3; // et\n\n penAttr.fontStyle = b & 0x07; // fs\n\n return i;\n };\n /**\n * Parse and execute the SPC command.\n *\n * Set pen color of the current window.\n *\n * @param {Integer} i Current index in the 708 packet\n * @param {Service} service The service object to be affected\n * @return {Integer} New index after parsing\n */\n\n Cea708Stream.prototype.setPenColor = function (i, service) {\n var packetData = this.current708Packet.data;\n var b = packetData[i];\n var penColor = service.currentWindow.penColor;\n b = packetData[++i];\n penColor.fgOpacity = (b & 0xc0) >> 6; // fo\n\n penColor.fgRed = (b & 0x30) >> 4; // fr\n\n penColor.fgGreen = (b & 0x0c) >> 2; // fg\n\n penColor.fgBlue = b & 0x03; // fb\n\n b = packetData[++i];\n penColor.bgOpacity = (b & 0xc0) >> 6; // bo\n\n penColor.bgRed = (b & 0x30) >> 4; // br\n\n penColor.bgGreen = (b & 0x0c) >> 2; // bg\n\n penColor.bgBlue = b & 0x03; // bb\n\n b = packetData[++i];\n penColor.edgeRed = (b & 0x30) >> 4; // er\n\n penColor.edgeGreen = (b & 0x0c) >> 2; // eg\n\n penColor.edgeBlue = b & 0x03; // eb\n\n return i;\n };\n /**\n * Parse and execute the SPL command.\n *\n * Set pen location of the current window.\n *\n * @param {Integer} i Current index in the 708 packet\n * @param {Service} service The service object to be affected\n * @return {Integer} New index after parsing\n */\n\n Cea708Stream.prototype.setPenLocation = function (i, service) {\n var packetData = this.current708Packet.data;\n var b = packetData[i];\n var penLoc = service.currentWindow.penLoc; // Positioning isn't really supported at the moment, so this essentially just inserts a linebreak\n\n service.currentWindow.pendingNewLine = true;\n b = packetData[++i];\n penLoc.row = b & 0x0f; // r\n\n b = packetData[++i];\n penLoc.column = b & 0x3f; // c\n\n return i;\n };\n /**\n * Execute the RST command.\n *\n * Reset service to a clean slate. Re-initialize.\n *\n * @param {Integer} i Current index in the 708 packet\n * @param {Service} service The service object to be affected\n * @return {Service} Re-initialized service\n */\n\n Cea708Stream.prototype.reset = function (i, service) {\n var pts = this.getPts(i);\n this.flushDisplayed(pts, service);\n return this.initService(service.serviceNum, i);\n }; // This hash maps non-ASCII, special, and extended character codes to their\n // proper Unicode equivalent. The first keys that are only a single byte\n // are the non-standard ASCII characters, which simply map the CEA608 byte\n // to the standard ASCII/Unicode. The two-byte keys that follow are the CEA608\n // character codes, but have their MSB bitmasked with 0x03 so that a lookup\n // can be performed regardless of the field and data channel on which the\n // character code was received.\n\n var CHARACTER_TRANSLATION = {\n 0x2a: 0xe1,\n // á\n 0x5c: 0xe9,\n // é\n 0x5e: 0xed,\n // í\n 0x5f: 0xf3,\n // ó\n 0x60: 0xfa,\n // ú\n 0x7b: 0xe7,\n // ç\n 0x7c: 0xf7,\n // ÷\n 0x7d: 0xd1,\n // Ñ\n 0x7e: 0xf1,\n // ñ\n 0x7f: 0x2588,\n // █\n 0x0130: 0xae,\n // ®\n 0x0131: 0xb0,\n // °\n 0x0132: 0xbd,\n // ½\n 0x0133: 0xbf,\n // ¿\n 0x0134: 0x2122,\n // ™\n 0x0135: 0xa2,\n // ¢\n 0x0136: 0xa3,\n // £\n 0x0137: 0x266a,\n // ♪\n 0x0138: 0xe0,\n // à\n 0x0139: 0xa0,\n //\n 0x013a: 0xe8,\n // è\n 0x013b: 0xe2,\n // â\n 0x013c: 0xea,\n // ê\n 0x013d: 0xee,\n // î\n 0x013e: 0xf4,\n // ô\n 0x013f: 0xfb,\n // û\n 0x0220: 0xc1,\n // Á\n 0x0221: 0xc9,\n // É\n 0x0222: 0xd3,\n // Ó\n 0x0223: 0xda,\n // Ú\n 0x0224: 0xdc,\n // Ü\n 0x0225: 0xfc,\n // ü\n 0x0226: 0x2018,\n // ‘\n 0x0227: 0xa1,\n // ¡\n 0x0228: 0x2a,\n // *\n 0x0229: 0x27,\n // '\n 0x022a: 0x2014,\n // —\n 0x022b: 0xa9,\n // ©\n 0x022c: 0x2120,\n // ℠\n 0x022d: 0x2022,\n // •\n 0x022e: 0x201c,\n // “\n 0x022f: 0x201d,\n // ”\n 0x0230: 0xc0,\n // À\n 0x0231: 0xc2,\n // Â\n 0x0232: 0xc7,\n // Ç\n 0x0233: 0xc8,\n // È\n 0x0234: 0xca,\n // Ê\n 0x0235: 0xcb,\n // Ë\n 0x0236: 0xeb,\n // ë\n 0x0237: 0xce,\n // Î\n 0x0238: 0xcf,\n // Ï\n 0x0239: 0xef,\n // ï\n 0x023a: 0xd4,\n // Ô\n 0x023b: 0xd9,\n // Ù\n 0x023c: 0xf9,\n // ù\n 0x023d: 0xdb,\n // Û\n 0x023e: 0xab,\n // «\n 0x023f: 0xbb,\n // »\n 0x0320: 0xc3,\n // Ã\n 0x0321: 0xe3,\n // ã\n 0x0322: 0xcd,\n // Í\n 0x0323: 0xcc,\n // Ì\n 0x0324: 0xec,\n // ì\n 0x0325: 0xd2,\n // Ò\n 0x0326: 0xf2,\n // ò\n 0x0327: 0xd5,\n // Õ\n 0x0328: 0xf5,\n // õ\n 0x0329: 0x7b,\n // {\n 0x032a: 0x7d,\n // }\n 0x032b: 0x5c,\n // \\\n 0x032c: 0x5e,\n // ^\n 0x032d: 0x5f,\n // _\n 0x032e: 0x7c,\n // |\n 0x032f: 0x7e,\n // ~\n 0x0330: 0xc4,\n // Ä\n 0x0331: 0xe4,\n // ä\n 0x0332: 0xd6,\n // Ö\n 0x0333: 0xf6,\n // ö\n 0x0334: 0xdf,\n // ß\n 0x0335: 0xa5,\n // ¥\n 0x0336: 0xa4,\n // ¤\n 0x0337: 0x2502,\n // │\n 0x0338: 0xc5,\n // Å\n 0x0339: 0xe5,\n // å\n 0x033a: 0xd8,\n // Ø\n 0x033b: 0xf8,\n // ø\n 0x033c: 0x250c,\n // ┌\n 0x033d: 0x2510,\n // ┐\n 0x033e: 0x2514,\n // └\n 0x033f: 0x2518 // ┘\n };\n var getCharFromCode = function (code) {\n if (code === null) {\n return '';\n }\n code = CHARACTER_TRANSLATION[code] || code;\n return String.fromCharCode(code);\n }; // the index of the last row in a CEA-608 display buffer\n\n var BOTTOM_ROW = 14; // This array is used for mapping PACs -> row #, since there's no way of\n // getting it through bit logic.\n\n var ROWS = [0x1100, 0x1120, 0x1200, 0x1220, 0x1500, 0x1520, 0x1600, 0x1620, 0x1700, 0x1720, 0x1000, 0x1300, 0x1320, 0x1400, 0x1420]; // CEA-608 captions are rendered onto a 34x15 matrix of character\n // cells. The \"bottom\" row is the last element in the outer array.\n // We keep track of positioning information as we go by storing the\n // number of indentations and the tab offset in this buffer.\n\n var createDisplayBuffer = function () {\n var result = [],\n i = BOTTOM_ROW + 1;\n while (i--) {\n result.push({\n text: '',\n indent: 0,\n offset: 0\n });\n }\n return result;\n };\n var Cea608Stream = function (field, dataChannel) {\n Cea608Stream.prototype.init.call(this);\n this.field_ = field || 0;\n this.dataChannel_ = dataChannel || 0;\n this.name_ = 'CC' + ((this.field_ << 1 | this.dataChannel_) + 1);\n this.setConstants();\n this.reset();\n this.push = function (packet) {\n var data, swap, char0, char1, text; // remove the parity bits\n\n data = packet.ccData & 0x7f7f; // ignore duplicate control codes; the spec demands they're sent twice\n\n if (data === this.lastControlCode_) {\n this.lastControlCode_ = null;\n return;\n } // Store control codes\n\n if ((data & 0xf000) === 0x1000) {\n this.lastControlCode_ = data;\n } else if (data !== this.PADDING_) {\n this.lastControlCode_ = null;\n }\n char0 = data >>> 8;\n char1 = data & 0xff;\n if (data === this.PADDING_) {\n return;\n } else if (data === this.RESUME_CAPTION_LOADING_) {\n this.mode_ = 'popOn';\n } else if (data === this.END_OF_CAPTION_) {\n // If an EOC is received while in paint-on mode, the displayed caption\n // text should be swapped to non-displayed memory as if it was a pop-on\n // caption. Because of that, we should explicitly switch back to pop-on\n // mode\n this.mode_ = 'popOn';\n this.clearFormatting(packet.pts); // if a caption was being displayed, it's gone now\n\n this.flushDisplayed(packet.pts); // flip memory\n\n swap = this.displayed_;\n this.displayed_ = this.nonDisplayed_;\n this.nonDisplayed_ = swap; // start measuring the time to display the caption\n\n this.startPts_ = packet.pts;\n } else if (data === this.ROLL_UP_2_ROWS_) {\n this.rollUpRows_ = 2;\n this.setRollUp(packet.pts);\n } else if (data === this.ROLL_UP_3_ROWS_) {\n this.rollUpRows_ = 3;\n this.setRollUp(packet.pts);\n } else if (data === this.ROLL_UP_4_ROWS_) {\n this.rollUpRows_ = 4;\n this.setRollUp(packet.pts);\n } else if (data === this.CARRIAGE_RETURN_) {\n this.clearFormatting(packet.pts);\n this.flushDisplayed(packet.pts);\n this.shiftRowsUp_();\n this.startPts_ = packet.pts;\n } else if (data === this.BACKSPACE_) {\n if (this.mode_ === 'popOn') {\n this.nonDisplayed_[this.row_].text = this.nonDisplayed_[this.row_].text.slice(0, -1);\n } else {\n this.displayed_[this.row_].text = this.displayed_[this.row_].text.slice(0, -1);\n }\n } else if (data === this.ERASE_DISPLAYED_MEMORY_) {\n this.flushDisplayed(packet.pts);\n this.displayed_ = createDisplayBuffer();\n } else if (data === this.ERASE_NON_DISPLAYED_MEMORY_) {\n this.nonDisplayed_ = createDisplayBuffer();\n } else if (data === this.RESUME_DIRECT_CAPTIONING_) {\n if (this.mode_ !== 'paintOn') {\n // NOTE: This should be removed when proper caption positioning is\n // implemented\n this.flushDisplayed(packet.pts);\n this.displayed_ = createDisplayBuffer();\n }\n this.mode_ = 'paintOn';\n this.startPts_ = packet.pts; // Append special characters to caption text\n } else if (this.isSpecialCharacter(char0, char1)) {\n // Bitmask char0 so that we can apply character transformations\n // regardless of field and data channel.\n // Then byte-shift to the left and OR with char1 so we can pass the\n // entire character code to `getCharFromCode`.\n char0 = (char0 & 0x03) << 8;\n text = getCharFromCode(char0 | char1);\n this[this.mode_](packet.pts, text);\n this.column_++; // Append extended characters to caption text\n } else if (this.isExtCharacter(char0, char1)) {\n // Extended characters always follow their \"non-extended\" equivalents.\n // IE if a \"è\" is desired, you'll always receive \"eè\"; non-compliant\n // decoders are supposed to drop the \"è\", while compliant decoders\n // backspace the \"e\" and insert \"è\".\n // Delete the previous character\n if (this.mode_ === 'popOn') {\n this.nonDisplayed_[this.row_].text = this.nonDisplayed_[this.row_].text.slice(0, -1);\n } else {\n this.displayed_[this.row_].text = this.displayed_[this.row_].text.slice(0, -1);\n } // Bitmask char0 so that we can apply character transformations\n // regardless of field and data channel.\n // Then byte-shift to the left and OR with char1 so we can pass the\n // entire character code to `getCharFromCode`.\n\n char0 = (char0 & 0x03) << 8;\n text = getCharFromCode(char0 | char1);\n this[this.mode_](packet.pts, text);\n this.column_++; // Process mid-row codes\n } else if (this.isMidRowCode(char0, char1)) {\n // Attributes are not additive, so clear all formatting\n this.clearFormatting(packet.pts); // According to the standard, mid-row codes\n // should be replaced with spaces, so add one now\n\n this[this.mode_](packet.pts, ' ');\n this.column_++;\n if ((char1 & 0xe) === 0xe) {\n this.addFormatting(packet.pts, ['i']);\n }\n if ((char1 & 0x1) === 0x1) {\n this.addFormatting(packet.pts, ['u']);\n } // Detect offset control codes and adjust cursor\n } else if (this.isOffsetControlCode(char0, char1)) {\n // Cursor position is set by indent PAC (see below) in 4-column\n // increments, with an additional offset code of 1-3 to reach any\n // of the 32 columns specified by CEA-608. So all we need to do\n // here is increment the column cursor by the given offset.\n const offset = char1 & 0x03; // For an offest value 1-3, set the offset for that caption\n // in the non-displayed array.\n\n this.nonDisplayed_[this.row_].offset = offset;\n this.column_ += offset; // Detect PACs (Preamble Address Codes)\n } else if (this.isPAC(char0, char1)) {\n // There's no logic for PAC -> row mapping, so we have to just\n // find the row code in an array and use its index :(\n var row = ROWS.indexOf(data & 0x1f20); // Configure the caption window if we're in roll-up mode\n\n if (this.mode_ === 'rollUp') {\n // This implies that the base row is incorrectly set.\n // As per the recommendation in CEA-608(Base Row Implementation), defer to the number\n // of roll-up rows set.\n if (row - this.rollUpRows_ + 1 < 0) {\n row = this.rollUpRows_ - 1;\n }\n this.setRollUp(packet.pts, row);\n } // Ensure the row is between 0 and 14, otherwise use the most\n // recent or default row.\n\n if (row !== this.row_ && row >= 0 && row <= 14) {\n // formatting is only persistent for current row\n this.clearFormatting(packet.pts);\n this.row_ = row;\n } // All PACs can apply underline, so detect and apply\n // (All odd-numbered second bytes set underline)\n\n if (char1 & 0x1 && this.formatting_.indexOf('u') === -1) {\n this.addFormatting(packet.pts, ['u']);\n }\n if ((data & 0x10) === 0x10) {\n // We've got an indent level code. Each successive even number\n // increments the column cursor by 4, so we can get the desired\n // column position by bit-shifting to the right (to get n/2)\n // and multiplying by 4.\n const indentations = (data & 0xe) >> 1;\n this.column_ = indentations * 4; // add to the number of indentations for positioning\n\n this.nonDisplayed_[this.row_].indent += indentations;\n }\n if (this.isColorPAC(char1)) {\n // it's a color code, though we only support white, which\n // can be either normal or italicized. white italics can be\n // either 0x4e or 0x6e depending on the row, so we just\n // bitwise-and with 0xe to see if italics should be turned on\n if ((char1 & 0xe) === 0xe) {\n this.addFormatting(packet.pts, ['i']);\n }\n } // We have a normal character in char0, and possibly one in char1\n } else if (this.isNormalChar(char0)) {\n if (char1 === 0x00) {\n char1 = null;\n }\n text = getCharFromCode(char0);\n text += getCharFromCode(char1);\n this[this.mode_](packet.pts, text);\n this.column_ += text.length;\n } // finish data processing\n };\n };\n Cea608Stream.prototype = new Stream$7(); // Trigger a cue point that captures the current state of the\n // display buffer\n\n Cea608Stream.prototype.flushDisplayed = function (pts) {\n const logWarning = index => {\n this.trigger('log', {\n level: 'warn',\n message: 'Skipping a malformed 608 caption at index ' + index + '.'\n });\n };\n const content = [];\n this.displayed_.forEach((row, i) => {\n if (row && row.text && row.text.length) {\n try {\n // remove spaces from the start and end of the string\n row.text = row.text.trim();\n } catch (e) {\n // Ordinarily, this shouldn't happen. However, caption\n // parsing errors should not throw exceptions and\n // break playback.\n logWarning(i);\n } // See the below link for more details on the following fields:\n // https://dvcs.w3.org/hg/text-tracks/raw-file/default/608toVTT/608toVTT.html#positioning-in-cea-608\n\n if (row.text.length) {\n content.push({\n // The text to be displayed in the caption from this specific row, with whitespace removed.\n text: row.text,\n // Value between 1 and 15 representing the PAC row used to calculate line height.\n line: i + 1,\n // A number representing the indent position by percentage (CEA-608 PAC indent code).\n // The value will be a number between 10 and 80. Offset is used to add an aditional\n // value to the position if necessary.\n position: 10 + Math.min(70, row.indent * 10) + row.offset * 2.5\n });\n }\n } else if (row === undefined || row === null) {\n logWarning(i);\n }\n });\n if (content.length) {\n this.trigger('data', {\n startPts: this.startPts_,\n endPts: pts,\n content,\n stream: this.name_\n });\n }\n };\n /**\n * Zero out the data, used for startup and on seek\n */\n\n Cea608Stream.prototype.reset = function () {\n this.mode_ = 'popOn'; // When in roll-up mode, the index of the last row that will\n // actually display captions. If a caption is shifted to a row\n // with a lower index than this, it is cleared from the display\n // buffer\n\n this.topRow_ = 0;\n this.startPts_ = 0;\n this.displayed_ = createDisplayBuffer();\n this.nonDisplayed_ = createDisplayBuffer();\n this.lastControlCode_ = null; // Track row and column for proper line-breaking and spacing\n\n this.column_ = 0;\n this.row_ = BOTTOM_ROW;\n this.rollUpRows_ = 2; // This variable holds currently-applied formatting\n\n this.formatting_ = [];\n };\n /**\n * Sets up control code and related constants for this instance\n */\n\n Cea608Stream.prototype.setConstants = function () {\n // The following attributes have these uses:\n // ext_ : char0 for mid-row codes, and the base for extended\n // chars (ext_+0, ext_+1, and ext_+2 are char0s for\n // extended codes)\n // control_: char0 for control codes, except byte-shifted to the\n // left so that we can do this.control_ | CONTROL_CODE\n // offset_: char0 for tab offset codes\n //\n // It's also worth noting that control codes, and _only_ control codes,\n // differ between field 1 and field2. Field 2 control codes are always\n // their field 1 value plus 1. That's why there's the \"| field\" on the\n // control value.\n if (this.dataChannel_ === 0) {\n this.BASE_ = 0x10;\n this.EXT_ = 0x11;\n this.CONTROL_ = (0x14 | this.field_) << 8;\n this.OFFSET_ = 0x17;\n } else if (this.dataChannel_ === 1) {\n this.BASE_ = 0x18;\n this.EXT_ = 0x19;\n this.CONTROL_ = (0x1c | this.field_) << 8;\n this.OFFSET_ = 0x1f;\n } // Constants for the LSByte command codes recognized by Cea608Stream. This\n // list is not exhaustive. For a more comprehensive listing and semantics see\n // http://www.gpo.gov/fdsys/pkg/CFR-2010-title47-vol1/pdf/CFR-2010-title47-vol1-sec15-119.pdf\n // Padding\n\n this.PADDING_ = 0x0000; // Pop-on Mode\n\n this.RESUME_CAPTION_LOADING_ = this.CONTROL_ | 0x20;\n this.END_OF_CAPTION_ = this.CONTROL_ | 0x2f; // Roll-up Mode\n\n this.ROLL_UP_2_ROWS_ = this.CONTROL_ | 0x25;\n this.ROLL_UP_3_ROWS_ = this.CONTROL_ | 0x26;\n this.ROLL_UP_4_ROWS_ = this.CONTROL_ | 0x27;\n this.CARRIAGE_RETURN_ = this.CONTROL_ | 0x2d; // paint-on mode\n\n this.RESUME_DIRECT_CAPTIONING_ = this.CONTROL_ | 0x29; // Erasure\n\n this.BACKSPACE_ = this.CONTROL_ | 0x21;\n this.ERASE_DISPLAYED_MEMORY_ = this.CONTROL_ | 0x2c;\n this.ERASE_NON_DISPLAYED_MEMORY_ = this.CONTROL_ | 0x2e;\n };\n /**\n * Detects if the 2-byte packet data is a special character\n *\n * Special characters have a second byte in the range 0x30 to 0x3f,\n * with the first byte being 0x11 (for data channel 1) or 0x19 (for\n * data channel 2).\n *\n * @param {Integer} char0 The first byte\n * @param {Integer} char1 The second byte\n * @return {Boolean} Whether the 2 bytes are an special character\n */\n\n Cea608Stream.prototype.isSpecialCharacter = function (char0, char1) {\n return char0 === this.EXT_ && char1 >= 0x30 && char1 <= 0x3f;\n };\n /**\n * Detects if the 2-byte packet data is an extended character\n *\n * Extended characters have a second byte in the range 0x20 to 0x3f,\n * with the first byte being 0x12 or 0x13 (for data channel 1) or\n * 0x1a or 0x1b (for data channel 2).\n *\n * @param {Integer} char0 The first byte\n * @param {Integer} char1 The second byte\n * @return {Boolean} Whether the 2 bytes are an extended character\n */\n\n Cea608Stream.prototype.isExtCharacter = function (char0, char1) {\n return (char0 === this.EXT_ + 1 || char0 === this.EXT_ + 2) && char1 >= 0x20 && char1 <= 0x3f;\n };\n /**\n * Detects if the 2-byte packet is a mid-row code\n *\n * Mid-row codes have a second byte in the range 0x20 to 0x2f, with\n * the first byte being 0x11 (for data channel 1) or 0x19 (for data\n * channel 2).\n *\n * @param {Integer} char0 The first byte\n * @param {Integer} char1 The second byte\n * @return {Boolean} Whether the 2 bytes are a mid-row code\n */\n\n Cea608Stream.prototype.isMidRowCode = function (char0, char1) {\n return char0 === this.EXT_ && char1 >= 0x20 && char1 <= 0x2f;\n };\n /**\n * Detects if the 2-byte packet is an offset control code\n *\n * Offset control codes have a second byte in the range 0x21 to 0x23,\n * with the first byte being 0x17 (for data channel 1) or 0x1f (for\n * data channel 2).\n *\n * @param {Integer} char0 The first byte\n * @param {Integer} char1 The second byte\n * @return {Boolean} Whether the 2 bytes are an offset control code\n */\n\n Cea608Stream.prototype.isOffsetControlCode = function (char0, char1) {\n return char0 === this.OFFSET_ && char1 >= 0x21 && char1 <= 0x23;\n };\n /**\n * Detects if the 2-byte packet is a Preamble Address Code\n *\n * PACs have a first byte in the range 0x10 to 0x17 (for data channel 1)\n * or 0x18 to 0x1f (for data channel 2), with the second byte in the\n * range 0x40 to 0x7f.\n *\n * @param {Integer} char0 The first byte\n * @param {Integer} char1 The second byte\n * @return {Boolean} Whether the 2 bytes are a PAC\n */\n\n Cea608Stream.prototype.isPAC = function (char0, char1) {\n return char0 >= this.BASE_ && char0 < this.BASE_ + 8 && char1 >= 0x40 && char1 <= 0x7f;\n };\n /**\n * Detects if a packet's second byte is in the range of a PAC color code\n *\n * PAC color codes have the second byte be in the range 0x40 to 0x4f, or\n * 0x60 to 0x6f.\n *\n * @param {Integer} char1 The second byte\n * @return {Boolean} Whether the byte is a color PAC\n */\n\n Cea608Stream.prototype.isColorPAC = function (char1) {\n return char1 >= 0x40 && char1 <= 0x4f || char1 >= 0x60 && char1 <= 0x7f;\n };\n /**\n * Detects if a single byte is in the range of a normal character\n *\n * Normal text bytes are in the range 0x20 to 0x7f.\n *\n * @param {Integer} char The byte\n * @return {Boolean} Whether the byte is a normal character\n */\n\n Cea608Stream.prototype.isNormalChar = function (char) {\n return char >= 0x20 && char <= 0x7f;\n };\n /**\n * Configures roll-up\n *\n * @param {Integer} pts Current PTS\n * @param {Integer} newBaseRow Used by PACs to slide the current window to\n * a new position\n */\n\n Cea608Stream.prototype.setRollUp = function (pts, newBaseRow) {\n // Reset the base row to the bottom row when switching modes\n if (this.mode_ !== 'rollUp') {\n this.row_ = BOTTOM_ROW;\n this.mode_ = 'rollUp'; // Spec says to wipe memories when switching to roll-up\n\n this.flushDisplayed(pts);\n this.nonDisplayed_ = createDisplayBuffer();\n this.displayed_ = createDisplayBuffer();\n }\n if (newBaseRow !== undefined && newBaseRow !== this.row_) {\n // move currently displayed captions (up or down) to the new base row\n for (var i = 0; i < this.rollUpRows_; i++) {\n this.displayed_[newBaseRow - i] = this.displayed_[this.row_ - i];\n this.displayed_[this.row_ - i] = {\n text: '',\n indent: 0,\n offset: 0\n };\n }\n }\n if (newBaseRow === undefined) {\n newBaseRow = this.row_;\n }\n this.topRow_ = newBaseRow - this.rollUpRows_ + 1;\n }; // Adds the opening HTML tag for the passed character to the caption text,\n // and keeps track of it for later closing\n\n Cea608Stream.prototype.addFormatting = function (pts, format) {\n this.formatting_ = this.formatting_.concat(format);\n var text = format.reduce(function (text, format) {\n return text + '<' + format + '>';\n }, '');\n this[this.mode_](pts, text);\n }; // Adds HTML closing tags for current formatting to caption text and\n // clears remembered formatting\n\n Cea608Stream.prototype.clearFormatting = function (pts) {\n if (!this.formatting_.length) {\n return;\n }\n var text = this.formatting_.reverse().reduce(function (text, format) {\n return text + '';\n }, '');\n this.formatting_ = [];\n this[this.mode_](pts, text);\n }; // Mode Implementations\n\n Cea608Stream.prototype.popOn = function (pts, text) {\n var baseRow = this.nonDisplayed_[this.row_].text; // buffer characters\n\n baseRow += text;\n this.nonDisplayed_[this.row_].text = baseRow;\n };\n Cea608Stream.prototype.rollUp = function (pts, text) {\n var baseRow = this.displayed_[this.row_].text;\n baseRow += text;\n this.displayed_[this.row_].text = baseRow;\n };\n Cea608Stream.prototype.shiftRowsUp_ = function () {\n var i; // clear out inactive rows\n\n for (i = 0; i < this.topRow_; i++) {\n this.displayed_[i] = {\n text: '',\n indent: 0,\n offset: 0\n };\n }\n for (i = this.row_ + 1; i < BOTTOM_ROW + 1; i++) {\n this.displayed_[i] = {\n text: '',\n indent: 0,\n offset: 0\n };\n } // shift displayed rows up\n\n for (i = this.topRow_; i < this.row_; i++) {\n this.displayed_[i] = this.displayed_[i + 1];\n } // clear out the bottom row\n\n this.displayed_[this.row_] = {\n text: '',\n indent: 0,\n offset: 0\n };\n };\n Cea608Stream.prototype.paintOn = function (pts, text) {\n var baseRow = this.displayed_[this.row_].text;\n baseRow += text;\n this.displayed_[this.row_].text = baseRow;\n }; // exports\n\n var captionStream = {\n CaptionStream: CaptionStream$2,\n Cea608Stream: Cea608Stream,\n Cea708Stream: Cea708Stream\n };\n /**\n * mux.js\n *\n * Copyright (c) Brightcove\n * Licensed Apache-2.0 https://github.com/videojs/mux.js/blob/master/LICENSE\n */\n\n var streamTypes = {\n H264_STREAM_TYPE: 0x1B,\n ADTS_STREAM_TYPE: 0x0F,\n METADATA_STREAM_TYPE: 0x15\n };\n /**\n * mux.js\n *\n * Copyright (c) Brightcove\n * Licensed Apache-2.0 https://github.com/videojs/mux.js/blob/master/LICENSE\n *\n * Accepts program elementary stream (PES) data events and corrects\n * decode and presentation time stamps to account for a rollover\n * of the 33 bit value.\n */\n\n var Stream$6 = stream;\n var MAX_TS = 8589934592;\n var RO_THRESH = 4294967296;\n var TYPE_SHARED = 'shared';\n var handleRollover$1 = function (value, reference) {\n var direction = 1;\n if (value > reference) {\n // If the current timestamp value is greater than our reference timestamp and we detect a\n // timestamp rollover, this means the roll over is happening in the opposite direction.\n // Example scenario: Enter a long stream/video just after a rollover occurred. The reference\n // point will be set to a small number, e.g. 1. The user then seeks backwards over the\n // rollover point. In loading this segment, the timestamp values will be very large,\n // e.g. 2^33 - 1. Since this comes before the data we loaded previously, we want to adjust\n // the time stamp to be `value - 2^33`.\n direction = -1;\n } // Note: A seek forwards or back that is greater than the RO_THRESH (2^32, ~13 hours) will\n // cause an incorrect adjustment.\n\n while (Math.abs(reference - value) > RO_THRESH) {\n value += direction * MAX_TS;\n }\n return value;\n };\n var TimestampRolloverStream$1 = function (type) {\n var lastDTS, referenceDTS;\n TimestampRolloverStream$1.prototype.init.call(this); // The \"shared\" type is used in cases where a stream will contain muxed\n // video and audio. We could use `undefined` here, but having a string\n // makes debugging a little clearer.\n\n this.type_ = type || TYPE_SHARED;\n this.push = function (data) {\n /**\n * Rollover stream expects data from elementary stream.\n * Elementary stream can push forward 2 types of data\n * - Parsed Video/Audio/Timed-metadata PES (packetized elementary stream) packets\n * - Tracks metadata from PMT (Program Map Table)\n * Rollover stream expects pts/dts info to be available, since it stores lastDTS\n * We should ignore non-PES packets since they may override lastDTS to undefined.\n * lastDTS is important to signal the next segments\n * about rollover from the previous segments.\n */\n if (data.type === 'metadata') {\n this.trigger('data', data);\n return;\n } // Any \"shared\" rollover streams will accept _all_ data. Otherwise,\n // streams will only accept data that matches their type.\n\n if (this.type_ !== TYPE_SHARED && data.type !== this.type_) {\n return;\n }\n if (referenceDTS === undefined) {\n referenceDTS = data.dts;\n }\n data.dts = handleRollover$1(data.dts, referenceDTS);\n data.pts = handleRollover$1(data.pts, referenceDTS);\n lastDTS = data.dts;\n this.trigger('data', data);\n };\n this.flush = function () {\n referenceDTS = lastDTS;\n this.trigger('done');\n };\n this.endTimeline = function () {\n this.flush();\n this.trigger('endedtimeline');\n };\n this.discontinuity = function () {\n referenceDTS = void 0;\n lastDTS = void 0;\n };\n this.reset = function () {\n this.discontinuity();\n this.trigger('reset');\n };\n };\n TimestampRolloverStream$1.prototype = new Stream$6();\n var timestampRolloverStream = {\n TimestampRolloverStream: TimestampRolloverStream$1,\n handleRollover: handleRollover$1\n }; // Once IE11 support is dropped, this function should be removed.\n\n var typedArrayIndexOf$1 = (typedArray, element, fromIndex) => {\n if (!typedArray) {\n return -1;\n }\n var currentIndex = fromIndex;\n for (; currentIndex < typedArray.length; currentIndex++) {\n if (typedArray[currentIndex] === element) {\n return currentIndex;\n }\n }\n return -1;\n };\n var typedArray = {\n typedArrayIndexOf: typedArrayIndexOf$1\n };\n /**\n * mux.js\n *\n * Copyright (c) Brightcove\n * Licensed Apache-2.0 https://github.com/videojs/mux.js/blob/master/LICENSE\n *\n * Tools for parsing ID3 frame data\n * @see http://id3.org/id3v2.3.0\n */\n\n var typedArrayIndexOf = typedArray.typedArrayIndexOf,\n // Frames that allow different types of text encoding contain a text\n // encoding description byte [ID3v2.4.0 section 4.]\n textEncodingDescriptionByte = {\n Iso88591: 0x00,\n // ISO-8859-1, terminated with \\0.\n Utf16: 0x01,\n // UTF-16 encoded Unicode BOM, terminated with \\0\\0\n Utf16be: 0x02,\n // UTF-16BE encoded Unicode, without BOM, terminated with \\0\\0\n Utf8: 0x03 // UTF-8 encoded Unicode, terminated with \\0\n },\n // return a percent-encoded representation of the specified byte range\n // @see http://en.wikipedia.org/wiki/Percent-encoding \n percentEncode$1 = function (bytes, start, end) {\n var i,\n result = '';\n for (i = start; i < end; i++) {\n result += '%' + ('00' + bytes[i].toString(16)).slice(-2);\n }\n return result;\n },\n // return the string representation of the specified byte range,\n // interpreted as UTf-8.\n parseUtf8 = function (bytes, start, end) {\n return decodeURIComponent(percentEncode$1(bytes, start, end));\n },\n // return the string representation of the specified byte range,\n // interpreted as ISO-8859-1.\n parseIso88591$1 = function (bytes, start, end) {\n return unescape(percentEncode$1(bytes, start, end)); // jshint ignore:line\n },\n parseSyncSafeInteger$1 = function (data) {\n return data[0] << 21 | data[1] << 14 | data[2] << 7 | data[3];\n },\n frameParsers = {\n 'APIC': function (frame) {\n var i = 1,\n mimeTypeEndIndex,\n descriptionEndIndex,\n LINK_MIME_TYPE = '-->';\n if (frame.data[0] !== textEncodingDescriptionByte.Utf8) {\n // ignore frames with unrecognized character encodings\n return;\n } // parsing fields [ID3v2.4.0 section 4.14.]\n\n mimeTypeEndIndex = typedArrayIndexOf(frame.data, 0, i);\n if (mimeTypeEndIndex < 0) {\n // malformed frame\n return;\n } // parsing Mime type field (terminated with \\0)\n\n frame.mimeType = parseIso88591$1(frame.data, i, mimeTypeEndIndex);\n i = mimeTypeEndIndex + 1; // parsing 1-byte Picture Type field\n\n frame.pictureType = frame.data[i];\n i++;\n descriptionEndIndex = typedArrayIndexOf(frame.data, 0, i);\n if (descriptionEndIndex < 0) {\n // malformed frame\n return;\n } // parsing Description field (terminated with \\0)\n\n frame.description = parseUtf8(frame.data, i, descriptionEndIndex);\n i = descriptionEndIndex + 1;\n if (frame.mimeType === LINK_MIME_TYPE) {\n // parsing Picture Data field as URL (always represented as ISO-8859-1 [ID3v2.4.0 section 4.])\n frame.url = parseIso88591$1(frame.data, i, frame.data.length);\n } else {\n // parsing Picture Data field as binary data\n frame.pictureData = frame.data.subarray(i, frame.data.length);\n }\n },\n 'T*': function (frame) {\n if (frame.data[0] !== textEncodingDescriptionByte.Utf8) {\n // ignore frames with unrecognized character encodings\n return;\n } // parse text field, do not include null terminator in the frame value\n // frames that allow different types of encoding contain terminated text [ID3v2.4.0 section 4.]\n\n frame.value = parseUtf8(frame.data, 1, frame.data.length).replace(/\\0*$/, ''); // text information frames supports multiple strings, stored as a terminator separated list [ID3v2.4.0 section 4.2.]\n\n frame.values = frame.value.split('\\0');\n },\n 'TXXX': function (frame) {\n var descriptionEndIndex;\n if (frame.data[0] !== textEncodingDescriptionByte.Utf8) {\n // ignore frames with unrecognized character encodings\n return;\n }\n descriptionEndIndex = typedArrayIndexOf(frame.data, 0, 1);\n if (descriptionEndIndex === -1) {\n return;\n } // parse the text fields\n\n frame.description = parseUtf8(frame.data, 1, descriptionEndIndex); // do not include the null terminator in the tag value\n // frames that allow different types of encoding contain terminated text\n // [ID3v2.4.0 section 4.]\n\n frame.value = parseUtf8(frame.data, descriptionEndIndex + 1, frame.data.length).replace(/\\0*$/, '');\n frame.data = frame.value;\n },\n 'W*': function (frame) {\n // parse URL field; URL fields are always represented as ISO-8859-1 [ID3v2.4.0 section 4.]\n // if the value is followed by a string termination all the following information should be ignored [ID3v2.4.0 section 4.3]\n frame.url = parseIso88591$1(frame.data, 0, frame.data.length).replace(/\\0.*$/, '');\n },\n 'WXXX': function (frame) {\n var descriptionEndIndex;\n if (frame.data[0] !== textEncodingDescriptionByte.Utf8) {\n // ignore frames with unrecognized character encodings\n return;\n }\n descriptionEndIndex = typedArrayIndexOf(frame.data, 0, 1);\n if (descriptionEndIndex === -1) {\n return;\n } // parse the description and URL fields\n\n frame.description = parseUtf8(frame.data, 1, descriptionEndIndex); // URL fields are always represented as ISO-8859-1 [ID3v2.4.0 section 4.]\n // if the value is followed by a string termination all the following information\n // should be ignored [ID3v2.4.0 section 4.3]\n\n frame.url = parseIso88591$1(frame.data, descriptionEndIndex + 1, frame.data.length).replace(/\\0.*$/, '');\n },\n 'PRIV': function (frame) {\n var i;\n for (i = 0; i < frame.data.length; i++) {\n if (frame.data[i] === 0) {\n // parse the description and URL fields\n frame.owner = parseIso88591$1(frame.data, 0, i);\n break;\n }\n }\n frame.privateData = frame.data.subarray(i + 1);\n frame.data = frame.privateData;\n }\n };\n var parseId3Frames$1 = function (data) {\n var frameSize,\n frameHeader,\n frameStart = 10,\n tagSize = 0,\n frames = []; // If we don't have enough data for a header, 10 bytes, \n // or 'ID3' in the first 3 bytes this is not a valid ID3 tag.\n\n if (data.length < 10 || data[0] !== 'I'.charCodeAt(0) || data[1] !== 'D'.charCodeAt(0) || data[2] !== '3'.charCodeAt(0)) {\n return;\n } // the frame size is transmitted as a 28-bit integer in the\n // last four bytes of the ID3 header.\n // The most significant bit of each byte is dropped and the\n // results concatenated to recover the actual value.\n\n tagSize = parseSyncSafeInteger$1(data.subarray(6, 10)); // ID3 reports the tag size excluding the header but it's more\n // convenient for our comparisons to include it\n\n tagSize += 10; // check bit 6 of byte 5 for the extended header flag.\n\n var hasExtendedHeader = data[5] & 0x40;\n if (hasExtendedHeader) {\n // advance the frame start past the extended header\n frameStart += 4; // header size field\n\n frameStart += parseSyncSafeInteger$1(data.subarray(10, 14));\n tagSize -= parseSyncSafeInteger$1(data.subarray(16, 20)); // clip any padding off the end\n } // parse one or more ID3 frames\n // http://id3.org/id3v2.3.0#ID3v2_frame_overview\n\n do {\n // determine the number of bytes in this frame\n frameSize = parseSyncSafeInteger$1(data.subarray(frameStart + 4, frameStart + 8));\n if (frameSize < 1) {\n break;\n }\n frameHeader = String.fromCharCode(data[frameStart], data[frameStart + 1], data[frameStart + 2], data[frameStart + 3]);\n var frame = {\n id: frameHeader,\n data: data.subarray(frameStart + 10, frameStart + frameSize + 10)\n };\n frame.key = frame.id; // parse frame values\n\n if (frameParsers[frame.id]) {\n // use frame specific parser\n frameParsers[frame.id](frame);\n } else if (frame.id[0] === 'T') {\n // use text frame generic parser\n frameParsers['T*'](frame);\n } else if (frame.id[0] === 'W') {\n // use URL link frame generic parser\n frameParsers['W*'](frame);\n }\n frames.push(frame);\n frameStart += 10; // advance past the frame header\n\n frameStart += frameSize; // advance past the frame body\n } while (frameStart < tagSize);\n return frames;\n };\n var parseId3 = {\n parseId3Frames: parseId3Frames$1,\n parseSyncSafeInteger: parseSyncSafeInteger$1,\n frameParsers: frameParsers\n };\n /**\n * mux.js\n *\n * Copyright (c) Brightcove\n * Licensed Apache-2.0 https://github.com/videojs/mux.js/blob/master/LICENSE\n *\n * Accepts program elementary stream (PES) data events and parses out\n * ID3 metadata from them, if present.\n * @see http://id3.org/id3v2.3.0\n */\n\n var Stream$5 = stream,\n StreamTypes$3 = streamTypes,\n id3 = parseId3,\n MetadataStream;\n MetadataStream = function (options) {\n var settings = {\n // the bytes of the program-level descriptor field in MP2T\n // see ISO/IEC 13818-1:2013 (E), section 2.6 \"Program and\n // program element descriptors\"\n descriptor: options && options.descriptor\n },\n // the total size in bytes of the ID3 tag being parsed\n tagSize = 0,\n // tag data that is not complete enough to be parsed\n buffer = [],\n // the total number of bytes currently in the buffer\n bufferSize = 0,\n i;\n MetadataStream.prototype.init.call(this); // calculate the text track in-band metadata track dispatch type\n // https://html.spec.whatwg.org/multipage/embedded-content.html#steps-to-expose-a-media-resource-specific-text-track\n\n this.dispatchType = StreamTypes$3.METADATA_STREAM_TYPE.toString(16);\n if (settings.descriptor) {\n for (i = 0; i < settings.descriptor.length; i++) {\n this.dispatchType += ('00' + settings.descriptor[i].toString(16)).slice(-2);\n }\n }\n this.push = function (chunk) {\n var tag, frameStart, frameSize, frame, i, frameHeader;\n if (chunk.type !== 'timed-metadata') {\n return;\n } // if data_alignment_indicator is set in the PES header,\n // we must have the start of a new ID3 tag. Assume anything\n // remaining in the buffer was malformed and throw it out\n\n if (chunk.dataAlignmentIndicator) {\n bufferSize = 0;\n buffer.length = 0;\n } // ignore events that don't look like ID3 data\n\n if (buffer.length === 0 && (chunk.data.length < 10 || chunk.data[0] !== 'I'.charCodeAt(0) || chunk.data[1] !== 'D'.charCodeAt(0) || chunk.data[2] !== '3'.charCodeAt(0))) {\n this.trigger('log', {\n level: 'warn',\n message: 'Skipping unrecognized metadata packet'\n });\n return;\n } // add this chunk to the data we've collected so far\n\n buffer.push(chunk);\n bufferSize += chunk.data.byteLength; // grab the size of the entire frame from the ID3 header\n\n if (buffer.length === 1) {\n // the frame size is transmitted as a 28-bit integer in the\n // last four bytes of the ID3 header.\n // The most significant bit of each byte is dropped and the\n // results concatenated to recover the actual value.\n tagSize = id3.parseSyncSafeInteger(chunk.data.subarray(6, 10)); // ID3 reports the tag size excluding the header but it's more\n // convenient for our comparisons to include it\n\n tagSize += 10;\n } // if the entire frame has not arrived, wait for more data\n\n if (bufferSize < tagSize) {\n return;\n } // collect the entire frame so it can be parsed\n\n tag = {\n data: new Uint8Array(tagSize),\n frames: [],\n pts: buffer[0].pts,\n dts: buffer[0].dts\n };\n for (i = 0; i < tagSize;) {\n tag.data.set(buffer[0].data.subarray(0, tagSize - i), i);\n i += buffer[0].data.byteLength;\n bufferSize -= buffer[0].data.byteLength;\n buffer.shift();\n } // find the start of the first frame and the end of the tag\n\n frameStart = 10;\n if (tag.data[5] & 0x40) {\n // advance the frame start past the extended header\n frameStart += 4; // header size field\n\n frameStart += id3.parseSyncSafeInteger(tag.data.subarray(10, 14)); // clip any padding off the end\n\n tagSize -= id3.parseSyncSafeInteger(tag.data.subarray(16, 20));\n } // parse one or more ID3 frames\n // http://id3.org/id3v2.3.0#ID3v2_frame_overview\n\n do {\n // determine the number of bytes in this frame\n frameSize = id3.parseSyncSafeInteger(tag.data.subarray(frameStart + 4, frameStart + 8));\n if (frameSize < 1) {\n this.trigger('log', {\n level: 'warn',\n message: 'Malformed ID3 frame encountered. Skipping remaining metadata parsing.'\n }); // If the frame is malformed, don't parse any further frames but allow previous valid parsed frames\n // to be sent along.\n\n break;\n }\n frameHeader = String.fromCharCode(tag.data[frameStart], tag.data[frameStart + 1], tag.data[frameStart + 2], tag.data[frameStart + 3]);\n frame = {\n id: frameHeader,\n data: tag.data.subarray(frameStart + 10, frameStart + frameSize + 10)\n };\n frame.key = frame.id; // parse frame values\n\n if (id3.frameParsers[frame.id]) {\n // use frame specific parser\n id3.frameParsers[frame.id](frame);\n } else if (frame.id[0] === 'T') {\n // use text frame generic parser\n id3.frameParsers['T*'](frame);\n } else if (frame.id[0] === 'W') {\n // use URL link frame generic parser\n id3.frameParsers['W*'](frame);\n } // handle the special PRIV frame used to indicate the start\n // time for raw AAC data\n\n if (frame.owner === 'com.apple.streaming.transportStreamTimestamp') {\n var d = frame.data,\n size = (d[3] & 0x01) << 30 | d[4] << 22 | d[5] << 14 | d[6] << 6 | d[7] >>> 2;\n size *= 4;\n size += d[7] & 0x03;\n frame.timeStamp = size; // in raw AAC, all subsequent data will be timestamped based\n // on the value of this frame\n // we couldn't have known the appropriate pts and dts before\n // parsing this ID3 tag so set those values now\n\n if (tag.pts === undefined && tag.dts === undefined) {\n tag.pts = frame.timeStamp;\n tag.dts = frame.timeStamp;\n }\n this.trigger('timestamp', frame);\n }\n tag.frames.push(frame);\n frameStart += 10; // advance past the frame header\n\n frameStart += frameSize; // advance past the frame body\n } while (frameStart < tagSize);\n this.trigger('data', tag);\n };\n };\n MetadataStream.prototype = new Stream$5();\n var metadataStream = MetadataStream;\n /**\n * mux.js\n *\n * Copyright (c) Brightcove\n * Licensed Apache-2.0 https://github.com/videojs/mux.js/blob/master/LICENSE\n *\n * A stream-based mp2t to mp4 converter. This utility can be used to\n * deliver mp4s to a SourceBuffer on platforms that support native\n * Media Source Extensions.\n */\n\n var Stream$4 = stream,\n CaptionStream$1 = captionStream,\n StreamTypes$2 = streamTypes,\n TimestampRolloverStream = timestampRolloverStream.TimestampRolloverStream; // object types\n\n var TransportPacketStream, TransportParseStream, ElementaryStream; // constants\n\n var MP2T_PACKET_LENGTH$1 = 188,\n // bytes\n SYNC_BYTE$1 = 0x47;\n /**\n * Splits an incoming stream of binary data into MPEG-2 Transport\n * Stream packets.\n */\n\n TransportPacketStream = function () {\n var buffer = new Uint8Array(MP2T_PACKET_LENGTH$1),\n bytesInBuffer = 0;\n TransportPacketStream.prototype.init.call(this); // Deliver new bytes to the stream.\n\n /**\n * Split a stream of data into M2TS packets\n **/\n\n this.push = function (bytes) {\n var startIndex = 0,\n endIndex = MP2T_PACKET_LENGTH$1,\n everything; // If there are bytes remaining from the last segment, prepend them to the\n // bytes that were pushed in\n\n if (bytesInBuffer) {\n everything = new Uint8Array(bytes.byteLength + bytesInBuffer);\n everything.set(buffer.subarray(0, bytesInBuffer));\n everything.set(bytes, bytesInBuffer);\n bytesInBuffer = 0;\n } else {\n everything = bytes;\n } // While we have enough data for a packet\n\n while (endIndex < everything.byteLength) {\n // Look for a pair of start and end sync bytes in the data..\n if (everything[startIndex] === SYNC_BYTE$1 && everything[endIndex] === SYNC_BYTE$1) {\n // We found a packet so emit it and jump one whole packet forward in\n // the stream\n this.trigger('data', everything.subarray(startIndex, endIndex));\n startIndex += MP2T_PACKET_LENGTH$1;\n endIndex += MP2T_PACKET_LENGTH$1;\n continue;\n } // If we get here, we have somehow become de-synchronized and we need to step\n // forward one byte at a time until we find a pair of sync bytes that denote\n // a packet\n\n startIndex++;\n endIndex++;\n } // If there was some data left over at the end of the segment that couldn't\n // possibly be a whole packet, keep it because it might be the start of a packet\n // that continues in the next segment\n\n if (startIndex < everything.byteLength) {\n buffer.set(everything.subarray(startIndex), 0);\n bytesInBuffer = everything.byteLength - startIndex;\n }\n };\n /**\n * Passes identified M2TS packets to the TransportParseStream to be parsed\n **/\n\n this.flush = function () {\n // If the buffer contains a whole packet when we are being flushed, emit it\n // and empty the buffer. Otherwise hold onto the data because it may be\n // important for decoding the next segment\n if (bytesInBuffer === MP2T_PACKET_LENGTH$1 && buffer[0] === SYNC_BYTE$1) {\n this.trigger('data', buffer);\n bytesInBuffer = 0;\n }\n this.trigger('done');\n };\n this.endTimeline = function () {\n this.flush();\n this.trigger('endedtimeline');\n };\n this.reset = function () {\n bytesInBuffer = 0;\n this.trigger('reset');\n };\n };\n TransportPacketStream.prototype = new Stream$4();\n /**\n * Accepts an MP2T TransportPacketStream and emits data events with parsed\n * forms of the individual transport stream packets.\n */\n\n TransportParseStream = function () {\n var parsePsi, parsePat, parsePmt, self;\n TransportParseStream.prototype.init.call(this);\n self = this;\n this.packetsWaitingForPmt = [];\n this.programMapTable = undefined;\n parsePsi = function (payload, psi) {\n var offset = 0; // PSI packets may be split into multiple sections and those\n // sections may be split into multiple packets. If a PSI\n // section starts in this packet, the payload_unit_start_indicator\n // will be true and the first byte of the payload will indicate\n // the offset from the current position to the start of the\n // section.\n\n if (psi.payloadUnitStartIndicator) {\n offset += payload[offset] + 1;\n }\n if (psi.type === 'pat') {\n parsePat(payload.subarray(offset), psi);\n } else {\n parsePmt(payload.subarray(offset), psi);\n }\n };\n parsePat = function (payload, pat) {\n pat.section_number = payload[7]; // eslint-disable-line camelcase\n\n pat.last_section_number = payload[8]; // eslint-disable-line camelcase\n // skip the PSI header and parse the first PMT entry\n\n self.pmtPid = (payload[10] & 0x1F) << 8 | payload[11];\n pat.pmtPid = self.pmtPid;\n };\n /**\n * Parse out the relevant fields of a Program Map Table (PMT).\n * @param payload {Uint8Array} the PMT-specific portion of an MP2T\n * packet. The first byte in this array should be the table_id\n * field.\n * @param pmt {object} the object that should be decorated with\n * fields parsed from the PMT.\n */\n\n parsePmt = function (payload, pmt) {\n var sectionLength, tableEnd, programInfoLength, offset; // PMTs can be sent ahead of the time when they should actually\n // take effect. We don't believe this should ever be the case\n // for HLS but we'll ignore \"forward\" PMT declarations if we see\n // them. Future PMT declarations have the current_next_indicator\n // set to zero.\n\n if (!(payload[5] & 0x01)) {\n return;\n } // overwrite any existing program map table\n\n self.programMapTable = {\n video: null,\n audio: null,\n 'timed-metadata': {}\n }; // the mapping table ends at the end of the current section\n\n sectionLength = (payload[1] & 0x0f) << 8 | payload[2];\n tableEnd = 3 + sectionLength - 4; // to determine where the table is, we have to figure out how\n // long the program info descriptors are\n\n programInfoLength = (payload[10] & 0x0f) << 8 | payload[11]; // advance the offset to the first entry in the mapping table\n\n offset = 12 + programInfoLength;\n while (offset < tableEnd) {\n var streamType = payload[offset];\n var pid = (payload[offset + 1] & 0x1F) << 8 | payload[offset + 2]; // only map a single elementary_pid for audio and video stream types\n // TODO: should this be done for metadata too? for now maintain behavior of\n // multiple metadata streams\n\n if (streamType === StreamTypes$2.H264_STREAM_TYPE && self.programMapTable.video === null) {\n self.programMapTable.video = pid;\n } else if (streamType === StreamTypes$2.ADTS_STREAM_TYPE && self.programMapTable.audio === null) {\n self.programMapTable.audio = pid;\n } else if (streamType === StreamTypes$2.METADATA_STREAM_TYPE) {\n // map pid to stream type for metadata streams\n self.programMapTable['timed-metadata'][pid] = streamType;\n } // move to the next table entry\n // skip past the elementary stream descriptors, if present\n\n offset += ((payload[offset + 3] & 0x0F) << 8 | payload[offset + 4]) + 5;\n } // record the map on the packet as well\n\n pmt.programMapTable = self.programMapTable;\n };\n /**\n * Deliver a new MP2T packet to the next stream in the pipeline.\n */\n\n this.push = function (packet) {\n var result = {},\n offset = 4;\n result.payloadUnitStartIndicator = !!(packet[1] & 0x40); // pid is a 13-bit field starting at the last bit of packet[1]\n\n result.pid = packet[1] & 0x1f;\n result.pid <<= 8;\n result.pid |= packet[2]; // if an adaption field is present, its length is specified by the\n // fifth byte of the TS packet header. The adaptation field is\n // used to add stuffing to PES packets that don't fill a complete\n // TS packet, and to specify some forms of timing and control data\n // that we do not currently use.\n\n if ((packet[3] & 0x30) >>> 4 > 0x01) {\n offset += packet[offset] + 1;\n } // parse the rest of the packet based on the type\n\n if (result.pid === 0) {\n result.type = 'pat';\n parsePsi(packet.subarray(offset), result);\n this.trigger('data', result);\n } else if (result.pid === this.pmtPid) {\n result.type = 'pmt';\n parsePsi(packet.subarray(offset), result);\n this.trigger('data', result); // if there are any packets waiting for a PMT to be found, process them now\n\n while (this.packetsWaitingForPmt.length) {\n this.processPes_.apply(this, this.packetsWaitingForPmt.shift());\n }\n } else if (this.programMapTable === undefined) {\n // When we have not seen a PMT yet, defer further processing of\n // PES packets until one has been parsed\n this.packetsWaitingForPmt.push([packet, offset, result]);\n } else {\n this.processPes_(packet, offset, result);\n }\n };\n this.processPes_ = function (packet, offset, result) {\n // set the appropriate stream type\n if (result.pid === this.programMapTable.video) {\n result.streamType = StreamTypes$2.H264_STREAM_TYPE;\n } else if (result.pid === this.programMapTable.audio) {\n result.streamType = StreamTypes$2.ADTS_STREAM_TYPE;\n } else {\n // if not video or audio, it is timed-metadata or unknown\n // if unknown, streamType will be undefined\n result.streamType = this.programMapTable['timed-metadata'][result.pid];\n }\n result.type = 'pes';\n result.data = packet.subarray(offset);\n this.trigger('data', result);\n };\n };\n TransportParseStream.prototype = new Stream$4();\n TransportParseStream.STREAM_TYPES = {\n h264: 0x1b,\n adts: 0x0f\n };\n /**\n * Reconsistutes program elementary stream (PES) packets from parsed\n * transport stream packets. That is, if you pipe an\n * mp2t.TransportParseStream into a mp2t.ElementaryStream, the output\n * events will be events which capture the bytes for individual PES\n * packets plus relevant metadata that has been extracted from the\n * container.\n */\n\n ElementaryStream = function () {\n var self = this,\n segmentHadPmt = false,\n // PES packet fragments\n video = {\n data: [],\n size: 0\n },\n audio = {\n data: [],\n size: 0\n },\n timedMetadata = {\n data: [],\n size: 0\n },\n programMapTable,\n parsePes = function (payload, pes) {\n var ptsDtsFlags;\n const startPrefix = payload[0] << 16 | payload[1] << 8 | payload[2]; // default to an empty array\n\n pes.data = new Uint8Array(); // In certain live streams, the start of a TS fragment has ts packets\n // that are frame data that is continuing from the previous fragment. This\n // is to check that the pes data is the start of a new pes payload\n\n if (startPrefix !== 1) {\n return;\n } // get the packet length, this will be 0 for video\n\n pes.packetLength = 6 + (payload[4] << 8 | payload[5]); // find out if this packets starts a new keyframe\n\n pes.dataAlignmentIndicator = (payload[6] & 0x04) !== 0; // PES packets may be annotated with a PTS value, or a PTS value\n // and a DTS value. Determine what combination of values is\n // available to work with.\n\n ptsDtsFlags = payload[7]; // PTS and DTS are normally stored as a 33-bit number. Javascript\n // performs all bitwise operations on 32-bit integers but javascript\n // supports a much greater range (52-bits) of integer using standard\n // mathematical operations.\n // We construct a 31-bit value using bitwise operators over the 31\n // most significant bits and then multiply by 4 (equal to a left-shift\n // of 2) before we add the final 2 least significant bits of the\n // timestamp (equal to an OR.)\n\n if (ptsDtsFlags & 0xC0) {\n // the PTS and DTS are not written out directly. For information\n // on how they are encoded, see\n // http://dvd.sourceforge.net/dvdinfo/pes-hdr.html\n pes.pts = (payload[9] & 0x0E) << 27 | (payload[10] & 0xFF) << 20 | (payload[11] & 0xFE) << 12 | (payload[12] & 0xFF) << 5 | (payload[13] & 0xFE) >>> 3;\n pes.pts *= 4; // Left shift by 2\n\n pes.pts += (payload[13] & 0x06) >>> 1; // OR by the two LSBs\n\n pes.dts = pes.pts;\n if (ptsDtsFlags & 0x40) {\n pes.dts = (payload[14] & 0x0E) << 27 | (payload[15] & 0xFF) << 20 | (payload[16] & 0xFE) << 12 | (payload[17] & 0xFF) << 5 | (payload[18] & 0xFE) >>> 3;\n pes.dts *= 4; // Left shift by 2\n\n pes.dts += (payload[18] & 0x06) >>> 1; // OR by the two LSBs\n }\n } // the data section starts immediately after the PES header.\n // pes_header_data_length specifies the number of header bytes\n // that follow the last byte of the field.\n\n pes.data = payload.subarray(9 + payload[8]);\n },\n /**\n * Pass completely parsed PES packets to the next stream in the pipeline\n **/\n flushStream = function (stream, type, forceFlush) {\n var packetData = new Uint8Array(stream.size),\n event = {\n type: type\n },\n i = 0,\n offset = 0,\n packetFlushable = false,\n fragment; // do nothing if there is not enough buffered data for a complete\n // PES header\n\n if (!stream.data.length || stream.size < 9) {\n return;\n }\n event.trackId = stream.data[0].pid; // reassemble the packet\n\n for (i = 0; i < stream.data.length; i++) {\n fragment = stream.data[i];\n packetData.set(fragment.data, offset);\n offset += fragment.data.byteLength;\n } // parse assembled packet's PES header\n\n parsePes(packetData, event); // non-video PES packets MUST have a non-zero PES_packet_length\n // check that there is enough stream data to fill the packet\n\n packetFlushable = type === 'video' || event.packetLength <= stream.size; // flush pending packets if the conditions are right\n\n if (forceFlush || packetFlushable) {\n stream.size = 0;\n stream.data.length = 0;\n } // only emit packets that are complete. this is to avoid assembling\n // incomplete PES packets due to poor segmentation\n\n if (packetFlushable) {\n self.trigger('data', event);\n }\n };\n ElementaryStream.prototype.init.call(this);\n /**\n * Identifies M2TS packet types and parses PES packets using metadata\n * parsed from the PMT\n **/\n\n this.push = function (data) {\n ({\n pat: function () {// we have to wait for the PMT to arrive as well before we\n // have any meaningful metadata\n },\n pes: function () {\n var stream, streamType;\n switch (data.streamType) {\n case StreamTypes$2.H264_STREAM_TYPE:\n stream = video;\n streamType = 'video';\n break;\n case StreamTypes$2.ADTS_STREAM_TYPE:\n stream = audio;\n streamType = 'audio';\n break;\n case StreamTypes$2.METADATA_STREAM_TYPE:\n stream = timedMetadata;\n streamType = 'timed-metadata';\n break;\n default:\n // ignore unknown stream types\n return;\n } // if a new packet is starting, we can flush the completed\n // packet\n\n if (data.payloadUnitStartIndicator) {\n flushStream(stream, streamType, true);\n } // buffer this fragment until we are sure we've received the\n // complete payload\n\n stream.data.push(data);\n stream.size += data.data.byteLength;\n },\n pmt: function () {\n var event = {\n type: 'metadata',\n tracks: []\n };\n programMapTable = data.programMapTable; // translate audio and video streams to tracks\n\n if (programMapTable.video !== null) {\n event.tracks.push({\n timelineStartInfo: {\n baseMediaDecodeTime: 0\n },\n id: +programMapTable.video,\n codec: 'avc',\n type: 'video'\n });\n }\n if (programMapTable.audio !== null) {\n event.tracks.push({\n timelineStartInfo: {\n baseMediaDecodeTime: 0\n },\n id: +programMapTable.audio,\n codec: 'adts',\n type: 'audio'\n });\n }\n segmentHadPmt = true;\n self.trigger('data', event);\n }\n })[data.type]();\n };\n this.reset = function () {\n video.size = 0;\n video.data.length = 0;\n audio.size = 0;\n audio.data.length = 0;\n this.trigger('reset');\n };\n /**\n * Flush any remaining input. Video PES packets may be of variable\n * length. Normally, the start of a new video packet can trigger the\n * finalization of the previous packet. That is not possible if no\n * more video is forthcoming, however. In that case, some other\n * mechanism (like the end of the file) has to be employed. When it is\n * clear that no additional data is forthcoming, calling this method\n * will flush the buffered packets.\n */\n\n this.flushStreams_ = function () {\n // !!THIS ORDER IS IMPORTANT!!\n // video first then audio\n flushStream(video, 'video');\n flushStream(audio, 'audio');\n flushStream(timedMetadata, 'timed-metadata');\n };\n this.flush = function () {\n // if on flush we haven't had a pmt emitted\n // and we have a pmt to emit. emit the pmt\n // so that we trigger a trackinfo downstream.\n if (!segmentHadPmt && programMapTable) {\n var pmt = {\n type: 'metadata',\n tracks: []\n }; // translate audio and video streams to tracks\n\n if (programMapTable.video !== null) {\n pmt.tracks.push({\n timelineStartInfo: {\n baseMediaDecodeTime: 0\n },\n id: +programMapTable.video,\n codec: 'avc',\n type: 'video'\n });\n }\n if (programMapTable.audio !== null) {\n pmt.tracks.push({\n timelineStartInfo: {\n baseMediaDecodeTime: 0\n },\n id: +programMapTable.audio,\n codec: 'adts',\n type: 'audio'\n });\n }\n self.trigger('data', pmt);\n }\n segmentHadPmt = false;\n this.flushStreams_();\n this.trigger('done');\n };\n };\n ElementaryStream.prototype = new Stream$4();\n var m2ts$1 = {\n PAT_PID: 0x0000,\n MP2T_PACKET_LENGTH: MP2T_PACKET_LENGTH$1,\n TransportPacketStream: TransportPacketStream,\n TransportParseStream: TransportParseStream,\n ElementaryStream: ElementaryStream,\n TimestampRolloverStream: TimestampRolloverStream,\n CaptionStream: CaptionStream$1.CaptionStream,\n Cea608Stream: CaptionStream$1.Cea608Stream,\n Cea708Stream: CaptionStream$1.Cea708Stream,\n MetadataStream: metadataStream\n };\n for (var type in StreamTypes$2) {\n if (StreamTypes$2.hasOwnProperty(type)) {\n m2ts$1[type] = StreamTypes$2[type];\n }\n }\n var m2ts_1 = m2ts$1;\n /**\n * mux.js\n *\n * Copyright (c) Brightcove\n * Licensed Apache-2.0 https://github.com/videojs/mux.js/blob/master/LICENSE\n */\n\n var Stream$3 = stream;\n var ONE_SECOND_IN_TS$2 = clock$2.ONE_SECOND_IN_TS;\n var AdtsStream$1;\n var ADTS_SAMPLING_FREQUENCIES$1 = [96000, 88200, 64000, 48000, 44100, 32000, 24000, 22050, 16000, 12000, 11025, 8000, 7350];\n /*\n * Accepts a ElementaryStream and emits data events with parsed\n * AAC Audio Frames of the individual packets. Input audio in ADTS\n * format is unpacked and re-emitted as AAC frames.\n *\n * @see http://wiki.multimedia.cx/index.php?title=ADTS\n * @see http://wiki.multimedia.cx/?title=Understanding_AAC\n */\n\n AdtsStream$1 = function (handlePartialSegments) {\n var buffer,\n frameNum = 0;\n AdtsStream$1.prototype.init.call(this);\n this.skipWarn_ = function (start, end) {\n this.trigger('log', {\n level: 'warn',\n message: `adts skiping bytes ${start} to ${end} in frame ${frameNum} outside syncword`\n });\n };\n this.push = function (packet) {\n var i = 0,\n frameLength,\n protectionSkipBytes,\n oldBuffer,\n sampleCount,\n adtsFrameDuration;\n if (!handlePartialSegments) {\n frameNum = 0;\n }\n if (packet.type !== 'audio') {\n // ignore non-audio data\n return;\n } // Prepend any data in the buffer to the input data so that we can parse\n // aac frames the cross a PES packet boundary\n\n if (buffer && buffer.length) {\n oldBuffer = buffer;\n buffer = new Uint8Array(oldBuffer.byteLength + packet.data.byteLength);\n buffer.set(oldBuffer);\n buffer.set(packet.data, oldBuffer.byteLength);\n } else {\n buffer = packet.data;\n } // unpack any ADTS frames which have been fully received\n // for details on the ADTS header, see http://wiki.multimedia.cx/index.php?title=ADTS\n\n var skip; // We use i + 7 here because we want to be able to parse the entire header.\n // If we don't have enough bytes to do that, then we definitely won't have a full frame.\n\n while (i + 7 < buffer.length) {\n // Look for the start of an ADTS header..\n if (buffer[i] !== 0xFF || (buffer[i + 1] & 0xF6) !== 0xF0) {\n if (typeof skip !== 'number') {\n skip = i;\n } // If a valid header was not found, jump one forward and attempt to\n // find a valid ADTS header starting at the next byte\n\n i++;\n continue;\n }\n if (typeof skip === 'number') {\n this.skipWarn_(skip, i);\n skip = null;\n } // The protection skip bit tells us if we have 2 bytes of CRC data at the\n // end of the ADTS header\n\n protectionSkipBytes = (~buffer[i + 1] & 0x01) * 2; // Frame length is a 13 bit integer starting 16 bits from the\n // end of the sync sequence\n // NOTE: frame length includes the size of the header\n\n frameLength = (buffer[i + 3] & 0x03) << 11 | buffer[i + 4] << 3 | (buffer[i + 5] & 0xe0) >> 5;\n sampleCount = ((buffer[i + 6] & 0x03) + 1) * 1024;\n adtsFrameDuration = sampleCount * ONE_SECOND_IN_TS$2 / ADTS_SAMPLING_FREQUENCIES$1[(buffer[i + 2] & 0x3c) >>> 2]; // If we don't have enough data to actually finish this ADTS frame,\n // then we have to wait for more data\n\n if (buffer.byteLength - i < frameLength) {\n break;\n } // Otherwise, deliver the complete AAC frame\n\n this.trigger('data', {\n pts: packet.pts + frameNum * adtsFrameDuration,\n dts: packet.dts + frameNum * adtsFrameDuration,\n sampleCount: sampleCount,\n audioobjecttype: (buffer[i + 2] >>> 6 & 0x03) + 1,\n channelcount: (buffer[i + 2] & 1) << 2 | (buffer[i + 3] & 0xc0) >>> 6,\n samplerate: ADTS_SAMPLING_FREQUENCIES$1[(buffer[i + 2] & 0x3c) >>> 2],\n samplingfrequencyindex: (buffer[i + 2] & 0x3c) >>> 2,\n // assume ISO/IEC 14496-12 AudioSampleEntry default of 16\n samplesize: 16,\n // data is the frame without it's header\n data: buffer.subarray(i + 7 + protectionSkipBytes, i + frameLength)\n });\n frameNum++;\n i += frameLength;\n }\n if (typeof skip === 'number') {\n this.skipWarn_(skip, i);\n skip = null;\n } // remove processed bytes from the buffer.\n\n buffer = buffer.subarray(i);\n };\n this.flush = function () {\n frameNum = 0;\n this.trigger('done');\n };\n this.reset = function () {\n buffer = void 0;\n this.trigger('reset');\n };\n this.endTimeline = function () {\n buffer = void 0;\n this.trigger('endedtimeline');\n };\n };\n AdtsStream$1.prototype = new Stream$3();\n var adts = AdtsStream$1;\n /**\n * mux.js\n *\n * Copyright (c) Brightcove\n * Licensed Apache-2.0 https://github.com/videojs/mux.js/blob/master/LICENSE\n */\n\n var ExpGolomb$1;\n /**\n * Parser for exponential Golomb codes, a variable-bitwidth number encoding\n * scheme used by h264.\n */\n\n ExpGolomb$1 = function (workingData) {\n var\n // the number of bytes left to examine in workingData\n workingBytesAvailable = workingData.byteLength,\n // the current word being examined\n workingWord = 0,\n // :uint\n // the number of bits left to examine in the current word\n workingBitsAvailable = 0; // :uint;\n // ():uint\n\n this.length = function () {\n return 8 * workingBytesAvailable;\n }; // ():uint\n\n this.bitsAvailable = function () {\n return 8 * workingBytesAvailable + workingBitsAvailable;\n }; // ():void\n\n this.loadWord = function () {\n var position = workingData.byteLength - workingBytesAvailable,\n workingBytes = new Uint8Array(4),\n availableBytes = Math.min(4, workingBytesAvailable);\n if (availableBytes === 0) {\n throw new Error('no bytes available');\n }\n workingBytes.set(workingData.subarray(position, position + availableBytes));\n workingWord = new DataView(workingBytes.buffer).getUint32(0); // track the amount of workingData that has been processed\n\n workingBitsAvailable = availableBytes * 8;\n workingBytesAvailable -= availableBytes;\n }; // (count:int):void\n\n this.skipBits = function (count) {\n var skipBytes; // :int\n\n if (workingBitsAvailable > count) {\n workingWord <<= count;\n workingBitsAvailable -= count;\n } else {\n count -= workingBitsAvailable;\n skipBytes = Math.floor(count / 8);\n count -= skipBytes * 8;\n workingBytesAvailable -= skipBytes;\n this.loadWord();\n workingWord <<= count;\n workingBitsAvailable -= count;\n }\n }; // (size:int):uint\n\n this.readBits = function (size) {\n var bits = Math.min(workingBitsAvailable, size),\n // :uint\n valu = workingWord >>> 32 - bits; // :uint\n // if size > 31, handle error\n\n workingBitsAvailable -= bits;\n if (workingBitsAvailable > 0) {\n workingWord <<= bits;\n } else if (workingBytesAvailable > 0) {\n this.loadWord();\n }\n bits = size - bits;\n if (bits > 0) {\n return valu << bits | this.readBits(bits);\n }\n return valu;\n }; // ():uint\n\n this.skipLeadingZeros = function () {\n var leadingZeroCount; // :uint\n\n for (leadingZeroCount = 0; leadingZeroCount < workingBitsAvailable; ++leadingZeroCount) {\n if ((workingWord & 0x80000000 >>> leadingZeroCount) !== 0) {\n // the first bit of working word is 1\n workingWord <<= leadingZeroCount;\n workingBitsAvailable -= leadingZeroCount;\n return leadingZeroCount;\n }\n } // we exhausted workingWord and still have not found a 1\n\n this.loadWord();\n return leadingZeroCount + this.skipLeadingZeros();\n }; // ():void\n\n this.skipUnsignedExpGolomb = function () {\n this.skipBits(1 + this.skipLeadingZeros());\n }; // ():void\n\n this.skipExpGolomb = function () {\n this.skipBits(1 + this.skipLeadingZeros());\n }; // ():uint\n\n this.readUnsignedExpGolomb = function () {\n var clz = this.skipLeadingZeros(); // :uint\n\n return this.readBits(clz + 1) - 1;\n }; // ():int\n\n this.readExpGolomb = function () {\n var valu = this.readUnsignedExpGolomb(); // :int\n\n if (0x01 & valu) {\n // the number is odd if the low order bit is set\n return 1 + valu >>> 1; // add 1 to make it even, and divide by 2\n }\n return -1 * (valu >>> 1); // divide by two then make it negative\n }; // Some convenience functions\n // :Boolean\n\n this.readBoolean = function () {\n return this.readBits(1) === 1;\n }; // ():int\n\n this.readUnsignedByte = function () {\n return this.readBits(8);\n };\n this.loadWord();\n };\n var expGolomb = ExpGolomb$1;\n /**\n * mux.js\n *\n * Copyright (c) Brightcove\n * Licensed Apache-2.0 https://github.com/videojs/mux.js/blob/master/LICENSE\n */\n\n var Stream$2 = stream;\n var ExpGolomb = expGolomb;\n var H264Stream$1, NalByteStream;\n var PROFILES_WITH_OPTIONAL_SPS_DATA;\n /**\n * Accepts a NAL unit byte stream and unpacks the embedded NAL units.\n */\n\n NalByteStream = function () {\n var syncPoint = 0,\n i,\n buffer;\n NalByteStream.prototype.init.call(this);\n /*\n * Scans a byte stream and triggers a data event with the NAL units found.\n * @param {Object} data Event received from H264Stream\n * @param {Uint8Array} data.data The h264 byte stream to be scanned\n *\n * @see H264Stream.push\n */\n\n this.push = function (data) {\n var swapBuffer;\n if (!buffer) {\n buffer = data.data;\n } else {\n swapBuffer = new Uint8Array(buffer.byteLength + data.data.byteLength);\n swapBuffer.set(buffer);\n swapBuffer.set(data.data, buffer.byteLength);\n buffer = swapBuffer;\n }\n var len = buffer.byteLength; // Rec. ITU-T H.264, Annex B\n // scan for NAL unit boundaries\n // a match looks like this:\n // 0 0 1 .. NAL .. 0 0 1\n // ^ sync point ^ i\n // or this:\n // 0 0 1 .. NAL .. 0 0 0\n // ^ sync point ^ i\n // advance the sync point to a NAL start, if necessary\n\n for (; syncPoint < len - 3; syncPoint++) {\n if (buffer[syncPoint + 2] === 1) {\n // the sync point is properly aligned\n i = syncPoint + 5;\n break;\n }\n }\n while (i < len) {\n // look at the current byte to determine if we've hit the end of\n // a NAL unit boundary\n switch (buffer[i]) {\n case 0:\n // skip past non-sync sequences\n if (buffer[i - 1] !== 0) {\n i += 2;\n break;\n } else if (buffer[i - 2] !== 0) {\n i++;\n break;\n } // deliver the NAL unit if it isn't empty\n\n if (syncPoint + 3 !== i - 2) {\n this.trigger('data', buffer.subarray(syncPoint + 3, i - 2));\n } // drop trailing zeroes\n\n do {\n i++;\n } while (buffer[i] !== 1 && i < len);\n syncPoint = i - 2;\n i += 3;\n break;\n case 1:\n // skip past non-sync sequences\n if (buffer[i - 1] !== 0 || buffer[i - 2] !== 0) {\n i += 3;\n break;\n } // deliver the NAL unit\n\n this.trigger('data', buffer.subarray(syncPoint + 3, i - 2));\n syncPoint = i - 2;\n i += 3;\n break;\n default:\n // the current byte isn't a one or zero, so it cannot be part\n // of a sync sequence\n i += 3;\n break;\n }\n } // filter out the NAL units that were delivered\n\n buffer = buffer.subarray(syncPoint);\n i -= syncPoint;\n syncPoint = 0;\n };\n this.reset = function () {\n buffer = null;\n syncPoint = 0;\n this.trigger('reset');\n };\n this.flush = function () {\n // deliver the last buffered NAL unit\n if (buffer && buffer.byteLength > 3) {\n this.trigger('data', buffer.subarray(syncPoint + 3));\n } // reset the stream state\n\n buffer = null;\n syncPoint = 0;\n this.trigger('done');\n };\n this.endTimeline = function () {\n this.flush();\n this.trigger('endedtimeline');\n };\n };\n NalByteStream.prototype = new Stream$2(); // values of profile_idc that indicate additional fields are included in the SPS\n // see Recommendation ITU-T H.264 (4/2013),\n // 7.3.2.1.1 Sequence parameter set data syntax\n\n PROFILES_WITH_OPTIONAL_SPS_DATA = {\n 100: true,\n 110: true,\n 122: true,\n 244: true,\n 44: true,\n 83: true,\n 86: true,\n 118: true,\n 128: true,\n // TODO: the three profiles below don't\n // appear to have sps data in the specificiation anymore?\n 138: true,\n 139: true,\n 134: true\n };\n /**\n * Accepts input from a ElementaryStream and produces H.264 NAL unit data\n * events.\n */\n\n H264Stream$1 = function () {\n var nalByteStream = new NalByteStream(),\n self,\n trackId,\n currentPts,\n currentDts,\n discardEmulationPreventionBytes,\n readSequenceParameterSet,\n skipScalingList;\n H264Stream$1.prototype.init.call(this);\n self = this;\n /*\n * Pushes a packet from a stream onto the NalByteStream\n *\n * @param {Object} packet - A packet received from a stream\n * @param {Uint8Array} packet.data - The raw bytes of the packet\n * @param {Number} packet.dts - Decode timestamp of the packet\n * @param {Number} packet.pts - Presentation timestamp of the packet\n * @param {Number} packet.trackId - The id of the h264 track this packet came from\n * @param {('video'|'audio')} packet.type - The type of packet\n *\n */\n\n this.push = function (packet) {\n if (packet.type !== 'video') {\n return;\n }\n trackId = packet.trackId;\n currentPts = packet.pts;\n currentDts = packet.dts;\n nalByteStream.push(packet);\n };\n /*\n * Identify NAL unit types and pass on the NALU, trackId, presentation and decode timestamps\n * for the NALUs to the next stream component.\n * Also, preprocess caption and sequence parameter NALUs.\n *\n * @param {Uint8Array} data - A NAL unit identified by `NalByteStream.push`\n * @see NalByteStream.push\n */\n\n nalByteStream.on('data', function (data) {\n var event = {\n trackId: trackId,\n pts: currentPts,\n dts: currentDts,\n data: data,\n nalUnitTypeCode: data[0] & 0x1f\n };\n switch (event.nalUnitTypeCode) {\n case 0x05:\n event.nalUnitType = 'slice_layer_without_partitioning_rbsp_idr';\n break;\n case 0x06:\n event.nalUnitType = 'sei_rbsp';\n event.escapedRBSP = discardEmulationPreventionBytes(data.subarray(1));\n break;\n case 0x07:\n event.nalUnitType = 'seq_parameter_set_rbsp';\n event.escapedRBSP = discardEmulationPreventionBytes(data.subarray(1));\n event.config = readSequenceParameterSet(event.escapedRBSP);\n break;\n case 0x08:\n event.nalUnitType = 'pic_parameter_set_rbsp';\n break;\n case 0x09:\n event.nalUnitType = 'access_unit_delimiter_rbsp';\n break;\n } // This triggers data on the H264Stream\n\n self.trigger('data', event);\n });\n nalByteStream.on('done', function () {\n self.trigger('done');\n });\n nalByteStream.on('partialdone', function () {\n self.trigger('partialdone');\n });\n nalByteStream.on('reset', function () {\n self.trigger('reset');\n });\n nalByteStream.on('endedtimeline', function () {\n self.trigger('endedtimeline');\n });\n this.flush = function () {\n nalByteStream.flush();\n };\n this.partialFlush = function () {\n nalByteStream.partialFlush();\n };\n this.reset = function () {\n nalByteStream.reset();\n };\n this.endTimeline = function () {\n nalByteStream.endTimeline();\n };\n /**\n * Advance the ExpGolomb decoder past a scaling list. The scaling\n * list is optionally transmitted as part of a sequence parameter\n * set and is not relevant to transmuxing.\n * @param count {number} the number of entries in this scaling list\n * @param expGolombDecoder {object} an ExpGolomb pointed to the\n * start of a scaling list\n * @see Recommendation ITU-T H.264, Section 7.3.2.1.1.1\n */\n\n skipScalingList = function (count, expGolombDecoder) {\n var lastScale = 8,\n nextScale = 8,\n j,\n deltaScale;\n for (j = 0; j < count; j++) {\n if (nextScale !== 0) {\n deltaScale = expGolombDecoder.readExpGolomb();\n nextScale = (lastScale + deltaScale + 256) % 256;\n }\n lastScale = nextScale === 0 ? lastScale : nextScale;\n }\n };\n /**\n * Expunge any \"Emulation Prevention\" bytes from a \"Raw Byte\n * Sequence Payload\"\n * @param data {Uint8Array} the bytes of a RBSP from a NAL\n * unit\n * @return {Uint8Array} the RBSP without any Emulation\n * Prevention Bytes\n */\n\n discardEmulationPreventionBytes = function (data) {\n var length = data.byteLength,\n emulationPreventionBytesPositions = [],\n i = 1,\n newLength,\n newData; // Find all `Emulation Prevention Bytes`\n\n while (i < length - 2) {\n if (data[i] === 0 && data[i + 1] === 0 && data[i + 2] === 0x03) {\n emulationPreventionBytesPositions.push(i + 2);\n i += 2;\n } else {\n i++;\n }\n } // If no Emulation Prevention Bytes were found just return the original\n // array\n\n if (emulationPreventionBytesPositions.length === 0) {\n return data;\n } // Create a new array to hold the NAL unit data\n\n newLength = length - emulationPreventionBytesPositions.length;\n newData = new Uint8Array(newLength);\n var sourceIndex = 0;\n for (i = 0; i < newLength; sourceIndex++, i++) {\n if (sourceIndex === emulationPreventionBytesPositions[0]) {\n // Skip this byte\n sourceIndex++; // Remove this position index\n\n emulationPreventionBytesPositions.shift();\n }\n newData[i] = data[sourceIndex];\n }\n return newData;\n };\n /**\n * Read a sequence parameter set and return some interesting video\n * properties. A sequence parameter set is the H264 metadata that\n * describes the properties of upcoming video frames.\n * @param data {Uint8Array} the bytes of a sequence parameter set\n * @return {object} an object with configuration parsed from the\n * sequence parameter set, including the dimensions of the\n * associated video frames.\n */\n\n readSequenceParameterSet = function (data) {\n var frameCropLeftOffset = 0,\n frameCropRightOffset = 0,\n frameCropTopOffset = 0,\n frameCropBottomOffset = 0,\n expGolombDecoder,\n profileIdc,\n levelIdc,\n profileCompatibility,\n chromaFormatIdc,\n picOrderCntType,\n numRefFramesInPicOrderCntCycle,\n picWidthInMbsMinus1,\n picHeightInMapUnitsMinus1,\n frameMbsOnlyFlag,\n scalingListCount,\n sarRatio = [1, 1],\n aspectRatioIdc,\n i;\n expGolombDecoder = new ExpGolomb(data);\n profileIdc = expGolombDecoder.readUnsignedByte(); // profile_idc\n\n profileCompatibility = expGolombDecoder.readUnsignedByte(); // constraint_set[0-5]_flag\n\n levelIdc = expGolombDecoder.readUnsignedByte(); // level_idc u(8)\n\n expGolombDecoder.skipUnsignedExpGolomb(); // seq_parameter_set_id\n // some profiles have more optional data we don't need\n\n if (PROFILES_WITH_OPTIONAL_SPS_DATA[profileIdc]) {\n chromaFormatIdc = expGolombDecoder.readUnsignedExpGolomb();\n if (chromaFormatIdc === 3) {\n expGolombDecoder.skipBits(1); // separate_colour_plane_flag\n }\n expGolombDecoder.skipUnsignedExpGolomb(); // bit_depth_luma_minus8\n\n expGolombDecoder.skipUnsignedExpGolomb(); // bit_depth_chroma_minus8\n\n expGolombDecoder.skipBits(1); // qpprime_y_zero_transform_bypass_flag\n\n if (expGolombDecoder.readBoolean()) {\n // seq_scaling_matrix_present_flag\n scalingListCount = chromaFormatIdc !== 3 ? 8 : 12;\n for (i = 0; i < scalingListCount; i++) {\n if (expGolombDecoder.readBoolean()) {\n // seq_scaling_list_present_flag[ i ]\n if (i < 6) {\n skipScalingList(16, expGolombDecoder);\n } else {\n skipScalingList(64, expGolombDecoder);\n }\n }\n }\n }\n }\n expGolombDecoder.skipUnsignedExpGolomb(); // log2_max_frame_num_minus4\n\n picOrderCntType = expGolombDecoder.readUnsignedExpGolomb();\n if (picOrderCntType === 0) {\n expGolombDecoder.readUnsignedExpGolomb(); // log2_max_pic_order_cnt_lsb_minus4\n } else if (picOrderCntType === 1) {\n expGolombDecoder.skipBits(1); // delta_pic_order_always_zero_flag\n\n expGolombDecoder.skipExpGolomb(); // offset_for_non_ref_pic\n\n expGolombDecoder.skipExpGolomb(); // offset_for_top_to_bottom_field\n\n numRefFramesInPicOrderCntCycle = expGolombDecoder.readUnsignedExpGolomb();\n for (i = 0; i < numRefFramesInPicOrderCntCycle; i++) {\n expGolombDecoder.skipExpGolomb(); // offset_for_ref_frame[ i ]\n }\n }\n expGolombDecoder.skipUnsignedExpGolomb(); // max_num_ref_frames\n\n expGolombDecoder.skipBits(1); // gaps_in_frame_num_value_allowed_flag\n\n picWidthInMbsMinus1 = expGolombDecoder.readUnsignedExpGolomb();\n picHeightInMapUnitsMinus1 = expGolombDecoder.readUnsignedExpGolomb();\n frameMbsOnlyFlag = expGolombDecoder.readBits(1);\n if (frameMbsOnlyFlag === 0) {\n expGolombDecoder.skipBits(1); // mb_adaptive_frame_field_flag\n }\n expGolombDecoder.skipBits(1); // direct_8x8_inference_flag\n\n if (expGolombDecoder.readBoolean()) {\n // frame_cropping_flag\n frameCropLeftOffset = expGolombDecoder.readUnsignedExpGolomb();\n frameCropRightOffset = expGolombDecoder.readUnsignedExpGolomb();\n frameCropTopOffset = expGolombDecoder.readUnsignedExpGolomb();\n frameCropBottomOffset = expGolombDecoder.readUnsignedExpGolomb();\n }\n if (expGolombDecoder.readBoolean()) {\n // vui_parameters_present_flag\n if (expGolombDecoder.readBoolean()) {\n // aspect_ratio_info_present_flag\n aspectRatioIdc = expGolombDecoder.readUnsignedByte();\n switch (aspectRatioIdc) {\n case 1:\n sarRatio = [1, 1];\n break;\n case 2:\n sarRatio = [12, 11];\n break;\n case 3:\n sarRatio = [10, 11];\n break;\n case 4:\n sarRatio = [16, 11];\n break;\n case 5:\n sarRatio = [40, 33];\n break;\n case 6:\n sarRatio = [24, 11];\n break;\n case 7:\n sarRatio = [20, 11];\n break;\n case 8:\n sarRatio = [32, 11];\n break;\n case 9:\n sarRatio = [80, 33];\n break;\n case 10:\n sarRatio = [18, 11];\n break;\n case 11:\n sarRatio = [15, 11];\n break;\n case 12:\n sarRatio = [64, 33];\n break;\n case 13:\n sarRatio = [160, 99];\n break;\n case 14:\n sarRatio = [4, 3];\n break;\n case 15:\n sarRatio = [3, 2];\n break;\n case 16:\n sarRatio = [2, 1];\n break;\n case 255:\n {\n sarRatio = [expGolombDecoder.readUnsignedByte() << 8 | expGolombDecoder.readUnsignedByte(), expGolombDecoder.readUnsignedByte() << 8 | expGolombDecoder.readUnsignedByte()];\n break;\n }\n }\n if (sarRatio) {\n sarRatio[0] / sarRatio[1];\n }\n }\n }\n return {\n profileIdc: profileIdc,\n levelIdc: levelIdc,\n profileCompatibility: profileCompatibility,\n width: (picWidthInMbsMinus1 + 1) * 16 - frameCropLeftOffset * 2 - frameCropRightOffset * 2,\n height: (2 - frameMbsOnlyFlag) * (picHeightInMapUnitsMinus1 + 1) * 16 - frameCropTopOffset * 2 - frameCropBottomOffset * 2,\n // sar is sample aspect ratio\n sarRatio: sarRatio\n };\n };\n };\n H264Stream$1.prototype = new Stream$2();\n var h264 = {\n H264Stream: H264Stream$1,\n NalByteStream: NalByteStream\n };\n /**\n * mux.js\n *\n * Copyright (c) Brightcove\n * Licensed Apache-2.0 https://github.com/videojs/mux.js/blob/master/LICENSE\n *\n * Utilities to detect basic properties and metadata about Aac data.\n */\n\n var ADTS_SAMPLING_FREQUENCIES = [96000, 88200, 64000, 48000, 44100, 32000, 24000, 22050, 16000, 12000, 11025, 8000, 7350];\n var parseId3TagSize = function (header, byteIndex) {\n var returnSize = header[byteIndex + 6] << 21 | header[byteIndex + 7] << 14 | header[byteIndex + 8] << 7 | header[byteIndex + 9],\n flags = header[byteIndex + 5],\n footerPresent = (flags & 16) >> 4; // if we get a negative returnSize clamp it to 0\n\n returnSize = returnSize >= 0 ? returnSize : 0;\n if (footerPresent) {\n return returnSize + 20;\n }\n return returnSize + 10;\n };\n var getId3Offset = function (data, offset) {\n if (data.length - offset < 10 || data[offset] !== 'I'.charCodeAt(0) || data[offset + 1] !== 'D'.charCodeAt(0) || data[offset + 2] !== '3'.charCodeAt(0)) {\n return offset;\n }\n offset += parseId3TagSize(data, offset);\n return getId3Offset(data, offset);\n }; // TODO: use vhs-utils\n\n var isLikelyAacData$1 = function (data) {\n var offset = getId3Offset(data, 0);\n return data.length >= offset + 2 && (data[offset] & 0xFF) === 0xFF && (data[offset + 1] & 0xF0) === 0xF0 &&\n // verify that the 2 layer bits are 0, aka this\n // is not mp3 data but aac data.\n (data[offset + 1] & 0x16) === 0x10;\n };\n var parseSyncSafeInteger = function (data) {\n return data[0] << 21 | data[1] << 14 | data[2] << 7 | data[3];\n }; // return a percent-encoded representation of the specified byte range\n // @see http://en.wikipedia.org/wiki/Percent-encoding\n\n var percentEncode = function (bytes, start, end) {\n var i,\n result = '';\n for (i = start; i < end; i++) {\n result += '%' + ('00' + bytes[i].toString(16)).slice(-2);\n }\n return result;\n }; // return the string representation of the specified byte range,\n // interpreted as ISO-8859-1.\n\n var parseIso88591 = function (bytes, start, end) {\n return unescape(percentEncode(bytes, start, end)); // jshint ignore:line\n };\n var parseAdtsSize = function (header, byteIndex) {\n var lowThree = (header[byteIndex + 5] & 0xE0) >> 5,\n middle = header[byteIndex + 4] << 3,\n highTwo = header[byteIndex + 3] & 0x3 << 11;\n return highTwo | middle | lowThree;\n };\n var parseType$4 = function (header, byteIndex) {\n if (header[byteIndex] === 'I'.charCodeAt(0) && header[byteIndex + 1] === 'D'.charCodeAt(0) && header[byteIndex + 2] === '3'.charCodeAt(0)) {\n return 'timed-metadata';\n } else if (header[byteIndex] & 0xff === 0xff && (header[byteIndex + 1] & 0xf0) === 0xf0) {\n return 'audio';\n }\n return null;\n };\n var parseSampleRate = function (packet) {\n var i = 0;\n while (i + 5 < packet.length) {\n if (packet[i] !== 0xFF || (packet[i + 1] & 0xF6) !== 0xF0) {\n // If a valid header was not found, jump one forward and attempt to\n // find a valid ADTS header starting at the next byte\n i++;\n continue;\n }\n return ADTS_SAMPLING_FREQUENCIES[(packet[i + 2] & 0x3c) >>> 2];\n }\n return null;\n };\n var parseAacTimestamp = function (packet) {\n var frameStart, frameSize, frame, frameHeader; // find the start of the first frame and the end of the tag\n\n frameStart = 10;\n if (packet[5] & 0x40) {\n // advance the frame start past the extended header\n frameStart += 4; // header size field\n\n frameStart += parseSyncSafeInteger(packet.subarray(10, 14));\n } // parse one or more ID3 frames\n // http://id3.org/id3v2.3.0#ID3v2_frame_overview\n\n do {\n // determine the number of bytes in this frame\n frameSize = parseSyncSafeInteger(packet.subarray(frameStart + 4, frameStart + 8));\n if (frameSize < 1) {\n return null;\n }\n frameHeader = String.fromCharCode(packet[frameStart], packet[frameStart + 1], packet[frameStart + 2], packet[frameStart + 3]);\n if (frameHeader === 'PRIV') {\n frame = packet.subarray(frameStart + 10, frameStart + frameSize + 10);\n for (var i = 0; i < frame.byteLength; i++) {\n if (frame[i] === 0) {\n var owner = parseIso88591(frame, 0, i);\n if (owner === 'com.apple.streaming.transportStreamTimestamp') {\n var d = frame.subarray(i + 1);\n var size = (d[3] & 0x01) << 30 | d[4] << 22 | d[5] << 14 | d[6] << 6 | d[7] >>> 2;\n size *= 4;\n size += d[7] & 0x03;\n return size;\n }\n break;\n }\n }\n }\n frameStart += 10; // advance past the frame header\n\n frameStart += frameSize; // advance past the frame body\n } while (frameStart < packet.byteLength);\n return null;\n };\n var utils = {\n isLikelyAacData: isLikelyAacData$1,\n parseId3TagSize: parseId3TagSize,\n parseAdtsSize: parseAdtsSize,\n parseType: parseType$4,\n parseSampleRate: parseSampleRate,\n parseAacTimestamp: parseAacTimestamp\n };\n /**\n * mux.js\n *\n * Copyright (c) Brightcove\n * Licensed Apache-2.0 https://github.com/videojs/mux.js/blob/master/LICENSE\n *\n * A stream-based aac to mp4 converter. This utility can be used to\n * deliver mp4s to a SourceBuffer on platforms that support native\n * Media Source Extensions.\n */\n\n var Stream$1 = stream;\n var aacUtils = utils; // Constants\n\n var AacStream$1;\n /**\n * Splits an incoming stream of binary data into ADTS and ID3 Frames.\n */\n\n AacStream$1 = function () {\n var everything = new Uint8Array(),\n timeStamp = 0;\n AacStream$1.prototype.init.call(this);\n this.setTimestamp = function (timestamp) {\n timeStamp = timestamp;\n };\n this.push = function (bytes) {\n var frameSize = 0,\n byteIndex = 0,\n bytesLeft,\n chunk,\n packet,\n tempLength; // If there are bytes remaining from the last segment, prepend them to the\n // bytes that were pushed in\n\n if (everything.length) {\n tempLength = everything.length;\n everything = new Uint8Array(bytes.byteLength + tempLength);\n everything.set(everything.subarray(0, tempLength));\n everything.set(bytes, tempLength);\n } else {\n everything = bytes;\n }\n while (everything.length - byteIndex >= 3) {\n if (everything[byteIndex] === 'I'.charCodeAt(0) && everything[byteIndex + 1] === 'D'.charCodeAt(0) && everything[byteIndex + 2] === '3'.charCodeAt(0)) {\n // Exit early because we don't have enough to parse\n // the ID3 tag header\n if (everything.length - byteIndex < 10) {\n break;\n } // check framesize\n\n frameSize = aacUtils.parseId3TagSize(everything, byteIndex); // Exit early if we don't have enough in the buffer\n // to emit a full packet\n // Add to byteIndex to support multiple ID3 tags in sequence\n\n if (byteIndex + frameSize > everything.length) {\n break;\n }\n chunk = {\n type: 'timed-metadata',\n data: everything.subarray(byteIndex, byteIndex + frameSize)\n };\n this.trigger('data', chunk);\n byteIndex += frameSize;\n continue;\n } else if ((everything[byteIndex] & 0xff) === 0xff && (everything[byteIndex + 1] & 0xf0) === 0xf0) {\n // Exit early because we don't have enough to parse\n // the ADTS frame header\n if (everything.length - byteIndex < 7) {\n break;\n }\n frameSize = aacUtils.parseAdtsSize(everything, byteIndex); // Exit early if we don't have enough in the buffer\n // to emit a full packet\n\n if (byteIndex + frameSize > everything.length) {\n break;\n }\n packet = {\n type: 'audio',\n data: everything.subarray(byteIndex, byteIndex + frameSize),\n pts: timeStamp,\n dts: timeStamp\n };\n this.trigger('data', packet);\n byteIndex += frameSize;\n continue;\n }\n byteIndex++;\n }\n bytesLeft = everything.length - byteIndex;\n if (bytesLeft > 0) {\n everything = everything.subarray(byteIndex);\n } else {\n everything = new Uint8Array();\n }\n };\n this.reset = function () {\n everything = new Uint8Array();\n this.trigger('reset');\n };\n this.endTimeline = function () {\n everything = new Uint8Array();\n this.trigger('endedtimeline');\n };\n };\n AacStream$1.prototype = new Stream$1();\n var aac = AacStream$1;\n var AUDIO_PROPERTIES$1 = ['audioobjecttype', 'channelcount', 'samplerate', 'samplingfrequencyindex', 'samplesize'];\n var audioProperties = AUDIO_PROPERTIES$1;\n var VIDEO_PROPERTIES$1 = ['width', 'height', 'profileIdc', 'levelIdc', 'profileCompatibility', 'sarRatio'];\n var videoProperties = VIDEO_PROPERTIES$1;\n /**\n * mux.js\n *\n * Copyright (c) Brightcove\n * Licensed Apache-2.0 https://github.com/videojs/mux.js/blob/master/LICENSE\n *\n * A stream-based mp2t to mp4 converter. This utility can be used to\n * deliver mp4s to a SourceBuffer on platforms that support native\n * Media Source Extensions.\n */\n\n var Stream = stream;\n var mp4 = mp4Generator;\n var frameUtils = frameUtils$1;\n var audioFrameUtils = audioFrameUtils$1;\n var trackDecodeInfo = trackDecodeInfo$1;\n var m2ts = m2ts_1;\n var clock = clock$2;\n var AdtsStream = adts;\n var H264Stream = h264.H264Stream;\n var AacStream = aac;\n var isLikelyAacData = utils.isLikelyAacData;\n var ONE_SECOND_IN_TS$1 = clock$2.ONE_SECOND_IN_TS;\n var AUDIO_PROPERTIES = audioProperties;\n var VIDEO_PROPERTIES = videoProperties; // object types\n\n var VideoSegmentStream, AudioSegmentStream, Transmuxer, CoalesceStream;\n var retriggerForStream = function (key, event) {\n event.stream = key;\n this.trigger('log', event);\n };\n var addPipelineLogRetriggers = function (transmuxer, pipeline) {\n var keys = Object.keys(pipeline);\n for (var i = 0; i < keys.length; i++) {\n var key = keys[i]; // skip non-stream keys and headOfPipeline\n // which is just a duplicate\n\n if (key === 'headOfPipeline' || !pipeline[key].on) {\n continue;\n }\n pipeline[key].on('log', retriggerForStream.bind(transmuxer, key));\n }\n };\n /**\n * Compare two arrays (even typed) for same-ness\n */\n\n var arrayEquals = function (a, b) {\n var i;\n if (a.length !== b.length) {\n return false;\n } // compare the value of each element in the array\n\n for (i = 0; i < a.length; i++) {\n if (a[i] !== b[i]) {\n return false;\n }\n }\n return true;\n };\n var generateSegmentTimingInfo = function (baseMediaDecodeTime, startDts, startPts, endDts, endPts, prependedContentDuration) {\n var ptsOffsetFromDts = startPts - startDts,\n decodeDuration = endDts - startDts,\n presentationDuration = endPts - startPts; // The PTS and DTS values are based on the actual stream times from the segment,\n // however, the player time values will reflect a start from the baseMediaDecodeTime.\n // In order to provide relevant values for the player times, base timing info on the\n // baseMediaDecodeTime and the DTS and PTS durations of the segment.\n\n return {\n start: {\n dts: baseMediaDecodeTime,\n pts: baseMediaDecodeTime + ptsOffsetFromDts\n },\n end: {\n dts: baseMediaDecodeTime + decodeDuration,\n pts: baseMediaDecodeTime + presentationDuration\n },\n prependedContentDuration: prependedContentDuration,\n baseMediaDecodeTime: baseMediaDecodeTime\n };\n };\n /**\n * Constructs a single-track, ISO BMFF media segment from AAC data\n * events. The output of this stream can be fed to a SourceBuffer\n * configured with a suitable initialization segment.\n * @param track {object} track metadata configuration\n * @param options {object} transmuxer options object\n * @param options.keepOriginalTimestamps {boolean} If true, keep the timestamps\n * in the source; false to adjust the first segment to start at 0.\n */\n\n AudioSegmentStream = function (track, options) {\n var adtsFrames = [],\n sequenceNumber,\n earliestAllowedDts = 0,\n audioAppendStartTs = 0,\n videoBaseMediaDecodeTime = Infinity;\n options = options || {};\n sequenceNumber = options.firstSequenceNumber || 0;\n AudioSegmentStream.prototype.init.call(this);\n this.push = function (data) {\n trackDecodeInfo.collectDtsInfo(track, data);\n if (track) {\n AUDIO_PROPERTIES.forEach(function (prop) {\n track[prop] = data[prop];\n });\n } // buffer audio data until end() is called\n\n adtsFrames.push(data);\n };\n this.setEarliestDts = function (earliestDts) {\n earliestAllowedDts = earliestDts;\n };\n this.setVideoBaseMediaDecodeTime = function (baseMediaDecodeTime) {\n videoBaseMediaDecodeTime = baseMediaDecodeTime;\n };\n this.setAudioAppendStart = function (timestamp) {\n audioAppendStartTs = timestamp;\n };\n this.flush = function () {\n var frames, moof, mdat, boxes, frameDuration, segmentDuration, videoClockCyclesOfSilencePrefixed; // return early if no audio data has been observed\n\n if (adtsFrames.length === 0) {\n this.trigger('done', 'AudioSegmentStream');\n return;\n }\n frames = audioFrameUtils.trimAdtsFramesByEarliestDts(adtsFrames, track, earliestAllowedDts);\n track.baseMediaDecodeTime = trackDecodeInfo.calculateTrackBaseMediaDecodeTime(track, options.keepOriginalTimestamps); // amount of audio filled but the value is in video clock rather than audio clock\n\n videoClockCyclesOfSilencePrefixed = audioFrameUtils.prefixWithSilence(track, frames, audioAppendStartTs, videoBaseMediaDecodeTime); // we have to build the index from byte locations to\n // samples (that is, adts frames) in the audio data\n\n track.samples = audioFrameUtils.generateSampleTable(frames); // concatenate the audio data to constuct the mdat\n\n mdat = mp4.mdat(audioFrameUtils.concatenateFrameData(frames));\n adtsFrames = [];\n moof = mp4.moof(sequenceNumber, [track]);\n boxes = new Uint8Array(moof.byteLength + mdat.byteLength); // bump the sequence number for next time\n\n sequenceNumber++;\n boxes.set(moof);\n boxes.set(mdat, moof.byteLength);\n trackDecodeInfo.clearDtsInfo(track);\n frameDuration = Math.ceil(ONE_SECOND_IN_TS$1 * 1024 / track.samplerate); // TODO this check was added to maintain backwards compatibility (particularly with\n // tests) on adding the timingInfo event. However, it seems unlikely that there's a\n // valid use-case where an init segment/data should be triggered without associated\n // frames. Leaving for now, but should be looked into.\n\n if (frames.length) {\n segmentDuration = frames.length * frameDuration;\n this.trigger('segmentTimingInfo', generateSegmentTimingInfo(\n // The audio track's baseMediaDecodeTime is in audio clock cycles, but the\n // frame info is in video clock cycles. Convert to match expectation of\n // listeners (that all timestamps will be based on video clock cycles).\n clock.audioTsToVideoTs(track.baseMediaDecodeTime, track.samplerate),\n // frame times are already in video clock, as is segment duration\n frames[0].dts, frames[0].pts, frames[0].dts + segmentDuration, frames[0].pts + segmentDuration, videoClockCyclesOfSilencePrefixed || 0));\n this.trigger('timingInfo', {\n start: frames[0].pts,\n end: frames[0].pts + segmentDuration\n });\n }\n this.trigger('data', {\n track: track,\n boxes: boxes\n });\n this.trigger('done', 'AudioSegmentStream');\n };\n this.reset = function () {\n trackDecodeInfo.clearDtsInfo(track);\n adtsFrames = [];\n this.trigger('reset');\n };\n };\n AudioSegmentStream.prototype = new Stream();\n /**\n * Constructs a single-track, ISO BMFF media segment from H264 data\n * events. The output of this stream can be fed to a SourceBuffer\n * configured with a suitable initialization segment.\n * @param track {object} track metadata configuration\n * @param options {object} transmuxer options object\n * @param options.alignGopsAtEnd {boolean} If true, start from the end of the\n * gopsToAlignWith list when attempting to align gop pts\n * @param options.keepOriginalTimestamps {boolean} If true, keep the timestamps\n * in the source; false to adjust the first segment to start at 0.\n */\n\n VideoSegmentStream = function (track, options) {\n var sequenceNumber,\n nalUnits = [],\n gopsToAlignWith = [],\n config,\n pps;\n options = options || {};\n sequenceNumber = options.firstSequenceNumber || 0;\n VideoSegmentStream.prototype.init.call(this);\n delete track.minPTS;\n this.gopCache_ = [];\n /**\n * Constructs a ISO BMFF segment given H264 nalUnits\n * @param {Object} nalUnit A data event representing a nalUnit\n * @param {String} nalUnit.nalUnitType\n * @param {Object} nalUnit.config Properties for a mp4 track\n * @param {Uint8Array} nalUnit.data The nalUnit bytes\n * @see lib/codecs/h264.js\n **/\n\n this.push = function (nalUnit) {\n trackDecodeInfo.collectDtsInfo(track, nalUnit); // record the track config\n\n if (nalUnit.nalUnitType === 'seq_parameter_set_rbsp' && !config) {\n config = nalUnit.config;\n track.sps = [nalUnit.data];\n VIDEO_PROPERTIES.forEach(function (prop) {\n track[prop] = config[prop];\n }, this);\n }\n if (nalUnit.nalUnitType === 'pic_parameter_set_rbsp' && !pps) {\n pps = nalUnit.data;\n track.pps = [nalUnit.data];\n } // buffer video until flush() is called\n\n nalUnits.push(nalUnit);\n };\n /**\n * Pass constructed ISO BMFF track and boxes on to the\n * next stream in the pipeline\n **/\n\n this.flush = function () {\n var frames,\n gopForFusion,\n gops,\n moof,\n mdat,\n boxes,\n prependedContentDuration = 0,\n firstGop,\n lastGop; // Throw away nalUnits at the start of the byte stream until\n // we find the first AUD\n\n while (nalUnits.length) {\n if (nalUnits[0].nalUnitType === 'access_unit_delimiter_rbsp') {\n break;\n }\n nalUnits.shift();\n } // Return early if no video data has been observed\n\n if (nalUnits.length === 0) {\n this.resetStream_();\n this.trigger('done', 'VideoSegmentStream');\n return;\n } // Organize the raw nal-units into arrays that represent\n // higher-level constructs such as frames and gops\n // (group-of-pictures)\n\n frames = frameUtils.groupNalsIntoFrames(nalUnits);\n gops = frameUtils.groupFramesIntoGops(frames); // If the first frame of this fragment is not a keyframe we have\n // a problem since MSE (on Chrome) requires a leading keyframe.\n //\n // We have two approaches to repairing this situation:\n // 1) GOP-FUSION:\n // This is where we keep track of the GOPS (group-of-pictures)\n // from previous fragments and attempt to find one that we can\n // prepend to the current fragment in order to create a valid\n // fragment.\n // 2) KEYFRAME-PULLING:\n // Here we search for the first keyframe in the fragment and\n // throw away all the frames between the start of the fragment\n // and that keyframe. We then extend the duration and pull the\n // PTS of the keyframe forward so that it covers the time range\n // of the frames that were disposed of.\n //\n // #1 is far prefereable over #2 which can cause \"stuttering\" but\n // requires more things to be just right.\n\n if (!gops[0][0].keyFrame) {\n // Search for a gop for fusion from our gopCache\n gopForFusion = this.getGopForFusion_(nalUnits[0], track);\n if (gopForFusion) {\n // in order to provide more accurate timing information about the segment, save\n // the number of seconds prepended to the original segment due to GOP fusion\n prependedContentDuration = gopForFusion.duration;\n gops.unshift(gopForFusion); // Adjust Gops' metadata to account for the inclusion of the\n // new gop at the beginning\n\n gops.byteLength += gopForFusion.byteLength;\n gops.nalCount += gopForFusion.nalCount;\n gops.pts = gopForFusion.pts;\n gops.dts = gopForFusion.dts;\n gops.duration += gopForFusion.duration;\n } else {\n // If we didn't find a candidate gop fall back to keyframe-pulling\n gops = frameUtils.extendFirstKeyFrame(gops);\n }\n } // Trim gops to align with gopsToAlignWith\n\n if (gopsToAlignWith.length) {\n var alignedGops;\n if (options.alignGopsAtEnd) {\n alignedGops = this.alignGopsAtEnd_(gops);\n } else {\n alignedGops = this.alignGopsAtStart_(gops);\n }\n if (!alignedGops) {\n // save all the nals in the last GOP into the gop cache\n this.gopCache_.unshift({\n gop: gops.pop(),\n pps: track.pps,\n sps: track.sps\n }); // Keep a maximum of 6 GOPs in the cache\n\n this.gopCache_.length = Math.min(6, this.gopCache_.length); // Clear nalUnits\n\n nalUnits = []; // return early no gops can be aligned with desired gopsToAlignWith\n\n this.resetStream_();\n this.trigger('done', 'VideoSegmentStream');\n return;\n } // Some gops were trimmed. clear dts info so minSegmentDts and pts are correct\n // when recalculated before sending off to CoalesceStream\n\n trackDecodeInfo.clearDtsInfo(track);\n gops = alignedGops;\n }\n trackDecodeInfo.collectDtsInfo(track, gops); // First, we have to build the index from byte locations to\n // samples (that is, frames) in the video data\n\n track.samples = frameUtils.generateSampleTable(gops); // Concatenate the video data and construct the mdat\n\n mdat = mp4.mdat(frameUtils.concatenateNalData(gops));\n track.baseMediaDecodeTime = trackDecodeInfo.calculateTrackBaseMediaDecodeTime(track, options.keepOriginalTimestamps);\n this.trigger('processedGopsInfo', gops.map(function (gop) {\n return {\n pts: gop.pts,\n dts: gop.dts,\n byteLength: gop.byteLength\n };\n }));\n firstGop = gops[0];\n lastGop = gops[gops.length - 1];\n this.trigger('segmentTimingInfo', generateSegmentTimingInfo(track.baseMediaDecodeTime, firstGop.dts, firstGop.pts, lastGop.dts + lastGop.duration, lastGop.pts + lastGop.duration, prependedContentDuration));\n this.trigger('timingInfo', {\n start: gops[0].pts,\n end: gops[gops.length - 1].pts + gops[gops.length - 1].duration\n }); // save all the nals in the last GOP into the gop cache\n\n this.gopCache_.unshift({\n gop: gops.pop(),\n pps: track.pps,\n sps: track.sps\n }); // Keep a maximum of 6 GOPs in the cache\n\n this.gopCache_.length = Math.min(6, this.gopCache_.length); // Clear nalUnits\n\n nalUnits = [];\n this.trigger('baseMediaDecodeTime', track.baseMediaDecodeTime);\n this.trigger('timelineStartInfo', track.timelineStartInfo);\n moof = mp4.moof(sequenceNumber, [track]); // it would be great to allocate this array up front instead of\n // throwing away hundreds of media segment fragments\n\n boxes = new Uint8Array(moof.byteLength + mdat.byteLength); // Bump the sequence number for next time\n\n sequenceNumber++;\n boxes.set(moof);\n boxes.set(mdat, moof.byteLength);\n this.trigger('data', {\n track: track,\n boxes: boxes\n });\n this.resetStream_(); // Continue with the flush process now\n\n this.trigger('done', 'VideoSegmentStream');\n };\n this.reset = function () {\n this.resetStream_();\n nalUnits = [];\n this.gopCache_.length = 0;\n gopsToAlignWith.length = 0;\n this.trigger('reset');\n };\n this.resetStream_ = function () {\n trackDecodeInfo.clearDtsInfo(track); // reset config and pps because they may differ across segments\n // for instance, when we are rendition switching\n\n config = undefined;\n pps = undefined;\n }; // Search for a candidate Gop for gop-fusion from the gop cache and\n // return it or return null if no good candidate was found\n\n this.getGopForFusion_ = function (nalUnit) {\n var halfSecond = 45000,\n // Half-a-second in a 90khz clock\n allowableOverlap = 10000,\n // About 3 frames @ 30fps\n nearestDistance = Infinity,\n dtsDistance,\n nearestGopObj,\n currentGop,\n currentGopObj,\n i; // Search for the GOP nearest to the beginning of this nal unit\n\n for (i = 0; i < this.gopCache_.length; i++) {\n currentGopObj = this.gopCache_[i];\n currentGop = currentGopObj.gop; // Reject Gops with different SPS or PPS\n\n if (!(track.pps && arrayEquals(track.pps[0], currentGopObj.pps[0])) || !(track.sps && arrayEquals(track.sps[0], currentGopObj.sps[0]))) {\n continue;\n } // Reject Gops that would require a negative baseMediaDecodeTime\n\n if (currentGop.dts < track.timelineStartInfo.dts) {\n continue;\n } // The distance between the end of the gop and the start of the nalUnit\n\n dtsDistance = nalUnit.dts - currentGop.dts - currentGop.duration; // Only consider GOPS that start before the nal unit and end within\n // a half-second of the nal unit\n\n if (dtsDistance >= -allowableOverlap && dtsDistance <= halfSecond) {\n // Always use the closest GOP we found if there is more than\n // one candidate\n if (!nearestGopObj || nearestDistance > dtsDistance) {\n nearestGopObj = currentGopObj;\n nearestDistance = dtsDistance;\n }\n }\n }\n if (nearestGopObj) {\n return nearestGopObj.gop;\n }\n return null;\n }; // trim gop list to the first gop found that has a matching pts with a gop in the list\n // of gopsToAlignWith starting from the START of the list\n\n this.alignGopsAtStart_ = function (gops) {\n var alignIndex, gopIndex, align, gop, byteLength, nalCount, duration, alignedGops;\n byteLength = gops.byteLength;\n nalCount = gops.nalCount;\n duration = gops.duration;\n alignIndex = gopIndex = 0;\n while (alignIndex < gopsToAlignWith.length && gopIndex < gops.length) {\n align = gopsToAlignWith[alignIndex];\n gop = gops[gopIndex];\n if (align.pts === gop.pts) {\n break;\n }\n if (gop.pts > align.pts) {\n // this current gop starts after the current gop we want to align on, so increment\n // align index\n alignIndex++;\n continue;\n } // current gop starts before the current gop we want to align on. so increment gop\n // index\n\n gopIndex++;\n byteLength -= gop.byteLength;\n nalCount -= gop.nalCount;\n duration -= gop.duration;\n }\n if (gopIndex === 0) {\n // no gops to trim\n return gops;\n }\n if (gopIndex === gops.length) {\n // all gops trimmed, skip appending all gops\n return null;\n }\n alignedGops = gops.slice(gopIndex);\n alignedGops.byteLength = byteLength;\n alignedGops.duration = duration;\n alignedGops.nalCount = nalCount;\n alignedGops.pts = alignedGops[0].pts;\n alignedGops.dts = alignedGops[0].dts;\n return alignedGops;\n }; // trim gop list to the first gop found that has a matching pts with a gop in the list\n // of gopsToAlignWith starting from the END of the list\n\n this.alignGopsAtEnd_ = function (gops) {\n var alignIndex, gopIndex, align, gop, alignEndIndex, matchFound;\n alignIndex = gopsToAlignWith.length - 1;\n gopIndex = gops.length - 1;\n alignEndIndex = null;\n matchFound = false;\n while (alignIndex >= 0 && gopIndex >= 0) {\n align = gopsToAlignWith[alignIndex];\n gop = gops[gopIndex];\n if (align.pts === gop.pts) {\n matchFound = true;\n break;\n }\n if (align.pts > gop.pts) {\n alignIndex--;\n continue;\n }\n if (alignIndex === gopsToAlignWith.length - 1) {\n // gop.pts is greater than the last alignment candidate. If no match is found\n // by the end of this loop, we still want to append gops that come after this\n // point\n alignEndIndex = gopIndex;\n }\n gopIndex--;\n }\n if (!matchFound && alignEndIndex === null) {\n return null;\n }\n var trimIndex;\n if (matchFound) {\n trimIndex = gopIndex;\n } else {\n trimIndex = alignEndIndex;\n }\n if (trimIndex === 0) {\n return gops;\n }\n var alignedGops = gops.slice(trimIndex);\n var metadata = alignedGops.reduce(function (total, gop) {\n total.byteLength += gop.byteLength;\n total.duration += gop.duration;\n total.nalCount += gop.nalCount;\n return total;\n }, {\n byteLength: 0,\n duration: 0,\n nalCount: 0\n });\n alignedGops.byteLength = metadata.byteLength;\n alignedGops.duration = metadata.duration;\n alignedGops.nalCount = metadata.nalCount;\n alignedGops.pts = alignedGops[0].pts;\n alignedGops.dts = alignedGops[0].dts;\n return alignedGops;\n };\n this.alignGopsWith = function (newGopsToAlignWith) {\n gopsToAlignWith = newGopsToAlignWith;\n };\n };\n VideoSegmentStream.prototype = new Stream();\n /**\n * A Stream that can combine multiple streams (ie. audio & video)\n * into a single output segment for MSE. Also supports audio-only\n * and video-only streams.\n * @param options {object} transmuxer options object\n * @param options.keepOriginalTimestamps {boolean} If true, keep the timestamps\n * in the source; false to adjust the first segment to start at media timeline start.\n */\n\n CoalesceStream = function (options, metadataStream) {\n // Number of Tracks per output segment\n // If greater than 1, we combine multiple\n // tracks into a single segment\n this.numberOfTracks = 0;\n this.metadataStream = metadataStream;\n options = options || {};\n if (typeof options.remux !== 'undefined') {\n this.remuxTracks = !!options.remux;\n } else {\n this.remuxTracks = true;\n }\n if (typeof options.keepOriginalTimestamps === 'boolean') {\n this.keepOriginalTimestamps = options.keepOriginalTimestamps;\n } else {\n this.keepOriginalTimestamps = false;\n }\n this.pendingTracks = [];\n this.videoTrack = null;\n this.pendingBoxes = [];\n this.pendingCaptions = [];\n this.pendingMetadata = [];\n this.pendingBytes = 0;\n this.emittedTracks = 0;\n CoalesceStream.prototype.init.call(this); // Take output from multiple\n\n this.push = function (output) {\n // buffer incoming captions until the associated video segment\n // finishes\n if (output.content || output.text) {\n return this.pendingCaptions.push(output);\n } // buffer incoming id3 tags until the final flush\n\n if (output.frames) {\n return this.pendingMetadata.push(output);\n } // Add this track to the list of pending tracks and store\n // important information required for the construction of\n // the final segment\n\n this.pendingTracks.push(output.track);\n this.pendingBytes += output.boxes.byteLength; // TODO: is there an issue for this against chrome?\n // We unshift audio and push video because\n // as of Chrome 75 when switching from\n // one init segment to another if the video\n // mdat does not appear after the audio mdat\n // only audio will play for the duration of our transmux.\n\n if (output.track.type === 'video') {\n this.videoTrack = output.track;\n this.pendingBoxes.push(output.boxes);\n }\n if (output.track.type === 'audio') {\n this.audioTrack = output.track;\n this.pendingBoxes.unshift(output.boxes);\n }\n };\n };\n CoalesceStream.prototype = new Stream();\n CoalesceStream.prototype.flush = function (flushSource) {\n var offset = 0,\n event = {\n captions: [],\n captionStreams: {},\n metadata: [],\n info: {}\n },\n caption,\n id3,\n initSegment,\n timelineStartPts = 0,\n i;\n if (this.pendingTracks.length < this.numberOfTracks) {\n if (flushSource !== 'VideoSegmentStream' && flushSource !== 'AudioSegmentStream') {\n // Return because we haven't received a flush from a data-generating\n // portion of the segment (meaning that we have only recieved meta-data\n // or captions.)\n return;\n } else if (this.remuxTracks) {\n // Return until we have enough tracks from the pipeline to remux (if we\n // are remuxing audio and video into a single MP4)\n return;\n } else if (this.pendingTracks.length === 0) {\n // In the case where we receive a flush without any data having been\n // received we consider it an emitted track for the purposes of coalescing\n // `done` events.\n // We do this for the case where there is an audio and video track in the\n // segment but no audio data. (seen in several playlists with alternate\n // audio tracks and no audio present in the main TS segments.)\n this.emittedTracks++;\n if (this.emittedTracks >= this.numberOfTracks) {\n this.trigger('done');\n this.emittedTracks = 0;\n }\n return;\n }\n }\n if (this.videoTrack) {\n timelineStartPts = this.videoTrack.timelineStartInfo.pts;\n VIDEO_PROPERTIES.forEach(function (prop) {\n event.info[prop] = this.videoTrack[prop];\n }, this);\n } else if (this.audioTrack) {\n timelineStartPts = this.audioTrack.timelineStartInfo.pts;\n AUDIO_PROPERTIES.forEach(function (prop) {\n event.info[prop] = this.audioTrack[prop];\n }, this);\n }\n if (this.videoTrack || this.audioTrack) {\n if (this.pendingTracks.length === 1) {\n event.type = this.pendingTracks[0].type;\n } else {\n event.type = 'combined';\n }\n this.emittedTracks += this.pendingTracks.length;\n initSegment = mp4.initSegment(this.pendingTracks); // Create a new typed array to hold the init segment\n\n event.initSegment = new Uint8Array(initSegment.byteLength); // Create an init segment containing a moov\n // and track definitions\n\n event.initSegment.set(initSegment); // Create a new typed array to hold the moof+mdats\n\n event.data = new Uint8Array(this.pendingBytes); // Append each moof+mdat (one per track) together\n\n for (i = 0; i < this.pendingBoxes.length; i++) {\n event.data.set(this.pendingBoxes[i], offset);\n offset += this.pendingBoxes[i].byteLength;\n } // Translate caption PTS times into second offsets to match the\n // video timeline for the segment, and add track info\n\n for (i = 0; i < this.pendingCaptions.length; i++) {\n caption = this.pendingCaptions[i];\n caption.startTime = clock.metadataTsToSeconds(caption.startPts, timelineStartPts, this.keepOriginalTimestamps);\n caption.endTime = clock.metadataTsToSeconds(caption.endPts, timelineStartPts, this.keepOriginalTimestamps);\n event.captionStreams[caption.stream] = true;\n event.captions.push(caption);\n } // Translate ID3 frame PTS times into second offsets to match the\n // video timeline for the segment\n\n for (i = 0; i < this.pendingMetadata.length; i++) {\n id3 = this.pendingMetadata[i];\n id3.cueTime = clock.metadataTsToSeconds(id3.pts, timelineStartPts, this.keepOriginalTimestamps);\n event.metadata.push(id3);\n } // We add this to every single emitted segment even though we only need\n // it for the first\n\n event.metadata.dispatchType = this.metadataStream.dispatchType; // Reset stream state\n\n this.pendingTracks.length = 0;\n this.videoTrack = null;\n this.pendingBoxes.length = 0;\n this.pendingCaptions.length = 0;\n this.pendingBytes = 0;\n this.pendingMetadata.length = 0; // Emit the built segment\n // We include captions and ID3 tags for backwards compatibility,\n // ideally we should send only video and audio in the data event\n\n this.trigger('data', event); // Emit each caption to the outside world\n // Ideally, this would happen immediately on parsing captions,\n // but we need to ensure that video data is sent back first\n // so that caption timing can be adjusted to match video timing\n\n for (i = 0; i < event.captions.length; i++) {\n caption = event.captions[i];\n this.trigger('caption', caption);\n } // Emit each id3 tag to the outside world\n // Ideally, this would happen immediately on parsing the tag,\n // but we need to ensure that video data is sent back first\n // so that ID3 frame timing can be adjusted to match video timing\n\n for (i = 0; i < event.metadata.length; i++) {\n id3 = event.metadata[i];\n this.trigger('id3Frame', id3);\n }\n } // Only emit `done` if all tracks have been flushed and emitted\n\n if (this.emittedTracks >= this.numberOfTracks) {\n this.trigger('done');\n this.emittedTracks = 0;\n }\n };\n CoalesceStream.prototype.setRemux = function (val) {\n this.remuxTracks = val;\n };\n /**\n * A Stream that expects MP2T binary data as input and produces\n * corresponding media segments, suitable for use with Media Source\n * Extension (MSE) implementations that support the ISO BMFF byte\n * stream format, like Chrome.\n */\n\n Transmuxer = function (options) {\n var self = this,\n hasFlushed = true,\n videoTrack,\n audioTrack;\n Transmuxer.prototype.init.call(this);\n options = options || {};\n this.baseMediaDecodeTime = options.baseMediaDecodeTime || 0;\n this.transmuxPipeline_ = {};\n this.setupAacPipeline = function () {\n var pipeline = {};\n this.transmuxPipeline_ = pipeline;\n pipeline.type = 'aac';\n pipeline.metadataStream = new m2ts.MetadataStream(); // set up the parsing pipeline\n\n pipeline.aacStream = new AacStream();\n pipeline.audioTimestampRolloverStream = new m2ts.TimestampRolloverStream('audio');\n pipeline.timedMetadataTimestampRolloverStream = new m2ts.TimestampRolloverStream('timed-metadata');\n pipeline.adtsStream = new AdtsStream();\n pipeline.coalesceStream = new CoalesceStream(options, pipeline.metadataStream);\n pipeline.headOfPipeline = pipeline.aacStream;\n pipeline.aacStream.pipe(pipeline.audioTimestampRolloverStream).pipe(pipeline.adtsStream);\n pipeline.aacStream.pipe(pipeline.timedMetadataTimestampRolloverStream).pipe(pipeline.metadataStream).pipe(pipeline.coalesceStream);\n pipeline.metadataStream.on('timestamp', function (frame) {\n pipeline.aacStream.setTimestamp(frame.timeStamp);\n });\n pipeline.aacStream.on('data', function (data) {\n if (data.type !== 'timed-metadata' && data.type !== 'audio' || pipeline.audioSegmentStream) {\n return;\n }\n audioTrack = audioTrack || {\n timelineStartInfo: {\n baseMediaDecodeTime: self.baseMediaDecodeTime\n },\n codec: 'adts',\n type: 'audio'\n }; // hook up the audio segment stream to the first track with aac data\n\n pipeline.coalesceStream.numberOfTracks++;\n pipeline.audioSegmentStream = new AudioSegmentStream(audioTrack, options);\n pipeline.audioSegmentStream.on('log', self.getLogTrigger_('audioSegmentStream'));\n pipeline.audioSegmentStream.on('timingInfo', self.trigger.bind(self, 'audioTimingInfo')); // Set up the final part of the audio pipeline\n\n pipeline.adtsStream.pipe(pipeline.audioSegmentStream).pipe(pipeline.coalesceStream); // emit pmt info\n\n self.trigger('trackinfo', {\n hasAudio: !!audioTrack,\n hasVideo: !!videoTrack\n });\n }); // Re-emit any data coming from the coalesce stream to the outside world\n\n pipeline.coalesceStream.on('data', this.trigger.bind(this, 'data')); // Let the consumer know we have finished flushing the entire pipeline\n\n pipeline.coalesceStream.on('done', this.trigger.bind(this, 'done'));\n addPipelineLogRetriggers(this, pipeline);\n };\n this.setupTsPipeline = function () {\n var pipeline = {};\n this.transmuxPipeline_ = pipeline;\n pipeline.type = 'ts';\n pipeline.metadataStream = new m2ts.MetadataStream(); // set up the parsing pipeline\n\n pipeline.packetStream = new m2ts.TransportPacketStream();\n pipeline.parseStream = new m2ts.TransportParseStream();\n pipeline.elementaryStream = new m2ts.ElementaryStream();\n pipeline.timestampRolloverStream = new m2ts.TimestampRolloverStream();\n pipeline.adtsStream = new AdtsStream();\n pipeline.h264Stream = new H264Stream();\n pipeline.captionStream = new m2ts.CaptionStream(options);\n pipeline.coalesceStream = new CoalesceStream(options, pipeline.metadataStream);\n pipeline.headOfPipeline = pipeline.packetStream; // disassemble MPEG2-TS packets into elementary streams\n\n pipeline.packetStream.pipe(pipeline.parseStream).pipe(pipeline.elementaryStream).pipe(pipeline.timestampRolloverStream); // !!THIS ORDER IS IMPORTANT!!\n // demux the streams\n\n pipeline.timestampRolloverStream.pipe(pipeline.h264Stream);\n pipeline.timestampRolloverStream.pipe(pipeline.adtsStream);\n pipeline.timestampRolloverStream.pipe(pipeline.metadataStream).pipe(pipeline.coalesceStream); // Hook up CEA-608/708 caption stream\n\n pipeline.h264Stream.pipe(pipeline.captionStream).pipe(pipeline.coalesceStream);\n pipeline.elementaryStream.on('data', function (data) {\n var i;\n if (data.type === 'metadata') {\n i = data.tracks.length; // scan the tracks listed in the metadata\n\n while (i--) {\n if (!videoTrack && data.tracks[i].type === 'video') {\n videoTrack = data.tracks[i];\n videoTrack.timelineStartInfo.baseMediaDecodeTime = self.baseMediaDecodeTime;\n } else if (!audioTrack && data.tracks[i].type === 'audio') {\n audioTrack = data.tracks[i];\n audioTrack.timelineStartInfo.baseMediaDecodeTime = self.baseMediaDecodeTime;\n }\n } // hook up the video segment stream to the first track with h264 data\n\n if (videoTrack && !pipeline.videoSegmentStream) {\n pipeline.coalesceStream.numberOfTracks++;\n pipeline.videoSegmentStream = new VideoSegmentStream(videoTrack, options);\n pipeline.videoSegmentStream.on('log', self.getLogTrigger_('videoSegmentStream'));\n pipeline.videoSegmentStream.on('timelineStartInfo', function (timelineStartInfo) {\n // When video emits timelineStartInfo data after a flush, we forward that\n // info to the AudioSegmentStream, if it exists, because video timeline\n // data takes precedence. Do not do this if keepOriginalTimestamps is set,\n // because this is a particularly subtle form of timestamp alteration.\n if (audioTrack && !options.keepOriginalTimestamps) {\n audioTrack.timelineStartInfo = timelineStartInfo; // On the first segment we trim AAC frames that exist before the\n // very earliest DTS we have seen in video because Chrome will\n // interpret any video track with a baseMediaDecodeTime that is\n // non-zero as a gap.\n\n pipeline.audioSegmentStream.setEarliestDts(timelineStartInfo.dts - self.baseMediaDecodeTime);\n }\n });\n pipeline.videoSegmentStream.on('processedGopsInfo', self.trigger.bind(self, 'gopInfo'));\n pipeline.videoSegmentStream.on('segmentTimingInfo', self.trigger.bind(self, 'videoSegmentTimingInfo'));\n pipeline.videoSegmentStream.on('baseMediaDecodeTime', function (baseMediaDecodeTime) {\n if (audioTrack) {\n pipeline.audioSegmentStream.setVideoBaseMediaDecodeTime(baseMediaDecodeTime);\n }\n });\n pipeline.videoSegmentStream.on('timingInfo', self.trigger.bind(self, 'videoTimingInfo')); // Set up the final part of the video pipeline\n\n pipeline.h264Stream.pipe(pipeline.videoSegmentStream).pipe(pipeline.coalesceStream);\n }\n if (audioTrack && !pipeline.audioSegmentStream) {\n // hook up the audio segment stream to the first track with aac data\n pipeline.coalesceStream.numberOfTracks++;\n pipeline.audioSegmentStream = new AudioSegmentStream(audioTrack, options);\n pipeline.audioSegmentStream.on('log', self.getLogTrigger_('audioSegmentStream'));\n pipeline.audioSegmentStream.on('timingInfo', self.trigger.bind(self, 'audioTimingInfo'));\n pipeline.audioSegmentStream.on('segmentTimingInfo', self.trigger.bind(self, 'audioSegmentTimingInfo')); // Set up the final part of the audio pipeline\n\n pipeline.adtsStream.pipe(pipeline.audioSegmentStream).pipe(pipeline.coalesceStream);\n } // emit pmt info\n\n self.trigger('trackinfo', {\n hasAudio: !!audioTrack,\n hasVideo: !!videoTrack\n });\n }\n }); // Re-emit any data coming from the coalesce stream to the outside world\n\n pipeline.coalesceStream.on('data', this.trigger.bind(this, 'data'));\n pipeline.coalesceStream.on('id3Frame', function (id3Frame) {\n id3Frame.dispatchType = pipeline.metadataStream.dispatchType;\n self.trigger('id3Frame', id3Frame);\n });\n pipeline.coalesceStream.on('caption', this.trigger.bind(this, 'caption')); // Let the consumer know we have finished flushing the entire pipeline\n\n pipeline.coalesceStream.on('done', this.trigger.bind(this, 'done'));\n addPipelineLogRetriggers(this, pipeline);\n }; // hook up the segment streams once track metadata is delivered\n\n this.setBaseMediaDecodeTime = function (baseMediaDecodeTime) {\n var pipeline = this.transmuxPipeline_;\n if (!options.keepOriginalTimestamps) {\n this.baseMediaDecodeTime = baseMediaDecodeTime;\n }\n if (audioTrack) {\n audioTrack.timelineStartInfo.dts = undefined;\n audioTrack.timelineStartInfo.pts = undefined;\n trackDecodeInfo.clearDtsInfo(audioTrack);\n if (pipeline.audioTimestampRolloverStream) {\n pipeline.audioTimestampRolloverStream.discontinuity();\n }\n }\n if (videoTrack) {\n if (pipeline.videoSegmentStream) {\n pipeline.videoSegmentStream.gopCache_ = [];\n }\n videoTrack.timelineStartInfo.dts = undefined;\n videoTrack.timelineStartInfo.pts = undefined;\n trackDecodeInfo.clearDtsInfo(videoTrack);\n pipeline.captionStream.reset();\n }\n if (pipeline.timestampRolloverStream) {\n pipeline.timestampRolloverStream.discontinuity();\n }\n };\n this.setAudioAppendStart = function (timestamp) {\n if (audioTrack) {\n this.transmuxPipeline_.audioSegmentStream.setAudioAppendStart(timestamp);\n }\n };\n this.setRemux = function (val) {\n var pipeline = this.transmuxPipeline_;\n options.remux = val;\n if (pipeline && pipeline.coalesceStream) {\n pipeline.coalesceStream.setRemux(val);\n }\n };\n this.alignGopsWith = function (gopsToAlignWith) {\n if (videoTrack && this.transmuxPipeline_.videoSegmentStream) {\n this.transmuxPipeline_.videoSegmentStream.alignGopsWith(gopsToAlignWith);\n }\n };\n this.getLogTrigger_ = function (key) {\n var self = this;\n return function (event) {\n event.stream = key;\n self.trigger('log', event);\n };\n }; // feed incoming data to the front of the parsing pipeline\n\n this.push = function (data) {\n if (hasFlushed) {\n var isAac = isLikelyAacData(data);\n if (isAac && this.transmuxPipeline_.type !== 'aac') {\n this.setupAacPipeline();\n } else if (!isAac && this.transmuxPipeline_.type !== 'ts') {\n this.setupTsPipeline();\n }\n hasFlushed = false;\n }\n this.transmuxPipeline_.headOfPipeline.push(data);\n }; // flush any buffered data\n\n this.flush = function () {\n hasFlushed = true; // Start at the top of the pipeline and flush all pending work\n\n this.transmuxPipeline_.headOfPipeline.flush();\n };\n this.endTimeline = function () {\n this.transmuxPipeline_.headOfPipeline.endTimeline();\n };\n this.reset = function () {\n if (this.transmuxPipeline_.headOfPipeline) {\n this.transmuxPipeline_.headOfPipeline.reset();\n }\n }; // Caption data has to be reset when seeking outside buffered range\n\n this.resetCaptions = function () {\n if (this.transmuxPipeline_.captionStream) {\n this.transmuxPipeline_.captionStream.reset();\n }\n };\n };\n Transmuxer.prototype = new Stream();\n var transmuxer = {\n Transmuxer: Transmuxer,\n VideoSegmentStream: VideoSegmentStream,\n AudioSegmentStream: AudioSegmentStream,\n AUDIO_PROPERTIES: AUDIO_PROPERTIES,\n VIDEO_PROPERTIES: VIDEO_PROPERTIES,\n // exported for testing\n generateSegmentTimingInfo: generateSegmentTimingInfo\n };\n /**\n * mux.js\n *\n * Copyright (c) Brightcove\n * Licensed Apache-2.0 https://github.com/videojs/mux.js/blob/master/LICENSE\n */\n\n var toUnsigned$3 = function (value) {\n return value >>> 0;\n };\n var toHexString$1 = function (value) {\n return ('00' + value.toString(16)).slice(-2);\n };\n var bin = {\n toUnsigned: toUnsigned$3,\n toHexString: toHexString$1\n };\n var parseType$3 = function (buffer) {\n var result = '';\n result += String.fromCharCode(buffer[0]);\n result += String.fromCharCode(buffer[1]);\n result += String.fromCharCode(buffer[2]);\n result += String.fromCharCode(buffer[3]);\n return result;\n };\n var parseType_1 = parseType$3;\n var toUnsigned$2 = bin.toUnsigned;\n var parseType$2 = parseType_1;\n var findBox$2 = function (data, path) {\n var results = [],\n i,\n size,\n type,\n end,\n subresults;\n if (!path.length) {\n // short-circuit the search for empty paths\n return null;\n }\n for (i = 0; i < data.byteLength;) {\n size = toUnsigned$2(data[i] << 24 | data[i + 1] << 16 | data[i + 2] << 8 | data[i + 3]);\n type = parseType$2(data.subarray(i + 4, i + 8));\n end = size > 1 ? i + size : data.byteLength;\n if (type === path[0]) {\n if (path.length === 1) {\n // this is the end of the path and we've found the box we were\n // looking for\n results.push(data.subarray(i + 8, end));\n } else {\n // recursively search for the next box along the path\n subresults = findBox$2(data.subarray(i + 8, end), path.slice(1));\n if (subresults.length) {\n results = results.concat(subresults);\n }\n }\n }\n i = end;\n } // we've finished searching all of data\n\n return results;\n };\n var findBox_1 = findBox$2;\n var toUnsigned$1 = bin.toUnsigned;\n var getUint64$2 = numbers.getUint64;\n var tfdt = function (data) {\n var result = {\n version: data[0],\n flags: new Uint8Array(data.subarray(1, 4))\n };\n if (result.version === 1) {\n result.baseMediaDecodeTime = getUint64$2(data.subarray(4));\n } else {\n result.baseMediaDecodeTime = toUnsigned$1(data[4] << 24 | data[5] << 16 | data[6] << 8 | data[7]);\n }\n return result;\n };\n var parseTfdt$2 = tfdt;\n var parseSampleFlags$1 = function (flags) {\n return {\n isLeading: (flags[0] & 0x0c) >>> 2,\n dependsOn: flags[0] & 0x03,\n isDependedOn: (flags[1] & 0xc0) >>> 6,\n hasRedundancy: (flags[1] & 0x30) >>> 4,\n paddingValue: (flags[1] & 0x0e) >>> 1,\n isNonSyncSample: flags[1] & 0x01,\n degradationPriority: flags[2] << 8 | flags[3]\n };\n };\n var parseSampleFlags_1 = parseSampleFlags$1;\n var parseSampleFlags = parseSampleFlags_1;\n var trun = function (data) {\n var result = {\n version: data[0],\n flags: new Uint8Array(data.subarray(1, 4)),\n samples: []\n },\n view = new DataView(data.buffer, data.byteOffset, data.byteLength),\n // Flag interpretation\n dataOffsetPresent = result.flags[2] & 0x01,\n // compare with 2nd byte of 0x1\n firstSampleFlagsPresent = result.flags[2] & 0x04,\n // compare with 2nd byte of 0x4\n sampleDurationPresent = result.flags[1] & 0x01,\n // compare with 2nd byte of 0x100\n sampleSizePresent = result.flags[1] & 0x02,\n // compare with 2nd byte of 0x200\n sampleFlagsPresent = result.flags[1] & 0x04,\n // compare with 2nd byte of 0x400\n sampleCompositionTimeOffsetPresent = result.flags[1] & 0x08,\n // compare with 2nd byte of 0x800\n sampleCount = view.getUint32(4),\n offset = 8,\n sample;\n if (dataOffsetPresent) {\n // 32 bit signed integer\n result.dataOffset = view.getInt32(offset);\n offset += 4;\n } // Overrides the flags for the first sample only. The order of\n // optional values will be: duration, size, compositionTimeOffset\n\n if (firstSampleFlagsPresent && sampleCount) {\n sample = {\n flags: parseSampleFlags(data.subarray(offset, offset + 4))\n };\n offset += 4;\n if (sampleDurationPresent) {\n sample.duration = view.getUint32(offset);\n offset += 4;\n }\n if (sampleSizePresent) {\n sample.size = view.getUint32(offset);\n offset += 4;\n }\n if (sampleCompositionTimeOffsetPresent) {\n if (result.version === 1) {\n sample.compositionTimeOffset = view.getInt32(offset);\n } else {\n sample.compositionTimeOffset = view.getUint32(offset);\n }\n offset += 4;\n }\n result.samples.push(sample);\n sampleCount--;\n }\n while (sampleCount--) {\n sample = {};\n if (sampleDurationPresent) {\n sample.duration = view.getUint32(offset);\n offset += 4;\n }\n if (sampleSizePresent) {\n sample.size = view.getUint32(offset);\n offset += 4;\n }\n if (sampleFlagsPresent) {\n sample.flags = parseSampleFlags(data.subarray(offset, offset + 4));\n offset += 4;\n }\n if (sampleCompositionTimeOffsetPresent) {\n if (result.version === 1) {\n sample.compositionTimeOffset = view.getInt32(offset);\n } else {\n sample.compositionTimeOffset = view.getUint32(offset);\n }\n offset += 4;\n }\n result.samples.push(sample);\n }\n return result;\n };\n var parseTrun$2 = trun;\n var tfhd = function (data) {\n var view = new DataView(data.buffer, data.byteOffset, data.byteLength),\n result = {\n version: data[0],\n flags: new Uint8Array(data.subarray(1, 4)),\n trackId: view.getUint32(4)\n },\n baseDataOffsetPresent = result.flags[2] & 0x01,\n sampleDescriptionIndexPresent = result.flags[2] & 0x02,\n defaultSampleDurationPresent = result.flags[2] & 0x08,\n defaultSampleSizePresent = result.flags[2] & 0x10,\n defaultSampleFlagsPresent = result.flags[2] & 0x20,\n durationIsEmpty = result.flags[0] & 0x010000,\n defaultBaseIsMoof = result.flags[0] & 0x020000,\n i;\n i = 8;\n if (baseDataOffsetPresent) {\n i += 4; // truncate top 4 bytes\n // FIXME: should we read the full 64 bits?\n\n result.baseDataOffset = view.getUint32(12);\n i += 4;\n }\n if (sampleDescriptionIndexPresent) {\n result.sampleDescriptionIndex = view.getUint32(i);\n i += 4;\n }\n if (defaultSampleDurationPresent) {\n result.defaultSampleDuration = view.getUint32(i);\n i += 4;\n }\n if (defaultSampleSizePresent) {\n result.defaultSampleSize = view.getUint32(i);\n i += 4;\n }\n if (defaultSampleFlagsPresent) {\n result.defaultSampleFlags = view.getUint32(i);\n }\n if (durationIsEmpty) {\n result.durationIsEmpty = true;\n }\n if (!baseDataOffsetPresent && defaultBaseIsMoof) {\n result.baseDataOffsetIsMoof = true;\n }\n return result;\n };\n var parseTfhd$2 = tfhd;\n var win;\n if (typeof window !== \"undefined\") {\n win = window;\n } else if (typeof commonjsGlobal !== \"undefined\") {\n win = commonjsGlobal;\n } else if (typeof self !== \"undefined\") {\n win = self;\n } else {\n win = {};\n }\n var window_1 = win;\n /**\n * mux.js\n *\n * Copyright (c) Brightcove\n * Licensed Apache-2.0 https://github.com/videojs/mux.js/blob/master/LICENSE\n *\n * Reads in-band CEA-708 captions out of FMP4 segments.\n * @see https://en.wikipedia.org/wiki/CEA-708\n */\n\n var discardEmulationPreventionBytes = captionPacketParser.discardEmulationPreventionBytes;\n var CaptionStream = captionStream.CaptionStream;\n var findBox$1 = findBox_1;\n var parseTfdt$1 = parseTfdt$2;\n var parseTrun$1 = parseTrun$2;\n var parseTfhd$1 = parseTfhd$2;\n var window$2 = window_1;\n /**\n * Maps an offset in the mdat to a sample based on the the size of the samples.\n * Assumes that `parseSamples` has been called first.\n *\n * @param {Number} offset - The offset into the mdat\n * @param {Object[]} samples - An array of samples, parsed using `parseSamples`\n * @return {?Object} The matching sample, or null if no match was found.\n *\n * @see ISO-BMFF-12/2015, Section 8.8.8\n **/\n\n var mapToSample = function (offset, samples) {\n var approximateOffset = offset;\n for (var i = 0; i < samples.length; i++) {\n var sample = samples[i];\n if (approximateOffset < sample.size) {\n return sample;\n }\n approximateOffset -= sample.size;\n }\n return null;\n };\n /**\n * Finds SEI nal units contained in a Media Data Box.\n * Assumes that `parseSamples` has been called first.\n *\n * @param {Uint8Array} avcStream - The bytes of the mdat\n * @param {Object[]} samples - The samples parsed out by `parseSamples`\n * @param {Number} trackId - The trackId of this video track\n * @return {Object[]} seiNals - the parsed SEI NALUs found.\n * The contents of the seiNal should match what is expected by\n * CaptionStream.push (nalUnitType, size, data, escapedRBSP, pts, dts)\n *\n * @see ISO-BMFF-12/2015, Section 8.1.1\n * @see Rec. ITU-T H.264, 7.3.2.3.1\n **/\n\n var findSeiNals = function (avcStream, samples, trackId) {\n var avcView = new DataView(avcStream.buffer, avcStream.byteOffset, avcStream.byteLength),\n result = {\n logs: [],\n seiNals: []\n },\n seiNal,\n i,\n length,\n lastMatchedSample;\n for (i = 0; i + 4 < avcStream.length; i += length) {\n length = avcView.getUint32(i);\n i += 4; // Bail if this doesn't appear to be an H264 stream\n\n if (length <= 0) {\n continue;\n }\n switch (avcStream[i] & 0x1F) {\n case 0x06:\n var data = avcStream.subarray(i + 1, i + 1 + length);\n var matchingSample = mapToSample(i, samples);\n seiNal = {\n nalUnitType: 'sei_rbsp',\n size: length,\n data: data,\n escapedRBSP: discardEmulationPreventionBytes(data),\n trackId: trackId\n };\n if (matchingSample) {\n seiNal.pts = matchingSample.pts;\n seiNal.dts = matchingSample.dts;\n lastMatchedSample = matchingSample;\n } else if (lastMatchedSample) {\n // If a matching sample cannot be found, use the last\n // sample's values as they should be as close as possible\n seiNal.pts = lastMatchedSample.pts;\n seiNal.dts = lastMatchedSample.dts;\n } else {\n result.logs.push({\n level: 'warn',\n message: 'We\\'ve encountered a nal unit without data at ' + i + ' for trackId ' + trackId + '. See mux.js#223.'\n });\n break;\n }\n result.seiNals.push(seiNal);\n break;\n }\n }\n return result;\n };\n /**\n * Parses sample information out of Track Run Boxes and calculates\n * the absolute presentation and decode timestamps of each sample.\n *\n * @param {Array} truns - The Trun Run boxes to be parsed\n * @param {Number|BigInt} baseMediaDecodeTime - base media decode time from tfdt\n @see ISO-BMFF-12/2015, Section 8.8.12\n * @param {Object} tfhd - The parsed Track Fragment Header\n * @see inspect.parseTfhd\n * @return {Object[]} the parsed samples\n *\n * @see ISO-BMFF-12/2015, Section 8.8.8\n **/\n\n var parseSamples = function (truns, baseMediaDecodeTime, tfhd) {\n var currentDts = baseMediaDecodeTime;\n var defaultSampleDuration = tfhd.defaultSampleDuration || 0;\n var defaultSampleSize = tfhd.defaultSampleSize || 0;\n var trackId = tfhd.trackId;\n var allSamples = [];\n truns.forEach(function (trun) {\n // Note: We currently do not parse the sample table as well\n // as the trun. It's possible some sources will require this.\n // moov > trak > mdia > minf > stbl\n var trackRun = parseTrun$1(trun);\n var samples = trackRun.samples;\n samples.forEach(function (sample) {\n if (sample.duration === undefined) {\n sample.duration = defaultSampleDuration;\n }\n if (sample.size === undefined) {\n sample.size = defaultSampleSize;\n }\n sample.trackId = trackId;\n sample.dts = currentDts;\n if (sample.compositionTimeOffset === undefined) {\n sample.compositionTimeOffset = 0;\n }\n if (typeof currentDts === 'bigint') {\n sample.pts = currentDts + window$2.BigInt(sample.compositionTimeOffset);\n currentDts += window$2.BigInt(sample.duration);\n } else {\n sample.pts = currentDts + sample.compositionTimeOffset;\n currentDts += sample.duration;\n }\n });\n allSamples = allSamples.concat(samples);\n });\n return allSamples;\n };\n /**\n * Parses out caption nals from an FMP4 segment's video tracks.\n *\n * @param {Uint8Array} segment - The bytes of a single segment\n * @param {Number} videoTrackId - The trackId of a video track in the segment\n * @return {Object.} A mapping of video trackId to\n * a list of seiNals found in that track\n **/\n\n var parseCaptionNals = function (segment, videoTrackId) {\n // To get the samples\n var trafs = findBox$1(segment, ['moof', 'traf']); // To get SEI NAL units\n\n var mdats = findBox$1(segment, ['mdat']);\n var captionNals = {};\n var mdatTrafPairs = []; // Pair up each traf with a mdat as moofs and mdats are in pairs\n\n mdats.forEach(function (mdat, index) {\n var matchingTraf = trafs[index];\n mdatTrafPairs.push({\n mdat: mdat,\n traf: matchingTraf\n });\n });\n mdatTrafPairs.forEach(function (pair) {\n var mdat = pair.mdat;\n var traf = pair.traf;\n var tfhd = findBox$1(traf, ['tfhd']); // Exactly 1 tfhd per traf\n\n var headerInfo = parseTfhd$1(tfhd[0]);\n var trackId = headerInfo.trackId;\n var tfdt = findBox$1(traf, ['tfdt']); // Either 0 or 1 tfdt per traf\n\n var baseMediaDecodeTime = tfdt.length > 0 ? parseTfdt$1(tfdt[0]).baseMediaDecodeTime : 0;\n var truns = findBox$1(traf, ['trun']);\n var samples;\n var result; // Only parse video data for the chosen video track\n\n if (videoTrackId === trackId && truns.length > 0) {\n samples = parseSamples(truns, baseMediaDecodeTime, headerInfo);\n result = findSeiNals(mdat, samples, trackId);\n if (!captionNals[trackId]) {\n captionNals[trackId] = {\n seiNals: [],\n logs: []\n };\n }\n captionNals[trackId].seiNals = captionNals[trackId].seiNals.concat(result.seiNals);\n captionNals[trackId].logs = captionNals[trackId].logs.concat(result.logs);\n }\n });\n return captionNals;\n };\n /**\n * Parses out inband captions from an MP4 container and returns\n * caption objects that can be used by WebVTT and the TextTrack API.\n * @see https://developer.mozilla.org/en-US/docs/Web/API/VTTCue\n * @see https://developer.mozilla.org/en-US/docs/Web/API/TextTrack\n * Assumes that `probe.getVideoTrackIds` and `probe.timescale` have been called first\n *\n * @param {Uint8Array} segment - The fmp4 segment containing embedded captions\n * @param {Number} trackId - The id of the video track to parse\n * @param {Number} timescale - The timescale for the video track from the init segment\n *\n * @return {?Object[]} parsedCaptions - A list of captions or null if no video tracks\n * @return {Number} parsedCaptions[].startTime - The time to show the caption in seconds\n * @return {Number} parsedCaptions[].endTime - The time to stop showing the caption in seconds\n * @return {Object[]} parsedCaptions[].content - A list of individual caption segments\n * @return {String} parsedCaptions[].content.text - The visible content of the caption segment\n * @return {Number} parsedCaptions[].content.line - The line height from 1-15 for positioning of the caption segment\n * @return {Number} parsedCaptions[].content.position - The column indent percentage for cue positioning from 10-80\n **/\n\n var parseEmbeddedCaptions = function (segment, trackId, timescale) {\n var captionNals; // the ISO-BMFF spec says that trackId can't be zero, but there's some broken content out there\n\n if (trackId === null) {\n return null;\n }\n captionNals = parseCaptionNals(segment, trackId);\n var trackNals = captionNals[trackId] || {};\n return {\n seiNals: trackNals.seiNals,\n logs: trackNals.logs,\n timescale: timescale\n };\n };\n /**\n * Converts SEI NALUs into captions that can be used by video.js\n **/\n\n var CaptionParser = function () {\n var isInitialized = false;\n var captionStream; // Stores segments seen before trackId and timescale are set\n\n var segmentCache; // Stores video track ID of the track being parsed\n\n var trackId; // Stores the timescale of the track being parsed\n\n var timescale; // Stores captions parsed so far\n\n var parsedCaptions; // Stores whether we are receiving partial data or not\n\n var parsingPartial;\n /**\n * A method to indicate whether a CaptionParser has been initalized\n * @returns {Boolean}\n **/\n\n this.isInitialized = function () {\n return isInitialized;\n };\n /**\n * Initializes the underlying CaptionStream, SEI NAL parsing\n * and management, and caption collection\n **/\n\n this.init = function (options) {\n captionStream = new CaptionStream();\n isInitialized = true;\n parsingPartial = options ? options.isPartial : false; // Collect dispatched captions\n\n captionStream.on('data', function (event) {\n // Convert to seconds in the source's timescale\n event.startTime = event.startPts / timescale;\n event.endTime = event.endPts / timescale;\n parsedCaptions.captions.push(event);\n parsedCaptions.captionStreams[event.stream] = true;\n });\n captionStream.on('log', function (log) {\n parsedCaptions.logs.push(log);\n });\n };\n /**\n * Determines if a new video track will be selected\n * or if the timescale changed\n * @return {Boolean}\n **/\n\n this.isNewInit = function (videoTrackIds, timescales) {\n if (videoTrackIds && videoTrackIds.length === 0 || timescales && typeof timescales === 'object' && Object.keys(timescales).length === 0) {\n return false;\n }\n return trackId !== videoTrackIds[0] || timescale !== timescales[trackId];\n };\n /**\n * Parses out SEI captions and interacts with underlying\n * CaptionStream to return dispatched captions\n *\n * @param {Uint8Array} segment - The fmp4 segment containing embedded captions\n * @param {Number[]} videoTrackIds - A list of video tracks found in the init segment\n * @param {Object.} timescales - The timescales found in the init segment\n * @see parseEmbeddedCaptions\n * @see m2ts/caption-stream.js\n **/\n\n this.parse = function (segment, videoTrackIds, timescales) {\n var parsedData;\n if (!this.isInitialized()) {\n return null; // This is not likely to be a video segment\n } else if (!videoTrackIds || !timescales) {\n return null;\n } else if (this.isNewInit(videoTrackIds, timescales)) {\n // Use the first video track only as there is no\n // mechanism to switch to other video tracks\n trackId = videoTrackIds[0];\n timescale = timescales[trackId]; // If an init segment has not been seen yet, hold onto segment\n // data until we have one.\n // the ISO-BMFF spec says that trackId can't be zero, but there's some broken content out there\n } else if (trackId === null || !timescale) {\n segmentCache.push(segment);\n return null;\n } // Now that a timescale and trackId is set, parse cached segments\n\n while (segmentCache.length > 0) {\n var cachedSegment = segmentCache.shift();\n this.parse(cachedSegment, videoTrackIds, timescales);\n }\n parsedData = parseEmbeddedCaptions(segment, trackId, timescale);\n if (parsedData && parsedData.logs) {\n parsedCaptions.logs = parsedCaptions.logs.concat(parsedData.logs);\n }\n if (parsedData === null || !parsedData.seiNals) {\n if (parsedCaptions.logs.length) {\n return {\n logs: parsedCaptions.logs,\n captions: [],\n captionStreams: []\n };\n }\n return null;\n }\n this.pushNals(parsedData.seiNals); // Force the parsed captions to be dispatched\n\n this.flushStream();\n return parsedCaptions;\n };\n /**\n * Pushes SEI NALUs onto CaptionStream\n * @param {Object[]} nals - A list of SEI nals parsed using `parseCaptionNals`\n * Assumes that `parseCaptionNals` has been called first\n * @see m2ts/caption-stream.js\n **/\n\n this.pushNals = function (nals) {\n if (!this.isInitialized() || !nals || nals.length === 0) {\n return null;\n }\n nals.forEach(function (nal) {\n captionStream.push(nal);\n });\n };\n /**\n * Flushes underlying CaptionStream to dispatch processed, displayable captions\n * @see m2ts/caption-stream.js\n **/\n\n this.flushStream = function () {\n if (!this.isInitialized()) {\n return null;\n }\n if (!parsingPartial) {\n captionStream.flush();\n } else {\n captionStream.partialFlush();\n }\n };\n /**\n * Reset caption buckets for new data\n **/\n\n this.clearParsedCaptions = function () {\n parsedCaptions.captions = [];\n parsedCaptions.captionStreams = {};\n parsedCaptions.logs = [];\n };\n /**\n * Resets underlying CaptionStream\n * @see m2ts/caption-stream.js\n **/\n\n this.resetCaptionStream = function () {\n if (!this.isInitialized()) {\n return null;\n }\n captionStream.reset();\n };\n /**\n * Convenience method to clear all captions flushed from the\n * CaptionStream and still being parsed\n * @see m2ts/caption-stream.js\n **/\n\n this.clearAllCaptions = function () {\n this.clearParsedCaptions();\n this.resetCaptionStream();\n };\n /**\n * Reset caption parser\n **/\n\n this.reset = function () {\n segmentCache = [];\n trackId = null;\n timescale = null;\n if (!parsedCaptions) {\n parsedCaptions = {\n captions: [],\n // CC1, CC2, CC3, CC4\n captionStreams: {},\n logs: []\n };\n } else {\n this.clearParsedCaptions();\n }\n this.resetCaptionStream();\n };\n this.reset();\n };\n var captionParser = CaptionParser;\n /**\n * Returns the first string in the data array ending with a null char '\\0'\n * @param {UInt8} data \n * @returns the string with the null char\n */\n\n var uint8ToCString$1 = function (data) {\n var index = 0;\n var curChar = String.fromCharCode(data[index]);\n var retString = '';\n while (curChar !== '\\0') {\n retString += curChar;\n index++;\n curChar = String.fromCharCode(data[index]);\n } // Add nullChar\n\n retString += curChar;\n return retString;\n };\n var string = {\n uint8ToCString: uint8ToCString$1\n };\n var uint8ToCString = string.uint8ToCString;\n var getUint64$1 = numbers.getUint64;\n /**\n * Based on: ISO/IEC 23009 Section: 5.10.3.3\n * References:\n * https://dashif-documents.azurewebsites.net/Events/master/event.html#emsg-format\n * https://aomediacodec.github.io/id3-emsg/\n * \n * Takes emsg box data as a uint8 array and returns a emsg box object\n * @param {UInt8Array} boxData data from emsg box\n * @returns A parsed emsg box object\n */\n\n var parseEmsgBox = function (boxData) {\n // version + flags\n var offset = 4;\n var version = boxData[0];\n var scheme_id_uri, value, timescale, presentation_time, presentation_time_delta, event_duration, id, message_data;\n if (version === 0) {\n scheme_id_uri = uint8ToCString(boxData.subarray(offset));\n offset += scheme_id_uri.length;\n value = uint8ToCString(boxData.subarray(offset));\n offset += value.length;\n var dv = new DataView(boxData.buffer);\n timescale = dv.getUint32(offset);\n offset += 4;\n presentation_time_delta = dv.getUint32(offset);\n offset += 4;\n event_duration = dv.getUint32(offset);\n offset += 4;\n id = dv.getUint32(offset);\n offset += 4;\n } else if (version === 1) {\n var dv = new DataView(boxData.buffer);\n timescale = dv.getUint32(offset);\n offset += 4;\n presentation_time = getUint64$1(boxData.subarray(offset));\n offset += 8;\n event_duration = dv.getUint32(offset);\n offset += 4;\n id = dv.getUint32(offset);\n offset += 4;\n scheme_id_uri = uint8ToCString(boxData.subarray(offset));\n offset += scheme_id_uri.length;\n value = uint8ToCString(boxData.subarray(offset));\n offset += value.length;\n }\n message_data = new Uint8Array(boxData.subarray(offset, boxData.byteLength));\n var emsgBox = {\n scheme_id_uri,\n value,\n // if timescale is undefined or 0 set to 1 \n timescale: timescale ? timescale : 1,\n presentation_time,\n presentation_time_delta,\n event_duration,\n id,\n message_data\n };\n return isValidEmsgBox(version, emsgBox) ? emsgBox : undefined;\n };\n /**\n * Scales a presentation time or time delta with an offset with a provided timescale\n * @param {number} presentationTime \n * @param {number} timescale \n * @param {number} timeDelta \n * @param {number} offset \n * @returns the scaled time as a number\n */\n\n var scaleTime = function (presentationTime, timescale, timeDelta, offset) {\n return presentationTime || presentationTime === 0 ? presentationTime / timescale : offset + timeDelta / timescale;\n };\n /**\n * Checks the emsg box data for validity based on the version\n * @param {number} version of the emsg box to validate\n * @param {Object} emsg the emsg data to validate\n * @returns if the box is valid as a boolean\n */\n\n var isValidEmsgBox = function (version, emsg) {\n var hasScheme = emsg.scheme_id_uri !== '\\0';\n var isValidV0Box = version === 0 && isDefined(emsg.presentation_time_delta) && hasScheme;\n var isValidV1Box = version === 1 && isDefined(emsg.presentation_time) && hasScheme; // Only valid versions of emsg are 0 and 1\n\n return !(version > 1) && isValidV0Box || isValidV1Box;\n }; // Utility function to check if an object is defined\n\n var isDefined = function (data) {\n return data !== undefined || data !== null;\n };\n var emsg$1 = {\n parseEmsgBox: parseEmsgBox,\n scaleTime: scaleTime\n };\n /**\n * mux.js\n *\n * Copyright (c) Brightcove\n * Licensed Apache-2.0 https://github.com/videojs/mux.js/blob/master/LICENSE\n *\n * Utilities to detect basic properties and metadata about MP4s.\n */\n\n var toUnsigned = bin.toUnsigned;\n var toHexString = bin.toHexString;\n var findBox = findBox_1;\n var parseType$1 = parseType_1;\n var emsg = emsg$1;\n var parseTfhd = parseTfhd$2;\n var parseTrun = parseTrun$2;\n var parseTfdt = parseTfdt$2;\n var getUint64 = numbers.getUint64;\n var timescale, startTime, compositionStartTime, getVideoTrackIds, getTracks, getTimescaleFromMediaHeader, getEmsgID3;\n var window$1 = window_1;\n var parseId3Frames = parseId3.parseId3Frames;\n /**\n * Parses an MP4 initialization segment and extracts the timescale\n * values for any declared tracks. Timescale values indicate the\n * number of clock ticks per second to assume for time-based values\n * elsewhere in the MP4.\n *\n * To determine the start time of an MP4, you need two pieces of\n * information: the timescale unit and the earliest base media decode\n * time. Multiple timescales can be specified within an MP4 but the\n * base media decode time is always expressed in the timescale from\n * the media header box for the track:\n * ```\n * moov > trak > mdia > mdhd.timescale\n * ```\n * @param init {Uint8Array} the bytes of the init segment\n * @return {object} a hash of track ids to timescale values or null if\n * the init segment is malformed.\n */\n\n timescale = function (init) {\n var result = {},\n traks = findBox(init, ['moov', 'trak']); // mdhd timescale\n\n return traks.reduce(function (result, trak) {\n var tkhd, version, index, id, mdhd;\n tkhd = findBox(trak, ['tkhd'])[0];\n if (!tkhd) {\n return null;\n }\n version = tkhd[0];\n index = version === 0 ? 12 : 20;\n id = toUnsigned(tkhd[index] << 24 | tkhd[index + 1] << 16 | tkhd[index + 2] << 8 | tkhd[index + 3]);\n mdhd = findBox(trak, ['mdia', 'mdhd'])[0];\n if (!mdhd) {\n return null;\n }\n version = mdhd[0];\n index = version === 0 ? 12 : 20;\n result[id] = toUnsigned(mdhd[index] << 24 | mdhd[index + 1] << 16 | mdhd[index + 2] << 8 | mdhd[index + 3]);\n return result;\n }, result);\n };\n /**\n * Determine the base media decode start time, in seconds, for an MP4\n * fragment. If multiple fragments are specified, the earliest time is\n * returned.\n *\n * The base media decode time can be parsed from track fragment\n * metadata:\n * ```\n * moof > traf > tfdt.baseMediaDecodeTime\n * ```\n * It requires the timescale value from the mdhd to interpret.\n *\n * @param timescale {object} a hash of track ids to timescale values.\n * @return {number} the earliest base media decode start time for the\n * fragment, in seconds\n */\n\n startTime = function (timescale, fragment) {\n var trafs; // we need info from two childrend of each track fragment box\n\n trafs = findBox(fragment, ['moof', 'traf']); // determine the start times for each track\n\n var lowestTime = trafs.reduce(function (acc, traf) {\n var tfhd = findBox(traf, ['tfhd'])[0]; // get the track id from the tfhd\n\n var id = toUnsigned(tfhd[4] << 24 | tfhd[5] << 16 | tfhd[6] << 8 | tfhd[7]); // assume a 90kHz clock if no timescale was specified\n\n var scale = timescale[id] || 90e3; // get the base media decode time from the tfdt\n\n var tfdt = findBox(traf, ['tfdt'])[0];\n var dv = new DataView(tfdt.buffer, tfdt.byteOffset, tfdt.byteLength);\n var baseTime; // version 1 is 64 bit\n\n if (tfdt[0] === 1) {\n baseTime = getUint64(tfdt.subarray(4, 12));\n } else {\n baseTime = dv.getUint32(4);\n } // convert base time to seconds if it is a valid number.\n\n let seconds;\n if (typeof baseTime === 'bigint') {\n seconds = baseTime / window$1.BigInt(scale);\n } else if (typeof baseTime === 'number' && !isNaN(baseTime)) {\n seconds = baseTime / scale;\n }\n if (seconds < Number.MAX_SAFE_INTEGER) {\n seconds = Number(seconds);\n }\n if (seconds < acc) {\n acc = seconds;\n }\n return acc;\n }, Infinity);\n return typeof lowestTime === 'bigint' || isFinite(lowestTime) ? lowestTime : 0;\n };\n /**\n * Determine the composition start, in seconds, for an MP4\n * fragment.\n *\n * The composition start time of a fragment can be calculated using the base\n * media decode time, composition time offset, and timescale, as follows:\n *\n * compositionStartTime = (baseMediaDecodeTime + compositionTimeOffset) / timescale\n *\n * All of the aforementioned information is contained within a media fragment's\n * `traf` box, except for timescale info, which comes from the initialization\n * segment, so a track id (also contained within a `traf`) is also necessary to\n * associate it with a timescale\n *\n *\n * @param timescales {object} - a hash of track ids to timescale values.\n * @param fragment {Unit8Array} - the bytes of a media segment\n * @return {number} the composition start time for the fragment, in seconds\n **/\n\n compositionStartTime = function (timescales, fragment) {\n var trafBoxes = findBox(fragment, ['moof', 'traf']);\n var baseMediaDecodeTime = 0;\n var compositionTimeOffset = 0;\n var trackId;\n if (trafBoxes && trafBoxes.length) {\n // The spec states that track run samples contained within a `traf` box are contiguous, but\n // it does not explicitly state whether the `traf` boxes themselves are contiguous.\n // We will assume that they are, so we only need the first to calculate start time.\n var tfhd = findBox(trafBoxes[0], ['tfhd'])[0];\n var trun = findBox(trafBoxes[0], ['trun'])[0];\n var tfdt = findBox(trafBoxes[0], ['tfdt'])[0];\n if (tfhd) {\n var parsedTfhd = parseTfhd(tfhd);\n trackId = parsedTfhd.trackId;\n }\n if (tfdt) {\n var parsedTfdt = parseTfdt(tfdt);\n baseMediaDecodeTime = parsedTfdt.baseMediaDecodeTime;\n }\n if (trun) {\n var parsedTrun = parseTrun(trun);\n if (parsedTrun.samples && parsedTrun.samples.length) {\n compositionTimeOffset = parsedTrun.samples[0].compositionTimeOffset || 0;\n }\n }\n } // Get timescale for this specific track. Assume a 90kHz clock if no timescale was\n // specified.\n\n var timescale = timescales[trackId] || 90e3; // return the composition start time, in seconds\n\n if (typeof baseMediaDecodeTime === 'bigint') {\n compositionTimeOffset = window$1.BigInt(compositionTimeOffset);\n timescale = window$1.BigInt(timescale);\n }\n var result = (baseMediaDecodeTime + compositionTimeOffset) / timescale;\n if (typeof result === 'bigint' && result < Number.MAX_SAFE_INTEGER) {\n result = Number(result);\n }\n return result;\n };\n /**\n * Find the trackIds of the video tracks in this source.\n * Found by parsing the Handler Reference and Track Header Boxes:\n * moov > trak > mdia > hdlr\n * moov > trak > tkhd\n *\n * @param {Uint8Array} init - The bytes of the init segment for this source\n * @return {Number[]} A list of trackIds\n *\n * @see ISO-BMFF-12/2015, Section 8.4.3\n **/\n\n getVideoTrackIds = function (init) {\n var traks = findBox(init, ['moov', 'trak']);\n var videoTrackIds = [];\n traks.forEach(function (trak) {\n var hdlrs = findBox(trak, ['mdia', 'hdlr']);\n var tkhds = findBox(trak, ['tkhd']);\n hdlrs.forEach(function (hdlr, index) {\n var handlerType = parseType$1(hdlr.subarray(8, 12));\n var tkhd = tkhds[index];\n var view;\n var version;\n var trackId;\n if (handlerType === 'vide') {\n view = new DataView(tkhd.buffer, tkhd.byteOffset, tkhd.byteLength);\n version = view.getUint8(0);\n trackId = version === 0 ? view.getUint32(12) : view.getUint32(20);\n videoTrackIds.push(trackId);\n }\n });\n });\n return videoTrackIds;\n };\n getTimescaleFromMediaHeader = function (mdhd) {\n // mdhd is a FullBox, meaning it will have its own version as the first byte\n var version = mdhd[0];\n var index = version === 0 ? 12 : 20;\n return toUnsigned(mdhd[index] << 24 | mdhd[index + 1] << 16 | mdhd[index + 2] << 8 | mdhd[index + 3]);\n };\n /**\n * Get all the video, audio, and hint tracks from a non fragmented\n * mp4 segment\n */\n\n getTracks = function (init) {\n var traks = findBox(init, ['moov', 'trak']);\n var tracks = [];\n traks.forEach(function (trak) {\n var track = {};\n var tkhd = findBox(trak, ['tkhd'])[0];\n var view, tkhdVersion; // id\n\n if (tkhd) {\n view = new DataView(tkhd.buffer, tkhd.byteOffset, tkhd.byteLength);\n tkhdVersion = view.getUint8(0);\n track.id = tkhdVersion === 0 ? view.getUint32(12) : view.getUint32(20);\n }\n var hdlr = findBox(trak, ['mdia', 'hdlr'])[0]; // type\n\n if (hdlr) {\n var type = parseType$1(hdlr.subarray(8, 12));\n if (type === 'vide') {\n track.type = 'video';\n } else if (type === 'soun') {\n track.type = 'audio';\n } else {\n track.type = type;\n }\n } // codec\n\n var stsd = findBox(trak, ['mdia', 'minf', 'stbl', 'stsd'])[0];\n if (stsd) {\n var sampleDescriptions = stsd.subarray(8); // gives the codec type string\n\n track.codec = parseType$1(sampleDescriptions.subarray(4, 8));\n var codecBox = findBox(sampleDescriptions, [track.codec])[0];\n var codecConfig, codecConfigType;\n if (codecBox) {\n // https://tools.ietf.org/html/rfc6381#section-3.3\n if (/^[asm]vc[1-9]$/i.test(track.codec)) {\n // we don't need anything but the \"config\" parameter of the\n // avc1 codecBox\n codecConfig = codecBox.subarray(78);\n codecConfigType = parseType$1(codecConfig.subarray(4, 8));\n if (codecConfigType === 'avcC' && codecConfig.length > 11) {\n track.codec += '.'; // left padded with zeroes for single digit hex\n // profile idc\n\n track.codec += toHexString(codecConfig[9]); // the byte containing the constraint_set flags\n\n track.codec += toHexString(codecConfig[10]); // level idc\n\n track.codec += toHexString(codecConfig[11]);\n } else {\n // TODO: show a warning that we couldn't parse the codec\n // and are using the default\n track.codec = 'avc1.4d400d';\n }\n } else if (/^mp4[a,v]$/i.test(track.codec)) {\n // we do not need anything but the streamDescriptor of the mp4a codecBox\n codecConfig = codecBox.subarray(28);\n codecConfigType = parseType$1(codecConfig.subarray(4, 8));\n if (codecConfigType === 'esds' && codecConfig.length > 20 && codecConfig[19] !== 0) {\n track.codec += '.' + toHexString(codecConfig[19]); // this value is only a single digit\n\n track.codec += '.' + toHexString(codecConfig[20] >>> 2 & 0x3f).replace(/^0/, '');\n } else {\n // TODO: show a warning that we couldn't parse the codec\n // and are using the default\n track.codec = 'mp4a.40.2';\n }\n } else {\n // flac, opus, etc\n track.codec = track.codec.toLowerCase();\n }\n }\n }\n var mdhd = findBox(trak, ['mdia', 'mdhd'])[0];\n if (mdhd) {\n track.timescale = getTimescaleFromMediaHeader(mdhd);\n }\n tracks.push(track);\n });\n return tracks;\n };\n /**\n * Returns an array of emsg ID3 data from the provided segmentData.\n * An offset can also be provided as the Latest Arrival Time to calculate \n * the Event Start Time of v0 EMSG boxes. \n * See: https://dashif-documents.azurewebsites.net/Events/master/event.html#Inband-event-timing\n * \n * @param {Uint8Array} segmentData the segment byte array.\n * @param {number} offset the segment start time or Latest Arrival Time, \n * @return {Object[]} an array of ID3 parsed from EMSG boxes\n */\n\n getEmsgID3 = function (segmentData, offset = 0) {\n var emsgBoxes = findBox(segmentData, ['emsg']);\n return emsgBoxes.map(data => {\n var parsedBox = emsg.parseEmsgBox(new Uint8Array(data));\n var parsedId3Frames = parseId3Frames(parsedBox.message_data);\n return {\n cueTime: emsg.scaleTime(parsedBox.presentation_time, parsedBox.timescale, parsedBox.presentation_time_delta, offset),\n duration: emsg.scaleTime(parsedBox.event_duration, parsedBox.timescale),\n frames: parsedId3Frames\n };\n });\n };\n var probe$2 = {\n // export mp4 inspector's findBox and parseType for backwards compatibility\n findBox: findBox,\n parseType: parseType$1,\n timescale: timescale,\n startTime: startTime,\n compositionStartTime: compositionStartTime,\n videoTrackIds: getVideoTrackIds,\n tracks: getTracks,\n getTimescaleFromMediaHeader: getTimescaleFromMediaHeader,\n getEmsgID3: getEmsgID3\n };\n /**\n * mux.js\n *\n * Copyright (c) Brightcove\n * Licensed Apache-2.0 https://github.com/videojs/mux.js/blob/master/LICENSE\n *\n * Utilities to detect basic properties and metadata about TS Segments.\n */\n\n var StreamTypes$1 = streamTypes;\n var parsePid = function (packet) {\n var pid = packet[1] & 0x1f;\n pid <<= 8;\n pid |= packet[2];\n return pid;\n };\n var parsePayloadUnitStartIndicator = function (packet) {\n return !!(packet[1] & 0x40);\n };\n var parseAdaptionField = function (packet) {\n var offset = 0; // if an adaption field is present, its length is specified by the\n // fifth byte of the TS packet header. The adaptation field is\n // used to add stuffing to PES packets that don't fill a complete\n // TS packet, and to specify some forms of timing and control data\n // that we do not currently use.\n\n if ((packet[3] & 0x30) >>> 4 > 0x01) {\n offset += packet[4] + 1;\n }\n return offset;\n };\n var parseType = function (packet, pmtPid) {\n var pid = parsePid(packet);\n if (pid === 0) {\n return 'pat';\n } else if (pid === pmtPid) {\n return 'pmt';\n } else if (pmtPid) {\n return 'pes';\n }\n return null;\n };\n var parsePat = function (packet) {\n var pusi = parsePayloadUnitStartIndicator(packet);\n var offset = 4 + parseAdaptionField(packet);\n if (pusi) {\n offset += packet[offset] + 1;\n }\n return (packet[offset + 10] & 0x1f) << 8 | packet[offset + 11];\n };\n var parsePmt = function (packet) {\n var programMapTable = {};\n var pusi = parsePayloadUnitStartIndicator(packet);\n var payloadOffset = 4 + parseAdaptionField(packet);\n if (pusi) {\n payloadOffset += packet[payloadOffset] + 1;\n } // PMTs can be sent ahead of the time when they should actually\n // take effect. We don't believe this should ever be the case\n // for HLS but we'll ignore \"forward\" PMT declarations if we see\n // them. Future PMT declarations have the current_next_indicator\n // set to zero.\n\n if (!(packet[payloadOffset + 5] & 0x01)) {\n return;\n }\n var sectionLength, tableEnd, programInfoLength; // the mapping table ends at the end of the current section\n\n sectionLength = (packet[payloadOffset + 1] & 0x0f) << 8 | packet[payloadOffset + 2];\n tableEnd = 3 + sectionLength - 4; // to determine where the table is, we have to figure out how\n // long the program info descriptors are\n\n programInfoLength = (packet[payloadOffset + 10] & 0x0f) << 8 | packet[payloadOffset + 11]; // advance the offset to the first entry in the mapping table\n\n var offset = 12 + programInfoLength;\n while (offset < tableEnd) {\n var i = payloadOffset + offset; // add an entry that maps the elementary_pid to the stream_type\n\n programMapTable[(packet[i + 1] & 0x1F) << 8 | packet[i + 2]] = packet[i]; // move to the next table entry\n // skip past the elementary stream descriptors, if present\n\n offset += ((packet[i + 3] & 0x0F) << 8 | packet[i + 4]) + 5;\n }\n return programMapTable;\n };\n var parsePesType = function (packet, programMapTable) {\n var pid = parsePid(packet);\n var type = programMapTable[pid];\n switch (type) {\n case StreamTypes$1.H264_STREAM_TYPE:\n return 'video';\n case StreamTypes$1.ADTS_STREAM_TYPE:\n return 'audio';\n case StreamTypes$1.METADATA_STREAM_TYPE:\n return 'timed-metadata';\n default:\n return null;\n }\n };\n var parsePesTime = function (packet) {\n var pusi = parsePayloadUnitStartIndicator(packet);\n if (!pusi) {\n return null;\n }\n var offset = 4 + parseAdaptionField(packet);\n if (offset >= packet.byteLength) {\n // From the H 222.0 MPEG-TS spec\n // \"For transport stream packets carrying PES packets, stuffing is needed when there\n // is insufficient PES packet data to completely fill the transport stream packet\n // payload bytes. Stuffing is accomplished by defining an adaptation field longer than\n // the sum of the lengths of the data elements in it, so that the payload bytes\n // remaining after the adaptation field exactly accommodates the available PES packet\n // data.\"\n //\n // If the offset is >= the length of the packet, then the packet contains no data\n // and instead is just adaption field stuffing bytes\n return null;\n }\n var pes = null;\n var ptsDtsFlags; // PES packets may be annotated with a PTS value, or a PTS value\n // and a DTS value. Determine what combination of values is\n // available to work with.\n\n ptsDtsFlags = packet[offset + 7]; // PTS and DTS are normally stored as a 33-bit number. Javascript\n // performs all bitwise operations on 32-bit integers but javascript\n // supports a much greater range (52-bits) of integer using standard\n // mathematical operations.\n // We construct a 31-bit value using bitwise operators over the 31\n // most significant bits and then multiply by 4 (equal to a left-shift\n // of 2) before we add the final 2 least significant bits of the\n // timestamp (equal to an OR.)\n\n if (ptsDtsFlags & 0xC0) {\n pes = {}; // the PTS and DTS are not written out directly. For information\n // on how they are encoded, see\n // http://dvd.sourceforge.net/dvdinfo/pes-hdr.html\n\n pes.pts = (packet[offset + 9] & 0x0E) << 27 | (packet[offset + 10] & 0xFF) << 20 | (packet[offset + 11] & 0xFE) << 12 | (packet[offset + 12] & 0xFF) << 5 | (packet[offset + 13] & 0xFE) >>> 3;\n pes.pts *= 4; // Left shift by 2\n\n pes.pts += (packet[offset + 13] & 0x06) >>> 1; // OR by the two LSBs\n\n pes.dts = pes.pts;\n if (ptsDtsFlags & 0x40) {\n pes.dts = (packet[offset + 14] & 0x0E) << 27 | (packet[offset + 15] & 0xFF) << 20 | (packet[offset + 16] & 0xFE) << 12 | (packet[offset + 17] & 0xFF) << 5 | (packet[offset + 18] & 0xFE) >>> 3;\n pes.dts *= 4; // Left shift by 2\n\n pes.dts += (packet[offset + 18] & 0x06) >>> 1; // OR by the two LSBs\n }\n }\n return pes;\n };\n var parseNalUnitType = function (type) {\n switch (type) {\n case 0x05:\n return 'slice_layer_without_partitioning_rbsp_idr';\n case 0x06:\n return 'sei_rbsp';\n case 0x07:\n return 'seq_parameter_set_rbsp';\n case 0x08:\n return 'pic_parameter_set_rbsp';\n case 0x09:\n return 'access_unit_delimiter_rbsp';\n default:\n return null;\n }\n };\n var videoPacketContainsKeyFrame = function (packet) {\n var offset = 4 + parseAdaptionField(packet);\n var frameBuffer = packet.subarray(offset);\n var frameI = 0;\n var frameSyncPoint = 0;\n var foundKeyFrame = false;\n var nalType; // advance the sync point to a NAL start, if necessary\n\n for (; frameSyncPoint < frameBuffer.byteLength - 3; frameSyncPoint++) {\n if (frameBuffer[frameSyncPoint + 2] === 1) {\n // the sync point is properly aligned\n frameI = frameSyncPoint + 5;\n break;\n }\n }\n while (frameI < frameBuffer.byteLength) {\n // look at the current byte to determine if we've hit the end of\n // a NAL unit boundary\n switch (frameBuffer[frameI]) {\n case 0:\n // skip past non-sync sequences\n if (frameBuffer[frameI - 1] !== 0) {\n frameI += 2;\n break;\n } else if (frameBuffer[frameI - 2] !== 0) {\n frameI++;\n break;\n }\n if (frameSyncPoint + 3 !== frameI - 2) {\n nalType = parseNalUnitType(frameBuffer[frameSyncPoint + 3] & 0x1f);\n if (nalType === 'slice_layer_without_partitioning_rbsp_idr') {\n foundKeyFrame = true;\n }\n } // drop trailing zeroes\n\n do {\n frameI++;\n } while (frameBuffer[frameI] !== 1 && frameI < frameBuffer.length);\n frameSyncPoint = frameI - 2;\n frameI += 3;\n break;\n case 1:\n // skip past non-sync sequences\n if (frameBuffer[frameI - 1] !== 0 || frameBuffer[frameI - 2] !== 0) {\n frameI += 3;\n break;\n }\n nalType = parseNalUnitType(frameBuffer[frameSyncPoint + 3] & 0x1f);\n if (nalType === 'slice_layer_without_partitioning_rbsp_idr') {\n foundKeyFrame = true;\n }\n frameSyncPoint = frameI - 2;\n frameI += 3;\n break;\n default:\n // the current byte isn't a one or zero, so it cannot be part\n // of a sync sequence\n frameI += 3;\n break;\n }\n }\n frameBuffer = frameBuffer.subarray(frameSyncPoint);\n frameI -= frameSyncPoint;\n frameSyncPoint = 0; // parse the final nal\n\n if (frameBuffer && frameBuffer.byteLength > 3) {\n nalType = parseNalUnitType(frameBuffer[frameSyncPoint + 3] & 0x1f);\n if (nalType === 'slice_layer_without_partitioning_rbsp_idr') {\n foundKeyFrame = true;\n }\n }\n return foundKeyFrame;\n };\n var probe$1 = {\n parseType: parseType,\n parsePat: parsePat,\n parsePmt: parsePmt,\n parsePayloadUnitStartIndicator: parsePayloadUnitStartIndicator,\n parsePesType: parsePesType,\n parsePesTime: parsePesTime,\n videoPacketContainsKeyFrame: videoPacketContainsKeyFrame\n };\n /**\n * mux.js\n *\n * Copyright (c) Brightcove\n * Licensed Apache-2.0 https://github.com/videojs/mux.js/blob/master/LICENSE\n *\n * Parse mpeg2 transport stream packets to extract basic timing information\n */\n\n var StreamTypes = streamTypes;\n var handleRollover = timestampRolloverStream.handleRollover;\n var probe = {};\n probe.ts = probe$1;\n probe.aac = utils;\n var ONE_SECOND_IN_TS = clock$2.ONE_SECOND_IN_TS;\n var MP2T_PACKET_LENGTH = 188,\n // bytes\n SYNC_BYTE = 0x47;\n /**\n * walks through segment data looking for pat and pmt packets to parse out\n * program map table information\n */\n\n var parsePsi_ = function (bytes, pmt) {\n var startIndex = 0,\n endIndex = MP2T_PACKET_LENGTH,\n packet,\n type;\n while (endIndex < bytes.byteLength) {\n // Look for a pair of start and end sync bytes in the data..\n if (bytes[startIndex] === SYNC_BYTE && bytes[endIndex] === SYNC_BYTE) {\n // We found a packet\n packet = bytes.subarray(startIndex, endIndex);\n type = probe.ts.parseType(packet, pmt.pid);\n switch (type) {\n case 'pat':\n pmt.pid = probe.ts.parsePat(packet);\n break;\n case 'pmt':\n var table = probe.ts.parsePmt(packet);\n pmt.table = pmt.table || {};\n Object.keys(table).forEach(function (key) {\n pmt.table[key] = table[key];\n });\n break;\n }\n startIndex += MP2T_PACKET_LENGTH;\n endIndex += MP2T_PACKET_LENGTH;\n continue;\n } // If we get here, we have somehow become de-synchronized and we need to step\n // forward one byte at a time until we find a pair of sync bytes that denote\n // a packet\n\n startIndex++;\n endIndex++;\n }\n };\n /**\n * walks through the segment data from the start and end to get timing information\n * for the first and last audio pes packets\n */\n\n var parseAudioPes_ = function (bytes, pmt, result) {\n var startIndex = 0,\n endIndex = MP2T_PACKET_LENGTH,\n packet,\n type,\n pesType,\n pusi,\n parsed;\n var endLoop = false; // Start walking from start of segment to get first audio packet\n\n while (endIndex <= bytes.byteLength) {\n // Look for a pair of start and end sync bytes in the data..\n if (bytes[startIndex] === SYNC_BYTE && (bytes[endIndex] === SYNC_BYTE || endIndex === bytes.byteLength)) {\n // We found a packet\n packet = bytes.subarray(startIndex, endIndex);\n type = probe.ts.parseType(packet, pmt.pid);\n switch (type) {\n case 'pes':\n pesType = probe.ts.parsePesType(packet, pmt.table);\n pusi = probe.ts.parsePayloadUnitStartIndicator(packet);\n if (pesType === 'audio' && pusi) {\n parsed = probe.ts.parsePesTime(packet);\n if (parsed) {\n parsed.type = 'audio';\n result.audio.push(parsed);\n endLoop = true;\n }\n }\n break;\n }\n if (endLoop) {\n break;\n }\n startIndex += MP2T_PACKET_LENGTH;\n endIndex += MP2T_PACKET_LENGTH;\n continue;\n } // If we get here, we have somehow become de-synchronized and we need to step\n // forward one byte at a time until we find a pair of sync bytes that denote\n // a packet\n\n startIndex++;\n endIndex++;\n } // Start walking from end of segment to get last audio packet\n\n endIndex = bytes.byteLength;\n startIndex = endIndex - MP2T_PACKET_LENGTH;\n endLoop = false;\n while (startIndex >= 0) {\n // Look for a pair of start and end sync bytes in the data..\n if (bytes[startIndex] === SYNC_BYTE && (bytes[endIndex] === SYNC_BYTE || endIndex === bytes.byteLength)) {\n // We found a packet\n packet = bytes.subarray(startIndex, endIndex);\n type = probe.ts.parseType(packet, pmt.pid);\n switch (type) {\n case 'pes':\n pesType = probe.ts.parsePesType(packet, pmt.table);\n pusi = probe.ts.parsePayloadUnitStartIndicator(packet);\n if (pesType === 'audio' && pusi) {\n parsed = probe.ts.parsePesTime(packet);\n if (parsed) {\n parsed.type = 'audio';\n result.audio.push(parsed);\n endLoop = true;\n }\n }\n break;\n }\n if (endLoop) {\n break;\n }\n startIndex -= MP2T_PACKET_LENGTH;\n endIndex -= MP2T_PACKET_LENGTH;\n continue;\n } // If we get here, we have somehow become de-synchronized and we need to step\n // forward one byte at a time until we find a pair of sync bytes that denote\n // a packet\n\n startIndex--;\n endIndex--;\n }\n };\n /**\n * walks through the segment data from the start and end to get timing information\n * for the first and last video pes packets as well as timing information for the first\n * key frame.\n */\n\n var parseVideoPes_ = function (bytes, pmt, result) {\n var startIndex = 0,\n endIndex = MP2T_PACKET_LENGTH,\n packet,\n type,\n pesType,\n pusi,\n parsed,\n frame,\n i,\n pes;\n var endLoop = false;\n var currentFrame = {\n data: [],\n size: 0\n }; // Start walking from start of segment to get first video packet\n\n while (endIndex < bytes.byteLength) {\n // Look for a pair of start and end sync bytes in the data..\n if (bytes[startIndex] === SYNC_BYTE && bytes[endIndex] === SYNC_BYTE) {\n // We found a packet\n packet = bytes.subarray(startIndex, endIndex);\n type = probe.ts.parseType(packet, pmt.pid);\n switch (type) {\n case 'pes':\n pesType = probe.ts.parsePesType(packet, pmt.table);\n pusi = probe.ts.parsePayloadUnitStartIndicator(packet);\n if (pesType === 'video') {\n if (pusi && !endLoop) {\n parsed = probe.ts.parsePesTime(packet);\n if (parsed) {\n parsed.type = 'video';\n result.video.push(parsed);\n endLoop = true;\n }\n }\n if (!result.firstKeyFrame) {\n if (pusi) {\n if (currentFrame.size !== 0) {\n frame = new Uint8Array(currentFrame.size);\n i = 0;\n while (currentFrame.data.length) {\n pes = currentFrame.data.shift();\n frame.set(pes, i);\n i += pes.byteLength;\n }\n if (probe.ts.videoPacketContainsKeyFrame(frame)) {\n var firstKeyFrame = probe.ts.parsePesTime(frame); // PTS/DTS may not be available. Simply *not* setting\n // the keyframe seems to work fine with HLS playback\n // and definitely preferable to a crash with TypeError...\n\n if (firstKeyFrame) {\n result.firstKeyFrame = firstKeyFrame;\n result.firstKeyFrame.type = 'video';\n } else {\n // eslint-disable-next-line\n console.warn('Failed to extract PTS/DTS from PES at first keyframe. ' + 'This could be an unusual TS segment, or else mux.js did not ' + 'parse your TS segment correctly. If you know your TS ' + 'segments do contain PTS/DTS on keyframes please file a bug ' + 'report! You can try ffprobe to double check for yourself.');\n }\n }\n currentFrame.size = 0;\n }\n }\n currentFrame.data.push(packet);\n currentFrame.size += packet.byteLength;\n }\n }\n break;\n }\n if (endLoop && result.firstKeyFrame) {\n break;\n }\n startIndex += MP2T_PACKET_LENGTH;\n endIndex += MP2T_PACKET_LENGTH;\n continue;\n } // If we get here, we have somehow become de-synchronized and we need to step\n // forward one byte at a time until we find a pair of sync bytes that denote\n // a packet\n\n startIndex++;\n endIndex++;\n } // Start walking from end of segment to get last video packet\n\n endIndex = bytes.byteLength;\n startIndex = endIndex - MP2T_PACKET_LENGTH;\n endLoop = false;\n while (startIndex >= 0) {\n // Look for a pair of start and end sync bytes in the data..\n if (bytes[startIndex] === SYNC_BYTE && bytes[endIndex] === SYNC_BYTE) {\n // We found a packet\n packet = bytes.subarray(startIndex, endIndex);\n type = probe.ts.parseType(packet, pmt.pid);\n switch (type) {\n case 'pes':\n pesType = probe.ts.parsePesType(packet, pmt.table);\n pusi = probe.ts.parsePayloadUnitStartIndicator(packet);\n if (pesType === 'video' && pusi) {\n parsed = probe.ts.parsePesTime(packet);\n if (parsed) {\n parsed.type = 'video';\n result.video.push(parsed);\n endLoop = true;\n }\n }\n break;\n }\n if (endLoop) {\n break;\n }\n startIndex -= MP2T_PACKET_LENGTH;\n endIndex -= MP2T_PACKET_LENGTH;\n continue;\n } // If we get here, we have somehow become de-synchronized and we need to step\n // forward one byte at a time until we find a pair of sync bytes that denote\n // a packet\n\n startIndex--;\n endIndex--;\n }\n };\n /**\n * Adjusts the timestamp information for the segment to account for\n * rollover and convert to seconds based on pes packet timescale (90khz clock)\n */\n\n var adjustTimestamp_ = function (segmentInfo, baseTimestamp) {\n if (segmentInfo.audio && segmentInfo.audio.length) {\n var audioBaseTimestamp = baseTimestamp;\n if (typeof audioBaseTimestamp === 'undefined' || isNaN(audioBaseTimestamp)) {\n audioBaseTimestamp = segmentInfo.audio[0].dts;\n }\n segmentInfo.audio.forEach(function (info) {\n info.dts = handleRollover(info.dts, audioBaseTimestamp);\n info.pts = handleRollover(info.pts, audioBaseTimestamp); // time in seconds\n\n info.dtsTime = info.dts / ONE_SECOND_IN_TS;\n info.ptsTime = info.pts / ONE_SECOND_IN_TS;\n });\n }\n if (segmentInfo.video && segmentInfo.video.length) {\n var videoBaseTimestamp = baseTimestamp;\n if (typeof videoBaseTimestamp === 'undefined' || isNaN(videoBaseTimestamp)) {\n videoBaseTimestamp = segmentInfo.video[0].dts;\n }\n segmentInfo.video.forEach(function (info) {\n info.dts = handleRollover(info.dts, videoBaseTimestamp);\n info.pts = handleRollover(info.pts, videoBaseTimestamp); // time in seconds\n\n info.dtsTime = info.dts / ONE_SECOND_IN_TS;\n info.ptsTime = info.pts / ONE_SECOND_IN_TS;\n });\n if (segmentInfo.firstKeyFrame) {\n var frame = segmentInfo.firstKeyFrame;\n frame.dts = handleRollover(frame.dts, videoBaseTimestamp);\n frame.pts = handleRollover(frame.pts, videoBaseTimestamp); // time in seconds\n\n frame.dtsTime = frame.dts / ONE_SECOND_IN_TS;\n frame.ptsTime = frame.pts / ONE_SECOND_IN_TS;\n }\n }\n };\n /**\n * inspects the aac data stream for start and end time information\n */\n\n var inspectAac_ = function (bytes) {\n var endLoop = false,\n audioCount = 0,\n sampleRate = null,\n timestamp = null,\n frameSize = 0,\n byteIndex = 0,\n packet;\n while (bytes.length - byteIndex >= 3) {\n var type = probe.aac.parseType(bytes, byteIndex);\n switch (type) {\n case 'timed-metadata':\n // Exit early because we don't have enough to parse\n // the ID3 tag header\n if (bytes.length - byteIndex < 10) {\n endLoop = true;\n break;\n }\n frameSize = probe.aac.parseId3TagSize(bytes, byteIndex); // Exit early if we don't have enough in the buffer\n // to emit a full packet\n\n if (frameSize > bytes.length) {\n endLoop = true;\n break;\n }\n if (timestamp === null) {\n packet = bytes.subarray(byteIndex, byteIndex + frameSize);\n timestamp = probe.aac.parseAacTimestamp(packet);\n }\n byteIndex += frameSize;\n break;\n case 'audio':\n // Exit early because we don't have enough to parse\n // the ADTS frame header\n if (bytes.length - byteIndex < 7) {\n endLoop = true;\n break;\n }\n frameSize = probe.aac.parseAdtsSize(bytes, byteIndex); // Exit early if we don't have enough in the buffer\n // to emit a full packet\n\n if (frameSize > bytes.length) {\n endLoop = true;\n break;\n }\n if (sampleRate === null) {\n packet = bytes.subarray(byteIndex, byteIndex + frameSize);\n sampleRate = probe.aac.parseSampleRate(packet);\n }\n audioCount++;\n byteIndex += frameSize;\n break;\n default:\n byteIndex++;\n break;\n }\n if (endLoop) {\n return null;\n }\n }\n if (sampleRate === null || timestamp === null) {\n return null;\n }\n var audioTimescale = ONE_SECOND_IN_TS / sampleRate;\n var result = {\n audio: [{\n type: 'audio',\n dts: timestamp,\n pts: timestamp\n }, {\n type: 'audio',\n dts: timestamp + audioCount * 1024 * audioTimescale,\n pts: timestamp + audioCount * 1024 * audioTimescale\n }]\n };\n return result;\n };\n /**\n * inspects the transport stream segment data for start and end time information\n * of the audio and video tracks (when present) as well as the first key frame's\n * start time.\n */\n\n var inspectTs_ = function (bytes) {\n var pmt = {\n pid: null,\n table: null\n };\n var result = {};\n parsePsi_(bytes, pmt);\n for (var pid in pmt.table) {\n if (pmt.table.hasOwnProperty(pid)) {\n var type = pmt.table[pid];\n switch (type) {\n case StreamTypes.H264_STREAM_TYPE:\n result.video = [];\n parseVideoPes_(bytes, pmt, result);\n if (result.video.length === 0) {\n delete result.video;\n }\n break;\n case StreamTypes.ADTS_STREAM_TYPE:\n result.audio = [];\n parseAudioPes_(bytes, pmt, result);\n if (result.audio.length === 0) {\n delete result.audio;\n }\n break;\n }\n }\n }\n return result;\n };\n /**\n * Inspects segment byte data and returns an object with start and end timing information\n *\n * @param {Uint8Array} bytes The segment byte data\n * @param {Number} baseTimestamp Relative reference timestamp used when adjusting frame\n * timestamps for rollover. This value must be in 90khz clock.\n * @return {Object} Object containing start and end frame timing info of segment.\n */\n\n var inspect = function (bytes, baseTimestamp) {\n var isAacData = probe.aac.isLikelyAacData(bytes);\n var result;\n if (isAacData) {\n result = inspectAac_(bytes);\n } else {\n result = inspectTs_(bytes);\n }\n if (!result || !result.audio && !result.video) {\n return null;\n }\n adjustTimestamp_(result, baseTimestamp);\n return result;\n };\n var tsInspector = {\n inspect: inspect,\n parseAudioPes_: parseAudioPes_\n };\n /* global self */\n\n /**\n * Re-emits transmuxer events by converting them into messages to the\n * world outside the worker.\n *\n * @param {Object} transmuxer the transmuxer to wire events on\n * @private\n */\n\n const wireTransmuxerEvents = function (self, transmuxer) {\n transmuxer.on('data', function (segment) {\n // transfer ownership of the underlying ArrayBuffer\n // instead of doing a copy to save memory\n // ArrayBuffers are transferable but generic TypedArrays are not\n // @link https://developer.mozilla.org/en-US/docs/Web/API/Web_Workers_API/Using_web_workers#Passing_data_by_transferring_ownership_(transferable_objects)\n const initArray = segment.initSegment;\n segment.initSegment = {\n data: initArray.buffer,\n byteOffset: initArray.byteOffset,\n byteLength: initArray.byteLength\n };\n const typedArray = segment.data;\n segment.data = typedArray.buffer;\n self.postMessage({\n action: 'data',\n segment,\n byteOffset: typedArray.byteOffset,\n byteLength: typedArray.byteLength\n }, [segment.data]);\n });\n transmuxer.on('done', function (data) {\n self.postMessage({\n action: 'done'\n });\n });\n transmuxer.on('gopInfo', function (gopInfo) {\n self.postMessage({\n action: 'gopInfo',\n gopInfo\n });\n });\n transmuxer.on('videoSegmentTimingInfo', function (timingInfo) {\n const videoSegmentTimingInfo = {\n start: {\n decode: clock$2.videoTsToSeconds(timingInfo.start.dts),\n presentation: clock$2.videoTsToSeconds(timingInfo.start.pts)\n },\n end: {\n decode: clock$2.videoTsToSeconds(timingInfo.end.dts),\n presentation: clock$2.videoTsToSeconds(timingInfo.end.pts)\n },\n baseMediaDecodeTime: clock$2.videoTsToSeconds(timingInfo.baseMediaDecodeTime)\n };\n if (timingInfo.prependedContentDuration) {\n videoSegmentTimingInfo.prependedContentDuration = clock$2.videoTsToSeconds(timingInfo.prependedContentDuration);\n }\n self.postMessage({\n action: 'videoSegmentTimingInfo',\n videoSegmentTimingInfo\n });\n });\n transmuxer.on('audioSegmentTimingInfo', function (timingInfo) {\n // Note that all times for [audio/video]SegmentTimingInfo events are in video clock\n const audioSegmentTimingInfo = {\n start: {\n decode: clock$2.videoTsToSeconds(timingInfo.start.dts),\n presentation: clock$2.videoTsToSeconds(timingInfo.start.pts)\n },\n end: {\n decode: clock$2.videoTsToSeconds(timingInfo.end.dts),\n presentation: clock$2.videoTsToSeconds(timingInfo.end.pts)\n },\n baseMediaDecodeTime: clock$2.videoTsToSeconds(timingInfo.baseMediaDecodeTime)\n };\n if (timingInfo.prependedContentDuration) {\n audioSegmentTimingInfo.prependedContentDuration = clock$2.videoTsToSeconds(timingInfo.prependedContentDuration);\n }\n self.postMessage({\n action: 'audioSegmentTimingInfo',\n audioSegmentTimingInfo\n });\n });\n transmuxer.on('id3Frame', function (id3Frame) {\n self.postMessage({\n action: 'id3Frame',\n id3Frame\n });\n });\n transmuxer.on('caption', function (caption) {\n self.postMessage({\n action: 'caption',\n caption\n });\n });\n transmuxer.on('trackinfo', function (trackInfo) {\n self.postMessage({\n action: 'trackinfo',\n trackInfo\n });\n });\n transmuxer.on('audioTimingInfo', function (audioTimingInfo) {\n // convert to video TS since we prioritize video time over audio\n self.postMessage({\n action: 'audioTimingInfo',\n audioTimingInfo: {\n start: clock$2.videoTsToSeconds(audioTimingInfo.start),\n end: clock$2.videoTsToSeconds(audioTimingInfo.end)\n }\n });\n });\n transmuxer.on('videoTimingInfo', function (videoTimingInfo) {\n self.postMessage({\n action: 'videoTimingInfo',\n videoTimingInfo: {\n start: clock$2.videoTsToSeconds(videoTimingInfo.start),\n end: clock$2.videoTsToSeconds(videoTimingInfo.end)\n }\n });\n });\n transmuxer.on('log', function (log) {\n self.postMessage({\n action: 'log',\n log\n });\n });\n };\n /**\n * All incoming messages route through this hash. If no function exists\n * to handle an incoming message, then we ignore the message.\n *\n * @class MessageHandlers\n * @param {Object} options the options to initialize with\n */\n\n class MessageHandlers {\n constructor(self, options) {\n this.options = options || {};\n this.self = self;\n this.init();\n }\n /**\n * initialize our web worker and wire all the events.\n */\n\n init() {\n if (this.transmuxer) {\n this.transmuxer.dispose();\n }\n this.transmuxer = new transmuxer.Transmuxer(this.options);\n wireTransmuxerEvents(this.self, this.transmuxer);\n }\n pushMp4Captions(data) {\n if (!this.captionParser) {\n this.captionParser = new captionParser();\n this.captionParser.init();\n }\n const segment = new Uint8Array(data.data, data.byteOffset, data.byteLength);\n const parsed = this.captionParser.parse(segment, data.trackIds, data.timescales);\n this.self.postMessage({\n action: 'mp4Captions',\n captions: parsed && parsed.captions || [],\n logs: parsed && parsed.logs || [],\n data: segment.buffer\n }, [segment.buffer]);\n }\n probeMp4StartTime({\n timescales,\n data\n }) {\n const startTime = probe$2.startTime(timescales, data);\n this.self.postMessage({\n action: 'probeMp4StartTime',\n startTime,\n data\n }, [data.buffer]);\n }\n probeMp4Tracks({\n data\n }) {\n const tracks = probe$2.tracks(data);\n this.self.postMessage({\n action: 'probeMp4Tracks',\n tracks,\n data\n }, [data.buffer]);\n }\n /**\n * Probes an mp4 segment for EMSG boxes containing ID3 data.\n * https://aomediacodec.github.io/id3-emsg/\n *\n * @param {Uint8Array} data segment data\n * @param {number} offset segment start time\n * @return {Object[]} an array of ID3 frames\n */\n\n probeEmsgID3({\n data,\n offset\n }) {\n const id3Frames = probe$2.getEmsgID3(data, offset);\n this.self.postMessage({\n action: 'probeEmsgID3',\n id3Frames,\n emsgData: data\n }, [data.buffer]);\n }\n /**\n * Probe an mpeg2-ts segment to determine the start time of the segment in it's\n * internal \"media time,\" as well as whether it contains video and/or audio.\n *\n * @private\n * @param {Uint8Array} bytes - segment bytes\n * @param {number} baseStartTime\n * Relative reference timestamp used when adjusting frame timestamps for rollover.\n * This value should be in seconds, as it's converted to a 90khz clock within the\n * function body.\n * @return {Object} The start time of the current segment in \"media time\" as well as\n * whether it contains video and/or audio\n */\n\n probeTs({\n data,\n baseStartTime\n }) {\n const tsStartTime = typeof baseStartTime === 'number' && !isNaN(baseStartTime) ? baseStartTime * clock$2.ONE_SECOND_IN_TS : void 0;\n const timeInfo = tsInspector.inspect(data, tsStartTime);\n let result = null;\n if (timeInfo) {\n result = {\n // each type's time info comes back as an array of 2 times, start and end\n hasVideo: timeInfo.video && timeInfo.video.length === 2 || false,\n hasAudio: timeInfo.audio && timeInfo.audio.length === 2 || false\n };\n if (result.hasVideo) {\n result.videoStart = timeInfo.video[0].ptsTime;\n }\n if (result.hasAudio) {\n result.audioStart = timeInfo.audio[0].ptsTime;\n }\n }\n this.self.postMessage({\n action: 'probeTs',\n result,\n data\n }, [data.buffer]);\n }\n clearAllMp4Captions() {\n if (this.captionParser) {\n this.captionParser.clearAllCaptions();\n }\n }\n clearParsedMp4Captions() {\n if (this.captionParser) {\n this.captionParser.clearParsedCaptions();\n }\n }\n /**\n * Adds data (a ts segment) to the start of the transmuxer pipeline for\n * processing.\n *\n * @param {ArrayBuffer} data data to push into the muxer\n */\n\n push(data) {\n // Cast array buffer to correct type for transmuxer\n const segment = new Uint8Array(data.data, data.byteOffset, data.byteLength);\n this.transmuxer.push(segment);\n }\n /**\n * Recreate the transmuxer so that the next segment added via `push`\n * start with a fresh transmuxer.\n */\n\n reset() {\n this.transmuxer.reset();\n }\n /**\n * Set the value that will be used as the `baseMediaDecodeTime` time for the\n * next segment pushed in. Subsequent segments will have their `baseMediaDecodeTime`\n * set relative to the first based on the PTS values.\n *\n * @param {Object} data used to set the timestamp offset in the muxer\n */\n\n setTimestampOffset(data) {\n const timestampOffset = data.timestampOffset || 0;\n this.transmuxer.setBaseMediaDecodeTime(Math.round(clock$2.secondsToVideoTs(timestampOffset)));\n }\n setAudioAppendStart(data) {\n this.transmuxer.setAudioAppendStart(Math.ceil(clock$2.secondsToVideoTs(data.appendStart)));\n }\n setRemux(data) {\n this.transmuxer.setRemux(data.remux);\n }\n /**\n * Forces the pipeline to finish processing the last segment and emit it's\n * results.\n *\n * @param {Object} data event data, not really used\n */\n\n flush(data) {\n this.transmuxer.flush(); // transmuxed done action is fired after both audio/video pipelines are flushed\n\n self.postMessage({\n action: 'done',\n type: 'transmuxed'\n });\n }\n endTimeline() {\n this.transmuxer.endTimeline(); // transmuxed endedtimeline action is fired after both audio/video pipelines end their\n // timelines\n\n self.postMessage({\n action: 'endedtimeline',\n type: 'transmuxed'\n });\n }\n alignGopsWith(data) {\n this.transmuxer.alignGopsWith(data.gopsToAlignWith.slice());\n }\n }\n /**\n * Our web worker interface so that things can talk to mux.js\n * that will be running in a web worker. the scope is passed to this by\n * webworkify.\n *\n * @param {Object} self the scope for the web worker\n */\n\n self.onmessage = function (event) {\n if (event.data.action === 'init' && event.data.options) {\n this.messageHandlers = new MessageHandlers(self, event.data.options);\n return;\n }\n if (!this.messageHandlers) {\n this.messageHandlers = new MessageHandlers(self);\n }\n if (event.data && event.data.action && event.data.action !== 'init') {\n if (this.messageHandlers[event.data.action]) {\n this.messageHandlers[event.data.action](event.data);\n }\n }\n };\n}));\nvar TransmuxWorker = factory(workerCode$1);\n/* rollup-plugin-worker-factory end for worker!/home/runner/work/http-streaming/http-streaming/src/transmuxer-worker.js */\n\nconst handleData_ = (event, transmuxedData, callback) => {\n const {\n type,\n initSegment,\n captions,\n captionStreams,\n metadata,\n videoFrameDtsTime,\n videoFramePtsTime\n } = event.data.segment;\n transmuxedData.buffer.push({\n captions,\n captionStreams,\n metadata\n });\n const boxes = event.data.segment.boxes || {\n data: event.data.segment.data\n };\n const result = {\n type,\n // cast ArrayBuffer to TypedArray\n data: new Uint8Array(boxes.data, boxes.data.byteOffset, boxes.data.byteLength),\n initSegment: new Uint8Array(initSegment.data, initSegment.byteOffset, initSegment.byteLength)\n };\n if (typeof videoFrameDtsTime !== 'undefined') {\n result.videoFrameDtsTime = videoFrameDtsTime;\n }\n if (typeof videoFramePtsTime !== 'undefined') {\n result.videoFramePtsTime = videoFramePtsTime;\n }\n callback(result);\n};\nconst handleDone_ = ({\n transmuxedData,\n callback\n}) => {\n // Previously we only returned data on data events,\n // not on done events. Clear out the buffer to keep that consistent.\n transmuxedData.buffer = []; // all buffers should have been flushed from the muxer, so start processing anything we\n // have received\n\n callback(transmuxedData);\n};\nconst handleGopInfo_ = (event, transmuxedData) => {\n transmuxedData.gopInfo = event.data.gopInfo;\n};\nconst processTransmux = options => {\n const {\n transmuxer,\n bytes,\n audioAppendStart,\n gopsToAlignWith,\n remux,\n onData,\n onTrackInfo,\n onAudioTimingInfo,\n onVideoTimingInfo,\n onVideoSegmentTimingInfo,\n onAudioSegmentTimingInfo,\n onId3,\n onCaptions,\n onDone,\n onEndedTimeline,\n onTransmuxerLog,\n isEndOfTimeline,\n segment,\n triggerSegmentEventFn\n } = options;\n const transmuxedData = {\n buffer: []\n };\n let waitForEndedTimelineEvent = isEndOfTimeline;\n const handleMessage = event => {\n if (transmuxer.currentTransmux !== options) {\n // disposed\n return;\n }\n if (event.data.action === 'data') {\n handleData_(event, transmuxedData, onData);\n }\n if (event.data.action === 'trackinfo') {\n onTrackInfo(event.data.trackInfo);\n }\n if (event.data.action === 'gopInfo') {\n handleGopInfo_(event, transmuxedData);\n }\n if (event.data.action === 'audioTimingInfo') {\n onAudioTimingInfo(event.data.audioTimingInfo);\n }\n if (event.data.action === 'videoTimingInfo') {\n onVideoTimingInfo(event.data.videoTimingInfo);\n }\n if (event.data.action === 'videoSegmentTimingInfo') {\n onVideoSegmentTimingInfo(event.data.videoSegmentTimingInfo);\n }\n if (event.data.action === 'audioSegmentTimingInfo') {\n onAudioSegmentTimingInfo(event.data.audioSegmentTimingInfo);\n }\n if (event.data.action === 'id3Frame') {\n onId3([event.data.id3Frame], event.data.id3Frame.dispatchType);\n }\n if (event.data.action === 'caption') {\n onCaptions(event.data.caption);\n }\n if (event.data.action === 'endedtimeline') {\n waitForEndedTimelineEvent = false;\n onEndedTimeline();\n }\n if (event.data.action === 'log') {\n onTransmuxerLog(event.data.log);\n } // wait for the transmuxed event since we may have audio and video\n\n if (event.data.type !== 'transmuxed') {\n return;\n } // If the \"endedtimeline\" event has not yet fired, and this segment represents the end\n // of a timeline, that means there may still be data events before the segment\n // processing can be considerred complete. In that case, the final event should be\n // an \"endedtimeline\" event with the type \"transmuxed.\"\n\n if (waitForEndedTimelineEvent) {\n return;\n }\n transmuxer.onmessage = null;\n handleDone_({\n transmuxedData,\n callback: onDone\n });\n /* eslint-disable no-use-before-define */\n\n dequeue(transmuxer);\n /* eslint-enable */\n };\n const handleError = () => {\n const error = {\n message: 'Received an error message from the transmuxer worker',\n metadata: {\n errorType: videojs.Error.StreamingFailedToTransmuxSegment,\n segmentInfo: segmentInfoPayload({\n segment\n })\n }\n };\n onDone(null, error);\n };\n transmuxer.onmessage = handleMessage;\n transmuxer.onerror = handleError;\n if (audioAppendStart) {\n transmuxer.postMessage({\n action: 'setAudioAppendStart',\n appendStart: audioAppendStart\n });\n } // allow empty arrays to be passed to clear out GOPs\n\n if (Array.isArray(gopsToAlignWith)) {\n transmuxer.postMessage({\n action: 'alignGopsWith',\n gopsToAlignWith\n });\n }\n if (typeof remux !== 'undefined') {\n transmuxer.postMessage({\n action: 'setRemux',\n remux\n });\n }\n if (bytes.byteLength) {\n const buffer = bytes instanceof ArrayBuffer ? bytes : bytes.buffer;\n const byteOffset = bytes instanceof ArrayBuffer ? 0 : bytes.byteOffset;\n triggerSegmentEventFn({\n type: 'segmenttransmuxingstart',\n segment\n });\n transmuxer.postMessage({\n action: 'push',\n // Send the typed-array of data as an ArrayBuffer so that\n // it can be sent as a \"Transferable\" and avoid the costly\n // memory copy\n data: buffer,\n // To recreate the original typed-array, we need information\n // about what portion of the ArrayBuffer it was a view into\n byteOffset,\n byteLength: bytes.byteLength\n }, [buffer]);\n }\n if (isEndOfTimeline) {\n transmuxer.postMessage({\n action: 'endTimeline'\n });\n } // even if we didn't push any bytes, we have to make sure we flush in case we reached\n // the end of the segment\n\n transmuxer.postMessage({\n action: 'flush'\n });\n};\nconst dequeue = transmuxer => {\n transmuxer.currentTransmux = null;\n if (transmuxer.transmuxQueue.length) {\n transmuxer.currentTransmux = transmuxer.transmuxQueue.shift();\n if (typeof transmuxer.currentTransmux === 'function') {\n transmuxer.currentTransmux();\n } else {\n processTransmux(transmuxer.currentTransmux);\n }\n }\n};\nconst processAction = (transmuxer, action) => {\n transmuxer.postMessage({\n action\n });\n dequeue(transmuxer);\n};\nconst enqueueAction = (action, transmuxer) => {\n if (!transmuxer.currentTransmux) {\n transmuxer.currentTransmux = action;\n processAction(transmuxer, action);\n return;\n }\n transmuxer.transmuxQueue.push(processAction.bind(null, transmuxer, action));\n};\nconst reset = transmuxer => {\n enqueueAction('reset', transmuxer);\n};\nconst endTimeline = transmuxer => {\n enqueueAction('endTimeline', transmuxer);\n};\nconst transmux = options => {\n if (!options.transmuxer.currentTransmux) {\n options.transmuxer.currentTransmux = options;\n processTransmux(options);\n return;\n }\n options.transmuxer.transmuxQueue.push(options);\n};\nconst createTransmuxer = options => {\n const transmuxer = new TransmuxWorker();\n transmuxer.currentTransmux = null;\n transmuxer.transmuxQueue = [];\n const term = transmuxer.terminate;\n transmuxer.terminate = () => {\n transmuxer.currentTransmux = null;\n transmuxer.transmuxQueue.length = 0;\n return term.call(transmuxer);\n };\n transmuxer.postMessage({\n action: 'init',\n options\n });\n return transmuxer;\n};\nvar segmentTransmuxer = {\n reset,\n endTimeline,\n transmux,\n createTransmuxer\n};\nconst workerCallback = function (options) {\n const transmuxer = options.transmuxer;\n const endAction = options.endAction || options.action;\n const callback = options.callback;\n const message = _extends({}, options, {\n endAction: null,\n transmuxer: null,\n callback: null\n });\n const listenForEndEvent = event => {\n if (event.data.action !== endAction) {\n return;\n }\n transmuxer.removeEventListener('message', listenForEndEvent); // transfer ownership of bytes back to us.\n\n if (event.data.data) {\n event.data.data = new Uint8Array(event.data.data, options.byteOffset || 0, options.byteLength || event.data.data.byteLength);\n if (options.data) {\n options.data = event.data.data;\n }\n }\n callback(event.data);\n };\n transmuxer.addEventListener('message', listenForEndEvent);\n if (options.data) {\n const isArrayBuffer = options.data instanceof ArrayBuffer;\n message.byteOffset = isArrayBuffer ? 0 : options.data.byteOffset;\n message.byteLength = options.data.byteLength;\n const transfers = [isArrayBuffer ? options.data : options.data.buffer];\n transmuxer.postMessage(message, transfers);\n } else {\n transmuxer.postMessage(message);\n }\n};\nconst REQUEST_ERRORS = {\n FAILURE: 2,\n TIMEOUT: -101,\n ABORTED: -102\n};\n/**\n * Abort all requests\n *\n * @param {Object} activeXhrs - an object that tracks all XHR requests\n */\n\nconst abortAll = activeXhrs => {\n activeXhrs.forEach(xhr => {\n xhr.abort();\n });\n};\n/**\n * Gather important bandwidth stats once a request has completed\n *\n * @param {Object} request - the XHR request from which to gather stats\n */\n\nconst getRequestStats = request => {\n return {\n bandwidth: request.bandwidth,\n bytesReceived: request.bytesReceived || 0,\n roundTripTime: request.roundTripTime || 0\n };\n};\n/**\n * If possible gather bandwidth stats as a request is in\n * progress\n *\n * @param {Event} progressEvent - an event object from an XHR's progress event\n */\n\nconst getProgressStats = progressEvent => {\n const request = progressEvent.target;\n const roundTripTime = Date.now() - request.requestTime;\n const stats = {\n bandwidth: Infinity,\n bytesReceived: 0,\n roundTripTime: roundTripTime || 0\n };\n stats.bytesReceived = progressEvent.loaded; // This can result in Infinity if stats.roundTripTime is 0 but that is ok\n // because we should only use bandwidth stats on progress to determine when\n // abort a request early due to insufficient bandwidth\n\n stats.bandwidth = Math.floor(stats.bytesReceived / stats.roundTripTime * 8 * 1000);\n return stats;\n};\n/**\n * Handle all error conditions in one place and return an object\n * with all the information\n *\n * @param {Error|null} error - if non-null signals an error occured with the XHR\n * @param {Object} request - the XHR request that possibly generated the error\n */\n\nconst handleErrors = (error, request) => {\n const {\n requestType\n } = request;\n const metadata = getStreamingNetworkErrorMetadata({\n requestType,\n request,\n error\n });\n if (request.timedout) {\n return {\n status: request.status,\n message: 'HLS request timed-out at URL: ' + request.uri,\n code: REQUEST_ERRORS.TIMEOUT,\n xhr: request,\n metadata\n };\n }\n if (request.aborted) {\n return {\n status: request.status,\n message: 'HLS request aborted at URL: ' + request.uri,\n code: REQUEST_ERRORS.ABORTED,\n xhr: request,\n metadata\n };\n }\n if (error) {\n return {\n status: request.status,\n message: 'HLS request errored at URL: ' + request.uri,\n code: REQUEST_ERRORS.FAILURE,\n xhr: request,\n metadata\n };\n }\n if (request.responseType === 'arraybuffer' && request.response.byteLength === 0) {\n return {\n status: request.status,\n message: 'Empty HLS response at URL: ' + request.uri,\n code: REQUEST_ERRORS.FAILURE,\n xhr: request,\n metadata\n };\n }\n return null;\n};\n/**\n * Handle responses for key data and convert the key data to the correct format\n * for the decryption step later\n *\n * @param {Object} segment - a simplified copy of the segmentInfo object\n * from SegmentLoader\n * @param {Array} objects - objects to add the key bytes to.\n * @param {Function} finishProcessingFn - a callback to execute to continue processing\n * this request\n */\n\nconst handleKeyResponse = (segment, objects, finishProcessingFn, triggerSegmentEventFn) => (error, request) => {\n const response = request.response;\n const errorObj = handleErrors(error, request);\n if (errorObj) {\n return finishProcessingFn(errorObj, segment);\n }\n if (response.byteLength !== 16) {\n return finishProcessingFn({\n status: request.status,\n message: 'Invalid HLS key at URL: ' + request.uri,\n code: REQUEST_ERRORS.FAILURE,\n xhr: request\n }, segment);\n }\n const view = new DataView(response);\n const bytes = new Uint32Array([view.getUint32(0), view.getUint32(4), view.getUint32(8), view.getUint32(12)]);\n for (let i = 0; i < objects.length; i++) {\n objects[i].bytes = bytes;\n }\n const keyInfo = {\n uri: request.uri\n };\n triggerSegmentEventFn({\n type: 'segmentkeyloadcomplete',\n segment,\n keyInfo\n });\n return finishProcessingFn(null, segment);\n};\nconst parseInitSegment = (segment, callback) => {\n const type = detectContainerForBytes(segment.map.bytes); // TODO: We should also handle ts init segments here, but we\n // only know how to parse mp4 init segments at the moment\n\n if (type !== 'mp4') {\n const uri = segment.map.resolvedUri || segment.map.uri;\n const mediaType = type || 'unknown';\n return callback({\n internal: true,\n message: `Found unsupported ${mediaType} container for initialization segment at URL: ${uri}`,\n code: REQUEST_ERRORS.FAILURE,\n metadata: {\n mediaType\n }\n });\n }\n workerCallback({\n action: 'probeMp4Tracks',\n data: segment.map.bytes,\n transmuxer: segment.transmuxer,\n callback: ({\n tracks,\n data\n }) => {\n // transfer bytes back to us\n segment.map.bytes = data;\n tracks.forEach(function (track) {\n segment.map.tracks = segment.map.tracks || {}; // only support one track of each type for now\n\n if (segment.map.tracks[track.type]) {\n return;\n }\n segment.map.tracks[track.type] = track;\n if (typeof track.id === 'number' && track.timescale) {\n segment.map.timescales = segment.map.timescales || {};\n segment.map.timescales[track.id] = track.timescale;\n }\n });\n return callback(null);\n }\n });\n};\n/**\n * Handle init-segment responses\n *\n * @param {Object} segment - a simplified copy of the segmentInfo object\n * from SegmentLoader\n * @param {Function} finishProcessingFn - a callback to execute to continue processing\n * this request\n */\n\nconst handleInitSegmentResponse = ({\n segment,\n finishProcessingFn,\n triggerSegmentEventFn\n}) => (error, request) => {\n const errorObj = handleErrors(error, request);\n if (errorObj) {\n return finishProcessingFn(errorObj, segment);\n }\n const bytes = new Uint8Array(request.response);\n triggerSegmentEventFn({\n type: 'segmentloaded',\n segment\n }); // init segment is encypted, we will have to wait\n // until the key request is done to decrypt.\n\n if (segment.map.key) {\n segment.map.encryptedBytes = bytes;\n return finishProcessingFn(null, segment);\n }\n segment.map.bytes = bytes;\n parseInitSegment(segment, function (parseError) {\n if (parseError) {\n parseError.xhr = request;\n parseError.status = request.status;\n return finishProcessingFn(parseError, segment);\n }\n finishProcessingFn(null, segment);\n });\n};\n/**\n * Response handler for segment-requests being sure to set the correct\n * property depending on whether the segment is encryped or not\n * Also records and keeps track of stats that are used for ABR purposes\n *\n * @param {Object} segment - a simplified copy of the segmentInfo object\n * from SegmentLoader\n * @param {Function} finishProcessingFn - a callback to execute to continue processing\n * this request\n */\n\nconst handleSegmentResponse = ({\n segment,\n finishProcessingFn,\n responseType,\n triggerSegmentEventFn\n}) => (error, request) => {\n const errorObj = handleErrors(error, request);\n if (errorObj) {\n return finishProcessingFn(errorObj, segment);\n }\n triggerSegmentEventFn({\n type: 'segmentloaded',\n segment\n });\n const newBytes =\n // although responseText \"should\" exist, this guard serves to prevent an error being\n // thrown for two primary cases:\n // 1. the mime type override stops working, or is not implemented for a specific\n // browser\n // 2. when using mock XHR libraries like sinon that do not allow the override behavior\n responseType === 'arraybuffer' || !request.responseText ? request.response : stringToArrayBuffer(request.responseText.substring(segment.lastReachedChar || 0));\n segment.stats = getRequestStats(request);\n if (segment.key) {\n segment.encryptedBytes = new Uint8Array(newBytes);\n } else {\n segment.bytes = new Uint8Array(newBytes);\n }\n return finishProcessingFn(null, segment);\n};\nconst transmuxAndNotify = ({\n segment,\n bytes,\n trackInfoFn,\n timingInfoFn,\n videoSegmentTimingInfoFn,\n audioSegmentTimingInfoFn,\n id3Fn,\n captionsFn,\n isEndOfTimeline,\n endedTimelineFn,\n dataFn,\n doneFn,\n onTransmuxerLog,\n triggerSegmentEventFn\n}) => {\n const fmp4Tracks = segment.map && segment.map.tracks || {};\n const isMuxed = Boolean(fmp4Tracks.audio && fmp4Tracks.video); // Keep references to each function so we can null them out after we're done with them.\n // One reason for this is that in the case of full segments, we want to trust start\n // times from the probe, rather than the transmuxer.\n\n let audioStartFn = timingInfoFn.bind(null, segment, 'audio', 'start');\n const audioEndFn = timingInfoFn.bind(null, segment, 'audio', 'end');\n let videoStartFn = timingInfoFn.bind(null, segment, 'video', 'start');\n const videoEndFn = timingInfoFn.bind(null, segment, 'video', 'end');\n const finish = () => transmux({\n bytes,\n transmuxer: segment.transmuxer,\n audioAppendStart: segment.audioAppendStart,\n gopsToAlignWith: segment.gopsToAlignWith,\n remux: isMuxed,\n onData: result => {\n result.type = result.type === 'combined' ? 'video' : result.type;\n dataFn(segment, result);\n },\n onTrackInfo: trackInfo => {\n if (trackInfoFn) {\n if (isMuxed) {\n trackInfo.isMuxed = true;\n }\n trackInfoFn(segment, trackInfo);\n }\n },\n onAudioTimingInfo: audioTimingInfo => {\n // we only want the first start value we encounter\n if (audioStartFn && typeof audioTimingInfo.start !== 'undefined') {\n audioStartFn(audioTimingInfo.start);\n audioStartFn = null;\n } // we want to continually update the end time\n\n if (audioEndFn && typeof audioTimingInfo.end !== 'undefined') {\n audioEndFn(audioTimingInfo.end);\n }\n },\n onVideoTimingInfo: videoTimingInfo => {\n // we only want the first start value we encounter\n if (videoStartFn && typeof videoTimingInfo.start !== 'undefined') {\n videoStartFn(videoTimingInfo.start);\n videoStartFn = null;\n } // we want to continually update the end time\n\n if (videoEndFn && typeof videoTimingInfo.end !== 'undefined') {\n videoEndFn(videoTimingInfo.end);\n }\n },\n onVideoSegmentTimingInfo: videoSegmentTimingInfo => {\n const timingInfo = {\n pts: {\n start: videoSegmentTimingInfo.start.presentation,\n end: videoSegmentTimingInfo.end.presentation\n },\n dts: {\n start: videoSegmentTimingInfo.start.decode,\n end: videoSegmentTimingInfo.end.decode\n }\n };\n triggerSegmentEventFn({\n type: 'segmenttransmuxingtiminginfoavailable',\n segment,\n timingInfo\n });\n videoSegmentTimingInfoFn(videoSegmentTimingInfo);\n },\n onAudioSegmentTimingInfo: audioSegmentTimingInfo => {\n const timingInfo = {\n pts: {\n start: audioSegmentTimingInfo.start.pts,\n end: audioSegmentTimingInfo.end.pts\n },\n dts: {\n start: audioSegmentTimingInfo.start.dts,\n end: audioSegmentTimingInfo.end.dts\n }\n };\n triggerSegmentEventFn({\n type: 'segmenttransmuxingtiminginfoavailable',\n segment,\n timingInfo\n });\n audioSegmentTimingInfoFn(audioSegmentTimingInfo);\n },\n onId3: (id3Frames, dispatchType) => {\n id3Fn(segment, id3Frames, dispatchType);\n },\n onCaptions: captions => {\n captionsFn(segment, [captions]);\n },\n isEndOfTimeline,\n onEndedTimeline: () => {\n endedTimelineFn();\n },\n onTransmuxerLog,\n onDone: (result, error) => {\n if (!doneFn) {\n return;\n }\n result.type = result.type === 'combined' ? 'video' : result.type;\n triggerSegmentEventFn({\n type: 'segmenttransmuxingcomplete',\n segment\n });\n doneFn(error, segment, result);\n },\n segment,\n triggerSegmentEventFn\n }); // In the transmuxer, we don't yet have the ability to extract a \"proper\" start time.\n // Meaning cached frame data may corrupt our notion of where this segment\n // really starts. To get around this, probe for the info needed.\n\n workerCallback({\n action: 'probeTs',\n transmuxer: segment.transmuxer,\n data: bytes,\n baseStartTime: segment.baseStartTime,\n callback: data => {\n segment.bytes = bytes = data.data;\n const probeResult = data.result;\n if (probeResult) {\n trackInfoFn(segment, {\n hasAudio: probeResult.hasAudio,\n hasVideo: probeResult.hasVideo,\n isMuxed\n });\n trackInfoFn = null;\n }\n finish();\n }\n });\n};\nconst handleSegmentBytes = ({\n segment,\n bytes,\n trackInfoFn,\n timingInfoFn,\n videoSegmentTimingInfoFn,\n audioSegmentTimingInfoFn,\n id3Fn,\n captionsFn,\n isEndOfTimeline,\n endedTimelineFn,\n dataFn,\n doneFn,\n onTransmuxerLog,\n triggerSegmentEventFn\n}) => {\n let bytesAsUint8Array = new Uint8Array(bytes); // TODO:\n // We should have a handler that fetches the number of bytes required\n // to check if something is fmp4. This will allow us to save bandwidth\n // because we can only exclude a playlist and abort requests\n // by codec after trackinfo triggers.\n\n if (isLikelyFmp4MediaSegment(bytesAsUint8Array)) {\n segment.isFmp4 = true;\n const {\n tracks\n } = segment.map;\n const trackInfo = {\n isFmp4: true,\n hasVideo: !!tracks.video,\n hasAudio: !!tracks.audio\n }; // if we have a audio track, with a codec that is not set to\n // encrypted audio\n\n if (tracks.audio && tracks.audio.codec && tracks.audio.codec !== 'enca') {\n trackInfo.audioCodec = tracks.audio.codec;\n } // if we have a video track, with a codec that is not set to\n // encrypted video\n\n if (tracks.video && tracks.video.codec && tracks.video.codec !== 'encv') {\n trackInfo.videoCodec = tracks.video.codec;\n }\n if (tracks.video && tracks.audio) {\n trackInfo.isMuxed = true;\n } // since we don't support appending fmp4 data on progress, we know we have the full\n // segment here\n\n trackInfoFn(segment, trackInfo); // The probe doesn't provide the segment end time, so only callback with the start\n // time. The end time can be roughly calculated by the receiver using the duration.\n //\n // Note that the start time returned by the probe reflects the baseMediaDecodeTime, as\n // that is the true start of the segment (where the playback engine should begin\n // decoding).\n\n const finishLoading = (captions, id3Frames) => {\n // if the track still has audio at this point it is only possible\n // for it to be audio only. See `tracks.video && tracks.audio` if statement\n // above.\n // we make sure to use segment.bytes here as that\n dataFn(segment, {\n data: bytesAsUint8Array,\n type: trackInfo.hasAudio && !trackInfo.isMuxed ? 'audio' : 'video'\n });\n if (id3Frames && id3Frames.length) {\n id3Fn(segment, id3Frames);\n }\n if (captions && captions.length) {\n captionsFn(segment, captions);\n }\n doneFn(null, segment, {});\n };\n workerCallback({\n action: 'probeMp4StartTime',\n timescales: segment.map.timescales,\n data: bytesAsUint8Array,\n transmuxer: segment.transmuxer,\n callback: ({\n data,\n startTime\n }) => {\n // transfer bytes back to us\n bytes = data.buffer;\n segment.bytes = bytesAsUint8Array = data;\n if (trackInfo.hasAudio && !trackInfo.isMuxed) {\n timingInfoFn(segment, 'audio', 'start', startTime);\n }\n if (trackInfo.hasVideo) {\n timingInfoFn(segment, 'video', 'start', startTime);\n }\n workerCallback({\n action: 'probeEmsgID3',\n data: bytesAsUint8Array,\n transmuxer: segment.transmuxer,\n offset: startTime,\n callback: ({\n emsgData,\n id3Frames\n }) => {\n // transfer bytes back to us\n bytes = emsgData.buffer;\n segment.bytes = bytesAsUint8Array = emsgData; // Run through the CaptionParser in case there are captions.\n // Initialize CaptionParser if it hasn't been yet\n\n if (!tracks.video || !emsgData.byteLength || !segment.transmuxer) {\n finishLoading(undefined, id3Frames);\n return;\n }\n workerCallback({\n action: 'pushMp4Captions',\n endAction: 'mp4Captions',\n transmuxer: segment.transmuxer,\n data: bytesAsUint8Array,\n timescales: segment.map.timescales,\n trackIds: [tracks.video.id],\n callback: message => {\n // transfer bytes back to us\n bytes = message.data.buffer;\n segment.bytes = bytesAsUint8Array = message.data;\n message.logs.forEach(function (log) {\n onTransmuxerLog(merge(log, {\n stream: 'mp4CaptionParser'\n }));\n });\n finishLoading(message.captions, id3Frames);\n }\n });\n }\n });\n }\n });\n return;\n } // VTT or other segments that don't need processing\n\n if (!segment.transmuxer) {\n doneFn(null, segment, {});\n return;\n }\n if (typeof segment.container === 'undefined') {\n segment.container = detectContainerForBytes(bytesAsUint8Array);\n }\n if (segment.container !== 'ts' && segment.container !== 'aac') {\n trackInfoFn(segment, {\n hasAudio: false,\n hasVideo: false\n });\n doneFn(null, segment, {});\n return;\n } // ts or aac\n\n transmuxAndNotify({\n segment,\n bytes,\n trackInfoFn,\n timingInfoFn,\n videoSegmentTimingInfoFn,\n audioSegmentTimingInfoFn,\n id3Fn,\n captionsFn,\n isEndOfTimeline,\n endedTimelineFn,\n dataFn,\n doneFn,\n onTransmuxerLog,\n triggerSegmentEventFn\n });\n};\nconst decrypt = function ({\n id,\n key,\n encryptedBytes,\n decryptionWorker,\n segment,\n doneFn\n}, callback) {\n const decryptionHandler = event => {\n if (event.data.source === id) {\n decryptionWorker.removeEventListener('message', decryptionHandler);\n const decrypted = event.data.decrypted;\n callback(new Uint8Array(decrypted.bytes, decrypted.byteOffset, decrypted.byteLength));\n }\n };\n decryptionWorker.onerror = () => {\n const message = 'An error occurred in the decryption worker';\n const segmentInfo = segmentInfoPayload({\n segment\n });\n const decryptError = {\n message,\n metadata: {\n error: new Error(message),\n errorType: videojs.Error.StreamingFailedToDecryptSegment,\n segmentInfo,\n keyInfo: {\n uri: segment.key.resolvedUri || segment.map.key.resolvedUri\n }\n }\n };\n doneFn(decryptError, segment);\n };\n decryptionWorker.addEventListener('message', decryptionHandler);\n let keyBytes;\n if (key.bytes.slice) {\n keyBytes = key.bytes.slice();\n } else {\n keyBytes = new Uint32Array(Array.prototype.slice.call(key.bytes));\n } // incrementally decrypt the bytes\n\n decryptionWorker.postMessage(createTransferableMessage({\n source: id,\n encrypted: encryptedBytes,\n key: keyBytes,\n iv: key.iv\n }), [encryptedBytes.buffer, keyBytes.buffer]);\n};\n/**\n * Decrypt the segment via the decryption web worker\n *\n * @param {WebWorker} decryptionWorker - a WebWorker interface to AES-128 decryption\n * routines\n * @param {Object} segment - a simplified copy of the segmentInfo object\n * from SegmentLoader\n * @param {Function} trackInfoFn - a callback that receives track info\n * @param {Function} timingInfoFn - a callback that receives timing info\n * @param {Function} videoSegmentTimingInfoFn\n * a callback that receives video timing info based on media times and\n * any adjustments made by the transmuxer\n * @param {Function} audioSegmentTimingInfoFn\n * a callback that receives audio timing info based on media times and\n * any adjustments made by the transmuxer\n * @param {boolean} isEndOfTimeline\n * true if this segment represents the last segment in a timeline\n * @param {Function} endedTimelineFn\n * a callback made when a timeline is ended, will only be called if\n * isEndOfTimeline is true\n * @param {Function} dataFn - a callback that is executed when segment bytes are available\n * and ready to use\n * @param {Function} doneFn - a callback that is executed after decryption has completed\n */\n\nconst decryptSegment = ({\n decryptionWorker,\n segment,\n trackInfoFn,\n timingInfoFn,\n videoSegmentTimingInfoFn,\n audioSegmentTimingInfoFn,\n id3Fn,\n captionsFn,\n isEndOfTimeline,\n endedTimelineFn,\n dataFn,\n doneFn,\n onTransmuxerLog,\n triggerSegmentEventFn\n}) => {\n triggerSegmentEventFn({\n type: 'segmentdecryptionstart'\n });\n decrypt({\n id: segment.requestId,\n key: segment.key,\n encryptedBytes: segment.encryptedBytes,\n decryptionWorker,\n segment,\n doneFn\n }, decryptedBytes => {\n segment.bytes = decryptedBytes;\n triggerSegmentEventFn({\n type: 'segmentdecryptioncomplete',\n segment\n });\n handleSegmentBytes({\n segment,\n bytes: segment.bytes,\n trackInfoFn,\n timingInfoFn,\n videoSegmentTimingInfoFn,\n audioSegmentTimingInfoFn,\n id3Fn,\n captionsFn,\n isEndOfTimeline,\n endedTimelineFn,\n dataFn,\n doneFn,\n onTransmuxerLog,\n triggerSegmentEventFn\n });\n });\n};\n/**\n * This function waits for all XHRs to finish (with either success or failure)\n * before continueing processing via it's callback. The function gathers errors\n * from each request into a single errors array so that the error status for\n * each request can be examined later.\n *\n * @param {Object} activeXhrs - an object that tracks all XHR requests\n * @param {WebWorker} decryptionWorker - a WebWorker interface to AES-128 decryption\n * routines\n * @param {Function} trackInfoFn - a callback that receives track info\n * @param {Function} timingInfoFn - a callback that receives timing info\n * @param {Function} videoSegmentTimingInfoFn\n * a callback that receives video timing info based on media times and\n * any adjustments made by the transmuxer\n * @param {Function} audioSegmentTimingInfoFn\n * a callback that receives audio timing info based on media times and\n * any adjustments made by the transmuxer\n * @param {Function} id3Fn - a callback that receives ID3 metadata\n * @param {Function} captionsFn - a callback that receives captions\n * @param {boolean} isEndOfTimeline\n * true if this segment represents the last segment in a timeline\n * @param {Function} endedTimelineFn\n * a callback made when a timeline is ended, will only be called if\n * isEndOfTimeline is true\n * @param {Function} dataFn - a callback that is executed when segment bytes are available\n * and ready to use\n * @param {Function} doneFn - a callback that is executed after all resources have been\n * downloaded and any decryption completed\n */\n\nconst waitForCompletion = ({\n activeXhrs,\n decryptionWorker,\n trackInfoFn,\n timingInfoFn,\n videoSegmentTimingInfoFn,\n audioSegmentTimingInfoFn,\n id3Fn,\n captionsFn,\n isEndOfTimeline,\n endedTimelineFn,\n dataFn,\n doneFn,\n onTransmuxerLog,\n triggerSegmentEventFn\n}) => {\n let count = 0;\n let didError = false;\n return (error, segment) => {\n if (didError) {\n return;\n }\n if (error) {\n didError = true; // If there are errors, we have to abort any outstanding requests\n\n abortAll(activeXhrs); // Even though the requests above are aborted, and in theory we could wait until we\n // handle the aborted events from those requests, there are some cases where we may\n // never get an aborted event. For instance, if the network connection is lost and\n // there were two requests, the first may have triggered an error immediately, while\n // the second request remains unsent. In that case, the aborted algorithm will not\n // trigger an abort: see https://xhr.spec.whatwg.org/#the-abort()-method\n //\n // We also can't rely on the ready state of the XHR, since the request that\n // triggered the connection error may also show as a ready state of 0 (unsent).\n // Therefore, we have to finish this group of requests immediately after the first\n // seen error.\n\n return doneFn(error, segment);\n }\n count += 1;\n if (count === activeXhrs.length) {\n const segmentFinish = function () {\n if (segment.encryptedBytes) {\n return decryptSegment({\n decryptionWorker,\n segment,\n trackInfoFn,\n timingInfoFn,\n videoSegmentTimingInfoFn,\n audioSegmentTimingInfoFn,\n id3Fn,\n captionsFn,\n isEndOfTimeline,\n endedTimelineFn,\n dataFn,\n doneFn,\n onTransmuxerLog,\n triggerSegmentEventFn\n });\n } // Otherwise, everything is ready just continue\n\n handleSegmentBytes({\n segment,\n bytes: segment.bytes,\n trackInfoFn,\n timingInfoFn,\n videoSegmentTimingInfoFn,\n audioSegmentTimingInfoFn,\n id3Fn,\n captionsFn,\n isEndOfTimeline,\n endedTimelineFn,\n dataFn,\n doneFn,\n onTransmuxerLog,\n triggerSegmentEventFn\n });\n }; // Keep track of when *all* of the requests have completed\n\n segment.endOfAllRequests = Date.now();\n if (segment.map && segment.map.encryptedBytes && !segment.map.bytes) {\n triggerSegmentEventFn({\n type: 'segmentdecryptionstart',\n segment\n });\n return decrypt({\n decryptionWorker,\n // add -init to the \"id\" to differentiate between segment\n // and init segment decryption, just in case they happen\n // at the same time at some point in the future.\n id: segment.requestId + '-init',\n encryptedBytes: segment.map.encryptedBytes,\n key: segment.map.key,\n segment,\n doneFn\n }, decryptedBytes => {\n segment.map.bytes = decryptedBytes;\n triggerSegmentEventFn({\n type: 'segmentdecryptioncomplete',\n segment\n });\n parseInitSegment(segment, parseError => {\n if (parseError) {\n abortAll(activeXhrs);\n return doneFn(parseError, segment);\n }\n segmentFinish();\n });\n });\n }\n segmentFinish();\n }\n };\n};\n/**\n * Calls the abort callback if any request within the batch was aborted. Will only call\n * the callback once per batch of requests, even if multiple were aborted.\n *\n * @param {Object} loadendState - state to check to see if the abort function was called\n * @param {Function} abortFn - callback to call for abort\n */\n\nconst handleLoadEnd = ({\n loadendState,\n abortFn\n}) => event => {\n const request = event.target;\n if (request.aborted && abortFn && !loadendState.calledAbortFn) {\n abortFn();\n loadendState.calledAbortFn = true;\n }\n};\n/**\n * Simple progress event callback handler that gathers some stats before\n * executing a provided callback with the `segment` object\n *\n * @param {Object} segment - a simplified copy of the segmentInfo object\n * from SegmentLoader\n * @param {Function} progressFn - a callback that is executed each time a progress event\n * is received\n * @param {Function} trackInfoFn - a callback that receives track info\n * @param {Function} timingInfoFn - a callback that receives timing info\n * @param {Function} videoSegmentTimingInfoFn\n * a callback that receives video timing info based on media times and\n * any adjustments made by the transmuxer\n * @param {Function} audioSegmentTimingInfoFn\n * a callback that receives audio timing info based on media times and\n * any adjustments made by the transmuxer\n * @param {boolean} isEndOfTimeline\n * true if this segment represents the last segment in a timeline\n * @param {Function} endedTimelineFn\n * a callback made when a timeline is ended, will only be called if\n * isEndOfTimeline is true\n * @param {Function} dataFn - a callback that is executed when segment bytes are available\n * and ready to use\n * @param {Event} event - the progress event object from XMLHttpRequest\n */\n\nconst handleProgress = ({\n segment,\n progressFn,\n trackInfoFn,\n timingInfoFn,\n videoSegmentTimingInfoFn,\n audioSegmentTimingInfoFn,\n id3Fn,\n captionsFn,\n isEndOfTimeline,\n endedTimelineFn,\n dataFn\n}) => event => {\n const request = event.target;\n if (request.aborted) {\n return;\n }\n segment.stats = merge(segment.stats, getProgressStats(event)); // record the time that we receive the first byte of data\n\n if (!segment.stats.firstBytesReceivedAt && segment.stats.bytesReceived) {\n segment.stats.firstBytesReceivedAt = Date.now();\n }\n return progressFn(event, segment);\n};\n/**\n * Load all resources and does any processing necessary for a media-segment\n *\n * Features:\n * decrypts the media-segment if it has a key uri and an iv\n * aborts *all* requests if *any* one request fails\n *\n * The segment object, at minimum, has the following format:\n * {\n * resolvedUri: String,\n * [transmuxer]: Object,\n * [byterange]: {\n * offset: Number,\n * length: Number\n * },\n * [key]: {\n * resolvedUri: String\n * [byterange]: {\n * offset: Number,\n * length: Number\n * },\n * iv: {\n * bytes: Uint32Array\n * }\n * },\n * [map]: {\n * resolvedUri: String,\n * [byterange]: {\n * offset: Number,\n * length: Number\n * },\n * [bytes]: Uint8Array\n * }\n * }\n * ...where [name] denotes optional properties\n *\n * @param {Function} xhr - an instance of the xhr wrapper in xhr.js\n * @param {Object} xhrOptions - the base options to provide to all xhr requests\n * @param {WebWorker} decryptionWorker - a WebWorker interface to AES-128\n * decryption routines\n * @param {Object} segment - a simplified copy of the segmentInfo object\n * from SegmentLoader\n * @param {Function} abortFn - a callback called (only once) if any piece of a request was\n * aborted\n * @param {Function} progressFn - a callback that receives progress events from the main\n * segment's xhr request\n * @param {Function} trackInfoFn - a callback that receives track info\n * @param {Function} timingInfoFn - a callback that receives timing info\n * @param {Function} videoSegmentTimingInfoFn\n * a callback that receives video timing info based on media times and\n * any adjustments made by the transmuxer\n * @param {Function} audioSegmentTimingInfoFn\n * a callback that receives audio timing info based on media times and\n * any adjustments made by the transmuxer\n * @param {Function} id3Fn - a callback that receives ID3 metadata\n * @param {Function} captionsFn - a callback that receives captions\n * @param {boolean} isEndOfTimeline\n * true if this segment represents the last segment in a timeline\n * @param {Function} endedTimelineFn\n * a callback made when a timeline is ended, will only be called if\n * isEndOfTimeline is true\n * @param {Function} dataFn - a callback that receives data from the main segment's xhr\n * request, transmuxed if needed\n * @param {Function} doneFn - a callback that is executed only once all requests have\n * succeeded or failed\n * @return {Function} a function that, when invoked, immediately aborts all\n * outstanding requests\n */\n\nconst mediaSegmentRequest = ({\n xhr,\n xhrOptions,\n decryptionWorker,\n segment,\n abortFn,\n progressFn,\n trackInfoFn,\n timingInfoFn,\n videoSegmentTimingInfoFn,\n audioSegmentTimingInfoFn,\n id3Fn,\n captionsFn,\n isEndOfTimeline,\n endedTimelineFn,\n dataFn,\n doneFn,\n onTransmuxerLog,\n triggerSegmentEventFn\n}) => {\n const activeXhrs = [];\n const finishProcessingFn = waitForCompletion({\n activeXhrs,\n decryptionWorker,\n trackInfoFn,\n timingInfoFn,\n videoSegmentTimingInfoFn,\n audioSegmentTimingInfoFn,\n id3Fn,\n captionsFn,\n isEndOfTimeline,\n endedTimelineFn,\n dataFn,\n doneFn,\n onTransmuxerLog,\n triggerSegmentEventFn\n }); // optionally, request the decryption key\n\n if (segment.key && !segment.key.bytes) {\n const objects = [segment.key];\n if (segment.map && !segment.map.bytes && segment.map.key && segment.map.key.resolvedUri === segment.key.resolvedUri) {\n objects.push(segment.map.key);\n }\n const keyRequestOptions = merge(xhrOptions, {\n uri: segment.key.resolvedUri,\n responseType: 'arraybuffer',\n requestType: 'segment-key'\n });\n const keyRequestCallback = handleKeyResponse(segment, objects, finishProcessingFn, triggerSegmentEventFn);\n const keyInfo = {\n uri: segment.key.resolvedUri\n };\n triggerSegmentEventFn({\n type: 'segmentkeyloadstart',\n segment,\n keyInfo\n });\n const keyXhr = xhr(keyRequestOptions, keyRequestCallback);\n activeXhrs.push(keyXhr);\n } // optionally, request the associated media init segment\n\n if (segment.map && !segment.map.bytes) {\n const differentMapKey = segment.map.key && (!segment.key || segment.key.resolvedUri !== segment.map.key.resolvedUri);\n if (differentMapKey) {\n const mapKeyRequestOptions = merge(xhrOptions, {\n uri: segment.map.key.resolvedUri,\n responseType: 'arraybuffer',\n requestType: 'segment-key'\n });\n const mapKeyRequestCallback = handleKeyResponse(segment, [segment.map.key], finishProcessingFn, triggerSegmentEventFn);\n const keyInfo = {\n uri: segment.map.key.resolvedUri\n };\n triggerSegmentEventFn({\n type: 'segmentkeyloadstart',\n segment,\n keyInfo\n });\n const mapKeyXhr = xhr(mapKeyRequestOptions, mapKeyRequestCallback);\n activeXhrs.push(mapKeyXhr);\n }\n const initSegmentOptions = merge(xhrOptions, {\n uri: segment.map.resolvedUri,\n responseType: 'arraybuffer',\n headers: segmentXhrHeaders(segment.map),\n requestType: 'segment-media-initialization'\n });\n const initSegmentRequestCallback = handleInitSegmentResponse({\n segment,\n finishProcessingFn,\n triggerSegmentEventFn\n });\n triggerSegmentEventFn({\n type: 'segmentloadstart',\n segment\n });\n const initSegmentXhr = xhr(initSegmentOptions, initSegmentRequestCallback);\n activeXhrs.push(initSegmentXhr);\n }\n const segmentRequestOptions = merge(xhrOptions, {\n uri: segment.part && segment.part.resolvedUri || segment.resolvedUri,\n responseType: 'arraybuffer',\n headers: segmentXhrHeaders(segment),\n requestType: 'segment'\n });\n const segmentRequestCallback = handleSegmentResponse({\n segment,\n finishProcessingFn,\n responseType: segmentRequestOptions.responseType,\n triggerSegmentEventFn\n });\n triggerSegmentEventFn({\n type: 'segmentloadstart',\n segment\n });\n const segmentXhr = xhr(segmentRequestOptions, segmentRequestCallback);\n segmentXhr.addEventListener('progress', handleProgress({\n segment,\n progressFn,\n trackInfoFn,\n timingInfoFn,\n videoSegmentTimingInfoFn,\n audioSegmentTimingInfoFn,\n id3Fn,\n captionsFn,\n isEndOfTimeline,\n endedTimelineFn,\n dataFn\n }));\n activeXhrs.push(segmentXhr); // since all parts of the request must be considered, but should not make callbacks\n // multiple times, provide a shared state object\n\n const loadendState = {};\n activeXhrs.forEach(activeXhr => {\n activeXhr.addEventListener('loadend', handleLoadEnd({\n loadendState,\n abortFn\n }));\n });\n return () => abortAll(activeXhrs);\n};\n\n/**\n * @file - codecs.js - Handles tasks regarding codec strings such as translating them to\n * codec strings, or translating codec strings into objects that can be examined.\n */\nconst logFn$1 = logger('CodecUtils');\n/**\n * Returns a set of codec strings parsed from the playlist or the default\n * codec strings if no codecs were specified in the playlist\n *\n * @param {Playlist} media the current media playlist\n * @return {Object} an object with the video and audio codecs\n */\n\nconst getCodecs = function (media) {\n // if the codecs were explicitly specified, use them instead of the\n // defaults\n const mediaAttributes = media.attributes || {};\n if (mediaAttributes.CODECS) {\n return parseCodecs(mediaAttributes.CODECS);\n }\n};\nconst isMaat = (main, media) => {\n const mediaAttributes = media.attributes || {};\n return main && main.mediaGroups && main.mediaGroups.AUDIO && mediaAttributes.AUDIO && main.mediaGroups.AUDIO[mediaAttributes.AUDIO];\n};\nconst isMuxed = (main, media) => {\n if (!isMaat(main, media)) {\n return true;\n }\n const mediaAttributes = media.attributes || {};\n const audioGroup = main.mediaGroups.AUDIO[mediaAttributes.AUDIO];\n for (const groupId in audioGroup) {\n // If an audio group has a URI (the case for HLS, as HLS will use external playlists),\n // or there are listed playlists (the case for DASH, as the manifest will have already\n // provided all of the details necessary to generate the audio playlist, as opposed to\n // HLS' externally requested playlists), then the content is demuxed.\n if (!audioGroup[groupId].uri && !audioGroup[groupId].playlists) {\n return true;\n }\n }\n return false;\n};\nconst unwrapCodecList = function (codecList) {\n const codecs = {};\n codecList.forEach(({\n mediaType,\n type,\n details\n }) => {\n codecs[mediaType] = codecs[mediaType] || [];\n codecs[mediaType].push(translateLegacyCodec(`${type}${details}`));\n });\n Object.keys(codecs).forEach(function (mediaType) {\n if (codecs[mediaType].length > 1) {\n logFn$1(`multiple ${mediaType} codecs found as attributes: ${codecs[mediaType].join(', ')}. Setting playlist codecs to null so that we wait for mux.js to probe segments for real codecs.`);\n codecs[mediaType] = null;\n return;\n }\n codecs[mediaType] = codecs[mediaType][0];\n });\n return codecs;\n};\nconst codecCount = function (codecObj) {\n let count = 0;\n if (codecObj.audio) {\n count++;\n }\n if (codecObj.video) {\n count++;\n }\n return count;\n};\n/**\n * Calculates the codec strings for a working configuration of\n * SourceBuffers to play variant streams in a main playlist. If\n * there is no possible working configuration, an empty object will be\n * returned.\n *\n * @param main {Object} the m3u8 object for the main playlist\n * @param media {Object} the m3u8 object for the variant playlist\n * @return {Object} the codec strings.\n *\n * @private\n */\n\nconst codecsForPlaylist = function (main, media) {\n const mediaAttributes = media.attributes || {};\n const codecInfo = unwrapCodecList(getCodecs(media) || []); // HLS with multiple-audio tracks must always get an audio codec.\n // Put another way, there is no way to have a video-only multiple-audio HLS!\n\n if (isMaat(main, media) && !codecInfo.audio) {\n if (!isMuxed(main, media)) {\n // It is possible for codecs to be specified on the audio media group playlist but\n // not on the rendition playlist. This is mostly the case for DASH, where audio and\n // video are always separate (and separately specified).\n const defaultCodecs = unwrapCodecList(codecsFromDefault(main, mediaAttributes.AUDIO) || []);\n if (defaultCodecs.audio) {\n codecInfo.audio = defaultCodecs.audio;\n }\n }\n }\n return codecInfo;\n};\nconst logFn = logger('PlaylistSelector');\nconst representationToString = function (representation) {\n if (!representation || !representation.playlist) {\n return;\n }\n const playlist = representation.playlist;\n return JSON.stringify({\n id: playlist.id,\n bandwidth: representation.bandwidth,\n width: representation.width,\n height: representation.height,\n codecs: playlist.attributes && playlist.attributes.CODECS || ''\n });\n}; // Utilities\n\n/**\n * Returns the CSS value for the specified property on an element\n * using `getComputedStyle`. Firefox has a long-standing issue where\n * getComputedStyle() may return null when running in an iframe with\n * `display: none`.\n *\n * @see https://bugzilla.mozilla.org/show_bug.cgi?id=548397\n * @param {HTMLElement} el the htmlelement to work on\n * @param {string} the proprety to get the style for\n */\n\nconst safeGetComputedStyle = function (el, property) {\n if (!el) {\n return '';\n }\n const result = window$1.getComputedStyle(el);\n if (!result) {\n return '';\n }\n return result[property];\n};\n/**\n * Resuable stable sort function\n *\n * @param {Playlists} array\n * @param {Function} sortFn Different comparators\n * @function stableSort\n */\n\nconst stableSort = function (array, sortFn) {\n const newArray = array.slice();\n array.sort(function (left, right) {\n const cmp = sortFn(left, right);\n if (cmp === 0) {\n return newArray.indexOf(left) - newArray.indexOf(right);\n }\n return cmp;\n });\n};\n/**\n * A comparator function to sort two playlist object by bandwidth.\n *\n * @param {Object} left a media playlist object\n * @param {Object} right a media playlist object\n * @return {number} Greater than zero if the bandwidth attribute of\n * left is greater than the corresponding attribute of right. Less\n * than zero if the bandwidth of right is greater than left and\n * exactly zero if the two are equal.\n */\n\nconst comparePlaylistBandwidth = function (left, right) {\n let leftBandwidth;\n let rightBandwidth;\n if (left.attributes.BANDWIDTH) {\n leftBandwidth = left.attributes.BANDWIDTH;\n }\n leftBandwidth = leftBandwidth || window$1.Number.MAX_VALUE;\n if (right.attributes.BANDWIDTH) {\n rightBandwidth = right.attributes.BANDWIDTH;\n }\n rightBandwidth = rightBandwidth || window$1.Number.MAX_VALUE;\n return leftBandwidth - rightBandwidth;\n};\n/**\n * A comparator function to sort two playlist object by resolution (width).\n *\n * @param {Object} left a media playlist object\n * @param {Object} right a media playlist object\n * @return {number} Greater than zero if the resolution.width attribute of\n * left is greater than the corresponding attribute of right. Less\n * than zero if the resolution.width of right is greater than left and\n * exactly zero if the two are equal.\n */\n\nconst comparePlaylistResolution = function (left, right) {\n let leftWidth;\n let rightWidth;\n if (left.attributes.RESOLUTION && left.attributes.RESOLUTION.width) {\n leftWidth = left.attributes.RESOLUTION.width;\n }\n leftWidth = leftWidth || window$1.Number.MAX_VALUE;\n if (right.attributes.RESOLUTION && right.attributes.RESOLUTION.width) {\n rightWidth = right.attributes.RESOLUTION.width;\n }\n rightWidth = rightWidth || window$1.Number.MAX_VALUE; // NOTE - Fallback to bandwidth sort as appropriate in cases where multiple renditions\n // have the same media dimensions/ resolution\n\n if (leftWidth === rightWidth && left.attributes.BANDWIDTH && right.attributes.BANDWIDTH) {\n return left.attributes.BANDWIDTH - right.attributes.BANDWIDTH;\n }\n return leftWidth - rightWidth;\n};\n/**\n * Chooses the appropriate media playlist based on bandwidth and player size\n *\n * @param {Object} main\n * Object representation of the main manifest\n * @param {number} playerBandwidth\n * Current calculated bandwidth of the player\n * @param {number} playerWidth\n * Current width of the player element (should account for the device pixel ratio)\n * @param {number} playerHeight\n * Current height of the player element (should account for the device pixel ratio)\n * @param {boolean} limitRenditionByPlayerDimensions\n * True if the player width and height should be used during the selection, false otherwise\n * @param {Object} playlistController\n * the current playlistController object\n * @return {Playlist} the highest bitrate playlist less than the\n * currently detected bandwidth, accounting for some amount of\n * bandwidth variance\n */\n\nlet simpleSelector = function (main, playerBandwidth, playerWidth, playerHeight, limitRenditionByPlayerDimensions, playlistController) {\n // If we end up getting called before `main` is available, exit early\n if (!main) {\n return;\n }\n const options = {\n bandwidth: playerBandwidth,\n width: playerWidth,\n height: playerHeight,\n limitRenditionByPlayerDimensions\n };\n let playlists = main.playlists; // if playlist is audio only, select between currently active audio group playlists.\n\n if (Playlist.isAudioOnly(main)) {\n playlists = playlistController.getAudioTrackPlaylists_(); // add audioOnly to options so that we log audioOnly: true\n // at the buttom of this function for debugging.\n\n options.audioOnly = true;\n } // convert the playlists to an intermediary representation to make comparisons easier\n\n let sortedPlaylistReps = playlists.map(playlist => {\n let bandwidth;\n const width = playlist.attributes && playlist.attributes.RESOLUTION && playlist.attributes.RESOLUTION.width;\n const height = playlist.attributes && playlist.attributes.RESOLUTION && playlist.attributes.RESOLUTION.height;\n bandwidth = playlist.attributes && playlist.attributes.BANDWIDTH;\n bandwidth = bandwidth || window$1.Number.MAX_VALUE;\n return {\n bandwidth,\n width,\n height,\n playlist\n };\n });\n stableSort(sortedPlaylistReps, (left, right) => left.bandwidth - right.bandwidth); // filter out any playlists that have been excluded due to\n // incompatible configurations\n\n sortedPlaylistReps = sortedPlaylistReps.filter(rep => !Playlist.isIncompatible(rep.playlist)); // filter out any playlists that have been disabled manually through the representations\n // api or excluded temporarily due to playback errors.\n\n let enabledPlaylistReps = sortedPlaylistReps.filter(rep => Playlist.isEnabled(rep.playlist));\n if (!enabledPlaylistReps.length) {\n // if there are no enabled playlists, then they have all been excluded or disabled\n // by the user through the representations api. In this case, ignore exclusion and\n // fallback to what the user wants by using playlists the user has not disabled.\n enabledPlaylistReps = sortedPlaylistReps.filter(rep => !Playlist.isDisabled(rep.playlist));\n } // filter out any variant that has greater effective bitrate\n // than the current estimated bandwidth\n\n const bandwidthPlaylistReps = enabledPlaylistReps.filter(rep => rep.bandwidth * Config.BANDWIDTH_VARIANCE < playerBandwidth);\n let highestRemainingBandwidthRep = bandwidthPlaylistReps[bandwidthPlaylistReps.length - 1]; // get all of the renditions with the same (highest) bandwidth\n // and then taking the very first element\n\n const bandwidthBestRep = bandwidthPlaylistReps.filter(rep => rep.bandwidth === highestRemainingBandwidthRep.bandwidth)[0]; // if we're not going to limit renditions by player size, make an early decision.\n\n if (limitRenditionByPlayerDimensions === false) {\n const chosenRep = bandwidthBestRep || enabledPlaylistReps[0] || sortedPlaylistReps[0];\n if (chosenRep && chosenRep.playlist) {\n let type = 'sortedPlaylistReps';\n if (bandwidthBestRep) {\n type = 'bandwidthBestRep';\n }\n if (enabledPlaylistReps[0]) {\n type = 'enabledPlaylistReps';\n }\n logFn(`choosing ${representationToString(chosenRep)} using ${type} with options`, options);\n return chosenRep.playlist;\n }\n logFn('could not choose a playlist with options', options);\n return null;\n } // filter out playlists without resolution information\n\n const haveResolution = bandwidthPlaylistReps.filter(rep => rep.width && rep.height); // sort variants by resolution\n\n stableSort(haveResolution, (left, right) => left.width - right.width); // if we have the exact resolution as the player use it\n\n const resolutionBestRepList = haveResolution.filter(rep => rep.width === playerWidth && rep.height === playerHeight);\n highestRemainingBandwidthRep = resolutionBestRepList[resolutionBestRepList.length - 1]; // ensure that we pick the highest bandwidth variant that have exact resolution\n\n const resolutionBestRep = resolutionBestRepList.filter(rep => rep.bandwidth === highestRemainingBandwidthRep.bandwidth)[0];\n let resolutionPlusOneList;\n let resolutionPlusOneSmallest;\n let resolutionPlusOneRep; // find the smallest variant that is larger than the player\n // if there is no match of exact resolution\n\n if (!resolutionBestRep) {\n resolutionPlusOneList = haveResolution.filter(rep => rep.width > playerWidth || rep.height > playerHeight); // find all the variants have the same smallest resolution\n\n resolutionPlusOneSmallest = resolutionPlusOneList.filter(rep => rep.width === resolutionPlusOneList[0].width && rep.height === resolutionPlusOneList[0].height); // ensure that we also pick the highest bandwidth variant that\n // is just-larger-than the video player\n\n highestRemainingBandwidthRep = resolutionPlusOneSmallest[resolutionPlusOneSmallest.length - 1];\n resolutionPlusOneRep = resolutionPlusOneSmallest.filter(rep => rep.bandwidth === highestRemainingBandwidthRep.bandwidth)[0];\n }\n let leastPixelDiffRep; // If this selector proves to be better than others,\n // resolutionPlusOneRep and resolutionBestRep and all\n // the code involving them should be removed.\n\n if (playlistController.leastPixelDiffSelector) {\n // find the variant that is closest to the player's pixel size\n const leastPixelDiffList = haveResolution.map(rep => {\n rep.pixelDiff = Math.abs(rep.width - playerWidth) + Math.abs(rep.height - playerHeight);\n return rep;\n }); // get the highest bandwidth, closest resolution playlist\n\n stableSort(leastPixelDiffList, (left, right) => {\n // sort by highest bandwidth if pixelDiff is the same\n if (left.pixelDiff === right.pixelDiff) {\n return right.bandwidth - left.bandwidth;\n }\n return left.pixelDiff - right.pixelDiff;\n });\n leastPixelDiffRep = leastPixelDiffList[0];\n } // fallback chain of variants\n\n const chosenRep = leastPixelDiffRep || resolutionPlusOneRep || resolutionBestRep || bandwidthBestRep || enabledPlaylistReps[0] || sortedPlaylistReps[0];\n if (chosenRep && chosenRep.playlist) {\n let type = 'sortedPlaylistReps';\n if (leastPixelDiffRep) {\n type = 'leastPixelDiffRep';\n } else if (resolutionPlusOneRep) {\n type = 'resolutionPlusOneRep';\n } else if (resolutionBestRep) {\n type = 'resolutionBestRep';\n } else if (bandwidthBestRep) {\n type = 'bandwidthBestRep';\n } else if (enabledPlaylistReps[0]) {\n type = 'enabledPlaylistReps';\n }\n logFn(`choosing ${representationToString(chosenRep)} using ${type} with options`, options);\n return chosenRep.playlist;\n }\n logFn('could not choose a playlist with options', options);\n return null;\n};\n\n/**\n * Chooses the appropriate media playlist based on the most recent\n * bandwidth estimate and the player size.\n *\n * Expects to be called within the context of an instance of VhsHandler\n *\n * @return {Playlist} the highest bitrate playlist less than the\n * currently detected bandwidth, accounting for some amount of\n * bandwidth variance\n */\n\nconst lastBandwidthSelector = function () {\n let pixelRatio = this.useDevicePixelRatio ? window$1.devicePixelRatio || 1 : 1;\n if (!isNaN(this.customPixelRatio)) {\n pixelRatio = this.customPixelRatio;\n }\n return simpleSelector(this.playlists.main, this.systemBandwidth, parseInt(safeGetComputedStyle(this.tech_.el(), 'width'), 10) * pixelRatio, parseInt(safeGetComputedStyle(this.tech_.el(), 'height'), 10) * pixelRatio, this.limitRenditionByPlayerDimensions, this.playlistController_);\n};\n/**\n * Chooses the appropriate media playlist based on an\n * exponential-weighted moving average of the bandwidth after\n * filtering for player size.\n *\n * Expects to be called within the context of an instance of VhsHandler\n *\n * @param {number} decay - a number between 0 and 1. Higher values of\n * this parameter will cause previous bandwidth estimates to lose\n * significance more quickly.\n * @return {Function} a function which can be invoked to create a new\n * playlist selector function.\n * @see https://en.wikipedia.org/wiki/Moving_average#Exponential_moving_average\n */\n\nconst movingAverageBandwidthSelector = function (decay) {\n let average = -1;\n let lastSystemBandwidth = -1;\n if (decay < 0 || decay > 1) {\n throw new Error('Moving average bandwidth decay must be between 0 and 1.');\n }\n return function () {\n let pixelRatio = this.useDevicePixelRatio ? window$1.devicePixelRatio || 1 : 1;\n if (!isNaN(this.customPixelRatio)) {\n pixelRatio = this.customPixelRatio;\n }\n if (average < 0) {\n average = this.systemBandwidth;\n lastSystemBandwidth = this.systemBandwidth;\n } // stop the average value from decaying for every 250ms\n // when the systemBandwidth is constant\n // and\n // stop average from setting to a very low value when the\n // systemBandwidth becomes 0 in case of chunk cancellation\n\n if (this.systemBandwidth > 0 && this.systemBandwidth !== lastSystemBandwidth) {\n average = decay * this.systemBandwidth + (1 - decay) * average;\n lastSystemBandwidth = this.systemBandwidth;\n }\n return simpleSelector(this.playlists.main, average, parseInt(safeGetComputedStyle(this.tech_.el(), 'width'), 10) * pixelRatio, parseInt(safeGetComputedStyle(this.tech_.el(), 'height'), 10) * pixelRatio, this.limitRenditionByPlayerDimensions, this.playlistController_);\n };\n};\n/**\n * Chooses the appropriate media playlist based on the potential to rebuffer\n *\n * @param {Object} settings\n * Object of information required to use this selector\n * @param {Object} settings.main\n * Object representation of the main manifest\n * @param {number} settings.currentTime\n * The current time of the player\n * @param {number} settings.bandwidth\n * Current measured bandwidth\n * @param {number} settings.duration\n * Duration of the media\n * @param {number} settings.segmentDuration\n * Segment duration to be used in round trip time calculations\n * @param {number} settings.timeUntilRebuffer\n * Time left in seconds until the player has to rebuffer\n * @param {number} settings.currentTimeline\n * The current timeline segments are being loaded from\n * @param {SyncController} settings.syncController\n * SyncController for determining if we have a sync point for a given playlist\n * @return {Object|null}\n * {Object} return.playlist\n * The highest bandwidth playlist with the least amount of rebuffering\n * {Number} return.rebufferingImpact\n * The amount of time in seconds switching to this playlist will rebuffer. A\n * negative value means that switching will cause zero rebuffering.\n */\n\nconst minRebufferMaxBandwidthSelector = function (settings) {\n const {\n main,\n currentTime,\n bandwidth,\n duration,\n segmentDuration,\n timeUntilRebuffer,\n currentTimeline,\n syncController\n } = settings; // filter out any playlists that have been excluded due to\n // incompatible configurations\n\n const compatiblePlaylists = main.playlists.filter(playlist => !Playlist.isIncompatible(playlist)); // filter out any playlists that have been disabled manually through the representations\n // api or excluded temporarily due to playback errors.\n\n let enabledPlaylists = compatiblePlaylists.filter(Playlist.isEnabled);\n if (!enabledPlaylists.length) {\n // if there are no enabled playlists, then they have all been excluded or disabled\n // by the user through the representations api. In this case, ignore exclusion and\n // fallback to what the user wants by using playlists the user has not disabled.\n enabledPlaylists = compatiblePlaylists.filter(playlist => !Playlist.isDisabled(playlist));\n }\n const bandwidthPlaylists = enabledPlaylists.filter(Playlist.hasAttribute.bind(null, 'BANDWIDTH'));\n const rebufferingEstimates = bandwidthPlaylists.map(playlist => {\n const syncPoint = syncController.getSyncPoint(playlist, duration, currentTimeline, currentTime); // If there is no sync point for this playlist, switching to it will require a\n // sync request first. This will double the request time\n\n const numRequests = syncPoint ? 1 : 2;\n const requestTimeEstimate = Playlist.estimateSegmentRequestTime(segmentDuration, bandwidth, playlist);\n const rebufferingImpact = requestTimeEstimate * numRequests - timeUntilRebuffer;\n return {\n playlist,\n rebufferingImpact\n };\n });\n const noRebufferingPlaylists = rebufferingEstimates.filter(estimate => estimate.rebufferingImpact <= 0); // Sort by bandwidth DESC\n\n stableSort(noRebufferingPlaylists, (a, b) => comparePlaylistBandwidth(b.playlist, a.playlist));\n if (noRebufferingPlaylists.length) {\n return noRebufferingPlaylists[0];\n }\n stableSort(rebufferingEstimates, (a, b) => a.rebufferingImpact - b.rebufferingImpact);\n return rebufferingEstimates[0] || null;\n};\n/**\n * Chooses the appropriate media playlist, which in this case is the lowest bitrate\n * one with video. If no renditions with video exist, return the lowest audio rendition.\n *\n * Expects to be called within the context of an instance of VhsHandler\n *\n * @return {Object|null}\n * {Object} return.playlist\n * The lowest bitrate playlist that contains a video codec. If no such rendition\n * exists pick the lowest audio rendition.\n */\n\nconst lowestBitrateCompatibleVariantSelector = function () {\n // filter out any playlists that have been excluded due to\n // incompatible configurations or playback errors\n const playlists = this.playlists.main.playlists.filter(Playlist.isEnabled); // Sort ascending by bitrate\n\n stableSort(playlists, (a, b) => comparePlaylistBandwidth(a, b)); // Parse and assume that playlists with no video codec have no video\n // (this is not necessarily true, although it is generally true).\n //\n // If an entire manifest has no valid videos everything will get filtered\n // out.\n\n const playlistsWithVideo = playlists.filter(playlist => !!codecsForPlaylist(this.playlists.main, playlist).video);\n return playlistsWithVideo[0] || null;\n};\n\n/**\n * Combine all segments into a single Uint8Array\n *\n * @param {Object} segmentObj\n * @return {Uint8Array} concatenated bytes\n * @private\n */\nconst concatSegments = segmentObj => {\n let offset = 0;\n let tempBuffer;\n if (segmentObj.bytes) {\n tempBuffer = new Uint8Array(segmentObj.bytes); // combine the individual segments into one large typed-array\n\n segmentObj.segments.forEach(segment => {\n tempBuffer.set(segment, offset);\n offset += segment.byteLength;\n });\n }\n return tempBuffer;\n};\n/**\n * Example:\n * https://host.com/path1/path2/path3/segment.ts?arg1=val1\n * -->\n * path3/segment.ts\n *\n * @param resolvedUri\n * @return {string}\n */\n\nfunction compactSegmentUrlDescription(resolvedUri) {\n try {\n return new URL(resolvedUri).pathname.split('/').slice(-2).join('/');\n } catch (e) {\n return '';\n }\n}\n\n/**\n * @file text-tracks.js\n */\n/**\n * Create captions text tracks on video.js if they do not exist\n *\n * @param {Object} inbandTextTracks a reference to current inbandTextTracks\n * @param {Object} tech the video.js tech\n * @param {Object} captionStream the caption stream to create\n * @private\n */\n\nconst createCaptionsTrackIfNotExists = function (inbandTextTracks, tech, captionStream) {\n if (!inbandTextTracks[captionStream]) {\n tech.trigger({\n type: 'usage',\n name: 'vhs-608'\n });\n let instreamId = captionStream; // we need to translate SERVICEn for 708 to how mux.js currently labels them\n\n if (/^cc708_/.test(captionStream)) {\n instreamId = 'SERVICE' + captionStream.split('_')[1];\n }\n const track = tech.textTracks().getTrackById(instreamId);\n if (track) {\n // Resuse an existing track with a CC# id because this was\n // very likely created by videojs-contrib-hls from information\n // in the m3u8 for us to use\n inbandTextTracks[captionStream] = track;\n } else {\n // This section gets called when we have caption services that aren't specified in the manifest.\n // Manifest level caption services are handled in media-groups.js under CLOSED-CAPTIONS.\n const captionServices = tech.options_.vhs && tech.options_.vhs.captionServices || {};\n let label = captionStream;\n let language = captionStream;\n let def = false;\n const captionService = captionServices[instreamId];\n if (captionService) {\n label = captionService.label;\n language = captionService.language;\n def = captionService.default;\n } // Otherwise, create a track with the default `CC#` label and\n // without a language\n\n inbandTextTracks[captionStream] = tech.addRemoteTextTrack({\n kind: 'captions',\n id: instreamId,\n // TODO: investigate why this doesn't seem to turn the caption on by default\n default: def,\n label,\n language\n }, false).track;\n }\n }\n};\n/**\n * Add caption text track data to a source handler given an array of captions\n *\n * @param {Object}\n * @param {Object} inbandTextTracks the inband text tracks\n * @param {number} timestampOffset the timestamp offset of the source buffer\n * @param {Array} captionArray an array of caption data\n * @private\n */\n\nconst addCaptionData = function ({\n inbandTextTracks,\n captionArray,\n timestampOffset\n}) {\n if (!captionArray) {\n return;\n }\n const Cue = window$1.WebKitDataCue || window$1.VTTCue;\n captionArray.forEach(caption => {\n const track = caption.stream; // in CEA 608 captions, video.js/mux.js sends a content array\n // with positioning data\n\n if (caption.content) {\n caption.content.forEach(value => {\n const cue = new Cue(caption.startTime + timestampOffset, caption.endTime + timestampOffset, value.text);\n cue.line = value.line;\n cue.align = 'left';\n cue.position = value.position;\n cue.positionAlign = 'line-left';\n inbandTextTracks[track].addCue(cue);\n });\n } else {\n // otherwise, a text value with combined captions is sent\n inbandTextTracks[track].addCue(new Cue(caption.startTime + timestampOffset, caption.endTime + timestampOffset, caption.text));\n }\n });\n};\n/**\n * Define properties on a cue for backwards compatability,\n * but warn the user that the way that they are using it\n * is depricated and will be removed at a later date.\n *\n * @param {Cue} cue the cue to add the properties on\n * @private\n */\n\nconst deprecateOldCue = function (cue) {\n Object.defineProperties(cue.frame, {\n id: {\n get() {\n videojs.log.warn('cue.frame.id is deprecated. Use cue.value.key instead.');\n return cue.value.key;\n }\n },\n value: {\n get() {\n videojs.log.warn('cue.frame.value is deprecated. Use cue.value.data instead.');\n return cue.value.data;\n }\n },\n privateData: {\n get() {\n videojs.log.warn('cue.frame.privateData is deprecated. Use cue.value.data instead.');\n return cue.value.data;\n }\n }\n });\n};\n/**\n * Add metadata text track data to a source handler given an array of metadata\n *\n * @param {Object}\n * @param {Object} inbandTextTracks the inband text tracks\n * @param {Array} metadataArray an array of meta data\n * @param {number} timestampOffset the timestamp offset of the source buffer\n * @param {number} videoDuration the duration of the video\n * @private\n */\n\nconst addMetadata = ({\n inbandTextTracks,\n metadataArray,\n timestampOffset,\n videoDuration\n}) => {\n if (!metadataArray) {\n return;\n }\n const Cue = window$1.WebKitDataCue || window$1.VTTCue;\n const metadataTrack = inbandTextTracks.metadataTrack_;\n if (!metadataTrack) {\n return;\n }\n metadataArray.forEach(metadata => {\n const time = metadata.cueTime + timestampOffset; // if time isn't a finite number between 0 and Infinity, like NaN,\n // ignore this bit of metadata.\n // This likely occurs when you have an non-timed ID3 tag like TIT2,\n // which is the \"Title/Songname/Content description\" frame\n\n if (typeof time !== 'number' || window$1.isNaN(time) || time < 0 || !(time < Infinity)) {\n return;\n } // If we have no frames, we can't create a cue.\n\n if (!metadata.frames || !metadata.frames.length) {\n return;\n }\n metadata.frames.forEach(frame => {\n const cue = new Cue(time, time, frame.value || frame.url || frame.data || '');\n cue.frame = frame;\n cue.value = frame;\n deprecateOldCue(cue);\n metadataTrack.addCue(cue);\n });\n });\n if (!metadataTrack.cues || !metadataTrack.cues.length) {\n return;\n } // Updating the metadeta cues so that\n // the endTime of each cue is the startTime of the next cue\n // the endTime of last cue is the duration of the video\n\n const cues = metadataTrack.cues;\n const cuesArray = []; // Create a copy of the TextTrackCueList...\n // ...disregarding cues with a falsey value\n\n for (let i = 0; i < cues.length; i++) {\n if (cues[i]) {\n cuesArray.push(cues[i]);\n }\n } // Group cues by their startTime value\n\n const cuesGroupedByStartTime = cuesArray.reduce((obj, cue) => {\n const timeSlot = obj[cue.startTime] || [];\n timeSlot.push(cue);\n obj[cue.startTime] = timeSlot;\n return obj;\n }, {}); // Sort startTimes by ascending order\n\n const sortedStartTimes = Object.keys(cuesGroupedByStartTime).sort((a, b) => Number(a) - Number(b)); // Map each cue group's endTime to the next group's startTime\n\n sortedStartTimes.forEach((startTime, idx) => {\n const cueGroup = cuesGroupedByStartTime[startTime];\n const finiteDuration = isFinite(videoDuration) ? videoDuration : startTime;\n const nextTime = Number(sortedStartTimes[idx + 1]) || finiteDuration; // Map each cue's endTime the next group's startTime\n\n cueGroup.forEach(cue => {\n cue.endTime = nextTime;\n });\n });\n}; // object for mapping daterange attributes\n\nconst dateRangeAttr = {\n id: 'ID',\n class: 'CLASS',\n startDate: 'START-DATE',\n duration: 'DURATION',\n endDate: 'END-DATE',\n endOnNext: 'END-ON-NEXT',\n plannedDuration: 'PLANNED-DURATION',\n scte35Out: 'SCTE35-OUT',\n scte35In: 'SCTE35-IN'\n};\nconst dateRangeKeysToOmit = new Set(['id', 'class', 'startDate', 'duration', 'endDate', 'endOnNext', 'startTime', 'endTime', 'processDateRange']);\n/**\n * Add DateRange metadata text track to a source handler given an array of metadata\n *\n * @param {Object}\n * @param {Object} inbandTextTracks the inband text tracks\n * @param {Array} dateRanges parsed media playlist\n * @private\n */\n\nconst addDateRangeMetadata = ({\n inbandTextTracks,\n dateRanges\n}) => {\n const metadataTrack = inbandTextTracks.metadataTrack_;\n if (!metadataTrack) {\n return;\n }\n const Cue = window$1.WebKitDataCue || window$1.VTTCue;\n dateRanges.forEach(dateRange => {\n // we generate multiple cues for each date range with different attributes\n for (const key of Object.keys(dateRange)) {\n if (dateRangeKeysToOmit.has(key)) {\n continue;\n }\n const cue = new Cue(dateRange.startTime, dateRange.endTime, '');\n cue.id = dateRange.id;\n cue.type = 'com.apple.quicktime.HLS';\n cue.value = {\n key: dateRangeAttr[key],\n data: dateRange[key]\n };\n if (key === 'scte35Out' || key === 'scte35In') {\n cue.value.data = new Uint8Array(cue.value.data.match(/[\\da-f]{2}/gi)).buffer;\n }\n metadataTrack.addCue(cue);\n }\n dateRange.processDateRange();\n });\n};\n/**\n * Create metadata text track on video.js if it does not exist\n *\n * @param {Object} inbandTextTracks a reference to current inbandTextTracks\n * @param {string} dispatchType the inband metadata track dispatch type\n * @param {Object} tech the video.js tech\n * @private\n */\n\nconst createMetadataTrackIfNotExists = (inbandTextTracks, dispatchType, tech) => {\n if (inbandTextTracks.metadataTrack_) {\n return;\n }\n inbandTextTracks.metadataTrack_ = tech.addRemoteTextTrack({\n kind: 'metadata',\n label: 'Timed Metadata'\n }, false).track;\n if (!videojs.browser.IS_ANY_SAFARI) {\n inbandTextTracks.metadataTrack_.inBandMetadataTrackDispatchType = dispatchType;\n }\n};\n/**\n * Remove cues from a track on video.js.\n *\n * @param {Double} start start of where we should remove the cue\n * @param {Double} end end of where the we should remove the cue\n * @param {Object} track the text track to remove the cues from\n * @private\n */\n\nconst removeCuesFromTrack = function (start, end, track) {\n let i;\n let cue;\n if (!track) {\n return;\n }\n if (!track.cues) {\n return;\n }\n i = track.cues.length;\n while (i--) {\n cue = track.cues[i]; // Remove any cue within the provided start and end time\n\n if (cue.startTime >= start && cue.endTime <= end) {\n track.removeCue(cue);\n }\n }\n};\n/**\n * Remove duplicate cues from a track on video.js (a cue is considered a\n * duplicate if it has the same time interval and text as another)\n *\n * @param {Object} track the text track to remove the duplicate cues from\n * @private\n */\n\nconst removeDuplicateCuesFromTrack = function (track) {\n const cues = track.cues;\n if (!cues) {\n return;\n }\n const uniqueCues = {};\n for (let i = cues.length - 1; i >= 0; i--) {\n const cue = cues[i];\n const cueKey = `${cue.startTime}-${cue.endTime}-${cue.text}`;\n if (uniqueCues[cueKey]) {\n track.removeCue(cue);\n } else {\n uniqueCues[cueKey] = cue;\n }\n }\n};\n\n/**\n * Returns a list of gops in the buffer that have a pts value of 3 seconds or more in\n * front of current time.\n *\n * @param {Array} buffer\n * The current buffer of gop information\n * @param {number} currentTime\n * The current time\n * @param {Double} mapping\n * Offset to map display time to stream presentation time\n * @return {Array}\n * List of gops considered safe to append over\n */\n\nconst gopsSafeToAlignWith = (buffer, currentTime, mapping) => {\n if (typeof currentTime === 'undefined' || currentTime === null || !buffer.length) {\n return [];\n } // pts value for current time + 3 seconds to give a bit more wiggle room\n\n const currentTimePts = Math.ceil((currentTime - mapping + 3) * ONE_SECOND_IN_TS);\n let i;\n for (i = 0; i < buffer.length; i++) {\n if (buffer[i].pts > currentTimePts) {\n break;\n }\n }\n return buffer.slice(i);\n};\n/**\n * Appends gop information (timing and byteLength) received by the transmuxer for the\n * gops appended in the last call to appendBuffer\n *\n * @param {Array} buffer\n * The current buffer of gop information\n * @param {Array} gops\n * List of new gop information\n * @param {boolean} replace\n * If true, replace the buffer with the new gop information. If false, append the\n * new gop information to the buffer in the right location of time.\n * @return {Array}\n * Updated list of gop information\n */\n\nconst updateGopBuffer = (buffer, gops, replace) => {\n if (!gops.length) {\n return buffer;\n }\n if (replace) {\n // If we are in safe append mode, then completely overwrite the gop buffer\n // with the most recent appeneded data. This will make sure that when appending\n // future segments, we only try to align with gops that are both ahead of current\n // time and in the last segment appended.\n return gops.slice();\n }\n const start = gops[0].pts;\n let i = 0;\n for (i; i < buffer.length; i++) {\n if (buffer[i].pts >= start) {\n break;\n }\n }\n return buffer.slice(0, i).concat(gops);\n};\n/**\n * Removes gop information in buffer that overlaps with provided start and end\n *\n * @param {Array} buffer\n * The current buffer of gop information\n * @param {Double} start\n * position to start the remove at\n * @param {Double} end\n * position to end the remove at\n * @param {Double} mapping\n * Offset to map display time to stream presentation time\n */\n\nconst removeGopBuffer = (buffer, start, end, mapping) => {\n const startPts = Math.ceil((start - mapping) * ONE_SECOND_IN_TS);\n const endPts = Math.ceil((end - mapping) * ONE_SECOND_IN_TS);\n const updatedBuffer = buffer.slice();\n let i = buffer.length;\n while (i--) {\n if (buffer[i].pts <= endPts) {\n break;\n }\n }\n if (i === -1) {\n // no removal because end of remove range is before start of buffer\n return updatedBuffer;\n }\n let j = i + 1;\n while (j--) {\n if (buffer[j].pts <= startPts) {\n break;\n }\n } // clamp remove range start to 0 index\n\n j = Math.max(j, 0);\n updatedBuffer.splice(j, i - j + 1);\n return updatedBuffer;\n};\nconst shallowEqual = function (a, b) {\n // if both are undefined\n // or one or the other is undefined\n // they are not equal\n if (!a && !b || !a && b || a && !b) {\n return false;\n } // they are the same object and thus, equal\n\n if (a === b) {\n return true;\n } // sort keys so we can make sure they have\n // all the same keys later.\n\n const akeys = Object.keys(a).sort();\n const bkeys = Object.keys(b).sort(); // different number of keys, not equal\n\n if (akeys.length !== bkeys.length) {\n return false;\n }\n for (let i = 0; i < akeys.length; i++) {\n const key = akeys[i]; // different sorted keys, not equal\n\n if (key !== bkeys[i]) {\n return false;\n } // different values, not equal\n\n if (a[key] !== b[key]) {\n return false;\n }\n }\n return true;\n};\n\n/**\n * The segment loader has no recourse except to fetch a segment in the\n * current playlist and use the internal timestamps in that segment to\n * generate a syncPoint. This function returns a good candidate index\n * for that process.\n *\n * @param {Array} segments - the segments array from a playlist.\n * @return {number} An index of a segment from the playlist to load\n */\n\nconst getSyncSegmentCandidate = function (currentTimeline, segments, targetTime) {\n segments = segments || [];\n const timelineSegments = [];\n let time = 0;\n for (let i = 0; i < segments.length; i++) {\n const segment = segments[i];\n if (currentTimeline === segment.timeline) {\n timelineSegments.push(i);\n time += segment.duration;\n if (time > targetTime) {\n return i;\n }\n }\n }\n if (timelineSegments.length === 0) {\n return 0;\n } // default to the last timeline segment\n\n return timelineSegments[timelineSegments.length - 1];\n}; // In the event of a quota exceeded error, keep at least one second of back buffer. This\n// number was arbitrarily chosen and may be updated in the future, but seemed reasonable\n// as a start to prevent any potential issues with removing content too close to the\n// playhead.\n\nconst MIN_BACK_BUFFER = 1; // in ms\n\nconst CHECK_BUFFER_DELAY = 500;\nconst finite = num => typeof num === 'number' && isFinite(num); // With most content hovering around 30fps, if a segment has a duration less than a half\n// frame at 30fps or one frame at 60fps, the bandwidth and throughput calculations will\n// not accurately reflect the rest of the content.\n\nconst MIN_SEGMENT_DURATION_TO_SAVE_STATS = 1 / 60;\nconst illegalMediaSwitch = (loaderType, startingMedia, trackInfo) => {\n // Although these checks should most likely cover non 'main' types, for now it narrows\n // the scope of our checks.\n if (loaderType !== 'main' || !startingMedia || !trackInfo) {\n return null;\n }\n if (!trackInfo.hasAudio && !trackInfo.hasVideo) {\n return 'Neither audio nor video found in segment.';\n }\n if (startingMedia.hasVideo && !trackInfo.hasVideo) {\n return 'Only audio found in segment when we expected video.' + ' We can\\'t switch to audio only from a stream that had video.' + ' To get rid of this message, please add codec information to the manifest.';\n }\n if (!startingMedia.hasVideo && trackInfo.hasVideo) {\n return 'Video found in segment when we expected only audio.' + ' We can\\'t switch to a stream with video from an audio only stream.' + ' To get rid of this message, please add codec information to the manifest.';\n }\n return null;\n};\n/**\n * Calculates a time value that is safe to remove from the back buffer without interrupting\n * playback.\n *\n * @param {TimeRange} seekable\n * The current seekable range\n * @param {number} currentTime\n * The current time of the player\n * @param {number} targetDuration\n * The target duration of the current playlist\n * @return {number}\n * Time that is safe to remove from the back buffer without interrupting playback\n */\n\nconst safeBackBufferTrimTime = (seekable, currentTime, targetDuration) => {\n // 30 seconds before the playhead provides a safe default for trimming.\n //\n // Choosing a reasonable default is particularly important for high bitrate content and\n // VOD videos/live streams with large windows, as the buffer may end up overfilled and\n // throw an APPEND_BUFFER_ERR.\n let trimTime = currentTime - Config.BACK_BUFFER_LENGTH;\n if (seekable.length) {\n // Some live playlists may have a shorter window of content than the full allowed back\n // buffer. For these playlists, don't save content that's no longer within the window.\n trimTime = Math.max(trimTime, seekable.start(0));\n } // Don't remove within target duration of the current time to avoid the possibility of\n // removing the GOP currently being played, as removing it can cause playback stalls.\n\n const maxTrimTime = currentTime - targetDuration;\n return Math.min(maxTrimTime, trimTime);\n};\nconst segmentInfoString = segmentInfo => {\n const {\n startOfSegment,\n duration,\n segment,\n part,\n playlist: {\n mediaSequence: seq,\n id,\n segments = []\n },\n mediaIndex: index,\n partIndex,\n timeline\n } = segmentInfo;\n const segmentLen = segments.length - 1;\n let selection = 'mediaIndex/partIndex increment';\n if (segmentInfo.getMediaInfoForTime) {\n selection = `getMediaInfoForTime (${segmentInfo.getMediaInfoForTime})`;\n } else if (segmentInfo.isSyncRequest) {\n selection = 'getSyncSegmentCandidate (isSyncRequest)';\n }\n if (segmentInfo.independent) {\n selection += ` with independent ${segmentInfo.independent}`;\n }\n const hasPartIndex = typeof partIndex === 'number';\n const name = segmentInfo.segment.uri ? 'segment' : 'pre-segment';\n const zeroBasedPartCount = hasPartIndex ? getKnownPartCount({\n preloadSegment: segment\n }) - 1 : 0;\n return `${name} [${seq + index}/${seq + segmentLen}]` + (hasPartIndex ? ` part [${partIndex}/${zeroBasedPartCount}]` : '') + ` segment start/end [${segment.start} => ${segment.end}]` + (hasPartIndex ? ` part start/end [${part.start} => ${part.end}]` : '') + ` startOfSegment [${startOfSegment}]` + ` duration [${duration}]` + ` timeline [${timeline}]` + ` selected by [${selection}]` + ` playlist [${id}]`;\n};\nconst timingInfoPropertyForMedia = mediaType => `${mediaType}TimingInfo`;\n/**\n * Returns the timestamp offset to use for the segment.\n *\n * @param {number} segmentTimeline\n * The timeline of the segment\n * @param {number} currentTimeline\n * The timeline currently being followed by the loader\n * @param {number} startOfSegment\n * The estimated segment start\n * @param {TimeRange[]} buffered\n * The loader's buffer\n * @param {boolean} overrideCheck\n * If true, no checks are made to see if the timestamp offset value should be set,\n * but sets it directly to a value.\n *\n * @return {number|null}\n * Either a number representing a new timestamp offset, or null if the segment is\n * part of the same timeline\n */\n\nconst timestampOffsetForSegment = ({\n segmentTimeline,\n currentTimeline,\n startOfSegment,\n buffered,\n overrideCheck\n}) => {\n // Check to see if we are crossing a discontinuity to see if we need to set the\n // timestamp offset on the transmuxer and source buffer.\n //\n // Previously, we changed the timestampOffset if the start of this segment was less than\n // the currently set timestampOffset, but this isn't desirable as it can produce bad\n // behavior, especially around long running live streams.\n if (!overrideCheck && segmentTimeline === currentTimeline) {\n return null;\n } // When changing renditions, it's possible to request a segment on an older timeline. For\n // instance, given two renditions with the following:\n //\n // #EXTINF:10\n // segment1\n // #EXT-X-DISCONTINUITY\n // #EXTINF:10\n // segment2\n // #EXTINF:10\n // segment3\n //\n // And the current player state:\n //\n // current time: 8\n // buffer: 0 => 20\n //\n // The next segment on the current rendition would be segment3, filling the buffer from\n // 20s onwards. However, if a rendition switch happens after segment2 was requested,\n // then the next segment to be requested will be segment1 from the new rendition in\n // order to fill time 8 and onwards. Using the buffered end would result in repeated\n // content (since it would position segment1 of the new rendition starting at 20s). This\n // case can be identified when the new segment's timeline is a prior value. Instead of\n // using the buffered end, the startOfSegment can be used, which, hopefully, will be\n // more accurate to the actual start time of the segment.\n\n if (segmentTimeline < currentTimeline) {\n return startOfSegment;\n } // segmentInfo.startOfSegment used to be used as the timestamp offset, however, that\n // value uses the end of the last segment if it is available. While this value\n // should often be correct, it's better to rely on the buffered end, as the new\n // content post discontinuity should line up with the buffered end as if it were\n // time 0 for the new content.\n\n return buffered.length ? buffered.end(buffered.length - 1) : startOfSegment;\n};\n/**\n * Returns whether or not the loader should wait for a timeline change from the timeline\n * change controller before processing the segment.\n *\n * Primary timing in VHS goes by video. This is different from most media players, as\n * audio is more often used as the primary timing source. For the foreseeable future, VHS\n * will continue to use video as the primary timing source, due to the current logic and\n * expectations built around it.\n\n * Since the timing follows video, in order to maintain sync, the video loader is\n * responsible for setting both audio and video source buffer timestamp offsets.\n *\n * Setting different values for audio and video source buffers could lead to\n * desyncing. The following examples demonstrate some of the situations where this\n * distinction is important. Note that all of these cases involve demuxed content. When\n * content is muxed, the audio and video are packaged together, therefore syncing\n * separate media playlists is not an issue.\n *\n * CASE 1: Audio prepares to load a new timeline before video:\n *\n * Timeline: 0 1\n * Audio Segments: 0 1 2 3 4 5 DISCO 6 7 8 9\n * Audio Loader: ^\n * Video Segments: 0 1 2 3 4 5 DISCO 6 7 8 9\n * Video Loader ^\n *\n * In the above example, the audio loader is preparing to load the 6th segment, the first\n * after a discontinuity, while the video loader is still loading the 5th segment, before\n * the discontinuity.\n *\n * If the audio loader goes ahead and loads and appends the 6th segment before the video\n * loader crosses the discontinuity, then when appended, the 6th audio segment will use\n * the timestamp offset from timeline 0. This will likely lead to desyncing. In addition,\n * the audio loader must provide the audioAppendStart value to trim the content in the\n * transmuxer, and that value relies on the audio timestamp offset. Since the audio\n * timestamp offset is set by the video (main) loader, the audio loader shouldn't load the\n * segment until that value is provided.\n *\n * CASE 2: Video prepares to load a new timeline before audio:\n *\n * Timeline: 0 1\n * Audio Segments: 0 1 2 3 4 5 DISCO 6 7 8 9\n * Audio Loader: ^\n * Video Segments: 0 1 2 3 4 5 DISCO 6 7 8 9\n * Video Loader ^\n *\n * In the above example, the video loader is preparing to load the 6th segment, the first\n * after a discontinuity, while the audio loader is still loading the 5th segment, before\n * the discontinuity.\n *\n * If the video loader goes ahead and loads and appends the 6th segment, then once the\n * segment is loaded and processed, both the video and audio timestamp offsets will be\n * set, since video is used as the primary timing source. This is to ensure content lines\n * up appropriately, as any modifications to the video timing are reflected by audio when\n * the video loader sets the audio and video timestamp offsets to the same value. However,\n * setting the timestamp offset for audio before audio has had a chance to change\n * timelines will likely lead to desyncing, as the audio loader will append segment 5 with\n * a timestamp intended to apply to segments from timeline 1 rather than timeline 0.\n *\n * CASE 3: When seeking, audio prepares to load a new timeline before video\n *\n * Timeline: 0 1\n * Audio Segments: 0 1 2 3 4 5 DISCO 6 7 8 9\n * Audio Loader: ^\n * Video Segments: 0 1 2 3 4 5 DISCO 6 7 8 9\n * Video Loader ^\n *\n * In the above example, both audio and video loaders are loading segments from timeline\n * 0, but imagine that the seek originated from timeline 1.\n *\n * When seeking to a new timeline, the timestamp offset will be set based on the expected\n * segment start of the loaded video segment. In order to maintain sync, the audio loader\n * must wait for the video loader to load its segment and update both the audio and video\n * timestamp offsets before it may load and append its own segment. This is the case\n * whether the seek results in a mismatched segment request (e.g., the audio loader\n * chooses to load segment 3 and the video loader chooses to load segment 4) or the\n * loaders choose to load the same segment index from each playlist, as the segments may\n * not be aligned perfectly, even for matching segment indexes.\n *\n * @param {Object} timelinechangeController\n * @param {number} currentTimeline\n * The timeline currently being followed by the loader\n * @param {number} segmentTimeline\n * The timeline of the segment being loaded\n * @param {('main'|'audio')} loaderType\n * The loader type\n * @param {boolean} audioDisabled\n * Whether the audio is disabled for the loader. This should only be true when the\n * loader may have muxed audio in its segment, but should not append it, e.g., for\n * the main loader when an alternate audio playlist is active.\n *\n * @return {boolean}\n * Whether the loader should wait for a timeline change from the timeline change\n * controller before processing the segment\n */\n\nconst shouldWaitForTimelineChange = ({\n timelineChangeController,\n currentTimeline,\n segmentTimeline,\n loaderType,\n audioDisabled\n}) => {\n if (currentTimeline === segmentTimeline) {\n return false;\n }\n if (loaderType === 'audio') {\n const lastMainTimelineChange = timelineChangeController.lastTimelineChange({\n type: 'main'\n }); // Audio loader should wait if:\n //\n // * main hasn't had a timeline change yet (thus has not loaded its first segment)\n // * main hasn't yet changed to the timeline audio is looking to load\n\n return !lastMainTimelineChange || lastMainTimelineChange.to !== segmentTimeline;\n } // The main loader only needs to wait for timeline changes if there's demuxed audio.\n // Otherwise, there's nothing to wait for, since audio would be muxed into the main\n // loader's segments (or the content is audio/video only and handled by the main\n // loader).\n\n if (loaderType === 'main' && audioDisabled) {\n const pendingAudioTimelineChange = timelineChangeController.pendingTimelineChange({\n type: 'audio'\n }); // Main loader should wait for the audio loader if audio is not pending a timeline\n // change to the current timeline.\n //\n // Since the main loader is responsible for setting the timestamp offset for both\n // audio and video, the main loader must wait for audio to be about to change to its\n // timeline before setting the offset, otherwise, if audio is behind in loading,\n // segments from the previous timeline would be adjusted by the new timestamp offset.\n //\n // This requirement means that video will not cross a timeline until the audio is\n // about to cross to it, so that way audio and video will always cross the timeline\n // together.\n //\n // In addition to normal timeline changes, these rules also apply to the start of a\n // stream (going from a non-existent timeline, -1, to timeline 0). It's important\n // that these rules apply to the first timeline change because if they did not, it's\n // possible that the main loader will cross two timelines before the audio loader has\n // crossed one. Logic may be implemented to handle the startup as a special case, but\n // it's easier to simply treat all timeline changes the same.\n\n if (pendingAudioTimelineChange && pendingAudioTimelineChange.to === segmentTimeline) {\n return false;\n }\n return true;\n }\n return false;\n};\nconst shouldFixBadTimelineChanges = timelineChangeController => {\n if (!timelineChangeController) {\n return false;\n }\n const pendingAudioTimelineChange = timelineChangeController.pendingTimelineChange({\n type: 'audio'\n });\n const pendingMainTimelineChange = timelineChangeController.pendingTimelineChange({\n type: 'main'\n });\n const hasPendingTimelineChanges = pendingAudioTimelineChange && pendingMainTimelineChange;\n const differentPendingChanges = hasPendingTimelineChanges && pendingAudioTimelineChange.to !== pendingMainTimelineChange.to;\n const isNotInitialPendingTimelineChange = hasPendingTimelineChanges && pendingAudioTimelineChange.from !== -1 && pendingMainTimelineChange.from !== -1;\n if (isNotInitialPendingTimelineChange && differentPendingChanges) {\n return true;\n }\n return false;\n};\n/**\n * Fixes certain bad timeline scenarios by resetting the loader.\n *\n * @param {SegmentLoader} segmentLoader\n */\n\nconst fixBadTimelineChange = segmentLoader => {\n if (!segmentLoader) {\n return;\n }\n segmentLoader.pause();\n segmentLoader.resetEverything();\n segmentLoader.load();\n};\n/**\n * Check if the pending audio timeline change is behind the\n * pending main timeline change.\n *\n * @param {SegmentLoader} segmentLoader\n * @return {boolean}\n */\n\nconst isAudioTimelineBehind = segmentLoader => {\n const pendingAudioTimelineChange = segmentLoader.timelineChangeController_.pendingTimelineChange({\n type: 'audio'\n });\n const pendingMainTimelineChange = segmentLoader.timelineChangeController_.pendingTimelineChange({\n type: 'main'\n });\n const hasPendingTimelineChanges = pendingAudioTimelineChange && pendingMainTimelineChange;\n return hasPendingTimelineChanges && pendingAudioTimelineChange.to < pendingMainTimelineChange.to;\n};\n/**\n * A method to check if the player is waiting for a timeline change, and fixes\n * certain scenarios where the timelines need to be updated.\n *\n * @param {SegmentLoader} segmentLoader\n */\n\nconst checkAndFixTimelines = segmentLoader => {\n const segmentInfo = segmentLoader.pendingSegment_;\n if (!segmentInfo) {\n return;\n }\n const waitingForTimelineChange = shouldWaitForTimelineChange({\n timelineChangeController: segmentLoader.timelineChangeController_,\n currentTimeline: segmentLoader.currentTimeline_,\n segmentTimeline: segmentInfo.timeline,\n loaderType: segmentLoader.loaderType_,\n audioDisabled: segmentLoader.audioDisabled_\n });\n if (waitingForTimelineChange && shouldFixBadTimelineChanges(segmentLoader.timelineChangeController_)) {\n // Audio being behind should only happen on DASH sources.\n if (segmentLoader.sourceType_ === 'dash' && isAudioTimelineBehind(segmentLoader)) {\n segmentLoader.timelineChangeController_.trigger('audioTimelineBehind');\n return;\n }\n fixBadTimelineChange(segmentLoader);\n }\n};\nconst mediaDuration = timingInfos => {\n let maxDuration = 0;\n ['video', 'audio'].forEach(function (type) {\n const typeTimingInfo = timingInfos[`${type}TimingInfo`];\n if (!typeTimingInfo) {\n return;\n }\n const {\n start,\n end\n } = typeTimingInfo;\n let duration;\n if (typeof start === 'bigint' || typeof end === 'bigint') {\n duration = window$1.BigInt(end) - window$1.BigInt(start);\n } else if (typeof start === 'number' && typeof end === 'number') {\n duration = end - start;\n }\n if (typeof duration !== 'undefined' && duration > maxDuration) {\n maxDuration = duration;\n }\n }); // convert back to a number if it is lower than MAX_SAFE_INTEGER\n // as we only need BigInt when we are above that.\n\n if (typeof maxDuration === 'bigint' && maxDuration < Number.MAX_SAFE_INTEGER) {\n maxDuration = Number(maxDuration);\n }\n return maxDuration;\n};\nconst segmentTooLong = ({\n segmentDuration,\n maxDuration\n}) => {\n // 0 duration segments are most likely due to metadata only segments or a lack of\n // information.\n if (!segmentDuration) {\n return false;\n } // For HLS:\n //\n // https://tools.ietf.org/html/draft-pantos-http-live-streaming-23#section-4.3.3.1\n // The EXTINF duration of each Media Segment in the Playlist\n // file, when rounded to the nearest integer, MUST be less than or equal\n // to the target duration; longer segments can trigger playback stalls\n // or other errors.\n //\n // For DASH, the mpd-parser uses the largest reported segment duration as the target\n // duration. Although that reported duration is occasionally approximate (i.e., not\n // exact), a strict check may report that a segment is too long more often in DASH.\n\n return Math.round(segmentDuration) > maxDuration + TIME_FUDGE_FACTOR;\n};\nconst getTroublesomeSegmentDurationMessage = (segmentInfo, sourceType) => {\n // Right now we aren't following DASH's timing model exactly, so only perform\n // this check for HLS content.\n if (sourceType !== 'hls') {\n return null;\n }\n const segmentDuration = mediaDuration({\n audioTimingInfo: segmentInfo.audioTimingInfo,\n videoTimingInfo: segmentInfo.videoTimingInfo\n }); // Don't report if we lack information.\n //\n // If the segment has a duration of 0 it is either a lack of information or a\n // metadata only segment and shouldn't be reported here.\n\n if (!segmentDuration) {\n return null;\n }\n const targetDuration = segmentInfo.playlist.targetDuration;\n const isSegmentWayTooLong = segmentTooLong({\n segmentDuration,\n maxDuration: targetDuration * 2\n });\n const isSegmentSlightlyTooLong = segmentTooLong({\n segmentDuration,\n maxDuration: targetDuration\n });\n const segmentTooLongMessage = `Segment with index ${segmentInfo.mediaIndex} ` + `from playlist ${segmentInfo.playlist.id} ` + `has a duration of ${segmentDuration} ` + `when the reported duration is ${segmentInfo.duration} ` + `and the target duration is ${targetDuration}. ` + 'For HLS content, a duration in excess of the target duration may result in ' + 'playback issues. See the HLS specification section on EXT-X-TARGETDURATION for ' + 'more details: ' + 'https://tools.ietf.org/html/draft-pantos-http-live-streaming-23#section-4.3.3.1';\n if (isSegmentWayTooLong || isSegmentSlightlyTooLong) {\n return {\n severity: isSegmentWayTooLong ? 'warn' : 'info',\n message: segmentTooLongMessage\n };\n }\n return null;\n};\n/**\n *\n * @param {Object} options type of segment loader and segment either segmentInfo or simple segment\n * @return a segmentInfo payload for events or errors.\n */\n\nconst segmentInfoPayload = ({\n type,\n segment\n}) => {\n if (!segment) {\n return;\n }\n const isEncrypted = Boolean(segment.key || segment.map && segment.map.ke);\n const isMediaInitialization = Boolean(segment.map && !segment.map.bytes);\n const start = segment.startOfSegment === undefined ? segment.start : segment.startOfSegment;\n return {\n type: type || segment.type,\n uri: segment.resolvedUri || segment.uri,\n start,\n duration: segment.duration,\n isEncrypted,\n isMediaInitialization\n };\n};\n/**\n * An object that manages segment loading and appending.\n *\n * @class SegmentLoader\n * @param {Object} options required and optional options\n * @extends videojs.EventTarget\n */\n\nclass SegmentLoader extends videojs.EventTarget {\n constructor(settings, options = {}) {\n super(); // check pre-conditions\n\n if (!settings) {\n throw new TypeError('Initialization settings are required');\n }\n if (typeof settings.currentTime !== 'function') {\n throw new TypeError('No currentTime getter specified');\n }\n if (!settings.mediaSource) {\n throw new TypeError('No MediaSource specified');\n } // public properties\n\n this.bandwidth = settings.bandwidth;\n this.throughput = {\n rate: 0,\n count: 0\n };\n this.roundTrip = NaN;\n this.resetStats_();\n this.mediaIndex = null;\n this.partIndex = null; // private settings\n\n this.hasPlayed_ = settings.hasPlayed;\n this.currentTime_ = settings.currentTime;\n this.seekable_ = settings.seekable;\n this.seeking_ = settings.seeking;\n this.duration_ = settings.duration;\n this.mediaSource_ = settings.mediaSource;\n this.vhs_ = settings.vhs;\n this.loaderType_ = settings.loaderType;\n this.currentMediaInfo_ = void 0;\n this.startingMediaInfo_ = void 0;\n this.segmentMetadataTrack_ = settings.segmentMetadataTrack;\n this.goalBufferLength_ = settings.goalBufferLength;\n this.sourceType_ = settings.sourceType;\n this.sourceUpdater_ = settings.sourceUpdater;\n this.inbandTextTracks_ = settings.inbandTextTracks;\n this.state_ = 'INIT';\n this.timelineChangeController_ = settings.timelineChangeController;\n this.shouldSaveSegmentTimingInfo_ = true;\n this.parse708captions_ = settings.parse708captions;\n this.useDtsForTimestampOffset_ = settings.useDtsForTimestampOffset;\n this.captionServices_ = settings.captionServices;\n this.exactManifestTimings = settings.exactManifestTimings;\n this.addMetadataToTextTrack = settings.addMetadataToTextTrack; // private instance variables\n\n this.checkBufferTimeout_ = null;\n this.error_ = void 0;\n this.currentTimeline_ = -1;\n this.shouldForceTimestampOffsetAfterResync_ = false;\n this.pendingSegment_ = null;\n this.xhrOptions_ = null;\n this.pendingSegments_ = [];\n this.audioDisabled_ = false;\n this.isPendingTimestampOffset_ = false; // TODO possibly move gopBuffer and timeMapping info to a separate controller\n\n this.gopBuffer_ = [];\n this.timeMapping_ = 0;\n this.safeAppend_ = false;\n this.appendInitSegment_ = {\n audio: true,\n video: true\n };\n this.playlistOfLastInitSegment_ = {\n audio: null,\n video: null\n };\n this.callQueue_ = []; // If the segment loader prepares to load a segment, but does not have enough\n // information yet to start the loading process (e.g., if the audio loader wants to\n // load a segment from the next timeline but the main loader hasn't yet crossed that\n // timeline), then the load call will be added to the queue until it is ready to be\n // processed.\n\n this.loadQueue_ = [];\n this.metadataQueue_ = {\n id3: [],\n caption: []\n };\n this.waitingOnRemove_ = false;\n this.quotaExceededErrorRetryTimeout_ = null; // Fragmented mp4 playback\n\n this.activeInitSegmentId_ = null;\n this.initSegments_ = {}; // HLSe playback\n\n this.cacheEncryptionKeys_ = settings.cacheEncryptionKeys;\n this.keyCache_ = {};\n this.decrypter_ = settings.decrypter; // Manages the tracking and generation of sync-points, mappings\n // between a time in the display time and a segment index within\n // a playlist\n\n this.syncController_ = settings.syncController;\n this.syncPoint_ = {\n segmentIndex: 0,\n time: 0\n };\n this.transmuxer_ = this.createTransmuxer_();\n this.triggerSyncInfoUpdate_ = () => this.trigger('syncinfoupdate');\n this.syncController_.on('syncinfoupdate', this.triggerSyncInfoUpdate_);\n this.mediaSource_.addEventListener('sourceopen', () => {\n if (!this.isEndOfStream_()) {\n this.ended_ = false;\n }\n }); // ...for determining the fetch location\n\n this.fetchAtBuffer_ = false;\n this.logger_ = logger(`SegmentLoader[${this.loaderType_}]`);\n Object.defineProperty(this, 'state', {\n get() {\n return this.state_;\n },\n set(newState) {\n if (newState !== this.state_) {\n this.logger_(`${this.state_} -> ${newState}`);\n this.state_ = newState;\n this.trigger('statechange');\n }\n }\n });\n this.sourceUpdater_.on('ready', () => {\n if (this.hasEnoughInfoToAppend_()) {\n this.processCallQueue_();\n } else {\n checkAndFixTimelines(this);\n }\n });\n this.sourceUpdater_.on('codecschange', metadata => {\n this.trigger(_extends({\n type: 'codecschange'\n }, metadata));\n }); // Only the main loader needs to listen for pending timeline changes, as the main\n // loader should wait for audio to be ready to change its timeline so that both main\n // and audio timelines change together. For more details, see the\n // shouldWaitForTimelineChange function.\n\n if (this.loaderType_ === 'main') {\n this.timelineChangeController_.on('pendingtimelinechange', () => {\n if (this.hasEnoughInfoToAppend_()) {\n this.processCallQueue_();\n } else {\n checkAndFixTimelines(this);\n }\n });\n } // The main loader only listens on pending timeline changes, but the audio loader,\n // since its loads follow main, needs to listen on timeline changes. For more details,\n // see the shouldWaitForTimelineChange function.\n\n if (this.loaderType_ === 'audio') {\n this.timelineChangeController_.on('timelinechange', metadata => {\n this.trigger(_extends({\n type: 'timelinechange'\n }, metadata));\n if (this.hasEnoughInfoToLoad_()) {\n this.processLoadQueue_();\n } else {\n checkAndFixTimelines(this);\n }\n if (this.hasEnoughInfoToAppend_()) {\n this.processCallQueue_();\n } else {\n checkAndFixTimelines(this);\n }\n });\n }\n }\n /**\n * TODO: Current sync controller consists of many hls-specific strategies\n * media sequence sync is also hls-specific, and we would like to be protocol-agnostic on this level\n * this should be a part of the sync-controller and sync controller should expect different strategy list based on the protocol.\n *\n * @return {MediaSequenceSync|null}\n * @private\n */\n\n get mediaSequenceSync_() {\n return this.syncController_.getMediaSequenceSync(this.loaderType_);\n }\n createTransmuxer_() {\n return segmentTransmuxer.createTransmuxer({\n remux: false,\n alignGopsAtEnd: this.safeAppend_,\n keepOriginalTimestamps: true,\n parse708captions: this.parse708captions_,\n captionServices: this.captionServices_\n });\n }\n /**\n * reset all of our media stats\n *\n * @private\n */\n\n resetStats_() {\n this.mediaBytesTransferred = 0;\n this.mediaRequests = 0;\n this.mediaRequestsAborted = 0;\n this.mediaRequestsTimedout = 0;\n this.mediaRequestsErrored = 0;\n this.mediaTransferDuration = 0;\n this.mediaSecondsLoaded = 0;\n this.mediaAppends = 0;\n }\n /**\n * dispose of the SegmentLoader and reset to the default state\n */\n\n dispose() {\n this.trigger('dispose');\n this.state = 'DISPOSED';\n this.pause();\n this.abort_();\n if (this.transmuxer_) {\n this.transmuxer_.terminate();\n }\n this.resetStats_();\n if (this.checkBufferTimeout_) {\n window$1.clearTimeout(this.checkBufferTimeout_);\n }\n if (this.syncController_ && this.triggerSyncInfoUpdate_) {\n this.syncController_.off('syncinfoupdate', this.triggerSyncInfoUpdate_);\n }\n this.off();\n }\n setAudio(enable) {\n this.audioDisabled_ = !enable;\n if (enable) {\n this.appendInitSegment_.audio = true;\n } else {\n // remove current track audio if it gets disabled\n this.sourceUpdater_.removeAudio(0, this.duration_());\n }\n }\n /**\n * abort anything that is currently doing on with the SegmentLoader\n * and reset to a default state\n */\n\n abort() {\n if (this.state !== 'WAITING') {\n if (this.pendingSegment_) {\n this.pendingSegment_ = null;\n }\n return;\n }\n this.abort_(); // We aborted the requests we were waiting on, so reset the loader's state to READY\n // since we are no longer \"waiting\" on any requests. XHR callback is not always run\n // when the request is aborted. This will prevent the loader from being stuck in the\n // WAITING state indefinitely.\n\n this.state = 'READY'; // don't wait for buffer check timeouts to begin fetching the\n // next segment\n\n if (!this.paused()) {\n this.monitorBuffer_();\n }\n }\n /**\n * abort all pending xhr requests and null any pending segements\n *\n * @private\n */\n\n abort_() {\n if (this.pendingSegment_ && this.pendingSegment_.abortRequests) {\n this.pendingSegment_.abortRequests();\n } // clear out the segment being processed\n\n this.pendingSegment_ = null;\n this.callQueue_ = [];\n this.loadQueue_ = [];\n this.metadataQueue_.id3 = [];\n this.metadataQueue_.caption = [];\n this.timelineChangeController_.clearPendingTimelineChange(this.loaderType_);\n this.waitingOnRemove_ = false;\n window$1.clearTimeout(this.quotaExceededErrorRetryTimeout_);\n this.quotaExceededErrorRetryTimeout_ = null;\n }\n checkForAbort_(requestId) {\n // If the state is APPENDING, then aborts will not modify the state, meaning the first\n // callback that happens should reset the state to READY so that loading can continue.\n if (this.state === 'APPENDING' && !this.pendingSegment_) {\n this.state = 'READY';\n return true;\n }\n if (!this.pendingSegment_ || this.pendingSegment_.requestId !== requestId) {\n return true;\n }\n return false;\n }\n /**\n * set an error on the segment loader and null out any pending segements\n *\n * @param {Error} error the error to set on the SegmentLoader\n * @return {Error} the error that was set or that is currently set\n */\n\n error(error) {\n if (typeof error !== 'undefined') {\n this.logger_('error occurred:', error);\n this.error_ = error;\n }\n this.pendingSegment_ = null;\n return this.error_;\n }\n endOfStream() {\n this.ended_ = true;\n if (this.transmuxer_) {\n // need to clear out any cached data to prepare for the new segment\n segmentTransmuxer.reset(this.transmuxer_);\n }\n this.gopBuffer_.length = 0;\n this.pause();\n this.trigger('ended');\n }\n /**\n * Indicates which time ranges are buffered\n *\n * @return {TimeRange}\n * TimeRange object representing the current buffered ranges\n */\n\n buffered_() {\n const trackInfo = this.getMediaInfo_();\n if (!this.sourceUpdater_ || !trackInfo) {\n return createTimeRanges();\n }\n if (this.loaderType_ === 'main') {\n const {\n hasAudio,\n hasVideo,\n isMuxed\n } = trackInfo;\n if (hasVideo && hasAudio && !this.audioDisabled_ && !isMuxed) {\n return this.sourceUpdater_.buffered();\n }\n if (hasVideo) {\n return this.sourceUpdater_.videoBuffered();\n }\n } // One case that can be ignored for now is audio only with alt audio,\n // as we don't yet have proper support for that.\n\n return this.sourceUpdater_.audioBuffered();\n }\n /**\n * Gets and sets init segment for the provided map\n *\n * @param {Object} map\n * The map object representing the init segment to get or set\n * @param {boolean=} set\n * If true, the init segment for the provided map should be saved\n * @return {Object}\n * map object for desired init segment\n */\n\n initSegmentForMap(map, set = false) {\n if (!map) {\n return null;\n }\n const id = initSegmentId(map);\n let storedMap = this.initSegments_[id];\n if (set && !storedMap && map.bytes) {\n this.initSegments_[id] = storedMap = {\n resolvedUri: map.resolvedUri,\n byterange: map.byterange,\n bytes: map.bytes,\n tracks: map.tracks,\n timescales: map.timescales\n };\n }\n return storedMap || map;\n }\n /**\n * Gets and sets key for the provided key\n *\n * @param {Object} key\n * The key object representing the key to get or set\n * @param {boolean=} set\n * If true, the key for the provided key should be saved\n * @return {Object}\n * Key object for desired key\n */\n\n segmentKey(key, set = false) {\n if (!key) {\n return null;\n }\n const id = segmentKeyId(key);\n let storedKey = this.keyCache_[id]; // TODO: We should use the HTTP Expires header to invalidate our cache per\n // https://tools.ietf.org/html/draft-pantos-http-live-streaming-23#section-6.2.3\n\n if (this.cacheEncryptionKeys_ && set && !storedKey && key.bytes) {\n this.keyCache_[id] = storedKey = {\n resolvedUri: key.resolvedUri,\n bytes: key.bytes\n };\n }\n const result = {\n resolvedUri: (storedKey || key).resolvedUri\n };\n if (storedKey) {\n result.bytes = storedKey.bytes;\n }\n return result;\n }\n /**\n * Returns true if all configuration required for loading is present, otherwise false.\n *\n * @return {boolean} True if the all configuration is ready for loading\n * @private\n */\n\n couldBeginLoading_() {\n return this.playlist_ && !this.paused();\n }\n /**\n * load a playlist and start to fill the buffer\n */\n\n load() {\n // un-pause\n this.monitorBuffer_(); // if we don't have a playlist yet, keep waiting for one to be\n // specified\n\n if (!this.playlist_) {\n return;\n } // if all the configuration is ready, initialize and begin loading\n\n if (this.state === 'INIT' && this.couldBeginLoading_()) {\n return this.init_();\n } // if we're in the middle of processing a segment already, don't\n // kick off an additional segment request\n\n if (!this.couldBeginLoading_() || this.state !== 'READY' && this.state !== 'INIT') {\n return;\n }\n this.state = 'READY';\n }\n /**\n * Once all the starting parameters have been specified, begin\n * operation. This method should only be invoked from the INIT\n * state.\n *\n * @private\n */\n\n init_() {\n this.state = 'READY'; // if this is the audio segment loader, and it hasn't been inited before, then any old\n // audio data from the muxed content should be removed\n\n this.resetEverything();\n return this.monitorBuffer_();\n }\n /**\n * set a playlist on the segment loader\n *\n * @param {PlaylistLoader} media the playlist to set on the segment loader\n */\n\n playlist(newPlaylist, options = {}) {\n if (!newPlaylist) {\n return;\n }\n const oldPlaylist = this.playlist_;\n const segmentInfo = this.pendingSegment_;\n this.playlist_ = newPlaylist;\n this.xhrOptions_ = options; // when we haven't started playing yet, the start of a live playlist\n // is always our zero-time so force a sync update each time the playlist\n // is refreshed from the server\n //\n // Use the INIT state to determine if playback has started, as the playlist sync info\n // should be fixed once requests begin (as sync points are generated based on sync\n // info), but not before then.\n\n if (this.state === 'INIT') {\n newPlaylist.syncInfo = {\n mediaSequence: newPlaylist.mediaSequence,\n time: 0\n }; // Setting the date time mapping means mapping the program date time (if available)\n // to time 0 on the player's timeline. The playlist's syncInfo serves a similar\n // purpose, mapping the initial mediaSequence to time zero. Since the syncInfo can\n // be updated as the playlist is refreshed before the loader starts loading, the\n // program date time mapping needs to be updated as well.\n //\n // This mapping is only done for the main loader because a program date time should\n // map equivalently between playlists.\n\n if (this.loaderType_ === 'main') {\n this.syncController_.setDateTimeMappingForStart(newPlaylist);\n }\n }\n let oldId = null;\n if (oldPlaylist) {\n if (oldPlaylist.id) {\n oldId = oldPlaylist.id;\n } else if (oldPlaylist.uri) {\n oldId = oldPlaylist.uri;\n }\n }\n this.logger_(`playlist update [${oldId} => ${newPlaylist.id || newPlaylist.uri}]`);\n if (this.mediaSequenceSync_) {\n this.mediaSequenceSync_.update(newPlaylist, this.currentTime_());\n this.logger_(`Playlist update:\ncurrentTime: ${this.currentTime_()}\nbufferedEnd: ${lastBufferedEnd(this.buffered_())}\n`, this.mediaSequenceSync_.diagnostics);\n } // in VOD, this is always a rendition switch (or we updated our syncInfo above)\n // in LIVE, we always want to update with new playlists (including refreshes)\n\n this.trigger('syncinfoupdate'); // if we were unpaused but waiting for a playlist, start\n // buffering now\n\n if (this.state === 'INIT' && this.couldBeginLoading_()) {\n return this.init_();\n }\n if (!oldPlaylist || oldPlaylist.uri !== newPlaylist.uri) {\n if (this.mediaIndex !== null) {\n // we must reset/resync the segment loader when we switch renditions and\n // the segment loader is already synced to the previous rendition\n // We only want to reset the loader here for LLHLS playback, as resetLoader sets fetchAtBuffer_\n // to false, resulting in fetching segments at currentTime and causing repeated\n // same-segment requests on playlist change. This erroneously drives up the playback watcher\n // stalled segment count, as re-requesting segments at the currentTime or browser cached segments\n // will not change the buffer.\n // Reference for LLHLS fixes: https://github.com/videojs/http-streaming/pull/1201\n const isLLHLS = !newPlaylist.endList && typeof newPlaylist.partTargetDuration === 'number';\n if (isLLHLS) {\n this.resetLoader();\n } else {\n this.resyncLoader();\n }\n }\n this.currentMediaInfo_ = void 0;\n this.trigger('playlistupdate'); // the rest of this function depends on `oldPlaylist` being defined\n\n return;\n } // we reloaded the same playlist so we are in a live scenario\n // and we will likely need to adjust the mediaIndex\n\n const mediaSequenceDiff = newPlaylist.mediaSequence - oldPlaylist.mediaSequence;\n this.logger_(`live window shift [${mediaSequenceDiff}]`); // update the mediaIndex on the SegmentLoader\n // this is important because we can abort a request and this value must be\n // equal to the last appended mediaIndex\n\n if (this.mediaIndex !== null) {\n this.mediaIndex -= mediaSequenceDiff; // this can happen if we are going to load the first segment, but get a playlist\n // update during that. mediaIndex would go from 0 to -1 if mediaSequence in the\n // new playlist was incremented by 1.\n\n if (this.mediaIndex < 0) {\n this.mediaIndex = null;\n this.partIndex = null;\n } else {\n const segment = this.playlist_.segments[this.mediaIndex]; // partIndex should remain the same for the same segment\n // unless parts fell off of the playlist for this segment.\n // In that case we need to reset partIndex and resync\n\n if (this.partIndex && (!segment.parts || !segment.parts.length || !segment.parts[this.partIndex])) {\n const mediaIndex = this.mediaIndex;\n this.logger_(`currently processing part (index ${this.partIndex}) no longer exists.`);\n this.resetLoader(); // We want to throw away the partIndex and the data associated with it,\n // as the part was dropped from our current playlists segment.\n // The mediaIndex will still be valid so keep that around.\n\n this.mediaIndex = mediaIndex;\n }\n }\n } // update the mediaIndex on the SegmentInfo object\n // this is important because we will update this.mediaIndex with this value\n // in `handleAppendsDone_` after the segment has been successfully appended\n\n if (segmentInfo) {\n segmentInfo.mediaIndex -= mediaSequenceDiff;\n if (segmentInfo.mediaIndex < 0) {\n segmentInfo.mediaIndex = null;\n segmentInfo.partIndex = null;\n } else {\n // we need to update the referenced segment so that timing information is\n // saved for the new playlist's segment, however, if the segment fell off the\n // playlist, we can leave the old reference and just lose the timing info\n if (segmentInfo.mediaIndex >= 0) {\n segmentInfo.segment = newPlaylist.segments[segmentInfo.mediaIndex];\n }\n if (segmentInfo.partIndex >= 0 && segmentInfo.segment.parts) {\n segmentInfo.part = segmentInfo.segment.parts[segmentInfo.partIndex];\n }\n }\n }\n this.syncController_.saveExpiredSegmentInfo(oldPlaylist, newPlaylist);\n }\n /**\n * Prevent the loader from fetching additional segments. If there\n * is a segment request outstanding, it will finish processing\n * before the loader halts. A segment loader can be unpaused by\n * calling load().\n */\n\n pause() {\n if (this.checkBufferTimeout_) {\n window$1.clearTimeout(this.checkBufferTimeout_);\n this.checkBufferTimeout_ = null;\n }\n }\n /**\n * Returns whether the segment loader is fetching additional\n * segments when given the opportunity. This property can be\n * modified through calls to pause() and load().\n */\n\n paused() {\n return this.checkBufferTimeout_ === null;\n }\n /**\n * Delete all the buffered data and reset the SegmentLoader\n *\n * @param {Function} [done] an optional callback to be executed when the remove\n * operation is complete\n */\n\n resetEverything(done) {\n this.ended_ = false;\n this.activeInitSegmentId_ = null;\n this.appendInitSegment_ = {\n audio: true,\n video: true\n };\n this.resetLoader(); // remove from 0, the earliest point, to Infinity, to signify removal of everything.\n // VTT Segment Loader doesn't need to do anything but in the regular SegmentLoader,\n // we then clamp the value to duration if necessary.\n\n this.remove(0, Infinity, done); // clears fmp4 captions\n\n if (this.transmuxer_) {\n this.transmuxer_.postMessage({\n action: 'clearAllMp4Captions'\n }); // reset the cache in the transmuxer\n\n this.transmuxer_.postMessage({\n action: 'reset'\n });\n }\n }\n /**\n * Force the SegmentLoader to resync and start loading around the currentTime instead\n * of starting at the end of the buffer\n *\n * Useful for fast quality changes\n */\n\n resetLoader() {\n this.fetchAtBuffer_ = false;\n if (this.mediaSequenceSync_) {\n this.mediaSequenceSync_.resetAppendedStatus();\n }\n this.resyncLoader();\n }\n /**\n * Force the SegmentLoader to restart synchronization and make a conservative guess\n * before returning to the simple walk-forward method\n */\n\n resyncLoader() {\n if (this.transmuxer_) {\n // need to clear out any cached data to prepare for the new segment\n segmentTransmuxer.reset(this.transmuxer_);\n }\n this.mediaIndex = null;\n this.partIndex = null;\n this.syncPoint_ = null;\n this.isPendingTimestampOffset_ = false; // this is mainly to sync timing-info when switching between renditions with and without timestamp-rollover,\n // so we don't want it for DASH or fragmented mp4 segments.\n\n const isFmp4 = this.currentMediaInfo_ && this.currentMediaInfo_.isFmp4;\n const isHlsTs = this.sourceType_ === 'hls' && !isFmp4;\n if (isHlsTs) {\n this.shouldForceTimestampOffsetAfterResync_ = true;\n }\n this.callQueue_ = [];\n this.loadQueue_ = [];\n this.metadataQueue_.id3 = [];\n this.metadataQueue_.caption = [];\n this.abort();\n if (this.transmuxer_) {\n this.transmuxer_.postMessage({\n action: 'clearParsedMp4Captions'\n });\n }\n }\n /**\n * Remove any data in the source buffer between start and end times\n *\n * @param {number} start - the start time of the region to remove from the buffer\n * @param {number} end - the end time of the region to remove from the buffer\n * @param {Function} [done] - an optional callback to be executed when the remove\n * @param {boolean} force - force all remove operations to happen\n * operation is complete\n */\n\n remove(start, end, done = () => {}, force = false) {\n // clamp end to duration if we need to remove everything.\n // This is due to a browser bug that causes issues if we remove to Infinity.\n // videojs/videojs-contrib-hls#1225\n if (end === Infinity) {\n end = this.duration_();\n } // skip removes that would throw an error\n // commonly happens during a rendition switch at the start of a video\n // from start 0 to end 0\n\n if (end <= start) {\n this.logger_('skipping remove because end ${end} is <= start ${start}');\n return;\n }\n if (!this.sourceUpdater_ || !this.getMediaInfo_()) {\n this.logger_('skipping remove because no source updater or starting media info'); // nothing to remove if we haven't processed any media\n\n return;\n } // set it to one to complete this function's removes\n\n let removesRemaining = 1;\n const removeFinished = () => {\n removesRemaining--;\n if (removesRemaining === 0) {\n done();\n }\n };\n if (force || !this.audioDisabled_) {\n removesRemaining++;\n this.sourceUpdater_.removeAudio(start, end, removeFinished);\n } // While it would be better to only remove video if the main loader has video, this\n // should be safe with audio only as removeVideo will call back even if there's no\n // video buffer.\n //\n // In theory we can check to see if there's video before calling the remove, but in\n // the event that we're switching between renditions and from video to audio only\n // (when we add support for that), we may need to clear the video contents despite\n // what the new media will contain.\n\n if (force || this.loaderType_ === 'main') {\n this.gopBuffer_ = removeGopBuffer(this.gopBuffer_, start, end, this.timeMapping_);\n removesRemaining++;\n this.sourceUpdater_.removeVideo(start, end, removeFinished);\n } // remove any captions and ID3 tags\n\n for (const track in this.inbandTextTracks_) {\n removeCuesFromTrack(start, end, this.inbandTextTracks_[track]);\n }\n removeCuesFromTrack(start, end, this.segmentMetadataTrack_); // finished this function's removes\n\n removeFinished();\n }\n /**\n * (re-)schedule monitorBufferTick_ to run as soon as possible\n *\n * @private\n */\n\n monitorBuffer_() {\n if (this.checkBufferTimeout_) {\n window$1.clearTimeout(this.checkBufferTimeout_);\n }\n this.checkBufferTimeout_ = window$1.setTimeout(this.monitorBufferTick_.bind(this), 1);\n }\n /**\n * As long as the SegmentLoader is in the READY state, periodically\n * invoke fillBuffer_().\n *\n * @private\n */\n\n monitorBufferTick_() {\n if (this.state === 'READY') {\n this.fillBuffer_();\n }\n if (this.checkBufferTimeout_) {\n window$1.clearTimeout(this.checkBufferTimeout_);\n }\n this.checkBufferTimeout_ = window$1.setTimeout(this.monitorBufferTick_.bind(this), CHECK_BUFFER_DELAY);\n }\n /**\n * fill the buffer with segements unless the sourceBuffers are\n * currently updating\n *\n * Note: this function should only ever be called by monitorBuffer_\n * and never directly\n *\n * @private\n */\n\n fillBuffer_() {\n // TODO since the source buffer maintains a queue, and we shouldn't call this function\n // except when we're ready for the next segment, this check can most likely be removed\n if (this.sourceUpdater_.updating()) {\n return;\n } // see if we need to begin loading immediately\n\n const segmentInfo = this.chooseNextRequest_();\n if (!segmentInfo) {\n return;\n }\n const metadata = {\n segmentInfo: segmentInfoPayload({\n type: this.loaderType_,\n segment: segmentInfo\n })\n };\n this.trigger({\n type: 'segmentselected',\n metadata\n });\n if (typeof segmentInfo.timestampOffset === 'number') {\n this.isPendingTimestampOffset_ = false;\n this.timelineChangeController_.pendingTimelineChange({\n type: this.loaderType_,\n from: this.currentTimeline_,\n to: segmentInfo.timeline\n });\n }\n this.loadSegment_(segmentInfo);\n }\n /**\n * Determines if we should call endOfStream on the media source based\n * on the state of the buffer or if appened segment was the final\n * segment in the playlist.\n *\n * @param {number} [mediaIndex] the media index of segment we last appended\n * @param {Object} [playlist] a media playlist object\n * @return {boolean} do we need to call endOfStream on the MediaSource\n */\n\n isEndOfStream_(mediaIndex = this.mediaIndex, playlist = this.playlist_, partIndex = this.partIndex) {\n if (!playlist || !this.mediaSource_) {\n return false;\n }\n const segment = typeof mediaIndex === 'number' && playlist.segments[mediaIndex]; // mediaIndex is zero based but length is 1 based\n\n const appendedLastSegment = mediaIndex + 1 === playlist.segments.length; // true if there are no parts, or this is the last part.\n\n const appendedLastPart = !segment || !segment.parts || partIndex + 1 === segment.parts.length; // if we've buffered to the end of the video, we need to call endOfStream\n // so that MediaSources can trigger the `ended` event when it runs out of\n // buffered data instead of waiting for me\n\n return playlist.endList && this.mediaSource_.readyState === 'open' && appendedLastSegment && appendedLastPart;\n }\n /**\n * Determines what request should be made given current segment loader state.\n *\n * @return {Object} a request object that describes the segment/part to load\n */\n\n chooseNextRequest_() {\n const buffered = this.buffered_();\n const bufferedEnd = lastBufferedEnd(buffered) || 0;\n const bufferedTime = timeAheadOf(buffered, this.currentTime_());\n const preloaded = !this.hasPlayed_() && bufferedTime >= 1;\n const haveEnoughBuffer = bufferedTime >= this.goalBufferLength_();\n const segments = this.playlist_.segments; // return no segment if:\n // 1. we don't have segments\n // 2. The video has not yet played and we already downloaded a segment\n // 3. we already have enough buffered time\n\n if (!segments.length || preloaded || haveEnoughBuffer) {\n return null;\n }\n this.syncPoint_ = this.syncPoint_ || this.syncController_.getSyncPoint(this.playlist_, this.duration_(), this.currentTimeline_, this.currentTime_(), this.loaderType_);\n const next = {\n partIndex: null,\n mediaIndex: null,\n startOfSegment: null,\n playlist: this.playlist_,\n isSyncRequest: Boolean(!this.syncPoint_)\n };\n if (next.isSyncRequest) {\n next.mediaIndex = getSyncSegmentCandidate(this.currentTimeline_, segments, bufferedEnd);\n this.logger_(`choose next request. Can not find sync point. Fallback to media Index: ${next.mediaIndex}`);\n } else if (this.mediaIndex !== null) {\n const segment = segments[this.mediaIndex];\n const partIndex = typeof this.partIndex === 'number' ? this.partIndex : -1;\n next.startOfSegment = segment.end ? segment.end : bufferedEnd;\n if (segment.parts && segment.parts[partIndex + 1]) {\n next.mediaIndex = this.mediaIndex;\n next.partIndex = partIndex + 1;\n } else {\n next.mediaIndex = this.mediaIndex + 1;\n }\n } else {\n let segmentIndex;\n let partIndex;\n let startTime;\n const targetTime = this.fetchAtBuffer_ ? bufferedEnd : this.currentTime_();\n if (this.mediaSequenceSync_) {\n this.logger_(`chooseNextRequest_ request after Quality Switch:\nFor TargetTime: ${targetTime}.\nCurrentTime: ${this.currentTime_()}\nBufferedEnd: ${bufferedEnd}\nFetch At Buffer: ${this.fetchAtBuffer_}\n`, this.mediaSequenceSync_.diagnostics);\n }\n if (this.mediaSequenceSync_ && this.mediaSequenceSync_.isReliable) {\n const syncInfo = this.getSyncInfoFromMediaSequenceSync_(targetTime);\n if (!syncInfo) {\n const message = 'No sync info found while using media sequence sync';\n this.error({\n message,\n metadata: {\n errorType: videojs.Error.StreamingFailedToSelectNextSegment,\n error: new Error(message)\n }\n });\n this.logger_('chooseNextRequest_ - no sync info found using media sequence sync'); // no match\n\n return null;\n }\n this.logger_(`chooseNextRequest_ mediaSequence syncInfo (${syncInfo.start} --> ${syncInfo.end})`);\n segmentIndex = syncInfo.segmentIndex;\n partIndex = syncInfo.partIndex;\n startTime = syncInfo.start;\n } else {\n this.logger_('chooseNextRequest_ - fallback to a regular segment selection algorithm, based on a syncPoint.'); // fallback\n\n const mediaInfoForTime = Playlist.getMediaInfoForTime({\n exactManifestTimings: this.exactManifestTimings,\n playlist: this.playlist_,\n currentTime: targetTime,\n startingPartIndex: this.syncPoint_.partIndex,\n startingSegmentIndex: this.syncPoint_.segmentIndex,\n startTime: this.syncPoint_.time\n });\n segmentIndex = mediaInfoForTime.segmentIndex;\n partIndex = mediaInfoForTime.partIndex;\n startTime = mediaInfoForTime.startTime;\n }\n next.getMediaInfoForTime = this.fetchAtBuffer_ ? `bufferedEnd ${targetTime}` : `currentTime ${targetTime}`;\n next.mediaIndex = segmentIndex;\n next.startOfSegment = startTime;\n next.partIndex = partIndex;\n this.logger_(`choose next request. Playlist switched and we have a sync point. Media Index: ${next.mediaIndex} `);\n }\n const nextSegment = segments[next.mediaIndex];\n let nextPart = nextSegment && typeof next.partIndex === 'number' && nextSegment.parts && nextSegment.parts[next.partIndex]; // if the next segment index is invalid or\n // the next partIndex is invalid do not choose a next segment.\n\n if (!nextSegment || typeof next.partIndex === 'number' && !nextPart) {\n return null;\n } // if the next segment has parts, and we don't have a partIndex.\n // Set partIndex to 0\n\n if (typeof next.partIndex !== 'number' && nextSegment.parts) {\n next.partIndex = 0;\n nextPart = nextSegment.parts[0];\n } // independentSegments applies to every segment in a playlist. If independentSegments appears in a main playlist,\n // it applies to each segment in each media playlist.\n // https://datatracker.ietf.org/doc/html/draft-pantos-http-live-streaming-23#section-4.3.5.1\n\n const hasIndependentSegments = this.vhs_.playlists && this.vhs_.playlists.main && this.vhs_.playlists.main.independentSegments || this.playlist_.independentSegments; // if we have no buffered data then we need to make sure\n // that the next part we append is \"independent\" if possible.\n // So we check if the previous part is independent, and request\n // it if it is.\n\n if (!bufferedTime && nextPart && !hasIndependentSegments && !nextPart.independent) {\n if (next.partIndex === 0) {\n const lastSegment = segments[next.mediaIndex - 1];\n const lastSegmentLastPart = lastSegment.parts && lastSegment.parts.length && lastSegment.parts[lastSegment.parts.length - 1];\n if (lastSegmentLastPart && lastSegmentLastPart.independent) {\n next.mediaIndex -= 1;\n next.partIndex = lastSegment.parts.length - 1;\n next.independent = 'previous segment';\n }\n } else if (nextSegment.parts[next.partIndex - 1].independent) {\n next.partIndex -= 1;\n next.independent = 'previous part';\n }\n }\n const ended = this.mediaSource_ && this.mediaSource_.readyState === 'ended'; // do not choose a next segment if all of the following:\n // 1. this is the last segment in the playlist\n // 2. end of stream has been called on the media source already\n // 3. the player is not seeking\n\n if (next.mediaIndex >= segments.length - 1 && ended && !this.seeking_()) {\n return null;\n }\n if (this.shouldForceTimestampOffsetAfterResync_) {\n this.shouldForceTimestampOffsetAfterResync_ = false;\n next.forceTimestampOffset = true;\n this.logger_('choose next request. Force timestamp offset after loader resync');\n }\n return this.generateSegmentInfo_(next);\n }\n getSyncInfoFromMediaSequenceSync_(targetTime) {\n if (!this.mediaSequenceSync_) {\n return null;\n } // we should pull the target time to the least available time if we drop out of sync for any reason\n\n const finalTargetTime = Math.max(targetTime, this.mediaSequenceSync_.start);\n if (targetTime !== finalTargetTime) {\n this.logger_(`getSyncInfoFromMediaSequenceSync_. Pulled target time from ${targetTime} to ${finalTargetTime}`);\n }\n const mediaSequenceSyncInfo = this.mediaSequenceSync_.getSyncInfoForTime(finalTargetTime);\n if (!mediaSequenceSyncInfo) {\n // no match at all\n return null;\n }\n if (!mediaSequenceSyncInfo.isAppended) {\n // has a perfect match\n return mediaSequenceSyncInfo;\n } // has match, but segment was already appended.\n // attempt to auto-advance to the nearest next segment:\n\n const nextMediaSequenceSyncInfo = this.mediaSequenceSync_.getSyncInfoForTime(mediaSequenceSyncInfo.end);\n if (!nextMediaSequenceSyncInfo) {\n // no match at all\n return null;\n }\n if (nextMediaSequenceSyncInfo.isAppended) {\n this.logger_('getSyncInfoFromMediaSequenceSync_: We encounter unexpected scenario where next media sequence sync info is also appended!');\n } // got match with the nearest next segment\n\n return nextMediaSequenceSyncInfo;\n }\n generateSegmentInfo_(options) {\n const {\n independent,\n playlist,\n mediaIndex,\n startOfSegment,\n isSyncRequest,\n partIndex,\n forceTimestampOffset,\n getMediaInfoForTime\n } = options;\n const segment = playlist.segments[mediaIndex];\n const part = typeof partIndex === 'number' && segment.parts[partIndex];\n const segmentInfo = {\n requestId: 'segment-loader-' + Math.random(),\n // resolve the segment URL relative to the playlist\n uri: part && part.resolvedUri || segment.resolvedUri,\n // the segment's mediaIndex at the time it was requested\n mediaIndex,\n partIndex: part ? partIndex : null,\n // whether or not to update the SegmentLoader's state with this\n // segment's mediaIndex\n isSyncRequest,\n startOfSegment,\n // the segment's playlist\n playlist,\n // unencrypted bytes of the segment\n bytes: null,\n // when a key is defined for this segment, the encrypted bytes\n encryptedBytes: null,\n // The target timestampOffset for this segment when we append it\n // to the source buffer\n timestampOffset: null,\n // The timeline that the segment is in\n timeline: segment.timeline,\n // The expected duration of the segment in seconds\n duration: part && part.duration || segment.duration,\n // retain the segment in case the playlist updates while doing an async process\n segment,\n part,\n byteLength: 0,\n transmuxer: this.transmuxer_,\n // type of getMediaInfoForTime that was used to get this segment\n getMediaInfoForTime,\n independent\n };\n const overrideCheck = typeof forceTimestampOffset !== 'undefined' ? forceTimestampOffset : this.isPendingTimestampOffset_;\n segmentInfo.timestampOffset = this.timestampOffsetForSegment_({\n segmentTimeline: segment.timeline,\n currentTimeline: this.currentTimeline_,\n startOfSegment,\n buffered: this.buffered_(),\n overrideCheck\n });\n const audioBufferedEnd = lastBufferedEnd(this.sourceUpdater_.audioBuffered());\n if (typeof audioBufferedEnd === 'number') {\n // since the transmuxer is using the actual timing values, but the buffer is\n // adjusted by the timestamp offset, we must adjust the value here\n segmentInfo.audioAppendStart = audioBufferedEnd - this.sourceUpdater_.audioTimestampOffset();\n }\n if (this.sourceUpdater_.videoBuffered().length) {\n segmentInfo.gopsToAlignWith = gopsSafeToAlignWith(this.gopBuffer_,\n // since the transmuxer is using the actual timing values, but the time is\n // adjusted by the timestmap offset, we must adjust the value here\n this.currentTime_() - this.sourceUpdater_.videoTimestampOffset(), this.timeMapping_);\n }\n return segmentInfo;\n } // get the timestampoffset for a segment,\n // added so that vtt segment loader can override and prevent\n // adding timestamp offsets.\n\n timestampOffsetForSegment_(options) {\n return timestampOffsetForSegment(options);\n }\n /**\n * Determines if the network has enough bandwidth to complete the current segment\n * request in a timely manner. If not, the request will be aborted early and bandwidth\n * updated to trigger a playlist switch.\n *\n * @param {Object} stats\n * Object containing stats about the request timing and size\n * @private\n */\n\n earlyAbortWhenNeeded_(stats) {\n if (this.vhs_.tech_.paused() ||\n // Don't abort if the current playlist is on the lowestEnabledRendition\n // TODO: Replace using timeout with a boolean indicating whether this playlist is\n // the lowestEnabledRendition.\n !this.xhrOptions_.timeout ||\n // Don't abort if we have no bandwidth information to estimate segment sizes\n !this.playlist_.attributes.BANDWIDTH) {\n return;\n } // Wait at least 1 second since the first byte of data has been received before\n // using the calculated bandwidth from the progress event to allow the bitrate\n // to stabilize\n\n if (Date.now() - (stats.firstBytesReceivedAt || Date.now()) < 1000) {\n return;\n }\n const currentTime = this.currentTime_();\n const measuredBandwidth = stats.bandwidth;\n const segmentDuration = this.pendingSegment_.duration;\n const requestTimeRemaining = Playlist.estimateSegmentRequestTime(segmentDuration, measuredBandwidth, this.playlist_, stats.bytesReceived); // Subtract 1 from the timeUntilRebuffer so we still consider an early abort\n // if we are only left with less than 1 second when the request completes.\n // A negative timeUntilRebuffering indicates we are already rebuffering\n\n const timeUntilRebuffer$1 = timeUntilRebuffer(this.buffered_(), currentTime, this.vhs_.tech_.playbackRate()) - 1; // Only consider aborting early if the estimated time to finish the download\n // is larger than the estimated time until the player runs out of forward buffer\n\n if (requestTimeRemaining <= timeUntilRebuffer$1) {\n return;\n }\n const switchCandidate = minRebufferMaxBandwidthSelector({\n main: this.vhs_.playlists.main,\n currentTime,\n bandwidth: measuredBandwidth,\n duration: this.duration_(),\n segmentDuration,\n timeUntilRebuffer: timeUntilRebuffer$1,\n currentTimeline: this.currentTimeline_,\n syncController: this.syncController_\n });\n if (!switchCandidate) {\n return;\n }\n const rebufferingImpact = requestTimeRemaining - timeUntilRebuffer$1;\n const timeSavedBySwitching = rebufferingImpact - switchCandidate.rebufferingImpact;\n let minimumTimeSaving = 0.5; // If we are already rebuffering, increase the amount of variance we add to the\n // potential round trip time of the new request so that we are not too aggressive\n // with switching to a playlist that might save us a fraction of a second.\n\n if (timeUntilRebuffer$1 <= TIME_FUDGE_FACTOR) {\n minimumTimeSaving = 1;\n }\n if (!switchCandidate.playlist || switchCandidate.playlist.uri === this.playlist_.uri || timeSavedBySwitching < minimumTimeSaving) {\n return;\n } // set the bandwidth to that of the desired playlist being sure to scale by\n // BANDWIDTH_VARIANCE and add one so the playlist selector does not exclude it\n // don't trigger a bandwidthupdate as the bandwidth is artifial\n\n this.bandwidth = switchCandidate.playlist.attributes.BANDWIDTH * Config.BANDWIDTH_VARIANCE + 1;\n this.trigger('earlyabort');\n }\n handleAbort_(segmentInfo) {\n this.logger_(`Aborting ${segmentInfoString(segmentInfo)}`);\n this.mediaRequestsAborted += 1;\n }\n /**\n * XHR `progress` event handler\n *\n * @param {Event}\n * The XHR `progress` event\n * @param {Object} simpleSegment\n * A simplified segment object copy\n * @private\n */\n\n handleProgress_(event, simpleSegment) {\n this.earlyAbortWhenNeeded_(simpleSegment.stats);\n if (this.checkForAbort_(simpleSegment.requestId)) {\n return;\n }\n this.trigger('progress');\n }\n handleTrackInfo_(simpleSegment, trackInfo) {\n const {\n hasAudio,\n hasVideo\n } = trackInfo;\n const metadata = {\n segmentInfo: segmentInfoPayload({\n type: this.loaderType_,\n segment: simpleSegment\n }),\n trackInfo: {\n hasAudio,\n hasVideo\n }\n };\n this.trigger({\n type: 'segmenttransmuxingtrackinfoavailable',\n metadata\n });\n this.earlyAbortWhenNeeded_(simpleSegment.stats);\n if (this.checkForAbort_(simpleSegment.requestId)) {\n return;\n }\n if (this.checkForIllegalMediaSwitch(trackInfo)) {\n return;\n }\n trackInfo = trackInfo || {}; // When we have track info, determine what media types this loader is dealing with.\n // Guard against cases where we're not getting track info at all until we are\n // certain that all streams will provide it.\n\n if (!shallowEqual(this.currentMediaInfo_, trackInfo)) {\n this.appendInitSegment_ = {\n audio: true,\n video: true\n };\n this.startingMediaInfo_ = trackInfo;\n this.currentMediaInfo_ = trackInfo;\n this.logger_('trackinfo update', trackInfo);\n this.trigger('trackinfo');\n } // trackinfo may cause an abort if the trackinfo\n // causes a codec change to an unsupported codec.\n\n if (this.checkForAbort_(simpleSegment.requestId)) {\n return;\n } // set trackinfo on the pending segment so that\n // it can append.\n\n this.pendingSegment_.trackInfo = trackInfo; // check if any calls were waiting on the track info\n\n if (this.hasEnoughInfoToAppend_()) {\n this.processCallQueue_();\n } else {\n checkAndFixTimelines(this);\n }\n }\n handleTimingInfo_(simpleSegment, mediaType, timeType, time) {\n this.earlyAbortWhenNeeded_(simpleSegment.stats);\n if (this.checkForAbort_(simpleSegment.requestId)) {\n return;\n }\n const segmentInfo = this.pendingSegment_;\n const timingInfoProperty = timingInfoPropertyForMedia(mediaType);\n segmentInfo[timingInfoProperty] = segmentInfo[timingInfoProperty] || {};\n segmentInfo[timingInfoProperty][timeType] = time;\n this.logger_(`timinginfo: ${mediaType} - ${timeType} - ${time}`); // check if any calls were waiting on the timing info\n\n if (this.hasEnoughInfoToAppend_()) {\n this.processCallQueue_();\n } else {\n checkAndFixTimelines(this);\n }\n }\n handleCaptions_(simpleSegment, captionData) {\n this.earlyAbortWhenNeeded_(simpleSegment.stats);\n if (this.checkForAbort_(simpleSegment.requestId)) {\n return;\n } // This could only happen with fmp4 segments, but\n // should still not happen in general\n\n if (captionData.length === 0) {\n this.logger_('SegmentLoader received no captions from a caption event');\n return;\n }\n const segmentInfo = this.pendingSegment_; // Wait until we have some video data so that caption timing\n // can be adjusted by the timestamp offset\n\n if (!segmentInfo.hasAppendedData_) {\n this.metadataQueue_.caption.push(this.handleCaptions_.bind(this, simpleSegment, captionData));\n return;\n }\n const timestampOffset = this.sourceUpdater_.videoTimestampOffset() === null ? this.sourceUpdater_.audioTimestampOffset() : this.sourceUpdater_.videoTimestampOffset();\n const captionTracks = {}; // get total start/end and captions for each track/stream\n\n captionData.forEach(caption => {\n // caption.stream is actually a track name...\n // set to the existing values in tracks or default values\n captionTracks[caption.stream] = captionTracks[caption.stream] || {\n // Infinity, as any other value will be less than this\n startTime: Infinity,\n captions: [],\n // 0 as an other value will be more than this\n endTime: 0\n };\n const captionTrack = captionTracks[caption.stream];\n captionTrack.startTime = Math.min(captionTrack.startTime, caption.startTime + timestampOffset);\n captionTrack.endTime = Math.max(captionTrack.endTime, caption.endTime + timestampOffset);\n captionTrack.captions.push(caption);\n });\n Object.keys(captionTracks).forEach(trackName => {\n const {\n startTime,\n endTime,\n captions\n } = captionTracks[trackName];\n const inbandTextTracks = this.inbandTextTracks_;\n this.logger_(`adding cues from ${startTime} -> ${endTime} for ${trackName}`);\n createCaptionsTrackIfNotExists(inbandTextTracks, this.vhs_.tech_, trackName); // clear out any cues that start and end at the same time period for the same track.\n // We do this because a rendition change that also changes the timescale for captions\n // will result in captions being re-parsed for certain segments. If we add them again\n // without clearing we will have two of the same captions visible.\n\n removeCuesFromTrack(startTime, endTime, inbandTextTracks[trackName]);\n addCaptionData({\n captionArray: captions,\n inbandTextTracks,\n timestampOffset\n });\n }); // Reset stored captions since we added parsed\n // captions to a text track at this point\n\n if (this.transmuxer_) {\n this.transmuxer_.postMessage({\n action: 'clearParsedMp4Captions'\n });\n }\n }\n handleId3_(simpleSegment, id3Frames, dispatchType) {\n this.earlyAbortWhenNeeded_(simpleSegment.stats);\n if (this.checkForAbort_(simpleSegment.requestId)) {\n return;\n }\n const segmentInfo = this.pendingSegment_; // we need to have appended data in order for the timestamp offset to be set\n\n if (!segmentInfo.hasAppendedData_) {\n this.metadataQueue_.id3.push(this.handleId3_.bind(this, simpleSegment, id3Frames, dispatchType));\n return;\n }\n this.addMetadataToTextTrack(dispatchType, id3Frames, this.duration_());\n }\n processMetadataQueue_() {\n this.metadataQueue_.id3.forEach(fn => fn());\n this.metadataQueue_.caption.forEach(fn => fn());\n this.metadataQueue_.id3 = [];\n this.metadataQueue_.caption = [];\n }\n processCallQueue_() {\n const callQueue = this.callQueue_; // Clear out the queue before the queued functions are run, since some of the\n // functions may check the length of the load queue and default to pushing themselves\n // back onto the queue.\n\n this.callQueue_ = [];\n callQueue.forEach(fun => fun());\n }\n processLoadQueue_() {\n const loadQueue = this.loadQueue_; // Clear out the queue before the queued functions are run, since some of the\n // functions may check the length of the load queue and default to pushing themselves\n // back onto the queue.\n\n this.loadQueue_ = [];\n loadQueue.forEach(fun => fun());\n }\n /**\n * Determines whether the loader has enough info to load the next segment.\n *\n * @return {boolean}\n * Whether or not the loader has enough info to load the next segment\n */\n\n hasEnoughInfoToLoad_() {\n // Since primary timing goes by video, only the audio loader potentially needs to wait\n // to load.\n if (this.loaderType_ !== 'audio') {\n return true;\n }\n const segmentInfo = this.pendingSegment_; // A fill buffer must have already run to establish a pending segment before there's\n // enough info to load.\n\n if (!segmentInfo) {\n return false;\n } // The first segment can and should be loaded immediately so that source buffers are\n // created together (before appending). Source buffer creation uses the presence of\n // audio and video data to determine whether to create audio/video source buffers, and\n // uses processed (transmuxed or parsed) media to determine the types required.\n\n if (!this.getCurrentMediaInfo_()) {\n return true;\n }\n if (\n // Technically, instead of waiting to load a segment on timeline changes, a segment\n // can be requested and downloaded and only wait before it is transmuxed or parsed.\n // But in practice, there are a few reasons why it is better to wait until a loader\n // is ready to append that segment before requesting and downloading:\n //\n // 1. Because audio and main loaders cross discontinuities together, if this loader\n // is waiting for the other to catch up, then instead of requesting another\n // segment and using up more bandwidth, by not yet loading, more bandwidth is\n // allotted to the loader currently behind.\n // 2. media-segment-request doesn't have to have logic to consider whether a segment\n // is ready to be processed or not, isolating the queueing behavior to the loader.\n // 3. The audio loader bases some of its segment properties on timing information\n // provided by the main loader, meaning that, if the logic for waiting on\n // processing was in media-segment-request, then it would also need to know how\n // to re-generate the segment information after the main loader caught up.\n shouldWaitForTimelineChange({\n timelineChangeController: this.timelineChangeController_,\n currentTimeline: this.currentTimeline_,\n segmentTimeline: segmentInfo.timeline,\n loaderType: this.loaderType_,\n audioDisabled: this.audioDisabled_\n })) {\n return false;\n }\n return true;\n }\n getCurrentMediaInfo_(segmentInfo = this.pendingSegment_) {\n return segmentInfo && segmentInfo.trackInfo || this.currentMediaInfo_;\n }\n getMediaInfo_(segmentInfo = this.pendingSegment_) {\n return this.getCurrentMediaInfo_(segmentInfo) || this.startingMediaInfo_;\n }\n getPendingSegmentPlaylist() {\n return this.pendingSegment_ ? this.pendingSegment_.playlist : null;\n }\n hasEnoughInfoToAppend_() {\n if (!this.sourceUpdater_.ready()) {\n return false;\n } // If content needs to be removed or the loader is waiting on an append reattempt,\n // then no additional content should be appended until the prior append is resolved.\n\n if (this.waitingOnRemove_ || this.quotaExceededErrorRetryTimeout_) {\n return false;\n }\n const segmentInfo = this.pendingSegment_;\n const trackInfo = this.getCurrentMediaInfo_(); // no segment to append any data for or\n // we do not have information on this specific\n // segment yet\n\n if (!segmentInfo || !trackInfo) {\n return false;\n }\n const {\n hasAudio,\n hasVideo,\n isMuxed\n } = trackInfo;\n if (hasVideo && !segmentInfo.videoTimingInfo) {\n return false;\n } // muxed content only relies on video timing information for now.\n\n if (hasAudio && !this.audioDisabled_ && !isMuxed && !segmentInfo.audioTimingInfo) {\n return false;\n } // we need to allow an append here even if we're moving to different timelines.\n\n if (shouldWaitForTimelineChange({\n timelineChangeController: this.timelineChangeController_,\n currentTimeline: this.currentTimeline_,\n segmentTimeline: segmentInfo.timeline,\n loaderType: this.loaderType_,\n audioDisabled: this.audioDisabled_\n })) {\n return false;\n }\n return true;\n }\n handleData_(simpleSegment, result) {\n this.earlyAbortWhenNeeded_(simpleSegment.stats);\n if (this.checkForAbort_(simpleSegment.requestId)) {\n return;\n } // If there's anything in the call queue, then this data came later and should be\n // executed after the calls currently queued.\n\n if (this.callQueue_.length || !this.hasEnoughInfoToAppend_()) {\n checkAndFixTimelines(this);\n this.callQueue_.push(this.handleData_.bind(this, simpleSegment, result));\n return;\n }\n const segmentInfo = this.pendingSegment_; // update the time mapping so we can translate from display time to media time\n\n this.setTimeMapping_(segmentInfo.timeline); // for tracking overall stats\n\n this.updateMediaSecondsLoaded_(segmentInfo.part || segmentInfo.segment); // Note that the state isn't changed from loading to appending. This is because abort\n // logic may change behavior depending on the state, and changing state too early may\n // inflate our estimates of bandwidth. In the future this should be re-examined to\n // note more granular states.\n // don't process and append data if the mediaSource is closed\n\n if (this.mediaSource_.readyState === 'closed') {\n return;\n } // if this request included an initialization segment, save that data\n // to the initSegment cache\n\n if (simpleSegment.map) {\n simpleSegment.map = this.initSegmentForMap(simpleSegment.map, true); // move over init segment properties to media request\n\n segmentInfo.segment.map = simpleSegment.map;\n } // if this request included a segment key, save that data in the cache\n\n if (simpleSegment.key) {\n this.segmentKey(simpleSegment.key, true);\n }\n segmentInfo.isFmp4 = simpleSegment.isFmp4;\n segmentInfo.timingInfo = segmentInfo.timingInfo || {};\n if (segmentInfo.isFmp4) {\n this.trigger('fmp4');\n segmentInfo.timingInfo.start = segmentInfo[timingInfoPropertyForMedia(result.type)].start;\n } else {\n const trackInfo = this.getCurrentMediaInfo_();\n const useVideoTimingInfo = this.loaderType_ === 'main' && trackInfo && trackInfo.hasVideo;\n let firstVideoFrameTimeForData;\n if (useVideoTimingInfo) {\n firstVideoFrameTimeForData = segmentInfo.videoTimingInfo.start;\n } // Segment loader knows more about segment timing than the transmuxer (in certain\n // aspects), so make any changes required for a more accurate start time.\n // Don't set the end time yet, as the segment may not be finished processing.\n\n segmentInfo.timingInfo.start = this.trueSegmentStart_({\n currentStart: segmentInfo.timingInfo.start,\n playlist: segmentInfo.playlist,\n mediaIndex: segmentInfo.mediaIndex,\n currentVideoTimestampOffset: this.sourceUpdater_.videoTimestampOffset(),\n useVideoTimingInfo,\n firstVideoFrameTimeForData,\n videoTimingInfo: segmentInfo.videoTimingInfo,\n audioTimingInfo: segmentInfo.audioTimingInfo\n });\n } // Init segments for audio and video only need to be appended in certain cases. Now\n // that data is about to be appended, we can check the final cases to determine\n // whether we should append an init segment.\n\n this.updateAppendInitSegmentStatus(segmentInfo, result.type); // Timestamp offset should be updated once we get new data and have its timing info,\n // as we use the start of the segment to offset the best guess (playlist provided)\n // timestamp offset.\n\n this.updateSourceBufferTimestampOffset_(segmentInfo); // if this is a sync request we need to determine whether it should\n // be appended or not.\n\n if (segmentInfo.isSyncRequest) {\n // first save/update our timing info for this segment.\n // this is what allows us to choose an accurate segment\n // and the main reason we make a sync request.\n this.updateTimingInfoEnd_(segmentInfo);\n this.syncController_.saveSegmentTimingInfo({\n segmentInfo,\n shouldSaveTimelineMapping: this.loaderType_ === 'main'\n });\n const next = this.chooseNextRequest_(); // If the sync request isn't the segment that would be requested next\n // after taking into account its timing info, do not append it.\n\n if (next.mediaIndex !== segmentInfo.mediaIndex || next.partIndex !== segmentInfo.partIndex) {\n this.logger_('sync segment was incorrect, not appending');\n return;\n } // otherwise append it like any other segment as our guess was correct.\n\n this.logger_('sync segment was correct, appending');\n } // Save some state so that in the future anything waiting on first append (and/or\n // timestamp offset(s)) can process immediately. While the extra state isn't optimal,\n // we need some notion of whether the timestamp offset or other relevant information\n // has had a chance to be set.\n\n segmentInfo.hasAppendedData_ = true; // Now that the timestamp offset should be set, we can append any waiting ID3 tags.\n\n this.processMetadataQueue_();\n this.appendData_(segmentInfo, result);\n }\n updateAppendInitSegmentStatus(segmentInfo, type) {\n // alt audio doesn't manage timestamp offset\n if (this.loaderType_ === 'main' && typeof segmentInfo.timestampOffset === 'number' &&\n // in the case that we're handling partial data, we don't want to append an init\n // segment for each chunk\n !segmentInfo.changedTimestampOffset) {\n // if the timestamp offset changed, the timeline may have changed, so we have to re-\n // append init segments\n this.appendInitSegment_ = {\n audio: true,\n video: true\n };\n }\n if (this.playlistOfLastInitSegment_[type] !== segmentInfo.playlist) {\n // make sure we append init segment on playlist changes, in case the media config\n // changed\n this.appendInitSegment_[type] = true;\n }\n }\n getInitSegmentAndUpdateState_({\n type,\n initSegment,\n map,\n playlist\n }) {\n // \"The EXT-X-MAP tag specifies how to obtain the Media Initialization Section\n // (Section 3) required to parse the applicable Media Segments. It applies to every\n // Media Segment that appears after it in the Playlist until the next EXT-X-MAP tag\n // or until the end of the playlist.\"\n // https://tools.ietf.org/html/draft-pantos-http-live-streaming-23#section-4.3.2.5\n if (map) {\n const id = initSegmentId(map);\n if (this.activeInitSegmentId_ === id) {\n // don't need to re-append the init segment if the ID matches\n return null;\n } // a map-specified init segment takes priority over any transmuxed (or otherwise\n // obtained) init segment\n //\n // this also caches the init segment for later use\n\n initSegment = this.initSegmentForMap(map, true).bytes;\n this.activeInitSegmentId_ = id;\n } // We used to always prepend init segments for video, however, that shouldn't be\n // necessary. Instead, we should only append on changes, similar to what we've always\n // done for audio. This is more important (though may not be that important) for\n // frame-by-frame appending for LHLS, simply because of the increased quantity of\n // appends.\n\n if (initSegment && this.appendInitSegment_[type]) {\n // Make sure we track the playlist that we last used for the init segment, so that\n // we can re-append the init segment in the event that we get data from a new\n // playlist. Discontinuities and track changes are handled in other sections.\n this.playlistOfLastInitSegment_[type] = playlist; // Disable future init segment appends for this type. Until a change is necessary.\n\n this.appendInitSegment_[type] = false; // we need to clear out the fmp4 active init segment id, since\n // we are appending the muxer init segment\n\n this.activeInitSegmentId_ = null;\n return initSegment;\n }\n return null;\n }\n handleQuotaExceededError_({\n segmentInfo,\n type,\n bytes\n }, error) {\n const audioBuffered = this.sourceUpdater_.audioBuffered();\n const videoBuffered = this.sourceUpdater_.videoBuffered(); // For now we're ignoring any notion of gaps in the buffer, but they, in theory,\n // should be cleared out during the buffer removals. However, log in case it helps\n // debug.\n\n if (audioBuffered.length > 1) {\n this.logger_('On QUOTA_EXCEEDED_ERR, found gaps in the audio buffer: ' + timeRangesToArray(audioBuffered).join(', '));\n }\n if (videoBuffered.length > 1) {\n this.logger_('On QUOTA_EXCEEDED_ERR, found gaps in the video buffer: ' + timeRangesToArray(videoBuffered).join(', '));\n }\n const audioBufferStart = audioBuffered.length ? audioBuffered.start(0) : 0;\n const audioBufferEnd = audioBuffered.length ? audioBuffered.end(audioBuffered.length - 1) : 0;\n const videoBufferStart = videoBuffered.length ? videoBuffered.start(0) : 0;\n const videoBufferEnd = videoBuffered.length ? videoBuffered.end(videoBuffered.length - 1) : 0;\n if (audioBufferEnd - audioBufferStart <= MIN_BACK_BUFFER && videoBufferEnd - videoBufferStart <= MIN_BACK_BUFFER) {\n // Can't remove enough buffer to make room for new segment (or the browser doesn't\n // allow for appends of segments this size). In the future, it may be possible to\n // split up the segment and append in pieces, but for now, error out this playlist\n // in an attempt to switch to a more manageable rendition.\n this.logger_('On QUOTA_EXCEEDED_ERR, single segment too large to append to ' + 'buffer, triggering an error. ' + `Appended byte length: ${bytes.byteLength}, ` + `audio buffer: ${timeRangesToArray(audioBuffered).join(', ')}, ` + `video buffer: ${timeRangesToArray(videoBuffered).join(', ')}, `);\n this.error({\n message: 'Quota exceeded error with append of a single segment of content',\n excludeUntil: Infinity\n });\n this.trigger('error');\n return;\n } // To try to resolve the quota exceeded error, clear back buffer and retry. This means\n // that the segment-loader should block on future events until this one is handled, so\n // that it doesn't keep moving onto further segments. Adding the call to the call\n // queue will prevent further appends until waitingOnRemove_ and\n // quotaExceededErrorRetryTimeout_ are cleared.\n //\n // Note that this will only block the current loader. In the case of demuxed content,\n // the other load may keep filling as fast as possible. In practice, this should be\n // OK, as it is a rare case when either audio has a high enough bitrate to fill up a\n // source buffer, or video fills without enough room for audio to append (and without\n // the availability of clearing out seconds of back buffer to make room for audio).\n // But it might still be good to handle this case in the future as a TODO.\n\n this.waitingOnRemove_ = true;\n this.callQueue_.push(this.appendToSourceBuffer_.bind(this, {\n segmentInfo,\n type,\n bytes\n }));\n const currentTime = this.currentTime_(); // Try to remove as much audio and video as possible to make room for new content\n // before retrying.\n\n const timeToRemoveUntil = currentTime - MIN_BACK_BUFFER;\n this.logger_(`On QUOTA_EXCEEDED_ERR, removing audio/video from 0 to ${timeToRemoveUntil}`);\n this.remove(0, timeToRemoveUntil, () => {\n this.logger_(`On QUOTA_EXCEEDED_ERR, retrying append in ${MIN_BACK_BUFFER}s`);\n this.waitingOnRemove_ = false; // wait the length of time alotted in the back buffer to prevent wasted\n // attempts (since we can't clear less than the minimum)\n\n this.quotaExceededErrorRetryTimeout_ = window$1.setTimeout(() => {\n this.logger_('On QUOTA_EXCEEDED_ERR, re-processing call queue');\n this.quotaExceededErrorRetryTimeout_ = null;\n this.processCallQueue_();\n }, MIN_BACK_BUFFER * 1000);\n }, true);\n }\n handleAppendError_({\n segmentInfo,\n type,\n bytes\n }, error) {\n // if there's no error, nothing to do\n if (!error) {\n return;\n }\n if (error.code === QUOTA_EXCEEDED_ERR) {\n this.handleQuotaExceededError_({\n segmentInfo,\n type,\n bytes\n }); // A quota exceeded error should be recoverable with a future re-append, so no need\n // to trigger an append error.\n\n return;\n }\n this.logger_('Received non QUOTA_EXCEEDED_ERR on append', error); // If an append errors, we often can't recover.\n // (see https://w3c.github.io/media-source/#sourcebuffer-append-error).\n //\n // Trigger a special error so that it can be handled separately from normal,\n // recoverable errors.\n\n this.error({\n message: `${type} append of ${bytes.length}b failed for segment ` + `#${segmentInfo.mediaIndex} in playlist ${segmentInfo.playlist.id}`,\n metadata: {\n errorType: videojs.Error.StreamingFailedToAppendSegment\n }\n });\n this.trigger('appenderror');\n }\n appendToSourceBuffer_({\n segmentInfo,\n type,\n initSegment,\n data,\n bytes\n }) {\n // If this is a re-append, bytes were already created and don't need to be recreated\n if (!bytes) {\n const segments = [data];\n let byteLength = data.byteLength;\n if (initSegment) {\n // if the media initialization segment is changing, append it before the content\n // segment\n segments.unshift(initSegment);\n byteLength += initSegment.byteLength;\n } // Technically we should be OK appending the init segment separately, however, we\n // haven't yet tested that, and prepending is how we have always done things.\n\n bytes = concatSegments({\n bytes: byteLength,\n segments\n });\n }\n const metadata = {\n segmentInfo: segmentInfoPayload({\n type: this.loaderType_,\n segment: segmentInfo\n })\n };\n this.trigger({\n type: 'segmentappendstart',\n metadata\n });\n this.sourceUpdater_.appendBuffer({\n segmentInfo,\n type,\n bytes\n }, this.handleAppendError_.bind(this, {\n segmentInfo,\n type,\n bytes\n }));\n }\n handleSegmentTimingInfo_(type, requestId, segmentTimingInfo) {\n if (!this.pendingSegment_ || requestId !== this.pendingSegment_.requestId) {\n return;\n }\n const segment = this.pendingSegment_.segment;\n const timingInfoProperty = `${type}TimingInfo`;\n if (!segment[timingInfoProperty]) {\n segment[timingInfoProperty] = {};\n }\n segment[timingInfoProperty].transmuxerPrependedSeconds = segmentTimingInfo.prependedContentDuration || 0;\n segment[timingInfoProperty].transmuxedPresentationStart = segmentTimingInfo.start.presentation;\n segment[timingInfoProperty].transmuxedDecodeStart = segmentTimingInfo.start.decode;\n segment[timingInfoProperty].transmuxedPresentationEnd = segmentTimingInfo.end.presentation;\n segment[timingInfoProperty].transmuxedDecodeEnd = segmentTimingInfo.end.decode; // mainly used as a reference for debugging\n\n segment[timingInfoProperty].baseMediaDecodeTime = segmentTimingInfo.baseMediaDecodeTime;\n }\n appendData_(segmentInfo, result) {\n const {\n type,\n data\n } = result;\n if (!data || !data.byteLength) {\n return;\n }\n if (type === 'audio' && this.audioDisabled_) {\n return;\n }\n const initSegment = this.getInitSegmentAndUpdateState_({\n type,\n initSegment: result.initSegment,\n playlist: segmentInfo.playlist,\n map: segmentInfo.isFmp4 ? segmentInfo.segment.map : null\n });\n this.appendToSourceBuffer_({\n segmentInfo,\n type,\n initSegment,\n data\n });\n }\n /**\n * load a specific segment from a request into the buffer\n *\n * @private\n */\n\n loadSegment_(segmentInfo) {\n this.state = 'WAITING';\n this.pendingSegment_ = segmentInfo;\n this.trimBackBuffer_(segmentInfo);\n if (typeof segmentInfo.timestampOffset === 'number') {\n if (this.transmuxer_) {\n this.transmuxer_.postMessage({\n action: 'clearAllMp4Captions'\n });\n }\n }\n if (!this.hasEnoughInfoToLoad_()) {\n checkAndFixTimelines(this);\n this.loadQueue_.push(() => {\n // regenerate the audioAppendStart, timestampOffset, etc as they\n // may have changed since this function was added to the queue.\n const options = _extends({}, segmentInfo, {\n forceTimestampOffset: true\n });\n _extends(segmentInfo, this.generateSegmentInfo_(options));\n this.isPendingTimestampOffset_ = false;\n this.updateTransmuxerAndRequestSegment_(segmentInfo);\n });\n return;\n }\n this.updateTransmuxerAndRequestSegment_(segmentInfo);\n }\n updateTransmuxerAndRequestSegment_(segmentInfo) {\n // We'll update the source buffer's timestamp offset once we have transmuxed data, but\n // the transmuxer still needs to be updated before then.\n //\n // Even though keepOriginalTimestamps is set to true for the transmuxer, timestamp\n // offset must be passed to the transmuxer for stream correcting adjustments.\n if (this.shouldUpdateTransmuxerTimestampOffset_(segmentInfo.timestampOffset)) {\n this.gopBuffer_.length = 0; // gopsToAlignWith was set before the GOP buffer was cleared\n\n segmentInfo.gopsToAlignWith = [];\n this.timeMapping_ = 0; // reset values in the transmuxer since a discontinuity should start fresh\n\n this.transmuxer_.postMessage({\n action: 'reset'\n });\n this.transmuxer_.postMessage({\n action: 'setTimestampOffset',\n timestampOffset: segmentInfo.timestampOffset\n });\n }\n const simpleSegment = this.createSimplifiedSegmentObj_(segmentInfo);\n const isEndOfStream = this.isEndOfStream_(segmentInfo.mediaIndex, segmentInfo.playlist, segmentInfo.partIndex);\n const isWalkingForward = this.mediaIndex !== null;\n const isDiscontinuity = segmentInfo.timeline !== this.currentTimeline_ &&\n // currentTimeline starts at -1, so we shouldn't end the timeline switching to 0,\n // the first timeline\n segmentInfo.timeline > 0;\n const isEndOfTimeline = isEndOfStream || isWalkingForward && isDiscontinuity;\n this.logger_(`Requesting\n${compactSegmentUrlDescription(segmentInfo.uri)}\n${segmentInfoString(segmentInfo)}`); // If there's an init segment associated with this segment, but it is not cached (identified by a lack of bytes),\n // then this init segment has never been seen before and should be appended.\n //\n // At this point the content type (audio/video or both) is not yet known, but it should be safe to set\n // both to true and leave the decision of whether to append the init segment to append time.\n\n if (simpleSegment.map && !simpleSegment.map.bytes) {\n this.logger_('going to request init segment.');\n this.appendInitSegment_ = {\n video: true,\n audio: true\n };\n }\n segmentInfo.abortRequests = mediaSegmentRequest({\n xhr: this.vhs_.xhr,\n xhrOptions: this.xhrOptions_,\n decryptionWorker: this.decrypter_,\n segment: simpleSegment,\n abortFn: this.handleAbort_.bind(this, segmentInfo),\n progressFn: this.handleProgress_.bind(this),\n trackInfoFn: this.handleTrackInfo_.bind(this),\n timingInfoFn: this.handleTimingInfo_.bind(this),\n videoSegmentTimingInfoFn: this.handleSegmentTimingInfo_.bind(this, 'video', segmentInfo.requestId),\n audioSegmentTimingInfoFn: this.handleSegmentTimingInfo_.bind(this, 'audio', segmentInfo.requestId),\n captionsFn: this.handleCaptions_.bind(this),\n isEndOfTimeline,\n endedTimelineFn: () => {\n this.logger_('received endedtimeline callback');\n },\n id3Fn: this.handleId3_.bind(this),\n dataFn: this.handleData_.bind(this),\n doneFn: this.segmentRequestFinished_.bind(this),\n onTransmuxerLog: ({\n message,\n level,\n stream\n }) => {\n this.logger_(`${segmentInfoString(segmentInfo)} logged from transmuxer stream ${stream} as a ${level}: ${message}`);\n },\n triggerSegmentEventFn: ({\n type,\n segment,\n keyInfo,\n trackInfo,\n timingInfo\n }) => {\n const segInfo = segmentInfoPayload({\n segment\n });\n const metadata = {\n segmentInfo: segInfo\n }; // add other properties if necessary.\n\n if (keyInfo) {\n metadata.keyInfo = keyInfo;\n }\n if (trackInfo) {\n metadata.trackInfo = trackInfo;\n }\n if (timingInfo) {\n metadata.timingInfo = timingInfo;\n }\n this.trigger({\n type,\n metadata\n });\n }\n });\n }\n /**\n * trim the back buffer so that we don't have too much data\n * in the source buffer\n *\n * @private\n *\n * @param {Object} segmentInfo - the current segment\n */\n\n trimBackBuffer_(segmentInfo) {\n const removeToTime = safeBackBufferTrimTime(this.seekable_(), this.currentTime_(), this.playlist_.targetDuration || 10); // Chrome has a hard limit of 150MB of\n // buffer and a very conservative \"garbage collector\"\n // We manually clear out the old buffer to ensure\n // we don't trigger the QuotaExceeded error\n // on the source buffer during subsequent appends\n\n if (removeToTime > 0) {\n this.remove(0, removeToTime);\n }\n }\n /**\n * created a simplified copy of the segment object with just the\n * information necessary to perform the XHR and decryption\n *\n * @private\n *\n * @param {Object} segmentInfo - the current segment\n * @return {Object} a simplified segment object copy\n */\n\n createSimplifiedSegmentObj_(segmentInfo) {\n const segment = segmentInfo.segment;\n const part = segmentInfo.part;\n const isEncrypted = segmentInfo.segment.key || segmentInfo.segment.map && segmentInfo.segment.map.key;\n const isMediaInitialization = segmentInfo.segment.map && !segmentInfo.segment.map.bytes;\n const simpleSegment = {\n resolvedUri: part ? part.resolvedUri : segment.resolvedUri,\n byterange: part ? part.byterange : segment.byterange,\n requestId: segmentInfo.requestId,\n transmuxer: segmentInfo.transmuxer,\n audioAppendStart: segmentInfo.audioAppendStart,\n gopsToAlignWith: segmentInfo.gopsToAlignWith,\n part: segmentInfo.part,\n type: this.loaderType_,\n start: segmentInfo.startOfSegment,\n duration: segmentInfo.duration,\n isEncrypted,\n isMediaInitialization\n };\n const previousSegment = segmentInfo.playlist.segments[segmentInfo.mediaIndex - 1];\n if (previousSegment && previousSegment.timeline === segment.timeline) {\n // The baseStartTime of a segment is used to handle rollover when probing the TS\n // segment to retrieve timing information. Since the probe only looks at the media's\n // times (e.g., PTS and DTS values of the segment), and doesn't consider the\n // player's time (e.g., player.currentTime()), baseStartTime should reflect the\n // media time as well. transmuxedDecodeEnd represents the end time of a segment, in\n // seconds of media time, so should be used here. The previous segment is used since\n // the end of the previous segment should represent the beginning of the current\n // segment, so long as they are on the same timeline.\n if (previousSegment.videoTimingInfo) {\n simpleSegment.baseStartTime = previousSegment.videoTimingInfo.transmuxedDecodeEnd;\n } else if (previousSegment.audioTimingInfo) {\n simpleSegment.baseStartTime = previousSegment.audioTimingInfo.transmuxedDecodeEnd;\n }\n }\n if (segment.key) {\n // if the media sequence is greater than 2^32, the IV will be incorrect\n // assuming 10s segments, that would be about 1300 years\n const iv = segment.key.iv || new Uint32Array([0, 0, 0, segmentInfo.mediaIndex + segmentInfo.playlist.mediaSequence]);\n simpleSegment.key = this.segmentKey(segment.key);\n simpleSegment.key.iv = iv;\n }\n if (segment.map) {\n simpleSegment.map = this.initSegmentForMap(segment.map);\n }\n return simpleSegment;\n }\n saveTransferStats_(stats) {\n // every request counts as a media request even if it has been aborted\n // or canceled due to a timeout\n this.mediaRequests += 1;\n if (stats) {\n this.mediaBytesTransferred += stats.bytesReceived;\n this.mediaTransferDuration += stats.roundTripTime;\n }\n }\n saveBandwidthRelatedStats_(duration, stats) {\n // byteLength will be used for throughput, and should be based on bytes receieved,\n // which we only know at the end of the request and should reflect total bytes\n // downloaded rather than just bytes processed from components of the segment\n this.pendingSegment_.byteLength = stats.bytesReceived;\n if (duration < MIN_SEGMENT_DURATION_TO_SAVE_STATS) {\n this.logger_(`Ignoring segment's bandwidth because its duration of ${duration}` + ` is less than the min to record ${MIN_SEGMENT_DURATION_TO_SAVE_STATS}`);\n return;\n }\n const metadata = {\n bandwidthInfo: {\n from: this.bandwidth,\n to: stats.bandwidth\n }\n }; // player event with payload\n\n this.trigger({\n type: 'bandwidthupdated',\n metadata\n });\n this.bandwidth = stats.bandwidth;\n this.roundTrip = stats.roundTripTime;\n }\n handleTimeout_() {\n // although the VTT segment loader bandwidth isn't really used, it's good to\n // maintain functinality between segment loaders\n this.mediaRequestsTimedout += 1;\n this.bandwidth = 1;\n this.roundTrip = NaN;\n this.trigger('bandwidthupdate');\n this.trigger('timeout');\n }\n /**\n * Handle the callback from the segmentRequest function and set the\n * associated SegmentLoader state and errors if necessary\n *\n * @private\n */\n\n segmentRequestFinished_(error, simpleSegment, result) {\n // TODO handle special cases, e.g., muxed audio/video but only audio in the segment\n // check the call queue directly since this function doesn't need to deal with any\n // data, and can continue even if the source buffers are not set up and we didn't get\n // any data from the segment\n if (this.callQueue_.length) {\n this.callQueue_.push(this.segmentRequestFinished_.bind(this, error, simpleSegment, result));\n return;\n }\n this.saveTransferStats_(simpleSegment.stats); // The request was aborted and the SegmentLoader has already been reset\n\n if (!this.pendingSegment_) {\n return;\n } // the request was aborted and the SegmentLoader has already started\n // another request. this can happen when the timeout for an aborted\n // request triggers due to a limitation in the XHR library\n // do not count this as any sort of request or we risk double-counting\n\n if (simpleSegment.requestId !== this.pendingSegment_.requestId) {\n return;\n } // an error occurred from the active pendingSegment_ so reset everything\n\n if (error) {\n this.pendingSegment_ = null;\n this.state = 'READY'; // aborts are not a true error condition and nothing corrective needs to be done\n\n if (error.code === REQUEST_ERRORS.ABORTED) {\n return;\n }\n this.pause(); // the error is really just that at least one of the requests timed-out\n // set the bandwidth to a very low value and trigger an ABR switch to\n // take emergency action\n\n if (error.code === REQUEST_ERRORS.TIMEOUT) {\n this.handleTimeout_();\n return;\n } // if control-flow has arrived here, then the error is real\n // emit an error event to exclude the current playlist\n\n this.mediaRequestsErrored += 1;\n this.error(error);\n this.trigger('error');\n return;\n }\n const segmentInfo = this.pendingSegment_; // the response was a success so set any bandwidth stats the request\n // generated for ABR purposes\n\n this.saveBandwidthRelatedStats_(segmentInfo.duration, simpleSegment.stats);\n segmentInfo.endOfAllRequests = simpleSegment.endOfAllRequests;\n if (result.gopInfo) {\n this.gopBuffer_ = updateGopBuffer(this.gopBuffer_, result.gopInfo, this.safeAppend_);\n } // Although we may have already started appending on progress, we shouldn't switch the\n // state away from loading until we are officially done loading the segment data.\n\n this.state = 'APPENDING'; // used for testing\n\n this.trigger('appending');\n this.waitForAppendsToComplete_(segmentInfo);\n }\n setTimeMapping_(timeline) {\n const timelineMapping = this.syncController_.mappingForTimeline(timeline);\n if (timelineMapping !== null) {\n this.timeMapping_ = timelineMapping;\n }\n }\n updateMediaSecondsLoaded_(segment) {\n if (typeof segment.start === 'number' && typeof segment.end === 'number') {\n this.mediaSecondsLoaded += segment.end - segment.start;\n } else {\n this.mediaSecondsLoaded += segment.duration;\n }\n }\n shouldUpdateTransmuxerTimestampOffset_(timestampOffset) {\n if (timestampOffset === null) {\n return false;\n } // note that we're potentially using the same timestamp offset for both video and\n // audio\n\n if (this.loaderType_ === 'main' && timestampOffset !== this.sourceUpdater_.videoTimestampOffset()) {\n return true;\n }\n if (!this.audioDisabled_ && timestampOffset !== this.sourceUpdater_.audioTimestampOffset()) {\n return true;\n }\n return false;\n }\n trueSegmentStart_({\n currentStart,\n playlist,\n mediaIndex,\n firstVideoFrameTimeForData,\n currentVideoTimestampOffset,\n useVideoTimingInfo,\n videoTimingInfo,\n audioTimingInfo\n }) {\n if (typeof currentStart !== 'undefined') {\n // if start was set once, keep using it\n return currentStart;\n }\n if (!useVideoTimingInfo) {\n return audioTimingInfo.start;\n }\n const previousSegment = playlist.segments[mediaIndex - 1]; // The start of a segment should be the start of the first full frame contained\n // within that segment. Since the transmuxer maintains a cache of incomplete data\n // from and/or the last frame seen, the start time may reflect a frame that starts\n // in the previous segment. Check for that case and ensure the start time is\n // accurate for the segment.\n\n if (mediaIndex === 0 || !previousSegment || typeof previousSegment.start === 'undefined' || previousSegment.end !== firstVideoFrameTimeForData + currentVideoTimestampOffset) {\n return firstVideoFrameTimeForData;\n }\n return videoTimingInfo.start;\n }\n waitForAppendsToComplete_(segmentInfo) {\n const trackInfo = this.getCurrentMediaInfo_(segmentInfo);\n if (!trackInfo) {\n this.error({\n message: 'No starting media returned, likely due to an unsupported media format.',\n playlistExclusionDuration: Infinity\n });\n this.trigger('error');\n return;\n } // Although transmuxing is done, appends may not yet be finished. Throw a marker\n // on each queue this loader is responsible for to ensure that the appends are\n // complete.\n\n const {\n hasAudio,\n hasVideo,\n isMuxed\n } = trackInfo;\n const waitForVideo = this.loaderType_ === 'main' && hasVideo;\n const waitForAudio = !this.audioDisabled_ && hasAudio && !isMuxed;\n segmentInfo.waitingOnAppends = 0; // segments with no data\n\n if (!segmentInfo.hasAppendedData_) {\n if (!segmentInfo.timingInfo && typeof segmentInfo.timestampOffset === 'number') {\n // When there's no audio or video data in the segment, there's no audio or video\n // timing information.\n //\n // If there's no audio or video timing information, then the timestamp offset\n // can't be adjusted to the appropriate value for the transmuxer and source\n // buffers.\n //\n // Therefore, the next segment should be used to set the timestamp offset.\n this.isPendingTimestampOffset_ = true;\n } // override settings for metadata only segments\n\n segmentInfo.timingInfo = {\n start: 0\n };\n segmentInfo.waitingOnAppends++;\n if (!this.isPendingTimestampOffset_) {\n // update the timestampoffset\n this.updateSourceBufferTimestampOffset_(segmentInfo); // make sure the metadata queue is processed even though we have\n // no video/audio data.\n\n this.processMetadataQueue_();\n } // append is \"done\" instantly with no data.\n\n this.checkAppendsDone_(segmentInfo);\n return;\n } // Since source updater could call back synchronously, do the increments first.\n\n if (waitForVideo) {\n segmentInfo.waitingOnAppends++;\n }\n if (waitForAudio) {\n segmentInfo.waitingOnAppends++;\n }\n if (waitForVideo) {\n this.sourceUpdater_.videoQueueCallback(this.checkAppendsDone_.bind(this, segmentInfo));\n }\n if (waitForAudio) {\n this.sourceUpdater_.audioQueueCallback(this.checkAppendsDone_.bind(this, segmentInfo));\n }\n }\n checkAppendsDone_(segmentInfo) {\n if (this.checkForAbort_(segmentInfo.requestId)) {\n return;\n }\n segmentInfo.waitingOnAppends--;\n if (segmentInfo.waitingOnAppends === 0) {\n this.handleAppendsDone_();\n }\n }\n checkForIllegalMediaSwitch(trackInfo) {\n const illegalMediaSwitchError = illegalMediaSwitch(this.loaderType_, this.getCurrentMediaInfo_(), trackInfo);\n if (illegalMediaSwitchError) {\n this.error({\n message: illegalMediaSwitchError,\n playlistExclusionDuration: Infinity\n });\n this.trigger('error');\n return true;\n }\n return false;\n }\n updateSourceBufferTimestampOffset_(segmentInfo) {\n if (segmentInfo.timestampOffset === null ||\n // we don't yet have the start for whatever media type (video or audio) has\n // priority, timing-wise, so we must wait\n typeof segmentInfo.timingInfo.start !== 'number' ||\n // already updated the timestamp offset for this segment\n segmentInfo.changedTimestampOffset ||\n // the alt audio loader should not be responsible for setting the timestamp offset\n this.loaderType_ !== 'main') {\n return;\n }\n let didChange = false; // Primary timing goes by video, and audio is trimmed in the transmuxer, meaning that\n // the timing info here comes from video. In the event that the audio is longer than\n // the video, this will trim the start of the audio.\n // This also trims any offset from 0 at the beginning of the media\n\n segmentInfo.timestampOffset -= this.getSegmentStartTimeForTimestampOffsetCalculation_({\n videoTimingInfo: segmentInfo.segment.videoTimingInfo,\n audioTimingInfo: segmentInfo.segment.audioTimingInfo,\n timingInfo: segmentInfo.timingInfo\n }); // In the event that there are part segment downloads, each will try to update the\n // timestamp offset. Retaining this bit of state prevents us from updating in the\n // future (within the same segment), however, there may be a better way to handle it.\n\n segmentInfo.changedTimestampOffset = true;\n if (segmentInfo.timestampOffset !== this.sourceUpdater_.videoTimestampOffset()) {\n this.sourceUpdater_.videoTimestampOffset(segmentInfo.timestampOffset);\n didChange = true;\n }\n if (segmentInfo.timestampOffset !== this.sourceUpdater_.audioTimestampOffset()) {\n this.sourceUpdater_.audioTimestampOffset(segmentInfo.timestampOffset);\n didChange = true;\n }\n if (didChange) {\n this.trigger('timestampoffset');\n }\n }\n getSegmentStartTimeForTimestampOffsetCalculation_({\n videoTimingInfo,\n audioTimingInfo,\n timingInfo\n }) {\n if (!this.useDtsForTimestampOffset_) {\n return timingInfo.start;\n }\n if (videoTimingInfo && typeof videoTimingInfo.transmuxedDecodeStart === 'number') {\n return videoTimingInfo.transmuxedDecodeStart;\n } // handle audio only\n\n if (audioTimingInfo && typeof audioTimingInfo.transmuxedDecodeStart === 'number') {\n return audioTimingInfo.transmuxedDecodeStart;\n } // handle content not transmuxed (e.g., MP4)\n\n return timingInfo.start;\n }\n updateTimingInfoEnd_(segmentInfo) {\n segmentInfo.timingInfo = segmentInfo.timingInfo || {};\n const trackInfo = this.getMediaInfo_();\n const useVideoTimingInfo = this.loaderType_ === 'main' && trackInfo && trackInfo.hasVideo;\n const prioritizedTimingInfo = useVideoTimingInfo && segmentInfo.videoTimingInfo ? segmentInfo.videoTimingInfo : segmentInfo.audioTimingInfo;\n if (!prioritizedTimingInfo) {\n return;\n }\n segmentInfo.timingInfo.end = typeof prioritizedTimingInfo.end === 'number' ?\n // End time may not exist in a case where we aren't parsing the full segment (one\n // current example is the case of fmp4), so use the rough duration to calculate an\n // end time.\n prioritizedTimingInfo.end : prioritizedTimingInfo.start + segmentInfo.duration;\n }\n /**\n * callback to run when appendBuffer is finished. detects if we are\n * in a good state to do things with the data we got, or if we need\n * to wait for more\n *\n * @private\n */\n\n handleAppendsDone_() {\n // appendsdone can cause an abort\n if (this.pendingSegment_) {\n const metadata = {\n segmentInfo: segmentInfoPayload({\n type: this.loaderType_,\n segment: this.pendingSegment_\n })\n };\n this.trigger({\n type: 'appendsdone',\n metadata\n });\n }\n if (!this.pendingSegment_) {\n this.state = 'READY'; // TODO should this move into this.checkForAbort to speed up requests post abort in\n // all appending cases?\n\n if (!this.paused()) {\n this.monitorBuffer_();\n }\n return;\n }\n const segmentInfo = this.pendingSegment_;\n if (segmentInfo.part && segmentInfo.part.syncInfo) {\n // low-latency flow\n segmentInfo.part.syncInfo.markAppended();\n } else if (segmentInfo.segment.syncInfo) {\n // normal flow\n segmentInfo.segment.syncInfo.markAppended();\n } // Now that the end of the segment has been reached, we can set the end time. It's\n // best to wait until all appends are done so we're sure that the primary media is\n // finished (and we have its end time).\n\n this.updateTimingInfoEnd_(segmentInfo);\n if (this.shouldSaveSegmentTimingInfo_) {\n // Timeline mappings should only be saved for the main loader. This is for multiple\n // reasons:\n //\n // 1) Only one mapping is saved per timeline, meaning that if both the audio loader\n // and the main loader try to save the timeline mapping, whichever comes later\n // will overwrite the first. In theory this is OK, as the mappings should be the\n // same, however, it breaks for (2)\n // 2) In the event of a live stream, the initial live point will make for a somewhat\n // arbitrary mapping. If audio and video streams are not perfectly in-sync, then\n // the mapping will be off for one of the streams, dependent on which one was\n // first saved (see (1)).\n // 3) Primary timing goes by video in VHS, so the mapping should be video.\n //\n // Since the audio loader will wait for the main loader to load the first segment,\n // the main loader will save the first timeline mapping, and ensure that there won't\n // be a case where audio loads two segments without saving a mapping (thus leading\n // to missing segment timing info).\n this.syncController_.saveSegmentTimingInfo({\n segmentInfo,\n shouldSaveTimelineMapping: this.loaderType_ === 'main'\n });\n }\n const segmentDurationMessage = getTroublesomeSegmentDurationMessage(segmentInfo, this.sourceType_);\n if (segmentDurationMessage) {\n if (segmentDurationMessage.severity === 'warn') {\n videojs.log.warn(segmentDurationMessage.message);\n } else {\n this.logger_(segmentDurationMessage.message);\n }\n }\n this.recordThroughput_(segmentInfo);\n this.pendingSegment_ = null;\n this.state = 'READY';\n if (segmentInfo.isSyncRequest) {\n this.trigger('syncinfoupdate'); // if the sync request was not appended\n // then it was not the correct segment.\n // throw it away and use the data it gave us\n // to get the correct one.\n\n if (!segmentInfo.hasAppendedData_) {\n this.logger_(`Throwing away un-appended sync request ${segmentInfoString(segmentInfo)}`);\n return;\n }\n }\n this.logger_(`Appended ${segmentInfoString(segmentInfo)}`);\n this.addSegmentMetadataCue_(segmentInfo);\n this.fetchAtBuffer_ = true;\n if (this.currentTimeline_ !== segmentInfo.timeline) {\n this.timelineChangeController_.lastTimelineChange({\n type: this.loaderType_,\n from: this.currentTimeline_,\n to: segmentInfo.timeline\n }); // If audio is not disabled, the main segment loader is responsible for updating\n // the audio timeline as well. If the content is video only, this won't have any\n // impact.\n\n if (this.loaderType_ === 'main' && !this.audioDisabled_) {\n this.timelineChangeController_.lastTimelineChange({\n type: 'audio',\n from: this.currentTimeline_,\n to: segmentInfo.timeline\n });\n }\n }\n this.currentTimeline_ = segmentInfo.timeline; // We must update the syncinfo to recalculate the seekable range before\n // the following conditional otherwise it may consider this a bad \"guess\"\n // and attempt to resync when the post-update seekable window and live\n // point would mean that this was the perfect segment to fetch\n\n this.trigger('syncinfoupdate');\n const segment = segmentInfo.segment;\n const part = segmentInfo.part;\n const badSegmentGuess = segment.end && this.currentTime_() - segment.end > segmentInfo.playlist.targetDuration * 3;\n const badPartGuess = part && part.end && this.currentTime_() - part.end > segmentInfo.playlist.partTargetDuration * 3; // If we previously appended a segment/part that ends more than 3 part/targetDurations before\n // the currentTime_ that means that our conservative guess was too conservative.\n // In that case, reset the loader state so that we try to use any information gained\n // from the previous request to create a new, more accurate, sync-point.\n\n if (badSegmentGuess || badPartGuess) {\n this.logger_(`bad ${badSegmentGuess ? 'segment' : 'part'} ${segmentInfoString(segmentInfo)}`);\n this.resetEverything();\n return;\n }\n const isWalkingForward = this.mediaIndex !== null; // Don't do a rendition switch unless we have enough time to get a sync segment\n // and conservatively guess\n\n if (isWalkingForward) {\n this.trigger('bandwidthupdate');\n }\n this.trigger('progress');\n this.mediaIndex = segmentInfo.mediaIndex;\n this.partIndex = segmentInfo.partIndex; // any time an update finishes and the last segment is in the\n // buffer, end the stream. this ensures the \"ended\" event will\n // fire if playback reaches that point.\n\n if (this.isEndOfStream_(segmentInfo.mediaIndex, segmentInfo.playlist, segmentInfo.partIndex)) {\n this.endOfStream();\n } // used for testing\n\n this.trigger('appended');\n if (segmentInfo.hasAppendedData_) {\n this.mediaAppends++;\n }\n if (!this.paused()) {\n this.monitorBuffer_();\n }\n }\n /**\n * Records the current throughput of the decrypt, transmux, and append\n * portion of the semgment pipeline. `throughput.rate` is a the cumulative\n * moving average of the throughput. `throughput.count` is the number of\n * data points in the average.\n *\n * @private\n * @param {Object} segmentInfo the object returned by loadSegment\n */\n\n recordThroughput_(segmentInfo) {\n if (segmentInfo.duration < MIN_SEGMENT_DURATION_TO_SAVE_STATS) {\n this.logger_(`Ignoring segment's throughput because its duration of ${segmentInfo.duration}` + ` is less than the min to record ${MIN_SEGMENT_DURATION_TO_SAVE_STATS}`);\n return;\n }\n const rate = this.throughput.rate; // Add one to the time to ensure that we don't accidentally attempt to divide\n // by zero in the case where the throughput is ridiculously high\n\n const segmentProcessingTime = Date.now() - segmentInfo.endOfAllRequests + 1; // Multiply by 8000 to convert from bytes/millisecond to bits/second\n\n const segmentProcessingThroughput = Math.floor(segmentInfo.byteLength / segmentProcessingTime * 8 * 1000); // This is just a cumulative moving average calculation:\n // newAvg = oldAvg + (sample - oldAvg) / (sampleCount + 1)\n\n this.throughput.rate += (segmentProcessingThroughput - rate) / ++this.throughput.count;\n }\n /**\n * Adds a cue to the segment-metadata track with some metadata information about the\n * segment\n *\n * @private\n * @param {Object} segmentInfo\n * the object returned by loadSegment\n * @method addSegmentMetadataCue_\n */\n\n addSegmentMetadataCue_(segmentInfo) {\n if (!this.segmentMetadataTrack_) {\n return;\n }\n const segment = segmentInfo.segment;\n const start = segment.start;\n const end = segment.end; // Do not try adding the cue if the start and end times are invalid.\n\n if (!finite(start) || !finite(end)) {\n return;\n }\n removeCuesFromTrack(start, end, this.segmentMetadataTrack_);\n const Cue = window$1.WebKitDataCue || window$1.VTTCue;\n const value = {\n custom: segment.custom,\n dateTimeObject: segment.dateTimeObject,\n dateTimeString: segment.dateTimeString,\n programDateTime: segment.programDateTime,\n bandwidth: segmentInfo.playlist.attributes.BANDWIDTH,\n resolution: segmentInfo.playlist.attributes.RESOLUTION,\n codecs: segmentInfo.playlist.attributes.CODECS,\n byteLength: segmentInfo.byteLength,\n uri: segmentInfo.uri,\n timeline: segmentInfo.timeline,\n playlist: segmentInfo.playlist.id,\n start,\n end\n };\n const data = JSON.stringify(value);\n const cue = new Cue(start, end, data); // Attach the metadata to the value property of the cue to keep consistency between\n // the differences of WebKitDataCue in safari and VTTCue in other browsers\n\n cue.value = value;\n this.segmentMetadataTrack_.addCue(cue);\n }\n}\nfunction noop() {}\nconst toTitleCase = function (string) {\n if (typeof string !== 'string') {\n return string;\n }\n return string.replace(/./, w => w.toUpperCase());\n};\n\n/**\n * @file source-updater.js\n */\nconst bufferTypes = ['video', 'audio'];\nconst updating = (type, sourceUpdater) => {\n const sourceBuffer = sourceUpdater[`${type}Buffer`];\n return sourceBuffer && sourceBuffer.updating || sourceUpdater.queuePending[type];\n};\nconst nextQueueIndexOfType = (type, queue) => {\n for (let i = 0; i < queue.length; i++) {\n const queueEntry = queue[i];\n if (queueEntry.type === 'mediaSource') {\n // If the next entry is a media source entry (uses multiple source buffers), block\n // processing to allow it to go through first.\n return null;\n }\n if (queueEntry.type === type) {\n return i;\n }\n }\n return null;\n};\nconst shiftQueue = (type, sourceUpdater) => {\n if (sourceUpdater.queue.length === 0) {\n return;\n }\n let queueIndex = 0;\n let queueEntry = sourceUpdater.queue[queueIndex];\n if (queueEntry.type === 'mediaSource') {\n if (!sourceUpdater.updating() && sourceUpdater.mediaSource.readyState !== 'closed') {\n sourceUpdater.queue.shift();\n queueEntry.action(sourceUpdater);\n if (queueEntry.doneFn) {\n queueEntry.doneFn();\n } // Only specific source buffer actions must wait for async updateend events. Media\n // Source actions process synchronously. Therefore, both audio and video source\n // buffers are now clear to process the next queue entries.\n\n shiftQueue('audio', sourceUpdater);\n shiftQueue('video', sourceUpdater);\n } // Media Source actions require both source buffers, so if the media source action\n // couldn't process yet (because one or both source buffers are busy), block other\n // queue actions until both are available and the media source action can process.\n\n return;\n }\n if (type === 'mediaSource') {\n // If the queue was shifted by a media source action (this happens when pushing a\n // media source action onto the queue), then it wasn't from an updateend event from an\n // audio or video source buffer, so there's no change from previous state, and no\n // processing should be done.\n return;\n } // Media source queue entries don't need to consider whether the source updater is\n // started (i.e., source buffers are created) as they don't need the source buffers, but\n // source buffer queue entries do.\n\n if (!sourceUpdater.ready() || sourceUpdater.mediaSource.readyState === 'closed' || updating(type, sourceUpdater)) {\n return;\n }\n if (queueEntry.type !== type) {\n queueIndex = nextQueueIndexOfType(type, sourceUpdater.queue);\n if (queueIndex === null) {\n // Either there's no queue entry that uses this source buffer type in the queue, or\n // there's a media source queue entry before the next entry of this type, in which\n // case wait for that action to process first.\n return;\n }\n queueEntry = sourceUpdater.queue[queueIndex];\n }\n sourceUpdater.queue.splice(queueIndex, 1); // Keep a record that this source buffer type is in use.\n //\n // The queue pending operation must be set before the action is performed in the event\n // that the action results in a synchronous event that is acted upon. For instance, if\n // an exception is thrown that can be handled, it's possible that new actions will be\n // appended to an empty queue and immediately executed, but would not have the correct\n // pending information if this property was set after the action was performed.\n\n sourceUpdater.queuePending[type] = queueEntry;\n queueEntry.action(type, sourceUpdater);\n if (!queueEntry.doneFn) {\n // synchronous operation, process next entry\n sourceUpdater.queuePending[type] = null;\n shiftQueue(type, sourceUpdater);\n return;\n }\n};\nconst cleanupBuffer = (type, sourceUpdater) => {\n const buffer = sourceUpdater[`${type}Buffer`];\n const titleType = toTitleCase(type);\n if (!buffer) {\n return;\n }\n buffer.removeEventListener('updateend', sourceUpdater[`on${titleType}UpdateEnd_`]);\n buffer.removeEventListener('error', sourceUpdater[`on${titleType}Error_`]);\n sourceUpdater.codecs[type] = null;\n sourceUpdater[`${type}Buffer`] = null;\n};\nconst inSourceBuffers = (mediaSource, sourceBuffer) => mediaSource && sourceBuffer && Array.prototype.indexOf.call(mediaSource.sourceBuffers, sourceBuffer) !== -1;\nconst actions = {\n appendBuffer: (bytes, segmentInfo, onError) => (type, sourceUpdater) => {\n const sourceBuffer = sourceUpdater[`${type}Buffer`]; // can't do anything if the media source / source buffer is null\n // or the media source does not contain this source buffer.\n\n if (!inSourceBuffers(sourceUpdater.mediaSource, sourceBuffer)) {\n return;\n }\n sourceUpdater.logger_(`Appending segment ${segmentInfo.mediaIndex}'s ${bytes.length} bytes to ${type}Buffer`);\n try {\n sourceBuffer.appendBuffer(bytes);\n } catch (e) {\n sourceUpdater.logger_(`Error with code ${e.code} ` + (e.code === QUOTA_EXCEEDED_ERR ? '(QUOTA_EXCEEDED_ERR) ' : '') + `when appending segment ${segmentInfo.mediaIndex} to ${type}Buffer`);\n sourceUpdater.queuePending[type] = null;\n onError(e);\n }\n },\n remove: (start, end) => (type, sourceUpdater) => {\n const sourceBuffer = sourceUpdater[`${type}Buffer`]; // can't do anything if the media source / source buffer is null\n // or the media source does not contain this source buffer.\n\n if (!inSourceBuffers(sourceUpdater.mediaSource, sourceBuffer)) {\n return;\n }\n sourceUpdater.logger_(`Removing ${start} to ${end} from ${type}Buffer`);\n try {\n sourceBuffer.remove(start, end);\n } catch (e) {\n sourceUpdater.logger_(`Remove ${start} to ${end} from ${type}Buffer failed`);\n }\n },\n timestampOffset: offset => (type, sourceUpdater) => {\n const sourceBuffer = sourceUpdater[`${type}Buffer`]; // can't do anything if the media source / source buffer is null\n // or the media source does not contain this source buffer.\n\n if (!inSourceBuffers(sourceUpdater.mediaSource, sourceBuffer)) {\n return;\n }\n sourceUpdater.logger_(`Setting ${type}timestampOffset to ${offset}`);\n sourceBuffer.timestampOffset = offset;\n },\n callback: callback => (type, sourceUpdater) => {\n callback();\n },\n endOfStream: error => sourceUpdater => {\n if (sourceUpdater.mediaSource.readyState !== 'open') {\n return;\n }\n sourceUpdater.logger_(`Calling mediaSource endOfStream(${error || ''})`);\n try {\n sourceUpdater.mediaSource.endOfStream(error);\n } catch (e) {\n videojs.log.warn('Failed to call media source endOfStream', e);\n }\n },\n duration: duration => sourceUpdater => {\n sourceUpdater.logger_(`Setting mediaSource duration to ${duration}`);\n try {\n sourceUpdater.mediaSource.duration = duration;\n } catch (e) {\n videojs.log.warn('Failed to set media source duration', e);\n }\n },\n abort: () => (type, sourceUpdater) => {\n if (sourceUpdater.mediaSource.readyState !== 'open') {\n return;\n }\n const sourceBuffer = sourceUpdater[`${type}Buffer`]; // can't do anything if the media source / source buffer is null\n // or the media source does not contain this source buffer.\n\n if (!inSourceBuffers(sourceUpdater.mediaSource, sourceBuffer)) {\n return;\n }\n sourceUpdater.logger_(`calling abort on ${type}Buffer`);\n try {\n sourceBuffer.abort();\n } catch (e) {\n videojs.log.warn(`Failed to abort on ${type}Buffer`, e);\n }\n },\n addSourceBuffer: (type, codec) => sourceUpdater => {\n const titleType = toTitleCase(type);\n const mime = getMimeForCodec(codec);\n sourceUpdater.logger_(`Adding ${type}Buffer with codec ${codec} to mediaSource`);\n const sourceBuffer = sourceUpdater.mediaSource.addSourceBuffer(mime);\n sourceBuffer.addEventListener('updateend', sourceUpdater[`on${titleType}UpdateEnd_`]);\n sourceBuffer.addEventListener('error', sourceUpdater[`on${titleType}Error_`]);\n sourceUpdater.codecs[type] = codec;\n sourceUpdater[`${type}Buffer`] = sourceBuffer;\n },\n removeSourceBuffer: type => sourceUpdater => {\n const sourceBuffer = sourceUpdater[`${type}Buffer`];\n cleanupBuffer(type, sourceUpdater); // can't do anything if the media source / source buffer is null\n // or the media source does not contain this source buffer.\n\n if (!inSourceBuffers(sourceUpdater.mediaSource, sourceBuffer)) {\n return;\n }\n sourceUpdater.logger_(`Removing ${type}Buffer with codec ${sourceUpdater.codecs[type]} from mediaSource`);\n try {\n sourceUpdater.mediaSource.removeSourceBuffer(sourceBuffer);\n } catch (e) {\n videojs.log.warn(`Failed to removeSourceBuffer ${type}Buffer`, e);\n }\n },\n changeType: codec => (type, sourceUpdater) => {\n const sourceBuffer = sourceUpdater[`${type}Buffer`];\n const mime = getMimeForCodec(codec); // can't do anything if the media source / source buffer is null\n // or the media source does not contain this source buffer.\n\n if (!inSourceBuffers(sourceUpdater.mediaSource, sourceBuffer)) {\n return;\n } // do not update codec if we don't need to.\n // Only update if we change the codec base.\n // For example, going from avc1.640028 to avc1.64001f does not require a changeType call.\n\n const newCodecBase = codec.substring(0, codec.indexOf('.'));\n const oldCodec = sourceUpdater.codecs[type];\n const oldCodecBase = oldCodec.substring(0, oldCodec.indexOf('.'));\n if (oldCodecBase === newCodecBase) {\n return;\n }\n const metadata = {\n codecsChangeInfo: {\n from: oldCodec,\n to: codec\n }\n };\n sourceUpdater.trigger({\n type: 'codecschange',\n metadata\n });\n sourceUpdater.logger_(`changing ${type}Buffer codec from ${oldCodec} to ${codec}`); // check if change to the provided type is supported\n\n try {\n sourceBuffer.changeType(mime);\n sourceUpdater.codecs[type] = codec;\n } catch (e) {\n metadata.errorType = videojs.Error.StreamingCodecsChangeError;\n metadata.error = e;\n e.metadata = metadata;\n sourceUpdater.error_ = e;\n sourceUpdater.trigger('error');\n videojs.log.warn(`Failed to changeType on ${type}Buffer`, e);\n }\n }\n};\nconst pushQueue = ({\n type,\n sourceUpdater,\n action,\n doneFn,\n name\n}) => {\n sourceUpdater.queue.push({\n type,\n action,\n doneFn,\n name\n });\n shiftQueue(type, sourceUpdater);\n};\nconst onUpdateend = (type, sourceUpdater) => e => {\n // Although there should, in theory, be a pending action for any updateend receieved,\n // there are some actions that may trigger updateend events without set definitions in\n // the w3c spec. For instance, setting the duration on the media source may trigger\n // updateend events on source buffers. This does not appear to be in the spec. As such,\n // if we encounter an updateend without a corresponding pending action from our queue\n // for that source buffer type, process the next action.\n const bufferedRangesForType = sourceUpdater[`${type}Buffered`]();\n const descriptiveString = bufferedRangesToString(bufferedRangesForType);\n sourceUpdater.logger_(`received \"updateend\" event for ${type} Source Buffer: `, descriptiveString);\n if (sourceUpdater.queuePending[type]) {\n const doneFn = sourceUpdater.queuePending[type].doneFn;\n sourceUpdater.queuePending[type] = null;\n if (doneFn) {\n // if there's an error, report it\n doneFn(sourceUpdater[`${type}Error_`]);\n }\n }\n shiftQueue(type, sourceUpdater);\n};\n/**\n * A queue of callbacks to be serialized and applied when a\n * MediaSource and its associated SourceBuffers are not in the\n * updating state. It is used by the segment loader to update the\n * underlying SourceBuffers when new data is loaded, for instance.\n *\n * @class SourceUpdater\n * @param {MediaSource} mediaSource the MediaSource to create the SourceBuffer from\n * @param {string} mimeType the desired MIME type of the underlying SourceBuffer\n */\n\nclass SourceUpdater extends videojs.EventTarget {\n constructor(mediaSource) {\n super();\n this.mediaSource = mediaSource;\n this.sourceopenListener_ = () => shiftQueue('mediaSource', this);\n this.mediaSource.addEventListener('sourceopen', this.sourceopenListener_);\n this.logger_ = logger('SourceUpdater'); // initial timestamp offset is 0\n\n this.audioTimestampOffset_ = 0;\n this.videoTimestampOffset_ = 0;\n this.queue = [];\n this.queuePending = {\n audio: null,\n video: null\n };\n this.delayedAudioAppendQueue_ = [];\n this.videoAppendQueued_ = false;\n this.codecs = {};\n this.onVideoUpdateEnd_ = onUpdateend('video', this);\n this.onAudioUpdateEnd_ = onUpdateend('audio', this);\n this.onVideoError_ = e => {\n // used for debugging\n this.videoError_ = e;\n };\n this.onAudioError_ = e => {\n // used for debugging\n this.audioError_ = e;\n };\n this.createdSourceBuffers_ = false;\n this.initializedEme_ = false;\n this.triggeredReady_ = false;\n }\n initializedEme() {\n this.initializedEme_ = true;\n this.triggerReady();\n }\n hasCreatedSourceBuffers() {\n // if false, likely waiting on one of the segment loaders to get enough data to create\n // source buffers\n return this.createdSourceBuffers_;\n }\n hasInitializedAnyEme() {\n return this.initializedEme_;\n }\n ready() {\n return this.hasCreatedSourceBuffers() && this.hasInitializedAnyEme();\n }\n createSourceBuffers(codecs) {\n if (this.hasCreatedSourceBuffers()) {\n // already created them before\n return;\n } // the intial addOrChangeSourceBuffers will always be\n // two add buffers.\n\n this.addOrChangeSourceBuffers(codecs);\n this.createdSourceBuffers_ = true;\n this.trigger('createdsourcebuffers');\n this.triggerReady();\n }\n triggerReady() {\n // only allow ready to be triggered once, this prevents the case\n // where:\n // 1. we trigger createdsourcebuffers\n // 2. ie 11 synchronously initializates eme\n // 3. the synchronous initialization causes us to trigger ready\n // 4. We go back to the ready check in createSourceBuffers and ready is triggered again.\n if (this.ready() && !this.triggeredReady_) {\n this.triggeredReady_ = true;\n this.trigger('ready');\n }\n }\n /**\n * Add a type of source buffer to the media source.\n *\n * @param {string} type\n * The type of source buffer to add.\n *\n * @param {string} codec\n * The codec to add the source buffer with.\n */\n\n addSourceBuffer(type, codec) {\n pushQueue({\n type: 'mediaSource',\n sourceUpdater: this,\n action: actions.addSourceBuffer(type, codec),\n name: 'addSourceBuffer'\n });\n }\n /**\n * call abort on a source buffer.\n *\n * @param {string} type\n * The type of source buffer to call abort on.\n */\n\n abort(type) {\n pushQueue({\n type,\n sourceUpdater: this,\n action: actions.abort(type),\n name: 'abort'\n });\n }\n /**\n * Call removeSourceBuffer and remove a specific type\n * of source buffer on the mediaSource.\n *\n * @param {string} type\n * The type of source buffer to remove.\n */\n\n removeSourceBuffer(type) {\n if (!this.canRemoveSourceBuffer()) {\n videojs.log.error('removeSourceBuffer is not supported!');\n return;\n }\n pushQueue({\n type: 'mediaSource',\n sourceUpdater: this,\n action: actions.removeSourceBuffer(type),\n name: 'removeSourceBuffer'\n });\n }\n /**\n * Whether or not the removeSourceBuffer function is supported\n * on the mediaSource.\n *\n * @return {boolean}\n * if removeSourceBuffer can be called.\n */\n\n canRemoveSourceBuffer() {\n // As of Firefox 83 removeSourceBuffer\n // throws errors, so we report that it does not support this.\n return !videojs.browser.IS_FIREFOX && window$1.MediaSource && window$1.MediaSource.prototype && typeof window$1.MediaSource.prototype.removeSourceBuffer === 'function';\n }\n /**\n * Whether or not the changeType function is supported\n * on our SourceBuffers.\n *\n * @return {boolean}\n * if changeType can be called.\n */\n\n static canChangeType() {\n return window$1.SourceBuffer && window$1.SourceBuffer.prototype && typeof window$1.SourceBuffer.prototype.changeType === 'function';\n }\n /**\n * Whether or not the changeType function is supported\n * on our SourceBuffers.\n *\n * @return {boolean}\n * if changeType can be called.\n */\n\n canChangeType() {\n return this.constructor.canChangeType();\n }\n /**\n * Call the changeType function on a source buffer, given the code and type.\n *\n * @param {string} type\n * The type of source buffer to call changeType on.\n *\n * @param {string} codec\n * The codec string to change type with on the source buffer.\n */\n\n changeType(type, codec) {\n if (!this.canChangeType()) {\n videojs.log.error('changeType is not supported!');\n return;\n }\n pushQueue({\n type,\n sourceUpdater: this,\n action: actions.changeType(codec),\n name: 'changeType'\n });\n }\n /**\n * Add source buffers with a codec or, if they are already created,\n * call changeType on source buffers using changeType.\n *\n * @param {Object} codecs\n * Codecs to switch to\n */\n\n addOrChangeSourceBuffers(codecs) {\n if (!codecs || typeof codecs !== 'object' || Object.keys(codecs).length === 0) {\n throw new Error('Cannot addOrChangeSourceBuffers to undefined codecs');\n }\n Object.keys(codecs).forEach(type => {\n const codec = codecs[type];\n if (!this.hasCreatedSourceBuffers()) {\n return this.addSourceBuffer(type, codec);\n }\n if (this.canChangeType()) {\n this.changeType(type, codec);\n }\n });\n }\n /**\n * Queue an update to append an ArrayBuffer.\n *\n * @param {MediaObject} object containing audioBytes and/or videoBytes\n * @param {Function} done the function to call when done\n * @see http://www.w3.org/TR/media-source/#widl-SourceBuffer-appendBuffer-void-ArrayBuffer-data\n */\n\n appendBuffer(options, doneFn) {\n const {\n segmentInfo,\n type,\n bytes\n } = options;\n this.processedAppend_ = true;\n if (type === 'audio' && this.videoBuffer && !this.videoAppendQueued_) {\n this.delayedAudioAppendQueue_.push([options, doneFn]);\n this.logger_(`delayed audio append of ${bytes.length} until video append`);\n return;\n } // In the case of certain errors, for instance, QUOTA_EXCEEDED_ERR, updateend will\n // not be fired. This means that the queue will be blocked until the next action\n // taken by the segment-loader. Provide a mechanism for segment-loader to handle\n // these errors by calling the doneFn with the specific error.\n\n const onError = doneFn;\n pushQueue({\n type,\n sourceUpdater: this,\n action: actions.appendBuffer(bytes, segmentInfo || {\n mediaIndex: -1\n }, onError),\n doneFn,\n name: 'appendBuffer'\n });\n if (type === 'video') {\n this.videoAppendQueued_ = true;\n if (!this.delayedAudioAppendQueue_.length) {\n return;\n }\n const queue = this.delayedAudioAppendQueue_.slice();\n this.logger_(`queuing delayed audio ${queue.length} appendBuffers`);\n this.delayedAudioAppendQueue_.length = 0;\n queue.forEach(que => {\n this.appendBuffer.apply(this, que);\n });\n }\n }\n /**\n * Get the audio buffer's buffered timerange.\n *\n * @return {TimeRange}\n * The audio buffer's buffered time range\n */\n\n audioBuffered() {\n // no media source/source buffer or it isn't in the media sources\n // source buffer list\n if (!inSourceBuffers(this.mediaSource, this.audioBuffer)) {\n return createTimeRanges();\n }\n return this.audioBuffer.buffered ? this.audioBuffer.buffered : createTimeRanges();\n }\n /**\n * Get the video buffer's buffered timerange.\n *\n * @return {TimeRange}\n * The video buffer's buffered time range\n */\n\n videoBuffered() {\n // no media source/source buffer or it isn't in the media sources\n // source buffer list\n if (!inSourceBuffers(this.mediaSource, this.videoBuffer)) {\n return createTimeRanges();\n }\n return this.videoBuffer.buffered ? this.videoBuffer.buffered : createTimeRanges();\n }\n /**\n * Get a combined video/audio buffer's buffered timerange.\n *\n * @return {TimeRange}\n * the combined time range\n */\n\n buffered() {\n const video = inSourceBuffers(this.mediaSource, this.videoBuffer) ? this.videoBuffer : null;\n const audio = inSourceBuffers(this.mediaSource, this.audioBuffer) ? this.audioBuffer : null;\n if (audio && !video) {\n return this.audioBuffered();\n }\n if (video && !audio) {\n return this.videoBuffered();\n }\n return bufferIntersection(this.audioBuffered(), this.videoBuffered());\n }\n /**\n * Add a callback to the queue that will set duration on the mediaSource.\n *\n * @param {number} duration\n * The duration to set\n *\n * @param {Function} [doneFn]\n * function to run after duration has been set.\n */\n\n setDuration(duration, doneFn = noop) {\n // In order to set the duration on the media source, it's necessary to wait for all\n // source buffers to no longer be updating. \"If the updating attribute equals true on\n // any SourceBuffer in sourceBuffers, then throw an InvalidStateError exception and\n // abort these steps.\" (source: https://www.w3.org/TR/media-source/#attributes).\n pushQueue({\n type: 'mediaSource',\n sourceUpdater: this,\n action: actions.duration(duration),\n name: 'duration',\n doneFn\n });\n }\n /**\n * Add a mediaSource endOfStream call to the queue\n *\n * @param {Error} [error]\n * Call endOfStream with an error\n *\n * @param {Function} [doneFn]\n * A function that should be called when the\n * endOfStream call has finished.\n */\n\n endOfStream(error = null, doneFn = noop) {\n if (typeof error !== 'string') {\n error = undefined;\n } // In order to set the duration on the media source, it's necessary to wait for all\n // source buffers to no longer be updating. \"If the updating attribute equals true on\n // any SourceBuffer in sourceBuffers, then throw an InvalidStateError exception and\n // abort these steps.\" (source: https://www.w3.org/TR/media-source/#attributes).\n\n pushQueue({\n type: 'mediaSource',\n sourceUpdater: this,\n action: actions.endOfStream(error),\n name: 'endOfStream',\n doneFn\n });\n }\n /**\n * Queue an update to remove a time range from the buffer.\n *\n * @param {number} start where to start the removal\n * @param {number} end where to end the removal\n * @param {Function} [done=noop] optional callback to be executed when the remove\n * operation is complete\n * @see http://www.w3.org/TR/media-source/#widl-SourceBuffer-remove-void-double-start-unrestricted-double-end\n */\n\n removeAudio(start, end, done = noop) {\n if (!this.audioBuffered().length || this.audioBuffered().end(0) === 0) {\n done();\n return;\n }\n pushQueue({\n type: 'audio',\n sourceUpdater: this,\n action: actions.remove(start, end),\n doneFn: done,\n name: 'remove'\n });\n }\n /**\n * Queue an update to remove a time range from the buffer.\n *\n * @param {number} start where to start the removal\n * @param {number} end where to end the removal\n * @param {Function} [done=noop] optional callback to be executed when the remove\n * operation is complete\n * @see http://www.w3.org/TR/media-source/#widl-SourceBuffer-remove-void-double-start-unrestricted-double-end\n */\n\n removeVideo(start, end, done = noop) {\n if (!this.videoBuffered().length || this.videoBuffered().end(0) === 0) {\n done();\n return;\n }\n pushQueue({\n type: 'video',\n sourceUpdater: this,\n action: actions.remove(start, end),\n doneFn: done,\n name: 'remove'\n });\n }\n /**\n * Whether the underlying sourceBuffer is updating or not\n *\n * @return {boolean} the updating status of the SourceBuffer\n */\n\n updating() {\n // the audio/video source buffer is updating\n if (updating('audio', this) || updating('video', this)) {\n return true;\n }\n return false;\n }\n /**\n * Set/get the timestampoffset on the audio SourceBuffer\n *\n * @return {number} the timestamp offset\n */\n\n audioTimestampOffset(offset) {\n if (typeof offset !== 'undefined' && this.audioBuffer &&\n // no point in updating if it's the same\n this.audioTimestampOffset_ !== offset) {\n pushQueue({\n type: 'audio',\n sourceUpdater: this,\n action: actions.timestampOffset(offset),\n name: 'timestampOffset'\n });\n this.audioTimestampOffset_ = offset;\n }\n return this.audioTimestampOffset_;\n }\n /**\n * Set/get the timestampoffset on the video SourceBuffer\n *\n * @return {number} the timestamp offset\n */\n\n videoTimestampOffset(offset) {\n if (typeof offset !== 'undefined' && this.videoBuffer &&\n // no point in updating if it's the same\n this.videoTimestampOffset_ !== offset) {\n pushQueue({\n type: 'video',\n sourceUpdater: this,\n action: actions.timestampOffset(offset),\n name: 'timestampOffset'\n });\n this.videoTimestampOffset_ = offset;\n }\n return this.videoTimestampOffset_;\n }\n /**\n * Add a function to the queue that will be called\n * when it is its turn to run in the audio queue.\n *\n * @param {Function} callback\n * The callback to queue.\n */\n\n audioQueueCallback(callback) {\n if (!this.audioBuffer) {\n return;\n }\n pushQueue({\n type: 'audio',\n sourceUpdater: this,\n action: actions.callback(callback),\n name: 'callback'\n });\n }\n /**\n * Add a function to the queue that will be called\n * when it is its turn to run in the video queue.\n *\n * @param {Function} callback\n * The callback to queue.\n */\n\n videoQueueCallback(callback) {\n if (!this.videoBuffer) {\n return;\n }\n pushQueue({\n type: 'video',\n sourceUpdater: this,\n action: actions.callback(callback),\n name: 'callback'\n });\n }\n /**\n * dispose of the source updater and the underlying sourceBuffer\n */\n\n dispose() {\n this.trigger('dispose');\n bufferTypes.forEach(type => {\n this.abort(type);\n if (this.canRemoveSourceBuffer()) {\n this.removeSourceBuffer(type);\n } else {\n this[`${type}QueueCallback`](() => cleanupBuffer(type, this));\n }\n });\n this.videoAppendQueued_ = false;\n this.delayedAudioAppendQueue_.length = 0;\n if (this.sourceopenListener_) {\n this.mediaSource.removeEventListener('sourceopen', this.sourceopenListener_);\n }\n this.off();\n }\n}\nconst uint8ToUtf8 = uintArray => decodeURIComponent(escape(String.fromCharCode.apply(null, uintArray)));\nconst bufferToHexString = buffer => {\n const uInt8Buffer = new Uint8Array(buffer);\n return Array.from(uInt8Buffer).map(byte => byte.toString(16).padStart(2, '0')).join('');\n};\n\n/**\n * @file vtt-segment-loader.js\n */\nconst VTT_LINE_TERMINATORS = new Uint8Array('\\n\\n'.split('').map(char => char.charCodeAt(0)));\nclass NoVttJsError extends Error {\n constructor() {\n super('Trying to parse received VTT cues, but there is no WebVTT. Make sure vtt.js is loaded.');\n }\n}\n/**\n * An object that manages segment loading and appending.\n *\n * @class VTTSegmentLoader\n * @param {Object} options required and optional options\n * @extends videojs.EventTarget\n */\n\nclass VTTSegmentLoader extends SegmentLoader {\n constructor(settings, options = {}) {\n super(settings, options); // SegmentLoader requires a MediaSource be specified or it will throw an error;\n // however, VTTSegmentLoader has no need of a media source, so delete the reference\n\n this.mediaSource_ = null;\n this.subtitlesTrack_ = null;\n this.featuresNativeTextTracks_ = settings.featuresNativeTextTracks;\n this.loadVttJs = settings.loadVttJs; // The VTT segment will have its own time mappings. Saving VTT segment timing info in\n // the sync controller leads to improper behavior.\n\n this.shouldSaveSegmentTimingInfo_ = false;\n }\n createTransmuxer_() {\n // don't need to transmux any subtitles\n return null;\n }\n /**\n * Indicates which time ranges are buffered\n *\n * @return {TimeRange}\n * TimeRange object representing the current buffered ranges\n */\n\n buffered_() {\n if (!this.subtitlesTrack_ || !this.subtitlesTrack_.cues || !this.subtitlesTrack_.cues.length) {\n return createTimeRanges();\n }\n const cues = this.subtitlesTrack_.cues;\n const start = cues[0].startTime;\n const end = cues[cues.length - 1].startTime;\n return createTimeRanges([[start, end]]);\n }\n /**\n * Gets and sets init segment for the provided map\n *\n * @param {Object} map\n * The map object representing the init segment to get or set\n * @param {boolean=} set\n * If true, the init segment for the provided map should be saved\n * @return {Object}\n * map object for desired init segment\n */\n\n initSegmentForMap(map, set = false) {\n if (!map) {\n return null;\n }\n const id = initSegmentId(map);\n let storedMap = this.initSegments_[id];\n if (set && !storedMap && map.bytes) {\n // append WebVTT line terminators to the media initialization segment if it exists\n // to follow the WebVTT spec (https://w3c.github.io/webvtt/#file-structure) that\n // requires two or more WebVTT line terminators between the WebVTT header and the\n // rest of the file\n const combinedByteLength = VTT_LINE_TERMINATORS.byteLength + map.bytes.byteLength;\n const combinedSegment = new Uint8Array(combinedByteLength);\n combinedSegment.set(map.bytes);\n combinedSegment.set(VTT_LINE_TERMINATORS, map.bytes.byteLength);\n this.initSegments_[id] = storedMap = {\n resolvedUri: map.resolvedUri,\n byterange: map.byterange,\n bytes: combinedSegment\n };\n }\n return storedMap || map;\n }\n /**\n * Returns true if all configuration required for loading is present, otherwise false.\n *\n * @return {boolean} True if the all configuration is ready for loading\n * @private\n */\n\n couldBeginLoading_() {\n return this.playlist_ && this.subtitlesTrack_ && !this.paused();\n }\n /**\n * Once all the starting parameters have been specified, begin\n * operation. This method should only be invoked from the INIT\n * state.\n *\n * @private\n */\n\n init_() {\n this.state = 'READY';\n this.resetEverything();\n return this.monitorBuffer_();\n }\n /**\n * Set a subtitle track on the segment loader to add subtitles to\n *\n * @param {TextTrack=} track\n * The text track to add loaded subtitles to\n * @return {TextTrack}\n * Returns the subtitles track\n */\n\n track(track) {\n if (typeof track === 'undefined') {\n return this.subtitlesTrack_;\n }\n this.subtitlesTrack_ = track; // if we were unpaused but waiting for a sourceUpdater, start\n // buffering now\n\n if (this.state === 'INIT' && this.couldBeginLoading_()) {\n this.init_();\n }\n return this.subtitlesTrack_;\n }\n /**\n * Remove any data in the source buffer between start and end times\n *\n * @param {number} start - the start time of the region to remove from the buffer\n * @param {number} end - the end time of the region to remove from the buffer\n */\n\n remove(start, end) {\n removeCuesFromTrack(start, end, this.subtitlesTrack_);\n }\n /**\n * fill the buffer with segements unless the sourceBuffers are\n * currently updating\n *\n * Note: this function should only ever be called by monitorBuffer_\n * and never directly\n *\n * @private\n */\n\n fillBuffer_() {\n // see if we need to begin loading immediately\n const segmentInfo = this.chooseNextRequest_();\n if (!segmentInfo) {\n return;\n }\n if (this.syncController_.timestampOffsetForTimeline(segmentInfo.timeline) === null) {\n // We don't have the timestamp offset that we need to sync subtitles.\n // Rerun on a timestamp offset or user interaction.\n const checkTimestampOffset = () => {\n this.state = 'READY';\n if (!this.paused()) {\n // if not paused, queue a buffer check as soon as possible\n this.monitorBuffer_();\n }\n };\n this.syncController_.one('timestampoffset', checkTimestampOffset);\n this.state = 'WAITING_ON_TIMELINE';\n return;\n }\n this.loadSegment_(segmentInfo);\n } // never set a timestamp offset for vtt segments.\n\n timestampOffsetForSegment_() {\n return null;\n }\n chooseNextRequest_() {\n return this.skipEmptySegments_(super.chooseNextRequest_());\n }\n /**\n * Prevents the segment loader from requesting segments we know contain no subtitles\n * by walking forward until we find the next segment that we don't know whether it is\n * empty or not.\n *\n * @param {Object} segmentInfo\n * a segment info object that describes the current segment\n * @return {Object}\n * a segment info object that describes the current segment\n */\n\n skipEmptySegments_(segmentInfo) {\n while (segmentInfo && segmentInfo.segment.empty) {\n // stop at the last possible segmentInfo\n if (segmentInfo.mediaIndex + 1 >= segmentInfo.playlist.segments.length) {\n segmentInfo = null;\n break;\n }\n segmentInfo = this.generateSegmentInfo_({\n playlist: segmentInfo.playlist,\n mediaIndex: segmentInfo.mediaIndex + 1,\n startOfSegment: segmentInfo.startOfSegment + segmentInfo.duration,\n isSyncRequest: segmentInfo.isSyncRequest\n });\n }\n return segmentInfo;\n }\n stopForError(error) {\n this.error(error);\n this.state = 'READY';\n this.pause();\n this.trigger('error');\n }\n /**\n * append a decrypted segement to the SourceBuffer through a SourceUpdater\n *\n * @private\n */\n\n segmentRequestFinished_(error, simpleSegment, result) {\n if (!this.subtitlesTrack_) {\n this.state = 'READY';\n return;\n }\n this.saveTransferStats_(simpleSegment.stats); // the request was aborted\n\n if (!this.pendingSegment_) {\n this.state = 'READY';\n this.mediaRequestsAborted += 1;\n return;\n }\n if (error) {\n if (error.code === REQUEST_ERRORS.TIMEOUT) {\n this.handleTimeout_();\n }\n if (error.code === REQUEST_ERRORS.ABORTED) {\n this.mediaRequestsAborted += 1;\n } else {\n this.mediaRequestsErrored += 1;\n }\n this.stopForError(error);\n return;\n }\n const segmentInfo = this.pendingSegment_; // although the VTT segment loader bandwidth isn't really used, it's good to\n // maintain functionality between segment loaders\n\n this.saveBandwidthRelatedStats_(segmentInfo.duration, simpleSegment.stats); // if this request included a segment key, save that data in the cache\n\n if (simpleSegment.key) {\n this.segmentKey(simpleSegment.key, true);\n }\n this.state = 'APPENDING'; // used for tests\n\n this.trigger('appending');\n const segment = segmentInfo.segment;\n if (segment.map) {\n segment.map.bytes = simpleSegment.map.bytes;\n }\n segmentInfo.bytes = simpleSegment.bytes; // Make sure that vttjs has loaded, otherwise, load it and wait till it finished loading\n\n if (typeof window$1.WebVTT !== 'function' && typeof this.loadVttJs === 'function') {\n this.state = 'WAITING_ON_VTTJS'; // should be fine to call multiple times\n // script will be loaded once but multiple listeners will be added to the queue, which is expected.\n\n this.loadVttJs().then(() => this.segmentRequestFinished_(error, simpleSegment, result), () => this.stopForError({\n message: 'Error loading vtt.js'\n }));\n return;\n }\n segment.requested = true;\n try {\n this.parseVTTCues_(segmentInfo);\n } catch (e) {\n this.stopForError({\n message: e.message,\n metadata: {\n errorType: videojs.Error.StreamingVttParserError,\n error: e\n }\n });\n return;\n }\n this.updateTimeMapping_(segmentInfo, this.syncController_.timelines[segmentInfo.timeline], this.playlist_);\n if (segmentInfo.cues.length) {\n segmentInfo.timingInfo = {\n start: segmentInfo.cues[0].startTime,\n end: segmentInfo.cues[segmentInfo.cues.length - 1].endTime\n };\n } else {\n segmentInfo.timingInfo = {\n start: segmentInfo.startOfSegment,\n end: segmentInfo.startOfSegment + segmentInfo.duration\n };\n }\n if (segmentInfo.isSyncRequest) {\n this.trigger('syncinfoupdate');\n this.pendingSegment_ = null;\n this.state = 'READY';\n return;\n }\n segmentInfo.byteLength = segmentInfo.bytes.byteLength;\n this.mediaSecondsLoaded += segment.duration; // Create VTTCue instances for each cue in the new segment and add them to\n // the subtitle track\n\n segmentInfo.cues.forEach(cue => {\n this.subtitlesTrack_.addCue(this.featuresNativeTextTracks_ ? new window$1.VTTCue(cue.startTime, cue.endTime, cue.text) : cue);\n }); // Remove any duplicate cues from the subtitle track. The WebVTT spec allows\n // cues to have identical time-intervals, but if the text is also identical\n // we can safely assume it is a duplicate that can be removed (ex. when a cue\n // \"overlaps\" VTT segments)\n\n removeDuplicateCuesFromTrack(this.subtitlesTrack_);\n this.handleAppendsDone_();\n }\n handleData_() {// noop as we shouldn't be getting video/audio data captions\n // that we do not support here.\n }\n updateTimingInfoEnd_() {// noop\n }\n /**\n * Uses the WebVTT parser to parse the segment response\n *\n * @throws NoVttJsError\n *\n * @param {Object} segmentInfo\n * a segment info object that describes the current segment\n * @private\n */\n\n parseVTTCues_(segmentInfo) {\n let decoder;\n let decodeBytesToString = false;\n if (typeof window$1.WebVTT !== 'function') {\n // caller is responsible for exception handling.\n throw new NoVttJsError();\n }\n if (typeof window$1.TextDecoder === 'function') {\n decoder = new window$1.TextDecoder('utf8');\n } else {\n decoder = window$1.WebVTT.StringDecoder();\n decodeBytesToString = true;\n }\n const parser = new window$1.WebVTT.Parser(window$1, window$1.vttjs, decoder);\n segmentInfo.cues = [];\n segmentInfo.timestampmap = {\n MPEGTS: 0,\n LOCAL: 0\n };\n parser.oncue = segmentInfo.cues.push.bind(segmentInfo.cues);\n parser.ontimestampmap = map => {\n segmentInfo.timestampmap = map;\n };\n parser.onparsingerror = error => {\n videojs.log.warn('Error encountered when parsing cues: ' + error.message);\n };\n if (segmentInfo.segment.map) {\n let mapData = segmentInfo.segment.map.bytes;\n if (decodeBytesToString) {\n mapData = uint8ToUtf8(mapData);\n }\n parser.parse(mapData);\n }\n let segmentData = segmentInfo.bytes;\n if (decodeBytesToString) {\n segmentData = uint8ToUtf8(segmentData);\n }\n parser.parse(segmentData);\n parser.flush();\n }\n /**\n * Updates the start and end times of any cues parsed by the WebVTT parser using\n * the information parsed from the X-TIMESTAMP-MAP header and a TS to media time mapping\n * from the SyncController\n *\n * @param {Object} segmentInfo\n * a segment info object that describes the current segment\n * @param {Object} mappingObj\n * object containing a mapping from TS to media time\n * @param {Object} playlist\n * the playlist object containing the segment\n * @private\n */\n\n updateTimeMapping_(segmentInfo, mappingObj, playlist) {\n const segment = segmentInfo.segment;\n if (!mappingObj) {\n // If the sync controller does not have a mapping of TS to Media Time for the\n // timeline, then we don't have enough information to update the cue\n // start/end times\n return;\n }\n if (!segmentInfo.cues.length) {\n // If there are no cues, we also do not have enough information to figure out\n // segment timing. Mark that the segment contains no cues so we don't re-request\n // an empty segment.\n segment.empty = true;\n return;\n }\n const {\n MPEGTS,\n LOCAL\n } = segmentInfo.timestampmap;\n /**\n * From the spec:\n * The MPEGTS media timestamp MUST use a 90KHz timescale,\n * even when non-WebVTT Media Segments use a different timescale.\n */\n\n const mpegTsInSeconds = MPEGTS / ONE_SECOND_IN_TS;\n const diff = mpegTsInSeconds - LOCAL + mappingObj.mapping;\n segmentInfo.cues.forEach(cue => {\n const duration = cue.endTime - cue.startTime;\n const startTime = MPEGTS === 0 ? cue.startTime + diff : this.handleRollover_(cue.startTime + diff, mappingObj.time);\n cue.startTime = Math.max(startTime, 0);\n cue.endTime = Math.max(startTime + duration, 0);\n });\n if (!playlist.syncInfo) {\n const firstStart = segmentInfo.cues[0].startTime;\n const lastStart = segmentInfo.cues[segmentInfo.cues.length - 1].startTime;\n playlist.syncInfo = {\n mediaSequence: playlist.mediaSequence + segmentInfo.mediaIndex,\n time: Math.min(firstStart, lastStart - segment.duration)\n };\n }\n }\n /**\n * MPEG-TS PES timestamps are limited to 2^33.\n * Once they reach 2^33, they roll over to 0.\n * mux.js handles PES timestamp rollover for the following scenarios:\n * [forward rollover(right)] ->\n * PES timestamps monotonically increase, and once they reach 2^33, they roll over to 0\n * [backward rollover(left)] -->\n * we seek back to position before rollover.\n *\n * According to the HLS SPEC:\n * When synchronizing WebVTT with PES timestamps, clients SHOULD account\n * for cases where the 33-bit PES timestamps have wrapped and the WebVTT\n * cue times have not. When the PES timestamp wraps, the WebVTT Segment\n * SHOULD have a X-TIMESTAMP-MAP header that maps the current WebVTT\n * time to the new (low valued) PES timestamp.\n *\n * So we want to handle rollover here and align VTT Cue start/end time to the player's time.\n */\n\n handleRollover_(value, reference) {\n if (reference === null) {\n return value;\n }\n let valueIn90khz = value * ONE_SECOND_IN_TS;\n const referenceIn90khz = reference * ONE_SECOND_IN_TS;\n let offset;\n if (referenceIn90khz < valueIn90khz) {\n // - 2^33\n offset = -8589934592;\n } else {\n // + 2^33\n offset = 8589934592;\n } // distance(value - reference) > 2^32\n\n while (Math.abs(valueIn90khz - referenceIn90khz) > 4294967296) {\n valueIn90khz += offset;\n }\n return valueIn90khz / ONE_SECOND_IN_TS;\n }\n}\n\n/**\n * @file ad-cue-tags.js\n */\n/**\n * Searches for an ad cue that overlaps with the given mediaTime\n *\n * @param {Object} track\n * the track to find the cue for\n *\n * @param {number} mediaTime\n * the time to find the cue at\n *\n * @return {Object|null}\n * the found cue or null\n */\n\nconst findAdCue = function (track, mediaTime) {\n const cues = track.cues;\n for (let i = 0; i < cues.length; i++) {\n const cue = cues[i];\n if (mediaTime >= cue.adStartTime && mediaTime <= cue.adEndTime) {\n return cue;\n }\n }\n return null;\n};\nconst updateAdCues = function (media, track, offset = 0) {\n if (!media.segments) {\n return;\n }\n let mediaTime = offset;\n let cue;\n for (let i = 0; i < media.segments.length; i++) {\n const segment = media.segments[i];\n if (!cue) {\n // Since the cues will span for at least the segment duration, adding a fudge\n // factor of half segment duration will prevent duplicate cues from being\n // created when timing info is not exact (e.g. cue start time initialized\n // at 10.006677, but next call mediaTime is 10.003332 )\n cue = findAdCue(track, mediaTime + segment.duration / 2);\n }\n if (cue) {\n if ('cueIn' in segment) {\n // Found a CUE-IN so end the cue\n cue.endTime = mediaTime;\n cue.adEndTime = mediaTime;\n mediaTime += segment.duration;\n cue = null;\n continue;\n }\n if (mediaTime < cue.endTime) {\n // Already processed this mediaTime for this cue\n mediaTime += segment.duration;\n continue;\n } // otherwise extend cue until a CUE-IN is found\n\n cue.endTime += segment.duration;\n } else {\n if ('cueOut' in segment) {\n cue = new window$1.VTTCue(mediaTime, mediaTime + segment.duration, segment.cueOut);\n cue.adStartTime = mediaTime; // Assumes tag format to be\n // #EXT-X-CUE-OUT:30\n\n cue.adEndTime = mediaTime + parseFloat(segment.cueOut);\n track.addCue(cue);\n }\n if ('cueOutCont' in segment) {\n // Entered into the middle of an ad cue\n // Assumes tag formate to be\n // #EXT-X-CUE-OUT-CONT:10/30\n const [adOffset, adTotal] = segment.cueOutCont.split('/').map(parseFloat);\n cue = new window$1.VTTCue(mediaTime, mediaTime + segment.duration, '');\n cue.adStartTime = mediaTime - adOffset;\n cue.adEndTime = cue.adStartTime + adTotal;\n track.addCue(cue);\n }\n }\n mediaTime += segment.duration;\n }\n};\nclass SyncInfo {\n /**\n * @param {number} start - media sequence start\n * @param {number} end - media sequence end\n * @param {number} segmentIndex - index for associated segment\n * @param {number|null} [partIndex] - index for associated part\n * @param {boolean} [appended] - appended indicator\n *\n */\n constructor({\n start,\n end,\n segmentIndex,\n partIndex = null,\n appended = false\n }) {\n this.start_ = start;\n this.end_ = end;\n this.segmentIndex_ = segmentIndex;\n this.partIndex_ = partIndex;\n this.appended_ = appended;\n }\n isInRange(targetTime) {\n return targetTime >= this.start && targetTime < this.end;\n }\n markAppended() {\n this.appended_ = true;\n }\n resetAppendedStatus() {\n this.appended_ = false;\n }\n get isAppended() {\n return this.appended_;\n }\n get start() {\n return this.start_;\n }\n get end() {\n return this.end_;\n }\n get segmentIndex() {\n return this.segmentIndex_;\n }\n get partIndex() {\n return this.partIndex_;\n }\n}\nclass SyncInfoData {\n /**\n *\n * @param {SyncInfo} segmentSyncInfo - sync info for a given segment\n * @param {Array} [partsSyncInfo] - sync infos for a list of parts for a given segment\n */\n constructor(segmentSyncInfo, partsSyncInfo = []) {\n this.segmentSyncInfo_ = segmentSyncInfo;\n this.partsSyncInfo_ = partsSyncInfo;\n }\n get segmentSyncInfo() {\n return this.segmentSyncInfo_;\n }\n get partsSyncInfo() {\n return this.partsSyncInfo_;\n }\n get hasPartsSyncInfo() {\n return this.partsSyncInfo_.length > 0;\n }\n resetAppendStatus() {\n this.segmentSyncInfo_.resetAppendedStatus();\n this.partsSyncInfo_.forEach(partSyncInfo => partSyncInfo.resetAppendedStatus());\n }\n}\nclass MediaSequenceSync {\n constructor() {\n /**\n * @type {Map}\n * @protected\n */\n this.storage_ = new Map();\n this.diagnostics_ = '';\n this.isReliable_ = false;\n this.start_ = -Infinity;\n this.end_ = Infinity;\n }\n get start() {\n return this.start_;\n }\n get end() {\n return this.end_;\n }\n get diagnostics() {\n return this.diagnostics_;\n }\n get isReliable() {\n return this.isReliable_;\n }\n resetAppendedStatus() {\n this.storage_.forEach(syncInfoData => syncInfoData.resetAppendStatus());\n }\n /**\n * update sync storage\n *\n * @param {Object} playlist\n * @param {number} currentTime\n *\n * @return {void}\n */\n\n update(playlist, currentTime) {\n const {\n mediaSequence,\n segments\n } = playlist;\n this.isReliable_ = this.isReliablePlaylist_(mediaSequence, segments);\n if (!this.isReliable_) {\n return;\n }\n return this.updateStorage_(segments, mediaSequence, this.calculateBaseTime_(mediaSequence, currentTime));\n }\n /**\n * @param {number} targetTime\n * @return {SyncInfo|null}\n */\n\n getSyncInfoForTime(targetTime) {\n for (const {\n segmentSyncInfo,\n partsSyncInfo\n } of this.storage_.values()) {\n // Normal segment flow:\n if (!partsSyncInfo.length) {\n if (segmentSyncInfo.isInRange(targetTime)) {\n return segmentSyncInfo;\n }\n } else {\n // Low latency flow:\n for (const partSyncInfo of partsSyncInfo) {\n if (partSyncInfo.isInRange(targetTime)) {\n return partSyncInfo;\n }\n }\n }\n }\n return null;\n }\n getSyncInfoForMediaSequence(mediaSequence) {\n return this.storage_.get(mediaSequence);\n }\n updateStorage_(segments, startingMediaSequence, startingTime) {\n const newStorage = new Map();\n let newDiagnostics = '\\n';\n let currentStart = startingTime;\n let currentMediaSequence = startingMediaSequence;\n this.start_ = currentStart;\n segments.forEach((segment, segmentIndex) => {\n const prevSyncInfoData = this.storage_.get(currentMediaSequence);\n const segmentStart = currentStart;\n const segmentEnd = segmentStart + segment.duration;\n const segmentIsAppended = Boolean(prevSyncInfoData && prevSyncInfoData.segmentSyncInfo && prevSyncInfoData.segmentSyncInfo.isAppended);\n const segmentSyncInfo = new SyncInfo({\n start: segmentStart,\n end: segmentEnd,\n appended: segmentIsAppended,\n segmentIndex\n });\n segment.syncInfo = segmentSyncInfo;\n let currentPartStart = currentStart;\n const partsSyncInfo = (segment.parts || []).map((part, partIndex) => {\n const partStart = currentPartStart;\n const partEnd = currentPartStart + part.duration;\n const partIsAppended = Boolean(prevSyncInfoData && prevSyncInfoData.partsSyncInfo && prevSyncInfoData.partsSyncInfo[partIndex] && prevSyncInfoData.partsSyncInfo[partIndex].isAppended);\n const partSyncInfo = new SyncInfo({\n start: partStart,\n end: partEnd,\n appended: partIsAppended,\n segmentIndex,\n partIndex\n });\n currentPartStart = partEnd;\n newDiagnostics += `Media Sequence: ${currentMediaSequence}.${partIndex} | Range: ${partStart} --> ${partEnd} | Appended: ${partIsAppended}\\n`;\n part.syncInfo = partSyncInfo;\n return partSyncInfo;\n });\n newStorage.set(currentMediaSequence, new SyncInfoData(segmentSyncInfo, partsSyncInfo));\n newDiagnostics += `${compactSegmentUrlDescription(segment.resolvedUri)} | Media Sequence: ${currentMediaSequence} | Range: ${segmentStart} --> ${segmentEnd} | Appended: ${segmentIsAppended}\\n`;\n currentMediaSequence++;\n currentStart = segmentEnd;\n });\n this.end_ = currentStart;\n this.storage_ = newStorage;\n this.diagnostics_ = newDiagnostics;\n }\n calculateBaseTime_(mediaSequence, fallback) {\n if (!this.storage_.size) {\n // Initial setup flow.\n return 0;\n }\n if (this.storage_.has(mediaSequence)) {\n // Normal flow.\n return this.storage_.get(mediaSequence).segmentSyncInfo.start;\n } // Fallback flow.\n // There is a gap between last recorded playlist and a new one received.\n\n return fallback;\n }\n isReliablePlaylist_(mediaSequence, segments) {\n return mediaSequence !== undefined && mediaSequence !== null && Array.isArray(segments) && segments.length;\n }\n}\nclass DependantMediaSequenceSync extends MediaSequenceSync {\n constructor(parent) {\n super();\n this.parent_ = parent;\n }\n calculateBaseTime_(mediaSequence, fallback) {\n if (!this.storage_.size) {\n const info = this.parent_.getSyncInfoForMediaSequence(mediaSequence);\n if (info) {\n return info.segmentSyncInfo.start;\n }\n return 0;\n }\n return super.calculateBaseTime_(mediaSequence, fallback);\n }\n}\n\n/**\n * @file sync-controller.js\n */\n// synchronize expired playlist segments.\n// the max media sequence diff is 48 hours of live stream\n// content with two second segments. Anything larger than that\n// will likely be invalid.\n\nconst MAX_MEDIA_SEQUENCE_DIFF_FOR_SYNC = 86400;\nconst syncPointStrategies = [\n// Stategy \"VOD\": Handle the VOD-case where the sync-point is *always*\n// the equivalence display-time 0 === segment-index 0\n{\n name: 'VOD',\n run: (syncController, playlist, duration, currentTimeline, currentTime) => {\n if (duration !== Infinity) {\n const syncPoint = {\n time: 0,\n segmentIndex: 0,\n partIndex: null\n };\n return syncPoint;\n }\n return null;\n }\n}, {\n name: 'MediaSequence',\n /**\n * run media sequence strategy\n *\n * @param {SyncController} syncController\n * @param {Object} playlist\n * @param {number} duration\n * @param {number} currentTimeline\n * @param {number} currentTime\n * @param {string} type\n */\n run: (syncController, playlist, duration, currentTimeline, currentTime, type) => {\n const mediaSequenceSync = syncController.getMediaSequenceSync(type);\n if (!mediaSequenceSync) {\n return null;\n }\n if (!mediaSequenceSync.isReliable) {\n return null;\n }\n const syncInfo = mediaSequenceSync.getSyncInfoForTime(currentTime);\n if (!syncInfo) {\n return null;\n }\n return {\n time: syncInfo.start,\n partIndex: syncInfo.partIndex,\n segmentIndex: syncInfo.segmentIndex\n };\n }\n},\n// Stategy \"ProgramDateTime\": We have a program-date-time tag in this playlist\n{\n name: 'ProgramDateTime',\n run: (syncController, playlist, duration, currentTimeline, currentTime) => {\n if (!Object.keys(syncController.timelineToDatetimeMappings).length) {\n return null;\n }\n let syncPoint = null;\n let lastDistance = null;\n const partsAndSegments = getPartsAndSegments(playlist);\n currentTime = currentTime || 0;\n for (let i = 0; i < partsAndSegments.length; i++) {\n // start from the end and loop backwards for live\n // or start from the front and loop forwards for non-live\n const index = playlist.endList || currentTime === 0 ? i : partsAndSegments.length - (i + 1);\n const partAndSegment = partsAndSegments[index];\n const segment = partAndSegment.segment;\n const datetimeMapping = syncController.timelineToDatetimeMappings[segment.timeline];\n if (!datetimeMapping || !segment.dateTimeObject) {\n continue;\n }\n const segmentTime = segment.dateTimeObject.getTime() / 1000;\n let start = segmentTime + datetimeMapping; // take part duration into account.\n\n if (segment.parts && typeof partAndSegment.partIndex === 'number') {\n for (let z = 0; z < partAndSegment.partIndex; z++) {\n start += segment.parts[z].duration;\n }\n }\n const distance = Math.abs(currentTime - start); // Once the distance begins to increase, or if distance is 0, we have passed\n // currentTime and can stop looking for better candidates\n\n if (lastDistance !== null && (distance === 0 || lastDistance < distance)) {\n break;\n }\n lastDistance = distance;\n syncPoint = {\n time: start,\n segmentIndex: partAndSegment.segmentIndex,\n partIndex: partAndSegment.partIndex\n };\n }\n return syncPoint;\n }\n},\n// Stategy \"Segment\": We have a known time mapping for a timeline and a\n// segment in the current timeline with timing data\n{\n name: 'Segment',\n run: (syncController, playlist, duration, currentTimeline, currentTime) => {\n let syncPoint = null;\n let lastDistance = null;\n currentTime = currentTime || 0;\n const partsAndSegments = getPartsAndSegments(playlist);\n for (let i = 0; i < partsAndSegments.length; i++) {\n // start from the end and loop backwards for live\n // or start from the front and loop forwards for non-live\n const index = playlist.endList || currentTime === 0 ? i : partsAndSegments.length - (i + 1);\n const partAndSegment = partsAndSegments[index];\n const segment = partAndSegment.segment;\n const start = partAndSegment.part && partAndSegment.part.start || segment && segment.start;\n if (segment.timeline === currentTimeline && typeof start !== 'undefined') {\n const distance = Math.abs(currentTime - start); // Once the distance begins to increase, we have passed\n // currentTime and can stop looking for better candidates\n\n if (lastDistance !== null && lastDistance < distance) {\n break;\n }\n if (!syncPoint || lastDistance === null || lastDistance >= distance) {\n lastDistance = distance;\n syncPoint = {\n time: start,\n segmentIndex: partAndSegment.segmentIndex,\n partIndex: partAndSegment.partIndex\n };\n }\n }\n }\n return syncPoint;\n }\n},\n// Stategy \"Discontinuity\": We have a discontinuity with a known\n// display-time\n{\n name: 'Discontinuity',\n run: (syncController, playlist, duration, currentTimeline, currentTime) => {\n let syncPoint = null;\n currentTime = currentTime || 0;\n if (playlist.discontinuityStarts && playlist.discontinuityStarts.length) {\n let lastDistance = null;\n for (let i = 0; i < playlist.discontinuityStarts.length; i++) {\n const segmentIndex = playlist.discontinuityStarts[i];\n const discontinuity = playlist.discontinuitySequence + i + 1;\n const discontinuitySync = syncController.discontinuities[discontinuity];\n if (discontinuitySync) {\n const distance = Math.abs(currentTime - discontinuitySync.time); // Once the distance begins to increase, we have passed\n // currentTime and can stop looking for better candidates\n\n if (lastDistance !== null && lastDistance < distance) {\n break;\n }\n if (!syncPoint || lastDistance === null || lastDistance >= distance) {\n lastDistance = distance;\n syncPoint = {\n time: discontinuitySync.time,\n segmentIndex,\n partIndex: null\n };\n }\n }\n }\n }\n return syncPoint;\n }\n},\n// Stategy \"Playlist\": We have a playlist with a known mapping of\n// segment index to display time\n{\n name: 'Playlist',\n run: (syncController, playlist, duration, currentTimeline, currentTime) => {\n if (playlist.syncInfo) {\n const syncPoint = {\n time: playlist.syncInfo.time,\n segmentIndex: playlist.syncInfo.mediaSequence - playlist.mediaSequence,\n partIndex: null\n };\n return syncPoint;\n }\n return null;\n }\n}];\nclass SyncController extends videojs.EventTarget {\n constructor(options = {}) {\n super(); // ...for synching across variants\n\n this.timelines = [];\n this.discontinuities = [];\n this.timelineToDatetimeMappings = {}; // TODO: this map should be only available for HLS. Since only HLS has MediaSequence.\n // For some reason this map helps with syncing between quality switch for MPEG-DASH as well.\n // Moreover if we disable this map for MPEG-DASH - quality switch will be broken.\n // MPEG-DASH should have its own separate sync strategy\n\n const main = new MediaSequenceSync();\n const audio = new DependantMediaSequenceSync(main);\n const vtt = new DependantMediaSequenceSync(main);\n this.mediaSequenceStorage_ = {\n main,\n audio,\n vtt\n };\n this.logger_ = logger('SyncController');\n }\n /**\n *\n * @param {string} loaderType\n * @return {MediaSequenceSync|null}\n */\n\n getMediaSequenceSync(loaderType) {\n return this.mediaSequenceStorage_[loaderType] || null;\n }\n /**\n * Find a sync-point for the playlist specified\n *\n * A sync-point is defined as a known mapping from display-time to\n * a segment-index in the current playlist.\n *\n * @param {Playlist} playlist\n * The playlist that needs a sync-point\n * @param {number} duration\n * Duration of the MediaSource (Infinite if playing a live source)\n * @param {number} currentTimeline\n * The last timeline from which a segment was loaded\n * @param {number} currentTime\n * Current player's time\n * @param {string} type\n * Segment loader type\n * @return {Object}\n * A sync-point object\n */\n\n getSyncPoint(playlist, duration, currentTimeline, currentTime, type) {\n // Always use VOD sync point for VOD\n if (duration !== Infinity) {\n const vodSyncPointStrategy = syncPointStrategies.find(({\n name\n }) => name === 'VOD');\n return vodSyncPointStrategy.run(this, playlist, duration);\n }\n const syncPoints = this.runStrategies_(playlist, duration, currentTimeline, currentTime, type);\n if (!syncPoints.length) {\n // Signal that we need to attempt to get a sync-point manually\n // by fetching a segment in the playlist and constructing\n // a sync-point from that information\n return null;\n } // If we have exact match just return it instead of finding the nearest distance\n\n for (const syncPointInfo of syncPoints) {\n const {\n syncPoint,\n strategy\n } = syncPointInfo;\n const {\n segmentIndex,\n time\n } = syncPoint;\n if (segmentIndex < 0) {\n continue;\n }\n const selectedSegment = playlist.segments[segmentIndex];\n const start = time;\n const end = start + selectedSegment.duration;\n this.logger_(`Strategy: ${strategy}. Current time: ${currentTime}. selected segment: ${segmentIndex}. Time: [${start} -> ${end}]}`);\n if (currentTime >= start && currentTime < end) {\n this.logger_('Found sync point with exact match: ', syncPoint);\n return syncPoint;\n }\n } // Now find the sync-point that is closest to the currentTime because\n // that should result in the most accurate guess about which segment\n // to fetch\n\n return this.selectSyncPoint_(syncPoints, {\n key: 'time',\n value: currentTime\n });\n }\n /**\n * Calculate the amount of time that has expired off the playlist during playback\n *\n * @param {Playlist} playlist\n * Playlist object to calculate expired from\n * @param {number} duration\n * Duration of the MediaSource (Infinity if playling a live source)\n * @return {number|null}\n * The amount of time that has expired off the playlist during playback. Null\n * if no sync-points for the playlist can be found.\n */\n\n getExpiredTime(playlist, duration) {\n if (!playlist || !playlist.segments) {\n return null;\n }\n const syncPoints = this.runStrategies_(playlist, duration, playlist.discontinuitySequence, 0); // Without sync-points, there is not enough information to determine the expired time\n\n if (!syncPoints.length) {\n return null;\n }\n const syncPoint = this.selectSyncPoint_(syncPoints, {\n key: 'segmentIndex',\n value: 0\n }); // If the sync-point is beyond the start of the playlist, we want to subtract the\n // duration from index 0 to syncPoint.segmentIndex instead of adding.\n\n if (syncPoint.segmentIndex > 0) {\n syncPoint.time *= -1;\n }\n return Math.abs(syncPoint.time + sumDurations({\n defaultDuration: playlist.targetDuration,\n durationList: playlist.segments,\n startIndex: syncPoint.segmentIndex,\n endIndex: 0\n }));\n }\n /**\n * Runs each sync-point strategy and returns a list of sync-points returned by the\n * strategies\n *\n * @private\n * @param {Playlist} playlist\n * The playlist that needs a sync-point\n * @param {number} duration\n * Duration of the MediaSource (Infinity if playing a live source)\n * @param {number} currentTimeline\n * The last timeline from which a segment was loaded\n * @param {number} currentTime\n * Current player's time\n * @param {string} type\n * Segment loader type\n * @return {Array}\n * A list of sync-point objects\n */\n\n runStrategies_(playlist, duration, currentTimeline, currentTime, type) {\n const syncPoints = []; // Try to find a sync-point in by utilizing various strategies...\n\n for (let i = 0; i < syncPointStrategies.length; i++) {\n const strategy = syncPointStrategies[i];\n const syncPoint = strategy.run(this, playlist, duration, currentTimeline, currentTime, type);\n if (syncPoint) {\n syncPoint.strategy = strategy.name;\n syncPoints.push({\n strategy: strategy.name,\n syncPoint\n });\n }\n }\n return syncPoints;\n }\n /**\n * Selects the sync-point nearest the specified target\n *\n * @private\n * @param {Array} syncPoints\n * List of sync-points to select from\n * @param {Object} target\n * Object specifying the property and value we are targeting\n * @param {string} target.key\n * Specifies the property to target. Must be either 'time' or 'segmentIndex'\n * @param {number} target.value\n * The value to target for the specified key.\n * @return {Object}\n * The sync-point nearest the target\n */\n\n selectSyncPoint_(syncPoints, target) {\n let bestSyncPoint = syncPoints[0].syncPoint;\n let bestDistance = Math.abs(syncPoints[0].syncPoint[target.key] - target.value);\n let bestStrategy = syncPoints[0].strategy;\n for (let i = 1; i < syncPoints.length; i++) {\n const newDistance = Math.abs(syncPoints[i].syncPoint[target.key] - target.value);\n if (newDistance < bestDistance) {\n bestDistance = newDistance;\n bestSyncPoint = syncPoints[i].syncPoint;\n bestStrategy = syncPoints[i].strategy;\n }\n }\n this.logger_(`syncPoint for [${target.key}: ${target.value}] chosen with strategy` + ` [${bestStrategy}]: [time:${bestSyncPoint.time},` + ` segmentIndex:${bestSyncPoint.segmentIndex}` + (typeof bestSyncPoint.partIndex === 'number' ? `,partIndex:${bestSyncPoint.partIndex}` : '') + ']');\n return bestSyncPoint;\n }\n /**\n * Save any meta-data present on the segments when segments leave\n * the live window to the playlist to allow for synchronization at the\n * playlist level later.\n *\n * @param {Playlist} oldPlaylist - The previous active playlist\n * @param {Playlist} newPlaylist - The updated and most current playlist\n */\n\n saveExpiredSegmentInfo(oldPlaylist, newPlaylist) {\n const mediaSequenceDiff = newPlaylist.mediaSequence - oldPlaylist.mediaSequence; // Ignore large media sequence gaps\n\n if (mediaSequenceDiff > MAX_MEDIA_SEQUENCE_DIFF_FOR_SYNC) {\n videojs.log.warn(`Not saving expired segment info. Media sequence gap ${mediaSequenceDiff} is too large.`);\n return;\n } // When a segment expires from the playlist and it has a start time\n // save that information as a possible sync-point reference in future\n\n for (let i = mediaSequenceDiff - 1; i >= 0; i--) {\n const lastRemovedSegment = oldPlaylist.segments[i];\n if (lastRemovedSegment && typeof lastRemovedSegment.start !== 'undefined') {\n newPlaylist.syncInfo = {\n mediaSequence: oldPlaylist.mediaSequence + i,\n time: lastRemovedSegment.start\n };\n this.logger_(`playlist refresh sync: [time:${newPlaylist.syncInfo.time},` + ` mediaSequence: ${newPlaylist.syncInfo.mediaSequence}]`);\n this.trigger('syncinfoupdate');\n break;\n }\n }\n }\n /**\n * Save the mapping from playlist's ProgramDateTime to display. This should only happen\n * before segments start to load.\n *\n * @param {Playlist} playlist - The currently active playlist\n */\n\n setDateTimeMappingForStart(playlist) {\n // It's possible for the playlist to be updated before playback starts, meaning time\n // zero is not yet set. If, during these playlist refreshes, a discontinuity is\n // crossed, then the old time zero mapping (for the prior timeline) would be retained\n // unless the mappings are cleared.\n this.timelineToDatetimeMappings = {};\n if (playlist.segments && playlist.segments.length && playlist.segments[0].dateTimeObject) {\n const firstSegment = playlist.segments[0];\n const playlistTimestamp = firstSegment.dateTimeObject.getTime() / 1000;\n this.timelineToDatetimeMappings[firstSegment.timeline] = -playlistTimestamp;\n }\n }\n /**\n * Calculates and saves timeline mappings, playlist sync info, and segment timing values\n * based on the latest timing information.\n *\n * @param {Object} options\n * Options object\n * @param {SegmentInfo} options.segmentInfo\n * The current active request information\n * @param {boolean} options.shouldSaveTimelineMapping\n * If there's a timeline change, determines if the timeline mapping should be\n * saved for timeline mapping and program date time mappings.\n */\n\n saveSegmentTimingInfo({\n segmentInfo,\n shouldSaveTimelineMapping\n }) {\n const didCalculateSegmentTimeMapping = this.calculateSegmentTimeMapping_(segmentInfo, segmentInfo.timingInfo, shouldSaveTimelineMapping);\n const segment = segmentInfo.segment;\n if (didCalculateSegmentTimeMapping) {\n this.saveDiscontinuitySyncInfo_(segmentInfo); // If the playlist does not have sync information yet, record that information\n // now with segment timing information\n\n if (!segmentInfo.playlist.syncInfo) {\n segmentInfo.playlist.syncInfo = {\n mediaSequence: segmentInfo.playlist.mediaSequence + segmentInfo.mediaIndex,\n time: segment.start\n };\n }\n }\n const dateTime = segment.dateTimeObject;\n if (segment.discontinuity && shouldSaveTimelineMapping && dateTime) {\n this.timelineToDatetimeMappings[segment.timeline] = -(dateTime.getTime() / 1000);\n }\n }\n timestampOffsetForTimeline(timeline) {\n if (typeof this.timelines[timeline] === 'undefined') {\n return null;\n }\n return this.timelines[timeline].time;\n }\n mappingForTimeline(timeline) {\n if (typeof this.timelines[timeline] === 'undefined') {\n return null;\n }\n return this.timelines[timeline].mapping;\n }\n /**\n * Use the \"media time\" for a segment to generate a mapping to \"display time\" and\n * save that display time to the segment.\n *\n * @private\n * @param {SegmentInfo} segmentInfo\n * The current active request information\n * @param {Object} timingInfo\n * The start and end time of the current segment in \"media time\"\n * @param {boolean} shouldSaveTimelineMapping\n * If there's a timeline change, determines if the timeline mapping should be\n * saved in timelines.\n * @return {boolean}\n * Returns false if segment time mapping could not be calculated\n */\n\n calculateSegmentTimeMapping_(segmentInfo, timingInfo, shouldSaveTimelineMapping) {\n // TODO: remove side effects\n const segment = segmentInfo.segment;\n const part = segmentInfo.part;\n let mappingObj = this.timelines[segmentInfo.timeline];\n let start;\n let end;\n if (typeof segmentInfo.timestampOffset === 'number') {\n mappingObj = {\n time: segmentInfo.startOfSegment,\n mapping: segmentInfo.startOfSegment - timingInfo.start\n };\n if (shouldSaveTimelineMapping) {\n this.timelines[segmentInfo.timeline] = mappingObj;\n this.trigger('timestampoffset');\n this.logger_(`time mapping for timeline ${segmentInfo.timeline}: ` + `[time: ${mappingObj.time}] [mapping: ${mappingObj.mapping}]`);\n }\n start = segmentInfo.startOfSegment;\n end = timingInfo.end + mappingObj.mapping;\n } else if (mappingObj) {\n start = timingInfo.start + mappingObj.mapping;\n end = timingInfo.end + mappingObj.mapping;\n } else {\n return false;\n }\n if (part) {\n part.start = start;\n part.end = end;\n } // If we don't have a segment start yet or the start value we got\n // is less than our current segment.start value, save a new start value.\n // We have to do this because parts will have segment timing info saved\n // multiple times and we want segment start to be the earliest part start\n // value for that segment.\n\n if (!segment.start || start < segment.start) {\n segment.start = start;\n }\n segment.end = end;\n return true;\n }\n /**\n * Each time we have discontinuity in the playlist, attempt to calculate the location\n * in display of the start of the discontinuity and save that. We also save an accuracy\n * value so that we save values with the most accuracy (closest to 0.)\n *\n * @private\n * @param {SegmentInfo} segmentInfo - The current active request information\n */\n\n saveDiscontinuitySyncInfo_(segmentInfo) {\n const playlist = segmentInfo.playlist;\n const segment = segmentInfo.segment; // If the current segment is a discontinuity then we know exactly where\n // the start of the range and it's accuracy is 0 (greater accuracy values\n // mean more approximation)\n\n if (segment.discontinuity) {\n this.discontinuities[segment.timeline] = {\n time: segment.start,\n accuracy: 0\n };\n } else if (playlist.discontinuityStarts && playlist.discontinuityStarts.length) {\n // Search for future discontinuities that we can provide better timing\n // information for and save that information for sync purposes\n for (let i = 0; i < playlist.discontinuityStarts.length; i++) {\n const segmentIndex = playlist.discontinuityStarts[i];\n const discontinuity = playlist.discontinuitySequence + i + 1;\n const mediaIndexDiff = segmentIndex - segmentInfo.mediaIndex;\n const accuracy = Math.abs(mediaIndexDiff);\n if (!this.discontinuities[discontinuity] || this.discontinuities[discontinuity].accuracy > accuracy) {\n let time;\n if (mediaIndexDiff < 0) {\n time = segment.start - sumDurations({\n defaultDuration: playlist.targetDuration,\n durationList: playlist.segments,\n startIndex: segmentInfo.mediaIndex,\n endIndex: segmentIndex\n });\n } else {\n time = segment.end + sumDurations({\n defaultDuration: playlist.targetDuration,\n durationList: playlist.segments,\n startIndex: segmentInfo.mediaIndex + 1,\n endIndex: segmentIndex\n });\n }\n this.discontinuities[discontinuity] = {\n time,\n accuracy\n };\n }\n }\n }\n }\n dispose() {\n this.trigger('dispose');\n this.off();\n }\n}\n\n/**\n * The TimelineChangeController acts as a source for segment loaders to listen for and\n * keep track of latest and pending timeline changes. This is useful to ensure proper\n * sync, as each loader may need to make a consideration for what timeline the other\n * loader is on before making changes which could impact the other loader's media.\n *\n * @class TimelineChangeController\n * @extends videojs.EventTarget\n */\n\nclass TimelineChangeController extends videojs.EventTarget {\n constructor() {\n super();\n this.pendingTimelineChanges_ = {};\n this.lastTimelineChanges_ = {};\n }\n clearPendingTimelineChange(type) {\n this.pendingTimelineChanges_[type] = null;\n this.trigger('pendingtimelinechange');\n }\n pendingTimelineChange({\n type,\n from,\n to\n }) {\n if (typeof from === 'number' && typeof to === 'number') {\n this.pendingTimelineChanges_[type] = {\n type,\n from,\n to\n };\n this.trigger('pendingtimelinechange');\n }\n return this.pendingTimelineChanges_[type];\n }\n lastTimelineChange({\n type,\n from,\n to\n }) {\n if (typeof from === 'number' && typeof to === 'number') {\n this.lastTimelineChanges_[type] = {\n type,\n from,\n to\n };\n delete this.pendingTimelineChanges_[type];\n const metadata = {\n timelineChangeInfo: {\n from,\n to\n }\n };\n this.trigger({\n type: 'timelinechange',\n metadata\n });\n }\n return this.lastTimelineChanges_[type];\n }\n dispose() {\n this.trigger('dispose');\n this.pendingTimelineChanges_ = {};\n this.lastTimelineChanges_ = {};\n this.off();\n }\n}\n\n/* rollup-plugin-worker-factory start for worker!/home/runner/work/http-streaming/http-streaming/src/decrypter-worker.js */\nconst workerCode = transform(getWorkerString(function () {\n /**\n * @file stream.js\n */\n\n /**\n * A lightweight readable stream implemention that handles event dispatching.\n *\n * @class Stream\n */\n\n var Stream = /*#__PURE__*/function () {\n function Stream() {\n this.listeners = {};\n }\n /**\n * Add a listener for a specified event type.\n *\n * @param {string} type the event name\n * @param {Function} listener the callback to be invoked when an event of\n * the specified type occurs\n */\n\n var _proto = Stream.prototype;\n _proto.on = function on(type, listener) {\n if (!this.listeners[type]) {\n this.listeners[type] = [];\n }\n this.listeners[type].push(listener);\n }\n /**\n * Remove a listener for a specified event type.\n *\n * @param {string} type the event name\n * @param {Function} listener a function previously registered for this\n * type of event through `on`\n * @return {boolean} if we could turn it off or not\n */;\n _proto.off = function off(type, listener) {\n if (!this.listeners[type]) {\n return false;\n }\n var index = this.listeners[type].indexOf(listener); // TODO: which is better?\n // In Video.js we slice listener functions\n // on trigger so that it does not mess up the order\n // while we loop through.\n //\n // Here we slice on off so that the loop in trigger\n // can continue using it's old reference to loop without\n // messing up the order.\n\n this.listeners[type] = this.listeners[type].slice(0);\n this.listeners[type].splice(index, 1);\n return index > -1;\n }\n /**\n * Trigger an event of the specified type on this stream. Any additional\n * arguments to this function are passed as parameters to event listeners.\n *\n * @param {string} type the event name\n */;\n _proto.trigger = function trigger(type) {\n var callbacks = this.listeners[type];\n if (!callbacks) {\n return;\n } // Slicing the arguments on every invocation of this method\n // can add a significant amount of overhead. Avoid the\n // intermediate object creation for the common case of a\n // single callback argument\n\n if (arguments.length === 2) {\n var length = callbacks.length;\n for (var i = 0; i < length; ++i) {\n callbacks[i].call(this, arguments[1]);\n }\n } else {\n var args = Array.prototype.slice.call(arguments, 1);\n var _length = callbacks.length;\n for (var _i = 0; _i < _length; ++_i) {\n callbacks[_i].apply(this, args);\n }\n }\n }\n /**\n * Destroys the stream and cleans up.\n */;\n _proto.dispose = function dispose() {\n this.listeners = {};\n }\n /**\n * Forwards all `data` events on this stream to the destination stream. The\n * destination stream should provide a method `push` to receive the data\n * events as they arrive.\n *\n * @param {Stream} destination the stream that will receive all `data` events\n * @see http://nodejs.org/api/stream.html#stream_readable_pipe_destination_options\n */;\n _proto.pipe = function pipe(destination) {\n this.on('data', function (data) {\n destination.push(data);\n });\n };\n return Stream;\n }();\n /*! @name pkcs7 @version 1.0.4 @license Apache-2.0 */\n\n /**\n * Returns the subarray of a Uint8Array without PKCS#7 padding.\n *\n * @param padded {Uint8Array} unencrypted bytes that have been padded\n * @return {Uint8Array} the unpadded bytes\n * @see http://tools.ietf.org/html/rfc5652\n */\n\n function unpad(padded) {\n return padded.subarray(0, padded.byteLength - padded[padded.byteLength - 1]);\n }\n /*! @name aes-decrypter @version 4.0.1 @license Apache-2.0 */\n\n /**\n * @file aes.js\n *\n * This file contains an adaptation of the AES decryption algorithm\n * from the Standford Javascript Cryptography Library. That work is\n * covered by the following copyright and permissions notice:\n *\n * Copyright 2009-2010 Emily Stark, Mike Hamburg, Dan Boneh.\n * All rights reserved.\n *\n * Redistribution and use in source and binary forms, with or without\n * modification, are permitted provided that the following conditions are\n * met:\n *\n * 1. Redistributions of source code must retain the above copyright\n * notice, this list of conditions and the following disclaimer.\n *\n * 2. Redistributions in binary form must reproduce the above\n * copyright notice, this list of conditions and the following\n * disclaimer in the documentation and/or other materials provided\n * with the distribution.\n *\n * THIS SOFTWARE IS PROVIDED BY THE AUTHORS ``AS IS'' AND ANY EXPRESS OR\n * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\n * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\n * DISCLAIMED. IN NO EVENT SHALL OR CONTRIBUTORS BE\n * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR\n * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF\n * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR\n * BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,\n * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE\n * OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN\n * IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n *\n * The views and conclusions contained in the software and documentation\n * are those of the authors and should not be interpreted as representing\n * official policies, either expressed or implied, of the authors.\n */\n\n /**\n * Expand the S-box tables.\n *\n * @private\n */\n\n const precompute = function () {\n const tables = [[[], [], [], [], []], [[], [], [], [], []]];\n const encTable = tables[0];\n const decTable = tables[1];\n const sbox = encTable[4];\n const sboxInv = decTable[4];\n let i;\n let x;\n let xInv;\n const d = [];\n const th = [];\n let x2;\n let x4;\n let x8;\n let s;\n let tEnc;\n let tDec; // Compute double and third tables\n\n for (i = 0; i < 256; i++) {\n th[(d[i] = i << 1 ^ (i >> 7) * 283) ^ i] = i;\n }\n for (x = xInv = 0; !sbox[x]; x ^= x2 || 1, xInv = th[xInv] || 1) {\n // Compute sbox\n s = xInv ^ xInv << 1 ^ xInv << 2 ^ xInv << 3 ^ xInv << 4;\n s = s >> 8 ^ s & 255 ^ 99;\n sbox[x] = s;\n sboxInv[s] = x; // Compute MixColumns\n\n x8 = d[x4 = d[x2 = d[x]]];\n tDec = x8 * 0x1010101 ^ x4 * 0x10001 ^ x2 * 0x101 ^ x * 0x1010100;\n tEnc = d[s] * 0x101 ^ s * 0x1010100;\n for (i = 0; i < 4; i++) {\n encTable[i][x] = tEnc = tEnc << 24 ^ tEnc >>> 8;\n decTable[i][s] = tDec = tDec << 24 ^ tDec >>> 8;\n }\n } // Compactify. Considerable speedup on Firefox.\n\n for (i = 0; i < 5; i++) {\n encTable[i] = encTable[i].slice(0);\n decTable[i] = decTable[i].slice(0);\n }\n return tables;\n };\n let aesTables = null;\n /**\n * Schedule out an AES key for both encryption and decryption. This\n * is a low-level class. Use a cipher mode to do bulk encryption.\n *\n * @class AES\n * @param key {Array} The key as an array of 4, 6 or 8 words.\n */\n\n class AES {\n constructor(key) {\n /**\n * The expanded S-box and inverse S-box tables. These will be computed\n * on the client so that we don't have to send them down the wire.\n *\n * There are two tables, _tables[0] is for encryption and\n * _tables[1] is for decryption.\n *\n * The first 4 sub-tables are the expanded S-box with MixColumns. The\n * last (_tables[01][4]) is the S-box itself.\n *\n * @private\n */\n // if we have yet to precompute the S-box tables\n // do so now\n if (!aesTables) {\n aesTables = precompute();\n } // then make a copy of that object for use\n\n this._tables = [[aesTables[0][0].slice(), aesTables[0][1].slice(), aesTables[0][2].slice(), aesTables[0][3].slice(), aesTables[0][4].slice()], [aesTables[1][0].slice(), aesTables[1][1].slice(), aesTables[1][2].slice(), aesTables[1][3].slice(), aesTables[1][4].slice()]];\n let i;\n let j;\n let tmp;\n const sbox = this._tables[0][4];\n const decTable = this._tables[1];\n const keyLen = key.length;\n let rcon = 1;\n if (keyLen !== 4 && keyLen !== 6 && keyLen !== 8) {\n throw new Error('Invalid aes key size');\n }\n const encKey = key.slice(0);\n const decKey = [];\n this._key = [encKey, decKey]; // schedule encryption keys\n\n for (i = keyLen; i < 4 * keyLen + 28; i++) {\n tmp = encKey[i - 1]; // apply sbox\n\n if (i % keyLen === 0 || keyLen === 8 && i % keyLen === 4) {\n tmp = sbox[tmp >>> 24] << 24 ^ sbox[tmp >> 16 & 255] << 16 ^ sbox[tmp >> 8 & 255] << 8 ^ sbox[tmp & 255]; // shift rows and add rcon\n\n if (i % keyLen === 0) {\n tmp = tmp << 8 ^ tmp >>> 24 ^ rcon << 24;\n rcon = rcon << 1 ^ (rcon >> 7) * 283;\n }\n }\n encKey[i] = encKey[i - keyLen] ^ tmp;\n } // schedule decryption keys\n\n for (j = 0; i; j++, i--) {\n tmp = encKey[j & 3 ? i : i - 4];\n if (i <= 4 || j < 4) {\n decKey[j] = tmp;\n } else {\n decKey[j] = decTable[0][sbox[tmp >>> 24]] ^ decTable[1][sbox[tmp >> 16 & 255]] ^ decTable[2][sbox[tmp >> 8 & 255]] ^ decTable[3][sbox[tmp & 255]];\n }\n }\n }\n /**\n * Decrypt 16 bytes, specified as four 32-bit words.\n *\n * @param {number} encrypted0 the first word to decrypt\n * @param {number} encrypted1 the second word to decrypt\n * @param {number} encrypted2 the third word to decrypt\n * @param {number} encrypted3 the fourth word to decrypt\n * @param {Int32Array} out the array to write the decrypted words\n * into\n * @param {number} offset the offset into the output array to start\n * writing results\n * @return {Array} The plaintext.\n */\n\n decrypt(encrypted0, encrypted1, encrypted2, encrypted3, out, offset) {\n const key = this._key[1]; // state variables a,b,c,d are loaded with pre-whitened data\n\n let a = encrypted0 ^ key[0];\n let b = encrypted3 ^ key[1];\n let c = encrypted2 ^ key[2];\n let d = encrypted1 ^ key[3];\n let a2;\n let b2;\n let c2; // key.length === 2 ?\n\n const nInnerRounds = key.length / 4 - 2;\n let i;\n let kIndex = 4;\n const table = this._tables[1]; // load up the tables\n\n const table0 = table[0];\n const table1 = table[1];\n const table2 = table[2];\n const table3 = table[3];\n const sbox = table[4]; // Inner rounds. Cribbed from OpenSSL.\n\n for (i = 0; i < nInnerRounds; i++) {\n a2 = table0[a >>> 24] ^ table1[b >> 16 & 255] ^ table2[c >> 8 & 255] ^ table3[d & 255] ^ key[kIndex];\n b2 = table0[b >>> 24] ^ table1[c >> 16 & 255] ^ table2[d >> 8 & 255] ^ table3[a & 255] ^ key[kIndex + 1];\n c2 = table0[c >>> 24] ^ table1[d >> 16 & 255] ^ table2[a >> 8 & 255] ^ table3[b & 255] ^ key[kIndex + 2];\n d = table0[d >>> 24] ^ table1[a >> 16 & 255] ^ table2[b >> 8 & 255] ^ table3[c & 255] ^ key[kIndex + 3];\n kIndex += 4;\n a = a2;\n b = b2;\n c = c2;\n } // Last round.\n\n for (i = 0; i < 4; i++) {\n out[(3 & -i) + offset] = sbox[a >>> 24] << 24 ^ sbox[b >> 16 & 255] << 16 ^ sbox[c >> 8 & 255] << 8 ^ sbox[d & 255] ^ key[kIndex++];\n a2 = a;\n a = b;\n b = c;\n c = d;\n d = a2;\n }\n }\n }\n /**\n * @file async-stream.js\n */\n\n /**\n * A wrapper around the Stream class to use setTimeout\n * and run stream \"jobs\" Asynchronously\n *\n * @class AsyncStream\n * @extends Stream\n */\n\n class AsyncStream extends Stream {\n constructor() {\n super(Stream);\n this.jobs = [];\n this.delay = 1;\n this.timeout_ = null;\n }\n /**\n * process an async job\n *\n * @private\n */\n\n processJob_() {\n this.jobs.shift()();\n if (this.jobs.length) {\n this.timeout_ = setTimeout(this.processJob_.bind(this), this.delay);\n } else {\n this.timeout_ = null;\n }\n }\n /**\n * push a job into the stream\n *\n * @param {Function} job the job to push into the stream\n */\n\n push(job) {\n this.jobs.push(job);\n if (!this.timeout_) {\n this.timeout_ = setTimeout(this.processJob_.bind(this), this.delay);\n }\n }\n }\n /**\n * @file decrypter.js\n *\n * An asynchronous implementation of AES-128 CBC decryption with\n * PKCS#7 padding.\n */\n\n /**\n * Convert network-order (big-endian) bytes into their little-endian\n * representation.\n */\n\n const ntoh = function (word) {\n return word << 24 | (word & 0xff00) << 8 | (word & 0xff0000) >> 8 | word >>> 24;\n };\n /**\n * Decrypt bytes using AES-128 with CBC and PKCS#7 padding.\n *\n * @param {Uint8Array} encrypted the encrypted bytes\n * @param {Uint32Array} key the bytes of the decryption key\n * @param {Uint32Array} initVector the initialization vector (IV) to\n * use for the first round of CBC.\n * @return {Uint8Array} the decrypted bytes\n *\n * @see http://en.wikipedia.org/wiki/Advanced_Encryption_Standard\n * @see http://en.wikipedia.org/wiki/Block_cipher_mode_of_operation#Cipher_Block_Chaining_.28CBC.29\n * @see https://tools.ietf.org/html/rfc2315\n */\n\n const decrypt = function (encrypted, key, initVector) {\n // word-level access to the encrypted bytes\n const encrypted32 = new Int32Array(encrypted.buffer, encrypted.byteOffset, encrypted.byteLength >> 2);\n const decipher = new AES(Array.prototype.slice.call(key)); // byte and word-level access for the decrypted output\n\n const decrypted = new Uint8Array(encrypted.byteLength);\n const decrypted32 = new Int32Array(decrypted.buffer); // temporary variables for working with the IV, encrypted, and\n // decrypted data\n\n let init0;\n let init1;\n let init2;\n let init3;\n let encrypted0;\n let encrypted1;\n let encrypted2;\n let encrypted3; // iteration variable\n\n let wordIx; // pull out the words of the IV to ensure we don't modify the\n // passed-in reference and easier access\n\n init0 = initVector[0];\n init1 = initVector[1];\n init2 = initVector[2];\n init3 = initVector[3]; // decrypt four word sequences, applying cipher-block chaining (CBC)\n // to each decrypted block\n\n for (wordIx = 0; wordIx < encrypted32.length; wordIx += 4) {\n // convert big-endian (network order) words into little-endian\n // (javascript order)\n encrypted0 = ntoh(encrypted32[wordIx]);\n encrypted1 = ntoh(encrypted32[wordIx + 1]);\n encrypted2 = ntoh(encrypted32[wordIx + 2]);\n encrypted3 = ntoh(encrypted32[wordIx + 3]); // decrypt the block\n\n decipher.decrypt(encrypted0, encrypted1, encrypted2, encrypted3, decrypted32, wordIx); // XOR with the IV, and restore network byte-order to obtain the\n // plaintext\n\n decrypted32[wordIx] = ntoh(decrypted32[wordIx] ^ init0);\n decrypted32[wordIx + 1] = ntoh(decrypted32[wordIx + 1] ^ init1);\n decrypted32[wordIx + 2] = ntoh(decrypted32[wordIx + 2] ^ init2);\n decrypted32[wordIx + 3] = ntoh(decrypted32[wordIx + 3] ^ init3); // setup the IV for the next round\n\n init0 = encrypted0;\n init1 = encrypted1;\n init2 = encrypted2;\n init3 = encrypted3;\n }\n return decrypted;\n };\n /**\n * The `Decrypter` class that manages decryption of AES\n * data through `AsyncStream` objects and the `decrypt`\n * function\n *\n * @param {Uint8Array} encrypted the encrypted bytes\n * @param {Uint32Array} key the bytes of the decryption key\n * @param {Uint32Array} initVector the initialization vector (IV) to\n * @param {Function} done the function to run when done\n * @class Decrypter\n */\n\n class Decrypter {\n constructor(encrypted, key, initVector, done) {\n const step = Decrypter.STEP;\n const encrypted32 = new Int32Array(encrypted.buffer);\n const decrypted = new Uint8Array(encrypted.byteLength);\n let i = 0;\n this.asyncStream_ = new AsyncStream(); // split up the encryption job and do the individual chunks asynchronously\n\n this.asyncStream_.push(this.decryptChunk_(encrypted32.subarray(i, i + step), key, initVector, decrypted));\n for (i = step; i < encrypted32.length; i += step) {\n initVector = new Uint32Array([ntoh(encrypted32[i - 4]), ntoh(encrypted32[i - 3]), ntoh(encrypted32[i - 2]), ntoh(encrypted32[i - 1])]);\n this.asyncStream_.push(this.decryptChunk_(encrypted32.subarray(i, i + step), key, initVector, decrypted));\n } // invoke the done() callback when everything is finished\n\n this.asyncStream_.push(function () {\n // remove pkcs#7 padding from the decrypted bytes\n done(null, unpad(decrypted));\n });\n }\n /**\n * a getter for step the maximum number of bytes to process at one time\n *\n * @return {number} the value of step 32000\n */\n\n static get STEP() {\n // 4 * 8000;\n return 32000;\n }\n /**\n * @private\n */\n\n decryptChunk_(encrypted, key, initVector, decrypted) {\n return function () {\n const bytes = decrypt(encrypted, key, initVector);\n decrypted.set(bytes, encrypted.byteOffset);\n };\n }\n }\n var commonjsGlobal = typeof globalThis !== 'undefined' ? globalThis : typeof window !== 'undefined' ? window : typeof global !== 'undefined' ? global : typeof self !== 'undefined' ? self : {};\n var win;\n if (typeof window !== \"undefined\") {\n win = window;\n } else if (typeof commonjsGlobal !== \"undefined\") {\n win = commonjsGlobal;\n } else if (typeof self !== \"undefined\") {\n win = self;\n } else {\n win = {};\n }\n var window_1 = win;\n var isArrayBufferView = function isArrayBufferView(obj) {\n if (ArrayBuffer.isView === 'function') {\n return ArrayBuffer.isView(obj);\n }\n return obj && obj.buffer instanceof ArrayBuffer;\n };\n var BigInt = window_1.BigInt || Number;\n [BigInt('0x1'), BigInt('0x100'), BigInt('0x10000'), BigInt('0x1000000'), BigInt('0x100000000'), BigInt('0x10000000000'), BigInt('0x1000000000000'), BigInt('0x100000000000000'), BigInt('0x10000000000000000')];\n (function () {\n var a = new Uint16Array([0xFFCC]);\n var b = new Uint8Array(a.buffer, a.byteOffset, a.byteLength);\n if (b[0] === 0xFF) {\n return 'big';\n }\n if (b[0] === 0xCC) {\n return 'little';\n }\n return 'unknown';\n })();\n /**\n * Creates an object for sending to a web worker modifying properties that are TypedArrays\n * into a new object with seperated properties for the buffer, byteOffset, and byteLength.\n *\n * @param {Object} message\n * Object of properties and values to send to the web worker\n * @return {Object}\n * Modified message with TypedArray values expanded\n * @function createTransferableMessage\n */\n\n const createTransferableMessage = function (message) {\n const transferable = {};\n Object.keys(message).forEach(key => {\n const value = message[key];\n if (isArrayBufferView(value)) {\n transferable[key] = {\n bytes: value.buffer,\n byteOffset: value.byteOffset,\n byteLength: value.byteLength\n };\n } else {\n transferable[key] = value;\n }\n });\n return transferable;\n };\n /* global self */\n\n /**\n * Our web worker interface so that things can talk to aes-decrypter\n * that will be running in a web worker. the scope is passed to this by\n * webworkify.\n */\n\n self.onmessage = function (event) {\n const data = event.data;\n const encrypted = new Uint8Array(data.encrypted.bytes, data.encrypted.byteOffset, data.encrypted.byteLength);\n const key = new Uint32Array(data.key.bytes, data.key.byteOffset, data.key.byteLength / 4);\n const iv = new Uint32Array(data.iv.bytes, data.iv.byteOffset, data.iv.byteLength / 4);\n /* eslint-disable no-new, handle-callback-err */\n\n new Decrypter(encrypted, key, iv, function (err, bytes) {\n self.postMessage(createTransferableMessage({\n source: data.source,\n decrypted: bytes\n }), [bytes.buffer]);\n });\n /* eslint-enable */\n };\n}));\nvar Decrypter = factory(workerCode);\n/* rollup-plugin-worker-factory end for worker!/home/runner/work/http-streaming/http-streaming/src/decrypter-worker.js */\n\n/**\n * Convert the properties of an HLS track into an audioTrackKind.\n *\n * @private\n */\n\nconst audioTrackKind_ = properties => {\n let kind = properties.default ? 'main' : 'alternative';\n if (properties.characteristics && properties.characteristics.indexOf('public.accessibility.describes-video') >= 0) {\n kind = 'main-desc';\n }\n return kind;\n};\n/**\n * Pause provided segment loader and playlist loader if active\n *\n * @param {SegmentLoader} segmentLoader\n * SegmentLoader to pause\n * @param {Object} mediaType\n * Active media type\n * @function stopLoaders\n */\n\nconst stopLoaders = (segmentLoader, mediaType) => {\n segmentLoader.abort();\n segmentLoader.pause();\n if (mediaType && mediaType.activePlaylistLoader) {\n mediaType.activePlaylistLoader.pause();\n mediaType.activePlaylistLoader = null;\n }\n};\n/**\n * Start loading provided segment loader and playlist loader\n *\n * @param {PlaylistLoader} playlistLoader\n * PlaylistLoader to start loading\n * @param {Object} mediaType\n * Active media type\n * @function startLoaders\n */\n\nconst startLoaders = (playlistLoader, mediaType) => {\n // Segment loader will be started after `loadedmetadata` or `loadedplaylist` from the\n // playlist loader\n mediaType.activePlaylistLoader = playlistLoader;\n playlistLoader.load();\n};\n/**\n * Returns a function to be called when the media group changes. It performs a\n * non-destructive (preserve the buffer) resync of the SegmentLoader. This is because a\n * change of group is merely a rendition switch of the same content at another encoding,\n * rather than a change of content, such as switching audio from English to Spanish.\n *\n * @param {string} type\n * MediaGroup type\n * @param {Object} settings\n * Object containing required information for media groups\n * @return {Function}\n * Handler for a non-destructive resync of SegmentLoader when the active media\n * group changes.\n * @function onGroupChanged\n */\n\nconst onGroupChanged = (type, settings) => () => {\n const {\n segmentLoaders: {\n [type]: segmentLoader,\n main: mainSegmentLoader\n },\n mediaTypes: {\n [type]: mediaType\n }\n } = settings;\n const activeTrack = mediaType.activeTrack();\n const activeGroup = mediaType.getActiveGroup();\n const previousActiveLoader = mediaType.activePlaylistLoader;\n const lastGroup = mediaType.lastGroup_; // the group did not change do nothing\n\n if (activeGroup && lastGroup && activeGroup.id === lastGroup.id) {\n return;\n }\n mediaType.lastGroup_ = activeGroup;\n mediaType.lastTrack_ = activeTrack;\n stopLoaders(segmentLoader, mediaType);\n if (!activeGroup || activeGroup.isMainPlaylist) {\n // there is no group active or active group is a main playlist and won't change\n return;\n }\n if (!activeGroup.playlistLoader) {\n if (previousActiveLoader) {\n // The previous group had a playlist loader but the new active group does not\n // this means we are switching from demuxed to muxed audio. In this case we want to\n // do a destructive reset of the main segment loader and not restart the audio\n // loaders.\n mainSegmentLoader.resetEverything();\n }\n return;\n } // Non-destructive resync\n\n segmentLoader.resyncLoader();\n startLoaders(activeGroup.playlistLoader, mediaType);\n};\nconst onGroupChanging = (type, settings) => () => {\n const {\n segmentLoaders: {\n [type]: segmentLoader\n },\n mediaTypes: {\n [type]: mediaType\n }\n } = settings;\n mediaType.lastGroup_ = null;\n segmentLoader.abort();\n segmentLoader.pause();\n};\n/**\n * Returns a function to be called when the media track changes. It performs a\n * destructive reset of the SegmentLoader to ensure we start loading as close to\n * currentTime as possible.\n *\n * @param {string} type\n * MediaGroup type\n * @param {Object} settings\n * Object containing required information for media groups\n * @return {Function}\n * Handler for a destructive reset of SegmentLoader when the active media\n * track changes.\n * @function onTrackChanged\n */\n\nconst onTrackChanged = (type, settings) => () => {\n const {\n mainPlaylistLoader,\n segmentLoaders: {\n [type]: segmentLoader,\n main: mainSegmentLoader\n },\n mediaTypes: {\n [type]: mediaType\n }\n } = settings;\n const activeTrack = mediaType.activeTrack();\n const activeGroup = mediaType.getActiveGroup();\n const previousActiveLoader = mediaType.activePlaylistLoader;\n const lastTrack = mediaType.lastTrack_; // track did not change, do nothing\n\n if (lastTrack && activeTrack && lastTrack.id === activeTrack.id) {\n return;\n }\n mediaType.lastGroup_ = activeGroup;\n mediaType.lastTrack_ = activeTrack;\n stopLoaders(segmentLoader, mediaType);\n if (!activeGroup) {\n // there is no group active so we do not want to restart loaders\n return;\n }\n if (activeGroup.isMainPlaylist) {\n // track did not change, do nothing\n if (!activeTrack || !lastTrack || activeTrack.id === lastTrack.id) {\n return;\n }\n const pc = settings.vhs.playlistController_;\n const newPlaylist = pc.selectPlaylist(); // media will not change do nothing\n\n if (pc.media() === newPlaylist) {\n return;\n }\n mediaType.logger_(`track change. Switching main audio from ${lastTrack.id} to ${activeTrack.id}`);\n mainPlaylistLoader.pause();\n mainSegmentLoader.resetEverything();\n pc.fastQualityChange_(newPlaylist);\n return;\n }\n if (type === 'AUDIO') {\n if (!activeGroup.playlistLoader) {\n // when switching from demuxed audio/video to muxed audio/video (noted by no\n // playlist loader for the audio group), we want to do a destructive reset of the\n // main segment loader and not restart the audio loaders\n mainSegmentLoader.setAudio(true); // don't have to worry about disabling the audio of the audio segment loader since\n // it should be stopped\n\n mainSegmentLoader.resetEverything();\n return;\n } // although the segment loader is an audio segment loader, call the setAudio\n // function to ensure it is prepared to re-append the init segment (or handle other\n // config changes)\n\n segmentLoader.setAudio(true);\n mainSegmentLoader.setAudio(false);\n }\n if (previousActiveLoader === activeGroup.playlistLoader) {\n // Nothing has actually changed. This can happen because track change events can fire\n // multiple times for a \"single\" change. One for enabling the new active track, and\n // one for disabling the track that was active\n startLoaders(activeGroup.playlistLoader, mediaType);\n return;\n }\n if (segmentLoader.track) {\n // For WebVTT, set the new text track in the segmentloader\n segmentLoader.track(activeTrack);\n } // destructive reset\n\n segmentLoader.resetEverything();\n startLoaders(activeGroup.playlistLoader, mediaType);\n};\nconst onError = {\n /**\n * Returns a function to be called when a SegmentLoader or PlaylistLoader encounters\n * an error.\n *\n * @param {string} type\n * MediaGroup type\n * @param {Object} settings\n * Object containing required information for media groups\n * @return {Function}\n * Error handler. Logs warning (or error if the playlist is excluded) to\n * console and switches back to default audio track.\n * @function onError.AUDIO\n */\n AUDIO: (type, settings) => () => {\n const {\n mediaTypes: {\n [type]: mediaType\n },\n excludePlaylist\n } = settings; // switch back to default audio track\n\n const activeTrack = mediaType.activeTrack();\n const activeGroup = mediaType.activeGroup();\n const id = (activeGroup.filter(group => group.default)[0] || activeGroup[0]).id;\n const defaultTrack = mediaType.tracks[id];\n if (activeTrack === defaultTrack) {\n // Default track encountered an error. All we can do now is exclude the current\n // rendition and hope another will switch audio groups\n excludePlaylist({\n error: {\n message: 'Problem encountered loading the default audio track.'\n }\n });\n return;\n }\n videojs.log.warn('Problem encountered loading the alternate audio track.' + 'Switching back to default.');\n for (const trackId in mediaType.tracks) {\n mediaType.tracks[trackId].enabled = mediaType.tracks[trackId] === defaultTrack;\n }\n mediaType.onTrackChanged();\n },\n /**\n * Returns a function to be called when a SegmentLoader or PlaylistLoader encounters\n * an error.\n *\n * @param {string} type\n * MediaGroup type\n * @param {Object} settings\n * Object containing required information for media groups\n * @return {Function}\n * Error handler. Logs warning to console and disables the active subtitle track\n * @function onError.SUBTITLES\n */\n SUBTITLES: (type, settings) => () => {\n const {\n mediaTypes: {\n [type]: mediaType\n }\n } = settings;\n videojs.log.warn('Problem encountered loading the subtitle track.' + 'Disabling subtitle track.');\n const track = mediaType.activeTrack();\n if (track) {\n track.mode = 'disabled';\n }\n mediaType.onTrackChanged();\n }\n};\nconst setupListeners = {\n /**\n * Setup event listeners for audio playlist loader\n *\n * @param {string} type\n * MediaGroup type\n * @param {PlaylistLoader|null} playlistLoader\n * PlaylistLoader to register listeners on\n * @param {Object} settings\n * Object containing required information for media groups\n * @function setupListeners.AUDIO\n */\n AUDIO: (type, playlistLoader, settings) => {\n if (!playlistLoader) {\n // no playlist loader means audio will be muxed with the video\n return;\n }\n const {\n tech,\n requestOptions,\n segmentLoaders: {\n [type]: segmentLoader\n }\n } = settings;\n playlistLoader.on('loadedmetadata', () => {\n const media = playlistLoader.media();\n segmentLoader.playlist(media, requestOptions); // if the video is already playing, or if this isn't a live video and preload\n // permits, start downloading segments\n\n if (!tech.paused() || media.endList && tech.preload() !== 'none') {\n segmentLoader.load();\n }\n });\n playlistLoader.on('loadedplaylist', () => {\n segmentLoader.playlist(playlistLoader.media(), requestOptions); // If the player isn't paused, ensure that the segment loader is running\n\n if (!tech.paused()) {\n segmentLoader.load();\n }\n });\n playlistLoader.on('error', onError[type](type, settings));\n },\n /**\n * Setup event listeners for subtitle playlist loader\n *\n * @param {string} type\n * MediaGroup type\n * @param {PlaylistLoader|null} playlistLoader\n * PlaylistLoader to register listeners on\n * @param {Object} settings\n * Object containing required information for media groups\n * @function setupListeners.SUBTITLES\n */\n SUBTITLES: (type, playlistLoader, settings) => {\n const {\n tech,\n requestOptions,\n segmentLoaders: {\n [type]: segmentLoader\n },\n mediaTypes: {\n [type]: mediaType\n }\n } = settings;\n playlistLoader.on('loadedmetadata', () => {\n const media = playlistLoader.media();\n segmentLoader.playlist(media, requestOptions);\n segmentLoader.track(mediaType.activeTrack()); // if the video is already playing, or if this isn't a live video and preload\n // permits, start downloading segments\n\n if (!tech.paused() || media.endList && tech.preload() !== 'none') {\n segmentLoader.load();\n }\n });\n playlistLoader.on('loadedplaylist', () => {\n segmentLoader.playlist(playlistLoader.media(), requestOptions); // If the player isn't paused, ensure that the segment loader is running\n\n if (!tech.paused()) {\n segmentLoader.load();\n }\n });\n playlistLoader.on('error', onError[type](type, settings));\n }\n};\nconst initialize = {\n /**\n * Setup PlaylistLoaders and AudioTracks for the audio groups\n *\n * @param {string} type\n * MediaGroup type\n * @param {Object} settings\n * Object containing required information for media groups\n * @function initialize.AUDIO\n */\n 'AUDIO': (type, settings) => {\n const {\n vhs,\n sourceType,\n segmentLoaders: {\n [type]: segmentLoader\n },\n requestOptions,\n main: {\n mediaGroups\n },\n mediaTypes: {\n [type]: {\n groups,\n tracks,\n logger_\n }\n },\n mainPlaylistLoader\n } = settings;\n const audioOnlyMain = isAudioOnly(mainPlaylistLoader.main); // force a default if we have none\n\n if (!mediaGroups[type] || Object.keys(mediaGroups[type]).length === 0) {\n mediaGroups[type] = {\n main: {\n default: {\n default: true\n }\n }\n };\n if (audioOnlyMain) {\n mediaGroups[type].main.default.playlists = mainPlaylistLoader.main.playlists;\n }\n }\n for (const groupId in mediaGroups[type]) {\n if (!groups[groupId]) {\n groups[groupId] = [];\n }\n for (const variantLabel in mediaGroups[type][groupId]) {\n let properties = mediaGroups[type][groupId][variantLabel];\n let playlistLoader;\n if (audioOnlyMain) {\n logger_(`AUDIO group '${groupId}' label '${variantLabel}' is a main playlist`);\n properties.isMainPlaylist = true;\n playlistLoader = null; // if vhs-json was provided as the source, and the media playlist was resolved,\n // use the resolved media playlist object\n } else if (sourceType === 'vhs-json' && properties.playlists) {\n playlistLoader = new PlaylistLoader(properties.playlists[0], vhs, requestOptions);\n } else if (properties.resolvedUri) {\n playlistLoader = new PlaylistLoader(properties.resolvedUri, vhs, requestOptions); // TODO: dash isn't the only type with properties.playlists\n // should we even have properties.playlists in this check.\n } else if (properties.playlists && sourceType === 'dash') {\n playlistLoader = new DashPlaylistLoader(properties.playlists[0], vhs, requestOptions, mainPlaylistLoader);\n } else {\n // no resolvedUri means the audio is muxed with the video when using this\n // audio track\n playlistLoader = null;\n }\n properties = merge({\n id: variantLabel,\n playlistLoader\n }, properties);\n setupListeners[type](type, properties.playlistLoader, settings);\n groups[groupId].push(properties);\n if (typeof tracks[variantLabel] === 'undefined') {\n const track = new videojs.AudioTrack({\n id: variantLabel,\n kind: audioTrackKind_(properties),\n enabled: false,\n language: properties.language,\n default: properties.default,\n label: variantLabel\n });\n tracks[variantLabel] = track;\n }\n }\n } // setup single error event handler for the segment loader\n\n segmentLoader.on('error', onError[type](type, settings));\n },\n /**\n * Setup PlaylistLoaders and TextTracks for the subtitle groups\n *\n * @param {string} type\n * MediaGroup type\n * @param {Object} settings\n * Object containing required information for media groups\n * @function initialize.SUBTITLES\n */\n 'SUBTITLES': (type, settings) => {\n const {\n tech,\n vhs,\n sourceType,\n segmentLoaders: {\n [type]: segmentLoader\n },\n requestOptions,\n main: {\n mediaGroups\n },\n mediaTypes: {\n [type]: {\n groups,\n tracks\n }\n },\n mainPlaylistLoader\n } = settings;\n for (const groupId in mediaGroups[type]) {\n if (!groups[groupId]) {\n groups[groupId] = [];\n }\n for (const variantLabel in mediaGroups[type][groupId]) {\n if (!vhs.options_.useForcedSubtitles && mediaGroups[type][groupId][variantLabel].forced) {\n // Subtitle playlists with the forced attribute are not selectable in Safari.\n // According to Apple's HLS Authoring Specification:\n // If content has forced subtitles and regular subtitles in a given language,\n // the regular subtitles track in that language MUST contain both the forced\n // subtitles and the regular subtitles for that language.\n // Because of this requirement and that Safari does not add forced subtitles,\n // forced subtitles are skipped here to maintain consistent experience across\n // all platforms\n continue;\n }\n let properties = mediaGroups[type][groupId][variantLabel];\n let playlistLoader;\n if (sourceType === 'hls') {\n playlistLoader = new PlaylistLoader(properties.resolvedUri, vhs, requestOptions);\n } else if (sourceType === 'dash') {\n const playlists = properties.playlists.filter(p => p.excludeUntil !== Infinity);\n if (!playlists.length) {\n return;\n }\n playlistLoader = new DashPlaylistLoader(properties.playlists[0], vhs, requestOptions, mainPlaylistLoader);\n } else if (sourceType === 'vhs-json') {\n playlistLoader = new PlaylistLoader(\n // if the vhs-json object included the media playlist, use the media playlist\n // as provided, otherwise use the resolved URI to load the playlist\n properties.playlists ? properties.playlists[0] : properties.resolvedUri, vhs, requestOptions);\n }\n properties = merge({\n id: variantLabel,\n playlistLoader\n }, properties);\n setupListeners[type](type, properties.playlistLoader, settings);\n groups[groupId].push(properties);\n if (typeof tracks[variantLabel] === 'undefined') {\n const track = tech.addRemoteTextTrack({\n id: variantLabel,\n kind: 'subtitles',\n default: properties.default && properties.autoselect,\n language: properties.language,\n label: variantLabel\n }, false).track;\n tracks[variantLabel] = track;\n }\n }\n } // setup single error event handler for the segment loader\n\n segmentLoader.on('error', onError[type](type, settings));\n },\n /**\n * Setup TextTracks for the closed-caption groups\n *\n * @param {String} type\n * MediaGroup type\n * @param {Object} settings\n * Object containing required information for media groups\n * @function initialize['CLOSED-CAPTIONS']\n */\n 'CLOSED-CAPTIONS': (type, settings) => {\n const {\n tech,\n main: {\n mediaGroups\n },\n mediaTypes: {\n [type]: {\n groups,\n tracks\n }\n }\n } = settings;\n for (const groupId in mediaGroups[type]) {\n if (!groups[groupId]) {\n groups[groupId] = [];\n }\n for (const variantLabel in mediaGroups[type][groupId]) {\n const properties = mediaGroups[type][groupId][variantLabel]; // Look for either 608 (CCn) or 708 (SERVICEn) caption services\n\n if (!/^(?:CC|SERVICE)/.test(properties.instreamId)) {\n continue;\n }\n const captionServices = tech.options_.vhs && tech.options_.vhs.captionServices || {};\n let newProps = {\n label: variantLabel,\n language: properties.language,\n instreamId: properties.instreamId,\n default: properties.default && properties.autoselect\n };\n if (captionServices[newProps.instreamId]) {\n newProps = merge(newProps, captionServices[newProps.instreamId]);\n }\n if (newProps.default === undefined) {\n delete newProps.default;\n } // No PlaylistLoader is required for Closed-Captions because the captions are\n // embedded within the video stream\n\n groups[groupId].push(merge({\n id: variantLabel\n }, properties));\n if (typeof tracks[variantLabel] === 'undefined') {\n const track = tech.addRemoteTextTrack({\n id: newProps.instreamId,\n kind: 'captions',\n default: newProps.default,\n language: newProps.language,\n label: newProps.label\n }, false).track;\n tracks[variantLabel] = track;\n }\n }\n }\n }\n};\nconst groupMatch = (list, media) => {\n for (let i = 0; i < list.length; i++) {\n if (playlistMatch(media, list[i])) {\n return true;\n }\n if (list[i].playlists && groupMatch(list[i].playlists, media)) {\n return true;\n }\n }\n return false;\n};\n/**\n * Returns a function used to get the active group of the provided type\n *\n * @param {string} type\n * MediaGroup type\n * @param {Object} settings\n * Object containing required information for media groups\n * @return {Function}\n * Function that returns the active media group for the provided type. Takes an\n * optional parameter {TextTrack} track. If no track is provided, a list of all\n * variants in the group, otherwise the variant corresponding to the provided\n * track is returned.\n * @function activeGroup\n */\n\nconst activeGroup = (type, settings) => track => {\n const {\n mainPlaylistLoader,\n mediaTypes: {\n [type]: {\n groups\n }\n }\n } = settings;\n const media = mainPlaylistLoader.media();\n if (!media) {\n return null;\n }\n let variants = null; // set to variants to main media active group\n\n if (media.attributes[type]) {\n variants = groups[media.attributes[type]];\n }\n const groupKeys = Object.keys(groups);\n if (!variants) {\n // find the mainPlaylistLoader media\n // that is in a media group if we are dealing\n // with audio only\n if (type === 'AUDIO' && groupKeys.length > 1 && isAudioOnly(settings.main)) {\n for (let i = 0; i < groupKeys.length; i++) {\n const groupPropertyList = groups[groupKeys[i]];\n if (groupMatch(groupPropertyList, media)) {\n variants = groupPropertyList;\n break;\n }\n } // use the main group if it exists\n } else if (groups.main) {\n variants = groups.main; // only one group, use that one\n } else if (groupKeys.length === 1) {\n variants = groups[groupKeys[0]];\n }\n }\n if (typeof track === 'undefined') {\n return variants;\n }\n if (track === null || !variants) {\n // An active track was specified so a corresponding group is expected. track === null\n // means no track is currently active so there is no corresponding group\n return null;\n }\n return variants.filter(props => props.id === track.id)[0] || null;\n};\nconst activeTrack = {\n /**\n * Returns a function used to get the active track of type provided\n *\n * @param {string} type\n * MediaGroup type\n * @param {Object} settings\n * Object containing required information for media groups\n * @return {Function}\n * Function that returns the active media track for the provided type. Returns\n * null if no track is active\n * @function activeTrack.AUDIO\n */\n AUDIO: (type, settings) => () => {\n const {\n mediaTypes: {\n [type]: {\n tracks\n }\n }\n } = settings;\n for (const id in tracks) {\n if (tracks[id].enabled) {\n return tracks[id];\n }\n }\n return null;\n },\n /**\n * Returns a function used to get the active track of type provided\n *\n * @param {string} type\n * MediaGroup type\n * @param {Object} settings\n * Object containing required information for media groups\n * @return {Function}\n * Function that returns the active media track for the provided type. Returns\n * null if no track is active\n * @function activeTrack.SUBTITLES\n */\n SUBTITLES: (type, settings) => () => {\n const {\n mediaTypes: {\n [type]: {\n tracks\n }\n }\n } = settings;\n for (const id in tracks) {\n if (tracks[id].mode === 'showing' || tracks[id].mode === 'hidden') {\n return tracks[id];\n }\n }\n return null;\n }\n};\nconst getActiveGroup = (type, {\n mediaTypes\n}) => () => {\n const activeTrack_ = mediaTypes[type].activeTrack();\n if (!activeTrack_) {\n return null;\n }\n return mediaTypes[type].activeGroup(activeTrack_);\n};\n/**\n * Setup PlaylistLoaders and Tracks for media groups (Audio, Subtitles,\n * Closed-Captions) specified in the main manifest.\n *\n * @param {Object} settings\n * Object containing required information for setting up the media groups\n * @param {Tech} settings.tech\n * The tech of the player\n * @param {Object} settings.requestOptions\n * XHR request options used by the segment loaders\n * @param {PlaylistLoader} settings.mainPlaylistLoader\n * PlaylistLoader for the main source\n * @param {VhsHandler} settings.vhs\n * VHS SourceHandler\n * @param {Object} settings.main\n * The parsed main manifest\n * @param {Object} settings.mediaTypes\n * Object to store the loaders, tracks, and utility methods for each media type\n * @param {Function} settings.excludePlaylist\n * Excludes the current rendition and forces a rendition switch.\n * @function setupMediaGroups\n */\n\nconst setupMediaGroups = settings => {\n ['AUDIO', 'SUBTITLES', 'CLOSED-CAPTIONS'].forEach(type => {\n initialize[type](type, settings);\n });\n const {\n mediaTypes,\n mainPlaylistLoader,\n tech,\n vhs,\n segmentLoaders: {\n ['AUDIO']: audioSegmentLoader,\n main: mainSegmentLoader\n }\n } = settings; // setup active group and track getters and change event handlers\n\n ['AUDIO', 'SUBTITLES'].forEach(type => {\n mediaTypes[type].activeGroup = activeGroup(type, settings);\n mediaTypes[type].activeTrack = activeTrack[type](type, settings);\n mediaTypes[type].onGroupChanged = onGroupChanged(type, settings);\n mediaTypes[type].onGroupChanging = onGroupChanging(type, settings);\n mediaTypes[type].onTrackChanged = onTrackChanged(type, settings);\n mediaTypes[type].getActiveGroup = getActiveGroup(type, settings);\n }); // DO NOT enable the default subtitle or caption track.\n // DO enable the default audio track\n\n const audioGroup = mediaTypes.AUDIO.activeGroup();\n if (audioGroup) {\n const groupId = (audioGroup.filter(group => group.default)[0] || audioGroup[0]).id;\n mediaTypes.AUDIO.tracks[groupId].enabled = true;\n mediaTypes.AUDIO.onGroupChanged();\n mediaTypes.AUDIO.onTrackChanged();\n const activeAudioGroup = mediaTypes.AUDIO.getActiveGroup(); // a similar check for handling setAudio on each loader is run again each time the\n // track is changed, but needs to be handled here since the track may not be considered\n // changed on the first call to onTrackChanged\n\n if (!activeAudioGroup.playlistLoader) {\n // either audio is muxed with video or the stream is audio only\n mainSegmentLoader.setAudio(true);\n } else {\n // audio is demuxed\n mainSegmentLoader.setAudio(false);\n audioSegmentLoader.setAudio(true);\n }\n }\n mainPlaylistLoader.on('mediachange', () => {\n ['AUDIO', 'SUBTITLES'].forEach(type => mediaTypes[type].onGroupChanged());\n });\n mainPlaylistLoader.on('mediachanging', () => {\n ['AUDIO', 'SUBTITLES'].forEach(type => mediaTypes[type].onGroupChanging());\n }); // custom audio track change event handler for usage event\n\n const onAudioTrackChanged = () => {\n mediaTypes.AUDIO.onTrackChanged();\n tech.trigger({\n type: 'usage',\n name: 'vhs-audio-change'\n });\n };\n tech.audioTracks().addEventListener('change', onAudioTrackChanged);\n tech.remoteTextTracks().addEventListener('change', mediaTypes.SUBTITLES.onTrackChanged);\n vhs.on('dispose', () => {\n tech.audioTracks().removeEventListener('change', onAudioTrackChanged);\n tech.remoteTextTracks().removeEventListener('change', mediaTypes.SUBTITLES.onTrackChanged);\n }); // clear existing audio tracks and add the ones we just created\n\n tech.clearTracks('audio');\n for (const id in mediaTypes.AUDIO.tracks) {\n tech.audioTracks().addTrack(mediaTypes.AUDIO.tracks[id]);\n }\n};\n/**\n * Creates skeleton object used to store the loaders, tracks, and utility methods for each\n * media type\n *\n * @return {Object}\n * Object to store the loaders, tracks, and utility methods for each media type\n * @function createMediaTypes\n */\n\nconst createMediaTypes = () => {\n const mediaTypes = {};\n ['AUDIO', 'SUBTITLES', 'CLOSED-CAPTIONS'].forEach(type => {\n mediaTypes[type] = {\n groups: {},\n tracks: {},\n activePlaylistLoader: null,\n activeGroup: noop,\n activeTrack: noop,\n getActiveGroup: noop,\n onGroupChanged: noop,\n onTrackChanged: noop,\n lastTrack_: null,\n logger_: logger(`MediaGroups[${type}]`)\n };\n });\n return mediaTypes;\n};\n\n/**\n * A utility class for setting properties and maintaining the state of the content steering manifest.\n *\n * Content Steering manifest format:\n * VERSION: number (required) currently only version 1 is supported.\n * TTL: number in seconds (optional) until the next content steering manifest reload.\n * RELOAD-URI: string (optional) uri to fetch the next content steering manifest.\n * SERVICE-LOCATION-PRIORITY or PATHWAY-PRIORITY a non empty array of unique string values.\n * PATHWAY-CLONES: array (optional) (HLS only) pathway clone objects to copy from other playlists.\n */\n\nclass SteeringManifest {\n constructor() {\n this.priority_ = [];\n this.pathwayClones_ = new Map();\n }\n set version(number) {\n // Only version 1 is currently supported for both DASH and HLS.\n if (number === 1) {\n this.version_ = number;\n }\n }\n set ttl(seconds) {\n // TTL = time-to-live, default = 300 seconds.\n this.ttl_ = seconds || 300;\n }\n set reloadUri(uri) {\n if (uri) {\n // reload URI can be relative to the previous reloadUri.\n this.reloadUri_ = resolveUrl(this.reloadUri_, uri);\n }\n }\n set priority(array) {\n // priority must be non-empty and unique values.\n if (array && array.length) {\n this.priority_ = array;\n }\n }\n set pathwayClones(array) {\n // pathwayClones must be non-empty.\n if (array && array.length) {\n this.pathwayClones_ = new Map(array.map(clone => [clone.ID, clone]));\n }\n }\n get version() {\n return this.version_;\n }\n get ttl() {\n return this.ttl_;\n }\n get reloadUri() {\n return this.reloadUri_;\n }\n get priority() {\n return this.priority_;\n }\n get pathwayClones() {\n return this.pathwayClones_;\n }\n}\n/**\n * This class represents a content steering manifest and associated state. See both HLS and DASH specifications.\n * HLS: https://developer.apple.com/streaming/HLSContentSteeringSpecification.pdf and\n * https://datatracker.ietf.org/doc/draft-pantos-hls-rfc8216bis/ section 4.4.6.6.\n * DASH: https://dashif.org/docs/DASH-IF-CTS-00XX-Content-Steering-Community-Review.pdf\n *\n * @param {function} xhr for making a network request from the browser.\n * @param {function} bandwidth for fetching the current bandwidth from the main segment loader.\n */\n\nclass ContentSteeringController extends videojs.EventTarget {\n constructor(xhr, bandwidth) {\n super();\n this.currentPathway = null;\n this.defaultPathway = null;\n this.queryBeforeStart = false;\n this.availablePathways_ = new Set();\n this.steeringManifest = new SteeringManifest();\n this.proxyServerUrl_ = null;\n this.manifestType_ = null;\n this.ttlTimeout_ = null;\n this.request_ = null;\n this.currentPathwayClones = new Map();\n this.nextPathwayClones = new Map();\n this.excludedSteeringManifestURLs = new Set();\n this.logger_ = logger('Content Steering');\n this.xhr_ = xhr;\n this.getBandwidth_ = bandwidth;\n }\n /**\n * Assigns the content steering tag properties to the steering controller\n *\n * @param {string} baseUrl the baseURL from the main manifest for resolving the steering manifest url\n * @param {Object} steeringTag the content steering tag from the main manifest\n */\n\n assignTagProperties(baseUrl, steeringTag) {\n this.manifestType_ = steeringTag.serverUri ? 'HLS' : 'DASH'; // serverUri is HLS serverURL is DASH\n\n const steeringUri = steeringTag.serverUri || steeringTag.serverURL;\n if (!steeringUri) {\n this.logger_(`steering manifest URL is ${steeringUri}, cannot request steering manifest.`);\n this.trigger('error');\n return;\n } // Content steering manifests can be encoded as a data URI. We can decode, parse and return early if that's the case.\n\n if (steeringUri.startsWith('data:')) {\n this.decodeDataUriManifest_(steeringUri.substring(steeringUri.indexOf(',') + 1));\n return;\n } // reloadUri is the resolution of the main manifest URL and steering URL.\n\n this.steeringManifest.reloadUri = resolveUrl(baseUrl, steeringUri); // pathwayId is HLS defaultServiceLocation is DASH\n\n this.defaultPathway = steeringTag.pathwayId || steeringTag.defaultServiceLocation; // currently only DASH supports the following properties on tags.\n\n this.queryBeforeStart = steeringTag.queryBeforeStart;\n this.proxyServerUrl_ = steeringTag.proxyServerURL; // trigger a steering event if we have a pathway from the content steering tag.\n // this tells VHS which segment pathway to start with.\n // If queryBeforeStart is true we need to wait for the steering manifest response.\n\n if (this.defaultPathway && !this.queryBeforeStart) {\n this.trigger('content-steering');\n }\n }\n /**\n * Requests the content steering manifest and parse the response. This should only be called after\n * assignTagProperties was called with a content steering tag.\n *\n * @param {string} initialUri The optional uri to make the request with.\n * If set, the request should be made with exactly what is passed in this variable.\n * This scenario should only happen once on initalization.\n */\n\n requestSteeringManifest(initial) {\n const reloadUri = this.steeringManifest.reloadUri;\n if (!reloadUri) {\n return;\n } // We currently don't support passing MPD query parameters directly to the content steering URL as this requires\n // ExtUrlQueryInfo tag support. See the DASH content steering spec section 8.1.\n // This request URI accounts for manifest URIs that have been excluded.\n\n const uri = initial ? reloadUri : this.getRequestURI(reloadUri); // If there are no valid manifest URIs, we should stop content steering.\n\n if (!uri) {\n this.logger_('No valid content steering manifest URIs. Stopping content steering.');\n this.trigger('error');\n this.dispose();\n return;\n }\n const metadata = {\n contentSteeringInfo: {\n uri\n }\n };\n this.trigger({\n type: 'contentsteeringloadstart',\n metadata\n });\n this.request_ = this.xhr_({\n uri,\n requestType: 'content-steering-manifest'\n }, (error, errorInfo) => {\n if (error) {\n // If the client receives HTTP 410 Gone in response to a manifest request,\n // it MUST NOT issue another request for that URI for the remainder of the\n // playback session. It MAY continue to use the most-recently obtained set\n // of Pathways.\n if (errorInfo.status === 410) {\n this.logger_(`manifest request 410 ${error}.`);\n this.logger_(`There will be no more content steering requests to ${uri} this session.`);\n this.excludedSteeringManifestURLs.add(uri);\n return;\n } // If the client receives HTTP 429 Too Many Requests with a Retry-After\n // header in response to a manifest request, it SHOULD wait until the time\n // specified by the Retry-After header to reissue the request.\n\n if (errorInfo.status === 429) {\n const retrySeconds = errorInfo.responseHeaders['retry-after'];\n this.logger_(`manifest request 429 ${error}.`);\n this.logger_(`content steering will retry in ${retrySeconds} seconds.`);\n this.startTTLTimeout_(parseInt(retrySeconds, 10));\n return;\n } // If the Steering Manifest cannot be loaded and parsed correctly, the\n // client SHOULD continue to use the previous values and attempt to reload\n // it after waiting for the previously-specified TTL (or 5 minutes if\n // none).\n\n this.logger_(`manifest failed to load ${error}.`);\n this.startTTLTimeout_();\n return;\n }\n this.trigger({\n type: 'contentsteeringloadcomplete',\n metadata\n });\n let steeringManifestJson;\n try {\n steeringManifestJson = JSON.parse(this.request_.responseText);\n } catch (parseError) {\n const errorMetadata = {\n errorType: videojs.Error.StreamingContentSteeringParserError,\n error: parseError\n };\n this.trigger({\n type: 'error',\n metadata: errorMetadata\n });\n }\n this.assignSteeringProperties_(steeringManifestJson);\n const parsedMetadata = {\n contentSteeringInfo: metadata.contentSteeringInfo,\n contentSteeringManifest: {\n version: this.steeringManifest.version,\n reloadUri: this.steeringManifest.reloadUri,\n priority: this.steeringManifest.priority\n }\n };\n this.trigger({\n type: 'contentsteeringparsed',\n metadata: parsedMetadata\n });\n this.startTTLTimeout_();\n });\n }\n /**\n * Set the proxy server URL and add the steering manifest url as a URI encoded parameter.\n *\n * @param {string} steeringUrl the steering manifest url\n * @return the steering manifest url to a proxy server with all parameters set\n */\n\n setProxyServerUrl_(steeringUrl) {\n const steeringUrlObject = new window$1.URL(steeringUrl);\n const proxyServerUrlObject = new window$1.URL(this.proxyServerUrl_);\n proxyServerUrlObject.searchParams.set('url', encodeURI(steeringUrlObject.toString()));\n return this.setSteeringParams_(proxyServerUrlObject.toString());\n }\n /**\n * Decodes and parses the data uri encoded steering manifest\n *\n * @param {string} dataUri the data uri to be decoded and parsed.\n */\n\n decodeDataUriManifest_(dataUri) {\n const steeringManifestJson = JSON.parse(window$1.atob(dataUri));\n this.assignSteeringProperties_(steeringManifestJson);\n }\n /**\n * Set the HLS or DASH content steering manifest request query parameters. For example:\n * _HLS_pathway=\"\" and _HLS_throughput=\n * _DASH_pathway and _DASH_throughput\n *\n * @param {string} uri to add content steering server parameters to.\n * @return a new uri as a string with the added steering query parameters.\n */\n\n setSteeringParams_(url) {\n const urlObject = new window$1.URL(url);\n const path = this.getPathway();\n const networkThroughput = this.getBandwidth_();\n if (path) {\n const pathwayKey = `_${this.manifestType_}_pathway`;\n urlObject.searchParams.set(pathwayKey, path);\n }\n if (networkThroughput) {\n const throughputKey = `_${this.manifestType_}_throughput`;\n urlObject.searchParams.set(throughputKey, networkThroughput);\n }\n return urlObject.toString();\n }\n /**\n * Assigns the current steering manifest properties and to the SteeringManifest object\n *\n * @param {Object} steeringJson the raw JSON steering manifest\n */\n\n assignSteeringProperties_(steeringJson) {\n this.steeringManifest.version = steeringJson.VERSION;\n if (!this.steeringManifest.version) {\n this.logger_(`manifest version is ${steeringJson.VERSION}, which is not supported.`);\n this.trigger('error');\n return;\n }\n this.steeringManifest.ttl = steeringJson.TTL;\n this.steeringManifest.reloadUri = steeringJson['RELOAD-URI']; // HLS = PATHWAY-PRIORITY required. DASH = SERVICE-LOCATION-PRIORITY optional\n\n this.steeringManifest.priority = steeringJson['PATHWAY-PRIORITY'] || steeringJson['SERVICE-LOCATION-PRIORITY']; // Pathway clones to be created/updated in HLS.\n // See section 7.2 https://datatracker.ietf.org/doc/draft-pantos-hls-rfc8216bis/\n\n this.steeringManifest.pathwayClones = steeringJson['PATHWAY-CLONES'];\n this.nextPathwayClones = this.steeringManifest.pathwayClones; // 1. apply first pathway from the array.\n // 2. if first pathway doesn't exist in manifest, try next pathway.\n // a. if all pathways are exhausted, ignore the steering manifest priority.\n // 3. if segments fail from an established pathway, try all variants/renditions, then exclude the failed pathway.\n // a. exclude a pathway for a minimum of the last TTL duration. Meaning, from the next steering response,\n // the excluded pathway will be ignored.\n // See excludePathway usage in excludePlaylist().\n // If there are no available pathways, we need to stop content steering.\n\n if (!this.availablePathways_.size) {\n this.logger_('There are no available pathways for content steering. Ending content steering.');\n this.trigger('error');\n this.dispose();\n }\n const chooseNextPathway = pathwaysByPriority => {\n for (const path of pathwaysByPriority) {\n if (this.availablePathways_.has(path)) {\n return path;\n }\n } // If no pathway matches, ignore the manifest and choose the first available.\n\n return [...this.availablePathways_][0];\n };\n const nextPathway = chooseNextPathway(this.steeringManifest.priority);\n if (this.currentPathway !== nextPathway) {\n this.currentPathway = nextPathway;\n this.trigger('content-steering');\n }\n }\n /**\n * Returns the pathway to use for steering decisions\n *\n * @return {string} returns the current pathway or the default\n */\n\n getPathway() {\n return this.currentPathway || this.defaultPathway;\n }\n /**\n * Chooses the manifest request URI based on proxy URIs and server URLs.\n * Also accounts for exclusion on certain manifest URIs.\n *\n * @param {string} reloadUri the base uri before parameters\n *\n * @return {string} the final URI for the request to the manifest server.\n */\n\n getRequestURI(reloadUri) {\n if (!reloadUri) {\n return null;\n }\n const isExcluded = uri => this.excludedSteeringManifestURLs.has(uri);\n if (this.proxyServerUrl_) {\n const proxyURI = this.setProxyServerUrl_(reloadUri);\n if (!isExcluded(proxyURI)) {\n return proxyURI;\n }\n }\n const steeringURI = this.setSteeringParams_(reloadUri);\n if (!isExcluded(steeringURI)) {\n return steeringURI;\n } // Return nothing if all valid manifest URIs are excluded.\n\n return null;\n }\n /**\n * Start the timeout for re-requesting the steering manifest at the TTL interval.\n *\n * @param {number} ttl time in seconds of the timeout. Defaults to the\n * ttl interval in the steering manifest\n */\n\n startTTLTimeout_(ttl = this.steeringManifest.ttl) {\n // 300 (5 minutes) is the default value.\n const ttlMS = ttl * 1000;\n this.ttlTimeout_ = window$1.setTimeout(() => {\n this.requestSteeringManifest();\n }, ttlMS);\n }\n /**\n * Clear the TTL timeout if necessary.\n */\n\n clearTTLTimeout_() {\n window$1.clearTimeout(this.ttlTimeout_);\n this.ttlTimeout_ = null;\n }\n /**\n * aborts any current steering xhr and sets the current request object to null\n */\n\n abort() {\n if (this.request_) {\n this.request_.abort();\n }\n this.request_ = null;\n }\n /**\n * aborts steering requests clears the ttl timeout and resets all properties.\n */\n\n dispose() {\n this.off('content-steering');\n this.off('error');\n this.abort();\n this.clearTTLTimeout_();\n this.currentPathway = null;\n this.defaultPathway = null;\n this.queryBeforeStart = null;\n this.proxyServerUrl_ = null;\n this.manifestType_ = null;\n this.ttlTimeout_ = null;\n this.request_ = null;\n this.excludedSteeringManifestURLs = new Set();\n this.availablePathways_ = new Set();\n this.steeringManifest = new SteeringManifest();\n }\n /**\n * adds a pathway to the available pathways set\n *\n * @param {string} pathway the pathway string to add\n */\n\n addAvailablePathway(pathway) {\n if (pathway) {\n this.availablePathways_.add(pathway);\n }\n }\n /**\n * Clears all pathways from the available pathways set\n */\n\n clearAvailablePathways() {\n this.availablePathways_.clear();\n }\n /**\n * Removes a pathway from the available pathways set.\n */\n\n excludePathway(pathway) {\n return this.availablePathways_.delete(pathway);\n }\n /**\n * Checks the refreshed DASH manifest content steering tag for changes.\n *\n * @param {string} baseURL new steering tag on DASH manifest refresh\n * @param {Object} newTag the new tag to check for changes\n * @return a true or false whether the new tag has different values\n */\n\n didDASHTagChange(baseURL, newTag) {\n return !newTag && this.steeringManifest.reloadUri || newTag && (resolveUrl(baseURL, newTag.serverURL) !== this.steeringManifest.reloadUri || newTag.defaultServiceLocation !== this.defaultPathway || newTag.queryBeforeStart !== this.queryBeforeStart || newTag.proxyServerURL !== this.proxyServerUrl_);\n }\n getAvailablePathways() {\n return this.availablePathways_;\n }\n}\nconst ABORT_EARLY_EXCLUSION_SECONDS = 10;\nlet Vhs$1; // SegmentLoader stats that need to have each loader's\n// values summed to calculate the final value\n\nconst loaderStats = ['mediaRequests', 'mediaRequestsAborted', 'mediaRequestsTimedout', 'mediaRequestsErrored', 'mediaTransferDuration', 'mediaBytesTransferred', 'mediaAppends'];\nconst sumLoaderStat = function (stat) {\n return this.audioSegmentLoader_[stat] + this.mainSegmentLoader_[stat];\n};\nconst shouldSwitchToMedia = function ({\n currentPlaylist,\n buffered,\n currentTime,\n nextPlaylist,\n bufferLowWaterLine,\n bufferHighWaterLine,\n duration,\n bufferBasedABR,\n log\n}) {\n // we have no other playlist to switch to\n if (!nextPlaylist) {\n videojs.log.warn('We received no playlist to switch to. Please check your stream.');\n return false;\n }\n const sharedLogLine = `allowing switch ${currentPlaylist && currentPlaylist.id || 'null'} -> ${nextPlaylist.id}`;\n if (!currentPlaylist) {\n log(`${sharedLogLine} as current playlist is not set`);\n return true;\n } // no need to switch if playlist is the same\n\n if (nextPlaylist.id === currentPlaylist.id) {\n return false;\n } // determine if current time is in a buffered range.\n\n const isBuffered = Boolean(findRange(buffered, currentTime).length); // If the playlist is live, then we want to not take low water line into account.\n // This is because in LIVE, the player plays 3 segments from the end of the\n // playlist, and if `BUFFER_LOW_WATER_LINE` is greater than the duration availble\n // in those segments, a viewer will never experience a rendition upswitch.\n\n if (!currentPlaylist.endList) {\n // For LLHLS live streams, don't switch renditions before playback has started, as it almost\n // doubles the time to first playback.\n if (!isBuffered && typeof currentPlaylist.partTargetDuration === 'number') {\n log(`not ${sharedLogLine} as current playlist is live llhls, but currentTime isn't in buffered.`);\n return false;\n }\n log(`${sharedLogLine} as current playlist is live`);\n return true;\n }\n const forwardBuffer = timeAheadOf(buffered, currentTime);\n const maxBufferLowWaterLine = bufferBasedABR ? Config.EXPERIMENTAL_MAX_BUFFER_LOW_WATER_LINE : Config.MAX_BUFFER_LOW_WATER_LINE; // For the same reason as LIVE, we ignore the low water line when the VOD\n // duration is below the max potential low water line\n\n if (duration < maxBufferLowWaterLine) {\n log(`${sharedLogLine} as duration < max low water line (${duration} < ${maxBufferLowWaterLine})`);\n return true;\n }\n const nextBandwidth = nextPlaylist.attributes.BANDWIDTH;\n const currBandwidth = currentPlaylist.attributes.BANDWIDTH; // when switching down, if our buffer is lower than the high water line,\n // we can switch down\n\n if (nextBandwidth < currBandwidth && (!bufferBasedABR || forwardBuffer < bufferHighWaterLine)) {\n let logLine = `${sharedLogLine} as next bandwidth < current bandwidth (${nextBandwidth} < ${currBandwidth})`;\n if (bufferBasedABR) {\n logLine += ` and forwardBuffer < bufferHighWaterLine (${forwardBuffer} < ${bufferHighWaterLine})`;\n }\n log(logLine);\n return true;\n } // and if our buffer is higher than the low water line,\n // we can switch up\n\n if ((!bufferBasedABR || nextBandwidth > currBandwidth) && forwardBuffer >= bufferLowWaterLine) {\n let logLine = `${sharedLogLine} as forwardBuffer >= bufferLowWaterLine (${forwardBuffer} >= ${bufferLowWaterLine})`;\n if (bufferBasedABR) {\n logLine += ` and next bandwidth > current bandwidth (${nextBandwidth} > ${currBandwidth})`;\n }\n log(logLine);\n return true;\n }\n log(`not ${sharedLogLine} as no switching criteria met`);\n return false;\n};\n/**\n * the main playlist controller controller all interactons\n * between playlists and segmentloaders. At this time this mainly\n * involves a main playlist and a series of audio playlists\n * if they are available\n *\n * @class PlaylistController\n * @extends videojs.EventTarget\n */\n\nclass PlaylistController extends videojs.EventTarget {\n constructor(options) {\n super();\n const {\n src,\n withCredentials,\n tech,\n bandwidth,\n externVhs,\n useCueTags,\n playlistExclusionDuration,\n enableLowInitialPlaylist,\n sourceType,\n cacheEncryptionKeys,\n bufferBasedABR,\n leastPixelDiffSelector,\n captionServices\n } = options;\n if (!src) {\n throw new Error('A non-empty playlist URL or JSON manifest string is required');\n }\n let {\n maxPlaylistRetries\n } = options;\n if (maxPlaylistRetries === null || typeof maxPlaylistRetries === 'undefined') {\n maxPlaylistRetries = Infinity;\n }\n Vhs$1 = externVhs;\n this.bufferBasedABR = Boolean(bufferBasedABR);\n this.leastPixelDiffSelector = Boolean(leastPixelDiffSelector);\n this.withCredentials = withCredentials;\n this.tech_ = tech;\n this.vhs_ = tech.vhs;\n this.player_ = options.player_;\n this.sourceType_ = sourceType;\n this.useCueTags_ = useCueTags;\n this.playlistExclusionDuration = playlistExclusionDuration;\n this.maxPlaylistRetries = maxPlaylistRetries;\n this.enableLowInitialPlaylist = enableLowInitialPlaylist;\n if (this.useCueTags_) {\n this.cueTagsTrack_ = this.tech_.addTextTrack('metadata', 'ad-cues');\n this.cueTagsTrack_.inBandMetadataTrackDispatchType = '';\n }\n this.requestOptions_ = {\n withCredentials,\n maxPlaylistRetries,\n timeout: null\n };\n this.on('error', this.pauseLoading);\n this.mediaTypes_ = createMediaTypes();\n this.mediaSource = new window$1.MediaSource();\n this.handleDurationChange_ = this.handleDurationChange_.bind(this);\n this.handleSourceOpen_ = this.handleSourceOpen_.bind(this);\n this.handleSourceEnded_ = this.handleSourceEnded_.bind(this);\n this.mediaSource.addEventListener('durationchange', this.handleDurationChange_); // load the media source into the player\n\n this.mediaSource.addEventListener('sourceopen', this.handleSourceOpen_);\n this.mediaSource.addEventListener('sourceended', this.handleSourceEnded_); // we don't have to handle sourceclose since dispose will handle termination of\n // everything, and the MediaSource should not be detached without a proper disposal\n\n this.seekable_ = createTimeRanges();\n this.hasPlayed_ = false;\n this.syncController_ = new SyncController(options);\n this.segmentMetadataTrack_ = tech.addRemoteTextTrack({\n kind: 'metadata',\n label: 'segment-metadata'\n }, false).track;\n this.decrypter_ = new Decrypter();\n this.sourceUpdater_ = new SourceUpdater(this.mediaSource);\n this.inbandTextTracks_ = {};\n this.timelineChangeController_ = new TimelineChangeController();\n this.keyStatusMap_ = new Map();\n const segmentLoaderSettings = {\n vhs: this.vhs_,\n parse708captions: options.parse708captions,\n useDtsForTimestampOffset: options.useDtsForTimestampOffset,\n captionServices,\n mediaSource: this.mediaSource,\n currentTime: this.tech_.currentTime.bind(this.tech_),\n seekable: () => this.seekable(),\n seeking: () => this.tech_.seeking(),\n duration: () => this.duration(),\n hasPlayed: () => this.hasPlayed_,\n goalBufferLength: () => this.goalBufferLength(),\n bandwidth,\n syncController: this.syncController_,\n decrypter: this.decrypter_,\n sourceType: this.sourceType_,\n inbandTextTracks: this.inbandTextTracks_,\n cacheEncryptionKeys,\n sourceUpdater: this.sourceUpdater_,\n timelineChangeController: this.timelineChangeController_,\n exactManifestTimings: options.exactManifestTimings,\n addMetadataToTextTrack: this.addMetadataToTextTrack.bind(this)\n }; // The source type check not only determines whether a special DASH playlist loader\n // should be used, but also covers the case where the provided src is a vhs-json\n // manifest object (instead of a URL). In the case of vhs-json, the default\n // PlaylistLoader should be used.\n\n this.mainPlaylistLoader_ = this.sourceType_ === 'dash' ? new DashPlaylistLoader(src, this.vhs_, merge(this.requestOptions_, {\n addMetadataToTextTrack: this.addMetadataToTextTrack.bind(this)\n })) : new PlaylistLoader(src, this.vhs_, merge(this.requestOptions_, {\n addDateRangesToTextTrack: this.addDateRangesToTextTrack_.bind(this)\n }));\n this.setupMainPlaylistLoaderListeners_(); // setup segment loaders\n // combined audio/video or just video when alternate audio track is selected\n\n this.mainSegmentLoader_ = new SegmentLoader(merge(segmentLoaderSettings, {\n segmentMetadataTrack: this.segmentMetadataTrack_,\n loaderType: 'main'\n }), options); // alternate audio track\n\n this.audioSegmentLoader_ = new SegmentLoader(merge(segmentLoaderSettings, {\n loaderType: 'audio'\n }), options);\n this.subtitleSegmentLoader_ = new VTTSegmentLoader(merge(segmentLoaderSettings, {\n loaderType: 'vtt',\n featuresNativeTextTracks: this.tech_.featuresNativeTextTracks,\n loadVttJs: () => new Promise((resolve, reject) => {\n function onLoad() {\n tech.off('vttjserror', onError);\n resolve();\n }\n function onError() {\n tech.off('vttjsloaded', onLoad);\n reject();\n }\n tech.one('vttjsloaded', onLoad);\n tech.one('vttjserror', onError); // safe to call multiple times, script will be loaded only once:\n\n tech.addWebVttScript_();\n })\n }), options);\n const getBandwidth = () => {\n return this.mainSegmentLoader_.bandwidth;\n };\n this.contentSteeringController_ = new ContentSteeringController(this.vhs_.xhr, getBandwidth);\n this.setupSegmentLoaderListeners_();\n if (this.bufferBasedABR) {\n this.mainPlaylistLoader_.one('loadedplaylist', () => this.startABRTimer_());\n this.tech_.on('pause', () => this.stopABRTimer_());\n this.tech_.on('play', () => this.startABRTimer_());\n } // Create SegmentLoader stat-getters\n // mediaRequests_\n // mediaRequestsAborted_\n // mediaRequestsTimedout_\n // mediaRequestsErrored_\n // mediaTransferDuration_\n // mediaBytesTransferred_\n // mediaAppends_\n\n loaderStats.forEach(stat => {\n this[stat + '_'] = sumLoaderStat.bind(this, stat);\n });\n this.logger_ = logger('pc');\n this.triggeredFmp4Usage = false;\n if (this.tech_.preload() === 'none') {\n this.loadOnPlay_ = () => {\n this.loadOnPlay_ = null;\n this.mainPlaylistLoader_.load();\n };\n this.tech_.one('play', this.loadOnPlay_);\n } else {\n this.mainPlaylistLoader_.load();\n }\n this.timeToLoadedData__ = -1;\n this.mainAppendsToLoadedData__ = -1;\n this.audioAppendsToLoadedData__ = -1;\n const event = this.tech_.preload() === 'none' ? 'play' : 'loadstart'; // start the first frame timer on loadstart or play (for preload none)\n\n this.tech_.one(event, () => {\n const timeToLoadedDataStart = Date.now();\n this.tech_.one('loadeddata', () => {\n this.timeToLoadedData__ = Date.now() - timeToLoadedDataStart;\n this.mainAppendsToLoadedData__ = this.mainSegmentLoader_.mediaAppends;\n this.audioAppendsToLoadedData__ = this.audioSegmentLoader_.mediaAppends;\n });\n });\n }\n mainAppendsToLoadedData_() {\n return this.mainAppendsToLoadedData__;\n }\n audioAppendsToLoadedData_() {\n return this.audioAppendsToLoadedData__;\n }\n appendsToLoadedData_() {\n const main = this.mainAppendsToLoadedData_();\n const audio = this.audioAppendsToLoadedData_();\n if (main === -1 || audio === -1) {\n return -1;\n }\n return main + audio;\n }\n timeToLoadedData_() {\n return this.timeToLoadedData__;\n }\n /**\n * Run selectPlaylist and switch to the new playlist if we should\n *\n * @param {string} [reason=abr] a reason for why the ABR check is made\n * @private\n */\n\n checkABR_(reason = 'abr') {\n const nextPlaylist = this.selectPlaylist();\n if (nextPlaylist && this.shouldSwitchToMedia_(nextPlaylist)) {\n this.switchMedia_(nextPlaylist, reason);\n }\n }\n switchMedia_(playlist, cause, delay) {\n const oldMedia = this.media();\n const oldId = oldMedia && (oldMedia.id || oldMedia.uri);\n const newId = playlist && (playlist.id || playlist.uri);\n if (oldId && oldId !== newId) {\n this.logger_(`switch media ${oldId} -> ${newId} from ${cause}`);\n const metadata = {\n renditionInfo: {\n id: newId,\n bandwidth: playlist.attributes.BANDWIDTH,\n resolution: playlist.attributes.RESOLUTION,\n codecs: playlist.attributes.CODECS\n },\n cause\n };\n this.trigger({\n type: 'renditionselected',\n metadata\n });\n this.tech_.trigger({\n type: 'usage',\n name: `vhs-rendition-change-${cause}`\n });\n }\n this.mainPlaylistLoader_.media(playlist, delay);\n }\n /**\n * A function that ensures we switch our playlists inside of `mediaTypes`\n * to match the current `serviceLocation` provided by the contentSteering controller.\n * We want to check media types of `AUDIO`, `SUBTITLES`, and `CLOSED-CAPTIONS`.\n *\n * This should only be called on a DASH playback scenario while using content steering.\n * This is necessary due to differences in how media in HLS manifests are generally tied to\n * a video playlist, where in DASH that is not always the case.\n */\n\n switchMediaForDASHContentSteering_() {\n ['AUDIO', 'SUBTITLES', 'CLOSED-CAPTIONS'].forEach(type => {\n const mediaType = this.mediaTypes_[type];\n const activeGroup = mediaType ? mediaType.activeGroup() : null;\n const pathway = this.contentSteeringController_.getPathway();\n if (activeGroup && pathway) {\n // activeGroup can be an array or a single group\n const mediaPlaylists = activeGroup.length ? activeGroup[0].playlists : activeGroup.playlists;\n const dashMediaPlaylists = mediaPlaylists.filter(p => p.attributes.serviceLocation === pathway); // Switch the current active playlist to the correct CDN\n\n if (dashMediaPlaylists.length) {\n this.mediaTypes_[type].activePlaylistLoader.media(dashMediaPlaylists[0]);\n }\n }\n });\n }\n /**\n * Start a timer that periodically calls checkABR_\n *\n * @private\n */\n\n startABRTimer_() {\n this.stopABRTimer_();\n this.abrTimer_ = window$1.setInterval(() => this.checkABR_(), 250);\n }\n /**\n * Stop the timer that periodically calls checkABR_\n *\n * @private\n */\n\n stopABRTimer_() {\n // if we're scrubbing, we don't need to pause.\n // This getter will be added to Video.js in version 7.11.\n if (this.tech_.scrubbing && this.tech_.scrubbing()) {\n return;\n }\n window$1.clearInterval(this.abrTimer_);\n this.abrTimer_ = null;\n }\n /**\n * Get a list of playlists for the currently selected audio playlist\n *\n * @return {Array} the array of audio playlists\n */\n\n getAudioTrackPlaylists_() {\n const main = this.main();\n const defaultPlaylists = main && main.playlists || []; // if we don't have any audio groups then we can only\n // assume that the audio tracks are contained in main\n // playlist array, use that or an empty array.\n\n if (!main || !main.mediaGroups || !main.mediaGroups.AUDIO) {\n return defaultPlaylists;\n }\n const AUDIO = main.mediaGroups.AUDIO;\n const groupKeys = Object.keys(AUDIO);\n let track; // get the current active track\n\n if (Object.keys(this.mediaTypes_.AUDIO.groups).length) {\n track = this.mediaTypes_.AUDIO.activeTrack(); // or get the default track from main if mediaTypes_ isn't setup yet\n } else {\n // default group is `main` or just the first group.\n const defaultGroup = AUDIO.main || groupKeys.length && AUDIO[groupKeys[0]];\n for (const label in defaultGroup) {\n if (defaultGroup[label].default) {\n track = {\n label\n };\n break;\n }\n }\n } // no active track no playlists.\n\n if (!track) {\n return defaultPlaylists;\n }\n const playlists = []; // get all of the playlists that are possible for the\n // active track.\n\n for (const group in AUDIO) {\n if (AUDIO[group][track.label]) {\n const properties = AUDIO[group][track.label];\n if (properties.playlists && properties.playlists.length) {\n playlists.push.apply(playlists, properties.playlists);\n } else if (properties.uri) {\n playlists.push(properties);\n } else if (main.playlists.length) {\n // if an audio group does not have a uri\n // see if we have main playlists that use it as a group.\n // if we do then add those to the playlists list.\n for (let i = 0; i < main.playlists.length; i++) {\n const playlist = main.playlists[i];\n if (playlist.attributes && playlist.attributes.AUDIO && playlist.attributes.AUDIO === group) {\n playlists.push(playlist);\n }\n }\n }\n }\n }\n if (!playlists.length) {\n return defaultPlaylists;\n }\n return playlists;\n }\n /**\n * Register event handlers on the main playlist loader. A helper\n * function for construction time.\n *\n * @private\n */\n\n setupMainPlaylistLoaderListeners_() {\n this.mainPlaylistLoader_.on('loadedmetadata', () => {\n const media = this.mainPlaylistLoader_.media();\n const requestTimeout = media.targetDuration * 1.5 * 1000; // If we don't have any more available playlists, we don't want to\n // timeout the request.\n\n if (isLowestEnabledRendition(this.mainPlaylistLoader_.main, this.mainPlaylistLoader_.media())) {\n this.requestOptions_.timeout = 0;\n } else {\n this.requestOptions_.timeout = requestTimeout;\n } // if this isn't a live video and preload permits, start\n // downloading segments\n\n if (media.endList && this.tech_.preload() !== 'none') {\n this.mainSegmentLoader_.playlist(media, this.requestOptions_);\n this.mainSegmentLoader_.load();\n }\n setupMediaGroups({\n sourceType: this.sourceType_,\n segmentLoaders: {\n AUDIO: this.audioSegmentLoader_,\n SUBTITLES: this.subtitleSegmentLoader_,\n main: this.mainSegmentLoader_\n },\n tech: this.tech_,\n requestOptions: this.requestOptions_,\n mainPlaylistLoader: this.mainPlaylistLoader_,\n vhs: this.vhs_,\n main: this.main(),\n mediaTypes: this.mediaTypes_,\n excludePlaylist: this.excludePlaylist.bind(this)\n });\n this.triggerPresenceUsage_(this.main(), media);\n this.setupFirstPlay();\n if (!this.mediaTypes_.AUDIO.activePlaylistLoader || this.mediaTypes_.AUDIO.activePlaylistLoader.media()) {\n this.trigger('selectedinitialmedia');\n } else {\n // We must wait for the active audio playlist loader to\n // finish setting up before triggering this event so the\n // representations API and EME setup is correct\n this.mediaTypes_.AUDIO.activePlaylistLoader.one('loadedmetadata', () => {\n this.trigger('selectedinitialmedia');\n });\n }\n });\n this.mainPlaylistLoader_.on('loadedplaylist', () => {\n if (this.loadOnPlay_) {\n this.tech_.off('play', this.loadOnPlay_);\n }\n let updatedPlaylist = this.mainPlaylistLoader_.media();\n if (!updatedPlaylist) {\n // Add content steering listeners on first load and init.\n this.attachContentSteeringListeners_();\n this.initContentSteeringController_(); // exclude any variants that are not supported by the browser before selecting\n // an initial media as the playlist selectors do not consider browser support\n\n this.excludeUnsupportedVariants_();\n let selectedMedia;\n if (this.enableLowInitialPlaylist) {\n selectedMedia = this.selectInitialPlaylist();\n }\n if (!selectedMedia) {\n selectedMedia = this.selectPlaylist();\n }\n if (!selectedMedia || !this.shouldSwitchToMedia_(selectedMedia)) {\n return;\n }\n this.initialMedia_ = selectedMedia;\n this.switchMedia_(this.initialMedia_, 'initial'); // Under the standard case where a source URL is provided, loadedplaylist will\n // fire again since the playlist will be requested. In the case of vhs-json\n // (where the manifest object is provided as the source), when the media\n // playlist's `segments` list is already available, a media playlist won't be\n // requested, and loadedplaylist won't fire again, so the playlist handler must be\n // called on its own here.\n\n const haveJsonSource = this.sourceType_ === 'vhs-json' && this.initialMedia_.segments;\n if (!haveJsonSource) {\n return;\n }\n updatedPlaylist = this.initialMedia_;\n }\n this.handleUpdatedMediaPlaylist(updatedPlaylist);\n });\n this.mainPlaylistLoader_.on('error', () => {\n const error = this.mainPlaylistLoader_.error;\n this.excludePlaylist({\n playlistToExclude: error.playlist,\n error\n });\n });\n this.mainPlaylistLoader_.on('mediachanging', () => {\n this.mainSegmentLoader_.abort();\n this.mainSegmentLoader_.pause();\n });\n this.mainPlaylistLoader_.on('mediachange', () => {\n const media = this.mainPlaylistLoader_.media();\n const requestTimeout = media.targetDuration * 1.5 * 1000; // If we don't have any more available playlists, we don't want to\n // timeout the request.\n\n if (isLowestEnabledRendition(this.mainPlaylistLoader_.main, this.mainPlaylistLoader_.media())) {\n this.requestOptions_.timeout = 0;\n } else {\n this.requestOptions_.timeout = requestTimeout;\n }\n if (this.sourceType_ === 'dash') {\n // we don't want to re-request the same hls playlist right after it was changed\n this.mainPlaylistLoader_.load();\n } // TODO: Create a new event on the PlaylistLoader that signals\n // that the segments have changed in some way and use that to\n // update the SegmentLoader instead of doing it twice here and\n // on `loadedplaylist`\n\n this.mainSegmentLoader_.pause();\n this.mainSegmentLoader_.playlist(media, this.requestOptions_);\n if (this.waitingForFastQualityPlaylistReceived_) {\n this.runFastQualitySwitch_();\n } else {\n this.mainSegmentLoader_.load();\n }\n this.tech_.trigger({\n type: 'mediachange',\n bubbles: true\n });\n });\n this.mainPlaylistLoader_.on('playlistunchanged', () => {\n const updatedPlaylist = this.mainPlaylistLoader_.media(); // ignore unchanged playlists that have already been\n // excluded for not-changing. We likely just have a really slowly updating\n // playlist.\n\n if (updatedPlaylist.lastExcludeReason_ === 'playlist-unchanged') {\n return;\n }\n const playlistOutdated = this.stuckAtPlaylistEnd_(updatedPlaylist);\n if (playlistOutdated) {\n // Playlist has stopped updating and we're stuck at its end. Try to\n // exclude it and switch to another playlist in the hope that that\n // one is updating (and give the player a chance to re-adjust to the\n // safe live point).\n this.excludePlaylist({\n error: {\n message: 'Playlist no longer updating.',\n reason: 'playlist-unchanged'\n }\n }); // useful for monitoring QoS\n\n this.tech_.trigger('playliststuck');\n }\n });\n this.mainPlaylistLoader_.on('renditiondisabled', () => {\n this.tech_.trigger({\n type: 'usage',\n name: 'vhs-rendition-disabled'\n });\n });\n this.mainPlaylistLoader_.on('renditionenabled', () => {\n this.tech_.trigger({\n type: 'usage',\n name: 'vhs-rendition-enabled'\n });\n });\n const playlistLoaderEvents = ['manifestrequeststart', 'manifestrequestcomplete', 'manifestparsestart', 'manifestparsecomplete', 'playlistrequeststart', 'playlistrequestcomplete', 'playlistparsestart', 'playlistparsecomplete', 'renditiondisabled', 'renditionenabled'];\n playlistLoaderEvents.forEach(eventName => {\n this.mainPlaylistLoader_.on(eventName, metadata => {\n // trigger directly on the player to ensure early events are fired.\n this.player_.trigger(_extends({}, metadata));\n });\n });\n }\n /**\n * Given an updated media playlist (whether it was loaded for the first time, or\n * refreshed for live playlists), update any relevant properties and state to reflect\n * changes in the media that should be accounted for (e.g., cues and duration).\n *\n * @param {Object} updatedPlaylist the updated media playlist object\n *\n * @private\n */\n\n handleUpdatedMediaPlaylist(updatedPlaylist) {\n if (this.useCueTags_) {\n this.updateAdCues_(updatedPlaylist);\n } // TODO: Create a new event on the PlaylistLoader that signals\n // that the segments have changed in some way and use that to\n // update the SegmentLoader instead of doing it twice here and\n // on `mediachange`\n\n this.mainSegmentLoader_.pause();\n this.mainSegmentLoader_.playlist(updatedPlaylist, this.requestOptions_);\n if (this.waitingForFastQualityPlaylistReceived_) {\n this.runFastQualitySwitch_();\n }\n this.updateDuration(!updatedPlaylist.endList); // If the player isn't paused, ensure that the segment loader is running,\n // as it is possible that it was temporarily stopped while waiting for\n // a playlist (e.g., in case the playlist errored and we re-requested it).\n\n if (!this.tech_.paused()) {\n this.mainSegmentLoader_.load();\n if (this.audioSegmentLoader_) {\n this.audioSegmentLoader_.load();\n }\n }\n }\n /**\n * A helper function for triggerring presence usage events once per source\n *\n * @private\n */\n\n triggerPresenceUsage_(main, media) {\n const mediaGroups = main.mediaGroups || {};\n let defaultDemuxed = true;\n const audioGroupKeys = Object.keys(mediaGroups.AUDIO);\n for (const mediaGroup in mediaGroups.AUDIO) {\n for (const label in mediaGroups.AUDIO[mediaGroup]) {\n const properties = mediaGroups.AUDIO[mediaGroup][label];\n if (!properties.uri) {\n defaultDemuxed = false;\n }\n }\n }\n if (defaultDemuxed) {\n this.tech_.trigger({\n type: 'usage',\n name: 'vhs-demuxed'\n });\n }\n if (Object.keys(mediaGroups.SUBTITLES).length) {\n this.tech_.trigger({\n type: 'usage',\n name: 'vhs-webvtt'\n });\n }\n if (Vhs$1.Playlist.isAes(media)) {\n this.tech_.trigger({\n type: 'usage',\n name: 'vhs-aes'\n });\n }\n if (audioGroupKeys.length && Object.keys(mediaGroups.AUDIO[audioGroupKeys[0]]).length > 1) {\n this.tech_.trigger({\n type: 'usage',\n name: 'vhs-alternate-audio'\n });\n }\n if (this.useCueTags_) {\n this.tech_.trigger({\n type: 'usage',\n name: 'vhs-playlist-cue-tags'\n });\n }\n }\n shouldSwitchToMedia_(nextPlaylist) {\n const currentPlaylist = this.mainPlaylistLoader_.media() || this.mainPlaylistLoader_.pendingMedia_;\n const currentTime = this.tech_.currentTime();\n const bufferLowWaterLine = this.bufferLowWaterLine();\n const bufferHighWaterLine = this.bufferHighWaterLine();\n const buffered = this.tech_.buffered();\n return shouldSwitchToMedia({\n buffered,\n currentTime,\n currentPlaylist,\n nextPlaylist,\n bufferLowWaterLine,\n bufferHighWaterLine,\n duration: this.duration(),\n bufferBasedABR: this.bufferBasedABR,\n log: this.logger_\n });\n }\n /**\n * Register event handlers on the segment loaders. A helper function\n * for construction time.\n *\n * @private\n */\n\n setupSegmentLoaderListeners_() {\n this.mainSegmentLoader_.on('bandwidthupdate', () => {\n // Whether or not buffer based ABR or another ABR is used, on a bandwidth change it's\n // useful to check to see if a rendition switch should be made.\n this.checkABR_('bandwidthupdate');\n this.tech_.trigger('bandwidthupdate');\n });\n this.mainSegmentLoader_.on('timeout', () => {\n if (this.bufferBasedABR) {\n // If a rendition change is needed, then it would've be done on `bandwidthupdate`.\n // Here the only consideration is that for buffer based ABR there's no guarantee\n // of an immediate switch (since the bandwidth is averaged with a timeout\n // bandwidth value of 1), so force a load on the segment loader to keep it going.\n this.mainSegmentLoader_.load();\n }\n }); // `progress` events are not reliable enough of a bandwidth measure to trigger buffer\n // based ABR.\n\n if (!this.bufferBasedABR) {\n this.mainSegmentLoader_.on('progress', () => {\n this.trigger('progress');\n });\n }\n this.mainSegmentLoader_.on('error', () => {\n const error = this.mainSegmentLoader_.error();\n this.excludePlaylist({\n playlistToExclude: error.playlist,\n error\n });\n });\n this.mainSegmentLoader_.on('appenderror', () => {\n this.error = this.mainSegmentLoader_.error_;\n this.trigger('error');\n });\n this.mainSegmentLoader_.on('syncinfoupdate', () => {\n this.onSyncInfoUpdate_();\n });\n this.mainSegmentLoader_.on('timestampoffset', () => {\n this.tech_.trigger({\n type: 'usage',\n name: 'vhs-timestamp-offset'\n });\n });\n this.audioSegmentLoader_.on('syncinfoupdate', () => {\n this.onSyncInfoUpdate_();\n });\n this.audioSegmentLoader_.on('appenderror', () => {\n this.error = this.audioSegmentLoader_.error_;\n this.trigger('error');\n });\n this.mainSegmentLoader_.on('ended', () => {\n this.logger_('main segment loader ended');\n this.onEndOfStream();\n }); // In DASH, there is the possibility of the video segment and the audio segment\n // at a current time to be on different timelines. When this occurs, the player\n // forwards playback to a point where these two segment types are back on the same\n // timeline. This time will be just after the end of the audio segment that is on\n // a previous timeline.\n\n if (this.sourceType_ === 'dash') {\n this.timelineChangeController_.on('audioTimelineBehind', () => {\n const segmentInfo = this.audioSegmentLoader_.pendingSegment_;\n if (!segmentInfo || !segmentInfo.segment || !segmentInfo.segment.syncInfo) {\n return;\n } // Update the current time to just after the faulty audio segment.\n // This moves playback to a spot where both audio and video segments\n // are on the same timeline.\n\n const newTime = segmentInfo.segment.syncInfo.end + 0.01;\n this.tech_.setCurrentTime(newTime);\n });\n }\n this.mainSegmentLoader_.on('earlyabort', event => {\n // never try to early abort with the new ABR algorithm\n if (this.bufferBasedABR) {\n return;\n }\n this.delegateLoaders_('all', ['abort']);\n this.excludePlaylist({\n error: {\n message: 'Aborted early because there isn\\'t enough bandwidth to complete ' + 'the request without rebuffering.'\n },\n playlistExclusionDuration: ABORT_EARLY_EXCLUSION_SECONDS\n });\n });\n const updateCodecs = () => {\n if (!this.sourceUpdater_.hasCreatedSourceBuffers()) {\n return this.tryToCreateSourceBuffers_();\n }\n const codecs = this.getCodecsOrExclude_(); // no codecs means that the playlist was excluded\n\n if (!codecs) {\n return;\n }\n this.sourceUpdater_.addOrChangeSourceBuffers(codecs);\n };\n this.mainSegmentLoader_.on('trackinfo', updateCodecs);\n this.audioSegmentLoader_.on('trackinfo', updateCodecs);\n this.mainSegmentLoader_.on('fmp4', () => {\n if (!this.triggeredFmp4Usage) {\n this.tech_.trigger({\n type: 'usage',\n name: 'vhs-fmp4'\n });\n this.triggeredFmp4Usage = true;\n }\n });\n this.audioSegmentLoader_.on('fmp4', () => {\n if (!this.triggeredFmp4Usage) {\n this.tech_.trigger({\n type: 'usage',\n name: 'vhs-fmp4'\n });\n this.triggeredFmp4Usage = true;\n }\n });\n this.audioSegmentLoader_.on('ended', () => {\n this.logger_('audioSegmentLoader ended');\n this.onEndOfStream();\n });\n const segmentLoaderEvents = ['segmentselected', 'segmentloadstart', 'segmentloaded', 'segmentkeyloadstart', 'segmentkeyloadcomplete', 'segmentdecryptionstart', 'segmentdecryptioncomplete', 'segmenttransmuxingstart', 'segmenttransmuxingcomplete', 'segmenttransmuxingtrackinfoavailable', 'segmenttransmuxingtiminginfoavailable', 'segmentappendstart', 'appendsdone', 'bandwidthupdated', 'timelinechange', 'codecschange'];\n segmentLoaderEvents.forEach(eventName => {\n this.mainSegmentLoader_.on(eventName, metadata => {\n this.player_.trigger(_extends({}, metadata));\n });\n this.audioSegmentLoader_.on(eventName, metadata => {\n this.player_.trigger(_extends({}, metadata));\n });\n this.subtitleSegmentLoader_.on(eventName, metadata => {\n this.player_.trigger(_extends({}, metadata));\n });\n });\n }\n mediaSecondsLoaded_() {\n return Math.max(this.audioSegmentLoader_.mediaSecondsLoaded + this.mainSegmentLoader_.mediaSecondsLoaded);\n }\n /**\n * Call load on our SegmentLoaders\n */\n\n load() {\n this.mainSegmentLoader_.load();\n if (this.mediaTypes_.AUDIO.activePlaylistLoader) {\n this.audioSegmentLoader_.load();\n }\n if (this.mediaTypes_.SUBTITLES.activePlaylistLoader) {\n this.subtitleSegmentLoader_.load();\n }\n }\n /**\n * Re-tune playback quality level for the current player\n * conditions. This method will perform destructive actions like removing\n * already buffered content in order to readjust the currently active\n * playlist quickly. This is good for manual quality changes\n *\n * @private\n */\n\n fastQualityChange_(media = this.selectPlaylist()) {\n if (media && media === this.mainPlaylistLoader_.media()) {\n this.logger_('skipping fastQualityChange because new media is same as old');\n return;\n }\n this.switchMedia_(media, 'fast-quality'); // we would like to avoid race condition when we call fastQuality,\n // reset everything and start loading segments from prev segments instead of new because new playlist is not received yet\n\n this.waitingForFastQualityPlaylistReceived_ = true;\n }\n runFastQualitySwitch_() {\n this.waitingForFastQualityPlaylistReceived_ = false; // Delete all buffered data to allow an immediate quality switch.\n\n this.mainSegmentLoader_.pause();\n this.mainSegmentLoader_.resetEverything(() => {\n this.mainSegmentLoader_.load();\n }); // don't need to reset audio as it is reset when media changes\n }\n /**\n * Begin playback.\n */\n\n play() {\n if (this.setupFirstPlay()) {\n return;\n }\n if (this.tech_.ended()) {\n this.tech_.setCurrentTime(0);\n }\n if (this.hasPlayed_) {\n this.load();\n }\n const seekable = this.tech_.seekable(); // if the viewer has paused and we fell out of the live window,\n // seek forward to the live point\n\n if (this.tech_.duration() === Infinity) {\n if (this.tech_.currentTime() < seekable.start(0)) {\n return this.tech_.setCurrentTime(seekable.end(seekable.length - 1));\n }\n }\n }\n /**\n * Seek to the latest media position if this is a live video and the\n * player and video are loaded and initialized.\n */\n\n setupFirstPlay() {\n const media = this.mainPlaylistLoader_.media(); // Check that everything is ready to begin buffering for the first call to play\n // If 1) there is no active media\n // 2) the player is paused\n // 3) the first play has already been setup\n // then exit early\n\n if (!media || this.tech_.paused() || this.hasPlayed_) {\n return false;\n } // when the video is a live stream and/or has a start time\n\n if (!media.endList || media.start) {\n const seekable = this.seekable();\n if (!seekable.length) {\n // without a seekable range, the player cannot seek to begin buffering at the\n // live or start point\n return false;\n }\n const seekableEnd = seekable.end(0);\n let startPoint = seekableEnd;\n if (media.start) {\n const offset = media.start.timeOffset;\n if (offset < 0) {\n startPoint = Math.max(seekableEnd + offset, seekable.start(0));\n } else {\n startPoint = Math.min(seekableEnd, offset);\n }\n } // trigger firstplay to inform the source handler to ignore the next seek event\n\n this.trigger('firstplay'); // seek to the live point\n\n this.tech_.setCurrentTime(startPoint);\n }\n this.hasPlayed_ = true; // we can begin loading now that everything is ready\n\n this.load();\n return true;\n }\n /**\n * handle the sourceopen event on the MediaSource\n *\n * @private\n */\n\n handleSourceOpen_() {\n // Only attempt to create the source buffer if none already exist.\n // handleSourceOpen is also called when we are \"re-opening\" a source buffer\n // after `endOfStream` has been called (in response to a seek for instance)\n this.tryToCreateSourceBuffers_(); // if autoplay is enabled, begin playback. This is duplicative of\n // code in video.js but is required because play() must be invoked\n // *after* the media source has opened.\n\n if (this.tech_.autoplay()) {\n const playPromise = this.tech_.play(); // Catch/silence error when a pause interrupts a play request\n // on browsers which return a promise\n\n if (typeof playPromise !== 'undefined' && typeof playPromise.then === 'function') {\n playPromise.then(null, e => {});\n }\n }\n this.trigger('sourceopen');\n }\n /**\n * handle the sourceended event on the MediaSource\n *\n * @private\n */\n\n handleSourceEnded_() {\n if (!this.inbandTextTracks_.metadataTrack_) {\n return;\n }\n const cues = this.inbandTextTracks_.metadataTrack_.cues;\n if (!cues || !cues.length) {\n return;\n }\n const duration = this.duration();\n cues[cues.length - 1].endTime = isNaN(duration) || Math.abs(duration) === Infinity ? Number.MAX_VALUE : duration;\n }\n /**\n * handle the durationchange event on the MediaSource\n *\n * @private\n */\n\n handleDurationChange_() {\n this.tech_.trigger('durationchange');\n }\n /**\n * Calls endOfStream on the media source when all active stream types have called\n * endOfStream\n *\n * @param {string} streamType\n * Stream type of the segment loader that called endOfStream\n * @private\n */\n\n onEndOfStream() {\n let isEndOfStream = this.mainSegmentLoader_.ended_;\n if (this.mediaTypes_.AUDIO.activePlaylistLoader) {\n const mainMediaInfo = this.mainSegmentLoader_.getCurrentMediaInfo_(); // if the audio playlist loader exists, then alternate audio is active\n\n if (!mainMediaInfo || mainMediaInfo.hasVideo) {\n // if we do not know if the main segment loader contains video yet or if we\n // definitively know the main segment loader contains video, then we need to wait\n // for both main and audio segment loaders to call endOfStream\n isEndOfStream = isEndOfStream && this.audioSegmentLoader_.ended_;\n } else {\n // otherwise just rely on the audio loader\n isEndOfStream = this.audioSegmentLoader_.ended_;\n }\n }\n if (!isEndOfStream) {\n return;\n }\n this.stopABRTimer_();\n this.sourceUpdater_.endOfStream();\n }\n /**\n * Check if a playlist has stopped being updated\n *\n * @param {Object} playlist the media playlist object\n * @return {boolean} whether the playlist has stopped being updated or not\n */\n\n stuckAtPlaylistEnd_(playlist) {\n const seekable = this.seekable();\n if (!seekable.length) {\n // playlist doesn't have enough information to determine whether we are stuck\n return false;\n }\n const expired = this.syncController_.getExpiredTime(playlist, this.duration());\n if (expired === null) {\n return false;\n } // does not use the safe live end to calculate playlist end, since we\n // don't want to say we are stuck while there is still content\n\n const absolutePlaylistEnd = Vhs$1.Playlist.playlistEnd(playlist, expired);\n const currentTime = this.tech_.currentTime();\n const buffered = this.tech_.buffered();\n if (!buffered.length) {\n // return true if the playhead reached the absolute end of the playlist\n return absolutePlaylistEnd - currentTime <= SAFE_TIME_DELTA;\n }\n const bufferedEnd = buffered.end(buffered.length - 1); // return true if there is too little buffer left and buffer has reached absolute\n // end of playlist\n\n return bufferedEnd - currentTime <= SAFE_TIME_DELTA && absolutePlaylistEnd - bufferedEnd <= SAFE_TIME_DELTA;\n }\n /**\n * Exclude a playlist for a set amount of time, making it unavailable for selection by\n * the rendition selection algorithm, then force a new playlist (rendition) selection.\n *\n * @param {Object=} playlistToExclude\n * the playlist to exclude, defaults to the currently selected playlist\n * @param {Object=} error\n * an optional error\n * @param {number=} playlistExclusionDuration\n * an optional number of seconds to exclude the playlist\n */\n\n excludePlaylist({\n playlistToExclude = this.mainPlaylistLoader_.media(),\n error = {},\n playlistExclusionDuration\n }) {\n // If the `error` was generated by the playlist loader, it will contain\n // the playlist we were trying to load (but failed) and that should be\n // excluded instead of the currently selected playlist which is likely\n // out-of-date in this scenario\n playlistToExclude = playlistToExclude || this.mainPlaylistLoader_.media();\n playlistExclusionDuration = playlistExclusionDuration || error.playlistExclusionDuration || this.playlistExclusionDuration; // If there is no current playlist, then an error occurred while we were\n // trying to load the main OR while we were disposing of the tech\n\n if (!playlistToExclude) {\n this.error = error;\n if (this.mediaSource.readyState !== 'open') {\n this.trigger('error');\n } else {\n this.sourceUpdater_.endOfStream('network');\n }\n return;\n }\n playlistToExclude.playlistErrors_++;\n const playlists = this.mainPlaylistLoader_.main.playlists;\n const enabledPlaylists = playlists.filter(isEnabled);\n const isFinalRendition = enabledPlaylists.length === 1 && enabledPlaylists[0] === playlistToExclude; // Don't exclude the only playlist unless it was excluded\n // forever\n\n if (playlists.length === 1 && playlistExclusionDuration !== Infinity) {\n videojs.log.warn(`Problem encountered with playlist ${playlistToExclude.id}. ` + 'Trying again since it is the only playlist.');\n this.tech_.trigger('retryplaylist'); // if this is a final rendition, we should delay\n\n return this.mainPlaylistLoader_.load(isFinalRendition);\n }\n if (isFinalRendition) {\n // If we're content steering, try other pathways.\n if (this.main().contentSteering) {\n const pathway = this.pathwayAttribute_(playlistToExclude); // Ignore at least 1 steering manifest refresh.\n\n const reIncludeDelay = this.contentSteeringController_.steeringManifest.ttl * 1000;\n this.contentSteeringController_.excludePathway(pathway);\n this.excludeThenChangePathway_();\n setTimeout(() => {\n this.contentSteeringController_.addAvailablePathway(pathway);\n }, reIncludeDelay);\n return;\n } // Since we're on the final non-excluded playlist, and we're about to exclude\n // it, instead of erring the player or retrying this playlist, clear out the current\n // exclusion list. This allows other playlists to be attempted in case any have been\n // fixed.\n\n let reincluded = false;\n playlists.forEach(playlist => {\n // skip current playlist which is about to be excluded\n if (playlist === playlistToExclude) {\n return;\n }\n const excludeUntil = playlist.excludeUntil; // a playlist cannot be reincluded if it wasn't excluded to begin with.\n\n if (typeof excludeUntil !== 'undefined' && excludeUntil !== Infinity) {\n reincluded = true;\n delete playlist.excludeUntil;\n }\n });\n if (reincluded) {\n videojs.log.warn('Removing other playlists from the exclusion list because the last ' + 'rendition is about to be excluded.'); // Technically we are retrying a playlist, in that we are simply retrying a previous\n // playlist. This is needed for users relying on the retryplaylist event to catch a\n // case where the player might be stuck and looping through \"dead\" playlists.\n\n this.tech_.trigger('retryplaylist');\n }\n } // Exclude this playlist\n\n let excludeUntil;\n if (playlistToExclude.playlistErrors_ > this.maxPlaylistRetries) {\n excludeUntil = Infinity;\n } else {\n excludeUntil = Date.now() + playlistExclusionDuration * 1000;\n }\n playlistToExclude.excludeUntil = excludeUntil;\n if (error.reason) {\n playlistToExclude.lastExcludeReason_ = error.reason;\n }\n this.tech_.trigger('excludeplaylist');\n this.tech_.trigger({\n type: 'usage',\n name: 'vhs-rendition-excluded'\n }); // TODO: only load a new playlist if we're excluding the current playlist\n // If this function was called with a playlist that's not the current active playlist\n // (e.g., media().id !== playlistToExclude.id),\n // then a new playlist should not be selected and loaded, as there's nothing wrong with the current playlist.\n\n const nextPlaylist = this.selectPlaylist();\n if (!nextPlaylist) {\n this.error = 'Playback cannot continue. No available working or supported playlists.';\n this.trigger('error');\n return;\n }\n const logFn = error.internal ? this.logger_ : videojs.log.warn;\n const errorMessage = error.message ? ' ' + error.message : '';\n logFn(`${error.internal ? 'Internal problem' : 'Problem'} encountered with playlist ${playlistToExclude.id}.` + `${errorMessage} Switching to playlist ${nextPlaylist.id}.`); // if audio group changed reset audio loaders\n\n if (nextPlaylist.attributes.AUDIO !== playlistToExclude.attributes.AUDIO) {\n this.delegateLoaders_('audio', ['abort', 'pause']);\n } // if subtitle group changed reset subtitle loaders\n\n if (nextPlaylist.attributes.SUBTITLES !== playlistToExclude.attributes.SUBTITLES) {\n this.delegateLoaders_('subtitle', ['abort', 'pause']);\n }\n this.delegateLoaders_('main', ['abort', 'pause']);\n const delayDuration = nextPlaylist.targetDuration / 2 * 1000 || 5 * 1000;\n const shouldDelay = typeof nextPlaylist.lastRequest === 'number' && Date.now() - nextPlaylist.lastRequest <= delayDuration; // delay if it's a final rendition or if the last refresh is sooner than half targetDuration\n\n return this.switchMedia_(nextPlaylist, 'exclude', isFinalRendition || shouldDelay);\n }\n /**\n * Pause all segment/playlist loaders\n */\n\n pauseLoading() {\n this.delegateLoaders_('all', ['abort', 'pause']);\n this.stopABRTimer_();\n }\n /**\n * Call a set of functions in order on playlist loaders, segment loaders,\n * or both types of loaders.\n *\n * @param {string} filter\n * Filter loaders that should call fnNames using a string. Can be:\n * * all - run on all loaders\n * * audio - run on all audio loaders\n * * subtitle - run on all subtitle loaders\n * * main - run on the main loaders\n *\n * @param {Array|string} fnNames\n * A string or array of function names to call.\n */\n\n delegateLoaders_(filter, fnNames) {\n const loaders = [];\n const dontFilterPlaylist = filter === 'all';\n if (dontFilterPlaylist || filter === 'main') {\n loaders.push(this.mainPlaylistLoader_);\n }\n const mediaTypes = [];\n if (dontFilterPlaylist || filter === 'audio') {\n mediaTypes.push('AUDIO');\n }\n if (dontFilterPlaylist || filter === 'subtitle') {\n mediaTypes.push('CLOSED-CAPTIONS');\n mediaTypes.push('SUBTITLES');\n }\n mediaTypes.forEach(mediaType => {\n const loader = this.mediaTypes_[mediaType] && this.mediaTypes_[mediaType].activePlaylistLoader;\n if (loader) {\n loaders.push(loader);\n }\n });\n ['main', 'audio', 'subtitle'].forEach(name => {\n const loader = this[`${name}SegmentLoader_`];\n if (loader && (filter === name || filter === 'all')) {\n loaders.push(loader);\n }\n });\n loaders.forEach(loader => fnNames.forEach(fnName => {\n if (typeof loader[fnName] === 'function') {\n loader[fnName]();\n }\n }));\n }\n /**\n * set the current time on all segment loaders\n *\n * @param {TimeRange} currentTime the current time to set\n * @return {TimeRange} the current time\n */\n\n setCurrentTime(currentTime) {\n const buffered = findRange(this.tech_.buffered(), currentTime);\n if (!(this.mainPlaylistLoader_ && this.mainPlaylistLoader_.media())) {\n // return immediately if the metadata is not ready yet\n return 0;\n } // it's clearly an edge-case but don't thrown an error if asked to\n // seek within an empty playlist\n\n if (!this.mainPlaylistLoader_.media().segments) {\n return 0;\n } // if the seek location is already buffered, continue buffering as usual\n\n if (buffered && buffered.length) {\n return currentTime;\n } // cancel outstanding requests so we begin buffering at the new\n // location\n\n this.mainSegmentLoader_.pause();\n this.mainSegmentLoader_.resetEverything();\n if (this.mediaTypes_.AUDIO.activePlaylistLoader) {\n this.audioSegmentLoader_.pause();\n this.audioSegmentLoader_.resetEverything();\n }\n if (this.mediaTypes_.SUBTITLES.activePlaylistLoader) {\n this.subtitleSegmentLoader_.pause();\n this.subtitleSegmentLoader_.resetEverything();\n } // start segment loader loading in case they are paused\n\n this.load();\n }\n /**\n * get the current duration\n *\n * @return {TimeRange} the duration\n */\n\n duration() {\n if (!this.mainPlaylistLoader_) {\n return 0;\n }\n const media = this.mainPlaylistLoader_.media();\n if (!media) {\n // no playlists loaded yet, so can't determine a duration\n return 0;\n } // Don't rely on the media source for duration in the case of a live playlist since\n // setting the native MediaSource's duration to infinity ends up with consequences to\n // seekable behavior. See https://github.com/w3c/media-source/issues/5 for details.\n //\n // This is resolved in the spec by https://github.com/w3c/media-source/pull/92,\n // however, few browsers have support for setLiveSeekableRange()\n // https://developer.mozilla.org/en-US/docs/Web/API/MediaSource/setLiveSeekableRange\n //\n // Until a time when the duration of the media source can be set to infinity, and a\n // seekable range specified across browsers, just return Infinity.\n\n if (!media.endList) {\n return Infinity;\n } // Since this is a VOD video, it is safe to rely on the media source's duration (if\n // available). If it's not available, fall back to a playlist-calculated estimate.\n\n if (this.mediaSource) {\n return this.mediaSource.duration;\n }\n return Vhs$1.Playlist.duration(media);\n }\n /**\n * check the seekable range\n *\n * @return {TimeRange} the seekable range\n */\n\n seekable() {\n return this.seekable_;\n }\n onSyncInfoUpdate_() {\n let audioSeekable; // TODO check for creation of both source buffers before updating seekable\n //\n // A fix was made to this function where a check for\n // this.sourceUpdater_.hasCreatedSourceBuffers\n // was added to ensure that both source buffers were created before seekable was\n // updated. However, it originally had a bug where it was checking for a true and\n // returning early instead of checking for false. Setting it to check for false to\n // return early though created other issues. A call to play() would check for seekable\n // end without verifying that a seekable range was present. In addition, even checking\n // for that didn't solve some issues, as handleFirstPlay is sometimes worked around\n // due to a media update calling load on the segment loaders, skipping a seek to live,\n // thereby starting live streams at the beginning of the stream rather than at the end.\n //\n // This conditional should be fixed to wait for the creation of two source buffers at\n // the same time as the other sections of code are fixed to properly seek to live and\n // not throw an error due to checking for a seekable end when no seekable range exists.\n //\n // For now, fall back to the older behavior, with the understanding that the seekable\n // range may not be completely correct, leading to a suboptimal initial live point.\n\n if (!this.mainPlaylistLoader_) {\n return;\n }\n let media = this.mainPlaylistLoader_.media();\n if (!media) {\n return;\n }\n let expired = this.syncController_.getExpiredTime(media, this.duration());\n if (expired === null) {\n // not enough information to update seekable\n return;\n }\n const main = this.mainPlaylistLoader_.main;\n const mainSeekable = Vhs$1.Playlist.seekable(media, expired, Vhs$1.Playlist.liveEdgeDelay(main, media));\n if (mainSeekable.length === 0) {\n return;\n }\n if (this.mediaTypes_.AUDIO.activePlaylistLoader) {\n media = this.mediaTypes_.AUDIO.activePlaylistLoader.media();\n expired = this.syncController_.getExpiredTime(media, this.duration());\n if (expired === null) {\n return;\n }\n audioSeekable = Vhs$1.Playlist.seekable(media, expired, Vhs$1.Playlist.liveEdgeDelay(main, media));\n if (audioSeekable.length === 0) {\n return;\n }\n }\n let oldEnd;\n let oldStart;\n if (this.seekable_ && this.seekable_.length) {\n oldEnd = this.seekable_.end(0);\n oldStart = this.seekable_.start(0);\n }\n if (!audioSeekable) {\n // seekable has been calculated based on buffering video data so it\n // can be returned directly\n this.seekable_ = mainSeekable;\n } else if (audioSeekable.start(0) > mainSeekable.end(0) || mainSeekable.start(0) > audioSeekable.end(0)) {\n // seekables are pretty far off, rely on main\n this.seekable_ = mainSeekable;\n } else {\n this.seekable_ = createTimeRanges([[audioSeekable.start(0) > mainSeekable.start(0) ? audioSeekable.start(0) : mainSeekable.start(0), audioSeekable.end(0) < mainSeekable.end(0) ? audioSeekable.end(0) : mainSeekable.end(0)]]);\n } // seekable is the same as last time\n\n if (this.seekable_ && this.seekable_.length) {\n if (this.seekable_.end(0) === oldEnd && this.seekable_.start(0) === oldStart) {\n return;\n }\n }\n this.logger_(`seekable updated [${printableRange(this.seekable_)}]`);\n const metadata = {\n seekableRanges: this.seekable_\n };\n this.trigger({\n type: 'seekablerangeschanged',\n metadata\n });\n this.tech_.trigger('seekablechanged');\n }\n /**\n * Update the player duration\n */\n\n updateDuration(isLive) {\n if (this.updateDuration_) {\n this.mediaSource.removeEventListener('sourceopen', this.updateDuration_);\n this.updateDuration_ = null;\n }\n if (this.mediaSource.readyState !== 'open') {\n this.updateDuration_ = this.updateDuration.bind(this, isLive);\n this.mediaSource.addEventListener('sourceopen', this.updateDuration_);\n return;\n }\n if (isLive) {\n const seekable = this.seekable();\n if (!seekable.length) {\n return;\n } // Even in the case of a live playlist, the native MediaSource's duration should not\n // be set to Infinity (even though this would be expected for a live playlist), since\n // setting the native MediaSource's duration to infinity ends up with consequences to\n // seekable behavior. See https://github.com/w3c/media-source/issues/5 for details.\n //\n // This is resolved in the spec by https://github.com/w3c/media-source/pull/92,\n // however, few browsers have support for setLiveSeekableRange()\n // https://developer.mozilla.org/en-US/docs/Web/API/MediaSource/setLiveSeekableRange\n //\n // Until a time when the duration of the media source can be set to infinity, and a\n // seekable range specified across browsers, the duration should be greater than or\n // equal to the last possible seekable value.\n // MediaSource duration starts as NaN\n // It is possible (and probable) that this case will never be reached for many\n // sources, since the MediaSource reports duration as the highest value without\n // accounting for timestamp offset. For example, if the timestamp offset is -100 and\n // we buffered times 0 to 100 with real times of 100 to 200, even though current\n // time will be between 0 and 100, the native media source may report the duration\n // as 200. However, since we report duration separate from the media source (as\n // Infinity), and as long as the native media source duration value is greater than\n // our reported seekable range, seeks will work as expected. The large number as\n // duration for live is actually a strategy used by some players to work around the\n // issue of live seekable ranges cited above.\n\n if (isNaN(this.mediaSource.duration) || this.mediaSource.duration < seekable.end(seekable.length - 1)) {\n this.sourceUpdater_.setDuration(seekable.end(seekable.length - 1));\n }\n return;\n }\n const buffered = this.tech_.buffered();\n let duration = Vhs$1.Playlist.duration(this.mainPlaylistLoader_.media());\n if (buffered.length > 0) {\n duration = Math.max(duration, buffered.end(buffered.length - 1));\n }\n if (this.mediaSource.duration !== duration) {\n this.sourceUpdater_.setDuration(duration);\n }\n }\n /**\n * dispose of the PlaylistController and everything\n * that it controls\n */\n\n dispose() {\n this.trigger('dispose');\n this.decrypter_.terminate();\n this.mainPlaylistLoader_.dispose();\n this.mainSegmentLoader_.dispose();\n this.contentSteeringController_.dispose();\n this.keyStatusMap_.clear();\n if (this.loadOnPlay_) {\n this.tech_.off('play', this.loadOnPlay_);\n }\n ['AUDIO', 'SUBTITLES'].forEach(type => {\n const groups = this.mediaTypes_[type].groups;\n for (const id in groups) {\n groups[id].forEach(group => {\n if (group.playlistLoader) {\n group.playlistLoader.dispose();\n }\n });\n }\n });\n this.audioSegmentLoader_.dispose();\n this.subtitleSegmentLoader_.dispose();\n this.sourceUpdater_.dispose();\n this.timelineChangeController_.dispose();\n this.stopABRTimer_();\n if (this.updateDuration_) {\n this.mediaSource.removeEventListener('sourceopen', this.updateDuration_);\n }\n this.mediaSource.removeEventListener('durationchange', this.handleDurationChange_); // load the media source into the player\n\n this.mediaSource.removeEventListener('sourceopen', this.handleSourceOpen_);\n this.mediaSource.removeEventListener('sourceended', this.handleSourceEnded_);\n this.off();\n }\n /**\n * return the main playlist object if we have one\n *\n * @return {Object} the main playlist object that we parsed\n */\n\n main() {\n return this.mainPlaylistLoader_.main;\n }\n /**\n * return the currently selected playlist\n *\n * @return {Object} the currently selected playlist object that we parsed\n */\n\n media() {\n // playlist loader will not return media if it has not been fully loaded\n return this.mainPlaylistLoader_.media() || this.initialMedia_;\n }\n areMediaTypesKnown_() {\n const usingAudioLoader = !!this.mediaTypes_.AUDIO.activePlaylistLoader;\n const hasMainMediaInfo = !!this.mainSegmentLoader_.getCurrentMediaInfo_(); // if we are not using an audio loader, then we have audio media info\n // otherwise check on the segment loader.\n\n const hasAudioMediaInfo = !usingAudioLoader ? true : !!this.audioSegmentLoader_.getCurrentMediaInfo_(); // one or both loaders has not loaded sufficently to get codecs\n\n if (!hasMainMediaInfo || !hasAudioMediaInfo) {\n return false;\n }\n return true;\n } // find from and to for codec switch event\n\n getCodecsOrExclude_() {\n const media = {\n main: this.mainSegmentLoader_.getCurrentMediaInfo_() || {},\n audio: this.audioSegmentLoader_.getCurrentMediaInfo_() || {}\n };\n const playlist = this.mainSegmentLoader_.getPendingSegmentPlaylist() || this.media(); // set \"main\" media equal to video\n\n media.video = media.main;\n const playlistCodecs = codecsForPlaylist(this.main(), playlist);\n const codecs = {};\n const usingAudioLoader = !!this.mediaTypes_.AUDIO.activePlaylistLoader;\n if (media.main.hasVideo) {\n codecs.video = playlistCodecs.video || media.main.videoCodec || DEFAULT_VIDEO_CODEC;\n }\n if (media.main.isMuxed) {\n codecs.video += `,${playlistCodecs.audio || media.main.audioCodec || DEFAULT_AUDIO_CODEC}`;\n }\n if (media.main.hasAudio && !media.main.isMuxed || media.audio.hasAudio || usingAudioLoader) {\n codecs.audio = playlistCodecs.audio || media.main.audioCodec || media.audio.audioCodec || DEFAULT_AUDIO_CODEC; // set audio isFmp4 so we use the correct \"supports\" function below\n\n media.audio.isFmp4 = media.main.hasAudio && !media.main.isMuxed ? media.main.isFmp4 : media.audio.isFmp4;\n } // no codecs, no playback.\n\n if (!codecs.audio && !codecs.video) {\n this.excludePlaylist({\n playlistToExclude: playlist,\n error: {\n message: 'Could not determine codecs for playlist.'\n },\n playlistExclusionDuration: Infinity\n });\n return;\n } // fmp4 relies on browser support, while ts relies on muxer support\n\n const supportFunction = (isFmp4, codec) => isFmp4 ? browserSupportsCodec(codec) : muxerSupportsCodec(codec);\n const unsupportedCodecs = {};\n let unsupportedAudio;\n ['video', 'audio'].forEach(function (type) {\n if (codecs.hasOwnProperty(type) && !supportFunction(media[type].isFmp4, codecs[type])) {\n const supporter = media[type].isFmp4 ? 'browser' : 'muxer';\n unsupportedCodecs[supporter] = unsupportedCodecs[supporter] || [];\n unsupportedCodecs[supporter].push(codecs[type]);\n if (type === 'audio') {\n unsupportedAudio = supporter;\n }\n }\n });\n if (usingAudioLoader && unsupportedAudio && playlist.attributes.AUDIO) {\n const audioGroup = playlist.attributes.AUDIO;\n this.main().playlists.forEach(variant => {\n const variantAudioGroup = variant.attributes && variant.attributes.AUDIO;\n if (variantAudioGroup === audioGroup && variant !== playlist) {\n variant.excludeUntil = Infinity;\n }\n });\n this.logger_(`excluding audio group ${audioGroup} as ${unsupportedAudio} does not support codec(s): \"${codecs.audio}\"`);\n } // if we have any unsupported codecs exclude this playlist.\n\n if (Object.keys(unsupportedCodecs).length) {\n const message = Object.keys(unsupportedCodecs).reduce((acc, supporter) => {\n if (acc) {\n acc += ', ';\n }\n acc += `${supporter} does not support codec(s): \"${unsupportedCodecs[supporter].join(',')}\"`;\n return acc;\n }, '') + '.';\n this.excludePlaylist({\n playlistToExclude: playlist,\n error: {\n internal: true,\n message\n },\n playlistExclusionDuration: Infinity\n });\n return;\n } // check if codec switching is happening\n\n if (this.sourceUpdater_.hasCreatedSourceBuffers() && !this.sourceUpdater_.canChangeType()) {\n const switchMessages = [];\n ['video', 'audio'].forEach(type => {\n const newCodec = (parseCodecs(this.sourceUpdater_.codecs[type] || '')[0] || {}).type;\n const oldCodec = (parseCodecs(codecs[type] || '')[0] || {}).type;\n if (newCodec && oldCodec && newCodec.toLowerCase() !== oldCodec.toLowerCase()) {\n switchMessages.push(`\"${this.sourceUpdater_.codecs[type]}\" -> \"${codecs[type]}\"`);\n }\n });\n if (switchMessages.length) {\n this.excludePlaylist({\n playlistToExclude: playlist,\n error: {\n message: `Codec switching not supported: ${switchMessages.join(', ')}.`,\n internal: true\n },\n playlistExclusionDuration: Infinity\n });\n return;\n }\n } // TODO: when using the muxer shouldn't we just return\n // the codecs that the muxer outputs?\n\n return codecs;\n }\n /**\n * Create source buffers and exlude any incompatible renditions.\n *\n * @private\n */\n\n tryToCreateSourceBuffers_() {\n // media source is not ready yet or sourceBuffers are already\n // created.\n if (this.mediaSource.readyState !== 'open' || this.sourceUpdater_.hasCreatedSourceBuffers()) {\n return;\n }\n if (!this.areMediaTypesKnown_()) {\n return;\n }\n const codecs = this.getCodecsOrExclude_(); // no codecs means that the playlist was excluded\n\n if (!codecs) {\n return;\n }\n this.sourceUpdater_.createSourceBuffers(codecs);\n const codecString = [codecs.video, codecs.audio].filter(Boolean).join(',');\n this.excludeIncompatibleVariants_(codecString);\n }\n /**\n * Excludes playlists with codecs that are unsupported by the muxer and browser.\n */\n\n excludeUnsupportedVariants_() {\n const playlists = this.main().playlists;\n const ids = []; // TODO: why don't we have a property to loop through all\n // playlist? Why did we ever mix indexes and keys?\n\n Object.keys(playlists).forEach(key => {\n const variant = playlists[key]; // check if we already processed this playlist.\n\n if (ids.indexOf(variant.id) !== -1) {\n return;\n }\n ids.push(variant.id);\n const codecs = codecsForPlaylist(this.main, variant);\n const unsupported = [];\n if (codecs.audio && !muxerSupportsCodec(codecs.audio) && !browserSupportsCodec(codecs.audio)) {\n unsupported.push(`audio codec ${codecs.audio}`);\n }\n if (codecs.video && !muxerSupportsCodec(codecs.video) && !browserSupportsCodec(codecs.video)) {\n unsupported.push(`video codec ${codecs.video}`);\n }\n if (codecs.text && codecs.text === 'stpp.ttml.im1t') {\n unsupported.push(`text codec ${codecs.text}`);\n }\n if (unsupported.length) {\n variant.excludeUntil = Infinity;\n this.logger_(`excluding ${variant.id} for unsupported: ${unsupported.join(', ')}`);\n }\n });\n }\n /**\n * Exclude playlists that are known to be codec or\n * stream-incompatible with the SourceBuffer configuration. For\n * instance, Media Source Extensions would cause the video element to\n * stall waiting for video data if you switched from a variant with\n * video and audio to an audio-only one.\n *\n * @param {Object} media a media playlist compatible with the current\n * set of SourceBuffers. Variants in the current main playlist that\n * do not appear to have compatible codec or stream configurations\n * will be excluded from the default playlist selection algorithm\n * indefinitely.\n * @private\n */\n\n excludeIncompatibleVariants_(codecString) {\n const ids = [];\n const playlists = this.main().playlists;\n const codecs = unwrapCodecList(parseCodecs(codecString));\n const codecCount_ = codecCount(codecs);\n const videoDetails = codecs.video && parseCodecs(codecs.video)[0] || null;\n const audioDetails = codecs.audio && parseCodecs(codecs.audio)[0] || null;\n Object.keys(playlists).forEach(key => {\n const variant = playlists[key]; // check if we already processed this playlist.\n // or it if it is already excluded forever.\n\n if (ids.indexOf(variant.id) !== -1 || variant.excludeUntil === Infinity) {\n return;\n }\n ids.push(variant.id);\n const exclusionReasons = []; // get codecs from the playlist for this variant\n\n const variantCodecs = codecsForPlaylist(this.mainPlaylistLoader_.main, variant);\n const variantCodecCount = codecCount(variantCodecs); // if no codecs are listed, we cannot determine that this\n // variant is incompatible. Wait for mux.js to probe\n\n if (!variantCodecs.audio && !variantCodecs.video) {\n return;\n } // TODO: we can support this by removing the\n // old media source and creating a new one, but it will take some work.\n // The number of streams cannot change\n\n if (variantCodecCount !== codecCount_) {\n exclusionReasons.push(`codec count \"${variantCodecCount}\" !== \"${codecCount_}\"`);\n } // only exclude playlists by codec change, if codecs cannot switch\n // during playback.\n\n if (!this.sourceUpdater_.canChangeType()) {\n const variantVideoDetails = variantCodecs.video && parseCodecs(variantCodecs.video)[0] || null;\n const variantAudioDetails = variantCodecs.audio && parseCodecs(variantCodecs.audio)[0] || null; // the video codec cannot change\n\n if (variantVideoDetails && videoDetails && variantVideoDetails.type.toLowerCase() !== videoDetails.type.toLowerCase()) {\n exclusionReasons.push(`video codec \"${variantVideoDetails.type}\" !== \"${videoDetails.type}\"`);\n } // the audio codec cannot change\n\n if (variantAudioDetails && audioDetails && variantAudioDetails.type.toLowerCase() !== audioDetails.type.toLowerCase()) {\n exclusionReasons.push(`audio codec \"${variantAudioDetails.type}\" !== \"${audioDetails.type}\"`);\n }\n }\n if (exclusionReasons.length) {\n variant.excludeUntil = Infinity;\n this.logger_(`excluding ${variant.id}: ${exclusionReasons.join(' && ')}`);\n }\n });\n }\n updateAdCues_(media) {\n let offset = 0;\n const seekable = this.seekable();\n if (seekable.length) {\n offset = seekable.start(0);\n }\n updateAdCues(media, this.cueTagsTrack_, offset);\n }\n /**\n * Calculates the desired forward buffer length based on current time\n *\n * @return {number} Desired forward buffer length in seconds\n */\n\n goalBufferLength() {\n const currentTime = this.tech_.currentTime();\n const initial = Config.GOAL_BUFFER_LENGTH;\n const rate = Config.GOAL_BUFFER_LENGTH_RATE;\n const max = Math.max(initial, Config.MAX_GOAL_BUFFER_LENGTH);\n return Math.min(initial + currentTime * rate, max);\n }\n /**\n * Calculates the desired buffer low water line based on current time\n *\n * @return {number} Desired buffer low water line in seconds\n */\n\n bufferLowWaterLine() {\n const currentTime = this.tech_.currentTime();\n const initial = Config.BUFFER_LOW_WATER_LINE;\n const rate = Config.BUFFER_LOW_WATER_LINE_RATE;\n const max = Math.max(initial, Config.MAX_BUFFER_LOW_WATER_LINE);\n const newMax = Math.max(initial, Config.EXPERIMENTAL_MAX_BUFFER_LOW_WATER_LINE);\n return Math.min(initial + currentTime * rate, this.bufferBasedABR ? newMax : max);\n }\n bufferHighWaterLine() {\n return Config.BUFFER_HIGH_WATER_LINE;\n }\n addDateRangesToTextTrack_(dateRanges) {\n createMetadataTrackIfNotExists(this.inbandTextTracks_, 'com.apple.streaming', this.tech_);\n addDateRangeMetadata({\n inbandTextTracks: this.inbandTextTracks_,\n dateRanges\n });\n }\n addMetadataToTextTrack(dispatchType, metadataArray, videoDuration) {\n const timestampOffset = this.sourceUpdater_.videoBuffer ? this.sourceUpdater_.videoTimestampOffset() : this.sourceUpdater_.audioTimestampOffset(); // There's potentially an issue where we could double add metadata if there's a muxed\n // audio/video source with a metadata track, and an alt audio with a metadata track.\n // However, this probably won't happen, and if it does it can be handled then.\n\n createMetadataTrackIfNotExists(this.inbandTextTracks_, dispatchType, this.tech_);\n addMetadata({\n inbandTextTracks: this.inbandTextTracks_,\n metadataArray,\n timestampOffset,\n videoDuration\n });\n }\n /**\n * Utility for getting the pathway or service location from an HLS or DASH playlist.\n *\n * @param {Object} playlist for getting pathway from.\n * @return the pathway attribute of a playlist\n */\n\n pathwayAttribute_(playlist) {\n return playlist.attributes['PATHWAY-ID'] || playlist.attributes.serviceLocation;\n }\n /**\n * Initialize available pathways and apply the tag properties.\n */\n\n initContentSteeringController_() {\n const main = this.main();\n if (!main.contentSteering) {\n return;\n }\n for (const playlist of main.playlists) {\n this.contentSteeringController_.addAvailablePathway(this.pathwayAttribute_(playlist));\n }\n this.contentSteeringController_.assignTagProperties(main.uri, main.contentSteering); // request the steering manifest immediately if queryBeforeStart is set.\n\n if (this.contentSteeringController_.queryBeforeStart) {\n // When queryBeforeStart is true, initial request should omit steering parameters.\n this.contentSteeringController_.requestSteeringManifest(true);\n return;\n } // otherwise start content steering after playback starts\n\n this.tech_.one('canplay', () => {\n this.contentSteeringController_.requestSteeringManifest();\n });\n }\n /**\n * Reset the content steering controller and re-init.\n */\n\n resetContentSteeringController_() {\n this.contentSteeringController_.clearAvailablePathways();\n this.contentSteeringController_.dispose();\n this.initContentSteeringController_();\n }\n /**\n * Attaches the listeners for content steering.\n */\n\n attachContentSteeringListeners_() {\n this.contentSteeringController_.on('content-steering', this.excludeThenChangePathway_.bind(this));\n const contentSteeringEvents = ['contentsteeringloadstart', 'contentsteeringloadcomplete', 'contentsteeringparsed'];\n contentSteeringEvents.forEach(eventName => {\n this.contentSteeringController_.on(eventName, metadata => {\n this.trigger(_extends({}, metadata));\n });\n });\n if (this.sourceType_ === 'dash') {\n this.mainPlaylistLoader_.on('loadedplaylist', () => {\n const main = this.main(); // check if steering tag or pathways changed.\n\n const didDashTagChange = this.contentSteeringController_.didDASHTagChange(main.uri, main.contentSteering);\n const didPathwaysChange = () => {\n const availablePathways = this.contentSteeringController_.getAvailablePathways();\n const newPathways = [];\n for (const playlist of main.playlists) {\n const serviceLocation = playlist.attributes.serviceLocation;\n if (serviceLocation) {\n newPathways.push(serviceLocation);\n if (!availablePathways.has(serviceLocation)) {\n return true;\n }\n }\n } // If we have no new serviceLocations and previously had availablePathways\n\n if (!newPathways.length && availablePathways.size) {\n return true;\n }\n return false;\n };\n if (didDashTagChange || didPathwaysChange()) {\n this.resetContentSteeringController_();\n }\n });\n }\n }\n /**\n * Simple exclude and change playlist logic for content steering.\n */\n\n excludeThenChangePathway_() {\n const currentPathway = this.contentSteeringController_.getPathway();\n if (!currentPathway) {\n return;\n }\n this.handlePathwayClones_();\n const main = this.main();\n const playlists = main.playlists;\n const ids = new Set();\n let didEnablePlaylists = false;\n Object.keys(playlists).forEach(key => {\n const variant = playlists[key];\n const pathwayId = this.pathwayAttribute_(variant);\n const differentPathwayId = pathwayId && currentPathway !== pathwayId;\n const steeringExclusion = variant.excludeUntil === Infinity && variant.lastExcludeReason_ === 'content-steering';\n if (steeringExclusion && !differentPathwayId) {\n delete variant.excludeUntil;\n delete variant.lastExcludeReason_;\n didEnablePlaylists = true;\n }\n const noExcludeUntil = !variant.excludeUntil && variant.excludeUntil !== Infinity;\n const shouldExclude = !ids.has(variant.id) && differentPathwayId && noExcludeUntil;\n if (!shouldExclude) {\n return;\n }\n ids.add(variant.id);\n variant.excludeUntil = Infinity;\n variant.lastExcludeReason_ = 'content-steering'; // TODO: kind of spammy, maybe move this.\n\n this.logger_(`excluding ${variant.id} for ${variant.lastExcludeReason_}`);\n });\n if (this.contentSteeringController_.manifestType_ === 'DASH') {\n Object.keys(this.mediaTypes_).forEach(key => {\n const type = this.mediaTypes_[key];\n if (type.activePlaylistLoader) {\n const currentPlaylist = type.activePlaylistLoader.media_; // Check if the current media playlist matches the current CDN\n\n if (currentPlaylist && currentPlaylist.attributes.serviceLocation !== currentPathway) {\n didEnablePlaylists = true;\n }\n }\n });\n }\n if (didEnablePlaylists) {\n this.changeSegmentPathway_();\n }\n }\n /**\n * Add, update, or delete playlists and media groups for\n * the pathway clones for HLS Content Steering.\n *\n * See https://datatracker.ietf.org/doc/draft-pantos-hls-rfc8216bis/\n *\n * NOTE: Pathway cloning does not currently support the `PER_VARIANT_URIS` and\n * `PER_RENDITION_URIS` as we do not handle `STABLE-VARIANT-ID` or\n * `STABLE-RENDITION-ID` values.\n */\n\n handlePathwayClones_() {\n const main = this.main();\n const playlists = main.playlists;\n const currentPathwayClones = this.contentSteeringController_.currentPathwayClones;\n const nextPathwayClones = this.contentSteeringController_.nextPathwayClones;\n const hasClones = currentPathwayClones && currentPathwayClones.size || nextPathwayClones && nextPathwayClones.size;\n if (!hasClones) {\n return;\n }\n for (const [id, clone] of currentPathwayClones.entries()) {\n const newClone = nextPathwayClones.get(id); // Delete the old pathway clone.\n\n if (!newClone) {\n this.mainPlaylistLoader_.updateOrDeleteClone(clone);\n this.contentSteeringController_.excludePathway(id);\n }\n }\n for (const [id, clone] of nextPathwayClones.entries()) {\n const oldClone = currentPathwayClones.get(id); // Create a new pathway if it is a new pathway clone object.\n\n if (!oldClone) {\n const playlistsToClone = playlists.filter(p => {\n return p.attributes['PATHWAY-ID'] === clone['BASE-ID'];\n });\n playlistsToClone.forEach(p => {\n this.mainPlaylistLoader_.addClonePathway(clone, p);\n });\n this.contentSteeringController_.addAvailablePathway(id);\n continue;\n } // There have not been changes to the pathway clone object, so skip.\n\n if (this.equalPathwayClones_(oldClone, clone)) {\n continue;\n } // Update a preexisting cloned pathway.\n // True is set for the update flag.\n\n this.mainPlaylistLoader_.updateOrDeleteClone(clone, true);\n this.contentSteeringController_.addAvailablePathway(id);\n } // Deep copy contents of next to current pathways.\n\n this.contentSteeringController_.currentPathwayClones = new Map(JSON.parse(JSON.stringify([...nextPathwayClones])));\n }\n /**\n * Determines whether two pathway clone objects are equivalent.\n *\n * @param {Object} a The first pathway clone object.\n * @param {Object} b The second pathway clone object.\n * @return {boolean} True if the pathway clone objects are equal, false otherwise.\n */\n\n equalPathwayClones_(a, b) {\n if (a['BASE-ID'] !== b['BASE-ID'] || a.ID !== b.ID || a['URI-REPLACEMENT'].HOST !== b['URI-REPLACEMENT'].HOST) {\n return false;\n }\n const aParams = a['URI-REPLACEMENT'].PARAMS;\n const bParams = b['URI-REPLACEMENT'].PARAMS; // We need to iterate through both lists of params because one could be\n // missing a parameter that the other has.\n\n for (const p in aParams) {\n if (aParams[p] !== bParams[p]) {\n return false;\n }\n }\n for (const p in bParams) {\n if (aParams[p] !== bParams[p]) {\n return false;\n }\n }\n return true;\n }\n /**\n * Changes the current playlists for audio, video and subtitles after a new pathway\n * is chosen from content steering.\n */\n\n changeSegmentPathway_() {\n const nextPlaylist = this.selectPlaylist();\n this.pauseLoading(); // Switch audio and text track playlists if necessary in DASH\n\n if (this.contentSteeringController_.manifestType_ === 'DASH') {\n this.switchMediaForDASHContentSteering_();\n }\n this.switchMedia_(nextPlaylist, 'content-steering');\n }\n /**\n * Iterates through playlists and check their keyId set and compare with the\n * keyStatusMap, only enable playlists that have a usable key. If the playlist\n * has no keyId leave it enabled by default.\n */\n\n excludeNonUsablePlaylistsByKeyId_() {\n if (!this.mainPlaylistLoader_ || !this.mainPlaylistLoader_.main) {\n return;\n }\n let nonUsableKeyStatusCount = 0;\n const NON_USABLE = 'non-usable';\n this.mainPlaylistLoader_.main.playlists.forEach(playlist => {\n const keyIdSet = this.mainPlaylistLoader_.getKeyIdSet(playlist); // If the playlist doesn't have keyIDs lets not exclude it.\n\n if (!keyIdSet || !keyIdSet.size) {\n return;\n }\n keyIdSet.forEach(key => {\n const USABLE = 'usable';\n const hasUsableKeyStatus = this.keyStatusMap_.has(key) && this.keyStatusMap_.get(key) === USABLE;\n const nonUsableExclusion = playlist.lastExcludeReason_ === NON_USABLE && playlist.excludeUntil === Infinity;\n if (!hasUsableKeyStatus) {\n // Only exclude playlists that haven't already been excluded as non-usable.\n if (playlist.excludeUntil !== Infinity && playlist.lastExcludeReason_ !== NON_USABLE) {\n playlist.excludeUntil = Infinity;\n playlist.lastExcludeReason_ = NON_USABLE;\n this.logger_(`excluding playlist ${playlist.id} because the key ID ${key} doesn't exist in the keyStatusMap or is not ${USABLE}`);\n } // count all nonUsableKeyStatus\n\n nonUsableKeyStatusCount++;\n } else if (hasUsableKeyStatus && nonUsableExclusion) {\n delete playlist.excludeUntil;\n delete playlist.lastExcludeReason_;\n this.logger_(`enabling playlist ${playlist.id} because key ID ${key} is ${USABLE}`);\n }\n });\n }); // If for whatever reason every playlist has a non usable key status. Lets try re-including the SD renditions as a failsafe.\n\n if (nonUsableKeyStatusCount >= this.mainPlaylistLoader_.main.playlists.length) {\n this.mainPlaylistLoader_.main.playlists.forEach(playlist => {\n const isNonHD = playlist && playlist.attributes && playlist.attributes.RESOLUTION && playlist.attributes.RESOLUTION.height < 720;\n const excludedForNonUsableKey = playlist.excludeUntil === Infinity && playlist.lastExcludeReason_ === NON_USABLE;\n if (isNonHD && excludedForNonUsableKey) {\n // Only delete the excludeUntil so we don't try and re-exclude these playlists.\n delete playlist.excludeUntil;\n videojs.log.warn(`enabling non-HD playlist ${playlist.id} because all playlists were excluded due to ${NON_USABLE} key IDs`);\n }\n });\n }\n }\n /**\n * Adds a keystatus to the keystatus map, tries to convert to string if necessary.\n *\n * @param {any} keyId the keyId to add a status for\n * @param {string} status the status of the keyId\n */\n\n addKeyStatus_(keyId, status) {\n const isString = typeof keyId === 'string';\n const keyIdHexString = isString ? keyId : bufferToHexString(keyId);\n const formattedKeyIdString = keyIdHexString.slice(0, 32).toLowerCase();\n this.logger_(`KeyStatus '${status}' with key ID ${formattedKeyIdString} added to the keyStatusMap`);\n this.keyStatusMap_.set(formattedKeyIdString, status);\n }\n /**\n * Utility function for adding key status to the keyStatusMap and filtering usable encrypted playlists.\n *\n * @param {any} keyId the keyId from the keystatuschange event\n * @param {string} status the key status string\n */\n\n updatePlaylistByKeyStatus(keyId, status) {\n this.addKeyStatus_(keyId, status);\n if (!this.waitingForFastQualityPlaylistReceived_) {\n this.excludeNonUsableThenChangePlaylist_();\n } // Listen to loadedplaylist with a single listener and check for new contentProtection elements when a playlist is updated.\n\n this.mainPlaylistLoader_.off('loadedplaylist', this.excludeNonUsableThenChangePlaylist_.bind(this));\n this.mainPlaylistLoader_.on('loadedplaylist', this.excludeNonUsableThenChangePlaylist_.bind(this));\n }\n excludeNonUsableThenChangePlaylist_() {\n this.excludeNonUsablePlaylistsByKeyId_();\n this.fastQualityChange_();\n }\n}\n\n/**\n * Returns a function that acts as the Enable/disable playlist function.\n *\n * @param {PlaylistLoader} loader - The main playlist loader\n * @param {string} playlistID - id of the playlist\n * @param {Function} changePlaylistFn - A function to be called after a\n * playlist's enabled-state has been changed. Will NOT be called if a\n * playlist's enabled-state is unchanged\n * @param {boolean=} enable - Value to set the playlist enabled-state to\n * or if undefined returns the current enabled-state for the playlist\n * @return {Function} Function for setting/getting enabled\n */\n\nconst enableFunction = (loader, playlistID, changePlaylistFn) => enable => {\n const playlist = loader.main.playlists[playlistID];\n const incompatible = isIncompatible(playlist);\n const currentlyEnabled = isEnabled(playlist);\n if (typeof enable === 'undefined') {\n return currentlyEnabled;\n }\n if (enable) {\n delete playlist.disabled;\n } else {\n playlist.disabled = true;\n }\n const metadata = {\n renditionInfo: {\n id: playlistID,\n bandwidth: playlist.attributes.BANDWIDTH,\n resolution: playlist.attributes.RESOLUTION,\n codecs: playlist.attributes.CODECS\n },\n cause: 'fast-quality'\n };\n if (enable !== currentlyEnabled && !incompatible) {\n // Ensure the outside world knows about our changes\n changePlaylistFn(playlist);\n if (enable) {\n loader.trigger({\n type: 'renditionenabled',\n metadata\n });\n } else {\n loader.trigger({\n type: 'renditiondisabled',\n metadata\n });\n }\n }\n return enable;\n};\n/**\n * The representation object encapsulates the publicly visible information\n * in a media playlist along with a setter/getter-type function (enabled)\n * for changing the enabled-state of a particular playlist entry\n *\n * @class Representation\n */\n\nclass Representation {\n constructor(vhsHandler, playlist, id) {\n const {\n playlistController_: pc\n } = vhsHandler;\n const qualityChangeFunction = pc.fastQualityChange_.bind(pc); // some playlist attributes are optional\n\n if (playlist.attributes) {\n const resolution = playlist.attributes.RESOLUTION;\n this.width = resolution && resolution.width;\n this.height = resolution && resolution.height;\n this.bandwidth = playlist.attributes.BANDWIDTH;\n this.frameRate = playlist.attributes['FRAME-RATE'];\n }\n this.codecs = codecsForPlaylist(pc.main(), playlist);\n this.playlist = playlist; // The id is simply the ordinality of the media playlist\n // within the main playlist\n\n this.id = id; // Partially-apply the enableFunction to create a playlist-\n // specific variant\n\n this.enabled = enableFunction(vhsHandler.playlists, playlist.id, qualityChangeFunction);\n }\n}\n/**\n * A mixin function that adds the `representations` api to an instance\n * of the VhsHandler class\n *\n * @param {VhsHandler} vhsHandler - An instance of VhsHandler to add the\n * representation API into\n */\n\nconst renditionSelectionMixin = function (vhsHandler) {\n // Add a single API-specific function to the VhsHandler instance\n vhsHandler.representations = () => {\n const main = vhsHandler.playlistController_.main();\n const playlists = isAudioOnly(main) ? vhsHandler.playlistController_.getAudioTrackPlaylists_() : main.playlists;\n if (!playlists) {\n return [];\n }\n return playlists.filter(media => !isIncompatible(media)).map((e, i) => new Representation(vhsHandler, e, e.id));\n };\n};\n\n/**\n * @file playback-watcher.js\n *\n * Playback starts, and now my watch begins. It shall not end until my death. I shall\n * take no wait, hold no uncleared timeouts, father no bad seeks. I shall wear no crowns\n * and win no glory. I shall live and die at my post. I am the corrector of the underflow.\n * I am the watcher of gaps. I am the shield that guards the realms of seekable. I pledge\n * my life and honor to the Playback Watch, for this Player and all the Players to come.\n */\n\nconst timerCancelEvents = ['seeking', 'seeked', 'pause', 'playing', 'error'];\n/**\n * @class PlaybackWatcher\n */\n\nclass PlaybackWatcher extends videojs.EventTarget {\n /**\n * Represents an PlaybackWatcher object.\n *\n * @class\n * @param {Object} options an object that includes the tech and settings\n */\n constructor(options) {\n super();\n this.playlistController_ = options.playlistController;\n this.tech_ = options.tech;\n this.seekable = options.seekable;\n this.allowSeeksWithinUnsafeLiveWindow = options.allowSeeksWithinUnsafeLiveWindow;\n this.liveRangeSafeTimeDelta = options.liveRangeSafeTimeDelta;\n this.media = options.media;\n this.playedRanges_ = [];\n this.consecutiveUpdates = 0;\n this.lastRecordedTime = null;\n this.checkCurrentTimeTimeout_ = null;\n this.logger_ = logger('PlaybackWatcher');\n this.logger_('initialize');\n const playHandler = () => this.monitorCurrentTime_();\n const canPlayHandler = () => this.monitorCurrentTime_();\n const waitingHandler = () => this.techWaiting_();\n const cancelTimerHandler = () => this.resetTimeUpdate_();\n const pc = this.playlistController_;\n const loaderTypes = ['main', 'subtitle', 'audio'];\n const loaderChecks = {};\n loaderTypes.forEach(type => {\n loaderChecks[type] = {\n reset: () => this.resetSegmentDownloads_(type),\n updateend: () => this.checkSegmentDownloads_(type)\n };\n pc[`${type}SegmentLoader_`].on('appendsdone', loaderChecks[type].updateend); // If a rendition switch happens during a playback stall where the buffer\n // isn't changing we want to reset. We cannot assume that the new rendition\n // will also be stalled, until after new appends.\n\n pc[`${type}SegmentLoader_`].on('playlistupdate', loaderChecks[type].reset); // Playback stalls should not be detected right after seeking.\n // This prevents one segment playlists (single vtt or single segment content)\n // from being detected as stalling. As the buffer will not change in those cases, since\n // the buffer is the entire video duration.\n\n this.tech_.on(['seeked', 'seeking'], loaderChecks[type].reset);\n });\n /**\n * We check if a seek was into a gap through the following steps:\n * 1. We get a seeking event and we do not get a seeked event. This means that\n * a seek was attempted but not completed.\n * 2. We run `fixesBadSeeks_` on segment loader appends. This means that we already\n * removed everything from our buffer and appended a segment, and should be ready\n * to check for gaps.\n */\n\n const setSeekingHandlers = fn => {\n ['main', 'audio'].forEach(type => {\n pc[`${type}SegmentLoader_`][fn]('appended', this.seekingAppendCheck_);\n });\n };\n this.seekingAppendCheck_ = () => {\n if (this.fixesBadSeeks_()) {\n this.consecutiveUpdates = 0;\n this.lastRecordedTime = this.tech_.currentTime();\n setSeekingHandlers('off');\n }\n };\n this.clearSeekingAppendCheck_ = () => setSeekingHandlers('off');\n this.watchForBadSeeking_ = () => {\n this.clearSeekingAppendCheck_();\n setSeekingHandlers('on');\n };\n this.tech_.on('seeked', this.clearSeekingAppendCheck_);\n this.tech_.on('seeking', this.watchForBadSeeking_);\n this.tech_.on('waiting', waitingHandler);\n this.tech_.on(timerCancelEvents, cancelTimerHandler);\n this.tech_.on('canplay', canPlayHandler);\n /*\n An edge case exists that results in gaps not being skipped when they exist at the beginning of a stream. This case\n is surfaced in one of two ways:\n 1) The `waiting` event is fired before the player has buffered content, making it impossible\n to find or skip the gap. The `waiting` event is followed by a `play` event. On first play\n we can check if playback is stalled due to a gap, and skip the gap if necessary.\n 2) A source with a gap at the beginning of the stream is loaded programatically while the player\n is in a playing state. To catch this case, it's important that our one-time play listener is setup\n even if the player is in a playing state\n */\n\n this.tech_.one('play', playHandler); // Define the dispose function to clean up our events\n\n this.dispose = () => {\n this.clearSeekingAppendCheck_();\n this.logger_('dispose');\n this.tech_.off('waiting', waitingHandler);\n this.tech_.off(timerCancelEvents, cancelTimerHandler);\n this.tech_.off('canplay', canPlayHandler);\n this.tech_.off('play', playHandler);\n this.tech_.off('seeking', this.watchForBadSeeking_);\n this.tech_.off('seeked', this.clearSeekingAppendCheck_);\n loaderTypes.forEach(type => {\n pc[`${type}SegmentLoader_`].off('appendsdone', loaderChecks[type].updateend);\n pc[`${type}SegmentLoader_`].off('playlistupdate', loaderChecks[type].reset);\n this.tech_.off(['seeked', 'seeking'], loaderChecks[type].reset);\n });\n if (this.checkCurrentTimeTimeout_) {\n window$1.clearTimeout(this.checkCurrentTimeTimeout_);\n }\n this.resetTimeUpdate_();\n };\n }\n /**\n * Periodically check current time to see if playback stopped\n *\n * @private\n */\n\n monitorCurrentTime_() {\n this.checkCurrentTime_();\n if (this.checkCurrentTimeTimeout_) {\n window$1.clearTimeout(this.checkCurrentTimeTimeout_);\n } // 42 = 24 fps // 250 is what Webkit uses // FF uses 15\n\n this.checkCurrentTimeTimeout_ = window$1.setTimeout(this.monitorCurrentTime_.bind(this), 250);\n }\n /**\n * Reset stalled download stats for a specific type of loader\n *\n * @param {string} type\n * The segment loader type to check.\n *\n * @listens SegmentLoader#playlistupdate\n * @listens Tech#seeking\n * @listens Tech#seeked\n */\n\n resetSegmentDownloads_(type) {\n const loader = this.playlistController_[`${type}SegmentLoader_`];\n if (this[`${type}StalledDownloads_`] > 0) {\n this.logger_(`resetting possible stalled download count for ${type} loader`);\n }\n this[`${type}StalledDownloads_`] = 0;\n this[`${type}Buffered_`] = loader.buffered_();\n }\n /**\n * Checks on every segment `appendsdone` to see\n * if segment appends are making progress. If they are not\n * and we are still downloading bytes. We exclude the playlist.\n *\n * @param {string} type\n * The segment loader type to check.\n *\n * @listens SegmentLoader#appendsdone\n */\n\n checkSegmentDownloads_(type) {\n const pc = this.playlistController_;\n const loader = pc[`${type}SegmentLoader_`];\n const buffered = loader.buffered_();\n const isBufferedDifferent = isRangeDifferent(this[`${type}Buffered_`], buffered);\n this[`${type}Buffered_`] = buffered; // if another watcher is going to fix the issue or\n // the buffered value for this loader changed\n // appends are working\n\n if (isBufferedDifferent) {\n const metadata = {\n bufferedRanges: buffered\n };\n pc.trigger({\n type: 'bufferedrangeschanged',\n metadata\n });\n this.resetSegmentDownloads_(type);\n return;\n }\n this[`${type}StalledDownloads_`]++;\n this.logger_(`found #${this[`${type}StalledDownloads_`]} ${type} appends that did not increase buffer (possible stalled download)`, {\n playlistId: loader.playlist_ && loader.playlist_.id,\n buffered: timeRangesToArray(buffered)\n }); // after 10 possibly stalled appends with no reset, exclude\n\n if (this[`${type}StalledDownloads_`] < 10) {\n return;\n }\n this.logger_(`${type} loader stalled download exclusion`);\n this.resetSegmentDownloads_(type);\n this.tech_.trigger({\n type: 'usage',\n name: `vhs-${type}-download-exclusion`\n });\n if (type === 'subtitle') {\n return;\n } // TODO: should we exclude audio tracks rather than main tracks\n // when type is audio?\n\n pc.excludePlaylist({\n error: {\n message: `Excessive ${type} segment downloading detected.`\n },\n playlistExclusionDuration: Infinity\n });\n }\n /**\n * The purpose of this function is to emulate the \"waiting\" event on\n * browsers that do not emit it when they are waiting for more\n * data to continue playback\n *\n * @private\n */\n\n checkCurrentTime_() {\n if (this.tech_.paused() || this.tech_.seeking()) {\n return;\n }\n const currentTime = this.tech_.currentTime();\n const buffered = this.tech_.buffered();\n if (this.lastRecordedTime === currentTime && (!buffered.length || currentTime + SAFE_TIME_DELTA >= buffered.end(buffered.length - 1))) {\n // If current time is at the end of the final buffered region, then any playback\n // stall is most likely caused by buffering in a low bandwidth environment. The tech\n // should fire a `waiting` event in this scenario, but due to browser and tech\n // inconsistencies. Calling `techWaiting_` here allows us to simulate\n // responding to a native `waiting` event when the tech fails to emit one.\n return this.techWaiting_();\n }\n if (this.consecutiveUpdates >= 5 && currentTime === this.lastRecordedTime) {\n this.consecutiveUpdates++;\n this.waiting_();\n } else if (currentTime === this.lastRecordedTime) {\n this.consecutiveUpdates++;\n } else {\n this.playedRanges_.push(createTimeRanges([this.lastRecordedTime, currentTime]));\n const metadata = {\n playedRanges: this.playedRanges_\n };\n this.playlistController_.trigger({\n type: 'playedrangeschanged',\n metadata\n });\n this.consecutiveUpdates = 0;\n this.lastRecordedTime = currentTime;\n }\n }\n /**\n * Resets the 'timeupdate' mechanism designed to detect that we are stalled\n *\n * @private\n */\n\n resetTimeUpdate_() {\n this.consecutiveUpdates = 0;\n }\n /**\n * Fixes situations where there's a bad seek\n *\n * @return {boolean} whether an action was taken to fix the seek\n * @private\n */\n\n fixesBadSeeks_() {\n const seeking = this.tech_.seeking();\n if (!seeking) {\n return false;\n } // TODO: It's possible that these seekable checks should be moved out of this function\n // and into a function that runs on seekablechange. It's also possible that we only need\n // afterSeekableWindow as the buffered check at the bottom is good enough to handle before\n // seekable range.\n\n const seekable = this.seekable();\n const currentTime = this.tech_.currentTime();\n const isAfterSeekableRange = this.afterSeekableWindow_(seekable, currentTime, this.media(), this.allowSeeksWithinUnsafeLiveWindow);\n let seekTo;\n if (isAfterSeekableRange) {\n const seekableEnd = seekable.end(seekable.length - 1); // sync to live point (if VOD, our seekable was updated and we're simply adjusting)\n\n seekTo = seekableEnd;\n }\n if (this.beforeSeekableWindow_(seekable, currentTime)) {\n const seekableStart = seekable.start(0); // sync to the beginning of the live window\n // provide a buffer of .1 seconds to handle rounding/imprecise numbers\n\n seekTo = seekableStart + (\n // if the playlist is too short and the seekable range is an exact time (can\n // happen in live with a 3 segment playlist), then don't use a time delta\n seekableStart === seekable.end(0) ? 0 : SAFE_TIME_DELTA);\n }\n if (typeof seekTo !== 'undefined') {\n this.logger_(`Trying to seek outside of seekable at time ${currentTime} with ` + `seekable range ${printableRange(seekable)}. Seeking to ` + `${seekTo}.`);\n this.tech_.setCurrentTime(seekTo);\n return true;\n }\n const sourceUpdater = this.playlistController_.sourceUpdater_;\n const buffered = this.tech_.buffered();\n const audioBuffered = sourceUpdater.audioBuffer ? sourceUpdater.audioBuffered() : null;\n const videoBuffered = sourceUpdater.videoBuffer ? sourceUpdater.videoBuffered() : null;\n const media = this.media(); // verify that at least two segment durations or one part duration have been\n // appended before checking for a gap.\n\n const minAppendedDuration = media.partTargetDuration ? media.partTargetDuration : (media.targetDuration - TIME_FUDGE_FACTOR) * 2; // verify that at least two segment durations have been\n // appended before checking for a gap.\n\n const bufferedToCheck = [audioBuffered, videoBuffered];\n for (let i = 0; i < bufferedToCheck.length; i++) {\n // skip null buffered\n if (!bufferedToCheck[i]) {\n continue;\n }\n const timeAhead = timeAheadOf(bufferedToCheck[i], currentTime); // if we are less than two video/audio segment durations or one part\n // duration behind we haven't appended enough to call this a bad seek.\n\n if (timeAhead < minAppendedDuration) {\n return false;\n }\n }\n const nextRange = findNextRange(buffered, currentTime); // we have appended enough content, but we don't have anything buffered\n // to seek over the gap\n\n if (nextRange.length === 0) {\n return false;\n }\n seekTo = nextRange.start(0) + SAFE_TIME_DELTA;\n this.logger_(`Buffered region starts (${nextRange.start(0)}) ` + ` just beyond seek point (${currentTime}). Seeking to ${seekTo}.`);\n this.tech_.setCurrentTime(seekTo);\n return true;\n }\n /**\n * Handler for situations when we determine the player is waiting.\n *\n * @private\n */\n\n waiting_() {\n if (this.techWaiting_()) {\n return;\n } // All tech waiting checks failed. Use last resort correction\n\n const currentTime = this.tech_.currentTime();\n const buffered = this.tech_.buffered();\n const currentRange = findRange(buffered, currentTime); // Sometimes the player can stall for unknown reasons within a contiguous buffered\n // region with no indication that anything is amiss (seen in Firefox). Seeking to\n // currentTime is usually enough to kickstart the player. This checks that the player\n // is currently within a buffered region before attempting a corrective seek.\n // Chrome does not appear to continue `timeupdate` events after a `waiting` event\n // until there is ~ 3 seconds of forward buffer available. PlaybackWatcher should also\n // make sure there is ~3 seconds of forward buffer before taking any corrective action\n // to avoid triggering an `unknownwaiting` event when the network is slow.\n\n if (currentRange.length && currentTime + 3 <= currentRange.end(0)) {\n this.resetTimeUpdate_();\n this.tech_.setCurrentTime(currentTime);\n this.logger_(`Stopped at ${currentTime} while inside a buffered region ` + `[${currentRange.start(0)} -> ${currentRange.end(0)}]. Attempting to resume ` + 'playback by seeking to the current time.'); // unknown waiting corrections may be useful for monitoring QoS\n\n this.tech_.trigger({\n type: 'usage',\n name: 'vhs-unknown-waiting'\n });\n return;\n }\n }\n /**\n * Handler for situations when the tech fires a `waiting` event\n *\n * @return {boolean}\n * True if an action (or none) was needed to correct the waiting. False if no\n * checks passed\n * @private\n */\n\n techWaiting_() {\n const seekable = this.seekable();\n const currentTime = this.tech_.currentTime();\n if (this.tech_.seeking()) {\n // Tech is seeking or already waiting on another action, no action needed\n return true;\n }\n if (this.beforeSeekableWindow_(seekable, currentTime)) {\n const livePoint = seekable.end(seekable.length - 1);\n this.logger_(`Fell out of live window at time ${currentTime}. Seeking to ` + `live point (seekable end) ${livePoint}`);\n this.resetTimeUpdate_();\n this.tech_.setCurrentTime(livePoint); // live window resyncs may be useful for monitoring QoS\n\n this.tech_.trigger({\n type: 'usage',\n name: 'vhs-live-resync'\n });\n return true;\n }\n const sourceUpdater = this.tech_.vhs.playlistController_.sourceUpdater_;\n const buffered = this.tech_.buffered();\n const videoUnderflow = this.videoUnderflow_({\n audioBuffered: sourceUpdater.audioBuffered(),\n videoBuffered: sourceUpdater.videoBuffered(),\n currentTime\n });\n if (videoUnderflow) {\n // Even though the video underflowed and was stuck in a gap, the audio overplayed\n // the gap, leading currentTime into a buffered range. Seeking to currentTime\n // allows the video to catch up to the audio position without losing any audio\n // (only suffering ~3 seconds of frozen video and a pause in audio playback).\n this.resetTimeUpdate_();\n this.tech_.setCurrentTime(currentTime); // video underflow may be useful for monitoring QoS\n\n this.tech_.trigger({\n type: 'usage',\n name: 'vhs-video-underflow'\n });\n return true;\n }\n const nextRange = findNextRange(buffered, currentTime); // check for gap\n\n if (nextRange.length > 0) {\n this.logger_(`Stopped at ${currentTime} and seeking to ${nextRange.start(0)}`);\n this.resetTimeUpdate_();\n this.skipTheGap_(currentTime);\n return true;\n } // All checks failed. Returning false to indicate failure to correct waiting\n\n return false;\n }\n afterSeekableWindow_(seekable, currentTime, playlist, allowSeeksWithinUnsafeLiveWindow = false) {\n if (!seekable.length) {\n // we can't make a solid case if there's no seekable, default to false\n return false;\n }\n let allowedEnd = seekable.end(seekable.length - 1) + SAFE_TIME_DELTA;\n const isLive = !playlist.endList;\n const isLLHLS = typeof playlist.partTargetDuration === 'number';\n if (isLive && (isLLHLS || allowSeeksWithinUnsafeLiveWindow)) {\n allowedEnd = seekable.end(seekable.length - 1) + playlist.targetDuration * 3;\n }\n if (currentTime > allowedEnd) {\n return true;\n }\n return false;\n }\n beforeSeekableWindow_(seekable, currentTime) {\n if (seekable.length &&\n // can't fall before 0 and 0 seekable start identifies VOD stream\n seekable.start(0) > 0 && currentTime < seekable.start(0) - this.liveRangeSafeTimeDelta) {\n return true;\n }\n return false;\n }\n videoUnderflow_({\n videoBuffered,\n audioBuffered,\n currentTime\n }) {\n // audio only content will not have video underflow :)\n if (!videoBuffered) {\n return;\n }\n let gap; // find a gap in demuxed content.\n\n if (videoBuffered.length && audioBuffered.length) {\n // in Chrome audio will continue to play for ~3s when we run out of video\n // so we have to check that the video buffer did have some buffer in the\n // past.\n const lastVideoRange = findRange(videoBuffered, currentTime - 3);\n const videoRange = findRange(videoBuffered, currentTime);\n const audioRange = findRange(audioBuffered, currentTime);\n if (audioRange.length && !videoRange.length && lastVideoRange.length) {\n gap = {\n start: lastVideoRange.end(0),\n end: audioRange.end(0)\n };\n } // find a gap in muxed content.\n } else {\n const nextRange = findNextRange(videoBuffered, currentTime); // Even if there is no available next range, there is still a possibility we are\n // stuck in a gap due to video underflow.\n\n if (!nextRange.length) {\n gap = this.gapFromVideoUnderflow_(videoBuffered, currentTime);\n }\n }\n if (gap) {\n this.logger_(`Encountered a gap in video from ${gap.start} to ${gap.end}. ` + `Seeking to current time ${currentTime}`);\n return true;\n }\n return false;\n }\n /**\n * Timer callback. If playback still has not proceeded, then we seek\n * to the start of the next buffered region.\n *\n * @private\n */\n\n skipTheGap_(scheduledCurrentTime) {\n const buffered = this.tech_.buffered();\n const currentTime = this.tech_.currentTime();\n const nextRange = findNextRange(buffered, currentTime);\n this.resetTimeUpdate_();\n if (nextRange.length === 0 || currentTime !== scheduledCurrentTime) {\n return;\n }\n this.logger_('skipTheGap_:', 'currentTime:', currentTime, 'scheduled currentTime:', scheduledCurrentTime, 'nextRange start:', nextRange.start(0)); // only seek if we still have not played\n\n this.tech_.setCurrentTime(nextRange.start(0) + TIME_FUDGE_FACTOR);\n const metadata = {\n gapInfo: {\n from: currentTime,\n to: nextRange.start(0)\n }\n };\n this.playlistController_.trigger({\n type: 'gapjumped',\n metadata\n });\n this.tech_.trigger({\n type: 'usage',\n name: 'vhs-gap-skip'\n });\n }\n gapFromVideoUnderflow_(buffered, currentTime) {\n // At least in Chrome, if there is a gap in the video buffer, the audio will continue\n // playing for ~3 seconds after the video gap starts. This is done to account for\n // video buffer underflow/underrun (note that this is not done when there is audio\n // buffer underflow/underrun -- in that case the video will stop as soon as it\n // encounters the gap, as audio stalls are more noticeable/jarring to a user than\n // video stalls). The player's time will reflect the playthrough of audio, so the\n // time will appear as if we are in a buffered region, even if we are stuck in a\n // \"gap.\"\n //\n // Example:\n // video buffer: 0 => 10.1, 10.2 => 20\n // audio buffer: 0 => 20\n // overall buffer: 0 => 10.1, 10.2 => 20\n // current time: 13\n //\n // Chrome's video froze at 10 seconds, where the video buffer encountered the gap,\n // however, the audio continued playing until it reached ~3 seconds past the gap\n // (13 seconds), at which point it stops as well. Since current time is past the\n // gap, findNextRange will return no ranges.\n //\n // To check for this issue, we see if there is a gap that starts somewhere within\n // a 3 second range (3 seconds +/- 1 second) back from our current time.\n const gaps = findGaps(buffered);\n for (let i = 0; i < gaps.length; i++) {\n const start = gaps.start(i);\n const end = gaps.end(i); // gap is starts no more than 4 seconds back\n\n if (currentTime - start < 4 && currentTime - start > 2) {\n return {\n start,\n end\n };\n }\n }\n return null;\n }\n}\nconst defaultOptions = {\n errorInterval: 30,\n getSource(next) {\n const tech = this.tech({\n IWillNotUseThisInPlugins: true\n });\n const sourceObj = tech.currentSource_ || this.currentSource();\n return next(sourceObj);\n }\n};\n/**\n * Main entry point for the plugin\n *\n * @param {Player} player a reference to a videojs Player instance\n * @param {Object} [options] an object with plugin options\n * @private\n */\n\nconst initPlugin = function (player, options) {\n let lastCalled = 0;\n let seekTo = 0;\n const localOptions = merge(defaultOptions, options);\n player.ready(() => {\n player.trigger({\n type: 'usage',\n name: 'vhs-error-reload-initialized'\n });\n });\n /**\n * Player modifications to perform that must wait until `loadedmetadata`\n * has been triggered\n *\n * @private\n */\n\n const loadedMetadataHandler = function () {\n if (seekTo) {\n player.currentTime(seekTo);\n }\n };\n /**\n * Set the source on the player element, play, and seek if necessary\n *\n * @param {Object} sourceObj An object specifying the source url and mime-type to play\n * @private\n */\n\n const setSource = function (sourceObj) {\n if (sourceObj === null || sourceObj === undefined) {\n return;\n }\n seekTo = player.duration() !== Infinity && player.currentTime() || 0;\n player.one('loadedmetadata', loadedMetadataHandler);\n player.src(sourceObj);\n player.trigger({\n type: 'usage',\n name: 'vhs-error-reload'\n });\n player.play();\n };\n /**\n * Attempt to get a source from either the built-in getSource function\n * or a custom function provided via the options\n *\n * @private\n */\n\n const errorHandler = function () {\n // Do not attempt to reload the source if a source-reload occurred before\n // 'errorInterval' time has elapsed since the last source-reload\n if (Date.now() - lastCalled < localOptions.errorInterval * 1000) {\n player.trigger({\n type: 'usage',\n name: 'vhs-error-reload-canceled'\n });\n return;\n }\n if (!localOptions.getSource || typeof localOptions.getSource !== 'function') {\n videojs.log.error('ERROR: reloadSourceOnError - The option getSource must be a function!');\n return;\n }\n lastCalled = Date.now();\n return localOptions.getSource.call(player, setSource);\n };\n /**\n * Unbind any event handlers that were bound by the plugin\n *\n * @private\n */\n\n const cleanupEvents = function () {\n player.off('loadedmetadata', loadedMetadataHandler);\n player.off('error', errorHandler);\n player.off('dispose', cleanupEvents);\n };\n /**\n * Cleanup before re-initializing the plugin\n *\n * @param {Object} [newOptions] an object with plugin options\n * @private\n */\n\n const reinitPlugin = function (newOptions) {\n cleanupEvents();\n initPlugin(player, newOptions);\n };\n player.on('error', errorHandler);\n player.on('dispose', cleanupEvents); // Overwrite the plugin function so that we can correctly cleanup before\n // initializing the plugin\n\n player.reloadSourceOnError = reinitPlugin;\n};\n/**\n * Reload the source when an error is detected as long as there\n * wasn't an error previously within the last 30 seconds\n *\n * @param {Object} [options] an object with plugin options\n */\n\nconst reloadSourceOnError = function (options) {\n initPlugin(this, options);\n};\nvar version$4 = \"3.13.3\";\nvar version$3 = \"7.0.3\";\nvar version$2 = \"1.3.0\";\nvar version$1 = \"7.1.0\";\nvar version = \"4.0.1\";\nconst Vhs = {\n PlaylistLoader,\n Playlist,\n utils,\n STANDARD_PLAYLIST_SELECTOR: lastBandwidthSelector,\n INITIAL_PLAYLIST_SELECTOR: lowestBitrateCompatibleVariantSelector,\n lastBandwidthSelector,\n movingAverageBandwidthSelector,\n comparePlaylistBandwidth,\n comparePlaylistResolution,\n xhr: xhrFactory()\n}; // Define getter/setters for config properties\n\nObject.keys(Config).forEach(prop => {\n Object.defineProperty(Vhs, prop, {\n get() {\n videojs.log.warn(`using Vhs.${prop} is UNSAFE be sure you know what you are doing`);\n return Config[prop];\n },\n set(value) {\n videojs.log.warn(`using Vhs.${prop} is UNSAFE be sure you know what you are doing`);\n if (typeof value !== 'number' || value < 0) {\n videojs.log.warn(`value of Vhs.${prop} must be greater than or equal to 0`);\n return;\n }\n Config[prop] = value;\n }\n });\n});\nconst LOCAL_STORAGE_KEY = 'videojs-vhs';\n/**\n * Updates the selectedIndex of the QualityLevelList when a mediachange happens in vhs.\n *\n * @param {QualityLevelList} qualityLevels The QualityLevelList to update.\n * @param {PlaylistLoader} playlistLoader PlaylistLoader containing the new media info.\n * @function handleVhsMediaChange\n */\n\nconst handleVhsMediaChange = function (qualityLevels, playlistLoader) {\n const newPlaylist = playlistLoader.media();\n let selectedIndex = -1;\n for (let i = 0; i < qualityLevels.length; i++) {\n if (qualityLevels[i].id === newPlaylist.id) {\n selectedIndex = i;\n break;\n }\n }\n qualityLevels.selectedIndex_ = selectedIndex;\n qualityLevels.trigger({\n selectedIndex,\n type: 'change'\n });\n};\n/**\n * Adds quality levels to list once playlist metadata is available\n *\n * @param {QualityLevelList} qualityLevels The QualityLevelList to attach events to.\n * @param {Object} vhs Vhs object to listen to for media events.\n * @function handleVhsLoadedMetadata\n */\n\nconst handleVhsLoadedMetadata = function (qualityLevels, vhs) {\n vhs.representations().forEach(rep => {\n qualityLevels.addQualityLevel(rep);\n });\n handleVhsMediaChange(qualityLevels, vhs.playlists);\n}; // VHS is a source handler, not a tech. Make sure attempts to use it\n// as one do not cause exceptions.\n\nVhs.canPlaySource = function () {\n return videojs.log.warn('VHS is no longer a tech. Please remove it from ' + 'your player\\'s techOrder.');\n};\nconst emeKeySystems = (keySystemOptions, mainPlaylist, audioPlaylist) => {\n if (!keySystemOptions) {\n return keySystemOptions;\n }\n let codecs = {};\n if (mainPlaylist && mainPlaylist.attributes && mainPlaylist.attributes.CODECS) {\n codecs = unwrapCodecList(parseCodecs(mainPlaylist.attributes.CODECS));\n }\n if (audioPlaylist && audioPlaylist.attributes && audioPlaylist.attributes.CODECS) {\n codecs.audio = audioPlaylist.attributes.CODECS;\n }\n const videoContentType = getMimeForCodec(codecs.video);\n const audioContentType = getMimeForCodec(codecs.audio); // upsert the content types based on the selected playlist\n\n const keySystemContentTypes = {};\n for (const keySystem in keySystemOptions) {\n keySystemContentTypes[keySystem] = {};\n if (audioContentType) {\n keySystemContentTypes[keySystem].audioContentType = audioContentType;\n }\n if (videoContentType) {\n keySystemContentTypes[keySystem].videoContentType = videoContentType;\n } // Default to using the video playlist's PSSH even though they may be different, as\n // videojs-contrib-eme will only accept one in the options.\n //\n // This shouldn't be an issue for most cases as early intialization will handle all\n // unique PSSH values, and if they aren't, then encrypted events should have the\n // specific information needed for the unique license.\n\n if (mainPlaylist.contentProtection && mainPlaylist.contentProtection[keySystem] && mainPlaylist.contentProtection[keySystem].pssh) {\n keySystemContentTypes[keySystem].pssh = mainPlaylist.contentProtection[keySystem].pssh;\n } // videojs-contrib-eme accepts the option of specifying: 'com.some.cdm': 'url'\n // so we need to prevent overwriting the URL entirely\n\n if (typeof keySystemOptions[keySystem] === 'string') {\n keySystemContentTypes[keySystem].url = keySystemOptions[keySystem];\n }\n }\n return merge(keySystemOptions, keySystemContentTypes);\n};\n/**\n * @typedef {Object} KeySystems\n *\n * keySystems configuration for https://github.com/videojs/videojs-contrib-eme\n * Note: not all options are listed here.\n *\n * @property {Uint8Array} [pssh]\n * Protection System Specific Header\n */\n\n/**\n * Goes through all the playlists and collects an array of KeySystems options objects\n * containing each playlist's keySystems and their pssh values, if available.\n *\n * @param {Object[]} playlists\n * The playlists to look through\n * @param {string[]} keySystems\n * The keySystems to collect pssh values for\n *\n * @return {KeySystems[]}\n * An array of KeySystems objects containing available key systems and their\n * pssh values\n */\n\nconst getAllPsshKeySystemsOptions = (playlists, keySystems) => {\n return playlists.reduce((keySystemsArr, playlist) => {\n if (!playlist.contentProtection) {\n return keySystemsArr;\n }\n const keySystemsOptions = keySystems.reduce((keySystemsObj, keySystem) => {\n const keySystemOptions = playlist.contentProtection[keySystem];\n if (keySystemOptions && keySystemOptions.pssh) {\n keySystemsObj[keySystem] = {\n pssh: keySystemOptions.pssh\n };\n }\n return keySystemsObj;\n }, {});\n if (Object.keys(keySystemsOptions).length) {\n keySystemsArr.push(keySystemsOptions);\n }\n return keySystemsArr;\n }, []);\n};\n/**\n * Returns a promise that waits for the\n * [eme plugin](https://github.com/videojs/videojs-contrib-eme) to create a key session.\n *\n * Works around https://bugs.chromium.org/p/chromium/issues/detail?id=895449 in non-IE11\n * browsers.\n *\n * As per the above ticket, this is particularly important for Chrome, where, if\n * unencrypted content is appended before encrypted content and the key session has not\n * been created, a MEDIA_ERR_DECODE will be thrown once the encrypted content is reached\n * during playback.\n *\n * @param {Object} player\n * The player instance\n * @param {Object[]} sourceKeySystems\n * The key systems options from the player source\n * @param {Object} [audioMedia]\n * The active audio media playlist (optional)\n * @param {Object[]} mainPlaylists\n * The playlists found on the main playlist object\n *\n * @return {Object}\n * Promise that resolves when the key session has been created\n */\n\nconst waitForKeySessionCreation = ({\n player,\n sourceKeySystems,\n audioMedia,\n mainPlaylists\n}) => {\n if (!player.eme.initializeMediaKeys) {\n return Promise.resolve();\n } // TODO should all audio PSSH values be initialized for DRM?\n //\n // All unique video rendition pssh values are initialized for DRM, but here only\n // the initial audio playlist license is initialized. In theory, an encrypted\n // event should be fired if the user switches to an alternative audio playlist\n // where a license is required, but this case hasn't yet been tested. In addition, there\n // may be many alternate audio playlists unlikely to be used (e.g., multiple different\n // languages).\n\n const playlists = audioMedia ? mainPlaylists.concat([audioMedia]) : mainPlaylists;\n const keySystemsOptionsArr = getAllPsshKeySystemsOptions(playlists, Object.keys(sourceKeySystems));\n const initializationFinishedPromises = [];\n const keySessionCreatedPromises = []; // Since PSSH values are interpreted as initData, EME will dedupe any duplicates. The\n // only place where it should not be deduped is for ms-prefixed APIs, but\n // the existence of modern EME APIs in addition to\n // ms-prefixed APIs on Edge should prevent this from being a concern.\n // initializeMediaKeys also won't use the webkit-prefixed APIs.\n\n keySystemsOptionsArr.forEach(keySystemsOptions => {\n keySessionCreatedPromises.push(new Promise((resolve, reject) => {\n player.tech_.one('keysessioncreated', resolve);\n }));\n initializationFinishedPromises.push(new Promise((resolve, reject) => {\n player.eme.initializeMediaKeys({\n keySystems: keySystemsOptions\n }, err => {\n if (err) {\n reject(err);\n return;\n }\n resolve();\n });\n }));\n }); // The reasons Promise.race is chosen over Promise.any:\n //\n // * Promise.any is only available in Safari 14+.\n // * None of these promises are expected to reject. If they do reject, it might be\n // better here for the race to surface the rejection, rather than mask it by using\n // Promise.any.\n\n return Promise.race([\n // If a session was previously created, these will all finish resolving without\n // creating a new session, otherwise it will take until the end of all license\n // requests, which is why the key session check is used (to make setup much faster).\n Promise.all(initializationFinishedPromises),\n // Once a single session is created, the browser knows DRM will be used.\n Promise.race(keySessionCreatedPromises)]);\n};\n/**\n * If the [eme](https://github.com/videojs/videojs-contrib-eme) plugin is available, and\n * there are keySystems on the source, sets up source options to prepare the source for\n * eme.\n *\n * @param {Object} player\n * The player instance\n * @param {Object[]} sourceKeySystems\n * The key systems options from the player source\n * @param {Object} media\n * The active media playlist\n * @param {Object} [audioMedia]\n * The active audio media playlist (optional)\n *\n * @return {boolean}\n * Whether or not options were configured and EME is available\n */\n\nconst setupEmeOptions = ({\n player,\n sourceKeySystems,\n media,\n audioMedia\n}) => {\n const sourceOptions = emeKeySystems(sourceKeySystems, media, audioMedia);\n if (!sourceOptions) {\n return false;\n }\n player.currentSource().keySystems = sourceOptions; // eme handles the rest of the setup, so if it is missing\n // do nothing.\n\n if (sourceOptions && !player.eme) {\n videojs.log.warn('DRM encrypted source cannot be decrypted without a DRM plugin');\n return false;\n }\n return true;\n};\nconst getVhsLocalStorage = () => {\n if (!window$1.localStorage) {\n return null;\n }\n const storedObject = window$1.localStorage.getItem(LOCAL_STORAGE_KEY);\n if (!storedObject) {\n return null;\n }\n try {\n return JSON.parse(storedObject);\n } catch (e) {\n // someone may have tampered with the value\n return null;\n }\n};\nconst updateVhsLocalStorage = options => {\n if (!window$1.localStorage) {\n return false;\n }\n let objectToStore = getVhsLocalStorage();\n objectToStore = objectToStore ? merge(objectToStore, options) : options;\n try {\n window$1.localStorage.setItem(LOCAL_STORAGE_KEY, JSON.stringify(objectToStore));\n } catch (e) {\n // Throws if storage is full (e.g., always on iOS 5+ Safari private mode, where\n // storage is set to 0).\n // https://developer.mozilla.org/en-US/docs/Web/API/Storage/setItem#Exceptions\n // No need to perform any operation.\n return false;\n }\n return objectToStore;\n};\n/**\n * Parses VHS-supported media types from data URIs. See\n * https://developer.mozilla.org/en-US/docs/Web/HTTP/Basics_of_HTTP/Data_URIs\n * for information on data URIs.\n *\n * @param {string} dataUri\n * The data URI\n *\n * @return {string|Object}\n * The parsed object/string, or the original string if no supported media type\n * was found\n */\n\nconst expandDataUri = dataUri => {\n if (dataUri.toLowerCase().indexOf('data:application/vnd.videojs.vhs+json,') === 0) {\n return JSON.parse(dataUri.substring(dataUri.indexOf(',') + 1));\n } // no known case for this data URI, return the string as-is\n\n return dataUri;\n};\n/**\n * Adds a request hook to an xhr object\n *\n * @param {Object} xhr object to add the onRequest hook to\n * @param {function} callback hook function for an xhr request\n */\n\nconst addOnRequestHook = (xhr, callback) => {\n if (!xhr._requestCallbackSet) {\n xhr._requestCallbackSet = new Set();\n }\n xhr._requestCallbackSet.add(callback);\n};\n/**\n * Adds a response hook to an xhr object\n *\n * @param {Object} xhr object to add the onResponse hook to\n * @param {function} callback hook function for an xhr response\n */\n\nconst addOnResponseHook = (xhr, callback) => {\n if (!xhr._responseCallbackSet) {\n xhr._responseCallbackSet = new Set();\n }\n xhr._responseCallbackSet.add(callback);\n};\n/**\n * Removes a request hook on an xhr object, deletes the onRequest set if empty.\n *\n * @param {Object} xhr object to remove the onRequest hook from\n * @param {function} callback hook function to remove\n */\n\nconst removeOnRequestHook = (xhr, callback) => {\n if (!xhr._requestCallbackSet) {\n return;\n }\n xhr._requestCallbackSet.delete(callback);\n if (!xhr._requestCallbackSet.size) {\n delete xhr._requestCallbackSet;\n }\n};\n/**\n * Removes a response hook on an xhr object, deletes the onResponse set if empty.\n *\n * @param {Object} xhr object to remove the onResponse hook from\n * @param {function} callback hook function to remove\n */\n\nconst removeOnResponseHook = (xhr, callback) => {\n if (!xhr._responseCallbackSet) {\n return;\n }\n xhr._responseCallbackSet.delete(callback);\n if (!xhr._responseCallbackSet.size) {\n delete xhr._responseCallbackSet;\n }\n};\n/**\n * Whether the browser has built-in HLS support.\n */\n\nVhs.supportsNativeHls = function () {\n if (!document$1 || !document$1.createElement) {\n return false;\n }\n const video = document$1.createElement('video'); // native HLS is definitely not supported if HTML5 video isn't\n\n if (!videojs.getTech('Html5').isSupported()) {\n return false;\n } // HLS manifests can go by many mime-types\n\n const canPlay = [\n // Apple santioned\n 'application/vnd.apple.mpegurl',\n // Apple sanctioned for backwards compatibility\n 'audio/mpegurl',\n // Very common\n 'audio/x-mpegurl',\n // Very common\n 'application/x-mpegurl',\n // Included for completeness\n 'video/x-mpegurl', 'video/mpegurl', 'application/mpegurl'];\n return canPlay.some(function (canItPlay) {\n return /maybe|probably/i.test(video.canPlayType(canItPlay));\n });\n}();\nVhs.supportsNativeDash = function () {\n if (!document$1 || !document$1.createElement || !videojs.getTech('Html5').isSupported()) {\n return false;\n }\n return /maybe|probably/i.test(document$1.createElement('video').canPlayType('application/dash+xml'));\n}();\nVhs.supportsTypeNatively = type => {\n if (type === 'hls') {\n return Vhs.supportsNativeHls;\n }\n if (type === 'dash') {\n return Vhs.supportsNativeDash;\n }\n return false;\n};\n/**\n * VHS is a source handler, not a tech. Make sure attempts to use it\n * as one do not cause exceptions.\n */\n\nVhs.isSupported = function () {\n return videojs.log.warn('VHS is no longer a tech. Please remove it from ' + 'your player\\'s techOrder.');\n};\n/**\n * A global function for setting an onRequest hook\n *\n * @param {function} callback for request modifiction\n */\n\nVhs.xhr.onRequest = function (callback) {\n addOnRequestHook(Vhs.xhr, callback);\n};\n/**\n * A global function for setting an onResponse hook\n *\n * @param {callback} callback for response data retrieval\n */\n\nVhs.xhr.onResponse = function (callback) {\n addOnResponseHook(Vhs.xhr, callback);\n};\n/**\n * Deletes a global onRequest callback if it exists\n *\n * @param {function} callback to delete from the global set\n */\n\nVhs.xhr.offRequest = function (callback) {\n removeOnRequestHook(Vhs.xhr, callback);\n};\n/**\n * Deletes a global onResponse callback if it exists\n *\n * @param {function} callback to delete from the global set\n */\n\nVhs.xhr.offResponse = function (callback) {\n removeOnResponseHook(Vhs.xhr, callback);\n};\nconst Component = videojs.getComponent('Component');\n/**\n * The Vhs Handler object, where we orchestrate all of the parts\n * of VHS to interact with video.js\n *\n * @class VhsHandler\n * @extends videojs.Component\n * @param {Object} source the soruce object\n * @param {Tech} tech the parent tech object\n * @param {Object} options optional and required options\n */\n\nclass VhsHandler extends Component {\n constructor(source, tech, options) {\n super(tech, options.vhs); // if a tech level `initialBandwidth` option was passed\n // use that over the VHS level `bandwidth` option\n\n if (typeof options.initialBandwidth === 'number') {\n this.options_.bandwidth = options.initialBandwidth;\n }\n this.logger_ = logger('VhsHandler'); // we need access to the player in some cases,\n // so, get it from Video.js via the `playerId`\n\n if (tech.options_ && tech.options_.playerId) {\n const _player = videojs.getPlayer(tech.options_.playerId);\n this.player_ = _player;\n }\n this.tech_ = tech;\n this.source_ = source;\n this.stats = {};\n this.ignoreNextSeekingEvent_ = false;\n this.setOptions_();\n if (this.options_.overrideNative && tech.overrideNativeAudioTracks && tech.overrideNativeVideoTracks) {\n tech.overrideNativeAudioTracks(true);\n tech.overrideNativeVideoTracks(true);\n } else if (this.options_.overrideNative && (tech.featuresNativeVideoTracks || tech.featuresNativeAudioTracks)) {\n // overriding native VHS only works if audio tracks have been emulated\n // error early if we're misconfigured\n throw new Error('Overriding native VHS requires emulated tracks. ' + 'See https://git.io/vMpjB');\n } // listen for fullscreenchange events for this player so that we\n // can adjust our quality selection quickly\n\n this.on(document$1, ['fullscreenchange', 'webkitfullscreenchange', 'mozfullscreenchange', 'MSFullscreenChange'], event => {\n const fullscreenElement = document$1.fullscreenElement || document$1.webkitFullscreenElement || document$1.mozFullScreenElement || document$1.msFullscreenElement;\n if (fullscreenElement && fullscreenElement.contains(this.tech_.el())) {\n this.playlistController_.fastQualityChange_();\n } else {\n // When leaving fullscreen, since the in page pixel dimensions should be smaller\n // than full screen, see if there should be a rendition switch down to preserve\n // bandwidth.\n this.playlistController_.checkABR_();\n }\n });\n this.on(this.tech_, 'seeking', function () {\n if (this.ignoreNextSeekingEvent_) {\n this.ignoreNextSeekingEvent_ = false;\n return;\n }\n this.setCurrentTime(this.tech_.currentTime());\n });\n this.on(this.tech_, 'error', function () {\n // verify that the error was real and we are loaded\n // enough to have pc loaded.\n if (this.tech_.error() && this.playlistController_) {\n this.playlistController_.pauseLoading();\n }\n });\n this.on(this.tech_, 'play', this.play);\n }\n /**\n * Set VHS options based on options from configuration, as well as partial\n * options to be passed at a later time.\n *\n * @param {Object} options A partial chunk of config options\n */\n\n setOptions_(options = {}) {\n this.options_ = merge(this.options_, options); // defaults\n\n this.options_.withCredentials = this.options_.withCredentials || false;\n this.options_.limitRenditionByPlayerDimensions = this.options_.limitRenditionByPlayerDimensions === false ? false : true;\n this.options_.useDevicePixelRatio = this.options_.useDevicePixelRatio || false;\n this.options_.useBandwidthFromLocalStorage = typeof this.source_.useBandwidthFromLocalStorage !== 'undefined' ? this.source_.useBandwidthFromLocalStorage : this.options_.useBandwidthFromLocalStorage || false;\n this.options_.useForcedSubtitles = this.options_.useForcedSubtitles || false;\n this.options_.useNetworkInformationApi = this.options_.useNetworkInformationApi || false;\n this.options_.useDtsForTimestampOffset = this.options_.useDtsForTimestampOffset || false;\n this.options_.customTagParsers = this.options_.customTagParsers || [];\n this.options_.customTagMappers = this.options_.customTagMappers || [];\n this.options_.cacheEncryptionKeys = this.options_.cacheEncryptionKeys || false;\n this.options_.llhls = this.options_.llhls === false ? false : true;\n this.options_.bufferBasedABR = this.options_.bufferBasedABR || false;\n if (typeof this.options_.playlistExclusionDuration !== 'number') {\n this.options_.playlistExclusionDuration = 60;\n }\n if (typeof this.options_.bandwidth !== 'number') {\n if (this.options_.useBandwidthFromLocalStorage) {\n const storedObject = getVhsLocalStorage();\n if (storedObject && storedObject.bandwidth) {\n this.options_.bandwidth = storedObject.bandwidth;\n this.tech_.trigger({\n type: 'usage',\n name: 'vhs-bandwidth-from-local-storage'\n });\n }\n if (storedObject && storedObject.throughput) {\n this.options_.throughput = storedObject.throughput;\n this.tech_.trigger({\n type: 'usage',\n name: 'vhs-throughput-from-local-storage'\n });\n }\n }\n } // if bandwidth was not set by options or pulled from local storage, start playlist\n // selection at a reasonable bandwidth\n\n if (typeof this.options_.bandwidth !== 'number') {\n this.options_.bandwidth = Config.INITIAL_BANDWIDTH;\n } // If the bandwidth number is unchanged from the initial setting\n // then this takes precedence over the enableLowInitialPlaylist option\n\n this.options_.enableLowInitialPlaylist = this.options_.enableLowInitialPlaylist && this.options_.bandwidth === Config.INITIAL_BANDWIDTH; // grab options passed to player.src\n\n ['withCredentials', 'useDevicePixelRatio', 'customPixelRatio', 'limitRenditionByPlayerDimensions', 'bandwidth', 'customTagParsers', 'customTagMappers', 'cacheEncryptionKeys', 'playlistSelector', 'initialPlaylistSelector', 'bufferBasedABR', 'liveRangeSafeTimeDelta', 'llhls', 'useForcedSubtitles', 'useNetworkInformationApi', 'useDtsForTimestampOffset', 'exactManifestTimings', 'leastPixelDiffSelector'].forEach(option => {\n if (typeof this.source_[option] !== 'undefined') {\n this.options_[option] = this.source_[option];\n }\n });\n this.limitRenditionByPlayerDimensions = this.options_.limitRenditionByPlayerDimensions;\n this.useDevicePixelRatio = this.options_.useDevicePixelRatio;\n const customPixelRatio = this.options_.customPixelRatio; // Ensure the custom pixel ratio is a number greater than or equal to 0\n\n if (typeof customPixelRatio === 'number' && customPixelRatio >= 0) {\n this.customPixelRatio = customPixelRatio;\n }\n } // alias for public method to set options\n\n setOptions(options = {}) {\n this.setOptions_(options);\n }\n /**\n * called when player.src gets called, handle a new source\n *\n * @param {Object} src the source object to handle\n */\n\n src(src, type) {\n // do nothing if the src is falsey\n if (!src) {\n return;\n }\n this.setOptions_(); // add main playlist controller options\n\n this.options_.src = expandDataUri(this.source_.src);\n this.options_.tech = this.tech_;\n this.options_.externVhs = Vhs;\n this.options_.sourceType = simpleTypeFromSourceType(type); // Whenever we seek internally, we should update the tech\n\n this.options_.seekTo = time => {\n this.tech_.setCurrentTime(time);\n }; // pass player to allow for player level eventing on construction.\n\n this.options_.player_ = this.player_;\n this.playlistController_ = new PlaylistController(this.options_);\n const playbackWatcherOptions = merge({\n liveRangeSafeTimeDelta: SAFE_TIME_DELTA\n }, this.options_, {\n seekable: () => this.seekable(),\n media: () => this.playlistController_.media(),\n playlistController: this.playlistController_\n });\n this.playbackWatcher_ = new PlaybackWatcher(playbackWatcherOptions);\n this.attachStreamingEventListeners_();\n this.playlistController_.on('error', () => {\n const player = videojs.players[this.tech_.options_.playerId];\n let error = this.playlistController_.error;\n if (typeof error === 'object' && !error.code) {\n error.code = 3;\n } else if (typeof error === 'string') {\n error = {\n message: error,\n code: 3\n };\n }\n player.error(error);\n });\n const defaultSelector = this.options_.bufferBasedABR ? Vhs.movingAverageBandwidthSelector(0.55) : Vhs.STANDARD_PLAYLIST_SELECTOR; // `this` in selectPlaylist should be the VhsHandler for backwards\n // compatibility with < v2\n\n this.playlistController_.selectPlaylist = this.selectPlaylist ? this.selectPlaylist.bind(this) : defaultSelector.bind(this);\n this.playlistController_.selectInitialPlaylist = Vhs.INITIAL_PLAYLIST_SELECTOR.bind(this); // re-expose some internal objects for backwards compatibility with < v2\n\n this.playlists = this.playlistController_.mainPlaylistLoader_;\n this.mediaSource = this.playlistController_.mediaSource; // Proxy assignment of some properties to the main playlist\n // controller. Using a custom property for backwards compatibility\n // with < v2\n\n Object.defineProperties(this, {\n selectPlaylist: {\n get() {\n return this.playlistController_.selectPlaylist;\n },\n set(selectPlaylist) {\n this.playlistController_.selectPlaylist = selectPlaylist.bind(this);\n }\n },\n throughput: {\n get() {\n return this.playlistController_.mainSegmentLoader_.throughput.rate;\n },\n set(throughput) {\n this.playlistController_.mainSegmentLoader_.throughput.rate = throughput; // By setting `count` to 1 the throughput value becomes the starting value\n // for the cumulative average\n\n this.playlistController_.mainSegmentLoader_.throughput.count = 1;\n }\n },\n bandwidth: {\n get() {\n let playerBandwidthEst = this.playlistController_.mainSegmentLoader_.bandwidth;\n const networkInformation = window$1.navigator.connection || window$1.navigator.mozConnection || window$1.navigator.webkitConnection;\n const tenMbpsAsBitsPerSecond = 10e6;\n if (this.options_.useNetworkInformationApi && networkInformation) {\n // downlink returns Mbps\n // https://developer.mozilla.org/en-US/docs/Web/API/NetworkInformation/downlink\n const networkInfoBandwidthEstBitsPerSec = networkInformation.downlink * 1000 * 1000; // downlink maxes out at 10 Mbps. In the event that both networkInformationApi and the player\n // estimate a bandwidth greater than 10 Mbps, use the larger of the two estimates to ensure that\n // high quality streams are not filtered out.\n\n if (networkInfoBandwidthEstBitsPerSec >= tenMbpsAsBitsPerSecond && playerBandwidthEst >= tenMbpsAsBitsPerSecond) {\n playerBandwidthEst = Math.max(playerBandwidthEst, networkInfoBandwidthEstBitsPerSec);\n } else {\n playerBandwidthEst = networkInfoBandwidthEstBitsPerSec;\n }\n }\n return playerBandwidthEst;\n },\n set(bandwidth) {\n this.playlistController_.mainSegmentLoader_.bandwidth = bandwidth; // setting the bandwidth manually resets the throughput counter\n // `count` is set to zero that current value of `rate` isn't included\n // in the cumulative average\n\n this.playlistController_.mainSegmentLoader_.throughput = {\n rate: 0,\n count: 0\n };\n }\n },\n /**\n * `systemBandwidth` is a combination of two serial processes bit-rates. The first\n * is the network bitrate provided by `bandwidth` and the second is the bitrate of\n * the entire process after that - decryption, transmuxing, and appending - provided\n * by `throughput`.\n *\n * Since the two process are serial, the overall system bandwidth is given by:\n * sysBandwidth = 1 / (1 / bandwidth + 1 / throughput)\n */\n systemBandwidth: {\n get() {\n const invBandwidth = 1 / (this.bandwidth || 1);\n let invThroughput;\n if (this.throughput > 0) {\n invThroughput = 1 / this.throughput;\n } else {\n invThroughput = 0;\n }\n const systemBitrate = Math.floor(1 / (invBandwidth + invThroughput));\n return systemBitrate;\n },\n set() {\n videojs.log.error('The \"systemBandwidth\" property is read-only');\n }\n }\n });\n if (this.options_.bandwidth) {\n this.bandwidth = this.options_.bandwidth;\n }\n if (this.options_.throughput) {\n this.throughput = this.options_.throughput;\n }\n Object.defineProperties(this.stats, {\n bandwidth: {\n get: () => this.bandwidth || 0,\n enumerable: true\n },\n mediaRequests: {\n get: () => this.playlistController_.mediaRequests_() || 0,\n enumerable: true\n },\n mediaRequestsAborted: {\n get: () => this.playlistController_.mediaRequestsAborted_() || 0,\n enumerable: true\n },\n mediaRequestsTimedout: {\n get: () => this.playlistController_.mediaRequestsTimedout_() || 0,\n enumerable: true\n },\n mediaRequestsErrored: {\n get: () => this.playlistController_.mediaRequestsErrored_() || 0,\n enumerable: true\n },\n mediaTransferDuration: {\n get: () => this.playlistController_.mediaTransferDuration_() || 0,\n enumerable: true\n },\n mediaBytesTransferred: {\n get: () => this.playlistController_.mediaBytesTransferred_() || 0,\n enumerable: true\n },\n mediaSecondsLoaded: {\n get: () => this.playlistController_.mediaSecondsLoaded_() || 0,\n enumerable: true\n },\n mediaAppends: {\n get: () => this.playlistController_.mediaAppends_() || 0,\n enumerable: true\n },\n mainAppendsToLoadedData: {\n get: () => this.playlistController_.mainAppendsToLoadedData_() || 0,\n enumerable: true\n },\n audioAppendsToLoadedData: {\n get: () => this.playlistController_.audioAppendsToLoadedData_() || 0,\n enumerable: true\n },\n appendsToLoadedData: {\n get: () => this.playlistController_.appendsToLoadedData_() || 0,\n enumerable: true\n },\n timeToLoadedData: {\n get: () => this.playlistController_.timeToLoadedData_() || 0,\n enumerable: true\n },\n buffered: {\n get: () => timeRangesToArray(this.tech_.buffered()),\n enumerable: true\n },\n currentTime: {\n get: () => this.tech_.currentTime(),\n enumerable: true\n },\n currentSource: {\n get: () => this.tech_.currentSource_,\n enumerable: true\n },\n currentTech: {\n get: () => this.tech_.name_,\n enumerable: true\n },\n duration: {\n get: () => this.tech_.duration(),\n enumerable: true\n },\n main: {\n get: () => this.playlists.main,\n enumerable: true\n },\n playerDimensions: {\n get: () => this.tech_.currentDimensions(),\n enumerable: true\n },\n seekable: {\n get: () => timeRangesToArray(this.tech_.seekable()),\n enumerable: true\n },\n timestamp: {\n get: () => Date.now(),\n enumerable: true\n },\n videoPlaybackQuality: {\n get: () => this.tech_.getVideoPlaybackQuality(),\n enumerable: true\n }\n });\n this.tech_.one('canplay', this.playlistController_.setupFirstPlay.bind(this.playlistController_));\n this.tech_.on('bandwidthupdate', () => {\n if (this.options_.useBandwidthFromLocalStorage) {\n updateVhsLocalStorage({\n bandwidth: this.bandwidth,\n throughput: Math.round(this.throughput)\n });\n }\n });\n this.playlistController_.on('selectedinitialmedia', () => {\n // Add the manual rendition mix-in to VhsHandler\n renditionSelectionMixin(this);\n });\n this.playlistController_.sourceUpdater_.on('createdsourcebuffers', () => {\n this.setupEme_();\n }); // the bandwidth of the primary segment loader is our best\n // estimate of overall bandwidth\n\n this.on(this.playlistController_, 'progress', function () {\n this.tech_.trigger('progress');\n }); // In the live case, we need to ignore the very first `seeking` event since\n // that will be the result of the seek-to-live behavior\n\n this.on(this.playlistController_, 'firstplay', function () {\n this.ignoreNextSeekingEvent_ = true;\n });\n this.setupQualityLevels_(); // do nothing if the tech has been disposed already\n // this can occur if someone sets the src in player.ready(), for instance\n\n if (!this.tech_.el()) {\n return;\n }\n this.mediaSourceUrl_ = window$1.URL.createObjectURL(this.playlistController_.mediaSource);\n this.tech_.src(this.mediaSourceUrl_);\n }\n createKeySessions_() {\n const audioPlaylistLoader = this.playlistController_.mediaTypes_.AUDIO.activePlaylistLoader;\n this.logger_('waiting for EME key session creation');\n waitForKeySessionCreation({\n player: this.player_,\n sourceKeySystems: this.source_.keySystems,\n audioMedia: audioPlaylistLoader && audioPlaylistLoader.media(),\n mainPlaylists: this.playlists.main.playlists\n }).then(() => {\n this.logger_('created EME key session');\n this.playlistController_.sourceUpdater_.initializedEme();\n }).catch(err => {\n this.logger_('error while creating EME key session', err);\n this.player_.error({\n message: 'Failed to initialize media keys for EME',\n code: 3\n });\n });\n }\n handleWaitingForKey_() {\n // If waitingforkey is fired, it's possible that the data that's necessary to retrieve\n // the key is in the manifest. While this should've happened on initial source load, it\n // may happen again in live streams where the keys change, and the manifest info\n // reflects the update.\n //\n // Because videojs-contrib-eme compares the PSSH data we send to that of PSSH data it's\n // already requested keys for, we don't have to worry about this generating extraneous\n // requests.\n this.logger_('waitingforkey fired, attempting to create any new key sessions');\n this.createKeySessions_();\n }\n /**\n * If necessary and EME is available, sets up EME options and waits for key session\n * creation.\n *\n * This function also updates the source updater so taht it can be used, as for some\n * browsers, EME must be configured before content is appended (if appending unencrypted\n * content before encrypted content).\n */\n\n setupEme_() {\n const audioPlaylistLoader = this.playlistController_.mediaTypes_.AUDIO.activePlaylistLoader;\n const didSetupEmeOptions = setupEmeOptions({\n player: this.player_,\n sourceKeySystems: this.source_.keySystems,\n media: this.playlists.media(),\n audioMedia: audioPlaylistLoader && audioPlaylistLoader.media()\n });\n this.player_.tech_.on('keystatuschange', e => {\n this.playlistController_.updatePlaylistByKeyStatus(e.keyId, e.status);\n });\n this.handleWaitingForKey_ = this.handleWaitingForKey_.bind(this);\n this.player_.tech_.on('waitingforkey', this.handleWaitingForKey_);\n if (!didSetupEmeOptions) {\n // If EME options were not set up, we've done all we could to initialize EME.\n this.playlistController_.sourceUpdater_.initializedEme();\n return;\n }\n this.createKeySessions_();\n }\n /**\n * Initializes the quality levels and sets listeners to update them.\n *\n * @method setupQualityLevels_\n * @private\n */\n\n setupQualityLevels_() {\n const player = videojs.players[this.tech_.options_.playerId]; // if there isn't a player or there isn't a qualityLevels plugin\n // or qualityLevels_ listeners have already been setup, do nothing.\n\n if (!player || !player.qualityLevels || this.qualityLevels_) {\n return;\n }\n this.qualityLevels_ = player.qualityLevels();\n this.playlistController_.on('selectedinitialmedia', () => {\n handleVhsLoadedMetadata(this.qualityLevels_, this);\n });\n this.playlists.on('mediachange', () => {\n handleVhsMediaChange(this.qualityLevels_, this.playlists);\n });\n }\n /**\n * return the version\n */\n\n static version() {\n return {\n '@videojs/http-streaming': version$4,\n 'mux.js': version$3,\n 'mpd-parser': version$2,\n 'm3u8-parser': version$1,\n 'aes-decrypter': version\n };\n }\n /**\n * return the version\n */\n\n version() {\n return this.constructor.version();\n }\n canChangeType() {\n return SourceUpdater.canChangeType();\n }\n /**\n * Begin playing the video.\n */\n\n play() {\n this.playlistController_.play();\n }\n /**\n * a wrapper around the function in PlaylistController\n */\n\n setCurrentTime(currentTime) {\n this.playlistController_.setCurrentTime(currentTime);\n }\n /**\n * a wrapper around the function in PlaylistController\n */\n\n duration() {\n return this.playlistController_.duration();\n }\n /**\n * a wrapper around the function in PlaylistController\n */\n\n seekable() {\n return this.playlistController_.seekable();\n }\n /**\n * Abort all outstanding work and cleanup.\n */\n\n dispose() {\n if (this.playbackWatcher_) {\n this.playbackWatcher_.dispose();\n }\n if (this.playlistController_) {\n this.playlistController_.dispose();\n }\n if (this.qualityLevels_) {\n this.qualityLevels_.dispose();\n }\n if (this.tech_ && this.tech_.vhs) {\n delete this.tech_.vhs;\n }\n if (this.mediaSourceUrl_ && window$1.URL.revokeObjectURL) {\n window$1.URL.revokeObjectURL(this.mediaSourceUrl_);\n this.mediaSourceUrl_ = null;\n }\n if (this.tech_) {\n this.tech_.off('waitingforkey', this.handleWaitingForKey_);\n }\n super.dispose();\n }\n convertToProgramTime(time, callback) {\n return getProgramTime({\n playlist: this.playlistController_.media(),\n time,\n callback\n });\n } // the player must be playing before calling this\n\n seekToProgramTime(programTime, callback, pauseAfterSeek = true, retryCount = 2) {\n return seekToProgramTime({\n programTime,\n playlist: this.playlistController_.media(),\n retryCount,\n pauseAfterSeek,\n seekTo: this.options_.seekTo,\n tech: this.options_.tech,\n callback\n });\n }\n /**\n * Adds the onRequest, onResponse, offRequest and offResponse functions\n * to the VhsHandler xhr Object.\n */\n\n setupXhrHooks_() {\n /**\n * A player function for setting an onRequest hook\n *\n * @param {function} callback for request modifiction\n */\n this.xhr.onRequest = callback => {\n addOnRequestHook(this.xhr, callback);\n };\n /**\n * A player function for setting an onResponse hook\n *\n * @param {callback} callback for response data retrieval\n */\n\n this.xhr.onResponse = callback => {\n addOnResponseHook(this.xhr, callback);\n };\n /**\n * Deletes a player onRequest callback if it exists\n *\n * @param {function} callback to delete from the player set\n */\n\n this.xhr.offRequest = callback => {\n removeOnRequestHook(this.xhr, callback);\n };\n /**\n * Deletes a player onResponse callback if it exists\n *\n * @param {function} callback to delete from the player set\n */\n\n this.xhr.offResponse = callback => {\n removeOnResponseHook(this.xhr, callback);\n }; // Trigger an event on the player to notify the user that vhs is ready to set xhr hooks.\n // This allows hooks to be set before the source is set to vhs when handleSource is called.\n\n this.player_.trigger('xhr-hooks-ready');\n }\n attachStreamingEventListeners_() {\n const playlistControllerEvents = ['seekablerangeschanged', 'bufferedrangeschanged', 'contentsteeringloadstart', 'contentsteeringloadcomplete', 'contentsteeringparsed'];\n const playbackWatcher = ['gapjumped', 'playedrangeschanged']; // re-emit streaming events and payloads on the player.\n\n playlistControllerEvents.forEach(eventName => {\n this.playlistController_.on(eventName, metadata => {\n this.player_.trigger(_extends({}, metadata));\n });\n });\n playbackWatcher.forEach(eventName => {\n this.playbackWatcher_.on(eventName, metadata => {\n this.player_.trigger(_extends({}, metadata));\n });\n });\n }\n}\n/**\n * The Source Handler object, which informs video.js what additional\n * MIME types are supported and sets up playback. It is registered\n * automatically to the appropriate tech based on the capabilities of\n * the browser it is running in. It is not necessary to use or modify\n * this object in normal usage.\n */\n\nconst VhsSourceHandler = {\n name: 'videojs-http-streaming',\n VERSION: version$4,\n canHandleSource(srcObj, options = {}) {\n const localOptions = merge(videojs.options, options);\n return VhsSourceHandler.canPlayType(srcObj.type, localOptions);\n },\n handleSource(source, tech, options = {}) {\n const localOptions = merge(videojs.options, options);\n tech.vhs = new VhsHandler(source, tech, localOptions);\n tech.vhs.xhr = xhrFactory();\n tech.vhs.setupXhrHooks_();\n tech.vhs.src(source.src, source.type);\n return tech.vhs;\n },\n canPlayType(type, options) {\n const simpleType = simpleTypeFromSourceType(type);\n if (!simpleType) {\n return '';\n }\n const overrideNative = VhsSourceHandler.getOverrideNative(options);\n const supportsTypeNatively = Vhs.supportsTypeNatively(simpleType);\n const canUseMsePlayback = !supportsTypeNatively || overrideNative;\n return canUseMsePlayback ? 'maybe' : '';\n },\n getOverrideNative(options = {}) {\n const {\n vhs = {}\n } = options;\n const defaultOverrideNative = !(videojs.browser.IS_ANY_SAFARI || videojs.browser.IS_IOS);\n const {\n overrideNative = defaultOverrideNative\n } = vhs;\n return overrideNative;\n }\n};\n/**\n * Check to see if the native MediaSource object exists and supports\n * an MP4 container with both H.264 video and AAC-LC audio.\n *\n * @return {boolean} if native media sources are supported\n */\n\nconst supportsNativeMediaSources = () => {\n return browserSupportsCodec('avc1.4d400d,mp4a.40.2');\n}; // register source handlers with the appropriate techs\n\nif (supportsNativeMediaSources()) {\n videojs.getTech('Html5').registerSourceHandler(VhsSourceHandler, 0);\n}\nvideojs.VhsHandler = VhsHandler;\nvideojs.VhsSourceHandler = VhsSourceHandler;\nvideojs.Vhs = Vhs;\nif (!videojs.use) {\n videojs.registerComponent('Vhs', Vhs);\n}\nvideojs.options.vhs = videojs.options.vhs || {};\nif (!videojs.getPlugin || !videojs.getPlugin('reloadSourceOnError')) {\n videojs.registerPlugin('reloadSourceOnError', reloadSourceOnError);\n}\n\nexport { videojs as default };\n","/*! videojs-markers - v1.0.1 - 2018-02-03\n* Copyright (c) 2018 ; Licensed */\n'use strict';\n\nimport videojs from 'video.js';\n\ntype Marker = {\n time: number,\n duration: number,\n text?: string,\n class?: string,\n overlayText?: string,\n // private property\n key: string,\n};\n\n// default setting\nconst defaultSetting = {\n markerStyle: {\n 'width':'7px',\n 'border-radius': '30%',\n 'background-color': 'red',\n },\n markerTip: {\n display: true,\n text: function(marker) {\n return \"Break: \" + marker.text;\n },\n time: function(marker) {\n return marker.time;\n },\n },\n breakOverlay:{\n display: false,\n displayTime: 3,\n text: function(marker) {\n return \"Break overlay: \" + marker.overlayText;\n },\n style: {\n 'width':'100%',\n 'height': '20%',\n 'background-color': 'rgba(0,0,0,0.7)',\n 'color': 'white',\n 'font-size': '17px',\n },\n },\n onMarkerClick: function(marker) {},\n onMarkerReached: function(marker, index) {},\n markers: [],\n};\n\n// create a non-colliding random number\nfunction generateUUID(): string {\n var d = new Date().getTime();\n var uuid = 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(/[xy]/g, (c) => {\n var r = (d + Math.random()*16)%16 | 0;\n d = Math.floor(d/16);\n return (c=='x' ? r : (r&0x3|0x8)).toString(16);\n });\n return uuid;\n};\n\n/**\n * Returns the size of an element and its position\n * a default Object with 0 on each of its properties\n * its return in case there's an error\n * @param {Element} element el to get the size and position\n * @return {DOMRect|Object} size and position of an element\n */\nfunction getElementBounding(element) {\n var elementBounding;\n const defaultBoundingRect = {\n top: 0,\n bottom: 0,\n left: 0,\n width: 0,\n height: 0,\n right: 0\n };\n\n try {\n elementBounding = element.getBoundingClientRect();\n } catch (e) {\n elementBounding = defaultBoundingRect;\n }\n\n return elementBounding;\n}\n\nconst NULL_INDEX = -1;\n\nfunction registerVideoJsMarkersPlugin(options) {\n // copied from video.js/src/js/utils/merge-options.js since\n // videojs 4 doens't support it by defualt.\n if (!videojs.mergeOptions) {\n function isPlain(value) {\n return !!value && typeof value === 'object' &&\n toString.call(value) === '[object Object]' &&\n value.constructor === Object;\n }\n function mergeOptions(source1: Object, source2: Object) {\n\n const result = {};\n const sources = [source1, source2];\n sources.forEach(source => {\n if (!source) {\n return;\n }\n Object.keys(source).forEach(key => {\n let value = source[key];\n if (!isPlain(value)) {\n result[key] = value;\n return;\n }\n if (!isPlain(result[key])) {\n result[key] = {};\n }\n result[key] = mergeOptions(result[key], value);\n })\n });\n return result;\n }\n videojs.mergeOptions = mergeOptions;\n }\n\n if (!videojs.createEl) {\n videojs.createEl = function(tagName: string, props: Object, attrs?: Object): void {\n const el = videojs.Player.prototype.createEl(tagName, props);\n if (!!attrs) {\n Object.keys(attrs).forEach(key => {\n el.setAttribute(key, attrs[key]);\n });\n }\n return el;\n }\n }\n \n\n /**\n * register the markers plugin (dependent on jquery)\n */\n let setting = videojs.mergeOptions(defaultSetting, options),\n markersMap: {[key:string]: Marker} = {},\n markersList: Array = [], // list of markers sorted by time\n currentMarkerIndex = NULL_INDEX,\n player = this,\n markerTip = null,\n breakOverlay = null,\n overlayIndex = NULL_INDEX;\n\n function sortMarkersList(): void {\n // sort the list by time in asc order\n markersList.sort((a, b) => {\n return setting.markerTip.time(a) - setting.markerTip.time(b);\n });\n }\n\n function addMarkers(newMarkers: Array): void {\n newMarkers.forEach((marker: Marker) => {\n marker.key = generateUUID();\n\n player.el().querySelector('.vjs-progress-holder')\n .appendChild(createMarkerDiv(marker));\n\n // store marker in an internal hash map\n markersMap[marker.key] = marker;\n markersList.push(marker);\n })\n\n sortMarkersList();\n }\n\n function getPosition(marker: Marker): number {\n return (setting.markerTip.time(marker) / player.duration()) * 100;\n }\n\n function setMarkderDivStyle(marker: Marker, markerDiv: Object): void {\n markerDiv.className = `vjs-marker ${marker.class || \"\"}`;\n\n Object.keys(setting.markerStyle).forEach(key => {\n markerDiv.style[key] = setting.markerStyle[key];\n });\n\n // hide out-of-bound markers\n const ratio = marker.time / player.duration();\n if (ratio < 0 || ratio > 1) {\n markerDiv.style.display = 'none';\n }\n\n // set position\n markerDiv.style.left = getPosition(marker) + '%';\n if (marker.duration) {\n markerDiv.style.width = (marker.duration / player.duration()) * 100 + '%';\n markerDiv.style.marginLeft = '0px';\n } else {\n const markerDivBounding = getElementBounding(markerDiv);\n markerDiv.style.marginLeft = markerDivBounding.width / 2 + 'px';\n } \n }\n\n function createMarkerDiv(marker: Marker): Object {\n\n var markerDiv = videojs.createEl('div', {}, {\n 'data-marker-key': marker.key,\n 'data-marker-time': setting.markerTip.time(marker)\n });\n\n setMarkderDivStyle(marker, markerDiv);\n\n // bind click event to seek to marker time\n markerDiv.addEventListener('click', function(e) {\n var preventDefault = false;\n if (typeof setting.onMarkerClick === \"function\") {\n // if return false, prevent default behavior\n preventDefault = setting.onMarkerClick(marker) === false;\n }\n\n if (!preventDefault) {\n var key = this.getAttribute('data-marker-key');\n player.currentTime(setting.markerTip.time(markersMap[key]));\n }\n });\n\n if (setting.markerTip.display) {\n registerMarkerTipHandler(markerDiv);\n }\n\n return markerDiv;\n }\n\n function updateMarkers(force: boolean): void {\n // update UI for markers whose time changed\n markersList.forEach((marker: Marker) => {\n var markerDiv = player.el().querySelector(\".vjs-marker[data-marker-key='\" + marker.key +\"']\");\n var markerTime = setting.markerTip.time(marker);\n\n if (force || markerDiv.getAttribute('data-marker-time') !== markerTime) {\n setMarkderDivStyle(marker, markerDiv);\n markerDiv.setAttribute('data-marker-time', markerTime);\n }\n });\n sortMarkersList();\n }\n\n function removeMarkers(indexArray: Array): void {\n // reset overlay\n if (!!breakOverlay){\n overlayIndex = NULL_INDEX;\n breakOverlay.style.visibility = \"hidden\";\n }\n currentMarkerIndex = NULL_INDEX;\n\n let deleteIndexList: Array = [];\n indexArray.forEach((index: number) => {\n let marker = markersList[index];\n if (marker) {\n // delete from memory\n delete markersMap[marker.key];\n deleteIndexList.push(index);\n\n // delete from dom\n let el = player.el().querySelector(\".vjs-marker[data-marker-key='\" + marker.key +\"']\");\n el && el.parentNode.removeChild(el);\n }\n });\n\n // clean up markers array\n deleteIndexList.reverse();\n deleteIndexList.forEach((deleteIndex: number) => {\n markersList.splice(deleteIndex, 1);\n });\n\n // sort again\n sortMarkersList();\n }\n\n // attach hover event handler\n function registerMarkerTipHandler(markerDiv: Object): void {\n markerDiv.addEventListener('mouseover', () => {\n var marker = markersMap[markerDiv.getAttribute('data-marker-key')];\n if (!!markerTip) {\n markerTip.querySelector('.vjs-tip-inner').innerText = setting.markerTip.text(marker);\n // margin-left needs to minus the padding length to align correctly with the marker\n markerTip.style.left = getPosition(marker) + '%';\n var markerTipBounding = getElementBounding(markerTip);\n var markerDivBounding = getElementBounding(markerDiv);\n markerTip.style.marginLeft = \n -parseFloat(markerTipBounding.width / 2) + parseFloat(markerDivBounding.width / 4) + 'px';\n markerTip.style.visibility = 'visible';\n }\n });\n\n markerDiv.addEventListener('mouseout',() => {\n if (!!markerTip) {\n markerTip.style.visibility = \"hidden\";\n }\n });\n }\n\n function initializeMarkerTip(): void {\n markerTip = videojs.createEl('div', {\n className: 'vjs-tip',\n innerHTML: \"
\",\n });\n player.el().querySelector('.vjs-progress-holder').appendChild(markerTip);\n }\n\n // show or hide break overlays\n function updateBreakOverlay(): void {\n if (!setting.breakOverlay.display || currentMarkerIndex < 0) {\n return;\n }\n\n var currentTime = player.currentTime();\n var marker = markersList[currentMarkerIndex];\n var markerTime = setting.markerTip.time(marker);\n\n if (\n currentTime >= markerTime &&\n currentTime <= (markerTime + setting.breakOverlay.displayTime)\n ) {\n if (overlayIndex !== currentMarkerIndex) {\n overlayIndex = currentMarkerIndex;\n if (breakOverlay) {\n breakOverlay.querySelector('.vjs-break-overlay-text').innerHTML = setting.breakOverlay.text(marker);\n }\n }\n\n if (breakOverlay) {\n breakOverlay.style.visibility = \"visible\";\n }\n } else {\n overlayIndex = NULL_INDEX;\n if (breakOverlay) {\n breakOverlay.style.visibility = \"hidden\";\n }\n }\n }\n\n // problem when the next marker is within the overlay display time from the previous marker\n function initializeOverlay(): void {\n breakOverlay = videojs.createEl('div', {\n className: 'vjs-break-overlay',\n innerHTML: \"
\"\n });\n Object.keys(setting.breakOverlay.style).forEach(key => {\n if (breakOverlay) {\n breakOverlay.style[key] = setting.breakOverlay.style[key];\n }\n });\n player.el().appendChild(breakOverlay);\n overlayIndex = NULL_INDEX;\n }\n\n function onTimeUpdate(): void {\n onUpdateMarker();\n updateBreakOverlay();\n options.onTimeUpdateAfterMarkerUpdate && options.onTimeUpdateAfterMarkerUpdate();\n }\n\n function onUpdateMarker() {\n /*\n check marker reached in between markers\n the logic here is that it triggers a new marker reached event only if the player\n enters a new marker range (e.g. from marker 1 to marker 2). Thus, if player is on marker 1 and user clicked on marker 1 again, no new reached event is triggered)\n */\n if (!markersList.length) {\n return;\n }\n\n var getNextMarkerTime = (index: number) => {\n if (index < markersList.length - 1) {\n return setting.markerTip.time(markersList[index + 1]);\n }\n // next marker time of last marker would be end of video time\n return player.duration();\n }\n var currentTime = player.currentTime();\n var newMarkerIndex = NULL_INDEX;\n\n if (currentMarkerIndex !== NULL_INDEX) {\n // check if staying at same marker\n var nextMarkerTime = getNextMarkerTime(currentMarkerIndex);\n if(\n currentTime >= setting.markerTip.time(markersList[currentMarkerIndex]) &&\n currentTime < nextMarkerTime\n ) {\n return;\n }\n\n // check for ending (at the end current time equals player duration)\n if (\n currentMarkerIndex === markersList.length - 1 &&\n currentTime === player.duration()\n ) {\n return;\n }\n }\n\n // check first marker, no marker is selected\n if (currentTime < setting.markerTip.time(markersList[0])) {\n newMarkerIndex = NULL_INDEX;\n } else {\n // look for new index\n for (var i = 0; i < markersList.length; i++) {\n nextMarkerTime = getNextMarkerTime(i);\n if (\n currentTime >= setting.markerTip.time(markersList[i]) &&\n currentTime < nextMarkerTime\n ) {\n newMarkerIndex = i;\n break;\n }\n }\n }\n\n // set new marker index\n if (newMarkerIndex !== currentMarkerIndex) {\n // trigger event if index is not null\n if (newMarkerIndex !== NULL_INDEX && options.onMarkerReached) {\n options.onMarkerReached(markersList[newMarkerIndex], newMarkerIndex);\n }\n currentMarkerIndex = newMarkerIndex;\n }\n }\n\n // setup the whole thing\n function initialize(): void {\n if (setting.markerTip.display) {\n initializeMarkerTip();\n }\n\n // remove existing markers if already initialized\n player.markers.removeAll();\n addMarkers(setting.markers);\n\n if (setting.breakOverlay.display) {\n initializeOverlay();\n }\n onTimeUpdate();\n player.on(\"timeupdate\", onTimeUpdate);\n player.off(\"loadedmetadata\");\n }\n\n // setup the plugin after we loaded video's meta data\n player.on(\"loadedmetadata\", function() {\n initialize();\n });\n\n // exposed plugin API\n player.markers = {\n getMarkers: function(): Array {\n return markersList;\n },\n next : function(): void {\n // go to the next marker from current timestamp\n const currentTime = player.currentTime();\n for (var i = 0; i < markersList.length; i++) {\n var markerTime = setting.markerTip.time(markersList[i]);\n if (markerTime > currentTime) {\n player.currentTime(markerTime);\n break;\n }\n }\n },\n prev : function(): void {\n // go to previous marker\n const currentTime = player.currentTime();\n for (var i = markersList.length - 1; i >= 0 ; i--) {\n var markerTime = setting.markerTip.time(markersList[i]);\n // add a threshold\n if (markerTime + 0.5 < currentTime) {\n player.currentTime(markerTime);\n return;\n }\n }\n },\n add : function(newMarkers: Array): void {\n // add new markers given an array of index\n addMarkers(newMarkers);\n },\n remove: function(indexArray: Array): void {\n // remove markers given an array of index\n removeMarkers(indexArray);\n },\n removeAll: function(): void {\n var indexArray = [];\n for (var i = 0; i < markersList.length; i++) {\n indexArray.push(i);\n }\n removeMarkers(indexArray);\n },\n // force - force all markers to be updated, regardless of if they have changed or not.\n updateTime: function(force: boolean): void {\n // notify the plugin to update the UI for changes in marker times\n updateMarkers(force);\n },\n reset: function(newMarkers: Array): void {\n // remove all the existing markers and add new ones\n player.markers.removeAll();\n addMarkers(newMarkers);\n },\n destroy: function(): void {\n // unregister the plugins and clean up even handlers\n player.markers.removeAll();\n breakOverlay && breakOverlay.remove();\n markerTip && markerTip.remove();\n player.off(\"timeupdate\", updateBreakOverlay);\n delete player.markers;\n },\n };\n}\n\nvideojs.plugin('markers', registerVideoJsMarkersPlugin);\n","/**\n * Copyright 2013 vtt.js Contributors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n// Default exports for Node. Export the extended versions of VTTCue and\n// VTTRegion in Node since we likely want the capability to convert back and\n// forth between JSON. If we don't then it's not that big of a deal since we're\n// off browser.\n\nvar window = require('global/window');\n\nvar vttjs = module.exports = {\n WebVTT: require(\"./vtt.js\"),\n VTTCue: require(\"./vttcue.js\"),\n VTTRegion: require(\"./vttregion.js\")\n};\n\nwindow.vttjs = vttjs;\nwindow.WebVTT = vttjs.WebVTT;\n\nvar cueShim = vttjs.VTTCue;\nvar regionShim = vttjs.VTTRegion;\nvar nativeVTTCue = window.VTTCue;\nvar nativeVTTRegion = window.VTTRegion;\n\nvttjs.shim = function() {\n window.VTTCue = cueShim;\n window.VTTRegion = regionShim;\n};\n\nvttjs.restore = function() {\n window.VTTCue = nativeVTTCue;\n window.VTTRegion = nativeVTTRegion;\n};\n\nif (!window.VTTCue) {\n vttjs.shim();\n}\n","/**\n * Copyright 2013 vtt.js Contributors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n/* -*- Mode: Java; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */\n/* vim: set shiftwidth=2 tabstop=2 autoindent cindent expandtab: */\nvar document = require('global/document');\n\nvar _objCreate = Object.create || (function() {\n function F() {}\n return function(o) {\n if (arguments.length !== 1) {\n throw new Error('Object.create shim only accepts one parameter.');\n }\n F.prototype = o;\n return new F();\n };\n})();\n\n// Creates a new ParserError object from an errorData object. The errorData\n// object should have default code and message properties. The default message\n// property can be overriden by passing in a message parameter.\n// See ParsingError.Errors below for acceptable errors.\nfunction ParsingError(errorData, message) {\n this.name = \"ParsingError\";\n this.code = errorData.code;\n this.message = message || errorData.message;\n}\nParsingError.prototype = _objCreate(Error.prototype);\nParsingError.prototype.constructor = ParsingError;\n\n// ParsingError metadata for acceptable ParsingErrors.\nParsingError.Errors = {\n BadSignature: {\n code: 0,\n message: \"Malformed WebVTT signature.\"\n },\n BadTimeStamp: {\n code: 1,\n message: \"Malformed time stamp.\"\n }\n};\n\n// Try to parse input as a time stamp.\nfunction parseTimeStamp(input) {\n\n function computeSeconds(h, m, s, f) {\n return (h | 0) * 3600 + (m | 0) * 60 + (s | 0) + (f | 0) / 1000;\n }\n\n var m = input.match(/^(\\d+):(\\d{1,2})(:\\d{1,2})?\\.(\\d{3})/);\n if (!m) {\n return null;\n }\n\n if (m[3]) {\n // Timestamp takes the form of [hours]:[minutes]:[seconds].[milliseconds]\n return computeSeconds(m[1], m[2], m[3].replace(\":\", \"\"), m[4]);\n } else if (m[1] > 59) {\n // Timestamp takes the form of [hours]:[minutes].[milliseconds]\n // First position is hours as it's over 59.\n return computeSeconds(m[1], m[2], 0, m[4]);\n } else {\n // Timestamp takes the form of [minutes]:[seconds].[milliseconds]\n return computeSeconds(0, m[1], m[2], m[4]);\n }\n}\n\n// A settings object holds key/value pairs and will ignore anything but the first\n// assignment to a specific key.\nfunction Settings() {\n this.values = _objCreate(null);\n}\n\nSettings.prototype = {\n // Only accept the first assignment to any key.\n set: function(k, v) {\n if (!this.get(k) && v !== \"\") {\n this.values[k] = v;\n }\n },\n // Return the value for a key, or a default value.\n // If 'defaultKey' is passed then 'dflt' is assumed to be an object with\n // a number of possible default values as properties where 'defaultKey' is\n // the key of the property that will be chosen; otherwise it's assumed to be\n // a single value.\n get: function(k, dflt, defaultKey) {\n if (defaultKey) {\n return this.has(k) ? this.values[k] : dflt[defaultKey];\n }\n return this.has(k) ? this.values[k] : dflt;\n },\n // Check whether we have a value for a key.\n has: function(k) {\n return k in this.values;\n },\n // Accept a setting if its one of the given alternatives.\n alt: function(k, v, a) {\n for (var n = 0; n < a.length; ++n) {\n if (v === a[n]) {\n this.set(k, v);\n break;\n }\n }\n },\n // Accept a setting if its a valid (signed) integer.\n integer: function(k, v) {\n if (/^-?\\d+$/.test(v)) { // integer\n this.set(k, parseInt(v, 10));\n }\n },\n // Accept a setting if its a valid percentage.\n percent: function(k, v) {\n var m;\n if ((m = v.match(/^([\\d]{1,3})(\\.[\\d]*)?%$/))) {\n v = parseFloat(v);\n if (v >= 0 && v <= 100) {\n this.set(k, v);\n return true;\n }\n }\n return false;\n }\n};\n\n// Helper function to parse input into groups separated by 'groupDelim', and\n// interprete each group as a key/value pair separated by 'keyValueDelim'.\nfunction parseOptions(input, callback, keyValueDelim, groupDelim) {\n var groups = groupDelim ? input.split(groupDelim) : [input];\n for (var i in groups) {\n if (typeof groups[i] !== \"string\") {\n continue;\n }\n var kv = groups[i].split(keyValueDelim);\n if (kv.length !== 2) {\n continue;\n }\n var k = kv[0].trim();\n var v = kv[1].trim();\n callback(k, v);\n }\n}\n\nfunction parseCue(input, cue, regionList) {\n // Remember the original input if we need to throw an error.\n var oInput = input;\n // 4.1 WebVTT timestamp\n function consumeTimeStamp() {\n var ts = parseTimeStamp(input);\n if (ts === null) {\n throw new ParsingError(ParsingError.Errors.BadTimeStamp,\n \"Malformed timestamp: \" + oInput);\n }\n // Remove time stamp from input.\n input = input.replace(/^[^\\sa-zA-Z-]+/, \"\");\n return ts;\n }\n\n // 4.4.2 WebVTT cue settings\n function consumeCueSettings(input, cue) {\n var settings = new Settings();\n\n parseOptions(input, function (k, v) {\n switch (k) {\n case \"region\":\n // Find the last region we parsed with the same region id.\n for (var i = regionList.length - 1; i >= 0; i--) {\n if (regionList[i].id === v) {\n settings.set(k, regionList[i].region);\n break;\n }\n }\n break;\n case \"vertical\":\n settings.alt(k, v, [\"rl\", \"lr\"]);\n break;\n case \"line\":\n var vals = v.split(\",\"),\n vals0 = vals[0];\n settings.integer(k, vals0);\n settings.percent(k, vals0) ? settings.set(\"snapToLines\", false) : null;\n settings.alt(k, vals0, [\"auto\"]);\n if (vals.length === 2) {\n settings.alt(\"lineAlign\", vals[1], [\"start\", \"center\", \"end\"]);\n }\n break;\n case \"position\":\n vals = v.split(\",\");\n settings.percent(k, vals[0]);\n if (vals.length === 2) {\n settings.alt(\"positionAlign\", vals[1], [\"start\", \"center\", \"end\"]);\n }\n break;\n case \"size\":\n settings.percent(k, v);\n break;\n case \"align\":\n settings.alt(k, v, [\"start\", \"center\", \"end\", \"left\", \"right\"]);\n break;\n }\n }, /:/, /\\s/);\n\n // Apply default values for any missing fields.\n cue.region = settings.get(\"region\", null);\n cue.vertical = settings.get(\"vertical\", \"\");\n try {\n cue.line = settings.get(\"line\", \"auto\");\n } catch (e) {}\n cue.lineAlign = settings.get(\"lineAlign\", \"start\");\n cue.snapToLines = settings.get(\"snapToLines\", true);\n cue.size = settings.get(\"size\", 100);\n // Safari still uses the old middle value and won't accept center\n try {\n cue.align = settings.get(\"align\", \"center\");\n } catch (e) {\n cue.align = settings.get(\"align\", \"middle\");\n }\n try {\n cue.position = settings.get(\"position\", \"auto\");\n } catch (e) {\n cue.position = settings.get(\"position\", {\n start: 0,\n left: 0,\n center: 50,\n middle: 50,\n end: 100,\n right: 100\n }, cue.align);\n }\n\n\n cue.positionAlign = settings.get(\"positionAlign\", {\n start: \"start\",\n left: \"start\",\n center: \"center\",\n middle: \"center\",\n end: \"end\",\n right: \"end\"\n }, cue.align);\n }\n\n function skipWhitespace() {\n input = input.replace(/^\\s+/, \"\");\n }\n\n // 4.1 WebVTT cue timings.\n skipWhitespace();\n cue.startTime = consumeTimeStamp(); // (1) collect cue start time\n skipWhitespace();\n if (input.substr(0, 3) !== \"-->\") { // (3) next characters must match \"-->\"\n throw new ParsingError(ParsingError.Errors.BadTimeStamp,\n \"Malformed time stamp (time stamps must be separated by '-->'): \" +\n oInput);\n }\n input = input.substr(3);\n skipWhitespace();\n cue.endTime = consumeTimeStamp(); // (5) collect cue end time\n\n // 4.1 WebVTT cue settings list.\n skipWhitespace();\n consumeCueSettings(input, cue);\n}\n\n// When evaluating this file as part of a Webpack bundle for server\n// side rendering, `document` is an empty object.\nvar TEXTAREA_ELEMENT = document.createElement && document.createElement(\"textarea\");\n\nvar TAG_NAME = {\n c: \"span\",\n i: \"i\",\n b: \"b\",\n u: \"u\",\n ruby: \"ruby\",\n rt: \"rt\",\n v: \"span\",\n lang: \"span\"\n};\n\n// 5.1 default text color\n// 5.2 default text background color is equivalent to text color with bg_ prefix\nvar DEFAULT_COLOR_CLASS = {\n white: 'rgba(255,255,255,1)',\n lime: 'rgba(0,255,0,1)',\n cyan: 'rgba(0,255,255,1)',\n red: 'rgba(255,0,0,1)',\n yellow: 'rgba(255,255,0,1)',\n magenta: 'rgba(255,0,255,1)',\n blue: 'rgba(0,0,255,1)',\n black: 'rgba(0,0,0,1)'\n};\n\nvar TAG_ANNOTATION = {\n v: \"title\",\n lang: \"lang\"\n};\n\nvar NEEDS_PARENT = {\n rt: \"ruby\"\n};\n\n// Parse content into a document fragment.\nfunction parseContent(window, input) {\n function nextToken() {\n // Check for end-of-string.\n if (!input) {\n return null;\n }\n\n // Consume 'n' characters from the input.\n function consume(result) {\n input = input.substr(result.length);\n return result;\n }\n\n var m = input.match(/^([^<]*)(<[^>]*>?)?/);\n // If there is some text before the next tag, return it, otherwise return\n // the tag.\n return consume(m[1] ? m[1] : m[2]);\n }\n\n function unescape(s) {\n TEXTAREA_ELEMENT.innerHTML = s;\n s = TEXTAREA_ELEMENT.textContent;\n TEXTAREA_ELEMENT.textContent = \"\";\n return s;\n }\n\n function shouldAdd(current, element) {\n return !NEEDS_PARENT[element.localName] ||\n NEEDS_PARENT[element.localName] === current.localName;\n }\n\n // Create an element for this tag.\n function createElement(type, annotation) {\n var tagName = TAG_NAME[type];\n if (!tagName) {\n return null;\n }\n var element = window.document.createElement(tagName);\n var name = TAG_ANNOTATION[type];\n if (name && annotation) {\n element[name] = annotation.trim();\n }\n return element;\n }\n\n var rootDiv = window.document.createElement(\"div\"),\n current = rootDiv,\n t,\n tagStack = [];\n\n while ((t = nextToken()) !== null) {\n if (t[0] === '<') {\n if (t[1] === \"/\") {\n // If the closing tag matches, move back up to the parent node.\n if (tagStack.length &&\n tagStack[tagStack.length - 1] === t.substr(2).replace(\">\", \"\")) {\n tagStack.pop();\n current = current.parentNode;\n }\n // Otherwise just ignore the end tag.\n continue;\n }\n var ts = parseTimeStamp(t.substr(1, t.length - 2));\n var node;\n if (ts) {\n // Timestamps are lead nodes as well.\n node = window.document.createProcessingInstruction(\"timestamp\", ts);\n current.appendChild(node);\n continue;\n }\n var m = t.match(/^<([^.\\s/0-9>]+)(\\.[^\\s\\\\>]+)?([^>\\\\]+)?(\\\\?)>?$/);\n // If we can't parse the tag, skip to the next tag.\n if (!m) {\n continue;\n }\n // Try to construct an element, and ignore the tag if we couldn't.\n node = createElement(m[1], m[3]);\n if (!node) {\n continue;\n }\n // Determine if the tag should be added based on the context of where it\n // is placed in the cuetext.\n if (!shouldAdd(current, node)) {\n continue;\n }\n // Set the class list (as a list of classes, separated by space).\n if (m[2]) {\n var classes = m[2].split('.');\n\n classes.forEach(function(cl) {\n var bgColor = /^bg_/.test(cl);\n // slice out `bg_` if it's a background color\n var colorName = bgColor ? cl.slice(3) : cl;\n\n if (DEFAULT_COLOR_CLASS.hasOwnProperty(colorName)) {\n var propName = bgColor ? 'background-color' : 'color';\n var propValue = DEFAULT_COLOR_CLASS[colorName];\n\n node.style[propName] = propValue;\n }\n });\n\n node.className = classes.join(' ');\n }\n // Append the node to the current node, and enter the scope of the new\n // node.\n tagStack.push(m[1]);\n current.appendChild(node);\n current = node;\n continue;\n }\n\n // Text nodes are leaf nodes.\n current.appendChild(window.document.createTextNode(unescape(t)));\n }\n\n return rootDiv;\n}\n\n// This is a list of all the Unicode characters that have a strong\n// right-to-left category. What this means is that these characters are\n// written right-to-left for sure. It was generated by pulling all the strong\n// right-to-left characters out of the Unicode data table. That table can\n// found at: http://www.unicode.org/Public/UNIDATA/UnicodeData.txt\nvar strongRTLRanges = [[0x5be, 0x5be], [0x5c0, 0x5c0], [0x5c3, 0x5c3], [0x5c6, 0x5c6],\n [0x5d0, 0x5ea], [0x5f0, 0x5f4], [0x608, 0x608], [0x60b, 0x60b], [0x60d, 0x60d],\n [0x61b, 0x61b], [0x61e, 0x64a], [0x66d, 0x66f], [0x671, 0x6d5], [0x6e5, 0x6e6],\n [0x6ee, 0x6ef], [0x6fa, 0x70d], [0x70f, 0x710], [0x712, 0x72f], [0x74d, 0x7a5],\n [0x7b1, 0x7b1], [0x7c0, 0x7ea], [0x7f4, 0x7f5], [0x7fa, 0x7fa], [0x800, 0x815],\n [0x81a, 0x81a], [0x824, 0x824], [0x828, 0x828], [0x830, 0x83e], [0x840, 0x858],\n [0x85e, 0x85e], [0x8a0, 0x8a0], [0x8a2, 0x8ac], [0x200f, 0x200f],\n [0xfb1d, 0xfb1d], [0xfb1f, 0xfb28], [0xfb2a, 0xfb36], [0xfb38, 0xfb3c],\n [0xfb3e, 0xfb3e], [0xfb40, 0xfb41], [0xfb43, 0xfb44], [0xfb46, 0xfbc1],\n [0xfbd3, 0xfd3d], [0xfd50, 0xfd8f], [0xfd92, 0xfdc7], [0xfdf0, 0xfdfc],\n [0xfe70, 0xfe74], [0xfe76, 0xfefc], [0x10800, 0x10805], [0x10808, 0x10808],\n [0x1080a, 0x10835], [0x10837, 0x10838], [0x1083c, 0x1083c], [0x1083f, 0x10855],\n [0x10857, 0x1085f], [0x10900, 0x1091b], [0x10920, 0x10939], [0x1093f, 0x1093f],\n [0x10980, 0x109b7], [0x109be, 0x109bf], [0x10a00, 0x10a00], [0x10a10, 0x10a13],\n [0x10a15, 0x10a17], [0x10a19, 0x10a33], [0x10a40, 0x10a47], [0x10a50, 0x10a58],\n [0x10a60, 0x10a7f], [0x10b00, 0x10b35], [0x10b40, 0x10b55], [0x10b58, 0x10b72],\n [0x10b78, 0x10b7f], [0x10c00, 0x10c48], [0x1ee00, 0x1ee03], [0x1ee05, 0x1ee1f],\n [0x1ee21, 0x1ee22], [0x1ee24, 0x1ee24], [0x1ee27, 0x1ee27], [0x1ee29, 0x1ee32],\n [0x1ee34, 0x1ee37], [0x1ee39, 0x1ee39], [0x1ee3b, 0x1ee3b], [0x1ee42, 0x1ee42],\n [0x1ee47, 0x1ee47], [0x1ee49, 0x1ee49], [0x1ee4b, 0x1ee4b], [0x1ee4d, 0x1ee4f],\n [0x1ee51, 0x1ee52], [0x1ee54, 0x1ee54], [0x1ee57, 0x1ee57], [0x1ee59, 0x1ee59],\n [0x1ee5b, 0x1ee5b], [0x1ee5d, 0x1ee5d], [0x1ee5f, 0x1ee5f], [0x1ee61, 0x1ee62],\n [0x1ee64, 0x1ee64], [0x1ee67, 0x1ee6a], [0x1ee6c, 0x1ee72], [0x1ee74, 0x1ee77],\n [0x1ee79, 0x1ee7c], [0x1ee7e, 0x1ee7e], [0x1ee80, 0x1ee89], [0x1ee8b, 0x1ee9b],\n [0x1eea1, 0x1eea3], [0x1eea5, 0x1eea9], [0x1eeab, 0x1eebb], [0x10fffd, 0x10fffd]];\n\nfunction isStrongRTLChar(charCode) {\n for (var i = 0; i < strongRTLRanges.length; i++) {\n var currentRange = strongRTLRanges[i];\n if (charCode >= currentRange[0] && charCode <= currentRange[1]) {\n return true;\n }\n }\n\n return false;\n}\n\nfunction determineBidi(cueDiv) {\n var nodeStack = [],\n text = \"\",\n charCode;\n\n if (!cueDiv || !cueDiv.childNodes) {\n return \"ltr\";\n }\n\n function pushNodes(nodeStack, node) {\n for (var i = node.childNodes.length - 1; i >= 0; i--) {\n nodeStack.push(node.childNodes[i]);\n }\n }\n\n function nextTextNode(nodeStack) {\n if (!nodeStack || !nodeStack.length) {\n return null;\n }\n\n var node = nodeStack.pop(),\n text = node.textContent || node.innerText;\n if (text) {\n // TODO: This should match all unicode type B characters (paragraph\n // separator characters). See issue #115.\n var m = text.match(/^.*(\\n|\\r)/);\n if (m) {\n nodeStack.length = 0;\n return m[0];\n }\n return text;\n }\n if (node.tagName === \"ruby\") {\n return nextTextNode(nodeStack);\n }\n if (node.childNodes) {\n pushNodes(nodeStack, node);\n return nextTextNode(nodeStack);\n }\n }\n\n pushNodes(nodeStack, cueDiv);\n while ((text = nextTextNode(nodeStack))) {\n for (var i = 0; i < text.length; i++) {\n charCode = text.charCodeAt(i);\n if (isStrongRTLChar(charCode)) {\n return \"rtl\";\n }\n }\n }\n return \"ltr\";\n}\n\nfunction computeLinePos(cue) {\n if (typeof cue.line === \"number\" &&\n (cue.snapToLines || (cue.line >= 0 && cue.line <= 100))) {\n return cue.line;\n }\n if (!cue.track || !cue.track.textTrackList ||\n !cue.track.textTrackList.mediaElement) {\n return -1;\n }\n var track = cue.track,\n trackList = track.textTrackList,\n count = 0;\n for (var i = 0; i < trackList.length && trackList[i] !== track; i++) {\n if (trackList[i].mode === \"showing\") {\n count++;\n }\n }\n return ++count * -1;\n}\n\nfunction StyleBox() {\n}\n\n// Apply styles to a div. If there is no div passed then it defaults to the\n// div on 'this'.\nStyleBox.prototype.applyStyles = function(styles, div) {\n div = div || this.div;\n for (var prop in styles) {\n if (styles.hasOwnProperty(prop)) {\n div.style[prop] = styles[prop];\n }\n }\n};\n\nStyleBox.prototype.formatStyle = function(val, unit) {\n return val === 0 ? 0 : val + unit;\n};\n\n// Constructs the computed display state of the cue (a div). Places the div\n// into the overlay which should be a block level element (usually a div).\nfunction CueStyleBox(window, cue, styleOptions) {\n StyleBox.call(this);\n this.cue = cue;\n\n // Parse our cue's text into a DOM tree rooted at 'cueDiv'. This div will\n // have inline positioning and will function as the cue background box.\n this.cueDiv = parseContent(window, cue.text);\n var styles = {\n color: \"rgba(255, 255, 255, 1)\",\n backgroundColor: \"rgba(0, 0, 0, 0.8)\",\n position: \"relative\",\n left: 0,\n right: 0,\n top: 0,\n bottom: 0,\n display: \"inline\",\n writingMode: cue.vertical === \"\" ? \"horizontal-tb\"\n : cue.vertical === \"lr\" ? \"vertical-lr\"\n : \"vertical-rl\",\n unicodeBidi: \"plaintext\"\n };\n\n this.applyStyles(styles, this.cueDiv);\n\n // Create an absolutely positioned div that will be used to position the cue\n // div. Note, all WebVTT cue-setting alignments are equivalent to the CSS\n // mirrors of them except middle instead of center on Safari.\n this.div = window.document.createElement(\"div\");\n styles = {\n direction: determineBidi(this.cueDiv),\n writingMode: cue.vertical === \"\" ? \"horizontal-tb\"\n : cue.vertical === \"lr\" ? \"vertical-lr\"\n : \"vertical-rl\",\n unicodeBidi: \"plaintext\",\n textAlign: cue.align === \"middle\" ? \"center\" : cue.align,\n font: styleOptions.font,\n whiteSpace: \"pre-line\",\n position: \"absolute\"\n };\n\n this.applyStyles(styles);\n this.div.appendChild(this.cueDiv);\n\n // Calculate the distance from the reference edge of the viewport to the text\n // position of the cue box. The reference edge will be resolved later when\n // the box orientation styles are applied.\n var textPos = 0;\n switch (cue.positionAlign) {\n case \"start\":\n case \"line-left\":\n textPos = cue.position;\n break;\n case \"center\":\n textPos = cue.position - (cue.size / 2);\n break;\n case \"end\":\n case \"line-right\":\n textPos = cue.position - cue.size;\n break;\n }\n\n // Horizontal box orientation; textPos is the distance from the left edge of the\n // area to the left edge of the box and cue.size is the distance extending to\n // the right from there.\n if (cue.vertical === \"\") {\n this.applyStyles({\n left: this.formatStyle(textPos, \"%\"),\n width: this.formatStyle(cue.size, \"%\")\n });\n // Vertical box orientation; textPos is the distance from the top edge of the\n // area to the top edge of the box and cue.size is the height extending\n // downwards from there.\n } else {\n this.applyStyles({\n top: this.formatStyle(textPos, \"%\"),\n height: this.formatStyle(cue.size, \"%\")\n });\n }\n\n this.move = function(box) {\n this.applyStyles({\n top: this.formatStyle(box.top, \"px\"),\n bottom: this.formatStyle(box.bottom, \"px\"),\n left: this.formatStyle(box.left, \"px\"),\n right: this.formatStyle(box.right, \"px\"),\n height: this.formatStyle(box.height, \"px\"),\n width: this.formatStyle(box.width, \"px\")\n });\n };\n}\nCueStyleBox.prototype = _objCreate(StyleBox.prototype);\nCueStyleBox.prototype.constructor = CueStyleBox;\n\n// Represents the co-ordinates of an Element in a way that we can easily\n// compute things with such as if it overlaps or intersects with another Element.\n// Can initialize it with either a StyleBox or another BoxPosition.\nfunction BoxPosition(obj) {\n // Either a BoxPosition was passed in and we need to copy it, or a StyleBox\n // was passed in and we need to copy the results of 'getBoundingClientRect'\n // as the object returned is readonly. All co-ordinate values are in reference\n // to the viewport origin (top left).\n var lh, height, width, top;\n if (obj.div) {\n height = obj.div.offsetHeight;\n width = obj.div.offsetWidth;\n top = obj.div.offsetTop;\n\n var rects = (rects = obj.div.childNodes) && (rects = rects[0]) &&\n rects.getClientRects && rects.getClientRects();\n obj = obj.div.getBoundingClientRect();\n // In certain cases the outter div will be slightly larger then the sum of\n // the inner div's lines. This could be due to bold text, etc, on some platforms.\n // In this case we should get the average line height and use that. This will\n // result in the desired behaviour.\n lh = rects ? Math.max((rects[0] && rects[0].height) || 0, obj.height / rects.length)\n : 0;\n\n }\n this.left = obj.left;\n this.right = obj.right;\n this.top = obj.top || top;\n this.height = obj.height || height;\n this.bottom = obj.bottom || (top + (obj.height || height));\n this.width = obj.width || width;\n this.lineHeight = lh !== undefined ? lh : obj.lineHeight;\n}\n\n// Move the box along a particular axis. Optionally pass in an amount to move\n// the box. If no amount is passed then the default is the line height of the\n// box.\nBoxPosition.prototype.move = function(axis, toMove) {\n toMove = toMove !== undefined ? toMove : this.lineHeight;\n switch (axis) {\n case \"+x\":\n this.left += toMove;\n this.right += toMove;\n break;\n case \"-x\":\n this.left -= toMove;\n this.right -= toMove;\n break;\n case \"+y\":\n this.top += toMove;\n this.bottom += toMove;\n break;\n case \"-y\":\n this.top -= toMove;\n this.bottom -= toMove;\n break;\n }\n};\n\n// Check if this box overlaps another box, b2.\nBoxPosition.prototype.overlaps = function(b2) {\n return this.left < b2.right &&\n this.right > b2.left &&\n this.top < b2.bottom &&\n this.bottom > b2.top;\n};\n\n// Check if this box overlaps any other boxes in boxes.\nBoxPosition.prototype.overlapsAny = function(boxes) {\n for (var i = 0; i < boxes.length; i++) {\n if (this.overlaps(boxes[i])) {\n return true;\n }\n }\n return false;\n};\n\n// Check if this box is within another box.\nBoxPosition.prototype.within = function(container) {\n return this.top >= container.top &&\n this.bottom <= container.bottom &&\n this.left >= container.left &&\n this.right <= container.right;\n};\n\n// Check if this box is entirely within the container or it is overlapping\n// on the edge opposite of the axis direction passed. For example, if \"+x\" is\n// passed and the box is overlapping on the left edge of the container, then\n// return true.\nBoxPosition.prototype.overlapsOppositeAxis = function(container, axis) {\n switch (axis) {\n case \"+x\":\n return this.left < container.left;\n case \"-x\":\n return this.right > container.right;\n case \"+y\":\n return this.top < container.top;\n case \"-y\":\n return this.bottom > container.bottom;\n }\n};\n\n// Find the percentage of the area that this box is overlapping with another\n// box.\nBoxPosition.prototype.intersectPercentage = function(b2) {\n var x = Math.max(0, Math.min(this.right, b2.right) - Math.max(this.left, b2.left)),\n y = Math.max(0, Math.min(this.bottom, b2.bottom) - Math.max(this.top, b2.top)),\n intersectArea = x * y;\n return intersectArea / (this.height * this.width);\n};\n\n// Convert the positions from this box to CSS compatible positions using\n// the reference container's positions. This has to be done because this\n// box's positions are in reference to the viewport origin, whereas, CSS\n// values are in referecne to their respective edges.\nBoxPosition.prototype.toCSSCompatValues = function(reference) {\n return {\n top: this.top - reference.top,\n bottom: reference.bottom - this.bottom,\n left: this.left - reference.left,\n right: reference.right - this.right,\n height: this.height,\n width: this.width\n };\n};\n\n// Get an object that represents the box's position without anything extra.\n// Can pass a StyleBox, HTMLElement, or another BoxPositon.\nBoxPosition.getSimpleBoxPosition = function(obj) {\n var height = obj.div ? obj.div.offsetHeight : obj.tagName ? obj.offsetHeight : 0;\n var width = obj.div ? obj.div.offsetWidth : obj.tagName ? obj.offsetWidth : 0;\n var top = obj.div ? obj.div.offsetTop : obj.tagName ? obj.offsetTop : 0;\n\n obj = obj.div ? obj.div.getBoundingClientRect() :\n obj.tagName ? obj.getBoundingClientRect() : obj;\n var ret = {\n left: obj.left,\n right: obj.right,\n top: obj.top || top,\n height: obj.height || height,\n bottom: obj.bottom || (top + (obj.height || height)),\n width: obj.width || width\n };\n return ret;\n};\n\n// Move a StyleBox to its specified, or next best, position. The containerBox\n// is the box that contains the StyleBox, such as a div. boxPositions are\n// a list of other boxes that the styleBox can't overlap with.\nfunction moveBoxToLinePosition(window, styleBox, containerBox, boxPositions) {\n\n // Find the best position for a cue box, b, on the video. The axis parameter\n // is a list of axis, the order of which, it will move the box along. For example:\n // Passing [\"+x\", \"-x\"] will move the box first along the x axis in the positive\n // direction. If it doesn't find a good position for it there it will then move\n // it along the x axis in the negative direction.\n function findBestPosition(b, axis) {\n var bestPosition,\n specifiedPosition = new BoxPosition(b),\n percentage = 1; // Highest possible so the first thing we get is better.\n\n for (var i = 0; i < axis.length; i++) {\n while (b.overlapsOppositeAxis(containerBox, axis[i]) ||\n (b.within(containerBox) && b.overlapsAny(boxPositions))) {\n b.move(axis[i]);\n }\n // We found a spot where we aren't overlapping anything. This is our\n // best position.\n if (b.within(containerBox)) {\n return b;\n }\n var p = b.intersectPercentage(containerBox);\n // If we're outside the container box less then we were on our last try\n // then remember this position as the best position.\n if (percentage > p) {\n bestPosition = new BoxPosition(b);\n percentage = p;\n }\n // Reset the box position to the specified position.\n b = new BoxPosition(specifiedPosition);\n }\n return bestPosition || specifiedPosition;\n }\n\n var boxPosition = new BoxPosition(styleBox),\n cue = styleBox.cue,\n linePos = computeLinePos(cue),\n axis = [];\n\n // If we have a line number to align the cue to.\n if (cue.snapToLines) {\n var size;\n switch (cue.vertical) {\n case \"\":\n axis = [ \"+y\", \"-y\" ];\n size = \"height\";\n break;\n case \"rl\":\n axis = [ \"+x\", \"-x\" ];\n size = \"width\";\n break;\n case \"lr\":\n axis = [ \"-x\", \"+x\" ];\n size = \"width\";\n break;\n }\n\n var step = boxPosition.lineHeight,\n position = step * Math.round(linePos),\n maxPosition = containerBox[size] + step,\n initialAxis = axis[0];\n\n // If the specified intial position is greater then the max position then\n // clamp the box to the amount of steps it would take for the box to\n // reach the max position.\n if (Math.abs(position) > maxPosition) {\n position = position < 0 ? -1 : 1;\n position *= Math.ceil(maxPosition / step) * step;\n }\n\n // If computed line position returns negative then line numbers are\n // relative to the bottom of the video instead of the top. Therefore, we\n // need to increase our initial position by the length or width of the\n // video, depending on the writing direction, and reverse our axis directions.\n if (linePos < 0) {\n position += cue.vertical === \"\" ? containerBox.height : containerBox.width;\n axis = axis.reverse();\n }\n\n // Move the box to the specified position. This may not be its best\n // position.\n boxPosition.move(initialAxis, position);\n\n } else {\n // If we have a percentage line value for the cue.\n var calculatedPercentage = (boxPosition.lineHeight / containerBox.height) * 100;\n\n switch (cue.lineAlign) {\n case \"center\":\n linePos -= (calculatedPercentage / 2);\n break;\n case \"end\":\n linePos -= calculatedPercentage;\n break;\n }\n\n // Apply initial line position to the cue box.\n switch (cue.vertical) {\n case \"\":\n styleBox.applyStyles({\n top: styleBox.formatStyle(linePos, \"%\")\n });\n break;\n case \"rl\":\n styleBox.applyStyles({\n left: styleBox.formatStyle(linePos, \"%\")\n });\n break;\n case \"lr\":\n styleBox.applyStyles({\n right: styleBox.formatStyle(linePos, \"%\")\n });\n break;\n }\n\n axis = [ \"+y\", \"-x\", \"+x\", \"-y\" ];\n\n // Get the box position again after we've applied the specified positioning\n // to it.\n boxPosition = new BoxPosition(styleBox);\n }\n\n var bestPosition = findBestPosition(boxPosition, axis);\n styleBox.move(bestPosition.toCSSCompatValues(containerBox));\n}\n\nfunction WebVTT() {\n // Nothing\n}\n\n// Helper to allow strings to be decoded instead of the default binary utf8 data.\nWebVTT.StringDecoder = function() {\n return {\n decode: function(data) {\n if (!data) {\n return \"\";\n }\n if (typeof data !== \"string\") {\n throw new Error(\"Error - expected string data.\");\n }\n return decodeURIComponent(encodeURIComponent(data));\n }\n };\n};\n\nWebVTT.convertCueToDOMTree = function(window, cuetext) {\n if (!window || !cuetext) {\n return null;\n }\n return parseContent(window, cuetext);\n};\n\nvar FONT_SIZE_PERCENT = 0.05;\nvar FONT_STYLE = \"sans-serif\";\nvar CUE_BACKGROUND_PADDING = \"1.5%\";\n\n// Runs the processing model over the cues and regions passed to it.\n// @param overlay A block level element (usually a div) that the computed cues\n// and regions will be placed into.\nWebVTT.processCues = function(window, cues, overlay) {\n if (!window || !cues || !overlay) {\n return null;\n }\n\n // Remove all previous children.\n while (overlay.firstChild) {\n overlay.removeChild(overlay.firstChild);\n }\n\n var paddedOverlay = window.document.createElement(\"div\");\n paddedOverlay.style.position = \"absolute\";\n paddedOverlay.style.left = \"0\";\n paddedOverlay.style.right = \"0\";\n paddedOverlay.style.top = \"0\";\n paddedOverlay.style.bottom = \"0\";\n paddedOverlay.style.margin = CUE_BACKGROUND_PADDING;\n overlay.appendChild(paddedOverlay);\n\n // Determine if we need to compute the display states of the cues. This could\n // be the case if a cue's state has been changed since the last computation or\n // if it has not been computed yet.\n function shouldCompute(cues) {\n for (var i = 0; i < cues.length; i++) {\n if (cues[i].hasBeenReset || !cues[i].displayState) {\n return true;\n }\n }\n return false;\n }\n\n // We don't need to recompute the cues' display states. Just reuse them.\n if (!shouldCompute(cues)) {\n for (var i = 0; i < cues.length; i++) {\n paddedOverlay.appendChild(cues[i].displayState);\n }\n return;\n }\n\n var boxPositions = [],\n containerBox = BoxPosition.getSimpleBoxPosition(paddedOverlay),\n fontSize = Math.round(containerBox.height * FONT_SIZE_PERCENT * 100) / 100;\n var styleOptions = {\n font: fontSize + \"px \" + FONT_STYLE\n };\n\n (function() {\n var styleBox, cue;\n\n for (var i = 0; i < cues.length; i++) {\n cue = cues[i];\n\n // Compute the intial position and styles of the cue div.\n styleBox = new CueStyleBox(window, cue, styleOptions);\n paddedOverlay.appendChild(styleBox.div);\n\n // Move the cue div to it's correct line position.\n moveBoxToLinePosition(window, styleBox, containerBox, boxPositions);\n\n // Remember the computed div so that we don't have to recompute it later\n // if we don't have too.\n cue.displayState = styleBox.div;\n\n boxPositions.push(BoxPosition.getSimpleBoxPosition(styleBox));\n }\n })();\n};\n\nWebVTT.Parser = function(window, vttjs, decoder) {\n if (!decoder) {\n decoder = vttjs;\n vttjs = {};\n }\n if (!vttjs) {\n vttjs = {};\n }\n\n this.window = window;\n this.vttjs = vttjs;\n this.state = \"INITIAL\";\n this.buffer = \"\";\n this.decoder = decoder || new TextDecoder(\"utf8\");\n this.regionList = [];\n};\n\nWebVTT.Parser.prototype = {\n // If the error is a ParsingError then report it to the consumer if\n // possible. If it's not a ParsingError then throw it like normal.\n reportOrThrowError: function(e) {\n if (e instanceof ParsingError) {\n this.onparsingerror && this.onparsingerror(e);\n } else {\n throw e;\n }\n },\n parse: function (data) {\n var self = this;\n\n // If there is no data then we won't decode it, but will just try to parse\n // whatever is in buffer already. This may occur in circumstances, for\n // example when flush() is called.\n if (data) {\n // Try to decode the data that we received.\n self.buffer += self.decoder.decode(data, {stream: true});\n }\n\n function collectNextLine() {\n var buffer = self.buffer;\n var pos = 0;\n while (pos < buffer.length && buffer[pos] !== '\\r' && buffer[pos] !== '\\n') {\n ++pos;\n }\n var line = buffer.substr(0, pos);\n // Advance the buffer early in case we fail below.\n if (buffer[pos] === '\\r') {\n ++pos;\n }\n if (buffer[pos] === '\\n') {\n ++pos;\n }\n self.buffer = buffer.substr(pos);\n return line;\n }\n\n // 3.4 WebVTT region and WebVTT region settings syntax\n function parseRegion(input) {\n var settings = new Settings();\n\n parseOptions(input, function (k, v) {\n switch (k) {\n case \"id\":\n settings.set(k, v);\n break;\n case \"width\":\n settings.percent(k, v);\n break;\n case \"lines\":\n settings.integer(k, v);\n break;\n case \"regionanchor\":\n case \"viewportanchor\":\n var xy = v.split(',');\n if (xy.length !== 2) {\n break;\n }\n // We have to make sure both x and y parse, so use a temporary\n // settings object here.\n var anchor = new Settings();\n anchor.percent(\"x\", xy[0]);\n anchor.percent(\"y\", xy[1]);\n if (!anchor.has(\"x\") || !anchor.has(\"y\")) {\n break;\n }\n settings.set(k + \"X\", anchor.get(\"x\"));\n settings.set(k + \"Y\", anchor.get(\"y\"));\n break;\n case \"scroll\":\n settings.alt(k, v, [\"up\"]);\n break;\n }\n }, /=/, /\\s/);\n\n // Create the region, using default values for any values that were not\n // specified.\n if (settings.has(\"id\")) {\n var region = new (self.vttjs.VTTRegion || self.window.VTTRegion)();\n region.width = settings.get(\"width\", 100);\n region.lines = settings.get(\"lines\", 3);\n region.regionAnchorX = settings.get(\"regionanchorX\", 0);\n region.regionAnchorY = settings.get(\"regionanchorY\", 100);\n region.viewportAnchorX = settings.get(\"viewportanchorX\", 0);\n region.viewportAnchorY = settings.get(\"viewportanchorY\", 100);\n region.scroll = settings.get(\"scroll\", \"\");\n // Register the region.\n self.onregion && self.onregion(region);\n // Remember the VTTRegion for later in case we parse any VTTCues that\n // reference it.\n self.regionList.push({\n id: settings.get(\"id\"),\n region: region\n });\n }\n }\n\n // draft-pantos-http-live-streaming-20\n // https://tools.ietf.org/html/draft-pantos-http-live-streaming-20#section-3.5\n // 3.5 WebVTT\n function parseTimestampMap(input) {\n var settings = new Settings();\n\n parseOptions(input, function(k, v) {\n switch(k) {\n case \"MPEGT\":\n settings.integer(k + 'S', v);\n break;\n case \"LOCA\":\n settings.set(k + 'L', parseTimeStamp(v));\n break;\n }\n }, /[^\\d]:/, /,/);\n\n self.ontimestampmap && self.ontimestampmap({\n \"MPEGTS\": settings.get(\"MPEGTS\"),\n \"LOCAL\": settings.get(\"LOCAL\")\n });\n }\n\n // 3.2 WebVTT metadata header syntax\n function parseHeader(input) {\n if (input.match(/X-TIMESTAMP-MAP/)) {\n // This line contains HLS X-TIMESTAMP-MAP metadata\n parseOptions(input, function(k, v) {\n switch(k) {\n case \"X-TIMESTAMP-MAP\":\n parseTimestampMap(v);\n break;\n }\n }, /=/);\n } else {\n parseOptions(input, function (k, v) {\n switch (k) {\n case \"Region\":\n // 3.3 WebVTT region metadata header syntax\n parseRegion(v);\n break;\n }\n }, /:/);\n }\n\n }\n\n // 5.1 WebVTT file parsing.\n try {\n var line;\n if (self.state === \"INITIAL\") {\n // We can't start parsing until we have the first line.\n if (!/\\r\\n|\\n/.test(self.buffer)) {\n return this;\n }\n\n line = collectNextLine();\n\n var m = line.match(/^WEBVTT([ \\t].*)?$/);\n if (!m || !m[0]) {\n throw new ParsingError(ParsingError.Errors.BadSignature);\n }\n\n self.state = \"HEADER\";\n }\n\n var alreadyCollectedLine = false;\n while (self.buffer) {\n // We can't parse a line until we have the full line.\n if (!/\\r\\n|\\n/.test(self.buffer)) {\n return this;\n }\n\n if (!alreadyCollectedLine) {\n line = collectNextLine();\n } else {\n alreadyCollectedLine = false;\n }\n\n switch (self.state) {\n case \"HEADER\":\n // 13-18 - Allow a header (metadata) under the WEBVTT line.\n if (/:/.test(line)) {\n parseHeader(line);\n } else if (!line) {\n // An empty line terminates the header and starts the body (cues).\n self.state = \"ID\";\n }\n continue;\n case \"NOTE\":\n // Ignore NOTE blocks.\n if (!line) {\n self.state = \"ID\";\n }\n continue;\n case \"ID\":\n // Check for the start of NOTE blocks.\n if (/^NOTE($|[ \\t])/.test(line)) {\n self.state = \"NOTE\";\n break;\n }\n // 19-29 - Allow any number of line terminators, then initialize new cue values.\n if (!line) {\n continue;\n }\n self.cue = new (self.vttjs.VTTCue || self.window.VTTCue)(0, 0, \"\");\n // Safari still uses the old middle value and won't accept center\n try {\n self.cue.align = \"center\";\n } catch (e) {\n self.cue.align = \"middle\";\n }\n self.state = \"CUE\";\n // 30-39 - Check if self line contains an optional identifier or timing data.\n if (line.indexOf(\"-->\") === -1) {\n self.cue.id = line;\n continue;\n }\n // Process line as start of a cue.\n /*falls through*/\n case \"CUE\":\n // 40 - Collect cue timings and settings.\n try {\n parseCue(line, self.cue, self.regionList);\n } catch (e) {\n self.reportOrThrowError(e);\n // In case of an error ignore rest of the cue.\n self.cue = null;\n self.state = \"BADCUE\";\n continue;\n }\n self.state = \"CUETEXT\";\n continue;\n case \"CUETEXT\":\n var hasSubstring = line.indexOf(\"-->\") !== -1;\n // 34 - If we have an empty line then report the cue.\n // 35 - If we have the special substring '-->' then report the cue,\n // but do not collect the line as we need to process the current\n // one as a new cue.\n if (!line || hasSubstring && (alreadyCollectedLine = true)) {\n // We are done parsing self cue.\n self.oncue && self.oncue(self.cue);\n self.cue = null;\n self.state = \"ID\";\n continue;\n }\n if (self.cue.text) {\n self.cue.text += \"\\n\";\n }\n self.cue.text += line.replace(/\\u2028/g, '\\n').replace(/u2029/g, '\\n');\n continue;\n case \"BADCUE\": // BADCUE\n // 54-62 - Collect and discard the remaining cue.\n if (!line) {\n self.state = \"ID\";\n }\n continue;\n }\n }\n } catch (e) {\n self.reportOrThrowError(e);\n\n // If we are currently parsing a cue, report what we have.\n if (self.state === \"CUETEXT\" && self.cue && self.oncue) {\n self.oncue(self.cue);\n }\n self.cue = null;\n // Enter BADWEBVTT state if header was not parsed correctly otherwise\n // another exception occurred so enter BADCUE state.\n self.state = self.state === \"INITIAL\" ? \"BADWEBVTT\" : \"BADCUE\";\n }\n return this;\n },\n flush: function () {\n var self = this;\n try {\n // Finish decoding the stream.\n self.buffer += self.decoder.decode();\n // Synthesize the end of the current cue or region.\n if (self.cue || self.state === \"HEADER\") {\n self.buffer += \"\\n\\n\";\n self.parse();\n }\n // If we've flushed, parsed, and we're still on the INITIAL state then\n // that means we don't have enough of the stream to parse the first\n // line.\n if (self.state === \"INITIAL\") {\n throw new ParsingError(ParsingError.Errors.BadSignature);\n }\n } catch(e) {\n self.reportOrThrowError(e);\n }\n self.onflush && self.onflush();\n return this;\n }\n};\n\nmodule.exports = WebVTT;\n","/**\n * Copyright 2013 vtt.js Contributors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nvar autoKeyword = \"auto\";\nvar directionSetting = {\n \"\": 1,\n \"lr\": 1,\n \"rl\": 1\n};\nvar alignSetting = {\n \"start\": 1,\n \"center\": 1,\n \"end\": 1,\n \"left\": 1,\n \"right\": 1,\n \"auto\": 1,\n \"line-left\": 1,\n \"line-right\": 1\n};\n\nfunction findDirectionSetting(value) {\n if (typeof value !== \"string\") {\n return false;\n }\n var dir = directionSetting[value.toLowerCase()];\n return dir ? value.toLowerCase() : false;\n}\n\nfunction findAlignSetting(value) {\n if (typeof value !== \"string\") {\n return false;\n }\n var align = alignSetting[value.toLowerCase()];\n return align ? value.toLowerCase() : false;\n}\n\nfunction VTTCue(startTime, endTime, text) {\n /**\n * Shim implementation specific properties. These properties are not in\n * the spec.\n */\n\n // Lets us know when the VTTCue's data has changed in such a way that we need\n // to recompute its display state. This lets us compute its display state\n // lazily.\n this.hasBeenReset = false;\n\n /**\n * VTTCue and TextTrackCue properties\n * http://dev.w3.org/html5/webvtt/#vttcue-interface\n */\n\n var _id = \"\";\n var _pauseOnExit = false;\n var _startTime = startTime;\n var _endTime = endTime;\n var _text = text;\n var _region = null;\n var _vertical = \"\";\n var _snapToLines = true;\n var _line = \"auto\";\n var _lineAlign = \"start\";\n var _position = \"auto\";\n var _positionAlign = \"auto\";\n var _size = 100;\n var _align = \"center\";\n\n Object.defineProperties(this, {\n \"id\": {\n enumerable: true,\n get: function() {\n return _id;\n },\n set: function(value) {\n _id = \"\" + value;\n }\n },\n\n \"pauseOnExit\": {\n enumerable: true,\n get: function() {\n return _pauseOnExit;\n },\n set: function(value) {\n _pauseOnExit = !!value;\n }\n },\n\n \"startTime\": {\n enumerable: true,\n get: function() {\n return _startTime;\n },\n set: function(value) {\n if (typeof value !== \"number\") {\n throw new TypeError(\"Start time must be set to a number.\");\n }\n _startTime = value;\n this.hasBeenReset = true;\n }\n },\n\n \"endTime\": {\n enumerable: true,\n get: function() {\n return _endTime;\n },\n set: function(value) {\n if (typeof value !== \"number\") {\n throw new TypeError(\"End time must be set to a number.\");\n }\n _endTime = value;\n this.hasBeenReset = true;\n }\n },\n\n \"text\": {\n enumerable: true,\n get: function() {\n return _text;\n },\n set: function(value) {\n _text = \"\" + value;\n this.hasBeenReset = true;\n }\n },\n\n \"region\": {\n enumerable: true,\n get: function() {\n return _region;\n },\n set: function(value) {\n _region = value;\n this.hasBeenReset = true;\n }\n },\n\n \"vertical\": {\n enumerable: true,\n get: function() {\n return _vertical;\n },\n set: function(value) {\n var setting = findDirectionSetting(value);\n // Have to check for false because the setting an be an empty string.\n if (setting === false) {\n throw new SyntaxError(\"Vertical: an invalid or illegal direction string was specified.\");\n }\n _vertical = setting;\n this.hasBeenReset = true;\n }\n },\n\n \"snapToLines\": {\n enumerable: true,\n get: function() {\n return _snapToLines;\n },\n set: function(value) {\n _snapToLines = !!value;\n this.hasBeenReset = true;\n }\n },\n\n \"line\": {\n enumerable: true,\n get: function() {\n return _line;\n },\n set: function(value) {\n if (typeof value !== \"number\" && value !== autoKeyword) {\n throw new SyntaxError(\"Line: an invalid number or illegal string was specified.\");\n }\n _line = value;\n this.hasBeenReset = true;\n }\n },\n\n \"lineAlign\": {\n enumerable: true,\n get: function() {\n return _lineAlign;\n },\n set: function(value) {\n var setting = findAlignSetting(value);\n if (!setting) {\n console.warn(\"lineAlign: an invalid or illegal string was specified.\");\n } else {\n _lineAlign = setting;\n this.hasBeenReset = true;\n }\n }\n },\n\n \"position\": {\n enumerable: true,\n get: function() {\n return _position;\n },\n set: function(value) {\n if (value < 0 || value > 100) {\n throw new Error(\"Position must be between 0 and 100.\");\n }\n _position = value;\n this.hasBeenReset = true;\n }\n },\n\n \"positionAlign\": {\n enumerable: true,\n get: function() {\n return _positionAlign;\n },\n set: function(value) {\n var setting = findAlignSetting(value);\n if (!setting) {\n console.warn(\"positionAlign: an invalid or illegal string was specified.\");\n } else {\n _positionAlign = setting;\n this.hasBeenReset = true;\n }\n }\n },\n\n \"size\": {\n enumerable: true,\n get: function() {\n return _size;\n },\n set: function(value) {\n if (value < 0 || value > 100) {\n throw new Error(\"Size must be between 0 and 100.\");\n }\n _size = value;\n this.hasBeenReset = true;\n }\n },\n\n \"align\": {\n enumerable: true,\n get: function() {\n return _align;\n },\n set: function(value) {\n var setting = findAlignSetting(value);\n if (!setting) {\n throw new SyntaxError(\"align: an invalid or illegal alignment string was specified.\");\n }\n _align = setting;\n this.hasBeenReset = true;\n }\n }\n });\n\n /**\n * Other spec defined properties\n */\n\n // http://www.whatwg.org/specs/web-apps/current-work/multipage/the-video-element.html#text-track-cue-display-state\n this.displayState = undefined;\n}\n\n/**\n * VTTCue methods\n */\n\nVTTCue.prototype.getCueAsHTML = function() {\n // Assume WebVTT.convertCueToDOMTree is on the global.\n return WebVTT.convertCueToDOMTree(window, this.text);\n};\n\nmodule.exports = VTTCue;\n","/**\n * Copyright 2013 vtt.js Contributors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nvar scrollSetting = {\n \"\": true,\n \"up\": true\n};\n\nfunction findScrollSetting(value) {\n if (typeof value !== \"string\") {\n return false;\n }\n var scroll = scrollSetting[value.toLowerCase()];\n return scroll ? value.toLowerCase() : false;\n}\n\nfunction isValidPercentValue(value) {\n return typeof value === \"number\" && (value >= 0 && value <= 100);\n}\n\n// VTTRegion shim http://dev.w3.org/html5/webvtt/#vttregion-interface\nfunction VTTRegion() {\n var _width = 100;\n var _lines = 3;\n var _regionAnchorX = 0;\n var _regionAnchorY = 100;\n var _viewportAnchorX = 0;\n var _viewportAnchorY = 100;\n var _scroll = \"\";\n\n Object.defineProperties(this, {\n \"width\": {\n enumerable: true,\n get: function() {\n return _width;\n },\n set: function(value) {\n if (!isValidPercentValue(value)) {\n throw new Error(\"Width must be between 0 and 100.\");\n }\n _width = value;\n }\n },\n \"lines\": {\n enumerable: true,\n get: function() {\n return _lines;\n },\n set: function(value) {\n if (typeof value !== \"number\") {\n throw new TypeError(\"Lines must be set to a number.\");\n }\n _lines = value;\n }\n },\n \"regionAnchorY\": {\n enumerable: true,\n get: function() {\n return _regionAnchorY;\n },\n set: function(value) {\n if (!isValidPercentValue(value)) {\n throw new Error(\"RegionAnchorX must be between 0 and 100.\");\n }\n _regionAnchorY = value;\n }\n },\n \"regionAnchorX\": {\n enumerable: true,\n get: function() {\n return _regionAnchorX;\n },\n set: function(value) {\n if(!isValidPercentValue(value)) {\n throw new Error(\"RegionAnchorY must be between 0 and 100.\");\n }\n _regionAnchorX = value;\n }\n },\n \"viewportAnchorY\": {\n enumerable: true,\n get: function() {\n return _viewportAnchorY;\n },\n set: function(value) {\n if (!isValidPercentValue(value)) {\n throw new Error(\"ViewportAnchorY must be between 0 and 100.\");\n }\n _viewportAnchorY = value;\n }\n },\n \"viewportAnchorX\": {\n enumerable: true,\n get: function() {\n return _viewportAnchorX;\n },\n set: function(value) {\n if (!isValidPercentValue(value)) {\n throw new Error(\"ViewportAnchorX must be between 0 and 100.\");\n }\n _viewportAnchorX = value;\n }\n },\n \"scroll\": {\n enumerable: true,\n get: function() {\n return _scroll;\n },\n set: function(value) {\n var setting = findScrollSetting(value);\n // Have to check for false as an empty string is a legal value.\n if (setting === false) {\n console.warn(\"Scroll: an invalid or illegal string was specified.\");\n } else {\n _scroll = setting;\n }\n }\n }\n });\n}\n\nmodule.exports = VTTRegion;\n","function _extends() {\n return module.exports = _extends = Object.assign ? Object.assign.bind() : function (n) {\n for (var e = 1; e < arguments.length; e++) {\n var t = arguments[e];\n for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]);\n }\n return n;\n }, module.exports.__esModule = true, module.exports[\"default\"] = module.exports, _extends.apply(null, arguments);\n}\nmodule.exports = _extends, module.exports.__esModule = true, module.exports[\"default\"] = module.exports;","// The module cache\nvar __webpack_module_cache__ = {};\n\n// The require function\nfunction __webpack_require__(moduleId) {\n\t// Check if module is in cache\n\tvar cachedModule = __webpack_module_cache__[moduleId];\n\tif (cachedModule !== undefined) {\n\t\treturn cachedModule.exports;\n\t}\n\t// Create a new module (and put it into the cache)\n\tvar module = __webpack_module_cache__[moduleId] = {\n\t\t// no module.id needed\n\t\t// no module.loaded needed\n\t\texports: {}\n\t};\n\n\t// Execute the module function\n\t__webpack_modules__[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n\t// Return the exports of the module\n\treturn module.exports;\n}\n\n// expose the modules object (__webpack_modules__)\n__webpack_require__.m = __webpack_modules__;\n\n","// getDefaultExport function for compatibility with non-harmony modules\n__webpack_require__.n = (module) => {\n\tvar getter = module && module.__esModule ?\n\t\t() => (module['default']) :\n\t\t() => (module);\n\t__webpack_require__.d(getter, { a: getter });\n\treturn getter;\n};","var getProto = Object.getPrototypeOf ? (obj) => (Object.getPrototypeOf(obj)) : (obj) => (obj.__proto__);\nvar leafPrototypes;\n// create a fake namespace object\n// mode & 1: value is a module id, require it\n// mode & 2: merge all properties of value into the ns\n// mode & 4: return value when already ns object\n// mode & 16: return value when it's Promise-like\n// mode & 8|1: behave like require\n__webpack_require__.t = function(value, mode) {\n\tif(mode & 1) value = this(value);\n\tif(mode & 8) return value;\n\tif(typeof value === 'object' && value) {\n\t\tif((mode & 4) && value.__esModule) return value;\n\t\tif((mode & 16) && typeof value.then === 'function') return value;\n\t}\n\tvar ns = Object.create(null);\n\t__webpack_require__.r(ns);\n\tvar def = {};\n\tleafPrototypes = leafPrototypes || [null, getProto({}), getProto([]), getProto(getProto)];\n\tfor(var current = mode & 2 && value; typeof current == 'object' && !~leafPrototypes.indexOf(current); current = getProto(current)) {\n\t\tObject.getOwnPropertyNames(current).forEach((key) => (def[key] = () => (value[key])));\n\t}\n\tdef['default'] = () => (value);\n\t__webpack_require__.d(ns, def);\n\treturn ns;\n};","// define getter functions for harmony exports\n__webpack_require__.d = (exports, definition) => {\n\tfor(var key in definition) {\n\t\tif(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) {\n\t\t\tObject.defineProperty(exports, key, { enumerable: true, get: definition[key] });\n\t\t}\n\t}\n};","__webpack_require__.f = {};\n// This file contains only the entry chunk.\n// The chunk loading function for additional chunks\n__webpack_require__.e = (chunkId) => {\n\treturn Promise.all(Object.keys(__webpack_require__.f).reduce((promises, key) => {\n\t\t__webpack_require__.f[key](chunkId, promises);\n\t\treturn promises;\n\t}, []));\n};","// This function allow to reference async chunks\n__webpack_require__.u = (chunkId) => {\n\t// return url for filenames based on template\n\treturn \"static/js/\" + chunkId + \".\" + \"261d7ab8\" + \".chunk.js\";\n};","// This function allow to reference async chunks\n__webpack_require__.miniCssF = (chunkId) => {\n\t// return url for filenames based on template\n\treturn undefined;\n};","__webpack_require__.g = (function() {\n\tif (typeof globalThis === 'object') return globalThis;\n\ttry {\n\t\treturn this || new Function('return this')();\n\t} catch (e) {\n\t\tif (typeof window === 'object') return window;\n\t}\n})();","__webpack_require__.o = (obj, prop) => (Object.prototype.hasOwnProperty.call(obj, prop))","var inProgress = {};\nvar dataWebpackPrefix = \"frontend:\";\n// loadScript function to load a script via script tag\n__webpack_require__.l = (url, done, key, chunkId) => {\n\tif(inProgress[url]) { inProgress[url].push(done); return; }\n\tvar script, needAttach;\n\tif(key !== undefined) {\n\t\tvar scripts = document.getElementsByTagName(\"script\");\n\t\tfor(var i = 0; i < scripts.length; i++) {\n\t\t\tvar s = scripts[i];\n\t\t\tif(s.getAttribute(\"src\") == url || s.getAttribute(\"data-webpack\") == dataWebpackPrefix + key) { script = s; break; }\n\t\t}\n\t}\n\tif(!script) {\n\t\tneedAttach = true;\n\t\tscript = document.createElement('script');\n\n\t\tscript.charset = 'utf-8';\n\t\tscript.timeout = 120;\n\t\tif (__webpack_require__.nc) {\n\t\t\tscript.setAttribute(\"nonce\", __webpack_require__.nc);\n\t\t}\n\t\tscript.setAttribute(\"data-webpack\", dataWebpackPrefix + key);\n\n\t\tscript.src = url;\n\t}\n\tinProgress[url] = [done];\n\tvar onScriptComplete = (prev, event) => {\n\t\t// avoid mem leaks in IE.\n\t\tscript.onerror = script.onload = null;\n\t\tclearTimeout(timeout);\n\t\tvar doneFns = inProgress[url];\n\t\tdelete inProgress[url];\n\t\tscript.parentNode && script.parentNode.removeChild(script);\n\t\tdoneFns && doneFns.forEach((fn) => (fn(event)));\n\t\tif(prev) return prev(event);\n\t}\n\tvar timeout = setTimeout(onScriptComplete.bind(null, undefined, { type: 'timeout', target: script }), 120000);\n\tscript.onerror = onScriptComplete.bind(null, script.onerror);\n\tscript.onload = onScriptComplete.bind(null, script.onload);\n\tneedAttach && document.head.appendChild(script);\n};","// define __esModule on exports\n__webpack_require__.r = (exports) => {\n\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n\t}\n\tObject.defineProperty(exports, '__esModule', { value: true });\n};","__webpack_require__.p = \"/\";","// no baseURI\n\n// object to store loaded and loading chunks\n// undefined = chunk not loaded, null = chunk preloaded/prefetched\n// [resolve, reject, Promise] = chunk loading, 0 = chunk loaded\nvar installedChunks = {\n\t792: 0\n};\n\n__webpack_require__.f.j = (chunkId, promises) => {\n\t\t// JSONP chunk loading for javascript\n\t\tvar installedChunkData = __webpack_require__.o(installedChunks, chunkId) ? installedChunks[chunkId] : undefined;\n\t\tif(installedChunkData !== 0) { // 0 means \"already installed\".\n\n\t\t\t// a Promise means \"currently loading\".\n\t\t\tif(installedChunkData) {\n\t\t\t\tpromises.push(installedChunkData[2]);\n\t\t\t} else {\n\t\t\t\tif(true) { // all chunks have JS\n\t\t\t\t\t// setup Promise in chunk cache\n\t\t\t\t\tvar promise = new Promise((resolve, reject) => (installedChunkData = installedChunks[chunkId] = [resolve, reject]));\n\t\t\t\t\tpromises.push(installedChunkData[2] = promise);\n\n\t\t\t\t\t// start chunk loading\n\t\t\t\t\tvar url = __webpack_require__.p + __webpack_require__.u(chunkId);\n\t\t\t\t\t// create error before stack unwound to get useful stacktrace later\n\t\t\t\t\tvar error = new Error();\n\t\t\t\t\tvar loadingEnded = (event) => {\n\t\t\t\t\t\tif(__webpack_require__.o(installedChunks, chunkId)) {\n\t\t\t\t\t\t\tinstalledChunkData = installedChunks[chunkId];\n\t\t\t\t\t\t\tif(installedChunkData !== 0) installedChunks[chunkId] = undefined;\n\t\t\t\t\t\t\tif(installedChunkData) {\n\t\t\t\t\t\t\t\tvar errorType = event && (event.type === 'load' ? 'missing' : event.type);\n\t\t\t\t\t\t\t\tvar realSrc = event && event.target && event.target.src;\n\t\t\t\t\t\t\t\terror.message = 'Loading chunk ' + chunkId + ' failed.\\n(' + errorType + ': ' + realSrc + ')';\n\t\t\t\t\t\t\t\terror.name = 'ChunkLoadError';\n\t\t\t\t\t\t\t\terror.type = errorType;\n\t\t\t\t\t\t\t\terror.request = realSrc;\n\t\t\t\t\t\t\t\tinstalledChunkData[1](error);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t};\n\t\t\t\t\t__webpack_require__.l(url, loadingEnded, \"chunk-\" + chunkId, chunkId);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n};\n\n// no prefetching\n\n// no preloaded\n\n// no HMR\n\n// no HMR manifest\n\n// no on chunks loaded\n\n// install a JSONP callback for chunk loading\nvar webpackJsonpCallback = (parentChunkLoadingFunction, data) => {\n\tvar chunkIds = data[0];\n\tvar moreModules = data[1];\n\tvar runtime = data[2];\n\t// add \"moreModules\" to the modules object,\n\t// then flag all \"chunkIds\" as loaded and fire callback\n\tvar moduleId, chunkId, i = 0;\n\tif(chunkIds.some((id) => (installedChunks[id] !== 0))) {\n\t\tfor(moduleId in moreModules) {\n\t\t\tif(__webpack_require__.o(moreModules, moduleId)) {\n\t\t\t\t__webpack_require__.m[moduleId] = moreModules[moduleId];\n\t\t\t}\n\t\t}\n\t\tif(runtime) var result = runtime(__webpack_require__);\n\t}\n\tif(parentChunkLoadingFunction) parentChunkLoadingFunction(data);\n\tfor(;i < chunkIds.length; i++) {\n\t\tchunkId = chunkIds[i];\n\t\tif(__webpack_require__.o(installedChunks, chunkId) && installedChunks[chunkId]) {\n\t\t\tinstalledChunks[chunkId][0]();\n\t\t}\n\t\tinstalledChunks[chunkId] = 0;\n\t}\n\n}\n\nvar chunkLoadingGlobal = self[\"webpackChunkfrontend\"] = self[\"webpackChunkfrontend\"] || [];\nchunkLoadingGlobal.forEach(webpackJsonpCallback.bind(null, 0));\nchunkLoadingGlobal.push = webpackJsonpCallback.bind(null, chunkLoadingGlobal.push.bind(chunkLoadingGlobal));","////////////////////////////////////////////////////////////////////////////////\n//#region Types and Constants\n////////////////////////////////////////////////////////////////////////////////\n\n/**\n * Actions represent the type of change to a location value.\n */\nexport enum Action {\n /**\n * A POP indicates a change to an arbitrary index in the history stack, such\n * as a back or forward navigation. It does not describe the direction of the\n * navigation, only that the current index changed.\n *\n * Note: This is the default action for newly created history objects.\n */\n Pop = \"POP\",\n\n /**\n * A PUSH indicates a new entry being added to the history stack, such as when\n * a link is clicked and a new page loads. When this happens, all subsequent\n * entries in the stack are lost.\n */\n Push = \"PUSH\",\n\n /**\n * A REPLACE indicates the entry at the current index in the history stack\n * being replaced by a new one.\n */\n Replace = \"REPLACE\",\n}\n\n/**\n * The pathname, search, and hash values of a URL.\n */\nexport interface Path {\n /**\n * A URL pathname, beginning with a /.\n */\n pathname: string;\n\n /**\n * A URL search string, beginning with a ?.\n */\n search: string;\n\n /**\n * A URL fragment identifier, beginning with a #.\n */\n hash: string;\n}\n\n// TODO: (v7) Change the Location generic default from `any` to `unknown` and\n// remove Remix `useLocation` wrapper.\n\n/**\n * An entry in a history stack. A location contains information about the\n * URL path, as well as possibly some arbitrary state and a key.\n */\nexport interface Location extends Path {\n /**\n * A value of arbitrary data associated with this location.\n */\n state: State;\n\n /**\n * A unique string associated with this location. May be used to safely store\n * and retrieve data in some other storage API, like `localStorage`.\n *\n * Note: This value is always \"default\" on the initial location.\n */\n key: string;\n}\n\n/**\n * A change to the current location.\n */\nexport interface Update {\n /**\n * The action that triggered the change.\n */\n action: Action;\n\n /**\n * The new location.\n */\n location: Location;\n\n /**\n * The delta between this location and the former location in the history stack\n */\n delta: number | null;\n}\n\n/**\n * A function that receives notifications about location changes.\n */\nexport interface Listener {\n (update: Update): void;\n}\n\n/**\n * Describes a location that is the destination of some navigation, either via\n * `history.push` or `history.replace`. This may be either a URL or the pieces\n * of a URL path.\n */\nexport type To = string | Partial;\n\n/**\n * A history is an interface to the navigation stack. The history serves as the\n * source of truth for the current location, as well as provides a set of\n * methods that may be used to change it.\n *\n * It is similar to the DOM's `window.history` object, but with a smaller, more\n * focused API.\n */\nexport interface History {\n /**\n * The last action that modified the current location. This will always be\n * Action.Pop when a history instance is first created. This value is mutable.\n */\n readonly action: Action;\n\n /**\n * The current location. This value is mutable.\n */\n readonly location: Location;\n\n /**\n * Returns a valid href for the given `to` value that may be used as\n * the value of an attribute.\n *\n * @param to - The destination URL\n */\n createHref(to: To): string;\n\n /**\n * Returns a URL for the given `to` value\n *\n * @param to - The destination URL\n */\n createURL(to: To): URL;\n\n /**\n * Encode a location the same way window.history would do (no-op for memory\n * history) so we ensure our PUSH/REPLACE navigations for data routers\n * behave the same as POP\n *\n * @param to Unencoded path\n */\n encodeLocation(to: To): Path;\n\n /**\n * Pushes a new location onto the history stack, increasing its length by one.\n * If there were any entries in the stack after the current one, they are\n * lost.\n *\n * @param to - The new URL\n * @param state - Data to associate with the new location\n */\n push(to: To, state?: any): void;\n\n /**\n * Replaces the current location in the history stack with a new one. The\n * location that was replaced will no longer be available.\n *\n * @param to - The new URL\n * @param state - Data to associate with the new location\n */\n replace(to: To, state?: any): void;\n\n /**\n * Navigates `n` entries backward/forward in the history stack relative to the\n * current index. For example, a \"back\" navigation would use go(-1).\n *\n * @param delta - The delta in the stack index\n */\n go(delta: number): void;\n\n /**\n * Sets up a listener that will be called whenever the current location\n * changes.\n *\n * @param listener - A function that will be called when the location changes\n * @returns unlisten - A function that may be used to stop listening\n */\n listen(listener: Listener): () => void;\n}\n\ntype HistoryState = {\n usr: any;\n key?: string;\n idx: number;\n};\n\nconst PopStateEventType = \"popstate\";\n//#endregion\n\n////////////////////////////////////////////////////////////////////////////////\n//#region Memory History\n////////////////////////////////////////////////////////////////////////////////\n\n/**\n * A user-supplied object that describes a location. Used when providing\n * entries to `createMemoryHistory` via its `initialEntries` option.\n */\nexport type InitialEntry = string | Partial;\n\nexport type MemoryHistoryOptions = {\n initialEntries?: InitialEntry[];\n initialIndex?: number;\n v5Compat?: boolean;\n};\n\n/**\n * A memory history stores locations in memory. This is useful in stateful\n * environments where there is no web browser, such as node tests or React\n * Native.\n */\nexport interface MemoryHistory extends History {\n /**\n * The current index in the history stack.\n */\n readonly index: number;\n}\n\n/**\n * Memory history stores the current location in memory. It is designed for use\n * in stateful non-browser environments like tests and React Native.\n */\nexport function createMemoryHistory(\n options: MemoryHistoryOptions = {}\n): MemoryHistory {\n let { initialEntries = [\"/\"], initialIndex, v5Compat = false } = options;\n let entries: Location[]; // Declare so we can access from createMemoryLocation\n entries = initialEntries.map((entry, index) =>\n createMemoryLocation(\n entry,\n typeof entry === \"string\" ? null : entry.state,\n index === 0 ? \"default\" : undefined\n )\n );\n let index = clampIndex(\n initialIndex == null ? entries.length - 1 : initialIndex\n );\n let action = Action.Pop;\n let listener: Listener | null = null;\n\n function clampIndex(n: number): number {\n return Math.min(Math.max(n, 0), entries.length - 1);\n }\n function getCurrentLocation(): Location {\n return entries[index];\n }\n function createMemoryLocation(\n to: To,\n state: any = null,\n key?: string\n ): Location {\n let location = createLocation(\n entries ? getCurrentLocation().pathname : \"/\",\n to,\n state,\n key\n );\n warning(\n location.pathname.charAt(0) === \"/\",\n `relative pathnames are not supported in memory history: ${JSON.stringify(\n to\n )}`\n );\n return location;\n }\n\n function createHref(to: To) {\n return typeof to === \"string\" ? to : createPath(to);\n }\n\n let history: MemoryHistory = {\n get index() {\n return index;\n },\n get action() {\n return action;\n },\n get location() {\n return getCurrentLocation();\n },\n createHref,\n createURL(to) {\n return new URL(createHref(to), \"http://localhost\");\n },\n encodeLocation(to: To) {\n let path = typeof to === \"string\" ? parsePath(to) : to;\n return {\n pathname: path.pathname || \"\",\n search: path.search || \"\",\n hash: path.hash || \"\",\n };\n },\n push(to, state) {\n action = Action.Push;\n let nextLocation = createMemoryLocation(to, state);\n index += 1;\n entries.splice(index, entries.length, nextLocation);\n if (v5Compat && listener) {\n listener({ action, location: nextLocation, delta: 1 });\n }\n },\n replace(to, state) {\n action = Action.Replace;\n let nextLocation = createMemoryLocation(to, state);\n entries[index] = nextLocation;\n if (v5Compat && listener) {\n listener({ action, location: nextLocation, delta: 0 });\n }\n },\n go(delta) {\n action = Action.Pop;\n let nextIndex = clampIndex(index + delta);\n let nextLocation = entries[nextIndex];\n index = nextIndex;\n if (listener) {\n listener({ action, location: nextLocation, delta });\n }\n },\n listen(fn: Listener) {\n listener = fn;\n return () => {\n listener = null;\n };\n },\n };\n\n return history;\n}\n//#endregion\n\n////////////////////////////////////////////////////////////////////////////////\n//#region Browser History\n////////////////////////////////////////////////////////////////////////////////\n\n/**\n * A browser history stores the current location in regular URLs in a web\n * browser environment. This is the standard for most web apps and provides the\n * cleanest URLs the browser's address bar.\n *\n * @see https://github.com/remix-run/history/tree/main/docs/api-reference.md#browserhistory\n */\nexport interface BrowserHistory extends UrlHistory {}\n\nexport type BrowserHistoryOptions = UrlHistoryOptions;\n\n/**\n * Browser history stores the location in regular URLs. This is the standard for\n * most web apps, but it requires some configuration on the server to ensure you\n * serve the same app at multiple URLs.\n *\n * @see https://github.com/remix-run/history/tree/main/docs/api-reference.md#createbrowserhistory\n */\nexport function createBrowserHistory(\n options: BrowserHistoryOptions = {}\n): BrowserHistory {\n function createBrowserLocation(\n window: Window,\n globalHistory: Window[\"history\"]\n ) {\n let { pathname, search, hash } = window.location;\n return createLocation(\n \"\",\n { pathname, search, hash },\n // state defaults to `null` because `window.history.state` does\n (globalHistory.state && globalHistory.state.usr) || null,\n (globalHistory.state && globalHistory.state.key) || \"default\"\n );\n }\n\n function createBrowserHref(window: Window, to: To) {\n return typeof to === \"string\" ? to : createPath(to);\n }\n\n return getUrlBasedHistory(\n createBrowserLocation,\n createBrowserHref,\n null,\n options\n );\n}\n//#endregion\n\n////////////////////////////////////////////////////////////////////////////////\n//#region Hash History\n////////////////////////////////////////////////////////////////////////////////\n\n/**\n * A hash history stores the current location in the fragment identifier portion\n * of the URL in a web browser environment.\n *\n * This is ideal for apps that do not control the server for some reason\n * (because the fragment identifier is never sent to the server), including some\n * shared hosting environments that do not provide fine-grained controls over\n * which pages are served at which URLs.\n *\n * @see https://github.com/remix-run/history/tree/main/docs/api-reference.md#hashhistory\n */\nexport interface HashHistory extends UrlHistory {}\n\nexport type HashHistoryOptions = UrlHistoryOptions;\n\n/**\n * Hash history stores the location in window.location.hash. This makes it ideal\n * for situations where you don't want to send the location to the server for\n * some reason, either because you do cannot configure it or the URL space is\n * reserved for something else.\n *\n * @see https://github.com/remix-run/history/tree/main/docs/api-reference.md#createhashhistory\n */\nexport function createHashHistory(\n options: HashHistoryOptions = {}\n): HashHistory {\n function createHashLocation(\n window: Window,\n globalHistory: Window[\"history\"]\n ) {\n let {\n pathname = \"/\",\n search = \"\",\n hash = \"\",\n } = parsePath(window.location.hash.substr(1));\n\n // Hash URL should always have a leading / just like window.location.pathname\n // does, so if an app ends up at a route like /#something then we add a\n // leading slash so all of our path-matching behaves the same as if it would\n // in a browser router. This is particularly important when there exists a\n // root splat route () since that matches internally against\n // \"/*\" and we'd expect /#something to 404 in a hash router app.\n if (!pathname.startsWith(\"/\") && !pathname.startsWith(\".\")) {\n pathname = \"/\" + pathname;\n }\n\n return createLocation(\n \"\",\n { pathname, search, hash },\n // state defaults to `null` because `window.history.state` does\n (globalHistory.state && globalHistory.state.usr) || null,\n (globalHistory.state && globalHistory.state.key) || \"default\"\n );\n }\n\n function createHashHref(window: Window, to: To) {\n let base = window.document.querySelector(\"base\");\n let href = \"\";\n\n if (base && base.getAttribute(\"href\")) {\n let url = window.location.href;\n let hashIndex = url.indexOf(\"#\");\n href = hashIndex === -1 ? url : url.slice(0, hashIndex);\n }\n\n return href + \"#\" + (typeof to === \"string\" ? to : createPath(to));\n }\n\n function validateHashLocation(location: Location, to: To) {\n warning(\n location.pathname.charAt(0) === \"/\",\n `relative pathnames are not supported in hash history.push(${JSON.stringify(\n to\n )})`\n );\n }\n\n return getUrlBasedHistory(\n createHashLocation,\n createHashHref,\n validateHashLocation,\n options\n );\n}\n//#endregion\n\n////////////////////////////////////////////////////////////////////////////////\n//#region UTILS\n////////////////////////////////////////////////////////////////////////////////\n\n/**\n * @private\n */\nexport function invariant(value: boolean, message?: string): asserts value;\nexport function invariant(\n value: T | null | undefined,\n message?: string\n): asserts value is T;\nexport function invariant(value: any, message?: string) {\n if (value === false || value === null || typeof value === \"undefined\") {\n throw new Error(message);\n }\n}\n\nexport function warning(cond: any, message: string) {\n if (!cond) {\n // eslint-disable-next-line no-console\n if (typeof console !== \"undefined\") console.warn(message);\n\n try {\n // Welcome to debugging history!\n //\n // This error is thrown as a convenience, so you can more easily\n // find the source for a warning that appears in the console by\n // enabling \"pause on exceptions\" in your JavaScript debugger.\n throw new Error(message);\n // eslint-disable-next-line no-empty\n } catch (e) {}\n }\n}\n\nfunction createKey() {\n return Math.random().toString(36).substr(2, 8);\n}\n\n/**\n * For browser-based histories, we combine the state and key into an object\n */\nfunction getHistoryState(location: Location, index: number): HistoryState {\n return {\n usr: location.state,\n key: location.key,\n idx: index,\n };\n}\n\n/**\n * Creates a Location object with a unique key from the given Path\n */\nexport function createLocation(\n current: string | Location,\n to: To,\n state: any = null,\n key?: string\n): Readonly {\n let location: Readonly = {\n pathname: typeof current === \"string\" ? current : current.pathname,\n search: \"\",\n hash: \"\",\n ...(typeof to === \"string\" ? parsePath(to) : to),\n state,\n // TODO: This could be cleaned up. push/replace should probably just take\n // full Locations now and avoid the need to run through this flow at all\n // But that's a pretty big refactor to the current test suite so going to\n // keep as is for the time being and just let any incoming keys take precedence\n key: (to && (to as Location).key) || key || createKey(),\n };\n return location;\n}\n\n/**\n * Creates a string URL path from the given pathname, search, and hash components.\n */\nexport function createPath({\n pathname = \"/\",\n search = \"\",\n hash = \"\",\n}: Partial) {\n if (search && search !== \"?\")\n pathname += search.charAt(0) === \"?\" ? search : \"?\" + search;\n if (hash && hash !== \"#\")\n pathname += hash.charAt(0) === \"#\" ? hash : \"#\" + hash;\n return pathname;\n}\n\n/**\n * Parses a string URL path into its separate pathname, search, and hash components.\n */\nexport function parsePath(path: string): Partial {\n let parsedPath: Partial = {};\n\n if (path) {\n let hashIndex = path.indexOf(\"#\");\n if (hashIndex >= 0) {\n parsedPath.hash = path.substr(hashIndex);\n path = path.substr(0, hashIndex);\n }\n\n let searchIndex = path.indexOf(\"?\");\n if (searchIndex >= 0) {\n parsedPath.search = path.substr(searchIndex);\n path = path.substr(0, searchIndex);\n }\n\n if (path) {\n parsedPath.pathname = path;\n }\n }\n\n return parsedPath;\n}\n\nexport interface UrlHistory extends History {}\n\nexport type UrlHistoryOptions = {\n window?: Window;\n v5Compat?: boolean;\n};\n\nfunction getUrlBasedHistory(\n getLocation: (window: Window, globalHistory: Window[\"history\"]) => Location,\n createHref: (window: Window, to: To) => string,\n validateLocation: ((location: Location, to: To) => void) | null,\n options: UrlHistoryOptions = {}\n): UrlHistory {\n let { window = document.defaultView!, v5Compat = false } = options;\n let globalHistory = window.history;\n let action = Action.Pop;\n let listener: Listener | null = null;\n\n let index = getIndex()!;\n // Index should only be null when we initialize. If not, it's because the\n // user called history.pushState or history.replaceState directly, in which\n // case we should log a warning as it will result in bugs.\n if (index == null) {\n index = 0;\n globalHistory.replaceState({ ...globalHistory.state, idx: index }, \"\");\n }\n\n function getIndex(): number {\n let state = globalHistory.state || { idx: null };\n return state.idx;\n }\n\n function handlePop() {\n action = Action.Pop;\n let nextIndex = getIndex();\n let delta = nextIndex == null ? null : nextIndex - index;\n index = nextIndex;\n if (listener) {\n listener({ action, location: history.location, delta });\n }\n }\n\n function push(to: To, state?: any) {\n action = Action.Push;\n let location = createLocation(history.location, to, state);\n if (validateLocation) validateLocation(location, to);\n\n index = getIndex() + 1;\n let historyState = getHistoryState(location, index);\n let url = history.createHref(location);\n\n // try...catch because iOS limits us to 100 pushState calls :/\n try {\n globalHistory.pushState(historyState, \"\", url);\n } catch (error) {\n // If the exception is because `state` can't be serialized, let that throw\n // outwards just like a replace call would so the dev knows the cause\n // https://html.spec.whatwg.org/multipage/nav-history-apis.html#shared-history-push/replace-state-steps\n // https://html.spec.whatwg.org/multipage/structured-data.html#structuredserializeinternal\n if (error instanceof DOMException && error.name === \"DataCloneError\") {\n throw error;\n }\n // They are going to lose state here, but there is no real\n // way to warn them about it since the page will refresh...\n window.location.assign(url);\n }\n\n if (v5Compat && listener) {\n listener({ action, location: history.location, delta: 1 });\n }\n }\n\n function replace(to: To, state?: any) {\n action = Action.Replace;\n let location = createLocation(history.location, to, state);\n if (validateLocation) validateLocation(location, to);\n\n index = getIndex();\n let historyState = getHistoryState(location, index);\n let url = history.createHref(location);\n globalHistory.replaceState(historyState, \"\", url);\n\n if (v5Compat && listener) {\n listener({ action, location: history.location, delta: 0 });\n }\n }\n\n function createURL(to: To): URL {\n // window.location.origin is \"null\" (the literal string value) in Firefox\n // under certain conditions, notably when serving from a local HTML file\n // See https://bugzilla.mozilla.org/show_bug.cgi?id=878297\n let base =\n window.location.origin !== \"null\"\n ? window.location.origin\n : window.location.href;\n\n let href = typeof to === \"string\" ? to : createPath(to);\n // Treating this as a full URL will strip any trailing spaces so we need to\n // pre-encode them since they might be part of a matching splat param from\n // an ancestor route\n href = href.replace(/ $/, \"%20\");\n invariant(\n base,\n `No window.location.(origin|href) available to create URL for href: ${href}`\n );\n return new URL(href, base);\n }\n\n let history: History = {\n get action() {\n return action;\n },\n get location() {\n return getLocation(window, globalHistory);\n },\n listen(fn: Listener) {\n if (listener) {\n throw new Error(\"A history only accepts one active listener\");\n }\n window.addEventListener(PopStateEventType, handlePop);\n listener = fn;\n\n return () => {\n window.removeEventListener(PopStateEventType, handlePop);\n listener = null;\n };\n },\n createHref(to) {\n return createHref(window, to);\n },\n createURL,\n encodeLocation(to) {\n // Encode a Location the same way window.location would\n let url = createURL(to);\n return {\n pathname: url.pathname,\n search: url.search,\n hash: url.hash,\n };\n },\n push,\n replace,\n go(n) {\n return globalHistory.go(n);\n },\n };\n\n return history;\n}\n\n//#endregion\n","import type { Location, Path, To } from \"./history\";\nimport { invariant, parsePath, warning } from \"./history\";\n\n/**\n * Map of routeId -> data returned from a loader/action/error\n */\nexport interface RouteData {\n [routeId: string]: any;\n}\n\nexport enum ResultType {\n data = \"data\",\n deferred = \"deferred\",\n redirect = \"redirect\",\n error = \"error\",\n}\n\n/**\n * Successful result from a loader or action\n */\nexport interface SuccessResult {\n type: ResultType.data;\n data: unknown;\n statusCode?: number;\n headers?: Headers;\n}\n\n/**\n * Successful defer() result from a loader or action\n */\nexport interface DeferredResult {\n type: ResultType.deferred;\n deferredData: DeferredData;\n statusCode?: number;\n headers?: Headers;\n}\n\n/**\n * Redirect result from a loader or action\n */\nexport interface RedirectResult {\n type: ResultType.redirect;\n // We keep the raw Response for redirects so we can return it verbatim\n response: Response;\n}\n\n/**\n * Unsuccessful result from a loader or action\n */\nexport interface ErrorResult {\n type: ResultType.error;\n error: unknown;\n statusCode?: number;\n headers?: Headers;\n}\n\n/**\n * Result from a loader or action - potentially successful or unsuccessful\n */\nexport type DataResult =\n | SuccessResult\n | DeferredResult\n | RedirectResult\n | ErrorResult;\n\ntype LowerCaseFormMethod = \"get\" | \"post\" | \"put\" | \"patch\" | \"delete\";\ntype UpperCaseFormMethod = Uppercase;\n\n/**\n * Users can specify either lowercase or uppercase form methods on `
`,\n * useSubmit(), ``, etc.\n */\nexport type HTMLFormMethod = LowerCaseFormMethod | UpperCaseFormMethod;\n\n/**\n * Active navigation/fetcher form methods are exposed in lowercase on the\n * RouterState\n */\nexport type FormMethod = LowerCaseFormMethod;\nexport type MutationFormMethod = Exclude;\n\n/**\n * In v7, active navigation/fetcher form methods are exposed in uppercase on the\n * RouterState. This is to align with the normalization done via fetch().\n */\nexport type V7_FormMethod = UpperCaseFormMethod;\nexport type V7_MutationFormMethod = Exclude;\n\nexport type FormEncType =\n | \"application/x-www-form-urlencoded\"\n | \"multipart/form-data\"\n | \"application/json\"\n | \"text/plain\";\n\n// Thanks https://github.com/sindresorhus/type-fest!\ntype JsonObject = { [Key in string]: JsonValue } & {\n [Key in string]?: JsonValue | undefined;\n};\ntype JsonArray = JsonValue[] | readonly JsonValue[];\ntype JsonPrimitive = string | number | boolean | null;\ntype JsonValue = JsonPrimitive | JsonObject | JsonArray;\n\n/**\n * @private\n * Internal interface to pass around for action submissions, not intended for\n * external consumption\n */\nexport type Submission =\n | {\n formMethod: FormMethod | V7_FormMethod;\n formAction: string;\n formEncType: FormEncType;\n formData: FormData;\n json: undefined;\n text: undefined;\n }\n | {\n formMethod: FormMethod | V7_FormMethod;\n formAction: string;\n formEncType: FormEncType;\n formData: undefined;\n json: JsonValue;\n text: undefined;\n }\n | {\n formMethod: FormMethod | V7_FormMethod;\n formAction: string;\n formEncType: FormEncType;\n formData: undefined;\n json: undefined;\n text: string;\n };\n\n/**\n * @private\n * Arguments passed to route loader/action functions. Same for now but we keep\n * this as a private implementation detail in case they diverge in the future.\n */\ninterface DataFunctionArgs {\n request: Request;\n params: Params;\n context?: Context;\n}\n\n// TODO: (v7) Change the defaults from any to unknown in and remove Remix wrappers:\n// ActionFunction, ActionFunctionArgs, LoaderFunction, LoaderFunctionArgs\n// Also, make them a type alias instead of an interface\n\n/**\n * Arguments passed to loader functions\n */\nexport interface LoaderFunctionArgs\n extends DataFunctionArgs {}\n\n/**\n * Arguments passed to action functions\n */\nexport interface ActionFunctionArgs\n extends DataFunctionArgs {}\n\n/**\n * Loaders and actions can return anything except `undefined` (`null` is a\n * valid return value if there is no data to return). Responses are preferred\n * and will ease any future migration to Remix\n */\ntype DataFunctionValue = Response | NonNullable | null;\n\ntype DataFunctionReturnValue = Promise | DataFunctionValue;\n\n/**\n * Route loader function signature\n */\nexport type LoaderFunction = {\n (\n args: LoaderFunctionArgs,\n handlerCtx?: unknown\n ): DataFunctionReturnValue;\n} & { hydrate?: boolean };\n\n/**\n * Route action function signature\n */\nexport interface ActionFunction {\n (\n args: ActionFunctionArgs,\n handlerCtx?: unknown\n ): DataFunctionReturnValue;\n}\n\n/**\n * Arguments passed to shouldRevalidate function\n */\nexport interface ShouldRevalidateFunctionArgs {\n currentUrl: URL;\n currentParams: AgnosticDataRouteMatch[\"params\"];\n nextUrl: URL;\n nextParams: AgnosticDataRouteMatch[\"params\"];\n formMethod?: Submission[\"formMethod\"];\n formAction?: Submission[\"formAction\"];\n formEncType?: Submission[\"formEncType\"];\n text?: Submission[\"text\"];\n formData?: Submission[\"formData\"];\n json?: Submission[\"json\"];\n actionStatus?: number;\n actionResult?: any;\n defaultShouldRevalidate: boolean;\n}\n\n/**\n * Route shouldRevalidate function signature. This runs after any submission\n * (navigation or fetcher), so we flatten the navigation/fetcher submission\n * onto the arguments. It shouldn't matter whether it came from a navigation\n * or a fetcher, what really matters is the URLs and the formData since loaders\n * have to re-run based on the data models that were potentially mutated.\n */\nexport interface ShouldRevalidateFunction {\n (args: ShouldRevalidateFunctionArgs): boolean;\n}\n\n/**\n * Function provided by the framework-aware layers to set `hasErrorBoundary`\n * from the framework-aware `errorElement` prop\n *\n * @deprecated Use `mapRouteProperties` instead\n */\nexport interface DetectErrorBoundaryFunction {\n (route: AgnosticRouteObject): boolean;\n}\n\nexport interface DataStrategyMatch\n extends AgnosticRouteMatch {\n shouldLoad: boolean;\n resolve: (\n handlerOverride?: (\n handler: (ctx?: unknown) => DataFunctionReturnValue\n ) => DataFunctionReturnValue\n ) => Promise;\n}\n\nexport interface DataStrategyFunctionArgs\n extends DataFunctionArgs {\n matches: DataStrategyMatch[];\n fetcherKey: string | null;\n}\n\n/**\n * Result from a loader or action called via dataStrategy\n */\nexport interface DataStrategyResult {\n type: \"data\" | \"error\";\n result: unknown; // data, Error, Response, DeferredData, DataWithResponseInit\n}\n\nexport interface DataStrategyFunction {\n (args: DataStrategyFunctionArgs): Promise>;\n}\n\nexport interface AgnosticPatchRoutesOnNavigationFunction<\n M extends AgnosticRouteMatch = AgnosticRouteMatch\n> {\n (opts: {\n path: string;\n matches: M[];\n patch: (routeId: string | null, children: AgnosticRouteObject[]) => void;\n }): void | Promise;\n}\n\n/**\n * Function provided by the framework-aware layers to set any framework-specific\n * properties from framework-agnostic properties\n */\nexport interface MapRoutePropertiesFunction {\n (route: AgnosticRouteObject): {\n hasErrorBoundary: boolean;\n } & Record;\n}\n\n/**\n * Keys we cannot change from within a lazy() function. We spread all other keys\n * onto the route. Either they're meaningful to the router, or they'll get\n * ignored.\n */\nexport type ImmutableRouteKey =\n | \"lazy\"\n | \"caseSensitive\"\n | \"path\"\n | \"id\"\n | \"index\"\n | \"children\";\n\nexport const immutableRouteKeys = new Set([\n \"lazy\",\n \"caseSensitive\",\n \"path\",\n \"id\",\n \"index\",\n \"children\",\n]);\n\ntype RequireOne = Exclude<\n {\n [K in keyof T]: K extends Key ? Omit & Required> : never;\n }[keyof T],\n undefined\n>;\n\n/**\n * lazy() function to load a route definition, which can add non-matching\n * related properties to a route\n */\nexport interface LazyRouteFunction {\n (): Promise>>;\n}\n\n/**\n * Base RouteObject with common props shared by all types of routes\n */\ntype AgnosticBaseRouteObject = {\n caseSensitive?: boolean;\n path?: string;\n id?: string;\n loader?: LoaderFunction | boolean;\n action?: ActionFunction | boolean;\n hasErrorBoundary?: boolean;\n shouldRevalidate?: ShouldRevalidateFunction;\n handle?: any;\n lazy?: LazyRouteFunction;\n};\n\n/**\n * Index routes must not have children\n */\nexport type AgnosticIndexRouteObject = AgnosticBaseRouteObject & {\n children?: undefined;\n index: true;\n};\n\n/**\n * Non-index routes may have children, but cannot have index\n */\nexport type AgnosticNonIndexRouteObject = AgnosticBaseRouteObject & {\n children?: AgnosticRouteObject[];\n index?: false;\n};\n\n/**\n * A route object represents a logical route, with (optionally) its child\n * routes organized in a tree-like structure.\n */\nexport type AgnosticRouteObject =\n | AgnosticIndexRouteObject\n | AgnosticNonIndexRouteObject;\n\nexport type AgnosticDataIndexRouteObject = AgnosticIndexRouteObject & {\n id: string;\n};\n\nexport type AgnosticDataNonIndexRouteObject = AgnosticNonIndexRouteObject & {\n children?: AgnosticDataRouteObject[];\n id: string;\n};\n\n/**\n * A data route object, which is just a RouteObject with a required unique ID\n */\nexport type AgnosticDataRouteObject =\n | AgnosticDataIndexRouteObject\n | AgnosticDataNonIndexRouteObject;\n\nexport type RouteManifest = Record;\n\n// Recursive helper for finding path parameters in the absence of wildcards\ntype _PathParam =\n // split path into individual path segments\n Path extends `${infer L}/${infer R}`\n ? _PathParam | _PathParam\n : // find params after `:`\n Path extends `:${infer Param}`\n ? Param extends `${infer Optional}?`\n ? Optional\n : Param\n : // otherwise, there aren't any params present\n never;\n\n/**\n * Examples:\n * \"/a/b/*\" -> \"*\"\n * \":a\" -> \"a\"\n * \"/a/:b\" -> \"b\"\n * \"/a/blahblahblah:b\" -> \"b\"\n * \"/:a/:b\" -> \"a\" | \"b\"\n * \"/:a/b/:c/*\" -> \"a\" | \"c\" | \"*\"\n */\nexport type PathParam =\n // check if path is just a wildcard\n Path extends \"*\" | \"/*\"\n ? \"*\"\n : // look for wildcard at the end of the path\n Path extends `${infer Rest}/*`\n ? \"*\" | _PathParam\n : // look for params in the absence of wildcards\n _PathParam;\n\n// Attempt to parse the given string segment. If it fails, then just return the\n// plain string type as a default fallback. Otherwise, return the union of the\n// parsed string literals that were referenced as dynamic segments in the route.\nexport type ParamParseKey =\n // if you could not find path params, fallback to `string`\n [PathParam] extends [never] ? string : PathParam;\n\n/**\n * The parameters that were parsed from the URL path.\n */\nexport type Params = {\n readonly [key in Key]: string | undefined;\n};\n\n/**\n * A RouteMatch contains info about how a route matched a URL.\n */\nexport interface AgnosticRouteMatch<\n ParamKey extends string = string,\n RouteObjectType extends AgnosticRouteObject = AgnosticRouteObject\n> {\n /**\n * The names and values of dynamic parameters in the URL.\n */\n params: Params;\n /**\n * The portion of the URL pathname that was matched.\n */\n pathname: string;\n /**\n * The portion of the URL pathname that was matched before child routes.\n */\n pathnameBase: string;\n /**\n * The route object that was used to match.\n */\n route: RouteObjectType;\n}\n\nexport interface AgnosticDataRouteMatch\n extends AgnosticRouteMatch {}\n\nfunction isIndexRoute(\n route: AgnosticRouteObject\n): route is AgnosticIndexRouteObject {\n return route.index === true;\n}\n\n// Walk the route tree generating unique IDs where necessary, so we are working\n// solely with AgnosticDataRouteObject's within the Router\nexport function convertRoutesToDataRoutes(\n routes: AgnosticRouteObject[],\n mapRouteProperties: MapRoutePropertiesFunction,\n parentPath: string[] = [],\n manifest: RouteManifest = {}\n): AgnosticDataRouteObject[] {\n return routes.map((route, index) => {\n let treePath = [...parentPath, String(index)];\n let id = typeof route.id === \"string\" ? route.id : treePath.join(\"-\");\n invariant(\n route.index !== true || !route.children,\n `Cannot specify children on an index route`\n );\n invariant(\n !manifest[id],\n `Found a route id collision on id \"${id}\". Route ` +\n \"id's must be globally unique within Data Router usages\"\n );\n\n if (isIndexRoute(route)) {\n let indexRoute: AgnosticDataIndexRouteObject = {\n ...route,\n ...mapRouteProperties(route),\n id,\n };\n manifest[id] = indexRoute;\n return indexRoute;\n } else {\n let pathOrLayoutRoute: AgnosticDataNonIndexRouteObject = {\n ...route,\n ...mapRouteProperties(route),\n id,\n children: undefined,\n };\n manifest[id] = pathOrLayoutRoute;\n\n if (route.children) {\n pathOrLayoutRoute.children = convertRoutesToDataRoutes(\n route.children,\n mapRouteProperties,\n treePath,\n manifest\n );\n }\n\n return pathOrLayoutRoute;\n }\n });\n}\n\n/**\n * Matches the given routes to a location and returns the match data.\n *\n * @see https://reactrouter.com/utils/match-routes\n */\nexport function matchRoutes<\n RouteObjectType extends AgnosticRouteObject = AgnosticRouteObject\n>(\n routes: RouteObjectType[],\n locationArg: Partial | string,\n basename = \"/\"\n): AgnosticRouteMatch[] | null {\n return matchRoutesImpl(routes, locationArg, basename, false);\n}\n\nexport function matchRoutesImpl<\n RouteObjectType extends AgnosticRouteObject = AgnosticRouteObject\n>(\n routes: RouteObjectType[],\n locationArg: Partial | string,\n basename: string,\n allowPartial: boolean\n): AgnosticRouteMatch[] | null {\n let location =\n typeof locationArg === \"string\" ? parsePath(locationArg) : locationArg;\n\n let pathname = stripBasename(location.pathname || \"/\", basename);\n\n if (pathname == null) {\n return null;\n }\n\n let branches = flattenRoutes(routes);\n rankRouteBranches(branches);\n\n let matches = null;\n for (let i = 0; matches == null && i < branches.length; ++i) {\n // Incoming pathnames are generally encoded from either window.location\n // or from router.navigate, but we want to match against the unencoded\n // paths in the route definitions. Memory router locations won't be\n // encoded here but there also shouldn't be anything to decode so this\n // should be a safe operation. This avoids needing matchRoutes to be\n // history-aware.\n let decoded = decodePath(pathname);\n matches = matchRouteBranch(\n branches[i],\n decoded,\n allowPartial\n );\n }\n\n return matches;\n}\n\nexport interface UIMatch {\n id: string;\n pathname: string;\n params: AgnosticRouteMatch[\"params\"];\n data: Data;\n handle: Handle;\n}\n\nexport function convertRouteMatchToUiMatch(\n match: AgnosticDataRouteMatch,\n loaderData: RouteData\n): UIMatch {\n let { route, pathname, params } = match;\n return {\n id: route.id,\n pathname,\n params,\n data: loaderData[route.id],\n handle: route.handle,\n };\n}\n\ninterface RouteMeta<\n RouteObjectType extends AgnosticRouteObject = AgnosticRouteObject\n> {\n relativePath: string;\n caseSensitive: boolean;\n childrenIndex: number;\n route: RouteObjectType;\n}\n\ninterface RouteBranch<\n RouteObjectType extends AgnosticRouteObject = AgnosticRouteObject\n> {\n path: string;\n score: number;\n routesMeta: RouteMeta[];\n}\n\nfunction flattenRoutes<\n RouteObjectType extends AgnosticRouteObject = AgnosticRouteObject\n>(\n routes: RouteObjectType[],\n branches: RouteBranch[] = [],\n parentsMeta: RouteMeta[] = [],\n parentPath = \"\"\n): RouteBranch[] {\n let flattenRoute = (\n route: RouteObjectType,\n index: number,\n relativePath?: string\n ) => {\n let meta: RouteMeta = {\n relativePath:\n relativePath === undefined ? route.path || \"\" : relativePath,\n caseSensitive: route.caseSensitive === true,\n childrenIndex: index,\n route,\n };\n\n if (meta.relativePath.startsWith(\"/\")) {\n invariant(\n meta.relativePath.startsWith(parentPath),\n `Absolute route path \"${meta.relativePath}\" nested under path ` +\n `\"${parentPath}\" is not valid. An absolute child route path ` +\n `must start with the combined path of all its parent routes.`\n );\n\n meta.relativePath = meta.relativePath.slice(parentPath.length);\n }\n\n let path = joinPaths([parentPath, meta.relativePath]);\n let routesMeta = parentsMeta.concat(meta);\n\n // Add the children before adding this route to the array, so we traverse the\n // route tree depth-first and child routes appear before their parents in\n // the \"flattened\" version.\n if (route.children && route.children.length > 0) {\n invariant(\n // Our types know better, but runtime JS may not!\n // @ts-expect-error\n route.index !== true,\n `Index routes must not have child routes. Please remove ` +\n `all child routes from route path \"${path}\".`\n );\n flattenRoutes(route.children, branches, routesMeta, path);\n }\n\n // Routes without a path shouldn't ever match by themselves unless they are\n // index routes, so don't add them to the list of possible branches.\n if (route.path == null && !route.index) {\n return;\n }\n\n branches.push({\n path,\n score: computeScore(path, route.index),\n routesMeta,\n });\n };\n routes.forEach((route, index) => {\n // coarse-grain check for optional params\n if (route.path === \"\" || !route.path?.includes(\"?\")) {\n flattenRoute(route, index);\n } else {\n for (let exploded of explodeOptionalSegments(route.path)) {\n flattenRoute(route, index, exploded);\n }\n }\n });\n\n return branches;\n}\n\n/**\n * Computes all combinations of optional path segments for a given path,\n * excluding combinations that are ambiguous and of lower priority.\n *\n * For example, `/one/:two?/three/:four?/:five?` explodes to:\n * - `/one/three`\n * - `/one/:two/three`\n * - `/one/three/:four`\n * - `/one/three/:five`\n * - `/one/:two/three/:four`\n * - `/one/:two/three/:five`\n * - `/one/three/:four/:five`\n * - `/one/:two/three/:four/:five`\n */\nfunction explodeOptionalSegments(path: string): string[] {\n let segments = path.split(\"/\");\n if (segments.length === 0) return [];\n\n let [first, ...rest] = segments;\n\n // Optional path segments are denoted by a trailing `?`\n let isOptional = first.endsWith(\"?\");\n // Compute the corresponding required segment: `foo?` -> `foo`\n let required = first.replace(/\\?$/, \"\");\n\n if (rest.length === 0) {\n // Intepret empty string as omitting an optional segment\n // `[\"one\", \"\", \"three\"]` corresponds to omitting `:two` from `/one/:two?/three` -> `/one/three`\n return isOptional ? [required, \"\"] : [required];\n }\n\n let restExploded = explodeOptionalSegments(rest.join(\"/\"));\n\n let result: string[] = [];\n\n // All child paths with the prefix. Do this for all children before the\n // optional version for all children, so we get consistent ordering where the\n // parent optional aspect is preferred as required. Otherwise, we can get\n // child sections interspersed where deeper optional segments are higher than\n // parent optional segments, where for example, /:two would explode _earlier_\n // then /:one. By always including the parent as required _for all children_\n // first, we avoid this issue\n result.push(\n ...restExploded.map((subpath) =>\n subpath === \"\" ? required : [required, subpath].join(\"/\")\n )\n );\n\n // Then, if this is an optional value, add all child versions without\n if (isOptional) {\n result.push(...restExploded);\n }\n\n // for absolute paths, ensure `/` instead of empty segment\n return result.map((exploded) =>\n path.startsWith(\"/\") && exploded === \"\" ? \"/\" : exploded\n );\n}\n\nfunction rankRouteBranches(branches: RouteBranch[]): void {\n branches.sort((a, b) =>\n a.score !== b.score\n ? b.score - a.score // Higher score first\n : compareIndexes(\n a.routesMeta.map((meta) => meta.childrenIndex),\n b.routesMeta.map((meta) => meta.childrenIndex)\n )\n );\n}\n\nconst paramRe = /^:[\\w-]+$/;\nconst dynamicSegmentValue = 3;\nconst indexRouteValue = 2;\nconst emptySegmentValue = 1;\nconst staticSegmentValue = 10;\nconst splatPenalty = -2;\nconst isSplat = (s: string) => s === \"*\";\n\nfunction computeScore(path: string, index: boolean | undefined): number {\n let segments = path.split(\"/\");\n let initialScore = segments.length;\n if (segments.some(isSplat)) {\n initialScore += splatPenalty;\n }\n\n if (index) {\n initialScore += indexRouteValue;\n }\n\n return segments\n .filter((s) => !isSplat(s))\n .reduce(\n (score, segment) =>\n score +\n (paramRe.test(segment)\n ? dynamicSegmentValue\n : segment === \"\"\n ? emptySegmentValue\n : staticSegmentValue),\n initialScore\n );\n}\n\nfunction compareIndexes(a: number[], b: number[]): number {\n let siblings =\n a.length === b.length && a.slice(0, -1).every((n, i) => n === b[i]);\n\n return siblings\n ? // If two routes are siblings, we should try to match the earlier sibling\n // first. This allows people to have fine-grained control over the matching\n // behavior by simply putting routes with identical paths in the order they\n // want them tried.\n a[a.length - 1] - b[b.length - 1]\n : // Otherwise, it doesn't really make sense to rank non-siblings by index,\n // so they sort equally.\n 0;\n}\n\nfunction matchRouteBranch<\n ParamKey extends string = string,\n RouteObjectType extends AgnosticRouteObject = AgnosticRouteObject\n>(\n branch: RouteBranch,\n pathname: string,\n allowPartial = false\n): AgnosticRouteMatch[] | null {\n let { routesMeta } = branch;\n\n let matchedParams = {};\n let matchedPathname = \"/\";\n let matches: AgnosticRouteMatch[] = [];\n for (let i = 0; i < routesMeta.length; ++i) {\n let meta = routesMeta[i];\n let end = i === routesMeta.length - 1;\n let remainingPathname =\n matchedPathname === \"/\"\n ? pathname\n : pathname.slice(matchedPathname.length) || \"/\";\n let match = matchPath(\n { path: meta.relativePath, caseSensitive: meta.caseSensitive, end },\n remainingPathname\n );\n\n let route = meta.route;\n\n if (\n !match &&\n end &&\n allowPartial &&\n !routesMeta[routesMeta.length - 1].route.index\n ) {\n match = matchPath(\n {\n path: meta.relativePath,\n caseSensitive: meta.caseSensitive,\n end: false,\n },\n remainingPathname\n );\n }\n\n if (!match) {\n return null;\n }\n\n Object.assign(matchedParams, match.params);\n\n matches.push({\n // TODO: Can this as be avoided?\n params: matchedParams as Params,\n pathname: joinPaths([matchedPathname, match.pathname]),\n pathnameBase: normalizePathname(\n joinPaths([matchedPathname, match.pathnameBase])\n ),\n route,\n });\n\n if (match.pathnameBase !== \"/\") {\n matchedPathname = joinPaths([matchedPathname, match.pathnameBase]);\n }\n }\n\n return matches;\n}\n\n/**\n * Returns a path with params interpolated.\n *\n * @see https://reactrouter.com/utils/generate-path\n */\nexport function generatePath(\n originalPath: Path,\n params: {\n [key in PathParam]: string | null;\n } = {} as any\n): string {\n let path: string = originalPath;\n if (path.endsWith(\"*\") && path !== \"*\" && !path.endsWith(\"/*\")) {\n warning(\n false,\n `Route path \"${path}\" will be treated as if it were ` +\n `\"${path.replace(/\\*$/, \"/*\")}\" because the \\`*\\` character must ` +\n `always follow a \\`/\\` in the pattern. To get rid of this warning, ` +\n `please change the route path to \"${path.replace(/\\*$/, \"/*\")}\".`\n );\n path = path.replace(/\\*$/, \"/*\") as Path;\n }\n\n // ensure `/` is added at the beginning if the path is absolute\n const prefix = path.startsWith(\"/\") ? \"/\" : \"\";\n\n const stringify = (p: any) =>\n p == null ? \"\" : typeof p === \"string\" ? p : String(p);\n\n const segments = path\n .split(/\\/+/)\n .map((segment, index, array) => {\n const isLastSegment = index === array.length - 1;\n\n // only apply the splat if it's the last segment\n if (isLastSegment && segment === \"*\") {\n const star = \"*\" as PathParam;\n // Apply the splat\n return stringify(params[star]);\n }\n\n const keyMatch = segment.match(/^:([\\w-]+)(\\??)$/);\n if (keyMatch) {\n const [, key, optional] = keyMatch;\n let param = params[key as PathParam];\n invariant(optional === \"?\" || param != null, `Missing \":${key}\" param`);\n return stringify(param);\n }\n\n // Remove any optional markers from optional static segments\n return segment.replace(/\\?$/g, \"\");\n })\n // Remove empty segments\n .filter((segment) => !!segment);\n\n return prefix + segments.join(\"/\");\n}\n\n/**\n * A PathPattern is used to match on some portion of a URL pathname.\n */\nexport interface PathPattern {\n /**\n * A string to match against a URL pathname. May contain `:id`-style segments\n * to indicate placeholders for dynamic parameters. May also end with `/*` to\n * indicate matching the rest of the URL pathname.\n */\n path: Path;\n /**\n * Should be `true` if the static portions of the `path` should be matched in\n * the same case.\n */\n caseSensitive?: boolean;\n /**\n * Should be `true` if this pattern should match the entire URL pathname.\n */\n end?: boolean;\n}\n\n/**\n * A PathMatch contains info about how a PathPattern matched on a URL pathname.\n */\nexport interface PathMatch {\n /**\n * The names and values of dynamic parameters in the URL.\n */\n params: Params;\n /**\n * The portion of the URL pathname that was matched.\n */\n pathname: string;\n /**\n * The portion of the URL pathname that was matched before child routes.\n */\n pathnameBase: string;\n /**\n * The pattern that was used to match.\n */\n pattern: PathPattern;\n}\n\ntype Mutable = {\n -readonly [P in keyof T]: T[P];\n};\n\n/**\n * Performs pattern matching on a URL pathname and returns information about\n * the match.\n *\n * @see https://reactrouter.com/utils/match-path\n */\nexport function matchPath<\n ParamKey extends ParamParseKey,\n Path extends string\n>(\n pattern: PathPattern | Path,\n pathname: string\n): PathMatch | null {\n if (typeof pattern === \"string\") {\n pattern = { path: pattern, caseSensitive: false, end: true };\n }\n\n let [matcher, compiledParams] = compilePath(\n pattern.path,\n pattern.caseSensitive,\n pattern.end\n );\n\n let match = pathname.match(matcher);\n if (!match) return null;\n\n let matchedPathname = match[0];\n let pathnameBase = matchedPathname.replace(/(.)\\/+$/, \"$1\");\n let captureGroups = match.slice(1);\n let params: Params = compiledParams.reduce>(\n (memo, { paramName, isOptional }, index) => {\n // We need to compute the pathnameBase here using the raw splat value\n // instead of using params[\"*\"] later because it will be decoded then\n if (paramName === \"*\") {\n let splatValue = captureGroups[index] || \"\";\n pathnameBase = matchedPathname\n .slice(0, matchedPathname.length - splatValue.length)\n .replace(/(.)\\/+$/, \"$1\");\n }\n\n const value = captureGroups[index];\n if (isOptional && !value) {\n memo[paramName] = undefined;\n } else {\n memo[paramName] = (value || \"\").replace(/%2F/g, \"/\");\n }\n return memo;\n },\n {}\n );\n\n return {\n params,\n pathname: matchedPathname,\n pathnameBase,\n pattern,\n };\n}\n\ntype CompiledPathParam = { paramName: string; isOptional?: boolean };\n\nfunction compilePath(\n path: string,\n caseSensitive = false,\n end = true\n): [RegExp, CompiledPathParam[]] {\n warning(\n path === \"*\" || !path.endsWith(\"*\") || path.endsWith(\"/*\"),\n `Route path \"${path}\" will be treated as if it were ` +\n `\"${path.replace(/\\*$/, \"/*\")}\" because the \\`*\\` character must ` +\n `always follow a \\`/\\` in the pattern. To get rid of this warning, ` +\n `please change the route path to \"${path.replace(/\\*$/, \"/*\")}\".`\n );\n\n let params: CompiledPathParam[] = [];\n let regexpSource =\n \"^\" +\n path\n .replace(/\\/*\\*?$/, \"\") // Ignore trailing / and /*, we'll handle it below\n .replace(/^\\/*/, \"/\") // Make sure it has a leading /\n .replace(/[\\\\.*+^${}|()[\\]]/g, \"\\\\$&\") // Escape special regex chars\n .replace(\n /\\/:([\\w-]+)(\\?)?/g,\n (_: string, paramName: string, isOptional) => {\n params.push({ paramName, isOptional: isOptional != null });\n return isOptional ? \"/?([^\\\\/]+)?\" : \"/([^\\\\/]+)\";\n }\n );\n\n if (path.endsWith(\"*\")) {\n params.push({ paramName: \"*\" });\n regexpSource +=\n path === \"*\" || path === \"/*\"\n ? \"(.*)$\" // Already matched the initial /, just match the rest\n : \"(?:\\\\/(.+)|\\\\/*)$\"; // Don't include the / in params[\"*\"]\n } else if (end) {\n // When matching to the end, ignore trailing slashes\n regexpSource += \"\\\\/*$\";\n } else if (path !== \"\" && path !== \"/\") {\n // If our path is non-empty and contains anything beyond an initial slash,\n // then we have _some_ form of path in our regex, so we should expect to\n // match only if we find the end of this path segment. Look for an optional\n // non-captured trailing slash (to match a portion of the URL) or the end\n // of the path (if we've matched to the end). We used to do this with a\n // word boundary but that gives false positives on routes like\n // /user-preferences since `-` counts as a word boundary.\n regexpSource += \"(?:(?=\\\\/|$))\";\n } else {\n // Nothing to match for \"\" or \"/\"\n }\n\n let matcher = new RegExp(regexpSource, caseSensitive ? undefined : \"i\");\n\n return [matcher, params];\n}\n\nexport function decodePath(value: string) {\n try {\n return value\n .split(\"/\")\n .map((v) => decodeURIComponent(v).replace(/\\//g, \"%2F\"))\n .join(\"/\");\n } catch (error) {\n warning(\n false,\n `The URL path \"${value}\" could not be decoded because it is is a ` +\n `malformed URL segment. This is probably due to a bad percent ` +\n `encoding (${error}).`\n );\n\n return value;\n }\n}\n\n/**\n * @private\n */\nexport function stripBasename(\n pathname: string,\n basename: string\n): string | null {\n if (basename === \"/\") return pathname;\n\n if (!pathname.toLowerCase().startsWith(basename.toLowerCase())) {\n return null;\n }\n\n // We want to leave trailing slash behavior in the user's control, so if they\n // specify a basename with a trailing slash, we should support it\n let startIndex = basename.endsWith(\"/\")\n ? basename.length - 1\n : basename.length;\n let nextChar = pathname.charAt(startIndex);\n if (nextChar && nextChar !== \"/\") {\n // pathname does not start with basename/\n return null;\n }\n\n return pathname.slice(startIndex) || \"/\";\n}\n\n/**\n * Returns a resolved path object relative to the given pathname.\n *\n * @see https://reactrouter.com/utils/resolve-path\n */\nexport function resolvePath(to: To, fromPathname = \"/\"): Path {\n let {\n pathname: toPathname,\n search = \"\",\n hash = \"\",\n } = typeof to === \"string\" ? parsePath(to) : to;\n\n let pathname = toPathname\n ? toPathname.startsWith(\"/\")\n ? toPathname\n : resolvePathname(toPathname, fromPathname)\n : fromPathname;\n\n return {\n pathname,\n search: normalizeSearch(search),\n hash: normalizeHash(hash),\n };\n}\n\nfunction resolvePathname(relativePath: string, fromPathname: string): string {\n let segments = fromPathname.replace(/\\/+$/, \"\").split(\"/\");\n let relativeSegments = relativePath.split(\"/\");\n\n relativeSegments.forEach((segment) => {\n if (segment === \"..\") {\n // Keep the root \"\" segment so the pathname starts at /\n if (segments.length > 1) segments.pop();\n } else if (segment !== \".\") {\n segments.push(segment);\n }\n });\n\n return segments.length > 1 ? segments.join(\"/\") : \"/\";\n}\n\nfunction getInvalidPathError(\n char: string,\n field: string,\n dest: string,\n path: Partial\n) {\n return (\n `Cannot include a '${char}' character in a manually specified ` +\n `\\`to.${field}\\` field [${JSON.stringify(\n path\n )}]. Please separate it out to the ` +\n `\\`to.${dest}\\` field. Alternatively you may provide the full path as ` +\n `a string in and the router will parse it for you.`\n );\n}\n\n/**\n * @private\n *\n * When processing relative navigation we want to ignore ancestor routes that\n * do not contribute to the path, such that index/pathless layout routes don't\n * interfere.\n *\n * For example, when moving a route element into an index route and/or a\n * pathless layout route, relative link behavior contained within should stay\n * the same. Both of the following examples should link back to the root:\n *\n * \n * \n * \n *\n * \n * \n * }> // <-- Does not contribute\n * // <-- Does not contribute\n * \n * \n */\nexport function getPathContributingMatches<\n T extends AgnosticRouteMatch = AgnosticRouteMatch\n>(matches: T[]) {\n return matches.filter(\n (match, index) =>\n index === 0 || (match.route.path && match.route.path.length > 0)\n );\n}\n\n// Return the array of pathnames for the current route matches - used to\n// generate the routePathnames input for resolveTo()\nexport function getResolveToMatches<\n T extends AgnosticRouteMatch = AgnosticRouteMatch\n>(matches: T[], v7_relativeSplatPath: boolean) {\n let pathMatches = getPathContributingMatches(matches);\n\n // When v7_relativeSplatPath is enabled, use the full pathname for the leaf\n // match so we include splat values for \".\" links. See:\n // https://github.com/remix-run/react-router/issues/11052#issuecomment-1836589329\n if (v7_relativeSplatPath) {\n return pathMatches.map((match, idx) =>\n idx === pathMatches.length - 1 ? match.pathname : match.pathnameBase\n );\n }\n\n return pathMatches.map((match) => match.pathnameBase);\n}\n\n/**\n * @private\n */\nexport function resolveTo(\n toArg: To,\n routePathnames: string[],\n locationPathname: string,\n isPathRelative = false\n): Path {\n let to: Partial;\n if (typeof toArg === \"string\") {\n to = parsePath(toArg);\n } else {\n to = { ...toArg };\n\n invariant(\n !to.pathname || !to.pathname.includes(\"?\"),\n getInvalidPathError(\"?\", \"pathname\", \"search\", to)\n );\n invariant(\n !to.pathname || !to.pathname.includes(\"#\"),\n getInvalidPathError(\"#\", \"pathname\", \"hash\", to)\n );\n invariant(\n !to.search || !to.search.includes(\"#\"),\n getInvalidPathError(\"#\", \"search\", \"hash\", to)\n );\n }\n\n let isEmptyPath = toArg === \"\" || to.pathname === \"\";\n let toPathname = isEmptyPath ? \"/\" : to.pathname;\n\n let from: string;\n\n // Routing is relative to the current pathname if explicitly requested.\n //\n // If a pathname is explicitly provided in `to`, it should be relative to the\n // route context. This is explained in `Note on `` values` in our\n // migration guide from v5 as a means of disambiguation between `to` values\n // that begin with `/` and those that do not. However, this is problematic for\n // `to` values that do not provide a pathname. `to` can simply be a search or\n // hash string, in which case we should assume that the navigation is relative\n // to the current location's pathname and *not* the route pathname.\n if (toPathname == null) {\n from = locationPathname;\n } else {\n let routePathnameIndex = routePathnames.length - 1;\n\n // With relative=\"route\" (the default), each leading .. segment means\n // \"go up one route\" instead of \"go up one URL segment\". This is a key\n // difference from how works and a major reason we call this a\n // \"to\" value instead of a \"href\".\n if (!isPathRelative && toPathname.startsWith(\"..\")) {\n let toSegments = toPathname.split(\"/\");\n\n while (toSegments[0] === \"..\") {\n toSegments.shift();\n routePathnameIndex -= 1;\n }\n\n to.pathname = toSegments.join(\"/\");\n }\n\n from = routePathnameIndex >= 0 ? routePathnames[routePathnameIndex] : \"/\";\n }\n\n let path = resolvePath(to, from);\n\n // Ensure the pathname has a trailing slash if the original \"to\" had one\n let hasExplicitTrailingSlash =\n toPathname && toPathname !== \"/\" && toPathname.endsWith(\"/\");\n // Or if this was a link to the current path which has a trailing slash\n let hasCurrentTrailingSlash =\n (isEmptyPath || toPathname === \".\") && locationPathname.endsWith(\"/\");\n if (\n !path.pathname.endsWith(\"/\") &&\n (hasExplicitTrailingSlash || hasCurrentTrailingSlash)\n ) {\n path.pathname += \"/\";\n }\n\n return path;\n}\n\n/**\n * @private\n */\nexport function getToPathname(to: To): string | undefined {\n // Empty strings should be treated the same as / paths\n return to === \"\" || (to as Path).pathname === \"\"\n ? \"/\"\n : typeof to === \"string\"\n ? parsePath(to).pathname\n : to.pathname;\n}\n\n/**\n * @private\n */\nexport const joinPaths = (paths: string[]): string =>\n paths.join(\"/\").replace(/\\/\\/+/g, \"/\");\n\n/**\n * @private\n */\nexport const normalizePathname = (pathname: string): string =>\n pathname.replace(/\\/+$/, \"\").replace(/^\\/*/, \"/\");\n\n/**\n * @private\n */\nexport const normalizeSearch = (search: string): string =>\n !search || search === \"?\"\n ? \"\"\n : search.startsWith(\"?\")\n ? search\n : \"?\" + search;\n\n/**\n * @private\n */\nexport const normalizeHash = (hash: string): string =>\n !hash || hash === \"#\" ? \"\" : hash.startsWith(\"#\") ? hash : \"#\" + hash;\n\nexport type JsonFunction = (\n data: Data,\n init?: number | ResponseInit\n) => Response;\n\n/**\n * This is a shortcut for creating `application/json` responses. Converts `data`\n * to JSON and sets the `Content-Type` header.\n */\nexport const json: JsonFunction = (data, init = {}) => {\n let responseInit = typeof init === \"number\" ? { status: init } : init;\n\n let headers = new Headers(responseInit.headers);\n if (!headers.has(\"Content-Type\")) {\n headers.set(\"Content-Type\", \"application/json; charset=utf-8\");\n }\n\n return new Response(JSON.stringify(data), {\n ...responseInit,\n headers,\n });\n};\n\nexport class DataWithResponseInit {\n type: string = \"DataWithResponseInit\";\n data: D;\n init: ResponseInit | null;\n\n constructor(data: D, init?: ResponseInit) {\n this.data = data;\n this.init = init || null;\n }\n}\n\n/**\n * Create \"responses\" that contain `status`/`headers` without forcing\n * serialization into an actual `Response` - used by Remix single fetch\n */\nexport function data(data: D, init?: number | ResponseInit) {\n return new DataWithResponseInit(\n data,\n typeof init === \"number\" ? { status: init } : init\n );\n}\n\nexport interface TrackedPromise extends Promise {\n _tracked?: boolean;\n _data?: any;\n _error?: any;\n}\n\nexport class AbortedDeferredError extends Error {}\n\nexport class DeferredData {\n private pendingKeysSet: Set = new Set();\n private controller: AbortController;\n private abortPromise: Promise;\n private unlistenAbortSignal: () => void;\n private subscribers: Set<(aborted: boolean, settledKey?: string) => void> =\n new Set();\n data: Record;\n init?: ResponseInit;\n deferredKeys: string[] = [];\n\n constructor(data: Record, responseInit?: ResponseInit) {\n invariant(\n data && typeof data === \"object\" && !Array.isArray(data),\n \"defer() only accepts plain objects\"\n );\n\n // Set up an AbortController + Promise we can race against to exit early\n // cancellation\n let reject: (e: AbortedDeferredError) => void;\n this.abortPromise = new Promise((_, r) => (reject = r));\n this.controller = new AbortController();\n let onAbort = () =>\n reject(new AbortedDeferredError(\"Deferred data aborted\"));\n this.unlistenAbortSignal = () =>\n this.controller.signal.removeEventListener(\"abort\", onAbort);\n this.controller.signal.addEventListener(\"abort\", onAbort);\n\n this.data = Object.entries(data).reduce(\n (acc, [key, value]) =>\n Object.assign(acc, {\n [key]: this.trackPromise(key, value),\n }),\n {}\n );\n\n if (this.done) {\n // All incoming values were resolved\n this.unlistenAbortSignal();\n }\n\n this.init = responseInit;\n }\n\n private trackPromise(\n key: string,\n value: Promise | unknown\n ): TrackedPromise | unknown {\n if (!(value instanceof Promise)) {\n return value;\n }\n\n this.deferredKeys.push(key);\n this.pendingKeysSet.add(key);\n\n // We store a little wrapper promise that will be extended with\n // _data/_error props upon resolve/reject\n let promise: TrackedPromise = Promise.race([value, this.abortPromise]).then(\n (data) => this.onSettle(promise, key, undefined, data as unknown),\n (error) => this.onSettle(promise, key, error as unknown)\n );\n\n // Register rejection listeners to avoid uncaught promise rejections on\n // errors or aborted deferred values\n promise.catch(() => {});\n\n Object.defineProperty(promise, \"_tracked\", { get: () => true });\n return promise;\n }\n\n private onSettle(\n promise: TrackedPromise,\n key: string,\n error: unknown,\n data?: unknown\n ): unknown {\n if (\n this.controller.signal.aborted &&\n error instanceof AbortedDeferredError\n ) {\n this.unlistenAbortSignal();\n Object.defineProperty(promise, \"_error\", { get: () => error });\n return Promise.reject(error);\n }\n\n this.pendingKeysSet.delete(key);\n\n if (this.done) {\n // Nothing left to abort!\n this.unlistenAbortSignal();\n }\n\n // If the promise was resolved/rejected with undefined, we'll throw an error as you\n // should always resolve with a value or null\n if (error === undefined && data === undefined) {\n let undefinedError = new Error(\n `Deferred data for key \"${key}\" resolved/rejected with \\`undefined\\`, ` +\n `you must resolve/reject with a value or \\`null\\`.`\n );\n Object.defineProperty(promise, \"_error\", { get: () => undefinedError });\n this.emit(false, key);\n return Promise.reject(undefinedError);\n }\n\n if (data === undefined) {\n Object.defineProperty(promise, \"_error\", { get: () => error });\n this.emit(false, key);\n return Promise.reject(error);\n }\n\n Object.defineProperty(promise, \"_data\", { get: () => data });\n this.emit(false, key);\n return data;\n }\n\n private emit(aborted: boolean, settledKey?: string) {\n this.subscribers.forEach((subscriber) => subscriber(aborted, settledKey));\n }\n\n subscribe(fn: (aborted: boolean, settledKey?: string) => void) {\n this.subscribers.add(fn);\n return () => this.subscribers.delete(fn);\n }\n\n cancel() {\n this.controller.abort();\n this.pendingKeysSet.forEach((v, k) => this.pendingKeysSet.delete(k));\n this.emit(true);\n }\n\n async resolveData(signal: AbortSignal) {\n let aborted = false;\n if (!this.done) {\n let onAbort = () => this.cancel();\n signal.addEventListener(\"abort\", onAbort);\n aborted = await new Promise((resolve) => {\n this.subscribe((aborted) => {\n signal.removeEventListener(\"abort\", onAbort);\n if (aborted || this.done) {\n resolve(aborted);\n }\n });\n });\n }\n return aborted;\n }\n\n get done() {\n return this.pendingKeysSet.size === 0;\n }\n\n get unwrappedData() {\n invariant(\n this.data !== null && this.done,\n \"Can only unwrap data on initialized and settled deferreds\"\n );\n\n return Object.entries(this.data).reduce(\n (acc, [key, value]) =>\n Object.assign(acc, {\n [key]: unwrapTrackedPromise(value),\n }),\n {}\n );\n }\n\n get pendingKeys() {\n return Array.from(this.pendingKeysSet);\n }\n}\n\nfunction isTrackedPromise(value: any): value is TrackedPromise {\n return (\n value instanceof Promise && (value as TrackedPromise)._tracked === true\n );\n}\n\nfunction unwrapTrackedPromise(value: any) {\n if (!isTrackedPromise(value)) {\n return value;\n }\n\n if (value._error) {\n throw value._error;\n }\n return value._data;\n}\n\nexport type DeferFunction = (\n data: Record,\n init?: number | ResponseInit\n) => DeferredData;\n\nexport const defer: DeferFunction = (data, init = {}) => {\n let responseInit = typeof init === \"number\" ? { status: init } : init;\n\n return new DeferredData(data, responseInit);\n};\n\nexport type RedirectFunction = (\n url: string,\n init?: number | ResponseInit\n) => Response;\n\n/**\n * A redirect response. Sets the status code and the `Location` header.\n * Defaults to \"302 Found\".\n */\nexport const redirect: RedirectFunction = (url, init = 302) => {\n let responseInit = init;\n if (typeof responseInit === \"number\") {\n responseInit = { status: responseInit };\n } else if (typeof responseInit.status === \"undefined\") {\n responseInit.status = 302;\n }\n\n let headers = new Headers(responseInit.headers);\n headers.set(\"Location\", url);\n\n return new Response(null, {\n ...responseInit,\n headers,\n });\n};\n\n/**\n * A redirect response that will force a document reload to the new location.\n * Sets the status code and the `Location` header.\n * Defaults to \"302 Found\".\n */\nexport const redirectDocument: RedirectFunction = (url, init) => {\n let response = redirect(url, init);\n response.headers.set(\"X-Remix-Reload-Document\", \"true\");\n return response;\n};\n\n/**\n * A redirect response that will perform a `history.replaceState` instead of a\n * `history.pushState` for client-side navigation redirects.\n * Sets the status code and the `Location` header.\n * Defaults to \"302 Found\".\n */\nexport const replace: RedirectFunction = (url, init) => {\n let response = redirect(url, init);\n response.headers.set(\"X-Remix-Replace\", \"true\");\n return response;\n};\n\nexport type ErrorResponse = {\n status: number;\n statusText: string;\n data: any;\n};\n\n/**\n * @private\n * Utility class we use to hold auto-unwrapped 4xx/5xx Response bodies\n *\n * We don't export the class for public use since it's an implementation\n * detail, but we export the interface above so folks can build their own\n * abstractions around instances via isRouteErrorResponse()\n */\nexport class ErrorResponseImpl implements ErrorResponse {\n status: number;\n statusText: string;\n data: any;\n private error?: Error;\n private internal: boolean;\n\n constructor(\n status: number,\n statusText: string | undefined,\n data: any,\n internal = false\n ) {\n this.status = status;\n this.statusText = statusText || \"\";\n this.internal = internal;\n if (data instanceof Error) {\n this.data = data.toString();\n this.error = data;\n } else {\n this.data = data;\n }\n }\n}\n\n/**\n * Check if the given error is an ErrorResponse generated from a 4xx/5xx\n * Response thrown from an action/loader\n */\nexport function isRouteErrorResponse(error: any): error is ErrorResponse {\n return (\n error != null &&\n typeof error.status === \"number\" &&\n typeof error.statusText === \"string\" &&\n typeof error.internal === \"boolean\" &&\n \"data\" in error\n );\n}\n","import type { History, Location, Path, To } from \"./history\";\nimport {\n Action as HistoryAction,\n createLocation,\n createPath,\n invariant,\n parsePath,\n warning,\n} from \"./history\";\nimport type {\n AgnosticDataRouteMatch,\n AgnosticDataRouteObject,\n DataStrategyMatch,\n AgnosticRouteObject,\n DataResult,\n DataStrategyFunction,\n DataStrategyFunctionArgs,\n DeferredData,\n DeferredResult,\n DetectErrorBoundaryFunction,\n ErrorResult,\n FormEncType,\n FormMethod,\n HTMLFormMethod,\n DataStrategyResult,\n ImmutableRouteKey,\n MapRoutePropertiesFunction,\n MutationFormMethod,\n RedirectResult,\n RouteData,\n RouteManifest,\n ShouldRevalidateFunctionArgs,\n Submission,\n SuccessResult,\n UIMatch,\n V7_FormMethod,\n V7_MutationFormMethod,\n AgnosticPatchRoutesOnNavigationFunction,\n DataWithResponseInit,\n} from \"./utils\";\nimport {\n ErrorResponseImpl,\n ResultType,\n convertRouteMatchToUiMatch,\n convertRoutesToDataRoutes,\n getPathContributingMatches,\n getResolveToMatches,\n immutableRouteKeys,\n isRouteErrorResponse,\n joinPaths,\n matchRoutes,\n matchRoutesImpl,\n resolveTo,\n stripBasename,\n} from \"./utils\";\n\n////////////////////////////////////////////////////////////////////////////////\n//#region Types and Constants\n////////////////////////////////////////////////////////////////////////////////\n\n/**\n * A Router instance manages all navigation and data loading/mutations\n */\nexport interface Router {\n /**\n * @internal\n * PRIVATE - DO NOT USE\n *\n * Return the basename for the router\n */\n get basename(): RouterInit[\"basename\"];\n\n /**\n * @internal\n * PRIVATE - DO NOT USE\n *\n * Return the future config for the router\n */\n get future(): FutureConfig;\n\n /**\n * @internal\n * PRIVATE - DO NOT USE\n *\n * Return the current state of the router\n */\n get state(): RouterState;\n\n /**\n * @internal\n * PRIVATE - DO NOT USE\n *\n * Return the routes for this router instance\n */\n get routes(): AgnosticDataRouteObject[];\n\n /**\n * @internal\n * PRIVATE - DO NOT USE\n *\n * Return the window associated with the router\n */\n get window(): RouterInit[\"window\"];\n\n /**\n * @internal\n * PRIVATE - DO NOT USE\n *\n * Initialize the router, including adding history listeners and kicking off\n * initial data fetches. Returns a function to cleanup listeners and abort\n * any in-progress loads\n */\n initialize(): Router;\n\n /**\n * @internal\n * PRIVATE - DO NOT USE\n *\n * Subscribe to router.state updates\n *\n * @param fn function to call with the new state\n */\n subscribe(fn: RouterSubscriber): () => void;\n\n /**\n * @internal\n * PRIVATE - DO NOT USE\n *\n * Enable scroll restoration behavior in the router\n *\n * @param savedScrollPositions Object that will manage positions, in case\n * it's being restored from sessionStorage\n * @param getScrollPosition Function to get the active Y scroll position\n * @param getKey Function to get the key to use for restoration\n */\n enableScrollRestoration(\n savedScrollPositions: Record,\n getScrollPosition: GetScrollPositionFunction,\n getKey?: GetScrollRestorationKeyFunction\n ): () => void;\n\n /**\n * @internal\n * PRIVATE - DO NOT USE\n *\n * Navigate forward/backward in the history stack\n * @param to Delta to move in the history stack\n */\n navigate(to: number): Promise;\n\n /**\n * Navigate to the given path\n * @param to Path to navigate to\n * @param opts Navigation options (method, submission, etc.)\n */\n navigate(to: To | null, opts?: RouterNavigateOptions): Promise;\n\n /**\n * @internal\n * PRIVATE - DO NOT USE\n *\n * Trigger a fetcher load/submission\n *\n * @param key Fetcher key\n * @param routeId Route that owns the fetcher\n * @param href href to fetch\n * @param opts Fetcher options, (method, submission, etc.)\n */\n fetch(\n key: string,\n routeId: string,\n href: string | null,\n opts?: RouterFetchOptions\n ): void;\n\n /**\n * @internal\n * PRIVATE - DO NOT USE\n *\n * Trigger a revalidation of all current route loaders and fetcher loads\n */\n revalidate(): void;\n\n /**\n * @internal\n * PRIVATE - DO NOT USE\n *\n * Utility function to create an href for the given location\n * @param location\n */\n createHref(location: Location | URL): string;\n\n /**\n * @internal\n * PRIVATE - DO NOT USE\n *\n * Utility function to URL encode a destination path according to the internal\n * history implementation\n * @param to\n */\n encodeLocation(to: To): Path;\n\n /**\n * @internal\n * PRIVATE - DO NOT USE\n *\n * Get/create a fetcher for the given key\n * @param key\n */\n getFetcher(key: string): Fetcher;\n\n /**\n * @internal\n * PRIVATE - DO NOT USE\n *\n * Delete the fetcher for a given key\n * @param key\n */\n deleteFetcher(key: string): void;\n\n /**\n * @internal\n * PRIVATE - DO NOT USE\n *\n * Cleanup listeners and abort any in-progress loads\n */\n dispose(): void;\n\n /**\n * @internal\n * PRIVATE - DO NOT USE\n *\n * Get a navigation blocker\n * @param key The identifier for the blocker\n * @param fn The blocker function implementation\n */\n getBlocker(key: string, fn: BlockerFunction): Blocker;\n\n /**\n * @internal\n * PRIVATE - DO NOT USE\n *\n * Delete a navigation blocker\n * @param key The identifier for the blocker\n */\n deleteBlocker(key: string): void;\n\n /**\n * @internal\n * PRIVATE DO NOT USE\n *\n * Patch additional children routes into an existing parent route\n * @param routeId The parent route id or a callback function accepting `patch`\n * to perform batch patching\n * @param children The additional children routes\n */\n patchRoutes(routeId: string | null, children: AgnosticRouteObject[]): void;\n\n /**\n * @internal\n * PRIVATE - DO NOT USE\n *\n * HMR needs to pass in-flight route updates to React Router\n * TODO: Replace this with granular route update APIs (addRoute, updateRoute, deleteRoute)\n */\n _internalSetRoutes(routes: AgnosticRouteObject[]): void;\n\n /**\n * @internal\n * PRIVATE - DO NOT USE\n *\n * Internal fetch AbortControllers accessed by unit tests\n */\n _internalFetchControllers: Map;\n\n /**\n * @internal\n * PRIVATE - DO NOT USE\n *\n * Internal pending DeferredData instances accessed by unit tests\n */\n _internalActiveDeferreds: Map;\n}\n\n/**\n * State maintained internally by the router. During a navigation, all states\n * reflect the the \"old\" location unless otherwise noted.\n */\nexport interface RouterState {\n /**\n * The action of the most recent navigation\n */\n historyAction: HistoryAction;\n\n /**\n * The current location reflected by the router\n */\n location: Location;\n\n /**\n * The current set of route matches\n */\n matches: AgnosticDataRouteMatch[];\n\n /**\n * Tracks whether we've completed our initial data load\n */\n initialized: boolean;\n\n /**\n * Current scroll position we should start at for a new view\n * - number -> scroll position to restore to\n * - false -> do not restore scroll at all (used during submissions)\n * - null -> don't have a saved position, scroll to hash or top of page\n */\n restoreScrollPosition: number | false | null;\n\n /**\n * Indicate whether this navigation should skip resetting the scroll position\n * if we are unable to restore the scroll position\n */\n preventScrollReset: boolean;\n\n /**\n * Tracks the state of the current navigation\n */\n navigation: Navigation;\n\n /**\n * Tracks any in-progress revalidations\n */\n revalidation: RevalidationState;\n\n /**\n * Data from the loaders for the current matches\n */\n loaderData: RouteData;\n\n /**\n * Data from the action for the current matches\n */\n actionData: RouteData | null;\n\n /**\n * Errors caught from loaders for the current matches\n */\n errors: RouteData | null;\n\n /**\n * Map of current fetchers\n */\n fetchers: Map;\n\n /**\n * Map of current blockers\n */\n blockers: Map;\n}\n\n/**\n * Data that can be passed into hydrate a Router from SSR\n */\nexport type HydrationState = Partial<\n Pick\n>;\n\n/**\n * Future flags to toggle new feature behavior\n */\nexport interface FutureConfig {\n v7_fetcherPersist: boolean;\n v7_normalizeFormMethod: boolean;\n v7_partialHydration: boolean;\n v7_prependBasename: boolean;\n v7_relativeSplatPath: boolean;\n v7_skipActionErrorRevalidation: boolean;\n}\n\n/**\n * Initialization options for createRouter\n */\nexport interface RouterInit {\n routes: AgnosticRouteObject[];\n history: History;\n basename?: string;\n /**\n * @deprecated Use `mapRouteProperties` instead\n */\n detectErrorBoundary?: DetectErrorBoundaryFunction;\n mapRouteProperties?: MapRoutePropertiesFunction;\n future?: Partial;\n hydrationData?: HydrationState;\n window?: Window;\n unstable_patchRoutesOnNavigation?: AgnosticPatchRoutesOnNavigationFunction;\n unstable_dataStrategy?: DataStrategyFunction;\n}\n\n/**\n * State returned from a server-side query() call\n */\nexport interface StaticHandlerContext {\n basename: Router[\"basename\"];\n location: RouterState[\"location\"];\n matches: RouterState[\"matches\"];\n loaderData: RouterState[\"loaderData\"];\n actionData: RouterState[\"actionData\"];\n errors: RouterState[\"errors\"];\n statusCode: number;\n loaderHeaders: Record;\n actionHeaders: Record;\n activeDeferreds: Record | null;\n _deepestRenderedBoundaryId?: string | null;\n}\n\n/**\n * A StaticHandler instance manages a singular SSR navigation/fetch event\n */\nexport interface StaticHandler {\n dataRoutes: AgnosticDataRouteObject[];\n query(\n request: Request,\n opts?: {\n requestContext?: unknown;\n skipLoaderErrorBubbling?: boolean;\n unstable_dataStrategy?: DataStrategyFunction;\n }\n ): Promise;\n queryRoute(\n request: Request,\n opts?: {\n routeId?: string;\n requestContext?: unknown;\n unstable_dataStrategy?: DataStrategyFunction;\n }\n ): Promise;\n}\n\ntype ViewTransitionOpts = {\n currentLocation: Location;\n nextLocation: Location;\n};\n\n/**\n * Subscriber function signature for changes to router state\n */\nexport interface RouterSubscriber {\n (\n state: RouterState,\n opts: {\n deletedFetchers: string[];\n unstable_viewTransitionOpts?: ViewTransitionOpts;\n unstable_flushSync: boolean;\n }\n ): void;\n}\n\n/**\n * Function signature for determining the key to be used in scroll restoration\n * for a given location\n */\nexport interface GetScrollRestorationKeyFunction {\n (location: Location, matches: UIMatch[]): string | null;\n}\n\n/**\n * Function signature for determining the current scroll position\n */\nexport interface GetScrollPositionFunction {\n (): number;\n}\n\nexport type RelativeRoutingType = \"route\" | \"path\";\n\n// Allowed for any navigation or fetch\ntype BaseNavigateOrFetchOptions = {\n preventScrollReset?: boolean;\n relative?: RelativeRoutingType;\n unstable_flushSync?: boolean;\n};\n\n// Only allowed for navigations\ntype BaseNavigateOptions = BaseNavigateOrFetchOptions & {\n replace?: boolean;\n state?: any;\n fromRouteId?: string;\n unstable_viewTransition?: boolean;\n};\n\n// Only allowed for submission navigations\ntype BaseSubmissionOptions = {\n formMethod?: HTMLFormMethod;\n formEncType?: FormEncType;\n} & (\n | { formData: FormData; body?: undefined }\n | { formData?: undefined; body: any }\n);\n\n/**\n * Options for a navigate() call for a normal (non-submission) navigation\n */\ntype LinkNavigateOptions = BaseNavigateOptions;\n\n/**\n * Options for a navigate() call for a submission navigation\n */\ntype SubmissionNavigateOptions = BaseNavigateOptions & BaseSubmissionOptions;\n\n/**\n * Options to pass to navigate() for a navigation\n */\nexport type RouterNavigateOptions =\n | LinkNavigateOptions\n | SubmissionNavigateOptions;\n\n/**\n * Options for a fetch() load\n */\ntype LoadFetchOptions = BaseNavigateOrFetchOptions;\n\n/**\n * Options for a fetch() submission\n */\ntype SubmitFetchOptions = BaseNavigateOrFetchOptions & BaseSubmissionOptions;\n\n/**\n * Options to pass to fetch()\n */\nexport type RouterFetchOptions = LoadFetchOptions | SubmitFetchOptions;\n\n/**\n * Potential states for state.navigation\n */\nexport type NavigationStates = {\n Idle: {\n state: \"idle\";\n location: undefined;\n formMethod: undefined;\n formAction: undefined;\n formEncType: undefined;\n formData: undefined;\n json: undefined;\n text: undefined;\n };\n Loading: {\n state: \"loading\";\n location: Location;\n formMethod: Submission[\"formMethod\"] | undefined;\n formAction: Submission[\"formAction\"] | undefined;\n formEncType: Submission[\"formEncType\"] | undefined;\n formData: Submission[\"formData\"] | undefined;\n json: Submission[\"json\"] | undefined;\n text: Submission[\"text\"] | undefined;\n };\n Submitting: {\n state: \"submitting\";\n location: Location;\n formMethod: Submission[\"formMethod\"];\n formAction: Submission[\"formAction\"];\n formEncType: Submission[\"formEncType\"];\n formData: Submission[\"formData\"];\n json: Submission[\"json\"];\n text: Submission[\"text\"];\n };\n};\n\nexport type Navigation = NavigationStates[keyof NavigationStates];\n\nexport type RevalidationState = \"idle\" | \"loading\";\n\n/**\n * Potential states for fetchers\n */\ntype FetcherStates = {\n Idle: {\n state: \"idle\";\n formMethod: undefined;\n formAction: undefined;\n formEncType: undefined;\n text: undefined;\n formData: undefined;\n json: undefined;\n data: TData | undefined;\n };\n Loading: {\n state: \"loading\";\n formMethod: Submission[\"formMethod\"] | undefined;\n formAction: Submission[\"formAction\"] | undefined;\n formEncType: Submission[\"formEncType\"] | undefined;\n text: Submission[\"text\"] | undefined;\n formData: Submission[\"formData\"] | undefined;\n json: Submission[\"json\"] | undefined;\n data: TData | undefined;\n };\n Submitting: {\n state: \"submitting\";\n formMethod: Submission[\"formMethod\"];\n formAction: Submission[\"formAction\"];\n formEncType: Submission[\"formEncType\"];\n text: Submission[\"text\"];\n formData: Submission[\"formData\"];\n json: Submission[\"json\"];\n data: TData | undefined;\n };\n};\n\nexport type Fetcher =\n FetcherStates[keyof FetcherStates];\n\ninterface BlockerBlocked {\n state: \"blocked\";\n reset(): void;\n proceed(): void;\n location: Location;\n}\n\ninterface BlockerUnblocked {\n state: \"unblocked\";\n reset: undefined;\n proceed: undefined;\n location: undefined;\n}\n\ninterface BlockerProceeding {\n state: \"proceeding\";\n reset: undefined;\n proceed: undefined;\n location: Location;\n}\n\nexport type Blocker = BlockerUnblocked | BlockerBlocked | BlockerProceeding;\n\nexport type BlockerFunction = (args: {\n currentLocation: Location;\n nextLocation: Location;\n historyAction: HistoryAction;\n}) => boolean;\n\ninterface ShortCircuitable {\n /**\n * startNavigation does not need to complete the navigation because we\n * redirected or got interrupted\n */\n shortCircuited?: boolean;\n}\n\ntype PendingActionResult = [string, SuccessResult | ErrorResult];\n\ninterface HandleActionResult extends ShortCircuitable {\n /**\n * Route matches which may have been updated from fog of war discovery\n */\n matches?: RouterState[\"matches\"];\n /**\n * Tuple for the returned or thrown value from the current action. The routeId\n * is the action route for success and the bubbled boundary route for errors.\n */\n pendingActionResult?: PendingActionResult;\n}\n\ninterface HandleLoadersResult extends ShortCircuitable {\n /**\n * Route matches which may have been updated from fog of war discovery\n */\n matches?: RouterState[\"matches\"];\n /**\n * loaderData returned from the current set of loaders\n */\n loaderData?: RouterState[\"loaderData\"];\n /**\n * errors thrown from the current set of loaders\n */\n errors?: RouterState[\"errors\"];\n}\n\n/**\n * Cached info for active fetcher.load() instances so they can participate\n * in revalidation\n */\ninterface FetchLoadMatch {\n routeId: string;\n path: string;\n}\n\n/**\n * Identified fetcher.load() calls that need to be revalidated\n */\ninterface RevalidatingFetcher extends FetchLoadMatch {\n key: string;\n match: AgnosticDataRouteMatch | null;\n matches: AgnosticDataRouteMatch[] | null;\n controller: AbortController | null;\n}\n\nconst validMutationMethodsArr: MutationFormMethod[] = [\n \"post\",\n \"put\",\n \"patch\",\n \"delete\",\n];\nconst validMutationMethods = new Set(\n validMutationMethodsArr\n);\n\nconst validRequestMethodsArr: FormMethod[] = [\n \"get\",\n ...validMutationMethodsArr,\n];\nconst validRequestMethods = new Set(validRequestMethodsArr);\n\nconst redirectStatusCodes = new Set([301, 302, 303, 307, 308]);\nconst redirectPreserveMethodStatusCodes = new Set([307, 308]);\n\nexport const IDLE_NAVIGATION: NavigationStates[\"Idle\"] = {\n state: \"idle\",\n location: undefined,\n formMethod: undefined,\n formAction: undefined,\n formEncType: undefined,\n formData: undefined,\n json: undefined,\n text: undefined,\n};\n\nexport const IDLE_FETCHER: FetcherStates[\"Idle\"] = {\n state: \"idle\",\n data: undefined,\n formMethod: undefined,\n formAction: undefined,\n formEncType: undefined,\n formData: undefined,\n json: undefined,\n text: undefined,\n};\n\nexport const IDLE_BLOCKER: BlockerUnblocked = {\n state: \"unblocked\",\n proceed: undefined,\n reset: undefined,\n location: undefined,\n};\n\nconst ABSOLUTE_URL_REGEX = /^(?:[a-z][a-z0-9+.-]*:|\\/\\/)/i;\n\nconst defaultMapRouteProperties: MapRoutePropertiesFunction = (route) => ({\n hasErrorBoundary: Boolean(route.hasErrorBoundary),\n});\n\nconst TRANSITIONS_STORAGE_KEY = \"remix-router-transitions\";\n\n//#endregion\n\n////////////////////////////////////////////////////////////////////////////////\n//#region createRouter\n////////////////////////////////////////////////////////////////////////////////\n\n/**\n * Create a router and listen to history POP navigations\n */\nexport function createRouter(init: RouterInit): Router {\n const routerWindow = init.window\n ? init.window\n : typeof window !== \"undefined\"\n ? window\n : undefined;\n const isBrowser =\n typeof routerWindow !== \"undefined\" &&\n typeof routerWindow.document !== \"undefined\" &&\n typeof routerWindow.document.createElement !== \"undefined\";\n const isServer = !isBrowser;\n\n invariant(\n init.routes.length > 0,\n \"You must provide a non-empty routes array to createRouter\"\n );\n\n let mapRouteProperties: MapRoutePropertiesFunction;\n if (init.mapRouteProperties) {\n mapRouteProperties = init.mapRouteProperties;\n } else if (init.detectErrorBoundary) {\n // If they are still using the deprecated version, wrap it with the new API\n let detectErrorBoundary = init.detectErrorBoundary;\n mapRouteProperties = (route) => ({\n hasErrorBoundary: detectErrorBoundary(route),\n });\n } else {\n mapRouteProperties = defaultMapRouteProperties;\n }\n\n // Routes keyed by ID\n let manifest: RouteManifest = {};\n // Routes in tree format for matching\n let dataRoutes = convertRoutesToDataRoutes(\n init.routes,\n mapRouteProperties,\n undefined,\n manifest\n );\n let inFlightDataRoutes: AgnosticDataRouteObject[] | undefined;\n let basename = init.basename || \"/\";\n let dataStrategyImpl = init.unstable_dataStrategy || defaultDataStrategy;\n let patchRoutesOnNavigationImpl = init.unstable_patchRoutesOnNavigation;\n\n // Config driven behavior flags\n let future: FutureConfig = {\n v7_fetcherPersist: false,\n v7_normalizeFormMethod: false,\n v7_partialHydration: false,\n v7_prependBasename: false,\n v7_relativeSplatPath: false,\n v7_skipActionErrorRevalidation: false,\n ...init.future,\n };\n // Cleanup function for history\n let unlistenHistory: (() => void) | null = null;\n // Externally-provided functions to call on all state changes\n let subscribers = new Set();\n // FIFO queue of previously discovered routes to prevent re-calling on\n // subsequent navigations to the same path\n let discoveredRoutesMaxSize = 1000;\n let discoveredRoutes = new Set();\n // Externally-provided object to hold scroll restoration locations during routing\n let savedScrollPositions: Record | null = null;\n // Externally-provided function to get scroll restoration keys\n let getScrollRestorationKey: GetScrollRestorationKeyFunction | null = null;\n // Externally-provided function to get current scroll position\n let getScrollPosition: GetScrollPositionFunction | null = null;\n // One-time flag to control the initial hydration scroll restoration. Because\n // we don't get the saved positions from until _after_\n // the initial render, we need to manually trigger a separate updateState to\n // send along the restoreScrollPosition\n // Set to true if we have `hydrationData` since we assume we were SSR'd and that\n // SSR did the initial scroll restoration.\n let initialScrollRestored = init.hydrationData != null;\n\n let initialMatches = matchRoutes(dataRoutes, init.history.location, basename);\n let initialErrors: RouteData | null = null;\n\n if (initialMatches == null && !patchRoutesOnNavigationImpl) {\n // If we do not match a user-provided-route, fall back to the root\n // to allow the error boundary to take over\n let error = getInternalRouterError(404, {\n pathname: init.history.location.pathname,\n });\n let { matches, route } = getShortCircuitMatches(dataRoutes);\n initialMatches = matches;\n initialErrors = { [route.id]: error };\n }\n\n // In SPA apps, if the user provided a patchRoutesOnNavigation implementation and\n // our initial match is a splat route, clear them out so we run through lazy\n // discovery on hydration in case there's a more accurate lazy route match.\n // In SSR apps (with `hydrationData`), we expect that the server will send\n // up the proper matched routes so we don't want to run lazy discovery on\n // initial hydration and want to hydrate into the splat route.\n if (initialMatches && !init.hydrationData) {\n let fogOfWar = checkFogOfWar(\n initialMatches,\n dataRoutes,\n init.history.location.pathname\n );\n if (fogOfWar.active) {\n initialMatches = null;\n }\n }\n\n let initialized: boolean;\n if (!initialMatches) {\n initialized = false;\n initialMatches = [];\n\n // If partial hydration and fog of war is enabled, we will be running\n // `patchRoutesOnNavigation` during hydration so include any partial matches as\n // the initial matches so we can properly render `HydrateFallback`'s\n if (future.v7_partialHydration) {\n let fogOfWar = checkFogOfWar(\n null,\n dataRoutes,\n init.history.location.pathname\n );\n if (fogOfWar.active && fogOfWar.matches) {\n initialMatches = fogOfWar.matches;\n }\n }\n } else if (initialMatches.some((m) => m.route.lazy)) {\n // All initialMatches need to be loaded before we're ready. If we have lazy\n // functions around still then we'll need to run them in initialize()\n initialized = false;\n } else if (!initialMatches.some((m) => m.route.loader)) {\n // If we've got no loaders to run, then we're good to go\n initialized = true;\n } else if (future.v7_partialHydration) {\n // If partial hydration is enabled, we're initialized so long as we were\n // provided with hydrationData for every route with a loader, and no loaders\n // were marked for explicit hydration\n let loaderData = init.hydrationData ? init.hydrationData.loaderData : null;\n let errors = init.hydrationData ? init.hydrationData.errors : null;\n let isRouteInitialized = (m: AgnosticDataRouteMatch) => {\n // No loader, nothing to initialize\n if (!m.route.loader) {\n return true;\n }\n // Explicitly opting-in to running on hydration\n if (\n typeof m.route.loader === \"function\" &&\n m.route.loader.hydrate === true\n ) {\n return false;\n }\n // Otherwise, initialized if hydrated with data or an error\n return (\n (loaderData && loaderData[m.route.id] !== undefined) ||\n (errors && errors[m.route.id] !== undefined)\n );\n };\n\n // If errors exist, don't consider routes below the boundary\n if (errors) {\n let idx = initialMatches.findIndex(\n (m) => errors![m.route.id] !== undefined\n );\n initialized = initialMatches.slice(0, idx + 1).every(isRouteInitialized);\n } else {\n initialized = initialMatches.every(isRouteInitialized);\n }\n } else {\n // Without partial hydration - we're initialized if we were provided any\n // hydrationData - which is expected to be complete\n initialized = init.hydrationData != null;\n }\n\n let router: Router;\n let state: RouterState = {\n historyAction: init.history.action,\n location: init.history.location,\n matches: initialMatches,\n initialized,\n navigation: IDLE_NAVIGATION,\n // Don't restore on initial updateState() if we were SSR'd\n restoreScrollPosition: init.hydrationData != null ? false : null,\n preventScrollReset: false,\n revalidation: \"idle\",\n loaderData: (init.hydrationData && init.hydrationData.loaderData) || {},\n actionData: (init.hydrationData && init.hydrationData.actionData) || null,\n errors: (init.hydrationData && init.hydrationData.errors) || initialErrors,\n fetchers: new Map(),\n blockers: new Map(),\n };\n\n // -- Stateful internal variables to manage navigations --\n // Current navigation in progress (to be committed in completeNavigation)\n let pendingAction: HistoryAction = HistoryAction.Pop;\n\n // Should the current navigation prevent the scroll reset if scroll cannot\n // be restored?\n let pendingPreventScrollReset = false;\n\n // AbortController for the active navigation\n let pendingNavigationController: AbortController | null;\n\n // Should the current navigation enable document.startViewTransition?\n let pendingViewTransitionEnabled = false;\n\n // Store applied view transitions so we can apply them on POP\n let appliedViewTransitions: Map> = new Map<\n string,\n Set\n >();\n\n // Cleanup function for persisting applied transitions to sessionStorage\n let removePageHideEventListener: (() => void) | null = null;\n\n // We use this to avoid touching history in completeNavigation if a\n // revalidation is entirely uninterrupted\n let isUninterruptedRevalidation = false;\n\n // Use this internal flag to force revalidation of all loaders:\n // - submissions (completed or interrupted)\n // - useRevalidator()\n // - X-Remix-Revalidate (from redirect)\n let isRevalidationRequired = false;\n\n // Use this internal array to capture routes that require revalidation due\n // to a cancelled deferred on action submission\n let cancelledDeferredRoutes: string[] = [];\n\n // Use this internal array to capture fetcher loads that were cancelled by an\n // action navigation and require revalidation\n let cancelledFetcherLoads: Set = new Set();\n\n // AbortControllers for any in-flight fetchers\n let fetchControllers = new Map();\n\n // Track loads based on the order in which they started\n let incrementingLoadId = 0;\n\n // Track the outstanding pending navigation data load to be compared against\n // the globally incrementing load when a fetcher load lands after a completed\n // navigation\n let pendingNavigationLoadId = -1;\n\n // Fetchers that triggered data reloads as a result of their actions\n let fetchReloadIds = new Map();\n\n // Fetchers that triggered redirect navigations\n let fetchRedirectIds = new Set();\n\n // Most recent href/match for fetcher.load calls for fetchers\n let fetchLoadMatches = new Map();\n\n // Ref-count mounted fetchers so we know when it's ok to clean them up\n let activeFetchers = new Map();\n\n // Fetchers that have requested a delete when using v7_fetcherPersist,\n // they'll be officially removed after they return to idle\n let deletedFetchers = new Set();\n\n // Store DeferredData instances for active route matches. When a\n // route loader returns defer() we stick one in here. Then, when a nested\n // promise resolves we update loaderData. If a new navigation starts we\n // cancel active deferreds for eliminated routes.\n let activeDeferreds = new Map();\n\n // Store blocker functions in a separate Map outside of router state since\n // we don't need to update UI state if they change\n let blockerFunctions = new Map();\n\n // Map of pending patchRoutesOnNavigation() promises (keyed by path/matches) so\n // that we only kick them off once for a given combo\n let pendingPatchRoutes = new Map<\n string,\n ReturnType\n >();\n\n // Flag to ignore the next history update, so we can revert the URL change on\n // a POP navigation that was blocked by the user without touching router state\n let unblockBlockerHistoryUpdate: (() => void) | undefined = undefined;\n\n // Initialize the router, all side effects should be kicked off from here.\n // Implemented as a Fluent API for ease of:\n // let router = createRouter(init).initialize();\n function initialize() {\n // If history informs us of a POP navigation, start the navigation but do not update\n // state. We'll update our own state once the navigation completes\n unlistenHistory = init.history.listen(\n ({ action: historyAction, location, delta }) => {\n // Ignore this event if it was just us resetting the URL from a\n // blocked POP navigation\n if (unblockBlockerHistoryUpdate) {\n unblockBlockerHistoryUpdate();\n unblockBlockerHistoryUpdate = undefined;\n return;\n }\n\n warning(\n blockerFunctions.size === 0 || delta != null,\n \"You are trying to use a blocker on a POP navigation to a location \" +\n \"that was not created by @remix-run/router. This will fail silently in \" +\n \"production. This can happen if you are navigating outside the router \" +\n \"via `window.history.pushState`/`window.location.hash` instead of using \" +\n \"router navigation APIs. This can also happen if you are using \" +\n \"createHashRouter and the user manually changes the URL.\"\n );\n\n let blockerKey = shouldBlockNavigation({\n currentLocation: state.location,\n nextLocation: location,\n historyAction,\n });\n\n if (blockerKey && delta != null) {\n // Restore the URL to match the current UI, but don't update router state\n let nextHistoryUpdatePromise = new Promise((resolve) => {\n unblockBlockerHistoryUpdate = resolve;\n });\n init.history.go(delta * -1);\n\n // Put the blocker into a blocked state\n updateBlocker(blockerKey, {\n state: \"blocked\",\n location,\n proceed() {\n updateBlocker(blockerKey!, {\n state: \"proceeding\",\n proceed: undefined,\n reset: undefined,\n location,\n });\n // Re-do the same POP navigation we just blocked, after the url\n // restoration is also complete. See:\n // https://github.com/remix-run/react-router/issues/11613\n nextHistoryUpdatePromise.then(() => init.history.go(delta));\n },\n reset() {\n let blockers = new Map(state.blockers);\n blockers.set(blockerKey!, IDLE_BLOCKER);\n updateState({ blockers });\n },\n });\n return;\n }\n\n return startNavigation(historyAction, location);\n }\n );\n\n if (isBrowser) {\n // FIXME: This feels gross. How can we cleanup the lines between\n // scrollRestoration/appliedTransitions persistance?\n restoreAppliedTransitions(routerWindow, appliedViewTransitions);\n let _saveAppliedTransitions = () =>\n persistAppliedTransitions(routerWindow, appliedViewTransitions);\n routerWindow.addEventListener(\"pagehide\", _saveAppliedTransitions);\n removePageHideEventListener = () =>\n routerWindow.removeEventListener(\"pagehide\", _saveAppliedTransitions);\n }\n\n // Kick off initial data load if needed. Use Pop to avoid modifying history\n // Note we don't do any handling of lazy here. For SPA's it'll get handled\n // in the normal navigation flow. For SSR it's expected that lazy modules are\n // resolved prior to router creation since we can't go into a fallbackElement\n // UI for SSR'd apps\n if (!state.initialized) {\n startNavigation(HistoryAction.Pop, state.location, {\n initialHydration: true,\n });\n }\n\n return router;\n }\n\n // Clean up a router and it's side effects\n function dispose() {\n if (unlistenHistory) {\n unlistenHistory();\n }\n if (removePageHideEventListener) {\n removePageHideEventListener();\n }\n subscribers.clear();\n pendingNavigationController && pendingNavigationController.abort();\n state.fetchers.forEach((_, key) => deleteFetcher(key));\n state.blockers.forEach((_, key) => deleteBlocker(key));\n }\n\n // Subscribe to state updates for the router\n function subscribe(fn: RouterSubscriber) {\n subscribers.add(fn);\n return () => subscribers.delete(fn);\n }\n\n // Update our state and notify the calling context of the change\n function updateState(\n newState: Partial,\n opts: {\n flushSync?: boolean;\n viewTransitionOpts?: ViewTransitionOpts;\n } = {}\n ): void {\n state = {\n ...state,\n ...newState,\n };\n\n // Prep fetcher cleanup so we can tell the UI which fetcher data entries\n // can be removed\n let completedFetchers: string[] = [];\n let deletedFetchersKeys: string[] = [];\n\n if (future.v7_fetcherPersist) {\n state.fetchers.forEach((fetcher, key) => {\n if (fetcher.state === \"idle\") {\n if (deletedFetchers.has(key)) {\n // Unmounted from the UI and can be totally removed\n deletedFetchersKeys.push(key);\n } else {\n // Returned to idle but still mounted in the UI, so semi-remains for\n // revalidations and such\n completedFetchers.push(key);\n }\n }\n });\n }\n\n // Iterate over a local copy so that if flushSync is used and we end up\n // removing and adding a new subscriber due to the useCallback dependencies,\n // we don't get ourselves into a loop calling the new subscriber immediately\n [...subscribers].forEach((subscriber) =>\n subscriber(state, {\n deletedFetchers: deletedFetchersKeys,\n unstable_viewTransitionOpts: opts.viewTransitionOpts,\n unstable_flushSync: opts.flushSync === true,\n })\n );\n\n // Remove idle fetchers from state since we only care about in-flight fetchers.\n if (future.v7_fetcherPersist) {\n completedFetchers.forEach((key) => state.fetchers.delete(key));\n deletedFetchersKeys.forEach((key) => deleteFetcher(key));\n }\n }\n\n // Complete a navigation returning the state.navigation back to the IDLE_NAVIGATION\n // and setting state.[historyAction/location/matches] to the new route.\n // - Location is a required param\n // - Navigation will always be set to IDLE_NAVIGATION\n // - Can pass any other state in newState\n function completeNavigation(\n location: Location,\n newState: Partial>,\n { flushSync }: { flushSync?: boolean } = {}\n ): void {\n // Deduce if we're in a loading/actionReload state:\n // - We have committed actionData in the store\n // - The current navigation was a mutation submission\n // - We're past the submitting state and into the loading state\n // - The location being loaded is not the result of a redirect\n let isActionReload =\n state.actionData != null &&\n state.navigation.formMethod != null &&\n isMutationMethod(state.navigation.formMethod) &&\n state.navigation.state === \"loading\" &&\n location.state?._isRedirect !== true;\n\n let actionData: RouteData | null;\n if (newState.actionData) {\n if (Object.keys(newState.actionData).length > 0) {\n actionData = newState.actionData;\n } else {\n // Empty actionData -> clear prior actionData due to an action error\n actionData = null;\n }\n } else if (isActionReload) {\n // Keep the current data if we're wrapping up the action reload\n actionData = state.actionData;\n } else {\n // Clear actionData on any other completed navigations\n actionData = null;\n }\n\n // Always preserve any existing loaderData from re-used routes\n let loaderData = newState.loaderData\n ? mergeLoaderData(\n state.loaderData,\n newState.loaderData,\n newState.matches || [],\n newState.errors\n )\n : state.loaderData;\n\n // On a successful navigation we can assume we got through all blockers\n // so we can start fresh\n let blockers = state.blockers;\n if (blockers.size > 0) {\n blockers = new Map(blockers);\n blockers.forEach((_, k) => blockers.set(k, IDLE_BLOCKER));\n }\n\n // Always respect the user flag. Otherwise don't reset on mutation\n // submission navigations unless they redirect\n let preventScrollReset =\n pendingPreventScrollReset === true ||\n (state.navigation.formMethod != null &&\n isMutationMethod(state.navigation.formMethod) &&\n location.state?._isRedirect !== true);\n\n // Commit any in-flight routes at the end of the HMR revalidation \"navigation\"\n if (inFlightDataRoutes) {\n dataRoutes = inFlightDataRoutes;\n inFlightDataRoutes = undefined;\n }\n\n if (isUninterruptedRevalidation) {\n // If this was an uninterrupted revalidation then do not touch history\n } else if (pendingAction === HistoryAction.Pop) {\n // Do nothing for POP - URL has already been updated\n } else if (pendingAction === HistoryAction.Push) {\n init.history.push(location, location.state);\n } else if (pendingAction === HistoryAction.Replace) {\n init.history.replace(location, location.state);\n }\n\n let viewTransitionOpts: ViewTransitionOpts | undefined;\n\n // On POP, enable transitions if they were enabled on the original navigation\n if (pendingAction === HistoryAction.Pop) {\n // Forward takes precedence so they behave like the original navigation\n let priorPaths = appliedViewTransitions.get(state.location.pathname);\n if (priorPaths && priorPaths.has(location.pathname)) {\n viewTransitionOpts = {\n currentLocation: state.location,\n nextLocation: location,\n };\n } else if (appliedViewTransitions.has(location.pathname)) {\n // If we don't have a previous forward nav, assume we're popping back to\n // the new location and enable if that location previously enabled\n viewTransitionOpts = {\n currentLocation: location,\n nextLocation: state.location,\n };\n }\n } else if (pendingViewTransitionEnabled) {\n // Store the applied transition on PUSH/REPLACE\n let toPaths = appliedViewTransitions.get(state.location.pathname);\n if (toPaths) {\n toPaths.add(location.pathname);\n } else {\n toPaths = new Set([location.pathname]);\n appliedViewTransitions.set(state.location.pathname, toPaths);\n }\n viewTransitionOpts = {\n currentLocation: state.location,\n nextLocation: location,\n };\n }\n\n updateState(\n {\n ...newState, // matches, errors, fetchers go through as-is\n actionData,\n loaderData,\n historyAction: pendingAction,\n location,\n initialized: true,\n navigation: IDLE_NAVIGATION,\n revalidation: \"idle\",\n restoreScrollPosition: getSavedScrollPosition(\n location,\n newState.matches || state.matches\n ),\n preventScrollReset,\n blockers,\n },\n {\n viewTransitionOpts,\n flushSync: flushSync === true,\n }\n );\n\n // Reset stateful navigation vars\n pendingAction = HistoryAction.Pop;\n pendingPreventScrollReset = false;\n pendingViewTransitionEnabled = false;\n isUninterruptedRevalidation = false;\n isRevalidationRequired = false;\n cancelledDeferredRoutes = [];\n }\n\n // Trigger a navigation event, which can either be a numerical POP or a PUSH\n // replace with an optional submission\n async function navigate(\n to: number | To | null,\n opts?: RouterNavigateOptions\n ): Promise {\n if (typeof to === \"number\") {\n init.history.go(to);\n return;\n }\n\n let normalizedPath = normalizeTo(\n state.location,\n state.matches,\n basename,\n future.v7_prependBasename,\n to,\n future.v7_relativeSplatPath,\n opts?.fromRouteId,\n opts?.relative\n );\n let { path, submission, error } = normalizeNavigateOptions(\n future.v7_normalizeFormMethod,\n false,\n normalizedPath,\n opts\n );\n\n let currentLocation = state.location;\n let nextLocation = createLocation(state.location, path, opts && opts.state);\n\n // When using navigate as a PUSH/REPLACE we aren't reading an already-encoded\n // URL from window.location, so we need to encode it here so the behavior\n // remains the same as POP and non-data-router usages. new URL() does all\n // the same encoding we'd get from a history.pushState/window.location read\n // without having to touch history\n nextLocation = {\n ...nextLocation,\n ...init.history.encodeLocation(nextLocation),\n };\n\n let userReplace = opts && opts.replace != null ? opts.replace : undefined;\n\n let historyAction = HistoryAction.Push;\n\n if (userReplace === true) {\n historyAction = HistoryAction.Replace;\n } else if (userReplace === false) {\n // no-op\n } else if (\n submission != null &&\n isMutationMethod(submission.formMethod) &&\n submission.formAction === state.location.pathname + state.location.search\n ) {\n // By default on submissions to the current location we REPLACE so that\n // users don't have to double-click the back button to get to the prior\n // location. If the user redirects to a different location from the\n // action/loader this will be ignored and the redirect will be a PUSH\n historyAction = HistoryAction.Replace;\n }\n\n let preventScrollReset =\n opts && \"preventScrollReset\" in opts\n ? opts.preventScrollReset === true\n : undefined;\n\n let flushSync = (opts && opts.unstable_flushSync) === true;\n\n let blockerKey = shouldBlockNavigation({\n currentLocation,\n nextLocation,\n historyAction,\n });\n\n if (blockerKey) {\n // Put the blocker into a blocked state\n updateBlocker(blockerKey, {\n state: \"blocked\",\n location: nextLocation,\n proceed() {\n updateBlocker(blockerKey!, {\n state: \"proceeding\",\n proceed: undefined,\n reset: undefined,\n location: nextLocation,\n });\n // Send the same navigation through\n navigate(to, opts);\n },\n reset() {\n let blockers = new Map(state.blockers);\n blockers.set(blockerKey!, IDLE_BLOCKER);\n updateState({ blockers });\n },\n });\n return;\n }\n\n return await startNavigation(historyAction, nextLocation, {\n submission,\n // Send through the formData serialization error if we have one so we can\n // render at the right error boundary after we match routes\n pendingError: error,\n preventScrollReset,\n replace: opts && opts.replace,\n enableViewTransition: opts && opts.unstable_viewTransition,\n flushSync,\n });\n }\n\n // Revalidate all current loaders. If a navigation is in progress or if this\n // is interrupted by a navigation, allow this to \"succeed\" by calling all\n // loaders during the next loader round\n function revalidate() {\n interruptActiveLoads();\n updateState({ revalidation: \"loading\" });\n\n // If we're currently submitting an action, we don't need to start a new\n // navigation, we'll just let the follow up loader execution call all loaders\n if (state.navigation.state === \"submitting\") {\n return;\n }\n\n // If we're currently in an idle state, start a new navigation for the current\n // action/location and mark it as uninterrupted, which will skip the history\n // update in completeNavigation\n if (state.navigation.state === \"idle\") {\n startNavigation(state.historyAction, state.location, {\n startUninterruptedRevalidation: true,\n });\n return;\n }\n\n // Otherwise, if we're currently in a loading state, just start a new\n // navigation to the navigation.location but do not trigger an uninterrupted\n // revalidation so that history correctly updates once the navigation completes\n startNavigation(\n pendingAction || state.historyAction,\n state.navigation.location,\n {\n overrideNavigation: state.navigation,\n // Proxy through any rending view transition\n enableViewTransition: pendingViewTransitionEnabled === true,\n }\n );\n }\n\n // Start a navigation to the given action/location. Can optionally provide a\n // overrideNavigation which will override the normalLoad in the case of a redirect\n // navigation\n async function startNavigation(\n historyAction: HistoryAction,\n location: Location,\n opts?: {\n initialHydration?: boolean;\n submission?: Submission;\n fetcherSubmission?: Submission;\n overrideNavigation?: Navigation;\n pendingError?: ErrorResponseImpl;\n startUninterruptedRevalidation?: boolean;\n preventScrollReset?: boolean;\n replace?: boolean;\n enableViewTransition?: boolean;\n flushSync?: boolean;\n }\n ): Promise {\n // Abort any in-progress navigations and start a new one. Unset any ongoing\n // uninterrupted revalidations unless told otherwise, since we want this\n // new navigation to update history normally\n pendingNavigationController && pendingNavigationController.abort();\n pendingNavigationController = null;\n pendingAction = historyAction;\n isUninterruptedRevalidation =\n (opts && opts.startUninterruptedRevalidation) === true;\n\n // Save the current scroll position every time we start a new navigation,\n // and track whether we should reset scroll on completion\n saveScrollPosition(state.location, state.matches);\n pendingPreventScrollReset = (opts && opts.preventScrollReset) === true;\n\n pendingViewTransitionEnabled = (opts && opts.enableViewTransition) === true;\n\n let routesToUse = inFlightDataRoutes || dataRoutes;\n let loadingNavigation = opts && opts.overrideNavigation;\n let matches = matchRoutes(routesToUse, location, basename);\n let flushSync = (opts && opts.flushSync) === true;\n\n let fogOfWar = checkFogOfWar(matches, routesToUse, location.pathname);\n if (fogOfWar.active && fogOfWar.matches) {\n matches = fogOfWar.matches;\n }\n\n // Short circuit with a 404 on the root error boundary if we match nothing\n if (!matches) {\n let { error, notFoundMatches, route } = handleNavigational404(\n location.pathname\n );\n completeNavigation(\n location,\n {\n matches: notFoundMatches,\n loaderData: {},\n errors: {\n [route.id]: error,\n },\n },\n { flushSync }\n );\n return;\n }\n\n // Short circuit if it's only a hash change and not a revalidation or\n // mutation submission.\n //\n // Ignore on initial page loads because since the initial load will always\n // be \"same hash\". For example, on /page#hash and submit a \n // which will default to a navigation to /page\n if (\n state.initialized &&\n !isRevalidationRequired &&\n isHashChangeOnly(state.location, location) &&\n !(opts && opts.submission && isMutationMethod(opts.submission.formMethod))\n ) {\n completeNavigation(location, { matches }, { flushSync });\n return;\n }\n\n // Create a controller/Request for this navigation\n pendingNavigationController = new AbortController();\n let request = createClientSideRequest(\n init.history,\n location,\n pendingNavigationController.signal,\n opts && opts.submission\n );\n let pendingActionResult: PendingActionResult | undefined;\n\n if (opts && opts.pendingError) {\n // If we have a pendingError, it means the user attempted a GET submission\n // with binary FormData so assign here and skip to handleLoaders. That\n // way we handle calling loaders above the boundary etc. It's not really\n // different from an actionError in that sense.\n pendingActionResult = [\n findNearestBoundary(matches).route.id,\n { type: ResultType.error, error: opts.pendingError },\n ];\n } else if (\n opts &&\n opts.submission &&\n isMutationMethod(opts.submission.formMethod)\n ) {\n // Call action if we received an action submission\n let actionResult = await handleAction(\n request,\n location,\n opts.submission,\n matches,\n fogOfWar.active,\n { replace: opts.replace, flushSync }\n );\n\n if (actionResult.shortCircuited) {\n return;\n }\n\n // If we received a 404 from handleAction, it's because we couldn't lazily\n // discover the destination route so we don't want to call loaders\n if (actionResult.pendingActionResult) {\n let [routeId, result] = actionResult.pendingActionResult;\n if (\n isErrorResult(result) &&\n isRouteErrorResponse(result.error) &&\n result.error.status === 404\n ) {\n pendingNavigationController = null;\n\n completeNavigation(location, {\n matches: actionResult.matches,\n loaderData: {},\n errors: {\n [routeId]: result.error,\n },\n });\n return;\n }\n }\n\n matches = actionResult.matches || matches;\n pendingActionResult = actionResult.pendingActionResult;\n loadingNavigation = getLoadingNavigation(location, opts.submission);\n flushSync = false;\n // No need to do fog of war matching again on loader execution\n fogOfWar.active = false;\n\n // Create a GET request for the loaders\n request = createClientSideRequest(\n init.history,\n request.url,\n request.signal\n );\n }\n\n // Call loaders\n let {\n shortCircuited,\n matches: updatedMatches,\n loaderData,\n errors,\n } = await handleLoaders(\n request,\n location,\n matches,\n fogOfWar.active,\n loadingNavigation,\n opts && opts.submission,\n opts && opts.fetcherSubmission,\n opts && opts.replace,\n opts && opts.initialHydration === true,\n flushSync,\n pendingActionResult\n );\n\n if (shortCircuited) {\n return;\n }\n\n // Clean up now that the action/loaders have completed. Don't clean up if\n // we short circuited because pendingNavigationController will have already\n // been assigned to a new controller for the next navigation\n pendingNavigationController = null;\n\n completeNavigation(location, {\n matches: updatedMatches || matches,\n ...getActionDataForCommit(pendingActionResult),\n loaderData,\n errors,\n });\n }\n\n // Call the action matched by the leaf route for this navigation and handle\n // redirects/errors\n async function handleAction(\n request: Request,\n location: Location,\n submission: Submission,\n matches: AgnosticDataRouteMatch[],\n isFogOfWar: boolean,\n opts: { replace?: boolean; flushSync?: boolean } = {}\n ): Promise {\n interruptActiveLoads();\n\n // Put us in a submitting state\n let navigation = getSubmittingNavigation(location, submission);\n updateState({ navigation }, { flushSync: opts.flushSync === true });\n\n if (isFogOfWar) {\n let discoverResult = await discoverRoutes(\n matches,\n location.pathname,\n request.signal\n );\n if (discoverResult.type === \"aborted\") {\n return { shortCircuited: true };\n } else if (discoverResult.type === \"error\") {\n let { boundaryId, error } = handleDiscoverRouteError(\n location.pathname,\n discoverResult\n );\n return {\n matches: discoverResult.partialMatches,\n pendingActionResult: [\n boundaryId,\n {\n type: ResultType.error,\n error,\n },\n ],\n };\n } else if (!discoverResult.matches) {\n let { notFoundMatches, error, route } = handleNavigational404(\n location.pathname\n );\n return {\n matches: notFoundMatches,\n pendingActionResult: [\n route.id,\n {\n type: ResultType.error,\n error,\n },\n ],\n };\n } else {\n matches = discoverResult.matches;\n }\n }\n\n // Call our action and get the result\n let result: DataResult;\n let actionMatch = getTargetMatch(matches, location);\n\n if (!actionMatch.route.action && !actionMatch.route.lazy) {\n result = {\n type: ResultType.error,\n error: getInternalRouterError(405, {\n method: request.method,\n pathname: location.pathname,\n routeId: actionMatch.route.id,\n }),\n };\n } else {\n let results = await callDataStrategy(\n \"action\",\n state,\n request,\n [actionMatch],\n matches,\n null\n );\n result = results[actionMatch.route.id];\n\n if (request.signal.aborted) {\n return { shortCircuited: true };\n }\n }\n\n if (isRedirectResult(result)) {\n let replace: boolean;\n if (opts && opts.replace != null) {\n replace = opts.replace;\n } else {\n // If the user didn't explicity indicate replace behavior, replace if\n // we redirected to the exact same location we're currently at to avoid\n // double back-buttons\n let location = normalizeRedirectLocation(\n result.response.headers.get(\"Location\")!,\n new URL(request.url),\n basename\n );\n replace = location === state.location.pathname + state.location.search;\n }\n await startRedirectNavigation(request, result, true, {\n submission,\n replace,\n });\n return { shortCircuited: true };\n }\n\n if (isDeferredResult(result)) {\n throw getInternalRouterError(400, { type: \"defer-action\" });\n }\n\n if (isErrorResult(result)) {\n // Store off the pending error - we use it to determine which loaders\n // to call and will commit it when we complete the navigation\n let boundaryMatch = findNearestBoundary(matches, actionMatch.route.id);\n\n // By default, all submissions to the current location are REPLACE\n // navigations, but if the action threw an error that'll be rendered in\n // an errorElement, we fall back to PUSH so that the user can use the\n // back button to get back to the pre-submission form location to try\n // again\n if ((opts && opts.replace) !== true) {\n pendingAction = HistoryAction.Push;\n }\n\n return {\n matches,\n pendingActionResult: [boundaryMatch.route.id, result],\n };\n }\n\n return {\n matches,\n pendingActionResult: [actionMatch.route.id, result],\n };\n }\n\n // Call all applicable loaders for the given matches, handling redirects,\n // errors, etc.\n async function handleLoaders(\n request: Request,\n location: Location,\n matches: AgnosticDataRouteMatch[],\n isFogOfWar: boolean,\n overrideNavigation?: Navigation,\n submission?: Submission,\n fetcherSubmission?: Submission,\n replace?: boolean,\n initialHydration?: boolean,\n flushSync?: boolean,\n pendingActionResult?: PendingActionResult\n ): Promise {\n // Figure out the right navigation we want to use for data loading\n let loadingNavigation =\n overrideNavigation || getLoadingNavigation(location, submission);\n\n // If this was a redirect from an action we don't have a \"submission\" but\n // we have it on the loading navigation so use that if available\n let activeSubmission =\n submission ||\n fetcherSubmission ||\n getSubmissionFromNavigation(loadingNavigation);\n\n // If this is an uninterrupted revalidation, we remain in our current idle\n // state. If not, we need to switch to our loading state and load data,\n // preserving any new action data or existing action data (in the case of\n // a revalidation interrupting an actionReload)\n // If we have partialHydration enabled, then don't update the state for the\n // initial data load since it's not a \"navigation\"\n let shouldUpdateNavigationState =\n !isUninterruptedRevalidation &&\n (!future.v7_partialHydration || !initialHydration);\n\n // When fog of war is enabled, we enter our `loading` state earlier so we\n // can discover new routes during the `loading` state. We skip this if\n // we've already run actions since we would have done our matching already.\n // If the children() function threw then, we want to proceed with the\n // partial matches it discovered.\n if (isFogOfWar) {\n if (shouldUpdateNavigationState) {\n let actionData = getUpdatedActionData(pendingActionResult);\n updateState(\n {\n navigation: loadingNavigation,\n ...(actionData !== undefined ? { actionData } : {}),\n },\n {\n flushSync,\n }\n );\n }\n\n let discoverResult = await discoverRoutes(\n matches,\n location.pathname,\n request.signal\n );\n\n if (discoverResult.type === \"aborted\") {\n return { shortCircuited: true };\n } else if (discoverResult.type === \"error\") {\n let { boundaryId, error } = handleDiscoverRouteError(\n location.pathname,\n discoverResult\n );\n return {\n matches: discoverResult.partialMatches,\n loaderData: {},\n errors: {\n [boundaryId]: error,\n },\n };\n } else if (!discoverResult.matches) {\n let { error, notFoundMatches, route } = handleNavigational404(\n location.pathname\n );\n return {\n matches: notFoundMatches,\n loaderData: {},\n errors: {\n [route.id]: error,\n },\n };\n } else {\n matches = discoverResult.matches;\n }\n }\n\n let routesToUse = inFlightDataRoutes || dataRoutes;\n let [matchesToLoad, revalidatingFetchers] = getMatchesToLoad(\n init.history,\n state,\n matches,\n activeSubmission,\n location,\n future.v7_partialHydration && initialHydration === true,\n future.v7_skipActionErrorRevalidation,\n isRevalidationRequired,\n cancelledDeferredRoutes,\n cancelledFetcherLoads,\n deletedFetchers,\n fetchLoadMatches,\n fetchRedirectIds,\n routesToUse,\n basename,\n pendingActionResult\n );\n\n // Cancel pending deferreds for no-longer-matched routes or routes we're\n // about to reload. Note that if this is an action reload we would have\n // already cancelled all pending deferreds so this would be a no-op\n cancelActiveDeferreds(\n (routeId) =>\n !(matches && matches.some((m) => m.route.id === routeId)) ||\n (matchesToLoad && matchesToLoad.some((m) => m.route.id === routeId))\n );\n\n pendingNavigationLoadId = ++incrementingLoadId;\n\n // Short circuit if we have no loaders to run\n if (matchesToLoad.length === 0 && revalidatingFetchers.length === 0) {\n let updatedFetchers = markFetchRedirectsDone();\n completeNavigation(\n location,\n {\n matches,\n loaderData: {},\n // Commit pending error if we're short circuiting\n errors:\n pendingActionResult && isErrorResult(pendingActionResult[1])\n ? { [pendingActionResult[0]]: pendingActionResult[1].error }\n : null,\n ...getActionDataForCommit(pendingActionResult),\n ...(updatedFetchers ? { fetchers: new Map(state.fetchers) } : {}),\n },\n { flushSync }\n );\n return { shortCircuited: true };\n }\n\n if (shouldUpdateNavigationState) {\n let updates: Partial = {};\n if (!isFogOfWar) {\n // Only update navigation/actionNData if we didn't already do it above\n updates.navigation = loadingNavigation;\n let actionData = getUpdatedActionData(pendingActionResult);\n if (actionData !== undefined) {\n updates.actionData = actionData;\n }\n }\n if (revalidatingFetchers.length > 0) {\n updates.fetchers = getUpdatedRevalidatingFetchers(revalidatingFetchers);\n }\n updateState(updates, { flushSync });\n }\n\n revalidatingFetchers.forEach((rf) => {\n if (fetchControllers.has(rf.key)) {\n abortFetcher(rf.key);\n }\n if (rf.controller) {\n // Fetchers use an independent AbortController so that aborting a fetcher\n // (via deleteFetcher) does not abort the triggering navigation that\n // triggered the revalidation\n fetchControllers.set(rf.key, rf.controller);\n }\n });\n\n // Proxy navigation abort through to revalidation fetchers\n let abortPendingFetchRevalidations = () =>\n revalidatingFetchers.forEach((f) => abortFetcher(f.key));\n if (pendingNavigationController) {\n pendingNavigationController.signal.addEventListener(\n \"abort\",\n abortPendingFetchRevalidations\n );\n }\n\n let { loaderResults, fetcherResults } =\n await callLoadersAndMaybeResolveData(\n state,\n matches,\n matchesToLoad,\n revalidatingFetchers,\n request\n );\n\n if (request.signal.aborted) {\n return { shortCircuited: true };\n }\n\n // Clean up _after_ loaders have completed. Don't clean up if we short\n // circuited because fetchControllers would have been aborted and\n // reassigned to new controllers for the next navigation\n if (pendingNavigationController) {\n pendingNavigationController.signal.removeEventListener(\n \"abort\",\n abortPendingFetchRevalidations\n );\n }\n revalidatingFetchers.forEach((rf) => fetchControllers.delete(rf.key));\n\n // If any loaders returned a redirect Response, start a new REPLACE navigation\n let redirect = findRedirect(loaderResults);\n if (redirect) {\n await startRedirectNavigation(request, redirect.result, true, {\n replace,\n });\n return { shortCircuited: true };\n }\n\n redirect = findRedirect(fetcherResults);\n if (redirect) {\n // If this redirect came from a fetcher make sure we mark it in\n // fetchRedirectIds so it doesn't get revalidated on the next set of\n // loader executions\n fetchRedirectIds.add(redirect.key);\n await startRedirectNavigation(request, redirect.result, true, {\n replace,\n });\n return { shortCircuited: true };\n }\n\n // Process and commit output from loaders\n let { loaderData, errors } = processLoaderData(\n state,\n matches,\n matchesToLoad,\n loaderResults,\n pendingActionResult,\n revalidatingFetchers,\n fetcherResults,\n activeDeferreds\n );\n\n // Wire up subscribers to update loaderData as promises settle\n activeDeferreds.forEach((deferredData, routeId) => {\n deferredData.subscribe((aborted) => {\n // Note: No need to updateState here since the TrackedPromise on\n // loaderData is stable across resolve/reject\n // Remove this instance if we were aborted or if promises have settled\n if (aborted || deferredData.done) {\n activeDeferreds.delete(routeId);\n }\n });\n });\n\n // During partial hydration, preserve SSR errors for routes that don't re-run\n if (future.v7_partialHydration && initialHydration && state.errors) {\n Object.entries(state.errors)\n .filter(([id]) => !matchesToLoad.some((m) => m.route.id === id))\n .forEach(([routeId, error]) => {\n errors = Object.assign(errors || {}, { [routeId]: error });\n });\n }\n\n let updatedFetchers = markFetchRedirectsDone();\n let didAbortFetchLoads = abortStaleFetchLoads(pendingNavigationLoadId);\n let shouldUpdateFetchers =\n updatedFetchers || didAbortFetchLoads || revalidatingFetchers.length > 0;\n\n return {\n matches,\n loaderData,\n errors,\n ...(shouldUpdateFetchers ? { fetchers: new Map(state.fetchers) } : {}),\n };\n }\n\n function getUpdatedActionData(\n pendingActionResult: PendingActionResult | undefined\n ): Record | null | undefined {\n if (pendingActionResult && !isErrorResult(pendingActionResult[1])) {\n // This is cast to `any` currently because `RouteData`uses any and it\n // would be a breaking change to use any.\n // TODO: v7 - change `RouteData` to use `unknown` instead of `any`\n return {\n [pendingActionResult[0]]: pendingActionResult[1].data as any,\n };\n } else if (state.actionData) {\n if (Object.keys(state.actionData).length === 0) {\n return null;\n } else {\n return state.actionData;\n }\n }\n }\n\n function getUpdatedRevalidatingFetchers(\n revalidatingFetchers: RevalidatingFetcher[]\n ) {\n revalidatingFetchers.forEach((rf) => {\n let fetcher = state.fetchers.get(rf.key);\n let revalidatingFetcher = getLoadingFetcher(\n undefined,\n fetcher ? fetcher.data : undefined\n );\n state.fetchers.set(rf.key, revalidatingFetcher);\n });\n return new Map(state.fetchers);\n }\n\n // Trigger a fetcher load/submit for the given fetcher key\n function fetch(\n key: string,\n routeId: string,\n href: string | null,\n opts?: RouterFetchOptions\n ) {\n if (isServer) {\n throw new Error(\n \"router.fetch() was called during the server render, but it shouldn't be. \" +\n \"You are likely calling a useFetcher() method in the body of your component. \" +\n \"Try moving it to a useEffect or a callback.\"\n );\n }\n\n if (fetchControllers.has(key)) abortFetcher(key);\n let flushSync = (opts && opts.unstable_flushSync) === true;\n\n let routesToUse = inFlightDataRoutes || dataRoutes;\n let normalizedPath = normalizeTo(\n state.location,\n state.matches,\n basename,\n future.v7_prependBasename,\n href,\n future.v7_relativeSplatPath,\n routeId,\n opts?.relative\n );\n let matches = matchRoutes(routesToUse, normalizedPath, basename);\n\n let fogOfWar = checkFogOfWar(matches, routesToUse, normalizedPath);\n if (fogOfWar.active && fogOfWar.matches) {\n matches = fogOfWar.matches;\n }\n\n if (!matches) {\n setFetcherError(\n key,\n routeId,\n getInternalRouterError(404, { pathname: normalizedPath }),\n { flushSync }\n );\n return;\n }\n\n let { path, submission, error } = normalizeNavigateOptions(\n future.v7_normalizeFormMethod,\n true,\n normalizedPath,\n opts\n );\n\n if (error) {\n setFetcherError(key, routeId, error, { flushSync });\n return;\n }\n\n let match = getTargetMatch(matches, path);\n\n pendingPreventScrollReset = (opts && opts.preventScrollReset) === true;\n\n if (submission && isMutationMethod(submission.formMethod)) {\n handleFetcherAction(\n key,\n routeId,\n path,\n match,\n matches,\n fogOfWar.active,\n flushSync,\n submission\n );\n return;\n }\n\n // Store off the match so we can call it's shouldRevalidate on subsequent\n // revalidations\n fetchLoadMatches.set(key, { routeId, path });\n handleFetcherLoader(\n key,\n routeId,\n path,\n match,\n matches,\n fogOfWar.active,\n flushSync,\n submission\n );\n }\n\n // Call the action for the matched fetcher.submit(), and then handle redirects,\n // errors, and revalidation\n async function handleFetcherAction(\n key: string,\n routeId: string,\n path: string,\n match: AgnosticDataRouteMatch,\n requestMatches: AgnosticDataRouteMatch[],\n isFogOfWar: boolean,\n flushSync: boolean,\n submission: Submission\n ) {\n interruptActiveLoads();\n fetchLoadMatches.delete(key);\n\n function detectAndHandle405Error(m: AgnosticDataRouteMatch) {\n if (!m.route.action && !m.route.lazy) {\n let error = getInternalRouterError(405, {\n method: submission.formMethod,\n pathname: path,\n routeId: routeId,\n });\n setFetcherError(key, routeId, error, { flushSync });\n return true;\n }\n return false;\n }\n\n if (!isFogOfWar && detectAndHandle405Error(match)) {\n return;\n }\n\n // Put this fetcher into it's submitting state\n let existingFetcher = state.fetchers.get(key);\n updateFetcherState(key, getSubmittingFetcher(submission, existingFetcher), {\n flushSync,\n });\n\n let abortController = new AbortController();\n let fetchRequest = createClientSideRequest(\n init.history,\n path,\n abortController.signal,\n submission\n );\n\n if (isFogOfWar) {\n let discoverResult = await discoverRoutes(\n requestMatches,\n path,\n fetchRequest.signal\n );\n\n if (discoverResult.type === \"aborted\") {\n return;\n } else if (discoverResult.type === \"error\") {\n let { error } = handleDiscoverRouteError(path, discoverResult);\n setFetcherError(key, routeId, error, { flushSync });\n return;\n } else if (!discoverResult.matches) {\n setFetcherError(\n key,\n routeId,\n getInternalRouterError(404, { pathname: path }),\n { flushSync }\n );\n return;\n } else {\n requestMatches = discoverResult.matches;\n match = getTargetMatch(requestMatches, path);\n\n if (detectAndHandle405Error(match)) {\n return;\n }\n }\n }\n\n // Call the action for the fetcher\n fetchControllers.set(key, abortController);\n\n let originatingLoadId = incrementingLoadId;\n let actionResults = await callDataStrategy(\n \"action\",\n state,\n fetchRequest,\n [match],\n requestMatches,\n key\n );\n let actionResult = actionResults[match.route.id];\n\n if (fetchRequest.signal.aborted) {\n // We can delete this so long as we weren't aborted by our own fetcher\n // re-submit which would have put _new_ controller is in fetchControllers\n if (fetchControllers.get(key) === abortController) {\n fetchControllers.delete(key);\n }\n return;\n }\n\n // When using v7_fetcherPersist, we don't want errors bubbling up to the UI\n // or redirects processed for unmounted fetchers so we just revert them to\n // idle\n if (future.v7_fetcherPersist && deletedFetchers.has(key)) {\n if (isRedirectResult(actionResult) || isErrorResult(actionResult)) {\n updateFetcherState(key, getDoneFetcher(undefined));\n return;\n }\n // Let SuccessResult's fall through for revalidation\n } else {\n if (isRedirectResult(actionResult)) {\n fetchControllers.delete(key);\n if (pendingNavigationLoadId > originatingLoadId) {\n // A new navigation was kicked off after our action started, so that\n // should take precedence over this redirect navigation. We already\n // set isRevalidationRequired so all loaders for the new route should\n // fire unless opted out via shouldRevalidate\n updateFetcherState(key, getDoneFetcher(undefined));\n return;\n } else {\n fetchRedirectIds.add(key);\n updateFetcherState(key, getLoadingFetcher(submission));\n return startRedirectNavigation(fetchRequest, actionResult, false, {\n fetcherSubmission: submission,\n });\n }\n }\n\n // Process any non-redirect errors thrown\n if (isErrorResult(actionResult)) {\n setFetcherError(key, routeId, actionResult.error);\n return;\n }\n }\n\n if (isDeferredResult(actionResult)) {\n throw getInternalRouterError(400, { type: \"defer-action\" });\n }\n\n // Start the data load for current matches, or the next location if we're\n // in the middle of a navigation\n let nextLocation = state.navigation.location || state.location;\n let revalidationRequest = createClientSideRequest(\n init.history,\n nextLocation,\n abortController.signal\n );\n let routesToUse = inFlightDataRoutes || dataRoutes;\n let matches =\n state.navigation.state !== \"idle\"\n ? matchRoutes(routesToUse, state.navigation.location, basename)\n : state.matches;\n\n invariant(matches, \"Didn't find any matches after fetcher action\");\n\n let loadId = ++incrementingLoadId;\n fetchReloadIds.set(key, loadId);\n\n let loadFetcher = getLoadingFetcher(submission, actionResult.data);\n state.fetchers.set(key, loadFetcher);\n\n let [matchesToLoad, revalidatingFetchers] = getMatchesToLoad(\n init.history,\n state,\n matches,\n submission,\n nextLocation,\n false,\n future.v7_skipActionErrorRevalidation,\n isRevalidationRequired,\n cancelledDeferredRoutes,\n cancelledFetcherLoads,\n deletedFetchers,\n fetchLoadMatches,\n fetchRedirectIds,\n routesToUse,\n basename,\n [match.route.id, actionResult]\n );\n\n // Put all revalidating fetchers into the loading state, except for the\n // current fetcher which we want to keep in it's current loading state which\n // contains it's action submission info + action data\n revalidatingFetchers\n .filter((rf) => rf.key !== key)\n .forEach((rf) => {\n let staleKey = rf.key;\n let existingFetcher = state.fetchers.get(staleKey);\n let revalidatingFetcher = getLoadingFetcher(\n undefined,\n existingFetcher ? existingFetcher.data : undefined\n );\n state.fetchers.set(staleKey, revalidatingFetcher);\n if (fetchControllers.has(staleKey)) {\n abortFetcher(staleKey);\n }\n if (rf.controller) {\n fetchControllers.set(staleKey, rf.controller);\n }\n });\n\n updateState({ fetchers: new Map(state.fetchers) });\n\n let abortPendingFetchRevalidations = () =>\n revalidatingFetchers.forEach((rf) => abortFetcher(rf.key));\n\n abortController.signal.addEventListener(\n \"abort\",\n abortPendingFetchRevalidations\n );\n\n let { loaderResults, fetcherResults } =\n await callLoadersAndMaybeResolveData(\n state,\n matches,\n matchesToLoad,\n revalidatingFetchers,\n revalidationRequest\n );\n\n if (abortController.signal.aborted) {\n return;\n }\n\n abortController.signal.removeEventListener(\n \"abort\",\n abortPendingFetchRevalidations\n );\n\n fetchReloadIds.delete(key);\n fetchControllers.delete(key);\n revalidatingFetchers.forEach((r) => fetchControllers.delete(r.key));\n\n let redirect = findRedirect(loaderResults);\n if (redirect) {\n return startRedirectNavigation(\n revalidationRequest,\n redirect.result,\n false\n );\n }\n\n redirect = findRedirect(fetcherResults);\n if (redirect) {\n // If this redirect came from a fetcher make sure we mark it in\n // fetchRedirectIds so it doesn't get revalidated on the next set of\n // loader executions\n fetchRedirectIds.add(redirect.key);\n return startRedirectNavigation(\n revalidationRequest,\n redirect.result,\n false\n );\n }\n\n // Process and commit output from loaders\n let { loaderData, errors } = processLoaderData(\n state,\n matches,\n matchesToLoad,\n loaderResults,\n undefined,\n revalidatingFetchers,\n fetcherResults,\n activeDeferreds\n );\n\n // Since we let revalidations complete even if the submitting fetcher was\n // deleted, only put it back to idle if it hasn't been deleted\n if (state.fetchers.has(key)) {\n let doneFetcher = getDoneFetcher(actionResult.data);\n state.fetchers.set(key, doneFetcher);\n }\n\n abortStaleFetchLoads(loadId);\n\n // If we are currently in a navigation loading state and this fetcher is\n // more recent than the navigation, we want the newer data so abort the\n // navigation and complete it with the fetcher data\n if (\n state.navigation.state === \"loading\" &&\n loadId > pendingNavigationLoadId\n ) {\n invariant(pendingAction, \"Expected pending action\");\n pendingNavigationController && pendingNavigationController.abort();\n\n completeNavigation(state.navigation.location, {\n matches,\n loaderData,\n errors,\n fetchers: new Map(state.fetchers),\n });\n } else {\n // otherwise just update with the fetcher data, preserving any existing\n // loaderData for loaders that did not need to reload. We have to\n // manually merge here since we aren't going through completeNavigation\n updateState({\n errors,\n loaderData: mergeLoaderData(\n state.loaderData,\n loaderData,\n matches,\n errors\n ),\n fetchers: new Map(state.fetchers),\n });\n isRevalidationRequired = false;\n }\n }\n\n // Call the matched loader for fetcher.load(), handling redirects, errors, etc.\n async function handleFetcherLoader(\n key: string,\n routeId: string,\n path: string,\n match: AgnosticDataRouteMatch,\n matches: AgnosticDataRouteMatch[],\n isFogOfWar: boolean,\n flushSync: boolean,\n submission?: Submission\n ) {\n let existingFetcher = state.fetchers.get(key);\n updateFetcherState(\n key,\n getLoadingFetcher(\n submission,\n existingFetcher ? existingFetcher.data : undefined\n ),\n { flushSync }\n );\n\n let abortController = new AbortController();\n let fetchRequest = createClientSideRequest(\n init.history,\n path,\n abortController.signal\n );\n\n if (isFogOfWar) {\n let discoverResult = await discoverRoutes(\n matches,\n path,\n fetchRequest.signal\n );\n\n if (discoverResult.type === \"aborted\") {\n return;\n } else if (discoverResult.type === \"error\") {\n let { error } = handleDiscoverRouteError(path, discoverResult);\n setFetcherError(key, routeId, error, { flushSync });\n return;\n } else if (!discoverResult.matches) {\n setFetcherError(\n key,\n routeId,\n getInternalRouterError(404, { pathname: path }),\n { flushSync }\n );\n return;\n } else {\n matches = discoverResult.matches;\n match = getTargetMatch(matches, path);\n }\n }\n\n // Call the loader for this fetcher route match\n fetchControllers.set(key, abortController);\n\n let originatingLoadId = incrementingLoadId;\n let results = await callDataStrategy(\n \"loader\",\n state,\n fetchRequest,\n [match],\n matches,\n key\n );\n let result = results[match.route.id];\n\n // Deferred isn't supported for fetcher loads, await everything and treat it\n // as a normal load. resolveDeferredData will return undefined if this\n // fetcher gets aborted, so we just leave result untouched and short circuit\n // below if that happens\n if (isDeferredResult(result)) {\n result =\n (await resolveDeferredData(result, fetchRequest.signal, true)) ||\n result;\n }\n\n // We can delete this so long as we weren't aborted by our our own fetcher\n // re-load which would have put _new_ controller is in fetchControllers\n if (fetchControllers.get(key) === abortController) {\n fetchControllers.delete(key);\n }\n\n if (fetchRequest.signal.aborted) {\n return;\n }\n\n // We don't want errors bubbling up or redirects followed for unmounted\n // fetchers, so short circuit here if it was removed from the UI\n if (deletedFetchers.has(key)) {\n updateFetcherState(key, getDoneFetcher(undefined));\n return;\n }\n\n // If the loader threw a redirect Response, start a new REPLACE navigation\n if (isRedirectResult(result)) {\n if (pendingNavigationLoadId > originatingLoadId) {\n // A new navigation was kicked off after our loader started, so that\n // should take precedence over this redirect navigation\n updateFetcherState(key, getDoneFetcher(undefined));\n return;\n } else {\n fetchRedirectIds.add(key);\n await startRedirectNavigation(fetchRequest, result, false);\n return;\n }\n }\n\n // Process any non-redirect errors thrown\n if (isErrorResult(result)) {\n setFetcherError(key, routeId, result.error);\n return;\n }\n\n invariant(!isDeferredResult(result), \"Unhandled fetcher deferred data\");\n\n // Put the fetcher back into an idle state\n updateFetcherState(key, getDoneFetcher(result.data));\n }\n\n /**\n * Utility function to handle redirects returned from an action or loader.\n * Normally, a redirect \"replaces\" the navigation that triggered it. So, for\n * example:\n *\n * - user is on /a\n * - user clicks a link to /b\n * - loader for /b redirects to /c\n *\n * In a non-JS app the browser would track the in-flight navigation to /b and\n * then replace it with /c when it encountered the redirect response. In\n * the end it would only ever update the URL bar with /c.\n *\n * In client-side routing using pushState/replaceState, we aim to emulate\n * this behavior and we also do not update history until the end of the\n * navigation (including processed redirects). This means that we never\n * actually touch history until we've processed redirects, so we just use\n * the history action from the original navigation (PUSH or REPLACE).\n */\n async function startRedirectNavigation(\n request: Request,\n redirect: RedirectResult,\n isNavigation: boolean,\n {\n submission,\n fetcherSubmission,\n replace,\n }: {\n submission?: Submission;\n fetcherSubmission?: Submission;\n replace?: boolean;\n } = {}\n ) {\n if (redirect.response.headers.has(\"X-Remix-Revalidate\")) {\n isRevalidationRequired = true;\n }\n\n let location = redirect.response.headers.get(\"Location\");\n invariant(location, \"Expected a Location header on the redirect Response\");\n location = normalizeRedirectLocation(\n location,\n new URL(request.url),\n basename\n );\n let redirectLocation = createLocation(state.location, location, {\n _isRedirect: true,\n });\n\n if (isBrowser) {\n let isDocumentReload = false;\n\n if (redirect.response.headers.has(\"X-Remix-Reload-Document\")) {\n // Hard reload if the response contained X-Remix-Reload-Document\n isDocumentReload = true;\n } else if (ABSOLUTE_URL_REGEX.test(location)) {\n const url = init.history.createURL(location);\n isDocumentReload =\n // Hard reload if it's an absolute URL to a new origin\n url.origin !== routerWindow.location.origin ||\n // Hard reload if it's an absolute URL that does not match our basename\n stripBasename(url.pathname, basename) == null;\n }\n\n if (isDocumentReload) {\n if (replace) {\n routerWindow.location.replace(location);\n } else {\n routerWindow.location.assign(location);\n }\n return;\n }\n }\n\n // There's no need to abort on redirects, since we don't detect the\n // redirect until the action/loaders have settled\n pendingNavigationController = null;\n\n let redirectHistoryAction =\n replace === true || redirect.response.headers.has(\"X-Remix-Replace\")\n ? HistoryAction.Replace\n : HistoryAction.Push;\n\n // Use the incoming submission if provided, fallback on the active one in\n // state.navigation\n let { formMethod, formAction, formEncType } = state.navigation;\n if (\n !submission &&\n !fetcherSubmission &&\n formMethod &&\n formAction &&\n formEncType\n ) {\n submission = getSubmissionFromNavigation(state.navigation);\n }\n\n // If this was a 307/308 submission we want to preserve the HTTP method and\n // re-submit the GET/POST/PUT/PATCH/DELETE as a submission navigation to the\n // redirected location\n let activeSubmission = submission || fetcherSubmission;\n if (\n redirectPreserveMethodStatusCodes.has(redirect.response.status) &&\n activeSubmission &&\n isMutationMethod(activeSubmission.formMethod)\n ) {\n await startNavigation(redirectHistoryAction, redirectLocation, {\n submission: {\n ...activeSubmission,\n formAction: location,\n },\n // Preserve these flags across redirects\n preventScrollReset: pendingPreventScrollReset,\n enableViewTransition: isNavigation\n ? pendingViewTransitionEnabled\n : undefined,\n });\n } else {\n // If we have a navigation submission, we will preserve it through the\n // redirect navigation\n let overrideNavigation = getLoadingNavigation(\n redirectLocation,\n submission\n );\n await startNavigation(redirectHistoryAction, redirectLocation, {\n overrideNavigation,\n // Send fetcher submissions through for shouldRevalidate\n fetcherSubmission,\n // Preserve these flags across redirects\n preventScrollReset: pendingPreventScrollReset,\n enableViewTransition: isNavigation\n ? pendingViewTransitionEnabled\n : undefined,\n });\n }\n }\n\n // Utility wrapper for calling dataStrategy client-side without having to\n // pass around the manifest, mapRouteProperties, etc.\n async function callDataStrategy(\n type: \"loader\" | \"action\",\n state: RouterState,\n request: Request,\n matchesToLoad: AgnosticDataRouteMatch[],\n matches: AgnosticDataRouteMatch[],\n fetcherKey: string | null\n ): Promise> {\n let results: Record;\n let dataResults: Record = {};\n try {\n results = await callDataStrategyImpl(\n dataStrategyImpl,\n type,\n state,\n request,\n matchesToLoad,\n matches,\n fetcherKey,\n manifest,\n mapRouteProperties\n );\n } catch (e) {\n // If the outer dataStrategy method throws, just return the error for all\n // matches - and it'll naturally bubble to the root\n matchesToLoad.forEach((m) => {\n dataResults[m.route.id] = {\n type: ResultType.error,\n error: e,\n };\n });\n return dataResults;\n }\n\n for (let [routeId, result] of Object.entries(results)) {\n if (isRedirectDataStrategyResultResult(result)) {\n let response = result.result as Response;\n dataResults[routeId] = {\n type: ResultType.redirect,\n response: normalizeRelativeRoutingRedirectResponse(\n response,\n request,\n routeId,\n matches,\n basename,\n future.v7_relativeSplatPath\n ),\n };\n } else {\n dataResults[routeId] = await convertDataStrategyResultToDataResult(\n result\n );\n }\n }\n\n return dataResults;\n }\n\n async function callLoadersAndMaybeResolveData(\n state: RouterState,\n matches: AgnosticDataRouteMatch[],\n matchesToLoad: AgnosticDataRouteMatch[],\n fetchersToLoad: RevalidatingFetcher[],\n request: Request\n ) {\n let currentMatches = state.matches;\n\n // Kick off loaders and fetchers in parallel\n let loaderResultsPromise = callDataStrategy(\n \"loader\",\n state,\n request,\n matchesToLoad,\n matches,\n null\n );\n\n let fetcherResultsPromise = Promise.all(\n fetchersToLoad.map(async (f) => {\n if (f.matches && f.match && f.controller) {\n let results = await callDataStrategy(\n \"loader\",\n state,\n createClientSideRequest(init.history, f.path, f.controller.signal),\n [f.match],\n f.matches,\n f.key\n );\n let result = results[f.match.route.id];\n // Fetcher results are keyed by fetcher key from here on out, not routeId\n return { [f.key]: result };\n } else {\n return Promise.resolve({\n [f.key]: {\n type: ResultType.error,\n error: getInternalRouterError(404, {\n pathname: f.path,\n }),\n } as ErrorResult,\n });\n }\n })\n );\n\n let loaderResults = await loaderResultsPromise;\n let fetcherResults = (await fetcherResultsPromise).reduce(\n (acc, r) => Object.assign(acc, r),\n {}\n );\n\n await Promise.all([\n resolveNavigationDeferredResults(\n matches,\n loaderResults,\n request.signal,\n currentMatches,\n state.loaderData\n ),\n resolveFetcherDeferredResults(matches, fetcherResults, fetchersToLoad),\n ]);\n\n return {\n loaderResults,\n fetcherResults,\n };\n }\n\n function interruptActiveLoads() {\n // Every interruption triggers a revalidation\n isRevalidationRequired = true;\n\n // Cancel pending route-level deferreds and mark cancelled routes for\n // revalidation\n cancelledDeferredRoutes.push(...cancelActiveDeferreds());\n\n // Abort in-flight fetcher loads\n fetchLoadMatches.forEach((_, key) => {\n if (fetchControllers.has(key)) {\n cancelledFetcherLoads.add(key);\n abortFetcher(key);\n }\n });\n }\n\n function updateFetcherState(\n key: string,\n fetcher: Fetcher,\n opts: { flushSync?: boolean } = {}\n ) {\n state.fetchers.set(key, fetcher);\n updateState(\n { fetchers: new Map(state.fetchers) },\n { flushSync: (opts && opts.flushSync) === true }\n );\n }\n\n function setFetcherError(\n key: string,\n routeId: string,\n error: any,\n opts: { flushSync?: boolean } = {}\n ) {\n let boundaryMatch = findNearestBoundary(state.matches, routeId);\n deleteFetcher(key);\n updateState(\n {\n errors: {\n [boundaryMatch.route.id]: error,\n },\n fetchers: new Map(state.fetchers),\n },\n { flushSync: (opts && opts.flushSync) === true }\n );\n }\n\n function getFetcher(key: string): Fetcher {\n if (future.v7_fetcherPersist) {\n activeFetchers.set(key, (activeFetchers.get(key) || 0) + 1);\n // If this fetcher was previously marked for deletion, unmark it since we\n // have a new instance\n if (deletedFetchers.has(key)) {\n deletedFetchers.delete(key);\n }\n }\n return state.fetchers.get(key) || IDLE_FETCHER;\n }\n\n function deleteFetcher(key: string): void {\n let fetcher = state.fetchers.get(key);\n // Don't abort the controller if this is a deletion of a fetcher.submit()\n // in it's loading phase since - we don't want to abort the corresponding\n // revalidation and want them to complete and land\n if (\n fetchControllers.has(key) &&\n !(fetcher && fetcher.state === \"loading\" && fetchReloadIds.has(key))\n ) {\n abortFetcher(key);\n }\n fetchLoadMatches.delete(key);\n fetchReloadIds.delete(key);\n fetchRedirectIds.delete(key);\n deletedFetchers.delete(key);\n cancelledFetcherLoads.delete(key);\n state.fetchers.delete(key);\n }\n\n function deleteFetcherAndUpdateState(key: string): void {\n if (future.v7_fetcherPersist) {\n let count = (activeFetchers.get(key) || 0) - 1;\n if (count <= 0) {\n activeFetchers.delete(key);\n deletedFetchers.add(key);\n } else {\n activeFetchers.set(key, count);\n }\n } else {\n deleteFetcher(key);\n }\n updateState({ fetchers: new Map(state.fetchers) });\n }\n\n function abortFetcher(key: string) {\n let controller = fetchControllers.get(key);\n invariant(controller, `Expected fetch controller: ${key}`);\n controller.abort();\n fetchControllers.delete(key);\n }\n\n function markFetchersDone(keys: string[]) {\n for (let key of keys) {\n let fetcher = getFetcher(key);\n let doneFetcher = getDoneFetcher(fetcher.data);\n state.fetchers.set(key, doneFetcher);\n }\n }\n\n function markFetchRedirectsDone(): boolean {\n let doneKeys = [];\n let updatedFetchers = false;\n for (let key of fetchRedirectIds) {\n let fetcher = state.fetchers.get(key);\n invariant(fetcher, `Expected fetcher: ${key}`);\n if (fetcher.state === \"loading\") {\n fetchRedirectIds.delete(key);\n doneKeys.push(key);\n updatedFetchers = true;\n }\n }\n markFetchersDone(doneKeys);\n return updatedFetchers;\n }\n\n function abortStaleFetchLoads(landedId: number): boolean {\n let yeetedKeys = [];\n for (let [key, id] of fetchReloadIds) {\n if (id < landedId) {\n let fetcher = state.fetchers.get(key);\n invariant(fetcher, `Expected fetcher: ${key}`);\n if (fetcher.state === \"loading\") {\n abortFetcher(key);\n fetchReloadIds.delete(key);\n yeetedKeys.push(key);\n }\n }\n }\n markFetchersDone(yeetedKeys);\n return yeetedKeys.length > 0;\n }\n\n function getBlocker(key: string, fn: BlockerFunction) {\n let blocker: Blocker = state.blockers.get(key) || IDLE_BLOCKER;\n\n if (blockerFunctions.get(key) !== fn) {\n blockerFunctions.set(key, fn);\n }\n\n return blocker;\n }\n\n function deleteBlocker(key: string) {\n state.blockers.delete(key);\n blockerFunctions.delete(key);\n }\n\n // Utility function to update blockers, ensuring valid state transitions\n function updateBlocker(key: string, newBlocker: Blocker) {\n let blocker = state.blockers.get(key) || IDLE_BLOCKER;\n\n // Poor mans state machine :)\n // https://mermaid.live/edit#pako:eNqVkc9OwzAMxl8l8nnjAYrEtDIOHEBIgwvKJTReGy3_lDpIqO27k6awMG0XcrLlnz87nwdonESogKXXBuE79rq75XZO3-yHds0RJVuv70YrPlUrCEe2HfrORS3rubqZfuhtpg5C9wk5tZ4VKcRUq88q9Z8RS0-48cE1iHJkL0ugbHuFLus9L6spZy8nX9MP2CNdomVaposqu3fGayT8T8-jJQwhepo_UtpgBQaDEUom04dZhAN1aJBDlUKJBxE1ceB2Smj0Mln-IBW5AFU2dwUiktt_2Qaq2dBfaKdEup85UV7Yd-dKjlnkabl2Pvr0DTkTreM\n invariant(\n (blocker.state === \"unblocked\" && newBlocker.state === \"blocked\") ||\n (blocker.state === \"blocked\" && newBlocker.state === \"blocked\") ||\n (blocker.state === \"blocked\" && newBlocker.state === \"proceeding\") ||\n (blocker.state === \"blocked\" && newBlocker.state === \"unblocked\") ||\n (blocker.state === \"proceeding\" && newBlocker.state === \"unblocked\"),\n `Invalid blocker state transition: ${blocker.state} -> ${newBlocker.state}`\n );\n\n let blockers = new Map(state.blockers);\n blockers.set(key, newBlocker);\n updateState({ blockers });\n }\n\n function shouldBlockNavigation({\n currentLocation,\n nextLocation,\n historyAction,\n }: {\n currentLocation: Location;\n nextLocation: Location;\n historyAction: HistoryAction;\n }): string | undefined {\n if (blockerFunctions.size === 0) {\n return;\n }\n\n // We ony support a single active blocker at the moment since we don't have\n // any compelling use cases for multi-blocker yet\n if (blockerFunctions.size > 1) {\n warning(false, \"A router only supports one blocker at a time\");\n }\n\n let entries = Array.from(blockerFunctions.entries());\n let [blockerKey, blockerFunction] = entries[entries.length - 1];\n let blocker = state.blockers.get(blockerKey);\n\n if (blocker && blocker.state === \"proceeding\") {\n // If the blocker is currently proceeding, we don't need to re-check\n // it and can let this navigation continue\n return;\n }\n\n // At this point, we know we're unblocked/blocked so we need to check the\n // user-provided blocker function\n if (blockerFunction({ currentLocation, nextLocation, historyAction })) {\n return blockerKey;\n }\n }\n\n function handleNavigational404(pathname: string) {\n let error = getInternalRouterError(404, { pathname });\n let routesToUse = inFlightDataRoutes || dataRoutes;\n let { matches, route } = getShortCircuitMatches(routesToUse);\n\n // Cancel all pending deferred on 404s since we don't keep any routes\n cancelActiveDeferreds();\n\n return { notFoundMatches: matches, route, error };\n }\n\n function handleDiscoverRouteError(\n pathname: string,\n discoverResult: DiscoverRoutesErrorResult\n ) {\n return {\n boundaryId: findNearestBoundary(discoverResult.partialMatches).route.id,\n error: getInternalRouterError(400, {\n type: \"route-discovery\",\n pathname,\n message:\n discoverResult.error != null && \"message\" in discoverResult.error\n ? discoverResult.error\n : String(discoverResult.error),\n }),\n };\n }\n\n function cancelActiveDeferreds(\n predicate?: (routeId: string) => boolean\n ): string[] {\n let cancelledRouteIds: string[] = [];\n activeDeferreds.forEach((dfd, routeId) => {\n if (!predicate || predicate(routeId)) {\n // Cancel the deferred - but do not remove from activeDeferreds here -\n // we rely on the subscribers to do that so our tests can assert proper\n // cleanup via _internalActiveDeferreds\n dfd.cancel();\n cancelledRouteIds.push(routeId);\n activeDeferreds.delete(routeId);\n }\n });\n return cancelledRouteIds;\n }\n\n // Opt in to capturing and reporting scroll positions during navigations,\n // used by the component\n function enableScrollRestoration(\n positions: Record,\n getPosition: GetScrollPositionFunction,\n getKey?: GetScrollRestorationKeyFunction\n ) {\n savedScrollPositions = positions;\n getScrollPosition = getPosition;\n getScrollRestorationKey = getKey || null;\n\n // Perform initial hydration scroll restoration, since we miss the boat on\n // the initial updateState() because we've not yet rendered \n // and therefore have no savedScrollPositions available\n if (!initialScrollRestored && state.navigation === IDLE_NAVIGATION) {\n initialScrollRestored = true;\n let y = getSavedScrollPosition(state.location, state.matches);\n if (y != null) {\n updateState({ restoreScrollPosition: y });\n }\n }\n\n return () => {\n savedScrollPositions = null;\n getScrollPosition = null;\n getScrollRestorationKey = null;\n };\n }\n\n function getScrollKey(location: Location, matches: AgnosticDataRouteMatch[]) {\n if (getScrollRestorationKey) {\n let key = getScrollRestorationKey(\n location,\n matches.map((m) => convertRouteMatchToUiMatch(m, state.loaderData))\n );\n return key || location.key;\n }\n return location.key;\n }\n\n function saveScrollPosition(\n location: Location,\n matches: AgnosticDataRouteMatch[]\n ): void {\n if (savedScrollPositions && getScrollPosition) {\n let key = getScrollKey(location, matches);\n savedScrollPositions[key] = getScrollPosition();\n }\n }\n\n function getSavedScrollPosition(\n location: Location,\n matches: AgnosticDataRouteMatch[]\n ): number | null {\n if (savedScrollPositions) {\n let key = getScrollKey(location, matches);\n let y = savedScrollPositions[key];\n if (typeof y === \"number\") {\n return y;\n }\n }\n return null;\n }\n\n function checkFogOfWar(\n matches: AgnosticDataRouteMatch[] | null,\n routesToUse: AgnosticDataRouteObject[],\n pathname: string\n ): { active: boolean; matches: AgnosticDataRouteMatch[] | null } {\n if (patchRoutesOnNavigationImpl) {\n // Don't bother re-calling patchRouteOnMiss for a path we've already\n // processed. the last execution would have patched the route tree\n // accordingly so `matches` here are already accurate.\n if (discoveredRoutes.has(pathname)) {\n return { active: false, matches };\n }\n\n if (!matches) {\n let fogMatches = matchRoutesImpl(\n routesToUse,\n pathname,\n basename,\n true\n );\n\n return { active: true, matches: fogMatches || [] };\n } else {\n if (Object.keys(matches[0].params).length > 0) {\n // If we matched a dynamic param or a splat, it might only be because\n // we haven't yet discovered other routes that would match with a\n // higher score. Call patchRoutesOnNavigation just to be sure\n let partialMatches = matchRoutesImpl(\n routesToUse,\n pathname,\n basename,\n true\n );\n return { active: true, matches: partialMatches };\n }\n }\n }\n\n return { active: false, matches: null };\n }\n\n type DiscoverRoutesSuccessResult = {\n type: \"success\";\n matches: AgnosticDataRouteMatch[] | null;\n };\n type DiscoverRoutesErrorResult = {\n type: \"error\";\n error: any;\n partialMatches: AgnosticDataRouteMatch[];\n };\n type DiscoverRoutesAbortedResult = { type: \"aborted\" };\n type DiscoverRoutesResult =\n | DiscoverRoutesSuccessResult\n | DiscoverRoutesErrorResult\n | DiscoverRoutesAbortedResult;\n\n async function discoverRoutes(\n matches: AgnosticDataRouteMatch[],\n pathname: string,\n signal: AbortSignal\n ): Promise {\n let partialMatches: AgnosticDataRouteMatch[] | null = matches;\n while (true) {\n let isNonHMR = inFlightDataRoutes == null;\n let routesToUse = inFlightDataRoutes || dataRoutes;\n try {\n await loadLazyRouteChildren(\n patchRoutesOnNavigationImpl!,\n pathname,\n partialMatches,\n routesToUse,\n manifest,\n mapRouteProperties,\n pendingPatchRoutes,\n signal\n );\n } catch (e) {\n return { type: \"error\", error: e, partialMatches };\n } finally {\n // If we are not in the middle of an HMR revalidation and we changed the\n // routes, provide a new identity so when we `updateState` at the end of\n // this navigation/fetch `router.routes` will be a new identity and\n // trigger a re-run of memoized `router.routes` dependencies.\n // HMR will already update the identity and reflow when it lands\n // `inFlightDataRoutes` in `completeNavigation`\n if (isNonHMR) {\n dataRoutes = [...dataRoutes];\n }\n }\n\n if (signal.aborted) {\n return { type: \"aborted\" };\n }\n\n let newMatches = matchRoutes(routesToUse, pathname, basename);\n if (newMatches) {\n addToFifoQueue(pathname, discoveredRoutes);\n return { type: \"success\", matches: newMatches };\n }\n\n let newPartialMatches = matchRoutesImpl(\n routesToUse,\n pathname,\n basename,\n true\n );\n\n // Avoid loops if the second pass results in the same partial matches\n if (\n !newPartialMatches ||\n (partialMatches.length === newPartialMatches.length &&\n partialMatches.every(\n (m, i) => m.route.id === newPartialMatches![i].route.id\n ))\n ) {\n addToFifoQueue(pathname, discoveredRoutes);\n return { type: \"success\", matches: null };\n }\n\n partialMatches = newPartialMatches;\n }\n }\n\n function addToFifoQueue(path: string, queue: Set) {\n if (queue.size >= discoveredRoutesMaxSize) {\n let first = queue.values().next().value;\n queue.delete(first);\n }\n queue.add(path);\n }\n\n function _internalSetRoutes(newRoutes: AgnosticDataRouteObject[]) {\n manifest = {};\n inFlightDataRoutes = convertRoutesToDataRoutes(\n newRoutes,\n mapRouteProperties,\n undefined,\n manifest\n );\n }\n\n function patchRoutes(\n routeId: string | null,\n children: AgnosticRouteObject[]\n ): void {\n let isNonHMR = inFlightDataRoutes == null;\n let routesToUse = inFlightDataRoutes || dataRoutes;\n patchRoutesImpl(\n routeId,\n children,\n routesToUse,\n manifest,\n mapRouteProperties\n );\n\n // If we are not in the middle of an HMR revalidation and we changed the\n // routes, provide a new identity and trigger a reflow via `updateState`\n // to re-run memoized `router.routes` dependencies.\n // HMR will already update the identity and reflow when it lands\n // `inFlightDataRoutes` in `completeNavigation`\n if (isNonHMR) {\n dataRoutes = [...dataRoutes];\n updateState({});\n }\n }\n\n router = {\n get basename() {\n return basename;\n },\n get future() {\n return future;\n },\n get state() {\n return state;\n },\n get routes() {\n return dataRoutes;\n },\n get window() {\n return routerWindow;\n },\n initialize,\n subscribe,\n enableScrollRestoration,\n navigate,\n fetch,\n revalidate,\n // Passthrough to history-aware createHref used by useHref so we get proper\n // hash-aware URLs in DOM paths\n createHref: (to: To) => init.history.createHref(to),\n encodeLocation: (to: To) => init.history.encodeLocation(to),\n getFetcher,\n deleteFetcher: deleteFetcherAndUpdateState,\n dispose,\n getBlocker,\n deleteBlocker,\n patchRoutes,\n _internalFetchControllers: fetchControllers,\n _internalActiveDeferreds: activeDeferreds,\n // TODO: Remove setRoutes, it's temporary to avoid dealing with\n // updating the tree while validating the update algorithm.\n _internalSetRoutes,\n };\n\n return router;\n}\n//#endregion\n\n////////////////////////////////////////////////////////////////////////////////\n//#region createStaticHandler\n////////////////////////////////////////////////////////////////////////////////\n\nexport const UNSAFE_DEFERRED_SYMBOL = Symbol(\"deferred\");\n\n/**\n * Future flags to toggle new feature behavior\n */\nexport interface StaticHandlerFutureConfig {\n v7_relativeSplatPath: boolean;\n v7_throwAbortReason: boolean;\n}\n\nexport interface CreateStaticHandlerOptions {\n basename?: string;\n /**\n * @deprecated Use `mapRouteProperties` instead\n */\n detectErrorBoundary?: DetectErrorBoundaryFunction;\n mapRouteProperties?: MapRoutePropertiesFunction;\n future?: Partial;\n}\n\nexport function createStaticHandler(\n routes: AgnosticRouteObject[],\n opts?: CreateStaticHandlerOptions\n): StaticHandler {\n invariant(\n routes.length > 0,\n \"You must provide a non-empty routes array to createStaticHandler\"\n );\n\n let manifest: RouteManifest = {};\n let basename = (opts ? opts.basename : null) || \"/\";\n let mapRouteProperties: MapRoutePropertiesFunction;\n if (opts?.mapRouteProperties) {\n mapRouteProperties = opts.mapRouteProperties;\n } else if (opts?.detectErrorBoundary) {\n // If they are still using the deprecated version, wrap it with the new API\n let detectErrorBoundary = opts.detectErrorBoundary;\n mapRouteProperties = (route) => ({\n hasErrorBoundary: detectErrorBoundary(route),\n });\n } else {\n mapRouteProperties = defaultMapRouteProperties;\n }\n // Config driven behavior flags\n let future: StaticHandlerFutureConfig = {\n v7_relativeSplatPath: false,\n v7_throwAbortReason: false,\n ...(opts ? opts.future : null),\n };\n\n let dataRoutes = convertRoutesToDataRoutes(\n routes,\n mapRouteProperties,\n undefined,\n manifest\n );\n\n /**\n * The query() method is intended for document requests, in which we want to\n * call an optional action and potentially multiple loaders for all nested\n * routes. It returns a StaticHandlerContext object, which is very similar\n * to the router state (location, loaderData, actionData, errors, etc.) and\n * also adds SSR-specific information such as the statusCode and headers\n * from action/loaders Responses.\n *\n * It _should_ never throw and should report all errors through the\n * returned context.errors object, properly associating errors to their error\n * boundary. Additionally, it tracks _deepestRenderedBoundaryId which can be\n * used to emulate React error boundaries during SSr by performing a second\n * pass only down to the boundaryId.\n *\n * The one exception where we do not return a StaticHandlerContext is when a\n * redirect response is returned or thrown from any action/loader. We\n * propagate that out and return the raw Response so the HTTP server can\n * return it directly.\n *\n * - `opts.requestContext` is an optional server context that will be passed\n * to actions/loaders in the `context` parameter\n * - `opts.skipLoaderErrorBubbling` is an optional parameter that will prevent\n * the bubbling of errors which allows single-fetch-type implementations\n * where the client will handle the bubbling and we may need to return data\n * for the handling route\n */\n async function query(\n request: Request,\n {\n requestContext,\n skipLoaderErrorBubbling,\n unstable_dataStrategy,\n }: {\n requestContext?: unknown;\n skipLoaderErrorBubbling?: boolean;\n unstable_dataStrategy?: DataStrategyFunction;\n } = {}\n ): Promise {\n let url = new URL(request.url);\n let method = request.method;\n let location = createLocation(\"\", createPath(url), null, \"default\");\n let matches = matchRoutes(dataRoutes, location, basename);\n\n // SSR supports HEAD requests while SPA doesn't\n if (!isValidMethod(method) && method !== \"HEAD\") {\n let error = getInternalRouterError(405, { method });\n let { matches: methodNotAllowedMatches, route } =\n getShortCircuitMatches(dataRoutes);\n return {\n basename,\n location,\n matches: methodNotAllowedMatches,\n loaderData: {},\n actionData: null,\n errors: {\n [route.id]: error,\n },\n statusCode: error.status,\n loaderHeaders: {},\n actionHeaders: {},\n activeDeferreds: null,\n };\n } else if (!matches) {\n let error = getInternalRouterError(404, { pathname: location.pathname });\n let { matches: notFoundMatches, route } =\n getShortCircuitMatches(dataRoutes);\n return {\n basename,\n location,\n matches: notFoundMatches,\n loaderData: {},\n actionData: null,\n errors: {\n [route.id]: error,\n },\n statusCode: error.status,\n loaderHeaders: {},\n actionHeaders: {},\n activeDeferreds: null,\n };\n }\n\n let result = await queryImpl(\n request,\n location,\n matches,\n requestContext,\n unstable_dataStrategy || null,\n skipLoaderErrorBubbling === true,\n null\n );\n if (isResponse(result)) {\n return result;\n }\n\n // When returning StaticHandlerContext, we patch back in the location here\n // since we need it for React Context. But this helps keep our submit and\n // loadRouteData operating on a Request instead of a Location\n return { location, basename, ...result };\n }\n\n /**\n * The queryRoute() method is intended for targeted route requests, either\n * for fetch ?_data requests or resource route requests. In this case, we\n * are only ever calling a single action or loader, and we are returning the\n * returned value directly. In most cases, this will be a Response returned\n * from the action/loader, but it may be a primitive or other value as well -\n * and in such cases the calling context should handle that accordingly.\n *\n * We do respect the throw/return differentiation, so if an action/loader\n * throws, then this method will throw the value. This is important so we\n * can do proper boundary identification in Remix where a thrown Response\n * must go to the Catch Boundary but a returned Response is happy-path.\n *\n * One thing to note is that any Router-initiated Errors that make sense\n * to associate with a status code will be thrown as an ErrorResponse\n * instance which include the raw Error, such that the calling context can\n * serialize the error as they see fit while including the proper response\n * code. Examples here are 404 and 405 errors that occur prior to reaching\n * any user-defined loaders.\n *\n * - `opts.routeId` allows you to specify the specific route handler to call.\n * If not provided the handler will determine the proper route by matching\n * against `request.url`\n * - `opts.requestContext` is an optional server context that will be passed\n * to actions/loaders in the `context` parameter\n */\n async function queryRoute(\n request: Request,\n {\n routeId,\n requestContext,\n unstable_dataStrategy,\n }: {\n requestContext?: unknown;\n routeId?: string;\n unstable_dataStrategy?: DataStrategyFunction;\n } = {}\n ): Promise {\n let url = new URL(request.url);\n let method = request.method;\n let location = createLocation(\"\", createPath(url), null, \"default\");\n let matches = matchRoutes(dataRoutes, location, basename);\n\n // SSR supports HEAD requests while SPA doesn't\n if (!isValidMethod(method) && method !== \"HEAD\" && method !== \"OPTIONS\") {\n throw getInternalRouterError(405, { method });\n } else if (!matches) {\n throw getInternalRouterError(404, { pathname: location.pathname });\n }\n\n let match = routeId\n ? matches.find((m) => m.route.id === routeId)\n : getTargetMatch(matches, location);\n\n if (routeId && !match) {\n throw getInternalRouterError(403, {\n pathname: location.pathname,\n routeId,\n });\n } else if (!match) {\n // This should never hit I don't think?\n throw getInternalRouterError(404, { pathname: location.pathname });\n }\n\n let result = await queryImpl(\n request,\n location,\n matches,\n requestContext,\n unstable_dataStrategy || null,\n false,\n match\n );\n\n if (isResponse(result)) {\n return result;\n }\n\n let error = result.errors ? Object.values(result.errors)[0] : undefined;\n if (error !== undefined) {\n // If we got back result.errors, that means the loader/action threw\n // _something_ that wasn't a Response, but it's not guaranteed/required\n // to be an `instanceof Error` either, so we have to use throw here to\n // preserve the \"error\" state outside of queryImpl.\n throw error;\n }\n\n // Pick off the right state value to return\n if (result.actionData) {\n return Object.values(result.actionData)[0];\n }\n\n if (result.loaderData) {\n let data = Object.values(result.loaderData)[0];\n if (result.activeDeferreds?.[match.route.id]) {\n data[UNSAFE_DEFERRED_SYMBOL] = result.activeDeferreds[match.route.id];\n }\n return data;\n }\n\n return undefined;\n }\n\n async function queryImpl(\n request: Request,\n location: Location,\n matches: AgnosticDataRouteMatch[],\n requestContext: unknown,\n unstable_dataStrategy: DataStrategyFunction | null,\n skipLoaderErrorBubbling: boolean,\n routeMatch: AgnosticDataRouteMatch | null\n ): Promise | Response> {\n invariant(\n request.signal,\n \"query()/queryRoute() requests must contain an AbortController signal\"\n );\n\n try {\n if (isMutationMethod(request.method.toLowerCase())) {\n let result = await submit(\n request,\n matches,\n routeMatch || getTargetMatch(matches, location),\n requestContext,\n unstable_dataStrategy,\n skipLoaderErrorBubbling,\n routeMatch != null\n );\n return result;\n }\n\n let result = await loadRouteData(\n request,\n matches,\n requestContext,\n unstable_dataStrategy,\n skipLoaderErrorBubbling,\n routeMatch\n );\n return isResponse(result)\n ? result\n : {\n ...result,\n actionData: null,\n actionHeaders: {},\n };\n } catch (e) {\n // If the user threw/returned a Response in callLoaderOrAction for a\n // `queryRoute` call, we throw the `DataStrategyResult` to bail out early\n // and then return or throw the raw Response here accordingly\n if (isDataStrategyResult(e) && isResponse(e.result)) {\n if (e.type === ResultType.error) {\n throw e.result;\n }\n return e.result;\n }\n // Redirects are always returned since they don't propagate to catch\n // boundaries\n if (isRedirectResponse(e)) {\n return e;\n }\n throw e;\n }\n }\n\n async function submit(\n request: Request,\n matches: AgnosticDataRouteMatch[],\n actionMatch: AgnosticDataRouteMatch,\n requestContext: unknown,\n unstable_dataStrategy: DataStrategyFunction | null,\n skipLoaderErrorBubbling: boolean,\n isRouteRequest: boolean\n ): Promise | Response> {\n let result: DataResult;\n\n if (!actionMatch.route.action && !actionMatch.route.lazy) {\n let error = getInternalRouterError(405, {\n method: request.method,\n pathname: new URL(request.url).pathname,\n routeId: actionMatch.route.id,\n });\n if (isRouteRequest) {\n throw error;\n }\n result = {\n type: ResultType.error,\n error,\n };\n } else {\n let results = await callDataStrategy(\n \"action\",\n request,\n [actionMatch],\n matches,\n isRouteRequest,\n requestContext,\n unstable_dataStrategy\n );\n result = results[actionMatch.route.id];\n\n if (request.signal.aborted) {\n throwStaticHandlerAbortedError(request, isRouteRequest, future);\n }\n }\n\n if (isRedirectResult(result)) {\n // Uhhhh - this should never happen, we should always throw these from\n // callLoaderOrAction, but the type narrowing here keeps TS happy and we\n // can get back on the \"throw all redirect responses\" train here should\n // this ever happen :/\n throw new Response(null, {\n status: result.response.status,\n headers: {\n Location: result.response.headers.get(\"Location\")!,\n },\n });\n }\n\n if (isDeferredResult(result)) {\n let error = getInternalRouterError(400, { type: \"defer-action\" });\n if (isRouteRequest) {\n throw error;\n }\n result = {\n type: ResultType.error,\n error,\n };\n }\n\n if (isRouteRequest) {\n // Note: This should only be non-Response values if we get here, since\n // isRouteRequest should throw any Response received in callLoaderOrAction\n if (isErrorResult(result)) {\n throw result.error;\n }\n\n return {\n matches: [actionMatch],\n loaderData: {},\n actionData: { [actionMatch.route.id]: result.data },\n errors: null,\n // Note: statusCode + headers are unused here since queryRoute will\n // return the raw Response or value\n statusCode: 200,\n loaderHeaders: {},\n actionHeaders: {},\n activeDeferreds: null,\n };\n }\n\n // Create a GET request for the loaders\n let loaderRequest = new Request(request.url, {\n headers: request.headers,\n redirect: request.redirect,\n signal: request.signal,\n });\n\n if (isErrorResult(result)) {\n // Store off the pending error - we use it to determine which loaders\n // to call and will commit it when we complete the navigation\n let boundaryMatch = skipLoaderErrorBubbling\n ? actionMatch\n : findNearestBoundary(matches, actionMatch.route.id);\n\n let context = await loadRouteData(\n loaderRequest,\n matches,\n requestContext,\n unstable_dataStrategy,\n skipLoaderErrorBubbling,\n null,\n [boundaryMatch.route.id, result]\n );\n\n // action status codes take precedence over loader status codes\n return {\n ...context,\n statusCode: isRouteErrorResponse(result.error)\n ? result.error.status\n : result.statusCode != null\n ? result.statusCode\n : 500,\n actionData: null,\n actionHeaders: {\n ...(result.headers ? { [actionMatch.route.id]: result.headers } : {}),\n },\n };\n }\n\n let context = await loadRouteData(\n loaderRequest,\n matches,\n requestContext,\n unstable_dataStrategy,\n skipLoaderErrorBubbling,\n null\n );\n\n return {\n ...context,\n actionData: {\n [actionMatch.route.id]: result.data,\n },\n // action status codes take precedence over loader status codes\n ...(result.statusCode ? { statusCode: result.statusCode } : {}),\n actionHeaders: result.headers\n ? { [actionMatch.route.id]: result.headers }\n : {},\n };\n }\n\n async function loadRouteData(\n request: Request,\n matches: AgnosticDataRouteMatch[],\n requestContext: unknown,\n unstable_dataStrategy: DataStrategyFunction | null,\n skipLoaderErrorBubbling: boolean,\n routeMatch: AgnosticDataRouteMatch | null,\n pendingActionResult?: PendingActionResult\n ): Promise<\n | Omit<\n StaticHandlerContext,\n \"location\" | \"basename\" | \"actionData\" | \"actionHeaders\"\n >\n | Response\n > {\n let isRouteRequest = routeMatch != null;\n\n // Short circuit if we have no loaders to run (queryRoute())\n if (\n isRouteRequest &&\n !routeMatch?.route.loader &&\n !routeMatch?.route.lazy\n ) {\n throw getInternalRouterError(400, {\n method: request.method,\n pathname: new URL(request.url).pathname,\n routeId: routeMatch?.route.id,\n });\n }\n\n let requestMatches = routeMatch\n ? [routeMatch]\n : pendingActionResult && isErrorResult(pendingActionResult[1])\n ? getLoaderMatchesUntilBoundary(matches, pendingActionResult[0])\n : matches;\n let matchesToLoad = requestMatches.filter(\n (m) => m.route.loader || m.route.lazy\n );\n\n // Short circuit if we have no loaders to run (query())\n if (matchesToLoad.length === 0) {\n return {\n matches,\n // Add a null for all matched routes for proper revalidation on the client\n loaderData: matches.reduce(\n (acc, m) => Object.assign(acc, { [m.route.id]: null }),\n {}\n ),\n errors:\n pendingActionResult && isErrorResult(pendingActionResult[1])\n ? {\n [pendingActionResult[0]]: pendingActionResult[1].error,\n }\n : null,\n statusCode: 200,\n loaderHeaders: {},\n activeDeferreds: null,\n };\n }\n\n let results = await callDataStrategy(\n \"loader\",\n request,\n matchesToLoad,\n matches,\n isRouteRequest,\n requestContext,\n unstable_dataStrategy\n );\n\n if (request.signal.aborted) {\n throwStaticHandlerAbortedError(request, isRouteRequest, future);\n }\n\n // Process and commit output from loaders\n let activeDeferreds = new Map();\n let context = processRouteLoaderData(\n matches,\n results,\n pendingActionResult,\n activeDeferreds,\n skipLoaderErrorBubbling\n );\n\n // Add a null for any non-loader matches for proper revalidation on the client\n let executedLoaders = new Set(\n matchesToLoad.map((match) => match.route.id)\n );\n matches.forEach((match) => {\n if (!executedLoaders.has(match.route.id)) {\n context.loaderData[match.route.id] = null;\n }\n });\n\n return {\n ...context,\n matches,\n activeDeferreds:\n activeDeferreds.size > 0\n ? Object.fromEntries(activeDeferreds.entries())\n : null,\n };\n }\n\n // Utility wrapper for calling dataStrategy server-side without having to\n // pass around the manifest, mapRouteProperties, etc.\n async function callDataStrategy(\n type: \"loader\" | \"action\",\n request: Request,\n matchesToLoad: AgnosticDataRouteMatch[],\n matches: AgnosticDataRouteMatch[],\n isRouteRequest: boolean,\n requestContext: unknown,\n unstable_dataStrategy: DataStrategyFunction | null\n ): Promise> {\n let results = await callDataStrategyImpl(\n unstable_dataStrategy || defaultDataStrategy,\n type,\n null,\n request,\n matchesToLoad,\n matches,\n null,\n manifest,\n mapRouteProperties,\n requestContext\n );\n\n let dataResults: Record = {};\n await Promise.all(\n matches.map(async (match) => {\n if (!(match.route.id in results)) {\n return;\n }\n let result = results[match.route.id];\n if (isRedirectDataStrategyResultResult(result)) {\n let response = result.result as Response;\n // Throw redirects and let the server handle them with an HTTP redirect\n throw normalizeRelativeRoutingRedirectResponse(\n response,\n request,\n match.route.id,\n matches,\n basename,\n future.v7_relativeSplatPath\n );\n }\n if (isResponse(result.result) && isRouteRequest) {\n // For SSR single-route requests, we want to hand Responses back\n // directly without unwrapping\n throw result;\n }\n\n dataResults[match.route.id] =\n await convertDataStrategyResultToDataResult(result);\n })\n );\n return dataResults;\n }\n\n return {\n dataRoutes,\n query,\n queryRoute,\n };\n}\n\n//#endregion\n\n////////////////////////////////////////////////////////////////////////////////\n//#region Helpers\n////////////////////////////////////////////////////////////////////////////////\n\n/**\n * Given an existing StaticHandlerContext and an error thrown at render time,\n * provide an updated StaticHandlerContext suitable for a second SSR render\n */\nexport function getStaticContextFromError(\n routes: AgnosticDataRouteObject[],\n context: StaticHandlerContext,\n error: any\n) {\n let newContext: StaticHandlerContext = {\n ...context,\n statusCode: isRouteErrorResponse(error) ? error.status : 500,\n errors: {\n [context._deepestRenderedBoundaryId || routes[0].id]: error,\n },\n };\n return newContext;\n}\n\nfunction throwStaticHandlerAbortedError(\n request: Request,\n isRouteRequest: boolean,\n future: StaticHandlerFutureConfig\n) {\n if (future.v7_throwAbortReason && request.signal.reason !== undefined) {\n throw request.signal.reason;\n }\n\n let method = isRouteRequest ? \"queryRoute\" : \"query\";\n throw new Error(`${method}() call aborted: ${request.method} ${request.url}`);\n}\n\nfunction isSubmissionNavigation(\n opts: BaseNavigateOrFetchOptions\n): opts is SubmissionNavigateOptions {\n return (\n opts != null &&\n ((\"formData\" in opts && opts.formData != null) ||\n (\"body\" in opts && opts.body !== undefined))\n );\n}\n\nfunction normalizeTo(\n location: Path,\n matches: AgnosticDataRouteMatch[],\n basename: string,\n prependBasename: boolean,\n to: To | null,\n v7_relativeSplatPath: boolean,\n fromRouteId?: string,\n relative?: RelativeRoutingType\n) {\n let contextualMatches: AgnosticDataRouteMatch[];\n let activeRouteMatch: AgnosticDataRouteMatch | undefined;\n if (fromRouteId) {\n // Grab matches up to the calling route so our route-relative logic is\n // relative to the correct source route\n contextualMatches = [];\n for (let match of matches) {\n contextualMatches.push(match);\n if (match.route.id === fromRouteId) {\n activeRouteMatch = match;\n break;\n }\n }\n } else {\n contextualMatches = matches;\n activeRouteMatch = matches[matches.length - 1];\n }\n\n // Resolve the relative path\n let path = resolveTo(\n to ? to : \".\",\n getResolveToMatches(contextualMatches, v7_relativeSplatPath),\n stripBasename(location.pathname, basename) || location.pathname,\n relative === \"path\"\n );\n\n // When `to` is not specified we inherit search/hash from the current\n // location, unlike when to=\".\" and we just inherit the path.\n // See https://github.com/remix-run/remix/issues/927\n if (to == null) {\n path.search = location.search;\n path.hash = location.hash;\n }\n\n // Add an ?index param for matched index routes if we don't already have one\n if (\n (to == null || to === \"\" || to === \".\") &&\n activeRouteMatch &&\n activeRouteMatch.route.index &&\n !hasNakedIndexQuery(path.search)\n ) {\n path.search = path.search\n ? path.search.replace(/^\\?/, \"?index&\")\n : \"?index\";\n }\n\n // If we're operating within a basename, prepend it to the pathname. If\n // this is a root navigation, then just use the raw basename which allows\n // the basename to have full control over the presence of a trailing slash\n // on root actions\n if (prependBasename && basename !== \"/\") {\n path.pathname =\n path.pathname === \"/\" ? basename : joinPaths([basename, path.pathname]);\n }\n\n return createPath(path);\n}\n\n// Normalize navigation options by converting formMethod=GET formData objects to\n// URLSearchParams so they behave identically to links with query params\nfunction normalizeNavigateOptions(\n normalizeFormMethod: boolean,\n isFetcher: boolean,\n path: string,\n opts?: BaseNavigateOrFetchOptions\n): {\n path: string;\n submission?: Submission;\n error?: ErrorResponseImpl;\n} {\n // Return location verbatim on non-submission navigations\n if (!opts || !isSubmissionNavigation(opts)) {\n return { path };\n }\n\n if (opts.formMethod && !isValidMethod(opts.formMethod)) {\n return {\n path,\n error: getInternalRouterError(405, { method: opts.formMethod }),\n };\n }\n\n let getInvalidBodyError = () => ({\n path,\n error: getInternalRouterError(400, { type: \"invalid-body\" }),\n });\n\n // Create a Submission on non-GET navigations\n let rawFormMethod = opts.formMethod || \"get\";\n let formMethod = normalizeFormMethod\n ? (rawFormMethod.toUpperCase() as V7_FormMethod)\n : (rawFormMethod.toLowerCase() as FormMethod);\n let formAction = stripHashFromPath(path);\n\n if (opts.body !== undefined) {\n if (opts.formEncType === \"text/plain\") {\n // text only support POST/PUT/PATCH/DELETE submissions\n if (!isMutationMethod(formMethod)) {\n return getInvalidBodyError();\n }\n\n let text =\n typeof opts.body === \"string\"\n ? opts.body\n : opts.body instanceof FormData ||\n opts.body instanceof URLSearchParams\n ? // https://html.spec.whatwg.org/multipage/form-control-infrastructure.html#plain-text-form-data\n Array.from(opts.body.entries()).reduce(\n (acc, [name, value]) => `${acc}${name}=${value}\\n`,\n \"\"\n )\n : String(opts.body);\n\n return {\n path,\n submission: {\n formMethod,\n formAction,\n formEncType: opts.formEncType,\n formData: undefined,\n json: undefined,\n text,\n },\n };\n } else if (opts.formEncType === \"application/json\") {\n // json only supports POST/PUT/PATCH/DELETE submissions\n if (!isMutationMethod(formMethod)) {\n return getInvalidBodyError();\n }\n\n try {\n let json =\n typeof opts.body === \"string\" ? JSON.parse(opts.body) : opts.body;\n\n return {\n path,\n submission: {\n formMethod,\n formAction,\n formEncType: opts.formEncType,\n formData: undefined,\n json,\n text: undefined,\n },\n };\n } catch (e) {\n return getInvalidBodyError();\n }\n }\n }\n\n invariant(\n typeof FormData === \"function\",\n \"FormData is not available in this environment\"\n );\n\n let searchParams: URLSearchParams;\n let formData: FormData;\n\n if (opts.formData) {\n searchParams = convertFormDataToSearchParams(opts.formData);\n formData = opts.formData;\n } else if (opts.body instanceof FormData) {\n searchParams = convertFormDataToSearchParams(opts.body);\n formData = opts.body;\n } else if (opts.body instanceof URLSearchParams) {\n searchParams = opts.body;\n formData = convertSearchParamsToFormData(searchParams);\n } else if (opts.body == null) {\n searchParams = new URLSearchParams();\n formData = new FormData();\n } else {\n try {\n searchParams = new URLSearchParams(opts.body);\n formData = convertSearchParamsToFormData(searchParams);\n } catch (e) {\n return getInvalidBodyError();\n }\n }\n\n let submission: Submission = {\n formMethod,\n formAction,\n formEncType:\n (opts && opts.formEncType) || \"application/x-www-form-urlencoded\",\n formData,\n json: undefined,\n text: undefined,\n };\n\n if (isMutationMethod(submission.formMethod)) {\n return { path, submission };\n }\n\n // Flatten submission onto URLSearchParams for GET submissions\n let parsedPath = parsePath(path);\n // On GET navigation submissions we can drop the ?index param from the\n // resulting location since all loaders will run. But fetcher GET submissions\n // only run a single loader so we need to preserve any incoming ?index params\n if (isFetcher && parsedPath.search && hasNakedIndexQuery(parsedPath.search)) {\n searchParams.append(\"index\", \"\");\n }\n parsedPath.search = `?${searchParams}`;\n\n return { path: createPath(parsedPath), submission };\n}\n\n// Filter out all routes below any caught error as they aren't going to\n// render so we don't need to load them\nfunction getLoaderMatchesUntilBoundary(\n matches: AgnosticDataRouteMatch[],\n boundaryId: string\n) {\n let boundaryMatches = matches;\n if (boundaryId) {\n let index = matches.findIndex((m) => m.route.id === boundaryId);\n if (index >= 0) {\n boundaryMatches = matches.slice(0, index);\n }\n }\n return boundaryMatches;\n}\n\nfunction getMatchesToLoad(\n history: History,\n state: RouterState,\n matches: AgnosticDataRouteMatch[],\n submission: Submission | undefined,\n location: Location,\n isInitialLoad: boolean,\n skipActionErrorRevalidation: boolean,\n isRevalidationRequired: boolean,\n cancelledDeferredRoutes: string[],\n cancelledFetcherLoads: Set,\n deletedFetchers: Set,\n fetchLoadMatches: Map,\n fetchRedirectIds: Set,\n routesToUse: AgnosticDataRouteObject[],\n basename: string | undefined,\n pendingActionResult?: PendingActionResult\n): [AgnosticDataRouteMatch[], RevalidatingFetcher[]] {\n let actionResult = pendingActionResult\n ? isErrorResult(pendingActionResult[1])\n ? pendingActionResult[1].error\n : pendingActionResult[1].data\n : undefined;\n let currentUrl = history.createURL(state.location);\n let nextUrl = history.createURL(location);\n\n // Pick navigation matches that are net-new or qualify for revalidation\n let boundaryId =\n pendingActionResult && isErrorResult(pendingActionResult[1])\n ? pendingActionResult[0]\n : undefined;\n let boundaryMatches = boundaryId\n ? getLoaderMatchesUntilBoundary(matches, boundaryId)\n : matches;\n\n // Don't revalidate loaders by default after action 4xx/5xx responses\n // when the flag is enabled. They can still opt-into revalidation via\n // `shouldRevalidate` via `actionResult`\n let actionStatus = pendingActionResult\n ? pendingActionResult[1].statusCode\n : undefined;\n let shouldSkipRevalidation =\n skipActionErrorRevalidation && actionStatus && actionStatus >= 400;\n\n let navigationMatches = boundaryMatches.filter((match, index) => {\n let { route } = match;\n if (route.lazy) {\n // We haven't loaded this route yet so we don't know if it's got a loader!\n return true;\n }\n\n if (route.loader == null) {\n return false;\n }\n\n if (isInitialLoad) {\n if (typeof route.loader !== \"function\" || route.loader.hydrate) {\n return true;\n }\n return (\n state.loaderData[route.id] === undefined &&\n // Don't re-run if the loader ran and threw an error\n (!state.errors || state.errors[route.id] === undefined)\n );\n }\n\n // Always call the loader on new route instances and pending defer cancellations\n if (\n isNewLoader(state.loaderData, state.matches[index], match) ||\n cancelledDeferredRoutes.some((id) => id === match.route.id)\n ) {\n return true;\n }\n\n // This is the default implementation for when we revalidate. If the route\n // provides it's own implementation, then we give them full control but\n // provide this value so they can leverage it if needed after they check\n // their own specific use cases\n let currentRouteMatch = state.matches[index];\n let nextRouteMatch = match;\n\n return shouldRevalidateLoader(match, {\n currentUrl,\n currentParams: currentRouteMatch.params,\n nextUrl,\n nextParams: nextRouteMatch.params,\n ...submission,\n actionResult,\n actionStatus,\n defaultShouldRevalidate: shouldSkipRevalidation\n ? false\n : // Forced revalidation due to submission, useRevalidator, or X-Remix-Revalidate\n isRevalidationRequired ||\n currentUrl.pathname + currentUrl.search ===\n nextUrl.pathname + nextUrl.search ||\n // Search params affect all loaders\n currentUrl.search !== nextUrl.search ||\n isNewRouteInstance(currentRouteMatch, nextRouteMatch),\n });\n });\n\n // Pick fetcher.loads that need to be revalidated\n let revalidatingFetchers: RevalidatingFetcher[] = [];\n fetchLoadMatches.forEach((f, key) => {\n // Don't revalidate:\n // - on initial load (shouldn't be any fetchers then anyway)\n // - if fetcher won't be present in the subsequent render\n // - no longer matches the URL (v7_fetcherPersist=false)\n // - was unmounted but persisted due to v7_fetcherPersist=true\n if (\n isInitialLoad ||\n !matches.some((m) => m.route.id === f.routeId) ||\n deletedFetchers.has(key)\n ) {\n return;\n }\n\n let fetcherMatches = matchRoutes(routesToUse, f.path, basename);\n\n // If the fetcher path no longer matches, push it in with null matches so\n // we can trigger a 404 in callLoadersAndMaybeResolveData. Note this is\n // currently only a use-case for Remix HMR where the route tree can change\n // at runtime and remove a route previously loaded via a fetcher\n if (!fetcherMatches) {\n revalidatingFetchers.push({\n key,\n routeId: f.routeId,\n path: f.path,\n matches: null,\n match: null,\n controller: null,\n });\n return;\n }\n\n // Revalidating fetchers are decoupled from the route matches since they\n // load from a static href. They revalidate based on explicit revalidation\n // (submission, useRevalidator, or X-Remix-Revalidate)\n let fetcher = state.fetchers.get(key);\n let fetcherMatch = getTargetMatch(fetcherMatches, f.path);\n\n let shouldRevalidate = false;\n if (fetchRedirectIds.has(key)) {\n // Never trigger a revalidation of an actively redirecting fetcher\n shouldRevalidate = false;\n } else if (cancelledFetcherLoads.has(key)) {\n // Always mark for revalidation if the fetcher was cancelled\n cancelledFetcherLoads.delete(key);\n shouldRevalidate = true;\n } else if (\n fetcher &&\n fetcher.state !== \"idle\" &&\n fetcher.data === undefined\n ) {\n // If the fetcher hasn't ever completed loading yet, then this isn't a\n // revalidation, it would just be a brand new load if an explicit\n // revalidation is required\n shouldRevalidate = isRevalidationRequired;\n } else {\n // Otherwise fall back on any user-defined shouldRevalidate, defaulting\n // to explicit revalidations only\n shouldRevalidate = shouldRevalidateLoader(fetcherMatch, {\n currentUrl,\n currentParams: state.matches[state.matches.length - 1].params,\n nextUrl,\n nextParams: matches[matches.length - 1].params,\n ...submission,\n actionResult,\n actionStatus,\n defaultShouldRevalidate: shouldSkipRevalidation\n ? false\n : isRevalidationRequired,\n });\n }\n\n if (shouldRevalidate) {\n revalidatingFetchers.push({\n key,\n routeId: f.routeId,\n path: f.path,\n matches: fetcherMatches,\n match: fetcherMatch,\n controller: new AbortController(),\n });\n }\n });\n\n return [navigationMatches, revalidatingFetchers];\n}\n\nfunction isNewLoader(\n currentLoaderData: RouteData,\n currentMatch: AgnosticDataRouteMatch,\n match: AgnosticDataRouteMatch\n) {\n let isNew =\n // [a] -> [a, b]\n !currentMatch ||\n // [a, b] -> [a, c]\n match.route.id !== currentMatch.route.id;\n\n // Handle the case that we don't have data for a re-used route, potentially\n // from a prior error or from a cancelled pending deferred\n let isMissingData = currentLoaderData[match.route.id] === undefined;\n\n // Always load if this is a net-new route or we don't yet have data\n return isNew || isMissingData;\n}\n\nfunction isNewRouteInstance(\n currentMatch: AgnosticDataRouteMatch,\n match: AgnosticDataRouteMatch\n) {\n let currentPath = currentMatch.route.path;\n return (\n // param change for this match, /users/123 -> /users/456\n currentMatch.pathname !== match.pathname ||\n // splat param changed, which is not present in match.path\n // e.g. /files/images/avatar.jpg -> files/finances.xls\n (currentPath != null &&\n currentPath.endsWith(\"*\") &&\n currentMatch.params[\"*\"] !== match.params[\"*\"])\n );\n}\n\nfunction shouldRevalidateLoader(\n loaderMatch: AgnosticDataRouteMatch,\n arg: ShouldRevalidateFunctionArgs\n) {\n if (loaderMatch.route.shouldRevalidate) {\n let routeChoice = loaderMatch.route.shouldRevalidate(arg);\n if (typeof routeChoice === \"boolean\") {\n return routeChoice;\n }\n }\n\n return arg.defaultShouldRevalidate;\n}\n\n/**\n * Idempotent utility to execute patchRoutesOnNavigation() to lazily load route\n * definitions and update the routes/routeManifest\n */\nasync function loadLazyRouteChildren(\n patchRoutesOnNavigationImpl: AgnosticPatchRoutesOnNavigationFunction,\n path: string,\n matches: AgnosticDataRouteMatch[],\n routes: AgnosticDataRouteObject[],\n manifest: RouteManifest,\n mapRouteProperties: MapRoutePropertiesFunction,\n pendingRouteChildren: Map<\n string,\n ReturnType\n >,\n signal: AbortSignal\n) {\n let key = [path, ...matches.map((m) => m.route.id)].join(\"-\");\n try {\n let pending = pendingRouteChildren.get(key);\n if (!pending) {\n pending = patchRoutesOnNavigationImpl({\n path,\n matches,\n patch: (routeId, children) => {\n if (!signal.aborted) {\n patchRoutesImpl(\n routeId,\n children,\n routes,\n manifest,\n mapRouteProperties\n );\n }\n },\n });\n pendingRouteChildren.set(key, pending);\n }\n\n if (pending && isPromise(pending)) {\n await pending;\n }\n } finally {\n pendingRouteChildren.delete(key);\n }\n}\n\nfunction patchRoutesImpl(\n routeId: string | null,\n children: AgnosticRouteObject[],\n routesToUse: AgnosticDataRouteObject[],\n manifest: RouteManifest,\n mapRouteProperties: MapRoutePropertiesFunction\n) {\n if (routeId) {\n let route = manifest[routeId];\n invariant(\n route,\n `No route found to patch children into: routeId = ${routeId}`\n );\n let dataChildren = convertRoutesToDataRoutes(\n children,\n mapRouteProperties,\n [routeId, \"patch\", String(route.children?.length || \"0\")],\n manifest\n );\n if (route.children) {\n route.children.push(...dataChildren);\n } else {\n route.children = dataChildren;\n }\n } else {\n let dataChildren = convertRoutesToDataRoutes(\n children,\n mapRouteProperties,\n [\"patch\", String(routesToUse.length || \"0\")],\n manifest\n );\n routesToUse.push(...dataChildren);\n }\n}\n\n/**\n * Execute route.lazy() methods to lazily load route modules (loader, action,\n * shouldRevalidate) and update the routeManifest in place which shares objects\n * with dataRoutes so those get updated as well.\n */\nasync function loadLazyRouteModule(\n route: AgnosticDataRouteObject,\n mapRouteProperties: MapRoutePropertiesFunction,\n manifest: RouteManifest\n) {\n if (!route.lazy) {\n return;\n }\n\n let lazyRoute = await route.lazy();\n\n // If the lazy route function was executed and removed by another parallel\n // call then we can return - first lazy() to finish wins because the return\n // value of lazy is expected to be static\n if (!route.lazy) {\n return;\n }\n\n let routeToUpdate = manifest[route.id];\n invariant(routeToUpdate, \"No route found in manifest\");\n\n // Update the route in place. This should be safe because there's no way\n // we could yet be sitting on this route as we can't get there without\n // resolving lazy() first.\n //\n // This is different than the HMR \"update\" use-case where we may actively be\n // on the route being updated. The main concern boils down to \"does this\n // mutation affect any ongoing navigations or any current state.matches\n // values?\". If not, it should be safe to update in place.\n let routeUpdates: Record = {};\n for (let lazyRouteProperty in lazyRoute) {\n let staticRouteValue =\n routeToUpdate[lazyRouteProperty as keyof typeof routeToUpdate];\n\n let isPropertyStaticallyDefined =\n staticRouteValue !== undefined &&\n // This property isn't static since it should always be updated based\n // on the route updates\n lazyRouteProperty !== \"hasErrorBoundary\";\n\n warning(\n !isPropertyStaticallyDefined,\n `Route \"${routeToUpdate.id}\" has a static property \"${lazyRouteProperty}\" ` +\n `defined but its lazy function is also returning a value for this property. ` +\n `The lazy route property \"${lazyRouteProperty}\" will be ignored.`\n );\n\n if (\n !isPropertyStaticallyDefined &&\n !immutableRouteKeys.has(lazyRouteProperty as ImmutableRouteKey)\n ) {\n routeUpdates[lazyRouteProperty] =\n lazyRoute[lazyRouteProperty as keyof typeof lazyRoute];\n }\n }\n\n // Mutate the route with the provided updates. Do this first so we pass\n // the updated version to mapRouteProperties\n Object.assign(routeToUpdate, routeUpdates);\n\n // Mutate the `hasErrorBoundary` property on the route based on the route\n // updates and remove the `lazy` function so we don't resolve the lazy\n // route again.\n Object.assign(routeToUpdate, {\n // To keep things framework agnostic, we use the provided\n // `mapRouteProperties` (or wrapped `detectErrorBoundary`) function to\n // set the framework-aware properties (`element`/`hasErrorBoundary`) since\n // the logic will differ between frameworks.\n ...mapRouteProperties(routeToUpdate),\n lazy: undefined,\n });\n}\n\n// Default implementation of `dataStrategy` which fetches all loaders in parallel\nasync function defaultDataStrategy({\n matches,\n}: DataStrategyFunctionArgs): ReturnType {\n let matchesToLoad = matches.filter((m) => m.shouldLoad);\n let results = await Promise.all(matchesToLoad.map((m) => m.resolve()));\n return results.reduce(\n (acc, result, i) =>\n Object.assign(acc, { [matchesToLoad[i].route.id]: result }),\n {}\n );\n}\n\nasync function callDataStrategyImpl(\n dataStrategyImpl: DataStrategyFunction,\n type: \"loader\" | \"action\",\n state: RouterState | null,\n request: Request,\n matchesToLoad: AgnosticDataRouteMatch[],\n matches: AgnosticDataRouteMatch[],\n fetcherKey: string | null,\n manifest: RouteManifest,\n mapRouteProperties: MapRoutePropertiesFunction,\n requestContext?: unknown\n): Promise> {\n let loadRouteDefinitionsPromises = matches.map((m) =>\n m.route.lazy\n ? loadLazyRouteModule(m.route, mapRouteProperties, manifest)\n : undefined\n );\n\n let dsMatches = matches.map((match, i) => {\n let loadRoutePromise = loadRouteDefinitionsPromises[i];\n let shouldLoad = matchesToLoad.some((m) => m.route.id === match.route.id);\n // `resolve` encapsulates route.lazy(), executing the loader/action,\n // and mapping return values/thrown errors to a `DataStrategyResult`. Users\n // can pass a callback to take fine-grained control over the execution\n // of the loader/action\n let resolve: DataStrategyMatch[\"resolve\"] = async (handlerOverride) => {\n if (\n handlerOverride &&\n request.method === \"GET\" &&\n (match.route.lazy || match.route.loader)\n ) {\n shouldLoad = true;\n }\n return shouldLoad\n ? callLoaderOrAction(\n type,\n request,\n match,\n loadRoutePromise,\n handlerOverride,\n requestContext\n )\n : Promise.resolve({ type: ResultType.data, result: undefined });\n };\n\n return {\n ...match,\n shouldLoad,\n resolve,\n };\n });\n\n // Send all matches here to allow for a middleware-type implementation.\n // handler will be a no-op for unneeded routes and we filter those results\n // back out below.\n let results = await dataStrategyImpl({\n matches: dsMatches,\n request,\n params: matches[0].params,\n fetcherKey,\n context: requestContext,\n });\n\n // Wait for all routes to load here but 'swallow the error since we want\n // it to bubble up from the `await loadRoutePromise` in `callLoaderOrAction` -\n // called from `match.resolve()`\n try {\n await Promise.all(loadRouteDefinitionsPromises);\n } catch (e) {\n // No-op\n }\n\n return results;\n}\n\n// Default logic for calling a loader/action is the user has no specified a dataStrategy\nasync function callLoaderOrAction(\n type: \"loader\" | \"action\",\n request: Request,\n match: AgnosticDataRouteMatch,\n loadRoutePromise: Promise | undefined,\n handlerOverride: Parameters[0],\n staticContext?: unknown\n): Promise {\n let result: DataStrategyResult;\n let onReject: (() => void) | undefined;\n\n let runHandler = (\n handler: AgnosticRouteObject[\"loader\"] | AgnosticRouteObject[\"action\"]\n ): Promise => {\n // Setup a promise we can race against so that abort signals short circuit\n let reject: () => void;\n // This will never resolve so safe to type it as Promise to\n // satisfy the function return value\n let abortPromise = new Promise((_, r) => (reject = r));\n onReject = () => reject();\n request.signal.addEventListener(\"abort\", onReject);\n\n let actualHandler = (ctx?: unknown) => {\n if (typeof handler !== \"function\") {\n return Promise.reject(\n new Error(\n `You cannot call the handler for a route which defines a boolean ` +\n `\"${type}\" [routeId: ${match.route.id}]`\n )\n );\n }\n return handler(\n {\n request,\n params: match.params,\n context: staticContext,\n },\n ...(ctx !== undefined ? [ctx] : [])\n );\n };\n\n let handlerPromise: Promise = (async () => {\n try {\n let val = await (handlerOverride\n ? handlerOverride((ctx: unknown) => actualHandler(ctx))\n : actualHandler());\n return { type: \"data\", result: val };\n } catch (e) {\n return { type: \"error\", result: e };\n }\n })();\n\n return Promise.race([handlerPromise, abortPromise]);\n };\n\n try {\n let handler = match.route[type];\n\n // If we have a route.lazy promise, await that first\n if (loadRoutePromise) {\n if (handler) {\n // Run statically defined handler in parallel with lazy()\n let handlerError;\n let [value] = await Promise.all([\n // If the handler throws, don't let it immediately bubble out,\n // since we need to let the lazy() execution finish so we know if this\n // route has a boundary that can handle the error\n runHandler(handler).catch((e) => {\n handlerError = e;\n }),\n loadRoutePromise,\n ]);\n if (handlerError !== undefined) {\n throw handlerError;\n }\n result = value!;\n } else {\n // Load lazy route module, then run any returned handler\n await loadRoutePromise;\n\n handler = match.route[type];\n if (handler) {\n // Handler still runs even if we got interrupted to maintain consistency\n // with un-abortable behavior of handler execution on non-lazy or\n // previously-lazy-loaded routes\n result = await runHandler(handler);\n } else if (type === \"action\") {\n let url = new URL(request.url);\n let pathname = url.pathname + url.search;\n throw getInternalRouterError(405, {\n method: request.method,\n pathname,\n routeId: match.route.id,\n });\n } else {\n // lazy() route has no loader to run. Short circuit here so we don't\n // hit the invariant below that errors on returning undefined.\n return { type: ResultType.data, result: undefined };\n }\n }\n } else if (!handler) {\n let url = new URL(request.url);\n let pathname = url.pathname + url.search;\n throw getInternalRouterError(404, {\n pathname,\n });\n } else {\n result = await runHandler(handler);\n }\n\n invariant(\n result.result !== undefined,\n `You defined ${type === \"action\" ? \"an action\" : \"a loader\"} for route ` +\n `\"${match.route.id}\" but didn't return anything from your \\`${type}\\` ` +\n `function. Please return a value or \\`null\\`.`\n );\n } catch (e) {\n // We should already be catching and converting normal handler executions to\n // DataStrategyResults and returning them, so anything that throws here is an\n // unexpected error we still need to wrap\n return { type: ResultType.error, result: e };\n } finally {\n if (onReject) {\n request.signal.removeEventListener(\"abort\", onReject);\n }\n }\n\n return result;\n}\n\nasync function convertDataStrategyResultToDataResult(\n dataStrategyResult: DataStrategyResult\n): Promise {\n let { result, type } = dataStrategyResult;\n\n if (isResponse(result)) {\n let data: any;\n\n try {\n let contentType = result.headers.get(\"Content-Type\");\n // Check between word boundaries instead of startsWith() due to the last\n // paragraph of https://httpwg.org/specs/rfc9110.html#field.content-type\n if (contentType && /\\bapplication\\/json\\b/.test(contentType)) {\n if (result.body == null) {\n data = null;\n } else {\n data = await result.json();\n }\n } else {\n data = await result.text();\n }\n } catch (e) {\n return { type: ResultType.error, error: e };\n }\n\n if (type === ResultType.error) {\n return {\n type: ResultType.error,\n error: new ErrorResponseImpl(result.status, result.statusText, data),\n statusCode: result.status,\n headers: result.headers,\n };\n }\n\n return {\n type: ResultType.data,\n data,\n statusCode: result.status,\n headers: result.headers,\n };\n }\n\n if (type === ResultType.error) {\n if (isDataWithResponseInit(result)) {\n if (result.data instanceof Error) {\n return {\n type: ResultType.error,\n error: result.data,\n statusCode: result.init?.status,\n };\n }\n\n // Convert thrown unstable_data() to ErrorResponse instances\n result = new ErrorResponseImpl(\n result.init?.status || 500,\n undefined,\n result.data\n );\n }\n return {\n type: ResultType.error,\n error: result,\n statusCode: isRouteErrorResponse(result) ? result.status : undefined,\n };\n }\n\n if (isDeferredData(result)) {\n return {\n type: ResultType.deferred,\n deferredData: result,\n statusCode: result.init?.status,\n headers: result.init?.headers && new Headers(result.init.headers),\n };\n }\n\n if (isDataWithResponseInit(result)) {\n return {\n type: ResultType.data,\n data: result.data,\n statusCode: result.init?.status,\n headers: result.init?.headers\n ? new Headers(result.init.headers)\n : undefined,\n };\n }\n\n return { type: ResultType.data, data: result };\n}\n\n// Support relative routing in internal redirects\nfunction normalizeRelativeRoutingRedirectResponse(\n response: Response,\n request: Request,\n routeId: string,\n matches: AgnosticDataRouteMatch[],\n basename: string,\n v7_relativeSplatPath: boolean\n) {\n let location = response.headers.get(\"Location\");\n invariant(\n location,\n \"Redirects returned/thrown from loaders/actions must have a Location header\"\n );\n\n if (!ABSOLUTE_URL_REGEX.test(location)) {\n let trimmedMatches = matches.slice(\n 0,\n matches.findIndex((m) => m.route.id === routeId) + 1\n );\n location = normalizeTo(\n new URL(request.url),\n trimmedMatches,\n basename,\n true,\n location,\n v7_relativeSplatPath\n );\n response.headers.set(\"Location\", location);\n }\n\n return response;\n}\n\nfunction normalizeRedirectLocation(\n location: string,\n currentUrl: URL,\n basename: string\n): string {\n if (ABSOLUTE_URL_REGEX.test(location)) {\n // Strip off the protocol+origin for same-origin + same-basename absolute redirects\n let normalizedLocation = location;\n let url = normalizedLocation.startsWith(\"//\")\n ? new URL(currentUrl.protocol + normalizedLocation)\n : new URL(normalizedLocation);\n let isSameBasename = stripBasename(url.pathname, basename) != null;\n if (url.origin === currentUrl.origin && isSameBasename) {\n return url.pathname + url.search + url.hash;\n }\n }\n return location;\n}\n\n// Utility method for creating the Request instances for loaders/actions during\n// client-side navigations and fetches. During SSR we will always have a\n// Request instance from the static handler (query/queryRoute)\nfunction createClientSideRequest(\n history: History,\n location: string | Location,\n signal: AbortSignal,\n submission?: Submission\n): Request {\n let url = history.createURL(stripHashFromPath(location)).toString();\n let init: RequestInit = { signal };\n\n if (submission && isMutationMethod(submission.formMethod)) {\n let { formMethod, formEncType } = submission;\n // Didn't think we needed this but it turns out unlike other methods, patch\n // won't be properly normalized to uppercase and results in a 405 error.\n // See: https://fetch.spec.whatwg.org/#concept-method\n init.method = formMethod.toUpperCase();\n\n if (formEncType === \"application/json\") {\n init.headers = new Headers({ \"Content-Type\": formEncType });\n init.body = JSON.stringify(submission.json);\n } else if (formEncType === \"text/plain\") {\n // Content-Type is inferred (https://fetch.spec.whatwg.org/#dom-request)\n init.body = submission.text;\n } else if (\n formEncType === \"application/x-www-form-urlencoded\" &&\n submission.formData\n ) {\n // Content-Type is inferred (https://fetch.spec.whatwg.org/#dom-request)\n init.body = convertFormDataToSearchParams(submission.formData);\n } else {\n // Content-Type is inferred (https://fetch.spec.whatwg.org/#dom-request)\n init.body = submission.formData;\n }\n }\n\n return new Request(url, init);\n}\n\nfunction convertFormDataToSearchParams(formData: FormData): URLSearchParams {\n let searchParams = new URLSearchParams();\n\n for (let [key, value] of formData.entries()) {\n // https://html.spec.whatwg.org/multipage/form-control-infrastructure.html#converting-an-entry-list-to-a-list-of-name-value-pairs\n searchParams.append(key, typeof value === \"string\" ? value : value.name);\n }\n\n return searchParams;\n}\n\nfunction convertSearchParamsToFormData(\n searchParams: URLSearchParams\n): FormData {\n let formData = new FormData();\n for (let [key, value] of searchParams.entries()) {\n formData.append(key, value);\n }\n return formData;\n}\n\nfunction processRouteLoaderData(\n matches: AgnosticDataRouteMatch[],\n results: Record,\n pendingActionResult: PendingActionResult | undefined,\n activeDeferreds: Map,\n skipLoaderErrorBubbling: boolean\n): {\n loaderData: RouterState[\"loaderData\"];\n errors: RouterState[\"errors\"] | null;\n statusCode: number;\n loaderHeaders: Record;\n} {\n // Fill in loaderData/errors from our loaders\n let loaderData: RouterState[\"loaderData\"] = {};\n let errors: RouterState[\"errors\"] | null = null;\n let statusCode: number | undefined;\n let foundError = false;\n let loaderHeaders: Record = {};\n let pendingError =\n pendingActionResult && isErrorResult(pendingActionResult[1])\n ? pendingActionResult[1].error\n : undefined;\n\n // Process loader results into state.loaderData/state.errors\n matches.forEach((match) => {\n if (!(match.route.id in results)) {\n return;\n }\n let id = match.route.id;\n let result = results[id];\n invariant(\n !isRedirectResult(result),\n \"Cannot handle redirect results in processLoaderData\"\n );\n if (isErrorResult(result)) {\n let error = result.error;\n // If we have a pending action error, we report it at the highest-route\n // that throws a loader error, and then clear it out to indicate that\n // it was consumed\n if (pendingError !== undefined) {\n error = pendingError;\n pendingError = undefined;\n }\n\n errors = errors || {};\n\n if (skipLoaderErrorBubbling) {\n errors[id] = error;\n } else {\n // Look upwards from the matched route for the closest ancestor error\n // boundary, defaulting to the root match. Prefer higher error values\n // if lower errors bubble to the same boundary\n let boundaryMatch = findNearestBoundary(matches, id);\n if (errors[boundaryMatch.route.id] == null) {\n errors[boundaryMatch.route.id] = error;\n }\n }\n\n // Clear our any prior loaderData for the throwing route\n loaderData[id] = undefined;\n\n // Once we find our first (highest) error, we set the status code and\n // prevent deeper status codes from overriding\n if (!foundError) {\n foundError = true;\n statusCode = isRouteErrorResponse(result.error)\n ? result.error.status\n : 500;\n }\n if (result.headers) {\n loaderHeaders[id] = result.headers;\n }\n } else {\n if (isDeferredResult(result)) {\n activeDeferreds.set(id, result.deferredData);\n loaderData[id] = result.deferredData.data;\n // Error status codes always override success status codes, but if all\n // loaders are successful we take the deepest status code.\n if (\n result.statusCode != null &&\n result.statusCode !== 200 &&\n !foundError\n ) {\n statusCode = result.statusCode;\n }\n if (result.headers) {\n loaderHeaders[id] = result.headers;\n }\n } else {\n loaderData[id] = result.data;\n // Error status codes always override success status codes, but if all\n // loaders are successful we take the deepest status code.\n if (result.statusCode && result.statusCode !== 200 && !foundError) {\n statusCode = result.statusCode;\n }\n if (result.headers) {\n loaderHeaders[id] = result.headers;\n }\n }\n }\n });\n\n // If we didn't consume the pending action error (i.e., all loaders\n // resolved), then consume it here. Also clear out any loaderData for the\n // throwing route\n if (pendingError !== undefined && pendingActionResult) {\n errors = { [pendingActionResult[0]]: pendingError };\n loaderData[pendingActionResult[0]] = undefined;\n }\n\n return {\n loaderData,\n errors,\n statusCode: statusCode || 200,\n loaderHeaders,\n };\n}\n\nfunction processLoaderData(\n state: RouterState,\n matches: AgnosticDataRouteMatch[],\n matchesToLoad: AgnosticDataRouteMatch[],\n results: Record,\n pendingActionResult: PendingActionResult | undefined,\n revalidatingFetchers: RevalidatingFetcher[],\n fetcherResults: Record,\n activeDeferreds: Map\n): {\n loaderData: RouterState[\"loaderData\"];\n errors?: RouterState[\"errors\"];\n} {\n let { loaderData, errors } = processRouteLoaderData(\n matches,\n results,\n pendingActionResult,\n activeDeferreds,\n false // This method is only called client side so we always want to bubble\n );\n\n // Process results from our revalidating fetchers\n revalidatingFetchers.forEach((rf) => {\n let { key, match, controller } = rf;\n let result = fetcherResults[key];\n invariant(result, \"Did not find corresponding fetcher result\");\n\n // Process fetcher non-redirect errors\n if (controller && controller.signal.aborted) {\n // Nothing to do for aborted fetchers\n return;\n } else if (isErrorResult(result)) {\n let boundaryMatch = findNearestBoundary(state.matches, match?.route.id);\n if (!(errors && errors[boundaryMatch.route.id])) {\n errors = {\n ...errors,\n [boundaryMatch.route.id]: result.error,\n };\n }\n state.fetchers.delete(key);\n } else if (isRedirectResult(result)) {\n // Should never get here, redirects should get processed above, but we\n // keep this to type narrow to a success result in the else\n invariant(false, \"Unhandled fetcher revalidation redirect\");\n } else if (isDeferredResult(result)) {\n // Should never get here, deferred data should be awaited for fetchers\n // in resolveDeferredResults\n invariant(false, \"Unhandled fetcher deferred data\");\n } else {\n let doneFetcher = getDoneFetcher(result.data);\n state.fetchers.set(key, doneFetcher);\n }\n });\n\n return { loaderData, errors };\n}\n\nfunction mergeLoaderData(\n loaderData: RouteData,\n newLoaderData: RouteData,\n matches: AgnosticDataRouteMatch[],\n errors: RouteData | null | undefined\n): RouteData {\n let mergedLoaderData = { ...newLoaderData };\n for (let match of matches) {\n let id = match.route.id;\n if (newLoaderData.hasOwnProperty(id)) {\n if (newLoaderData[id] !== undefined) {\n mergedLoaderData[id] = newLoaderData[id];\n } else {\n // No-op - this is so we ignore existing data if we have a key in the\n // incoming object with an undefined value, which is how we unset a prior\n // loaderData if we encounter a loader error\n }\n } else if (loaderData[id] !== undefined && match.route.loader) {\n // Preserve existing keys not included in newLoaderData and where a loader\n // wasn't removed by HMR\n mergedLoaderData[id] = loaderData[id];\n }\n\n if (errors && errors.hasOwnProperty(id)) {\n // Don't keep any loader data below the boundary\n break;\n }\n }\n return mergedLoaderData;\n}\n\nfunction getActionDataForCommit(\n pendingActionResult: PendingActionResult | undefined\n) {\n if (!pendingActionResult) {\n return {};\n }\n return isErrorResult(pendingActionResult[1])\n ? {\n // Clear out prior actionData on errors\n actionData: {},\n }\n : {\n actionData: {\n [pendingActionResult[0]]: pendingActionResult[1].data,\n },\n };\n}\n\n// Find the nearest error boundary, looking upwards from the leaf route (or the\n// route specified by routeId) for the closest ancestor error boundary,\n// defaulting to the root match\nfunction findNearestBoundary(\n matches: AgnosticDataRouteMatch[],\n routeId?: string\n): AgnosticDataRouteMatch {\n let eligibleMatches = routeId\n ? matches.slice(0, matches.findIndex((m) => m.route.id === routeId) + 1)\n : [...matches];\n return (\n eligibleMatches.reverse().find((m) => m.route.hasErrorBoundary === true) ||\n matches[0]\n );\n}\n\nfunction getShortCircuitMatches(routes: AgnosticDataRouteObject[]): {\n matches: AgnosticDataRouteMatch[];\n route: AgnosticDataRouteObject;\n} {\n // Prefer a root layout route if present, otherwise shim in a route object\n let route =\n routes.length === 1\n ? routes[0]\n : routes.find((r) => r.index || !r.path || r.path === \"/\") || {\n id: `__shim-error-route__`,\n };\n\n return {\n matches: [\n {\n params: {},\n pathname: \"\",\n pathnameBase: \"\",\n route,\n },\n ],\n route,\n };\n}\n\nfunction getInternalRouterError(\n status: number,\n {\n pathname,\n routeId,\n method,\n type,\n message,\n }: {\n pathname?: string;\n routeId?: string;\n method?: string;\n type?: \"defer-action\" | \"invalid-body\" | \"route-discovery\";\n message?: string;\n } = {}\n) {\n let statusText = \"Unknown Server Error\";\n let errorMessage = \"Unknown @remix-run/router error\";\n\n if (status === 400) {\n statusText = \"Bad Request\";\n if (type === \"route-discovery\") {\n errorMessage =\n `Unable to match URL \"${pathname}\" - the \\`unstable_patchRoutesOnNavigation()\\` ` +\n `function threw the following error:\\n${message}`;\n } else if (method && pathname && routeId) {\n errorMessage =\n `You made a ${method} request to \"${pathname}\" but ` +\n `did not provide a \\`loader\\` for route \"${routeId}\", ` +\n `so there is no way to handle the request.`;\n } else if (type === \"defer-action\") {\n errorMessage = \"defer() is not supported in actions\";\n } else if (type === \"invalid-body\") {\n errorMessage = \"Unable to encode submission body\";\n }\n } else if (status === 403) {\n statusText = \"Forbidden\";\n errorMessage = `Route \"${routeId}\" does not match URL \"${pathname}\"`;\n } else if (status === 404) {\n statusText = \"Not Found\";\n errorMessage = `No route matches URL \"${pathname}\"`;\n } else if (status === 405) {\n statusText = \"Method Not Allowed\";\n if (method && pathname && routeId) {\n errorMessage =\n `You made a ${method.toUpperCase()} request to \"${pathname}\" but ` +\n `did not provide an \\`action\\` for route \"${routeId}\", ` +\n `so there is no way to handle the request.`;\n } else if (method) {\n errorMessage = `Invalid request method \"${method.toUpperCase()}\"`;\n }\n }\n\n return new ErrorResponseImpl(\n status || 500,\n statusText,\n new Error(errorMessage),\n true\n );\n}\n\n// Find any returned redirect errors, starting from the lowest match\nfunction findRedirect(\n results: Record\n): { key: string; result: RedirectResult } | undefined {\n let entries = Object.entries(results);\n for (let i = entries.length - 1; i >= 0; i--) {\n let [key, result] = entries[i];\n if (isRedirectResult(result)) {\n return { key, result };\n }\n }\n}\n\nfunction stripHashFromPath(path: To) {\n let parsedPath = typeof path === \"string\" ? parsePath(path) : path;\n return createPath({ ...parsedPath, hash: \"\" });\n}\n\nfunction isHashChangeOnly(a: Location, b: Location): boolean {\n if (a.pathname !== b.pathname || a.search !== b.search) {\n return false;\n }\n\n if (a.hash === \"\") {\n // /page -> /page#hash\n return b.hash !== \"\";\n } else if (a.hash === b.hash) {\n // /page#hash -> /page#hash\n return true;\n } else if (b.hash !== \"\") {\n // /page#hash -> /page#other\n return true;\n }\n\n // If the hash is removed the browser will re-perform a request to the server\n // /page#hash -> /page\n return false;\n}\n\nfunction isPromise(val: unknown): val is Promise {\n return typeof val === \"object\" && val != null && \"then\" in val;\n}\n\nfunction isDataStrategyResult(result: unknown): result is DataStrategyResult {\n return (\n result != null &&\n typeof result === \"object\" &&\n \"type\" in result &&\n \"result\" in result &&\n (result.type === ResultType.data || result.type === ResultType.error)\n );\n}\n\nfunction isRedirectDataStrategyResultResult(result: DataStrategyResult) {\n return (\n isResponse(result.result) && redirectStatusCodes.has(result.result.status)\n );\n}\n\nfunction isDeferredResult(result: DataResult): result is DeferredResult {\n return result.type === ResultType.deferred;\n}\n\nfunction isErrorResult(result: DataResult): result is ErrorResult {\n return result.type === ResultType.error;\n}\n\nfunction isRedirectResult(result?: DataResult): result is RedirectResult {\n return (result && result.type) === ResultType.redirect;\n}\n\nexport function isDataWithResponseInit(\n value: any\n): value is DataWithResponseInit {\n return (\n typeof value === \"object\" &&\n value != null &&\n \"type\" in value &&\n \"data\" in value &&\n \"init\" in value &&\n value.type === \"DataWithResponseInit\"\n );\n}\n\nexport function isDeferredData(value: any): value is DeferredData {\n let deferred: DeferredData = value;\n return (\n deferred &&\n typeof deferred === \"object\" &&\n typeof deferred.data === \"object\" &&\n typeof deferred.subscribe === \"function\" &&\n typeof deferred.cancel === \"function\" &&\n typeof deferred.resolveData === \"function\"\n );\n}\n\nfunction isResponse(value: any): value is Response {\n return (\n value != null &&\n typeof value.status === \"number\" &&\n typeof value.statusText === \"string\" &&\n typeof value.headers === \"object\" &&\n typeof value.body !== \"undefined\"\n );\n}\n\nfunction isRedirectResponse(result: any): result is Response {\n if (!isResponse(result)) {\n return false;\n }\n\n let status = result.status;\n let location = result.headers.get(\"Location\");\n return status >= 300 && status <= 399 && location != null;\n}\n\nfunction isValidMethod(method: string): method is FormMethod | V7_FormMethod {\n return validRequestMethods.has(method.toLowerCase() as FormMethod);\n}\n\nfunction isMutationMethod(\n method: string\n): method is MutationFormMethod | V7_MutationFormMethod {\n return validMutationMethods.has(method.toLowerCase() as MutationFormMethod);\n}\n\nasync function resolveNavigationDeferredResults(\n matches: (AgnosticDataRouteMatch | null)[],\n results: Record,\n signal: AbortSignal,\n currentMatches: AgnosticDataRouteMatch[],\n currentLoaderData: RouteData\n) {\n let entries = Object.entries(results);\n for (let index = 0; index < entries.length; index++) {\n let [routeId, result] = entries[index];\n let match = matches.find((m) => m?.route.id === routeId);\n // If we don't have a match, then we can have a deferred result to do\n // anything with. This is for revalidating fetchers where the route was\n // removed during HMR\n if (!match) {\n continue;\n }\n\n let currentMatch = currentMatches.find(\n (m) => m.route.id === match!.route.id\n );\n let isRevalidatingLoader =\n currentMatch != null &&\n !isNewRouteInstance(currentMatch, match) &&\n (currentLoaderData && currentLoaderData[match.route.id]) !== undefined;\n\n if (isDeferredResult(result) && isRevalidatingLoader) {\n // Note: we do not have to touch activeDeferreds here since we race them\n // against the signal in resolveDeferredData and they'll get aborted\n // there if needed\n await resolveDeferredData(result, signal, false).then((result) => {\n if (result) {\n results[routeId] = result;\n }\n });\n }\n }\n}\n\nasync function resolveFetcherDeferredResults(\n matches: (AgnosticDataRouteMatch | null)[],\n results: Record,\n revalidatingFetchers: RevalidatingFetcher[]\n) {\n for (let index = 0; index < revalidatingFetchers.length; index++) {\n let { key, routeId, controller } = revalidatingFetchers[index];\n let result = results[key];\n let match = matches.find((m) => m?.route.id === routeId);\n // If we don't have a match, then we can have a deferred result to do\n // anything with. This is for revalidating fetchers where the route was\n // removed during HMR\n if (!match) {\n continue;\n }\n\n if (isDeferredResult(result)) {\n // Note: we do not have to touch activeDeferreds here since we race them\n // against the signal in resolveDeferredData and they'll get aborted\n // there if needed\n invariant(\n controller,\n \"Expected an AbortController for revalidating fetcher deferred result\"\n );\n await resolveDeferredData(result, controller.signal, true).then(\n (result) => {\n if (result) {\n results[key] = result;\n }\n }\n );\n }\n }\n}\n\nasync function resolveDeferredData(\n result: DeferredResult,\n signal: AbortSignal,\n unwrap = false\n): Promise {\n let aborted = await result.deferredData.resolveData(signal);\n if (aborted) {\n return;\n }\n\n if (unwrap) {\n try {\n return {\n type: ResultType.data,\n data: result.deferredData.unwrappedData,\n };\n } catch (e) {\n // Handle any TrackedPromise._error values encountered while unwrapping\n return {\n type: ResultType.error,\n error: e,\n };\n }\n }\n\n return {\n type: ResultType.data,\n data: result.deferredData.data,\n };\n}\n\nfunction hasNakedIndexQuery(search: string): boolean {\n return new URLSearchParams(search).getAll(\"index\").some((v) => v === \"\");\n}\n\nfunction getTargetMatch(\n matches: AgnosticDataRouteMatch[],\n location: Location | string\n) {\n let search =\n typeof location === \"string\" ? parsePath(location).search : location.search;\n if (\n matches[matches.length - 1].route.index &&\n hasNakedIndexQuery(search || \"\")\n ) {\n // Return the leaf index route when index is present\n return matches[matches.length - 1];\n }\n // Otherwise grab the deepest \"path contributing\" match (ignoring index and\n // pathless layout routes)\n let pathMatches = getPathContributingMatches(matches);\n return pathMatches[pathMatches.length - 1];\n}\n\nfunction getSubmissionFromNavigation(\n navigation: Navigation\n): Submission | undefined {\n let { formMethod, formAction, formEncType, text, formData, json } =\n navigation;\n if (!formMethod || !formAction || !formEncType) {\n return;\n }\n\n if (text != null) {\n return {\n formMethod,\n formAction,\n formEncType,\n formData: undefined,\n json: undefined,\n text,\n };\n } else if (formData != null) {\n return {\n formMethod,\n formAction,\n formEncType,\n formData,\n json: undefined,\n text: undefined,\n };\n } else if (json !== undefined) {\n return {\n formMethod,\n formAction,\n formEncType,\n formData: undefined,\n json,\n text: undefined,\n };\n }\n}\n\nfunction getLoadingNavigation(\n location: Location,\n submission?: Submission\n): NavigationStates[\"Loading\"] {\n if (submission) {\n let navigation: NavigationStates[\"Loading\"] = {\n state: \"loading\",\n location,\n formMethod: submission.formMethod,\n formAction: submission.formAction,\n formEncType: submission.formEncType,\n formData: submission.formData,\n json: submission.json,\n text: submission.text,\n };\n return navigation;\n } else {\n let navigation: NavigationStates[\"Loading\"] = {\n state: \"loading\",\n location,\n formMethod: undefined,\n formAction: undefined,\n formEncType: undefined,\n formData: undefined,\n json: undefined,\n text: undefined,\n };\n return navigation;\n }\n}\n\nfunction getSubmittingNavigation(\n location: Location,\n submission: Submission\n): NavigationStates[\"Submitting\"] {\n let navigation: NavigationStates[\"Submitting\"] = {\n state: \"submitting\",\n location,\n formMethod: submission.formMethod,\n formAction: submission.formAction,\n formEncType: submission.formEncType,\n formData: submission.formData,\n json: submission.json,\n text: submission.text,\n };\n return navigation;\n}\n\nfunction getLoadingFetcher(\n submission?: Submission,\n data?: Fetcher[\"data\"]\n): FetcherStates[\"Loading\"] {\n if (submission) {\n let fetcher: FetcherStates[\"Loading\"] = {\n state: \"loading\",\n formMethod: submission.formMethod,\n formAction: submission.formAction,\n formEncType: submission.formEncType,\n formData: submission.formData,\n json: submission.json,\n text: submission.text,\n data,\n };\n return fetcher;\n } else {\n let fetcher: FetcherStates[\"Loading\"] = {\n state: \"loading\",\n formMethod: undefined,\n formAction: undefined,\n formEncType: undefined,\n formData: undefined,\n json: undefined,\n text: undefined,\n data,\n };\n return fetcher;\n }\n}\n\nfunction getSubmittingFetcher(\n submission: Submission,\n existingFetcher?: Fetcher\n): FetcherStates[\"Submitting\"] {\n let fetcher: FetcherStates[\"Submitting\"] = {\n state: \"submitting\",\n formMethod: submission.formMethod,\n formAction: submission.formAction,\n formEncType: submission.formEncType,\n formData: submission.formData,\n json: submission.json,\n text: submission.text,\n data: existingFetcher ? existingFetcher.data : undefined,\n };\n return fetcher;\n}\n\nfunction getDoneFetcher(data: Fetcher[\"data\"]): FetcherStates[\"Idle\"] {\n let fetcher: FetcherStates[\"Idle\"] = {\n state: \"idle\",\n formMethod: undefined,\n formAction: undefined,\n formEncType: undefined,\n formData: undefined,\n json: undefined,\n text: undefined,\n data,\n };\n return fetcher;\n}\n\nfunction restoreAppliedTransitions(\n _window: Window,\n transitions: Map>\n) {\n try {\n let sessionPositions = _window.sessionStorage.getItem(\n TRANSITIONS_STORAGE_KEY\n );\n if (sessionPositions) {\n let json = JSON.parse(sessionPositions);\n for (let [k, v] of Object.entries(json || {})) {\n if (v && Array.isArray(v)) {\n transitions.set(k, new Set(v || []));\n }\n }\n }\n } catch (e) {\n // no-op, use default empty object\n }\n}\n\nfunction persistAppliedTransitions(\n _window: Window,\n transitions: Map>\n) {\n if (transitions.size > 0) {\n let json: Record = {};\n for (let [k, v] of transitions) {\n json[k] = [...v];\n }\n try {\n _window.sessionStorage.setItem(\n TRANSITIONS_STORAGE_KEY,\n JSON.stringify(json)\n );\n } catch (error) {\n warning(\n false,\n `Failed to save applied view transitions in sessionStorage (${error}).`\n );\n }\n }\n}\n//#endregion\n","import * as React from \"react\";\nimport type {\n AgnosticIndexRouteObject,\n AgnosticNonIndexRouteObject,\n AgnosticRouteMatch,\n History,\n LazyRouteFunction,\n Location,\n Action as NavigationType,\n RelativeRoutingType,\n Router,\n StaticHandlerContext,\n To,\n TrackedPromise,\n} from \"@remix-run/router\";\n\n// Create react-specific types from the agnostic types in @remix-run/router to\n// export from react-router\nexport interface IndexRouteObject {\n caseSensitive?: AgnosticIndexRouteObject[\"caseSensitive\"];\n path?: AgnosticIndexRouteObject[\"path\"];\n id?: AgnosticIndexRouteObject[\"id\"];\n loader?: AgnosticIndexRouteObject[\"loader\"];\n action?: AgnosticIndexRouteObject[\"action\"];\n hasErrorBoundary?: AgnosticIndexRouteObject[\"hasErrorBoundary\"];\n shouldRevalidate?: AgnosticIndexRouteObject[\"shouldRevalidate\"];\n handle?: AgnosticIndexRouteObject[\"handle\"];\n index: true;\n children?: undefined;\n element?: React.ReactNode | null;\n hydrateFallbackElement?: React.ReactNode | null;\n errorElement?: React.ReactNode | null;\n Component?: React.ComponentType | null;\n HydrateFallback?: React.ComponentType | null;\n ErrorBoundary?: React.ComponentType | null;\n lazy?: LazyRouteFunction;\n}\n\nexport interface NonIndexRouteObject {\n caseSensitive?: AgnosticNonIndexRouteObject[\"caseSensitive\"];\n path?: AgnosticNonIndexRouteObject[\"path\"];\n id?: AgnosticNonIndexRouteObject[\"id\"];\n loader?: AgnosticNonIndexRouteObject[\"loader\"];\n action?: AgnosticNonIndexRouteObject[\"action\"];\n hasErrorBoundary?: AgnosticNonIndexRouteObject[\"hasErrorBoundary\"];\n shouldRevalidate?: AgnosticNonIndexRouteObject[\"shouldRevalidate\"];\n handle?: AgnosticNonIndexRouteObject[\"handle\"];\n index?: false;\n children?: RouteObject[];\n element?: React.ReactNode | null;\n hydrateFallbackElement?: React.ReactNode | null;\n errorElement?: React.ReactNode | null;\n Component?: React.ComponentType | null;\n HydrateFallback?: React.ComponentType | null;\n ErrorBoundary?: React.ComponentType | null;\n lazy?: LazyRouteFunction;\n}\n\nexport type RouteObject = IndexRouteObject | NonIndexRouteObject;\n\nexport type DataRouteObject = RouteObject & {\n children?: DataRouteObject[];\n id: string;\n};\n\nexport interface RouteMatch<\n ParamKey extends string = string,\n RouteObjectType extends RouteObject = RouteObject\n> extends AgnosticRouteMatch {}\n\nexport interface DataRouteMatch extends RouteMatch {}\n\nexport interface DataRouterContextObject\n // Omit `future` since those can be pulled from the `router`\n // `NavigationContext` needs future since it doesn't have a `router` in all cases\n extends Omit {\n router: Router;\n staticContext?: StaticHandlerContext;\n}\n\nexport const DataRouterContext =\n React.createContext(null);\nif (__DEV__) {\n DataRouterContext.displayName = \"DataRouter\";\n}\n\nexport const DataRouterStateContext = React.createContext<\n Router[\"state\"] | null\n>(null);\nif (__DEV__) {\n DataRouterStateContext.displayName = \"DataRouterState\";\n}\n\nexport const AwaitContext = React.createContext(null);\nif (__DEV__) {\n AwaitContext.displayName = \"Await\";\n}\n\nexport interface NavigateOptions {\n replace?: boolean;\n state?: any;\n preventScrollReset?: boolean;\n relative?: RelativeRoutingType;\n unstable_flushSync?: boolean;\n unstable_viewTransition?: boolean;\n}\n\n/**\n * A Navigator is a \"location changer\"; it's how you get to different locations.\n *\n * Every history instance conforms to the Navigator interface, but the\n * distinction is useful primarily when it comes to the low-level `` API\n * where both the location and a navigator must be provided separately in order\n * to avoid \"tearing\" that may occur in a suspense-enabled app if the action\n * and/or location were to be read directly from the history instance.\n */\nexport interface Navigator {\n createHref: History[\"createHref\"];\n // Optional for backwards-compat with Router/HistoryRouter usage (edge case)\n encodeLocation?: History[\"encodeLocation\"];\n go: History[\"go\"];\n push(to: To, state?: any, opts?: NavigateOptions): void;\n replace(to: To, state?: any, opts?: NavigateOptions): void;\n}\n\ninterface NavigationContextObject {\n basename: string;\n navigator: Navigator;\n static: boolean;\n future: {\n v7_relativeSplatPath: boolean;\n };\n}\n\nexport const NavigationContext = React.createContext(\n null!\n);\n\nif (__DEV__) {\n NavigationContext.displayName = \"Navigation\";\n}\n\ninterface LocationContextObject {\n location: Location;\n navigationType: NavigationType;\n}\n\nexport const LocationContext = React.createContext(\n null!\n);\n\nif (__DEV__) {\n LocationContext.displayName = \"Location\";\n}\n\nexport interface RouteContextObject {\n outlet: React.ReactElement | null;\n matches: RouteMatch[];\n isDataRoute: boolean;\n}\n\nexport const RouteContext = React.createContext({\n outlet: null,\n matches: [],\n isDataRoute: false,\n});\n\nif (__DEV__) {\n RouteContext.displayName = \"Route\";\n}\n\nexport const RouteErrorContext = React.createContext(null);\n\nif (__DEV__) {\n RouteErrorContext.displayName = \"RouteError\";\n}\n","import * as React from \"react\";\nimport type {\n Blocker,\n BlockerFunction,\n Location,\n ParamParseKey,\n Params,\n Path,\n PathMatch,\n PathPattern,\n RelativeRoutingType,\n Router as RemixRouter,\n RevalidationState,\n To,\n UIMatch,\n} from \"@remix-run/router\";\nimport {\n IDLE_BLOCKER,\n Action as NavigationType,\n UNSAFE_convertRouteMatchToUiMatch as convertRouteMatchToUiMatch,\n UNSAFE_decodePath as decodePath,\n UNSAFE_getResolveToMatches as getResolveToMatches,\n UNSAFE_invariant as invariant,\n isRouteErrorResponse,\n joinPaths,\n matchPath,\n matchRoutes,\n parsePath,\n resolveTo,\n stripBasename,\n UNSAFE_warning as warning,\n} from \"@remix-run/router\";\n\nimport type {\n DataRouteMatch,\n NavigateOptions,\n RouteContextObject,\n RouteMatch,\n RouteObject,\n} from \"./context\";\nimport {\n AwaitContext,\n DataRouterContext,\n DataRouterStateContext,\n LocationContext,\n NavigationContext,\n RouteContext,\n RouteErrorContext,\n} from \"./context\";\n\n/**\n * Returns the full href for the given \"to\" value. This is useful for building\n * custom links that are also accessible and preserve right-click behavior.\n *\n * @see https://reactrouter.com/hooks/use-href\n */\nexport function useHref(\n to: To,\n { relative }: { relative?: RelativeRoutingType } = {}\n): string {\n invariant(\n useInRouterContext(),\n // TODO: This error is probably because they somehow have 2 versions of the\n // router loaded. We can help them understand how to avoid that.\n `useHref() may be used only in the context of a component.`\n );\n\n let { basename, navigator } = React.useContext(NavigationContext);\n let { hash, pathname, search } = useResolvedPath(to, { relative });\n\n let joinedPathname = pathname;\n\n // If we're operating within a basename, prepend it to the pathname prior\n // to creating the href. If this is a root navigation, then just use the raw\n // basename which allows the basename to have full control over the presence\n // of a trailing slash on root links\n if (basename !== \"/\") {\n joinedPathname =\n pathname === \"/\" ? basename : joinPaths([basename, pathname]);\n }\n\n return navigator.createHref({ pathname: joinedPathname, search, hash });\n}\n\n/**\n * Returns true if this component is a descendant of a ``.\n *\n * @see https://reactrouter.com/hooks/use-in-router-context\n */\nexport function useInRouterContext(): boolean {\n return React.useContext(LocationContext) != null;\n}\n\n/**\n * Returns the current location object, which represents the current URL in web\n * browsers.\n *\n * Note: If you're using this it may mean you're doing some of your own\n * \"routing\" in your app, and we'd like to know what your use case is. We may\n * be able to provide something higher-level to better suit your needs.\n *\n * @see https://reactrouter.com/hooks/use-location\n */\nexport function useLocation(): Location {\n invariant(\n useInRouterContext(),\n // TODO: This error is probably because they somehow have 2 versions of the\n // router loaded. We can help them understand how to avoid that.\n `useLocation() may be used only in the context of a component.`\n );\n\n return React.useContext(LocationContext).location;\n}\n\n/**\n * Returns the current navigation action which describes how the router came to\n * the current location, either by a pop, push, or replace on the history stack.\n *\n * @see https://reactrouter.com/hooks/use-navigation-type\n */\nexport function useNavigationType(): NavigationType {\n return React.useContext(LocationContext).navigationType;\n}\n\n/**\n * Returns a PathMatch object if the given pattern matches the current URL.\n * This is useful for components that need to know \"active\" state, e.g.\n * ``.\n *\n * @see https://reactrouter.com/hooks/use-match\n */\nexport function useMatch<\n ParamKey extends ParamParseKey,\n Path extends string\n>(pattern: PathPattern | Path): PathMatch | null {\n invariant(\n useInRouterContext(),\n // TODO: This error is probably because they somehow have 2 versions of the\n // router loaded. We can help them understand how to avoid that.\n `useMatch() may be used only in the context of a component.`\n );\n\n let { pathname } = useLocation();\n return React.useMemo(\n () => matchPath(pattern, decodePath(pathname)),\n [pathname, pattern]\n );\n}\n\n/**\n * The interface for the navigate() function returned from useNavigate().\n */\nexport interface NavigateFunction {\n (to: To, options?: NavigateOptions): void;\n (delta: number): void;\n}\n\nconst navigateEffectWarning =\n `You should call navigate() in a React.useEffect(), not when ` +\n `your component is first rendered.`;\n\n// Mute warnings for calls to useNavigate in SSR environments\nfunction useIsomorphicLayoutEffect(\n cb: Parameters[0]\n) {\n let isStatic = React.useContext(NavigationContext).static;\n if (!isStatic) {\n // We should be able to get rid of this once react 18.3 is released\n // See: https://github.com/facebook/react/pull/26395\n // eslint-disable-next-line react-hooks/rules-of-hooks\n React.useLayoutEffect(cb);\n }\n}\n\n/**\n * Returns an imperative method for changing the location. Used by ``s, but\n * may also be used by other elements to change the location.\n *\n * @see https://reactrouter.com/hooks/use-navigate\n */\nexport function useNavigate(): NavigateFunction {\n let { isDataRoute } = React.useContext(RouteContext);\n // Conditional usage is OK here because the usage of a data router is static\n // eslint-disable-next-line react-hooks/rules-of-hooks\n return isDataRoute ? useNavigateStable() : useNavigateUnstable();\n}\n\nfunction useNavigateUnstable(): NavigateFunction {\n invariant(\n useInRouterContext(),\n // TODO: This error is probably because they somehow have 2 versions of the\n // router loaded. We can help them understand how to avoid that.\n `useNavigate() may be used only in the context of a component.`\n );\n\n let dataRouterContext = React.useContext(DataRouterContext);\n let { basename, future, navigator } = React.useContext(NavigationContext);\n let { matches } = React.useContext(RouteContext);\n let { pathname: locationPathname } = useLocation();\n\n let routePathnamesJson = JSON.stringify(\n getResolveToMatches(matches, future.v7_relativeSplatPath)\n );\n\n let activeRef = React.useRef(false);\n useIsomorphicLayoutEffect(() => {\n activeRef.current = true;\n });\n\n let navigate: NavigateFunction = React.useCallback(\n (to: To | number, options: NavigateOptions = {}) => {\n warning(activeRef.current, navigateEffectWarning);\n\n // Short circuit here since if this happens on first render the navigate\n // is useless because we haven't wired up our history listener yet\n if (!activeRef.current) return;\n\n if (typeof to === \"number\") {\n navigator.go(to);\n return;\n }\n\n let path = resolveTo(\n to,\n JSON.parse(routePathnamesJson),\n locationPathname,\n options.relative === \"path\"\n );\n\n // If we're operating within a basename, prepend it to the pathname prior\n // to handing off to history (but only if we're not in a data router,\n // otherwise it'll prepend the basename inside of the router).\n // If this is a root navigation, then we navigate to the raw basename\n // which allows the basename to have full control over the presence of a\n // trailing slash on root links\n if (dataRouterContext == null && basename !== \"/\") {\n path.pathname =\n path.pathname === \"/\"\n ? basename\n : joinPaths([basename, path.pathname]);\n }\n\n (!!options.replace ? navigator.replace : navigator.push)(\n path,\n options.state,\n options\n );\n },\n [\n basename,\n navigator,\n routePathnamesJson,\n locationPathname,\n dataRouterContext,\n ]\n );\n\n return navigate;\n}\n\nconst OutletContext = React.createContext(null);\n\n/**\n * Returns the context (if provided) for the child route at this level of the route\n * hierarchy.\n * @see https://reactrouter.com/hooks/use-outlet-context\n */\nexport function useOutletContext(): Context {\n return React.useContext(OutletContext) as Context;\n}\n\n/**\n * Returns the element for the child route at this level of the route\n * hierarchy. Used internally by `` to render child routes.\n *\n * @see https://reactrouter.com/hooks/use-outlet\n */\nexport function useOutlet(context?: unknown): React.ReactElement | null {\n let outlet = React.useContext(RouteContext).outlet;\n if (outlet) {\n return (\n {outlet}\n );\n }\n return outlet;\n}\n\n/**\n * Returns an object of key/value pairs of the dynamic params from the current\n * URL that were matched by the route path.\n *\n * @see https://reactrouter.com/hooks/use-params\n */\nexport function useParams<\n ParamsOrKey extends string | Record = string\n>(): Readonly<\n [ParamsOrKey] extends [string] ? Params : Partial\n> {\n let { matches } = React.useContext(RouteContext);\n let routeMatch = matches[matches.length - 1];\n return routeMatch ? (routeMatch.params as any) : {};\n}\n\n/**\n * Resolves the pathname of the given `to` value against the current location.\n *\n * @see https://reactrouter.com/hooks/use-resolved-path\n */\nexport function useResolvedPath(\n to: To,\n { relative }: { relative?: RelativeRoutingType } = {}\n): Path {\n let { future } = React.useContext(NavigationContext);\n let { matches } = React.useContext(RouteContext);\n let { pathname: locationPathname } = useLocation();\n let routePathnamesJson = JSON.stringify(\n getResolveToMatches(matches, future.v7_relativeSplatPath)\n );\n\n return React.useMemo(\n () =>\n resolveTo(\n to,\n JSON.parse(routePathnamesJson),\n locationPathname,\n relative === \"path\"\n ),\n [to, routePathnamesJson, locationPathname, relative]\n );\n}\n\n/**\n * Returns the element of the route that matched the current location, prepared\n * with the correct context to render the remainder of the route tree. Route\n * elements in the tree must render an `` to render their child route's\n * element.\n *\n * @see https://reactrouter.com/hooks/use-routes\n */\nexport function useRoutes(\n routes: RouteObject[],\n locationArg?: Partial | string\n): React.ReactElement | null {\n return useRoutesImpl(routes, locationArg);\n}\n\n// Internal implementation with accept optional param for RouterProvider usage\nexport function useRoutesImpl(\n routes: RouteObject[],\n locationArg?: Partial | string,\n dataRouterState?: RemixRouter[\"state\"],\n future?: RemixRouter[\"future\"]\n): React.ReactElement | null {\n invariant(\n useInRouterContext(),\n // TODO: This error is probably because they somehow have 2 versions of the\n // router loaded. We can help them understand how to avoid that.\n `useRoutes() may be used only in the context of a component.`\n );\n\n let { navigator } = React.useContext(NavigationContext);\n let { matches: parentMatches } = React.useContext(RouteContext);\n let routeMatch = parentMatches[parentMatches.length - 1];\n let parentParams = routeMatch ? routeMatch.params : {};\n let parentPathname = routeMatch ? routeMatch.pathname : \"/\";\n let parentPathnameBase = routeMatch ? routeMatch.pathnameBase : \"/\";\n let parentRoute = routeMatch && routeMatch.route;\n\n if (__DEV__) {\n // You won't get a warning about 2 different under a \n // without a trailing *, but this is a best-effort warning anyway since we\n // cannot even give the warning unless they land at the parent route.\n //\n // Example:\n //\n // \n // {/* This route path MUST end with /* because otherwise\n // it will never match /blog/post/123 */}\n // } />\n // } />\n // \n //\n // function Blog() {\n // return (\n // \n // } />\n // \n // );\n // }\n let parentPath = (parentRoute && parentRoute.path) || \"\";\n warningOnce(\n parentPathname,\n !parentRoute || parentPath.endsWith(\"*\"),\n `You rendered descendant (or called \\`useRoutes()\\`) at ` +\n `\"${parentPathname}\" (under ) but the ` +\n `parent route path has no trailing \"*\". This means if you navigate ` +\n `deeper, the parent won't match anymore and therefore the child ` +\n `routes will never render.\\n\\n` +\n `Please change the parent to .`\n );\n }\n\n let locationFromContext = useLocation();\n\n let location;\n if (locationArg) {\n let parsedLocationArg =\n typeof locationArg === \"string\" ? parsePath(locationArg) : locationArg;\n\n invariant(\n parentPathnameBase === \"/\" ||\n parsedLocationArg.pathname?.startsWith(parentPathnameBase),\n `When overriding the location using \\`\\` or \\`useRoutes(routes, location)\\`, ` +\n `the location pathname must begin with the portion of the URL pathname that was ` +\n `matched by all parent routes. The current pathname base is \"${parentPathnameBase}\" ` +\n `but pathname \"${parsedLocationArg.pathname}\" was given in the \\`location\\` prop.`\n );\n\n location = parsedLocationArg;\n } else {\n location = locationFromContext;\n }\n\n let pathname = location.pathname || \"/\";\n\n let remainingPathname = pathname;\n if (parentPathnameBase !== \"/\") {\n // Determine the remaining pathname by removing the # of URL segments the\n // parentPathnameBase has, instead of removing based on character count.\n // This is because we can't guarantee that incoming/outgoing encodings/\n // decodings will match exactly.\n // We decode paths before matching on a per-segment basis with\n // decodeURIComponent(), but we re-encode pathnames via `new URL()` so they\n // match what `window.location.pathname` would reflect. Those don't 100%\n // align when it comes to encoded URI characters such as % and &.\n //\n // So we may end up with:\n // pathname: \"/descendant/a%25b/match\"\n // parentPathnameBase: \"/descendant/a%b\"\n //\n // And the direct substring removal approach won't work :/\n let parentSegments = parentPathnameBase.replace(/^\\//, \"\").split(\"/\");\n let segments = pathname.replace(/^\\//, \"\").split(\"/\");\n remainingPathname = \"/\" + segments.slice(parentSegments.length).join(\"/\");\n }\n\n let matches = matchRoutes(routes, { pathname: remainingPathname });\n\n if (__DEV__) {\n warning(\n parentRoute || matches != null,\n `No routes matched location \"${location.pathname}${location.search}${location.hash}\" `\n );\n\n warning(\n matches == null ||\n matches[matches.length - 1].route.element !== undefined ||\n matches[matches.length - 1].route.Component !== undefined ||\n matches[matches.length - 1].route.lazy !== undefined,\n `Matched leaf route at location \"${location.pathname}${location.search}${location.hash}\" ` +\n `does not have an element or Component. This means it will render an with a ` +\n `null value by default resulting in an \"empty\" page.`\n );\n }\n\n let renderedMatches = _renderMatches(\n matches &&\n matches.map((match) =>\n Object.assign({}, match, {\n params: Object.assign({}, parentParams, match.params),\n pathname: joinPaths([\n parentPathnameBase,\n // Re-encode pathnames that were decoded inside matchRoutes\n navigator.encodeLocation\n ? navigator.encodeLocation(match.pathname).pathname\n : match.pathname,\n ]),\n pathnameBase:\n match.pathnameBase === \"/\"\n ? parentPathnameBase\n : joinPaths([\n parentPathnameBase,\n // Re-encode pathnames that were decoded inside matchRoutes\n navigator.encodeLocation\n ? navigator.encodeLocation(match.pathnameBase).pathname\n : match.pathnameBase,\n ]),\n })\n ),\n parentMatches,\n dataRouterState,\n future\n );\n\n // When a user passes in a `locationArg`, the associated routes need to\n // be wrapped in a new `LocationContext.Provider` in order for `useLocation`\n // to use the scoped location instead of the global location.\n if (locationArg && renderedMatches) {\n return (\n \n {renderedMatches}\n \n );\n }\n\n return renderedMatches;\n}\n\nfunction DefaultErrorComponent() {\n let error = useRouteError();\n let message = isRouteErrorResponse(error)\n ? `${error.status} ${error.statusText}`\n : error instanceof Error\n ? error.message\n : JSON.stringify(error);\n let stack = error instanceof Error ? error.stack : null;\n let lightgrey = \"rgba(200,200,200, 0.5)\";\n let preStyles = { padding: \"0.5rem\", backgroundColor: lightgrey };\n let codeStyles = { padding: \"2px 4px\", backgroundColor: lightgrey };\n\n let devInfo = null;\n if (__DEV__) {\n console.error(\n \"Error handled by React Router default ErrorBoundary:\",\n error\n );\n\n devInfo = (\n <>\n

💿 Hey developer 👋

\n

\n You can provide a way better UX than this when your app throws errors\n by providing your own ErrorBoundary or{\" \"}\n errorElement prop on your route.\n

\n \n );\n }\n\n return (\n <>\n

Unexpected Application Error!

\n

{message}

\n {stack ?
{stack}
: null}\n {devInfo}\n \n );\n}\n\nconst defaultErrorElement = ;\n\ntype RenderErrorBoundaryProps = React.PropsWithChildren<{\n location: Location;\n revalidation: RevalidationState;\n error: any;\n component: React.ReactNode;\n routeContext: RouteContextObject;\n}>;\n\ntype RenderErrorBoundaryState = {\n location: Location;\n revalidation: RevalidationState;\n error: any;\n};\n\nexport class RenderErrorBoundary extends React.Component<\n RenderErrorBoundaryProps,\n RenderErrorBoundaryState\n> {\n constructor(props: RenderErrorBoundaryProps) {\n super(props);\n this.state = {\n location: props.location,\n revalidation: props.revalidation,\n error: props.error,\n };\n }\n\n static getDerivedStateFromError(error: any) {\n return { error: error };\n }\n\n static getDerivedStateFromProps(\n props: RenderErrorBoundaryProps,\n state: RenderErrorBoundaryState\n ) {\n // When we get into an error state, the user will likely click \"back\" to the\n // previous page that didn't have an error. Because this wraps the entire\n // application, that will have no effect--the error page continues to display.\n // This gives us a mechanism to recover from the error when the location changes.\n //\n // Whether we're in an error state or not, we update the location in state\n // so that when we are in an error state, it gets reset when a new location\n // comes in and the user recovers from the error.\n if (\n state.location !== props.location ||\n (state.revalidation !== \"idle\" && props.revalidation === \"idle\")\n ) {\n return {\n error: props.error,\n location: props.location,\n revalidation: props.revalidation,\n };\n }\n\n // If we're not changing locations, preserve the location but still surface\n // any new errors that may come through. We retain the existing error, we do\n // this because the error provided from the app state may be cleared without\n // the location changing.\n return {\n error: props.error !== undefined ? props.error : state.error,\n location: state.location,\n revalidation: props.revalidation || state.revalidation,\n };\n }\n\n componentDidCatch(error: any, errorInfo: any) {\n console.error(\n \"React Router caught the following error during render\",\n error,\n errorInfo\n );\n }\n\n render() {\n return this.state.error !== undefined ? (\n \n \n \n ) : (\n this.props.children\n );\n }\n}\n\ninterface RenderedRouteProps {\n routeContext: RouteContextObject;\n match: RouteMatch;\n children: React.ReactNode | null;\n}\n\nfunction RenderedRoute({ routeContext, match, children }: RenderedRouteProps) {\n let dataRouterContext = React.useContext(DataRouterContext);\n\n // Track how deep we got in our render pass to emulate SSR componentDidCatch\n // in a DataStaticRouter\n if (\n dataRouterContext &&\n dataRouterContext.static &&\n dataRouterContext.staticContext &&\n (match.route.errorElement || match.route.ErrorBoundary)\n ) {\n dataRouterContext.staticContext._deepestRenderedBoundaryId = match.route.id;\n }\n\n return (\n \n {children}\n \n );\n}\n\nexport function _renderMatches(\n matches: RouteMatch[] | null,\n parentMatches: RouteMatch[] = [],\n dataRouterState: RemixRouter[\"state\"] | null = null,\n future: RemixRouter[\"future\"] | null = null\n): React.ReactElement | null {\n if (matches == null) {\n if (!dataRouterState) {\n return null;\n }\n\n if (dataRouterState.errors) {\n // Don't bail if we have data router errors so we can render them in the\n // boundary. Use the pre-matched (or shimmed) matches\n matches = dataRouterState.matches as DataRouteMatch[];\n } else if (\n future?.v7_partialHydration &&\n parentMatches.length === 0 &&\n !dataRouterState.initialized &&\n dataRouterState.matches.length > 0\n ) {\n // Don't bail if we're initializing with partial hydration and we have\n // router matches. That means we're actively running `patchRoutesOnNavigation`\n // so we should render down the partial matches to the appropriate\n // `HydrateFallback`. We only do this if `parentMatches` is empty so it\n // only impacts the root matches for `RouterProvider` and no descendant\n // ``\n matches = dataRouterState.matches as DataRouteMatch[];\n } else {\n return null;\n }\n }\n\n let renderedMatches = matches;\n\n // If we have data errors, trim matches to the highest error boundary\n let errors = dataRouterState?.errors;\n if (errors != null) {\n let errorIndex = renderedMatches.findIndex(\n (m) => m.route.id && errors?.[m.route.id] !== undefined\n );\n invariant(\n errorIndex >= 0,\n `Could not find a matching route for errors on route IDs: ${Object.keys(\n errors\n ).join(\",\")}`\n );\n renderedMatches = renderedMatches.slice(\n 0,\n Math.min(renderedMatches.length, errorIndex + 1)\n );\n }\n\n // If we're in a partial hydration mode, detect if we need to render down to\n // a given HydrateFallback while we load the rest of the hydration data\n let renderFallback = false;\n let fallbackIndex = -1;\n if (dataRouterState && future && future.v7_partialHydration) {\n for (let i = 0; i < renderedMatches.length; i++) {\n let match = renderedMatches[i];\n // Track the deepest fallback up until the first route without data\n if (match.route.HydrateFallback || match.route.hydrateFallbackElement) {\n fallbackIndex = i;\n }\n\n if (match.route.id) {\n let { loaderData, errors } = dataRouterState;\n let needsToRunLoader =\n match.route.loader &&\n loaderData[match.route.id] === undefined &&\n (!errors || errors[match.route.id] === undefined);\n if (match.route.lazy || needsToRunLoader) {\n // We found the first route that's not ready to render (waiting on\n // lazy, or has a loader that hasn't run yet). Flag that we need to\n // render a fallback and render up until the appropriate fallback\n renderFallback = true;\n if (fallbackIndex >= 0) {\n renderedMatches = renderedMatches.slice(0, fallbackIndex + 1);\n } else {\n renderedMatches = [renderedMatches[0]];\n }\n break;\n }\n }\n }\n }\n\n return renderedMatches.reduceRight((outlet, match, index) => {\n // Only data routers handle errors/fallbacks\n let error: any;\n let shouldRenderHydrateFallback = false;\n let errorElement: React.ReactNode | null = null;\n let hydrateFallbackElement: React.ReactNode | null = null;\n if (dataRouterState) {\n error = errors && match.route.id ? errors[match.route.id] : undefined;\n errorElement = match.route.errorElement || defaultErrorElement;\n\n if (renderFallback) {\n if (fallbackIndex < 0 && index === 0) {\n warningOnce(\n \"route-fallback\",\n false,\n \"No `HydrateFallback` element provided to render during initial hydration\"\n );\n shouldRenderHydrateFallback = true;\n hydrateFallbackElement = null;\n } else if (fallbackIndex === index) {\n shouldRenderHydrateFallback = true;\n hydrateFallbackElement = match.route.hydrateFallbackElement || null;\n }\n }\n }\n\n let matches = parentMatches.concat(renderedMatches.slice(0, index + 1));\n let getChildren = () => {\n let children: React.ReactNode;\n if (error) {\n children = errorElement;\n } else if (shouldRenderHydrateFallback) {\n children = hydrateFallbackElement;\n } else if (match.route.Component) {\n // Note: This is a de-optimized path since React won't re-use the\n // ReactElement since it's identity changes with each new\n // React.createElement call. We keep this so folks can use\n // `` in `` but generally `Component`\n // usage is only advised in `RouterProvider` when we can convert it to\n // `element` ahead of time.\n children = ;\n } else if (match.route.element) {\n children = match.route.element;\n } else {\n children = outlet;\n }\n return (\n \n );\n };\n // Only wrap in an error boundary within data router usages when we have an\n // ErrorBoundary/errorElement on this route. Otherwise let it bubble up to\n // an ancestor ErrorBoundary/errorElement\n return dataRouterState &&\n (match.route.ErrorBoundary || match.route.errorElement || index === 0) ? (\n \n ) : (\n getChildren()\n );\n }, null as React.ReactElement | null);\n}\n\nenum DataRouterHook {\n UseBlocker = \"useBlocker\",\n UseRevalidator = \"useRevalidator\",\n UseNavigateStable = \"useNavigate\",\n}\n\nenum DataRouterStateHook {\n UseBlocker = \"useBlocker\",\n UseLoaderData = \"useLoaderData\",\n UseActionData = \"useActionData\",\n UseRouteError = \"useRouteError\",\n UseNavigation = \"useNavigation\",\n UseRouteLoaderData = \"useRouteLoaderData\",\n UseMatches = \"useMatches\",\n UseRevalidator = \"useRevalidator\",\n UseNavigateStable = \"useNavigate\",\n UseRouteId = \"useRouteId\",\n}\n\nfunction getDataRouterConsoleError(\n hookName: DataRouterHook | DataRouterStateHook\n) {\n return `${hookName} must be used within a data router. See https://reactrouter.com/routers/picking-a-router.`;\n}\n\nfunction useDataRouterContext(hookName: DataRouterHook) {\n let ctx = React.useContext(DataRouterContext);\n invariant(ctx, getDataRouterConsoleError(hookName));\n return ctx;\n}\n\nfunction useDataRouterState(hookName: DataRouterStateHook) {\n let state = React.useContext(DataRouterStateContext);\n invariant(state, getDataRouterConsoleError(hookName));\n return state;\n}\n\nfunction useRouteContext(hookName: DataRouterStateHook) {\n let route = React.useContext(RouteContext);\n invariant(route, getDataRouterConsoleError(hookName));\n return route;\n}\n\n// Internal version with hookName-aware debugging\nfunction useCurrentRouteId(hookName: DataRouterStateHook) {\n let route = useRouteContext(hookName);\n let thisRoute = route.matches[route.matches.length - 1];\n invariant(\n thisRoute.route.id,\n `${hookName} can only be used on routes that contain a unique \"id\"`\n );\n return thisRoute.route.id;\n}\n\n/**\n * Returns the ID for the nearest contextual route\n */\nexport function useRouteId() {\n return useCurrentRouteId(DataRouterStateHook.UseRouteId);\n}\n\n/**\n * Returns the current navigation, defaulting to an \"idle\" navigation when\n * no navigation is in progress\n */\nexport function useNavigation() {\n let state = useDataRouterState(DataRouterStateHook.UseNavigation);\n return state.navigation;\n}\n\n/**\n * Returns a revalidate function for manually triggering revalidation, as well\n * as the current state of any manual revalidations\n */\nexport function useRevalidator() {\n let dataRouterContext = useDataRouterContext(DataRouterHook.UseRevalidator);\n let state = useDataRouterState(DataRouterStateHook.UseRevalidator);\n return React.useMemo(\n () => ({\n revalidate: dataRouterContext.router.revalidate,\n state: state.revalidation,\n }),\n [dataRouterContext.router.revalidate, state.revalidation]\n );\n}\n\n/**\n * Returns the active route matches, useful for accessing loaderData for\n * parent/child routes or the route \"handle\" property\n */\nexport function useMatches(): UIMatch[] {\n let { matches, loaderData } = useDataRouterState(\n DataRouterStateHook.UseMatches\n );\n return React.useMemo(\n () => matches.map((m) => convertRouteMatchToUiMatch(m, loaderData)),\n [matches, loaderData]\n );\n}\n\n/**\n * Returns the loader data for the nearest ancestor Route loader\n */\nexport function useLoaderData(): unknown {\n let state = useDataRouterState(DataRouterStateHook.UseLoaderData);\n let routeId = useCurrentRouteId(DataRouterStateHook.UseLoaderData);\n\n if (state.errors && state.errors[routeId] != null) {\n console.error(\n `You cannot \\`useLoaderData\\` in an errorElement (routeId: ${routeId})`\n );\n return undefined;\n }\n return state.loaderData[routeId];\n}\n\n/**\n * Returns the loaderData for the given routeId\n */\nexport function useRouteLoaderData(routeId: string): unknown {\n let state = useDataRouterState(DataRouterStateHook.UseRouteLoaderData);\n return state.loaderData[routeId];\n}\n\n/**\n * Returns the action data for the nearest ancestor Route action\n */\nexport function useActionData(): unknown {\n let state = useDataRouterState(DataRouterStateHook.UseActionData);\n let routeId = useCurrentRouteId(DataRouterStateHook.UseLoaderData);\n return state.actionData ? state.actionData[routeId] : undefined;\n}\n\n/**\n * Returns the nearest ancestor Route error, which could be a loader/action\n * error or a render error. This is intended to be called from your\n * ErrorBoundary/errorElement to display a proper error message.\n */\nexport function useRouteError(): unknown {\n let error = React.useContext(RouteErrorContext);\n let state = useDataRouterState(DataRouterStateHook.UseRouteError);\n let routeId = useCurrentRouteId(DataRouterStateHook.UseRouteError);\n\n // If this was a render error, we put it in a RouteError context inside\n // of RenderErrorBoundary\n if (error !== undefined) {\n return error;\n }\n\n // Otherwise look for errors from our data router state\n return state.errors?.[routeId];\n}\n\n/**\n * Returns the happy-path data from the nearest ancestor `` value\n */\nexport function useAsyncValue(): unknown {\n let value = React.useContext(AwaitContext);\n return value?._data;\n}\n\n/**\n * Returns the error from the nearest ancestor `` value\n */\nexport function useAsyncError(): unknown {\n let value = React.useContext(AwaitContext);\n return value?._error;\n}\n\nlet blockerId = 0;\n\n/**\n * Allow the application to block navigations within the SPA and present the\n * user a confirmation dialog to confirm the navigation. Mostly used to avoid\n * using half-filled form data. This does not handle hard-reloads or\n * cross-origin navigations.\n */\nexport function useBlocker(shouldBlock: boolean | BlockerFunction): Blocker {\n let { router, basename } = useDataRouterContext(DataRouterHook.UseBlocker);\n let state = useDataRouterState(DataRouterStateHook.UseBlocker);\n\n let [blockerKey, setBlockerKey] = React.useState(\"\");\n let blockerFunction = React.useCallback(\n (arg) => {\n if (typeof shouldBlock !== \"function\") {\n return !!shouldBlock;\n }\n if (basename === \"/\") {\n return shouldBlock(arg);\n }\n\n // If they provided us a function and we've got an active basename, strip\n // it from the locations we expose to the user to match the behavior of\n // useLocation\n let { currentLocation, nextLocation, historyAction } = arg;\n return shouldBlock({\n currentLocation: {\n ...currentLocation,\n pathname:\n stripBasename(currentLocation.pathname, basename) ||\n currentLocation.pathname,\n },\n nextLocation: {\n ...nextLocation,\n pathname:\n stripBasename(nextLocation.pathname, basename) ||\n nextLocation.pathname,\n },\n historyAction,\n });\n },\n [basename, shouldBlock]\n );\n\n // This effect is in charge of blocker key assignment and deletion (which is\n // tightly coupled to the key)\n React.useEffect(() => {\n let key = String(++blockerId);\n setBlockerKey(key);\n return () => router.deleteBlocker(key);\n }, [router]);\n\n // This effect handles assigning the blockerFunction. This is to handle\n // unstable blocker function identities, and happens only after the prior\n // effect so we don't get an orphaned blockerFunction in the router with a\n // key of \"\". Until then we just have the IDLE_BLOCKER.\n React.useEffect(() => {\n if (blockerKey !== \"\") {\n router.getBlocker(blockerKey, blockerFunction);\n }\n }, [router, blockerKey, blockerFunction]);\n\n // Prefer the blocker from `state` not `router.state` since DataRouterContext\n // is memoized so this ensures we update on blocker state updates\n return blockerKey && state.blockers.has(blockerKey)\n ? state.blockers.get(blockerKey)!\n : IDLE_BLOCKER;\n}\n\n/**\n * Stable version of useNavigate that is used when we are in the context of\n * a RouterProvider.\n */\nfunction useNavigateStable(): NavigateFunction {\n let { router } = useDataRouterContext(DataRouterHook.UseNavigateStable);\n let id = useCurrentRouteId(DataRouterStateHook.UseNavigateStable);\n\n let activeRef = React.useRef(false);\n useIsomorphicLayoutEffect(() => {\n activeRef.current = true;\n });\n\n let navigate: NavigateFunction = React.useCallback(\n (to: To | number, options: NavigateOptions = {}) => {\n warning(activeRef.current, navigateEffectWarning);\n\n // Short circuit here since if this happens on first render the navigate\n // is useless because we haven't wired up our router subscriber yet\n if (!activeRef.current) return;\n\n if (typeof to === \"number\") {\n router.navigate(to);\n } else {\n router.navigate(to, { fromRouteId: id, ...options });\n }\n },\n [router, id]\n );\n\n return navigate;\n}\n\nconst alreadyWarned: Record = {};\n\nfunction warningOnce(key: string, cond: boolean, message: string) {\n if (!cond && !alreadyWarned[key]) {\n alreadyWarned[key] = true;\n warning(false, message);\n }\n}\n","import type {\n InitialEntry,\n LazyRouteFunction,\n Location,\n MemoryHistory,\n RelativeRoutingType,\n Router as RemixRouter,\n RouterState,\n RouterSubscriber,\n To,\n TrackedPromise,\n} from \"@remix-run/router\";\nimport {\n AbortedDeferredError,\n Action as NavigationType,\n createMemoryHistory,\n UNSAFE_getResolveToMatches as getResolveToMatches,\n UNSAFE_invariant as invariant,\n parsePath,\n resolveTo,\n stripBasename,\n UNSAFE_warning as warning,\n} from \"@remix-run/router\";\nimport * as React from \"react\";\n\nimport type {\n DataRouteObject,\n IndexRouteObject,\n Navigator,\n NonIndexRouteObject,\n RouteMatch,\n RouteObject,\n} from \"./context\";\nimport {\n AwaitContext,\n DataRouterContext,\n DataRouterStateContext,\n LocationContext,\n NavigationContext,\n RouteContext,\n} from \"./context\";\nimport {\n _renderMatches,\n useAsyncValue,\n useInRouterContext,\n useLocation,\n useNavigate,\n useOutlet,\n useRoutes,\n useRoutesImpl,\n} from \"./hooks\";\n\nexport interface FutureConfig {\n v7_relativeSplatPath: boolean;\n v7_startTransition: boolean;\n}\n\nexport interface RouterProviderProps {\n fallbackElement?: React.ReactNode;\n router: RemixRouter;\n // Only accept future flags relevant to rendering behavior\n // routing flags should be accessed via router.future\n future?: Partial>;\n}\n\n/**\n Webpack + React 17 fails to compile on any of the following because webpack\n complains that `startTransition` doesn't exist in `React`:\n * import { startTransition } from \"react\"\n * import * as React from from \"react\";\n \"startTransition\" in React ? React.startTransition(() => setState()) : setState()\n * import * as React from from \"react\";\n \"startTransition\" in React ? React[\"startTransition\"](() => setState()) : setState()\n\n Moving it to a constant such as the following solves the Webpack/React 17 issue:\n * import * as React from from \"react\";\n const START_TRANSITION = \"startTransition\";\n START_TRANSITION in React ? React[START_TRANSITION](() => setState()) : setState()\n\n However, that introduces webpack/terser minification issues in production builds\n in React 18 where minification/obfuscation ends up removing the call of\n React.startTransition entirely from the first half of the ternary. Grabbing\n this exported reference once up front resolves that issue.\n\n See https://github.com/remix-run/react-router/issues/10579\n*/\nconst START_TRANSITION = \"startTransition\";\nconst startTransitionImpl = React[START_TRANSITION];\n\n/**\n * Given a Remix Router instance, render the appropriate UI\n */\nexport function RouterProvider({\n fallbackElement,\n router,\n future,\n}: RouterProviderProps): React.ReactElement {\n let [state, setStateImpl] = React.useState(router.state);\n let { v7_startTransition } = future || {};\n\n let setState = React.useCallback(\n (newState: RouterState) => {\n if (v7_startTransition && startTransitionImpl) {\n startTransitionImpl(() => setStateImpl(newState));\n } else {\n setStateImpl(newState);\n }\n },\n [setStateImpl, v7_startTransition]\n );\n\n // Need to use a layout effect here so we are subscribed early enough to\n // pick up on any render-driven redirects/navigations (useEffect/)\n React.useLayoutEffect(() => router.subscribe(setState), [router, setState]);\n\n React.useEffect(() => {\n warning(\n fallbackElement == null || !router.future.v7_partialHydration,\n \"`` is deprecated when using \" +\n \"`v7_partialHydration`, use a `HydrateFallback` component instead\"\n );\n // Only log this once on initial mount\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, []);\n\n let navigator = React.useMemo((): Navigator => {\n return {\n createHref: router.createHref,\n encodeLocation: router.encodeLocation,\n go: (n) => router.navigate(n),\n push: (to, state, opts) =>\n router.navigate(to, {\n state,\n preventScrollReset: opts?.preventScrollReset,\n }),\n replace: (to, state, opts) =>\n router.navigate(to, {\n replace: true,\n state,\n preventScrollReset: opts?.preventScrollReset,\n }),\n };\n }, [router]);\n\n let basename = router.basename || \"/\";\n\n let dataRouterContext = React.useMemo(\n () => ({\n router,\n navigator,\n static: false,\n basename,\n }),\n [router, navigator, basename]\n );\n\n // The fragment and {null} here are important! We need them to keep React 18's\n // useId happy when we are server-rendering since we may have a