{"version":3,"file":"js/chunk-vendors-6000dc47.bc0ee2dd.js","mappings":"qMAgBIA,EAAa,CAAC,IAAK,IAAK,MAMxBC,EAA2B,SAAUC,GAErC,SAASD,IACL,IAAIE,EAAmB,OAAXD,GAAmBA,EAAOE,MAAMC,KAAMC,YAAcD,KAiBhE,OAbAF,EAAMI,YAAc,WAMpBJ,EAAMK,QAAU,CACZC,UAAW,GACXC,SAAS,EACTC,SAAU,EACVC,WAAW,EACXC,gBAAgB,GAEbV,CACX,CA8LA,OAlNA,QAAUF,EAAWC,GA2BrBD,EAAUa,MAAQ,SAAUC,GACxB,QAAOd,EAAUe,qBAAqBD,EAC1C,EAOAd,EAAUe,qBAAuB,SAAUD,GAIvC,IAEIE,EAFAC,EAAQH,EAAKI,MAAM,MACnBC,EAAMF,EAAMG,OAgChB,OA9BA,KAAYrB,GAAY,SAAUsB,GAG9B,IAFA,IAAIC,EAAU,EAAGC,EAAa,EAErBC,EAAI,EAAGA,EAAIL,IAAOK,EAAG,CAG1B,GADAF,EAAUL,EAAMO,GAAGN,MAAMG,GAAKD,SAC1BE,EAAU,GAYT,CAGDC,EAAa,EACb,KACJ,CAfI,GAAmB,IAAfA,EAEAA,EAAaD,OAEZ,GAAIA,GAAWC,EAAY,CAE5BA,EAAa,EACb,KACJ,CAQR,CAEIA,IACAP,EAAYK,EAEpB,IACOL,CACX,EAOAhB,EAAUyB,UAAUC,MAAQ,SAAUC,GAE7BvB,KAAKG,QAAQC,YACdJ,KAAKG,QAAQC,UAAYR,EAAUe,qBAAqBY,IAG5D,IAMyBC,EAAKJ,EAoB1BK,EA1BAf,EAAOV,KAAK0B,WAAWH,EAAKvB,KAAKG,QAAQC,WAEzCuB,EAAQ,KAAe3B,KAAKG,QAAQyB,SACpCC,EAAU7B,KAAK8B,gBACfC,EAAQ/B,KAAKgC,cAEbC,EAAM,GAAIC,EAAO,GAErB,IAAKd,EAAI,EAAGA,EAAIpB,KAAKG,QAAQG,SAAUc,IACnCV,EAAKyB,QAGT,GAAInC,KAAKG,QAAQK,eAAgB,CAC7B0B,EAAOxB,EAAKyB,QAEZ,IAAK,IAAIC,EAAI,EAAGA,EAAIF,EAAKlB,OAAQoB,IAE7BZ,EAAM,KAAeU,EAAKE,IAAMF,EAAKE,GAAGC,QAAQ,cAAe,IAAM,GAEjE,KAAOb,IACPA,EAAM,MAAQY,GAElBF,EAAKE,GAAKZ,CAElB,CAGA,MAAO,EAAM,CAET,GADAC,EAAMzB,KAAKG,QAAQE,QAAUK,EAAK4B,MAAQ5B,EAAKyB,SAC1CV,EACD,MAEJ,IAAIzB,KAAKG,QAAQI,WAA4B,IAAfkB,EAAIT,QAA2B,KAAXS,EAAI,GAAtD,CAGA,IAAIc,EAAY,CAAC,EACjB,IAAKnB,EAAI,EAAGA,EAAIK,EAAIT,OAAQI,IACxBI,OAAMgB,IAAcN,EAAKd,GAAK,MAAQA,EAAIc,EAAKd,GAC/CmB,EAAUf,GAAkB,KAAXC,EAAIL,GAAYpB,KAAKG,QAAQyB,QAAUH,EAAIL,GAExDO,IACAY,EAAUf,GAAOxB,KAAKyC,aAAaF,EAAUf,KAE7CK,IACAU,EAAUf,GAAOxB,KAAK0C,cAAclB,EAAKe,EAAUf,KAEnDO,IACAQ,EAAUf,GAAOxB,KAAK2C,YAAYnB,EAAKe,EAAUf,KAGzDS,EAAIW,KAAKL,EAhBT,CAiBJ,CACA,OAAON,CACX,EAWArC,EAAUyB,UAAUK,WAAa,SAAUhB,EAAMN,GAG7CA,EAAaA,GAAa,IAE1B,IAAIyC,EAAa,IAAIC,OAErB,MAAQ1C,EAAR,iDAIgBA,EAAY,aAAe,MAGvC2C,EAAU,CACV,IAIAC,EAAa,KAGjB,MAAO,EAAM,CAET,GADAA,EAAaH,EAAWI,KAAKvC,IACxBsC,EACD,MAGJ,IAAIE,EAAsBF,EAAW,GAKjCE,EAAoBlC,QACnBkC,IAAwB9C,GAGzB2C,EAAQH,KAAK,IAKjB,IAAIO,OAAkB,EAIlBA,EAHAH,EAAW,GAGOA,EAAW,GAAGX,QAAQ,IAAIS,OAAO,KAAQ,KAAM,KAI/CE,EAAW,GAIjCD,EAAQA,EAAQ/B,OAAS,GAAG4B,KAAKO,EACrC,CAEA,OAAO,CACX,EACOvD,CACX,CApN8B,CAoN5B,I,iHC5MEwD,EAA4B,WAC5B,SAASA,IAILpD,KAAKqD,QAAU,IAAI,KAAQrD,KAC/B,CAiHA,OA1GAoD,EAAW/B,UAAUiC,KAAO,SAAUC,GAClC,IAAIC,EAAUC,MAAMC,QAAQH,GAAUA,EAAS,CAACA,GAE5CI,EAAW,KAAWH,GAAS,SAAUpB,GAIzC,OAFAA,EAAEwB,oBAAoB,WACtBxB,EAAEwB,oBAAoB,eACf,IAAUxB,EAAEyB,IAAKzB,EAAGA,EAAE0B,eACjC,IAEAC,QAAQC,IAAIL,GAAUM,MAAK,SAAUhC,GAEjC,KAAYA,GAAK,SAAUiC,GAEvB,IAAIX,EAASW,EAAOC,OAEpBZ,EAAOK,oBAAoB,aACvBM,EAAOE,MACHb,EAAOc,OAAOC,UAAU,UACxBf,EAAOc,OAAOT,oBAAoB,QAAS,CACvCW,KAAM,QACNC,KAAMN,EAAOO,IAAIC,OACjBC,QAASpB,EAAOqB,SAASC,UAAU,0BAA2B,KAAMtB,EAAOM,KAC3EM,OAAQZ,IAMhBA,EAAOuB,YAAYZ,EAAOa,SAAUb,EAAOK,MAE/ChB,EAAOK,oBAAoB,QAC/B,GACJ,IAAGoB,OAAM,SAAU/C,GACXA,EAAIkC,SACJlC,EAAIkC,OAAOP,oBAAoB,aAC3B3B,EAAIkC,OAAOE,OAAOC,UAAU,UAC5BrC,EAAIkC,OAAOE,OAAOT,oBAAoB,QAAS,CAC3CW,KAAM,QACNC,KAAMvC,EAAIwC,IAAIC,OACdC,QAAS1C,EAAIkC,OAAOS,SAASC,UAAU,0BAA2B,KAAM5C,EAAIkC,OAAON,KACnFM,OAAQlC,EAAIkC,SAGpBlC,EAAIkC,OAAOP,oBAAoB,SAEvC,GACJ,EAWAR,EAAW/B,UAAU4D,gBAAkB,SAAU/E,GAE7C,IAAIgF,EAASlF,KAAKqD,QAAQtD,MAAM,kBAAmB,CAC/CmF,OAAQ,KACRX,KAAMrE,IACPgF,OACH,OAAIA,IAGe,OAAfhF,GAAuC,YAAfA,GAA4C,4BAAfA,EAC9C,IAAI,IAEI,QAAfA,GAAwC,oBAAfA,EAClB,IAAI,SADf,EAIJ,EAQAkD,EAAW/B,UAAU8D,gBAAkB,SAAUzE,EAAMR,GAEnD,IAAIgF,EAASlF,KAAKqD,QAAQtD,MAAM,kBAAmB,CAC/CmF,OAAQ,KACRxE,KAAMA,EACN6D,KAAMrE,IACPgF,OAEH,IAAKA,EAAQ,CAGT,GADAA,EAASlF,KAAKiF,gBAAgB/E,GAC1BgF,EAEA,OAAOA,EAEN,GAAI,WAAkBxE,GACvB,OAAOV,KAAKiF,gBAAgB,QAE3B,GAAI,UAAgBvE,GACrB,OAAOV,KAAKiF,gBAAgB,MAEpC,CACA,OAAOC,CACX,EACO9B,CACX,CAxH+B,GA6HpBgC,EAAa,IAAIhC,C,4FCtIxBiC,EAA4B,WAC5B,SAASA,IACT,CA+GA,OAvGAA,EAAWhE,UAAUC,MAAQ,SAAUZ,GACnC,MAAO,EACX,EAEA4E,OAAOC,eAAeF,EAAWhE,UAAW,kBAAmB,CAO3DmE,IAAK,WACD,OAAOxF,KAAKG,QAAQsF,cAAiBzF,KAAKG,QAAQsF,aAAazE,OAAS,CAC5E,EACA0E,YAAY,EACZC,cAAc,IASlBN,EAAWhE,UAAUqB,cAAgB,SAAUkD,EAAOC,GAClD,OAAkD,IAA9C7F,KAAKG,QAAQsF,aAAaK,QAAQF,GAC3B,KAAmBC,GAEvBA,CACX,EACAP,OAAOC,eAAeF,EAAWhE,UAAW,gBAAiB,CAOzDmE,IAAK,WACD,OAAOxF,KAAKG,QAAQ4F,YAAe/F,KAAKG,QAAQ4F,WAAW/E,OAAS,CACxE,EACA0E,YAAY,EACZC,cAAc,IASlBN,EAAWhE,UAAUsB,YAAc,SAAUiD,EAAOC,GAChD,OAAgD,IAA5C7F,KAAKG,QAAQ4F,WAAWD,QAAQF,GACzB5F,KAAKG,QAAQ6F,cAAc1E,MAAMuE,EAAO7F,KAAKiG,YAEjDJ,CACX,EAOAR,EAAWhE,UAAUoB,aAAe,SAAUoD,GAC1C,OAAM,KAAeA,IAAmB,IAATA,IAAgB,KAAe7F,KAAKG,QAAQyB,SAGpEiE,EAFI7F,KAAKG,QAAQyB,OAG5B,EACA0D,OAAOC,eAAeF,EAAWhE,UAAW,gBAAiB,CAUzDmE,IAAK,WAOD,OANKxF,KAAKG,QAAQ6F,gBACdhG,KAAKG,QAAQ6F,cAAgB,IAAI,IAC7BhG,KAAKG,QAAQ8F,aACbjG,KAAKG,QAAQ8F,WAAajG,KAAKG,QAAQ8F,aAGxCjG,KAAKG,QAAQ6F,aACxB,EACAN,YAAY,EACZC,cAAc,IAElBL,OAAOC,eAAeF,EAAWhE,UAAW,aAAc,CAOtDmE,IAAK,WACD,OAAOxF,KAAKG,QAAQ8F,YAAcjG,KAAKgG,cAAcE,eACzD,EACAR,YAAY,EACZC,cAAc,IAEXN,CACX,CAlH+B,E,oLC8B3Bc,EAA4B,SAAUtG,GAKtC,SAASsG,EAAWtC,EAAKqB,GACrB,IAAIpF,EAEJD,EAAOuG,KAAKpG,OAASA,KAuErB,OAnEAF,EAAMuD,QAAU,IAAI,KAAQvD,GAI5BA,EAAMuG,gBAAkB,CAAC,EAWzBvG,EAAMwG,cAAe,EAKrBxG,EAAMyG,mBAAqB,CAAC,EAW5BzG,EAAM0G,YAAa,EAiBnB1G,EAAM2G,oBAAqB,EAI3B3G,EAAM4G,eAAgB,EACtB5G,EAAM6G,UAAY,aAEd9C,IACA/D,EAAM+D,IAAMA,GAGZqB,IAEIpF,EAAMoF,OADW,iBAAVA,EACQ,oBAA2BA,GAG3BA,GAGhBpF,CACX,CAwcA,OAvhBA,QAAUqG,EAAYtG,GAuFtBsG,EAAW9E,UAAUyD,YAAc,SAAUpE,EAAMR,GAI/C,GAFAF,KAAK4D,oBAAoB,gBAEpB5D,KAAKkF,SAENlF,KAAKkF,OAAS,oBAA2BxE,EAAMR,GAC1CF,KAAKkF,QAHd,CA6BA,GAVAlF,KAAKkF,OAAO/E,QAAUH,KAAKqD,QAAQtD,MAAM,gBAAiBC,KAAKkF,OAAO/E,SACtEH,KAAKkF,OAAO/E,QAAQ4F,WAAa/F,KAAKqD,QAAQtD,MAAM,aAAcC,KAAKkF,OAAO/E,QAAQ4F,YAAc,IACpG/F,KAAKkF,OAAO/E,QAAQsF,aAAezF,KAAKqD,QAAQtD,MAAM,eAAgBC,KAAKkF,OAAO/E,QAAQsF,cAAgB,IAEtGzF,KAAKkF,OAAO/E,QAAQ4F,aAAe/F,KAAKkF,OAAO/E,QAAQ6F,gBACvDhG,KAAKkF,OAAO/E,QAAQ6F,cAAgBhG,KAAKgG,eAG7ChG,KAAKU,KAAOV,KAAKqD,QAAQtD,MAAM,aAAcC,KAAKkF,OAAO5D,MAAMtB,KAAKqD,QAAQtD,MAAM,eAAgBW,MAE7F,KAAeV,KAAKU,OAASV,KAAKqE,OAAOC,UAAU,cAAe,CACnE,IAAIsC,EAAU,CACVrC,KAAM,aACNI,QAAS3E,KAAK4E,SAASC,UAAU,yBAA0B,KAAM7E,KAAK6D,KACtEM,OAAQnE,MAEZA,KAAKqE,OAAOT,oBAAoB,aAAcgD,EAClD,CAEA5G,KAAK4D,oBAAoB,cACrB,KAAe5D,KAAKU,OACpBV,KAAK4D,oBAAoB,OAAQ,CAC7B,KAAQ5D,KAAKU,OAMrBV,KAAK6G,SAAW,IAAIC,IA9BpB,KAjBA,CAMQ,GAAI9G,KAAKqE,OAAOC,UAAU,cAAe,CACrC,IAAIyC,EAAU,CACVxC,KAAM,aACNI,QAAS3E,KAAK4E,SAASC,UAAU,mCAAoC,KAAM7E,KAAK6D,KAChFM,OAAQnE,MAEZA,KAAKqE,OAAOT,oBAAoB,aAAcmD,EAClD,CACA/G,KAAK4D,oBAAoB,aAGjC,CA+BJ,EACA0B,OAAOC,eAAeY,EAAW9E,UAAW,MAAO,CAI/CmE,IAAK,WAED,IAAI3B,EAAM7D,KAAKgH,aACThH,KAAKiH,aAAajH,KAAKkH,MACvBlH,KAAKkH,KAKX,OAHIlH,KAAKmH,aAAenH,KAAKoH,UAAU1G,KAAKM,SACxC6C,EAAM7D,KAAKqH,aAAaxD,EAAK7D,KAAKsH,oBAE/BtH,KAAKqD,QAAQtD,MAAM,MAAO8D,EACrC,EAMA0D,IAAK,SAAU1B,GACX7F,KAAKkH,KAAOrB,CAChB,EACAH,YAAY,EACZC,cAAc,IAElBL,OAAOC,eAAeY,EAAW9E,UAAW,iBAAkB,CAI1DmE,IAAK,WACD,OAAOxF,KAAKqD,QAAQtD,MAAM,iBAAkBC,KAAKqG,gBACrD,EAsCAkB,IAAK,SAAU1B,GACX7F,KAAKqG,gBAAkBR,CAC3B,EACAH,YAAY,EACZC,cAAc,IAElBL,OAAOC,eAAeY,EAAW9E,UAAW,SAAU,CAIlDmE,IAAK,WAID,OAHKxF,KAAKwH,UACNxH,KAAKwH,QAAU,IAAI,KAEhBxH,KAAKqD,QAAQtD,MAAM,SAAUC,KAAKwH,QAC7C,EA4BAD,IAAK,SAAU1B,GACX7F,KAAKwH,QAAU3B,CACnB,EACAH,YAAY,EACZC,cAAc,IAElBL,OAAOC,eAAeY,EAAW9E,UAAW,kBAAmB,CAI3DmE,IAAK,WACD,OAAOxF,KAAKqD,QAAQtD,MAAM,gBAAiBC,KAAKyH,iBACpD,EAQAF,IAAK,SAAU1B,GACX,IAAI/F,EAAQE,KACRA,KAAKyH,kBAAoB5B,IACzB7F,KAAKyH,iBAAmB5B,EAEpBA,EACK,KAAe7F,KAAK0H,mBACrB1H,KAAK0H,gBAAkB1H,KAAKqE,OAAOsD,GAAG,SAAS,SAAUC,GACrD9H,EAAM+H,eAAiBC,YAAW,WAC9BhI,EAAMwD,MACV,GAAGxD,EAAMiI,gBACb,KAGC,KAAe/H,KAAK0H,mBACzB1H,KAAK0H,gBAAgBM,UACrBhI,KAAK0H,qBAAkBlF,GAGnC,EACAkD,YAAY,EACZC,cAAc,IAElBL,OAAOC,eAAeY,EAAW9E,UAAW,cAAe,CAIvDmE,IAAK,WACD,OAAOxF,KAAKqD,QAAQtD,MAAM,cAAeC,KAAKsG,aAClD,EAkBAiB,IAAK,SAAU1B,GACX7F,KAAKsG,aAAeT,CACxB,EACAH,YAAY,EACZC,cAAc,IAElBL,OAAOC,eAAeY,EAAW9E,UAAW,oBAAqB,CAI7DmE,IAAK,WACD,OAAOxF,KAAKqD,QAAQtD,MAAM,oBAAqBC,KAAKuG,mBACxD,EAOAgB,IAAK,SAAU1B,GACX7F,KAAKuG,mBAAqBV,CAC9B,EACAH,YAAY,EACZC,cAAc,IAElBL,OAAOC,eAAeY,EAAW9E,UAAW,YAAa,CAIrDmE,IAAK,WACD,OAAOxF,KAAKqD,QAAQtD,MAAM,YAAaC,KAAKwG,WAChD,EAYAe,IAAK,SAAU1B,GACX7F,KAAKwG,WAAaX,CACtB,EACAH,YAAY,EACZC,cAAc,IAElBL,OAAOC,eAAeY,EAAW9E,UAAW,oBAAqB,CAI7DmE,IAAK,WACD,OAAOxF,KAAKqD,QAAQtD,MAAM,oBAAqBC,KAAKyG,mBACxD,EAoBAc,IAAK,SAAU1B,GACX7F,KAAKyG,mBAAqBZ,CAC9B,EACAH,YAAY,EACZC,cAAc,IAElBL,OAAOC,eAAeY,EAAW9E,UAAW,WAAY,CAIpDmE,IAAK,WACD,OAAIxF,KAAKiI,UACEjI,KAAKiI,UAEPjI,KAAKoH,WACVpH,KAAKiI,UAAYjI,KAAKoH,UAAUxC,SACzB5E,KAAKiI,YAEhBjI,KAAK4E,SAAW,IAAI,IACb5E,KAAK4E,SAChB,EAQA2C,IAAK,SAAU1B,GACX7F,KAAKiI,UAAYpC,CACrB,EACAH,YAAY,EACZC,cAAc,IAElBL,OAAOC,eAAeY,EAAW9E,UAAW,gBAAiB,CAIzDmE,IAAK,WACD,OAAIxF,KAAKkI,eACElI,KAAKkI,eAEPlI,KAAKoH,WACVpH,KAAKkI,eAAiBlI,KAAKoH,UAAUpB,cAC9BhG,KAAKkI,iBAEhBlI,KAAKgG,cAAgB,IAAI,IAClBhG,KAAKgG,cAChB,EAQAuB,IAAK,SAAU1B,GACX7F,KAAKkI,eAAiBrC,CAC1B,EACAH,YAAY,EACZC,cAAc,IAQlBQ,EAAW9E,UAAU4F,aAAe,SAAUpD,GAC1C,IAAIsE,GAAS,IAAIrB,MAAOsB,UAAUC,WAC9BC,EAAS,CAAC,EAEd,OADAA,EAAOH,GAAU,GACVnI,KAAKqH,aAAaxD,EAAKyE,EAClC,EAIAnC,EAAW9E,UAAU2G,QAAU,WAC3BnI,EAAOwB,UAAU2G,QAAQ5B,KAAKpG,MAC1BA,KAAK6H,gBACLU,aAAavI,KAAK6H,gBAElB,KAAe7H,KAAK0H,mBACpB1H,KAAK0H,gBAAgBM,UACrBhI,KAAK0H,qBAAkBlF,EAE/B,EASA2D,EAAW9E,UAAUiC,KAAO,WACpBtD,KAAK6D,MACD7D,KAAK6H,gBACLU,aAAavI,KAAK6H,gBAEtB,SAAgB7H,MAExB,EASAmG,EAAW9E,UAAUgG,aAAe,SAAUxD,EAAKyE,GAC/C,IAAIE,EAAO3E,EAAI4E,MAAM,MAAQ,IAAM,IAC/BC,EAAM,GASV,OARA,KAAaJ,GAAQ,SAAUK,EAAK9C,GACnB,IAATA,EACA6C,EAAI9F,KAAK+F,EAAM,IAAMC,mBAAmB/C,IAGxC6C,EAAI9F,KAAK+F,EAEjB,IACID,EAAI1H,OACG6C,EAAM2E,EAAOE,EAAIF,KAAK,KAE1B3E,CACX,EAOAsC,EAAW9E,UAAUwH,cAAgB,SAAUC,GAC3C,2BAAqC,IACrC,iCAA2C,IAC3C,0BAAoC,IACpC,gCAA0C,IAC1CjJ,EAAOwB,UAAUwH,cAAczC,KAAKpG,KAAM8I,EAC9C,EACO3C,CACX,CAzhB+B,CAyhB7B,I,uGC1jBE4C,EAA4B,SAAUlJ,GAEtC,SAASkJ,IACL,IAAIjJ,EAAmB,OAAXD,GAAmBA,EAAOE,MAAMC,KAAMC,YAAcD,KAWhE,OAPAF,EAAMI,YAAc,mBAMpBJ,EAAMK,QAAU,CAAC,EACVL,CACX,CAiEA,OA/EA,QAAUiJ,EAAYlJ,GAqBtBkJ,EAAWC,OAAS,SAAUtI,GAC1B,IAII,OAFAuI,KAAK3H,MAAMZ,IAEJ,CAIX,CAFA,MAAOwI,GACH,OAAO,CACX,CACJ,EAOAH,EAAW1H,UAAUC,MAAQ,SAAUZ,GACnC,IAEIuB,EAFAnC,EAAQE,KAIZ,IACQ,KAAeiJ,QACfhH,EAAMgH,KAAK3H,MAAMZ,GAKzB,CAFA,MAAOwI,GACH,MACJ,CAEA,IAAIvH,EAAQ,KAAe3B,KAAKG,QAAQyB,SACpCC,EAAU7B,KAAK8B,gBACfC,EAAQ/B,KAAKgC,cACjB,GAAIyB,MAAMC,QAAQzB,KAASJ,GAAWE,GAASJ,GAgB3C,IAfA,IAAIwH,EAAU,SAAU/H,EAAGL,GACvB,IAAIU,EAAMQ,EAAIb,GACd,KAAaK,GAAK,SAAUkH,EAAK9C,GACzBlE,IACAF,EAAIkH,GAAO7I,EAAM2C,aAAahB,EAAIkH,KAElC9G,IACAJ,EAAIkH,GAAO7I,EAAM4C,cAAciG,EAAKlH,EAAIkH,KAExC5G,IACAN,EAAIkH,GAAO7I,EAAM6C,YAAYgG,EAAKlH,EAAIkH,IAE9C,GACJ,EAESvH,EAAI,EAAGL,EAAMkB,EAAIjB,OAAQI,EAAIL,EAAKK,IACvC+H,EAAQ/H,EAAGL,GAKnB,OAAOkB,CACX,EACO8G,CACX,CAjF+B,CAiF7B,I,uECvFEK,EAA6B,WAC7B,SAASA,IACT,CASA,OARAA,EAAYC,QAAU,EACtBD,EAAYE,cAAgB,EAC5BF,EAAYG,YAAc,EAC1BH,EAAYI,YAAc,EAC1BJ,EAAYK,MAAO,QAAM,WACzBL,EAAYM,QAAS,QAAM,WAC3BN,EAAYO,eAAYnH,EACxB4G,EAAYQ,SAAW,EAChBR,CACX,CAZgC,E,mJCiB5BS,EAAsB,SAAUhK,GAKhC,SAASgK,IACL,IAAI/J,EAAQD,EAAOuG,KAAKpG,OAASA,KAiBjC,OAhBAF,EAAM6G,UAAY,OAClB7G,EAAMgK,MAAQ,GACdhK,EAAMiK,QAAS,QAAQ,KACvBjK,EAAMkK,WAAY,QAAQ,KAC1BlK,EAAMmK,IAAMnK,EAAMoK,YAAY,KAC9BpK,EAAMmK,IAAIE,aAAc,EACxBrK,EAAMsK,OAAStK,EAAMoK,YAAY,KACjCpK,EAAMsK,OAAOD,aAAc,EAC3BrK,EAAMuK,KAAOvK,EAAMoK,YAAY,MAC/BpK,EAAMuK,KAAKF,aAAc,EACzBrK,EAAMuK,KAAKC,WAAWxK,EAAMyK,MAAM7B,IAAI,SACtC5I,EAAM0K,OAAS,OACf1K,EAAM2K,iBAAmB,IAAI,IAC7B3K,EAAM2K,iBAAiBC,YAAc,CAAC,GAAI,IAAM,GAChD5K,EAAMuK,KAAKM,aAAe7K,EAAM2K,iBAChC3K,EAAM8K,aACC9K,CACX,CAoIA,OA3JA,QAAU+J,EAAMhK,GA6BhBgK,EAAKxI,UAAUwJ,KAAO,WAClBhL,EAAOwB,UAAUwJ,KAAKzE,KAAKpG,MAC3B,KAAuBA,KAAMA,KAAKiK,IAAK,MACvC,KAAuBjK,KAAMA,KAAKoK,OAAQ,MAC1C,KAAuBpK,KAAMA,KAAKqK,KAAM,MACxC,IAKIS,EACAC,EACAC,EAPAC,EAAIjL,KAAKkL,WACTC,EAAInL,KAAKoL,YACThB,EAASpK,KAAKoK,OACdH,EAAMjK,KAAKiK,IACXH,EAAQ9J,KAAK8J,MAIO,cAApB9J,KAAKqL,aACLP,EAAaK,EAAI,EACjBf,EAAOkB,EAAIH,EAAI,EACflB,EAAIqB,EAAIH,EAAI,EACZlB,EAAI7H,EAAI6I,EACRF,GAAM,GAAKjB,GAAS,GACpBkB,EAAK,EACLhL,KAAKyK,iBAAiBc,SAASC,SAAW,KAG1CT,EAAK,EACLC,GAAM,GAAKlB,GAAS,GACpBgB,EAAaG,EAAI,EACjBb,EAAOkB,EAAIH,EACXf,EAAOhI,EAAI6I,EAAI,EACfhB,EAAI7H,EAAI6I,EAAI,EACZjL,KAAKyK,iBAAiBc,SAASC,SAAW,GAE9C,IAMIC,EANA1B,EAAS/J,KAAK+J,OAAOlE,MAAQiF,EAC7Bd,EAAYhK,KAAKgK,UAAUnE,MAAQiF,EACvCV,EAAOL,OAASA,EAASA,EAASgB,EAClCX,EAAOsB,QAAU3B,EAASA,EAASiB,EACnCf,EAAIF,OAASC,EAAYA,EAAYe,EACrCd,EAAIyB,QAAU1B,EAAYA,EAAYgB,EAGlCS,EADoB,cAApBzL,KAAKqL,YACE,KAAa,CAAEjJ,EAAG,EAAGkJ,EAAGH,EAAI,EAAIf,EAAOsB,UAAa,MAAa,IAAK,IAAKtB,EAAOL,OAAQK,EAAOsB,SAAW,KAAa,CAAEtJ,EAAG6I,EAAGK,EAAGH,EAAI,EAAIlB,EAAIyB,UAAa,KAAY,GAAI,IAAKzB,EAAIF,OAAQE,EAAIyB,SAAW,OAG7M,KAAa,CAAEtJ,EAAG6I,EAAI,EAAIhB,EAAIF,OAAQuB,EAAG,IAAO,KAAY,KAAM,IAAKrB,EAAIF,OAAQE,EAAIyB,SAAW,KAAa,CAAEtJ,EAAG6I,EAAI,EAAIb,EAAOL,OAAQuB,EAAGH,IAAO,KAAY,EAAG,IAAKf,EAAOL,OAAQK,EAAOsB,SAAW,OAErN1L,KAAKqK,KAAKoB,KAAOA,CACrB,EACAnG,OAAOC,eAAesE,EAAKxI,UAAW,QAAS,CAI3CmE,IAAK,WACD,OAAOxF,KAAK2L,iBAAiB,QACjC,EAOApE,IAAK,SAAU1B,GACX7F,KAAK4L,iBAAiB,QAAS/F,GAAO,EAC1C,EACAH,YAAY,EACZC,cAAc,IAElBL,OAAOC,eAAesE,EAAKxI,UAAW,SAAU,CAI5CmE,IAAK,WACD,OAAOxF,KAAK2L,iBAAiB,SACjC,EASApE,IAAK,SAAU1B,GACX7F,KAAK4L,iBAAiB,SAAU/F,GAAO,EAC3C,EACAH,YAAY,EACZC,cAAc,IAElBL,OAAOC,eAAesE,EAAKxI,UAAW,YAAa,CAI/CmE,IAAK,WACD,OAAOxF,KAAK2L,iBAAiB,YACjC,EASApE,IAAK,SAAU1B,GACX7F,KAAK4L,iBAAiB,YAAa/F,GAAO,EAC9C,EACAH,YAAY,EACZC,cAAc,IAElBL,OAAOC,eAAesE,EAAKxI,UAAW,cAAe,CAIjDmE,IAAK,WACD,OAAOxF,KAAK2L,iBAAiB,cACjC,EAOApE,IAAK,SAAU1B,GACX7F,KAAK4L,iBAAiB,cAAe/F,GAAO,EAChD,EACAH,YAAY,EACZC,cAAc,IAEXkE,CACX,CA7JyB,CA6JvB,I,0KC5JEgC,EAA6B,SAAUhM,GAKvC,SAASgM,IACL,IAAI/L,EAAQD,EAAOuG,KAAKpG,OAASA,KACjCF,EAAMgK,MAAQ,GACdhK,EAAMgM,MAAQ,GACdhM,EAAM6G,UAAY,cAClB7G,EAAM0K,OAAS,OACf,IAAIuB,EAAWjM,EAAMoK,YAAY,MACjC6B,EAAS5B,aAAc,EACvB4B,EAASzB,WAAWxK,EAAMyK,MAAM7B,IAAI,SACpCqD,EAASC,YAAa,EACtBlM,EAAMiM,SAAWA,EACjBjM,EAAMmM,WAAWrJ,KAAK9C,EAAMiM,UAC5B,IAAIG,EAAapM,EAAMoK,YAAY,MACnCgC,EAAW/B,aAAc,EACzB+B,EAAW5B,WAAWxK,EAAMyK,MAAM7B,IAAI,SACtCwD,EAAWF,YAAa,EACxBlM,EAAMoM,WAAaA,EACnBpM,EAAMmM,WAAWrJ,KAAK9C,EAAMoM,YAC5B,IAAIC,EAAWrM,EAAMoK,YAAY,MACjCiC,EAAShC,aAAc,EACvBgC,EAAS7B,WAAWxK,EAAMyK,MAAM7B,IAAI,SACpCyD,EAASH,YAAa,EACtBlM,EAAMqM,SAAWA,EACjBrM,EAAMmM,WAAWrJ,KAAK9C,EAAMqM,UAC5B,IAAIC,EAAYtM,EAAMoK,YAAY,MAClCkC,EAAUjC,aAAc,EACxBiC,EAAU9B,WAAWxK,EAAMyK,MAAM7B,IAAI,SACrC0D,EAAUJ,YAAa,EACvBlM,EAAMsM,UAAYA,EAClBtM,EAAMmM,WAAWrJ,KAAK9C,EAAMsM,WAC5B,IAAIC,EAAUvM,EAAMoK,YAAY,MAChCmC,EAAQlC,aAAc,EACtBkC,EAAQ/B,WAAWxK,EAAMyK,MAAM7B,IAAI,SACnC2D,EAAQL,YAAa,EACrBlM,EAAMuM,QAAUA,EAChBvM,EAAMmM,WAAWrJ,KAAK9C,EAAMuM,SAC5B,IAAIC,EAAYxM,EAAMoK,YAAY,MAOlC,OANAoC,EAAUnC,aAAc,EACxBmC,EAAUhC,WAAWxK,EAAMyK,MAAM7B,IAAI,SACrC4D,EAAUN,YAAa,EACvBlM,EAAMwM,UAAYA,EAClBxM,EAAMmM,WAAWrJ,KAAK9C,EAAMwM,WAC5BxM,EAAM8K,aACC9K,CACX,CA4HA,OA5KA,QAAU+L,EAAahM,GAsDvBgM,EAAYxK,UAAUwJ,KAAO,WACzBhL,EAAOwB,UAAUwJ,KAAKzE,KAAKpG,MAC3B,IAAIiL,EAAIjL,KAAKkL,WACTC,EAAInL,KAAKoL,YACTU,EAAQ9L,KAAK8L,MACbhC,EAAQ9J,KAAK8J,MACbyC,EAAM,KAAUzC,GAChB0C,EAAM,KAAU1C,GAChB2C,EAAI,CAAErK,EAAG,EAAGkJ,EAAG,GACfoB,EAAI,CAAEtK,EAAG6I,EAAGK,EAAG,GACfqB,EAAI,CAAEvK,EAAG6I,EAAGK,EAAGH,GACfyB,EAAI,CAAExK,EAAG,EAAGkJ,EAAGH,GACf0B,EAAK,CAAEzK,EAAG0J,EAAQU,EAAKlB,GAAIQ,EAAQS,GACnCO,EAAK,CAAE1K,EAAG0J,EAAQU,EAAMvB,EAAGK,GAAIQ,EAAQS,GACvCQ,EAAK,CAAE3K,EAAG0J,EAAQU,EAAMvB,EAAGK,GAAIQ,EAAQS,EAAMpB,GAC7C6B,EAAK,CAAE5K,EAAG0J,EAAQU,EAAKlB,GAAIQ,EAAQS,EAAMpB,GAC7CnL,KAAKsM,UAAUb,KAAO,KAAagB,GAAK,KAAaC,GAAK,KAAaC,GAAK,KAAaC,GAAK,OAC9F5M,KAAK+L,SAASN,KAAO,KAAaoB,GAAM,KAAaC,GAAM,KAAaC,GAAM,KAAaC,GAAM,OACjGhN,KAAKmM,SAASV,KAAO,KAAagB,GAAK,KAAaI,GAAM,KAAaG,GAAM,KAAaJ,GAAK,OAC/F5M,KAAKoM,UAAUX,KAAO,KAAaiB,GAAK,KAAaI,GAAM,KAAaC,GAAM,KAAaJ,GAAK,OAChG3M,KAAKkM,WAAWT,KAAO,KAAamB,GAAK,KAAaI,GAAM,KAAaD,GAAM,KAAaJ,GAAK,OACjG3M,KAAKqM,QAAQZ,KAAO,KAAagB,GAAK,KAAaI,GAAM,KAAaC,GAAM,KAAaJ,GAAK,MAClG,EACApH,OAAOC,eAAesG,EAAYxK,UAAW,QAAS,CAIlDmE,IAAK,WACD,OAAOxF,KAAK2L,iBAAiB,QACjC,EAOApE,IAAK,SAAU1B,GACX7F,KAAK4L,iBAAiB,QAAS/F,GAAO,EAC1C,EACAH,YAAY,EACZC,cAAc,IAElBL,OAAOC,eAAesG,EAAYxK,UAAW,QAAS,CAIlDmE,IAAK,WACD,OAAOxF,KAAK2L,iBAAiB,QACjC,EAOApE,IAAK,SAAU1B,GACX7F,KAAK4L,iBAAiB,QAAS/F,GAAO,EAC1C,EACAH,YAAY,EACZC,cAAc,IASlBkG,EAAYxK,UAAU4L,QAAU,SAAUpH,GAKtC,IAAIqH,EACJ,GALArN,EAAOwB,UAAU4L,QAAQ7G,KAAKpG,KAAM6F,GAC/B,KAAeA,MAAU,MAAOA,KACjCA,GAAQ,QAAQA,IAGhBA,aAAiB,KACjBqH,EAAWrH,EAAMsH,SAEhB,GAAItH,aAAiB,KAAkBA,aAAiB,IACzDqH,EAAWrH,EAAMuH,MAAMC,SAAS,GAAGC,MAAMH,QAExC,CACD,IAAII,EAAS,IAAI,IACjBA,EAAOC,WAAa,GACpBxN,KAAK+L,SAAS0B,QAAQ7K,KAAK2K,GAC3B,IAAIG,EAAUH,EAAOI,QACrBD,EAAQF,WAAa,GACrBxN,KAAKmM,SAASsB,QAAQ7K,KAAK8K,GAC3B,IAAIE,EAAUL,EAAOI,QACrBC,EAAQJ,WAAa,GACrBxN,KAAKoM,UAAUqB,QAAQ7K,KAAKgL,GAC5B,IAAIC,EAAUN,EAAOI,QACrBE,EAAQL,WAAa,GACrBxN,KAAKqM,QAAQoB,QAAQ7K,KAAKiL,GAC1B,IAAIC,EAAUP,EAAOI,QACrBG,EAAQN,WAAa,GACrBxN,KAAKkM,WAAWuB,QAAQ7K,KAAKkL,EACjC,CACIZ,IACAlN,KAAK+L,SAAStC,MAAO,QAAMyD,GAAUa,SAAS,IAC9C/N,KAAKmM,SAAS1C,MAAO,QAAMyD,GAAUa,SAAS,IAC9C/N,KAAKoM,UAAU3C,MAAO,QAAMyD,GAAUa,SAAS,IAC/C/N,KAAKqM,QAAQ5C,MAAO,QAAMyD,GAAUa,SAAS,IAC7C/N,KAAKkM,WAAWzC,MAAO,QAAMyD,GAAUa,SAAS,IAExD,EAMAlC,EAAYxK,UAAU2M,SAAW,SAAUzK,GACvC1D,EAAOwB,UAAU2M,SAAS5H,KAAKpG,KAAMuD,GACrCvD,KAAK+L,SAASiC,SAASzK,EAAOwI,UAC9B/L,KAAKmM,SAAS6B,SAASzK,EAAO4I,UAC9BnM,KAAKoM,UAAU4B,SAASzK,EAAO6I,WAC/BpM,KAAKqM,QAAQ2B,SAASzK,EAAO8I,SAC7BrM,KAAKkM,WAAW8B,SAASzK,EAAO2I,WACpC,EACOL,CACX,CA9KgC,CA8K9B,I,0KC7KEoC,EAAyB,SAAUpO,GAKnC,SAASoO,IACL,IAAInO,EAEJD,EAAOuG,KAAKpG,OAASA,KACrBF,EAAM6G,UAAY,UAClB7G,EAAM0K,OAAS,OAEf,IAAI0D,EAAOpO,EAAMoK,YAAY,MAC7BpK,EAAMoO,KAAOA,EACbA,EAAK/D,aAAc,EACnB+D,EAAKlC,YAAa,EAClBkC,EAAKC,SAELrO,EAAMgK,MAAQ,GACdhK,EAAMgM,MAAQ,GAEd,IAAIsC,EAAQtO,EAAMoK,YAAY,MAC9BpK,EAAMsO,MAAQA,EACdA,EAAMjE,aAAc,EACpBiE,EAAMpC,YAAa,EAInB,IAAIqC,EAAQvO,EAAMoK,YAAY,MAQ9B,OAPApK,EAAMuO,MAAQA,EACdA,EAAMlE,aAAc,EACpBkE,EAAMrC,YAAa,EAInBlM,EAAM8K,aACC9K,CACX,CAuQA,OA3SA,QAAUmO,EAASpO,GA4CnBoO,EAAQ5M,UAAU4L,QAAU,SAAUpH,GAElC,IAAIqH,EACJ,GAFArN,EAAOwB,UAAU4L,QAAQ7G,KAAKpG,KAAM6F,GAEhCA,aAAiB,KACjBqH,EAAWrH,EAAMsH,SAEhB,GAAItH,aAAiB,KAAkBA,aAAiB,IACzDqH,EAAWrH,EAAMuH,MAAMC,SAAS,GAAGC,MAAMH,QAExC,CACD,IAAII,EAAS,IAAI,IACjBA,EAAOC,WAAa,IACpBxN,KAAKkO,KAAKT,QAAQ7K,KAAK2K,GACvBvN,KAAKoO,MAAMX,QAAQ7K,KAAK2K,EAAOI,SAC/B3N,KAAKqO,MAAMZ,QAAQ7K,KAAK2K,EAAOI,QACnC,CACA,GAAIT,EAAU,CACV,IAAIoB,GAAW,QAAMpB,GAAUa,SAAS,KACxC/N,KAAKkO,KAAKzE,KAAO6E,EACjBtO,KAAKoO,MAAM3E,KAAO6E,EAClBtO,KAAKqO,MAAM5E,KAAO6E,EAClBtO,KAAKkO,KAAKxE,OAAS4E,EACnBtO,KAAKoO,MAAM1E,OAAS4E,EACpBtO,KAAKqO,MAAM3E,OAAS4E,CACxB,CACJ,EAMAL,EAAQ5M,UAAUwJ,KAAO,WAIrB,GAHA7K,KAAKuO,aAAe,EACpBvO,KAAKwO,kBAAoB,EACzB3O,EAAOwB,UAAUwJ,KAAKzE,KAAKpG,MACV,IAAbA,KAAKyO,KAAazO,KAAK+J,OAAS,GAAK/J,KAAK8L,MAAQ,EAAG,CACrD9L,KAAKqO,MAAMK,KAAK,GAChB1O,KAAKoO,MAAMM,KAAK,GAChB1O,KAAKkO,KAAKQ,KAAK,GAwDf,IAvDA,IAAIC,EAAa3O,KAAK2O,WAClBF,EAAMzO,KAAKyO,IACXG,EAAc5O,KAAK6O,kBAAoB,EACvCnD,EAAU1L,KAAK0L,SAAW,EAG1B3B,EAAS/J,KAAK+J,OAEd+E,EAAWH,EAAaF,EAGxBM,EAAgBrD,EAAU3B,EAAU6E,EA6BpCI,EAAK,CAAE5M,EAAG,KAAUuM,GAAc,EAAerD,EAAG,KAAUqD,GAAc,GAC5EM,EAAK,CAAE7M,EAAG,KAAUuM,GAAc,EAAUrD,EAAG,KAAUqD,GAAc,GACvEO,EAAK,CAAE9M,EAAG,KAAU0M,GAAY,EAAUxD,EAAG,KAAUwD,GAAY,GACnEK,EAAK,CAAE/M,EAAG,KAAU0M,GAAY,EAAexD,EAAG,KAAUwD,GAAY,GAExE3D,EAAInL,KAAK8L,MACTe,EAAK,CAAEzK,EAAG4M,EAAG5M,EAAGkJ,EAAG0D,EAAG1D,EAAIH,GAC1B2B,EAAK,CAAE1K,EAAG6M,EAAG7M,EAAGkJ,EAAG2D,EAAG3D,EAAIH,GAC1B4B,EAAK,CAAE3K,EAAG8M,EAAG9M,EAAGkJ,EAAG4D,EAAG5D,EAAIH,GAC1B6B,EAAK,CAAE5K,EAAG+M,EAAG/M,EAAGkJ,EAAG6D,EAAG7D,EAAIH,GAC1BiE,EAAW,GACXC,EAAQC,KAAKC,KAAKd,EAAM,GACxBe,EAAOf,EAAMY,EACbI,EAASd,EACTe,EAAY5C,EACP1L,EAAI,EAAGA,EAAIiO,EAAOjO,IAEvB,GADAqO,GAAUD,EACNC,EAAS,GAAKA,EAAS,IAAK,CAC5BL,GAAY,KAAaM,GACzB,IAAIC,EAAK,CAAEvN,EAAG,KAAUqN,GAAU,EAAUnE,EAAG,KAAUmE,GAAU,EAAYtE,GAC/EiE,GAAY,KAAa,CAAEhN,EAAGsN,EAAUtN,EAAGkJ,EAAGoE,EAAUpE,EAAIH,IAC5DiE,GAAY,KAAiB,CAAEhN,EAAGuN,EAAGvN,EAAGkJ,EAAGqE,EAAGrE,EAAIH,GAAKpB,EAAQ2B,GAAS,GACxE0D,GAAY,KAAaO,GACzBP,GAAY,KAAiBM,EAAW3F,EAAQ2B,GAChD0D,GAAY,IACZM,EAAYC,CAChB,KACK,CACDP,GAAY,KAAaM,GACrBC,EAAK,CAAEvN,EAAG,KAAUqN,GAAU,EAAUnE,EAAG,KAAUmE,GAAU,EAAYtE,GAC/EiE,GAAY,KAAiBO,EAAI5F,EAAQ2B,GAAS,GAClD0D,GAAY,KAAa,CAAEhN,EAAGuN,EAAGvN,EAAGkJ,EAAGqE,EAAGrE,EAAIH,IAC9CiE,GAAY,KAAiB,CAAEhN,EAAGsN,EAAUtN,EAAGkJ,EAAGoE,EAAUpE,EAAIH,GAAKpB,EAAQ2B,GAC7E0D,GAAY,KAAaM,GACzBN,GAAY,IACZM,EAAYC,CAChB,CAEJD,EAAY7C,EACZ4C,EAASd,EACT,IAASvN,EAAI,EAAGA,EAAIiO,EAAOjO,IAEvB,GADAqO,GAAUD,EACNC,EAAS,GAAKA,EAAS,IAAK,CAC5BL,GAAY,KAAaM,GACrBC,EAAK,CAAEvN,EAAG,KAAUqN,GAAU,EAAenE,EAAG,KAAUmE,GAAU,EAAiBtE,GACzFiE,GAAY,KAAa,CAAEhN,EAAGsN,EAAUtN,EAAGkJ,EAAGoE,EAAUpE,EAAIH,IAC5DiE,GAAY,KAAiB,CAAEhN,EAAGuN,EAAGvN,EAAGkJ,EAAGqE,EAAGrE,EAAIH,GAAKyD,EAAaG,GAAc,GAClFK,GAAY,KAAaO,GACzBP,GAAY,KAAiBM,EAAWd,EAAaG,GACrDK,GAAY,IACZM,EAAYC,CAChB,KACK,CACDP,GAAY,KAAaM,GACrBC,EAAK,CAAEvN,EAAG,KAAUqN,GAAU,EAAenE,EAAG,KAAUmE,GAAU,EAAiBtE,GACzFiE,GAAY,KAAiBO,EAAIf,EAAaG,GAAc,GAC5DK,GAAY,KAAa,CAAEhN,EAAGuN,EAAGvN,EAAGkJ,EAAGqE,EAAGrE,EAAIH,IAC9CiE,GAAY,KAAiB,CAAEhN,EAAGsN,EAAUtN,EAAGkJ,EAAGoE,EAAUpE,EAAIH,GAAKyD,EAAaG,GAClFK,GAAY,KAAaM,GACzBN,GAAY,IACZM,EAAYC,CAChB,CAEJ3P,KAAKkO,KAAKzC,KAAO2D,EAajBpP,KAAKoO,MAAM3C,KAAO,KAAauD,GAAM,KAAaC,GAAM,KAAanC,GAAM,KAAaD,GAAM,OAC9F7M,KAAKqO,MAAM5C,KAAO,KAAayD,GAAM,KAAaC,GAAM,KAAanC,GAAM,KAAaD,GAAM,OAC1F/M,KAAK2O,WAAa,GAClB3O,KAAKoO,MAAMD,SAGXnO,KAAKoO,MAAMwB,UAEX5P,KAAK2O,WAAa3O,KAAKyO,IAAM,GAC7BzO,KAAKqO,MAAMF,SAGXnO,KAAKqO,MAAMuB,UAEf5P,KAAK6P,MAAM7E,IAAMG,CACrB,MAEInL,KAAKoO,MAAM0B,KAAK,GAChB9P,KAAKqO,MAAMyB,KAAK,GAChB9P,KAAKkO,KAAK4B,KAAK,EAEvB,EACAxK,OAAOC,eAAe0I,EAAQ5M,UAAW,QAAS,CAI9CmE,IAAK,WACD,OAAOxF,KAAK2L,iBAAiB,QACjC,EAOApE,IAAK,SAAUuE,GACX9L,KAAK4L,iBAAiB,QAASE,GAAO,EAC1C,EACApG,YAAY,EACZC,cAAc,IAElBL,OAAOC,eAAe0I,EAAQ5M,UAAW,QAAS,CAI9CmE,IAAK,WACD,IAAIsE,EAAQ9J,KAAK2L,iBAAiB,SAIlC,OAHK,KAAe7B,KAChBA,EAAQ,GAELA,CACX,EAOAvC,IAAK,SAAU1B,GACX7F,KAAK4L,iBAAiB,QAAS/F,GAAO,EAC1C,EACAH,YAAY,EACZC,cAAc,IAElBL,OAAOC,eAAe0I,EAAQ5M,UAAW,UAAW,CAIhDmE,IAAK,WACD,IAAIkG,EAAU1L,KAAK2L,iBAAiB,WAIpC,OAHK,KAAeD,KAChBA,EAAU1L,KAAK+J,OAAS/J,KAAK+J,OAAS/J,KAAK8J,MAAQ,IAEhD4B,CACX,EASAnE,IAAK,SAAU1B,GACX7F,KAAK4L,iBAAiB,UAAW/F,GAAO,EAC5C,EACAH,YAAY,EACZC,cAAc,IAOlBsI,EAAQ5M,UAAU2M,SAAW,SAAUzK,GACnC1D,EAAOwB,UAAU2M,SAAS5H,KAAKpG,KAAMuD,GACrCvD,KAAKkO,KAAKF,SAASzK,EAAO2K,MAC1BlO,KAAKoO,MAAMJ,SAASzK,EAAO6K,OAC3BpO,KAAKqO,MAAML,SAASzK,EAAO8K,MAC/B,EACOJ,CACX,CA7S4B,CA6S1B,I,uIC7SE8B,EAA8B,SAAUlQ,GAKxC,SAASkQ,IACL,IAAIjQ,EAEJD,EAAOuG,KAAKpG,OAASA,KACrBF,EAAM6G,UAAY,eAClB7G,EAAMkQ,OAAS,SACf,IAAIpD,EAAI,GACR9M,EAAMuJ,QAAU,GAChBvJ,EAAMmQ,aAAaC,WAAW7G,QAAU,GACxCvJ,EAAM+D,IAAM,4BACZ/D,EAAMqQ,UAAY,SAClBrQ,EAAMsQ,mBAAoB,EAC1BtQ,EAAMuQ,YAAc,uCACpBvQ,EAAMwQ,MAAQ,IAAM1D,EACpB9M,EAAMyQ,OAAS,GAAK3D,EACpB9M,EAAM0Q,WAAWnH,QAAU,EAC3B,IAAIoH,GAAS,QAAM,WACiD,YAAhE,IAAI,KAAoBC,OAAO,cAAcC,YAAYxD,MACzDsD,GAAS,QAAM,YAEnB,IAAIG,EAAY,IAAI,IACpBA,EAAUC,SAASJ,GACnBG,EAAUC,SAASJ,EAAQ,EAAG,KAC9BG,EAAUC,UAAS,QAAM,WAAY,EAAG,MACxCD,EAAUpF,UAAY,GACtB,IAAIsF,EAAUF,EACVG,EAAIjR,EAAMoK,YAAY,KAC1B6G,EAAE5G,aAAc,EAChB4G,EAAE/E,YAAa,EACf+E,EAAEC,SAAW,CAAC,CAAC,CAAE5O,EAAG,GAAKwK,EAAGtB,EAAG,GAAKsB,GAAK,CAAExK,EAAG,GAAKwK,EAAGtB,EAAG,GAAKsB,GAAK,CAAExK,EAAG,IAAMwK,EAAGtB,EAAG,GAAKsB,GAAK,CAAExK,EAAG,IAAMwK,EAAGtB,EAAG,GAAKsB,GAAK,CAAExK,EAAG,IAAMwK,EAAGtB,EAAG,GAAKsB,GAAK,CAAExK,EAAG,IAAMwK,EAAGtB,EAAG,GAAKsB,GAAK,CAAExK,EAAG,IAAMwK,EAAGtB,EAAG,GAAKsB,KACrMmE,EAAExH,YAAc,EAAIqD,EACpBmE,EAAEE,SAAW,GACbF,EAAEG,SAAW,EACbH,EAAErH,QAAS,QAAM,WACjB,IAAI+C,EAAI3M,EAAMoK,YAAY,KAC1BuC,EAAEtC,aAAc,EAChBsC,EAAET,YAAa,EACfS,EAAEuE,SAAW,CAAC,CAAC,CAAE5O,EAAG,GAAKwK,EAAGtB,EAAG,GAAKsB,GAAK,CAAExK,EAAG,GAAKwK,EAAGtB,EAAG,GAAKsB,GAAK,CAAExK,EAAG,GAAKwK,EAAGtB,EAAG,GAAKsB,GAAK,CAAExK,EAAG,IAAMwK,EAAGtB,EAAG,GAAKsB,GAAK,CAAExK,EAAG,IAAMwK,EAAGtB,EAAG,GAAKsB,GAAK,CAAExK,EAAG,IAAMwK,EAAGtB,EAAG,GAAKsB,KACzKH,EAAElD,YAAc,EAAIqD,EACpBH,EAAEwE,SAAW,IACbxE,EAAEyE,SAAW,EACbzE,EAAE/C,OAASoH,EACXhR,EAAMmM,WAAWrJ,KAAK6J,GACtB,IAAI0E,EAAmB,IAAI,IAC3BrR,EAAM2N,QAAQ7K,KAAKuO,GACnB,IAAIC,EAAwB,IAAI,IAChCA,EAAsBC,WAAa,EACnC,IAAIC,EAAaxR,EAAMyR,OAAOC,OAAO,SAKrC,OAJAF,EAAWpB,WAAW7G,QAAU,EAChCiI,EAAW7D,QAAQ7K,KAAKwO,GAExBtR,EAAM8K,aACC9K,CACX,CACA,OA1DA,QAAUiQ,EAAclQ,GA0DjBkQ,CACX,CA5DiC,CA4D/B,I,2HC/DE0B,EAAwB,SAAU5R,GAKlC,SAAS4R,IACL,IAAI3R,EAEJD,EAAOuG,KAAKpG,OAASA,KACrBF,EAAM6G,UAAY,SAClB7G,EAAM4R,SAAW,EAEjB5R,EAAM6R,aAAe,OACrB7R,EAAM0K,OAAS,aACf1K,EAAM8R,aAAe,SACrB9R,EAAM+R,cAAgB,SACtB/R,EAAMgS,QAAQ,EAAG,GAAI,EAAG,IACxBhS,EAAMiS,oBAAqB,EAC3B,IAAIC,EAAkB,IAAI,IAEtBxB,EAAa1Q,EAAM0Q,WACvBA,EAAW/G,KAAOuI,EAAgBtB,OAAO,mBACzCF,EAAW9G,OAASsI,EAAgBtB,OAAO,yBAC3CF,EAAWhH,YAAc,EACzBgH,EAAWlH,cAAgB,EAC3BkH,EAAWjC,aAAa,EAAG,EAAG,EAAG,GAEjCzO,EAAMmS,MAAQ,IAAI,IAClBnS,EAAMmS,MAAMxI,KAAOuI,EAAgBtB,OAAO,uBAE1C5Q,EAAMmS,MAAM9H,aAAc,EAE1B,IAAImH,EAAad,EAAWe,OAAOC,OAAO,SAC1CF,EAAWpB,WAAW1G,YAAc,EACpC8H,EAAWpB,WAAWzG,KAAOuI,EAAgBtB,OAAO,wBACpD,IAAIwB,EAAY1B,EAAWe,OAAOC,OAAO,QAUzC,OATAU,EAAUC,mBAAqB,IAC/BD,EAAUhC,WAAWzG,KAAOuI,EAAgBtB,OAAO,uBACnDwB,EAAUhC,WAAW1G,YAAc,EAGnC1J,EAAMsS,KAAO,SACbtS,EAAM6J,WAAY,EAElB7J,EAAM8K,aACC9K,CACX,CA6GA,OA1JA,QAAU2R,EAAQ5R,GA8ClByF,OAAOC,eAAekM,EAAOpQ,UAAW,OAAQ,CAI5CmE,IAAK,WACD,OAAOxF,KAAKqS,KAChB,EAMA9K,IAAK,SAAU+K,GACX,IAAIC,EAAcvS,KAAKqS,MACnBE,IAGAA,EAAYC,YAAShQ,GAErB8P,IACAtS,KAAKqS,MAAQC,EACbA,EAAKE,OAASxS,KACdsS,EAAKG,qBAAsB,EAC3BH,EAAKnI,aAAc,EACnBnK,KAAK2R,aAAe3R,KAAK2R,aACzB3R,KAAKiM,WAAWrJ,KAAK0P,GAE7B,EACA5M,YAAY,EACZC,cAAc,IAElBL,OAAOC,eAAekM,EAAOpQ,UAAW,eAAgB,CAIpDmE,IAAK,WACD,OAAOxF,KAAK2L,iBAAiB,eACjC,EAOApE,IAAK,SAAUmL,GACX1S,KAAK4L,iBAAiB,eAAgB8G,GAClC1S,KAAKsS,OACW,QAAZI,EACA1S,KAAKsS,KAAKnE,SAGVnO,KAAKsS,KAAK1C,UAGtB,EACAlK,YAAY,EACZC,cAAc,IAElBL,OAAOC,eAAekM,EAAOpQ,UAAW,QAAS,CAI7CmE,IAAK,WACD,OAAOxF,KAAK2S,MAChB,EAMApL,IAAK,SAAU0K,GACPjS,KAAK2S,QAEL3S,KAAK4S,cAAc5S,KAAK2S,QAE5B3S,KAAK2S,OAASV,EACVA,IACAA,EAAMO,OAASxS,KACfiS,EAAMQ,qBAAsB,EAC5BzS,KAAKiM,WAAWrJ,KAAK5C,KAAK2S,QAElC,EACAjN,YAAY,EACZC,cAAc,IAQlB8L,EAAOpQ,UAAUwR,iBAAmB,WAChC,OAAO,IAAI,GACf,EAMApB,EAAOpQ,UAAU2M,SAAW,SAAUzK,GAClC1D,EAAOwB,UAAU2M,SAAS5H,KAAKpG,KAAMuD,GACjCA,EAAO0O,OACPjS,KAAKiS,MAAMjE,SAASzK,EAAO0O,OAE3B1O,EAAO+O,OACPtS,KAAKsS,KAAO/O,EAAO+O,KAAK3E,QAEhC,EACO8D,CACX,CA5J2B,CA4JzB,KAQF,6BAAuCA,C,6HCtKnCqB,EAAwB,SAAUjT,GAKlC,SAASiT,IACL,IAAIhT,EAAQD,EAAOuG,KAAKpG,OAASA,KAOjC,OANAF,EAAM6G,UAAY,SAClB7G,EAAMiT,QAAUjT,EAAMyK,MAAM7B,IAAI,UAChC5I,EAAMkT,mBAAmB,UAAU,QAAQ,MAC3ClT,EAAM8L,iBAAiB,mBAAoB,UAC3C9L,EAAM8L,iBAAiB,iBAAkB,UACzC9L,EAAM8K,aACC9K,CACX,CA0DA,OAvEA,QAAUgT,EAAQjT,GAiBlBiT,EAAOzR,UAAUwJ,KAAO,WACpBhL,EAAOwB,UAAUwJ,KAAKzE,KAAKpG,MAC3BA,KAAK+S,QAAQE,KAAK,CAAE,EAAKjT,KAAKkT,aAClC,EACA5N,OAAOC,eAAeuN,EAAOzR,UAAW,SAAU,CAI9CmE,IAAK,WACD,OAAOxF,KAAK2L,iBAAiB,SACjC,EAQApE,IAAK,SAAU1B,GACX7F,KAAKgT,mBAAmB,SAAUnN,GAAO,GAAM,EAAO,IAAI,EAC9D,EACAH,YAAY,EACZC,cAAc,IAElBL,OAAOC,eAAeuN,EAAOzR,UAAW,cAAe,CAUnDmE,IAAK,WACD,OAAO,KAAuBxF,KAAK+J,OAAQ,KAAU/J,KAAKkL,WAAa,EAAGlL,KAAKoL,YAAc,GACjG,EACA1F,YAAY,EACZC,cAAc,IAOlBmN,EAAOzR,UAAU8R,eAAiB,WAC9B,IAAID,EAAclT,KAAKkT,YACvBlT,KAAKoT,MAAQ,CACThR,GAAI8Q,EACJ5H,GAAI4H,EACJ5C,MAAqB,EAAd4C,EACP3C,OAAsB,EAAd2C,EAEhB,EACOJ,CACX,CAzE2B,CAyEzB,MAQF,6BAAuCA,C,kHC9EnCO,EAA6B,SAAUxT,GAKvC,SAASwT,IACL,IAAIvT,EAEJD,EAAOuG,KAAKpG,OAASA,KACrBF,EAAM6G,UAAY,cAClB7G,EAAMgS,QAAQ,EAAG,EAAG,EAAG,GACvBhS,EAAMsQ,mBAAoB,EAC1BtQ,EAAMwQ,MAAQ,GACdxQ,EAAMyQ,OAAS,GACf,IAAIyB,EAAkB,IAAI,IAC1BlS,EAAMwT,gBAAkB,YACxB,IAAI9C,EAAa1Q,EAAM0Q,WACvBA,EAAWjC,aAAa,GAAI,GAAI,GAAI,IACpC,IAAIgF,EAAMvB,EAAgBtB,OAAO,cACjCF,EAAW/G,KAAO8J,EAClB/C,EAAW9G,OAASsI,EAAgBtB,OAAO,iBAC3CF,EAAWlH,cAAgB,EAC3BkH,EAAWjH,YAAc,EACzB,IAAIiK,EAAYxB,EAAgBtB,OAAO,uBACnC+C,EAAMjD,EAAWe,OAAOmC,OAAO,SACnCD,EAAIvD,WAAW3G,YAAc,EAC7BkK,EAAIvD,WAAWzG,KAAO8J,EACtB,IAAII,EAAMnD,EAAWe,OAAOmC,OAAO,QACnCC,EAAIzD,WAAWxG,OAAS8J,EACxBG,EAAIzD,WAAWzG,KAAO8J,EAEtB,IAAIjB,EAAO,IAAI,KAMf,OALAA,EAAKS,QAAUjT,EAAMyK,MAAM7B,IAAI,QAC/B4J,EAAK5I,OAAS8G,EAAW9G,OACzB5J,EAAMwS,KAAOA,EAEbxS,EAAM8K,aACC9K,CACX,CAsBA,OA3DA,QAAUuT,EAAaxT,GAsCvBwT,EAAYhS,UAAUuS,SAAW,WAC7B/T,EAAOwB,UAAUuS,SAASxN,KAAKpG,MAC/B,IAAIiL,EAAIjL,KAAK6T,WAAa,EACtB1I,EAAInL,KAAK8T,YAAc,EACvBrI,EAAO,KAAa,CAAErJ,GAAI6I,EAAI,EAAGK,GAAIH,EAAI,IAC7CM,GAAQ,KAAa,CAAErJ,EAAG6I,EAAI,EAAGK,EAAGH,EAAI,IACxCM,GAAQ,KAAa,CAAErJ,EAAG6I,EAAI,EAAGK,GAAIH,EAAI,IACzCM,GAAQ,KAAa,CAAErJ,GAAI6I,EAAI,EAAGK,EAAGH,EAAI,IACzCnL,KAAKsS,KAAK7G,KAAOA,EACjBzL,KAAK+T,kBACT,EAKAV,EAAYhS,UAAU2S,sBAAwB,WAC1CnU,EAAOwB,UAAU2S,sBAAsB5N,KAAKpG,MACvC,KAAeA,KAAKqQ,eACrBrQ,KAAKqQ,YAAcrQ,KAAK4E,SAASC,UAAU,SAEnD,EACOwO,CACX,CA7DgC,CA6D9B,KAQF,kCAA4CA,C,6FC3ExCY,EAAyB,SAAUpU,GAKnC,SAASoU,IACL,IAAInU,EAAQD,EAAOuG,KAAKpG,OAASA,KAIjC,OAHAF,EAAM6G,UAAY,UAClB7G,EAAMiT,QAAUjT,EAAMyK,MAAM7B,IAAI,WAChC5I,EAAM8K,aACC9K,CACX,CAoDA,OA9DA,QAAUmU,EAASpU,GAcnBoU,EAAQ5S,UAAUwJ,KAAO,WACrBhL,EAAOwB,UAAUwJ,KAAKzE,KAAKpG,MAC3BA,KAAK+S,QAAQE,KAAK,CAAE,GAAMjT,KAAK+J,SAC/B/J,KAAK+S,QAAQE,KAAK,CAAE,GAAMjT,KAAK0L,SACnC,EACApG,OAAOC,eAAe0O,EAAQ5S,UAAW,UAAW,CAIhDmE,IAAK,WACD,OAAOxF,KAAKoL,YAAc,CAC9B,EAWA7D,IAAK,SAAU1B,GACX7F,KAAKuQ,OAAiB,EAAR1K,EACd7F,KAAKkU,YACT,EACAxO,YAAY,EACZC,cAAc,IAElBL,OAAOC,eAAe0O,EAAQ5S,UAAW,SAAU,CAI/CmE,IAAK,WACD,OAAOxF,KAAKkL,WAAa,CAC7B,EAMA3D,IAAK,SAAU1B,GACX7F,KAAKsQ,MAAgB,EAARzK,EACb7F,KAAKkU,YACT,EACAxO,YAAY,EACZC,cAAc,IAEXsO,CACX,CAhE4B,CAgE1B,EAAAE,GAQF,8BAAwCF,C,wIClEpCG,EAAsB,SAAUvU,GAKhC,SAASuU,IACL,IAAItU,EAEJD,EAAOuG,KAAKpG,OAASA,KACrBF,EAAM6G,UAAY,OAClB,IAAI0N,EAAK,IAAI,IAEbvU,EAAM0K,OAAS,WACf1K,EAAMgS,QAAQ,GAAI,GAAI,GAAI,IAC1BhS,EAAMwU,OAAO,EAAG,EAAG,EAAG,GACtBxU,EAAM0Q,WAAWhH,YAAc,GAC/B1J,EAAM0Q,WAAWjC,aAAa,GAAI,GAAI,GAAI,IAE1C,IAAI+D,EAAO,IAAI,KACfA,EAAKS,QAAUjT,EAAMyK,MAAM7B,IAAI,QAC/B,IAAI+C,EAAO,KAAa,CAAErJ,GAAI,EAAGkJ,EAAG,IAgDpC,OA/CAG,GAAQ,KAAa,CAAErJ,EAAG,EAAGkJ,EAAG,IAChCG,GAAQ,KAAa,CAAErJ,GAAI,EAAGkJ,GAAI,IAClCG,GAAQ,KAAa,CAAErJ,EAAG,EAAGkJ,GAAI,KACjCG,GAAQ,KAAa,CAAErJ,EAAG,EAAGkJ,GAAI,IACjCG,GAAQ,KAAa,CAAErJ,GAAI,EAAGkJ,EAAG,IACjCG,GAAQ,KAAa,CAAErJ,EAAG,EAAGkJ,EAAG,KAChCG,GAAQ,KAAa,CAAErJ,EAAG,EAAGkJ,EAAG,IAChCgH,EAAK7G,KAAOA,EACZ6G,EAAK/I,YAAc,EACnB+I,EAAK9I,YAAc,EACnB8I,EAAKiC,cAAe,EACpBjC,EAAKR,QAAQ,EAAG,EAAG,EAAG,GACtBQ,EAAK5I,OAAS2K,EAAG3D,OAAO,QACxB4B,EAAKhJ,cAAgB,GACrBgJ,EAAKkC,MAAQ,SACblC,EAAKtC,OAAS,SACdlQ,EAAMwS,KAAOA,EACbxS,EAAMmS,MAAMjK,UACZlI,EAAMmS,WAAQzP,EAEd1C,EAAM4S,SAAW,QAEjB5S,EAAM2U,cAAgB,IACtB3U,EAAMuE,OAAOsD,GAAG,SAAS,SAAUC,GAC3B9H,EAAM4U,kBACN5U,EAAM4U,iBAAiB1M,UAEvBlI,EAAM2U,gBACN3U,EAAM4U,iBAAmB5U,EAAMgI,YAAW,WACtChI,EAAMgQ,MACV,GAAGhQ,EAAM2U,eAEjB,IACA3U,EAAMuE,OAAOsD,GAAG,QAAQ,SAAUC,GAC1B9H,EAAM4U,kBACN5U,EAAM4U,iBAAiB1M,SAE/B,IACAlI,EAAMuE,OAAOsD,GAAG,OAAO,SAAUC,GACzB9H,EAAM2U,gBACN3U,EAAM4U,iBAAmB5U,EAAMgI,YAAW,WACtChI,EAAMgQ,MACV,GAAGhQ,EAAM2U,eAEjB,IAEA3U,EAAM8K,aACC9K,CACX,CAuFA,OA3JA,QAAUsU,EAAMvU,GAqEhByF,OAAOC,eAAe6O,EAAK/S,UAAW,WAAY,CAI9CmE,IAAK,WACD,OAAOxF,KAAK2L,iBAAiB,WACjC,EAQApE,IAAK,SAAU1B,GACX,GAAI7F,KAAK4L,iBAAiB,WAAY/F,GAClC,OAAQA,GACJ,IAAK,OACD7F,KAAKwU,MAAQ,OACbxU,KAAKgQ,OAAS,SACdhQ,KAAK2U,iBAAmB,OACxB3U,KAAK4U,eAAiB,SACtB5U,KAAKsS,KAAK9G,SAAW,EACrBxL,KAAKsQ,WAAQ9N,EACbxC,KAAKuQ,QAAS,QAAQ,IACtB,MACJ,IAAK,QACDvQ,KAAKwU,MAAQ,QACbxU,KAAKgQ,OAAS,SACdhQ,KAAK2U,iBAAmB,QACxB3U,KAAK4U,eAAiB,SACtB5U,KAAKsS,KAAK9G,SAAW,EACrBxL,KAAKsQ,WAAQ9N,EACbxC,KAAKuQ,QAAS,QAAQ,IACtB,MACJ,IAAK,MACDvQ,KAAKwU,MAAQ,SACbxU,KAAKgQ,OAAS,MACdhQ,KAAK2U,iBAAmB,SACxB3U,KAAK4U,eAAiB,MACtB5U,KAAKsS,KAAK9G,SAAW,GACrBxL,KAAKsQ,OAAQ,QAAQ,IACrBtQ,KAAKuQ,YAAS/N,EACd,MACJ,IAAK,SACDxC,KAAKwU,MAAQ,SACbxU,KAAKgQ,OAAS,SACdhQ,KAAK2U,iBAAmB,SACxB3U,KAAK4U,eAAiB,SACtB5U,KAAKsS,KAAK9G,SAAW,GACrBxL,KAAKsQ,OAAQ,QAAQ,IACrBtQ,KAAKuQ,YAAS/N,EACd,MACJ,QACIxC,KAAKwU,MAAQ,SACbxU,KAAKgQ,OAAS,SACdhQ,KAAK2U,iBAAmB,SACxB3U,KAAK4U,eAAiB,SACtB5U,KAAKsS,KAAK9G,SAAW,GACrBxL,KAAKsQ,OAAQ,QAAQ,IACrBtQ,KAAKuQ,YAAS/N,EAG9B,EACAkD,YAAY,EACZC,cAAc,IAElBL,OAAOC,eAAe6O,EAAK/S,UAAW,gBAAiB,CAInDmE,IAAK,WACD,OAAOxF,KAAK2L,iBAAiB,gBACjC,EAOApE,IAAK,SAAU1B,GACX7F,KAAK4L,iBAAiB,gBAAiB/F,EAC3C,EACAH,YAAY,EACZC,cAAc,IAEXyO,CACX,CA7JyB,CA6JvB,KAQF,2BAAqCA,C,mFCxKjCS,EAAuB,SAAUhV,GAKjC,SAASgV,IACL,IAAI/U,EAAQD,EAAOuG,KAAKpG,OAASA,KAMjC,OALAF,EAAM6G,UAAY,QAClB7G,EAAMiT,QAAUjT,EAAMyK,MAAM7B,IAAI,SAChC5I,EAAM8K,aACN9K,EAAMwQ,MAAQ,GACdxQ,EAAMyQ,OAAS,GACRzQ,CACX,CAuGA,OAnHA,QAAU+U,EAAOhV,GAkBjBgV,EAAMxT,UAAUwJ,KAAO,WAEnB,GADAhL,EAAOwB,UAAUwJ,KAAKzE,KAAKpG,MACvBA,KAAK8U,KAAM,CACX,IAAIxE,EAAQtQ,KAAKkL,WACbqF,EAASvQ,KAAKoL,YACd,KAAepL,KAAK+U,cACpBzE,EAAQC,EAASvQ,KAAK+U,WACtB/U,KAAKsQ,MAAQA,GAEb,KAAetQ,KAAKgV,eACpBzE,EAASD,EAAQtQ,KAAKgV,YACtBhV,KAAKuQ,OAASA,GAElBvQ,KAAK+S,QAAQE,KAAK,CACd,MAAS3C,EACT,OAAUC,IAEdvQ,KAAK+S,QAAQkC,OAAO,KAAY,aAAcjV,KAAK8U,KACvD,CACJ,EACAxP,OAAOC,eAAesP,EAAMxT,UAAW,OAAQ,CAI3CmE,IAAK,WACD,OAAOxF,KAAK2L,iBAAiB,OACjC,EAMApE,IAAK,SAAU1B,GACX7F,KAAK4L,iBAAiB,OAAQ/F,GAAO,EACzC,EACAH,YAAY,EACZC,cAAc,IAElBL,OAAOC,eAAesP,EAAMxT,UAAW,aAAc,CAIjDmE,IAAK,WACD,OAAOxF,KAAK2L,iBAAiB,aACjC,EASApE,IAAK,SAAU1B,GACX7F,KAAK4L,iBAAiB,aAAc/F,GAAO,EAC/C,EACAH,YAAY,EACZC,cAAc,IAElBL,OAAOC,eAAesP,EAAMxT,UAAW,cAAe,CAIlDmE,IAAK,WACD,OAAOxF,KAAK2L,iBAAiB,cACjC,EASApE,IAAK,SAAU1B,GACX7F,KAAK4L,iBAAiB,cAAe/F,GAAO,EAChD,EACAH,YAAY,EACZC,cAAc,IAElBL,OAAOC,eAAesP,EAAMxT,UAAW,OAAQ,CAM3CmE,IAAK,WACD,MAAO,CACHpD,EAAG,EACHkJ,EAAG,EACHgF,MAAOtQ,KAAK6T,WACZtD,OAAQvQ,KAAK8T,YAErB,EACApO,YAAY,EACZC,cAAc,IAEXkP,CACX,CArH0B,CAqHxB,MAQF,4BAAsCA,C,6LC1FlCK,EAAuB,SAAUrV,GAKjC,SAASqV,IACL,IAAIpV,EAEJD,EAAOuG,KAAKpG,OAASA,KAiCrB,OA7BAF,EAAMqV,aAAc,EAEpBrV,EAAM6G,UAAY,QAClB7G,EAAM2J,MAAO,IAAI,KAAoBiH,OAAO,QAK5C5Q,EAAMsV,MAAO,EACbtV,EAAMuV,UAAW,EACjBvV,EAAMwV,WAAY,EAClBxV,EAAMyV,SAAW,IACjBzV,EAAM0V,UAAY,QAClB1V,EAAM2V,WAAa,MACnB3V,EAAM0K,OAAS,WACf1K,EAAM4V,eAAiB,IAEvB5V,EAAM6V,mBAAqB,EAG3B7V,EAAMuE,OAAOsD,GAAG,kBAAkB,WAC1B7H,EAAM8V,QACN9V,EAAM+V,eAEd,GAAG/V,GAAO,GAEVA,EAAMuE,OAAOyR,KAAK,YAAahW,EAAMiW,eAAgBjW,GAAO,GAE5DA,EAAM8K,aACC9K,CACX,CA0zCA,OAn2CA,QAAUoV,EAAOrV,GAgDjBqV,EAAM7T,UAAU2U,UAAY,WAExBnW,EAAOwB,UAAU2U,UAAU5P,KAAKpG,MAChCA,KAAKiW,kBACT,EAOAf,EAAM7T,UAAU6U,SAAW,SAAU3L,GACjC,IAAI4L,EAAUtW,EAAOwB,UAAU6U,SAAS9P,KAAKpG,KAAMuK,GAInD,OAHI4L,GACAnW,KAAKoW,iBAEFD,CACX,EAIAjB,EAAM7T,UAAU0U,eAAiB,YACxB/V,KAAKqW,cAAerW,KAAKsW,MAA6B,GAAnBtW,KAAKuW,KAAKjG,OAAkC,GAApBtQ,KAAKuW,KAAKhG,QACtE,gBAAqB,YAAavQ,KAAKoW,eAAgBpW,KAE/D,EAIAkV,EAAM7T,UAAUwU,cAAgB,YACvB7V,KAAKuW,KAAKjG,MAAQtQ,KAAKwW,gBACnBxW,KAAKuW,KAAKjG,MAAQtQ,KAAKwW,iBAAoBxW,KAAKmV,aAAenV,KAAKqV,WACrErV,KAAKuW,KAAKhG,OAASvQ,KAAKyW,iBACvBzW,KAAKuW,KAAKhG,OAASvQ,KAAKyW,iBAAoBzW,KAAKmV,cACtDnV,KAAKkU,YAKb,EAOAgB,EAAM7T,UAAUqV,QAAU,WAC1B,EAOAxB,EAAM7T,UAAUsV,kBAAoB,WAEhC,IAAIC,EAAQN,EACR,KAAkBtW,KAAK6W,OAAS7W,KAAKuK,MAAMuM,yBAE3CF,EAAS,OACTN,EAAOtW,KAAK6W,OAGZD,EAAS,MACTN,EAAOtW,KAAKsW,MAGZ,KAAeA,KACfA,EAAOA,EAAKjO,YAGZ,KAAeiO,IAAkB,KAATA,IACxBA,EAAOtW,KAAK+W,eAAeT,EAAMtW,KAAKgX,WAE5B,QAAVJ,EACI5W,KAAKiX,YACLX,EAAOtW,KAAKiX,UAAUlX,MAAM,aAAcuW,IAI1CtW,KAAKiX,YACLX,EAAOtW,KAAKiX,UAAUlX,MAAM,aAAcuW,IAIlD,IAAIH,EAAUG,GAAQtW,KAAKqW,aAAeO,GAAU5W,KAAKkX,eAGzD,OAFAlX,KAAKqW,YAAcC,EACnBtW,KAAKkX,eAAiBN,EACfT,CACX,EAMAjB,EAAM7T,UAAU+U,eAAiB,WAC7BpW,KAAKmX,YAAc,GACnBnX,KAAKkU,YACT,EAKAgB,EAAM7T,UAAU+V,YAAc,SAAUC,GASpC,IAAItE,EAAUsE,GAAYA,EAAStE,QAC/BuE,EAAOvE,GAAWA,EAAQuE,KAE1BA,GAAQA,EAAKC,aACbF,EAASd,KAAOxD,EAAQyE,UAEhC,EAMAtC,EAAM7T,UAAUwJ,KAAO,WAEnBhL,EAAOwB,UAAUwJ,KAAKzE,KAAKpG,MAC3B,IAAIyX,EAAOzX,KAAKuW,KAAKjG,MACjBoH,EAAO1X,KAAKuW,KAAKhG,OACjBoH,EAAY3X,KAAK2X,UACrB,IAAIA,GACKA,EAAUC,UAAaD,EAAUE,UAD1C,CAOA,IAAID,EAAW,KAAU5X,KAAKwW,eAAiBxW,KAAK8X,iBAAmB9X,KAAK+X,kBAAmB,GAC3FF,EAAY,KAAU7X,KAAKyW,gBAAkBzW,KAAKgY,gBAAkBhY,KAAKiY,mBAAoB,GAE7FvT,EAASmT,EAAY,IAAMD,EAAW5X,KAAKoV,KAAOpV,KAAKqV,SAAWrV,KAAKsV,UAAYtV,KAAKkY,IAAMlY,KAAKuV,SAEvG,GAAKvV,KAAK2W,sBAAuB3W,KAAK4V,QAAU5V,KAAKmX,aAAezS,EAApE,CAGA1E,KAAKmY,eAAiB,EACtBnY,KAAKoY,gBAAkB,EAEvBpY,KAAKmV,aAAc,EAEnB,IAAIyB,EAAS5W,KAAKkX,eACdZ,EAAOtW,KAAKqW,YAEhB,GAAK,KAAeC,IAAiB,IAARA,EAA7B,CAMA,IAAIzV,EAAQyV,EAAKxV,MAAM,MAGvBd,KAAKmX,YAAczS,EACnB1E,KAAKwV,UAAYxV,KAAKwV,UAEtB,IAAI6C,EAAUrY,KAAKsY,MAAMC,QAAQ,WAQjC,GAPe,QAAXF,GACArY,KAAKsY,MAAME,WAAW,WAEtBxY,KAAKyY,iBACLzY,KAAKyY,gBAAgBC,iBAGV,QAAX9B,EAAkB,CAIlB5W,KAAK+S,QAAQyF,WAAW,WAExB,IAAIF,EAAQtY,KAAK+S,QAEjB/S,KAAK2Y,YAKL,IAHA,IAAIC,EAAgB,EAChBC,EAAgB,GAEXzX,EAAI,EAAGA,EAAIP,EAAMG,OAAQI,IAAK,CAEnC,IAAI0X,EAAOjY,EAAMO,GAEjB,GAAY,IAAR0X,EAAJ,CAsBA,IAAIC,GAAS,SAAmBC,MAAMF,EAAM,KAAM9Y,KAAKiZ,kBACnDC,EAAoB,EACpBC,GAAa,EACbC,GAAiB,EAEjB/B,EAAWrX,KAAKqZ,YAAYjY,GAC5BiW,GAEAA,EAASf,KAAO,GAChBe,EAAStE,QAAQuG,YAAc,KAI/BjC,EAAW,CACP,KAAQ,GACR,QAAWrX,KAAKuZ,kBAAkB,GAAI,GACtC,SAAW,GAKfjB,EAAM5P,IAAI2O,EAAStE,UAEvBsE,EAAStE,QAAQyF,WAAW,WAC5BnB,EAAStE,QAAQ2F,iBACb1Y,KAAKyY,iBACLpB,EAAStE,QAAQrK,IAAI1I,KAAKyY,iBAO9B,IAAK,IAAIrW,EAAI,EAAGA,EAAI2W,EAAO/X,OAAQoB,IAAK,CAEhCA,IACAiV,EAASmC,SAAU,GAGvB,IAAIR,EAAQD,EAAO3W,GAEnB,GAAmB,WAAf4W,EAAMzU,KAGNsU,EAAgBG,EAAM1C,SAErB,CAMD,GAAI8C,EACA,SAmBJ,GAfA/B,EAASf,KAAO0C,EAAM1C,KACtBe,EAASoC,OAAQ,SAAmBC,wBAAwBb,GACxD7Y,KAAKyY,gBACLzY,KAAK2Z,cAActC,EAASf,KAAMe,EAASoC,MAAOzZ,KAAKyY,iBAGvDzY,KAAK2Z,cAActC,EAASf,KAAMe,EAASoC,MAAOpC,EAAStE,SAE/D/S,KAAKoX,YAAYC,GACjBA,EAASd,KAAKjG,MAAQhB,KAAKC,KAAK8H,EAASd,KAAKjG,OAE1C4I,EAAoB7B,EAASd,KAAKhG,SAClC2I,EAAoB7B,EAASd,KAAKhG,SAGjCvQ,KAAKoV,MAAQpV,KAAKqV,WAAcgC,EAASd,KAAKjG,MAAQsH,EAAW,CAElE5X,KAAKmV,aAAc,EAEnB,IAAIyE,EAAWvC,EAAStE,QAAQuG,YAC5BO,EAAgBxC,EAASd,KAAKjG,MAAQsJ,EAAS5Y,OAE/C8Y,EAAc,KAAUxK,KAAKC,MAAM8H,EAASd,KAAKjG,MAAQsH,GAAYiC,GAAeD,EAAS5Y,QAEjG,GAAIhB,KAAKqV,SAAU,CAaf,IAAI0E,GAAc,EAIdC,EAAS3C,EAAStE,QAAQuE,KAC9B,GAAI0C,GAAUA,EAAOC,WACjB,IAAK,IAAI/Q,EAAImO,EAAStE,QAAQuE,KAAK2C,WAAWjZ,OAAS,EAAGkI,GAAK,EAAGA,IAAK,CAEnE,IAAIgR,EAAS7C,EAAStE,QAAQuE,KAAK2C,WAAW/Q,GAI9C,GAAI6Q,GAAgB1C,EAASd,KAAKjG,OAASsH,IAEvCsC,EAAOZ,aAAe,IAAMtZ,KAAKuV,SAEjC8B,EAASd,KAAOc,EAAStE,QAAQyE,UACjCH,EAASd,KAAKjG,MAAQhB,KAAK6K,MAAM9C,EAASd,KAAKjG,OAG3C+G,EAASd,KAAKjG,OAASsH,GACvB,MAGRmC,GAAc,EAEd,IAAIK,EAAcF,EAAOZ,YAEzBM,EAAWvC,EAAStE,QAAQuG,YAC5BQ,EAAc,KAAUxK,KAAKC,MAAM8H,EAASd,KAAKjG,MAAQsH,GAAYiC,GAAeD,EAAS5Y,QAE7F,MAAQqW,EAASd,KAAKjG,MAAQsH,GAAckC,GAAeF,EAAS5Y,QAAY8Y,EAAc,EAAI,CAE9F,IAAIO,EAAW,KAAUT,EAAS5Y,OAAS8Y,EAAc9Z,KAAKuV,SAASvU,OAAQ,GAE3EqZ,GAAY,IAIZP,EAAc,EAGV5Q,EAAI,IAEJ6Q,GAAc,EAEd1C,EAAStE,QAAQuE,KAAKgD,YAAYJ,KAI1CE,EAAc,KAA4BA,EAAaC,EAAUra,KAAKuV,SAAUvV,KAAKsV,UAAWtV,KAAKkY,KAChGkC,EAAYpZ,OAASqZ,GAAara,KAAKsV,YAGxC8E,EAAc,KAA4BA,EAAaC,EAAUra,KAAKuV,UAAU,EAAOvV,KAAKkY,MAGhGgC,EAAOZ,YAAcc,EAErB/C,EAASd,KAAOc,EAAStE,QAAQyE,UACjCH,EAASd,KAAKjG,MAAQhB,KAAK6K,MAAM9C,EAASd,KAAKjG,OAG/CwJ,EAAcxK,KAAKC,KAAmB,IAAduK,EAC5B,CAEAV,GAAiB,CACrB,CAER,KACK,CAQD,IAAImB,EAASlD,EAAStE,QAAQuE,KAC9B,GAAIiD,EAAQ,CACR,IAAIC,EAAWnD,EAAStE,QAAQuE,KAAKmD,UAEjCC,OAAa,EACjB,MAAQrD,EAASd,KAAKjG,MAAQsH,GAAckC,GAAeF,EAAS5Y,QAAY8Y,EAAc,EAAI,CAE1FO,EAAW,KAAUrB,EAAM1C,KAAKtV,OAAS8Y,EAAa,GAoB1D,GAjBIX,EAEAuB,EAAa,KAA4B1B,EAAM1C,KAAM+D,GAAU,EAAMra,KAAKkY,MAI1EwC,EAAa,KAA4B1B,EAAM1C,KAAM+D,GAAU,EAAMra,KAAKkY,KAAK,IAE1EwC,EAAW,GAAG1Z,OAASqZ,GAA0B,IAAbA,KAGrChD,EAAStE,QAAQuE,KAAKgD,YAAYE,GAElCV,EAAc,IAIlBA,EAAc,EAAG,CACjB,IAAIa,EAAaD,EAAWvY,QACxBgX,IACAwB,EAAa,KAAYA,IAE7BH,EAASlB,aAAc,SAAmBsB,QAAQD,EACtD,CAEAtD,EAASd,KAAOc,EAAStE,QAAQyE,UACjCH,EAASd,KAAKjG,MAAQhB,KAAK6K,MAAM9C,EAASd,KAAKjG,OAI/CwJ,GACJ,CAEA,GAAIY,EAAW1Z,OAAS,EAAG,CACvB,IAAI6Z,EAAa,GAEb,KAAeH,KACX1a,KAAKkY,IACL2C,GAAcH,EAAWlS,KAAK,IAAMqQ,EAGpCgC,GAAchC,EAAgB6B,EAAWlS,KAAK,IAAInG,QAAQ,eAAgB,SAIlF,IAAK,IAAIsK,EAAIvK,EAAI,EAAGuK,EAAIoM,EAAO/X,OAAQ2L,IACb,SAAlBoM,EAAOpM,GAAGpI,KAKVsW,GAAc9B,EAAOpM,GAAG2J,KAAKjU,QAAQ,eAAgB,QAGrDwY,GAAc9B,EAAOpM,GAAG2J,KAIhCzV,EAAMia,OAAO1Z,EAAI,EAAG,EAAGyZ,EAC3B,CAEAzB,GAAiB,CACrB,CACJ,CACJ,CAEIpZ,KAAKuW,KAAKjG,MAAQ+G,EAASd,KAAKjG,QAChCtQ,KAAKuW,KAAKjG,MAAQ+G,EAASd,KAAKjG,OAMpCtQ,KAAKuW,KAAKhG,OAASqI,EAAgBM,EAE9BlZ,KAAKyY,gBAQNpB,EAAStE,QAAQE,KAAK,CAClB,IAAOjT,KAAK+a,cAAc1S,aAR9BgP,EAAStE,QAAQE,KAAK,CAClB,EAAK,IACL,EAAK2F,EAAgBM,EACrB,GAAM,KAAalZ,KAAK0V,cAAgBwD,EAAoB,GAAG7Q,aAQvE8Q,GAAa,CACjB,CACJ,CAEA,IAAI7B,EAAOD,EAAStE,QAAQuE,KAC5B,GAAIA,EAAM,CACFkD,EAAWlD,EAAKmD,UAChBD,IACAA,EAASlB,YAActZ,KAAKkY,IACxB,KAAasC,EAASlB,aACtB,KAAakB,EAASlB,aAElC,CAEAV,GAAiBM,EAEjBlZ,KAAKgb,YAAY3D,EAAUjW,EA/R3B,KApBA,CAKI,IAAI6Z,EAAcjb,KAAKuZ,kBAAkB,GAAI,GAC7C0B,EAAYvS,IAAI1I,KAAK2Z,cAAc,KAAK,SAAmBD,wBAAwBb,KACnFP,EAAM5P,IAAIuS,GACV,IAAIC,EAAS5L,KAAKC,KAAK0L,EAAYzD,UAAUjH,QACzC2K,EAAS,IACTtC,GAAiBsC,GAErB5C,EAAM6C,cAAcF,GAEpB,IAAIG,EAAapb,KAAKqZ,YAAYjY,GAC9Bga,IACAA,EAAW9E,KAAO,GAClB8E,EAAWrI,QAAQuG,YAAc,GAGzC,CAgSJ,CAEAtZ,KAAKqb,qBACLrb,KAAKsb,eAAgB,EACE,GAAnBtb,KAAKuW,KAAKjG,OAAkC,GAApBtQ,KAAKuW,KAAKhG,SAClCvQ,KAAKsb,eAAgB,GAGzBtb,KAAKmY,eAAiB,KAAY,KAAUnY,KAAKuW,KAAKjG,MAAOtQ,KAAK6T,WAAa7T,KAAK8X,iBAAmB9X,KAAK+X,oBAC5G/X,KAAKoY,gBAAkB,KAAY,KAAUpY,KAAKuW,KAAKhG,OAAQvQ,KAAK8T,YAAc9T,KAAKgY,gBAAkBhY,KAAKiY,qBAE9GjY,KAAKub,eACLvb,KAAKuW,KAAKjG,MAAQtQ,KAAKmY,eACvBnY,KAAKuW,KAAKhG,OAASvQ,KAAKoY,gBACpBV,GAAQ1X,KAAKoY,iBAAmBX,GAAQzX,KAAKmY,gBAC7CnY,KAAKwb,SAAS,eAElBxb,KAAKyb,WAAW5a,EAAMG,OAC1B,KACK,CAIDhB,KAAK+S,QAAQyF,WAAW,WACxBxY,KAAK2Y,YAEDL,EAAQtY,KAAK+S,QACjBuF,EAAMI,iBACN1Y,KAAK0b,SAAS,WAAY,GAAI,GAE9B,IAAIC,EAAK3b,KAAKuK,MAAMqR,gBACpBtD,EAAM5P,IAAIiT,GAGN3b,KAAK4X,UACL+D,EAAG1I,KAAK,CACJ3C,MAAOtQ,KAAK4X,SAAW5X,KAAK8X,iBAAmB9X,KAAK+X,oBAGxD/X,KAAK6X,WACL8D,EAAG1I,KAAK,CACJ1C,OAAQvQ,KAAK6X,UAAY7X,KAAKgY,gBAAkBhY,KAAKiY,qBAK7D,IAAI4D,EAAc7b,KAAK8b,mBAAmBxF,GAC1CqF,EAAGrE,KAAKyE,YAAYF,GAEpBA,EAAYpC,MAAMpB,QAAU,eAC5B,IAAI2D,EAAcH,EAAYG,YAC1BC,EAAeJ,EAAYI,aAC/BJ,EAAYpC,MAAMpB,QAAU,QAC5BrY,KAAKoT,MAAQ,CACThR,EAAG,EACHkJ,EAAG,EACHgF,MAAO0L,EACPzL,OAAQ0L,GAIZN,EAAG1I,KAAK,CACJ3C,MAAO0L,EAAc,EACrBzL,OAAQ0L,IAGZjc,KAAKqb,qBAELrb,KAAKmY,eAAiB,KAAUnY,KAAKuW,KAAKjG,MAAOtQ,KAAK6T,WAAa7T,KAAK8X,iBAAmB9X,KAAK+X,mBAChG/X,KAAKoY,gBAAkB,KAAUpY,KAAKuW,KAAKhG,OAAQvQ,KAAK8T,YAAc9T,KAAKgY,gBAAkBhY,KAAKiY,oBAClGjY,KAAKuW,KAAKjG,MAAQtQ,KAAKmY,eACvBnY,KAAKuW,KAAKhG,OAASvQ,KAAKoY,gBAEpBpY,KAAKqV,WACLwG,EAAYpC,MAAMyC,SAAW,WAE5BF,EAAcpE,GAAcqE,EAAepE,KAC5C7X,KAAKmV,aAAc,EAE3B,CAEAnV,KAAKmc,YACLnc,KAAKoc,eACLpc,KAAKqc,mBACU,QAAXhE,GACArY,KAAKsY,MAAMrF,KAAK,CAAEoF,QAAS,SAE3BrY,KAAKsc,aACLtc,KAAKuK,MAAMgS,UAAUvc,KAAKsc,YA9a9B,MAFItc,KAAK+S,QAAQE,KAAK,CAAEoF,QAAS,QAVjC,CATA,MAHQV,EAAUtT,OAAOyR,KAAK,iBAAkB9V,KAAKoW,eAAgBpW,MAAM,EAwc/E,EAIAkV,EAAM7T,UAAUga,mBAAqB,WAC7Brb,KAAKwc,gBACAxc,KAAKwW,eAAiBxW,KAAKuW,KAAKjG,OAAWtQ,KAAKyW,gBAAkBzW,KAAKuW,KAAKhG,QAC7EvQ,KAAK+S,QAAQE,KAAK,CAAEoF,QAAS,SAC7BrY,KAAKmV,aAAc,IAGnBnV,KAAK+S,QAAQyF,WAAW,WACxBxY,KAAKmV,aAAc,GAG/B,EAMAD,EAAM7T,UAAUka,aAAe,WAE3B,IAAIjD,EAAQtY,KAAK+S,QACb0J,EAAWnE,EAAMhB,KAAKmF,UAAYnE,EAAMhB,KAAK2C,WAEjD,GAAKwC,KAAaA,GAA+B,GAAnBA,EAASzb,QAAvC,CAGA,IAAIsP,EAAQtQ,KAAKmY,eACb5H,EAASvQ,KAAKoY,gBAElB,KAAYpY,KAAK8X,kBACjB,KAAY9X,KAAK+X,mBACjB,KAAY/X,KAAKgY,iBACjB,KAAYhY,KAAKiY,oBACbjY,KAAKkY,IACLI,EAAMrF,KAAK,CACP,UAAa,QAIjBqF,EAAME,WAAW,aAIrB,IAAK,IAAIpX,EAAIqb,EAASzb,OAAS,EAAGI,GAAK,EAAGA,IAAK,CAI3C,IAAIkW,EAAOmF,EAASrb,GAEpB,GADAkW,EAAKoF,aAAa,cAAe1c,KAAKwV,WAClCxV,KAAKyY,gBACLnB,EAAKqF,gBAAgB,KACrBrF,EAAKqF,gBAAgB,SAEpB,CACD,OAAQ3c,KAAKwV,WACT,IAAK,SACD8B,EAAKoF,aAAa,KAAMpM,EAAQ,GAAGjI,WAAa,MAChD,MACJ,IAAK,MACGrI,KAAKkY,KAGLZ,EAAKoF,aAAa,IAAKpM,EAAMjI,YAEjC,MACJ,QACQrI,KAAKkY,IACLZ,EAAKoF,aAAa,IAAKpM,EAAMjI,YAG7BiP,EAAKqF,gBAAgB,eAEzB,MAER,IAAIrR,EAAI,KAAegM,EAAKsF,aAAa,MACzC,OAAQ5c,KAAKyV,YACT,IAAK,SACD6B,EAAKoF,aAAa,MAAOpR,GAAK,IAAMiF,EAASvQ,KAAKuW,KAAKhG,QAAU,GAAGlI,YACpE,MACJ,IAAK,SACDiP,EAAKoF,aAAa,MAAOpR,GAAK,GAAKiF,EAASvQ,KAAKuW,KAAKhG,QAAQlI,YAC9D,MACJ,QACIiP,EAAKoF,aAAa,KAAMpR,GAAK,GAAGjD,YAChC,MAEZ,CACJ,CA9DA,CA+DJ,EAUA6M,EAAM7T,UAAUkY,kBAAoB,SAAUjD,EAAMhL,GAEhD,IAAIyH,EAAU/S,KAAKuK,MAAMsS,SAAS,QA2BlC,OA1BA9J,EAAQuG,YAAchD,EAEtBvD,EAAQE,KAAK,CACT,EAAK,MAML,KAAe3H,IACfyH,EAAQE,KAAK,CACT,EAAK3H,EAAEjD,cAIXrI,KAAKqV,UAAYrV,KAAKoV,OACtBrC,EAAQE,KAAK,CAAE,SAAY,WAUxBF,CACX,EACAzN,OAAOC,eAAe2P,EAAM7T,UAAW,MAAO,CAI1CmE,IAAK,WACD,OAAI,KAAexF,KAAK8c,MACb9c,KAAK8c,OAEP9c,KAAK+c,YACH/c,KAAK+c,WAAW7E,GAG/B,EAYA3Q,IAAK,SAAU1B,GACXA,EAAQ,KAAgBA,GACxB7F,KAAK8c,KAAOjX,EACR7F,KAAK+S,SACL/S,KAAKub,cAEb,EACA7V,YAAY,EACZC,cAAc,IAOlBuP,EAAM7T,UAAUsX,UAAY,WACxB3Y,KAAKoT,MAAQ,CAAEhR,EAAG,EAAGkJ,EAAG,EAAGgF,MAAO,EAAGC,OAAQ,EACjD,EAQA2E,EAAM7T,UAAUya,mBAAqB,SAAUxF,GAE3C,IAAI0G,EAAMC,SAASC,cAAc,OAGjC,OAFAF,EAAIG,UAAY7G,EAERtW,KAAKwV,WACT,IAAK,SACDwH,EAAIvD,MAAMjE,UAAY,SACtB,MACJ,IAAK,MACDwH,EAAIvD,MAAMjE,UAAY,QACtB,MAuBR,OApBIxV,KAAKoV,KACL4H,EAAIvD,MAAM2D,SAAW,aAGrBJ,EAAIvD,MAAM4D,WAAa,SAQvBrd,KAAKkY,MACL8E,EAAIvD,MAAM6D,UAAY,OAItB,KAAetd,KAAKyJ,QACpBuT,EAAIvD,MAAMnM,MAAQtN,KAAKyJ,KAAKpB,YAEzB2U,CACX,EAQA9H,EAAM7T,UAAU8a,UAAY,WACxB,IAAI7D,EAAQtY,KAAK+S,SACZ/S,KAAKud,YAAcvd,KAAKwd,WAAaxd,KAAKyd,WAAazd,KAAK0d,UAC7DpF,EAAMqF,SAAS,CACX,iBAAoB,OACpB,aAAgB,SAGf3d,KAAKud,aACVjF,EAAMsF,YAAY,oBAClBtF,EAAMsF,YAAY,gBAE1B,EAIA1I,EAAM7T,UAAUoa,WAAa,SAAUoC,GACnC7d,KAAK8d,gBACL,IAAIjd,EAAQb,KAAK+d,SAAS,YAC1B,GAAIld,EAAMG,QAAU6c,EAChB,IAAK,IAAIzc,EAAIyc,EAAOzc,EAAIP,EAAMG,OAAQI,IAAK,CACvC,IAAI0X,EAAOjY,EAAMO,GACb0X,GAAQA,EAAK/F,SACb+F,EAAK/F,QAAQE,KAAK,CAAE,QAAW,QAEvC,CAER,EACA3N,OAAOC,eAAe2P,EAAM7T,UAAW,OAAQ,CAI3CmE,IAAK,WACD,OAAOxF,KAAK2L,iBAAiB,OACjC,EAUApE,IAAK,SAAU1B,GAEX7F,KAAK4L,iBAAiB,OAAQ/F,GAAO,EACzC,EACAH,YAAY,EACZC,cAAc,IAElBL,OAAOC,eAAe2P,EAAM7T,UAAW,OAAQ,CAI3CmE,IAAK,WACD,OAAOxF,KAAK2L,iBAAiB,OACjC,EAaApE,IAAK,SAAU1B,GACP7F,KAAK4L,iBAAiB,OAAQ/F,GAAO,KACjC7F,KAAKsc,aACLtc,KAAKsc,YAAYtU,UAEjBhI,KAAKyY,iBACLzY,KAAKyY,gBAAgBzQ,UAEzBhI,KAAKsc,YAActc,KAAKuK,MAAM7B,IAAI,QAClC1I,KAAKsc,YAAYrJ,KAAK,CAAE,EAAKpN,IAC7B7F,KAAKsc,YAAYrJ,KAAK,CAAE,GAAM,aAAejT,KAAKge,MAClDhe,KAAKiM,WAAWrJ,KAAK5C,KAAKsc,aAC1Btc,KAAKyY,gBAAkBzY,KAAKuK,MAAMsS,SAAS,YAC3C7c,KAAKyY,gBAAgBxD,OAAO,KAAY,aAAc,cAAgBjV,KAAKge,KAE3Ehe,KAAKyY,gBAAgBxF,KAAK,CAAE,KAAQpN,IACpC7F,KAAKiM,WAAWrJ,KAAK5C,KAAKyY,iBAC1BzY,KAAKoW,iBAEb,EACA1Q,YAAY,EACZC,cAAc,IAElBL,OAAOC,eAAe2P,EAAM7T,UAAW,iBAAkB,CAIrDmE,IAAK,WACD,OAAOxF,KAAK2L,iBAAiB,iBACjC,EAWApE,IAAK,SAAU1B,GACX7F,KAAK4L,iBAAiB,iBAAkB/F,GACpC7F,KAAKyY,iBACLzY,KAAKyY,gBAAgBxF,KAAK,CAAE,YAAwB,IAARpN,EAAe,KAEnE,EACAH,YAAY,EACZC,cAAc,IAElBL,OAAOC,eAAe2P,EAAM7T,UAAW,gBAAiB,CAIpDmE,IAAK,WACD,OAAOxF,KAAK2L,iBAAiB,gBACjC,EASApE,IAAK,SAAU1B,GACX7F,KAAK4L,iBAAiB,gBAAiB/F,EAC3C,EACAH,YAAY,EACZC,cAAc,IAElBL,OAAOC,eAAe2P,EAAM7T,UAAW,OAAQ,CAI3CmE,IAAK,WACD,OAAOxF,KAAK2L,iBAAiB,OACjC,EAMApE,IAAK,SAAU1B,GACX7F,KAAK2Y,YACL3Y,KAAK4L,iBAAiB,OAAQ/F,GAAO,EACzC,EACAH,YAAY,EACZC,cAAc,IAElBL,OAAOC,eAAe2P,EAAM7T,UAAW,WAAY,CAI/CmE,IAAK,WACD,OAAOxF,KAAK2L,iBAAiB,WACjC,EAaApE,IAAK,SAAU1B,GACX7F,KAAK2Y,YACL3Y,KAAK4L,iBAAiB,WAAY/F,GAAO,EAC7C,EACAH,YAAY,EACZC,cAAc,IAElBL,OAAOC,eAAe2P,EAAM7T,UAAW,YAAa,CAIhDmE,IAAK,WACD,OAAOxF,KAAK2L,iBAAiB,YACjC,EAQApE,IAAK,SAAU1B,GACX7F,KAAK4L,iBAAiB,YAAa/F,GAAO,EAC9C,EACAH,YAAY,EACZC,cAAc,IAElBL,OAAOC,eAAe2P,EAAM7T,UAAW,WAAY,CAI/CmE,IAAK,WACD,OAAOxF,KAAK2L,iBAAiB,WACjC,EAOApE,IAAK,SAAU1B,GACX7F,KAAK4L,iBAAiB,WAAY/F,GAAO,EAC7C,EACAH,YAAY,EACZC,cAAc,IAElBL,OAAOC,eAAe2P,EAAM7T,UAAW,aAAc,CAIjDmE,IAAK,WACD,OAAOxF,KAAK2L,iBAAiB,aACjC,EASApE,IAAK,SAAU1B,GACX7F,KAAK4L,iBAAiB,aAAc/F,GAAO,GAC3C7F,KAAKmc,WACT,EACAzW,YAAY,EACZC,cAAc,IAElBL,OAAOC,eAAe2P,EAAM7T,UAAW,YAAa,CAIhDmE,IAAK,WACD,OAAOxF,KAAK2L,iBAAiB,YACjC,EAWApE,IAAK,SAAU1B,GACX7F,KAAK4L,iBAAiB,YAAa/F,GAAO,EAC9C,EACAH,YAAY,EACZC,cAAc,IAElBL,OAAOC,eAAe2P,EAAM7T,UAAW,aAAc,CAMjDmE,IAAK,WACD,OAAOxF,KAAK2L,iBAAiB,aACjC,EAQApE,IAAK,SAAU1B,GACX7F,KAAK4L,iBAAiB,aAAc/F,GAAO,EAC/C,EACAH,YAAY,EACZC,cAAc,IAElBL,OAAOC,eAAe2P,EAAM7T,UAAW,OAAQ,CAI3CmE,IAAK,WACD,OAAOxF,KAAK2L,iBAAiB,OACjC,EAcApE,IAAK,SAAU1B,GAEX,GADA7F,KAAK4L,iBAAiB,OAAQ/F,GAAO,IAChC,KAAeA,GAAQ,CACxB,IAAIyS,EAAQtY,KAAK+S,QACjBuF,EAAM2F,oBAAoB,gBAC9B,CACJ,EACAvY,YAAY,EACZC,cAAc,IAElBuP,EAAM7T,UAAU4L,QAAU,SAAUpH,GAEhC,GADAhG,EAAOwB,UAAU4L,QAAQ7G,KAAKpG,KAAM6F,GAChC7F,KAAK6W,KAGL,IAFA,IAAIyB,EAAQtY,KAAK+S,QACbmL,EAAO5F,EAAMhB,KAAK6G,qBAAqB,OAClC/c,EAAI,EAAGA,EAAI8c,EAAKld,OAAQI,IAAK,CAClC,IAAI4b,EAAMkB,EAAK9c,GACX,KAAepB,KAAKyJ,QACpBuT,EAAIvD,MAAMnM,MAAQtN,KAAKyJ,KAAKpB,WAEpC,CAER,EACA/C,OAAOC,eAAe2P,EAAM7T,UAAW,gBAAiB,CAIpDmE,IAAK,WACD,OAAOxF,KAAK2L,iBAAiB,gBACjC,EAOApE,IAAK,SAAU1B,GACX7F,KAAK4L,iBAAiB,gBAAiB/F,GAAO,EAClD,EACAH,YAAY,EACZC,cAAc,IAElBL,OAAOC,eAAe2P,EAAM7T,UAAW,mBAAoB,CAIvDmE,IAAK,WACD,OAAOxF,KAAK2L,iBAAiB,mBACjC,EAQApE,IAAK,SAAU1B,GACX7F,KAAK4L,iBAAiB,mBAAoB/F,GAAO,EACrD,EACAH,YAAY,EACZC,cAAc,IAMlBuP,EAAM7T,UAAU8R,eAAiB,WAAc,EAQ/C+B,EAAM7T,UAAUgY,YAAc,SAAUwE,GACpC7d,KAAK8d,gBACL,IAAIjd,EAAQb,KAAK+d,SAAS,YAC1B,OAAOld,EAAMG,OAAS6c,EAAQhd,EAAMgd,QAASrb,CACjD,EAQA0S,EAAM7T,UAAU2Z,YAAc,SAAUlC,EAAM+E,GAC1C7d,KAAK8d,gBACL9d,KAAK+d,SAAS,YAAYF,GAAS/E,CACvC,EAIA5D,EAAM7T,UAAUyc,cAAgB,WACvB,KAAe9d,KAAK+d,SAAS,cAC9B/d,KAAK0b,SAAS,WAAY,GAAI,EAEtC,EAQAxG,EAAM7T,UAAU+c,YAAc,SAAUpH,GAChChX,KAAKqe,uBACLre,KAAKqe,sBAAsBrW,UAE3BgP,IACAhX,KAAKqe,sBAAwB,IAAI,KAAc,CAC3CrH,EAAS3S,OAAOsD,GAAG,eAAgB3H,KAAKkU,WAAYlU,MAAM,GAC1DgX,EAAS3S,OAAOsD,GAAG,sBAAuB3H,KAAKkU,WAAYlU,MAAM,GACjEgX,EAAS3S,OAAOsD,GAAG,yBAA0B3H,KAAKkU,WAAYlU,MAAM,GACpEgX,EAAS3S,OAAOsD,GAAG,kBAAmB3H,KAAKkU,WAAYlU,MAAM,MAGrEH,EAAOwB,UAAU+c,YAAYhY,KAAKpG,KAAMgX,EAC5C,EACA1R,OAAOC,eAAe2P,EAAM7T,UAAW,iBAAkB,CAOrDmE,IAAK,WACD,OAAO,KAAexF,KAAK4X,UAAY5X,KAAK4X,SAAW5X,KAAK6T,UAChE,EACAnO,YAAY,EACZC,cAAc,IAElBL,OAAOC,eAAe2P,EAAM7T,UAAW,kBAAmB,CAMtDmE,IAAK,WACD,OAAO,KAAexF,KAAK6X,WAAa7X,KAAK6X,UAAY7X,KAAK8T,WAClE,EACApO,YAAY,EACZC,cAAc,IAGlBuP,EAAM7T,UAAUsY,cAAgB,SAAUrD,EAAMmD,EAAOjH,GACnD,IAAIO,EAAU/S,KAAKuK,MAAM7B,IAAI,SAE7B,GADAqK,EAAQuG,YAAchD,EAClBmD,EACA,GAAI,WAAiBjH,EAAQ,CAEzB,IAAI8L,EAAU,0BAA4BC,KAAK9E,GAAOpX,QAAQ,UAAW,IACzE0Q,EAAQuE,KAAKoF,aAAa,QAAS4B,GACnC,IAAIE,EAAOvB,SAASwB,gBAAgB,KAAY,QAChDjM,EAAO8E,KAAKyE,YAAYyC,GACxB,IAAItV,EAAI+T,SAASC,cAAc,SAC/BhU,EAAE3E,KAAO,WACT2E,EAAEiU,UAAY,IAAMmB,EAAU,MAAQ7E,EAAQ,IAC9CvQ,EAAEwT,aAAa,QAAS,WACxB8B,EAAKzC,YAAY7S,EACrB,MAEI6J,EAAQuE,KAAKoF,aAAa,QAASjD,GAM3C,OAHIjH,GACAA,EAAO9J,IAAIqK,GAERA,CACX,EAKAmC,EAAM7T,UAAUqd,eAAiB,WAC7B7e,EAAOwB,UAAUqd,eAAetY,KAAKpG,MACrCA,KAAKoW,gBACT,EACA9Q,OAAOC,eAAe2P,EAAM7T,UAAW,cAAe,CAIlDmE,IAAK,WACD,IAAImZ,EAAQ3e,KAAK2L,iBAAiB,eASlC,OARKgT,EAKI3e,KAAKgX,WACV2H,EAAQ3e,KAAK+W,eAAe4H,IAL5BA,EAAQ3e,KAAK+W,eAAe,KAAiB,KAAkB/W,KAAK6W,MAC9D7W,KAAK6W,KACL7W,KAAKsW,OAKRqI,CACX,EAMApX,IAAK,SAAU1B,GACXA,EAAQ,KAAaA,GACjB7F,KAAK4L,iBAAiB,cAAe/F,IACrC7F,KAAK4e,oBAEb,EACAlZ,YAAY,EACZC,cAAc,IAEXuP,CACX,CAr2C0B,CAq2CxB,KAQF,4BAAsCA,EAOtC,UAAkB,CACd2J,SAAU,cACVC,MAAO,SAAU3a,EAAQ4a,GACrB,GAAI5a,aAAkB+Q,GAAS/Q,EAAOqO,QAAUrO,EAAOqO,OAAOwM,aAAc,CACxE,IAAIF,EAAQ3a,EAAOoN,OAAOC,OAAOuN,GAEjC,OADAD,EAAM5O,WAAW+O,UAAW,EACrBH,CACX,CACA,OAAO,IACX,G,yIC95CAI,EAAsB,SAAUrf,GAKhC,SAASqf,IACL,IAAIpf,EAAQD,EAAOuG,KAAKpG,OAASA,KAOjC,OANAF,EAAM6G,UAAY,OAClB7G,EAAMiT,QAAUjT,EAAMyK,MAAM7B,IAAI,QAChC5I,EAAM2J,MAAO,UACb3J,EAAMqf,GAAK,EACXrf,EAAMsf,GAAK,EACXtf,EAAM8K,aACC9K,CACX,CAwIA,OArJA,QAAUof,EAAMrf,GAmBhBqf,EAAK7d,UAAUwJ,KAAO,WAClBhL,EAAOwB,UAAUwJ,KAAKzE,KAAKpG,MACvBA,KAAKmf,IAAMnf,KAAKqf,IAAMrf,KAAKof,IAAMpf,KAAKsf,GACtCtf,KAAKuU,cAAe,EAGpBvU,KAAKuU,cAAe,EAExBvU,KAAKmf,GAAKnf,KAAKmf,GACfnf,KAAKqf,GAAKrf,KAAKqf,GACfrf,KAAKof,GAAKpf,KAAKof,GACfpf,KAAKsf,GAAKtf,KAAKsf,EACnB,EACAha,OAAOC,eAAe2Z,EAAK7d,UAAW,KAAM,CAIxCmE,IAAK,WACD,OAAOxF,KAAK2L,iBAAiB,KACjC,EAMApE,IAAK,SAAU1B,GACN,KAAeA,KAChBA,EAAQ,GAEZ,IAAI0Z,EAAQ,EACRvf,KAAKuU,cAAgBvU,KAAK0J,kBAAkB,MAC5C6V,EAAQ,MAEZvf,KAAK4L,iBAAiB,KAAM/F,GAAO,GACnC7F,KAAK+S,QAAQE,KAAK,CAAE,GAAMpN,EAAQ0Z,GACtC,EACA7Z,YAAY,EACZC,cAAc,IAElBL,OAAOC,eAAe2Z,EAAK7d,UAAW,KAAM,CAIxCmE,IAAK,WACD,IAAIK,EAAQ7F,KAAK2L,iBAAiB,MAIlC,OAHK,KAAe9F,KAChBA,EAAQ7F,KAAK6T,YAEVhO,CACX,EAMA0B,IAAK,SAAU1B,GACN,KAAeA,KAChBA,EAAQ,GAEZ7F,KAAK4L,iBAAiB,KAAM/F,GAAO,GACnC7F,KAAK+S,QAAQE,KAAK,CAAE,GAAMpN,GAC9B,EACAH,YAAY,EACZC,cAAc,IAElBL,OAAOC,eAAe2Z,EAAK7d,UAAW,KAAM,CAIxCmE,IAAK,WACD,OAAOxF,KAAK2L,iBAAiB,KACjC,EAMApE,IAAK,SAAU1B,GACN,KAAeA,KAChBA,EAAQ,GAEZ,IAAI0Z,EAAQ,EACRvf,KAAKuU,cAAgBvU,KAAK0J,kBAAkB,MAC5C6V,EAAQ,MAEZvf,KAAK4L,iBAAiB,KAAM/F,GAAO,GACnC7F,KAAK+S,QAAQE,KAAK,CAAE,GAAMpN,EAAQ0Z,GACtC,EACA7Z,YAAY,EACZC,cAAc,IAElBL,OAAOC,eAAe2Z,EAAK7d,UAAW,KAAM,CAIxCmE,IAAK,WACD,IAAIK,EAAQ7F,KAAK2L,iBAAiB,MAIlC,OAHK,KAAe9F,KAChBA,EAAQ7F,KAAK8T,aAEVjO,CACX,EAMA0B,IAAK,SAAU1B,GACN,KAAeA,KAChBA,EAAQ,GAEZ7F,KAAK4L,iBAAiB,KAAM/F,GAAO,GACnC7F,KAAK+S,QAAQE,KAAK,CAAE,GAAMpN,GAC9B,EACAH,YAAY,EACZC,cAAc,IAQlBuZ,EAAK7d,UAAUme,gBAAkB,SAAU9M,GACvC,IAAI+M,EAAS,CAAErd,EAAGpC,KAAKmf,GAAI7T,EAAGtL,KAAKof,IAC/BM,EAAS,CAAEtd,EAAGpC,KAAKqf,GAAI/T,EAAGtL,KAAKsf,IAC/BK,EAAQ,KAAkBF,EAAQC,EAAQhN,GAC1C5I,EAAQ,KAAe2V,EAAQC,GACnC,MAAO,CAAEtd,EAAGud,EAAMvd,EAAGkJ,EAAGqU,EAAMrU,EAAGxB,MAAOA,EAC5C,EACOoV,CACX,CAvJyB,CAuJvB,MAQF,2BAAqCA,C,6FC1KjCU,EAAuB,SAAU/f,GAKjC,SAAS+f,IACL,IAAI9f,EAAQD,EAAOuG,KAAKpG,OAASA,KAQjC,OAJAF,EAAMuD,QAAU,IAAI,KAAQvD,GAC5BA,EAAM6G,UAAY,QAClB7G,EAAM+f,aAAc,EACpB/f,EAAM0d,WAAY,EACX1d,CACX,CACA,OAfA,QAAU8f,EAAO/f,GAeV+f,CACX,CAjB0B,CAiBxB,I,uICNEE,EAA4B,SAAUjgB,GAKtC,SAASigB,IACL,IAAIhgB,EAEJD,EAAOuG,KAAKpG,OAASA,KACrBF,EAAM6G,UAAY,aAClB7G,EAAMgS,QAAQ,GAAI,GAAI,GAAI,IAC1BhS,EAAMsQ,mBAAoB,EAC1B,IAAI4B,EAAkB,IAAI,IACtBxB,EAAa1Q,EAAM0Q,WACvBA,EAAWjC,aAAa,GAAI,GAAI,GAAI,IACpCiC,EAAW/G,KAAOuI,EAAgBtB,OAAO,iBACzCF,EAAW9G,OAASsI,EAAgBtB,OAAO,uBAC3CF,EAAWlH,cAAgB,EAC3BkH,EAAWe,OAAOmC,OAAO,SAASxD,WAAWzG,KAAOuI,EAAgBtB,OAAO,sBAC3EF,EAAWe,OAAOmC,OAAO,QAAQxD,WAAWzG,KAAOuI,EAAgBtB,OAAO,uBAE1E,IAAIqP,EAAW,IAAI,IACnBA,EAASzC,UAAY,QACrByC,EAASzP,MAAQ,EACjByP,EAASxP,OAAS,GAClBwP,EAASC,WAAa,EACtBD,EAASE,YAAc,EACvBF,EAASpL,iBAAmB,SAC5BoL,EAASnL,eAAiB,SAC1BmL,EAASrW,OAASsI,EAAgBtB,OAAO,qBACzCqP,EAAStW,KAAOsW,EAASrW,OACzB5J,EAAMwS,KAAOyN,EAEb,IAAIG,EAAW,IAAI,IACnBA,EAAS5P,MAAQ,GACjB4P,EAAS3P,OAAS,GAClB2P,EAASvL,iBAAmB,SAC5BuL,EAAStL,eAAiB,SAC1BsL,EAAS3R,aAAa,EAAG,EAAG,EAAG,GAC/B2R,EAASxW,OAASsI,EAAgBtB,OAAO,qBACzCwP,EAASzW,KAAOsW,EAASrW,OACzB5J,EAAMqgB,WAAY,EAClB,IAAIC,EAActgB,EAAMyR,OAAOC,OAAO,UAMtC,OALA4O,EAAYjO,mBAAqB,EACjCiO,EAAYlQ,WAAWoC,KAAO4N,EAC9BpgB,EAAMmQ,aAAakC,mBAAqB,EAExCrS,EAAM8K,aACC9K,CACX,CAWA,OA3DA,QAAUggB,EAAYjgB,GAqDtBigB,EAAWze,UAAU2S,sBAAwB,WACzCnU,EAAOwB,UAAU2S,sBAAsB5N,KAAKpG,MACvC,KAAeA,KAAKqQ,eACrBrQ,KAAKqQ,YAAcrQ,KAAK4E,SAASC,UAAU,QAEnD,EACOib,CACX,CA7D+B,CA6D7B,KAQF,iCAA2CA,C,6FCzEvCO,EAAkC,SAAUxgB,GAK5C,SAASwgB,IACL,IAAIvgB,EAAQD,EAAOuG,KAAKpG,OAASA,KAKjC,OAJAF,EAAM6G,UAAY,mBAClB7G,EAAMiT,QAAUjT,EAAMyK,MAAM7B,IAAI,QAChC5I,EAAMyO,aAAe,EACrBzO,EAAM8K,aACC9K,CACX,CAuGA,OAlHA,QAAUugB,EAAkBxgB,GAiB5BwgB,EAAiBhf,UAAUwJ,KAAO,WAC9BhL,EAAOwB,UAAUwJ,KAAKzE,KAAKpG,MAC3B,IAAIsgB,EAAKtgB,KAAKuO,aACVtD,EAAIjL,KAAKkL,WACTC,EAAInL,KAAKoL,YACb,GAAIH,EAAI,GAAKE,EAAI,EAAG,CAChB,IAAI/I,EAAIpC,KAAKugB,SACTjV,EAAItL,KAAKwgB,SACTC,EAAMzgB,KAAK0gB,iBAAmB,EAC9BC,EAAQ,KAAU1V,EAAI,EAAGE,EAAI,GAC7ByV,EAAO,KAAiBN,EAAI,EAAGK,GAC/BE,EAAO,KAAiBP,EAAI,EAAGK,GAC/BG,EAAO,KAAiBR,EAAI,EAAGK,GAC/BI,EAAO,KAAiBT,EAAI,EAAGK,GAG/BK,EAAM,EACNC,EAAM,EAENC,EAAMjW,EACNkW,EAAM,EAENC,EAAMnW,EACNoW,EAAMlW,EAENmW,EAAM,EACNC,EAAMpW,EACNqW,OAAQ,EACRC,OAAQ,EACRC,OAAQ,EACRC,OAAQ,EAGRC,GAAMxf,EAAI4e,IAAQK,EAAMJ,IAAQ3V,EAAI2V,IAAQG,EAAMJ,GAClDa,GAAMzf,EAAIkf,IAAQH,EAAMI,IAAQjW,EAAIiW,IAAQL,EAAMI,GAEtD,GAAIM,EAAK,GAAKC,EAAK,EAAG,CAClB,IAAIC,EAAQ,KAAiB1f,EAAGwe,EAAOH,EAAKxV,EAAIwV,EAAMI,GACtDvV,EAAI,KAAiBA,GAAIyW,IAAU,GACnCP,EAAQ,IAAMZ,EAAO,QAAUkB,EAAQrB,GAAO,OAASre,EAAI,IAAMkJ,EAAI,MAAQwW,EAAQrB,GAAO,QAAUxV,EAAI4V,GAAQ,IACtH,MAEIW,EAAQ,IAAMZ,EAAO,QAAU3V,EAAI4V,GAAQ,KAG/C,GAAIe,EAAK,GAAKC,EAAK,EAAG,CACdC,EAAQ,KAAiB1f,EAAG2e,EAAON,EAAKxV,EAAIwV,EAAMK,GACtDxV,EAAI,KAAiBA,EAAGH,EAAG4W,KAC3BL,EAAQ,MAAQzW,EAAI6V,GAAQ,IAAM3V,EAAI,MAAQ2W,EAAQrB,GAAO,IAAMtV,EAAI,KAAO/I,EAAI,IAAMkJ,EAAI,MAAQwW,EAAQrB,GAAO,IAAMtV,EAAI,KAAO4V,EAAO,IAAM5V,CACrJ,MAEIuW,EAAQ,KAAOX,EAAO,IAAM5V,EAGhC,GAAIyW,EAAK,GAAKC,EAAK,EAAG,CAClB,IAAIG,EAAQ,KAAiB1W,EAAGsV,EAAOH,EAAKtV,EAAI4V,EAAON,GACvDre,EAAI,KAAiBA,GAAI2f,IAAU,GACnCJ,EAAQ,QAAUxW,EAAI4V,GAAQ,QAAUiB,EAAQvB,GAAO,KAAOre,EAAI,IAAMkJ,EAAI,QAAU0W,EAAQvB,GAAO,OAASG,CAClH,MAEIe,EAAQ,OAASf,EAGrB,GAAIgB,EAAK,GAAKC,EAAK,EAAG,CACdG,EAAQ,KAAiB1W,EAAGuV,EAAOJ,EAAKtV,EAAIsV,EAAMK,GACtD1e,EAAI,KAAiBA,EAAG6I,EAAG8W,KAC3BN,EAAQ,KAAOxW,EAAI,IAAM4V,EAAO,KAAO5V,EAAI,KAAO+W,EAAQvB,GAAO,KAAOre,EAAI,IAAMkJ,EAAI,KAAOL,EAAI,KAAO+W,EAAQvB,GAAO,KAAOxV,EAAI,KAAOE,EAAI2V,EACjJ,MAEIW,EAAQ,KAAOxW,EAAI,KAAOE,EAAI2V,GAElC,IAAImB,EAAQ,KAAOpB,EAAO,IAAMA,EAAO,UAAYA,EAAO,IAAMA,EAC5DqB,EAAQ,KAAOpB,EAAO,IAAMA,EAAO,WAAaA,EAAO,IAAMA,EAC7DqB,EAAQ,KAAOpB,EAAO,IAAMA,EAAO,WAAaA,EAAO,KAAOA,EAC9DqB,EAAQ,KAAOxB,EAAO,IAAMA,EAAO,UAAYA,EAAO,KAAOA,EACjE5gB,KAAKyL,KAAO+V,EAAQS,EAAQR,EAAQS,EAAQR,EAAQS,EAAQR,EAAQS,CACxE,CACJ,EACA9c,OAAOC,eAAe8a,EAAiBhf,UAAW,eAAgB,CAI9DmE,IAAK,WACD,OAAOxF,KAAK2L,iBAAiB,eACjC,EAOApE,IAAK,SAAU1B,GACX7F,KAAK4L,iBAAiB,eAAgB/F,GAAO,EACjD,EACAH,YAAY,EACZC,cAAc,IAEX0a,CACX,CApHqC,CAoHnC,I,6FCpHEgC,EAA8B,SAAUxiB,GAKxC,SAASwiB,IACL,IAAIviB,EAAQD,EAAOuG,KAAKpG,OAASA,KAOjC,OANAF,EAAM6G,UAAY,eAClB7G,EAAM4gB,iBAAmB,GACzB5gB,EAAMwiB,cAAgB,GACtBxiB,EAAM0gB,SAAW,EACjB1gB,EAAMygB,SAAW,EACjBzgB,EAAM8K,aACC9K,CACX,CAyFA,OAtGA,QAAUuiB,EAAcxiB,GAmBxBwiB,EAAahhB,UAAUwJ,KAAO,WAC1BhL,EAAOwB,UAAUwJ,KAAKzE,KAAKpG,MACtB,KAAeA,KAAKugB,YACrBvgB,KAAKugB,SAAWvgB,KAAK6T,WAAa,GAEjC,KAAe7T,KAAKwgB,YACrBxgB,KAAKwgB,SAAWxgB,KAAK8T,YAAc,GAE3C,EACAxO,OAAOC,eAAe8c,EAAahhB,UAAW,mBAAoB,CAI9DmE,IAAK,WACD,OAAOxF,KAAK2L,iBAAiB,mBACjC,EAOApE,IAAK,SAAU1B,GACX7F,KAAK4L,iBAAiB,mBAAoB/F,GAAO,EACrD,EACAH,YAAY,EACZC,cAAc,IAElBL,OAAOC,eAAe8c,EAAahhB,UAAW,gBAAiB,CAI3DmE,IAAK,WACD,OAAOxF,KAAK2L,iBAAiB,gBACjC,EAOApE,IAAK,SAAU1B,GACX7F,KAAK4L,iBAAiB,gBAAiB/F,GAAO,EAClD,EACAH,YAAY,EACZC,cAAc,IAElBL,OAAOC,eAAe8c,EAAahhB,UAAW,WAAY,CAItDmE,IAAK,WACD,OAAOxF,KAAK2L,iBAAiB,WACjC,EAMApE,IAAK,SAAU1B,GACX7F,KAAK4L,iBAAiB,WAAY/F,GAAO,EAC7C,EACAH,YAAY,EACZC,cAAc,IAElBL,OAAOC,eAAe8c,EAAahhB,UAAW,WAAY,CAItDmE,IAAK,WACD,OAAOxF,KAAK2L,iBAAiB,WACjC,EAMApE,IAAK,SAAU1B,GACX7F,KAAK4L,iBAAiB,WAAY/F,GAAO,EAC7C,EACAH,YAAY,EACZC,cAAc,IAEX0c,CACX,CAxGiC,CAwG/B,K,mHCtGEE,EAAyB,SAAU1iB,GAKnC,SAAS0iB,IACL,IAAIziB,EAAQD,EAAOuG,KAAKpG,OAASA,KAKjC,OAJAF,EAAM6G,UAAY,UAClB7G,EAAM0iB,qBAAuB,GAC7B1iB,EAAM2iB,qBAAuB,GAC7B3iB,EAAM8K,aACC9K,CACX,CA8FA,OAzGA,QAAUyiB,EAAS1iB,GAiBnB0iB,EAAQlhB,UAAUqhB,SAAW,WACzB1iB,KAAK2iB,UAAY,EACjB,IAAI3R,EAAWhR,KAAKgR,SACpB,GAAIA,GAAYA,EAAShQ,OAAS,EAAG,CACjC,IAAIyK,EAAO,GACXzL,KAAK4iB,cAAgB,GACrB,IAAK,IAAIxhB,EAAI,EAAGL,EAAMiQ,EAAShQ,OAAQI,EAAIL,EAAKK,IAAK,CACjD,IAAIyhB,EAAS7R,EAAS5P,GAClB0hB,EAAa,GAEjB,GADA9iB,KAAK4iB,cAAchgB,KAAKkgB,GACpBD,EAAO7hB,OAAS,EAAG,CACnByK,GAAQ,KAAaoX,EAAO,IAC5B,IAAK,IAAIE,EAAI,EAAGA,EAAIF,EAAO7hB,OAAQ+hB,IAAK,CACpC,IAAIC,EAASH,EAAOE,EAAI,GACpBE,EAASJ,EAAOE,GAChBG,EAAa,KAAkBD,EAAQD,GACvCG,EAAaD,EAAaljB,KAAKwiB,qBAC/BC,EAAuBziB,KAAKyiB,qBAC5B3Y,GAAS,KAAekZ,EAAQC,GAChCG,EAAMJ,EAAO5gB,GAAK6gB,EAAO7gB,EAAI4gB,EAAO5gB,GAAKqgB,EAAuB,GAAMU,EAAa,KAAUrZ,GAC7FuZ,EAAML,EAAO1X,GAAK2X,EAAO3X,EAAI0X,EAAO1X,GAAKmX,EAAuB,GAAMU,EAAa,KAAUrZ,GAC7FwZ,EAAgB,CAAElhB,EAAGghB,EAAK9X,EAAG+X,GAC7BE,EAAOP,EAAO5gB,GAAK6gB,EAAO7gB,EAAI4gB,EAAO5gB,GAAKqgB,EAAuB,IAAMU,EAAa,KAAUrZ,GAC9F0Z,EAAOR,EAAO1X,GAAK2X,EAAO3X,EAAI0X,EAAO1X,GAAKmX,EAAuB,IAAMU,EAAa,KAAUrZ,GAC9F2Z,EAAgB,CAAErhB,EAAGmhB,EAAMjY,EAAGkY,GAClC/X,GAAQ,KAAmBwX,EAAQK,EAAeG,GAElD,IAAIC,EAAYpU,KAAKC,KAAK2T,GACtBxT,EAAYsT,EAChB,GAAIU,EAAY,EACZ,IAAK,IAAIC,EAAM,EAAGA,GAAOD,EAAWC,IAAO,CACvC,IAAIhE,EAAQ,KAA2BqD,EAAQC,EAAQK,EAAeG,EAAeE,EAAMD,GAC3FZ,EAAWlgB,KAAK+c,GAChB3f,KAAK2iB,WAAa,KAAkBjT,EAAWiQ,GAC/CjQ,EAAYiQ,CAChB,MAGAmD,EAAWlgB,KAAKogB,EAExB,CACJ,CACJ,CACAhjB,KAAKyL,KAAOA,CAChB,CACJ,EACAnG,OAAOC,eAAegd,EAAQlhB,UAAW,uBAAwB,CAI7DmE,IAAK,WACD,OAAOxF,KAAK2L,iBAAiB,uBACjC,EAOApE,IAAK,SAAU1B,GACX7F,KAAK4L,iBAAiB,uBAAwB/F,GAC9C7F,KAAK0iB,UACT,EACAhd,YAAY,EACZC,cAAc,IAElBL,OAAOC,eAAegd,EAAQlhB,UAAW,uBAAwB,CAI7DmE,IAAK,WACD,OAAOxF,KAAK2L,iBAAiB,uBACjC,EASApE,IAAK,SAAU1B,GACX7F,KAAK4L,iBAAiB,uBAAwB/F,GAC9C7F,KAAK0iB,UACT,EACAhd,YAAY,EACZC,cAAc,IAEX4c,CACX,CA3G4B,CA2G1B,KAQF,8BAAwCA,C,8HClHpCqB,EAAyB,SAAU/jB,GAKnC,SAAS+jB,IACL,IAAI9jB,EAAQD,EAAOuG,KAAKpG,OAASA,KAMjC,OALAF,EAAM6G,UAAY,UAClB7G,EAAMiT,QAAUjT,EAAMyK,MAAM7B,IAAI,QAChC5I,EAAM+jB,eAAiB,OACvB/jB,EAAMgkB,eAAiB,GACvBhkB,EAAM8K,aACC9K,CACX,CA+LA,OA3MA,QAAU8jB,EAAS/jB,GAanByF,OAAOC,eAAeqe,EAAQviB,UAAW,SAAU,CAI/CmE,IAAK,WACD,IAAIqd,EAAS7iB,KAAK2L,iBAAiB,UAC/BF,EAAOzL,KAAKyL,KAChB,GAAIA,KAAUoX,GAA2B,GAAjBA,EAAO7hB,QAAc,CAGzC,IAFA,IAAI+iB,EAAWtY,EAAKoE,MAAM,EAAGpE,EAAKzK,OAAS,GACvCgQ,EAAW+S,EAASjjB,MAAM,MACrBkjB,EAAI,EAAGA,EAAIhT,EAAShQ,OAAQgjB,IAAK,CACtC,IAAIC,EAAUjT,EAASgT,GACvB,GAAIC,EAAQjjB,OAAS,EAAG,CACpB,IAAIkjB,EAAWD,EAAQnjB,MAAM,KACzBqjB,EAAUD,EAAS,GACnBE,EAAUF,EAAS,GACvB,GAAIC,GAAWA,EAAQnjB,OAAS,EAAG,CAC/B,IAAIqjB,EAAYF,EAAQrjB,MAAM,KAC9B,GAAIujB,EAAUrjB,OAAS,EAAG,CACtB,IAAIsjB,EAAO,GACPC,EAAc,CAACD,GACnBzB,EAAOjgB,KAAK2hB,GACZ,IAAK,IAAIxB,EAAI,EAAGA,EAAIsB,EAAUrjB,OAAQ+hB,IAAK,CACvC,IAAIyB,EAASH,EAAUtB,GAAGjiB,MAAM,KAChCwjB,EAAK1hB,KAAK,CAAER,GAAIoiB,EAAO,GAAIlZ,GAAIkZ,EAAO,IAC1C,CACA,GAAIJ,GAAWA,EAAQpjB,OAAS,EAAG,CAC/B,IAAIyjB,EAAcL,EAAQtjB,MAAM,KAChC,GAAI2jB,EAAYzjB,OAAS,EAAG,CACxB,IAAI0jB,EAAO,GACXH,EAAY3hB,KAAK8hB,GACjB,IAAS3B,EAAI0B,EAAYzjB,OAAS,EAAG+hB,GAAK,EAAGA,IAAK,CAC1CyB,EAASC,EAAY1B,GAAGjiB,MAAM,KAClC4jB,EAAK9hB,KAAK,CAAER,GAAIoiB,EAAO,GAAIlZ,GAAIkZ,EAAO,IAC1C,CACJ,CACJ,CACJ,CACJ,CACJ,CACJ,CACAxkB,KAAK4L,iBAAiB,SAAUiX,GAChC7iB,KAAK8jB,eAAiBjB,CAC1B,CACA,OAAOA,CACX,EAOAtb,IAAK,SAAUsb,GACX7iB,KAAK4L,iBAAiB,SAAUiX,GAAQ,GACxC7iB,KAAK8jB,eAAiBjB,CAC1B,EACAnd,YAAY,EACZC,cAAc,IAElBL,OAAOC,eAAeqe,EAAQviB,UAAW,gBAAiB,CAItDmE,IAAK,WAID,OAHMxF,KAAK8jB,gBAAgD,GAA9B9jB,KAAK8jB,eAAe9iB,SAAgBhB,KAAKyL,OAClEzL,KAAK8jB,eAAiB9jB,KAAK6iB,QAExB7iB,KAAK8jB,cAChB,EAOAvc,IAAK,SAAUsb,GACP7iB,KAAK8jB,gBAAkBjB,IACvB7iB,KAAK8jB,eAAiBjB,EACtB7iB,KAAK6K,OAEb,EACAnF,YAAY,EACZC,cAAc,IAOlBie,EAAQviB,UAAUwJ,KAAO,WACrB,IAEI8Z,EACAC,EACA3a,EACAG,EALAqB,EAAO,GACPoX,EAAS7iB,KAAK8jB,eAKlB,GAAIjB,EAAO7hB,OAAS,EAAG,CAEnB,IAAK,IAAII,EAAI,EAAGL,EAAM8hB,EAAO7hB,OAAQI,EAAIL,EAAKK,IAAK,CAE/C,IAAIyjB,EAAUhC,EAAOzhB,GAAG,GACpBsjB,EAAO7B,EAAOzhB,GAAG,GACrB,GAAIyjB,GAAWA,EAAQ7jB,OAAS,EAAG,CAC/B,IAAI2e,EAAQkF,EAAQ,GACpBpZ,GAAQ,KAAakU,GACrB,IAAK,IAAIqE,EAAI,EAAGA,EAAIa,EAAQ7jB,OAAQgjB,IAChCrE,EAAQkF,EAAQb,GAChBvY,GAAQ,KAAakU,KAChB,KAAeiF,IAAWA,EAAQjF,EAAMvd,KACzCwiB,EAAQjF,EAAMvd,KAEb,KAAeuiB,IAAUA,EAAOhF,EAAMvd,KACvCuiB,EAAOhF,EAAMvd,KAEZ,KAAe6H,IAASA,EAAM0V,EAAMrU,KACrCrB,EAAM0V,EAAMrU,KAEX,KAAelB,IAAYA,EAASuV,EAAMrU,KAC3ClB,EAASuV,EAAMrU,EAG3B,CAEA,GAAIoZ,GAAQA,EAAK1jB,OAAS,EAAG,CACrB2e,EAAQ+E,EAAK,GACjBjZ,GAAQ,KAAakU,GACrB,IAAK,IAAIxU,EAAI,EAAG2Z,EAAOJ,EAAK1jB,OAAQmK,EAAI2Z,EAAM3Z,IAC1CwU,EAAQ+E,EAAKvZ,GACbM,GAAQ,KAAakU,EAE7B,CACJ,CACIlU,IACAA,GAAQ,QAEZzL,KAAKuW,KAAKnU,EAAIuiB,EACd3kB,KAAKuW,KAAKjL,EAAIrB,EACdjK,KAAKuW,KAAKjG,MAAQsU,EAAQD,EAC1B3kB,KAAKuW,KAAKhG,OAASnG,EAASH,EAC5BpK,EAAOwB,UAAU0jB,QAAQ3e,KAAKpG,KAAMyL,EACxC,CACJ,EAIAmY,EAAQviB,UAAU0jB,QAAU,SAAUlf,GAClC,QAAIhG,EAAOwB,UAAU0jB,QAAQ3e,KAAKpG,KAAM6F,KACpC7F,KAAK6iB,OAAS,GACd7iB,KAAKoT,MAAQpT,KAAKsY,MAAMd,WACjB,EAGf,EAIAoM,EAAQviB,UAAU8R,eAAiB,WAEnC,EACA7N,OAAOC,eAAeqe,EAAQviB,UAAW,cAAe,CAOpDmE,IAAK,WACD,MAAO,CAAEpD,EAAGpC,KAAKuW,KAAKnU,EAAIpC,KAAKuW,KAAKjG,MAAQ,EAAGhF,EAAGtL,KAAKuW,KAAKjL,EAAItL,KAAKuW,KAAKhG,OAAS,EACvF,EACA7K,YAAY,EACZC,cAAc,IAElBL,OAAOC,eAAeqe,EAAQviB,UAAW,UAAW,CAQhDmE,IAAK,WAKD,OAJKxF,KAAKglB,WACNhlB,KAAKglB,SAAW,IAAI,IAAQhlB,MAC5BA,KAAKiM,WAAWrJ,KAAK5C,KAAKglB,WAEvBhlB,KAAKglB,QAChB,EACAtf,YAAY,EACZC,cAAc,IAEXie,CACX,CA7M4B,CA6M1B,MAQF,8BAAwCA,C,8HCrNpCqB,EAA0B,SAAUplB,GAKpC,SAASolB,IACL,IAAInlB,EAAQD,EAAOuG,KAAKpG,OAASA,KAajC,OAPAF,EAAM6iB,UAAY,EAClB7iB,EAAM6G,UAAY,WAClB7G,EAAMiT,QAAUjT,EAAMyK,MAAM7B,IAAI,QAChC5I,EAAM+jB,eAAiB,OACvB/jB,EAAM2J,MAAO,UACb3J,EAAMwJ,cAAgB,EACtBxJ,EAAM8K,aACC9K,CACX,CAyHA,OA5IA,QAAUmlB,EAAUplB,GAyBpBolB,EAAS5jB,UAAUqhB,SAAW,WAC1B1iB,KAAK2iB,UAAY,EACjB,IAAI3R,EAAWhR,KAAKgR,SACpB,GAAIA,GAAYA,EAAShQ,OAAS,EAAG,CAEjC,IADA,IAAIyK,EAAO,GACFrK,EAAI,EAAGL,EAAMiQ,EAAShQ,OAAQI,EAAIL,EAAKK,IAAK,CACjD,IAAIyhB,EAAS7R,EAAS5P,GACtB,GAAIyhB,EAAO7hB,OAAS,EAAG,CACnByK,GAAQ,KAAaoX,EAAO,IAC5B,IAAK,IAAIE,EAAI,EAAGA,EAAIF,EAAO7hB,OAAQ+hB,IAAK,CACpC,IAAIpD,EAAQkD,EAAOE,GACnBtX,GAAQ,KAAakU,GACrB3f,KAAK2iB,WAAa,KAAkBE,EAAOE,EAAI,GAAIpD,EACvD,CACJ,CACJ,CACA3f,KAAKyL,KAAOA,CAChB,CACAzL,KAAK4iB,cAAgB5R,CACzB,EACA1L,OAAOC,eAAe0f,EAAS5jB,UAAW,WAAY,CAIlDmE,IAAK,WACD,OAAOxF,KAAK2L,iBAAiB,WACjC,EAOApE,IAAK,SAAUyJ,GACXhR,KAAK4L,iBAAiB,WAAYoF,GAClChR,KAAK0iB,UACT,EACAhd,YAAY,EACZC,cAAc,IAElBL,OAAOC,eAAe0f,EAAS5jB,UAAW,WAAY,CAOlDmE,IAAK,WACD,OAAOxF,KAAK2iB,SAChB,EACAjd,YAAY,EACZC,cAAc,IAQlBsf,EAAS5jB,UAAUme,gBAAkB,SAAU9M,GAC3C,IAAIwS,EAAa,EACbxS,EAAW,IACXA,EAAWpD,KAAK6V,IAAIzS,GACpBwS,EAAa,KAEjB,IAAIlU,EAAWhR,KAAK4iB,cACpB,GAAI5R,EAAU,CAQV,IAPA,IAAIoU,EAAgBplB,KAAKqlB,SACrBC,EAAkB,EAClBpC,OAAa,EACbqC,EAAY,EACZC,EAAY,EACZxC,OAAS,EACTC,OAAS,EACJe,EAAI,EAAGA,EAAIhT,EAAShQ,OAAQgjB,IAAK,CACtC,IAAInB,EAAS7R,EAASgT,GACtB,GAAInB,EAAO7hB,OAAS,GAChB,IAAK,IAAI+hB,EAAI,EAAGA,EAAIF,EAAO7hB,OAAQ+hB,IAO/B,GANAC,EAASH,EAAOE,EAAI,GACpBE,EAASJ,EAAOE,GAChBwC,EAAYD,EAAkBF,EAC9BlC,EAAa,KAAkBF,EAAQC,GACvCqC,GAAmBpC,EACnBsC,EAAYF,EAAkBF,EAC1BG,GAAa7S,GAAY8S,EAAY9S,EAAU,CAC/CsR,EAAIhT,EAAShQ,OACb,KACJ,OAGkB,GAAjB6hB,EAAO7hB,SACZgiB,EAASH,EAAO,GAChBI,EAASJ,EAAO,GAChB0C,EAAY,EACZC,EAAY,EAEpB,CACA,GAAIxC,GAAUC,EAAQ,CAClB,IAAIwC,GAAc/S,EAAW6S,IAAcC,EAAYD,GACnDG,EAAW,KAAkB1C,EAAQC,EAAQwC,GACjD,MAAO,CAAErjB,EAAGsjB,EAAStjB,EAAGkJ,EAAGoa,EAASpa,EAAGxB,MAAOob,EAAa,KAAelC,EAAQC,GACtF,CACJ,CACA,MAAO,CAAE7gB,EAAG,EAAGkJ,EAAG,EAAGxB,MAAO,EAChC,EACAxE,OAAOC,eAAe0f,EAAS5jB,UAAW,eAAgB,CAItDmE,IAAK,WACD,OAAOxF,KAAK4iB,aAChB,EACAld,YAAY,EACZC,cAAc,IAEXsf,CACX,CA9I6B,CA8I3B,MAQF,+BAAyCA,C,6HCtJrCU,EAA4B,SAAU9lB,GAKtC,SAAS8lB,IACL,IAAI7lB,EAAQD,EAAOuG,KAAKpG,OAASA,KAKjC,OAJAF,EAAM6G,UAAY,aAClB7G,EAAMmR,SAAW,GACjBnR,EAAMoR,SAAW,GACjBpR,EAAM8K,aACC9K,CACX,CAwOA,OAnPA,QAAU6lB,EAAY9lB,GAiBtB8lB,EAAWtkB,UAAUqhB,SAAW,WAC5B1iB,KAAK2iB,UAAY,EACjB,IAAI3R,EAAWhR,KAAKgR,SAChBC,EAAWjR,KAAKiR,SAChBC,EAAWlR,KAAKkR,SAEpB,GADAlR,KAAK4lB,UAAY,GACb5U,GAAYA,EAAShQ,OAAS,EAAG,CACjC,IAAIyK,EAAO,GACXzL,KAAK4iB,cAAgB,GACrB,IAAK,IAAIxhB,EAAI,EAAGL,EAAMiQ,EAAShQ,OAAQI,EAAIL,EAAKK,IAAK,CACjD,IAAIyhB,EAAS7R,EAAS5P,GAClB0hB,EAAa,GAEjB,GADA9iB,KAAK4iB,cAAchgB,KAAKkgB,GACpBD,EAAO7hB,OAAS,EAAG,CACnB,IAAI6kB,EAAQhD,EAAO,GACfiD,EAAOjD,EAAOA,EAAO7hB,OAAS,GAC9B+kB,GAAW,EACX,KAAYF,EAAMzjB,EAAG,IAAM,KAAY0jB,EAAK1jB,IAAM,KAAYyjB,EAAMva,IAAM,KAAYwa,EAAKxa,KAC3Fya,GAAW,GAEfta,GAAQ,KAAaoX,EAAO,IAC5B,IAAK,IAAIE,EAAI,EAAGA,EAAIF,EAAO7hB,OAAS,EAAG+hB,IAAK,CACxC,IAAIiD,EAAKnD,EAAOE,EAAI,GAChBkD,EAAKpD,EAAOE,GACZmD,EAAKrD,EAAOE,EAAI,GAChBoD,EAAKtD,EAAOE,EAAI,GACV,IAANA,EACAiD,EAAKnD,EAAOE,GAEPA,GAAKF,EAAO7hB,OAAS,IAC1BmlB,EAAKtD,EAAOE,EAAI,IAEfoD,IACDA,EAAKD,GAEC,IAANnD,EAEIiD,EADAD,EACKlD,EAAOA,EAAO7hB,OAAS,GAGvB6hB,EAAOzhB,GAGX2hB,GAAKF,EAAO7hB,OAAS,IAEtBmlB,EADAJ,EACKlD,EAAO,GAGPA,EAAOE,EAAI,IAGxB,IAAIqD,EAAgB,KAA4BJ,EAAIC,EAAIC,EAAIC,EAAIlV,EAAUC,GACtEmV,EAAgB,KAA4BL,EAAIC,EAAIC,EAAIC,EAAIlV,EAAUC,GAC1EzF,GAAQ,KAAmBya,EAAIE,EAAeC,GAE9C,IAAI3C,EAA+F,IAAnFpU,KAAKC,KAAK,KAA4B0W,EAAIC,EAAIE,EAAeC,EAAe,KACxF3W,EAAYuW,EAChB,GAAIvC,EAAY,EAIZ,IAAK,IAAIM,EAAI,EAAGA,GAAKN,EAAWM,IAAK,CACjC,IAAIrE,EAAQ,KAA2BsG,EAAIC,EAAIE,EAAeC,EAAerC,EAAIN,GACjF,GAAI/D,EAAMvd,GAAKsN,EAAUtN,GAAKud,EAAMrU,GAAKoE,EAAUpE,EAAnD,CAGAwX,EAAWlgB,KAAK+c,GAChB,IAAI7V,EAAQ,KAAY,KAAe4F,EAAWiQ,GAAQ,GAE1D3f,KAAK2iB,WAAa,KAAkBjT,EAAWiQ,GAC/C3f,KAAK4lB,UAAUtW,KAAK6K,MAAMna,KAAK2iB,YAAc,CAAEvgB,EAAGud,EAAMvd,EAAGkJ,EAAGqU,EAAMrU,EAAGxB,MAAOA,GAC9E4F,EAAYiQ,CANZ,CAOJ,MAGAmD,EAAWlgB,KAAKojB,EAExB,CACJ,CACA,IAAIJ,EAAY5lB,KAAK4lB,UACrB,GAAIA,EAAU5kB,OAAS,EACnB,IAAK,IAAI2iB,EAAM,EAAGA,EAAMiC,EAAU5kB,OAAQ2iB,IACtC,IAAKiC,EAAUjC,GACX,GAAIA,EAAM,EACNiC,EAAUjC,GAAOiC,EAAUjC,EAAM,QAGjC,IAAK,IAAI2C,EAAI,EAAGA,EAAIV,EAAU5kB,OAAQslB,IAClC,GAAIV,EAAUU,GAAI,CACdV,EAAUjC,GAAOiC,EAAUU,GAC3B,KACJ,CAMxB,CACAtmB,KAAKyL,KAAOA,CAChB,CACJ,EAOAka,EAAWtkB,UAAUklB,qBAAuB,SAAU5G,GAClD,IACI9B,EADAgF,EAAS7iB,KAAK4lB,UAEdY,EAAUzE,IACd,GAAIc,EAAO7hB,OAAS,EAChB,IAAK,IAAI+hB,EAAI,EAAGA,EAAIF,EAAO7hB,OAAQ+hB,IAAK,CACpC,IAAIsC,EAAW,KAAkB1F,EAAOkD,EAAOE,IAC3CsC,EAAWmB,IACX3I,EAAQkF,EACRyD,EAAUnB,EAElB,CAEJ,OAAOxH,CACX,EACAvY,OAAOC,eAAeogB,EAAWtkB,UAAW,WAAY,CAIpDmE,IAAK,WACD,OAAOxF,KAAK2L,iBAAiB,WACjC,EASApE,IAAK,SAAU1B,GACX7F,KAAK4L,iBAAiB,WAAY/F,GAClC7F,KAAK0iB,UACT,EACAhd,YAAY,EACZC,cAAc,IAElBL,OAAOC,eAAeogB,EAAWtkB,UAAW,WAAY,CAIpDmE,IAAK,WACD,OAAOxF,KAAK2L,iBAAiB,WACjC,EASApE,IAAK,SAAU1B,GACX7F,KAAK4L,iBAAiB,WAAY/F,GAAO,GACzC7F,KAAK0iB,UACT,EACAhd,YAAY,EACZC,cAAc,IAQlBggB,EAAWtkB,UAAUme,gBAAkB,SAAU9M,EAAU+T,GACvD,IAAIvB,EAAa,EACbU,EAAY5lB,KAAK4lB,UACjB7kB,EAAM6kB,EAAU5kB,OAIpB,GAHK,KAAe0R,KAChBA,EAAW,GAEX3R,EAAM,EAAG,CACT,GAAI0lB,GAAU1lB,EAAM,EAAG,CACnB,GAAI2R,EAAW,EAAG,CACVA,GAAY,MACZA,GAAY,KAEhB,IAAIgU,EAAKd,EAAU,GACfe,EAAKf,EAAU,GACfxjB,EAAIskB,EAAGtkB,GAAKskB,EAAGtkB,EAAIukB,EAAGvkB,GAAKrB,EAAM2R,EACjCpH,EAAIob,EAAGpb,GAAKob,EAAGpb,EAAIqb,EAAGrb,GAAKvK,EAAM2R,EACrC,MAAO,CAAEtQ,EAAGA,EAAGkJ,EAAGA,EAAGxB,MAAO,KAAe4c,EAAIC,GACnD,CACK,GAAIjU,EAAW,EAAG,CACfA,EAAW,OACXA,EAAW,MAEXgU,EAAKd,EAAUA,EAAU5kB,OAAS,GAClC2lB,EAAKf,EAAUA,EAAU5kB,OAAS,GAClCoB,EAAIskB,EAAGtkB,GAAKskB,EAAGtkB,EAAIukB,EAAGvkB,GAAKrB,GAAO2R,EAAW,GAC7CpH,EAAIob,EAAGpb,GAAKob,EAAGpb,EAAIqb,EAAGrb,GAAKvK,GAAO2R,EAAW,GACjD,MAAO,CAAEtQ,EAAGA,EAAGkJ,EAAGA,EAAGxB,MAAO,KAAe4c,EAAI,CAAEtkB,EAAGA,EAAGkJ,EAAGA,IAC9D,CACK,GAAgB,GAAZoH,EAAe,CACpB,IAAIkU,EAAUhB,EAAUA,EAAU5kB,OAAS,GAC3C,MAAO,CAAEoB,EAAGwkB,EAAQxkB,EAAGkJ,EAAGsb,EAAQtb,EAAGxB,MAAO8c,EAAQ9c,MACxD,CACJ,MAEQ4I,EAAW,IACXA,EAAWpD,KAAK6V,IAAIzS,GACpBwS,EAAa,KAEbxS,GAAY,IACZA,EAAW,gBAGnB,IAAIiN,EAAQiG,EAAUtW,KAAK6K,MAAMzH,EAAW3R,IAC5C,MAAO,CAAEqB,EAAGud,EAAMvd,EAAGkJ,EAAGqU,EAAMrU,EAAGxB,MAAO6V,EAAM7V,MAAQob,EAC1D,CACK,GAAW,GAAPnkB,EAAU,CACX4e,EAAQiG,EAAU,GACtB,MAAO,CAAExjB,EAAGud,EAAMvd,EAAGkJ,EAAGqU,EAAMrU,EAAGxB,MAAO6V,EAAM7V,MAClD,CAEI,MAAO,CAAE1H,EAAG,EAAGkJ,EAAG,EAAGxB,MAAO,EAEpC,EACO6b,CACX,CArP+B,CAqP7B,KAQF,iCAA2CA,C,iHCpRvCkB,EAAQ,IAAIC,EAAA,GAQD,SAAS,EAAC/T,EAASgU,GACzBA,IACDA,EAAS,WAEb,IAAI1S,EAAK,IAAI2S,EAAA,EACTC,EAAK5S,EAAG3D,OAAO,QACfwW,EAAK7S,EAAG3D,OAAO,cACnBwW,EAAGC,MAAQ,GACX,IAAIC,EAAM/S,EAAG3D,OAAO,yBACpB0W,EAAID,MAAQ,IACZ,IAAIE,EAAUR,EAAMS,iBAAiBP,GAAQ,WACzC,IAAIQ,EAAW,IAAI,KAAc,CAC7B,IAAI,KAAUxU,EAAS,IAAMgU,EAAQ,CAGjC,SAAY,UACZ,SAAY,WACZ,IAAO,IACP,KAAQ,IACR,UAAW,SAEf,IAAI,KAAUhU,EAAS,IAAMgU,EAAS,WAAY,CAC9C,MAAS,OACT,OAAU,OACV,SAAY,WACZ,IAAO,IACP,KAAQ,IACR,UAAW,OACX,mBAAoBG,EAAG/Z,IACvB,QAAW,QAEf,IAAI,KAAU4F,EAAS,IAAMgU,EAAS,UAAW,CAC7C,QAAW,QACX,MAAS,OACT,aAAc,QACd,WAAcK,EAAII,OAEtB,IAAI,KAAUzU,EAAS,IAAMgU,EAAS,SAAU,CAC5C,cAAe,OACf,YAAa,OACb,QAAW,0BAEf,IAAI,KAAUhU,EAAS,IAAMgU,EAAS,WAAY,CAI9C,WAAcG,EAAG/Z,IACjB,mBAAoB+Z,EAAGM,KACvB,MAASP,EAAG9Z,IACZ,QAAW,eACX,SAAY,WACZ,IAAO,IACP,KAAQ,IACR,YAAa,MACb,aAAc,MACd,SAAY,OACZ,UAAW,SAEf,IAAI,KAAU4F,EAAS,IAAMgU,EAAS,UAAW,CAC7C,QAAW,QAEf,IAAI,KAAUhU,EAAS,IAAMgU,EAAS,SAAU,CAC5C,QAAW,QACX,SAAY,WACZ,IAAO,QACP,MAAS,QACT,mBAAoB,qBACpB,WAAc,kaACd,kBAAmB,MACnB,MAAS,QACT,OAAU,QACV,OAAU,cAGlB,OAAO,IAAI,MAAgB,WACvBF,EAAMY,UAAUV,GAChBQ,EAASvf,SACb,GACJ,IACA,OAAOqf,EAAQK,WACnB,C,oECnEIC,EAAuB,SAAU9nB,GAKjC,SAAS8nB,IACL,IAAI7nB,EAAQD,EAAOuG,KAAKpG,OAASA,KAmGjC,OA/FAF,EAAMuD,QAAU,IAAIukB,EAAA,GAAQ9nB,GAI5BA,EAAM+nB,UAAY,CAAC,EAInB/nB,EAAMgoB,KAAO,CAAC,EAIdhoB,EAAMioB,SAAW,GAIjBjoB,EAAMkoB,OAAS,GAIfloB,EAAMmoB,aAAe,UAIrBnoB,EAAMooB,gBAAiB,EAKvBpoB,EAAMqoB,cAAe,EAIrBroB,EAAMsoB,YAAa,EAInBtoB,EAAMuoB,OAAS,SAIfvoB,EAAMwoB,gBAAiB,EAIvBxoB,EAAMyoB,eAAiB,SAIvBzoB,EAAM0oB,OAAS,CACXpmB,EAAG,EACHkJ,EAAG,GAKPxL,EAAM2oB,WAAa,CACfrmB,EAAG,EACHkJ,EAAG,GAOPxL,EAAM4oB,aAAe,GAIrB5oB,EAAM6oB,WAAY,EAIlB7oB,EAAM8oB,YAAa,EAQnB9oB,EAAM+oB,OAAS,SAOf/oB,EAAMgpB,YAAa,EAKnBhpB,EAAMipB,QAAS,EACfjpB,EAAM6G,UAAY,QACX7G,CACX,CA8yBA,OAv5BA,QAAU6nB,EAAO9nB,GA6GjB8nB,EAAMtmB,UAAU2nB,KAAO,WACfhpB,KAAKipB,YACDjpB,KAAK6nB,UAAUqB,SACflpB,KAAKipB,UAAUlN,YAAY/b,KAAK6nB,UAAUqB,SAE1ClpB,KAAK6nB,UAAUsB,UACfnpB,KAAKipB,UAAUlN,YAAY/b,KAAK6nB,UAAUsB,SAC1CnpB,KAAK6f,YAAc7f,KAAK6f,aAE5B7f,KAAKopB,kBACLppB,KAAK4D,oBAAoB,UAEjC,EAIA+jB,EAAMtmB,UAAUgoB,MAAQ,WAChBrpB,KAAK6nB,UAAUqB,SACXlpB,KAAK6nB,UAAUqB,QAAQI,eACvBtpB,KAAK6nB,UAAUqB,QAAQI,cAAchP,YAAYta,KAAK6nB,UAAUqB,SAGpElpB,KAAK6nB,UAAUsB,SACXnpB,KAAK6nB,UAAUsB,QAAQG,eACvBtpB,KAAK6nB,UAAUsB,QAAQG,cAAchP,YAAYta,KAAK6nB,UAAUsB,SAGxEnpB,KAAK4D,oBAAoB,UACzB5D,KAAKupB,iBACT,EAIA5B,EAAMtmB,UAAU2G,QAAU,WACtBhI,KAAKqpB,QACLxpB,EAAOwB,UAAU2G,QAAQ5B,KAAKpG,KAClC,EAMA2nB,EAAMtmB,UAAU+nB,gBAAkB,SAAUI,GACxC,IAAI1pB,EAAQE,UACQ,IAAhBwpB,IAA0BA,GAAc,GACvCxpB,KAAK6nB,UAAUqB,SAGpBphB,YAAW,WACP,GAAKhI,EAAM+nB,UAAUqB,QAArB,CAGA,GAAIM,IAAgB1pB,EAAMipB,OAAQ,CAC9BjpB,EAAM+nB,UAAUqB,QAAQzP,MAAMpQ,QAAU,OACxCvJ,EAAM+nB,UAAUqB,QAAQzP,MAAMkL,KAAO,IACrC7kB,EAAM+nB,UAAUqB,QAAQzP,MAAMxP,IAAM,IACpCnK,EAAM+nB,UAAUqB,QAAQzP,MAAMnF,OAAS,UACvCxU,EAAM+nB,UAAUqB,QAAQzP,MAAMnJ,MAAQ,GACtCxQ,EAAM+nB,UAAUqB,QAAQzP,MAAMlJ,OAAS,GACvC,IAAIgG,EAAOzW,EAAM+nB,UAAUqB,QAAQO,wBACnC3pB,EAAM+nB,UAAUqB,QAAQzP,MAAMnJ,MAAQiG,EAAKjG,MAAQ,KACnDxQ,EAAM+nB,UAAUqB,QAAQzP,MAAMlJ,OAASgG,EAAKhG,OAAS,KACrDzQ,EAAMipB,QAAS,CACnB,CAEA,GAAIjpB,EAAM4pB,cAEN,IADA,IAAIC,EAAS7pB,EAAM+nB,UAAUqB,QAAQ/K,qBAAqB,OACjD/c,EAAI,EAAGA,EAAIuoB,EAAO3oB,OAAQI,IAAK,CACpC,IAAIwoB,EAAQD,EAAOvoB,GACnB,IAAKwoB,EAAMC,SAAU,CAEjBD,EAAME,iBAAiB,QAAQ,WAC3BhqB,EAAMspB,iBAAgB,EAC1B,IAGA,KACJ,CACJ,CAEJthB,YAAW,WACP,GAAKhI,EAAM+nB,UAAUqB,QAArB,CAGA,IAAI3S,EASJ,QARKiT,GAAgB1pB,EAAMipB,SAAWjpB,EAAMsT,OAIxCmD,EAAOzW,EAAM+nB,UAAUqB,QAAQO,wBAC/B3pB,EAAM+nB,UAAUqB,QAAQzP,MAAMpQ,QAAU,IAJxCkN,EAAOzW,EAAMsT,MAOTtT,EAAM0U,OACV,IAAK,OACD1U,EAAM+nB,UAAUqB,QAAQzP,MAAMkL,KAAO,IACrC7kB,EAAM+nB,UAAUqB,QAAQzP,MAAMmL,MAAQ,OACtC9kB,EAAM+nB,UAAUqB,QAAQzP,MAAMuG,WAAalgB,EAAMiqB,QAAQjqB,EAAM0oB,OAAOpmB,EAAItC,EAAM2oB,WAAWrmB,GAC3F,MACJ,IAAK,SACDtC,EAAM+nB,UAAUqB,QAAQzP,MAAMkL,KAAO,MACrC7kB,EAAM+nB,UAAUqB,QAAQzP,MAAMmL,MAAQ,OACtC9kB,EAAM+nB,UAAUqB,QAAQzP,MAAMuG,WAAalgB,EAAMiqB,QAAQza,KAAK0a,OAAOzT,EAAKjG,MAAQ,IAAMxQ,EAAM0oB,OAAOpmB,EAAItC,EAAM2oB,WAAWrmB,IAC1H,MACJ,IAAK,QACDtC,EAAM+nB,UAAUqB,QAAQzP,MAAMkL,KAAO,OACrC7kB,EAAM+nB,UAAUqB,QAAQzP,MAAMmL,MAAQ,IACtC9kB,EAAM+nB,UAAUqB,QAAQzP,MAAMuG,WAAalgB,EAAMiqB,QAAQjqB,EAAM0oB,OAAOpmB,EAAItC,EAAM2oB,WAAWrmB,GAC3F,MACJ,QACItC,EAAM+nB,UAAUqB,QAAQzP,MAAMkL,KAAO7kB,EAAMiqB,QAAQjqB,EAAM6kB,OAAS,OAClE7kB,EAAM+nB,UAAUqB,QAAQzP,MAAMmL,MAAQ9kB,EAAMiqB,QAAQjqB,EAAM8kB,QAAU,OACpE9kB,EAAM+nB,UAAUqB,QAAQzP,MAAMuG,WAAalgB,EAAMiqB,QAAQjqB,EAAM0oB,OAAOpmB,EAAItC,EAAM2oB,WAAWrmB,GAC3F,MAGR,OAAQtC,EAAMmqB,eACV,IAAK,MACDnqB,EAAM+nB,UAAUqB,QAAQzP,MAAMxP,IAAM,IACpCnK,EAAM+nB,UAAUqB,QAAQzP,MAAMrP,OAAS,OACvCtK,EAAM+nB,UAAUqB,QAAQzP,MAAMyQ,UAAYpqB,EAAMiqB,QAAQjqB,EAAM0oB,OAAOld,EAAIxL,EAAM2oB,WAAWnd,GAC1F,MACJ,IAAK,SACDxL,EAAM+nB,UAAUqB,QAAQzP,MAAMxP,IAAM,MACpCnK,EAAM+nB,UAAUqB,QAAQzP,MAAMrP,OAAS,OACvCtK,EAAM+nB,UAAUqB,QAAQzP,MAAMyQ,UAAYpqB,EAAMiqB,QAAQza,KAAK0a,OAAOzT,EAAKhG,OAAS,IAAMzQ,EAAM0oB,OAAOld,EAAIxL,EAAM2oB,WAAWnd,IAC1H,MACJ,IAAK,SACDxL,EAAM+nB,UAAUqB,QAAQzP,MAAMxP,IAAM,OACpCnK,EAAM+nB,UAAUqB,QAAQzP,MAAMrP,OAAS,IACvCtK,EAAM+nB,UAAUqB,QAAQzP,MAAMyQ,UAAYpqB,EAAMiqB,QAAQjqB,EAAM0oB,OAAOld,EAAIxL,EAAM2oB,WAAWnd,GAC1F,MACJ,QACIxL,EAAM+nB,UAAUqB,QAAQzP,MAAMxP,IAAMnK,EAAMiqB,QAAQjqB,EAAMmK,MAAQ,OAChEnK,EAAM+nB,UAAUqB,QAAQzP,MAAMrP,OAAStK,EAAMiqB,QAAQjqB,EAAMsK,SAAW,OACtEtK,EAAM+nB,UAAUqB,QAAQzP,MAAMyQ,UAAYpqB,EAAMiqB,QAAQjqB,EAAM0oB,OAAOld,EAAIxL,EAAM2oB,WAAWnd,GAC1F,MArDR,CAuDJ,GAAG,EAvFH,CAwFJ,GAAG,EACP,EACAqc,EAAMtmB,UAAU8oB,cAAgB,WAC5B,IAAIrqB,EAAQE,KACRA,KAAKwd,WACAxd,KAAK8nB,KAAKsC,OAAO/lB,OAAOgmB,IAAI,SAC7BrqB,KAAK8nB,KAAKsC,OAAO/lB,OAAOsD,GAAG,QAAQ,SAAUC,GACzC9H,EAAM2oB,WAAWrmB,EAAIwF,EAAGzF,MAAMC,EAC9BtC,EAAM2oB,WAAWnd,EAAI1D,EAAGzF,MAAMmJ,EAC9BxL,EAAMspB,iBAAgB,EAC1B,IAECppB,KAAK8nB,KAAKsC,OAAO/lB,OAAOgmB,IAAI,aAC7BrqB,KAAK8nB,KAAKsC,OAAO/lB,OAAOsD,GAAG,YAAY,SAAUC,GAC7C9H,EAAM0oB,OAAOpmB,GAAKtC,EAAM2oB,WAAWrmB,EACnCtC,EAAM0oB,OAAOld,GAAKxL,EAAM2oB,WAAWnd,EACnCxL,EAAM2oB,WAAWrmB,EAAI,EACrBtC,EAAM2oB,WAAWnd,EAAI,EACrBxL,EAAMspB,iBAAgB,EAC1B,KAIAppB,KAAK8nB,KAAKsC,UACV,SAAiBE,cAActqB,KAAK8nB,KAAKsC,QACrCpqB,KAAK8nB,KAAKsC,OAAO/lB,OAAOgmB,IAAI,SAC5BrqB,KAAK8nB,KAAKsC,OAAO/lB,OAAOkmB,IAAI,QAE5BvqB,KAAK8nB,KAAKsC,OAAO/lB,OAAOgmB,IAAI,aAC5BrqB,KAAK8nB,KAAKsC,OAAO/lB,OAAOkmB,IAAI,YAI5C,EACA5C,EAAMtmB,UAAU0oB,QAAU,SAAUlkB,GAChC,OAAK,KAAeA,GAGX,KAAeA,GACRA,EAAQ,KAGbA,EAAMwC,WANN,IAQf,EACA/C,OAAOC,eAAeoiB,EAAMtmB,UAAW,cAAe,CAMlDmE,IAAK,WACD,OAAOxF,KAAKqD,QAAQtD,MAAM,cAAeC,KAAKioB,aAClD,EAIA1gB,IAAK,SAAU1B,GACX7F,KAAKioB,aAAepiB,CACxB,EACAH,YAAY,EACZC,cAAc,IAElBL,OAAOC,eAAeoiB,EAAMtmB,UAAW,iBAAkB,CAOrDmE,IAAK,WACD,OAAOxF,KAAKioB,YAChB,EACAviB,YAAY,EACZC,cAAc,IAElBL,OAAOC,eAAeoiB,EAAMtmB,UAAW,UAAW,CAI9CmE,IAAK,WACD,OAAOxF,KAAKqD,QAAQtD,MAAM,UAAWC,KAAK+nB,SAC9C,EAQAxgB,IAAK,SAAU1B,GACP7F,KAAK+nB,UAAYliB,IACjB7F,KAAK+nB,SAAWliB,EACX7F,KAAK6nB,UAAU2C,SAChBxqB,KAAKyqB,uBAETzqB,KAAK6nB,UAAU2C,QAAQrN,UAAYtX,EACnC7F,KAAKopB,kBAEb,EACA1jB,YAAY,EACZC,cAAc,IAElBgiB,EAAMtmB,UAAUqpB,cAAgB,WAC5B,OAAO1qB,KAAKqD,QAAQtD,MAAM,aAAc,CACpC4qB,aAAc3qB,KAAK4qB,YAAc,GACjCC,YAAa7qB,KAAK4qB,YAAc,UAChCE,WAAY9qB,KAAK4qB,YAAc,SAC/BG,aAAc/qB,KAAK4qB,YAAc,WACjCI,YAAahrB,KAAK4qB,YAAc,UAChCK,aAAcjrB,KAAK4qB,YAAc,WACjCM,WAAYlrB,KAAK4qB,YAAc,UAEvC,EAIAjD,EAAMtmB,UAAUopB,qBAAuB,WAEnC,IAAIzqB,KAAK6nB,UAAUqB,QAAnB,CAIA,IAAIiC,EAAanrB,KAAK0qB,gBAElBxB,EAAUjM,SAASC,cAAc,OACrCgM,EAAQviB,UAAYwkB,EAAWJ,aAC/B7B,EAAQzP,MAAMpQ,QAAU,OAExB,IAAIggB,EAAQpM,SAASC,cAAc,KACnCmM,EAAM1iB,UAAYwkB,EAAWD,WAE7B,IAAId,EAASnN,SAASC,cAAc,OACpCkN,EAAOzjB,UAAYwkB,EAAWN,YAE9B,IAAIlM,EAAQ1B,SAASC,cAAc,OACnCyB,EAAMxB,UAAYnd,KAAK2e,MACvBA,EAAMhY,UAAYwkB,EAAWL,WACxB9qB,KAAK2e,QACNA,EAAMlF,MAAMpB,QAAU,QAG1B,IAAImS,EAAUvN,SAASC,cAAc,OACrCsN,EAAQ7jB,UAAYwkB,EAAWH,YAC/BR,EAAQrN,UAAYnd,KAAKwqB,QAEzBxqB,KAAK8nB,KAAKoB,SAAU,SAAiBkC,eAAelC,GACpDlpB,KAAK8nB,KAAKsC,QAAS,SAAiBgB,eAAehB,GACnDpqB,KAAKiM,WAAWrJ,KAAK5C,KAAK8nB,KAAKoB,SAE/BlpB,KAAK8nB,KAAKoB,QAAQ7kB,OAAOsD,GAAG,OAAQ3H,KAAKqrB,gBAAiBrrB,MAC1DA,KAAK8nB,KAAKoB,QAAQ7kB,OAAOsD,GAAG,MAAO3H,KAAKupB,gBAAiBvpB,MAEzDA,KAAK8nB,KAAKuB,OAAQ,SAAiB+B,eAAe/B,GAClDrpB,KAAKiM,WAAWrJ,KAAK5C,KAAK8nB,KAAKuB,OAE/BA,EAAM5P,MAAM6R,WAAa,SAEzBpC,EAAQxM,aAAa,OAAQ,UAE7B0N,EAAOrO,YAAYsN,GACnBe,EAAOrO,YAAY4C,GACnBuK,EAAQnN,YAAYqO,GACpBlB,EAAQnN,YAAYyO,GACpBxqB,KAAKipB,UAAUlN,YAAYmN,GAE3BlpB,KAAK6nB,UAAUqB,QAAUA,EACzBlpB,KAAK6nB,UAAUuC,OAASA,EACxBpqB,KAAK6nB,UAAU2C,QAAUA,EACzBxqB,KAAK6nB,UAAUlJ,MAAQA,EACvB3e,KAAK6nB,UAAUwB,MAAQA,EAEnBrpB,KAAKurB,eACLvrB,KAAKwrB,iBAGTxrB,KAAKyrB,uBAELzrB,KAAK0rB,cACL1rB,KAAK2rB,sBAEL3rB,KAAKmqB,eA5DL,CA6DJ,EACA7kB,OAAOC,eAAeoiB,EAAMtmB,UAAW,QAAS,CAI5CmE,IAAK,WACD,OAAOxF,KAAKqD,QAAQtD,MAAM,QAASC,KAAKgoB,OAC5C,EAQAzgB,IAAK,SAAU1B,GACP7F,KAAKgoB,QAAUniB,IACf7F,KAAKgoB,OAASniB,EACT7F,KAAK6nB,UAAU2C,SAChBxqB,KAAKyqB,uBAETzqB,KAAK6nB,UAAUlJ,MAAMxB,UAAYtX,EACjC7F,KAAKopB,kBACLppB,KAAK2rB,sBAEb,EACAjmB,YAAY,EACZC,cAAc,IAElBL,OAAOC,eAAeoiB,EAAMtmB,UAAW,cAAe,CAIlDmE,IAAK,WACD,OAAOxF,KAAKqD,QAAQtD,MAAM,cAAoC,IAArBC,KAAK0oB,aAAqB1oB,KAAK0oB,aAAe1oB,KAAK2e,MAChG,EAQApX,IAAK,SAAU1B,GACP7F,KAAK0oB,cAAgB7iB,IACrB7F,KAAK0oB,aAAe7iB,EACpB7F,KAAK2rB,sBAEb,EACAjmB,YAAY,EACZC,cAAc,IAElBL,OAAOC,eAAeoiB,EAAMtmB,UAAW,WAAY,CAI/CmE,IAAK,WACD,OAAOxF,KAAKqD,QAAQtD,MAAM,WAAYC,KAAK2oB,UAC/C,EAWAphB,IAAK,SAAU1B,GACPA,IAAU7F,KAAK2oB,YACf3oB,KAAK2oB,UAAY9iB,EACjB7F,KAAK0rB,cAEb,EACAhmB,YAAY,EACZC,cAAc,IAElBL,OAAOC,eAAeoiB,EAAMtmB,UAAW,QAAS,CAM5CmE,IAAK,WACD,OAAOxF,KAAKqD,QAAQtD,MAAM,QAASC,KAAK6oB,OAC5C,EAUAthB,IAAK,SAAU1B,GACPA,GAAS7F,KAAK6oB,SACd7oB,KAAK6oB,OAAShjB,EACd7F,KAAKopB,kBAEb,EACA1jB,YAAY,EACZC,cAAc,IAElBL,OAAOC,eAAeoiB,EAAMtmB,UAAW,gBAAiB,CAIpDmE,IAAK,WACD,OAAOxF,KAAKqD,QAAQtD,MAAM,gBAAiBC,KAAKkoB,eACpD,EAUA3gB,IAAK,SAAU1B,GACP7F,KAAKkoB,gBAAkBriB,IACvB7F,KAAKkoB,eAAiBriB,EAE9B,EACAH,YAAY,EACZC,cAAc,IAElBL,OAAOC,eAAeoiB,EAAMtmB,UAAW,cAAe,CAIlDmE,IAAK,WACD,OAAOxF,KAAKqD,QAAQtD,MAAM,cAAeC,KAAKmoB,aAClD,EAOA5gB,IAAK,SAAU1B,GACP7F,KAAKmoB,cAAgBtiB,IACrB7F,KAAKmoB,aAAetiB,EAChB7F,KAAK6nB,UAAUsB,UACfnpB,KAAK6nB,UAAUsB,QAAQ1P,MAAMpB,QAAUxS,EAAQ,QAAU,QAGrE,EACAH,YAAY,EACZC,cAAc,IAKlBgiB,EAAMtmB,UAAUoqB,qBAAuB,WAEnC,IAAIN,EAAanrB,KAAK0qB,gBAElBvB,EAAUlM,SAASC,cAAc,OACrCiM,EAAQxiB,UAAYwkB,EAAWF,aAE/BjrB,KAAKipB,UAAUlN,YAAYoN,GAG3BnpB,KAAK8nB,KAAKqB,SAAU,SAAiBiC,eAAejC,GAEpDnpB,KAAKiM,WAAWrJ,KAAK5C,KAAK8nB,KAAKqB,SAE/BnpB,KAAK8nB,KAAKqB,QAAQ9kB,OAAOsD,GAAG,OAAQ3H,KAAKqrB,gBAAiBrrB,MAC1DA,KAAK8nB,KAAKqB,QAAQ9kB,OAAOsD,GAAG,MAAO3H,KAAKupB,gBAAiBvpB,MAEzDmpB,EAAQ1P,MAAMpB,QAAUrY,KAAK6f,YAAc,QAAU,OAErD7f,KAAK6nB,UAAUsB,QAAUA,CAC7B,EACA7jB,OAAOC,eAAeoiB,EAAMtmB,UAAW,YAAa,CAIhDmE,IAAK,WACD,OAAOxF,KAAKqD,QAAQtD,MAAM,YAAaC,KAAKooB,WAChD,EAOA7gB,IAAK,SAAU1B,GACP7F,KAAKooB,YAAcviB,IACnB7F,KAAKooB,WAAaviB,EAClB7F,KAAKmqB,gBAEb,EACAzkB,YAAY,EACZC,cAAc,IAElBL,OAAOC,eAAeoiB,EAAMtmB,UAAW,gBAAiB,CAIpDmE,IAAK,WACD,OAAOxF,KAAKqD,QAAQtD,MAAM,gBAAiBC,KAAKsoB,eACpD,EAQA/gB,IAAK,SAAU1B,GACP7F,KAAKsoB,gBAAkBziB,IACvB7F,KAAKsoB,eAAiBziB,EACtB7F,KAAKopB,iBAAgB,GAE7B,EACA1jB,YAAY,EACZC,cAAc,IAElBL,OAAOC,eAAeoiB,EAAMtmB,UAAW,QAAS,CAI5CmE,IAAK,WACD,OAAOxF,KAAKqD,QAAQtD,MAAM,QAASC,KAAKqoB,OAC5C,EASA9gB,IAAK,SAAU1B,GACP7F,KAAKqoB,QAAUxiB,IACf7F,KAAKqoB,OAASxiB,EACd7F,KAAKopB,kBAEb,EACA1jB,YAAY,EACZC,cAAc,IAElBL,OAAOC,eAAeoiB,EAAMtmB,UAAW,gBAAiB,CAIpDmE,IAAK,WACD,OAAOxF,KAAKqD,QAAQtD,MAAM,gBAAiBC,KAAKuoB,eACpD,EASAhhB,IAAK,SAAU1B,GACP7F,KAAKuoB,gBAAkB1iB,IACvB7F,KAAKuoB,eAAiB1iB,EACtB7F,KAAKopB,kBAEb,EACA1jB,YAAY,EACZC,cAAc,IAElBL,OAAOC,eAAeoiB,EAAMtmB,UAAW,OAAQ,CAI3CmE,IAAK,WACD,OAAOxF,KAAKqD,QAAQtD,MAAM,OAAQC,KAAK4rB,MAC3C,EAYArkB,IAAK,SAAU1B,GACP7F,KAAK2kB,MAAQ9e,IACb7F,KAAK4rB,MAAQ/lB,EACb7F,KAAKqoB,OAAS,OACdroB,KAAKopB,kBAEb,EACA1jB,YAAY,EACZC,cAAc,IAElBL,OAAOC,eAAeoiB,EAAMtmB,UAAW,QAAS,CAI5CmE,IAAK,WACD,OAAOxF,KAAKqD,QAAQtD,MAAM,QAASC,KAAK6rB,OAC5C,EAYAtkB,IAAK,SAAU1B,GACP7F,KAAK4kB,OAAS/e,IACd7F,KAAK6rB,OAAShmB,EACd7F,KAAKqoB,OAAS,OACdroB,KAAKopB,kBAEb,EACA1jB,YAAY,EACZC,cAAc,IAElBL,OAAOC,eAAeoiB,EAAMtmB,UAAW,MAAO,CAI1CmE,IAAK,WACD,OAAOxF,KAAKqD,QAAQtD,MAAM,MAAOC,KAAK8rB,KAC1C,EAYAvkB,IAAK,SAAU1B,GACP7F,KAAKiK,KAAOpE,IACZ7F,KAAK8rB,KAAOjmB,EACZ7F,KAAKuoB,eAAiB,OACtBvoB,KAAKopB,kBAEb,EACA1jB,YAAY,EACZC,cAAc,IAElBL,OAAOC,eAAeoiB,EAAMtmB,UAAW,SAAU,CAI7CmE,IAAK,WACD,OAAOxF,KAAKqD,QAAQtD,MAAM,SAAUC,KAAK+rB,QAC7C,EAYAxkB,IAAK,SAAU1B,GACP7F,KAAKoK,QAAUvE,IACf7F,KAAK+rB,QAAUlmB,EACf7F,KAAKuoB,eAAiB,OACtBvoB,KAAKopB,kBAEb,EACA1jB,YAAY,EACZC,cAAc,IAElBL,OAAOC,eAAeoiB,EAAMtmB,UAAW,WAAY,CAU/CmE,IAAK,WACD,OAAOxF,KAAK6nB,SAChB,EACAniB,YAAY,EACZC,cAAc,IAOlBgiB,EAAMtmB,UAAUmqB,eAAiB,WACxBxrB,KAAK4oB,aACN5oB,KAAKiM,WAAWrJ,KAAK,GAAS,QAAc5C,KAAKipB,WAAYjpB,KAAK4qB,cAClE,KAAa5qB,KAAK6nB,WAAW,SAAUlf,EAAKqjB,GACxCA,EAAGvS,MAAMpB,QAAU,EACvB,IACArY,KAAK4oB,YAAa,EAE1B,EAIAjB,EAAMtmB,UAAUqqB,YAAc,WAC1B,IAAI5rB,EAAQE,KACZ,GAAIA,KAAK8nB,KAAKuB,MACV,GAAIrpB,KAAKisB,SAAU,CACfjsB,KAAK8nB,KAAKuB,MAAMtW,QAAQ0G,MAAM6R,WAAa,UAC3C,IAAIY,EAAY,EACZ,SAAiB7hB,KAAKhG,OAAOsD,GAAG,SAAS,SAAUC,GAC3C,UAAeA,EAAGukB,MAAO,QAAUrsB,EAAMmsB,UACzCnsB,EAAMupB,OAEd,IACArpB,KAAK8nB,KAAKuB,MAAMhlB,OAAOsD,GAAG,OAAO,SAAUC,GACvC9H,EAAMupB,OACV,KAEJ6C,EAAUtpB,KAAK5C,KAAK8nB,KAAKqB,QAAQ9kB,OAAOsD,GAAG,OAAO,SAAUC,GACpD9H,EAAM+f,aAAe/f,EAAMmsB,UAC3BnsB,EAAMupB,OAEd,KACArpB,KAAKiM,WAAWrJ,KAAK,IAAI,KAAcspB,GAC3C,MAEIlsB,KAAK8nB,KAAKuB,MAAMtW,QAAQ0G,MAAM6R,WAAa,QAGvD,EAIA3D,EAAMtmB,UAAUgqB,gBAAkB,WAC1BrrB,KAAKosB,SACLpsB,KAAKqsB,2BAA6BrsB,KAAKosB,OAAO3Z,oBAC9CzS,KAAKosB,OAAO3Z,qBAAsB,EAE1C,EAIAkV,EAAMtmB,UAAUkoB,gBAAkB,WAC1B,KAAevpB,KAAKqsB,8BACpBrsB,KAAKosB,OAAO3Z,oBAAsBzS,KAAKqsB,2BACvCrsB,KAAKqsB,gCAA6B7pB,EAE1C,EAIAmlB,EAAMtmB,UAAUsqB,oBAAsB,WAClC3rB,KAAKssB,SAASpD,QAAQxM,aAAa,aAAc1c,KAAKqQ,YAC1D,EAMAsX,EAAMtmB,UAAU2M,SAAW,SAAUzK,GACjC1D,EAAOwB,UAAU2M,SAAS5H,KAAKpG,KAAMuD,GACrCvD,KAAKipB,UAAY1lB,EAAO0lB,UACxBjpB,KAAKosB,OAAS7oB,EAAO6oB,OACrBpsB,KAAK4qB,YAAcrnB,EAAOgpB,eAC1BvsB,KAAKwqB,QAAUjnB,EAAOinB,QACtBxqB,KAAK2e,MAAQpb,EAAOob,MACpB3e,KAAKqQ,YAAc9M,EAAO8M,YAC1BrQ,KAAKurB,cAAgBhoB,EAAOgoB,cAC5BvrB,KAAK6f,YAActc,EAAOsc,YAC1B7f,KAAKwU,MAAQjR,EAAOiR,MACpBxU,KAAKiqB,cAAgB1mB,EAAO0mB,cAC5BjqB,KAAK2kB,KAAOphB,EAAOohB,KACnB3kB,KAAK4kB,MAAQrhB,EAAOqhB,MACpB5kB,KAAKiK,IAAM1G,EAAO0G,IAClBjK,KAAKoK,OAAS7G,EAAO6G,OACrBpK,KAAKqD,QAAQ2K,SAASzK,EAAOF,QACjC,EACOskB,CACX,CAz5B0B,CAy5BxB6E,EAAA,E,uICp5BEC,EAA2B,SAAU5sB,GAKrC,SAAS4sB,IACL,IAAI3sB,EAEJD,EAAOuG,KAAKpG,OAASA,KACrBF,EAAM6G,UAAY,YAElB7G,EAAMwQ,OAAQ,QAAQ,KACtBxQ,EAAMyQ,QAAS,QAAQ,KACvB,IAAIyB,EAAkB,IAAI,IAEtB0a,EAAiB5sB,EAAMoK,YAAY,KACvCwiB,EAAeviB,aAAc,EAE7B,IAAIwiB,EAAkBD,EAAexiB,YAAY,KACjDyiB,EAAgBxiB,aAAc,EAC9BwiB,EAAgB5iB,OAAS,GACzB4iB,EAAgBle,IAAM,IACtBke,EAAgBljB,KAAOuI,EAAgBtB,OAAO,QAC9Cic,EAAgBnjB,YAAc,GAC9BmjB,EAAgB/d,YAAc,GAC9B+d,EAAgB3gB,YAAa,EAC7BlM,EAAM6sB,gBAAkBA,EAExB,IAAIC,EAAgBF,EAAexiB,YAAY,KAC/C0iB,EAAcziB,aAAc,EAC5ByiB,EAAc7iB,OAAS,GACvB6iB,EAAche,YAAc,GAC5Bge,EAAcnjB,KAAOuI,EAAgBtB,OAAO,yBAC5Ckc,EAAcpjB,YAAc,GAC5BojB,EAAc5gB,YAAa,EAC3BlM,EAAM8sB,cAAgBA,EAEtB,IAAI3a,EAAQya,EAAexiB,YAAY,KACvC+H,EAAM9H,aAAc,EACpB8H,EAAM0C,iBAAmB,SACzB1C,EAAM2C,eAAiB,SACvB3C,EAAMjG,YAAa,EACnBiG,EAAMxI,KAAOuI,EAAgBtB,OAAO,QACpCuB,EAAMuC,MAAQ,SACdvC,EAAMjC,OAAS,SACfiC,EAAMuD,UAAY,SAClBvD,EAAMzI,YAAc,GACpB1J,EAAMmS,MAAQA,EAEdnS,EAAM0Q,WAAWnH,QAAU,EAC3BvJ,EAAM0Q,WAAW/G,KAAOuI,EAAgBtB,OAAO,cAC/C5Q,EAAM8R,aAAe,SACrB9R,EAAM+R,cAAgB,SACtB/R,EAAM+sB,MAAQ,IAEd,IAAIC,EAAchtB,EAAMyR,OAAOC,OAAO,UAYtC,OAXAsb,EAAY5c,WAAW7G,QAAU,EAEjCvJ,EAAMitB,SAAU,EAChBjtB,EAAMgQ,KAAK,GACXhQ,EAAMktB,YAAa,EAGnBltB,EAAMmM,WAAWrJ,KAAK9C,EAAM6sB,iBAC5B7sB,EAAMmM,WAAWrJ,KAAK9C,EAAM8sB,eAC5B9sB,EAAMmM,WAAWrJ,KAAK9C,EAAMmS,OAC5BnS,EAAMmM,WAAWrJ,KAAK8pB,GACf5sB,CACX,CAiGA,OApKA,QAAU2sB,EAAW5sB,GAoErByF,OAAOC,eAAeknB,EAAUprB,UAAW,WAAY,CAInDmE,IAAK,WACD,OAAOxF,KAAK2L,iBAAiB,WACjC,EAaApE,IAAK,SAAU1B,GACX,IAAI/F,EAAQE,KACZA,KAAKgtB,YAAa,EAClBhtB,KAAKitB,iBACLjtB,KAAK4L,iBAAiB,WAAY/F,GAIlC7F,KAAK4sB,cAAcne,IAAM,IAAM5I,EAC3B7F,KAAKiS,QACLjS,KAAKiS,MAAMqE,KAAOhH,KAAK0a,MAAc,IAARnkB,GAAe,KAE5CA,GAAS,GAEL7F,KAAKktB,WACLltB,KAAKktB,cAAW1qB,GAGpB,gBAAqB,cAAc,WAC/B,IAAI2qB,EAAYrtB,EAAMgQ,OAClBqd,IAAcA,EAAUC,aACxBD,EAAU9oB,OAAOyR,KAAK,kBAAkB,WACpChW,EAAMktB,YAAa,CACvB,IAGAltB,EAAMktB,YAAa,CAE3B,IACAhtB,KAAKyS,qBAAsB,EAC3BzS,KAAK4L,iBAAiB,WAAY,IAE7B/F,EAAQ,IACT7F,KAAK6sB,MACA7sB,KAAKktB,SAGAltB,KAAKktB,SAAWltB,KAAK6sB,QAAU,IAAI/lB,MAAOsB,YAChDpI,KAAKgtB,YAAa,EAClBhtB,KAAK0O,OACL1O,KAAKyS,qBAAsB,GAL3BzS,KAAKktB,UAAW,IAAIpmB,MAAOsB,WAS/BpI,KAAKgtB,YAAa,EAClBhtB,KAAK0O,OACL1O,KAAKyS,qBAAsB,GAGvC,EACA/M,YAAY,EACZC,cAAc,IAElBL,OAAOC,eAAeknB,EAAUprB,UAAW,QAAS,CAIhDmE,IAAK,WACD,OAAOxF,KAAK2L,iBAAiB,QACjC,EAYApE,IAAK,SAAU1B,GACX7F,KAAK4L,iBAAiB,QAAS/F,EACnC,EACAH,YAAY,EACZC,cAAc,IAEX8mB,CACX,CAtK8B,CAsK5B,KAQF,gCAA0CA,C,8HCjLtCY,EAAgC,SAAUxtB,GAK1C,SAASwtB,IACL,IAAIvtB,EAAQD,EAAOuG,KAAKpG,OAASA,KAMjC,OALAF,EAAM6G,UAAY,iBAClB7G,EAAMiT,QAAUjT,EAAMyK,MAAM7B,IAAI,QAChC5I,EAAMyU,cAAe,EACrBzU,EAAM2J,MAAO,UACb3J,EAAM8K,aACC9K,CACX,CAkEA,OA9EA,QAAUutB,EAAgBxtB,GAkB1BwtB,EAAehsB,UAAUwJ,KAAO,WAE5B,GAAI,KAAe7K,KAAKmf,GAAKnf,KAAKqf,GAAKrf,KAAKof,GAAKpf,KAAKsf,GAAKtf,KAAKojB,IAAMpjB,KAAKqjB,KAAM,CAC7E,IAAI4C,EAAK,CAAE7jB,EAAGpC,KAAKmf,GAAI7T,EAAGtL,KAAKof,IAC3B8G,EAAK,CAAE9jB,EAAGpC,KAAKqf,GAAI/T,EAAGtL,KAAKsf,IAC3BgO,EAAK,CAAElrB,EAAGpC,KAAKojB,IAAK9X,EAAGtL,KAAKqjB,KAC5BzW,EAAI,KAAaqZ,GAAM,KAAuBC,EAAIoH,GACtDttB,KAAKyL,KAAOmB,CAChB,CACJ,EACAtH,OAAOC,eAAe8nB,EAAehsB,UAAW,MAAO,CAInDmE,IAAK,WACD,OAAOxF,KAAK2L,iBAAiB,MACjC,EAMApE,IAAK,SAAU1B,GACX7F,KAAK4L,iBAAiB,MAAO/F,GAAO,EACxC,EACAH,YAAY,EACZC,cAAc,IAElBL,OAAOC,eAAe8nB,EAAehsB,UAAW,MAAO,CAInDmE,IAAK,WACD,OAAOxF,KAAK2L,iBAAiB,MACjC,EAMApE,IAAK,SAAU1B,GACX7F,KAAK4L,iBAAiB,MAAO/F,GAAO,EACxC,EACAH,YAAY,EACZC,cAAc,IAQlB0nB,EAAehsB,UAAUme,gBAAkB,SAAU9M,GACjD,IAAIuT,EAAK,CAAE7jB,EAAGpC,KAAKmf,GAAI7T,EAAGtL,KAAKof,IAC3BkO,EAAK,CAAElrB,EAAGpC,KAAKojB,IAAK9X,EAAGtL,KAAKqjB,KAC5B6C,EAAK,CAAE9jB,EAAGpC,KAAKqf,GAAI/T,EAAGtL,KAAKsf,IAC3BG,EAAS,KAA+BwG,EAAIC,EAAIoH,EAAI5a,GACpDgN,EAAS,KAA+BuG,EAAIC,EAAIoH,EAAI5a,EAAW,MACnE,MAAO,CAAEtQ,EAAGqd,EAAOrd,EAAGkJ,EAAGmU,EAAOnU,EAAGxB,MAAO,KAAe2V,EAAQC,GACrE,EACO2N,CACX,CAhFmC,CAgFjC,I,wGClFEE,EAA2B,SAAU1tB,GAOrC,SAAS0tB,IACL,IAAIztB,EAAQD,EAAOuG,KAAKpG,OAASA,KAKjC,OAJAF,EAAM6G,UAAY,YAClB7G,EAAMiT,QAAUjT,EAAMyK,MAAM7B,IAAI,QAEhC5I,EAAM8K,aACC9K,CACX,CAmDA,OAhEA,QAAUytB,EAAW1tB,GAmBrB0tB,EAAUlsB,UAAUwJ,KAAO,WACvBhL,EAAOwB,UAAUwJ,KAAKzE,KAAKpG,MAC3B,IAAIwtB,EAAYxtB,KAAK2V,mBACjB3V,KAAKuU,eACLiZ,EAAY,GAEhB,IAAIviB,EAAI,KAAYjL,KAAKkL,WAAYsiB,GACjCriB,EAAI,KAAYnL,KAAKoL,YAAaoiB,GACtCxtB,KAAK+S,QAAQE,KAAK,CACd,MAAShI,EACT,OAAUE,GAElB,EAMAoiB,EAAUlsB,UAAU8R,eAAiB,WACrC,EACA7N,OAAOC,eAAegoB,EAAUlsB,UAAW,OAAQ,CAM/CmE,IAAK,WACD,OAAIxF,KAAKytB,YACEztB,KAAKytB,YAEZztB,KAAKgM,WACE,CACH5J,EAAG,EACHkJ,EAAG,EACHgF,MAAOtQ,KAAKkL,WACZqF,OAAQvQ,KAAKoL,aAIV,CAAEhJ,EAAG,EAAGkJ,EAAG,EAAGgF,MAAO,EAAGC,OAAQ,EAE/C,EACA7K,YAAY,EACZC,cAAc,IAEX4nB,CACX,CAlE8B,CAkE5B,MAQF,gCAA0CA,C,6HCxEtCG,EAA8B,SAAU7tB,GAKxC,SAAS6tB,IACL,IAAI5tB,EAEJD,EAAOuG,KAAKpG,OAASA,KACrBF,EAAM6G,UAAY,eAElB7G,EAAMuL,YAAc,aACpBvL,EAAM0K,OAAS,WACf1K,EAAM6U,iBAAmB,SACzB7U,EAAM8U,eAAiB,SACvB9U,EAAM0d,WAAY,EAClB1d,EAAMgS,QAAQ,EAAG,EAAG,EAAG,GACvBhS,EAAM0Q,WAAWjC,aAAa,GAAI,GAAI,GAAI,IAE1C,IAAI+D,EAAO,IAAI,KACfA,EAAKS,QAAUjT,EAAMyK,MAAM7B,IAAI,QAC/B,IAAI+C,EAAO,KAAa,CAAErJ,GAAI,EAAGkJ,GAAI,IAgBrC,OAfAG,GAAQ,KAAa,CAAErJ,GAAI,EAAGkJ,EAAG,IACjCG,GAAQ,KAAa,CAAErJ,EAAG,EAAGkJ,GAAI,IACjCG,GAAQ,KAAa,CAAErJ,EAAG,EAAGkJ,EAAG,IAChCgH,EAAK7G,KAAOA,EACZ6G,EAAKiC,cAAe,EACpBjC,EAAKR,QAAQ,EAAG,EAAG,EAAG,GACtBQ,EAAK5I,QAAS,IAAI,KAAoBgH,OAAO,mBAC7C4B,EAAKhJ,cAAgB,GAGrBxJ,EAAMwS,KAAOA,EACbxS,EAAMmS,MAAMjK,UACZlI,EAAMmS,WAAQzP,EAEd1C,EAAM8K,aACC9K,CACX,CAuBA,OA5DA,QAAU4tB,EAAc7tB,GAsCxByF,OAAOC,eAAemoB,EAAarsB,UAAW,cAAe,CAQzDkG,IAAK,SAAU1B,GACX,IAAIyM,EAAOtS,KAAKsS,KACZA,IAEIA,EAAK9G,SADI,cAAT3F,EACgB,GAGC,GAG7B,EACAH,YAAY,EACZC,cAAc,IAEX+nB,CACX,CA9DiC,CA8D/B,KAQF,mCAA6CA,C,4HCtEzCC,EAAkC,SAAU9tB,GAK5C,SAAS8tB,IACL,IAAI7tB,EAAQD,EAAOuG,KAAKpG,OAASA,KAKjC,OAJAF,EAAM6G,UAAY,mBAClB7G,EAAMiT,QAAUjT,EAAMyK,MAAM7B,IAAI,QAChC5I,EAAMyO,aAAa,EAAG,EAAG,EAAG,GAC5BzO,EAAM8K,aACC9K,CACX,CA6JA,OAxKA,QAAU6tB,EAAkB9tB,GAiB5B8tB,EAAiBtsB,UAAUwJ,KAAO,WAC9BhL,EAAOwB,UAAUwJ,KAAKzE,KAAKpG,MAC3B,IAAIiL,EAAIjL,KAAKkL,WACTC,EAAInL,KAAKoL,YACb,GAAI,KAAeH,IAAM,KAAeE,GAAI,CACxC,IAAIyiB,EAAU,KAAU3iB,EAAGE,GAAK,EAC5B0iB,EAAsB,KAAuB7tB,KAAK6tB,oBAAqBD,GACvEE,EAAuB,KAAuB9tB,KAAK8tB,qBAAsBF,GACzEG,EAA0B,KAAuB/tB,KAAK+tB,wBAAyBH,GAC/EI,EAAyB,KAAuBhuB,KAAKguB,uBAAwBJ,GAC7EjN,EAAQ,KAAUrR,KAAK6V,IAAIla,EAAI,GAAIqE,KAAK6V,IAAIha,EAAI,IAChDyV,EAAO,KAAiBiN,EAAqB,EAAGlN,GAChDE,EAAO,KAAiBiN,EAAsB,EAAGnN,GACjDG,EAAO,KAAiBiN,EAAyB,EAAGpN,GACpDI,EAAO,KAAiBiN,EAAwB,EAAGrN,GACnDa,EAAQ,IAAMZ,EAAO,QAAU3V,EAAI4V,GAAQ,KAC3Ca,EAAQ,KAAOX,EAAO,IAAM5V,EAC5BwW,EAAQ,OAASf,EACjBa,EAAQ,KAAOxW,EAAI,KAAOE,EAAI2V,GAC9BmB,EAAQ,KAAOpB,EAAO,IAAMA,EAAO,UAAYA,EAAO,IAAMA,EAC5DqB,EAAQ,KAAOpB,EAAO,IAAMA,EAAO,WAAaA,EAAO,IAAMA,EAC7DqB,EAAQ,KAAOpB,EAAO,IAAMA,EAAO,WAAaA,EAAO,KAAOA,EAC9DqB,EAAQ,KAAOxB,EAAO,IAAMA,EAAO,UAAYA,EAAO,KAAOA,EAC7DnV,EAAO+V,EAAQS,EAAQR,EAAQS,EAAQR,EAAQS,EAAQR,EAAQS,EAAQ,KAC3EpiB,KAAKyL,KAAOA,CAChB,CACJ,EAWAkiB,EAAiBtsB,UAAUkN,aAAe,SAAU0f,EAAIC,EAAIC,EAAIC,GAC5DpuB,KAAK6tB,oBAAsBI,EAC3BjuB,KAAK8tB,qBAAuBI,EAC5BluB,KAAKguB,uBAAyBG,EAC9BnuB,KAAK+tB,wBAA0BK,CACnC,EACA9oB,OAAOC,eAAeooB,EAAiBtsB,UAAW,sBAAuB,CAIrEmE,IAAK,WACD,OAAOxF,KAAK2L,iBAAiB,sBACjC,EAOApE,IAAK,SAAU1B,GACX7F,KAAKgT,mBAAmB,sBAAuBnN,GAAO,EAC1D,EACAH,YAAY,EACZC,cAAc,IAElBL,OAAOC,eAAeooB,EAAiBtsB,UAAW,uBAAwB,CAItEmE,IAAK,WACD,OAAOxF,KAAK2L,iBAAiB,uBACjC,EAOApE,IAAK,SAAU1B,GACX7F,KAAKgT,mBAAmB,uBAAwBnN,GAAO,EAC3D,EACAH,YAAY,EACZC,cAAc,IAElBL,OAAOC,eAAeooB,EAAiBtsB,UAAW,0BAA2B,CAIzEmE,IAAK,WACD,OAAOxF,KAAK2L,iBAAiB,0BACjC,EAOApE,IAAK,SAAU1B,GACX7F,KAAKgT,mBAAmB,0BAA2BnN,GAAO,EAC9D,EACAH,YAAY,EACZC,cAAc,IAElBL,OAAOC,eAAeooB,EAAiBtsB,UAAW,yBAA0B,CAIxEmE,IAAK,WACD,OAAOxF,KAAK2L,iBAAiB,yBACjC,EAOApE,IAAK,SAAU1B,GACX7F,KAAKgT,mBAAmB,yBAA0BnN,GAAO,EAC7D,EACAH,YAAY,EACZC,cAAc,IAOlBgoB,EAAiBtsB,UAAU8R,eAAiB,WAC5C,EACA7N,OAAOC,eAAeooB,EAAiBtsB,UAAW,OAAQ,CAMtDmE,IAAK,WACD,OAAIxF,KAAKytB,YACEztB,KAAKytB,YAEZztB,KAAKgM,WACE,CACH5J,EAAG,EACHkJ,EAAG,EACHgF,MAAOtQ,KAAKkL,WACZqF,OAAQvQ,KAAKoL,aAIV,CAAEhJ,EAAG,EAAGkJ,EAAG,EAAGgF,MAAO,EAAGC,OAAQ,EAE/C,EACA7K,YAAY,EACZC,cAAc,IAEXgoB,CACX,CA1KqC,CA0KnC,MAQF,uCAAiDA,C,2NCvK7CU,EAA2B,SAAUxuB,GAKrC,SAASwuB,IACL,IAAIvuB,EAAQD,EAAOuG,KAAKpG,OAASA,KAIjCF,EAAMwuB,eAAiB,EAIvBxuB,EAAMyuB,aAAe,EAIrBzuB,EAAM0uB,WAAa,EAInB1uB,EAAM2uB,SAAW,EAKjB3uB,EAAM4uB,SAAU,EAMhB5uB,EAAM6uB,kBAAmB,EASzB7uB,EAAM8uB,mBAAoB,EAC1B9uB,EAAM6G,UAAY,YAClB7G,EAAM+uB,UAAY,GAClB/uB,EAAMgvB,SAAW,GACjBhvB,EAAMivB,kBAAoB,EAC1BjvB,EAAMkvB,gBAAkB,KACxBlvB,EAAMwU,OAAO,GAAI,GAAI,GAAI,IACzB,IAAItC,EAAkB,IAAI,IAEtBxB,EAAa1Q,EAAM0Q,WAmCvB,OAlCAA,EAAWjC,aAAa,GAAI,GAAI,GAAI,IACpCiC,EAAW/G,KAAOuI,EAAgBtB,OAAO,QACzCF,EAAWhH,YAAc,GAEzB1J,EAAMsQ,mBAAoB,EAC1BtQ,EAAMmvB,UAAY,IAAI,IACtBnvB,EAAMovB,QAAU,IAAI,IAKpBpvB,EAAMuE,OAAOsD,GAAG,eAAe,WAC3B7H,EAAMqvB,aACV,GAAGrvB,GAAO,GAEVA,EAAMsvB,MAAQ,EACdtvB,EAAMuvB,IAAM,EAEZvvB,EAAMsS,KAAO,YACbtS,EAAMwvB,MAAMld,KAAO,SACnBtS,EAAMwvB,MAAMC,WAAa,SACzBzvB,EAAMmvB,UAAU7c,KAAO,SACvBtS,EAAMovB,QAAQ9c,KAAO,SAErBtS,EAAMuE,OAAOyR,KAAK,UAAU,WACxBhW,EAAMwuB,oBAAiB9rB,EACvB1C,EAAM0vB,qBACV,QAAGhtB,GAAW,GACd1C,EAAM2vB,WAAY,EAClB3vB,EAAMuL,YAAc,aAEpBvL,EAAM4vB,gBAAgB,CAAE,gBAAiB,MACzC5vB,EAAM4vB,gBAAgB,CAAE,gBAAiB,QACzC5vB,EAAM8K,aACC9K,CACX,CAszBA,OA54BA,QAAUuuB,EAAWxuB,GA2FrBwuB,EAAUhtB,UAAU2S,sBAAwB,WACxCnU,EAAOwB,UAAU2S,sBAAsB5N,KAAKpG,MAEnB,eAArBA,KAAKqL,aACA,KAAerL,KAAKqQ,eACrBrQ,KAAKqQ,YAAcrQ,KAAK4E,SAASC,UAAU,gFAE1C,KAAe7E,KAAKsvB,MAAMK,qBAC3B3vB,KAAKsvB,MAAMK,kBAAoB3vB,KAAK4E,SAASC,UAAU,gDAEtD,KAAe7E,KAAKivB,UAAUU,qBAC/B3vB,KAAKivB,UAAUU,kBAAoB3vB,KAAK4E,SAASC,UAAU,qDAE1D,KAAe7E,KAAKkvB,QAAQS,qBAC7B3vB,KAAKkvB,QAAQS,kBAAoB3vB,KAAK4E,SAASC,UAAU,sDAE7D7E,KAAK4vB,kBAAoB,eAGpB,KAAe5vB,KAAKqQ,eACrBrQ,KAAKqQ,YAAcrQ,KAAK4E,SAASC,UAAU,0EAE1C,KAAe7E,KAAKsvB,MAAMK,qBAC3B3vB,KAAKsvB,MAAMK,kBAAoB3vB,KAAK4E,SAASC,UAAU,6CAEtD,KAAe7E,KAAKivB,UAAUU,qBAC/B3vB,KAAKivB,UAAUU,kBAAoB3vB,KAAK4E,SAASC,UAAU,mDAE1D,KAAe7E,KAAKkvB,QAAQS,qBAC7B3vB,KAAKkvB,QAAQS,kBAAoB3vB,KAAK4E,SAASC,UAAU,mDAE7D7E,KAAK4vB,kBAAoB,YAE7B5vB,KAAK6vB,eAAiB7vB,KAAK8vB,WAAWC,SAC1C,EAMA1B,EAAUhtB,UAAU4rB,eAAiB,WACjCjtB,KAAKgwB,aACLnwB,EAAOwB,UAAU4rB,eAAe7mB,KAAKpG,MAErCA,KAAKiwB,gBACT,EAMA5B,EAAUhtB,UAAU6uB,kBAAoB,WACpCrwB,EAAOwB,UAAU6uB,kBAAkB9pB,KAAKpG,MACxC,IAAIwQ,EAAaxQ,KAAKwQ,WACtBA,EAAW2f,WAAY,EACvB3f,EAAWnM,OAAOsD,GAAG,MAAO3H,KAAKowB,YAAapwB,UAAMwC,EACxD,EAQA6rB,EAAUhtB,UAAU+uB,YAAc,SAAUjE,GACxCnsB,KAAKqwB,WACL,IAAI1Q,EAAQwM,EAAMmE,YAClB3Q,EAAQ,KAA2BA,EAAO3f,KAAKwQ,WAAYxQ,MAC3D,IAAIsvB,EAAQtvB,KAAKsvB,MACjB,GAAwB,cAApBtvB,KAAKqL,YAA6B,CAClC,IAAIklB,EAAS5Q,EAAMvd,EAAIktB,EAAMzb,WAAa,EAC1C0c,EAAS,KAAiBA,EAAQ,EAAGvwB,KAAKkL,WAAaokB,EAAMzb,YAC7D7T,KAAKwwB,gBAAkBlB,EAAMmB,QAAQ,CAAEC,SAAU,IAAKC,GAAIJ,GAAUvwB,KAAK+uB,kBAAmB/uB,KAAKgvB,gBACrG,KACK,CACD,IAAI4B,EAASjR,EAAMrU,EAAIgkB,EAAMxb,YAAc,EAC3C8c,EAAS,KAAiBA,EAAQ,EAAG5wB,KAAKoL,YAAckkB,EAAMxb,aAC9D9T,KAAKwwB,gBAAkBlB,EAAMmB,QAAQ,CAAEC,SAAU,IAAKC,GAAIC,GAAU5wB,KAAK+uB,kBAAmB/uB,KAAKgvB,gBACrG,CACIhvB,KAAK+uB,kBAAoB,EACzB/uB,KAAKwwB,gBAAgBnsB,OAAOsD,GAAG,iBAAkB3H,KAAK6wB,WAAY7wB,MAAM,IAGxEA,KAAK8wB,OAAOld,WACZ5T,KAAK6wB,aAEb,EAMAxC,EAAUhtB,UAAUgvB,SAAW,WAC3BrwB,KAAK0uB,SAAU,EACf1uB,KAAK2uB,kBAAmB,EACpB3uB,KAAK+wB,gBACL/wB,KAAK4S,cAAc5S,KAAK+wB,gBAE5B/wB,KAAK+wB,oBAAiBvuB,EACtBxC,KAAKgxB,gBACT,EAMA3C,EAAUhtB,UAAU2vB,eAAiB,WAC7BhxB,KAAKwwB,iBACLxwB,KAAKwwB,gBAAgBS,MAAK,GAE1BjxB,KAAKkxB,gBACLlxB,KAAKkxB,eAAeD,MAAK,EAEjC,EAMA5C,EAAUhtB,UAAUwvB,WAAa,WAS7B7wB,KAAK+wB,eAAiB/wB,KAAK8H,WAAW9H,KAAKmxB,eAAeC,KAAKpxB,MAAgC,IAAzBA,KAAK+uB,kBAC/E,EAOAV,EAAUhtB,UAAU8vB,eAAiB,WACjCnxB,KAAKqxB,gBAAa7uB,EAClBxC,KAAK0uB,SAAU,EACV1uB,KAAK4uB,mBACN5uB,KAAKwvB,qBAEb,EAMAnB,EAAUhtB,UAAUmuB,oBAAsB,WAClCxvB,KAAKuuB,cAAgBvuB,KAAKqvB,KAAOrvB,KAAKsuB,gBAAkBtuB,KAAKovB,QAC7DpvB,KAAKsuB,eAAiBtuB,KAAKovB,MAC3BpvB,KAAKuuB,aAAevuB,KAAKqvB,IACzBrvB,KAAKwb,SAAS,gBAEtB,EAKA6S,EAAUhtB,UAAU8tB,YAAc,SAAUmC,GAExC,QADuB,IAAnBA,IAA6BA,GAAiB,GAC7CtxB,KAAKwS,OAAV,CAGA,IAAI8c,EAAQtvB,KAAKsvB,MACbF,EAAQpvB,KAAKovB,MACbC,EAAMrvB,KAAKqvB,IACXJ,EAAYjvB,KAAKivB,UACjBC,EAAUlvB,KAAKkvB,QACnB,GAAwB,cAApBlvB,KAAKqL,YAA6B,CAClC,IAAIkmB,EAAevxB,KAAKkL,WACxBokB,EAAMhf,MAAQihB,GAAgBlC,EAAMD,GACpCE,EAAMkC,KAAOD,EAAejC,EAAMzb,WAClCyb,EAAMltB,EAAIgtB,EAAQmC,EAClBtC,EAAUwC,OAAO,CAAErvB,EAAGktB,EAAMoC,OAAQpmB,EAAG,QAAK9I,OAAWA,GAAW,GAClE0sB,EAAQuC,OAAO,CAAErvB,EAAGktB,EAAMoC,OAASpC,EAAMzb,WAAYvI,EAAG,QAAK9I,OAAWA,GAAW,GACnFysB,EAAU5e,YAAcrQ,KAAK4E,SAASC,UAAU,eAAWrC,EAAWxC,KAAKqD,QAAQtD,MAAM,gBAAiB,CACtG8F,MAAOyJ,KAAK0a,MAAc,IAARoF,GAAe,IACjC1c,SAAU0c,IACXvpB,OACHopB,EAAU0C,eAAiB,GAAKriB,KAAK0a,MAAc,IAARoF,GAC3CH,EAAU2C,gBAAkB3C,EAAU5e,YACtC6e,EAAQ7e,YAAcrQ,KAAK4E,SAASC,UAAU,aAASrC,EAAWxC,KAAKqD,QAAQtD,MAAM,gBAAiB,CAClG8F,MAAOyJ,KAAK0a,MAAY,IAANqF,GAAa,IAC/B3c,SAAU2c,IACXxpB,OACHqpB,EAAQyC,eAAiB,GAAKriB,KAAK0a,MAAY,IAANqF,GACzCH,EAAQ0C,gBAAkB1C,EAAQ7e,WACtC,KACK,CACD,IAAIwhB,EAAgB7xB,KAAKoL,YACzBkkB,EAAM/e,OAASshB,GAAiBxC,EAAMD,GACtCE,EAAMwC,KAAOD,EAAgBvC,EAAMxb,YACnCwb,EAAMhkB,GAAK,EAAI+jB,GAAOwC,EACtB5C,EAAUwC,OAAO,CAAErvB,EAAG,EAAGkJ,EAAGgkB,EAAMyC,OAASzC,EAAMxb,kBAAetR,OAAWA,GAAW,GACtF0sB,EAAQuC,OAAO,CAAErvB,EAAG,EAAGkJ,EAAGgkB,EAAMyC,aAAUvvB,OAAWA,GAAW,GAChEysB,EAAU5e,YAAcrQ,KAAK4E,SAASC,UAAU,aAASrC,EAAWxC,KAAKqD,QAAQtD,MAAM,gBAAiB,CACpG8F,MAAOyJ,KAAK0a,MAAoB,KAAb,EAAIoF,IAAgB,IACvC1c,SAAW,EAAI0c,IAChBvpB,OACHopB,EAAU0C,eAAiB,GAAKriB,KAAK0a,MAAc,IAARoF,GAC3CH,EAAU2C,gBAAkB3C,EAAU5e,YACtC6e,EAAQ7e,YAAcrQ,KAAK4E,SAASC,UAAU,eAAWrC,EAAWxC,KAAKqD,QAAQtD,MAAM,gBAAiB,CACpG8F,MAAOyJ,KAAK0a,MAAkB,KAAX,EAAIqF,IAAc,IACrC3c,SAAW,EAAI2c,IAChBxpB,OACHqpB,EAAQyC,eAAiB,GAAKriB,KAAK0a,MAAY,IAANqF,GACzCH,EAAQ0C,gBAAkB1C,EAAQ7e,WACtC,CAEAif,EAAMjf,YAAcrQ,KAAK4E,SAASC,UAAU,qBAAiBrC,EAAWxC,KAAKqD,QAAQtD,MAAM,gBAAiB,CACxG8F,MAAOyJ,KAAK0a,MAAc,IAARoF,GAAe,IACjC1c,SAAU0c,IACXvpB,MAAO7F,KAAKqD,QAAQtD,MAAM,gBAAiB,CAC1C8F,MAAOyJ,KAAK0a,MAAY,IAANqF,GAAa,IAC/B3c,SAAU2c,IACXxpB,OACHypB,EAAMqC,eAAiB,GAAKriB,KAAK0a,MAAc,IAARoF,GACvCE,EAAMsC,gBAAkBtC,EAAMjf,YAC9BrQ,KAAK2xB,eAAiB,GAAKriB,KAAK0a,MAAc,IAARoF,GACtCpvB,KAAK4xB,gBAAkBtC,EAAMjf,aACxBrQ,KAAK2uB,kBAAoB3uB,KAAK4uB,mBAAqB0C,GACpDtxB,KAAKwvB,qBA3DT,CA6DJ,EAIAnB,EAAUhtB,UAAU4uB,eAAiB,WACjC,IAAI5kB,EAAcrL,KAAKqL,YACnB2mB,EAAO,EACPC,EAAO,EACPT,EAAO,EACPM,EAAO,EACQ,cAAfzmB,GACAmmB,EAAOxxB,KAAKkL,WACZ+mB,EAAOH,EAAO9xB,KAAKoL,YAAc,IAGjC0mB,EAAO9xB,KAAKoL,YACZ4mB,EAAOR,EAAOxxB,KAAKkL,WAAa,GAEpC,IAAI+jB,EAAYjvB,KAAKivB,UACrBA,EAAU+C,KAAOA,EACjB/C,EAAUuC,KAAOA,EACjBvC,EAAUgD,KAAOA,EACjBhD,EAAU6C,KAAOA,EACjB,IAAI5C,EAAUlvB,KAAKkvB,QACnBA,EAAQ8C,KAAOA,EACf9C,EAAQsC,KAAOA,EACftC,EAAQ+C,KAAOA,EACf/C,EAAQ4C,KAAOA,EACf,IAAIxC,EAAQtvB,KAAKsvB,MACjBA,EAAM0C,KAAOA,EACb1C,EAAMkC,KAAOA,EACblC,EAAM2C,KAAOA,EACb3C,EAAMwC,KAAOA,CACjB,EAIAzD,EAAUhtB,UAAU2uB,WAAa,WAC7B,IAAI3kB,EAAcrL,KAAKqL,YACnB4jB,EAAYjvB,KAAKivB,UACjBA,IACAA,EAAU5jB,YAAcA,GAExBrL,KAAKkvB,UACLlvB,KAAKkvB,QAAQ7jB,YAAcA,GAE/B,IAAIikB,EAAQtvB,KAAKsvB,MACbA,IACmB,cAAfjkB,GACK,KAAerL,KAAKkyB,cACflyB,KAAKsQ,iBAAiB,OACxBtQ,KAAKsQ,OAAQ,QAAQ,MAOzB,KAAetQ,KAAKmyB,iBACpBnyB,KAAKuQ,OAASvQ,KAAK6uB,WAEvBS,EAAM/e,OAASvQ,KAAKoL,YACpBkkB,EAAM1a,eAAiB,SACvB0a,EAAM3a,iBAAmB,SAGpB,KAAe3U,KAAKoyB,eACfpyB,KAAKuQ,kBAAkB,OACzBvQ,KAAKuQ,QAAS,QAAQ,MAI1B,KAAevQ,KAAKqyB,gBACpBryB,KAAKsQ,MAAQtQ,KAAK8uB,UAEtBQ,EAAMhf,MAAQtQ,KAAKkL,WACnBokB,EAAM1a,eAAiB,MACvB0a,EAAM3a,iBAAmB,UAGrC,EACArP,OAAOC,eAAe8oB,EAAUhtB,UAAW,SAAU,CAMjDmE,IAAK,WACD,OAAOxF,KAAK0uB,OAChB,EACAhpB,YAAY,EACZC,cAAc,IAElBL,OAAOC,eAAe8oB,EAAUhtB,UAAW,QAAS,CAIhDmE,IAAK,WACD,OAAO8J,KAAKgjB,IAAItyB,KAAKuyB,YAAYvyB,KAAKwyB,QAASxyB,KAAKuyB,YAAYvyB,KAAKyyB,MACzE,EAYAlrB,IAAK,SAAUmL,GACN1S,KAAK0uB,UACN1uB,KAAK0yB,QAAUhgB,EAEvB,EACAhN,YAAY,EACZC,cAAc,IAElBL,OAAOC,eAAe8oB,EAAUhtB,UAAW,UAAW,CAIlDmE,IAAK,WACD,OAAOxF,KAAKwyB,MAChB,EAOAjrB,IAAK,SAAUmL,GACX1S,KAAKwyB,OAASxyB,KAAKuyB,YAAY7f,GAC/B1S,KAAKmvB,aACT,EACAzpB,YAAY,EACZC,cAAc,IAElBL,OAAOC,eAAe8oB,EAAUhtB,UAAW,MAAO,CAI9CmE,IAAK,WACD,OAAO8J,KAAKqjB,IAAI3yB,KAAKuyB,YAAYvyB,KAAKwyB,QAASxyB,KAAKuyB,YAAYvyB,KAAKyyB,MACzE,EAMAlrB,IAAK,SAAUmL,GACN1S,KAAK0uB,UACN1uB,KAAK4yB,MAAQlgB,EAErB,EACAhN,YAAY,EACZC,cAAc,IAElBL,OAAOC,eAAe8oB,EAAUhtB,UAAW,QAAS,CAIhDmE,IAAK,WACD,OAAOxF,KAAKyyB,IAChB,EAOAlrB,IAAK,SAAUmL,GACX1S,KAAKyyB,KAAOzyB,KAAKuyB,YAAY7f,GAC7B1S,KAAKmvB,aACT,EACAzpB,YAAY,EACZC,cAAc,IAElBL,OAAOC,eAAe8oB,EAAUhtB,UAAW,QAAS,CAOhDmE,IAAK,WACD,MAAO,CAAE4pB,MAAOpvB,KAAKovB,MAAOC,IAAKrvB,KAAKqvB,IAAKwD,SAAU7yB,KAAKqxB,WAC9D,EACA3rB,YAAY,EACZC,cAAc,IAOlB0oB,EAAUhtB,UAAUyxB,gBAAkB,WAC7B9yB,KAAK0uB,UACN1uB,KAAK2uB,kBAAmB,EAEhC,EAQAN,EAAUhtB,UAAU0xB,SAAW,SAAUC,GACjCA,EAAM5D,OAAS,KAAYpvB,KAAKwyB,OAAQ,IAAMQ,EAAM3D,KAAO,KAAYrvB,KAAKyyB,KAAM,KAClFzyB,KAAKwyB,OAASQ,EAAM5D,MACpBpvB,KAAKyyB,KAAOO,EAAM3D,IAClBrvB,KAAK2uB,kBAAmB,EACxB3uB,KAAKmvB,cACLnvB,KAAK2uB,kBAAmB,EACxB3uB,KAAKsvB,MAAM1b,WACX5T,KAAKsvB,MAAM9e,WAAWoD,WAE9B,EAQAya,EAAUhtB,UAAUkxB,YAAc,SAAU7f,GACxC,OAAO,KAAiB,KAAYA,EAAU,GAAI,EAAG,EACzD,EACApN,OAAOC,eAAe8oB,EAAUhtB,UAAW,cAAe,CAItDmE,IAAK,WACD,OAAOxF,KAAK2L,iBAAiB,cACjC,EAeApE,IAAK,SAAU1B,GACP7F,KAAK4L,iBAAiB,cAAe/F,KAEvB,eAAVA,GAEA7F,KAAKivB,UAAU3b,gBAAkB,qBACjCtT,KAAKkvB,QAAQ5b,gBAAkB,uBAS/BtT,KAAKivB,UAAU3b,gBAAkB,mBACjCtT,KAAKkvB,QAAQ5b,gBAAkB,oBAOnCtT,KAAKizB,sBACLjzB,KAAKkU,aAEb,EACAxO,YAAY,EACZC,cAAc,IAKlB0oB,EAAUhtB,UAAU4xB,oBAAsB,WAC1C,EACA3tB,OAAOC,eAAe8oB,EAAUhtB,UAAW,YAAa,CAIpDmE,IAAK,WACD,OAAOxF,KAAKkzB,UAChB,EAYA3rB,IAAK,SAAU4rB,GACPnzB,KAAKkzB,YACLlzB,KAAK4S,cAAc5S,KAAKkzB,YAE5BlzB,KAAKkzB,WAAaC,EAClBnzB,KAAKozB,YAAYD,EACrB,EACAztB,YAAY,EACZC,cAAc,IAElBL,OAAOC,eAAe8oB,EAAUhtB,UAAW,UAAW,CAIlDmE,IAAK,WACD,OAAOxF,KAAKqzB,QAChB,EAMA9rB,IAAK,SAAU4rB,GACPnzB,KAAKqzB,UACLrzB,KAAK4S,cAAc5S,KAAKqzB,UAE5BrzB,KAAKqzB,SAAWF,EAChBnzB,KAAKozB,YAAYD,EACrB,EACAztB,YAAY,EACZC,cAAc,IAQlB0oB,EAAUhtB,UAAU+xB,YAAc,SAAUD,GACxCA,EAAO3gB,OAASxS,KAChBmzB,EAAOnnB,YAAa,EACpBmnB,EAAOxpB,WAAY,EACnBwpB,EAAOhpB,aAAc,EAGrBgpB,EAAOG,OAAS,IAChBH,EAAO9uB,OAAOsD,GAAG,OAAQ3H,KAAKuzB,eAAgBvzB,MAAM,GACpDmzB,EAAO9uB,OAAOsD,GAAG,WAAY3H,KAAK6wB,WAAY7wB,MAAM,GACpDmzB,EAAO9uB,OAAOsD,GAAG,OAAQ3H,KAAKqwB,SAAUrwB,MAAM,GAC9CmzB,EAAO9uB,OAAOsD,GAAG,KAAM3H,KAAK6wB,WAAY7wB,MAAM,GAC9CA,KAAKiM,WAAWrJ,KAAKuwB,EACzB,EAOA9E,EAAUhtB,UAAUkyB,eAAiB,SAAUpH,GAC3CnsB,KAAKqwB,WACDlE,EAAMhoB,SAAWnE,KAAKkzB,WACtBlzB,KAAKqxB,WAAa,QAGlBrxB,KAAKqxB,WAAa,MAEE,cAApBrxB,KAAKqL,aACLrL,KAAKwyB,OAASxyB,KAAKivB,UAAUyC,OAAS1xB,KAAKkL,WAC3ClL,KAAKyyB,KAAOzyB,KAAKkvB,QAAQwC,OAAS1xB,KAAKkL,aAGvClL,KAAKwyB,OAAS,EAAIxyB,KAAKivB,UAAU8C,OAAS/xB,KAAKoL,YAC/CpL,KAAKyyB,KAAO,EAAIzyB,KAAKkvB,QAAQ6C,OAAS/xB,KAAKoL,aAE/CpL,KAAKmvB,aACT,EACA7pB,OAAOC,eAAe8oB,EAAUhtB,UAAW,QAAS,CAIhDmE,IAAK,WACD,IAAKxF,KAAK8wB,OAAQ,CAEd,IAAIxB,EAAQ,IAAI,IAChBA,EAAM9e,WAAWjC,aAAa,GAAI,GAAI,GAAI,IAC1C+gB,EAAMxd,QAAQ,EAAG,EAAG,EAAG,GACvB9R,KAAKsvB,MAAQA,CACjB,CACA,OAAOtvB,KAAK8wB,MAChB,EASAvpB,IAAK,SAAU+nB,GACX,IAAIxvB,EAAQE,KACRsvB,IACItvB,KAAK8wB,QACL9wB,KAAK4S,cAAc5S,KAAK8wB,QAE5B9wB,KAAK8wB,OAASxB,EACdA,EAAM9c,OAASxS,KACfsvB,EAAMtjB,YAAa,EACnBsjB,EAAMkE,OAAQ,EACdlE,EAAM9R,WAAY,EAClB8R,EAAMa,WAAY,EAClBb,EAAMmE,WAAY,EAClBnE,EAAM3lB,WAAY,EAClB2lB,EAAMnlB,aAAc,EACpBmlB,EAAMgE,OAAS,EAIfhE,EAAMhc,gBAAkB,SACxBgc,EAAMoE,gBAAkB,aACxBpE,EAAMjrB,OAAOsD,GAAG,YAAa3H,KAAKqwB,SAAUrwB,MAAM,GAClDsvB,EAAMjrB,OAAOsD,GAAG,WAAY3H,KAAK6wB,WAAY7wB,MAAM,GACnDsvB,EAAMjrB,OAAOsD,GAAG,kBAAmB3H,KAAK2zB,oBAAqB3zB,MAAM,GACnEsvB,EAAMjrB,OAAOsD,GAAG,cAAe3H,KAAK2zB,oBAAqB3zB,MAAM,GAC/DsvB,EAAMjrB,OAAOsD,GAAG,YAAa3H,KAAK4zB,kBAAmB5zB,MAAM,GAG3DA,KAAKiM,WAAWrJ,MAAK,SAAiByH,KAAKhG,OAAOsD,GAAG,SAAS,SAAUC,GAChE,UAAeA,EAAGukB,MAAO,CAAC,QAAS,WAAarsB,EAAMwvB,MAAMuE,YAC5DjsB,EAAGukB,MAAM2H,iBACTh0B,EAAM8zB,oBAEd,KACA5zB,KAAKiM,WAAWrJ,KAAK5C,KAAK8wB,QAElC,EACAprB,YAAY,EACZC,cAAc,IAOlB0oB,EAAUhtB,UAAUuyB,kBAAoB,WACpC5zB,KAAKqwB,WACL,IAAI0D,EAAW,EACXC,EAAS,EACK,GAAdh0B,KAAKovB,OAA0B,GAAZpvB,KAAKqvB,KACxBrvB,KAAKwuB,WAAaxuB,KAAKovB,MACvBpvB,KAAKyuB,SAAWzuB,KAAKqvB,MAGrB0E,EAAW/zB,KAAKwuB,WAChBwF,EAASh0B,KAAKyuB,UAElB,IAAIwF,EAAgBj0B,KAAKywB,QAAQ,CAAC,CAAEC,SAAU,UAAWC,GAAIoD,GAAY,CAAErD,SAAU,QAASC,GAAIqD,IAAWh0B,KAAK+uB,kBAAmB/uB,KAAKgvB,iBACtIiF,IAAkBA,EAAc7G,cAChC6G,EAAc5vB,OAAOsD,GAAG,iBAAkB3H,KAAK6wB,WAAY7wB,MAAM,GACjEA,KAAKkxB,eAAiB+C,GAGtBj0B,KAAK6wB,YAEb,EAMAxC,EAAUhtB,UAAUsyB,oBAAsB,WACtC,IAAIrE,EAAQtvB,KAAKsvB,MACjB,GAAwB,cAApBtvB,KAAKqL,YAA6B,CAClC,IAAI6oB,EAAel0B,KAAKkL,WACpBD,EAAIqkB,EAAMpkB,WACV9I,EAAIktB,EAAMoC,OACd1xB,KAAKwyB,OAASpwB,EAAI8xB,EAClBl0B,KAAKyyB,MAAQrwB,EAAI6I,GAAKipB,EACtBl0B,KAAKmvB,aACT,KACK,CACD,IAAIgF,EAAgBn0B,KAAKoL,YACrBD,EAAImkB,EAAMlkB,YACVE,EAAIgkB,EAAMyC,OACVzmB,EAAIH,EAAIgpB,IACR7oB,EAAI6oB,EAAgBhpB,EACpBmkB,EAAMhkB,EAAIA,GAEdtL,KAAKwyB,OAAS,GAAKlnB,EAAIH,GAAKgpB,EAC5Bn0B,KAAKyyB,KAAO,EAAInnB,EAAI6oB,EACpBn0B,KAAKmvB,aACT,CACJ,EAOAd,EAAUhtB,UAAUwR,iBAAmB,WACnC,OAAO,IAAI,GACf,EACAvN,OAAOC,eAAe8oB,EAAUhtB,UAAW,YAAa,CAIpDmE,IAAK,WACD,OAAOxF,KAAKo0B,UAChB,EAOA7sB,IAAK,SAAU1B,GACX,IAAI/F,EAAQE,KACZA,KAAKo0B,WAAavuB,EACd7F,KAAKq0B,eACLr0B,KAAK4S,cAAc5S,KAAKq0B,eAExBr0B,KAAKs0B,cACLt0B,KAAK4S,cAAc5S,KAAKs0B,cAExBzuB,GACA7F,KAAKq0B,cAAgBr0B,KAAKqE,OAAOsD,GAAG,QAAQ,WACxC7H,EAAMmvB,UAAUvgB,OAChB5O,EAAMovB,QAAQxgB,MAClB,QAAGlM,GAAW,GACdxC,KAAKs0B,aAAet0B,KAAKqE,OAAOsD,GAAG,OAAO,WACtC7H,EAAMmvB,UAAUnf,OAChBhQ,EAAMovB,QAAQpf,MAClB,QAAGtN,GAAW,GACdxC,KAAKivB,UAAUnf,OACf9P,KAAKkvB,QAAQpf,SAGb9P,KAAKivB,UAAUvgB,OACf1O,KAAKkvB,QAAQxgB,OAErB,EACAhJ,YAAY,EACZC,cAAc,IAElBL,OAAOC,eAAe8oB,EAAUhtB,UAAW,oBAAqB,CAI5DmE,IAAK,WACD,OAAOxF,KAAK2L,iBAAiB,oBACjC,EAMApE,IAAK,SAAU1B,GACX7F,KAAK4L,iBAAiB,oBAAqB/F,EAC/C,EACAH,YAAY,EACZC,cAAc,IAElBL,OAAOC,eAAe8oB,EAAUhtB,UAAW,kBAAmB,CAI1DmE,IAAK,WACD,OAAOxF,KAAK2L,iBAAiB,kBACjC,EAOApE,IAAK,SAAU1B,GACX7F,KAAK4L,iBAAiB,kBAAmB/F,EAC7C,EACAH,YAAY,EACZC,cAAc,IAQlB0oB,EAAUhtB,UAAUkzB,WAAa,SAAU3uB,GACvC,MAAgB,mBAATA,GAA8B/F,EAAOwB,UAAUmzB,KAAKpuB,KAAKpG,KAAM4F,EAC1E,EACOyoB,CACX,CA94B8B,CA84B5B,KAQF,gCAA0CA,C,yKC75BtCoG,EAAuB,SAAU50B,GAKjC,SAAS40B,IACL,IAAI30B,EAEJD,EAAOuG,KAAKpG,OAASA,KAmBrB,OAlBAF,EAAM6G,UAAY,QAElB7G,EAAM8L,iBAAiB,eAAgB,GACvC9L,EAAM8L,iBAAiB,aAAc,GACrC9L,EAAMkT,mBAAmB,cAAe,GACxClT,EAAMkT,mBAAmB,SAAU,GACnClT,EAAM8L,iBAAiB,MAAO,GAC9B9L,EAAM8L,iBAAiB,cAAe,GACtC9L,EAAMwJ,cAAgB,EACtBxJ,EAAM8L,iBAAiB,SAAU,QAEjC9L,EAAM+P,MAAQ/P,EAAMoK,YAAY,MAChCpK,EAAM+P,MAAM7D,YAAa,EACzBlM,EAAMmM,WAAWrJ,KAAK9C,EAAM+P,OAI5B/P,EAAM8K,aACC9K,CACX,CAkTA,OA7UA,QAAU20B,EAAO50B,GAiCjB40B,EAAMpzB,UAAUwJ,KAAO,WACnBhL,EAAOwB,UAAUwJ,KAAKzE,KAAKpG,MAC3B,IAAI0L,EAAU1L,KAAK0L,QACf1L,KAAK+J,OAAS,GAAgB,GAAX2B,IACnBA,EAAU,KAEd1L,KAAK6P,MAAMpE,KAAO,KAAUzL,KAAK2O,WAAY3O,KAAKyO,IAAKzO,KAAK+J,OAAQ/J,KAAK6O,iBAAkBnD,EAAS1L,KAAKuO,aAAcvO,KAAKwO,mBAC5HxO,KAAK6P,MAAMqE,aACXlU,KAAK00B,YAAc10B,KAAK00B,YACpB10B,KAAK20B,oBAAoB,KACzB30B,KAAK40B,eAAe50B,KAAK20B,UAEzB30B,KAAK60B,sBAAsB,KAC3B70B,KAAK40B,eAAe50B,KAAK60B,WAEjC,EACAJ,EAAMpzB,UAAUuzB,eAAiB,SAAUrpB,GACvCA,EAASwH,QAAQE,KAAK,CAAE,cAAiB,mBACzC1H,EAASwH,QAAQE,KAAK,CAAE,EAAKjT,KAAK+J,SAClCwB,EAASupB,GAAK,EACdvpB,EAASwpB,GAAK,EACdxpB,EAASwH,QAAQE,KAAK,CAAElJ,OAAQ/J,KAAK+J,QACzC,EACAzE,OAAOC,eAAekvB,EAAMpzB,UAAW,OAAQ,CAM3CmE,IAAK,WACD,GAAIxF,KAAKytB,YACL,OAAOztB,KAAKytB,YAEhB,GAAIztB,KAAKgM,WAAY,CACjB,IAAIgpB,EAAY,KAAiBh1B,KAAK2O,WAAY3O,KAAK2O,WAAa3O,KAAKyO,IAAKzO,KAAK6O,kBAC/EomB,EAAY,KAAiBj1B,KAAK2O,WAAY3O,KAAK2O,WAAa3O,KAAKyO,IAAKzO,KAAK+J,QACnF,OAAO,KAAyB,CAACirB,EAAWC,GAChD,CAEI,MAAO,CAAE7yB,EAAG,EAAGkJ,EAAG,EAAGgF,MAAO,EAAGC,OAAQ,EAE/C,EACA7K,YAAY,EACZC,cAAc,IAElBL,OAAOC,eAAekvB,EAAMpzB,UAAW,aAAc,CAIjDmE,IAAK,WACD,OAAOxF,KAAK2L,iBAAiB,aACjC,EAQApE,IAAK,SAAU1B,GACX7F,KAAK4L,iBAAiB,aAAc,KAAqB/F,IAAQ,EACrE,EACAH,YAAY,EACZC,cAAc,IAElBL,OAAOC,eAAekvB,EAAMpzB,UAAW,MAAO,CAI1CmE,IAAK,WACD,OAAOxF,KAAK2L,iBAAiB,MACjC,EAOApE,IAAK,SAAU1B,GACN,KAAeA,KAChBA,EAAQ,GAEZ7F,KAAK4L,iBAAiB,MAAO/F,GAAO,EACxC,EACAH,YAAY,EACZC,cAAc,IAElBL,OAAOC,eAAekvB,EAAMpzB,UAAW,SAAU,CAI7CmE,IAAK,WACD,IAAIuE,EAAS/J,KAAK2L,iBAAiB,UAInC,OAHK,KAAe5B,KAChBA,EAAS,GAENA,CACX,EAMAxC,IAAK,SAAU1B,GACX7F,KAAK4L,iBAAiB,SAAU/F,GAAO,EAC3C,EACAH,YAAY,EACZC,cAAc,IAElBL,OAAOC,eAAekvB,EAAMpzB,UAAW,UAAW,CAI9CmE,IAAK,WACD,IAAIK,EAAQ7F,KAAK2L,iBAAiB,WAIlC,OAHK,KAAe9F,KAChBA,EAAQ7F,KAAK+J,QAEVlE,CACX,EASA0B,IAAK,SAAU1B,GACX7F,KAAK4L,iBAAiB,UAAW/F,GAAO,EAC5C,EACAH,YAAY,EACZC,cAAc,IAElBL,OAAOC,eAAekvB,EAAMpzB,UAAW,cAAe,CAIlDmE,IAAK,WACD,OAAOxF,KAAK2L,iBAAiB,cACjC,EAOApE,IAAK,SAAU1B,GACX7F,KAAKgT,mBAAmB,cAAenN,GAAO,GAAM,EAAO,IAAI,EACnE,EACAH,YAAY,EACZC,cAAc,IAElBL,OAAOC,eAAekvB,EAAMpzB,UAAW,mBAAoB,CAIvDmE,IAAK,WACD,OAAO,KAAuBxF,KAAK4O,YAAa5O,KAAK+J,OACzD,EACArE,YAAY,EACZC,cAAc,IAElBL,OAAOC,eAAekvB,EAAMpzB,UAAW,eAAgB,CAInDmE,IAAK,WACD,OAAOxF,KAAK2L,iBAAiB,eACjC,EAOApE,IAAK,SAAU1B,GACX7F,KAAK4L,iBAAiB,eAAgB/F,GAAO,EACjD,EACAH,YAAY,EACZC,cAAc,IAElBL,OAAOC,eAAekvB,EAAMpzB,UAAW,oBAAqB,CAIxDmE,IAAK,WACD,OAAOxF,KAAK2L,iBAAiB,oBACjC,EAOApE,IAAK,SAAU1B,GACX7F,KAAK4L,iBAAiB,oBAAqB/F,GAAO,EACtD,EACAH,YAAY,EACZC,cAAc,IAElBL,OAAOC,eAAekvB,EAAMpzB,UAAW,cAAe,CAIlDmE,IAAK,WACD,OAAOxF,KAAK2L,iBAAiB,cACjC,EASApE,IAAK,SAAU1B,GACX7F,KAAK4L,iBAAiB,cAAe/F,GACrCA,EAAQ7F,KAAK2L,iBAAiB,eAC9B3L,KAAK+K,GAAKlF,EAAQ7F,KAAK+J,OAAS/J,KAAKk1B,GACrCl1B,KAAKgL,GAAKnF,EAAQ7F,KAAK0L,QAAU1L,KAAKm1B,EAC1C,EACAzvB,YAAY,EACZC,cAAc,IAElBL,OAAOC,eAAekvB,EAAMpzB,UAAW,KAAM,CAQzCmE,IAAK,WACD,OAAO,KAAUxF,KAAKo1B,YAC1B,EACA1vB,YAAY,EACZC,cAAc,IAElBL,OAAOC,eAAekvB,EAAMpzB,UAAW,KAAM,CAQzCmE,IAAK,WACD,OAAO,KAAUxF,KAAKo1B,YAC1B,EACA1vB,YAAY,EACZC,cAAc,IAElBL,OAAOC,eAAekvB,EAAMpzB,UAAW,cAAe,CAOlDmE,IAAK,WACD,OAAOxF,KAAK2O,WAAa3O,KAAKyO,IAAM,CACxC,EACA/I,YAAY,EACZC,cAAc,IAOlB8uB,EAAMpzB,UAAUg0B,YAAc,WAC1B,IAAIxvB,EAAQ7F,KAAK2L,iBAAiB,YAClC,GAAI,KAAe9F,GACf,OAAOA,EAEX,IAAIkd,EAAI,GACJld,aAAiB,OACjBkd,EAAIld,EAAMA,OAEd,IAAI+I,EAAc,KAAuB5O,KAAK4O,YAAa5O,KAAK+J,QAChE,OAAO/J,KAAKk1B,IAAMtmB,GAAe5O,KAAK+J,OAAS6E,GAAemU,EAClE,EAMA0R,EAAMpzB,UAAUi0B,YAAc,WAC1B,IAAIzvB,EAAQ7F,KAAK2L,iBAAiB,YAClC,GAAI,KAAe9F,GACf,OAAOA,EAEX,IAAIkd,EAAI,GACJld,aAAiB,OACjBkd,EAAIld,EAAMA,OAEd,IAAI+I,EAAc,KAAuB5O,KAAK4O,YAAa5O,KAAK+J,QAChE,OAAO/J,KAAKm1B,IAAMvmB,GAAe5O,KAAK+J,OAAS6E,GAAemU,GAAK/iB,KAAK6P,MAAM7E,EAClF,EACOypB,CACX,CA/U0B,CA+UxB,KAQF,4BAAsCA,C,6FC9VlCc,EAAwB,SAAU11B,GAKlC,SAAS01B,IACL,IAAIz1B,EAAQD,EAAOuG,KAAKpG,OAASA,KAWjC,OAVAF,EAAM6G,UAAY,SAClB7G,EAAMwvB,MAAMjmB,QAAU,EACtBvJ,EAAMwvB,MAAM7c,qBAAsB,EAClC3S,EAAMovB,QAAQ7lB,QAAU,EACxBvJ,EAAMovB,QAAQzc,qBAAsB,EACpC3S,EAAMmvB,UAAU5qB,OAAOsD,GAAG,QAAQ,WAC9B7H,EAAMovB,QAAQ9sB,EAAItC,EAAMmvB,UAAU7sB,EAClCtC,EAAMovB,QAAQ5jB,EAAIxL,EAAMmvB,UAAU3jB,CACtC,IACAxL,EAAM8K,aACC9K,CACX,CAkDA,OAnEA,QAAUy1B,EAAQ11B,GAkBlByF,OAAOC,eAAegwB,EAAOl0B,UAAW,QAAS,CAI7CmE,IAAK,WACD,OAAOxF,KAAKwyB,MAChB,EACAjrB,IAAK,SAAU1B,GACf,EACAH,YAAY,EACZC,cAAc,IAElBL,OAAOC,eAAegwB,EAAOl0B,UAAW,MAAO,CAI3CmE,IAAK,WACD,OAAOxF,KAAKwyB,MAChB,EAMAjrB,IAAK,SAAUmL,GACf,EACAhN,YAAY,EACZC,cAAc,IAElBL,OAAOC,eAAegwB,EAAOl0B,UAAW,QAAS,CAI7CmE,IAAK,WACD,OAAOxF,KAAKwyB,MAChB,EAMAjrB,IAAK,SAAUmL,GACN1S,KAAK0uB,UACN1uB,KAAK0yB,QAAUhgB,EAEvB,EACAhN,YAAY,EACZC,cAAc,IAEX4vB,CACX,CArE2B,CAqEzB,KAQF,6BAAuCA,C,kHCvEnCC,EAA8B,SAAU31B,GAKxC,SAAS21B,IACL,IAAI11B,EAEJD,EAAOuG,KAAKpG,OAASA,KACrBF,EAAM6G,UAAY,eAClB7G,EAAM4R,SAAW,EAEjB5R,EAAM0K,OAAS,aACf1K,EAAM8R,aAAe,SACrB9R,EAAM+R,cAAgB,SACtB/R,EAAMgS,QAAQ,EAAG,GAAI,EAAG,IACxBhS,EAAMiS,oBAAqB,EAC3BjS,EAAMyR,OAAOC,OAAO,UACpB,IAAIQ,EAAkB,IAAI,IAEtByjB,EAAY,IAAI,IACpBA,EAAUjsB,YAAc,GACxB,IAAIksB,EAAOD,EAAUlkB,OAAOC,OAAO,UACnCkkB,EAAKxlB,WAAW1G,YAAc,EAC9BisB,EAAUE,UAAW,EACrB71B,EAAM21B,UAAYA,EAClB,IAAItC,EAAS,IAAI,IACbyC,EAAS,IAAI,EAAAzhB,EACjBgf,EAAOthB,cAAgB,OACvBshB,EAAOrhB,QAAQ,EAAG,EAAG,EAAG,GACxB8jB,EAAO7rB,OAAS,GAChBopB,EAAO7gB,KAAOsjB,EACdzC,EAAO7gB,KAAKtC,OAAS,SACrBmjB,EAAOlhB,WAAQzP,EACf,IAAIqzB,GAAO,QAAQ,KACnB1C,EAAO3iB,WAAWjC,aAAasnB,EAAMA,EAAMA,EAAMA,GACjD1C,EAAO7iB,MAAwB,IAAhBslB,EAAO7rB,OACtBopB,EAAO5iB,OAAyB,IAAhBqlB,EAAO7rB,OACvBopB,EAAOnT,WAAa,EACpBmT,EAAOlT,YAAc,EACrBkT,EAAOhT,WAAY,EACnByV,EAAO7qB,GAAsB,IAAhB6qB,EAAO7rB,OACpB6rB,EAAOnsB,KAAOuI,EAAgBtB,OAAO,iBACrC,IAAIolB,EAAKF,EAAOrkB,OAAOC,OAAO,SAC9BskB,EAAG5lB,WAAWzG,KAAOuI,EAAgBtB,OAAO,sBAC5C,IAAIqlB,EAAKH,EAAOrkB,OAAOC,OAAO,UAC9BukB,EAAG7lB,WAAWzG,KAAOuI,EAAgBtB,OAAO,uBAC5CqlB,EAAG7lB,WAAWnF,GAAqB,GAAhB6qB,EAAO7rB,OAC1BjK,EAAMk2B,aAAe7C,EACrBrzB,EAAMuE,OAAOsD,GAAG,WAAW,WACvB7H,EAAM21B,UAAUE,UAAY71B,EAAM61B,SAClC71B,EAAMm2B,WAAWN,SAAW71B,EAAM61B,QACtC,IAEA,IAAIM,EAAa,IAAI,IACrBA,EAAWzsB,YAAc,GACzB,IAAI0sB,EAAOD,EAAW1kB,OAAOC,OAAO,UAYpC,OAXA0kB,EAAKhmB,WAAW1G,YAAc,EAC9B1J,EAAMm2B,WAAaA,EAGnBn2B,EAAMsS,KAAO,SACbtS,EAAM6J,WAAY,EAClBssB,EAAWjmB,OAAS,SACpBylB,EAAUzlB,OAAS,SACnBmjB,EAAOnjB,OAAS,SAEhBlQ,EAAM8K,aACC9K,CACX,CA6GA,OAjLA,QAAU01B,EAAc31B,GAqExByF,OAAOC,eAAeiwB,EAAan0B,UAAW,YAAa,CAIvDmE,IAAK,WACD,OAAOxF,KAAKm2B,UAChB,EAMA5uB,IAAK,SAAU0K,GACPjS,KAAKm2B,YACLn2B,KAAK4S,cAAc5S,KAAKm2B,YAE5Bn2B,KAAKm2B,WAAalkB,EACdA,IACAA,EAAMO,OAASxS,KACfiS,EAAMQ,qBAAsB,EAC5BR,EAAM9H,aAAc,EACpBnK,KAAKiM,WAAWrJ,KAAK5C,KAAKm2B,YAElC,EACAzwB,YAAY,EACZC,cAAc,IAElBL,OAAOC,eAAeiwB,EAAan0B,UAAW,aAAc,CAIxDmE,IAAK,WACD,OAAOxF,KAAKo2B,WAChB,EAMA7uB,IAAK,SAAU0K,GACPjS,KAAKo2B,aACLp2B,KAAK4S,cAAc5S,KAAKo2B,aAE5Bp2B,KAAKo2B,YAAcnkB,EACfA,IACAA,EAAMO,OAASxS,KACfiS,EAAMQ,qBAAsB,EAC5BR,EAAM9H,aAAc,EACpBnK,KAAKiM,WAAWrJ,KAAK5C,KAAKo2B,aAElC,EACA1wB,YAAY,EACZC,cAAc,IAElBL,OAAOC,eAAeiwB,EAAan0B,UAAW,SAAU,CAKpDmE,IAAK,WACD,OAAOxF,KAAKq2B,aAChB,EACA3wB,YAAY,EACZC,cAAc,IAElBL,OAAOC,eAAeiwB,EAAan0B,UAAW,eAAgB,CAI1DmE,IAAK,WACD,OAAOxF,KAAKq2B,aAChB,EAMA9uB,IAAK,SAAU4rB,GACPnzB,KAAKq2B,eACLr2B,KAAK4S,cAAc5S,KAAKq2B,eAE5Br2B,KAAKq2B,cAAgBlD,EACjBA,IACAA,EAAO3gB,OAASxS,KAChBmzB,EAAOhpB,aAAc,EACrBnK,KAAKiM,WAAWrJ,KAAK5C,KAAKq2B,eAElC,EACA3wB,YAAY,EACZC,cAAc,IAOlB6vB,EAAan0B,UAAU2M,SAAW,SAAUzK,GACxC1D,EAAOwB,UAAU2M,SAAS5H,KAAKpG,KAAMuD,GACjCA,EAAOkyB,WACPz1B,KAAKy1B,UAAUznB,SAASzK,EAAOkyB,WAE/BlyB,EAAO0yB,YACPj2B,KAAKi2B,WAAWjoB,SAASzK,EAAO0yB,YAEhC1yB,EAAOyyB,cACPh2B,KAAKg2B,aAAahoB,SAASzK,EAAOyyB,aAE1C,EACOR,CACX,CAnLiC,CAmL/B,KAQF,mCAA6CA,C,gHC/LzCc,EAA0B,SAAUz2B,GAKpC,SAASy2B,IACL,IAAIx2B,EAAQD,EAAOuG,KAAKpG,OAASA,KACjCF,EAAM6G,UAAY,WAClB7G,EAAMyd,YAAa,EACnB,IAAIvL,EAAkB,IAAI,IAC1BlS,EAAM2J,KAAOuI,EAAgBtB,OAAO,iBAAiB6lB,SAAS,IAC9D,IAAIjlB,EAAaxR,EAAMyR,OAAOC,OAAO,SACrCF,EAAWpB,WAAWzG,KAAOuI,EAAgBtB,OAAO,sBAAsB6lB,SAAS,IACnF,IAAIrkB,EAAYpS,EAAMyR,OAAOC,OAAO,QAIpC,OAHAU,EAAUhC,WAAWzG,KAAOuI,EAAgBtB,OAAO,qBAAqB6lB,SAAS,IACjFz2B,EAAMwT,gBAAkB,YACxBxT,EAAM8K,aACC9K,CACX,CACA,OAlBA,QAAUw2B,EAAUz2B,GAkBby2B,CACX,CApB6B,CAoB3B,KAQF,+BAAyCA,C,mLCtBrCE,EAAyB,SAAU32B,GAKnC,SAAS22B,IACL,IAAI12B,EAEJD,EAAOuG,KAAKpG,OAASA,KAKrBF,EAAM22B,cAAgB,CAAEr0B,GAAI,IAAOkJ,GAAI,IAAOgF,MAAO,IAAOC,OAAQ,KAIpEzQ,EAAM42B,SAAW,CAAEt0B,EAAG,EAAGkJ,EAAG,GAO5BxL,EAAM62B,oBAAqB,EAK3B72B,EAAM82B,qBAAuB,KAI7B92B,EAAM+2B,QAAS,EACf/2B,EAAM6G,UAAY,UAClB7G,EAAMkM,YAAa,EACnBlM,EAAMg3B,mBAAoB,EAC1Bh3B,EAAMwU,OAAO,EAAG,EAAG,EAAG,GACtBxU,EAAMmQ,aAAakC,mBAAqB,EACxCrS,EAAMgtB,YAAY3a,mBAAqB,EAEvC,IAAI3B,EAAa1Q,EAAM0Q,WACvBA,EAAWiC,qBAAsB,EACjCjC,EAAWhH,YAAc,GACzBgH,EAAWjH,YAAc,EACzBiH,EAAWlH,cAAgB,EAC3BkH,EAAW9G,QAAS,QAAM,WAC1B8G,EAAWjC,aAAe,EAC1BiC,EAAW8R,cAAgB,EAC3B9R,EAAWkQ,iBAAmB,GAC9B,IAAIqW,EAAa,IAAI,IACrBA,EAAW/rB,GAAK,EAChB+rB,EAAWhsB,GAAK,EAChBgsB,EAAW1tB,QAAU,GACrBmH,EAAW/C,QAAQ7K,KAAKm0B,GACxBj3B,EAAMk3B,eAAgB,EAEtB,IAAI/kB,EAAQnS,EAAMoK,YAAY,KAwB9B,OAvBA+H,EAAM9H,aAAc,EACpBrK,EAAMmS,MAAQA,EACdA,EAAMH,QAAQ,EAAG,GAAI,EAAG,IACxBG,EAAMQ,qBAAsB,EAC5BR,EAAM0C,iBAAmB,SACzB1C,EAAMxI,MAAO,QAAM,WACnB3J,EAAMmM,WAAWrJ,KAAKqP,GACtBnS,EAAMmS,MAAM5N,OAAOsD,GAAG,cAAe7H,EAAMm3B,eAAgBn3B,GAC3DA,EAAMmS,MAAMqhB,OAAS,EAErBxzB,EAAMo3B,mBAAqB,WAC3Bp3B,EAAMivB,kBAAoB,EAC1BjvB,EAAMkvB,gBAAkB,KACxBlvB,EAAM8L,iBAAiB,kBAAkB,GAEzC9L,EAAMsS,KAAO,UACbtS,EAAMitB,SAAU,EAChBjtB,EAAMuJ,QAAU,EAChBvJ,EAAMsC,EAAI,EACVtC,EAAMwL,EAAI,EACVxL,EAAMuE,OAAOsD,GAAG,oBAAqB7H,EAAMq3B,iBAAkBr3B,GAE7DA,EAAM8K,aACC9K,CACX,CA0iBA,OA3nBA,QAAU02B,EAAS32B,GAkFnB22B,EAAQn1B,UAAU81B,iBAAmB,WAC7Bn3B,KAAK+sB,SACL/sB,KAAKiS,MAAMiC,YAEnB,EACA5O,OAAOC,eAAeixB,EAAQn1B,UAAW,sBAAuB,CAO5DmE,IAAK,WACD,OAAOxF,KAAK2L,iBAAiB,sBACjC,EAMApE,IAAK,SAAU1B,GACX7F,KAAK4L,iBAAiB,sBAAuB/F,GAAO,EACxD,EACAH,YAAY,EACZC,cAAc,IAElBL,OAAOC,eAAeixB,EAAQn1B,UAAW,gBAAiB,CAItDmE,IAAK,WACD,OAAOxF,KAAK2L,iBAAiB,gBACjC,EAeApE,IAAK,SAAU1B,GACX7F,KAAK4L,iBAAiB,gBAAiB/F,GAAO,EAClD,EACAH,YAAY,EACZC,cAAc,IAElBL,OAAOC,eAAeixB,EAAQn1B,UAAW,kBAAmB,CAIxDmE,IAAK,WACD,OAAOxF,KAAK2L,iBAAiB,kBACjC,EASApE,IAAK,SAAU1B,GACX,IAAI/F,EAAQE,KACRA,KAAK4L,iBAAiB,kBAAmB/F,GAAO,IAC5CA,IACA7F,KAAKyzB,WAAY,EACjBzzB,KAAKwQ,WAAWiC,qBAAsB,EACtCzS,KAAKiM,WAAWrJ,KAAK5C,KAAKqE,OAAOsD,GAAG,QAAQ,SAAUC,GAC9C9H,EAAMs3B,cAAgBt3B,EAAMs3B,aAAa3D,YACzC3zB,EAAMs3B,aAAaC,SAAU,EAErC,KACAr3B,KAAKiM,WAAWrJ,KAAK5C,KAAKqE,OAAOsD,GAAG,OAAO,SAAUC,GAC7C9H,EAAMs3B,cAAgBt3B,EAAMs3B,aAAa3D,YAGzC3zB,EAAMs3B,aAAaC,SAAU,EAErC,KAGZ,EACA3xB,YAAY,EACZC,cAAc,IAElBL,OAAOC,eAAeixB,EAAQn1B,UAAW,iBAAkB,CAIvDmE,IAAK,WACD,OAAOxF,KAAK2L,iBAAiB,iBACjC,EAYApE,IAAK,SAAU1B,GACX7F,KAAK4L,iBAAiB,iBAAkB/F,EAC5C,EACAH,YAAY,EACZC,cAAc,IAElBL,OAAOC,eAAeixB,EAAQn1B,UAAW,oBAAqB,CAO1DmE,IAAK,WACD,OAAOxF,KAAK2L,iBAAiB,oBACjC,EAIApE,IAAK,SAAU1B,GACX7F,KAAK4L,iBAAiB,oBAAqB/F,GAAO,EACtD,EACAH,YAAY,EACZC,cAAc,IAQlB6wB,EAAQn1B,UAAUwR,iBAAmB,WACjC,OAAO,IAAI,GACf,EACAvN,OAAOC,eAAeixB,EAAQn1B,UAAW,qBAAsB,CAI3DmE,IAAK,WACD,OAAOxF,KAAK2L,iBAAiB,qBACjC,EAoBApE,IAAK,SAAU1B,GACX7F,KAAK4L,iBAAiB,qBAAsB/F,GAAO,EACvD,EACAH,YAAY,EACZC,cAAc,IAElBL,OAAOC,eAAeixB,EAAQn1B,UAAW,oBAAqB,CAI1DmE,IAAK,WACD,OAAOxF,KAAK2L,iBAAiB,oBACjC,EAQApE,IAAK,SAAU1B,GACX7F,KAAK4L,iBAAiB,oBAAqB/F,EAC/C,EACAH,YAAY,EACZC,cAAc,IAElBL,OAAOC,eAAeixB,EAAQn1B,UAAW,kBAAmB,CAIxDmE,IAAK,WACD,OAAOxF,KAAK2L,iBAAiB,kBACjC,EAOApE,IAAK,SAAU1B,GACX7F,KAAK4L,iBAAiB,kBAAmB/F,EAC7C,EACAH,YAAY,EACZC,cAAc,IAElBL,OAAOC,eAAeixB,EAAQn1B,UAAW,OAAQ,CAI7CmE,IAAK,WACD,OAAOxF,KAAKiS,MAAM4E,IACtB,EASAtP,IAAK,SAAU1B,GACP7F,KAAKiS,MAAM4E,MAAQhR,IACnB7F,KAAKiS,MAAM4E,KAAOhR,EAClB7F,KAAKkU,aAEb,EACAxO,YAAY,EACZC,cAAc,IAElBL,OAAOC,eAAeixB,EAAQn1B,UAAW,OAAQ,CAI7CmE,IAAK,WACD,OAAOxF,KAAKiS,MAAMqE,IACtB,EASA/O,IAAK,SAAU1B,GACP7F,KAAKiS,MAAMqE,MAAQzQ,IACnB7F,KAAKiS,MAAMqE,KAAOzQ,EAClB7F,KAAKkU,aAEb,EACAxO,YAAY,EACZC,cAAc,IAOlB6wB,EAAQn1B,UAAUwJ,KAAO,WACrBhL,EAAOwB,UAAUwJ,KAAKzE,KAAKpG,MAC3B,IAAIiS,EAAQjS,KAAKiS,MACbA,EAAMqlB,SACNrlB,EAAM2B,WAEV,IAMI2jB,EACAC,EAPAp1B,EAAIpC,KAAK02B,SAASt0B,EAClBkJ,EAAItL,KAAK02B,SAASprB,EAClBmsB,EAAez3B,KAAKy2B,cACpBiB,EAAQzlB,EAAM0lB,cACdC,EAAQ3lB,EAAM4lB,eACdvV,EAAgBtiB,KAAKwQ,WAAW8R,cAOpC,GAJItiB,KAAK83B,eACLL,OAAej1B,GAGfi1B,GAAgBz3B,KAAK62B,QAAUa,EAAQD,EAAannB,MAAO,CAE3D,KAA6B,CAAElO,EAAGq1B,EAAar1B,EAAGkJ,EAAGmsB,EAAansB,GAAKtL,KAAKwS,QAC5E,IAAIyT,EAAK,KAA6B,CAAE7jB,EAAGq1B,EAAar1B,EAAIq1B,EAAannB,MAAOhF,EAAGmsB,EAAansB,EAAImsB,EAAalnB,QAAUvQ,KAAKwS,QAC5HulB,EAAgB9a,SAAS5S,KAAK2tB,YAElC,KAAY/a,SAAS5S,KAAK4tB,cACtBhS,EAAG7jB,EAAI21B,EAAgB,EACvBN,EAAar1B,EAAIq1B,EAAannB,MAAQonB,EAGtCD,EAAannB,MAAQmnB,EAAar1B,EAAIs1B,CAE9C,CACA,IAAIR,EAAqBl3B,KAAKk3B,mBAEJ,cAAtBA,GAA4D,QAAtBA,GAAsD,SAAtBA,GACtEM,GAASI,EAAQ,EAGTL,EAFkB,cAAtBL,EACIO,GAAgBr1B,EAAIq1B,EAAar1B,EAAIq1B,EAAannB,MAAQ,GACjDonB,EAAQ,EAAIpV,EAGboV,EAAQ,EAAIpV,EAGG,QAAtB4U,EACGQ,EAAQ,EAAIpV,GAGXoV,EAAQ,EAAIpV,IAKrBmV,IACAF,EAAQ,KAAiB,EAAGE,EAAar1B,EAAIA,EAAIs1B,EAAQ,EAAGD,EAAar1B,EAAIA,EAAIq1B,EAAannB,MAAQonB,EAAQ,IAExF,YAAtBR,EACIO,GAAgBnsB,EAAImsB,EAAansB,EAAIssB,EAAQtV,GAC7CkV,GAASI,EAAQtV,EACjBtiB,KAAK42B,qBAAuB,OAG5BY,EAAQlV,EACRtiB,KAAK42B,qBAAuB,QAGL,QAAtBM,GACLM,GAASI,EAAQtV,EACjBtiB,KAAK42B,qBAAuB,OAG5BY,EAAQlV,EACRtiB,KAAK42B,qBAAuB,SAGhCa,IACAD,EAAQ,KAAiBA,EAAOC,EAAansB,EAAIA,EAAGmsB,EAAansB,EAAImsB,EAAalnB,OAASqnB,EAAQtsB,IAEvG2G,EAAM7P,EAAIm1B,EACVtlB,EAAM3G,EAAIksB,EACVx3B,KAAKi3B,gBACT,EAMAT,EAAQn1B,UAAUgb,iBAAmB,WACjCrc,KAAKsY,MAAM4f,UAAUl4B,KAAKwQ,WAAW8H,MACzC,EAMAke,EAAQn1B,UAAU41B,eAAiB,WAC/B,IAAIhlB,EAAQjS,KAAKiS,MACbzB,EAAaxQ,KAAKwQ,WAClB2nB,EAAYlmB,EAAM0lB,cAClBS,EAAanmB,EAAM4lB,eACnBJ,EAAez3B,KAAKy2B,cACpB4B,EAAUF,EACVG,EAAMrmB,EAAMyf,OAASyG,EAAY,EACjCI,EAAWH,EACXI,EAAMvmB,EAAM8f,OACZ3vB,EAAIpC,KAAK02B,SAASt0B,EAClBkJ,EAAItL,KAAK02B,SAASprB,EAClBmtB,EAAUhB,EAAar1B,EAAIA,EAC3Bs2B,EAAUD,EAAUhB,EAAannB,MACjCqoB,EAAUlB,EAAansB,EAAIA,EAC3BstB,EAAUD,EAAUlB,EAAalnB,OACrCC,EAAWpO,EAAIk2B,EACf9nB,EAAWlF,EAAIktB,EACfhoB,EAAWF,MAAQ+nB,EACnB7nB,EAAWD,OAASgoB,EAChBv4B,KAAK22B,oBACLnmB,EAAW+P,SAAW,MAAkB/P,EAAWpO,EAAGq2B,EAAUjoB,EAAWpO,EAAGs2B,EAAUloB,EAAWpO,GACnGoO,EAAWgQ,SAAW,MAAkBhQ,EAAWlF,EAAGqtB,EAAUnoB,EAAWlF,EAAGstB,EAAUpoB,EAAWlF,KAGnGkF,EAAW+P,UAAY/P,EAAWpO,EAClCoO,EAAWgQ,UAAYhQ,EAAWlF,GAEtCkF,EAAWoD,UACf,EAIA4iB,EAAQn1B,UAAUw3B,eAAiB,SAAUlZ,EAAOmZ,GAChD,IAAIh5B,EAAQE,KACRA,KAAK+4B,kBACL/4B,KAAK+4B,iBAAiB/wB,UAE1BhI,KAAK+4B,iBAAmB,gBAAqB,aAAa,WACtDj5B,EAAMk5B,QAAQrZ,EAAOmZ,EACzB,IACA94B,KAAKi5B,YAAYj5B,KAAK+4B,iBAC1B,EAOAvC,EAAQn1B,UAAU23B,QAAU,SAAUrZ,EAAOmZ,GACrC94B,KAAK02B,SAASt0B,GAAKud,EAAMvd,GAAKpC,KAAK02B,SAASprB,GAAKqU,EAAMrU,IACvDtL,KAAK02B,SAAW/W,EAChB3f,KAAKkU,cAEAlU,KAAK+sB,SAAW+L,GACjB94B,KAAKyxB,OAAOzxB,KAAK02B,UACb12B,KAAKk5B,YACLl5B,KAAKk5B,WAAWC,QAKD,GAAfn5B,KAAK0xB,QAA8B,GAAf1xB,KAAK+xB,OACzB/xB,KAAKyxB,OAAOzxB,KAAK02B,WAGb12B,KAAKk5B,YACLl5B,KAAKk5B,WAAWC,OAEpBn5B,KAAKk5B,WAAa,IAAI,KAAUl5B,KAAM,CAAC,CAAE0wB,SAAU,IAAKC,GAAIhR,EAAMvd,EAAGg3B,KAAMp5B,KAAK0xB,QAAU,CAAEhB,SAAU,IAAKC,GAAIhR,EAAMrU,EAAG8tB,KAAMp5B,KAAK+xB,SAAW/xB,KAAK+uB,kBAAmB/uB,KAAKgvB,iBAAiBI,SAI5M,EAQAoH,EAAQn1B,UAAUg4B,UAAY,SAAUC,GACpC,IAAIC,EAAUv5B,KAAKy2B,cACf8C,EAAQn3B,GAAKk3B,EAAUl3B,GAAKm3B,EAAQjuB,GAAKguB,EAAUhuB,GAAKiuB,EAAQjpB,OAASgpB,EAAUhpB,OAASipB,EAAQhpB,QAAU+oB,EAAU/oB,SACxHvQ,KAAKy2B,cAAgB6C,EACrBt5B,KAAKkU,aAEb,EACA5O,OAAOC,eAAeixB,EAAQn1B,UAAW,oBAAqB,CAQ1DkG,IAAK,SAAU0hB,GACXjpB,KAAKw5B,mBAAqBvQ,EAE1BA,EAAU5kB,OAAOsD,GAAG,cAAe3H,KAAKy5B,aAAcz5B,MACtDipB,EAAU5kB,OAAOsD,GAAG,kBAAmB3H,KAAKy5B,aAAcz5B,KAC9D,EACA0F,YAAY,EACZC,cAAc,IAMlB6wB,EAAQn1B,UAAUo4B,aAAe,WAC7B,IAAIC,EAAoB15B,KAAKw5B,mBAEzBG,EAAO,KAAuB,CAC9Bv3B,EAAGs3B,EAAkBhI,OACrBpmB,EAAGouB,EAAkB3H,OACrBzhB,MAAOopB,EAAkB9hB,SACzBrH,OAAQmpB,EAAkB7hB,WAC3B6hB,GACH15B,KAAKq5B,UAAUM,EACnB,EACAr0B,OAAOC,eAAeixB,EAAQn1B,UAAW,eAAgB,CAIrDmE,IAAK,WACD,OAAOxF,KAAK2L,iBAAiB,eACjC,EAYApE,IAAK,SAAU1B,GACX7F,KAAK4L,iBAAiB,eAAgB/F,EAC1C,EACAH,YAAY,EACZC,cAAc,IAElBL,OAAOC,eAAeixB,EAAQn1B,UAAW,sBAAuB,CAQ5DmE,IAAK,WACD,OAAOxF,KAAK42B,oBAChB,EACAlxB,YAAY,EACZC,cAAc,IAElBL,OAAOC,eAAeixB,EAAQn1B,UAAW,UAAW,CAKhDmE,IAAK,WAEL,EACAE,YAAY,EACZC,cAAc,IAOlB6wB,EAAQn1B,UAAU2M,SAAW,SAAUzK,GACnC1D,EAAOwB,UAAU2M,SAAS5H,KAAKpG,KAAMuD,GACrCvD,KAAKiS,MAAMjE,SAASzK,EAAO0O,OACvB1O,EAAOkzB,gBACPz2B,KAAKy2B,cAAgBlzB,EAAOkzB,cAEpC,EAOAD,EAAQn1B,UAAUkzB,WAAa,SAAU3uB,GACrC,MAAgB,mBAATA,GAA8B/F,EAAOwB,UAAUmzB,KAAKpuB,KAAKpG,KAAM4F,EAC1E,EACO4wB,CACX,CA7nB4B,CA6nB1B,KAQF,8BAAwCA,C,qICzoBpCoD,EAA2B,SAAU/5B,GAKrC,SAAS+5B,IACL,IAAI95B,EAAQD,EAAOuG,KAAKpG,OAASA,KASjC,OARAF,EAAM6G,UAAY,YAClB7G,EAAMiT,QAAUjT,EAAMyK,MAAM7B,IAAI,QAChC5I,EAAM+5B,SAAU,QAAQ,KACxB/5B,EAAMg6B,YAAa,QAAQ,KAC3Bh6B,EAAMi6B,UAAW,QAAQ,KACzBj6B,EAAMk6B,WAAY,QAAQ,KAC1Bl6B,EAAMkM,YAAa,EACnBlM,EAAM8K,aACC9K,CACX,CAqKA,OApLA,QAAU85B,EAAW/5B,GAqBrB+5B,EAAUv4B,UAAUwJ,KAAO,WACvBhL,EAAOwB,UAAUwJ,KAAKzE,KAAKpG,MAC3B,IAAIiL,EAAIjL,KAAK6T,WACT1I,EAAInL,KAAK8T,YACTmmB,EAAK,KAAuBj6B,KAAK65B,QAAS5uB,GAC1CivB,EAAK,KAAuBl6B,KAAK85B,WAAY7uB,GAC7CkvB,EAAK,KAAuBn6B,KAAK+5B,SAAU5uB,GAC3CivB,EAAK,KAAuBp6B,KAAKg6B,UAAW7uB,GAI5CkvB,GAAMpvB,EAAIgvB,GAAM,EAChBK,GAAMnvB,EAAIgvB,GAAM,EAChBhb,EAAKlU,GAAKA,EAAIgvB,GAAM,EACpB7a,GAAMjU,EAAIivB,GAAM,EAChB/a,EAAKpU,GAAKA,EAAIivB,GAAM,EACpB5a,EAAKnU,GAAKA,EAAIivB,GAAM,EACpBG,GAAMtvB,EAAIivB,GAAM,EAChBM,EAAKrvB,GAAKA,EAAIgvB,GAAM,EACpBM,EAAK,GACLC,EAAK,GACLC,EAAK,GACLC,EAAK,GACT,GAAI,KAAe56B,KAAK66B,gBAAiB,CACrC,IAAIC,EAAK96B,KAAK66B,eAAeh1B,MAC7B40B,EAAK,KAAa,CAAEr4B,EAAG6I,EAAI6vB,EAAIxvB,EAAGgE,KAAKqjB,IAAI2H,EAAIlb,KAC/Cub,EAAK,KAAa,CAAEv4B,EAAG6I,EAAI6vB,EAAIxvB,EAAGgE,KAAKgjB,IAAIhT,EAAIkb,IACnD,CACA,GAAI,KAAex6B,KAAK+6B,cAAe,CACnC,IAAIC,EAAKh7B,KAAK+6B,aAAal1B,MAC3B60B,EAAK,KAAa,CAAEt4B,EAAGkN,KAAKgjB,IAAInT,EAAIE,GAAK/T,EAAGH,EAAI6vB,IAChDJ,EAAK,KAAa,CAAEx4B,EAAGkN,KAAKqjB,IAAI0H,EAAIE,GAAKjvB,EAAGH,EAAI6vB,GACpD,CACA,IAAIvvB,EAAO,KAAa,CAAErJ,EAAGi4B,EAAI/uB,EAAGgvB,IAC9BG,EACA,KAAa,CAAEr4B,EAAG+c,EAAI7T,EAAG8T,IACzBsb,EACA,KAAa,CAAEt4B,EAAGid,EAAI/T,EAAGgU,IACzBqb,EACA,KAAa,CAAEv4B,EAAGm4B,EAAIjvB,EAAGkvB,IACzBI,EACN56B,KAAKyL,KAAOA,CAChB,EACAnG,OAAOC,eAAeq0B,EAAUv4B,UAAW,UAAW,CAIlDmE,IAAK,WACD,OAAOxF,KAAK2L,iBAAiB,UACjC,EAOApE,IAAK,SAAU1B,GACX7F,KAAKgT,mBAAmB,UAAWnN,GAAO,GAAM,EAAO,IAAI,EAC/D,EACAH,YAAY,EACZC,cAAc,IAElBL,OAAOC,eAAeq0B,EAAUv4B,UAAW,aAAc,CAIrDmE,IAAK,WACD,OAAOxF,KAAK2L,iBAAiB,aACjC,EAOApE,IAAK,SAAU1B,GACX7F,KAAKgT,mBAAmB,aAAcnN,GAAO,GAAM,EAAO,IAAI,EAClE,EACAH,YAAY,EACZC,cAAc,IAElBL,OAAOC,eAAeq0B,EAAUv4B,UAAW,WAAY,CAInDmE,IAAK,WACD,OAAOxF,KAAK2L,iBAAiB,WACjC,EAOApE,IAAK,SAAU1B,GACX7F,KAAKgT,mBAAmB,WAAYnN,GAAO,GAAM,EAAO,IAAI,EAChE,EACAH,YAAY,EACZC,cAAc,IAElBL,OAAOC,eAAeq0B,EAAUv4B,UAAW,YAAa,CAIpDmE,IAAK,WACD,OAAOxF,KAAK2L,iBAAiB,YACjC,EAOApE,IAAK,SAAU1B,GACX7F,KAAKgT,mBAAmB,YAAanN,GAAO,GAAM,EAAO,IAAI,EACjE,EACAH,YAAY,EACZC,cAAc,IAElBL,OAAOC,eAAeq0B,EAAUv4B,UAAW,iBAAkB,CAIzDmE,IAAK,WACD,OAAOxF,KAAK2L,iBAAiB,iBACjC,EAQApE,IAAK,SAAU1B,GACX7F,KAAK4L,iBAAiB,iBAAkB/F,GAAO,EACnD,EACAH,YAAY,EACZC,cAAc,IAElBL,OAAOC,eAAeq0B,EAAUv4B,UAAW,eAAgB,CAIvDmE,IAAK,WACD,OAAOxF,KAAK2L,iBAAiB,eACjC,EAQApE,IAAK,SAAU1B,GACX7F,KAAK4L,iBAAiB,eAAgB/F,GAAO,EACjD,EACAH,YAAY,EACZC,cAAc,IAEXi0B,CACX,CAtL8B,CAsL5B,MAQF,gCAA0CA,C,wGCjMtCqB,EAA0B,SAAUp7B,GAKpC,SAASo7B,IACL,IAAIn7B,EAAQD,EAAOuG,KAAKpG,OAASA,KAKjC,OAJAF,EAAM6G,UAAY,WAClB7G,EAAMiT,QAAUjT,EAAMyK,MAAM7B,IAAI,QAChC5I,EAAMwd,UAAY,MAClBxd,EAAM8K,aACC9K,CACX,CA2DA,OAtEA,QAAUm7B,EAAUp7B,GAiBpBo7B,EAAS55B,UAAUwJ,KAAO,WACtBhL,EAAOwB,UAAUwJ,KAAKzE,KAAKpG,MAC3B,IAEIyL,EAFAR,EAAIjL,KAAK6T,WACT1I,EAAInL,KAAK8T,YAEb,OAAQ9T,KAAKsd,WACT,IAAK,QACD7R,EAAO,KAAa,CAAErJ,EAAG,EAAGkJ,EAAG,IACzB,KAAa,CAAElJ,EAAG6I,EAAGK,EAAGH,EAAI,IAC5B,KAAa,CAAE/I,EAAG,EAAGkJ,EAAGH,IACxB,OACN,MACJ,IAAK,OACDM,EAAO,KAAa,CAAErJ,EAAG6I,EAAGK,EAAG,IACzB,KAAa,CAAElJ,EAAG,EAAGkJ,EAAGH,EAAI,IAC5B,KAAa,CAAE/I,EAAG6I,EAAGK,EAAGH,IACxB,OACN,MACJ,IAAK,SACDM,EAAO,KAAa,CAAErJ,EAAG,EAAGkJ,EAAG,IACzB,KAAa,CAAElJ,EAAG6I,EAAGK,EAAG,IACxB,KAAa,CAAElJ,EAAG6I,EAAI,EAAGK,EAAGH,IAC5B,OACN,MACJ,IAAK,MACDM,EAAO,KAAa,CAAErJ,EAAG6I,EAAI,EAAGK,EAAG,IAC7B,KAAa,CAAElJ,EAAG6I,EAAGK,EAAGH,IACxB,KAAa,CAAE/I,EAAG,EAAGkJ,EAAGH,IACxB,OACN,MAERnL,KAAKyL,KAAOA,CAChB,EACAnG,OAAOC,eAAe01B,EAAS55B,UAAW,YAAa,CAMnDmE,IAAK,WACD,OAAOxF,KAAK2L,iBAAiB,YACjC,EAMApE,IAAK,SAAU1B,GACX7F,KAAK4L,iBAAiB,YAAa/F,GAAO,EAC9C,EACAH,YAAY,EACZC,cAAc,IAEXs1B,CACX,CAxE6B,CAwE3B,MAQF,+BAAyCA,C,wIC7ErCC,EAA6B,SAAUr7B,GAKvC,SAASq7B,IACL,IAAIp7B,EAAQD,EAAOuG,KAAKpG,OAASA,KASjC,OARAF,EAAM6G,UAAY,cAClB7G,EAAMiT,QAAUjT,EAAMyK,MAAM7B,IAAI,QAChC5I,EAAMq7B,WAAa,GACnBr7B,EAAMs7B,WAAa,EACnBt7B,EAAM2J,UAAOjH,EACb1C,EAAM0J,YAAc,EACpB1J,EAAMu7B,QAAU,GAChBv7B,EAAM8K,aACC9K,CACX,CAuIA,OAtJA,QAAUo7B,EAAar7B,GAqBvBq7B,EAAY75B,UAAUwJ,KAAO,WACzB,IAAIY,EAAO,GACP1B,EAAS/J,KAAKkT,YAClB,GAAInJ,EAAS,EAAG,CACZ,IAAI8Y,EAAS7iB,KAAKs7B,UAAUvxB,GAC5B0B,EAAO,KAAaoX,EAAO,IAAM,IAAI,KAAmB7iB,KAAKq7B,QAASr7B,KAAKq7B,SAASE,OAAO1Y,EAC/F,CACA,IAAIjU,EAAc5O,KAAK6O,iBACvB,GAAID,EAAc,EAAG,CACbiU,EAAS7iB,KAAKs7B,UAAU1sB,GAC5BiU,EAAOxiB,UACPoL,GAAQ,KAAaoX,EAAO,IAAM,IAAI,KAAmB7iB,KAAKq7B,QAASr7B,KAAKq7B,SAASE,OAAO1Y,EAChG,CACA7iB,KAAKyL,KAAOA,CAChB,EAOAyvB,EAAY75B,UAAUi6B,UAAY,SAAUvxB,GAOxC,IANA,IAAIyxB,EAAezxB,EAASuF,KAAKmsB,GAAK,EAClCC,EAAiB17B,KAAKo7B,WAAa,EACnCD,EAAaK,EAAelsB,KAAK0a,MAAMwR,EAAex7B,KAAKm7B,YAC3DQ,EAAiBR,EAAa,EAC9BtY,EAAS,GACTxT,EAAQmsB,EAAeL,EAClB/5B,EAAI,EAAGA,GAAKiO,EAAOjO,IAAK,CAC7B,IAAIw6B,EAAUx6B,EAAI+5B,EAAcK,EAAe,IAC3CK,GAAUz6B,EAAI+5B,EAAaQ,GAAkBH,EAAe,IAChE3Y,EAAOjgB,KAAK,CAAER,GAAI2H,EAAS2xB,GAAkB,KAAUE,GAAStwB,GAAIvB,EAAS2xB,GAAkB,KAAUE,KACzG/Y,EAAOjgB,KAAK,CAAER,GAAI2H,EAAS2xB,GAAkB,KAAUG,GAASvwB,GAAIvB,EAAS2xB,GAAkB,KAAUG,IAC7G,CAEA,OADAhZ,EAAOvgB,MACAugB,CACX,EACAvd,OAAOC,eAAe21B,EAAY75B,UAAW,cAAe,CAIxDmE,IAAK,WACD,OAAOxF,KAAK2L,iBAAiB,cACjC,EAMApE,IAAK,SAAU1B,GACX7F,KAAKgT,mBAAmB,cAAenN,GAAO,GAAM,EAAO,IAAI,GAC/D7F,KAAKkU,YACT,EACAxO,YAAY,EACZC,cAAc,IAElBL,OAAOC,eAAe21B,EAAY75B,UAAW,mBAAoB,CAO7DmE,IAAK,WACD,OAAO,KAAuBxF,KAAK4O,YAAa,KAAU5O,KAAKkL,WAAa,EAAGlL,KAAKoL,YAAc,GACtG,EACA1F,YAAY,EACZC,cAAc,IAElBL,OAAOC,eAAe21B,EAAY75B,UAAW,aAAc,CAIvDmE,IAAK,WACD,OAAOxF,KAAK2L,iBAAiB,aACjC,EAOApE,IAAK,SAAU1B,GACX7F,KAAK4L,iBAAiB,aAAc/F,GACpC7F,KAAKkU,YACT,EACAxO,YAAY,EACZC,cAAc,IAElBL,OAAOC,eAAe21B,EAAY75B,UAAW,aAAc,CAIvDmE,IAAK,WACD,OAAOxF,KAAK2L,iBAAiB,aACjC,EAOApE,IAAK,SAAU1B,GACX7F,KAAK4L,iBAAiB,aAAc/F,GACpC7F,KAAKkU,YACT,EACAxO,YAAY,EACZC,cAAc,IAElBL,OAAOC,eAAe21B,EAAY75B,UAAW,UAAW,CAIpDmE,IAAK,WACD,OAAOxF,KAAK2L,iBAAiB,UACjC,EAOApE,IAAK,SAAU1B,GACX7F,KAAK4L,iBAAiB,UAAW/F,GACjC7F,KAAKkU,YACT,EACAxO,YAAY,EACZC,cAAc,IAEXu1B,CACX,CAxJgC,CAwJ9B,EAAA/mB,GAQF,kCAA4C+mB,C,mHClKxCY,EAA2B,SAAUj8B,GAKrC,SAASi8B,IACL,IAAIh8B,EAAQD,EAAOuG,KAAKpG,OAASA,KASjC,OARAF,EAAM6G,UAAY,YAClB7G,EAAMiT,QAAUjT,EAAMyK,MAAM7B,IAAI,QAChC5I,EAAMq7B,WAAa,GACnBr7B,EAAMs7B,WAAa,EACnBt7B,EAAMu7B,QAAU,GAChBv7B,EAAMyU,cAAe,EACrBzU,EAAM2J,MAAO,UACb3J,EAAM8K,aACC9K,CACX,CAwEA,OAvFA,QAAUg8B,EAAWj8B,GAqBrBi8B,EAAUz6B,UAAUwJ,KAAO,WAEvB,IAAIob,EAAK,CAAE7jB,EAAGpC,KAAKmf,GAAI7T,EAAGtL,KAAKof,IAC3B8G,EAAK,CAAE9jB,EAAGpC,KAAKqf,GAAI/T,EAAGtL,KAAKsf,IAC/Btf,KAAKyL,KAAO,KAAawa,IAAM,QAAUA,EAAIC,EAAIlmB,KAAKm7B,WAAYn7B,KAAKo7B,WAAYp7B,KAAKq7B,SAAS,EACrG,EACA/1B,OAAOC,eAAeu2B,EAAUz6B,UAAW,aAAc,CAIrDmE,IAAK,WACD,OAAOxF,KAAK2L,iBAAiB,aACjC,EAOApE,IAAK,SAAU1B,GACX7F,KAAK4L,iBAAiB,aAAc/F,GACpC7F,KAAKkU,YACT,EACAxO,YAAY,EACZC,cAAc,IAElBL,OAAOC,eAAeu2B,EAAUz6B,UAAW,aAAc,CAIrDmE,IAAK,WACD,OAAOxF,KAAK2L,iBAAiB,aACjC,EAOApE,IAAK,SAAU1B,GACX7F,KAAK4L,iBAAiB,aAAc/F,GACpC7F,KAAKkU,YACT,EACAxO,YAAY,EACZC,cAAc,IAElBL,OAAOC,eAAeu2B,EAAUz6B,UAAW,UAAW,CAIlDmE,IAAK,WACD,OAAOxF,KAAK2L,iBAAiB,UACjC,EAOApE,IAAK,SAAU1B,GACX7F,KAAK4L,iBAAiB,UAAW/F,GACjC7F,KAAKkU,YACT,EACAxO,YAAY,EACZC,cAAc,IAEXm2B,CACX,CAzF8B,CAyF5B,I,wGC1FEC,EAAgC,SAAUl8B,GAK1C,SAASk8B,IACL,IAAIj8B,EAEJD,EAAOuG,KAAKpG,OAASA,KAcrB,OAbAF,EAAM6G,UAAY,iBAElB7G,EAAMiT,QAAUjT,EAAMyK,MAAM7B,IAAI,QAEhC5I,EAAMq7B,WAAa,GACnBr7B,EAAMs7B,WAAa,EACnBt7B,EAAMu7B,QAAU,GAChBv7B,EAAM8L,iBAAiB,aAAa,GACpC9L,EAAM8L,iBAAiB,cAAc,GACrC9L,EAAM8L,iBAAiB,YAAY,GACnC9L,EAAM8L,iBAAiB,eAAe,GAEtC9L,EAAM8K,aACC9K,CACX,CA6LA,OAnNA,QAAUi8B,EAAgBl8B,GA4B1Bk8B,EAAe16B,UAAUwJ,KAAO,WAC5BhL,EAAOwB,UAAUwJ,KAAKzE,KAAKpG,MAC3B,IAAIiL,EAAIjL,KAAK6T,WACT1I,EAAInL,KAAK8T,YACb,GAAI7I,EAAI,GAAKE,EAAI,EAAG,CAChB,IAAI8a,EAAK,CAAE7jB,EAAG,EAAGkJ,EAAG,GAChB4a,EAAK,CAAE9jB,EAAG6I,EAAGK,EAAG,GAChB6a,EAAK,CAAE/jB,EAAG6I,EAAGK,EAAGH,GAChB6wB,EAAK,CAAE55B,EAAG,EAAGkJ,EAAGH,GAChB8wB,EAAc3sB,KAAKgjB,IAAIrnB,EAAGjL,KAAKm7B,YAC/Be,EAAc5sB,KAAKgjB,IAAInnB,EAAGnL,KAAKo7B,YAC/Be,EAAc7sB,KAAKgjB,IAAInnB,EAAGnL,KAAKm7B,YAC/BiB,EAAc9sB,KAAKgjB,IAAIrnB,EAAGjL,KAAKo7B,YAC/BiB,EAAK,GACLC,EAAK,GACLC,EAAK,GACLC,EAAK,GACLx8B,KAAKy8B,WACLJ,GAAK,QAAUpW,EAAIC,EAAI+V,EAAaC,EAAal8B,KAAKq7B,SAAS,IAE/Dr7B,KAAK08B,aACLJ,GAAK,QAAUpW,EAAIC,EAAIgW,EAAaC,EAAap8B,KAAKq7B,SAAS,IAE/Dr7B,KAAK28B,cACLJ,GAAK,QAAUpW,EAAI6V,EAAIC,EAAaC,EAAal8B,KAAKq7B,SAAS,IAE/Dr7B,KAAK48B,YACLJ,GAAK,QAAUR,EAAI/V,EAAIkW,EAAaC,EAAap8B,KAAKq7B,SAAS,IAEnEr7B,KAAKyL,KAAO,KAAawa,GAAMoW,EAAK,KAAanW,GAAMoW,EAAK,KAAanW,GAAMoW,EAAK,KAAaP,GAAMQ,EAAK,GAChH,CACJ,EACAl3B,OAAOC,eAAew2B,EAAe16B,UAAW,aAAc,CAI1DmE,IAAK,WACD,OAAOxF,KAAK2L,iBAAiB,aACjC,EAOApE,IAAK,SAAU1B,GACX7F,KAAK4L,iBAAiB,aAAc/F,GACpC7F,KAAKkU,YACT,EACAxO,YAAY,EACZC,cAAc,IAElBL,OAAOC,eAAew2B,EAAe16B,UAAW,aAAc,CAI1DmE,IAAK,WACD,OAAOxF,KAAK2L,iBAAiB,aACjC,EAOApE,IAAK,SAAU1B,GACX7F,KAAK4L,iBAAiB,aAAc/F,GACpC7F,KAAKkU,YACT,EACAxO,YAAY,EACZC,cAAc,IAWlBo2B,EAAe16B,UAAUw7B,cAAgB,SAAU5yB,EAAK2a,EAAOxa,EAAQua,GACnE3kB,KAAKy8B,SAAWxyB,EAChBjK,KAAK08B,WAAa9X,EAClB5kB,KAAK28B,YAAcvyB,EACnBpK,KAAK48B,UAAYjY,CACrB,EACArf,OAAOC,eAAew2B,EAAe16B,UAAW,UAAW,CAIvDmE,IAAK,WACD,OAAOxF,KAAK2L,iBAAiB,UACjC,EAOApE,IAAK,SAAU1B,GACX7F,KAAK4L,iBAAiB,UAAW/F,GACjC7F,KAAKkU,YACT,EACAxO,YAAY,EACZC,cAAc,IAElBL,OAAOC,eAAew2B,EAAe16B,UAAW,aAAc,CAI1DmE,IAAK,WACD,OAAOxF,KAAK2L,iBAAiB,aACjC,EAOApE,IAAK,SAAU1B,GACX7F,KAAK4L,iBAAiB,aAAc/F,GAAO,EAC/C,EACAH,YAAY,EACZC,cAAc,IAElBL,OAAOC,eAAew2B,EAAe16B,UAAW,YAAa,CAIzDmE,IAAK,WACD,OAAOxF,KAAK2L,iBAAiB,YACjC,EAOApE,IAAK,SAAU1B,GACX7F,KAAK4L,iBAAiB,YAAa/F,GAAO,EAC9C,EACAH,YAAY,EACZC,cAAc,IAElBL,OAAOC,eAAew2B,EAAe16B,UAAW,WAAY,CAIxDmE,IAAK,WACD,OAAOxF,KAAK2L,iBAAiB,WACjC,EAOApE,IAAK,SAAU1B,GACX7F,KAAK4L,iBAAiB,WAAY/F,GAAO,EAC7C,EACAH,YAAY,EACZC,cAAc,IAElBL,OAAOC,eAAew2B,EAAe16B,UAAW,cAAe,CAI3DmE,IAAK,WACD,OAAOxF,KAAK2L,iBAAiB,cACjC,EAOApE,IAAK,SAAU1B,GACX7F,KAAK4L,iBAAiB,cAAe/F,GAAO,EAChD,EACAH,YAAY,EACZC,cAAc,IAEXo2B,CACX,CArNmC,CAqNjC,I,wIClNEe,EAA+B,SAAUj9B,GAKzC,SAASi9B,IACL,IAAIh9B,EAEJD,EAAOuG,KAAKpG,OAASA,KACrBF,EAAM6G,UAAY,gBAClB7G,EAAMgS,QAAQ,EAAG,EAAG,EAAG,GAGvBhS,EAAMsQ,mBAAoB,EAC1B,IAAI4B,EAAkB,IAAI,IACtBxB,EAAa1Q,EAAM0Q,WACvBA,EAAWjC,aAAa,GAAI,GAAI,GAAI,IACpCiC,EAAW/G,KAAOuI,EAAgBtB,OAAO,iBACzCF,EAAW9G,OAASsI,EAAgBtB,OAAO,uBAC3CF,EAAWlH,cAAgB,EAC3BkH,EAAWe,OAAOmC,OAAO,SAASxD,WAAWzG,KAAOuI,EAAgBtB,OAAO,sBAC3EF,EAAWe,OAAOmC,OAAO,QAAQxD,WAAWzG,KAAOuI,EAAgBtB,OAAO,uBAE1E,IAAI4B,EAAO,IAAI,KACfA,EAAKS,QAAUjT,EAAMyK,MAAM7B,IAAI,QAC/B,IAAI+C,EAAO,KAAa,CAAErJ,EAAG,EAAGkJ,EAAG,IASnC,OARAG,GAAQ,KAAa,CAAErJ,EAAG,GAAIkJ,EAAG,IACjCgH,EAAK7G,KAAOA,EACZ6G,EAAKiC,cAAe,EACpBjC,EAAKR,QAAQ,EAAG,EAAG,EAAG,GACtBQ,EAAK5I,OAASsI,EAAgBtB,OAAO,qBACrC5Q,EAAMwS,KAAOA,EAEbxS,EAAM8K,aACC9K,CACX,CAWA,OA7CA,QAAUg9B,EAAej9B,GAuCzBi9B,EAAcz7B,UAAU2S,sBAAwB,WAC5CnU,EAAOwB,UAAU2S,sBAAsB5N,KAAKpG,MACvC,KAAeA,KAAKqQ,eACrBrQ,KAAKqQ,YAAcrQ,KAAK4E,SAASC,UAAU,YAEnD,EACOi4B,CACX,CA/CkC,CA+ChC,KAQF,oCAA8CA,C","sources":["webpack://rokk3rfuel/./node_modules/@amcharts/amcharts4/.internal/core/data/CSVParser.js","webpack://rokk3rfuel/./node_modules/@amcharts/amcharts4/.internal/core/data/DataLoader.js","webpack://rokk3rfuel/./node_modules/@amcharts/amcharts4/.internal/core/data/DataParser.js","webpack://rokk3rfuel/./node_modules/@amcharts/amcharts4/.internal/core/data/DataSource.js","webpack://rokk3rfuel/./node_modules/@amcharts/amcharts4/.internal/core/data/JSONParser.js","webpack://rokk3rfuel/./node_modules/@amcharts/amcharts4/.internal/core/defs/SVGDefaults.js","webpack://rokk3rfuel/./node_modules/@amcharts/amcharts4/.internal/core/elements/3d/Cone.js","webpack://rokk3rfuel/./node_modules/@amcharts/amcharts4/.internal/core/elements/3d/Rectangle3D.js","webpack://rokk3rfuel/./node_modules/@amcharts/amcharts4/.internal/core/elements/3d/Slice3D.js","webpack://rokk3rfuel/./node_modules/@amcharts/amcharts4/.internal/core/elements/AmChartsLogo.js","webpack://rokk3rfuel/./node_modules/@amcharts/amcharts4/.internal/core/elements/Button.js","webpack://rokk3rfuel/./node_modules/@amcharts/amcharts4/.internal/core/elements/Circle.js","webpack://rokk3rfuel/./node_modules/@amcharts/amcharts4/.internal/core/elements/CloseButton.js","webpack://rokk3rfuel/./node_modules/@amcharts/amcharts4/.internal/core/elements/Ellipse.js","webpack://rokk3rfuel/./node_modules/@amcharts/amcharts4/.internal/core/elements/Grip.js","webpack://rokk3rfuel/./node_modules/@amcharts/amcharts4/.internal/core/elements/Image.js","webpack://rokk3rfuel/./node_modules/@amcharts/amcharts4/.internal/core/elements/Label.js","webpack://rokk3rfuel/./node_modules/@amcharts/amcharts4/.internal/core/elements/Line.js","webpack://rokk3rfuel/./node_modules/@amcharts/amcharts4/.internal/core/elements/Modal.js","webpack://rokk3rfuel/./node_modules/@amcharts/amcharts4/.internal/core/elements/PlayButton.js","webpack://rokk3rfuel/./node_modules/@amcharts/amcharts4/.internal/core/elements/PointedRectangle.js","webpack://rokk3rfuel/./node_modules/@amcharts/amcharts4/.internal/core/elements/PointedShape.js","webpack://rokk3rfuel/./node_modules/@amcharts/amcharts4/.internal/core/elements/Polyarc.js","webpack://rokk3rfuel/./node_modules/@amcharts/amcharts4/.internal/core/elements/Polygon.js","webpack://rokk3rfuel/./node_modules/@amcharts/amcharts4/.internal/core/elements/Polyline.js","webpack://rokk3rfuel/./node_modules/@amcharts/amcharts4/.internal/core/elements/Polyspline.js","webpack://rokk3rfuel/./node_modules/@amcharts/amcharts4/.internal/core/elements/PopupCSS.js","webpack://rokk3rfuel/./node_modules/@amcharts/amcharts4/.internal/core/elements/Popup.js","webpack://rokk3rfuel/./node_modules/@amcharts/amcharts4/.internal/core/elements/Preloader.js","webpack://rokk3rfuel/./node_modules/@amcharts/amcharts4/.internal/core/elements/QuadraticCurve.js","webpack://rokk3rfuel/./node_modules/@amcharts/amcharts4/.internal/core/elements/Rectangle.js","webpack://rokk3rfuel/./node_modules/@amcharts/amcharts4/.internal/core/elements/ResizeButton.js","webpack://rokk3rfuel/./node_modules/@amcharts/amcharts4/.internal/core/elements/RoundedRectangle.js","webpack://rokk3rfuel/./node_modules/@amcharts/amcharts4/.internal/core/elements/Scrollbar.js","webpack://rokk3rfuel/./node_modules/@amcharts/amcharts4/.internal/core/elements/Slice.js","webpack://rokk3rfuel/./node_modules/@amcharts/amcharts4/.internal/core/elements/Slider.js","webpack://rokk3rfuel/./node_modules/@amcharts/amcharts4/.internal/core/elements/SwitchButton.js","webpack://rokk3rfuel/./node_modules/@amcharts/amcharts4/.internal/core/elements/TextLink.js","webpack://rokk3rfuel/./node_modules/@amcharts/amcharts4/.internal/core/elements/Tooltip.js","webpack://rokk3rfuel/./node_modules/@amcharts/amcharts4/.internal/core/elements/Trapezoid.js","webpack://rokk3rfuel/./node_modules/@amcharts/amcharts4/.internal/core/elements/Triangle.js","webpack://rokk3rfuel/./node_modules/@amcharts/amcharts4/.internal/core/elements/WavedCircle.js","webpack://rokk3rfuel/./node_modules/@amcharts/amcharts4/.internal/core/elements/WavedLine.js","webpack://rokk3rfuel/./node_modules/@amcharts/amcharts4/.internal/core/elements/WavedRectangle.js","webpack://rokk3rfuel/./node_modules/@amcharts/amcharts4/.internal/core/elements/ZoomOutButton.js"],"sourcesContent":["/**\r\n * CSV parser.\r\n */\r\nimport { __extends } from \"tslib\";\r\n/**\r\n * ============================================================================\r\n * IMPORTS\r\n * ============================================================================\r\n * @hidden\r\n */\r\nimport { DataParser } from \"./DataParser\";\r\nimport * as $type from \"../utils/Type\";\r\nimport * as $array from \"../utils/Array\";\r\n/**\r\n * Define possible separators.\r\n */\r\nvar separators = [\",\", \";\", \"\\t\"];\r\n/**\r\n * A parser for CSV format.\r\n *\r\n * @important\r\n */\r\nvar CSVParser = /** @class */ (function (_super) {\r\n __extends(CSVParser, _super);\r\n function CSVParser() {\r\n var _this = _super !== null && _super.apply(this, arguments) || this;\r\n /**\r\n * Content-type suitable for CSV format.\r\n */\r\n _this.contentType = \"text/csv\";\r\n /**\r\n * Parser options.\r\n *\r\n * @see {@link ICSVOptions} for description of each option\r\n */\r\n _this.options = {\r\n delimiter: \"\",\r\n reverse: false,\r\n skipRows: 0,\r\n skipEmpty: true,\r\n useColumnNames: false\r\n };\r\n return _this;\r\n }\r\n /**\r\n * Tests if the format is CSV.\r\n *\r\n * @param data Source data\r\n * @return Is it CSV?\r\n */\r\n CSVParser.isCSV = function (data) {\r\n return CSVParser.getDelimiterFromData(data) ? true : false;\r\n };\r\n /**\r\n * Tries to determine a column separator.\r\n *\r\n * @param data Source data\r\n * @return Separator\r\n */\r\n CSVParser.getDelimiterFromData = function (data) {\r\n // We're going to take first few lines of the CSV with different\r\n // possible separators and check if it results in same number of columns.\r\n // If it does, we're going to assume it's a CSV\r\n var lines = data.split(\"\\n\");\r\n var len = lines.length;\r\n var separator;\r\n $array.each(separators, function (sep) {\r\n var columns = 0, lineColums = 0;\r\n // TODO replace with iterators\r\n for (var i = 0; i < len; ++i) {\r\n // Get number of columns in a line\r\n columns = lines[i].split(sep).length;\r\n if (columns > 1) {\r\n // More than one column - possible candidate\r\n if (lineColums === 0) {\r\n // First line\r\n lineColums = columns;\r\n }\r\n else if (columns != lineColums) {\r\n // Incorrect number of columns, give up on this separator\r\n lineColums = 0;\r\n break;\r\n }\r\n }\r\n else {\r\n // Not this separator\r\n // Not point in continuing\r\n lineColums = 0;\r\n break;\r\n }\r\n }\r\n // Check if we have a winner\r\n if (lineColums) {\r\n separator = sep;\r\n }\r\n });\r\n return separator;\r\n };\r\n /**\r\n * Parses and returns data.\r\n *\r\n * @param data Unparsed data\r\n * @return Parsed data\r\n */\r\n CSVParser.prototype.parse = function (csv) {\r\n // Check if we have delimiter set\r\n if (!this.options.delimiter) {\r\n this.options.delimiter = CSVParser.getDelimiterFromData(csv);\r\n }\r\n // Get CSV data as array\r\n var data = this.CSVToArray(csv, this.options.delimiter);\r\n // Do we need to cast some fields to numbers?\r\n var empty = $type.hasValue(this.options.emptyAs);\r\n var numbers = this.parsableNumbers;\r\n var dates = this.parsableDates;\r\n // Init resuling array\r\n var res = [], cols = [], col, i;\r\n // Skip rows\r\n for (i = 0; i < this.options.skipRows; i++) {\r\n data.shift();\r\n }\r\n // First row holds column names?\r\n if (this.options.useColumnNames) {\r\n cols = data.shift();\r\n // Normalize column names\r\n for (var x = 0; x < cols.length; x++) {\r\n // trim\r\n col = $type.hasValue(cols[x]) ? cols[x].replace(/^\\s+|\\s+$/gm, \"\") : \"\";\r\n // Check for empty\r\n if (\"\" === col) {\r\n col = \"col\" + x;\r\n }\r\n cols[x] = col;\r\n }\r\n }\r\n // Iterate through the result set\r\n var row;\r\n while (true) {\r\n row = this.options.reverse ? data.pop() : data.shift();\r\n if (!row) {\r\n break;\r\n }\r\n if (this.options.skipEmpty && row.length === 1 && row[0] === \"\") {\r\n continue;\r\n }\r\n var dataPoint = {};\r\n for (i = 0; i < row.length; i++) {\r\n col = undefined === cols[i] ? \"col\" + i : cols[i];\r\n dataPoint[col] = row[i] === \"\" ? this.options.emptyAs : row[i];\r\n // Convert\r\n if (empty) {\r\n dataPoint[col] = this.maybeToEmpty(dataPoint[col]);\r\n }\r\n if (numbers) {\r\n dataPoint[col] = this.maybeToNumber(col, dataPoint[col]);\r\n }\r\n if (dates) {\r\n dataPoint[col] = this.maybeToDate(col, dataPoint[col]);\r\n }\r\n }\r\n res.push(dataPoint);\r\n }\r\n return res;\r\n };\r\n /**\r\n * Converts CSV into array.\r\n *\r\n * The functionality of this function is taken from here:\r\n * http://www.bennadel.com/blog/1504-ask-ben-parsing-csv-strings-with-javascript-exec-regular-expression-command.htm\r\n *\r\n * @param data Source data\r\n * @param delimiter Column delimiter\r\n * @return Parsed array\r\n */\r\n CSVParser.prototype.CSVToArray = function (data, delimiter) {\r\n // Check to see if the delimiter is defined. If not,\r\n // then default to comma.\r\n delimiter = (delimiter || ',');\r\n // Create a regular expression to parse the CSV values.\r\n var objPattern = new RegExp((\r\n // Delimiters.\r\n \"(\\\\\" + delimiter + \"|\\\\r?\\\\n|\\\\r|^)\" +\r\n // Quoted fields.\r\n \"(?:\\\"([^\\\"]*(?:\\\"\\\"[^\\\"]*)*)\\\"|\" +\r\n // Standard fields.\r\n \"([^\\\"\\\\\" + delimiter + \"\\\\r\\\\n]*))\"), \"gi\");\r\n // Create an array to hold our data. Give the array\r\n // a default empty first row.\r\n var arrData = [\r\n []\r\n ];\r\n // Create an array to hold our individual pattern\r\n // matching groups.\r\n var arrMatches = null;\r\n // Keep looping over the regular expression matches\r\n // until we can no longer find a match.\r\n while (true) {\r\n arrMatches = objPattern.exec(data);\r\n if (!arrMatches) {\r\n break;\r\n }\r\n // Get the delimiter that was found.\r\n var strMatchedDelimiter = arrMatches[1];\r\n // Check to see if the given delimiter has a length\r\n // (is not the start of string) and if it matches\r\n // field delimiter. If id does not, then we know\r\n // that this delimiter is a row delimiter.\r\n if (strMatchedDelimiter.length &&\r\n (strMatchedDelimiter !== delimiter)) {\r\n // Since we have reached a new row of data,\r\n // add an empty row to our data array.\r\n arrData.push([]);\r\n }\r\n // Now that we have our delimiter out of the way,\r\n // let's check to see which kind of value we\r\n // captured (quoted or unquoted).\r\n var strMatchedValue = void 0;\r\n if (arrMatches[2]) {\r\n // We found a quoted value. When we capture\r\n // this value, unescape any double quotes.\r\n strMatchedValue = arrMatches[2].replace(new RegExp(\"\\\"\\\"\", \"g\"), \"\\\"\");\r\n }\r\n else {\r\n // We found a non-quoted value.\r\n strMatchedValue = arrMatches[3];\r\n }\r\n // Now that we have our value string, let's add\r\n // it to the data array.\r\n arrData[arrData.length - 1].push(strMatchedValue);\r\n }\r\n // Return the parsed data.\r\n return (arrData);\r\n };\r\n return CSVParser;\r\n}(DataParser));\r\nexport { CSVParser };\r\n//# sourceMappingURL=CSVParser.js.map","/**\r\n * Data Loader is responsible for loading and parsing external data\r\n */\r\nimport { CSVParser } from \"./CSVParser\";\r\nimport { JSONParser } from \"./JSONParser\";\r\nimport { Adapter } from \"../utils/Adapter\";\r\nimport * as $net from \"../utils/Net\";\r\nimport * as $array from \"../utils/Array\";\r\n;\r\n/**\r\n * Data Loader is responsible for loading and parsing external data.\r\n *\r\n * There is just one instance of DataLoader per system. Unless you have a\r\n * speicific reason, do not instantiate additional instances.\r\n *\r\n * The global instance of Data Loader is accessible via:\r\n *\r\n * ```TypeScript\r\n * am4core.dataLoader;\r\n * ```\r\n * ```JavaScript\r\n * am4core.dataLoader;\r\n * ```\r\n *\r\n * A loading of specific data source is done via [[DataSource]].\r\n *\r\n Please refer to [[DataSource]] for information how to use it.\r\n *\r\n * @see {@link IDataLoaderAdapters} for a list of available Adapters\r\n */\r\nvar DataLoader = /** @class */ (function () {\r\n function DataLoader() {\r\n /**\r\n * Adapter.\r\n */\r\n this.adapter = new Adapter(this);\r\n }\r\n /**\r\n * Loads a supplied [[DataSource]] or an array of data sources, then calls\r\n * their respective `parse` methods.\r\n *\r\n * @param source A single data source or an array of multiple of data sources\r\n */\r\n DataLoader.prototype.load = function (source) {\r\n var sources = Array.isArray(source) ? source : [source];\r\n // Add each Source to the list to be loaded simultaneously\r\n var promises = $array.map(sources, function (x) {\r\n // Dispatch events\r\n x.dispatchImmediately(\"started\");\r\n x.dispatchImmediately(\"loadstarted\");\r\n return $net.load(x.url, x, x.requestOptions);\r\n });\r\n // Run all promises in parallel\r\n Promise.all(promises).then(function (res) {\r\n // Process each loaded source\r\n $array.each(res, function (result) {\r\n // Get Source\r\n var source = result.target;\r\n // Dispatch events\r\n source.dispatchImmediately(\"loadended\");\r\n if (result.error) {\r\n if (source.events.isEnabled(\"error\")) {\r\n source.events.dispatchImmediately(\"error\", {\r\n type: \"error\",\r\n code: result.xhr.status,\r\n message: source.language.translate(\"Unable to load file: %1\", null, source.url),\r\n target: source\r\n });\r\n }\r\n }\r\n else {\r\n // Initiate parsing of the loaded data\r\n source.processData(result.response, result.type);\r\n }\r\n source.dispatchImmediately(\"ended\");\r\n });\r\n }).catch(function (res) {\r\n if (res.target) {\r\n res.target.dispatchImmediately(\"loadended\");\r\n if (res.target.events.isEnabled(\"error\")) {\r\n res.target.events.dispatchImmediately(\"error\", {\r\n type: \"error\",\r\n code: res.xhr.status,\r\n message: res.target.language.translate(\"Unable to load file: %1\", null, res.target.url),\r\n target: res.target\r\n });\r\n }\r\n res.target.dispatchImmediately(\"ended\");\r\n }\r\n });\r\n };\r\n /**\r\n * Instantiates a [[DataParser]] object based on the data type.\r\n * Built-in parser types are as follows:\r\n *\r\n * * \"csv\" or \"text/csv\"\r\n * * \"json\" or \"application/json\"\r\n *\r\n * @param contentType A format type\r\n * @return A parser object\r\n */\r\n DataLoader.prototype.getParserByType = function (contentType) {\r\n // Let some plugin decide\r\n var parser = this.adapter.apply(\"getParserByType\", {\r\n parser: null,\r\n type: contentType\r\n }).parser;\r\n if (parser) {\r\n return parser;\r\n }\r\n if (contentType == \"csv\" || contentType == \"text/csv\" || contentType == \"application/vnd.ms-excel\") {\r\n return new CSVParser();\r\n }\r\n if (contentType == \"json\" || contentType == \"application/json\") {\r\n return new JSONParser();\r\n }\r\n return;\r\n };\r\n /**\r\n * Tries to determine a parser out of content type and/or actual data.\r\n *\r\n * @param data Data\r\n * @param contentType Content-type\r\n * @return Parser instance\r\n */\r\n DataLoader.prototype.getParserByData = function (data, contentType) {\r\n // Let some plugin decide\r\n var parser = this.adapter.apply(\"getParserByData\", {\r\n parser: null,\r\n data: data,\r\n type: contentType\r\n }).parser;\r\n // Check if we have parser from outside code\r\n if (!parser) {\r\n // No, let's try to figure it out\r\n parser = this.getParserByType(contentType);\r\n if (parser) {\r\n // We're able to figure out parser by content-type\r\n return parser;\r\n }\r\n else if (JSONParser.isJSON(data)) {\r\n return this.getParserByType(\"json\");\r\n }\r\n else if (CSVParser.isCSV(data)) {\r\n return this.getParserByType(\"csv\");\r\n }\r\n }\r\n return parser;\r\n };\r\n return DataLoader;\r\n}());\r\nexport { DataLoader };\r\n/**\r\n * Create instance of Data Loader\r\n */\r\nexport var dataLoader = new DataLoader();\r\n//# sourceMappingURL=DataLoader.js.map","/**\r\n * Data parser module.\r\n */\r\n/**\r\n * ============================================================================\r\n * IMPORTS\r\n * ============================================================================\r\n * @hidden\r\n */\r\nimport { DateFormatter } from \"../formatters/DateFormatter\";\r\nimport * as $utils from \"../utils/Utils\";\r\nimport * as $type from \"../utils/Type\";\r\n/**\r\n * ============================================================================\r\n * MAIN CLASS\r\n * ============================================================================\r\n * @hidden\r\n */\r\n/**\r\n * Base class for the data parsers.\r\n */\r\nvar DataParser = /** @class */ (function () {\r\n function DataParser() {\r\n }\r\n /**\r\n * A \"placeholder\" function for real parsers to override.\r\n *\r\n * @ignore Exclude from docs\r\n * @param data Source data\r\n * @return Parsed data (empty)\r\n */\r\n DataParser.prototype.parse = function (data) {\r\n return [];\r\n };\r\n ;\r\n Object.defineProperty(DataParser.prototype, \"parsableNumbers\", {\r\n /**\r\n * Checks if there are any numeric fields that need to be converted to\r\n * numbers.\r\n *\r\n * @return Numeric fields?\r\n */\r\n get: function () {\r\n return this.options.numberFields && (this.options.numberFields.length > 0);\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n /**\r\n * Converts a value to 'number' if it is in `numberFields`.\r\n *\r\n * @param field Field name\r\n * @param value Value\r\n * @return Parsed or original value\r\n */\r\n DataParser.prototype.maybeToNumber = function (field, value) {\r\n if (this.options.numberFields.indexOf(field) !== -1) {\r\n return $utils.anyToNumber(value);\r\n }\r\n return value;\r\n };\r\n Object.defineProperty(DataParser.prototype, \"parsableDates\", {\r\n /**\r\n * Checks if there are any date fields that need to be converted to `Date`\r\n * objects.\r\n *\r\n * @return Date fields?\r\n */\r\n get: function () {\r\n return this.options.dateFields && (this.options.dateFields.length > 0);\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n /**\r\n * Converts a value to `Date` if it is in `dateFields`.\r\n *\r\n * @param field Field name\r\n * @param value Value\r\n * @return Parsed or original value\r\n */\r\n DataParser.prototype.maybeToDate = function (field, value) {\r\n if (this.options.dateFields.indexOf(field) !== -1) {\r\n return this.options.dateFormatter.parse(value, this.dateFormat);\r\n }\r\n return value;\r\n };\r\n /**\r\n * Replaces empty value with something else.\r\n *\r\n * @param value Source value\r\n * @return Source value or replacement\r\n */\r\n DataParser.prototype.maybeToEmpty = function (value) {\r\n if ((!$type.hasValue(value) || value == \"\") && $type.hasValue(this.options.emptyAs)) {\r\n return this.options.emptyAs;\r\n }\r\n return value;\r\n };\r\n Object.defineProperty(DataParser.prototype, \"dateFormatter\", {\r\n /**\r\n * [[DateFormatter]] object for date parsing.\r\n *\r\n * If there was not [[DateFormatter]] supplied in parser options, a new one\r\n * is created.\r\n *\r\n * @return Date formatter\r\n * @see {@link DateFormatter}\r\n */\r\n get: function () {\r\n if (!this.options.dateFormatter) {\r\n this.options.dateFormatter = new DateFormatter;\r\n if (this.options.dateFormat) {\r\n this.options.dateFormat = this.options.dateFormat;\r\n }\r\n }\r\n return this.options.dateFormatter;\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n Object.defineProperty(DataParser.prototype, \"dateFormat\", {\r\n /**\r\n * A date format to use when parsing dates.\r\n *\r\n * @return Date format\r\n * @see {@link DateFormatter}\r\n */\r\n get: function () {\r\n return this.options.dateFormat || this.dateFormatter.inputDateFormat;\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n return DataParser;\r\n}());\r\nexport { DataParser };\r\n//# sourceMappingURL=DataParser.js.map","import { __extends } from \"tslib\";\r\n/**\r\n * ============================================================================\r\n * IMPORTS\r\n * ============================================================================\r\n * @hidden\r\n */\r\nimport { dataLoader } from \"./DataLoader\";\r\nimport { JSONParser } from \"./JSONParser\";\r\nimport { CSVParser } from \"./CSVParser\";\r\nimport { BaseObjectEvents } from \"../Base\";\r\nimport { Adapter } from \"../utils/Adapter\";\r\nimport { Language } from \"../utils/Language\";\r\nimport { DateFormatter } from \"../formatters/DateFormatter\";\r\nimport { registry } from \"../Registry\";\r\nimport * as $type from \"../utils/Type\";\r\nimport * as $object from \"../utils/Object\";\r\n;\r\n;\r\n/**\r\n * ============================================================================\r\n * MAIN CLASS\r\n * ============================================================================\r\n * @hidden\r\n */\r\n/**\r\n * Represents a single data source - external file with all of its settings,\r\n * such as format, data parsing, etc.\r\n *\r\n * ```TypeScript\r\n * chart.dataSource.url = \"http://www.myweb.com/data.json\";\r\n * chart.dataSource.parser = am4core.JSONParser;\r\n * ```\r\n * ```JavaScript\r\n * chart.dataSource.url = \"http://www.myweb.com/data.json\";\r\n * chart.dataSource.parser = am4core.JSONParser;\r\n * ```\r\n * ```JSON\r\n * {\r\n * // ...\r\n * \"dataSource\": {\r\n * \"url\": \"http://www.myweb.com/data.json\",\r\n * \"parser\": \"JSONParser\"\r\n * },\r\n * // ...\r\n * }\r\n * ```\r\n *\r\n * @see {@link IDataSourceEvents} for a list of available events\r\n * @see {@link IDataSourceAdapters} for a list of available Adapters\r\n */\r\nvar DataSource = /** @class */ (function (_super) {\r\n __extends(DataSource, _super);\r\n /**\r\n * Constructor\r\n */\r\n function DataSource(url, parser) {\r\n var _this = \r\n // Init\r\n _super.call(this) || this;\r\n /**\r\n * Adapter.\r\n */\r\n _this.adapter = new Adapter(_this);\r\n /**\r\n * Custom options for HTTP(S) request.\r\n */\r\n _this._requestOptions = {};\r\n /**\r\n * If set to `true`, any subsequent data loads will be considered incremental\r\n * (containing only new data points that are supposed to be added to existing\r\n * data).\r\n *\r\n * NOTE: this setting works only with element's `data` property. It won't\r\n * work with any other externally-loadable data property.\r\n *\r\n * @default false\r\n */\r\n _this._incremental = false;\r\n /**\r\n * A collection of key/value pairs to attach to a data source URL when making\r\n * an incremental request.\r\n */\r\n _this._incrementalParams = {};\r\n /**\r\n * This setting is used only when `incremental = true`. If set to `true`,\r\n * it will try to retain the same number of data items across each load.\r\n *\r\n * E.g. if incremental load yeilded 5 new records, then 5 items from the\r\n * beginning of data will be removed so that we end up with the same number\r\n * of data items.\r\n *\r\n * @default false\r\n */\r\n _this._keepCount = false;\r\n /**\r\n * If set to `true`, each subsequent load will be treated as an update to\r\n * currently loaded data, meaning that it will try to update values on\r\n * existing data items, not overwrite the whole data.\r\n *\r\n * This will work faster than complete update, and also will animate the\r\n * values to their new positions.\r\n *\r\n * Data sources across loads must contain the same number of data items.\r\n *\r\n * Loader will not truncate the data set if loaded data has fewer data items,\r\n * and if it is longer, the excess data items will be ignored.\r\n *\r\n * @default false\r\n * @since 4.5.5\r\n */\r\n _this._updateCurrentData = false;\r\n /**\r\n * Will show loading indicator when loading files.\r\n */\r\n _this.showPreloader = true;\r\n _this.className = \"DataSource\";\r\n // Set defaults\r\n if (url) {\r\n _this.url = url;\r\n }\r\n // Set parser\r\n if (parser) {\r\n if (typeof parser == \"string\") {\r\n _this.parser = dataLoader.getParserByType(parser);\r\n }\r\n else {\r\n _this.parser = parser;\r\n }\r\n }\r\n return _this;\r\n }\r\n /**\r\n * Processes the loaded data.\r\n *\r\n * @ignore Exclude from docs\r\n * @param data Raw (unparsed) data\r\n * @param contentType Content type of the loaded data (optional)\r\n */\r\n DataSource.prototype.processData = function (data, contentType) {\r\n // Parsing started\r\n this.dispatchImmediately(\"parsestarted\");\r\n // Check if parser is set\r\n if (!this.parser) {\r\n // Try to resolve from data\r\n this.parser = dataLoader.getParserByData(data, contentType);\r\n if (!this.parser) {\r\n // We have a problem - nobody knows what to do with the data\r\n // Raise error\r\n if (this.events.isEnabled(\"parseerror\")) {\r\n var event_1 = {\r\n type: \"parseerror\",\r\n message: this.language.translate(\"No parser available for file: %1\", null, this.url),\r\n target: this\r\n };\r\n this.events.dispatchImmediately(\"parseerror\", event_1);\r\n }\r\n this.dispatchImmediately(\"parseended\");\r\n return;\r\n }\r\n }\r\n // Apply options adapters\r\n this.parser.options = this.adapter.apply(\"parserOptions\", this.parser.options);\r\n this.parser.options.dateFields = this.adapter.apply(\"dateFields\", this.parser.options.dateFields || []);\r\n this.parser.options.numberFields = this.adapter.apply(\"numberFields\", this.parser.options.numberFields || []);\r\n // Check if we need to pass in date formatter\r\n if (this.parser.options.dateFields && !this.parser.options.dateFormatter) {\r\n this.parser.options.dateFormatter = this.dateFormatter;\r\n }\r\n // Parse\r\n this.data = this.adapter.apply(\"parsedData\", this.parser.parse(this.adapter.apply(\"unparsedData\", data)));\r\n // Check for parsing errors\r\n if (!$type.hasValue(this.data) && this.events.isEnabled(\"parseerror\")) {\r\n var event_2 = {\r\n type: \"parseerror\",\r\n message: this.language.translate(\"Error parsing file: %1\", null, this.url),\r\n target: this\r\n };\r\n this.events.dispatchImmediately(\"parseerror\", event_2);\r\n }\r\n // Wrap up\r\n this.dispatchImmediately(\"parseended\");\r\n if ($type.hasValue(this.data)) {\r\n this.dispatchImmediately(\"done\", {\r\n \"data\": this.data\r\n });\r\n }\r\n // The component is responsible for updating its own data vtriggered via\r\n // events.\r\n // Update last data load\r\n this.lastLoad = new Date();\r\n };\r\n Object.defineProperty(DataSource.prototype, \"url\", {\r\n /**\r\n * @return URL\r\n */\r\n get: function () {\r\n // Get URL\r\n var url = this.disableCache\r\n ? this.timestampUrl(this._url)\r\n : this._url;\r\n // Add incremental params\r\n if (this.incremental && this.component.data.length) {\r\n url = this.addUrlParams(url, this.incrementalParams);\r\n }\r\n return this.adapter.apply(\"url\", url);\r\n },\r\n /**\r\n * URL of the data source.\r\n *\r\n * @param value URL\r\n */\r\n set: function (value) {\r\n this._url = value;\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n Object.defineProperty(DataSource.prototype, \"requestOptions\", {\r\n /**\r\n * @return Options\r\n */\r\n get: function () {\r\n return this.adapter.apply(\"requestOptions\", this._requestOptions);\r\n },\r\n /**\r\n * Custom options for HTTP(S) request.\r\n *\r\n * At this moment the only option supported is: `requestHeaders`, which holds\r\n * an array of objects for custom request headers, e.g.:\r\n *\r\n * ```TypeScript\r\n * chart.dataSource.requestOptions.requestHeaders = [{\r\n * \"key\": \"x-access-token\",\r\n * \"value\": \"123456789\"\r\n * }];\r\n * ``````JavaScript\r\n * chart.dataSource.requestOptions.requestHeaders = [{\r\n * \"key\": \"x-access-token\",\r\n * \"value\": \"123456789\"\r\n * }];\r\n * ```\r\n * ```JSON\r\n * {\r\n * // ...\r\n * \"dataSource\": {\r\n * // ...\r\n * \"requestOptions\": {\r\n * \"requestHeaders\": [{\r\n * \"key\": \"x-access-token\",\r\n * \"value\": \"123456789\"\r\n * }]\r\n * }\r\n * }\r\n * }\r\n * ```\r\n *\r\n * NOTE: setting this options on an-already loaded DataSource will not\r\n * trigger a reload.\r\n *\r\n * @param value Options\r\n */\r\n set: function (value) {\r\n this._requestOptions = value;\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n Object.defineProperty(DataSource.prototype, \"parser\", {\r\n /**\r\n * @return Data parser\r\n */\r\n get: function () {\r\n if (!this._parser) {\r\n this._parser = new JSONParser();\r\n }\r\n return this.adapter.apply(\"parser\", this._parser);\r\n },\r\n /**\r\n * A parser to be used to parse data.\r\n *\r\n * ```TypeScript\r\n * chart.dataSource.url = \"http://www.myweb.com/data.json\";\r\n * chart.dataSource.parser = am4core.JSONParser;\r\n * ```\r\n * ```JavaScript\r\n * chart.dataSource.url = \"http://www.myweb.com/data.json\";\r\n * chart.dataSource.parser = am4core.JSONParser;\r\n * ```\r\n * ```JSON\r\n * {\r\n * // ...\r\n * \"dataSource\": {\r\n * \"url\": \"http://www.myweb.com/data.json\",\r\n * \"parser\": {\r\n * \"type\": \"JSONParser\"\r\n * }\r\n * },\r\n * // ...\r\n * }\r\n * ```\r\n *\r\n * @default JSONParser\r\n * @param value Data parser\r\n */\r\n set: function (value) {\r\n this._parser = value;\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n Object.defineProperty(DataSource.prototype, \"reloadFrequency\", {\r\n /**\r\n * @return Reload frequency (ms)\r\n */\r\n get: function () {\r\n return this.adapter.apply(\"reloadTimeout\", this._reloadFrequency);\r\n },\r\n /**\r\n * Data source reload frequency.\r\n *\r\n * If set, it will reload the same URL every X milliseconds.\r\n *\r\n * @param value Reload frequency (ms)\r\n */\r\n set: function (value) {\r\n var _this = this;\r\n if (this._reloadFrequency != value) {\r\n this._reloadFrequency = value;\r\n // Should we schedule a reload?\r\n if (value) {\r\n if (!$type.hasValue(this._reloadDisposer)) {\r\n this._reloadDisposer = this.events.on(\"ended\", function (ev) {\r\n _this._reloadTimeout = setTimeout(function () {\r\n _this.load();\r\n }, _this.reloadFrequency);\r\n });\r\n }\r\n }\r\n else if ($type.hasValue(this._reloadDisposer)) {\r\n this._reloadDisposer.dispose();\r\n this._reloadDisposer = undefined;\r\n }\r\n }\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n Object.defineProperty(DataSource.prototype, \"incremental\", {\r\n /**\r\n * @return Incremental load?\r\n */\r\n get: function () {\r\n return this.adapter.apply(\"incremental\", this._incremental);\r\n },\r\n /**\r\n * Should subsequent reloads be treated as incremental?\r\n *\r\n * Incremental loads will assume that they contain only new data items\r\n * since the last load.\r\n *\r\n * If `incremental = false` the loader will replace all of the target's\r\n * data with each load.\r\n *\r\n * This setting does not have any effect trhe first time data is loaded.\r\n *\r\n * NOTE: this setting works only with element's `data` property. It won't\r\n * work with any other externally-loadable data property.\r\n *\r\n * @default false\r\n * @param Incremental load?\r\n */\r\n set: function (value) {\r\n this._incremental = value;\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n Object.defineProperty(DataSource.prototype, \"incrementalParams\", {\r\n /**\r\n * @return Incremental request parameters\r\n */\r\n get: function () {\r\n return this.adapter.apply(\"incrementalParams\", this._incrementalParams);\r\n },\r\n /**\r\n * An object consisting of key/value pairs to apply to an URL when data\r\n * source is making an incremental request.\r\n *\r\n * @param value Incremental request parameters\r\n */\r\n set: function (value) {\r\n this._incrementalParams = value;\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n Object.defineProperty(DataSource.prototype, \"keepCount\", {\r\n /**\r\n * @return keepCount load?\r\n */\r\n get: function () {\r\n return this.adapter.apply(\"keepCount\", this._keepCount);\r\n },\r\n /**\r\n * This setting is used only when `incremental = true`. If set to `true`,\r\n * it will try to retain the same number of data items across each load.\r\n *\r\n * E.g. if incremental load yeilded 5 new records, then 5 items from the\r\n * beginning of data will be removed so that we end up with the same number\r\n * of data items.\r\n *\r\n * @default false\r\n * @param Keep record count?\r\n */\r\n set: function (value) {\r\n this._keepCount = value;\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n Object.defineProperty(DataSource.prototype, \"updateCurrentData\", {\r\n /**\r\n * @return Update current data?\r\n */\r\n get: function () {\r\n return this.adapter.apply(\"updateCurrentData\", this._updateCurrentData);\r\n },\r\n /**\r\n * If set to `true`, each subsequent load will be treated as an update to\r\n * currently loaded data, meaning that it will try to update values on\r\n * existing data items, not overwrite the whole data.\r\n *\r\n * This will work faster than complete update, and also will animate the\r\n * values to their new positions.\r\n *\r\n * Data sources across loads must contain the same number of data items.\r\n *\r\n * Loader will not truncate the data set if loaded data has fewer data items,\r\n * and if it is longer, the excess data items will be ignored.\r\n *\r\n * NOTE: this setting is ignored if `incremental = true`.\r\n *\r\n * @default false\r\n * @since 2.5.5\r\n * @param Update current data?\r\n */\r\n set: function (value) {\r\n this._updateCurrentData = value;\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n Object.defineProperty(DataSource.prototype, \"language\", {\r\n /**\r\n * @return A [[Language]] instance to be used\r\n */\r\n get: function () {\r\n if (this._language) {\r\n return this._language;\r\n }\r\n else if (this.component) {\r\n this._language = this.component.language;\r\n return this._language;\r\n }\r\n this.language = new Language();\r\n return this.language;\r\n },\r\n /**\r\n * Language instance to use.\r\n *\r\n * Will inherit and use chart's language, if not set.\r\n *\r\n * @param value An instance of Language\r\n */\r\n set: function (value) {\r\n this._language = value;\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n Object.defineProperty(DataSource.prototype, \"dateFormatter\", {\r\n /**\r\n * @return A [[DateFormatter]] instance to be used\r\n */\r\n get: function () {\r\n if (this._dateFormatter) {\r\n return this._dateFormatter;\r\n }\r\n else if (this.component) {\r\n this._dateFormatter = this.component.dateFormatter;\r\n return this._dateFormatter;\r\n }\r\n this.dateFormatter = new DateFormatter();\r\n return this.dateFormatter;\r\n },\r\n /**\r\n * A [[DateFormatter]] to use when parsing dates from string formats.\r\n *\r\n * Will inherit and use chart's DateFormatter if not ser.\r\n *\r\n * @param value An instance of [[DateFormatter]]\r\n */\r\n set: function (value) {\r\n this._dateFormatter = value;\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n /**\r\n * Adds current timestamp to the URL.\r\n *\r\n * @param url Source URL\r\n * @return Timestamped URL\r\n */\r\n DataSource.prototype.timestampUrl = function (url) {\r\n var tstamp = new Date().getTime().toString();\r\n var params = {};\r\n params[tstamp] = \"\";\r\n return this.addUrlParams(url, params);\r\n };\r\n /**\r\n * Disposes of this object.\r\n */\r\n DataSource.prototype.dispose = function () {\r\n _super.prototype.dispose.call(this);\r\n if (this._reloadTimeout) {\r\n clearTimeout(this._reloadTimeout);\r\n }\r\n if ($type.hasValue(this._reloadDisposer)) {\r\n this._reloadDisposer.dispose();\r\n this._reloadDisposer = undefined;\r\n }\r\n };\r\n /**\r\n * Initiate the load.\r\n *\r\n * All loading in JavaScript is asynchronous. This function will trigger the\r\n * load and will exit immediately.\r\n *\r\n * Use DataSource's events to watch for loaded data and errors.\r\n */\r\n DataSource.prototype.load = function () {\r\n if (this.url) {\r\n if (this._reloadTimeout) {\r\n clearTimeout(this._reloadTimeout);\r\n }\r\n dataLoader.load(this);\r\n }\r\n };\r\n /**\r\n * Adds parameters to `url` as query strings. Will take care of proper\r\n * separators.\r\n *\r\n * @param url Source URL\r\n * @param params Parameters\r\n * @return New URL\r\n */\r\n DataSource.prototype.addUrlParams = function (url, params) {\r\n var join = url.match(/\\?/) ? \"&\" : \"?\";\r\n var add = [];\r\n $object.each(params, function (key, value) {\r\n if (value != \"\") {\r\n add.push(key + \"=\" + encodeURIComponent(value));\r\n }\r\n else {\r\n add.push(key);\r\n }\r\n });\r\n if (add.length) {\r\n return url + join + add.join(\"&\");\r\n }\r\n return url;\r\n };\r\n /**\r\n * Processes JSON-based config before it is applied to the object.\r\n *\r\n * @ignore Exclude from docs\r\n * @param config Config\r\n */\r\n DataSource.prototype.processConfig = function (config) {\r\n registry.registeredClasses[\"json\"] = JSONParser;\r\n registry.registeredClasses[\"JSONParser\"] = JSONParser;\r\n registry.registeredClasses[\"csv\"] = CSVParser;\r\n registry.registeredClasses[\"CSVParser\"] = CSVParser;\r\n _super.prototype.processConfig.call(this, config);\r\n };\r\n return DataSource;\r\n}(BaseObjectEvents));\r\nexport { DataSource };\r\n//# sourceMappingURL=DataSource.js.map","/**\r\n * JSON parser.\r\n */\r\nimport { __extends } from \"tslib\";\r\n/**\r\n * ============================================================================\r\n * IMPORTS\r\n * ============================================================================\r\n * @hidden\r\n */\r\nimport { DataParser } from \"./DataParser\";\r\nimport * as $object from \"../utils/Object\";\r\nimport * as $type from \"../utils/Type\";\r\n/**\r\n * A parser for JSON.\r\n *\r\n * @important\r\n */\r\nvar JSONParser = /** @class */ (function (_super) {\r\n __extends(JSONParser, _super);\r\n function JSONParser() {\r\n var _this = _super !== null && _super.apply(this, arguments) || this;\r\n /**\r\n * Content-type suitable for JSON format.\r\n */\r\n _this.contentType = \"application/json\";\r\n /**\r\n * Parser options.\r\n *\r\n * @see {@link IJSONOptions} for description of each option\r\n */\r\n _this.options = {};\r\n return _this;\r\n }\r\n /**\r\n * Tests if the data is valid JSON.\r\n *\r\n * @param data Source data\r\n * @return Is it JSON?\r\n */\r\n JSONParser.isJSON = function (data) {\r\n try {\r\n // Try parsing JSON\r\n JSON.parse(data);\r\n // If we got to this point it means it's a valid JSON\r\n return true;\r\n }\r\n catch (e) {\r\n return false;\r\n }\r\n };\r\n /**\r\n * Parses and returns data.\r\n *\r\n * @param data Unparsed data\r\n * @return Parsed data\r\n */\r\n JSONParser.prototype.parse = function (data) {\r\n var _this = this;\r\n // Init return\r\n var res;\r\n // Try parsing\r\n try {\r\n if ($type.hasValue(JSON)) {\r\n res = JSON.parse(data);\r\n }\r\n }\r\n catch (e) {\r\n return undefined;\r\n }\r\n // Do we need to cast some fields to numbers or dates?\r\n var empty = $type.hasValue(this.options.emptyAs);\r\n var numbers = this.parsableNumbers;\r\n var dates = this.parsableDates;\r\n if (Array.isArray(res) && (numbers || dates || empty)) {\r\n var _loop_1 = function (i, len) {\r\n var row = res[i];\r\n $object.each(row, function (key, value) {\r\n if (empty) {\r\n row[key] = _this.maybeToEmpty(row[key]);\r\n }\r\n if (numbers) {\r\n row[key] = _this.maybeToNumber(key, row[key]);\r\n }\r\n if (dates) {\r\n row[key] = _this.maybeToDate(key, row[key]);\r\n }\r\n });\r\n };\r\n // Iterate through the data and check if it needs to be converted\r\n for (var i = 0, len = res.length; i < len; i++) {\r\n _loop_1(i, len);\r\n }\r\n }\r\n // Convert to array\r\n //return Array.isArray(res) ? res : [res];\r\n return res;\r\n };\r\n return JSONParser;\r\n}(DataParser));\r\nexport { JSONParser };\r\n//# sourceMappingURL=JSONParser.js.map","/**\r\n */\r\n/**\r\n * ============================================================================\r\n * IMPORTS\r\n * ============================================================================\r\n * @hidden\r\n */\r\nimport { color } from \"../utils/Color\";\r\n/**\r\n * Defines a class that holds default properties for new SVG elements\r\n */\r\nvar SVGDefaults = /** @class */ (function () {\r\n function SVGDefaults() {\r\n }\r\n SVGDefaults.opacity = 1;\r\n SVGDefaults.strokeOpacity = 1;\r\n SVGDefaults.strokeWidth = 1;\r\n SVGDefaults.fillOpacity = 1;\r\n SVGDefaults.fill = color(\"#000000\");\r\n SVGDefaults.stroke = color(\"#000000\");\r\n SVGDefaults.focusable = undefined;\r\n SVGDefaults.tabindex = 0;\r\n return SVGDefaults;\r\n}());\r\nexport { SVGDefaults };\r\n//# sourceMappingURL=SVGDefaults.js.map","/**\r\n * Cone module.\r\n */\r\nimport { __extends } from \"tslib\";\r\n/**\r\n * ============================================================================\r\n * IMPORTS\r\n * ============================================================================\r\n * @hidden\r\n */\r\nimport { Container } from \"../../Container\";\r\nimport { Sprite, visualProperties } from \"../../Sprite\";\r\nimport { Ellipse } from \"../../elements/Ellipse\";\r\nimport { LinearGradientModifier } from \"../../rendering/fills/LinearGradientModifier\";\r\nimport { percent } from \"../../utils/Percent\";\r\nimport * as $object from \"../../utils/Object\";\r\nimport * as $path from \"../../rendering/Path\";\r\n/**\r\n * ============================================================================\r\n * MAIN CLASS\r\n * ============================================================================\r\n * @hidden\r\n */\r\n/**\r\n * Builds a round cone/cylinder.\r\n *\r\n * @see {@link IConeEvents} for a list of available events\r\n * @see {@link IConeAdapters} for a list of available Adapters\r\n */\r\nvar Cone = /** @class */ (function (_super) {\r\n __extends(Cone, _super);\r\n /**\r\n * Constructor\r\n */\r\n function Cone() {\r\n var _this = _super.call(this) || this;\r\n _this.className = \"Cone\";\r\n _this.angle = 30;\r\n _this.radius = percent(100);\r\n _this.topRadius = percent(100);\r\n _this.top = _this.createChild(Ellipse);\r\n _this.top.shouldClone = false;\r\n _this.bottom = _this.createChild(Ellipse);\r\n _this.bottom.shouldClone = false;\r\n _this.body = _this.createChild(Sprite);\r\n _this.body.shouldClone = false;\r\n _this.body.setElement(_this.paper.add(\"path\"));\r\n _this.layout = \"none\";\r\n _this.bodyFillModifier = new LinearGradientModifier();\r\n _this.bodyFillModifier.lightnesses = [0, -0.25, 0];\r\n _this.body.fillModifier = _this.bodyFillModifier;\r\n _this.applyTheme();\r\n return _this;\r\n }\r\n /**\r\n * Draws the element.\r\n *\r\n * @ignore Exclude from docs\r\n */\r\n Cone.prototype.draw = function () {\r\n _super.prototype.draw.call(this);\r\n $object.copyProperties(this, this.top, visualProperties);\r\n $object.copyProperties(this, this.bottom, visualProperties);\r\n $object.copyProperties(this, this.body, visualProperties);\r\n var w = this.innerWidth;\r\n var h = this.innerHeight;\r\n var bottom = this.bottom;\r\n var top = this.top;\r\n var angle = this.angle;\r\n var radiusBase;\r\n var dx;\r\n var dy;\r\n if (this.orientation == \"horizontal\") {\r\n radiusBase = h / 2;\r\n bottom.y = h / 2;\r\n top.y = h / 2;\r\n top.x = w;\r\n dx = (90 - angle) / 90;\r\n dy = 0;\r\n this.bodyFillModifier.gradient.rotation = 90;\r\n }\r\n else {\r\n dx = 0;\r\n dy = (90 - angle) / 90;\r\n radiusBase = w / 2;\r\n bottom.y = h;\r\n bottom.x = w / 2;\r\n top.x = w / 2;\r\n this.bodyFillModifier.gradient.rotation = 0;\r\n }\r\n var radius = this.radius.value * radiusBase;\r\n var topRadius = this.topRadius.value * radiusBase;\r\n bottom.radius = radius - radius * dx;\r\n bottom.radiusY = radius - radius * dy;\r\n top.radius = topRadius - topRadius * dx;\r\n top.radiusY = topRadius - topRadius * dy;\r\n var path;\r\n if (this.orientation == \"horizontal\") {\r\n path = $path.moveTo({ x: 0, y: h / 2 - bottom.radiusY }) + $path.arcTo(-90, -180, bottom.radius, bottom.radiusY) + $path.lineTo({ x: w, y: h / 2 + top.radiusY }) + $path.arcTo(90, 180, top.radius, top.radiusY) + $path.closePath();\r\n }\r\n else {\r\n path = $path.moveTo({ x: w / 2 - top.radius, y: 0 }) + $path.arcTo(180, -180, top.radius, top.radiusY) + $path.lineTo({ x: w / 2 + bottom.radius, y: h }) + $path.arcTo(0, 180, bottom.radius, bottom.radiusY) + $path.closePath();\r\n }\r\n this.body.path = path;\r\n };\r\n Object.defineProperty(Cone.prototype, \"angle\", {\r\n /**\r\n * @return Angle\r\n */\r\n get: function () {\r\n return this.getPropertyValue(\"angle\");\r\n },\r\n /**\r\n * Angle of the point of view to the 3D element. (0-360)\r\n *\r\n * @default 30\r\n * @param value Angle\r\n */\r\n set: function (value) {\r\n this.setPropertyValue(\"angle\", value, true);\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n Object.defineProperty(Cone.prototype, \"radius\", {\r\n /**\r\n * @return Bottom radius\r\n */\r\n get: function () {\r\n return this.getPropertyValue(\"radius\");\r\n },\r\n /**\r\n * A relative radius of the cone's bottom (base).\r\n *\r\n * It is relevant to the inner width or height of the element.\r\n *\r\n * @default Percent(100)\r\n * @param value Bottom radius\r\n */\r\n set: function (value) {\r\n this.setPropertyValue(\"radius\", value, true);\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n Object.defineProperty(Cone.prototype, \"topRadius\", {\r\n /**\r\n * @return Top radius\r\n */\r\n get: function () {\r\n return this.getPropertyValue(\"topRadius\");\r\n },\r\n /**\r\n * A relative radius of the cone's top (tip).\r\n *\r\n * It is relevant to the inner width or height of the element.\r\n *\r\n * @default Percent(0)\r\n * @param value Top radius\r\n */\r\n set: function (value) {\r\n this.setPropertyValue(\"topRadius\", value, true);\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n Object.defineProperty(Cone.prototype, \"orientation\", {\r\n /**\r\n * Orientation\r\n */\r\n get: function () {\r\n return this.getPropertyValue(\"orientation\");\r\n },\r\n /**\r\n * Orientation of the cone\r\n *\r\n * @default \"vertical\"\r\n * @param value Orientation\r\n */\r\n set: function (value) {\r\n this.setPropertyValue(\"orientation\", value, true);\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n return Cone;\r\n}(Container));\r\nexport { Cone };\r\n//# sourceMappingURL=Cone.js.map","/**\r\n * Creates a 3D rectangle.\r\n */\r\nimport { __extends } from \"tslib\";\r\n/**\r\n * ============================================================================\r\n * IMPORTS\r\n * ============================================================================\r\n * @hidden\r\n */\r\nimport { Container } from \"../../Container\";\r\nimport { Sprite } from \"../../Sprite\";\r\nimport * as $math from \"../../utils/Math\";\r\nimport * as $path from \"../../rendering/Path\";\r\nimport { Color, color, toColor } from \"../../utils/Color\";\r\nimport { RadialGradient } from \"../../rendering/fills/RadialGradient\";\r\nimport { LinearGradient } from \"../../rendering/fills/LinearGradient\";\r\nimport { LightenFilter } from \"../../rendering/filters/LightenFilter\";\r\nimport * as $type from \"../../utils/Type\";\r\n/**\r\n * ============================================================================\r\n * MAIN CLASS\r\n * ============================================================================\r\n * @hidden\r\n */\r\n/**\r\n * Builds a 3D rectangle\r\n * @see {@link IRectangle3DEvents} for a list of available events\r\n * @see {@link IRectangle3DAdapters} for a list of available Adapters\r\n */\r\nvar Rectangle3D = /** @class */ (function (_super) {\r\n __extends(Rectangle3D, _super);\r\n /**\r\n * Constructor\r\n */\r\n function Rectangle3D() {\r\n var _this = _super.call(this) || this;\r\n _this.angle = 30;\r\n _this.depth = 30;\r\n _this.className = \"Rectangle3D\";\r\n _this.layout = \"none\";\r\n var sideBack = _this.createChild(Sprite);\r\n sideBack.shouldClone = false;\r\n sideBack.setElement(_this.paper.add(\"path\"));\r\n sideBack.isMeasured = false;\r\n _this.sideBack = sideBack;\r\n _this._disposers.push(_this.sideBack);\r\n var sideBottom = _this.createChild(Sprite);\r\n sideBottom.shouldClone = false;\r\n sideBottom.setElement(_this.paper.add(\"path\"));\r\n sideBottom.isMeasured = false;\r\n _this.sideBottom = sideBottom;\r\n _this._disposers.push(_this.sideBottom);\r\n var sideLeft = _this.createChild(Sprite);\r\n sideLeft.shouldClone = false;\r\n sideLeft.setElement(_this.paper.add(\"path\"));\r\n sideLeft.isMeasured = false;\r\n _this.sideLeft = sideLeft;\r\n _this._disposers.push(_this.sideLeft);\r\n var sideRight = _this.createChild(Sprite);\r\n sideRight.shouldClone = false;\r\n sideRight.setElement(_this.paper.add(\"path\"));\r\n sideRight.isMeasured = false;\r\n _this.sideRight = sideRight;\r\n _this._disposers.push(_this.sideRight);\r\n var sideTop = _this.createChild(Sprite);\r\n sideTop.shouldClone = false;\r\n sideTop.setElement(_this.paper.add(\"path\"));\r\n sideTop.isMeasured = false;\r\n _this.sideTop = sideTop;\r\n _this._disposers.push(_this.sideTop);\r\n var sideFront = _this.createChild(Sprite);\r\n sideFront.shouldClone = false;\r\n sideFront.setElement(_this.paper.add(\"path\"));\r\n sideFront.isMeasured = false;\r\n _this.sideFront = sideFront;\r\n _this._disposers.push(_this.sideFront);\r\n _this.applyTheme();\r\n return _this;\r\n }\r\n /**\r\n * Draws the element.\r\n *\r\n * @ignore Exclude from docs\r\n */\r\n Rectangle3D.prototype.draw = function () {\r\n _super.prototype.draw.call(this);\r\n var w = this.innerWidth;\r\n var h = this.innerHeight;\r\n var depth = this.depth;\r\n var angle = this.angle;\r\n var sin = $math.sin(angle);\r\n var cos = $math.cos(angle);\r\n var a = { x: 0, y: 0 };\r\n var b = { x: w, y: 0 };\r\n var c = { x: w, y: h };\r\n var d = { x: 0, y: h };\r\n var ah = { x: depth * cos, y: -depth * sin };\r\n var bh = { x: depth * cos + w, y: -depth * sin };\r\n var ch = { x: depth * cos + w, y: -depth * sin + h };\r\n var dh = { x: depth * cos, y: -depth * sin + h };\r\n this.sideFront.path = $path.moveTo(a) + $path.lineTo(b) + $path.lineTo(c) + $path.lineTo(d) + $path.closePath();\r\n this.sideBack.path = $path.moveTo(ah) + $path.lineTo(bh) + $path.lineTo(ch) + $path.lineTo(dh) + $path.closePath();\r\n this.sideLeft.path = $path.moveTo(a) + $path.lineTo(ah) + $path.lineTo(dh) + $path.lineTo(d) + $path.closePath();\r\n this.sideRight.path = $path.moveTo(b) + $path.lineTo(bh) + $path.lineTo(ch) + $path.lineTo(c) + $path.closePath();\r\n this.sideBottom.path = $path.moveTo(d) + $path.lineTo(dh) + $path.lineTo(ch) + $path.lineTo(c) + $path.closePath();\r\n this.sideTop.path = $path.moveTo(a) + $path.lineTo(ah) + $path.lineTo(bh) + $path.lineTo(b) + $path.closePath();\r\n };\r\n Object.defineProperty(Rectangle3D.prototype, \"depth\", {\r\n /**\r\n * @return Depth (px)\r\n */\r\n get: function () {\r\n return this.getPropertyValue(\"depth\");\r\n },\r\n /**\r\n * Depth (Z dimension) of the 3D rectangle in pixels.\r\n *\r\n * @default 30\r\n * @param value Depth (px)\r\n */\r\n set: function (value) {\r\n this.setPropertyValue(\"depth\", value, true);\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n Object.defineProperty(Rectangle3D.prototype, \"angle\", {\r\n /**\r\n * @return Angle\r\n */\r\n get: function () {\r\n return this.getPropertyValue(\"angle\");\r\n },\r\n /**\r\n * Angle of the point of view to the 3D element. (0-360)\r\n *\r\n * @default 30\r\n * @param value Angle\r\n */\r\n set: function (value) {\r\n this.setPropertyValue(\"angle\", value, true);\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n /**\r\n * Sets actual `fill` property on the SVG element, including applicable color\r\n * modifiers.\r\n *\r\n * @ignore Exclude from docs\r\n * @param value Fill\r\n */\r\n Rectangle3D.prototype.setFill = function (value) {\r\n _super.prototype.setFill.call(this, value);\r\n if (!$type.isObject(value) || \"r\" in value) {\r\n value = toColor(value);\r\n }\r\n var colorStr;\r\n if (value instanceof Color) {\r\n colorStr = value.hex;\r\n }\r\n else if (value instanceof LinearGradient || value instanceof RadialGradient) {\r\n colorStr = value.stops.getIndex(0).color.hex;\r\n }\r\n else {\r\n var filter = new LightenFilter();\r\n filter.lightness = -0.2;\r\n this.sideBack.filters.push(filter);\r\n var filter2 = filter.clone();\r\n filter2.lightness = -0.4;\r\n this.sideLeft.filters.push(filter2);\r\n var filter3 = filter.clone();\r\n filter3.lightness = -0.2;\r\n this.sideRight.filters.push(filter3);\r\n var filter4 = filter.clone();\r\n filter4.lightness = -0.1;\r\n this.sideTop.filters.push(filter4);\r\n var filter5 = filter.clone();\r\n filter5.lightness = -0.5;\r\n this.sideBottom.filters.push(filter5);\r\n }\r\n if (colorStr) {\r\n this.sideBack.fill = color(colorStr).lighten(-0.2);\r\n this.sideLeft.fill = color(colorStr).lighten(-0.4);\r\n this.sideRight.fill = color(colorStr).lighten(-0.2);\r\n this.sideTop.fill = color(colorStr).lighten(-0.1);\r\n this.sideBottom.fill = color(colorStr).lighten(-0.5);\r\n }\r\n };\r\n /**\r\n * Copies all properties and related data from a different instance of Rectangle3D.\r\n *\r\n * @param source Source Rectangle3D\r\n */\r\n Rectangle3D.prototype.copyFrom = function (source) {\r\n _super.prototype.copyFrom.call(this, source);\r\n this.sideBack.copyFrom(source.sideBack);\r\n this.sideLeft.copyFrom(source.sideLeft);\r\n this.sideRight.copyFrom(source.sideRight);\r\n this.sideTop.copyFrom(source.sideTop);\r\n this.sideBottom.copyFrom(source.sideBottom);\r\n };\r\n return Rectangle3D;\r\n}(Container));\r\nexport { Rectangle3D };\r\n//# sourceMappingURL=Rectangle3D.js.map","/**\r\n * 3D slice module\r\n */\r\nimport { __extends } from \"tslib\";\r\n/**\r\n * ============================================================================\r\n * IMPORTS\r\n * ============================================================================\r\n * @hidden\r\n */\r\nimport { Slice } from \"../Slice\";\r\nimport { Sprite } from \"../../Sprite\";\r\nimport * as $math from \"../../utils/Math\";\r\nimport * as $path from \"../../rendering/Path\";\r\nimport * as $type from \"../../utils/Type\";\r\nimport { Color, color } from \"../../utils/Color\";\r\nimport { RadialGradient } from \"../../rendering/fills/RadialGradient\";\r\nimport { LinearGradient } from \"../../rendering/fills/LinearGradient\";\r\nimport { LightenFilter } from \"../../rendering/filters/LightenFilter\";\r\n/**\r\n * ============================================================================\r\n * MAIN CLASS\r\n * ============================================================================\r\n * @hidden\r\n */\r\n/**\r\n * Used to draw a 3D slice of a Pie chart.\r\n *\r\n * @see {@link ISlice3DEvents} for a list of available events\r\n * @see {@link ISlice3DAdapters} for a list of available Adapters\r\n */\r\nvar Slice3D = /** @class */ (function (_super) {\r\n __extends(Slice3D, _super);\r\n /**\r\n * Constructor\r\n */\r\n function Slice3D() {\r\n var _this = \r\n // Init\r\n _super.call(this) || this;\r\n _this.className = \"Slice3D\";\r\n _this.layout = \"none\";\r\n // Create edge container\r\n var edge = _this.createChild(Sprite);\r\n _this.edge = edge;\r\n edge.shouldClone = false;\r\n edge.isMeasured = false;\r\n edge.toBack();\r\n // Set defaults\r\n _this.angle = 30;\r\n _this.depth = 20;\r\n // Create side A element\r\n var sideA = _this.createChild(Sprite);\r\n _this.sideA = sideA;\r\n sideA.shouldClone = false;\r\n sideA.isMeasured = false;\r\n //sideA.setElement(this.paper.add(\"path\"));\r\n //sideA.strokeOpacity = 0;\r\n // Crate side B element\r\n var sideB = _this.createChild(Sprite);\r\n _this.sideB = sideB;\r\n sideB.shouldClone = false;\r\n sideB.isMeasured = false;\r\n //sideB.setElement(this.paper.add(\"path\"));\r\n //sideB.strokeOpacity = 0;\r\n // Apply theme\r\n _this.applyTheme();\r\n return _this;\r\n }\r\n /**\r\n * Sets actual `fill` property on the SVG element, including applicable color\r\n * modifiers.\r\n *\r\n * @ignore Exclude from docs\r\n * @param value Fill\r\n */\r\n Slice3D.prototype.setFill = function (value) {\r\n _super.prototype.setFill.call(this, value);\r\n var colorStr;\r\n if (value instanceof Color) {\r\n colorStr = value.hex;\r\n }\r\n else if (value instanceof LinearGradient || value instanceof RadialGradient) {\r\n colorStr = value.stops.getIndex(0).color.hex;\r\n }\r\n else {\r\n var filter = new LightenFilter();\r\n filter.lightness = -0.25;\r\n this.edge.filters.push(filter);\r\n this.sideA.filters.push(filter.clone());\r\n this.sideB.filters.push(filter.clone());\r\n }\r\n if (colorStr) {\r\n var edgeFill = color(colorStr).lighten(-0.25);\r\n this.edge.fill = edgeFill;\r\n this.sideA.fill = edgeFill;\r\n this.sideB.fill = edgeFill;\r\n this.edge.stroke = edgeFill;\r\n this.sideA.stroke = edgeFill;\r\n this.sideB.stroke = edgeFill;\r\n }\r\n };\r\n /**\r\n * Draws the element.\r\n *\r\n * @ignore Exclude from docs\r\n */\r\n Slice3D.prototype.draw = function () {\r\n this.cornerRadius = 0;\r\n this.innerCornerRadius = 0;\r\n _super.prototype.draw.call(this);\r\n if (this.arc !== 0 && this.radius > 0 && this.depth > 0) {\r\n this.sideB.show(0);\r\n this.sideA.show(0);\r\n this.edge.show(0);\r\n var startAngle = this.startAngle;\r\n var arc = this.arc;\r\n var innerRadius = this.pixelInnerRadius || 0;\r\n var radiusY = this.radiusY || 0;\r\n //let cornerRadius = this.cornerRadius || 0;\r\n //let innerCornerRadius = this.innerCornerRadius;\r\n var radius = this.radius;\r\n // this is code duplicate with $path.arc. @todo to think how to avoid it\r\n var endAngle = startAngle + arc;\r\n //let crSin = $math.sin($math.min(arc, 45) / 2);\r\n //innerCornerRadius = innerCornerRadius || cornerRadius;\r\n var innerRadiusY = (radiusY / radius) * innerRadius;\r\n //let cornerRadiusY = (radiusY / radius) * cornerRadius;\r\n //let innerCornerRadiusY = (radiusY / radius) * innerCornerRadius;\r\n //cornerRadius = $math.fitToRange(cornerRadius, 0, (radius - innerRadius) / 2);\r\n //cornerRadiusY = $math.fitToRange(cornerRadiusY, 0, (radiusY - innerRadiusY) / 2);\r\n //innerCornerRadius = $math.fitToRange(innerCornerRadius, 0, (radius - innerRadius) / 2);\r\n //innerCornerRadiusY = $math.fitToRange(innerCornerRadiusY, 0, (radiusY - innerRadiusY) / 2);\r\n //cornerRadius = $math.fitToRange(cornerRadius, 0, radius * crSin);\r\n //cornerRadiusY = $math.fitToRange(cornerRadiusY, 0, radiusY * crSin);\r\n //innerCornerRadius = $math.fitToRange(innerCornerRadius, 0, innerRadius * crSin);\r\n //innerCornerRadiusY = $math.fitToRange(innerCornerRadiusY, 0, innerRadiusY * crSin);\r\n //let crAngle: number = Math.asin(cornerRadius / radius / 2) * $math.DEGREES * 2;\r\n //let crAngleY: number = Math.asin(cornerRadiusY / radiusY / 2) * $math.DEGREES * 2;\r\n //if (innerRadius < innerCornerRadius) {\r\n //\tinnerRadius = innerCornerRadius;\r\n //}\r\n //if (innerRadiusY < innerCornerRadiusY) {\r\n //\tinnerRadiusY = innerCornerRadiusY;\r\n //}\r\n //let crInnerAngle: number = Math.asin(innerCornerRadius / innerRadius / 2) * $math.DEGREES * 2;\r\n //let crInnerAngleY: number = Math.asin(innerCornerRadiusY / innerRadiusY / 2) * $math.DEGREES * 2;\r\n //if (!$type.isNumber(crInnerAngle)) {\r\n //\tcrInnerAngle = 0;\r\n //}\r\n //if (!$type.isNumber(crInnerAngleY)) {\r\n //\tcrInnerAngleY = 0;\r\n //}\r\n //let middleAngle = startAngle + arc / 2;\r\n //let mPoint = { x: $math.round($math.cos(middleAngle) * innerRadius, 4), y: $math.round($math.sin(middleAngle) * innerRadiusY, 4) };\r\n var a0 = { x: $math.cos(startAngle) * (innerRadius), y: $math.sin(startAngle) * (innerRadiusY) };\r\n var b0 = { x: $math.cos(startAngle) * (radius), y: $math.sin(startAngle) * (radiusY) };\r\n var c0 = { x: $math.cos(endAngle) * (radius), y: $math.sin(endAngle) * (radiusY) };\r\n var d0 = { x: $math.cos(endAngle) * (innerRadius), y: $math.sin(endAngle) * (innerRadiusY) };\r\n // end of duplicate\r\n var h = this.depth;\r\n var ah = { x: a0.x, y: a0.y - h };\r\n var bh = { x: b0.x, y: b0.y - h };\r\n var ch = { x: c0.x, y: c0.y - h };\r\n var dh = { x: d0.x, y: d0.y - h };\r\n var edgePath = \"\";\r\n var count = Math.ceil(arc / 5);\r\n var step = arc / count;\r\n var mangle = startAngle;\r\n var prevPoint = bh;\r\n for (var i = 0; i < count; i++) {\r\n mangle += step;\r\n if (mangle > 0 && mangle < 180) {\r\n edgePath += $path.moveTo(prevPoint);\r\n var pp = { x: $math.cos(mangle) * (radius), y: $math.sin(mangle) * (radiusY) - h };\r\n edgePath += $path.lineTo({ x: prevPoint.x, y: prevPoint.y + h });\r\n edgePath += $path.arcToPoint({ x: pp.x, y: pp.y + h }, radius, radiusY, true);\r\n edgePath += $path.lineTo(pp);\r\n edgePath += $path.arcToPoint(prevPoint, radius, radiusY);\r\n edgePath += \"z\";\r\n prevPoint = pp;\r\n }\r\n else {\r\n edgePath += $path.moveTo(prevPoint);\r\n var pp = { x: $math.cos(mangle) * (radius), y: $math.sin(mangle) * (radiusY) - h };\r\n edgePath += $path.arcToPoint(pp, radius, radiusY, true);\r\n edgePath += $path.lineTo({ x: pp.x, y: pp.y + h });\r\n edgePath += $path.arcToPoint({ x: prevPoint.x, y: prevPoint.y + h }, radius, radiusY);\r\n edgePath += $path.lineTo(prevPoint);\r\n edgePath += \"z\";\r\n prevPoint = pp;\r\n }\r\n }\r\n prevPoint = ah;\r\n mangle = startAngle;\r\n for (var i = 0; i < count; i++) {\r\n mangle += step;\r\n if (mangle > 0 && mangle < 180) {\r\n edgePath += $path.moveTo(prevPoint);\r\n var pp = { x: $math.cos(mangle) * (innerRadius), y: $math.sin(mangle) * (innerRadiusY) - h };\r\n edgePath += $path.lineTo({ x: prevPoint.x, y: prevPoint.y + h });\r\n edgePath += $path.arcToPoint({ x: pp.x, y: pp.y + h }, innerRadius, innerRadiusY, true);\r\n edgePath += $path.lineTo(pp);\r\n edgePath += $path.arcToPoint(prevPoint, innerRadius, innerRadiusY);\r\n edgePath += \"z\";\r\n prevPoint = pp;\r\n }\r\n else {\r\n edgePath += $path.moveTo(prevPoint);\r\n var pp = { x: $math.cos(mangle) * (innerRadius), y: $math.sin(mangle) * (innerRadiusY) - h };\r\n edgePath += $path.arcToPoint(pp, innerRadius, innerRadiusY, true);\r\n edgePath += $path.lineTo({ x: pp.x, y: pp.y + h });\r\n edgePath += $path.arcToPoint({ x: prevPoint.x, y: prevPoint.y + h }, innerRadius, innerRadiusY);\r\n edgePath += $path.lineTo(prevPoint);\r\n edgePath += \"z\";\r\n prevPoint = pp;\r\n }\r\n }\r\n this.edge.path = edgePath;\r\n /*\r\n a0 = { x: $math.cos(startAngle) * (innerRadius + innerCornerRadius), y: $math.sin(startAngle) * (innerRadiusY + innerCornerRadiusY) };\r\n b0 = { x: $math.cos(startAngle) * (radius - cornerRadius), y: $math.sin(startAngle) * (radiusY - cornerRadiusY) };\r\n c0 = { x: $math.cos(endAngle) * (radius - cornerRadius), y: $math.sin(endAngle) * (radiusY - cornerRadiusY) };\r\n d0 = { x: $math.cos(endAngle) * (innerRadius + innerCornerRadius), y: $math.sin(endAngle) * (innerRadiusY + innerCornerRadiusY) };\r\n // end of duplicate\r\n \r\n ah = { x: a0.x, y: a0.y - h };\r\n bh = { x: b0.x, y: b0.y - h };\r\n ch = { x: c0.x, y: c0.y - h };\r\n dh = { x: d0.x, y: d0.y - h };\r\n */\r\n this.sideA.path = $path.moveTo(a0) + $path.lineTo(b0) + $path.lineTo(bh) + $path.lineTo(ah) + $path.closePath();\r\n this.sideB.path = $path.moveTo(c0) + $path.lineTo(d0) + $path.lineTo(dh) + $path.lineTo(ch) + $path.closePath();\r\n if (this.startAngle < 90) {\r\n this.sideA.toBack();\r\n }\r\n else {\r\n this.sideA.toFront();\r\n }\r\n if (this.startAngle + this.arc > 90) {\r\n this.sideB.toBack();\r\n }\r\n else {\r\n this.sideB.toFront();\r\n }\r\n this.slice.dy = -h;\r\n }\r\n else {\r\n this.sideA.hide(0);\r\n this.sideB.hide(0);\r\n this.edge.hide(0);\r\n }\r\n };\r\n Object.defineProperty(Slice3D.prototype, \"depth\", {\r\n /**\r\n * @return Depth (px)\r\n */\r\n get: function () {\r\n return this.getPropertyValue(\"depth\");\r\n },\r\n /**\r\n * Depth (height) of the 3D slice in pixels.\r\n *\r\n * @default 20\r\n * @param depth Depth (px)\r\n */\r\n set: function (depth) {\r\n this.setPropertyValue(\"depth\", depth, true);\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n Object.defineProperty(Slice3D.prototype, \"angle\", {\r\n /**\r\n * @return Angle\r\n */\r\n get: function () {\r\n var angle = this.getPropertyValue(\"angle\");\r\n if (!$type.isNumber(angle)) {\r\n angle = 0;\r\n }\r\n return angle;\r\n },\r\n /**\r\n * Angle of the point of view to the 3D element. (0-360)\r\n *\r\n * @default 30\r\n * @param value Angle\r\n */\r\n set: function (value) {\r\n this.setPropertyValue(\"angle\", value, true);\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n Object.defineProperty(Slice3D.prototype, \"radiusY\", {\r\n /**\r\n * @return Vertical radius (0-1)\r\n */\r\n get: function () {\r\n var radiusY = this.getPropertyValue(\"radiusY\");\r\n if (!$type.isNumber(radiusY)) {\r\n radiusY = this.radius - this.radius * this.angle / 90;\r\n }\r\n return radiusY;\r\n },\r\n /**\r\n * Vertical radius for creating skewed slices.\r\n *\r\n * This is relevant to `radius`, e.g. 0.5 will set vertical radius to half\r\n * the `radius`.\r\n *\r\n * @param value Vertical radius (0-1)\r\n */\r\n set: function (value) {\r\n this.setPropertyValue(\"radiusY\", value, true);\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n /**\r\n * Copies all properties and related data from a different instance of Axis.\r\n *\r\n * @param source Source Axis\r\n */\r\n Slice3D.prototype.copyFrom = function (source) {\r\n _super.prototype.copyFrom.call(this, source);\r\n this.edge.copyFrom(source.edge);\r\n this.sideA.copyFrom(source.sideA);\r\n this.sideB.copyFrom(source.sideB);\r\n };\r\n return Slice3D;\r\n}(Slice));\r\nexport { Slice3D };\r\n//# sourceMappingURL=Slice3D.js.map","/**\r\n * AmChartsLogo module.\r\n *\r\n * AmChartsLogo shows amCharts logo for non-commercial users of a library.\r\n */\r\nimport { __extends } from \"tslib\";\r\n/**\r\n * ============================================================================\r\n * IMPORTS\r\n * ============================================================================\r\n * @hidden\r\n */\r\nimport { Container } from \"../Container\";\r\nimport { InterfaceColorSet } from \"../../core/utils/InterfaceColorSet\";\r\nimport { Polyspline } from \"./Polyspline\";\r\nimport { color } from \"../utils/Color\";\r\nimport { LinearGradient } from \"../rendering/fills/LinearGradient\";\r\nimport { DesaturateFilter } from \"../rendering/filters/DesaturateFilter\";\r\n/**\r\n * ============================================================================\r\n * MAIN CLASS\r\n * ============================================================================\r\n * @hidden\r\n */\r\n/**\r\n * A class used to draw and display progress indicator.\r\n *\r\n * @see {@link IAmChartsLogoEvents} for a list of available events\r\n * @see {@link IAmChartsLogoAdapters} for a list of available Adapters\r\n * @ignore Exclude from docs\r\n */\r\nvar AmChartsLogo = /** @class */ (function (_super) {\r\n __extends(AmChartsLogo, _super);\r\n /**\r\n * Constructor\r\n */\r\n function AmChartsLogo() {\r\n var _this = \r\n // Init\r\n _super.call(this) || this;\r\n _this.className = \"AmChartsLogo\";\r\n _this.valign = \"bottom\";\r\n var d = 0.3;\r\n _this.opacity = 0.3;\r\n _this.defaultState.properties.opacity = 0.4;\r\n _this.url = \"https://www.amcharts.com/\";\r\n _this.urlTarget = \"_blank\";\r\n _this.showSystemTooltip = true;\r\n _this.readerTitle = \"Chart created using amCharts library\";\r\n _this.width = 220 * d;\r\n _this.height = 70 * d;\r\n _this.background.opacity = 0;\r\n var aColor = color(\"#474758\");\r\n if (new InterfaceColorSet().getFor(\"background\").alternative.hex == \"#ffffff\") {\r\n aColor = color(\"#ffffff\");\r\n }\r\n var aGradient = new LinearGradient();\r\n aGradient.addColor(aColor);\r\n aGradient.addColor(aColor, 1, 0.75);\r\n aGradient.addColor(color(\"#3cabff\"), 1, 0.755);\r\n aGradient.rotation = -10;\r\n var aStroke = aGradient;\r\n var m = _this.createChild(Polyspline);\r\n m.shouldClone = false;\r\n m.isMeasured = false;\r\n m.segments = [[{ x: 50 * d, y: 50 * d }, { x: 90 * d, y: 50 * d }, { x: 120 * d, y: 20 * d }, { x: 135 * d, y: 35 * d }, { x: 150 * d, y: 20 * d }, { x: 180 * d, y: 50 * d }, { x: 200 * d, y: 50 * d }]];\r\n m.strokeWidth = 6 * d;\r\n m.tensionX = 0.8;\r\n m.tensionY = 1;\r\n m.stroke = color(\"#3cabff\");\r\n var a = _this.createChild(Polyspline);\r\n a.shouldClone = false;\r\n a.isMeasured = false;\r\n a.segments = [[{ x: 20 * d, y: 50 * d }, { x: 50 * d, y: 50 * d }, { x: 90 * d, y: 12 * d }, { x: 133 * d, y: 50 * d }, { x: 170 * d, y: 50 * d }, { x: 200 * d, y: 50 * d }]];\r\n a.strokeWidth = 6 * d;\r\n a.tensionX = 0.75;\r\n a.tensionY = 1;\r\n a.stroke = aStroke;\r\n _this._disposers.push(a);\r\n var desaturateFilter = new DesaturateFilter();\r\n _this.filters.push(desaturateFilter);\r\n var desaturateFilterHover = new DesaturateFilter();\r\n desaturateFilterHover.saturation = 1;\r\n var hoverState = _this.states.create(\"hover\");\r\n hoverState.properties.opacity = 1;\r\n hoverState.filters.push(desaturateFilterHover);\r\n // Apply theme\r\n _this.applyTheme();\r\n return _this;\r\n }\r\n return AmChartsLogo;\r\n}(Container));\r\nexport { AmChartsLogo };\r\n//# sourceMappingURL=AmChartsLogo.js.map","/**\r\n * Functionality for drawing simple buttons.\r\n */\r\nimport { __extends } from \"tslib\";\r\n/**\r\n * ============================================================================\r\n * IMPORTS\r\n * ============================================================================\r\n * @hidden\r\n */\r\nimport { Container } from \"../Container\";\r\nimport { Label } from \"./Label\";\r\nimport { RoundedRectangle } from \"../elements/RoundedRectangle\";\r\nimport { InterfaceColorSet } from \"../../core/utils/InterfaceColorSet\";\r\nimport { registry } from \"../Registry\";\r\n/**\r\n * ============================================================================\r\n * MAIN CLASS\r\n * ============================================================================\r\n * @hidden\r\n */\r\n/**\r\n * Button class is capable of drawing a simple rectangular button with\r\n * optionally rounded corners and an icon in it.\r\n *\r\n * @see {@link IButtonEvents} for a list of available events\r\n * @see {@link IButtonAdapters} for a list of available Adapters\r\n */\r\nvar Button = /** @class */ (function (_super) {\r\n __extends(Button, _super);\r\n /**\r\n * Constructor\r\n */\r\n function Button() {\r\n var _this = \r\n // Init\r\n _super.call(this) || this;\r\n _this.className = \"Button\";\r\n _this.tooltipY = 0;\r\n // Set defaults\r\n _this.iconPosition = \"left\";\r\n _this.layout = \"horizontal\";\r\n _this.contentAlign = \"center\";\r\n _this.contentValign = \"middle\";\r\n _this.padding(8, 16, 8, 16);\r\n _this.setStateOnChildren = true;\r\n var interfaceColors = new InterfaceColorSet();\r\n // Create background\r\n var background = _this.background;\r\n background.fill = interfaceColors.getFor(\"secondaryButton\");\r\n background.stroke = interfaceColors.getFor(\"secondaryButtonStroke\");\r\n background.fillOpacity = 1;\r\n background.strokeOpacity = 1;\r\n background.cornerRadius(3, 3, 3, 3);\r\n // Create the label element\r\n _this.label = new Label();\r\n _this.label.fill = interfaceColors.getFor(\"secondaryButtonText\");\r\n ;\r\n _this.label.shouldClone = false;\r\n // Create default states\r\n var hoverState = background.states.create(\"hover\");\r\n hoverState.properties.fillOpacity = 1;\r\n hoverState.properties.fill = interfaceColors.getFor(\"secondaryButtonHover\");\r\n var downState = background.states.create(\"down\");\r\n downState.transitionDuration = 100;\r\n downState.properties.fill = interfaceColors.getFor(\"secondaryButtonDown\");\r\n downState.properties.fillOpacity = 1;\r\n // Set up accessibility\r\n // A button should be always focusable\r\n _this.role = \"button\";\r\n _this.focusable = true;\r\n // Apply theme\r\n _this.applyTheme();\r\n return _this;\r\n }\r\n Object.defineProperty(Button.prototype, \"icon\", {\r\n /**\r\n * @return Icon Sprite\r\n */\r\n get: function () {\r\n return this._icon;\r\n },\r\n /**\r\n * A [[Sprite]] to be used as an icon on button.\r\n *\r\n * @param icon Icon Sprite\r\n */\r\n set: function (icon) {\r\n var currentIcon = this._icon;\r\n if (currentIcon) {\r\n //this._icon.dispose();\r\n //this.removeDispose(currentIcon);\r\n currentIcon.parent = undefined;\r\n }\r\n if (icon) {\r\n this._icon = icon;\r\n icon.parent = this;\r\n icon.interactionsEnabled = false;\r\n icon.shouldClone = false;\r\n this.iconPosition = this.iconPosition;\r\n this._disposers.push(icon);\r\n }\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n Object.defineProperty(Button.prototype, \"iconPosition\", {\r\n /**\r\n * @return Icon position\r\n */\r\n get: function () {\r\n return this.getPropertyValue(\"iconPosition\");\r\n },\r\n /**\r\n * Icon position: \"left\" or \"right\".\r\n *\r\n * @default \"left\"\r\n * @param position Icon position\r\n */\r\n set: function (position) {\r\n this.setPropertyValue(\"iconPosition\", position);\r\n if (this.icon) {\r\n if (position == \"left\") {\r\n this.icon.toBack();\r\n }\r\n else {\r\n this.icon.toFront();\r\n }\r\n }\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n Object.defineProperty(Button.prototype, \"label\", {\r\n /**\r\n * @return Label element\r\n */\r\n get: function () {\r\n return this._label;\r\n },\r\n /**\r\n * [[Label]] element to be used for text.\r\n *\r\n * @param label element\r\n */\r\n set: function (label) {\r\n if (this._label) {\r\n //this._label.dispose();\r\n this.removeDispose(this._label);\r\n }\r\n this._label = label;\r\n if (label) {\r\n label.parent = this;\r\n label.interactionsEnabled = false;\r\n this._disposers.push(this._label);\r\n }\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n /**\r\n * Creates a background element for the button.\r\n *\r\n * @ignore Exclude from docs\r\n * @return Background element\r\n */\r\n Button.prototype.createBackground = function () {\r\n return new RoundedRectangle();\r\n };\r\n /**\r\n * Copies properties and other attributes.\r\n *\r\n * @param source Source\r\n */\r\n Button.prototype.copyFrom = function (source) {\r\n _super.prototype.copyFrom.call(this, source);\r\n if (source.label) {\r\n this.label.copyFrom(source.label);\r\n }\r\n if (source.icon) {\r\n this.icon = source.icon.clone();\r\n }\r\n };\r\n return Button;\r\n}(Container));\r\nexport { Button };\r\n/**\r\n * Register class in system, so that it can be instantiated using its name from\r\n * anywhere.\r\n *\r\n * @ignore\r\n */\r\nregistry.registeredClasses[\"Button\"] = Button;\r\n//# sourceMappingURL=Button.js.map","/**\r\n * Functionality for drawing circles.\r\n */\r\nimport { __extends } from \"tslib\";\r\n/**\r\n * ============================================================================\r\n * IMPORTS\r\n * ============================================================================\r\n * @hidden\r\n */\r\nimport { Sprite } from \"../Sprite\";\r\nimport { percent } from \"../utils/Percent\";\r\nimport { registry } from \"../Registry\";\r\nimport * as $utils from \"../utils/Utils\";\r\nimport * as $math from \"../utils/Math\";\r\n/**\r\n * ============================================================================\r\n * MAIN CLASS\r\n * ============================================================================\r\n * @hidden\r\n */\r\n/**\r\n * Used to create a circle\r\n * @see {@link ICircleEvents} for a list of available events\r\n * @see {@link ICircleAdapters} for a list of available Adapters\r\n */\r\nvar Circle = /** @class */ (function (_super) {\r\n __extends(Circle, _super);\r\n /**\r\n * Constructor\r\n */\r\n function Circle() {\r\n var _this = _super.call(this) || this;\r\n _this.className = \"Circle\";\r\n _this.element = _this.paper.add(\"circle\");\r\n _this.setPercentProperty(\"radius\", percent(100));\r\n _this.setPropertyValue(\"horizontalCenter\", \"middle\");\r\n _this.setPropertyValue(\"verticalCenter\", \"middle\");\r\n _this.applyTheme();\r\n return _this;\r\n }\r\n /**\r\n * Draws the circle.\r\n */\r\n Circle.prototype.draw = function () {\r\n _super.prototype.draw.call(this);\r\n this.element.attr({ \"r\": this.pixelRadius });\r\n };\r\n Object.defineProperty(Circle.prototype, \"radius\", {\r\n /**\r\n * @return Radius\r\n */\r\n get: function () {\r\n return this.getPropertyValue(\"radius\");\r\n },\r\n /**\r\n * Radius of the circle.\r\n *\r\n * Can be either absolute (pixels) or relative ([Percent]).\r\n *\r\n * @param value Radius\r\n */\r\n set: function (value) {\r\n this.setPercentProperty(\"radius\", value, true, false, 10, false);\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n Object.defineProperty(Circle.prototype, \"pixelRadius\", {\r\n /**\r\n * Radius of the circle in pixels.\r\n *\r\n * This is a read-only property. To set radius in pixels, use `radius`\r\n * property.\r\n *\r\n * @readonly\r\n * @return Radius (px)\r\n */\r\n get: function () {\r\n return $utils.relativeToValue(this.radius, $math.min(this.innerWidth / 2, this.innerHeight / 2));\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n /**\r\n * Updates bounding box.\r\n *\r\n * @ignore Exclude from docs\r\n */\r\n Circle.prototype.measureElement = function () {\r\n var pixelRadius = this.pixelRadius;\r\n this._bbox = {\r\n x: -pixelRadius,\r\n y: -pixelRadius,\r\n width: pixelRadius * 2,\r\n height: pixelRadius * 2\r\n };\r\n };\r\n return Circle;\r\n}(Sprite));\r\nexport { Circle };\r\n/**\r\n * Register class in system, so that it can be instantiated using its name from\r\n * anywhere.\r\n *\r\n * @ignore\r\n */\r\nregistry.registeredClasses[\"Circle\"] = Circle;\r\n//# sourceMappingURL=Circle.js.map","/**\r\n * Zoom out button functionality.\r\n */\r\nimport { __extends } from \"tslib\";\r\n/**\r\n * ============================================================================\r\n * IMPORTS\r\n * ============================================================================\r\n * @hidden\r\n */\r\nimport { Button } from \"./Button\";\r\nimport { Sprite } from \"../Sprite\";\r\nimport { registry } from \"../Registry\";\r\nimport { InterfaceColorSet } from \"../../core/utils/InterfaceColorSet\";\r\nimport * as $path from \"../rendering/Path\";\r\nimport * as $type from \"../../core/utils/Type\";\r\nimport { MouseCursorStyle } from \"../../core/interaction/Mouse\";\r\n/**\r\n * ============================================================================\r\n * MAIN CLASS\r\n * ============================================================================\r\n * @hidden\r\n */\r\n/**\r\n * Creates a zoom out button.\r\n *\r\n * @see {@link ICloseButtonEvents} for a list of available events\r\n * @see {@link ICloseButtonAdapters} for a list of available Adapters\r\n */\r\nvar CloseButton = /** @class */ (function (_super) {\r\n __extends(CloseButton, _super);\r\n /**\r\n * Constructor\r\n */\r\n function CloseButton() {\r\n var _this = \r\n // Init\r\n _super.call(this) || this;\r\n _this.className = \"CloseButton\";\r\n _this.padding(8, 8, 8, 8);\r\n _this.showSystemTooltip = true;\r\n _this.width = 30;\r\n _this.height = 30;\r\n var interfaceColors = new InterfaceColorSet();\r\n _this.cursorOverStyle = MouseCursorStyle.pointer;\r\n var background = _this.background;\r\n background.cornerRadius(20, 20, 20, 20);\r\n var bgc = interfaceColors.getFor(\"background\");\r\n background.fill = bgc;\r\n background.stroke = interfaceColors.getFor(\"primaryButton\");\r\n background.strokeOpacity = 1;\r\n background.strokeWidth = 1;\r\n var downColor = interfaceColors.getFor(\"primaryButtonActive\");\r\n var bhs = background.states.getKey(\"hover\");\r\n bhs.properties.strokeWidth = 3;\r\n bhs.properties.fill = bgc;\r\n var bds = background.states.getKey(\"down\");\r\n bds.properties.stroke = downColor;\r\n bds.properties.fill = bgc;\r\n // Create an icon\r\n var icon = new Sprite();\r\n icon.element = _this.paper.add(\"path\");\r\n icon.stroke = background.stroke;\r\n _this.icon = icon;\r\n // Apply theme\r\n _this.applyTheme();\r\n return _this;\r\n }\r\n CloseButton.prototype.validate = function () {\r\n _super.prototype.validate.call(this);\r\n var w = this.pixelWidth / 3;\r\n var h = this.pixelHeight / 3;\r\n var path = $path.moveTo({ x: -w / 2, y: -h / 2 });\r\n path += $path.lineTo({ x: w / 2, y: h / 2 });\r\n path += $path.moveTo({ x: w / 2, y: -h / 2 });\r\n path += $path.lineTo({ x: -w / 2, y: h / 2 });\r\n this.icon.path = path;\r\n this.invalidateLayout();\r\n };\r\n /**\r\n * Sets defaults that instantiate some objects that rely on parent, so they\r\n * cannot be set in constructor.\r\n */\r\n CloseButton.prototype.applyInternalDefaults = function () {\r\n _super.prototype.applyInternalDefaults.call(this);\r\n if (!$type.hasValue(this.readerTitle)) {\r\n this.readerTitle = this.language.translate(\"Close\");\r\n }\r\n };\r\n return CloseButton;\r\n}(Button));\r\nexport { CloseButton };\r\n/**\r\n * Register class in system, so that it can be instantiated using its name from\r\n * anywhere.\r\n *\r\n * @ignore\r\n */\r\nregistry.registeredClasses[\"CloseButton\"] = CloseButton;\r\n//# sourceMappingURL=CloseButton.js.map","/**\r\n * Ellipse module.\r\n */\r\nimport { __extends } from \"tslib\";\r\n/**\r\n * ============================================================================\r\n * IMPORTS\r\n * ============================================================================\r\n * @hidden\r\n */\r\nimport { Circle } from \"./Circle\";\r\nimport { registry } from \"../Registry\";\r\n/**\r\n * ============================================================================\r\n * MAIN CLASS\r\n * ============================================================================\r\n * @hidden\r\n */\r\n/**\r\n * Draws an ellipse\r\n * @see {@link IEllipseEvents} for a list of available events\r\n * @see {@link IEllipseAdapters} for a list of available Adapters\r\n */\r\nvar Ellipse = /** @class */ (function (_super) {\r\n __extends(Ellipse, _super);\r\n /**\r\n * Constructor\r\n */\r\n function Ellipse() {\r\n var _this = _super.call(this) || this;\r\n _this.className = \"Ellipse\";\r\n _this.element = _this.paper.add(\"ellipse\");\r\n _this.applyTheme();\r\n return _this;\r\n }\r\n /**\r\n * Draws the ellipsis.\r\n */\r\n Ellipse.prototype.draw = function () {\r\n _super.prototype.draw.call(this);\r\n this.element.attr({ \"rx\": this.radius });\r\n this.element.attr({ \"ry\": this.radiusY });\r\n };\r\n Object.defineProperty(Ellipse.prototype, \"radiusY\", {\r\n /**\r\n * @return Vertical radius\r\n */\r\n get: function () {\r\n return this.innerHeight / 2;\r\n },\r\n /**\r\n * Vertical radius.\r\n *\r\n * It's a relative size to the `radius`.\r\n *\r\n * E.g. 0.8 will mean the height of the ellipsis will be 80% of it's\r\n * horizontal radius.\r\n *\r\n * @param value Vertical radius\r\n */\r\n set: function (value) {\r\n this.height = value * 2;\r\n this.invalidate();\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n Object.defineProperty(Ellipse.prototype, \"radius\", {\r\n /**\r\n * @return Horizontal radius\r\n */\r\n get: function () {\r\n return this.innerWidth / 2;\r\n },\r\n /**\r\n * Horizontal radius.\r\n *\r\n * @param value Horizontal radius\r\n */\r\n set: function (value) {\r\n this.width = value * 2;\r\n this.invalidate();\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n return Ellipse;\r\n}(Circle));\r\nexport { Ellipse };\r\n/**\r\n * Register class in system, so that it can be instantiated using its name from\r\n * anywhere.\r\n *\r\n * @ignore\r\n */\r\nregistry.registeredClasses[\"Ellipse\"] = Ellipse;\r\n//# sourceMappingURL=Ellipse.js.map","/**\r\n * Grip module.\r\n */\r\nimport { __extends } from \"tslib\";\r\n/**\r\n * ============================================================================\r\n * IMPORTS\r\n * ============================================================================\r\n * @hidden\r\n */\r\nimport { Button } from \"./Button\";\r\nimport { Sprite } from \"../Sprite\";\r\nimport { InterfaceColorSet } from \"../../core/utils/InterfaceColorSet\";\r\nimport { registry } from \"../Registry\";\r\nimport { percent } from \"../utils/Percent\";\r\nimport * as $path from \"../rendering/Path\";\r\n/**\r\n * ============================================================================\r\n * MAIN CLASS\r\n * ============================================================================\r\n * @hidden\r\n */\r\n/**\r\n * Creates a grip element that can be used for scrolling or other things.\r\n *\r\n * @see {@link IGripEvents} for a list of available events\r\n * @see {@link IGripAdapters} for a list of available Adapters\r\n * @since 4.4.0\r\n */\r\nvar Grip = /** @class */ (function (_super) {\r\n __extends(Grip, _super);\r\n /**\r\n * Constructor\r\n */\r\n function Grip() {\r\n var _this = \r\n // Init\r\n _super.call(this) || this;\r\n _this.className = \"Grip\";\r\n var cs = new InterfaceColorSet();\r\n // Set defaults\r\n _this.layout = \"absolute\";\r\n _this.padding(10, 10, 10, 10);\r\n _this.margin(3, 3, 3, 3);\r\n _this.background.fillOpacity = 0.3;\r\n _this.background.cornerRadius(10, 10, 10, 10);\r\n // Create an icon\r\n var icon = new Sprite();\r\n icon.element = _this.paper.add(\"path\");\r\n var path = $path.moveTo({ x: -6, y: 0 });\r\n path += $path.lineTo({ x: 6, y: 0 });\r\n path += $path.moveTo({ x: -8, y: -6 });\r\n path += $path.lineTo({ x: 0, y: -12 });\r\n path += $path.lineTo({ x: 8, y: -6 });\r\n path += $path.moveTo({ x: -8, y: 6 });\r\n path += $path.lineTo({ x: 0, y: 12 });\r\n path += $path.lineTo({ x: 8, y: 6 });\r\n icon.path = path;\r\n icon.strokeWidth = 2;\r\n icon.fillOpacity = 0;\r\n icon.pixelPerfect = true;\r\n icon.padding(0, 4, 0, 4);\r\n icon.stroke = cs.getFor(\"text\");\r\n icon.strokeOpacity = 0.7;\r\n icon.align = \"center\";\r\n icon.valign = \"middle\";\r\n _this.icon = icon;\r\n _this.label.dispose();\r\n _this.label = undefined;\r\n // Set default position\r\n _this.position = \"right\";\r\n // Set up autohide\r\n _this.autoHideDelay = 3000;\r\n _this.events.on(\"shown\", function (ev) {\r\n if (_this._autoHideTimeout) {\r\n _this._autoHideTimeout.dispose();\r\n }\r\n if (_this.autoHideDelay) {\r\n _this._autoHideTimeout = _this.setTimeout(function () {\r\n _this.hide();\r\n }, _this.autoHideDelay);\r\n }\r\n });\r\n _this.events.on(\"down\", function (ev) {\r\n if (_this._autoHideTimeout) {\r\n _this._autoHideTimeout.dispose();\r\n }\r\n });\r\n _this.events.on(\"out\", function (ev) {\r\n if (_this.autoHideDelay) {\r\n _this._autoHideTimeout = _this.setTimeout(function () {\r\n _this.hide();\r\n }, _this.autoHideDelay);\r\n }\r\n });\r\n // Apply theme\r\n _this.applyTheme();\r\n return _this;\r\n }\r\n Object.defineProperty(Grip.prototype, \"position\", {\r\n /**\r\n * @return Position\r\n */\r\n get: function () {\r\n return this.getPropertyValue(\"position\");\r\n },\r\n /**\r\n * Sets position of the grip.\r\n *\r\n * Available options: \"left\", \"right\" (default), \"top\", \"bottom\".\r\n *\r\n * @param value Position\r\n */\r\n set: function (value) {\r\n if (this.setPropertyValue(\"position\", value)) {\r\n switch (value) {\r\n case \"left\":\r\n this.align = \"left\";\r\n this.valign = \"middle\";\r\n this.horizontalCenter = \"left\";\r\n this.verticalCenter = \"middle\";\r\n this.icon.rotation = 0;\r\n this.width = undefined;\r\n this.height = percent(30);\r\n break;\r\n case \"right\":\r\n this.align = \"right\";\r\n this.valign = \"middle\";\r\n this.horizontalCenter = \"right\";\r\n this.verticalCenter = \"middle\";\r\n this.icon.rotation = 0;\r\n this.width = undefined;\r\n this.height = percent(30);\r\n break;\r\n case \"top\":\r\n this.align = \"center\";\r\n this.valign = \"top\";\r\n this.horizontalCenter = \"middle\";\r\n this.verticalCenter = \"top\";\r\n this.icon.rotation = 90;\r\n this.width = percent(30);\r\n this.height = undefined;\r\n break;\r\n case \"bottom\":\r\n this.align = \"center\";\r\n this.valign = \"bottom\";\r\n this.horizontalCenter = \"middle\";\r\n this.verticalCenter = \"bottom\";\r\n this.icon.rotation = 90;\r\n this.width = percent(30);\r\n this.height = undefined;\r\n break;\r\n default:\r\n this.align = \"center\";\r\n this.valign = \"middle\";\r\n this.horizontalCenter = \"middle\";\r\n this.verticalCenter = \"middle\";\r\n this.icon.rotation = 90;\r\n this.width = percent(30);\r\n this.height = undefined;\r\n }\r\n }\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n Object.defineProperty(Grip.prototype, \"autoHideDelay\", {\r\n /**\r\n * @return Delay\r\n */\r\n get: function () {\r\n return this.getPropertyValue(\"autoHideDelay\");\r\n },\r\n /**\r\n * Number of milliseconds to show grip until it is hidden automatically.\r\n *\r\n * @default 3000\r\n * @param value Delay\r\n */\r\n set: function (value) {\r\n this.setPropertyValue(\"autoHideDelay\", value);\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n return Grip;\r\n}(Button));\r\nexport { Grip };\r\n/**\r\n * Register class in system, so that it can be instantiated using its name from\r\n * anywhere.\r\n *\r\n * @ignore\r\n */\r\nregistry.registeredClasses[\"Grip\"] = Grip;\r\n//# sourceMappingURL=Grip.js.map","/**\r\n * Functionality for adding images in SVG tree.\r\n */\r\nimport { __extends } from \"tslib\";\r\n/**\r\n * ============================================================================\r\n * IMPORTS\r\n * ============================================================================\r\n * @hidden\r\n */\r\nimport { Sprite } from \"../Sprite\";\r\nimport { registry } from \"../Registry\";\r\nimport * as $dom from \"../utils/DOM\";\r\nimport * as $type from \"../utils/Type\";\r\n/**\r\n * ============================================================================\r\n * MAIN CLASS\r\n * ============================================================================\r\n * @hidden\r\n */\r\n/**\r\n * Used to add `` elements to SVG.\r\n *\r\n * @see {@link IImageEvents} for a list of available events\r\n * @see {@link IImageAdapters} for a list of available Adapters\r\n */\r\nvar Image = /** @class */ (function (_super) {\r\n __extends(Image, _super);\r\n /**\r\n * Constructor\r\n */\r\n function Image() {\r\n var _this = _super.call(this) || this;\r\n _this.className = \"Image\";\r\n _this.element = _this.paper.add(\"image\");\r\n _this.applyTheme();\r\n _this.width = 50;\r\n _this.height = 50;\r\n return _this;\r\n }\r\n /**\r\n * Draws an `` element.\r\n *\r\n * @ignore Exclude from docs\r\n */\r\n Image.prototype.draw = function () {\r\n _super.prototype.draw.call(this);\r\n if (this.href) {\r\n var width = this.innerWidth;\r\n var height = this.innerHeight;\r\n if ($type.isNumber(this.widthRatio)) {\r\n width = height * this.widthRatio;\r\n this.width = width;\r\n }\r\n if ($type.isNumber(this.heightRatio)) {\r\n height = width * this.heightRatio;\r\n this.height = height;\r\n }\r\n this.element.attr({\r\n \"width\": width,\r\n \"height\": height\r\n });\r\n this.element.attrNS($dom.XLINK, \"xlink:href\", this.href);\r\n }\r\n };\r\n Object.defineProperty(Image.prototype, \"href\", {\r\n /**\r\n * @return Image URI\r\n */\r\n get: function () {\r\n return this.getPropertyValue(\"href\");\r\n },\r\n /**\r\n * An image URI.\r\n *\r\n * @param value Image URI\r\n */\r\n set: function (value) {\r\n this.setPropertyValue(\"href\", value, true);\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n Object.defineProperty(Image.prototype, \"widthRatio\", {\r\n /**\r\n * @return Ratio\r\n */\r\n get: function () {\r\n return this.getPropertyValue(\"widthRatio\");\r\n },\r\n /**\r\n * Sets image `width` relatively to its `height`.\r\n *\r\n * If image's `height = 100` and `widthRatio = 0.5` the actual width will be\r\n * `50`.\r\n *\r\n * @param value Ratio\r\n */\r\n set: function (value) {\r\n this.setPropertyValue(\"widthRatio\", value, true);\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n Object.defineProperty(Image.prototype, \"heightRatio\", {\r\n /**\r\n * @return Ratio\r\n */\r\n get: function () {\r\n return this.getPropertyValue(\"heightRatio\");\r\n },\r\n /**\r\n * Sets image `height` relatively to its `width`.\r\n *\r\n * If image's `width = 100` and `heightRatio = 0.5` the actual height will be\r\n * `50`.\r\n *\r\n * @param value Ratio\r\n */\r\n set: function (value) {\r\n this.setPropertyValue(\"heightRatio\", value, true);\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n Object.defineProperty(Image.prototype, \"bbox\", {\r\n /**\r\n * Returns bounding box (square) for this element.\r\n *\r\n * @ignore Exclude from docs\r\n */\r\n get: function () {\r\n return {\r\n x: 0,\r\n y: 0,\r\n width: this.pixelWidth,\r\n height: this.pixelHeight\r\n };\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n return Image;\r\n}(Sprite));\r\nexport { Image };\r\n/**\r\n * Register class in system, so that it can be instantiated using its name from\r\n * anywhere.\r\n *\r\n * @ignore\r\n */\r\nregistry.registeredClasses[\"Image\"] = Image;\r\n//# sourceMappingURL=Image.js.map","/**\r\n * Text class deals with all text placed on chart.\r\n */\r\nimport { __extends } from \"tslib\";\r\n/**\r\n * ============================================================================\r\n * IMPORTS\r\n * ============================================================================\r\n * @hidden\r\n */\r\nimport { Container } from \"../Container\";\r\nimport { registry } from \"../Registry\";\r\nimport { getTextFormatter } from \"../formatters/TextFormatter\";\r\nimport { MultiDisposer } from \"../utils/Disposer\";\r\nimport { InterfaceColorSet } from \"../../core/utils/InterfaceColorSet\";\r\nimport * as $math from \"../utils/Math\";\r\nimport * as $utils from \"../utils/Utils\";\r\nimport * as $type from \"../utils/Type\";\r\nimport * as $dom from \"../utils/DOM\";\r\nimport { defaultRules, ResponsiveBreakpoints } from \"../utils/Responsive\";\r\nimport { options } from \"../Options\";\r\n;\r\n/**\r\n * ============================================================================\r\n * MAIN CLASS\r\n * ============================================================================\r\n * @hidden\r\n */\r\n/**\r\n * Text is used to display highly configurable, data-enabled textual elements.\r\n *\r\n * ## Data Binding\r\n *\r\n * A Text element can dynamically parse and populate its contents with values\r\n * from a [[DataItem]].\r\n *\r\n * To activate such binding, set element's `dataItem` property.\r\n *\r\n * When activated, text contents will be parsed for special tags, e.g.:\r\n *\r\n * ```TypeScript\r\n * label.dataItem = myDataItem;\r\n * label.text = \"The title is: {title}\";\r\n * ```\r\n * ```JavaScript\r\n * label.dataItem = myDataItem;\r\n * label.text = \"The title is: {title}\";\r\n * ```\r\n *\r\n * The above will automatically replace \"{title}\" in the string with the\r\n * actual data value from `myDataItem`.\r\n *\r\n * Note, that most often dataItem is set by the Component.\r\n *\r\n *\r\n * @see {@link ILabelEvents} for a list of available events\r\n * @see {@link ILabelAdapters} for a list of available Adapters\r\n * @see {@link https://www.amcharts.com/docs/v4/concepts/formatters/formatting-strings/} for info on string formatting and data binding\r\n * @todo Vertical align\r\n * @important\r\n */\r\nvar Label = /** @class */ (function (_super) {\r\n __extends(Label, _super);\r\n /**\r\n * Constructor\r\n */\r\n function Label() {\r\n var _this = \r\n // Execute super's constructor\r\n _super.call(this) || this;\r\n /**\r\n * Indicates if the whole text does not fit into max dimenstions set for it.\r\n */\r\n _this.isOversized = false;\r\n // Set this class name\r\n _this.className = \"Label\";\r\n _this.fill = new InterfaceColorSet().getFor(\"text\");\r\n // not good to set this, as then these will appear on each label and values set on container won't be applied.\r\n //this.textDecoration = \"none\";\r\n //this.fontWeight = \"normal\";\r\n // Set defaults\r\n _this.wrap = false;\r\n _this.truncate = false;\r\n _this.fullWords = true;\r\n _this.ellipsis = \"…\";\r\n _this.textAlign = \"start\";\r\n _this.textValign = \"top\";\r\n _this.layout = \"absolute\";\r\n _this.baseLineRatio = -0.27;\r\n //this.pixelPerfect = true;\r\n _this._positionPrecision = 1;\r\n // Add events to watch for maxWidth/maxHeight changes so that we can\r\n // invalidate this\r\n _this.events.on(\"maxsizechanged\", function () {\r\n if (_this.inited) {\r\n _this.handleMaxSize();\r\n }\r\n }, _this, false);\r\n // this solves strange bug when text just added to svg is 0x0\r\n _this.events.once(\"validated\", _this.handleValidate, _this, false);\r\n // Aply theme\r\n _this.applyTheme();\r\n return _this;\r\n }\r\n /**\r\n * A placeholder method that is called **after** element finishes drawing\r\n * itself.\r\n *\r\n * @ignore Exclude from docs\r\n */\r\n Label.prototype.afterDraw = function () {\r\n // since we removed validatePosition from sprite, we still need it here to handle rotated text\r\n _super.prototype.afterDraw.call(this);\r\n this.validatePosition();\r\n };\r\n /**\r\n * Sets [[Paper]] instance to use to draw elements.\r\n * @ignore\r\n * @param paper Paper\r\n * @return true if paper was changed, false, if it's the same\r\n */\r\n Label.prototype.setPaper = function (paper) {\r\n var changed = _super.prototype.setPaper.call(this, paper);\r\n if (changed) {\r\n this.hardInvalidate();\r\n }\r\n return changed;\r\n };\r\n /**\r\n * @ignore\r\n */\r\n Label.prototype.handleValidate = function () {\r\n if ((this.currentText || this.text) && (this.bbox.width == 0 || this.bbox.height == 0)) {\r\n registry.events.once(\"exitframe\", this.hardInvalidate, this);\r\n }\r\n };\r\n /**\r\n * @ignore\r\n */\r\n Label.prototype.handleMaxSize = function () {\r\n if ((this.bbox.width > this.availableWidth)\r\n || ((this.bbox.width < this.availableWidth) && (this.isOversized || this.truncate))\r\n || (this.bbox.height > this.availableHeight)\r\n || ((this.bbox.height < this.availableHeight) && this.isOversized)) {\r\n this.invalidate();\r\n }\r\n else {\r\n //this.alignSVGText();\r\n }\r\n };\r\n /**\r\n * [arrange description]\r\n *\r\n * @ignore Exclude from docs\r\n * @todo Description\r\n */\r\n Label.prototype.arrange = function () {\r\n };\r\n /**\r\n * Updates current text according to data item and supported features.\r\n * Returns `true` if current text has changed.\r\n *\r\n * @return Text changed?\r\n */\r\n Label.prototype.updateCurrentText = function () {\r\n // Determine output format\r\n var output, text;\r\n if ($utils.isNotEmpty(this.html) && this.paper.supportsForeignObject()) {\r\n // We favor HTML text if it's set and browser supports `foreignObject`\r\n output = \"html\";\r\n text = this.html;\r\n }\r\n else {\r\n output = \"svg\";\r\n text = this.text;\r\n }\r\n // Need to toString source?\r\n if ($type.isObject(text)) {\r\n text = text.toString();\r\n }\r\n // Need to format text all the time\r\n if ($type.hasValue(text) && text !== \"\") {\r\n text = this.populateString(text, this.dataItem);\r\n }\r\n if (output == \"html\") {\r\n if (this._adapterO) {\r\n text = this._adapterO.apply(\"htmlOutput\", text);\r\n }\r\n }\r\n else {\r\n if (this._adapterO) {\r\n text = this._adapterO.apply(\"textOutput\", text);\r\n }\r\n }\r\n // Update the text\r\n var changed = text != this.currentText || output != this._currentFormat;\r\n this.currentText = text;\r\n this._currentFormat = output;\r\n return changed;\r\n };\r\n /**\r\n * Hard invalidate means the text will be redrawn even if it hasn't changed.\r\n * This is used when we change `fontSize`, `fontFamily`, or for some other\r\n * reasons.\r\n */\r\n Label.prototype.hardInvalidate = function () {\r\n this._prevStatus = \"\";\r\n this.invalidate();\r\n };\r\n /**\r\n * Gets line bbox, uses caching to save cpu\r\n * @ignore\r\n */\r\n Label.prototype.getLineBBox = function (lineInfo) {\r\n //let cacheKey = lineInfo.text + lineInfo.style;\r\n //let lineBBox = this.getCache(cacheKey);\r\n //if (!lineBBox) {\r\n //lineBBox = lineInfo.element.getBBox();\r\n //if (lineBBox.width != 0 && lineBBox.height != 0) {\r\n //\tthis.setCache(cacheKey, lineBBox, 5000);\r\n //}\r\n //}\r\n var element = lineInfo && lineInfo.element;\r\n var node = element && element.node;\r\n // Check for the parent Node to avoid FF from throwing errors\r\n if (node && node.parentNode) {\r\n lineInfo.bbox = element.getBBox();\r\n }\r\n };\r\n /**\r\n * Draws the textual label.\r\n *\r\n * @ignore Exclude from docs\r\n */\r\n Label.prototype.draw = function () {\r\n // Draw super\r\n _super.prototype.draw.call(this);\r\n var oldW = this.bbox.width;\r\n var oldH = this.bbox.height;\r\n var topParent = this.topParent;\r\n if (topParent) {\r\n if (!topParent.maxWidth || !topParent.maxHeight) {\r\n topParent.events.once(\"maxsizechanged\", this.hardInvalidate, this, false);\r\n return;\r\n }\r\n }\r\n // Calculate max width and height\r\n var maxWidth = $math.max(this.availableWidth - this.pixelPaddingLeft - this.pixelPaddingRight, 0);\r\n var maxHeight = $math.max(this.availableHeight - this.pixelPaddingTop - this.pixelPaddingBottom, 0);\r\n // save\r\n var status = maxHeight + \",\" + maxWidth + this.wrap + this.truncate + this.fullWords + this.rtl + this.ellipsis;\r\n // Update text\r\n if (!this.updateCurrentText() && this.inited && this._prevStatus == status) {\r\n return;\r\n }\r\n this._measuredWidth = 0;\r\n this._measuredHeight = 0;\r\n // Reset\r\n this.isOversized = false;\r\n // Determine output format\r\n var output = this._currentFormat;\r\n var text = this.currentText;\r\n // Empty string\r\n if (!$type.hasValue(text) || text == \"\") {\r\n this.element.attr({ display: \"none\" });\r\n return;\r\n }\r\n // Chop up text into lines\r\n // We're still processing SVG and HTML in the same way for now\r\n var lines = text.split(\"\\n\");\r\n // Do we need to go through the trouble of measuring lines\r\n //let measure: boolean = true;// (lines.length > 1) || this.wrap;\r\n this._prevStatus = status;\r\n this.textAlign = this.textAlign;\r\n // need this to measure\r\n var display = this.group.getAttr(\"display\");\r\n if (display == \"none\") {\r\n this.group.removeAttr(\"display\");\r\n }\r\n if (this.textPathElement) {\r\n this.textPathElement.removeChildren();\r\n }\r\n // SVG or HTML?\r\n if (output === \"svg\") {\r\n /**\r\n * SVG\r\n */\r\n this.element.removeAttr(\"display\");\r\n // Clear the element\r\n var group = this.element;\r\n //group.removeChildren();\r\n this.resetBBox();\r\n // Init state variables\r\n var currentHeight = 0;\r\n var currentFormat = \"\";\r\n // Process each line\r\n for (var i = 0; i < lines.length; i++) {\r\n // Get line\r\n var line = lines[i];\r\n // Check if line is empty\r\n if (line == \"\") {\r\n // It is, let's just update currentHeight and go to the next one\r\n // If it's the first line, we'll have to use arbirary line height,\r\n // since there's nothing to measure. For subsequent lines we can take\r\n // previous line's height\r\n var tempElement = this.getSVGLineElement(\"\", 0);\r\n tempElement.add(this.getSvgElement(\".\", getTextFormatter().translateStyleShortcuts(currentFormat)));\r\n group.add(tempElement);\r\n var offset = Math.ceil(tempElement.getBBox().height);\r\n if (offset > 0) {\r\n currentHeight += offset;\r\n }\r\n group.removeElement(tempElement);\r\n // Clear cache if necessary\r\n var lineInfo_1 = this.getLineInfo(i);\r\n if (lineInfo_1) {\r\n lineInfo_1.text = \"\";\r\n lineInfo_1.element.textContent = \"\";\r\n }\r\n continue;\r\n }\r\n // Chunk up the line and process each chunk\r\n var chunks = getTextFormatter().chunk(line, null, this.ignoreFormatting);\r\n var currentLineHeight = 0;\r\n var firstChunk = true;\r\n var skipTextChunks = false;\r\n // Create line element or grab it from cache\r\n var lineInfo = this.getLineInfo(i);\r\n if (lineInfo) {\r\n // Empty line\r\n lineInfo.text = \"\";\r\n lineInfo.element.textContent = \"\";\r\n }\r\n else {\r\n // Init new line info\r\n lineInfo = {\r\n \"text\": \"\",\r\n \"element\": this.getSVGLineElement(\"\", 0),\r\n \"complex\": false\r\n };\r\n // Create the line element\r\n //lineInfo.element = this.getSVGLineElement(\"\", 0);\r\n //lineElement = this.getSVGLineElement(\"\", 0);\r\n group.add(lineInfo.element);\r\n }\r\n lineInfo.element.removeAttr(\"display\");\r\n lineInfo.element.removeChildren(); // memory leak without this\r\n if (this.textPathElement) {\r\n lineInfo.element.add(this.textPathElement);\r\n }\r\n /*// @todo not needed anymore\r\n if (this.rtl) {\r\n chunks.reverse();\r\n }*/\r\n // Process each chunk\r\n for (var x = 0; x < chunks.length; x++) {\r\n // If there's more than one chunk, means the line is \"complex\"\r\n if (x) {\r\n lineInfo.complex = true;\r\n }\r\n // Get chunk\r\n var chunk = chunks[x];\r\n // Is this chunk format or text?\r\n if (chunk.type === \"format\") {\r\n // Log current format, so that we can apply it to multiple lines if\r\n // necessary\r\n currentFormat = chunk.text;\r\n }\r\n else {\r\n // It's text block\r\n // Need to skip?\r\n // We do this when truncating. We can't just simply go ahead and\r\n // abandon chunk processing as they might have formatting\r\n // instructions in them that are relevant for subsequent lines\r\n if (skipTextChunks) {\r\n continue;\r\n }\r\n // Add chunk to the current element\r\n //lineInfo.element.content += $utils.trim(getTextFormatter().format(currentFormat + chunk.text, output));\r\n lineInfo.text = chunk.text;\r\n lineInfo.style = getTextFormatter().translateStyleShortcuts(currentFormat);\r\n if (this.textPathElement) {\r\n this.getSvgElement(lineInfo.text, lineInfo.style, this.textPathElement);\r\n }\r\n else {\r\n this.getSvgElement(lineInfo.text, lineInfo.style, lineInfo.element);\r\n }\r\n this.getLineBBox(lineInfo);\r\n lineInfo.bbox.width = Math.ceil(lineInfo.bbox.width);\r\n // Updated current line height\r\n if (currentLineHeight < lineInfo.bbox.height) {\r\n currentLineHeight = lineInfo.bbox.height;\r\n }\r\n // Wrapping?\r\n if ((this.wrap || this.truncate) && (lineInfo.bbox.width > maxWidth)) {\r\n // Set oversized\r\n this.isOversized = true;\r\n // Take temporary measurements\r\n var lineText = lineInfo.element.textContent;\r\n var avgCharWidth = (lineInfo.bbox.width / lineText.length); // * .9;\r\n // Calculate average number of symbols / width\r\n var excessChars = $math.min(Math.ceil((lineInfo.bbox.width - maxWidth) / avgCharWidth), lineText.length);\r\n // Are we truncating or auto-wrapping text?\r\n if (this.truncate) {\r\n /**\r\n * Processing line truncation\r\n * With the addition of each text chunk we measure if current\r\n * line does not exceed maxWidth. If it does, we will stop\r\n * addition of further chunks as well as try to truncate\r\n * current or any number of previous chunks with an added\r\n * ellipsis\r\n */\r\n // Indicator whether we need to add ellipsis to the current\r\n // element, even if it fits. This is needed to indicate\r\n // whether we have already removed some subsequent chunks in\r\n // which case we need to add ellipsis.\r\n var addEllipsis = false;\r\n // Process each child in the temporary line, until the whole\r\n // line fits, preferably with an ellipsis\r\n // TODO use iterator instead\r\n var node_1 = lineInfo.element.node;\r\n if (node_1 && node_1.childNodes) {\r\n for (var e = lineInfo.element.node.childNodes.length - 1; e >= 0; e--) {\r\n // Get current element\r\n var node_2 = lineInfo.element.node.childNodes[e];\r\n // Add ellipsis only if previous chunk was removed in full\r\n // and this chunk already fits\r\n //if (addEllipsis && (bbox.width <= maxWidth)) {\r\n if (addEllipsis && (lineInfo.bbox.width <= maxWidth)) {\r\n // Add ellipsis\r\n node_2.textContent += \" \" + this.ellipsis;\r\n // Measure again (we need to make sure ellipsis fits)\r\n lineInfo.bbox = lineInfo.element.getBBox();\r\n lineInfo.bbox.width = Math.floor(lineInfo.bbox.width);\r\n // If it fits, we're done here\r\n // If it doesn't we continue rolling\r\n if (lineInfo.bbox.width <= maxWidth) {\r\n break;\r\n }\r\n }\r\n addEllipsis = false;\r\n // Get element text\r\n var elementText = node_2.textContent;\r\n // Calculate average number of symbols / width\r\n lineText = lineInfo.element.textContent;\r\n excessChars = $math.min(Math.ceil((lineInfo.bbox.width - maxWidth) / avgCharWidth), lineText.length);\r\n // Do this until we fit\r\n while ((lineInfo.bbox.width > maxWidth) && (excessChars <= lineText.length) && (excessChars > 0)) {\r\n // Calculate max available chars\r\n var maxChars = $math.max(lineText.length - excessChars - this.ellipsis.length, 1);\r\n // Is there anything left?\r\n if (maxChars <= 1) {\r\n // Nope, let's jump to the previous item\r\n // Set excess characters to zero so that this loop does\r\n // not repeat when it over\r\n excessChars = 0;\r\n // Add ellipsis to previous item\r\n // Subsequent iterations will check if the ellipsis fits\r\n if (e > 0) {\r\n // Indicating to add ellipsis to previous item\r\n addEllipsis = true;\r\n // Removing this node\r\n lineInfo.element.node.removeChild(node_2);\r\n }\r\n }\r\n // Truncate the text\r\n elementText = $utils.truncateWithEllipsis(elementText, maxChars, this.ellipsis, this.fullWords, this.rtl);\r\n if ((elementText.length > maxChars) && this.fullWords) {\r\n // Still too long?\r\n // Let's try truncating breaking words anyway\r\n elementText = $utils.truncateWithEllipsis(elementText, maxChars, this.ellipsis, false, this.rtl);\r\n }\r\n // Set truncated text\r\n node_2.textContent = elementText;\r\n // Measure again\r\n lineInfo.bbox = lineInfo.element.getBBox();\r\n lineInfo.bbox.width = Math.floor(lineInfo.bbox.width);\r\n // Increase excess characters count, just in case it still\r\n // doesn't fit and we have to go at it again\r\n excessChars = Math.ceil(excessChars * 1.1);\r\n }\r\n // Do not process further chunks\r\n skipTextChunks = true;\r\n }\r\n }\r\n }\r\n else {\r\n /**\r\n * Processign auto-wrap\r\n * In this case we're going to be adding text chunks until\r\n * they don't fit into current line. Once that happens we will\r\n * inject the rest of the chunks to the next line\r\n */\r\n // Get last node added and measure it\r\n var node_3 = lineInfo.element.node;\r\n if (node_3) {\r\n var lastNode = lineInfo.element.node.lastChild;\r\n // Init split lines\r\n var splitLines = void 0;\r\n while ((lineInfo.bbox.width > maxWidth) && (excessChars <= lineText.length) && (excessChars > 0)) {\r\n // Calculate max available chars\r\n var maxChars = $math.max(chunk.text.length - excessChars, 1);\r\n // Don't split the words mid-word if it's not the first chunk\r\n // in the line\r\n if (firstChunk) {\r\n // Split mid-word if necessary\r\n splitLines = $utils.splitTextByCharCount(chunk.text, maxChars, true, this.rtl);\r\n }\r\n else {\r\n // Don't split mid-word\r\n splitLines = $utils.splitTextByCharCount(chunk.text, maxChars, true, this.rtl, false);\r\n // Check if the first word is too long\r\n if ((splitLines[0].length > maxChars) || maxChars === 1) {\r\n // Yes - move the whole chunk to the next line\r\n // Remove the element we just added\r\n lineInfo.element.node.removeChild(lastNode);\r\n // Break out of the while on next cycle\r\n excessChars = 0;\r\n }\r\n }\r\n // Use the first line to update last item\r\n if (excessChars > 0) {\r\n var lineText_1 = splitLines.shift();\r\n if (firstChunk) {\r\n lineText_1 = $utils.trim(lineText_1);\r\n }\r\n lastNode.textContent = getTextFormatter().cleanUp(lineText_1);\r\n }\r\n // Measure again, just in case\r\n lineInfo.bbox = lineInfo.element.getBBox();\r\n lineInfo.bbox.width = Math.floor(lineInfo.bbox.width);\r\n // Increase excess characters count, just in case it still\r\n // doesn't fit and we have to go at it again\r\n //excessChars = Math.ceil(excessChars * 1.05);\r\n excessChars++;\r\n }\r\n // Construct the rest of the line\r\n if (splitLines.length > 0) {\r\n var restOfLine = \"\";\r\n // Add leftovers from splitting the current chunk\r\n if ($type.hasValue(splitLines)) {\r\n if (this.rtl) {\r\n restOfLine += splitLines.join(\"\") + currentFormat;\r\n }\r\n else {\r\n restOfLine += currentFormat + splitLines.join(\"\").replace(/([\\[\\]]{1})/g, \"$1$1\");\r\n }\r\n }\r\n // Add the rest of the chunks\r\n for (var c = x + 1; c < chunks.length; c++) {\r\n if (chunks[c].type == \"value\") {\r\n // We're escaping single square brackets that were\r\n // cleaned up by chunk() back to double square brackets\r\n // so that they are not being treated as format on\r\n // next pass.\r\n restOfLine += chunks[c].text.replace(/([\\[\\]]{1})/g, \"$1$1\");\r\n }\r\n else {\r\n restOfLine += chunks[c].text;\r\n }\r\n }\r\n // Inject the rest of the lines as chunks for subsequent\r\n lines.splice(i + 1, 0, restOfLine);\r\n }\r\n // Skip processing the rest of the chunks\r\n skipTextChunks = true;\r\n }\r\n }\r\n }\r\n // Let's update the text's bbox with the line's one\r\n if (this.bbox.width < lineInfo.bbox.width) {\r\n this.bbox.width = lineInfo.bbox.width;\r\n }\r\n // commented to avoid bug (seen on sankey link) where text is incorrectly aligned\r\n //if (this.bbox.x > lineInfo.bbox.x) {\r\n //this.bbox.x = lineInfo.bbox.x;\r\n //}\r\n this.bbox.height = currentHeight + currentLineHeight;\r\n // Position current line\r\n if (!this.textPathElement) {\r\n lineInfo.element.attr({\r\n \"x\": \"0\",\r\n \"y\": currentHeight + currentLineHeight,\r\n \"dy\": $math.round((this.baseLineRatio * currentLineHeight), 3).toString()\r\n });\r\n }\r\n else {\r\n lineInfo.element.attr({\r\n \"dy\": -this.paddingBottom.toString()\r\n });\r\n }\r\n firstChunk = false;\r\n }\r\n }\r\n // Trim the last item\r\n var node = lineInfo.element.node;\r\n if (node) {\r\n var lastNode = node.lastChild;\r\n if (lastNode) {\r\n lastNode.textContent = this.rtl ?\r\n $utils.ltrim(lastNode.textContent) :\r\n $utils.rtrim(lastNode.textContent);\r\n }\r\n }\r\n // Increment collective height\r\n currentHeight += currentLineHeight;\r\n // Save line cache\r\n this.addLineInfo(lineInfo, i);\r\n }\r\n // Check if maybe we need to hide the whole label if it doesn't fit\r\n this.maybeHideOversized();\r\n this.measureFailed = false;\r\n if (this.bbox.width == 0 || this.bbox.height == 0) {\r\n this.measureFailed = true;\r\n }\r\n // Updated measured dims\r\n this._measuredWidth = $math.round($math.max(this.bbox.width, this.pixelWidth - this.pixelPaddingLeft - this.pixelPaddingRight));\r\n this._measuredHeight = $math.round($math.max(this.bbox.height, this.pixelHeight - this.pixelPaddingTop - this.pixelPaddingBottom));\r\n // Align the lines\r\n this.alignSVGText();\r\n this.bbox.width = this._measuredWidth;\r\n this.bbox.height = this._measuredHeight;\r\n if (oldH != this._measuredHeight || oldW != this._measuredWidth) {\r\n this.dispatch(\"transformed\");\r\n }\r\n this.hideUnused(lines.length);\r\n }\r\n else {\r\n /**\r\n * HTML\r\n */\r\n this.element.removeAttr(\"display\");\r\n this.resetBBox();\r\n // Clear the element\r\n var group = this.element;\r\n group.removeChildren();\r\n this.setCache(\"lineInfo\", [], 0);\r\n // Create a ForeignObject to use as HTML container\r\n var fo = this.paper.foreignObject();\r\n group.add(fo);\r\n // Set widths on foreignObject so that autosizing measurements work\r\n // This will bet reset to actual content width/height\r\n if (this.maxWidth) {\r\n fo.attr({\r\n width: this.maxWidth - this.pixelPaddingLeft - this.pixelPaddingRight\r\n });\r\n }\r\n if (this.maxHeight) {\r\n fo.attr({\r\n height: this.maxHeight - this.pixelPaddingTop - this.pixelPaddingBottom\r\n });\r\n }\r\n // Create line element\r\n //let lineElement: HTMLElement = this.getHTMLLineElement(getTextFormatter().format(this.html, output));\r\n var lineElement = this.getHTMLLineElement(text);\r\n fo.node.appendChild(lineElement);\r\n // Temporarily set to inline-block so we can measure real width and height\r\n lineElement.style.display = \"inline-block\";\r\n var clientWidth = lineElement.clientWidth;\r\n var clientHeight = lineElement.clientHeight;\r\n lineElement.style.display = \"block\";\r\n this._bbox = {\r\n x: 0,\r\n y: 0,\r\n width: clientWidth,\r\n height: clientHeight\r\n };\r\n // Set exact dimensions of foreignObject so it is sized exactly as\r\n // the content within (add one pixel to width so it does not wrap)\r\n fo.attr({\r\n width: clientWidth + 1,\r\n height: clientHeight\r\n });\r\n // Check if maybe we need to hide the whole label if it doesn't fit\r\n this.maybeHideOversized();\r\n // Set measurements and update bbox\r\n this._measuredWidth = $math.max(this.bbox.width, this.pixelWidth - this.pixelPaddingLeft - this.pixelPaddingRight);\r\n this._measuredHeight = $math.max(this.bbox.height, this.pixelHeight - this.pixelPaddingTop - this.pixelPaddingBottom);\r\n this.bbox.width = this._measuredWidth;\r\n this.bbox.height = this._measuredHeight;\r\n // Don't let labels bleed out of the alotted area\r\n if (this.truncate) {\r\n lineElement.style.overflow = \"hidden\";\r\n }\r\n if ((clientWidth > maxWidth) || (clientHeight > maxHeight)) {\r\n this.isOversized = true;\r\n }\r\n }\r\n // Set applicable styles\r\n this.setStyles();\r\n this.updateCenter();\r\n this.updateBackground();\r\n if (display == \"none\") {\r\n this.group.attr({ display: \"none\" });\r\n }\r\n if (this.pathElement) {\r\n this.paper.appendDef(this.pathElement);\r\n }\r\n };\r\n /**\r\n * Hides element if it does not fit into available space\r\n */\r\n Label.prototype.maybeHideOversized = function () {\r\n if (this.hideOversized) {\r\n if ((this.availableWidth < this.bbox.width) || (this.availableHeight < this.bbox.height)) {\r\n this.element.attr({ display: \"none\" });\r\n this.isOversized = true;\r\n }\r\n else {\r\n this.element.removeAttr(\"display\");\r\n this.isOversized = false;\r\n }\r\n }\r\n };\r\n /**\r\n * Aligns the lines horizontally and vertically, based on properties.\r\n *\r\n * @ignore Exclude from docs\r\n */\r\n Label.prototype.alignSVGText = function () {\r\n // Get Group\r\n var group = this.element;\r\n var children = group.node.children || group.node.childNodes;\r\n // Is there anything to align?\r\n if (!children || (children && children.length == 0)) {\r\n return;\r\n }\r\n var width = this._measuredWidth;\r\n var height = this._measuredHeight;\r\n // TODO maybe these aren't needed ?\r\n $utils.used(this.pixelPaddingLeft);\r\n $utils.used(this.pixelPaddingRight);\r\n $utils.used(this.pixelPaddingTop);\r\n $utils.used(this.pixelPaddingBottom);\r\n if (this.rtl) {\r\n group.attr({\r\n \"direction\": \"rtl\"\r\n });\r\n }\r\n else {\r\n group.removeAttr(\"direction\");\r\n }\r\n // Process each line\r\n //$iter.each(group.children.backwards().iterator(), (element) => {\r\n for (var i = children.length - 1; i >= 0; i--) {\r\n // Align horizontally\r\n // Since we are using `text-anchor` for horizontal alignment, all we need\r\n // to do here is move the `x` position\r\n var node = children[i];\r\n node.setAttribute(\"text-anchor\", this.textAlign);\r\n if (this.textPathElement) {\r\n node.removeAttribute(\"x\");\r\n node.removeAttribute(\"y\");\r\n }\r\n else {\r\n switch (this.textAlign) {\r\n case \"middle\":\r\n node.setAttribute(\"x\", (width / 2).toString() + \"px\");\r\n break;\r\n case \"end\":\r\n if (this.rtl) {\r\n }\r\n else {\r\n node.setAttribute(\"x\", width.toString());\r\n }\r\n break;\r\n default:\r\n if (this.rtl) {\r\n node.setAttribute(\"x\", width.toString());\r\n }\r\n else {\r\n node.removeAttribute(\"text-anchor\");\r\n }\r\n break;\r\n }\r\n var y = $type.toNumber(node.getAttribute(\"y\"));\r\n switch (this.textValign) {\r\n case \"middle\":\r\n node.setAttribute(\"y\", ((y || 0) + (height - this.bbox.height) / 2).toString());\r\n break;\r\n case \"bottom\":\r\n node.setAttribute(\"y\", ((y || 0) + height - this.bbox.height).toString());\r\n break;\r\n default:\r\n node.setAttribute(\"y\", (y || 0).toString());\r\n break;\r\n }\r\n }\r\n }\r\n };\r\n /**\r\n * Produces an SVG line element with formatted text.\r\n *\r\n * @ignore Exclude from docs\r\n * @param text Text to wrap into line\r\n * @param y Current line vertical position\r\n * @return A DOM element\r\n * @todo Implement HTML support\r\n */\r\n Label.prototype.getSVGLineElement = function (text, y) {\r\n // Create a node and set text\r\n var element = this.paper.addGroup(\"text\");\r\n element.textContent = text;\r\n // Set parameters\r\n element.attr({\r\n \"x\": \"0\"\r\n //\"alignment-baseline\": \"hanging\",\r\n //\"baseline-shift\": \"-20%\",\r\n //\"text-anchor\": \"center\"\r\n });\r\n // Set `y` position\r\n if ($type.hasValue(y)) {\r\n element.attr({\r\n \"y\": y.toString()\r\n });\r\n }\r\n // Don't let labels blled out of the alotted area\r\n if (this.truncate || this.wrap) {\r\n element.attr({ \"overflow\": \"hidden\" });\r\n }\r\n // Add RTL?\r\n // This has now been moved to this.alignSVGText()\r\n // if (this.rtl) {\r\n // \telement.attr({\r\n // \t\t\"direction\": \"rtl\",\r\n // \t\t//\"unicode-bidi\": \"bidi-override\"\r\n // \t});\r\n // }\r\n return element;\r\n };\r\n Object.defineProperty(Label.prototype, \"rtl\", {\r\n /**\r\n * @return RTL?\r\n */\r\n get: function () {\r\n if ($type.hasValue(this._rtl)) {\r\n return this._rtl;\r\n }\r\n else if (this._topParent) {\r\n return this._topParent.rtl;\r\n }\r\n return false;\r\n },\r\n /**\r\n * An RTL (right-to-left) setting.\r\n *\r\n * RTL may affect alignment, text, and other visual properties.\r\n *\r\n * If you set this on a top-level chart object, it will be used for all\r\n * child elements, e.g. labels, unless they have their own `rtl` setting\r\n * set directly on them.\r\n *\r\n * @param value `true` for to use RTL\r\n */\r\n set: function (value) {\r\n value = $type.toBoolean(value);\r\n this._rtl = value;\r\n if (this.element) {\r\n this.alignSVGText();\r\n }\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n /**\r\n * Resets cached BBox.\r\n *\r\n * @ignore Exclude from docs\r\n */\r\n Label.prototype.resetBBox = function () {\r\n this._bbox = { x: 0, y: 0, width: 0, height: 0 };\r\n };\r\n /**\r\n * Creates and returns an HTML line element (`
`).\r\n *\r\n * @ignore Exclude from docs\r\n * @param text Text to add\r\n * @return `
` element reference\r\n */\r\n Label.prototype.getHTMLLineElement = function (text) {\r\n // Create the
element\r\n var div = document.createElement(\"div\");\r\n div.innerHTML = text;\r\n // Set text alignment\r\n switch (this.textAlign) {\r\n case \"middle\":\r\n div.style.textAlign = \"center\";\r\n break;\r\n case \"end\":\r\n div.style.textAlign = \"right\";\r\n break;\r\n }\r\n // Disable or enable wrapping\r\n if (this.wrap) {\r\n div.style.wordWrap = \"break-word\";\r\n }\r\n else {\r\n div.style.whiteSpace = \"nowrap\";\r\n }\r\n // Don't let labels bleed out of the alotted area\r\n // Moved to `draw()` because setting \"hidden\" kills all measuring\r\n /*if (this.truncate) {\r\n div.style.overflow = \"hidden\";\r\n }*/\r\n // Set RTL-related styles\r\n if (this.rtl) {\r\n div.style.direction = \"rtl\";\r\n //div.style.unicodeBidi = \"bidi-override\";\r\n }\r\n // Translate some of the SVG styles into CSS\r\n if ($type.hasValue(this.fill)) {\r\n div.style.color = this.fill.toString();\r\n }\r\n return div;\r\n };\r\n /**\r\n * Applies specific styles to text to make it not selectable, unless it is\r\n * explicitly set as `selectable`.\r\n *\r\n * @ignore Exclude from docs\r\n * @todo Set styles via AMElement\r\n */\r\n Label.prototype.setStyles = function () {\r\n var group = this.element;\r\n if (!this.selectable || this.draggable || this.resizable || this.swipeable) {\r\n group.addStyle({\r\n \"webkitUserSelect\": \"none\",\r\n \"msUserSelect\": \"none\"\r\n });\r\n }\r\n else if (this.selectable) {\r\n group.removeStyle(\"webkitUserSelect\");\r\n group.removeStyle(\"msUserSelect\");\r\n }\r\n };\r\n /**\r\n * Hides unused lines\r\n */\r\n Label.prototype.hideUnused = function (index) {\r\n this.initLineCache();\r\n var lines = this.getCache(\"lineInfo\");\r\n if (lines.length >= index) {\r\n for (var i = index; i < lines.length; i++) {\r\n var line = lines[i];\r\n if (line && line.element) {\r\n line.element.attr({ \"display\": \"none\" });\r\n }\r\n }\r\n }\r\n };\r\n Object.defineProperty(Label.prototype, \"text\", {\r\n /**\r\n * @return SVG text\r\n */\r\n get: function () {\r\n return this.getPropertyValue(\"text\");\r\n },\r\n /**\r\n * An SVG text.\r\n *\r\n * Please note that setting `html` will override this setting if browser\r\n * supports `foreignObject` in SGV, such as most modern browsers excluding\r\n * IEs.\r\n *\r\n * @param value SVG Text\r\n */\r\n set: function (value) {\r\n //this.setPropertyValue(\"html\", undefined);\r\n this.setPropertyValue(\"text\", value, true);\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n Object.defineProperty(Label.prototype, \"path\", {\r\n /**\r\n * @return Path\r\n */\r\n get: function () {\r\n return this.getPropertyValue(\"path\");\r\n },\r\n /**\r\n * An SVG path string to position text along. If set, the text will follow\r\n * the curvature of the path.\r\n *\r\n * Location along the path can be set using `locationOnPath`.\r\n *\r\n * IMPORTANT: Only SVG text can be put on path. If you are using HTML text\r\n * this setting will be ignored.\r\n *\r\n * @since 4.1.2\r\n * @param value Path\r\n */\r\n set: function (value) {\r\n if (this.setPropertyValue(\"path\", value, true)) {\r\n if (this.pathElement) {\r\n this.pathElement.dispose();\r\n }\r\n if (this.textPathElement) {\r\n this.textPathElement.dispose();\r\n }\r\n this.pathElement = this.paper.add(\"path\");\r\n this.pathElement.attr({ \"d\": value });\r\n this.pathElement.attr({ \"id\": \"text-path-\" + this.uid });\r\n this._disposers.push(this.pathElement);\r\n this.textPathElement = this.paper.addGroup(\"textPath\");\r\n this.textPathElement.attrNS($dom.XLINK, \"xlink:href\", \"#text-path-\" + this.uid);\r\n // TODO remove after https://bugzilla.mozilla.org/show_bug.cgi?id=455986 is fixed\r\n this.textPathElement.attr({ \"path\": value });\r\n this._disposers.push(this.textPathElement);\r\n this.hardInvalidate();\r\n }\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n Object.defineProperty(Label.prototype, \"locationOnPath\", {\r\n /**\r\n * @return Relatvie location on path\r\n */\r\n get: function () {\r\n return this.getPropertyValue(\"locationOnPath\");\r\n },\r\n /**\r\n * Relative label location on `path`. Value range is from 0 (beginning)\r\n * to 1 (end).\r\n *\r\n * Works only if you set `path` setting to an SVG path.\r\n *\r\n * @since 4.1.2\r\n * @default 0\r\n * @param value Relatvie location on path\r\n */\r\n set: function (value) {\r\n this.setPropertyValue(\"locationOnPath\", value);\r\n if (this.textPathElement) {\r\n this.textPathElement.attr({ \"startOffset\": (value * 100) + \"%\" });\r\n }\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n Object.defineProperty(Label.prototype, \"baseLineRatio\", {\r\n /**\r\n * @return Base line ratio\r\n */\r\n get: function () {\r\n return this.getPropertyValue(\"baseLineRatio\");\r\n },\r\n /**\r\n * A ratio to calculate text baseline. Ralative distance from the bottom of\r\n * the label.\r\n *\r\n * @since 4.4.2\r\n * @default -0.27\r\n * @param value Base line ratio\r\n */\r\n set: function (value) {\r\n this.setPropertyValue(\"baseLineRatio\", value);\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n Object.defineProperty(Label.prototype, \"wrap\", {\r\n /**\r\n * @return Auto-wrap enabled or not\r\n */\r\n get: function () {\r\n return this.getPropertyValue(\"wrap\");\r\n },\r\n /**\r\n * Enables or disables autowrapping of text.\r\n *\r\n * @param value Auto-wrapping enabled\r\n */\r\n set: function (value) {\r\n this.resetBBox();\r\n this.setPropertyValue(\"wrap\", value, true);\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n Object.defineProperty(Label.prototype, \"truncate\", {\r\n /**\r\n * @return Truncate text?\r\n */\r\n get: function () {\r\n return this.getPropertyValue(\"truncate\");\r\n },\r\n /**\r\n * Indicates if text lines need to be truncated if they do not fit, using\r\n * configurable `ellipsis` string.\r\n *\r\n * `truncate` overrides `wrap` if both are set to `true`.\r\n *\r\n * NOTE: For HTML text, this setting **won't** trigger a parser and actual\r\n * line truncation with ellipsis. It will just hide everything that goes\r\n * outside the label.\r\n *\r\n * @param value trincate text?\r\n */\r\n set: function (value) {\r\n this.resetBBox();\r\n this.setPropertyValue(\"truncate\", value, true);\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n Object.defineProperty(Label.prototype, \"fullWords\", {\r\n /**\r\n * @return Truncate on full words?\r\n */\r\n get: function () {\r\n return this.getPropertyValue(\"fullWords\");\r\n },\r\n /**\r\n * If `truncate` is enabled, should Label try to break only on full words\r\n * (`true`), or whenever needed, including middle of the word. (`false`)\r\n *\r\n * @default true\r\n * @param value Truncate on full words?\r\n */\r\n set: function (value) {\r\n this.setPropertyValue(\"fullWords\", value, true);\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n Object.defineProperty(Label.prototype, \"ellipsis\", {\r\n /**\r\n * @return Ellipsis string\r\n */\r\n get: function () {\r\n return this.getPropertyValue(\"ellipsis\");\r\n },\r\n /**\r\n * Ellipsis character to use if `truncate` is enabled.\r\n *\r\n * @param value Ellipsis string\r\n * @default \"...\"\r\n */\r\n set: function (value) {\r\n this.setPropertyValue(\"ellipsis\", value, true);\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n Object.defineProperty(Label.prototype, \"selectable\", {\r\n /**\r\n * @return Text selectable?\r\n */\r\n get: function () {\r\n return this.getPropertyValue(\"selectable\");\r\n },\r\n /**\r\n * Forces the text to be selectable. This setting will be ignored if the\r\n * object has some kind of interaction attached to it, such as it is\r\n * `draggable`, `swipeable`, `resizable`.\r\n *\r\n * @param value Text selectable?\r\n * @default false\r\n */\r\n set: function (value) {\r\n this.setPropertyValue(\"selectable\", value, true);\r\n this.setStyles();\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n Object.defineProperty(Label.prototype, \"textAlign\", {\r\n /**\r\n * @return Alignment\r\n */\r\n get: function () {\r\n return this.getPropertyValue(\"textAlign\");\r\n },\r\n /**\r\n * Horizontal text alignment.\r\n *\r\n * Available choices:\r\n * * \"start\"\r\n * * \"middle\"\r\n * * \"end\"\r\n *\r\n * @param value Alignment\r\n */\r\n set: function (value) {\r\n this.setPropertyValue(\"textAlign\", value, true);\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n Object.defineProperty(Label.prototype, \"textValign\", {\r\n /**\r\n * @ignore Exclude from docs (not used)\r\n * @return Alignment\r\n * @deprecated\r\n */\r\n get: function () {\r\n return this.getPropertyValue(\"textValign\");\r\n },\r\n /**\r\n * Vertical text alignment.\r\n *\r\n * @ignore Exclude from docs (not used)\r\n * @param value Alignment\r\n * @deprecated\r\n */\r\n set: function (value) {\r\n this.setPropertyValue(\"textValign\", value, true);\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n Object.defineProperty(Label.prototype, \"html\", {\r\n /**\r\n * @return HTML content\r\n */\r\n get: function () {\r\n return this.getPropertyValue(\"html\");\r\n },\r\n /**\r\n * Raw HTML to be used as text.\r\n *\r\n * NOTE: HTML text is subject to browser support. It relies on browsers\r\n * supporting SVG `foreignObject` nodes. Some browsers (read IEs) do not\r\n * support it. On those browsers, the text will fall back to basic SVG text,\r\n * striping out all HTML markup and styling that goes with it.\r\n *\r\n * For more information about `foreignObject` and its browser compatibility\r\n * refer to [this page](https://developer.mozilla.org/en/docs/Web/SVG/Element/foreignObject#Browser_compatibility).\r\n *\r\n * @param value HTML text\r\n */\r\n set: function (value) {\r\n this.setPropertyValue(\"html\", value, true);\r\n if (!$type.hasValue(value)) {\r\n var group = this.element;\r\n group.removeChildrenByTag(\"foreignObject\");\r\n }\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n Label.prototype.setFill = function (value) {\r\n _super.prototype.setFill.call(this, value);\r\n if (this.html) {\r\n var group = this.element;\r\n var divs = group.node.getElementsByTagName(\"div\");\r\n for (var i = 0; i < divs.length; i++) {\r\n var div = divs[i];\r\n if ($type.hasValue(this.fill)) {\r\n div.style.color = this.fill.toString();\r\n }\r\n }\r\n }\r\n };\r\n Object.defineProperty(Label.prototype, \"hideOversized\", {\r\n /**\r\n * @return Hide if text does not fit?\r\n */\r\n get: function () {\r\n return this.getPropertyValue(\"hideOversized\");\r\n },\r\n /**\r\n * Indicates whether the whole text should be hidden if it does not fit into\r\n * its allotted space.\r\n *\r\n * @param value Hide if text does not fit?\r\n */\r\n set: function (value) {\r\n this.setPropertyValue(\"hideOversized\", value, true);\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n Object.defineProperty(Label.prototype, \"ignoreFormatting\", {\r\n /**\r\n * @return Ignore formatting?\r\n */\r\n get: function () {\r\n return this.getPropertyValue(\"ignoreFormatting\");\r\n },\r\n /**\r\n * If set to `true` square-bracket formatting blocks will be treated as\r\n * regular text.\r\n *\r\n * @default false\r\n * @param value Ignore formatting?\r\n */\r\n set: function (value) {\r\n this.setPropertyValue(\"ignoreFormatting\", value, true);\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n /**\r\n * Override `mesaureElement` so it does not get measure again, because\r\n * internal `_bbox` is being updated by measuring routines in Text itself.\r\n */\r\n Label.prototype.measureElement = function () { };\r\n /**\r\n * Returns information about a line element.\r\n *\r\n * @ignore Exclude from docs\r\n * @param index Line index\r\n * @return Line info object\r\n */\r\n Label.prototype.getLineInfo = function (index) {\r\n this.initLineCache();\r\n var lines = this.getCache(\"lineInfo\");\r\n return lines.length > index ? lines[index] : undefined;\r\n };\r\n /**\r\n * Adds a line to line info cache.\r\n *\r\n * @ignore Exclude from docs\r\n * @param line Line info object\r\n * @param index Insert at specified index\r\n */\r\n Label.prototype.addLineInfo = function (line, index) {\r\n this.initLineCache();\r\n this.getCache(\"lineInfo\")[index] = line;\r\n };\r\n /**\r\n * Checks if line cache is initialized and initializes it.\r\n */\r\n Label.prototype.initLineCache = function () {\r\n if (!$type.hasValue(this.getCache(\"lineInfo\"))) {\r\n this.setCache(\"lineInfo\", [], 0);\r\n }\r\n };\r\n /**\r\n * Sets a [[DataItem]] to use for populating dynamic sections of the text.\r\n *\r\n * Check the description for [[Text]] class, for data binding.\r\n *\r\n * @param dataItem Data item\r\n */\r\n Label.prototype.setDataItem = function (dataItem) {\r\n if (this._sourceDataItemEvents) {\r\n this._sourceDataItemEvents.dispose();\r\n }\r\n if (dataItem) {\r\n this._sourceDataItemEvents = new MultiDisposer([\r\n dataItem.events.on(\"valuechanged\", this.invalidate, this, false),\r\n dataItem.events.on(\"workingvaluechanged\", this.invalidate, this, false),\r\n dataItem.events.on(\"calculatedvaluechanged\", this.invalidate, this, false),\r\n dataItem.events.on(\"propertychanged\", this.invalidate, this, false)\r\n ]);\r\n }\r\n _super.prototype.setDataItem.call(this, dataItem);\r\n };\r\n Object.defineProperty(Label.prototype, \"availableWidth\", {\r\n /**\r\n * Returns available horizontal space.\r\n *\r\n * @ignore Exclude from docs\r\n * @return Available width (px)\r\n */\r\n get: function () {\r\n return $type.hasValue(this.maxWidth) ? this.maxWidth : this.pixelWidth;\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n Object.defineProperty(Label.prototype, \"availableHeight\", {\r\n /**\r\n * Returns available vertical space.\r\n *\r\n * @return Available height (px)\r\n */\r\n get: function () {\r\n return $type.hasValue(this.maxHeight) ? this.maxHeight : this.pixelHeight;\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n // temp, replacing textFormatter method\r\n Label.prototype.getSvgElement = function (text, style, parent) {\r\n var element = this.paper.add(\"tspan\");\r\n element.textContent = text;\r\n if (style) {\r\n if (options.nonce && parent) {\r\n //element.node.setAttribute(\"nonce\", \"test123\");\r\n var classid = \"amcharts_element_style_\" + btoa(style).replace(/[^\\w]*/g, \"\");\r\n element.node.setAttribute(\"class\", classid);\r\n var defs = document.createElementNS($dom.SVGNS, \"defs\");\r\n parent.node.appendChild(defs);\r\n var e = document.createElement(\"style\");\r\n e.type = \"text/css\";\r\n e.innerHTML = \".\" + classid + \" { \" + style + \"}\";\r\n e.setAttribute(\"nonce\", options.nonce);\r\n defs.appendChild(e);\r\n }\r\n else {\r\n element.node.setAttribute(\"style\", style);\r\n }\r\n }\r\n if (parent) {\r\n parent.add(element);\r\n }\r\n return element;\r\n };\r\n /**\r\n * Invalidates the whole element, including layout AND all its child\r\n * elements.\r\n */\r\n Label.prototype.deepInvalidate = function () {\r\n _super.prototype.deepInvalidate.call(this);\r\n this.hardInvalidate();\r\n };\r\n Object.defineProperty(Label.prototype, \"readerTitle\", {\r\n /**\r\n * @return Title\r\n */\r\n get: function () {\r\n var title = this.getPropertyValue(\"readerTitle\");\r\n if (!title) {\r\n title = this.populateString($utils.plainText($utils.isNotEmpty(this.html)\r\n ? this.html\r\n : this.text));\r\n }\r\n else if (this.dataItem) {\r\n title = this.populateString(title);\r\n }\r\n return title;\r\n },\r\n /**\r\n * Screen reader title of the element.\r\n *\r\n * @param value Title\r\n */\r\n set: function (value) {\r\n value = $type.toText(value);\r\n if (this.setPropertyValue(\"readerTitle\", value)) {\r\n this.applyAccessibility();\r\n }\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n return Label;\r\n}(Container));\r\nexport { Label };\r\n/**\r\n * Register class in system, so that it can be instantiated using its name from\r\n * anywhere.\r\n *\r\n * @ignore\r\n */\r\nregistry.registeredClasses[\"Label\"] = Label;\r\n/**\r\n * Add default responsive rules\r\n */\r\n/**\r\n * Hide labels added directly to chart, like titles if chart is short.\r\n */\r\ndefaultRules.push({\r\n relevant: ResponsiveBreakpoints.heightXS,\r\n state: function (target, stateId) {\r\n if (target instanceof Label && target.parent && target.parent.isBaseSprite) {\r\n var state = target.states.create(stateId);\r\n state.properties.disabled = true;\r\n return state;\r\n }\r\n return null;\r\n }\r\n});\r\n//# sourceMappingURL=Label.js.map","/**\r\n * Line drawing functionality.\r\n */\r\nimport { __extends } from \"tslib\";\r\n/**\r\n * ============================================================================\r\n * IMPORTS\r\n * ============================================================================\r\n * @hidden\r\n */\r\nimport { Sprite } from \"../Sprite\";\r\nimport { color } from \"../utils/Color\";\r\nimport { LinearGradient } from \"../rendering/fills/LinearGradient\";\r\nimport { registry } from \"../Registry\";\r\nimport * as $type from \"../utils/Type\";\r\nimport * as $math from \"../utils/Math\";\r\n/**\r\n * ============================================================================\r\n * MAIN CLASS\r\n * ============================================================================\r\n * @hidden\r\n */\r\n/**\r\n * Draws a line.\r\n *\r\n * @see {@link ILineEvents} for a list of available events\r\n * @see {@link ILineAdapters} for a list of available Adapters\r\n */\r\nvar Line = /** @class */ (function (_super) {\r\n __extends(Line, _super);\r\n /**\r\n * Constructor\r\n */\r\n function Line() {\r\n var _this = _super.call(this) || this;\r\n _this.className = \"Line\";\r\n _this.element = _this.paper.add(\"line\");\r\n _this.fill = color(); //\"none\";\r\n _this.x1 = 0;\r\n _this.y1 = 0;\r\n _this.applyTheme();\r\n return _this;\r\n }\r\n /**\r\n * Draws the line.\r\n *\r\n * @ignore Exclude from docs\r\n */\r\n Line.prototype.draw = function () {\r\n _super.prototype.draw.call(this);\r\n if (this.x1 == this.x2 || this.y1 == this.y2) {\r\n this.pixelPerfect = true;\r\n }\r\n else {\r\n this.pixelPerfect = false;\r\n }\r\n this.x1 = this.x1;\r\n this.x2 = this.x2;\r\n this.y1 = this.y1;\r\n this.y2 = this.y2;\r\n };\r\n Object.defineProperty(Line.prototype, \"x1\", {\r\n /**\r\n * @return X\r\n */\r\n get: function () {\r\n return this.getPropertyValue(\"x1\");\r\n },\r\n /**\r\n * X coordinate of first end.\r\n *\r\n * @param value X\r\n */\r\n set: function (value) {\r\n if (!$type.isNumber(value)) {\r\n value = 0;\r\n }\r\n var delta = 0;\r\n if (this.pixelPerfect && this.stroke instanceof LinearGradient) {\r\n delta = 0.00001;\r\n }\r\n this.setPropertyValue(\"x1\", value, true);\r\n this.element.attr({ \"x1\": value + delta });\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n Object.defineProperty(Line.prototype, \"x2\", {\r\n /**\r\n * @return X\r\n */\r\n get: function () {\r\n var value = this.getPropertyValue(\"x2\");\r\n if (!$type.isNumber(value)) {\r\n value = this.pixelWidth;\r\n }\r\n return value;\r\n },\r\n /**\r\n * X coordinate of second end.\r\n *\r\n * @param value X\r\n */\r\n set: function (value) {\r\n if (!$type.isNumber(value)) {\r\n value = 0;\r\n }\r\n this.setPropertyValue(\"x2\", value, true);\r\n this.element.attr({ \"x2\": value });\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n Object.defineProperty(Line.prototype, \"y1\", {\r\n /**\r\n * @return Y\r\n */\r\n get: function () {\r\n return this.getPropertyValue(\"y1\");\r\n },\r\n /**\r\n * Y coordinate of first end.\r\n *\r\n * @param value Y\r\n */\r\n set: function (value) {\r\n if (!$type.isNumber(value)) {\r\n value = 0;\r\n }\r\n var delta = 0;\r\n if (this.pixelPerfect && this.stroke instanceof LinearGradient) {\r\n delta = 0.00001;\r\n }\r\n this.setPropertyValue(\"y1\", value, true);\r\n this.element.attr({ \"y1\": value + delta });\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n Object.defineProperty(Line.prototype, \"y2\", {\r\n /**\r\n * @return Y\r\n */\r\n get: function () {\r\n var value = this.getPropertyValue(\"y2\");\r\n if (!$type.isNumber(value)) {\r\n value = this.pixelHeight;\r\n }\r\n return value;\r\n },\r\n /**\r\n * Y coordinate of second end.\r\n *\r\n * @param value Y\r\n */\r\n set: function (value) {\r\n if (!$type.isNumber(value)) {\r\n value = 0;\r\n }\r\n this.setPropertyValue(\"y2\", value, true);\r\n this.element.attr({ \"y2\": value });\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n /**\r\n * Converts relative position along the line (0-1) into pixel coordinates.\r\n *\r\n * @param position Position (0-1)\r\n * @return Coordinates\r\n */\r\n Line.prototype.positionToPoint = function (position) {\r\n var point1 = { x: this.x1, y: this.y1 };\r\n var point2 = { x: this.x2, y: this.y2 };\r\n var point = $math.getMidPoint(point1, point2, position);\r\n var angle = $math.getAngle(point1, point2);\r\n return { x: point.x, y: point.y, angle: angle };\r\n };\r\n return Line;\r\n}(Sprite));\r\nexport { Line };\r\n/**\r\n * Register class in system, so that it can be instantiated using its name from\r\n * anywhere.\r\n *\r\n * @ignore\r\n */\r\nregistry.registeredClasses[\"Line\"] = Line;\r\n//# sourceMappingURL=Line.js.map","/**\r\n * Modal class is used to display information over chart area.\r\n */\r\nimport { __extends } from \"tslib\";\r\n/**\r\n * ============================================================================\r\n * IMPORTS\r\n * ============================================================================\r\n * @hidden\r\n */\r\nimport { Popup } from \"./Popup\";\r\nimport { Adapter } from \"../utils/Adapter\";\r\n/**\r\n * Shows an HTML modal which covers window or a chart area.\r\n *\r\n * @see {@link https://www.amcharts.com/docs/v4/concepts/popups-and-modals/} For examples and docs on Popups and Modals.\r\n */\r\nvar Modal = /** @class */ (function (_super) {\r\n __extends(Modal, _super);\r\n /**\r\n * Constructor\r\n */\r\n function Modal() {\r\n var _this = _super.call(this) || this;\r\n /**\r\n * Adapter.\r\n */\r\n _this.adapter = new Adapter(_this);\r\n _this.className = \"Modal\";\r\n _this.showCurtain = true;\r\n _this.draggable = false;\r\n return _this;\r\n }\r\n return Modal;\r\n}(Popup));\r\nexport { Modal };\r\n//# sourceMappingURL=Modal.js.map","/**\r\n * Play button functionality.\r\n */\r\nimport { __extends } from \"tslib\";\r\n/**\r\n * ============================================================================\r\n * IMPORTS\r\n * ============================================================================\r\n * @hidden\r\n */\r\nimport { Button } from \"./Button\";\r\nimport { RoundedRectangle } from \"./RoundedRectangle\";\r\nimport { registry } from \"../Registry\";\r\nimport { InterfaceColorSet } from \"../../core/utils/InterfaceColorSet\";\r\nimport { Triangle } from \"./Triangle\";\r\nimport * as $type from \"../../core/utils/Type\";\r\n/**\r\n * ============================================================================\r\n * MAIN CLASS\r\n * ============================================================================\r\n * @hidden\r\n */\r\n/**\r\n * Creates a zoom out button.\r\n *\r\n * @see {@link IPlayButtonEvents} for a list of available events\r\n * @see {@link IPlayButtonAdapters} for a list of available Adapters\r\n */\r\nvar PlayButton = /** @class */ (function (_super) {\r\n __extends(PlayButton, _super);\r\n /**\r\n * Constructor\r\n */\r\n function PlayButton() {\r\n var _this = \r\n // Init\r\n _super.call(this) || this;\r\n _this.className = \"PlayButton\";\r\n _this.padding(12, 12, 12, 12);\r\n _this.showSystemTooltip = true;\r\n var interfaceColors = new InterfaceColorSet();\r\n var background = _this.background;\r\n background.cornerRadius(25, 25, 25, 25);\r\n background.fill = interfaceColors.getFor(\"primaryButton\");\r\n background.stroke = interfaceColors.getFor(\"primaryButtonStroke\");\r\n background.strokeOpacity = 0;\r\n background.states.getKey(\"hover\").properties.fill = interfaceColors.getFor(\"primaryButtonHover\");\r\n background.states.getKey(\"down\").properties.fill = interfaceColors.getFor(\"primaryButtonActive\");\r\n // Create a play icon\r\n var playIcon = new Triangle();\r\n playIcon.direction = \"right\";\r\n playIcon.width = 9;\r\n playIcon.height = 11;\r\n playIcon.marginLeft = 1;\r\n playIcon.marginRight = 1;\r\n playIcon.horizontalCenter = \"middle\";\r\n playIcon.verticalCenter = \"middle\";\r\n playIcon.stroke = interfaceColors.getFor(\"primaryButtonText\");\r\n playIcon.fill = playIcon.stroke;\r\n _this.icon = playIcon;\r\n // Create a play icon\r\n var stopIcon = new RoundedRectangle();\r\n stopIcon.width = 11;\r\n stopIcon.height = 11;\r\n stopIcon.horizontalCenter = \"middle\";\r\n stopIcon.verticalCenter = \"middle\";\r\n stopIcon.cornerRadius(0, 0, 0, 0);\r\n stopIcon.stroke = interfaceColors.getFor(\"primaryButtonText\");\r\n stopIcon.fill = playIcon.stroke;\r\n _this.togglable = true;\r\n var activeState = _this.states.create(\"active\");\r\n activeState.transitionDuration = 0;\r\n activeState.properties.icon = stopIcon;\r\n _this.defaultState.transitionDuration = 0;\r\n // Apply theme\r\n _this.applyTheme();\r\n return _this;\r\n }\r\n /**\r\n * Sets defaults that instantiate some objects that rely on parent, so they\r\n * cannot be set in constructor.\r\n */\r\n PlayButton.prototype.applyInternalDefaults = function () {\r\n _super.prototype.applyInternalDefaults.call(this);\r\n if (!$type.hasValue(this.readerTitle)) {\r\n this.readerTitle = this.language.translate(\"Play\");\r\n }\r\n };\r\n return PlayButton;\r\n}(Button));\r\nexport { PlayButton };\r\n/**\r\n * Register class in system, so that it can be instantiated using its name from\r\n * anywhere.\r\n *\r\n * @ignore\r\n */\r\nregistry.registeredClasses[\"PlayButton\"] = PlayButton;\r\n//# sourceMappingURL=PlayButton.js.map","/**\r\n * Pointed rectangle module.\r\n */\r\nimport { __extends } from \"tslib\";\r\n/**\r\n * ============================================================================\r\n * IMPORTS\r\n * ============================================================================\r\n * @hidden\r\n */\r\nimport { PointedShape } from \"./PointedShape\";\r\nimport * as $math from \"../utils/Math\";\r\n/**\r\n * ============================================================================\r\n * MAIN CLASS\r\n * ============================================================================\r\n * @hidden\r\n */\r\n/**\r\n * Draws a rectangle with a pointer.\r\n *\r\n * @see {@link IPointedRectangleEvents} for a list of available events\r\n * @see {@link IPointedRectangleAdapters} for a list of available Adapters\r\n */\r\nvar PointedRectangle = /** @class */ (function (_super) {\r\n __extends(PointedRectangle, _super);\r\n /**\r\n * Constructor\r\n */\r\n function PointedRectangle() {\r\n var _this = _super.call(this) || this;\r\n _this.className = \"PointedRectangle\";\r\n _this.element = _this.paper.add(\"path\");\r\n _this.cornerRadius = 6;\r\n _this.applyTheme();\r\n return _this;\r\n }\r\n /**\r\n * Draws the element.\r\n *\r\n * @ignore Exclude from docs\r\n */\r\n PointedRectangle.prototype.draw = function () {\r\n _super.prototype.draw.call(this);\r\n var cr = this.cornerRadius;\r\n var w = this.innerWidth;\r\n var h = this.innerHeight;\r\n if (w > 0 && h > 0) {\r\n var x = this.pointerX;\r\n var y = this.pointerY;\r\n var bwh = this.pointerBaseWidth / 2;\r\n var maxcr = $math.min(w / 2, h / 2);\r\n var crtl = $math.fitToRange(cr, 0, maxcr);\r\n var crtr = $math.fitToRange(cr, 0, maxcr);\r\n var crbr = $math.fitToRange(cr, 0, maxcr);\r\n var crbl = $math.fitToRange(cr, 0, maxcr);\r\n // corner coordinates\r\n // top left\r\n var xtl = 0;\r\n var ytl = 0;\r\n // top right\r\n var xtr = w;\r\n var ytr = 0;\r\n // bottom right\r\n var xbr = w;\r\n var ybr = h;\r\n // bottom left\r\n var xbl = 0;\r\n var ybl = h;\r\n var lineT = void 0;\r\n var lineR = void 0;\r\n var lineB = void 0;\r\n var lineL = void 0;\r\n // find stem base side: http://$math.stackexchange.com/questions/274712/calculate-on-which-side-of-straign-line-is-dot-located\r\n // d=(x−x1)(y2−y1)−(y−y1)(x2−x1)\r\n var d1 = (x - xtl) * (ybr - ytl) - (y - ytl) * (xbr - xtl);\r\n var d2 = (x - xbl) * (ytr - ybl) - (y - ybl) * (xtr - xbl);\r\n // top\r\n if (d1 > 0 && d2 > 0) {\r\n var stemX = $math.fitToRange(x, crtl + bwh, w - bwh - crtr);\r\n y = $math.fitToRange(y, -Infinity, 0);\r\n lineT = \"M\" + crtl + \",0 L\" + (stemX - bwh) + \",0 L\" + x + \",\" + y + \" L\" + (stemX + bwh) + \",0 L\" + (w - crtr) + \",0\";\r\n }\r\n else {\r\n lineT = \"M\" + crtl + \",0 L\" + (w - crtr) + \",0\";\r\n }\r\n // bottom\r\n if (d1 < 0 && d2 < 0) {\r\n var stemX = $math.fitToRange(x, crbl + bwh, w - bwh - crbr);\r\n y = $math.fitToRange(y, h, Infinity);\r\n lineB = \" L\" + (w - crbr) + \",\" + h + \" L\" + (stemX + bwh) + \",\" + h + \" L\" + x + \",\" + y + \" L\" + (stemX - bwh) + \",\" + h + \" L\" + crbl + \",\" + h;\r\n }\r\n else {\r\n lineB = \" L\" + crbl + \",\" + h;\r\n }\r\n // left\r\n if (d1 < 0 && d2 > 0) {\r\n var stemY = $math.fitToRange(y, crtl + bwh, h - crbl - bwh);\r\n x = $math.fitToRange(x, -Infinity, 0);\r\n lineL = \" L0,\" + (h - crbl) + \" L0,\" + (stemY + bwh) + \" L\" + x + \",\" + y + \" L0,\" + (stemY - bwh) + \" L0,\" + crtl;\r\n }\r\n else {\r\n lineL = \" L0,\" + crtl;\r\n }\r\n // right\r\n if (d1 > 0 && d2 < 0) {\r\n var stemY = $math.fitToRange(y, crtr + bwh, h - bwh - crbr);\r\n x = $math.fitToRange(x, w, Infinity);\r\n lineR = \" L\" + w + \",\" + crtr + \" L\" + w + \",\" + (stemY - bwh) + \" L\" + x + \",\" + y + \" L\" + w + \",\" + (stemY + bwh) + \" L\" + w + \",\" + (h - crbr);\r\n }\r\n else {\r\n lineR = \" L\" + w + \",\" + (h - crbr);\r\n }\r\n var arcTR = \" a\" + crtr + \",\" + crtr + \" 0 0 1 \" + crtr + \",\" + crtr;\r\n var arcBR = \" a\" + crbr + \",\" + crbr + \" 0 0 1 -\" + crbr + \",\" + crbr;\r\n var arcBL = \" a\" + crbl + \",\" + crbl + \" 0 0 1 -\" + crbl + \",-\" + crbl;\r\n var arcTL = \" a\" + crtl + \",\" + crtl + \" 0 0 1 \" + crtl + \",-\" + crtl;\r\n this.path = lineT + arcTR + lineR + arcBR + lineB + arcBL + lineL + arcTL;\r\n }\r\n };\r\n Object.defineProperty(PointedRectangle.prototype, \"cornerRadius\", {\r\n /**\r\n * @return Corner radius (px)\r\n */\r\n get: function () {\r\n return this.getPropertyValue(\"cornerRadius\");\r\n },\r\n /**\r\n * Radius of rectangle's border in pixels.\r\n *\r\n * @default 0\r\n * @param value Corner radius (px)\r\n */\r\n set: function (value) {\r\n this.setPropertyValue(\"cornerRadius\", value, true);\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n return PointedRectangle;\r\n}(PointedShape));\r\nexport { PointedRectangle };\r\n//# sourceMappingURL=PointedRectangle.js.map","/**\r\n * Pointed shape module.\r\n */\r\nimport { __extends } from \"tslib\";\r\n/**\r\n * ============================================================================\r\n * IMPORTS\r\n * ============================================================================\r\n * @hidden\r\n */\r\nimport { Sprite } from \"../Sprite\";\r\nimport * as $type from \"../utils/Type\";\r\n/**\r\n * ============================================================================\r\n * MAIN CLASS\r\n * ============================================================================\r\n * @hidden\r\n */\r\n/**\r\n * Draws a shape with a pointer.\r\n *\r\n * @see {@link IPointedShapeEvents} for a list of available events\r\n * @see {@link IPointedShapeAdapters} for a list of available Adapters\r\n */\r\nvar PointedShape = /** @class */ (function (_super) {\r\n __extends(PointedShape, _super);\r\n /**\r\n * Constructor\r\n */\r\n function PointedShape() {\r\n var _this = _super.call(this) || this;\r\n _this.className = \"PointedShape\";\r\n _this.pointerBaseWidth = 15;\r\n _this.pointerLength = 10;\r\n _this.pointerY = 0;\r\n _this.pointerX = 0;\r\n _this.applyTheme();\r\n return _this;\r\n }\r\n /**\r\n * Draws the element.\r\n *\r\n * @ignore Exclude from docs\r\n */\r\n PointedShape.prototype.draw = function () {\r\n _super.prototype.draw.call(this);\r\n if (!$type.isNumber(this.pointerX)) {\r\n this.pointerX = this.pixelWidth / 2;\r\n }\r\n if (!$type.isNumber(this.pointerY)) {\r\n this.pointerY = this.pixelHeight + 10;\r\n }\r\n };\r\n Object.defineProperty(PointedShape.prototype, \"pointerBaseWidth\", {\r\n /**\r\n * @return Width (px)\r\n */\r\n get: function () {\r\n return this.getPropertyValue(\"pointerBaseWidth\");\r\n },\r\n /**\r\n * A width of the pinter's (stem's) thick end (base) in pixels.\r\n *\r\n * @default 15\r\n * @param value Width (px)\r\n */\r\n set: function (value) {\r\n this.setPropertyValue(\"pointerBaseWidth\", value, true);\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n Object.defineProperty(PointedShape.prototype, \"pointerLength\", {\r\n /**\r\n * @return Length (px)\r\n */\r\n get: function () {\r\n return this.getPropertyValue(\"pointerLength\");\r\n },\r\n /**\r\n * A length of the pinter (stem) in pixels.\r\n *\r\n * @default 10\r\n * @param value Length (px)\r\n */\r\n set: function (value) {\r\n this.setPropertyValue(\"pointerLength\", value, true);\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n Object.defineProperty(PointedShape.prototype, \"pointerX\", {\r\n /**\r\n * @return X\r\n */\r\n get: function () {\r\n return this.getPropertyValue(\"pointerX\");\r\n },\r\n /**\r\n * X coordinate the shape is pointing to.\r\n *\r\n * @param value X\r\n */\r\n set: function (value) {\r\n this.setPropertyValue(\"pointerX\", value, true);\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n Object.defineProperty(PointedShape.prototype, \"pointerY\", {\r\n /**\r\n * @return Y\r\n */\r\n get: function () {\r\n return this.getPropertyValue(\"pointerY\");\r\n },\r\n /**\r\n * Y coordinate the shape is pointing to.\r\n *\r\n * @param value Y\r\n */\r\n set: function (value) {\r\n this.setPropertyValue(\"pointerY\", value, true);\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n return PointedShape;\r\n}(Sprite));\r\nexport { PointedShape };\r\n//# sourceMappingURL=PointedShape.js.map","/**\r\n * Module for a multi-part arched line.\r\n */\r\nimport { __extends } from \"tslib\";\r\n/**\r\n * ============================================================================\r\n * IMPORTS\r\n * ============================================================================\r\n * @hidden\r\n */\r\nimport { Polyline } from \"./Polyline\";\r\nimport { registry } from \"../Registry\";\r\nimport * as $math from \"../../core/utils/Math\";\r\nimport * as $path from \"../../core/rendering/Path\";\r\n/**\r\n * ============================================================================\r\n * MAIN CLASS\r\n * ============================================================================\r\n * @hidden\r\n */\r\n/**\r\n * Draws a multi-part arched line.\r\n *\r\n * @see {@link IPolyarcEvents} for a list of available events\r\n * @see {@link IPolyarcAdapters} for a list of available Adapters\r\n */\r\nvar Polyarc = /** @class */ (function (_super) {\r\n __extends(Polyarc, _super);\r\n /**\r\n * Constructor\r\n */\r\n function Polyarc() {\r\n var _this = _super.call(this) || this;\r\n _this.className = \"Polyarc\";\r\n _this.controlPointDistance = 0.5;\r\n _this.controlPointPosition = 0.5;\r\n _this.applyTheme();\r\n return _this;\r\n }\r\n /**\r\n * Creats and adds an SVG path for the arc.\r\n *\r\n * @ignore Exclude from docs\r\n */\r\n Polyarc.prototype.makePath = function () {\r\n this._distance = 0;\r\n var segments = this.segments;\r\n if (segments && segments.length > 0) {\r\n var path = \"\";\r\n this._realSegments = [];\r\n for (var i = 0, len = segments.length; i < len; i++) {\r\n var points = segments[i];\r\n var realPoints = [];\r\n this._realSegments.push(realPoints);\r\n if (points.length > 0) {\r\n path += $path.moveTo(points[0]);\r\n for (var p = 1; p < points.length; p++) {\r\n var pointA = points[p - 1];\r\n var pointB = points[p];\r\n var distanceAB = $math.getDistance(pointB, pointA);\r\n var cpDistance = distanceAB * this.controlPointDistance;\r\n var controlPointPosition = this.controlPointPosition;\r\n var angle = -$math.getAngle(pointA, pointB);\r\n var cpx = pointA.x + (pointB.x - pointA.x) * controlPointPosition * 0.5 - cpDistance * $math.sin(angle);\r\n var cpy = pointA.y + (pointB.y - pointA.y) * controlPointPosition * 0.5 - cpDistance * $math.cos(angle);\r\n var controlPoint1 = { x: cpx, y: cpy };\r\n var cpx2 = pointA.x + (pointB.x - pointA.x) * controlPointPosition * 1.5 - cpDistance * $math.sin(angle);\r\n var cpy2 = pointA.y + (pointB.y - pointA.y) * controlPointPosition * 1.5 - cpDistance * $math.cos(angle);\r\n var controlPoint2 = { x: cpx2, y: cpy2 };\r\n path += $path.cubicCurveTo(pointB, controlPoint1, controlPoint2);\r\n // we add a lot of points in order to get the position/angle later\r\n var stepCount = Math.ceil(distanceAB);\r\n var prevPoint = pointA;\r\n if (stepCount > 0) {\r\n for (var i_1 = 0; i_1 <= stepCount; i_1++) {\r\n var point = $math.getPointOnCubicCurve(pointA, pointB, controlPoint1, controlPoint2, i_1 / stepCount);\r\n realPoints.push(point);\r\n this._distance += $math.getDistance(prevPoint, point);\r\n prevPoint = point;\r\n }\r\n }\r\n else {\r\n realPoints.push(pointA);\r\n }\r\n }\r\n }\r\n }\r\n this.path = path;\r\n }\r\n };\r\n Object.defineProperty(Polyarc.prototype, \"controlPointPosition\", {\r\n /**\r\n * @return Position (0-1)\r\n */\r\n get: function () {\r\n return this.getPropertyValue(\"controlPointPosition\");\r\n },\r\n /**\r\n * Relative position along the line the control point is. (0-1)\r\n *\r\n * @default 0.5\r\n * @param value Position (0-1)\r\n */\r\n set: function (value) {\r\n this.setPropertyValue(\"controlPointPosition\", value);\r\n this.makePath();\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n Object.defineProperty(Polyarc.prototype, \"controlPointDistance\", {\r\n /**\r\n * @return Distance (0-1)\r\n */\r\n get: function () {\r\n return this.getPropertyValue(\"controlPointDistance\");\r\n },\r\n /**\r\n * Relative distance of the control point. (0-1)\r\n *\r\n * Default is half the length of the line. (0.5)\r\n *\r\n * @default 0.5\r\n * @param value Distance (0-1)\r\n */\r\n set: function (value) {\r\n this.setPropertyValue(\"controlPointDistance\", value);\r\n this.makePath();\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n return Polyarc;\r\n}(Polyline));\r\nexport { Polyarc };\r\n/**\r\n * Register class in system, so that it can be instantiated using its name from\r\n * anywhere.\r\n *\r\n * @ignore\r\n */\r\nregistry.registeredClasses[\"Polyarc\"] = Polyarc;\r\n//# sourceMappingURL=Polyarc.js.map","/**\r\n * Polygon module.\r\n */\r\nimport { __extends } from \"tslib\";\r\n/**\r\n * ============================================================================\r\n * IMPORTS\r\n * ============================================================================\r\n * @hidden\r\n */\r\nimport { Sprite } from \"../Sprite\";\r\nimport { Morpher } from \"../utils/Morpher\";\r\nimport { registry } from \"../Registry\";\r\nimport * as $path from \"../rendering/Path\";\r\nimport * as $type from \"../utils/Type\";\r\n/**\r\n * ============================================================================\r\n * MAIN CLASS\r\n * ============================================================================\r\n * @hidden\r\n */\r\n/**\r\n * Draws a polygon.\r\n *\r\n * @see {@link IPolygonEvents} for a list of available events\r\n * @see {@link IPolygonAdapters} for a list of available Adapters\r\n */\r\nvar Polygon = /** @class */ (function (_super) {\r\n __extends(Polygon, _super);\r\n /**\r\n * Constructor\r\n */\r\n function Polygon() {\r\n var _this = _super.call(this) || this;\r\n _this.className = \"Polygon\";\r\n _this.element = _this.paper.add(\"path\");\r\n _this.shapeRendering = \"auto\";\r\n _this._currentPoints = [];\r\n _this.applyTheme();\r\n return _this;\r\n }\r\n Object.defineProperty(Polygon.prototype, \"points\", {\r\n /**\r\n * @return Polygon points\r\n */\r\n get: function () {\r\n var points = this.getPropertyValue(\"points\");\r\n var path = this.path;\r\n if (path && (!points || points.length == 0)) {\r\n var valueStr = path.slice(1, path.length - 1);\r\n var segments = valueStr.split(\"ZM\");\r\n for (var s = 0; s < segments.length; s++) {\r\n var segment = segments[s];\r\n if (segment.length > 0) {\r\n var areaHole = segment.split(\"M\");\r\n var areaArr = areaHole[0];\r\n var holeArr = areaHole[1];\r\n if (areaArr && areaArr.length > 0) {\r\n var pointsArr = areaArr.split(\"L\");\r\n if (pointsArr.length > 0) {\r\n var area = [];\r\n var areaAndHole = [area];\r\n points.push(areaAndHole);\r\n for (var p = 0; p < pointsArr.length; p++) {\r\n var coords = pointsArr[p].split(\",\");\r\n area.push({ x: +coords[0], y: +coords[1] });\r\n }\r\n if (holeArr && holeArr.length > 0) {\r\n var pointsArr_1 = holeArr.split(\"L\");\r\n if (pointsArr_1.length > 0) {\r\n var hole = [];\r\n areaAndHole.push(hole);\r\n for (var p = pointsArr_1.length - 1; p >= 0; p--) {\r\n var coords = pointsArr_1[p].split(\",\");\r\n hole.push({ x: +coords[0], y: +coords[1] });\r\n }\r\n }\r\n }\r\n }\r\n }\r\n }\r\n }\r\n this.setPropertyValue(\"points\", points);\r\n this._currentPoints = points;\r\n }\r\n return points;\r\n },\r\n /**\r\n * An array of X/Y coordinates for each elbow of the polygon.\r\n *\r\n * @todo Example\r\n * @param points Polygon points\r\n */\r\n set: function (points) {\r\n this.setPropertyValue(\"points\", points, true);\r\n this._currentPoints = points;\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n Object.defineProperty(Polygon.prototype, \"currentPoints\", {\r\n /**\r\n * @return Polygon points\r\n */\r\n get: function () {\r\n if ((!this._currentPoints || this._currentPoints.length == 0) && this.path) {\r\n this._currentPoints = this.points;\r\n }\r\n return this._currentPoints;\r\n },\r\n /**\r\n * Current points. Used when morphing the element, so that original `points`\r\n * are not overwritten.\r\n *\r\n * @param points Polygon points\r\n */\r\n set: function (points) {\r\n if (this._currentPoints != points) {\r\n this._currentPoints = points;\r\n this.draw();\r\n }\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n /**\r\n * Draws the element.\r\n *\r\n * @ignore Exclude from docs\r\n */\r\n Polygon.prototype.draw = function () {\r\n var path = \"\";\r\n var points = this._currentPoints;\r\n var left;\r\n var right;\r\n var top;\r\n var bottom;\r\n if (points.length > 0) {\r\n // separate areas\r\n for (var i = 0, len = points.length; i < len; i++) {\r\n // surface\r\n var surface = points[i][0];\r\n var hole = points[i][1];\r\n if (surface && surface.length > 0) {\r\n var point = surface[0];\r\n path += $path.moveTo(point);\r\n for (var s = 0; s < surface.length; s++) {\r\n point = surface[s];\r\n path += $path.lineTo(point);\r\n if (!$type.isNumber(right) || (right < point.x)) {\r\n right = point.x;\r\n }\r\n if (!$type.isNumber(left) || (left > point.x)) {\r\n left = point.x;\r\n }\r\n if (!$type.isNumber(top) || (top > point.y)) {\r\n top = point.y;\r\n }\r\n if (!$type.isNumber(bottom) || (bottom < point.y)) {\r\n bottom = point.y;\r\n }\r\n }\r\n }\r\n // hole\r\n if (hole && hole.length > 0) {\r\n var point = hole[0];\r\n path += $path.moveTo(point);\r\n for (var h = 0, hlen = hole.length; h < hlen; h++) {\r\n point = hole[h];\r\n path += $path.lineTo(point);\r\n }\r\n }\r\n }\r\n if (path) {\r\n path += $path.closePath();\r\n }\r\n this.bbox.x = left;\r\n this.bbox.y = top;\r\n this.bbox.width = right - left;\r\n this.bbox.height = bottom - top;\r\n _super.prototype.setPath.call(this, path);\r\n }\r\n };\r\n /**\r\n * @ignore\r\n */\r\n Polygon.prototype.setPath = function (value) {\r\n if (_super.prototype.setPath.call(this, value)) {\r\n this.points = [];\r\n this._bbox = this.group.getBBox();\r\n return true;\r\n }\r\n return false;\r\n };\r\n /**\r\n * Measures element\r\n */\r\n Polygon.prototype.measureElement = function () {\r\n // Overriding to avoid extra measurement.\r\n };\r\n Object.defineProperty(Polygon.prototype, \"centerPoint\", {\r\n /**\r\n * A calculated center point for the shape.\r\n *\r\n * @readonly\r\n * @return Center\r\n */\r\n get: function () {\r\n return { x: this.bbox.x + this.bbox.width / 2, y: this.bbox.y + this.bbox.height / 2 };\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n Object.defineProperty(Polygon.prototype, \"morpher\", {\r\n /**\r\n * A [[Morpher]] instance that is used to morph polygon into some other\r\n * shape.\r\n *\r\n * @readonly\r\n * @return Morpher instance\r\n */\r\n get: function () {\r\n if (!this._morpher) {\r\n this._morpher = new Morpher(this);\r\n this._disposers.push(this._morpher);\r\n }\r\n return this._morpher;\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n return Polygon;\r\n}(Sprite));\r\nexport { Polygon };\r\n/**\r\n * Register class in system, so that it can be instantiated using its name from\r\n * anywhere.\r\n *\r\n * @ignore\r\n */\r\nregistry.registeredClasses[\"Polygon\"] = Polygon;\r\n//# sourceMappingURL=Polygon.js.map","/**\r\n * Polyline module\r\n */\r\nimport { __extends } from \"tslib\";\r\n/**\r\n * ============================================================================\r\n * IMPORTS\r\n * ============================================================================\r\n * @hidden\r\n */\r\nimport { Sprite } from \"../Sprite\";\r\nimport { color } from \"../utils/Color\";\r\nimport { registry } from \"../Registry\";\r\nimport * as $path from \"../rendering/Path\";\r\nimport * as $math from \"../utils/Math\";\r\n/**\r\n * ============================================================================\r\n * MAIN CLASS\r\n * ============================================================================\r\n * @hidden\r\n */\r\n/**\r\n * Draws a polyline.\r\n *\r\n * @see {@link IPolylineEvents} for a list of available events\r\n * @see {@link IPolylineAdapters} for a list of available Adapters\r\n */\r\nvar Polyline = /** @class */ (function (_super) {\r\n __extends(Polyline, _super);\r\n /**\r\n * Constructor\r\n */\r\n function Polyline() {\r\n var _this = _super.call(this) || this;\r\n /**\r\n * [_distance description]\r\n *\r\n * @todo Description\r\n */\r\n _this._distance = 0;\r\n _this.className = \"Polyline\";\r\n _this.element = _this.paper.add(\"path\");\r\n _this.shapeRendering = \"auto\";\r\n _this.fill = color();\r\n _this.strokeOpacity = 1;\r\n _this.applyTheme();\r\n return _this;\r\n }\r\n /**\r\n * Creats and adds an SVG path for the arc.\r\n *\r\n * @ignore Exclude from docs\r\n */\r\n Polyline.prototype.makePath = function () {\r\n this._distance = 0;\r\n var segments = this.segments;\r\n if (segments && segments.length > 0) {\r\n var path = \"\";\r\n for (var i = 0, len = segments.length; i < len; i++) {\r\n var points = segments[i];\r\n if (points.length > 0) {\r\n path += $path.moveTo(points[0]);\r\n for (var p = 1; p < points.length; p++) {\r\n var point = points[p];\r\n path += $path.lineTo(point);\r\n this._distance += $math.getDistance(points[p - 1], point);\r\n }\r\n }\r\n }\r\n this.path = path;\r\n }\r\n this._realSegments = segments;\r\n };\r\n Object.defineProperty(Polyline.prototype, \"segments\", {\r\n /**\r\n * @return Segments\r\n */\r\n get: function () {\r\n return this.getPropertyValue(\"segments\");\r\n },\r\n /**\r\n * A list of segment coordinates for the multi-part line.\r\n *\r\n * @todo Example\r\n * @param segments Segments\r\n */\r\n set: function (segments) {\r\n this.setPropertyValue(\"segments\", segments);\r\n this.makePath();\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n Object.defineProperty(Polyline.prototype, \"distance\", {\r\n /**\r\n * [distance description]\r\n *\r\n * @todo Description\r\n * @return [description]\r\n */\r\n get: function () {\r\n return this._distance;\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n /**\r\n * Converts relative position along the line (0-1) into pixel coordinates.\r\n *\r\n * @param position Position (0-1)\r\n * @return Coordinates\r\n */\r\n Polyline.prototype.positionToPoint = function (position) {\r\n var deltaAngle = 0;\r\n if (position < 0) {\r\n position = Math.abs(position);\r\n deltaAngle = 180;\r\n }\r\n var segments = this._realSegments;\r\n if (segments) {\r\n var totalDistance = this.distance;\r\n var currentDistance = 0;\r\n var distanceAB = void 0;\r\n var positionA = 0;\r\n var positionB = 0;\r\n var pointA = void 0;\r\n var pointB = void 0;\r\n for (var s = 0; s < segments.length; s++) {\r\n var points = segments[s];\r\n if (points.length > 1) {\r\n for (var p = 1; p < points.length; p++) {\r\n pointA = points[p - 1];\r\n pointB = points[p];\r\n positionA = currentDistance / totalDistance;\r\n distanceAB = $math.getDistance(pointA, pointB);\r\n currentDistance += distanceAB;\r\n positionB = currentDistance / totalDistance;\r\n if (positionA <= position && positionB > position) {\r\n s = segments.length;\r\n break;\r\n }\r\n }\r\n }\r\n else if (points.length == 1) {\r\n pointA = points[0];\r\n pointB = points[0];\r\n positionA = 0;\r\n positionB = 1;\r\n }\r\n }\r\n if (pointA && pointB) {\r\n var positionAB = (position - positionA) / (positionB - positionA);\r\n var midPoint = $math.getMidPoint(pointA, pointB, positionAB);\r\n return { x: midPoint.x, y: midPoint.y, angle: deltaAngle + $math.getAngle(pointA, pointB) };\r\n }\r\n }\r\n return { x: 0, y: 0, angle: 0 };\r\n };\r\n Object.defineProperty(Polyline.prototype, \"realSegments\", {\r\n /**\r\n * @ignore\r\n */\r\n get: function () {\r\n return this._realSegments;\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n return Polyline;\r\n}(Sprite));\r\nexport { Polyline };\r\n/**\r\n * Register class in system, so that it can be instantiated using its name from\r\n * anywhere.\r\n *\r\n * @ignore\r\n */\r\nregistry.registeredClasses[\"Polyline\"] = Polyline;\r\n//# sourceMappingURL=Polyline.js.map","/**\r\n * Polyspline (smoothed line) module.\r\n */\r\nimport { __extends } from \"tslib\";\r\n/**\r\n * ============================================================================\r\n * IMPORTS\r\n * ============================================================================\r\n * @hidden\r\n */\r\nimport { Polyline } from \"./Polyline\";\r\nimport { registry } from \"../Registry\";\r\nimport * as $math from \"../../core/utils/Math\";\r\nimport * as $type from \"../../core/utils/Type\";\r\nimport * as $path from \"../../core/rendering/Path\";\r\n/**\r\n * ============================================================================\r\n * MAIN CLASS\r\n * ============================================================================\r\n * @hidden\r\n */\r\n/**\r\n * Draws a polysline. (smoothed multi-sigment line)\r\n *\r\n * @see {@link IPolysplineEvents} for a list of available events\r\n * @see {@link IPolysplineAdapters} for a list of available Adapters\r\n */\r\nvar Polyspline = /** @class */ (function (_super) {\r\n __extends(Polyspline, _super);\r\n /**\r\n * Constructor\r\n */\r\n function Polyspline() {\r\n var _this = _super.call(this) || this;\r\n _this.className = \"Polyspline\";\r\n _this.tensionX = 0.5;\r\n _this.tensionY = 0.5;\r\n _this.applyTheme();\r\n return _this;\r\n }\r\n /**\r\n * Creats and adds an SVG path for the arc.\r\n *\r\n * @ignore Exclude from docs\r\n */\r\n Polyspline.prototype.makePath = function () {\r\n this._distance = 0;\r\n var segments = this.segments;\r\n var tensionX = this.tensionX;\r\n var tensionY = this.tensionY;\r\n this.allPoints = [];\r\n if (segments && segments.length > 0) {\r\n var path = \"\";\r\n this._realSegments = [];\r\n for (var i = 0, len = segments.length; i < len; i++) {\r\n var points = segments[i];\r\n var realPoints = [];\r\n this._realSegments.push(realPoints);\r\n if (points.length > 0) {\r\n var first = points[0];\r\n var last = points[points.length - 1];\r\n var closed_1 = false;\r\n if ($math.round(first.x, 3) == $math.round(last.x) && $math.round(first.y) == $math.round(last.y)) {\r\n closed_1 = true;\r\n }\r\n path += $path.moveTo(points[0]);\r\n for (var p = 0; p < points.length - 1; p++) {\r\n var p0 = points[p - 1];\r\n var p1 = points[p];\r\n var p2 = points[p + 1];\r\n var p3 = points[p + 2];\r\n if (p === 0) {\r\n p0 = points[p];\r\n }\r\n else if (p == points.length - 2) {\r\n p3 = points[p + 1];\r\n }\r\n if (!p3) {\r\n p3 = p2;\r\n }\r\n if (p === 0) {\r\n if (closed_1) {\r\n p0 = points[points.length - 2];\r\n }\r\n else {\r\n p0 = points[i];\r\n }\r\n }\r\n else if (p == points.length - 2) {\r\n if (closed_1) {\r\n p3 = points[1];\r\n }\r\n else {\r\n p3 = points[p + 1];\r\n }\r\n }\r\n var controlPointA = $math.getCubicControlPointA(p0, p1, p2, p3, tensionX, tensionY);\r\n var controlPointB = $math.getCubicControlPointB(p0, p1, p2, p3, tensionX, tensionY);\r\n path += $path.cubicCurveTo(p2, controlPointA, controlPointB);\r\n // now split to small segments so that we could have positionToPoint later\r\n var stepCount = Math.ceil($math.getCubicCurveDistance(p1, p2, controlPointA, controlPointB, 20)) * 1.2;\r\n var prevPoint = p1;\r\n if (stepCount > 0) {\r\n // not good for curved charts\r\n //this.allPoints[0] = { x: points[0].x, y: points[0].y, angle: $math.getAngle(points[0], points[1]) };\r\n //realPoints.push(this.allPoints[0]);\r\n for (var s = 0; s <= stepCount; s++) {\r\n var point = $math.getPointOnCubicCurve(p1, p2, controlPointA, controlPointB, s / stepCount);\r\n if (point.x == prevPoint.x && point.y == prevPoint.y) {\r\n continue;\r\n }\r\n realPoints.push(point);\r\n var angle = $math.round($math.getAngle(prevPoint, point), 5);\r\n //this.allPoints.push({ x: point.x, y: point.y, angle: angle });\r\n this._distance += $math.getDistance(prevPoint, point);\r\n this.allPoints[Math.floor(this._distance)] = { x: point.x, y: point.y, angle: angle };\r\n prevPoint = point;\r\n }\r\n }\r\n else {\r\n realPoints.push(p0);\r\n }\r\n }\r\n }\r\n var allPoints = this.allPoints;\r\n if (allPoints.length > 1) {\r\n for (var i_1 = 0; i_1 < allPoints.length; i_1++) {\r\n if (!allPoints[i_1]) {\r\n if (i_1 > 1) {\r\n allPoints[i_1] = allPoints[i_1 - 1];\r\n }\r\n else {\r\n for (var k = 1; k < allPoints.length; k++) {\r\n if (allPoints[k]) {\r\n allPoints[i_1] = allPoints[k];\r\n break;\r\n }\r\n }\r\n }\r\n }\r\n }\r\n }\r\n }\r\n this.path = path;\r\n }\r\n };\r\n /**\r\n * Returns an index of the point that is closest to specified coordinates.\r\n *\r\n * @param point Reference point\r\n * @return Index\r\n */\r\n Polyspline.prototype.getClosestPointIndex = function (point) {\r\n var points = this.allPoints;\r\n var index;\r\n var closest = Infinity;\r\n if (points.length > 1) {\r\n for (var p = 1; p < points.length; p++) {\r\n var distance = $math.getDistance(point, points[p]);\r\n if (distance < closest) {\r\n index = p;\r\n closest = distance;\r\n }\r\n }\r\n }\r\n return index;\r\n };\r\n Object.defineProperty(Polyspline.prototype, \"tensionX\", {\r\n /**\r\n * @return Tension\r\n */\r\n get: function () {\r\n return this.getPropertyValue(\"tensionX\");\r\n },\r\n /**\r\n * Horizontal tension for the spline.\r\n *\r\n * Used by the line smoothing algorithm.\r\n *\r\n * @default 0.5\r\n * @param value Tension\r\n */\r\n set: function (value) {\r\n this.setPropertyValue(\"tensionX\", value);\r\n this.makePath();\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n Object.defineProperty(Polyspline.prototype, \"tensionY\", {\r\n /**\r\n * @return Tension\r\n */\r\n get: function () {\r\n return this.getPropertyValue(\"tensionY\");\r\n },\r\n /**\r\n * Vertical tension for the spline.\r\n *\r\n * Used by the line smoothing algorithm.\r\n *\r\n * @default 0.5\r\n * @param value Tensions\r\n */\r\n set: function (value) {\r\n this.setPropertyValue(\"tensionY\", value, true);\r\n this.makePath();\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n /**\r\n * Converts relative position along the line (0-1) into pixel coordinates.\r\n *\r\n * @param position Position (0-1)\r\n * @return Coordinates\r\n */\r\n Polyspline.prototype.positionToPoint = function (position, extend) {\r\n var deltaAngle = 0;\r\n var allPoints = this.allPoints;\r\n var len = allPoints.length;\r\n if (!$type.isNumber(position)) {\r\n position = 0;\r\n }\r\n if (len > 1) {\r\n if (extend && len > 3) {\r\n if (position < 0) {\r\n if (position < -0.01) {\r\n position = -0.01;\r\n }\r\n var f0 = allPoints[0];\r\n var f1 = allPoints[1];\r\n var x = f0.x - (f0.x - f1.x) * len * position;\r\n var y = f0.y - (f0.y - f1.y) * len * position;\r\n return { x: x, y: y, angle: $math.getAngle(f0, f1) };\r\n }\r\n else if (position > 1) {\r\n if (position > 1.01) {\r\n position = 1.01;\r\n }\r\n var f0 = allPoints[allPoints.length - 2];\r\n var f1 = allPoints[allPoints.length - 3];\r\n var x = f0.x + (f0.x - f1.x) * len * (position - 1);\r\n var y = f0.y + (f0.y - f1.y) * len * (position - 1);\r\n return { x: x, y: y, angle: $math.getAngle(f0, { x: x, y: y }) };\r\n }\r\n else if (position == 1) {\r\n var point_1 = allPoints[allPoints.length - 1];\r\n return { x: point_1.x, y: point_1.y, angle: point_1.angle };\r\n }\r\n }\r\n else {\r\n if (position < 0) {\r\n position = Math.abs(position);\r\n deltaAngle = 180;\r\n }\r\n if (position >= 1) {\r\n position = 0.9999999999999;\r\n }\r\n }\r\n var point = allPoints[Math.floor(position * len)];\r\n return { x: point.x, y: point.y, angle: point.angle + deltaAngle };\r\n }\r\n else if (len == 1) {\r\n var point = allPoints[0];\r\n return { x: point.x, y: point.y, angle: point.angle };\r\n }\r\n else {\r\n return { x: 0, y: 0, angle: 0 };\r\n }\r\n };\r\n return Polyspline;\r\n}(Polyline));\r\nexport { Polyspline };\r\n/**\r\n * Register class in system, so that it can be instantiated using its name from\r\n * anywhere.\r\n *\r\n * @ignore\r\n */\r\nregistry.registeredClasses[\"Polyspline\"] = Polyspline;\r\n//# sourceMappingURL=Polyspline.js.map","import { StyleRule } from \"../utils/DOM\";\r\nimport { Dictionary } from \"../utils/Dictionary\";\r\nimport { MultiDisposer, CounterDisposer } from \"../utils/Disposer\";\r\nimport { InterfaceColorSet } from \"../utils/InterfaceColorSet\";\r\nvar rules = new Dictionary();\r\n/**\r\n * Default CSS for Popup.\r\n *\r\n * @ignore Exclude from docs\r\n * @param prefix Prefix for CSS classes\r\n * @return Disposer for the CSS definition\r\n */\r\nexport default function (element, prefix) {\r\n if (!prefix) {\r\n prefix = \"ampopup\";\r\n }\r\n var cs = new InterfaceColorSet();\r\n var fg = cs.getFor(\"text\");\r\n var bg = cs.getFor(\"background\");\r\n bg.alpha = 0.8;\r\n var abg = cs.getFor(\"alternativeBackground\");\r\n abg.alpha = 0.05;\r\n var counter = rules.insertKeyIfEmpty(prefix, function () {\r\n var disposer = new MultiDisposer([\r\n new StyleRule(element, \".\" + prefix, {\r\n //\"width\": \"100%\",\r\n //\"height\": \"100%\",\r\n \"overflow\": \"visible\",\r\n \"position\": \"absolute\",\r\n \"top\": \"0\",\r\n \"left\": \"0\",\r\n \"z-index\": \"2000\"\r\n }),\r\n new StyleRule(element, \".\" + prefix + \"-curtain\", {\r\n \"width\": \"100%\",\r\n \"height\": \"100%\",\r\n \"position\": \"absolute\",\r\n \"top\": \"0\",\r\n \"left\": \"0\",\r\n \"z-index\": \"2001\",\r\n \"background-color\": bg.hex,\r\n \"opacity\": \"0.5\"\r\n }),\r\n new StyleRule(element, \".\" + prefix + \"-header\", {\r\n \"display\": \"block\",\r\n \"width\": \"100%\",\r\n \"min-height\": \"1.8em\",\r\n \"background\": abg.rgba\r\n }),\r\n new StyleRule(element, \".\" + prefix + \"-title\", {\r\n \"font-weight\": \"bold\",\r\n \"font-size\": \"110%\",\r\n \"padding\": \"0.5em 1.2em 0.5em 1em\"\r\n }),\r\n new StyleRule(element, \".\" + prefix + \"-content\", {\r\n /*\"width\": \"100%\",\r\n \"height\": \"100%\",*/\r\n // \"padding\": \"2em 1em 1em 1em\",\r\n \"background\": bg.hex,\r\n \"background-color\": bg.rgba,\r\n \"color\": fg.hex,\r\n \"display\": \"inline-block\",\r\n \"position\": \"absolute\",\r\n \"top\": \"0\",\r\n \"left\": \"0\",\r\n \"max-width\": \"90%\",\r\n \"max-height\": \"90%\",\r\n \"overflow\": \"auto\",\r\n \"z-index\": \"2002\"\r\n }),\r\n new StyleRule(element, \".\" + prefix + \"-inside\", {\r\n \"padding\": \"1em\"\r\n }),\r\n new StyleRule(element, \".\" + prefix + \"-close\", {\r\n \"display\": \"block\",\r\n \"position\": \"absolute\",\r\n \"top\": \"0.3em\",\r\n \"right\": \"0.3em\",\r\n \"background-color\": \"rgb(100, 100, 100)\",\r\n \"background\": \"rgba(100, 100, 100, 0.1) url(data:image/svg+xml;charset=utf-8;base64,PHN2ZyBoZWlnaHQ9IjUxMiIgdmVyc2lvbj0iMSIgdmlld0JveD0iMCAwIDUxMiA1MTIiIHdpZHRoPSI1MTIiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+PHBhdGggZD0iTTQ0NS4yIDEwOS4ybC00Mi40LTQyLjRMMjU2IDIxMy42IDEwOS4yIDY2LjhsLTQyLjQgNDIuNEwyMTMuNiAyNTYgNjYuOCA0MDIuOGw0Mi40IDQyLjRMMjU2IDI5OC40bDE0Ni44IDE0Ni44IDQyLjQtNDIuNEwyOTguNCAyNTYiLz48L3N2Zz4=) no-repeat center\",\r\n \"background-size\": \"80%\",\r\n \"width\": \"1.2em\",\r\n \"height\": \"1.2em\",\r\n \"cursor\": \"pointer\"\r\n }),\r\n ]);\r\n return new CounterDisposer(function () {\r\n rules.removeKey(prefix);\r\n disposer.dispose();\r\n });\r\n });\r\n return counter.increment();\r\n}\r\n//# sourceMappingURL=PopupCSS.js.map","/**\r\n * Popup class is used to display information over chart area.\r\n */\r\nimport { __extends } from \"tslib\";\r\n/**\r\n * ============================================================================\r\n * IMPORTS\r\n * ============================================================================\r\n * @hidden\r\n */\r\nimport popupCSS from \"./PopupCSS\";\r\nimport { Adapter } from \"../utils/Adapter\";\r\nimport { BaseObjectEvents } from \"../Base\";\r\nimport { getInteraction } from \"../interaction/Interaction\";\r\nimport { keyboard } from \"../utils/Keyboard\";\r\nimport { MultiDisposer } from \"../utils/Disposer\";\r\nimport { getShadowRoot } from \"../utils/DOM\";\r\nimport * as $type from \"../utils/Type\";\r\nimport * as $object from \"../utils/Object\";\r\n/**\r\n * Shows an HTML popup which covers window or a chart area.\r\n *\r\n * @see {@link https://www.amcharts.com/docs/v4/concepts/popups-and-modals/} For examples and docs on Popups and Modals.\r\n * @todo Positioning over whole window\r\n */\r\nvar Popup = /** @class */ (function (_super) {\r\n __extends(Popup, _super);\r\n /**\r\n * Constructor\r\n */\r\n function Popup() {\r\n var _this = _super.call(this) || this;\r\n /**\r\n * Adapter.\r\n */\r\n _this.adapter = new Adapter(_this);\r\n /**\r\n * Holds references to various HTML elements, Popup consists of.\r\n */\r\n _this._elements = {};\r\n /**\r\n * Holdes Interaction objects for various Popup's elements.\r\n */\r\n _this._IOs = {};\r\n /**\r\n * Contents of popup window.\r\n */\r\n _this._content = \"\";\r\n /**\r\n * Title of the popup window.\r\n */\r\n _this._title = \"\";\r\n /**\r\n * Prefix to apply to class names for popup elements.\r\n */\r\n _this._classPrefix = \"ampopup\";\r\n /**\r\n * If set to `true` [[Popup]] will use default styles.\r\n */\r\n _this._defaultStyles = true;\r\n /**\r\n * If set to `true` [[Popup]] will dim out all chart content behind it by\r\n * showing a semi-transparent fill. (curtain)\r\n */\r\n _this._showCurtain = false;\r\n /**\r\n * Indicates whether popup can be dragged.\r\n */\r\n _this._draggable = true;\r\n /**\r\n * Horizontal position of the content window.\r\n */\r\n _this._align = \"center\";\r\n /**\r\n * Resize popup as images are being loaded.\r\n */\r\n _this._dynamicResize = true;\r\n /**\r\n * Vertical position of the content window.\r\n */\r\n _this._verticalAlign = \"middle\";\r\n /**\r\n * Shift in position of the element. (used for dragging)\r\n */\r\n _this._shift = {\r\n x: 0,\r\n y: 0\r\n };\r\n /**\r\n * Temporary shift in position of the element. (used for dragging)\r\n */\r\n _this._tempShift = {\r\n x: 0,\r\n y: 0\r\n };\r\n /**\r\n * A title for screen readers. It is very highly recommended to set that title\r\n * so that people using screen reader tools can get an immediate summary of\r\n * the information in the popup.\r\n */\r\n _this._readerTitle = \"\";\r\n /**\r\n * Is popup closable?\r\n */\r\n _this._closable = true;\r\n /**\r\n * Was CSS already loaded?\r\n */\r\n _this._cssLoaded = false;\r\n /**\r\n * If set to other than \"none\" will try to re-adjust the position of the\r\n * popop to fit within chart container or browser window.\r\n *\r\n * @ignore Feature not yet implemented\r\n * @todo Implement\r\n */\r\n _this._fitTo = \"window\";\r\n /**\r\n * Identifies if this object is a \"template\" and should not be treated as\r\n * real object that is drawn or actually used in the chart.\r\n *\r\n * @ignore Exclude from docs\r\n */\r\n _this.isTemplate = false;\r\n /**\r\n * Indicates if the element was already sized and should not be measured for\r\n * size again, saving some precious resources.\r\n */\r\n _this._sized = false;\r\n _this.className = \"Popup\";\r\n return _this;\r\n }\r\n /**\r\n * Shows popup window.\r\n */\r\n Popup.prototype.open = function () {\r\n if (this.container) {\r\n if (this._elements.wrapper) {\r\n this.container.appendChild(this._elements.wrapper);\r\n }\r\n if (this._elements.curtain) {\r\n this.container.appendChild(this._elements.curtain);\r\n this.showCurtain = this.showCurtain;\r\n }\r\n this.positionElement();\r\n this.dispatchImmediately(\"opened\");\r\n }\r\n };\r\n /**\r\n * Hides popup window.\r\n */\r\n Popup.prototype.close = function () {\r\n if (this._elements.wrapper) {\r\n if (this._elements.wrapper.parentElement) {\r\n this._elements.wrapper.parentElement.removeChild(this._elements.wrapper);\r\n }\r\n }\r\n if (this._elements.curtain) {\r\n if (this._elements.curtain.parentElement) {\r\n this._elements.curtain.parentElement.removeChild(this._elements.curtain);\r\n }\r\n }\r\n this.dispatchImmediately(\"closed\");\r\n this.releasePointers();\r\n };\r\n /**\r\n * Destroy (dispose) popup.\r\n */\r\n Popup.prototype.dispose = function () {\r\n this.close();\r\n _super.prototype.dispose.call(this);\r\n };\r\n /**\r\n * Positions content element in the center of popup based on its actual size.\r\n *\r\n * @ignore Exclude from docs\r\n */\r\n Popup.prototype.positionElement = function (forceResize) {\r\n var _this = this;\r\n if (forceResize === void 0) { forceResize = true; }\r\n if (!this._elements.wrapper) {\r\n return;\r\n }\r\n setTimeout(function () {\r\n if (!_this._elements.wrapper) {\r\n return;\r\n }\r\n if (forceResize || !_this._sized) {\r\n _this._elements.wrapper.style.opacity = \"0.01\";\r\n _this._elements.wrapper.style.left = \"0\";\r\n _this._elements.wrapper.style.top = \"0\";\r\n _this._elements.wrapper.style.margin = \"0 0 0 0\";\r\n _this._elements.wrapper.style.width = \"\";\r\n _this._elements.wrapper.style.height = \"\";\r\n var bbox = _this._elements.wrapper.getBoundingClientRect();\r\n _this._elements.wrapper.style.width = bbox.width + \"px\";\r\n _this._elements.wrapper.style.height = bbox.height + \"px\";\r\n _this._sized = true;\r\n }\r\n // Check for any images that are not yet loaded\r\n if (_this.dynamicResize) {\r\n var images = _this._elements.wrapper.getElementsByTagName(\"img\");\r\n for (var i = 0; i < images.length; i++) {\r\n var image = images[i];\r\n if (!image.complete) {\r\n // Resize popup once again when image is loaded\r\n image.addEventListener(\"load\", function () {\r\n _this.positionElement(true);\r\n });\r\n // Do this for one image only as it will be checked again next time\r\n // anyway\r\n break;\r\n }\r\n }\r\n }\r\n setTimeout(function () {\r\n if (!_this._elements.wrapper) {\r\n return;\r\n }\r\n var bbox;\r\n if ((forceResize || !_this._sized) && _this._bbox) {\r\n bbox = _this._bbox;\r\n }\r\n else {\r\n bbox = _this._elements.wrapper.getBoundingClientRect();\r\n _this._elements.wrapper.style.opacity = \"\";\r\n }\r\n // Set horizontal positioning\r\n switch (_this.align) {\r\n case \"left\":\r\n _this._elements.wrapper.style.left = \"0\";\r\n _this._elements.wrapper.style.right = \"auto\";\r\n _this._elements.wrapper.style.marginLeft = _this.toStyle(_this._shift.x + _this._tempShift.x);\r\n break;\r\n case \"center\":\r\n _this._elements.wrapper.style.left = \"50%\";\r\n _this._elements.wrapper.style.right = \"auto\";\r\n _this._elements.wrapper.style.marginLeft = _this.toStyle(Math.round(-bbox.width / 2) + (_this._shift.x + _this._tempShift.x));\r\n break;\r\n case \"right\":\r\n _this._elements.wrapper.style.left = \"auto\";\r\n _this._elements.wrapper.style.right = \"0\";\r\n _this._elements.wrapper.style.marginLeft = _this.toStyle(_this._shift.x + _this._tempShift.x);\r\n break;\r\n default:\r\n _this._elements.wrapper.style.left = _this.toStyle(_this.left) || \"auto\";\r\n _this._elements.wrapper.style.right = _this.toStyle(_this.right) || \"auto\";\r\n _this._elements.wrapper.style.marginLeft = _this.toStyle(_this._shift.x + _this._tempShift.x);\r\n break;\r\n }\r\n // Set vertical positioning\r\n switch (_this.verticalAlign) {\r\n case \"top\":\r\n _this._elements.wrapper.style.top = \"0\";\r\n _this._elements.wrapper.style.bottom = \"auto\";\r\n _this._elements.wrapper.style.marginTop = _this.toStyle(_this._shift.y + _this._tempShift.y);\r\n break;\r\n case \"middle\":\r\n _this._elements.wrapper.style.top = \"50%\";\r\n _this._elements.wrapper.style.bottom = \"auto\";\r\n _this._elements.wrapper.style.marginTop = _this.toStyle(Math.round(-bbox.height / 2) + (_this._shift.y + _this._tempShift.y));\r\n break;\r\n case \"bottom\":\r\n _this._elements.wrapper.style.top = \"auto\";\r\n _this._elements.wrapper.style.bottom = \"0\";\r\n _this._elements.wrapper.style.marginTop = _this.toStyle(_this._shift.y + _this._tempShift.y);\r\n break;\r\n default:\r\n _this._elements.wrapper.style.top = _this.toStyle(_this.top) || \"auto\";\r\n _this._elements.wrapper.style.bottom = _this.toStyle(_this.bottom) || \"auto\";\r\n _this._elements.wrapper.style.marginTop = _this.toStyle(_this._shift.y + _this._tempShift.y);\r\n break;\r\n }\r\n }, 1);\r\n }, 1);\r\n };\r\n Popup.prototype.setupDragging = function () {\r\n var _this = this;\r\n if (this.draggable) {\r\n if (!this._IOs.header.events.has(\"drag\")) {\r\n this._IOs.header.events.on(\"drag\", function (ev) {\r\n _this._tempShift.x = ev.shift.x;\r\n _this._tempShift.y = ev.shift.y;\r\n _this.positionElement(false);\r\n });\r\n }\r\n if (!this._IOs.header.events.has(\"dragstop\")) {\r\n this._IOs.header.events.on(\"dragstop\", function (ev) {\r\n _this._shift.x += _this._tempShift.x;\r\n _this._shift.y += _this._tempShift.y;\r\n _this._tempShift.x = 0;\r\n _this._tempShift.y = 0;\r\n _this.positionElement(false);\r\n });\r\n }\r\n }\r\n else {\r\n if (this._IOs.header) {\r\n getInteraction().unprepElement(this._IOs.header);\r\n if (this._IOs.header.events.has(\"drag\")) {\r\n this._IOs.header.events.off(\"drag\");\r\n }\r\n if (this._IOs.header.events.has(\"dragstop\")) {\r\n this._IOs.header.events.off(\"dragstop\");\r\n }\r\n }\r\n }\r\n };\r\n Popup.prototype.toStyle = function (value) {\r\n if (!$type.hasValue(value)) {\r\n return null;\r\n }\r\n else if ($type.isNumber(value)) {\r\n return \"\" + value + \"px\";\r\n }\r\n else {\r\n return value.toString();\r\n }\r\n };\r\n Object.defineProperty(Popup.prototype, \"classPrefix\", {\r\n /**\r\n * A prefix that is applied to class names of various popup elements.\r\n *\r\n * @return Class name prefix\r\n */\r\n get: function () {\r\n return this.adapter.apply(\"classPrefix\", this._classPrefix);\r\n },\r\n /**\r\n * @param value Class name prefix\r\n */\r\n set: function (value) {\r\n this._classPrefix = value;\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n Object.defineProperty(Popup.prototype, \"classPrefixRaw\", {\r\n /**\r\n * Returns raw prefix (without adapters applied).\r\n *\r\n * @ignore Exclude from docs\r\n * @return Class name prefix\r\n */\r\n get: function () {\r\n return this._classPrefix;\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n Object.defineProperty(Popup.prototype, \"content\", {\r\n /**\r\n * @return Popup content\r\n */\r\n get: function () {\r\n return this.adapter.apply(\"content\", this._content);\r\n },\r\n /**\r\n * Popup content.\r\n *\r\n * Popup content can be any valid HTML, including CSS.\r\n *\r\n * @param value Popup content\r\n */\r\n set: function (value) {\r\n if (this._content != value) {\r\n this._content = value;\r\n if (!this._elements.content) {\r\n this.createContentElement();\r\n }\r\n this._elements.content.innerHTML = value;\r\n this.positionElement();\r\n }\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n Popup.prototype.getClassNames = function () {\r\n return this.adapter.apply(\"classNames\", {\r\n wrapperClass: this.classPrefix + \"\",\r\n headerClass: this.classPrefix + \"-header\",\r\n titleClass: this.classPrefix + \"-title\",\r\n contentClass: this.classPrefix + \"-content\",\r\n insideClass: this.classPrefix + \"-inside\",\r\n curtainClass: this.classPrefix + \"-curtain\",\r\n closeClass: this.classPrefix + \"-close\"\r\n });\r\n };\r\n /**\r\n * Creates content element.\r\n */\r\n Popup.prototype.createContentElement = function () {\r\n // Check if it's created already\r\n if (this._elements.wrapper) {\r\n return;\r\n }\r\n // Get class names for popup elements\r\n var classNames = this.getClassNames();\r\n // Create content element\r\n var wrapper = document.createElement(\"div\");\r\n wrapper.className = classNames.contentClass;\r\n wrapper.style.opacity = \"0.01\";\r\n // Create close button\r\n var close = document.createElement(\"a\");\r\n close.className = classNames.closeClass;\r\n // header title\r\n var header = document.createElement(\"div\");\r\n header.className = classNames.headerClass;\r\n // Content title\r\n var title = document.createElement(\"div\");\r\n title.innerHTML = this.title;\r\n title.className = classNames.titleClass;\r\n if (!this.title) {\r\n title.style.display = \"none\";\r\n }\r\n // Content div\r\n var content = document.createElement(\"div\");\r\n content.className = classNames.insideClass;\r\n content.innerHTML = this.content;\r\n // Set up events for content\r\n this._IOs.wrapper = getInteraction().getInteraction(wrapper);\r\n this._IOs.header = getInteraction().getInteraction(header);\r\n this._disposers.push(this._IOs.wrapper);\r\n // Set hover/out events\r\n this._IOs.wrapper.events.on(\"over\", this.disablePointers, this);\r\n this._IOs.wrapper.events.on(\"out\", this.releasePointers, this);\r\n // Create an InteractionObject for close\r\n this._IOs.close = getInteraction().getInteraction(close);\r\n this._disposers.push(this._IOs.close);\r\n // Hide close for now\r\n close.style.visibility = \"hidden\";\r\n // Add accessible stuff\r\n wrapper.setAttribute(\"role\", \"dialog\");\r\n // Add to wrapper\r\n header.appendChild(close);\r\n header.appendChild(title);\r\n wrapper.appendChild(header);\r\n wrapper.appendChild(content);\r\n this.container.appendChild(wrapper);\r\n // Save for later access\r\n this._elements.wrapper = wrapper;\r\n this._elements.header = header;\r\n this._elements.content = content;\r\n this._elements.title = title;\r\n this._elements.close = close;\r\n // Load CSS\r\n if (this.defaultStyles) {\r\n this.loadDefaultCSS();\r\n }\r\n // Create curtain as well\r\n this.createCurtainElement();\r\n // Apply events\r\n this.applyEvents();\r\n this.applyReaderSettings();\r\n // Draggable?\r\n this.setupDragging();\r\n };\r\n Object.defineProperty(Popup.prototype, \"title\", {\r\n /**\r\n * @return Popup title\r\n */\r\n get: function () {\r\n return this.adapter.apply(\"title\", this._title);\r\n },\r\n /**\r\n * Popup title.\r\n *\r\n * Popup title can be any valid HTML, including CSS.\r\n *\r\n * @param value Popup title\r\n */\r\n set: function (value) {\r\n if (this._title != value) {\r\n this._title = value;\r\n if (!this._elements.content) {\r\n this.createContentElement();\r\n }\r\n this._elements.title.innerHTML = value;\r\n this.positionElement();\r\n this.applyReaderSettings();\r\n }\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n Object.defineProperty(Popup.prototype, \"readerTitle\", {\r\n /**\r\n * @return Popup content\r\n */\r\n get: function () {\r\n return this.adapter.apply(\"readerTitle\", this._readerTitle != \"\" ? this._readerTitle : this.title);\r\n },\r\n /**\r\n * A title for screen readers. It is very highly recommended to set that title\r\n * so that people using screen reader tools can get an immediate summary of\r\n * the information in the popup.\r\n *\r\n * @param value Reader title\r\n */\r\n set: function (value) {\r\n if (this._readerTitle != value) {\r\n this._readerTitle = value;\r\n this.applyReaderSettings();\r\n }\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n Object.defineProperty(Popup.prototype, \"closable\", {\r\n /**\r\n * @return Closable?\r\n */\r\n get: function () {\r\n return this.adapter.apply(\"closable\", this._closable);\r\n },\r\n /**\r\n * Is popup closable?\r\n *\r\n * If it is, it can be closed in a number of ways, e.g. by hitting ESC key,\r\n * clicking curtain, or clicking the close button.\r\n *\r\n * If it is not closable, the only way to close it is via `close()` call.\r\n *\r\n * @param value Closable?\r\n */\r\n set: function (value) {\r\n if (value !== this._closable) {\r\n this._closable = value;\r\n this.applyEvents();\r\n }\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n Object.defineProperty(Popup.prototype, \"fitTo\", {\r\n /**\r\n * @ignore\r\n * @todo Implement\r\n * @return Fit option\r\n */\r\n get: function () {\r\n return this.adapter.apply(\"fitTo\", this._fitTo);\r\n },\r\n /**\r\n * If set to other than \"none\" will try to re-adjust the position of the\r\n * popop to fit within chart container or browser window.\r\n *\r\n * @ignore\r\n * @todo Implement\r\n * @default \"window\"\r\n * @param value Fit option\r\n */\r\n set: function (value) {\r\n if (value != this._fitTo) {\r\n this._fitTo = value;\r\n this.positionElement();\r\n }\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n Object.defineProperty(Popup.prototype, \"defaultStyles\", {\r\n /**\r\n * @return Use default CSS?\r\n */\r\n get: function () {\r\n return this.adapter.apply(\"defaultStyles\", this._defaultStyles);\r\n },\r\n /**\r\n * Should popup use default CSS?\r\n *\r\n * If default CSS is disabled, an external CSS should handle the look of the\r\n * popup, since it will look quite out of place otherwise.\r\n *\r\n * @default true\r\n * @param Use default CSS?\r\n */\r\n set: function (value) {\r\n if (this._defaultStyles != value) {\r\n this._defaultStyles = value;\r\n }\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n Object.defineProperty(Popup.prototype, \"showCurtain\", {\r\n /**\r\n * @return Show curtain?\r\n */\r\n get: function () {\r\n return this.adapter.apply(\"showCurtain\", this._showCurtain);\r\n },\r\n /**\r\n * Should popup use dim out all content behind it?\r\n *\r\n * @default false\r\n * @param Show curtain?\r\n */\r\n set: function (value) {\r\n if (this._showCurtain != value) {\r\n this._showCurtain = value;\r\n if (this._elements.curtain) {\r\n this._elements.curtain.style.display = value ? \"block\" : \"none\";\r\n }\r\n }\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n /**\r\n * Creates curtain element.\r\n */\r\n Popup.prototype.createCurtainElement = function () {\r\n // Get class names for popup elements\r\n var classNames = this.getClassNames();\r\n // Create the curtain\r\n var curtain = document.createElement(\"div\");\r\n curtain.className = classNames.curtainClass;\r\n // Append curtain to wrapper\r\n this.container.appendChild(curtain);\r\n // Create an InteractionObject for curtain because we might need to\r\n // set interactions on it\r\n this._IOs.curtain = getInteraction().getInteraction(curtain);\r\n // Add Curtain IO to disposers\r\n this._disposers.push(this._IOs.curtain);\r\n // Set events to disable underlying interactivity\r\n this._IOs.curtain.events.on(\"over\", this.disablePointers, this);\r\n this._IOs.curtain.events.on(\"out\", this.releasePointers, this);\r\n // Hide it?\r\n curtain.style.display = this.showCurtain ? \"block\" : \"none\";\r\n // Save for later\r\n this._elements.curtain = curtain;\r\n };\r\n Object.defineProperty(Popup.prototype, \"draggable\", {\r\n /**\r\n * @return Show curtain?\r\n */\r\n get: function () {\r\n return this.adapter.apply(\"draggable\", this._draggable);\r\n },\r\n /**\r\n * Can the popup be dragged with a pointer?\r\n *\r\n * @default false\r\n * @param Show curtain?\r\n */\r\n set: function (value) {\r\n if (this._draggable != value) {\r\n this._draggable = value;\r\n this.setupDragging();\r\n }\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n Object.defineProperty(Popup.prototype, \"dynamicResize\", {\r\n /**\r\n * @return Resize dynamically?\r\n */\r\n get: function () {\r\n return this.adapter.apply(\"dynamicResize\", this._dynamicResize);\r\n },\r\n /**\r\n * Resize popup as images are being loaded.\r\n *\r\n * @default true\r\n * @since 4.9.17\r\n * @param Resize dynamically?\r\n */\r\n set: function (value) {\r\n if (this._dynamicResize != value) {\r\n this._dynamicResize = value;\r\n this.positionElement(true);\r\n }\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n Object.defineProperty(Popup.prototype, \"align\", {\r\n /**\r\n * @return Horizontal position\r\n */\r\n get: function () {\r\n return this.adapter.apply(\"align\", this._align);\r\n },\r\n /**\r\n * Horizontal positioning of the content window.\r\n *\r\n * Available options: \"left\", \"center\" (default), \"right\", and \"none\".\r\n *\r\n * @default \"center\"\r\n * @param Horizontal position\r\n */\r\n set: function (value) {\r\n if (this._align != value) {\r\n this._align = value;\r\n this.positionElement();\r\n }\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n Object.defineProperty(Popup.prototype, \"verticalAlign\", {\r\n /**\r\n * @return Vertical position\r\n */\r\n get: function () {\r\n return this.adapter.apply(\"verticalAlign\", this._verticalAlign);\r\n },\r\n /**\r\n * Vertical positioning of the content window.\r\n *\r\n * Available options: \"top\", \"middle\" (default), \"bottom\", and \"none\".\r\n *\r\n * @default \"middle\"\r\n * @param Vertical position\r\n */\r\n set: function (value) {\r\n if (this._verticalAlign != value) {\r\n this._verticalAlign = value;\r\n this.positionElement();\r\n }\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n Object.defineProperty(Popup.prototype, \"left\", {\r\n /**\r\n * @return Left\r\n */\r\n get: function () {\r\n return this.adapter.apply(\"left\", this._left);\r\n },\r\n /**\r\n * \"left\" coordinate of a non-aligned (`align = \"none\"`) popup.\r\n *\r\n * Can be either absolute pixel value, or relative (`Percent`).\r\n *\r\n * Setting this property will automatically set `align` to \"none\".\r\n *\r\n * NOTE: The position is relative to the chart container.\r\n *\r\n * @param Left\r\n */\r\n set: function (value) {\r\n if (this.left != value) {\r\n this._left = value;\r\n this._align = \"none\";\r\n this.positionElement();\r\n }\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n Object.defineProperty(Popup.prototype, \"right\", {\r\n /**\r\n * @return Right\r\n */\r\n get: function () {\r\n return this.adapter.apply(\"right\", this._right);\r\n },\r\n /**\r\n * \"right\" coordinate of a non-aligned (`align = \"none\"`) popup.\r\n *\r\n * Can be either absolute pixel value, or relative (`Percent`).\r\n *\r\n * Setting this property will automatically set `align` to \"none\".\r\n *\r\n * NOTE: The position is relative to the chart container.\r\n *\r\n * @param Right\r\n */\r\n set: function (value) {\r\n if (this.right != value) {\r\n this._right = value;\r\n this._align = \"none\";\r\n this.positionElement();\r\n }\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n Object.defineProperty(Popup.prototype, \"top\", {\r\n /**\r\n * @return Top\r\n */\r\n get: function () {\r\n return this.adapter.apply(\"top\", this._top);\r\n },\r\n /**\r\n * \"top\" coordinate of a non-aligned (`verticalAlign = \"none\"`) popup.\r\n *\r\n * Can be either absolute pixel value, or relative (`Percent`).\r\n *\r\n * Setting this property will automatically set `verticalAlign` to \"none\".\r\n *\r\n * NOTE: The position is relative to the chart container.\r\n *\r\n * @param Top\r\n */\r\n set: function (value) {\r\n if (this.top != value) {\r\n this._top = value;\r\n this._verticalAlign = \"none\";\r\n this.positionElement();\r\n }\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n Object.defineProperty(Popup.prototype, \"bottom\", {\r\n /**\r\n * @return Bottom\r\n */\r\n get: function () {\r\n return this.adapter.apply(\"bottom\", this._bottom);\r\n },\r\n /**\r\n * \"bottom\" coordinate of a non-aligned (`verticalAlign = \"none\"`) popup.\r\n *\r\n * Can be either absolute pixel value, or relative (`Percent`).\r\n *\r\n * Setting this property will automatically set `verticalAlign` to \"none\".\r\n *\r\n * NOTE: The position is relative to the chart container.\r\n *\r\n * @param Bottom\r\n */\r\n set: function (value) {\r\n if (this.bottom != value) {\r\n this._bottom = value;\r\n this._verticalAlign = \"none\";\r\n this.positionElement();\r\n }\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n Object.defineProperty(Popup.prototype, \"elements\", {\r\n /**\r\n * Returns an object with references to various elements of the Popup.\r\n *\r\n * * `wrapper`\r\n * * `title`\r\n * * `content`\r\n * * `close`\r\n * * `curtain`\r\n */\r\n get: function () {\r\n return this._elements;\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n /**\r\n * Loads popup CSS.\r\n *\r\n * @ignore Exclude from docs\r\n */\r\n Popup.prototype.loadDefaultCSS = function () {\r\n if (!this._cssLoaded) {\r\n this._disposers.push(popupCSS(getShadowRoot(this.container), this.classPrefix));\r\n $object.each(this._elements, function (key, el) {\r\n el.style.display = \"\";\r\n });\r\n this._cssLoaded = true;\r\n }\r\n };\r\n /**\r\n * If popup is closable, this method adds various events to popup elements.\r\n */\r\n Popup.prototype.applyEvents = function () {\r\n var _this = this;\r\n if (this._IOs.close) {\r\n if (this.closable) {\r\n this._IOs.close.element.style.visibility = \"visible\";\r\n var disposers = [\r\n getInteraction().body.events.on(\"keyup\", function (ev) {\r\n if (keyboard.isKey(ev.event, \"esc\") && _this.closable) {\r\n _this.close();\r\n }\r\n }),\r\n this._IOs.close.events.on(\"hit\", function (ev) {\r\n _this.close();\r\n })\r\n ];\r\n disposers.push(this._IOs.curtain.events.on(\"hit\", function (ev) {\r\n if (_this.showCurtain && _this.closable) {\r\n _this.close();\r\n }\r\n }));\r\n this._disposers.push(new MultiDisposer(disposers));\r\n }\r\n else {\r\n this._IOs.close.element.style.visibility = \"hidden\";\r\n }\r\n }\r\n };\r\n /**\r\n * Disables interactivity on parent chart.\r\n */\r\n Popup.prototype.disablePointers = function () {\r\n if (this.sprite) {\r\n this._spriteInteractionsEnabled = this.sprite.interactionsEnabled;\r\n this.sprite.interactionsEnabled = false;\r\n }\r\n };\r\n /**\r\n * Releases temporarily disabled pointers on parent chart.\r\n */\r\n Popup.prototype.releasePointers = function () {\r\n if ($type.hasValue(this._spriteInteractionsEnabled)) {\r\n this.sprite.interactionsEnabled = this._spriteInteractionsEnabled;\r\n this._spriteInteractionsEnabled = undefined;\r\n }\r\n };\r\n /**\r\n * Sets screen reader related settings.\r\n */\r\n Popup.prototype.applyReaderSettings = function () {\r\n this.elements.wrapper.setAttribute(\"aria-label\", this.readerTitle);\r\n };\r\n /**\r\n * Copies all properties and related data from different element.\r\n *\r\n * @param object Source element\r\n */\r\n Popup.prototype.copyFrom = function (source) {\r\n _super.prototype.copyFrom.call(this, source);\r\n this.container = source.container;\r\n this.sprite = source.sprite;\r\n this.classPrefix = source.classPrefixRaw;\r\n this.content = source.content;\r\n this.title = source.title;\r\n this.readerTitle = source.readerTitle;\r\n this.defaultStyles = source.defaultStyles;\r\n this.showCurtain = source.showCurtain;\r\n this.align = source.align;\r\n this.verticalAlign = source.verticalAlign;\r\n this.left = source.left;\r\n this.right = source.right;\r\n this.top = source.top;\r\n this.bottom = source.bottom;\r\n this.adapter.copyFrom(source.adapter);\r\n };\r\n return Popup;\r\n}(BaseObjectEvents));\r\nexport { Popup };\r\n//# sourceMappingURL=Popup.js.map","/**\r\n * Preloader module.\r\n *\r\n * Preloader is a progress indicator.\r\n */\r\nimport { __extends } from \"tslib\";\r\n/**\r\n * ============================================================================\r\n * IMPORTS\r\n * ============================================================================\r\n * @hidden\r\n */\r\nimport { Container } from \"../Container\";\r\nimport { InterfaceColorSet } from \"../../core/utils/InterfaceColorSet\";\r\nimport { Slice } from \"./Slice\";\r\nimport { Label } from \"./Label\";\r\nimport { registry } from \"../Registry\";\r\nimport { percent } from \"../../core/utils/Percent\";\r\n/**\r\n * ============================================================================\r\n * MAIN CLASS\r\n * ============================================================================\r\n * @hidden\r\n */\r\n/**\r\n * A class used to draw and display progress indicator.\r\n *\r\n * @see {@link IPreloaderEvents} for a list of available events\r\n * @see {@link IPreloaderAdapters} for a list of available Adapters\r\n */\r\nvar Preloader = /** @class */ (function (_super) {\r\n __extends(Preloader, _super);\r\n /**\r\n * Constructor\r\n */\r\n function Preloader() {\r\n var _this = \r\n // Init\r\n _super.call(this) || this;\r\n _this.className = \"Preloader\";\r\n // Set dimensions\r\n _this.width = percent(100);\r\n _this.height = percent(100);\r\n var interfaceColors = new InterfaceColorSet();\r\n // Create main container\r\n var sliceContainer = _this.createChild(Container);\r\n sliceContainer.shouldClone = false;\r\n // Add background (100%) slice\r\n var backgroundSlice = sliceContainer.createChild(Slice);\r\n backgroundSlice.shouldClone = false;\r\n backgroundSlice.radius = 53;\r\n backgroundSlice.arc = 360;\r\n backgroundSlice.fill = interfaceColors.getFor(\"fill\");\r\n backgroundSlice.fillOpacity = 0.8;\r\n backgroundSlice.innerRadius = 42;\r\n backgroundSlice.isMeasured = false;\r\n _this.backgroundSlice = backgroundSlice;\r\n // Add progress slice\r\n var progressSlice = sliceContainer.createChild(Slice);\r\n progressSlice.shouldClone = false;\r\n progressSlice.radius = 50;\r\n progressSlice.innerRadius = 45;\r\n progressSlice.fill = interfaceColors.getFor(\"alternativeBackground\");\r\n progressSlice.fillOpacity = 0.2;\r\n progressSlice.isMeasured = false;\r\n _this.progressSlice = progressSlice;\r\n // Add text label element\r\n var label = sliceContainer.createChild(Label);\r\n label.shouldClone = false;\r\n label.horizontalCenter = \"middle\";\r\n label.verticalCenter = \"middle\";\r\n label.isMeasured = false;\r\n label.fill = interfaceColors.getFor(\"text\");\r\n label.align = \"center\";\r\n label.valign = \"middle\";\r\n label.textAlign = \"middle\";\r\n label.fillOpacity = 0.4;\r\n _this.label = label;\r\n // Set defaults\r\n _this.background.opacity = 1;\r\n _this.background.fill = interfaceColors.getFor(\"background\");\r\n _this.contentAlign = \"center\";\r\n _this.contentValign = \"middle\";\r\n _this.delay = 300;\r\n // Create hidden state\r\n var hiddenState = _this.states.create(\"hidden\");\r\n hiddenState.properties.opacity = 0;\r\n // Hide by default\r\n _this.visible = false;\r\n _this.hide(0);\r\n _this.__disabled = true;\r\n // Make it disposable\r\n // @todo Maybe it's enough to just dispose `sliceContainer`?\r\n _this._disposers.push(_this.backgroundSlice);\r\n _this._disposers.push(_this.progressSlice);\r\n _this._disposers.push(_this.label);\r\n _this._disposers.push(sliceContainer);\r\n return _this;\r\n }\r\n Object.defineProperty(Preloader.prototype, \"progress\", {\r\n /**\r\n * @return Progress (0-1)\r\n */\r\n get: function () {\r\n return this.getPropertyValue(\"progress\");\r\n },\r\n /**\r\n * Current preload progress. (0-1)\r\n *\r\n * * 0 - 0%\r\n * * 0.5 - 50%\r\n * * 1 - 100%\r\n *\r\n * Setting this to a value less than 1, will automatically reveal the\r\n * preloader, while setting it to 1 (100%) will hide it.\r\n *\r\n * @param value Progress (0-1)\r\n */\r\n set: function (value) {\r\n var _this = this;\r\n this.__disabled = false;\r\n this.validateLayout(); // show not in center without this\r\n this.setPropertyValue(\"progress\", value);\r\n /*if (!this.visible && value == 1) {\r\n return;\r\n }*/\r\n this.progressSlice.arc = 360 * value;\r\n if (this.label) {\r\n this.label.text = Math.round(value * 100) + \"%\";\r\n }\r\n if (value >= 1) {\r\n // Cancel the timeout\r\n if (this._started) {\r\n this._started = undefined;\r\n }\r\n // TODO remove closure ?\r\n registry.events.once(\"enterframe\", function () {\r\n var animation = _this.hide();\r\n if (animation && !animation.isFinished()) {\r\n animation.events.once(\"animationended\", function () {\r\n _this.__disabled = true;\r\n });\r\n }\r\n else {\r\n _this.__disabled = true;\r\n }\r\n });\r\n this.interactionsEnabled = false;\r\n this.setPropertyValue(\"progress\", 0);\r\n }\r\n else if (value > 0) {\r\n if (this.delay) {\r\n if (!this._started) {\r\n this._started = new Date().getTime();\r\n }\r\n else if ((this._started + this.delay) <= new Date().getTime()) {\r\n this.__disabled = false;\r\n this.show();\r\n this.interactionsEnabled = true;\r\n }\r\n }\r\n else {\r\n this.__disabled = false;\r\n this.show();\r\n this.interactionsEnabled = true;\r\n }\r\n }\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n Object.defineProperty(Preloader.prototype, \"delay\", {\r\n /**\r\n * @return Delay (ms)\r\n */\r\n get: function () {\r\n return this.getPropertyValue(\"delay\");\r\n },\r\n /**\r\n * Delay display of preloader by X milliseconds.\r\n *\r\n * When loading starts (`progress` is set to <1) and finishes (`progress` is\r\n * set to 1) before `delay` ms, the loader is never shown.\r\n *\r\n * This is used to avoid brief flashing of the preload for very quick loads.\r\n *\r\n * @default 1000\r\n * @param value Delay (ms)\r\n */\r\n set: function (value) {\r\n this.setPropertyValue(\"delay\", value);\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n return Preloader;\r\n}(Container));\r\nexport { Preloader };\r\n/**\r\n * Register class in system, so that it can be instantiated using its name from\r\n * anywhere.\r\n *\r\n * @ignore\r\n */\r\nregistry.registeredClasses[\"Preloader\"] = Preloader;\r\n//# sourceMappingURL=Preloader.js.map","/**\r\n * Functionality for drawing quadratic curves.\r\n */\r\nimport { __extends } from \"tslib\";\r\n/**\r\n * ============================================================================\r\n * IMPORTS\r\n * ============================================================================\r\n * @hidden\r\n */\r\nimport { Line } from \"./Line\";\r\nimport { color } from \"../utils/Color\";\r\nimport * as $path from \"../rendering/Path\";\r\nimport * as $math from \"../utils/Math\";\r\nimport * as $type from \"../utils/Type\";\r\n/**\r\n * ============================================================================\r\n * MAIN CLASS\r\n * ============================================================================\r\n * @hidden\r\n */\r\n/**\r\n * Draws a waved line.\r\n *\r\n * @see {@link IQuadraticCurveEvents} for a list of available events\r\n * @see {@link IQuadraticCurveAdapters} for a list of available Adapters\r\n */\r\nvar QuadraticCurve = /** @class */ (function (_super) {\r\n __extends(QuadraticCurve, _super);\r\n /**\r\n * Constructor\r\n */\r\n function QuadraticCurve() {\r\n var _this = _super.call(this) || this;\r\n _this.className = \"QuadraticCurve\";\r\n _this.element = _this.paper.add(\"path\");\r\n _this.pixelPerfect = false;\r\n _this.fill = color();\r\n _this.applyTheme();\r\n return _this;\r\n }\r\n /**\r\n * Draws the waved line.\r\n *\r\n * @ignore Exclude from docs\r\n */\r\n QuadraticCurve.prototype.draw = function () {\r\n //super.draw();\r\n if ($type.isNumber(this.x1 + this.x2 + this.y1 + this.y2 + this.cpx + this.cpy)) {\r\n var p1 = { x: this.x1, y: this.y1 };\r\n var p2 = { x: this.x2, y: this.y2 };\r\n var cp = { x: this.cpx, y: this.cpy };\r\n var d = $path.moveTo(p1) + $path.quadraticCurveTo(p2, cp);\r\n this.path = d;\r\n }\r\n };\r\n Object.defineProperty(QuadraticCurve.prototype, \"cpx\", {\r\n /**\r\n * @return X\r\n */\r\n get: function () {\r\n return this.getPropertyValue(\"cpx\");\r\n },\r\n /**\r\n * X coordinate of control point.\r\n *\r\n * @param value X\r\n */\r\n set: function (value) {\r\n this.setPropertyValue(\"cpx\", value, true);\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n Object.defineProperty(QuadraticCurve.prototype, \"cpy\", {\r\n /**\r\n * @return Y\r\n */\r\n get: function () {\r\n return this.getPropertyValue(\"cpy\");\r\n },\r\n /**\r\n * Y coordinate of control point.\r\n *\r\n * @param value Y\r\n */\r\n set: function (value) {\r\n this.setPropertyValue(\"cpy\", value, true);\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n /**\r\n * Converts relative position along the line (0-1) into pixel coordinates.\r\n *\r\n * @param position Position (0-1)\r\n * @return Coordinates\r\n */\r\n QuadraticCurve.prototype.positionToPoint = function (position) {\r\n var p1 = { x: this.x1, y: this.y1 };\r\n var cp = { x: this.cpx, y: this.cpy };\r\n var p2 = { x: this.x2, y: this.y2 };\r\n var point1 = $math.getPointOnQuadraticCurve(p1, p2, cp, position);\r\n var point2 = $math.getPointOnQuadraticCurve(p1, p2, cp, position + 0.001);\r\n return { x: point1.x, y: point1.y, angle: $math.getAngle(point1, point2) };\r\n };\r\n return QuadraticCurve;\r\n}(Line));\r\nexport { QuadraticCurve };\r\n//# sourceMappingURL=QuadraticCurve.js.map","/**\r\n * Functionality for drawing rectangles.\r\n */\r\nimport { __extends } from \"tslib\";\r\n/**\r\n * ============================================================================\r\n * IMPORTS\r\n * ============================================================================\r\n * @hidden\r\n */\r\nimport { Sprite } from \"../Sprite\";\r\nimport { registry } from \"../Registry\";\r\nimport * as $math from \"../utils/Math\";\r\n/**\r\n * ============================================================================\r\n * MAIN CLASS\r\n * ============================================================================\r\n * @hidden\r\n */\r\n/**\r\n * Used to draw a rectangle.\r\n *\r\n * @see {@link IRectangleEvents} for a list of available events\r\n * @see {@link IRectangleAdapters} for a list of available Adapters\r\n */\r\nvar Rectangle = /** @class */ (function (_super) {\r\n __extends(Rectangle, _super);\r\n /**\r\n * Constructor\r\n * * Creates a `` element\r\n * * Creates default state\r\n */\r\n function Rectangle() {\r\n var _this = _super.call(this) || this;\r\n _this.className = \"Rectangle\";\r\n _this.element = _this.paper.add(\"rect\");\r\n //this.pixelPerfect = false;\r\n _this.applyTheme();\r\n return _this;\r\n }\r\n /**\r\n * Draws the element.\r\n *\r\n * @ignore Exclude from docs\r\n */\r\n Rectangle.prototype.draw = function () {\r\n _super.prototype.draw.call(this);\r\n var precision = this._positionPrecision;\r\n if (this.pixelPerfect) {\r\n precision = 0;\r\n }\r\n var w = $math.round(this.innerWidth, precision);\r\n var h = $math.round(this.innerHeight, precision);\r\n this.element.attr({\r\n \"width\": w,\r\n \"height\": h\r\n });\r\n };\r\n /**\r\n * Measures the element.\r\n *\r\n * @ignore Exclude from docs\r\n */\r\n Rectangle.prototype.measureElement = function () {\r\n };\r\n Object.defineProperty(Rectangle.prototype, \"bbox\", {\r\n /**\r\n * Returns bounding box (square) for this element.\r\n *\r\n * @ignore Exclude from docs\r\n */\r\n get: function () {\r\n if (this.definedBBox) {\r\n return this.definedBBox;\r\n }\r\n if (this.isMeasured) {\r\n return {\r\n x: 0,\r\n y: 0,\r\n width: this.innerWidth,\r\n height: this.innerHeight\r\n };\r\n }\r\n else {\r\n return { x: 0, y: 0, width: 0, height: 0 };\r\n }\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n return Rectangle;\r\n}(Sprite));\r\nexport { Rectangle };\r\n/**\r\n * Register class in system, so that it can be instantiated using its name from\r\n * anywhere.\r\n *\r\n * @ignore\r\n */\r\nregistry.registeredClasses[\"Rectangle\"] = Rectangle;\r\n//# sourceMappingURL=Rectangle.js.map","/**\r\n * Resize button module.\r\n */\r\nimport { __extends } from \"tslib\";\r\n/**\r\n * ============================================================================\r\n * IMPORTS\r\n * ============================================================================\r\n * @hidden\r\n */\r\nimport { Button } from \"./Button\";\r\nimport { Sprite } from \"../Sprite\";\r\nimport { InterfaceColorSet } from \"../../core/utils/InterfaceColorSet\";\r\nimport { registry } from \"../Registry\";\r\nimport * as $path from \"../rendering/Path\";\r\n/**\r\n * ============================================================================\r\n * MAIN CLASS\r\n * ============================================================================\r\n * @hidden\r\n */\r\n/**\r\n * Creates a draggable resize/grip button.\r\n *\r\n * @see {@link IResizeButtonEvents} for a list of available events\r\n * @see {@link IResizeButtonAdapters} for a list of available Adapters\r\n */\r\nvar ResizeButton = /** @class */ (function (_super) {\r\n __extends(ResizeButton, _super);\r\n /**\r\n * Constructor\r\n */\r\n function ResizeButton() {\r\n var _this = \r\n // Init\r\n _super.call(this) || this;\r\n _this.className = \"ResizeButton\";\r\n // Set defaults\r\n _this.orientation = \"horizontal\";\r\n _this.layout = \"absolute\";\r\n _this.horizontalCenter = \"middle\";\r\n _this.verticalCenter = \"middle\";\r\n _this.draggable = true;\r\n _this.padding(8, 8, 8, 8);\r\n _this.background.cornerRadius(20, 20, 20, 20);\r\n // Create an icon\r\n var icon = new Sprite();\r\n icon.element = _this.paper.add(\"path\");\r\n var path = $path.moveTo({ x: -2, y: -6 });\r\n path += $path.lineTo({ x: -2, y: 6 });\r\n path += $path.moveTo({ x: 2, y: -6 });\r\n path += $path.lineTo({ x: 2, y: 6 });\r\n icon.path = path;\r\n icon.pixelPerfect = true;\r\n icon.padding(0, 4, 0, 4);\r\n icon.stroke = new InterfaceColorSet().getFor(\"alternativeText\");\r\n icon.strokeOpacity = 0.7;\r\n //icon.align = \"center\";\r\n //icon.valign = \"middle\";\r\n _this.icon = icon;\r\n _this.label.dispose();\r\n _this.label = undefined;\r\n // Apply theme\r\n _this.applyTheme();\r\n return _this;\r\n }\r\n Object.defineProperty(ResizeButton.prototype, \"orientation\", {\r\n /**\r\n * Use for setting of direction (orientation) of the resize button.\r\n *\r\n * Available options: \"horizontal\", \"vertical\".\r\n *\r\n * @param value Orientation\r\n */\r\n set: function (value) {\r\n var icon = this.icon;\r\n if (icon) {\r\n if (value == \"horizontal\") {\r\n icon.rotation = 0;\r\n }\r\n else {\r\n icon.rotation = -90;\r\n }\r\n }\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n return ResizeButton;\r\n}(Button));\r\nexport { ResizeButton };\r\n/**\r\n * Register class in system, so that it can be instantiated using its name from\r\n * anywhere.\r\n *\r\n * @ignore\r\n */\r\nregistry.registeredClasses[\"ResizeButton\"] = ResizeButton;\r\n//# sourceMappingURL=ResizeButton.js.map","/**\r\n * Rounded rectangle module.\r\n */\r\nimport { __extends } from \"tslib\";\r\n/**\r\n * ============================================================================\r\n * IMPORTS\r\n * ============================================================================\r\n * @hidden\r\n */\r\nimport { Sprite } from \"../Sprite\";\r\nimport { registry } from \"../Registry\";\r\nimport * as $math from \"../utils/Math\";\r\nimport * as $type from \"../utils/Type\";\r\nimport * as $utils from \"../utils/Utils\";\r\n/**\r\n * ============================================================================\r\n * MAIN CLASS\r\n * ============================================================================\r\n * @hidden\r\n */\r\n/**\r\n * Draws a rectangle with rounded corners.\r\n *\r\n * @see {@link IRoundedRectangleEvents} for a list of available events\r\n * @see {@link IRoundedRectangleAdapters} for a list of available Adapters\r\n */\r\nvar RoundedRectangle = /** @class */ (function (_super) {\r\n __extends(RoundedRectangle, _super);\r\n /**\r\n * Constructor\r\n */\r\n function RoundedRectangle() {\r\n var _this = _super.call(this) || this;\r\n _this.className = \"RoundedRectangle\";\r\n _this.element = _this.paper.add(\"path\");\r\n _this.cornerRadius(3, 3, 3, 3);\r\n _this.applyTheme();\r\n return _this;\r\n }\r\n /**\r\n * Draws the element.\r\n *\r\n * @ignore Exclude from docs\r\n */\r\n RoundedRectangle.prototype.draw = function () {\r\n _super.prototype.draw.call(this);\r\n var w = this.innerWidth;\r\n var h = this.innerHeight;\r\n if ($type.isNumber(w) && $type.isNumber(h)) {\r\n var minSide = $math.min(w, h) / 2;\r\n var cornerRadiusTopLeft = $utils.relativeToValue(this.cornerRadiusTopLeft, minSide);\r\n var cornerRadiusTopRight = $utils.relativeToValue(this.cornerRadiusTopRight, minSide);\r\n var cornerRadiusBottomRight = $utils.relativeToValue(this.cornerRadiusBottomRight, minSide);\r\n var cornerRadiusBottomLeft = $utils.relativeToValue(this.cornerRadiusBottomLeft, minSide);\r\n var maxcr = $math.min(Math.abs(w / 2), Math.abs(h / 2));\r\n var crtl = $math.fitToRange(cornerRadiusTopLeft, 0, maxcr);\r\n var crtr = $math.fitToRange(cornerRadiusTopRight, 0, maxcr);\r\n var crbr = $math.fitToRange(cornerRadiusBottomRight, 0, maxcr);\r\n var crbl = $math.fitToRange(cornerRadiusBottomLeft, 0, maxcr);\r\n var lineT = \"M\" + crtl + \",0 L\" + (w - crtr) + \",0\";\r\n var lineB = \" L\" + crbl + \",\" + h;\r\n var lineL = \" L0,\" + crtl;\r\n var lineR = \" L\" + w + \",\" + (h - crbr);\r\n var arcTR = \" a\" + crtr + \",\" + crtr + \" 0 0 1 \" + crtr + \",\" + crtr;\r\n var arcBR = \" a\" + crbr + \",\" + crbr + \" 0 0 1 -\" + crbr + \",\" + crbr;\r\n var arcBL = \" a\" + crbl + \",\" + crbl + \" 0 0 1 -\" + crbl + \",-\" + crbl;\r\n var arcTL = \" a\" + crtl + \",\" + crtl + \" 0 0 1 \" + crtl + \",-\" + crtl;\r\n var path = lineT + arcTR + lineR + arcBR + lineB + arcBL + lineL + arcTL + \" Z\";\r\n this.path = path;\r\n }\r\n };\r\n /**\r\n * Sets radius for all four corners at ones.\r\n *\r\n * All numbers are in pixels.\r\n *\r\n * @param tl Top-left corner\r\n * @param tr Top-right corner\r\n * @param bl Bottom-left corner\r\n * @param br Bottom-right corner\r\n */\r\n RoundedRectangle.prototype.cornerRadius = function (tl, tr, bl, br) {\r\n this.cornerRadiusTopLeft = tl;\r\n this.cornerRadiusTopRight = tr;\r\n this.cornerRadiusBottomLeft = bl;\r\n this.cornerRadiusBottomRight = br;\r\n };\r\n Object.defineProperty(RoundedRectangle.prototype, \"cornerRadiusTopLeft\", {\r\n /**\r\n * @return Radius (px or Percent)\r\n */\r\n get: function () {\r\n return this.getPropertyValue(\"cornerRadiusTopLeft\");\r\n },\r\n /**\r\n * Radius of the top-left corner in pixels.\r\n *\r\n * @default 3\r\n * @param value Radius (px or Percent)\r\n */\r\n set: function (value) {\r\n this.setPercentProperty(\"cornerRadiusTopLeft\", value, true);\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n Object.defineProperty(RoundedRectangle.prototype, \"cornerRadiusTopRight\", {\r\n /**\r\n * @return Radius (px or Percent)\r\n */\r\n get: function () {\r\n return this.getPropertyValue(\"cornerRadiusTopRight\");\r\n },\r\n /**\r\n * Radius of the top-right corner in pixels.\r\n *\r\n * @default 3\r\n * @param value Radius (px or Percent)\r\n */\r\n set: function (value) {\r\n this.setPercentProperty(\"cornerRadiusTopRight\", value, true);\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n Object.defineProperty(RoundedRectangle.prototype, \"cornerRadiusBottomRight\", {\r\n /**\r\n * @return Radius (px or Percent)\r\n */\r\n get: function () {\r\n return this.getPropertyValue(\"cornerRadiusBottomRight\");\r\n },\r\n /**\r\n * Radius of the bottom-right corner in pixels.\r\n *\r\n * @default 3\r\n * @param value Radius (px or Percent)\r\n */\r\n set: function (value) {\r\n this.setPercentProperty(\"cornerRadiusBottomRight\", value, true);\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n Object.defineProperty(RoundedRectangle.prototype, \"cornerRadiusBottomLeft\", {\r\n /**\r\n * @return Radius (px or Percent)\r\n */\r\n get: function () {\r\n return this.getPropertyValue(\"cornerRadiusBottomLeft\");\r\n },\r\n /**\r\n * Radius of the bottom-left corner in pixels.\r\n *\r\n * @default 3\r\n * @param value Radius (px or Percent)\r\n */\r\n set: function (value) {\r\n this.setPercentProperty(\"cornerRadiusBottomLeft\", value, true);\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n /**\r\n * Measures the element.\r\n *\r\n * @ignore Exclude from docs\r\n */\r\n RoundedRectangle.prototype.measureElement = function () {\r\n };\r\n Object.defineProperty(RoundedRectangle.prototype, \"bbox\", {\r\n /**\r\n * Returns bounding box (square) for this element.\r\n *\r\n * @ignore Exclude from docs\r\n */\r\n get: function () {\r\n if (this.definedBBox) {\r\n return this.definedBBox;\r\n }\r\n if (this.isMeasured) {\r\n return {\r\n x: 0,\r\n y: 0,\r\n width: this.innerWidth,\r\n height: this.innerHeight\r\n };\r\n }\r\n else {\r\n return { x: 0, y: 0, width: 0, height: 0 };\r\n }\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n return RoundedRectangle;\r\n}(Sprite));\r\nexport { RoundedRectangle };\r\n/**\r\n * Register class in system, so that it can be instantiated using its name from\r\n * anywhere.\r\n *\r\n * @ignore\r\n */\r\nregistry.registeredClasses[\"RoundedRectangle\"] = RoundedRectangle;\r\n//# sourceMappingURL=RoundedRectangle.js.map","/**\r\n * Provides functionality used to build scrollbars.\r\n */\r\nimport { __extends } from \"tslib\";\r\n/**\r\n * ============================================================================\r\n * IMPORTS\r\n * ============================================================================\r\n * @hidden\r\n */\r\nimport { Container } from \"../Container\";\r\nimport { ResizeButton } from \"../elements/ResizeButton\";\r\nimport { Button } from \"../elements/Button\";\r\nimport { getInteraction } from \"../interaction/Interaction\";\r\nimport { MouseCursorStyle } from \"../interaction/Mouse\";\r\nimport { RoundedRectangle } from \"../elements/RoundedRectangle\";\r\nimport { registry } from \"../Registry\";\r\nimport { keyboard } from \"../utils/Keyboard\";\r\nimport { InterfaceColorSet } from \"../../core/utils/InterfaceColorSet\";\r\nimport { percent, Percent } from \"../utils/Percent\";\r\nimport * as $math from \"../utils/Math\";\r\nimport * as $ease from \"../utils/Ease\";\r\nimport * as $type from \"../utils/Type\";\r\nimport * as $utils from \"../utils/Utils\";\r\n;\r\n/**\r\n * ============================================================================\r\n * MAIN CLASS\r\n * ============================================================================\r\n * @hidden\r\n */\r\n/**\r\n * Scrollbar is a generic control allowing to select a range of values or pan\r\n * the selection.\r\n *\r\n * @see {@link IScrollbarEvents} for a list of available events\r\n * @see {@link IScrollbarAdapters} for a list of available Adapters\r\n */\r\nvar Scrollbar = /** @class */ (function (_super) {\r\n __extends(Scrollbar, _super);\r\n /**\r\n * Construtor\r\n */\r\n function Scrollbar() {\r\n var _this = _super.call(this) || this;\r\n /**\r\n * Previously selected lower (start) value.\r\n */\r\n _this._previousStart = 0;\r\n /**\r\n * Previously selected upper (end) value.\r\n */\r\n _this._previousEnd = 1;\r\n /**\r\n * A value of previously selected lower value, used for doubleclick function.\r\n */\r\n _this._prevStart = 0;\r\n /**\r\n * A value of previously selected upper value, used for doubleclick function.\r\n */\r\n _this._prevEnd = 1;\r\n /**\r\n * Indicates if the Scrollbar is currently \"busy\" (animating and or\r\n * performing zoom by user interaction).\r\n */\r\n _this._isBusy = false;\r\n /**\r\n * [_skipRangeEvents description]\r\n *\r\n * @todo Description\r\n */\r\n _this._skipRangeEvents = false;\r\n /**\r\n * Update the selection when dragging the grips.\r\n *\r\n * If set to `false` selection will be updated only when the grip is\r\n * released.\r\n *\r\n * @default true\r\n */\r\n _this.updateWhileMoving = true;\r\n _this.className = \"Scrollbar\";\r\n _this.minHeight = 12;\r\n _this.minWidth = 12;\r\n _this.animationDuration = 0;\r\n _this.animationEasing = $ease.cubicOut;\r\n _this.margin(10, 10, 10, 10);\r\n var interfaceColors = new InterfaceColorSet();\r\n // background is also container as it might contain graphs, grid, etc\r\n var background = _this.background;\r\n background.cornerRadius(10, 10, 10, 10);\r\n background.fill = interfaceColors.getFor(\"fill\");\r\n background.fillOpacity = 0.5;\r\n // Make system tooltips appear by default\r\n _this.showSystemTooltip = true;\r\n _this.startGrip = new ResizeButton();\r\n _this.endGrip = new ResizeButton();\r\n // Default orientation...\r\n // ... is set in `applyInternalDefaults()` because it accesses `language`\r\n // and should only be started to access when parent is set\r\n // Set events\r\n _this.events.on(\"transformed\", function () {\r\n _this.updateThumb();\r\n }, _this, false);\r\n // Initial positions\r\n _this.start = 0;\r\n _this.end = 1;\r\n // Set roles\r\n _this.role = \"scrollbar\";\r\n _this.thumb.role = \"slider\";\r\n _this.thumb.readerLive = \"polite\";\r\n _this.startGrip.role = \"slider\";\r\n _this.endGrip.role = \"slider\";\r\n // otherwise range changed won't be registered\r\n _this.events.once(\"inited\", function () {\r\n _this._previousStart = undefined;\r\n _this.dispatchRangeChange();\r\n }, undefined, false);\r\n _this.hideGrips = false;\r\n _this.orientation = \"horizontal\";\r\n // Min/max values for accessibility\r\n _this.setSVGAttribute({ \"aria-valuemin\": \"0\" });\r\n _this.setSVGAttribute({ \"aria-valuemax\": \"100\" });\r\n _this.applyTheme();\r\n return _this;\r\n }\r\n /**\r\n * Sets defaults that instantiate some objects that rely on parent, so they\r\n * cannot be set in constructor.\r\n */\r\n Scrollbar.prototype.applyInternalDefaults = function () {\r\n _super.prototype.applyInternalDefaults.call(this);\r\n // Set screen reader tetxt accordingly\r\n if (this.orientation === \"horizontal\") {\r\n if (!$type.hasValue(this.readerTitle)) {\r\n this.readerTitle = this.language.translate(\"Use TAB to select grip buttons or left and right arrows to change selection\");\r\n }\r\n if (!$type.hasValue(this.thumb.readerDescription)) {\r\n this.thumb.readerDescription = this.language.translate(\"Use left and right arrows to move selection\");\r\n }\r\n if (!$type.hasValue(this.startGrip.readerDescription)) {\r\n this.startGrip.readerDescription = this.language.translate(\"Use left and right arrows to move left selection\");\r\n }\r\n if (!$type.hasValue(this.endGrip.readerDescription)) {\r\n this.endGrip.readerDescription = this.language.translate(\"Use left and right arrows to move right selection\");\r\n }\r\n this.readerOrientation = \"horizontal\";\r\n }\r\n else {\r\n if (!$type.hasValue(this.readerTitle)) {\r\n this.readerTitle = this.language.translate(\"Use TAB select grip buttons or up and down arrows to change selection\");\r\n }\r\n if (!$type.hasValue(this.thumb.readerDescription)) {\r\n this.thumb.readerDescription = this.language.translate(\"Use up and down arrows to move selection\");\r\n }\r\n if (!$type.hasValue(this.startGrip.readerDescription)) {\r\n this.startGrip.readerDescription = this.language.translate(\"Use up and down arrows to move upper selection\");\r\n }\r\n if (!$type.hasValue(this.endGrip.readerDescription)) {\r\n this.endGrip.readerDescription = this.language.translate(\"Use up and down arrows to move lower selection\");\r\n }\r\n this.readerOrientation = \"vertical\";\r\n }\r\n this.readerControls = this.baseSprite.uidAttr();\r\n };\r\n /**\r\n * Validates the layout of the scrollbar's elements.\r\n *\r\n * @ignore Exclude from docs\r\n */\r\n Scrollbar.prototype.validateLayout = function () {\r\n this.updateSize();\r\n _super.prototype.validateLayout.call(this);\r\n // when size changes, need to update extremes\r\n this.updateExtremes();\r\n };\r\n /**\r\n * Update background for the scrollbar.\r\n *\r\n * @ignore Exclude from docs\r\n */\r\n Scrollbar.prototype.processBackground = function () {\r\n _super.prototype.processBackground.call(this);\r\n var background = this.background;\r\n background.clickable = true;\r\n background.events.on(\"hit\", this.handleBgHit, this, undefined);\r\n };\r\n /**\r\n * Zooms to the particular place when clicked/tapped on the scrollbar\r\n * background.\r\n *\r\n * @ignore Exclude from docs\r\n * @param event Event\r\n */\r\n Scrollbar.prototype.handleBgHit = function (event) {\r\n this.makeBusy();\r\n var point = event.spritePoint;\r\n point = $utils.spritePointToSprite(point, this.background, this);\r\n var thumb = this.thumb;\r\n if (this.orientation == \"horizontal\") {\r\n var thumbX = point.x - thumb.pixelWidth / 2;\r\n thumbX = $math.fitToRange(thumbX, 0, this.innerWidth - thumb.pixelWidth);\r\n this._thumbAnimation = thumb.animate({ property: \"x\", to: thumbX }, this.animationDuration, this.animationEasing);\r\n }\r\n else {\r\n var thumbY = point.y - thumb.pixelHeight / 2;\r\n thumbY = $math.fitToRange(thumbY, 0, this.innerHeight - thumb.pixelHeight);\r\n this._thumbAnimation = thumb.animate({ property: \"y\", to: thumbY }, this.animationDuration, this.animationEasing);\r\n }\r\n if (this.animationDuration > 0) {\r\n this._thumbAnimation.events.on(\"animationended\", this.makeUnbusy, this, false);\r\n }\r\n else {\r\n this._thumb.validate();\r\n this.makeUnbusy();\r\n }\r\n };\r\n /**\r\n * Set scrollbar as busy. (currently zooming)\r\n *\r\n * @ignore Exclude from docs\r\n */\r\n Scrollbar.prototype.makeBusy = function () {\r\n this._isBusy = true;\r\n this._skipRangeEvents = false;\r\n if (this._unbusyTimeout) {\r\n this.removeDispose(this._unbusyTimeout);\r\n }\r\n this._unbusyTimeout = undefined;\r\n this.stopAnimations();\r\n };\r\n /**\r\n * Stops all animations, currently playing for the scrollbar.\r\n *\r\n * @ignore Exclude from docs\r\n */\r\n Scrollbar.prototype.stopAnimations = function () {\r\n if (this._thumbAnimation) {\r\n this._thumbAnimation.stop(true);\r\n }\r\n if (this._zoomAnimation) {\r\n this._zoomAnimation.stop(true);\r\n }\r\n };\r\n /**\r\n * Cancels \"busy\" status of the Scrollbar.\r\n *\r\n * @ignore Exclude from docs\r\n */\r\n Scrollbar.prototype.makeUnbusy = function () {\r\n /**\r\n * We cannot make Scrollbar not busy right after release, because then axes\r\n * will take over controll and Scrollbar will start to animate.\r\n * Theorethically, it's not right to set timeout by `animationDuration`,\r\n * however we can not know all the durations of elements we scroll, so we\r\n * assume that animation duration will be the same as\r\n * `interpolationDuration` or `rangeChange` duration.\r\n */\r\n this._unbusyTimeout = this.setTimeout(this.makeUnbusyReal.bind(this), this.animationDuration * 1.1);\r\n };\r\n /**\r\n * [makeUnbusyReal description]\r\n *\r\n * @todo Description\r\n * @ignore Exclude from docs\r\n */\r\n Scrollbar.prototype.makeUnbusyReal = function () {\r\n this._usingGrip = undefined;\r\n this._isBusy = false;\r\n if (!this.updateWhileMoving) {\r\n this.dispatchRangeChange();\r\n }\r\n };\r\n /**\r\n * Disptatches rangechanged event if it really changed\r\n *\r\n * @ignore Exclude from docs\r\n */\r\n Scrollbar.prototype.dispatchRangeChange = function () {\r\n if (this._previousEnd != this.end || this._previousStart != this.start) {\r\n this._previousStart = this.start;\r\n this._previousEnd = this.end;\r\n this.dispatch(\"rangechanged\");\r\n }\r\n };\r\n /**\r\n * Updates the \"thumb\" element. A draggable element between the grips.\r\n * @ignore\r\n */\r\n Scrollbar.prototype.updateThumb = function (dispatchEvents) {\r\n if (dispatchEvents === void 0) { dispatchEvents = true; }\r\n if (!this.parent) {\r\n return;\r\n }\r\n var thumb = this.thumb;\r\n var start = this.start;\r\n var end = this.end;\r\n var startGrip = this.startGrip;\r\n var endGrip = this.endGrip;\r\n if (this.orientation == \"horizontal\") {\r\n var innerWidth_1 = this.innerWidth;\r\n thumb.width = innerWidth_1 * (end - start);\r\n thumb.maxX = innerWidth_1 - thumb.pixelWidth;\r\n thumb.x = start * innerWidth_1;\r\n startGrip.moveTo({ x: thumb.pixelX, y: 0 }, undefined, undefined, true); // overrides dragging\r\n endGrip.moveTo({ x: thumb.pixelX + thumb.pixelWidth, y: 0 }, undefined, undefined, true);\r\n startGrip.readerTitle = this.language.translate(\"From %1\", undefined, this.adapter.apply(\"positionValue\", {\r\n value: Math.round(start * 100) + \"%\",\r\n position: start\r\n }).value);\r\n startGrip.readerValueNow = \"\" + Math.round(start * 100);\r\n startGrip.readerValueText = startGrip.readerTitle;\r\n endGrip.readerTitle = this.language.translate(\"To %1\", undefined, this.adapter.apply(\"positionValue\", {\r\n value: Math.round(end * 100) + \"%\",\r\n position: end\r\n }).value);\r\n endGrip.readerValueNow = \"\" + Math.round(end * 100);\r\n endGrip.readerValueText = endGrip.readerTitle;\r\n }\r\n else {\r\n var innerHeight_1 = this.innerHeight;\r\n thumb.height = innerHeight_1 * (end - start);\r\n thumb.maxY = innerHeight_1 - thumb.pixelHeight;\r\n thumb.y = (1 - end) * innerHeight_1;\r\n startGrip.moveTo({ x: 0, y: thumb.pixelY + thumb.pixelHeight }, undefined, undefined, true);\r\n endGrip.moveTo({ x: 0, y: thumb.pixelY }, undefined, undefined, true);\r\n startGrip.readerTitle = this.language.translate(\"To %1\", undefined, this.adapter.apply(\"positionValue\", {\r\n value: Math.round((1 - start) * 100) + \"%\",\r\n position: (1 - start)\r\n }).value);\r\n startGrip.readerValueNow = \"\" + Math.round(start * 100);\r\n startGrip.readerValueText = startGrip.readerTitle;\r\n endGrip.readerTitle = this.language.translate(\"From %1\", undefined, this.adapter.apply(\"positionValue\", {\r\n value: Math.round((1 - end) * 100) + \"%\",\r\n position: (1 - end)\r\n }).value);\r\n endGrip.readerValueNow = \"\" + Math.round(end * 100);\r\n endGrip.readerValueText = endGrip.readerTitle;\r\n }\r\n // Add accessibility\r\n thumb.readerTitle = this.language.translate(\"From %1 to %2\", undefined, this.adapter.apply(\"positionValue\", {\r\n value: Math.round(start * 100) + \"%\",\r\n position: start\r\n }).value, this.adapter.apply(\"positionValue\", {\r\n value: Math.round(end * 100) + \"%\",\r\n position: end\r\n }).value);\r\n thumb.readerValueNow = \"\" + Math.round(start * 100);\r\n thumb.readerValueText = thumb.readerTitle;\r\n this.readerValueNow = \"\" + Math.round(start * 100);\r\n this.readerValueText = thumb.readerTitle;\r\n if (!this._skipRangeEvents && this.updateWhileMoving && dispatchEvents) {\r\n this.dispatchRangeChange();\r\n }\r\n };\r\n /**\r\n * Updates extremes of the scrollbar.\r\n */\r\n Scrollbar.prototype.updateExtremes = function () {\r\n var orientation = this.orientation;\r\n var minX = 0;\r\n var minY = 0;\r\n var maxX = 0;\r\n var maxY = 0;\r\n if (orientation == \"horizontal\") {\r\n maxX = this.innerWidth;\r\n minY = maxY = this.innerHeight / 2;\r\n }\r\n else {\r\n maxY = this.innerHeight;\r\n minX = maxX = this.innerWidth / 2;\r\n }\r\n var startGrip = this.startGrip;\r\n startGrip.minX = minX;\r\n startGrip.maxX = maxX;\r\n startGrip.minY = minY;\r\n startGrip.maxY = maxY;\r\n var endGrip = this.endGrip;\r\n endGrip.minX = minX;\r\n endGrip.maxX = maxX;\r\n endGrip.minY = minY;\r\n endGrip.maxY = maxY;\r\n var thumb = this.thumb;\r\n thumb.minX = minX;\r\n thumb.maxX = maxX;\r\n thumb.minY = minY;\r\n thumb.maxY = maxY;\r\n };\r\n /**\r\n * Updates size of the scrollbar.\r\n */\r\n Scrollbar.prototype.updateSize = function () {\r\n var orientation = this.orientation;\r\n var startGrip = this.startGrip;\r\n if (startGrip) {\r\n startGrip.orientation = orientation;\r\n }\r\n if (this.endGrip) {\r\n this.endGrip.orientation = orientation;\r\n }\r\n var thumb = this.thumb;\r\n if (thumb) {\r\n if (orientation == \"horizontal\") {\r\n if (!$type.isNumber(this._pixelWidth)) {\r\n if (!(this.width instanceof Percent)) {\r\n this.width = percent(100);\r\n }\r\n }\r\n // this teorethically might be wrong, if user indeed sets height of a horizontal scrollbar in percent\r\n // however without this height might be equal to 100% if previous orientation was set to horizontal\r\n // so this is ok solution, in case user really wants to have scrollbar height set in percent,\r\n // he should do this after orientation.\r\n if ($type.hasValue(this.percentHeight)) {\r\n this.height = this.minHeight;\r\n }\r\n thumb.height = this.innerHeight;\r\n thumb.verticalCenter = \"middle\";\r\n thumb.horizontalCenter = \"left\";\r\n }\r\n else {\r\n if (!$type.isNumber(this._pixelHeight)) {\r\n if (!(this.height instanceof Percent)) {\r\n this.height = percent(100);\r\n }\r\n }\r\n // same as above with percentHeight\r\n if ($type.hasValue(this.percentWidth)) {\r\n this.width = this.minWidth;\r\n }\r\n thumb.width = this.innerWidth;\r\n thumb.verticalCenter = \"top\";\r\n thumb.horizontalCenter = \"middle\";\r\n }\r\n }\r\n };\r\n Object.defineProperty(Scrollbar.prototype, \"isBusy\", {\r\n /**\r\n * Indicates if the Scrollbar is currently \"busy\" (animating and or\r\n * performing zoom by user interaction).\r\n * @return boolean\r\n */\r\n get: function () {\r\n return this._isBusy;\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n Object.defineProperty(Scrollbar.prototype, \"start\", {\r\n /**\r\n * @return Position (0-1)\r\n */\r\n get: function () {\r\n return Math.min(this.getPosition(this._start), this.getPosition(this._end));\r\n },\r\n /**\r\n * ==========================================================================\r\n * POSITIONS\r\n * ==========================================================================\r\n * @hidden\r\n */\r\n /**\r\n * Relative position (0-1) of the start grip.\r\n *\r\n * @param position Position (0-1)\r\n */\r\n set: function (position) {\r\n if (!this._isBusy) {\r\n this.__start = position;\r\n }\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n Object.defineProperty(Scrollbar.prototype, \"__start\", {\r\n /**\r\n * @return [description]\r\n */\r\n get: function () {\r\n return this._start;\r\n },\r\n /**\r\n * [__start description]\r\n *\r\n * @todo Description\r\n * @param position [description]\r\n */\r\n set: function (position) {\r\n this._start = this.getPosition(position);\r\n this.updateThumb();\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n Object.defineProperty(Scrollbar.prototype, \"end\", {\r\n /**\r\n * @return Position (0-1)\r\n */\r\n get: function () {\r\n return Math.max(this.getPosition(this._start), this.getPosition(this._end));\r\n },\r\n /**\r\n * Relative position (0-1) of the end grip.\r\n *\r\n * @param position Position (0-1)\r\n */\r\n set: function (position) {\r\n if (!this._isBusy) {\r\n this.__end = position;\r\n }\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n Object.defineProperty(Scrollbar.prototype, \"__end\", {\r\n /**\r\n * @return [description]\r\n */\r\n get: function () {\r\n return this._end;\r\n },\r\n /**\r\n * [__end description]\r\n *\r\n * @todo Description\r\n * @param position [description]\r\n */\r\n set: function (position) {\r\n this._end = this.getPosition(position);\r\n this.updateThumb();\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n Object.defineProperty(Scrollbar.prototype, \"range\", {\r\n /**\r\n * Current selection range.\r\n *\r\n * @readonly\r\n * @return Range\r\n */\r\n get: function () {\r\n return { start: this.start, end: this.end, priority: this._usingGrip };\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n /**\r\n * Disables range change events.\r\n *\r\n * @ignore Exclude from docs\r\n */\r\n Scrollbar.prototype.skipRangeEvents = function () {\r\n if (!this._isBusy) {\r\n this._skipRangeEvents = true;\r\n }\r\n };\r\n /**\r\n * [fixRange description]\r\n *\r\n * @todo Description\r\n * @ignore Exclude from docs\r\n * @param range Range\r\n */\r\n Scrollbar.prototype.fixRange = function (range) {\r\n if (range.start != $math.round(this._start, 2) || range.end != $math.round(this._end, 2)) {\r\n this._start = range.start;\r\n this._end = range.end;\r\n this._skipRangeEvents = true;\r\n this.updateThumb();\r\n this._skipRangeEvents = false;\r\n this.thumb.validate();\r\n this.thumb.background.validate();\r\n }\r\n };\r\n /**\r\n * [getPosition description]\r\n *\r\n * @todo Description\r\n * @param position [description]\r\n * @return [description]\r\n */\r\n Scrollbar.prototype.getPosition = function (position) {\r\n return $math.fitToRange($math.round(position, 4), 0, 1);\r\n };\r\n Object.defineProperty(Scrollbar.prototype, \"orientation\", {\r\n /**\r\n * @return Orientation\r\n */\r\n get: function () {\r\n return this.getPropertyValue(\"orientation\");\r\n },\r\n /**\r\n * ==========================================================================\r\n * MISC\r\n * ==========================================================================\r\n * @hidden\r\n */\r\n /**\r\n * Orientation of the scrollbar.\r\n *\r\n * Available options: \"horizontal\" (default) and \"vertical\".\r\n *\r\n * @default \"horizontal\"\r\n * @param value Orientation\r\n */\r\n set: function (value) {\r\n if (this.setPropertyValue(\"orientation\", value)) {\r\n // Set mouse cursors and screen reader tetxt accordingly\r\n if (value === \"horizontal\") {\r\n // Mouse styles\r\n this.startGrip.cursorOverStyle = MouseCursorStyle.horizontalResize;\r\n this.endGrip.cursorOverStyle = MouseCursorStyle.horizontalResize;\r\n // Reader text\r\n /*this.readerTitle = this.language.translate(\"Use TAB to select grip buttons or left and right arrows to change selection\");\r\n this.thumb.readerDescription = this.language.translate(\"Use left and right arrows to move selection\");\r\n this.startGrip.readerDescription = this.language.translate(\"Use left and right arrows to move left selection\");\r\n this.endGrip.readerDescription = this.language.translate(\"Use left and right arrows to move right selection\");*/\r\n }\r\n else {\r\n // Mouse styles\r\n this.startGrip.cursorOverStyle = MouseCursorStyle.verticalResize;\r\n this.endGrip.cursorOverStyle = MouseCursorStyle.verticalResize;\r\n // Reader text\r\n /*this.readerTitle = this.language.translate(\"Use TAB select grip buttons or up and down arrows to change selection\");\r\n this.thumb.readerDescription = this.language.translate(\"Use up and down arrows to move selection\");\r\n this.startGrip.readerDescription = this.language.translate(\"Use up and down arrows to move upper selection\");\r\n this.endGrip.readerDescription = this.language.translate(\"Use up and down arrows to move lower selection\");*/\r\n }\r\n this.updateByOrientation();\r\n this.invalidate();\r\n }\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n /**\r\n * @ignore\r\n */\r\n Scrollbar.prototype.updateByOrientation = function () {\r\n };\r\n Object.defineProperty(Scrollbar.prototype, \"startGrip\", {\r\n /**\r\n * @return Grip element\r\n */\r\n get: function () {\r\n return this._startGrip;\r\n },\r\n /**\r\n * ==========================================================================\r\n * GRIPS\r\n * ==========================================================================\r\n * @hidden\r\n */\r\n /**\r\n * Start grip element. (button)\r\n *\r\n * @param button Grip element\r\n */\r\n set: function (button) {\r\n if (this._startGrip) {\r\n this.removeDispose(this._startGrip);\r\n }\r\n this._startGrip = button;\r\n this.processGrip(button);\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n Object.defineProperty(Scrollbar.prototype, \"endGrip\", {\r\n /**\r\n * @return Grip element\r\n */\r\n get: function () {\r\n return this._endGrip;\r\n },\r\n /**\r\n * End grip element. (button)\r\n *\r\n * @param button Grip element\r\n */\r\n set: function (button) {\r\n if (this._endGrip) {\r\n this.removeDispose(this._endGrip);\r\n }\r\n this._endGrip = button;\r\n this.processGrip(button);\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n /**\r\n * Decorates the grip button with properties and events.\r\n *\r\n * @ignore Exclude from docs\r\n * @param button Grip button\r\n */\r\n Scrollbar.prototype.processGrip = function (button) {\r\n button.parent = this;\r\n button.isMeasured = false;\r\n button.focusable = true;\r\n button.shouldClone = false;\r\n // Set button defaults\r\n //button.showSystemTooltip = true; // setting this here is not right because we break inheritance\r\n button.zIndex = 100;\r\n button.events.on(\"drag\", this.handleGripDrag, this, false);\r\n button.events.on(\"dragstop\", this.makeUnbusy, this, false);\r\n button.events.on(\"down\", this.makeBusy, this, false);\r\n button.events.on(\"up\", this.makeUnbusy, this, false);\r\n this._disposers.push(button);\r\n };\r\n /**\r\n * Updates positions of related elements after grip element is dragged.\r\n *\r\n * @ignore Exclude from docs\r\n * @param event Event\r\n */\r\n Scrollbar.prototype.handleGripDrag = function (event) {\r\n this.makeBusy();\r\n if (event.target === this._startGrip) {\r\n this._usingGrip = \"start\";\r\n }\r\n else {\r\n this._usingGrip = \"end\";\r\n }\r\n if (this.orientation == \"horizontal\") {\r\n this._start = this.startGrip.pixelX / this.innerWidth;\r\n this._end = this.endGrip.pixelX / this.innerWidth;\r\n }\r\n else {\r\n this._start = 1 - this.startGrip.pixelY / this.innerHeight;\r\n this._end = 1 - this.endGrip.pixelY / this.innerHeight;\r\n }\r\n this.updateThumb();\r\n };\r\n Object.defineProperty(Scrollbar.prototype, \"thumb\", {\r\n /**\r\n * @return Thumb element\r\n */\r\n get: function () {\r\n if (!this._thumb) {\r\n // Create scrollbar controls (setters will handle adding disposers)\r\n var thumb = new Button();\r\n thumb.background.cornerRadius(10, 10, 10, 10);\r\n thumb.padding(0, 0, 0, 0);\r\n this.thumb = thumb;\r\n }\r\n return this._thumb;\r\n },\r\n /**\r\n * A \"thumb\" element.\r\n *\r\n * It's a draggable square space between the grips, that can be used to\r\n * pan the selection.\r\n *\r\n * @param thumb Thumb element\r\n */\r\n set: function (thumb) {\r\n var _this = this;\r\n if (thumb) {\r\n if (this._thumb) {\r\n this.removeDispose(this._thumb);\r\n }\r\n this._thumb = thumb;\r\n thumb.parent = this;\r\n thumb.isMeasured = false;\r\n thumb.inert = true;\r\n thumb.draggable = true;\r\n thumb.clickable = true;\r\n thumb.hoverable = true;\r\n thumb.focusable = true;\r\n thumb.shouldClone = false;\r\n thumb.zIndex = 0;\r\n // TODO remove closures ?\r\n // Add events\r\n // Add cursor styles to thumb\r\n thumb.cursorOverStyle = MouseCursorStyle.grab;\r\n thumb.cursorDownStyle = MouseCursorStyle.grabbing;\r\n thumb.events.on(\"dragstart\", this.makeBusy, this, false);\r\n thumb.events.on(\"dragstop\", this.makeUnbusy, this, false);\r\n thumb.events.on(\"positionchanged\", this.handleThumbPosition, this, false);\r\n thumb.events.on(\"sizechanged\", this.handleThumbPosition, this, false);\r\n thumb.events.on(\"doublehit\", this.handleDoubleClick, this, false);\r\n // Add event for space and ENTER to toggle full zoom out and back\r\n // (same as doubleclick)\r\n this._disposers.push(getInteraction().body.events.on(\"keyup\", function (ev) {\r\n if (keyboard.isKey(ev.event, [\"space\", \"enter\"]) && _this.thumb.isFocused) {\r\n ev.event.preventDefault();\r\n _this.handleDoubleClick();\r\n }\r\n }));\r\n this._disposers.push(this._thumb);\r\n }\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n /**\r\n * Zooms-in and out the selection on double-click of the thumb.\r\n *\r\n * @ignore Exclude from docs\r\n */\r\n Scrollbar.prototype.handleDoubleClick = function () {\r\n this.makeBusy();\r\n var newStart = 0;\r\n var newEnd = 1;\r\n if (this.start != 0 || this.end != 1) {\r\n this._prevStart = this.start;\r\n this._prevEnd = this.end;\r\n }\r\n else {\r\n newStart = this._prevStart;\r\n newEnd = this._prevEnd;\r\n }\r\n var zoomAnimation = this.animate([{ property: \"__start\", to: newStart }, { property: \"__end\", to: newEnd }], this.animationDuration, this.animationEasing);\r\n if (zoomAnimation && !zoomAnimation.isFinished()) {\r\n zoomAnimation.events.on(\"animationended\", this.makeUnbusy, this, false);\r\n this._zoomAnimation = zoomAnimation;\r\n }\r\n else {\r\n this.makeUnbusy();\r\n }\r\n };\r\n /**\r\n * Updates positions of other elements when thumb is moved.\r\n *\r\n * @ignore Exclude from docs\r\n */\r\n Scrollbar.prototype.handleThumbPosition = function () {\r\n var thumb = this.thumb;\r\n if (this.orientation == \"horizontal\") {\r\n var innerWidth_2 = this.innerWidth;\r\n var w = thumb.innerWidth;\r\n var x = thumb.pixelX;\r\n this._start = x / innerWidth_2;\r\n this._end = (x + w) / innerWidth_2;\r\n this.updateThumb();\r\n }\r\n else {\r\n var innerHeight_2 = this.innerHeight;\r\n var h = thumb.innerHeight;\r\n var y = thumb.pixelY;\r\n if (y + h > innerHeight_2) {\r\n y = innerHeight_2 - h;\r\n thumb.y = y;\r\n }\r\n this._start = 1 - (y + h) / innerHeight_2;\r\n this._end = 1 - y / innerHeight_2;\r\n this.updateThumb();\r\n }\r\n };\r\n /**\r\n * Creates a background element for the scrollbar.\r\n *\r\n * @ignore Exclude from docs\r\n * @return Background\r\n */\r\n Scrollbar.prototype.createBackground = function () {\r\n return new RoundedRectangle();\r\n };\r\n Object.defineProperty(Scrollbar.prototype, \"hideGrips\", {\r\n /**\r\n * @return Show only on hover?\r\n */\r\n get: function () {\r\n return this._hideGrips;\r\n },\r\n /**\r\n * Use this property to set whether grips should be always visible (`false`),\r\n * or they should just appear on scrollbar hover (`true`).\r\n *\r\n * @param value Show only on hover?\r\n */\r\n set: function (value) {\r\n var _this = this;\r\n this._hideGrips = value;\r\n if (this._overDisposer) {\r\n this.removeDispose(this._overDisposer);\r\n }\r\n if (this._outDisposer) {\r\n this.removeDispose(this._outDisposer);\r\n }\r\n if (value) {\r\n this._overDisposer = this.events.on(\"over\", function () {\r\n _this.startGrip.show();\r\n _this.endGrip.show();\r\n }, undefined, false);\r\n this._outDisposer = this.events.on(\"out\", function () {\r\n _this.startGrip.hide();\r\n _this.endGrip.hide();\r\n }, undefined, false);\r\n this.startGrip.hide();\r\n this.endGrip.hide();\r\n }\r\n else {\r\n this.startGrip.show();\r\n this.endGrip.show();\r\n }\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n Object.defineProperty(Scrollbar.prototype, \"animationDuration\", {\r\n /**\r\n * @return Orientation\r\n */\r\n get: function () {\r\n return this.getPropertyValue(\"animationDuration\");\r\n },\r\n /**\r\n * Duration in milliseconds of scrollbar animation (happens when user clicks on a background of a scrollbar)\r\n * @default 0\r\n * @param value number\r\n */\r\n set: function (value) {\r\n this.setPropertyValue(\"animationDuration\", value);\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n Object.defineProperty(Scrollbar.prototype, \"animationEasing\", {\r\n /**\r\n * @return {Function}\r\n */\r\n get: function () {\r\n return this.getPropertyValue(\"animationEasing\");\r\n },\r\n /**\r\n * Animation easing function.\r\n * @todo: review description and default\r\n * @default $ease.cubicOut\r\n * @param value (value: number) => number\r\n */\r\n set: function (value) {\r\n this.setPropertyValue(\"animationEasing\", value);\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n /**\r\n * Adds easing functions to \"function\" fields.\r\n *\r\n * @param field Field name\r\n * @return Assign as function?\r\n */\r\n Scrollbar.prototype.asFunction = function (field) {\r\n return field == \"animationEasing\" || _super.prototype.asIs.call(this, field);\r\n };\r\n return Scrollbar;\r\n}(Container));\r\nexport { Scrollbar };\r\n/**\r\n * Register class in system, so that it can be instantiated using its name from\r\n * anywhere.\r\n *\r\n * @ignore\r\n */\r\nregistry.registeredClasses[\"Scrollbar\"] = Scrollbar;\r\n//# sourceMappingURL=Scrollbar.js.map","/**\r\n * Slice module.\r\n */\r\nimport { __extends } from \"tslib\";\r\n/**\r\n * ============================================================================\r\n * IMPORTS\r\n * ============================================================================\r\n * @hidden\r\n */\r\nimport { Container } from \"../Container\";\r\nimport { Sprite } from \"../Sprite\";\r\nimport { registry } from \"../Registry\";\r\nimport * as $math from \"../utils/Math\";\r\nimport * as $path from \"../rendering/Path\";\r\nimport * as $type from \"../utils/Type\";\r\nimport * as $utils from \"../utils/Utils\";\r\nimport { Percent } from \"../utils/Percent\";\r\nimport { RadialGradient } from \"../rendering/fills/RadialGradient\";\r\n/**\r\n * ============================================================================\r\n * MAIN CLASS\r\n * ============================================================================\r\n * @hidden\r\n */\r\n/**\r\n * Draws a wedged semi-circle - slice. Usually used for Pie/Donut charts.\r\n *\r\n * @see {@link ISliceEvents} for a list of available events\r\n * @see {@link ISliceAdapters} for a list of available Adapters\r\n */\r\nvar Slice = /** @class */ (function (_super) {\r\n __extends(Slice, _super);\r\n /**\r\n * Constructor\r\n */\r\n function Slice() {\r\n var _this = \r\n // Init\r\n _super.call(this) || this;\r\n _this.className = \"Slice\";\r\n // Set defaults\r\n _this.setPropertyValue(\"cornerRadius\", 0);\r\n _this.setPropertyValue(\"startAngle\", 0);\r\n _this.setPercentProperty(\"innerRadius\", 0);\r\n _this.setPercentProperty(\"radius\", 0);\r\n _this.setPropertyValue(\"arc\", 0);\r\n _this.setPropertyValue(\"shiftRadius\", 0);\r\n _this.strokeOpacity = 1;\r\n _this.setPropertyValue(\"layout\", \"none\");\r\n // Create a slice wedge element\r\n _this.slice = _this.createChild(Sprite);\r\n _this.slice.isMeasured = false;\r\n _this._disposers.push(_this.slice);\r\n //this.element.attr({ \"stroke-linejoin\": \"round\" });\r\n //this.element.attr({ \"stroke-linecap\": \"round\" });\r\n // Apply theme\r\n _this.applyTheme();\r\n return _this;\r\n }\r\n /**\r\n * Draws the element.\r\n *\r\n * @ignore Exclude from docs\r\n */\r\n Slice.prototype.draw = function () {\r\n _super.prototype.draw.call(this);\r\n var radiusY = this.radiusY;\r\n if (this.radius > 0 && radiusY == 0) {\r\n radiusY = 0.01;\r\n }\r\n this.slice.path = $path.arc(this.startAngle, this.arc, this.radius, this.pixelInnerRadius, radiusY, this.cornerRadius, this.innerCornerRadius);\r\n this.slice.invalidate();\r\n this.shiftRadius = this.shiftRadius;\r\n if (this.realFill instanceof RadialGradient) {\r\n this.updateGradient(this.realFill);\r\n }\r\n if (this.realStroke instanceof RadialGradient) {\r\n this.updateGradient(this.realStroke);\r\n }\r\n };\r\n Slice.prototype.updateGradient = function (gradient) {\r\n gradient.element.attr({ \"gradientUnits\": \"userSpaceOnUse\" });\r\n gradient.element.attr({ \"r\": this.radius });\r\n gradient.cx = 0;\r\n gradient.cy = 0;\r\n gradient.element.attr({ radius: this.radius });\r\n };\r\n Object.defineProperty(Slice.prototype, \"bbox\", {\r\n /**\r\n * Returns bounding box (square) for this element.\r\n *\r\n * @ignore Exclude from docs\r\n */\r\n get: function () {\r\n if (this.definedBBox) {\r\n return this.definedBBox;\r\n }\r\n if (this.isMeasured) {\r\n var innerRect = $math.getArcRect(this.startAngle, this.startAngle + this.arc, this.pixelInnerRadius);\r\n var outerRect = $math.getArcRect(this.startAngle, this.startAngle + this.arc, this.radius);\r\n return $math.getCommonRectangle([innerRect, outerRect]);\r\n }\r\n else {\r\n return { x: 0, y: 0, width: 0, height: 0 };\r\n }\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n Object.defineProperty(Slice.prototype, \"startAngle\", {\r\n /**\r\n * @return Angle (0-360)\r\n */\r\n get: function () {\r\n return this.getPropertyValue(\"startAngle\");\r\n },\r\n /**\r\n * The angle at which left edge of the slice is drawn. (0-360)\r\n *\r\n * 0 is to the right of the center.\r\n *\r\n * @param value Angle (0-360)\r\n */\r\n set: function (value) {\r\n this.setPropertyValue(\"startAngle\", $math.normalizeAngle(value), true);\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n Object.defineProperty(Slice.prototype, \"arc\", {\r\n /**\r\n * @return [description]\r\n */\r\n get: function () {\r\n return this.getPropertyValue(\"arc\");\r\n },\r\n /**\r\n * [arc description]\r\n *\r\n * @todo Description\r\n * @param value [description]\r\n */\r\n set: function (value) {\r\n if (!$type.isNumber(value)) {\r\n value = 0;\r\n }\r\n this.setPropertyValue(\"arc\", value, true);\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n Object.defineProperty(Slice.prototype, \"radius\", {\r\n /**\r\n * @return Radius (px)\r\n */\r\n get: function () {\r\n var radius = this.getPropertyValue(\"radius\");\r\n if (!$type.isNumber(radius)) {\r\n radius = 0;\r\n }\r\n return radius;\r\n },\r\n /**\r\n * Radius of the slice in pixels.\r\n *\r\n * @param value Radius (px)\r\n */\r\n set: function (value) {\r\n this.setPropertyValue(\"radius\", value, true);\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n Object.defineProperty(Slice.prototype, \"radiusY\", {\r\n /**\r\n * @return Vertical radius (0-1)\r\n */\r\n get: function () {\r\n var value = this.getPropertyValue(\"radiusY\");\r\n if (!$type.isNumber(value)) {\r\n value = this.radius;\r\n }\r\n return value;\r\n },\r\n /**\r\n * Vertical radius for creating skewed slices.\r\n *\r\n * This is relevant to `radius`, e.g. 0.5 will set vertical radius to half\r\n * the `radius`.\r\n *\r\n * @param value Vertical radius (0-1)\r\n */\r\n set: function (value) {\r\n this.setPropertyValue(\"radiusY\", value, true);\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n Object.defineProperty(Slice.prototype, \"innerRadius\", {\r\n /**\r\n * @return Radius (px or %)\r\n */\r\n get: function () {\r\n return this.getPropertyValue(\"innerRadius\");\r\n },\r\n /**\r\n * Inner radius of the slice for creating cut out (donut) slices.\r\n *\r\n * @default 0\r\n * @param value Radius (px or %)\r\n */\r\n set: function (value) {\r\n this.setPercentProperty(\"innerRadius\", value, true, false, 10, false);\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n Object.defineProperty(Slice.prototype, \"pixelInnerRadius\", {\r\n /**\r\n * @return Radius px\r\n */\r\n get: function () {\r\n return $utils.relativeToValue(this.innerRadius, this.radius);\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n Object.defineProperty(Slice.prototype, \"cornerRadius\", {\r\n /**\r\n * @return Radius (px)\r\n */\r\n get: function () {\r\n return this.getPropertyValue(\"cornerRadius\");\r\n },\r\n /**\r\n * Radius of slice's outer corners in pixels.\r\n *\r\n * @default 0\r\n * @param value Radius (px)\r\n */\r\n set: function (value) {\r\n this.setPropertyValue(\"cornerRadius\", value, true);\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n Object.defineProperty(Slice.prototype, \"innerCornerRadius\", {\r\n /**\r\n * @return Radius (px)\r\n */\r\n get: function () {\r\n return this.getPropertyValue(\"innerCornerRadius\");\r\n },\r\n /**\r\n * Radius of slice's inner corners in pixels.\r\n *\r\n * @default 0\r\n * @param value Radius (px)\r\n */\r\n set: function (value) {\r\n this.setPropertyValue(\"innerCornerRadius\", value, true);\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n Object.defineProperty(Slice.prototype, \"shiftRadius\", {\r\n /**\r\n * @return Radius shift\r\n */\r\n get: function () {\r\n return this.getPropertyValue(\"shiftRadius\");\r\n },\r\n /**\r\n * Indicates how far (relatively to center) a slice should be moved.\r\n *\r\n * The value is relative to the radius of the slice. Meaning 0 no shift,\r\n * 1 - slice shifted outside by whole of its radius.\r\n *\r\n * @param value Radius shift\r\n */\r\n set: function (value) {\r\n this.setPropertyValue(\"shiftRadius\", value);\r\n value = this.getPropertyValue(\"shiftRadius\");\r\n this.dx = value * this.radius * this.ix;\r\n this.dy = value * this.radiusY * this.iy;\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n Object.defineProperty(Slice.prototype, \"ix\", {\r\n /**\r\n * [ix description]\r\n *\r\n * @ignore Exclude from docs\r\n * @todo Description\r\n * @return [description]\r\n */\r\n get: function () {\r\n return $math.cos(this.middleAngle);\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n Object.defineProperty(Slice.prototype, \"iy\", {\r\n /**\r\n * [iy description]\r\n *\r\n * @ignore Exclude from docs\r\n * @todo Description\r\n * @return [description]\r\n */\r\n get: function () {\r\n return $math.sin(this.middleAngle);\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n Object.defineProperty(Slice.prototype, \"middleAngle\", {\r\n /**\r\n * An angle of the slice's middle.\r\n *\r\n * @ignore Exclude from docs\r\n * @return Angle\r\n */\r\n get: function () {\r\n return this.startAngle + this.arc / 2;\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n /**\r\n * X coordinate for the slice tooltip.\r\n *\r\n * @return X\r\n */\r\n Slice.prototype.getTooltipX = function () {\r\n var value = this.getPropertyValue(\"tooltipX\");\r\n if ($type.isNumber(value)) {\r\n return value;\r\n }\r\n var p = 0.5;\r\n if (value instanceof Percent) {\r\n p = value.value;\r\n }\r\n var innerRadius = $utils.relativeToValue(this.innerRadius, this.radius);\r\n return this.ix * (innerRadius + (this.radius - innerRadius) * p);\r\n };\r\n /**\r\n * Y coordinate for the slice tooltip.\r\n *\r\n * @return Y\r\n */\r\n Slice.prototype.getTooltipY = function () {\r\n var value = this.getPropertyValue(\"tooltipY\");\r\n if ($type.isNumber(value)) {\r\n return value;\r\n }\r\n var p = 0.5;\r\n if (value instanceof Percent) {\r\n p = value.value;\r\n }\r\n var innerRadius = $utils.relativeToValue(this.innerRadius, this.radius);\r\n return this.iy * (innerRadius + (this.radius - innerRadius) * p) + this.slice.dy;\r\n };\r\n return Slice;\r\n}(Container));\r\nexport { Slice };\r\n/**\r\n * Register class in system, so that it can be instantiated using its name from\r\n * anywhere.\r\n *\r\n * @ignore\r\n */\r\nregistry.registeredClasses[\"Slice\"] = Slice;\r\n//# sourceMappingURL=Slice.js.map","/**\r\n * Slider is a scrollbar with just one selection grip.\r\n */\r\nimport { __extends } from \"tslib\";\r\n/**\r\n * ============================================================================\r\n * IMPORTS\r\n * ============================================================================\r\n * @hidden\r\n */\r\nimport { Scrollbar } from \"../../core/elements/Scrollbar\";\r\nimport { registry } from \"../Registry\";\r\n/**\r\n * ============================================================================\r\n * MAIN CLASS\r\n * ============================================================================\r\n * @hidden\r\n */\r\n/**\r\n * Creates a slider - a version of scrollbar with just one grip.\r\n *\r\n * @see {@link ISliderEvents} for a list of available events\r\n * @see {@link ISliderAdapters} for a list of available Adapters\r\n */\r\nvar Slider = /** @class */ (function (_super) {\r\n __extends(Slider, _super);\r\n /**\r\n * Constructor\r\n */\r\n function Slider() {\r\n var _this = _super.call(this) || this;\r\n _this.className = \"Slider\";\r\n _this.thumb.opacity = 0;\r\n _this.thumb.interactionsEnabled = false;\r\n _this.endGrip.opacity = 0;\r\n _this.endGrip.interactionsEnabled = false;\r\n _this.startGrip.events.on(\"drag\", function () {\r\n _this.endGrip.x = _this.startGrip.x;\r\n _this.endGrip.y = _this.startGrip.y;\r\n });\r\n _this.applyTheme();\r\n return _this;\r\n }\r\n Object.defineProperty(Slider.prototype, \"__end\", {\r\n /**\r\n * @return [description]\r\n */\r\n get: function () {\r\n return this._start;\r\n },\r\n set: function (value) {\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n Object.defineProperty(Slider.prototype, \"end\", {\r\n /**\r\n * @return [description]\r\n */\r\n get: function () {\r\n return this._start;\r\n },\r\n /**\r\n * Relative position (0-1) of the end grip.\r\n *\r\n * @param position Position (0-1)\r\n */\r\n set: function (position) {\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n Object.defineProperty(Slider.prototype, \"start\", {\r\n /**\r\n * @return Position (0-1)\r\n */\r\n get: function () {\r\n return this._start;\r\n },\r\n /**\r\n * Relative position (0-1) of the start grip.\r\n *\r\n * @param position Position (0-1)\r\n */\r\n set: function (position) {\r\n if (!this._isBusy) {\r\n this.__start = position;\r\n }\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n return Slider;\r\n}(Scrollbar));\r\nexport { Slider };\r\n/**\r\n * Register class in system, so that it can be instantiated using its name from\r\n * anywhere.\r\n *\r\n * @ignore\r\n */\r\nregistry.registeredClasses[\"Slider\"] = Slider;\r\n//# sourceMappingURL=Slider.js.map","/**\r\n * Functionality for drawing simple SwitchButtons.\r\n */\r\nimport { __extends } from \"tslib\";\r\n/**\r\n * ============================================================================\r\n * IMPORTS\r\n * ============================================================================\r\n * @hidden\r\n */\r\nimport { Container } from \"../Container\";\r\nimport { Label } from \"./Label\";\r\nimport { Button } from \"../elements/Button\";\r\nimport { InterfaceColorSet } from \"../../core/utils/InterfaceColorSet\";\r\nimport { Circle } from \"../../core/elements/Circle\";\r\nimport { percent } from \"../../core/utils/Percent\";\r\nimport { registry } from \"../Registry\";\r\n/**\r\n * ============================================================================\r\n * MAIN CLASS\r\n * ============================================================================\r\n * @hidden\r\n */\r\n/**\r\n * SwitchButton class is capable of drawing a simple rectangular SwitchButton with\r\n * optionally rounded corners and an icon in it.\r\n *\r\n * @see {@link ISwitchButtonEvents} for a list of available events\r\n * @see {@link ISwitchButtonAdapters} for a list of available Adapters\r\n */\r\nvar SwitchButton = /** @class */ (function (_super) {\r\n __extends(SwitchButton, _super);\r\n /**\r\n * Constructor\r\n */\r\n function SwitchButton() {\r\n var _this = \r\n // Init\r\n _super.call(this) || this;\r\n _this.className = \"SwitchButton\";\r\n _this.tooltipY = 0;\r\n // Set defaults\r\n _this.layout = \"horizontal\";\r\n _this.contentAlign = \"center\";\r\n _this.contentValign = \"middle\";\r\n _this.padding(8, 16, 8, 16);\r\n _this.setStateOnChildren = true;\r\n _this.states.create(\"active\");\r\n var interfaceColors = new InterfaceColorSet();\r\n // Create the label element\r\n var leftLabel = new Label();\r\n leftLabel.fillOpacity = 0.3;\r\n var llas = leftLabel.states.create(\"active\");\r\n llas.properties.fillOpacity = 1;\r\n leftLabel.isActive = true;\r\n _this.leftLabel = leftLabel;\r\n var button = new Button();\r\n var circle = new Circle();\r\n button.contentValign = \"none\";\r\n button.padding(0, 0, 0, 0);\r\n circle.radius = 10;\r\n button.icon = circle;\r\n button.icon.valign = \"middle\";\r\n button.label = undefined;\r\n var p100 = percent(100);\r\n button.background.cornerRadius(p100, p100, p100, p100);\r\n button.width = circle.radius * 3.5;\r\n button.height = circle.radius * 2.1;\r\n button.marginLeft = 8;\r\n button.marginRight = 8;\r\n button.togglable = true;\r\n circle.dx = -circle.radius * 0.7;\r\n circle.fill = interfaceColors.getFor(\"primaryButton\");\r\n var hs = circle.states.create(\"hover\");\r\n hs.properties.fill = interfaceColors.getFor(\"primaryButtonHover\");\r\n var as = circle.states.create(\"active\");\r\n as.properties.fill = interfaceColors.getFor(\"primaryButtonActive\");\r\n as.properties.dx = circle.radius * 0.7;\r\n _this.switchButton = button;\r\n _this.events.on(\"toggled\", function () {\r\n _this.leftLabel.isActive = !_this.isActive;\r\n _this.rightLabel.isActive = _this.isActive;\r\n });\r\n // Create the label element\r\n var rightLabel = new Label();\r\n rightLabel.fillOpacity = 0.3;\r\n var rlas = rightLabel.states.create(\"active\");\r\n rlas.properties.fillOpacity = 1;\r\n _this.rightLabel = rightLabel;\r\n // Set up accessibility\r\n // A Button should be always focusable\r\n _this.role = \"button\";\r\n _this.focusable = true;\r\n rightLabel.valign = \"middle\";\r\n leftLabel.valign = \"middle\";\r\n button.valign = \"middle\";\r\n // Apply theme\r\n _this.applyTheme();\r\n return _this;\r\n }\r\n Object.defineProperty(SwitchButton.prototype, \"leftLabel\", {\r\n /**\r\n * @return Left label element\r\n */\r\n get: function () {\r\n return this._leftLabel;\r\n },\r\n /**\r\n * [[Label]] element to be used for left text.\r\n *\r\n * @param left label element\r\n */\r\n set: function (label) {\r\n if (this._leftLabel) {\r\n this.removeDispose(this._leftLabel);\r\n }\r\n this._leftLabel = label;\r\n if (label) {\r\n label.parent = this;\r\n label.interactionsEnabled = false;\r\n label.shouldClone = false;\r\n this._disposers.push(this._leftLabel);\r\n }\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n Object.defineProperty(SwitchButton.prototype, \"rightLabel\", {\r\n /**\r\n * @return Rigth label element\r\n */\r\n get: function () {\r\n return this._rightLabel;\r\n },\r\n /**\r\n * [[Label]] element to be used for left text.\r\n *\r\n * @param rigth label element\r\n */\r\n set: function (label) {\r\n if (this._rightLabel) {\r\n this.removeDispose(this._rightLabel);\r\n }\r\n this._rightLabel = label;\r\n if (label) {\r\n label.parent = this;\r\n label.interactionsEnabled = false;\r\n label.shouldClone = false;\r\n this._disposers.push(this._rightLabel);\r\n }\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n Object.defineProperty(SwitchButton.prototype, \"switch\", {\r\n /**\r\n * @ignore\r\n * @deprecated Use `switchButton` instead\r\n */\r\n get: function () {\r\n return this._switchButton;\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n Object.defineProperty(SwitchButton.prototype, \"switchButton\", {\r\n /**\r\n * @return Button\r\n */\r\n get: function () {\r\n return this._switchButton;\r\n },\r\n /**\r\n * A [[Button]] element for switch.\r\n *\r\n * @param Button\r\n */\r\n set: function (button) {\r\n if (this._switchButton) {\r\n this.removeDispose(this._switchButton);\r\n }\r\n this._switchButton = button;\r\n if (button) {\r\n button.parent = this;\r\n button.shouldClone = false;\r\n this._disposers.push(this._switchButton);\r\n }\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n /**\r\n * Copies properties and other attributes.\r\n *\r\n * @param source Source\r\n */\r\n SwitchButton.prototype.copyFrom = function (source) {\r\n _super.prototype.copyFrom.call(this, source);\r\n if (source.leftLabel) {\r\n this.leftLabel.copyFrom(source.leftLabel);\r\n }\r\n if (source.rightLabel) {\r\n this.rightLabel.copyFrom(source.rightLabel);\r\n }\r\n if (source.switchButton) {\r\n this.switchButton.copyFrom(source.switchButton);\r\n }\r\n };\r\n return SwitchButton;\r\n}(Container));\r\nexport { SwitchButton };\r\n/**\r\n * Register class in system, so that it can be instantiated using its name from\r\n * anywhere.\r\n *\r\n * @ignore\r\n */\r\nregistry.registeredClasses[\"SwitchButton\"] = SwitchButton;\r\n//# sourceMappingURL=SwitchButton.js.map","/**\r\n * A module that defines Text element used to indicate links.\r\n */\r\nimport { __extends } from \"tslib\";\r\n/**\r\n * ============================================================================\r\n * IMPORTS\r\n * ============================================================================\r\n * @hidden\r\n */\r\nimport { Label } from \"../../core/elements/Label\";\r\nimport { MouseCursorStyle } from \"../../core/interaction/Mouse\";\r\nimport { InterfaceColorSet } from \"../../core/utils/InterfaceColorSet\";\r\nimport { registry } from \"../Registry\";\r\n/**\r\n * ============================================================================\r\n * MAIN CLASS\r\n * ============================================================================\r\n * @hidden\r\n */\r\n/**\r\n * Creates a text element with a link.\r\n *\r\n * @see {@link ITextLinkEvents} for a list of available events\r\n * @see {@link ITextLinkAdapters} for a list of available Adapters\r\n */\r\nvar TextLink = /** @class */ (function (_super) {\r\n __extends(TextLink, _super);\r\n /**\r\n * Constructor\r\n */\r\n function TextLink() {\r\n var _this = _super.call(this) || this;\r\n _this.className = \"TextLink\";\r\n _this.selectable = true;\r\n var interfaceColors = new InterfaceColorSet();\r\n _this.fill = interfaceColors.getFor(\"primaryButton\").brighten(0.3);\r\n var hoverState = _this.states.create(\"hover\");\r\n hoverState.properties.fill = interfaceColors.getFor(\"primaryButtonHover\").brighten(0.3);\r\n var downState = _this.states.create(\"down\");\r\n downState.properties.fill = interfaceColors.getFor(\"primaryButtonDown\").brighten(0.3);\r\n _this.cursorOverStyle = MouseCursorStyle.pointer;\r\n _this.applyTheme();\r\n return _this;\r\n }\r\n return TextLink;\r\n}(Label));\r\nexport { TextLink };\r\n/**\r\n * Register class in system, so that it can be instantiated using its name from\r\n * anywhere.\r\n *\r\n * @ignore\r\n */\r\nregistry.registeredClasses[\"TextLink\"] = TextLink;\r\n//# sourceMappingURL=TextLink.js.map","/**\r\n * Provides functionality used to creating and showing tooltips (balloons).\r\n */\r\nimport { __extends } from \"tslib\";\r\n/**\r\n * ============================================================================\r\n * IMPORTS\r\n * ============================================================================\r\n * @hidden\r\n */\r\nimport { Container } from \"../Container\";\r\nimport { registry } from \"../../core/Registry\";\r\nimport { PointedRectangle } from \"./PointedRectangle\";\r\nimport { Label } from \"../elements/Label\";\r\nimport { Animation } from \"../utils/Animation\";\r\nimport { color } from \"../utils/Color\";\r\nimport { DropShadowFilter } from \"../rendering/filters/DropShadowFilter\";\r\nimport * as $math from \"../utils/Math\";\r\nimport * as $ease from \"../utils/Ease\";\r\nimport * as $utils from \"../utils/Utils\";\r\n/**\r\n * ============================================================================\r\n * MAIN CLASS\r\n * ============================================================================\r\n * @hidden\r\n */\r\n/**\r\n * Tooltip displays text and/or multimedia information in a balloon over chart\r\n * area.\r\n * @see {@link ITooltipEvents} for a list of available events\r\n * @see {@link ITooltipAdapters} for a list of available Adapters\r\n */\r\nvar Tooltip = /** @class */ (function (_super) {\r\n __extends(Tooltip, _super);\r\n /**\r\n * Constructor\r\n */\r\n function Tooltip() {\r\n var _this = \r\n // Init\r\n _super.call(this) || this;\r\n /**\r\n * Holds numeric boundary values. Calculated from the `boundingContainer`.\r\n * @ignore\r\n */\r\n _this._boundingRect = { x: -40000, y: -40000, width: 80000, height: 80000 };\r\n /**\r\n * Coordinates tooltip's pointer (stem) should point to.\r\n */\r\n _this._pointTo = { x: 0, y: 0 };\r\n /**\r\n * If set to `true` the pointer/stem of the Tooltip will not go outside\r\n * Tooltip's width or height depending on pointer's orientation.\r\n *\r\n * @default false\r\n */\r\n _this.fitPointerToBounds = false;\r\n /**\r\n * If `tooltipOrientation` is vertical, it can be drawn below or above point\r\n * We need to know this when solving overlapping.\r\n */\r\n _this._verticalOrientation = \"up\";\r\n /**\r\n * @ignore\r\n */\r\n _this.fixDoc = true;\r\n _this.className = \"Tooltip\";\r\n _this.isMeasured = false;\r\n _this.getFillFromObject = true;\r\n _this.margin(5, 5, 5, 5);\r\n _this.defaultState.transitionDuration = 1;\r\n _this.hiddenState.transitionDuration = 1;\r\n // Create chrome/background\r\n var background = _this.background;\r\n background.interactionsEnabled = false;\r\n background.fillOpacity = 0.9;\r\n background.strokeWidth = 1;\r\n background.strokeOpacity = 1;\r\n background.stroke = color(\"#ffffff\");\r\n background.cornerRadius = 3;\r\n background.pointerLength = 6;\r\n background.pointerBaseWidth = 10;\r\n var dropShadow = new DropShadowFilter();\r\n dropShadow.dy = 1;\r\n dropShadow.dx = 1;\r\n dropShadow.opacity = 0.5;\r\n background.filters.push(dropShadow);\r\n _this.autoTextColor = true;\r\n // Create text element\r\n var label = _this.createChild(Label);\r\n label.shouldClone = false;\r\n _this.label = label;\r\n label.padding(7, 12, 4, 12);\r\n label.interactionsEnabled = false;\r\n label.horizontalCenter = \"middle\";\r\n label.fill = color(\"#ffffff\");\r\n _this._disposers.push(label);\r\n _this.label.events.on(\"sizechanged\", _this.drawBackground, _this);\r\n _this.label.zIndex = 1; // @todo remove this line when bg sorting is solved\r\n // Set defaults\r\n _this.pointerOrientation = \"vertical\";\r\n _this.animationDuration = 0;\r\n _this.animationEasing = $ease.cubicOut;\r\n _this.setPropertyValue(\"showInViewport\", false);\r\n // Set accessibility options\r\n _this.role = \"tooltip\";\r\n _this.visible = false;\r\n _this.opacity = 0;\r\n _this.x = 0;\r\n _this.y = 0;\r\n _this.events.on(\"visibilitychanged\", _this.handleVisibility, _this);\r\n // Apply theme\r\n _this.applyTheme();\r\n return _this;\r\n }\r\n Tooltip.prototype.handleVisibility = function () {\r\n if (this.visible) {\r\n this.label.invalidate();\r\n }\r\n };\r\n Object.defineProperty(Tooltip.prototype, \"getStrokeFromObject\", {\r\n /**\r\n * Specifies if tooltip background should get stroke color from the sprite it is pointing to.\r\n *\r\n * @return {boolean}\r\n * @default false\r\n */\r\n get: function () {\r\n return this.getPropertyValue(\"getStrokeFromObject\");\r\n },\r\n /**\r\n * Specifies if tooltip background should get stroke color from the sprite it is pointing to.\r\n *\r\n * @param value boolean\r\n */\r\n set: function (value) {\r\n this.setPropertyValue(\"getStrokeFromObject\", value, true);\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n Object.defineProperty(Tooltip.prototype, \"autoTextColor\", {\r\n /**\r\n * @return {boolean}\r\n */\r\n get: function () {\r\n return this.getPropertyValue(\"autoTextColor\");\r\n },\r\n /**\r\n * Specifies if text color should be chosen automatically for a better\r\n * readability.\r\n *\r\n * IMPORTANT: this feature is generally ignored, if `getFillFromObject = false`.\r\n *\r\n * If inheriting of `fill` color from object tooltip is displayed for is\r\n * disabled, this feature will not work. If you are explicitly setting a\r\n * color for tooltip background, you may set a color for its label as well\r\n * using `tooltip.label.fill` property.\r\n *\r\n *\r\n * @param value boolean\r\n */\r\n set: function (value) {\r\n this.setPropertyValue(\"autoTextColor\", value, true);\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n Object.defineProperty(Tooltip.prototype, \"keepTargetHover\", {\r\n /**\r\n * @return Keep target hovered?\r\n */\r\n get: function () {\r\n return this.getPropertyValue(\"keepTargetHover\");\r\n },\r\n /**\r\n * If this tooltip is displayed on hover on some other object, keep that\r\n * element hovered if hovering on the tooltip.\r\n *\r\n * @default false\r\n * @since 4.1.13\r\n * @param value Keep target hovered?\r\n */\r\n set: function (value) {\r\n var _this = this;\r\n if (this.setPropertyValue(\"keepTargetHover\", value, true)) {\r\n if (value) {\r\n this.hoverable = true;\r\n this.background.interactionsEnabled = true;\r\n this._disposers.push(this.events.on(\"over\", function (ev) {\r\n if (_this.targetSprite && _this.targetSprite.hoverable) {\r\n _this.targetSprite.isHover = true;\r\n }\r\n }));\r\n this._disposers.push(this.events.on(\"out\", function (ev) {\r\n if (_this.targetSprite && _this.targetSprite.hoverable) {\r\n //this.hideTooltip();\r\n //this.targetSprite.handleOut();\r\n _this.targetSprite.isHover = false;\r\n }\r\n }));\r\n }\r\n }\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n Object.defineProperty(Tooltip.prototype, \"showInViewport\", {\r\n /**\r\n * @return Force showing tooltip?\r\n */\r\n get: function () {\r\n return this.getPropertyValue(\"showInViewport\");\r\n },\r\n /**\r\n * Normally, a tooltip will hide itself if it is pointing to a coordinate\r\n * that is outside viewport.\r\n *\r\n * Setting this setting to `true` will override that and make tooltip\r\n * appear next to the viewport edge closest to the target point.\r\n *\r\n * @default false\r\n * @since 4.5.7\r\n * @param value Force showing tooltip?\r\n */\r\n set: function (value) {\r\n this.setPropertyValue(\"showInViewport\", value);\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n Object.defineProperty(Tooltip.prototype, \"getFillFromObject\", {\r\n /**\r\n * Specifies if tooltip background should get fill color from the sprite it is pointing to.\r\n *\r\n * @return {boolean}\r\n * @default true\r\n */\r\n get: function () {\r\n return this.getPropertyValue(\"getFillFromObject\");\r\n },\r\n /**\r\n * @param value boolean\r\n */\r\n set: function (value) {\r\n this.setPropertyValue(\"getFillFromObject\", value, true);\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n /**\r\n * Creates and returns a background element.\r\n *\r\n * @ignore Exclude from docs\r\n * @return Background\r\n */\r\n Tooltip.prototype.createBackground = function () {\r\n return new PointedRectangle();\r\n };\r\n Object.defineProperty(Tooltip.prototype, \"pointerOrientation\", {\r\n /**\r\n * @return Orientation\r\n */\r\n get: function () {\r\n return this.getPropertyValue(\"pointerOrientation\");\r\n },\r\n /**\r\n * Pointer orientation: `\"horizontal\"`, `\"vertical\"`, `\"up\"`, `\"down\"`,\r\n * `\"right\"`, or `\"left\"`.\r\n *\r\n * Options`\"horizontal\"` or `\"vertical\"` are location-aware, meaning they\r\n * will change position of the Tooltip based on the target point's position\r\n * in relation to chart center.\r\n *\r\n * Options `\"up\"`, `\"down\"`, `\"right\"`, `\"left\"` are static and will point\r\n * in the specified direction regardless of the position, even if that means\r\n * going out of chart/screen bounds.\r\n *\r\n * IMPORTANT: in some situations, like having multiple tooltips stacked for\r\n * multiple series, the `\"up\"` and `\"down\"` values might be ignored in order\r\n * to make tooltip overlap algorithm work.\r\n *\r\n * @default \"vertical\"\r\n * @param value Orientation\r\n */\r\n set: function (value) {\r\n this.setPropertyValue(\"pointerOrientation\", value, true);\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n Object.defineProperty(Tooltip.prototype, \"animationDuration\", {\r\n /**\r\n * @return Orientation\r\n */\r\n get: function () {\r\n return this.getPropertyValue(\"animationDuration\");\r\n },\r\n /**\r\n * Duration in milliseconds for the animation to take place when the tooltip\r\n * is moving from one place to another.\r\n *\r\n * @default 0\r\n * @param value number\r\n */\r\n set: function (value) {\r\n this.setPropertyValue(\"animationDuration\", value);\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n Object.defineProperty(Tooltip.prototype, \"animationEasing\", {\r\n /**\r\n * @return {Function}\r\n */\r\n get: function () {\r\n return this.getPropertyValue(\"animationEasing\");\r\n },\r\n /**\r\n * Tooltip animation (moving from one place to another) easing function.\r\n *\r\n * @default $ease.cubicOut\r\n * @param value (value: number) => number\r\n */\r\n set: function (value) {\r\n this.setPropertyValue(\"animationEasing\", value);\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n Object.defineProperty(Tooltip.prototype, \"html\", {\r\n /**\r\n * @return HTML content\r\n */\r\n get: function () {\r\n return this.label.html;\r\n },\r\n /**\r\n * HTML content for the Tooltip.\r\n *\r\n * Provided value will be used as is, without applying any further\r\n * formatting to it.\r\n *\r\n * @param value HTML content\r\n */\r\n set: function (value) {\r\n if (this.label.html != value) {\r\n this.label.html = value;\r\n this.invalidate();\r\n }\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n Object.defineProperty(Tooltip.prototype, \"text\", {\r\n /**\r\n * @return SVG text\r\n */\r\n get: function () {\r\n return this.label.text;\r\n },\r\n /**\r\n * SVG text content for the Tooltip.\r\n *\r\n * Text can have a number of formatting options supported by\r\n * [[TextFormatter]].\r\n *\r\n * @param value SVG text\r\n */\r\n set: function (value) {\r\n if (this.label.text != value) {\r\n this.label.text = value;\r\n this.invalidate();\r\n }\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n /**\r\n * Creates the Tooltip.\r\n *\r\n * @ignore Exclude from docs\r\n */\r\n Tooltip.prototype.draw = function () {\r\n _super.prototype.draw.call(this);\r\n var label = this.label;\r\n if (label.invalid) {\r\n label.validate();\r\n }\r\n var x = this._pointTo.x;\r\n var y = this._pointTo.y;\r\n var boundingRect = this._boundingRect;\r\n var textW = label.measuredWidth;\r\n var textH = label.measuredHeight;\r\n var pointerLength = this.background.pointerLength;\r\n var textX;\r\n var textY;\r\n if (this.ignoreBounds) {\r\n boundingRect = undefined;\r\n }\r\n // try to handle if text is wider than br\r\n if (boundingRect && this.fixDoc && textW > boundingRect.width) {\r\n // TODO maybe this isn't needed ?\r\n $utils.spritePointToDocument({ x: boundingRect.x, y: boundingRect.y }, this.parent);\r\n var p1 = $utils.spritePointToDocument({ x: boundingRect.x + boundingRect.width, y: boundingRect.y + boundingRect.height }, this.parent);\r\n var documentWidth = document.body.offsetWidth;\r\n // TODO maybe this isn't needed ?\r\n $utils.used(document.body.offsetHeight);\r\n if (p1.x > documentWidth / 2) {\r\n boundingRect.x = boundingRect.width - textW;\r\n }\r\n else {\r\n boundingRect.width = boundingRect.x + textW;\r\n }\r\n }\r\n var pointerOrientation = this.pointerOrientation;\r\n // horizontal\r\n if (pointerOrientation == \"horizontal\" || pointerOrientation == \"left\" || pointerOrientation == \"right\") {\r\n textY = -textH / 2;\r\n if (pointerOrientation == \"horizontal\") {\r\n if (boundingRect && x > boundingRect.x + boundingRect.width / 2) {\r\n textX = -textW / 2 - pointerLength;\r\n }\r\n else {\r\n textX = textW / 2 + pointerLength;\r\n }\r\n }\r\n else if (pointerOrientation == \"left\") {\r\n textX = textW / 2 + pointerLength;\r\n }\r\n else {\r\n textX = -textW / 2 - pointerLength;\r\n }\r\n }\r\n // vertical pointer\r\n else {\r\n if (boundingRect) {\r\n textX = $math.fitToRange(0, boundingRect.x - x + textW / 2, boundingRect.x - x + boundingRect.width - textW / 2);\r\n }\r\n if (pointerOrientation == \"vertical\") {\r\n if (boundingRect && y > boundingRect.y + textH + pointerLength) {\r\n textY = -textH - pointerLength;\r\n this._verticalOrientation = \"up\";\r\n }\r\n else {\r\n textY = pointerLength;\r\n this._verticalOrientation = \"down\";\r\n }\r\n }\r\n else if (pointerOrientation == \"down\") {\r\n textY = -textH - pointerLength;\r\n this._verticalOrientation = \"up\";\r\n }\r\n else {\r\n textY = pointerLength;\r\n this._verticalOrientation = \"down\";\r\n }\r\n }\r\n if (boundingRect) {\r\n textY = $math.fitToRange(textY, boundingRect.y - y, boundingRect.y + boundingRect.height - textH - y);\r\n }\r\n label.x = textX;\r\n label.y = textY;\r\n this.drawBackground();\r\n };\r\n /**\r\n * Overrides functionality from the superclass.\r\n *\r\n * @ignore Exclude from docs\r\n */\r\n Tooltip.prototype.updateBackground = function () {\r\n this.group.addToBack(this.background.group);\r\n };\r\n /**\r\n * Draws Tooltip background (chrome, background and pointer/stem).\r\n *\r\n * @ignore Exclude from docs\r\n */\r\n Tooltip.prototype.drawBackground = function () {\r\n var label = this.label;\r\n var background = this.background;\r\n var textWidth = label.measuredWidth;\r\n var textHeight = label.measuredHeight;\r\n var boundingRect = this._boundingRect;\r\n var bgWidth = textWidth;\r\n var bgX = label.pixelX - textWidth / 2;\r\n var bgHeight = textHeight;\r\n var bgY = label.pixelY;\r\n var x = this._pointTo.x;\r\n var y = this._pointTo.y;\r\n var boundX1 = boundingRect.x - x;\r\n var boundX2 = boundX1 + boundingRect.width;\r\n var boundY1 = boundingRect.y - y;\r\n var boundY2 = boundY1 + boundingRect.height;\r\n background.x = bgX;\r\n background.y = bgY;\r\n background.width = bgWidth;\r\n background.height = bgHeight;\r\n if (this.fitPointerToBounds) {\r\n background.pointerX = $math.fitToRange(-background.x, boundX1 - background.x, boundX2 - background.x);\r\n background.pointerY = $math.fitToRange(-background.y, boundY1 - background.y, boundY2 - background.y);\r\n }\r\n else {\r\n background.pointerX = -background.x;\r\n background.pointerY = -background.y;\r\n }\r\n background.validate();\r\n };\r\n /**\r\n *\r\n */\r\n Tooltip.prototype.delayedPointTo = function (point, instantly) {\r\n var _this = this;\r\n if (this._pointToDisposer) {\r\n this._pointToDisposer.dispose();\r\n }\r\n this._pointToDisposer = registry.events.once(\"exitframe\", function () {\r\n _this.pointTo(point, instantly);\r\n });\r\n this.addDisposer(this._pointToDisposer);\r\n };\r\n /**\r\n * Set nes tooltip's anchor point and moves whole tooltip.\r\n *\r\n * @param x X coordinate\r\n * @param y Y coordinate\r\n */\r\n Tooltip.prototype.pointTo = function (point, instantly) {\r\n if (this._pointTo.x != point.x || this._pointTo.y != point.y) {\r\n this._pointTo = point;\r\n this.invalidate();\r\n // this helps to avoid strange animation from nowhere on initial show or when balloon was hidden already\r\n if (!this.visible || instantly) {\r\n this.moveTo(this._pointTo);\r\n if (this._animation) {\r\n this._animation.kill();\r\n }\r\n }\r\n else {\r\n // helps to avoid flicker on top/left corner\r\n if (this.pixelX == 0 && this.pixelY == 0) {\r\n this.moveTo(this._pointTo);\r\n }\r\n else {\r\n if (this._animation) {\r\n this._animation.kill();\r\n }\r\n this._animation = new Animation(this, [{ property: \"x\", to: point.x, from: this.pixelX }, { property: \"y\", to: point.y, from: this.pixelY }], this.animationDuration, this.animationEasing).start();\r\n }\r\n }\r\n }\r\n };\r\n /**\r\n * Sets numeric boundaries Tooltip needs to obey (so it does not go outside\r\n * specific area).\r\n *\r\n * @ignore Exclude from docs\r\n * @param rectangle Boundary rectangle\r\n */\r\n Tooltip.prototype.setBounds = function (rectangle) {\r\n var oldRect = this._boundingRect;\r\n if (oldRect.x != rectangle.x || oldRect.y != rectangle.y || oldRect.width != rectangle.width || oldRect.height != rectangle.height) {\r\n this._boundingRect = rectangle;\r\n this.invalidate();\r\n }\r\n };\r\n Object.defineProperty(Tooltip.prototype, \"boundingContainer\", {\r\n /**\r\n * Sets a [[Container]] instance to be used when calculating numeric\r\n * boundaries for the Tooltip.\r\n *\r\n * @ignore Exclude from docs\r\n * @param container Boundary container\r\n */\r\n set: function (container) {\r\n this._boundingContainer = container;\r\n // TODO remove closures ?\r\n container.events.on(\"sizechanged\", this.updateBounds, this);\r\n container.events.on(\"positionchanged\", this.updateBounds, this);\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n /**\r\n * Updates numeric boundaries for the Tooltip, based on the\r\n * `boundingCountrainer`.\r\n */\r\n Tooltip.prototype.updateBounds = function () {\r\n var boundingContainer = this._boundingContainer;\r\n // to global\r\n var rect = $utils.spriteRectToSvg({\r\n x: boundingContainer.pixelX,\r\n y: boundingContainer.pixelY,\r\n width: boundingContainer.maxWidth,\r\n height: boundingContainer.maxHeight\r\n }, boundingContainer);\r\n this.setBounds(rect);\r\n };\r\n Object.defineProperty(Tooltip.prototype, \"ignoreBounds\", {\r\n /**\r\n * @return Ignore chart bounds?\r\n */\r\n get: function () {\r\n return this.getPropertyValue(\"ignoreBounds\");\r\n },\r\n /**\r\n * Normally, a tooltip's position will be adjusted so it always fits into\r\n * chart's coundaries.\r\n *\r\n * Setting this to `false` will disable such checks and will allow tooltip\r\n * to \"bleed over\" the edge of the chart.\r\n *\r\n * @default false\r\n * @since 4.10.8\r\n * @param value Ignore chart bounds?\r\n */\r\n set: function (value) {\r\n this.setPropertyValue(\"ignoreBounds\", value);\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n Object.defineProperty(Tooltip.prototype, \"verticalOrientation\", {\r\n /**\r\n * If tooltipOrientation is vertical, it can be drawn below or above point.\r\n * We need to know this when solving overlapping.\r\n *\r\n * @ignore Exclude from docs\r\n * @return \"up\" | \"down\"\r\n */\r\n get: function () {\r\n return this._verticalOrientation;\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n Object.defineProperty(Tooltip.prototype, \"tooltip\", {\r\n /**\r\n * To avoid stackoverflow\r\n * @ignore\r\n */\r\n get: function () {\r\n return undefined;\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n /**\r\n * Copies properties and other attributes.\r\n *\r\n * @param source Source\r\n */\r\n Tooltip.prototype.copyFrom = function (source) {\r\n _super.prototype.copyFrom.call(this, source);\r\n this.label.copyFrom(source.label);\r\n if (source._boundingRect) {\r\n this._boundingRect = source._boundingRect;\r\n }\r\n };\r\n /**\r\n * Adds easing functions to \"function\" fields.\r\n *\r\n * @param field Field name\r\n * @return Assign as function?\r\n */\r\n Tooltip.prototype.asFunction = function (field) {\r\n return field == \"animationEasing\" || _super.prototype.asIs.call(this, field);\r\n };\r\n return Tooltip;\r\n}(Container));\r\nexport { Tooltip };\r\n/**\r\n * Register class in system, so that it can be instantiated using its name from\r\n * anywhere.\r\n *\r\n * @ignore\r\n */\r\nregistry.registeredClasses[\"Tooltip\"] = Tooltip;\r\n//# sourceMappingURL=Tooltip.js.map","/**\r\n * Functionality for drawing a trapezoid.\r\n */\r\nimport { __extends } from \"tslib\";\r\n/**\r\n * ============================================================================\r\n * IMPORTS\r\n * ============================================================================\r\n * @hidden\r\n */\r\nimport { Sprite } from \"../Sprite\";\r\nimport { percent } from \"../../core/utils/Percent\";\r\nimport { registry } from \"../Registry\";\r\nimport * as $utils from \"../utils/Utils\";\r\nimport * as $type from \"../utils/Type\";\r\nimport * as $path from \"../rendering/Path\";\r\n/**\r\n * ============================================================================\r\n * MAIN CLASS\r\n * ============================================================================\r\n * @hidden\r\n */\r\n/**\r\n * Used to draw a Trapezoid.\r\n *\r\n * @see {@link ITrapezoidEvents} for a list of available events\r\n * @see {@link ITrapezoidAdapters} for a list of available Adapters\r\n */\r\nvar Trapezoid = /** @class */ (function (_super) {\r\n __extends(Trapezoid, _super);\r\n /**\r\n * Constructor\r\n */\r\n function Trapezoid() {\r\n var _this = _super.call(this) || this;\r\n _this.className = \"Trapezoid\";\r\n _this.element = _this.paper.add(\"path\");\r\n _this.topSide = percent(100);\r\n _this.bottomSide = percent(100);\r\n _this.leftSide = percent(100);\r\n _this.rightSide = percent(100);\r\n _this.isMeasured = false; // todo: add measureElement\r\n _this.applyTheme();\r\n return _this;\r\n }\r\n /**\r\n * Draws the element.\r\n *\r\n * @ignore Exclude from docs\r\n */\r\n Trapezoid.prototype.draw = function () {\r\n _super.prototype.draw.call(this);\r\n var w = this.pixelWidth;\r\n var h = this.pixelHeight;\r\n var ts = $utils.relativeToValue(this.topSide, w);\r\n var bs = $utils.relativeToValue(this.bottomSide, w);\r\n var ls = $utils.relativeToValue(this.leftSide, h);\r\n var rs = $utils.relativeToValue(this.rightSide, h);\r\n // 1----2\r\n // | |\r\n // 4----3\r\n var x0 = (w - ts) / 2;\r\n var y0 = (h - ls) / 2;\r\n var x1 = w - (w - ts) / 2;\r\n var y1 = (h - rs) / 2;\r\n var x2 = w - (w - bs) / 2;\r\n var y2 = h - (h - rs) / 2;\r\n var x3 = (w - bs) / 2;\r\n var y3 = h - (h - ls) / 2;\r\n var mt = \"\";\r\n var mr = \"\";\r\n var mb = \"\";\r\n var ml = \"\";\r\n if ($type.hasValue(this.horizontalNeck)) {\r\n var hn = this.horizontalNeck.value;\r\n mt = $path.lineTo({ x: w * hn, y: Math.max(y0, y1) });\r\n mb = $path.lineTo({ x: w * hn, y: Math.min(y2, y3) });\r\n }\r\n if ($type.hasValue(this.verticalNeck)) {\r\n var vn = this.verticalNeck.value;\r\n mr = $path.lineTo({ x: Math.min(x1, x2), y: h * vn });\r\n ml = $path.lineTo({ x: Math.max(x0, x3), y: h * vn });\r\n }\r\n var path = $path.moveTo({ x: x0, y: y0 })\r\n + mt\r\n + $path.lineTo({ x: x1, y: y1 })\r\n + mr\r\n + $path.lineTo({ x: x2, y: y2 })\r\n + mb\r\n + $path.lineTo({ x: x3, y: y3 })\r\n + ml;\r\n this.path = path;\r\n };\r\n Object.defineProperty(Trapezoid.prototype, \"topSide\", {\r\n /**\r\n * @return Width\r\n */\r\n get: function () {\r\n return this.getPropertyValue(\"topSide\");\r\n },\r\n /**\r\n * Wdith of the top side. Absolute (px) or relative ([[Percent]]).\r\n *\r\n * @default Percent(100)\r\n * @param value Width\r\n */\r\n set: function (value) {\r\n this.setPercentProperty(\"topSide\", value, true, false, 10, false);\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n Object.defineProperty(Trapezoid.prototype, \"bottomSide\", {\r\n /**\r\n * @return Width\r\n */\r\n get: function () {\r\n return this.getPropertyValue(\"bottomSide\");\r\n },\r\n /**\r\n * Wdith of the bottom side. Absolute (px) or relative ([[Percent]]).\r\n *\r\n * @default Percent(100)\r\n * @param value Width\r\n */\r\n set: function (value) {\r\n this.setPercentProperty(\"bottomSide\", value, true, false, 10, false);\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n Object.defineProperty(Trapezoid.prototype, \"leftSide\", {\r\n /**\r\n * @return Height\r\n */\r\n get: function () {\r\n return this.getPropertyValue(\"leftSide\");\r\n },\r\n /**\r\n * Height of the left side. Absolute (px) or relative ([[Percent]]).\r\n *\r\n * @default Percent(100)\r\n * @param value Height\r\n */\r\n set: function (value) {\r\n this.setPercentProperty(\"leftSide\", value, true, false, 10, false);\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n Object.defineProperty(Trapezoid.prototype, \"rightSide\", {\r\n /**\r\n * @return Height\r\n */\r\n get: function () {\r\n return this.getPropertyValue(\"rightSide\");\r\n },\r\n /**\r\n * Height of the right side. Absolute (px) or relative ([[Percent]]).\r\n *\r\n * @default Percent(100)\r\n * @param value Height\r\n */\r\n set: function (value) {\r\n this.setPercentProperty(\"rightSide\", value, true, false, 10, false);\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n Object.defineProperty(Trapezoid.prototype, \"horizontalNeck\", {\r\n /**\r\n * @return Horizontal neck position\r\n */\r\n get: function () {\r\n return this.getPropertyValue(\"horizontalNeck\");\r\n },\r\n /**\r\n * A relative vertical position of the \"neck\". If the top and bottom sides\r\n * are of different width, and `horizontalNeck` is set, a choke point\r\n * will be created at that position, creating a funnel shape.\r\n *\r\n * @param value Horizontal neck position\r\n */\r\n set: function (value) {\r\n this.setPropertyValue(\"horizontalNeck\", value, true);\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n Object.defineProperty(Trapezoid.prototype, \"verticalNeck\", {\r\n /**\r\n * @return Vertical neck position\r\n */\r\n get: function () {\r\n return this.getPropertyValue(\"verticalNeck\");\r\n },\r\n /**\r\n * A relative horizontal position of the \"neck\". If the left and right sides\r\n * are of different height, and `verticalNeck` is set, a choke point\r\n * will be created at that position, creating a funnel shape.\r\n *\r\n * @param value Vertical neck position\r\n */\r\n set: function (value) {\r\n this.setPropertyValue(\"verticalNeck\", value, true);\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n return Trapezoid;\r\n}(Sprite));\r\nexport { Trapezoid };\r\n/**\r\n * Register class in system, so that it can be instantiated using its name from\r\n * anywhere.\r\n *\r\n * @ignore\r\n */\r\nregistry.registeredClasses[\"Trapezoid\"] = Trapezoid;\r\n//# sourceMappingURL=Trapezoid.js.map","/**\r\n * Functionality for drawing triangles.\r\n */\r\nimport { __extends } from \"tslib\";\r\n/**\r\n * ============================================================================\r\n * IMPORTS\r\n * ============================================================================\r\n * @hidden\r\n */\r\nimport { Sprite } from \"../Sprite\";\r\nimport { registry } from \"../Registry\";\r\nimport * as $path from \"../rendering/Path\";\r\n/**\r\n * ============================================================================\r\n * MAIN CLASS\r\n * ============================================================================\r\n * @hidden\r\n */\r\n/**\r\n * Used to draw a triangle.\r\n *\r\n * @see {@link ITriangleEvents} for a list of available events\r\n * @see {@link ITriangleAdapters} for a list of available Adapters\r\n */\r\nvar Triangle = /** @class */ (function (_super) {\r\n __extends(Triangle, _super);\r\n /**\r\n * Constructor\r\n */\r\n function Triangle() {\r\n var _this = _super.call(this) || this;\r\n _this.className = \"Triangle\";\r\n _this.element = _this.paper.add(\"path\");\r\n _this.direction = \"top\";\r\n _this.applyTheme();\r\n return _this;\r\n }\r\n /**\r\n * Draws the element.\r\n *\r\n * @ignore Exclude from docs\r\n */\r\n Triangle.prototype.draw = function () {\r\n _super.prototype.draw.call(this);\r\n var w = this.pixelWidth;\r\n var h = this.pixelHeight;\r\n var path;\r\n switch (this.direction) {\r\n case \"right\":\r\n path = $path.moveTo({ x: 0, y: 0 })\r\n + $path.lineTo({ x: w, y: h / 2 })\r\n + $path.lineTo({ x: 0, y: h })\r\n + $path.closePath();\r\n break;\r\n case \"left\":\r\n path = $path.moveTo({ x: w, y: 0 })\r\n + $path.lineTo({ x: 0, y: h / 2 })\r\n + $path.lineTo({ x: w, y: h })\r\n + $path.closePath();\r\n break;\r\n case \"bottom\":\r\n path = $path.moveTo({ x: 0, y: 0 })\r\n + $path.lineTo({ x: w, y: 0 })\r\n + $path.lineTo({ x: w / 2, y: h })\r\n + $path.closePath();\r\n break;\r\n case \"top\":\r\n path = $path.moveTo({ x: w / 2, y: 0 })\r\n + $path.lineTo({ x: w, y: h })\r\n + $path.lineTo({ x: 0, y: h })\r\n + $path.closePath();\r\n break;\r\n }\r\n this.path = path;\r\n };\r\n Object.defineProperty(Triangle.prototype, \"direction\", {\r\n /**\r\n * Returns direction of a triangle\r\n *\r\n * @return value\r\n */\r\n get: function () {\r\n return this.getPropertyValue(\"direction\");\r\n },\r\n /**\r\n * Sets direction of a triangle\r\n *\r\n * @param value\r\n */\r\n set: function (value) {\r\n this.setPropertyValue(\"direction\", value, true);\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n return Triangle;\r\n}(Sprite));\r\nexport { Triangle };\r\n/**\r\n * Register class in system, so that it can be instantiated using its name from\r\n * anywhere.\r\n *\r\n * @ignore\r\n */\r\nregistry.registeredClasses[\"Triangle\"] = Triangle;\r\n//# sourceMappingURL=Triangle.js.map","/**\r\n * Functionality for drawing waved circles.\r\n */\r\nimport { __extends } from \"tslib\";\r\n/**\r\n * ============================================================================\r\n * IMPORTS\r\n * ============================================================================\r\n * @hidden\r\n */\r\nimport { Circle } from \"./Circle\";\r\nimport { registry } from \"../Registry\";\r\nimport * as $path from \"../rendering/Path\";\r\nimport * as $math from \"../utils/Math\";\r\nimport * as $utils from \"../utils/Utils\";\r\nimport * as $smoothing from \"../../core/rendering/Smoothing\";\r\n/**\r\n * ============================================================================\r\n * MAIN CLASS\r\n * ============================================================================\r\n * @hidden\r\n */\r\n/**\r\n * Draws a waved circle.\r\n *\r\n * @see {@link IWavedCircleEvents} for a list of available events\r\n * @see {@link IWavedCircleAdapters} for a list of available Adapters\r\n */\r\nvar WavedCircle = /** @class */ (function (_super) {\r\n __extends(WavedCircle, _super);\r\n /**\r\n * Constructor\r\n */\r\n function WavedCircle() {\r\n var _this = _super.call(this) || this;\r\n _this.className = \"WavedCircle\";\r\n _this.element = _this.paper.add(\"path\");\r\n _this.waveLength = 16;\r\n _this.waveHeight = 4;\r\n _this.fill = undefined;\r\n _this.fillOpacity = 0;\r\n _this.tension = 0.8;\r\n _this.applyTheme();\r\n return _this;\r\n }\r\n /**\r\n * Draws the waved line.\r\n *\r\n * @ignore Exclude from docs\r\n */\r\n WavedCircle.prototype.draw = function () {\r\n var path = \"\";\r\n var radius = this.pixelRadius;\r\n if (radius > 0) {\r\n var points = this.getPoints(radius);\r\n path = $path.moveTo(points[0]) + new $smoothing.Tension(this.tension, this.tension).smooth(points);\r\n }\r\n var innerRadius = this.pixelInnerRadius;\r\n if (innerRadius > 0) {\r\n var points = this.getPoints(innerRadius);\r\n points.reverse();\r\n path += $path.moveTo(points[0]) + new $smoothing.Tension(this.tension, this.tension).smooth(points);\r\n }\r\n this.path = path;\r\n };\r\n /**\r\n * Returns points that circle consists of.\r\n *\r\n * @param radius Radius (px)\r\n * @return Points\r\n */\r\n WavedCircle.prototype.getPoints = function (radius) {\r\n var circleLength = radius * Math.PI * 2;\r\n var halfWaveHeight = this.waveHeight / 2;\r\n var waveLength = circleLength / Math.round(circleLength / this.waveLength);\r\n var halfWaveLength = waveLength / 2;\r\n var points = [];\r\n var count = circleLength / waveLength;\r\n for (var i = 0; i <= count; i++) {\r\n var angle1 = (i * waveLength) / circleLength * 360;\r\n var angle2 = (i * waveLength + halfWaveLength) / circleLength * 360;\r\n points.push({ x: (radius - halfWaveHeight) * $math.cos(angle1), y: (radius - halfWaveHeight) * $math.sin(angle1) });\r\n points.push({ x: (radius + halfWaveHeight) * $math.cos(angle2), y: (radius + halfWaveHeight) * $math.sin(angle2) });\r\n }\r\n points.pop();\r\n return points;\r\n };\r\n Object.defineProperty(WavedCircle.prototype, \"innerRadius\", {\r\n /**\r\n * @return Inner radius\r\n */\r\n get: function () {\r\n return this.getPropertyValue(\"innerRadius\");\r\n },\r\n /**\r\n * Inner radius of the circle in pixels (absolute) or [[Percent]] (relative).\r\n *\r\n * @param value Inner radius\r\n */\r\n set: function (value) {\r\n this.setPercentProperty(\"innerRadius\", value, true, false, 10, false);\r\n this.invalidate();\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n Object.defineProperty(WavedCircle.prototype, \"pixelInnerRadius\", {\r\n /**\r\n * Calculated inner radius of the circle in pixels.\r\n *\r\n * @readonly\r\n * @return Inner radius (px)\r\n */\r\n get: function () {\r\n return $utils.relativeToValue(this.innerRadius, $math.min(this.innerWidth / 2, this.innerHeight / 2));\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n Object.defineProperty(WavedCircle.prototype, \"waveLength\", {\r\n /**\r\n * @return Wave length (px)\r\n */\r\n get: function () {\r\n return this.getPropertyValue(\"waveLength\");\r\n },\r\n /**\r\n * Wave length in pixels.\r\n *\r\n * @default 16\r\n * @param value Wave length (px)\r\n */\r\n set: function (value) {\r\n this.setPropertyValue(\"waveLength\", value);\r\n this.invalidate();\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n Object.defineProperty(WavedCircle.prototype, \"waveHeight\", {\r\n /**\r\n * @return Wave height (px)\r\n */\r\n get: function () {\r\n return this.getPropertyValue(\"waveHeight\");\r\n },\r\n /**\r\n * Wave height in pixels.\r\n *\r\n * @default 4\r\n * @param value Wave height (px)\r\n */\r\n set: function (value) {\r\n this.setPropertyValue(\"waveHeight\", value);\r\n this.invalidate();\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n Object.defineProperty(WavedCircle.prototype, \"tension\", {\r\n /**\r\n * @return Tension\r\n */\r\n get: function () {\r\n return this.getPropertyValue(\"tension\");\r\n },\r\n /**\r\n * Tension of the wave.\r\n *\r\n * @default 0.8\r\n * @param value Tension\r\n */\r\n set: function (value) {\r\n this.setPropertyValue(\"tension\", value);\r\n this.invalidate();\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n return WavedCircle;\r\n}(Circle));\r\nexport { WavedCircle };\r\n/**\r\n * Register class in system, so that it can be instantiated using its name from\r\n * anywhere.\r\n *\r\n * @ignore\r\n */\r\nregistry.registeredClasses[\"WavedCircle\"] = WavedCircle;\r\n//# sourceMappingURL=WavedCircle.js.map","/**\r\n * Functionality for drawing waved lines.\r\n */\r\nimport { __extends } from \"tslib\";\r\n/**\r\n * ============================================================================\r\n * IMPORTS\r\n * ============================================================================\r\n * @hidden\r\n */\r\nimport { Line } from \"./Line\";\r\nimport { color } from \"../utils/Color\";\r\nimport { wavedLine } from \"../rendering/Smoothing\";\r\nimport * as $path from \"../rendering/Path\";\r\n/**\r\n * ============================================================================\r\n * MAIN CLASS\r\n * ============================================================================\r\n * @hidden\r\n */\r\n/**\r\n * Draws a waved line.\r\n *\r\n * @see {@link IWavedLineEvents} for a list of available events\r\n * @see {@link IWavedLineAdapters} for a list of available Adapters\r\n */\r\nvar WavedLine = /** @class */ (function (_super) {\r\n __extends(WavedLine, _super);\r\n /**\r\n * Constructor\r\n */\r\n function WavedLine() {\r\n var _this = _super.call(this) || this;\r\n _this.className = \"WavedLine\";\r\n _this.element = _this.paper.add(\"path\");\r\n _this.waveLength = 16;\r\n _this.waveHeight = 4;\r\n _this.tension = 0.8;\r\n _this.pixelPerfect = false;\r\n _this.fill = color();\r\n _this.applyTheme();\r\n return _this;\r\n }\r\n /**\r\n * Draws the waved line.\r\n *\r\n * @ignore Exclude from docs\r\n */\r\n WavedLine.prototype.draw = function () {\r\n //super.draw();\r\n var p1 = { x: this.x1, y: this.y1 };\r\n var p2 = { x: this.x2, y: this.y2 };\r\n this.path = $path.moveTo(p1) + wavedLine(p1, p2, this.waveLength, this.waveHeight, this.tension, true);\r\n };\r\n Object.defineProperty(WavedLine.prototype, \"waveLength\", {\r\n /**\r\n * @return Wave length (px)\r\n */\r\n get: function () {\r\n return this.getPropertyValue(\"waveLength\");\r\n },\r\n /**\r\n * Wave length in pixels.\r\n *\r\n * @default 16\r\n * @param value Wave length (px)\r\n */\r\n set: function (value) {\r\n this.setPropertyValue(\"waveLength\", value);\r\n this.invalidate();\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n Object.defineProperty(WavedLine.prototype, \"waveHeight\", {\r\n /**\r\n * @return Wave height (px)\r\n */\r\n get: function () {\r\n return this.getPropertyValue(\"waveHeight\");\r\n },\r\n /**\r\n * Wave height in pixels.\r\n *\r\n * @default 4\r\n * @param value Wave height (px)\r\n */\r\n set: function (value) {\r\n this.setPropertyValue(\"waveHeight\", value);\r\n this.invalidate();\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n Object.defineProperty(WavedLine.prototype, \"tension\", {\r\n /**\r\n * @return Tension\r\n */\r\n get: function () {\r\n return this.getPropertyValue(\"tension\");\r\n },\r\n /**\r\n * Tension of the wave.\r\n *\r\n * @default 0.8\r\n * @param value Tension\r\n */\r\n set: function (value) {\r\n this.setPropertyValue(\"tension\", value);\r\n this.invalidate();\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n return WavedLine;\r\n}(Line));\r\nexport { WavedLine };\r\n//# sourceMappingURL=WavedLine.js.map","/**\r\n * Functionality for drawing rectangles with waved edges.\r\n */\r\nimport { __extends } from \"tslib\";\r\n/**\r\n * ============================================================================\r\n * IMPORTS\r\n * ============================================================================\r\n * @hidden\r\n */\r\nimport { Rectangle } from \"./Rectangle\";\r\nimport { wavedLine } from \"../rendering/Smoothing\";\r\nimport * as $path from \"../rendering/Path\";\r\n/**\r\n * ============================================================================\r\n * MAIN CLASS\r\n * ============================================================================\r\n * @hidden\r\n */\r\n/**\r\n * Draws a rectangle with waved edges.\r\n *\r\n * @see {@link IWavedRectangleEvents} for a list of available events\r\n * @see {@link IWavedRectangleAdapters} for a list of available Adapters\r\n */\r\nvar WavedRectangle = /** @class */ (function (_super) {\r\n __extends(WavedRectangle, _super);\r\n /**\r\n * Constructor\r\n */\r\n function WavedRectangle() {\r\n var _this = \r\n // Init\r\n _super.call(this) || this;\r\n _this.className = \"WavedRectangle\";\r\n // Add path element\r\n _this.element = _this.paper.add(\"path\");\r\n // Set defaults\r\n _this.waveLength = 16;\r\n _this.waveHeight = 4;\r\n _this.tension = 0.8;\r\n _this.setPropertyValue(\"wavedLeft\", true);\r\n _this.setPropertyValue(\"wavedRight\", true);\r\n _this.setPropertyValue(\"wavedTop\", true);\r\n _this.setPropertyValue(\"wavedBottom\", true);\r\n // Apply theme\r\n _this.applyTheme();\r\n return _this;\r\n }\r\n /**\r\n * Draws the waved rectangle.\r\n *\r\n * @ignore Exclude from docs\r\n */\r\n WavedRectangle.prototype.draw = function () {\r\n _super.prototype.draw.call(this);\r\n var w = this.pixelWidth;\r\n var h = this.pixelHeight;\r\n if (w > 0 && h > 0) {\r\n var p1 = { x: 0, y: 0 };\r\n var p2 = { x: w, y: 0 };\r\n var p3 = { x: w, y: h };\r\n var p4 = { x: 0, y: h };\r\n var waveLengthH = Math.min(w, this.waveLength);\r\n var waveHeightH = Math.min(h, this.waveHeight);\r\n var waveLengthV = Math.min(h, this.waveLength);\r\n var waveHeightV = Math.min(w, this.waveHeight);\r\n var td = \"\";\r\n var rd = \"\";\r\n var bd = \"\";\r\n var ld = \"\";\r\n if (this.wavedTop) {\r\n td = wavedLine(p1, p2, waveLengthH, waveHeightH, this.tension, true);\r\n }\r\n if (this.wavedRight) {\r\n rd = wavedLine(p2, p3, waveLengthV, waveHeightV, this.tension, true);\r\n }\r\n if (this.wavedBottom) {\r\n bd = wavedLine(p3, p4, waveLengthH, waveHeightH, this.tension, true);\r\n }\r\n if (this.wavedLeft) {\r\n ld = wavedLine(p4, p1, waveLengthV, waveHeightV, this.tension, true);\r\n }\r\n this.path = $path.moveTo(p1) + td + $path.lineTo(p2) + rd + $path.lineTo(p3) + bd + $path.lineTo(p4) + ld + \"z\";\r\n }\r\n };\r\n Object.defineProperty(WavedRectangle.prototype, \"waveLength\", {\r\n /**\r\n * @return Wave length (px)\r\n */\r\n get: function () {\r\n return this.getPropertyValue(\"waveLength\");\r\n },\r\n /**\r\n * Wave length in pixels.\r\n *\r\n * @default 16\r\n * @param value Wave length (px)\r\n */\r\n set: function (value) {\r\n this.setPropertyValue(\"waveLength\", value);\r\n this.invalidate();\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n Object.defineProperty(WavedRectangle.prototype, \"waveHeight\", {\r\n /**\r\n * @return Wave height (px)\r\n */\r\n get: function () {\r\n return this.getPropertyValue(\"waveHeight\");\r\n },\r\n /**\r\n * Wave height in pixels.\r\n *\r\n * @default 4\r\n * @param value Wave height (px)\r\n */\r\n set: function (value) {\r\n this.setPropertyValue(\"waveHeight\", value);\r\n this.invalidate();\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n /**\r\n * Sets which side should be waved or not. If particular side is set to\r\n * `false`, a straight line will be drawn on that side.\r\n *\r\n * @param top Top waved?\r\n * @param right Right side waved?\r\n * @param bottom Bottom Waved?\r\n * @param left Left side waved?\r\n */\r\n WavedRectangle.prototype.setWavedSides = function (top, right, bottom, left) {\r\n this.wavedTop = top;\r\n this.wavedRight = right;\r\n this.wavedBottom = bottom;\r\n this.wavedLeft = left;\r\n };\r\n Object.defineProperty(WavedRectangle.prototype, \"tension\", {\r\n /**\r\n * @return Tension\r\n */\r\n get: function () {\r\n return this.getPropertyValue(\"tension\");\r\n },\r\n /**\r\n * Tension of the wave.\r\n *\r\n * @default 0.8\r\n * @param value Tension\r\n */\r\n set: function (value) {\r\n this.setPropertyValue(\"tension\", value);\r\n this.invalidate();\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n Object.defineProperty(WavedRectangle.prototype, \"wavedRight\", {\r\n /**\r\n * @return Wave right side?\r\n */\r\n get: function () {\r\n return this.getPropertyValue(\"wavedRight\");\r\n },\r\n /**\r\n * Specifies if right side should be waved.\r\n *\r\n * @default true\r\n * @param value Waved?\r\n */\r\n set: function (value) {\r\n this.setPropertyValue(\"wavedRight\", value, true);\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n Object.defineProperty(WavedRectangle.prototype, \"wavedLeft\", {\r\n /**\r\n * @return Wave left side?\r\n */\r\n get: function () {\r\n return this.getPropertyValue(\"wavedLeft\");\r\n },\r\n /**\r\n * Specifies if left side should be waved.\r\n *\r\n * @default true\r\n * @param value Waved?\r\n */\r\n set: function (value) {\r\n this.setPropertyValue(\"wavedLeft\", value, true);\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n Object.defineProperty(WavedRectangle.prototype, \"wavedTop\", {\r\n /**\r\n * @return Wave top side?\r\n */\r\n get: function () {\r\n return this.getPropertyValue(\"wavedTop\");\r\n },\r\n /**\r\n * Specifies if top side should be waved.\r\n *\r\n * @default true\r\n * @param value Waved?\r\n */\r\n set: function (value) {\r\n this.setPropertyValue(\"wavedTop\", value, true);\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n Object.defineProperty(WavedRectangle.prototype, \"wavedBottom\", {\r\n /**\r\n * @return Wave bottom side?\r\n */\r\n get: function () {\r\n return this.getPropertyValue(\"wavedBottom\");\r\n },\r\n /**\r\n * Specifies if bottom side should be waved.\r\n *\r\n * @default true\r\n * @param value Waved?\r\n */\r\n set: function (value) {\r\n this.setPropertyValue(\"wavedBottom\", value, true);\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n return WavedRectangle;\r\n}(Rectangle));\r\nexport { WavedRectangle };\r\n//# sourceMappingURL=WavedRectangle.js.map","/**\r\n * Zoom out button functionality.\r\n */\r\nimport { __extends } from \"tslib\";\r\n/**\r\n * ============================================================================\r\n * IMPORTS\r\n * ============================================================================\r\n * @hidden\r\n */\r\nimport { Button } from \"./Button\";\r\nimport { Sprite } from \"../Sprite\";\r\nimport { registry } from \"../Registry\";\r\nimport { InterfaceColorSet } from \"../../core/utils/InterfaceColorSet\";\r\nimport * as $path from \"../rendering/Path\";\r\nimport * as $type from \"../../core/utils/Type\";\r\n/**\r\n * ============================================================================\r\n * MAIN CLASS\r\n * ============================================================================\r\n * @hidden\r\n */\r\n/**\r\n * Creates a zoom out button.\r\n *\r\n * @see {@link IZoomOutButtonEvents} for a list of available events\r\n * @see {@link IZoomOutButtonAdapters} for a list of available Adapters\r\n */\r\nvar ZoomOutButton = /** @class */ (function (_super) {\r\n __extends(ZoomOutButton, _super);\r\n /**\r\n * Constructor\r\n */\r\n function ZoomOutButton() {\r\n var _this = \r\n // Init\r\n _super.call(this) || this;\r\n _this.className = \"ZoomOutButton\";\r\n _this.padding(9, 9, 9, 9);\r\n //this.dx = - 5;\r\n //this.dy = 5;\r\n _this.showSystemTooltip = true;\r\n var interfaceColors = new InterfaceColorSet();\r\n var background = _this.background;\r\n background.cornerRadius(20, 20, 20, 20);\r\n background.fill = interfaceColors.getFor(\"primaryButton\");\r\n background.stroke = interfaceColors.getFor(\"primaryButtonStroke\");\r\n background.strokeOpacity = 0;\r\n background.states.getKey(\"hover\").properties.fill = interfaceColors.getFor(\"primaryButtonHover\");\r\n background.states.getKey(\"down\").properties.fill = interfaceColors.getFor(\"primaryButtonActive\");\r\n // Create an icon\r\n var icon = new Sprite();\r\n icon.element = _this.paper.add(\"path\");\r\n var path = $path.moveTo({ x: 0, y: 0 });\r\n path += $path.lineTo({ x: 11, y: 0 });\r\n icon.path = path;\r\n icon.pixelPerfect = true;\r\n icon.padding(8, 3, 8, 3);\r\n icon.stroke = interfaceColors.getFor(\"primaryButtonText\");\r\n _this.icon = icon;\r\n // Apply theme\r\n _this.applyTheme();\r\n return _this;\r\n }\r\n /**\r\n * Sets defaults that instantiate some objects that rely on parent, so they\r\n * cannot be set in constructor.\r\n */\r\n ZoomOutButton.prototype.applyInternalDefaults = function () {\r\n _super.prototype.applyInternalDefaults.call(this);\r\n if (!$type.hasValue(this.readerTitle)) {\r\n this.readerTitle = this.language.translate(\"Zoom Out\");\r\n }\r\n };\r\n return ZoomOutButton;\r\n}(Button));\r\nexport { ZoomOutButton };\r\n/**\r\n * Register class in system, so that it can be instantiated using its name from\r\n * anywhere.\r\n *\r\n * @ignore\r\n */\r\nregistry.registeredClasses[\"ZoomOutButton\"] = ZoomOutButton;\r\n//# sourceMappingURL=ZoomOutButton.js.map"],"names":["separators","CSVParser","_super","_this","apply","this","arguments","contentType","options","delimiter","reverse","skipRows","skipEmpty","useColumnNames","isCSV","data","getDelimiterFromData","separator","lines","split","len","length","sep","columns","lineColums","i","prototype","parse","csv","col","row","CSVToArray","empty","emptyAs","numbers","parsableNumbers","dates","parsableDates","res","cols","shift","x","replace","pop","dataPoint","undefined","maybeToEmpty","maybeToNumber","maybeToDate","push","objPattern","RegExp","arrData","arrMatches","exec","strMatchedDelimiter","strMatchedValue","DataLoader","adapter","load","source","sources","Array","isArray","promises","dispatchImmediately","url","requestOptions","Promise","all","then","result","target","error","events","isEnabled","type","code","xhr","status","message","language","translate","processData","response","catch","getParserByType","parser","getParserByData","dataLoader","DataParser","Object","defineProperty","get","numberFields","enumerable","configurable","field","value","indexOf","dateFields","dateFormatter","dateFormat","inputDateFormat","DataSource","call","_requestOptions","_incremental","_incrementalParams","_keepCount","_updateCurrentData","showPreloader","className","event_2","lastLoad","Date","event_1","disableCache","timestampUrl","_url","incremental","component","addUrlParams","incrementalParams","set","_parser","_reloadFrequency","_reloadDisposer","on","ev","_reloadTimeout","setTimeout","reloadFrequency","dispose","_language","_dateFormatter","tstamp","getTime","toString","params","clearTimeout","join","match","add","key","encodeURIComponent","processConfig","config","JSONParser","isJSON","JSON","e","_loop_1","SVGDefaults","opacity","strokeOpacity","strokeWidth","fillOpacity","fill","stroke","focusable","tabindex","Cone","angle","radius","topRadius","top","createChild","shouldClone","bottom","body","setElement","paper","layout","bodyFillModifier","lightnesses","fillModifier","applyTheme","draw","radiusBase","dx","dy","w","innerWidth","h","innerHeight","orientation","y","gradient","rotation","path","radiusY","getPropertyValue","setPropertyValue","Rectangle3D","depth","sideBack","isMeasured","_disposers","sideBottom","sideLeft","sideRight","sideTop","sideFront","sin","cos","a","b","c","d","ah","bh","ch","dh","setFill","colorStr","hex","stops","getIndex","color","filter","lightness","filters","filter2","clone","filter3","filter4","filter5","lighten","copyFrom","Slice3D","edge","toBack","sideA","sideB","edgeFill","cornerRadius","innerCornerRadius","arc","show","startAngle","innerRadius","pixelInnerRadius","endAngle","innerRadiusY","a0","b0","c0","d0","edgePath","count","Math","ceil","step","mangle","prevPoint","pp","toFront","slice","hide","AmChartsLogo","valign","defaultState","properties","urlTarget","showSystemTooltip","readerTitle","width","height","background","aColor","getFor","alternative","aGradient","addColor","aStroke","m","segments","tensionX","tensionY","desaturateFilter","desaturateFilterHover","saturation","hoverState","states","create","Button","tooltipY","iconPosition","contentAlign","contentValign","padding","setStateOnChildren","interfaceColors","label","downState","transitionDuration","role","_icon","icon","currentIcon","parent","interactionsEnabled","position","_label","removeDispose","createBackground","Circle","element","setPercentProperty","attr","pixelRadius","measureElement","_bbox","CloseButton","cursorOverStyle","bgc","downColor","bhs","getKey","bds","validate","pixelWidth","pixelHeight","invalidateLayout","applyInternalDefaults","Ellipse","invalidate","C","Grip","cs","margin","pixelPerfect","align","autoHideDelay","_autoHideTimeout","horizontalCenter","verticalCenter","Image","href","widthRatio","heightRatio","attrNS","Label","isOversized","wrap","truncate","fullWords","ellipsis","textAlign","textValign","baseLineRatio","_positionPrecision","inited","handleMaxSize","once","handleValidate","afterDraw","validatePosition","setPaper","changed","hardInvalidate","currentText","text","bbox","availableWidth","availableHeight","arrange","updateCurrentText","output","html","supportsForeignObject","populateString","dataItem","_adapterO","_currentFormat","_prevStatus","getLineBBox","lineInfo","node","parentNode","getBBox","oldW","oldH","topParent","maxWidth","maxHeight","pixelPaddingLeft","pixelPaddingRight","pixelPaddingTop","pixelPaddingBottom","rtl","_measuredWidth","_measuredHeight","display","group","getAttr","removeAttr","textPathElement","removeChildren","resetBBox","currentHeight","currentFormat","line","chunks","chunk","ignoreFormatting","currentLineHeight","firstChunk","skipTextChunks","getLineInfo","textContent","getSVGLineElement","complex","style","translateStyleShortcuts","getSvgElement","lineText","avgCharWidth","excessChars","addEllipsis","node_1","childNodes","node_2","floor","elementText","maxChars","removeChild","node_3","lastNode","lastChild","splitLines","lineText_1","cleanUp","restOfLine","splice","paddingBottom","addLineInfo","tempElement","offset","removeElement","lineInfo_1","maybeHideOversized","measureFailed","alignSVGText","dispatch","hideUnused","setCache","fo","foreignObject","lineElement","getHTMLLineElement","appendChild","clientWidth","clientHeight","overflow","setStyles","updateCenter","updateBackground","pathElement","appendDef","hideOversized","children","setAttribute","removeAttribute","getAttribute","addGroup","_rtl","_topParent","div","document","createElement","innerHTML","wordWrap","whiteSpace","direction","selectable","draggable","resizable","swipeable","addStyle","removeStyle","index","initLineCache","getCache","uid","removeChildrenByTag","divs","getElementsByTagName","setDataItem","_sourceDataItemEvents","classid","btoa","defs","createElementNS","deepInvalidate","title","applyAccessibility","relevant","state","stateId","isBaseSprite","disabled","Line","x1","y1","x2","y2","delta","positionToPoint","point1","point2","point","Modal","showCurtain","PlayButton","playIcon","marginLeft","marginRight","stopIcon","togglable","activeState","PointedRectangle","cr","pointerX","pointerY","bwh","pointerBaseWidth","maxcr","crtl","crtr","crbr","crbl","xtl","ytl","xtr","ytr","xbr","ybr","xbl","ybl","lineT","lineR","lineB","lineL","d1","d2","stemX","Infinity","stemY","arcTR","arcBR","arcBL","arcTL","PointedShape","pointerLength","Polyarc","controlPointDistance","controlPointPosition","makePath","_distance","_realSegments","points","realPoints","p","pointA","pointB","distanceAB","cpDistance","cpx","cpy","controlPoint1","cpx2","cpy2","controlPoint2","stepCount","i_1","Polygon","shapeRendering","_currentPoints","valueStr","s","segment","areaHole","areaArr","holeArr","pointsArr","area","areaAndHole","coords","pointsArr_1","hole","left","right","surface","hlen","setPath","_morpher","Polyline","deltaAngle","abs","totalDistance","distance","currentDistance","positionA","positionB","positionAB","midPoint","Polyspline","allPoints","first","last","closed_1","p0","p1","p2","p3","controlPointA","controlPointB","k","getClosestPointIndex","closest","extend","f0","f1","point_1","rules","Dictionary","prefix","InterfaceColorSet","fg","bg","alpha","abg","counter","insertKeyIfEmpty","disposer","rgba","removeKey","increment","Popup","Adapter","_elements","_IOs","_content","_title","_classPrefix","_defaultStyles","_showCurtain","_draggable","_align","_dynamicResize","_verticalAlign","_shift","_tempShift","_readerTitle","_closable","_cssLoaded","_fitTo","isTemplate","_sized","open","container","wrapper","curtain","positionElement","close","parentElement","releasePointers","forceResize","getBoundingClientRect","dynamicResize","images","image","complete","addEventListener","toStyle","round","verticalAlign","marginTop","setupDragging","header","has","unprepElement","off","content","createContentElement","getClassNames","wrapperClass","classPrefix","headerClass","titleClass","contentClass","insideClass","curtainClass","closeClass","classNames","getInteraction","disablePointers","visibility","defaultStyles","loadDefaultCSS","createCurtainElement","applyEvents","applyReaderSettings","_left","_right","_top","_bottom","el","closable","disposers","event","sprite","_spriteInteractionsEnabled","elements","classPrefixRaw","Base","Preloader","sliceContainer","backgroundSlice","progressSlice","delay","hiddenState","visible","__disabled","validateLayout","_started","animation","isFinished","QuadraticCurve","cp","Rectangle","precision","definedBBox","ResizeButton","RoundedRectangle","minSide","cornerRadiusTopLeft","cornerRadiusTopRight","cornerRadiusBottomRight","cornerRadiusBottomLeft","tl","tr","bl","br","Scrollbar","_previousStart","_previousEnd","_prevStart","_prevEnd","_isBusy","_skipRangeEvents","updateWhileMoving","minHeight","minWidth","animationDuration","animationEasing","startGrip","endGrip","updateThumb","start","end","thumb","readerLive","dispatchRangeChange","hideGrips","setSVGAttribute","readerDescription","readerOrientation","readerControls","baseSprite","uidAttr","updateSize","updateExtremes","processBackground","clickable","handleBgHit","makeBusy","spritePoint","thumbX","_thumbAnimation","animate","property","to","thumbY","makeUnbusy","_thumb","_unbusyTimeout","stopAnimations","stop","_zoomAnimation","makeUnbusyReal","bind","_usingGrip","dispatchEvents","innerWidth_1","maxX","moveTo","pixelX","readerValueNow","readerValueText","innerHeight_1","maxY","pixelY","minX","minY","_pixelWidth","percentHeight","_pixelHeight","percentWidth","min","getPosition","_start","_end","__start","max","__end","priority","skipRangeEvents","fixRange","range","updateByOrientation","_startGrip","button","processGrip","_endGrip","zIndex","handleGripDrag","inert","hoverable","cursorDownStyle","handleThumbPosition","handleDoubleClick","isFocused","preventDefault","newStart","newEnd","zoomAnimation","innerWidth_2","innerHeight_2","_hideGrips","_overDisposer","_outDisposer","asFunction","asIs","Slice","shiftRadius","realFill","updateGradient","realStroke","cx","cy","innerRect","outerRect","ix","iy","middleAngle","getTooltipX","getTooltipY","Slider","SwitchButton","leftLabel","llas","isActive","circle","p100","hs","as","switchButton","rightLabel","rlas","_leftLabel","_rightLabel","_switchButton","TextLink","brighten","Tooltip","_boundingRect","_pointTo","fitPointerToBounds","_verticalOrientation","fixDoc","getFillFromObject","dropShadow","autoTextColor","drawBackground","pointerOrientation","handleVisibility","targetSprite","isHover","invalid","textX","textY","boundingRect","textW","measuredWidth","textH","measuredHeight","ignoreBounds","documentWidth","offsetWidth","offsetHeight","addToBack","textWidth","textHeight","bgWidth","bgX","bgHeight","bgY","boundX1","boundX2","boundY1","boundY2","delayedPointTo","instantly","_pointToDisposer","pointTo","addDisposer","_animation","kill","from","setBounds","rectangle","oldRect","_boundingContainer","updateBounds","boundingContainer","rect","Trapezoid","topSide","bottomSide","leftSide","rightSide","ts","bs","ls","rs","x0","y0","x3","y3","mt","mr","mb","ml","horizontalNeck","hn","verticalNeck","vn","Triangle","WavedCircle","waveLength","waveHeight","tension","getPoints","smooth","circleLength","PI","halfWaveHeight","halfWaveLength","angle1","angle2","WavedLine","WavedRectangle","p4","waveLengthH","waveHeightH","waveLengthV","waveHeightV","td","rd","bd","ld","wavedTop","wavedRight","wavedBottom","wavedLeft","setWavedSides","ZoomOutButton"],"sourceRoot":""}